2025-07-11 19:00:00
CloudFlare R2 是大善人推出的重磅免费服务,默认即为用户提供 10G 存储空间和无限流量。不过这个无限还是有限制的,即每月写入类操作不超过 100 万次,每月读取类操作不能超过 1000万次,否则就将按量计费。最近我搬迁了 11 万多张图片到 R2 ,有点担心使用超限,所以对其作了严格的防护设置。
我需要设置防护的这个 R2 存储桶是此前在 将Soomal.cc迁移到Hugo 这篇文章中提到的 soomal.cc
网站中的图片。
该网站已经托管在 Cloudflare Pages ,由 Cloudflare Pages 提供免费服务,只需要对 html 中引用的图片进行防护。
1.限制直接对R2存储桶访问。禁止使用链接直接访问 R2 存储桶,而是只能通过 Cloudflare Workers 服务进行访问。
2.限制对图库链接的直接访问。禁止直接使用 https://images.soomal.cc/test.webp
这种网址请求图片,对所有图片的访问均需在原网站下进行。
3.对原站启用适当防护策略。由于图片本身不适合设置太多防护规则,主要是通过在原站上设置,变相增加直接请求图片链接的难度。
在 R2 设置中,不要设置自定义域访问,不要在网络上公开 R2。
在 Cors 策略中,设置仅通过原站访问。
|
|
|
|
这个脚本主要作用是将所有包含
images.soomal.cc
的请求,都通过 Workers 去访问。利用 Workers 每天 10 万次的限额(30天就是300万次),确保对 R2 存储桶的访问数不会爆单。
其实设置到这里,我的目的也就达到了。因为每天 10万次访问,已经足够这个备份网站使用。一旦超额,workers 直接罢工,图片也就无法访问了。
经过上边设置后,所有对 R2 存储桶的请求,都只能通过原站 soomal.cc
访问。
这样,就可以继续通过对原站添加必要防护,变相提升对图片的防护能力。
2025-07-10 13:00:00
最近天水幼儿园幼儿集体铅中毒事件引发广泛热议,从食品监管、工业原料、医疗检测、地下水污染到地方政府一系列“谜之操作”,导致所有怨气集中爆发。这里也趁机谈谈为什么食品安全保障这么困难。
网上对天水事件最大的质疑是,为什么幼儿园会放着便宜的食用色素不用,而使用工业染料。
这其实涉及一个深层次的“生活哲学”问题,就是在现实中我们每次遇到那些不可思议的事件结果时,总能在其背后发现一堆不可思议的过程。
也就是俗称的,当你第一次发现家里有一只蟑螂时,实际上搞不好暗地里已经有100只了。
具体到这个事件中。
当一个厨师能够想出使用染料对食品染色这种操作时,我想,就不要期望它能知道染料的成分是什么,不要期望它能知道色素比染料更便宜这回事了。
我们很多人在网上分析问题时,喜欢用逻辑推导行为过程,但实际生活中,很多时候是没有正常逻辑可言的,可能那个厨师刚好在网上刷到过染料视频,或自己在网购平台看到过随机推荐的染料商品便产生了这种想法。
作为两个小孩的父亲,我很理解网上对天水事件喊打喊杀的想法,不过这个事件从现有情况来看,相关责任人应该是很难被判死刑的。
一个争议在于,相关责任人是否故意投毒。
但从常理推断,目前很难证明这个是故意投毒行为,毕竟这种报复社会的方式,怎么都说不通: 厨师串通厨工、园长连续投毒几个月意图谋害幼儿,这已经完全超出人类理解。
从目前来看,这个事件构成生产销售有毒有害食品罪应该是疑问不大的,其他像故意杀人、故意伤害、以危险方法危害公共安全等,应该是说不大通的。
虽然生产销售有毒有害食品罪最高可以到死刑,但参照“三聚氰胺”等类似事件,一般情况是致人死亡的,才判死刑,否则还是有点困难。
当然,这种量刑最终还得看具体案情,即便没有受害人死亡,这么严重的后果,判个死刑也不是不合理。
另外,生产销售有毒有害食品罪并不需要考虑相关责任人是不是真想害人,只要是真想往食品中添加有毒有害物质就行,从现有情况看,显然是符合的。
之所以我倾向认为天水事件中这些人是因为“无知”而不是“故意”投毒,一个重要原因是我对厨师这个群体的学识水平真的不抱太高期望。
我亲戚里边有好几个厨师,有的农村搞酒席,有的在工厂当厨师,还有一个在学校食堂当厨师。
这些亲戚大部分都是高小或初中文化,你要问他们什么是色素,人家永远只有一句话:我从来不用。
我想,对于他们来说,这句“从来都不用”就已经是他们对食品安全最深刻的理解。
日常工作中,我这些亲戚对食品安全的认识,完全停留在经验层面,馊了的不能吃、臭了的不能吃、烂了的不能吃,至于成分,那不是他们能够想得清楚的事情。
问他们什么叫“食品安全”,那显然只有“原生态”才是最高标准。
比如,市场上卖的那些肉蛋鱼鸡,在他们眼里那就是“饲料猪”“饲料蛋”“饲料鱼”“饲料鸡”,都是下品食材。
一旦深入一点探讨,说这些“走地鸡”可能接触过土壤中的重金属、农药残留、寄生虫或被污染的野外水源,搞不好还不如流水线生产的“饲料鸡”安全时,不可避免就得进入“开骂”环节了。
这个问题在所谓的“食品从业人员考试”中体现的淋漓尽致。
我曾不止一次指导亲戚们参加各种“食品从业人员考试”,这些考试大多是在手机上操作,大概是在 20 分钟内回答 50 道题,80 分以上合格。
这些考试通常会区分食品安全管理人员、食品从业人员、食品负责人员和食品专业技术人员等身份,有不同的考试试题。
但是,题目确实也有点复杂,我想现实中,应该很少有厨师能够真正独立通过考试。
毕竟,都已经干厨师这行了,你还能指望他们有一定的化学、医学、生物、法律水平吗?
这里我摘录部分题目如下:
【单选题】下列哪种水产加工时禁止使用明矾浸泡?
A. 海蜇头 B. 鲎肉 C. 河豚肝脏 D. 泥螺
【单选题】集体用餐分装菜肴时,热藏温度不得低于:
A. 50℃ B. 60℃ C. 70℃ D. 80℃
【单选题】制作含维生素C的果汁时,不宜添加:
A. 山梨酸钾 B. 苯甲酸钠 C. 乳酸链球菌素 D. 纳他霉素
【单选题】某餐厅使用过期咖喱粉制作套餐,违法所得2000元,应处以:
A. 5万-10万罚款 B. 10万-20万罚款 C. 吊销许可证 D. 仅警告
【单选题】下列哪种野生菌允许加工但需标注警示语?
A. 鸡枞菌 B. 见手青 C. 松茸 D. 羊肚菌
【多选题】以下哪些深海鱼必须去除内脏后才能冷冻储存?
A. 油甘鱼 B. 鲭鱼 C. 石房蛤 D. 裸盖鱼
【多选题】下列哪组食材禁止在同一容器中预处理?
A. 黄豆芽与猪血 B. 螃蟹与柿子 C. 生牡蛎与柠檬汁 D. 菠菜与豆腐
【判断题】作为膨松剂的亚硫酸氢钠(INS 222)可用于生鲜肉类腌制。
【判断题】真空包装的溏心蛋需在4小时内将中心温度降至8℃以下。
【判断题】未取得健康证的厨师接触即食食品,可处餐厅5000元以下罚款。
当然,这也解释了,为什么大多数学校食堂,永远都是那几个菜,为什么农村酒席几乎都是固定的菜式。
毕竟只有这样才是相对安全、保险的,一旦食材类型复杂、加工过程复杂、保存过程复杂,那就得乱套了。
这次天水事件让我想到一个更宏大的背景。
我们正处在一个剧烈转型的夹缝中,几千年小农经济留下的经验主义,与快速的工业化、信息化碰撞,导致整个食品安全体系依然千疮百孔。
想想看,我们日常吃的多少东西,源头还在那些星星点点的散户手里。
自家后院养几十只鸡,地里种点菜,作坊里榨点油、腌点咸菜,这些东西往往都像毛细血管一样分散、隐秘,永远搞不清到底安不安全。
特别是很多还打着“乡村振兴”“扶贫助农”旗号,在道义上就让食品安全这个问题不了了之。
至于那庞大规模的餐饮行业,层不出穷的外卖专供食品,更是搞不清里边到底放了什么。
以目前市场监管部门的治理水平,我认为恐怕他们也是压根没能力做到监管到位。
多数时候只能靠事后追责,突击检查解决问题。
天水事件里的幼儿园,本质上也是这种“零散加工”的缩影。
规模不大,采购随意,加工过程更是全凭厨师的经验和“良心”。
在这种体系里,所谓的食品安全,往往就是墙上贴几张制度、抽屉里塞几本健康证了事。
园长、老板们首要考虑的是成本、是省事、是别吃出“馊了臭了”的“眼前”问题。
至于原料里含不含铅?添加剂用量符不符合国标?这很有可能不是他们知识储备里能容纳的范畴。
天水这个事情,讲白了还是个小概率问题,总体上,我对食品安全还是有一定信心的,起码这种事情也不是经常发生,不是大面积发生。
但另一方面,我依然对未来是否会继续发生这种问题感到悲观。
或许经过这次事件,含铅染料不得食用这个事,能在一段时期内广为人知,避免继续类似的悲剧。
但事件平息后呢,若干年后呢? 恐怕很难说大多数人都还能记得起这个教训。
我们不能指望每一个接触食品环节的个体,都天然具备专业的食品安全素养。
也不要指望通过现在的所谓“考试”“培训”就能将全国几千万餐饮从业人员安全素质和能力提升上去。
特别是现有那些扯淡的“考试”,让大量只有中低文化水平的厨师去精通化学分析、微生物控制和食品安全法规,完全不现实。
根本上,还是得让更多真正的“内行”进入到产业中,让真正懂风险点、懂操作规范,能识别原料风险,能监控加工过程的人去当好“守门员”,而不是随便挂个名,或者拿现有的人弄虚作假搞个资质凑数。
不过,这又涉及到一个扯不下的“孔乙己”长衫问题,相信也只有继续内卷,才能将真正有能力的人卷到厨房去吧。
最起码,卷去厨房搞食品安全应该比润出国刷盘子来得强。
2025-07-08 11:30:00
我的电脑桌放在家里一间墙体不够方正的房间中,房间内 3 面直墙,另一面靠窗的是弧形,而电脑桌正是按照这个弧形墙面的弧度所定制的,因此桌面与墙面完全粘和,没法像普通办公桌一样把线材从桌背后扔下去,导致出现理线灾难。
此前,我几乎没有考虑过理线这回事,都是把线材直接往显示器背后扔,只要显示器能把线材挡住就行,眼不见为净。
但这种方法,在买了一个海景房机箱后,很难再复刻。
这个机箱里边,默认就有 15 个风扇,即便去掉 8 个进出风的,也还有 7 个风扇,分别是 3 个 CPU 水冷风扇, 3 个显卡风扇,1 个电源风扇,运行起来,低频噪音很明显。
这种情况下,我不可能再像以往使用 ITX 机箱一样,直接搬到桌面上来,只能考虑将机箱放置在桌下。
这一小小改变,就给理线带来很大灾难。
我大概数了一下,桌上目前共计有 30 多条线缆需要连接。
各种线材关系错综复杂,大概有 7 个节点需要各种线材进进出出,在桌面这么狭小的范围布线,真是太困难了。
考虑到日后显卡升级,可能会出现两台电脑均连接两台显示器的情况,还得继续增加线材。
另外,由于我这间房只在显示器背后有四个墙插,使得其他接台灯、风扇、各种手机平板充电器,也都只能从显示器后方墙插上引线到桌面另一头,进一步导致桌子上整体看起来特别乱。
由于线材过多,特别是考虑到要实现桌上桌下线材互通,因此首要问题就是把桌面打洞。
在某东 10 块钱买了个开孔六件套便开干,总共打了 4 个洞,将线材能引入桌下的都引入。然后购买多个桌下理线器,使用螺丝固定到桌面下方。将笔记本电源、插线板、交换机、KVM切换器等一众设备,一股脑塞到桌子底下。
不过,由于线材数量过多,粗的、细的、长的、短的,各种线五花八门,而桌下理线器空间实际非常狭小,导致真的很难将线材弄得规整,最终也只是一顿乱塞结束。
在做上边这个图的过程中,我发现用 AI 搭配 Mermaid 制作流程图还是挺舒服的,比自己画图简单太多,而且 Mermaid 官网上渲染模板也有不少。唯一遗憾的是,本博客所用的 Hugo Theme Stack 没有内置支持 Mermaid 渲染,由于平常也少用,就不折腾,直接截图算了。
顺手再做了个家庭网络拓扑图。
2025-07-07 17:00:00
多年来,一直未使用过高刷新率的显示器,这次趁着 618 优惠活动,买了款微星型号为 272URDF E16 的显示器,主要是槽点太多,所以单开一篇文章讲讲使用过程中遇到的那些问题,以及一些显示器选购方面的个人教训。
我此前有 3 个显示器,3 套搭配方案,其中最新一个显示器都是 5 年前购买的 AOC 卢瓦尔。
前些天添加一台台式机后,台式机和 ThinkPad P53 一直在共用明基 PD2700U 显示器。但总感觉有点怪怪的,因为台式机玩游戏时,FPS 能达到 500 多,可显示器依然是 60Hz,明显搭配不怎么合理,于是想新购一台显示器。
我此前选购明基 PD2700U 和 AOC LV273HUPR 主要需求都是色彩准确和颜色丰富。这两款也是当年热门的中端显示器,前者购入价 3999,后者购入价 2999,都使用的是 IPS 面板。
但到 2025 年的当下,或许 IPS 不再是最佳选择,毕竟更强的 OLED 面板已经广泛铺货。
不过,我这次购入显示器主要为了玩游戏,在性价比驱动下,高刷新率和低延迟的 Fast-IPS 似乎是唯一的选择。
另外,我并不是追求极致高刷的用户,不想显示器就只能玩游戏,像 500Hz 以上的 TN 屏,显然不是我的需求所在。
目前主流价位(2000 以下)的 Fast-IPS 高刷显示器,主要有 144Hz 160Hz 180Hz 240Hz 320Hz 等选择。我个人觉得,上到 160Hz 就差不多了,比 60Hz 快了两倍多,除非眼睛使劲盯着屏幕某个地方的变化看,不然很难判断出与 320Hz 的区别。
分辨率与尺寸是购买显示器时最头疼的选项,当前主要是在 24 27 32 三个尺寸间纠结,其中 24 寸主要与玩游戏有关,除非预算特别低或其他特殊需求,不然很少会考虑 24 寸及以下显示器了。
在 FPS 游戏里边,24 寸应该说是黄金尺寸,再大的话,一般人眼就难以捕捉到画面边缘信息,一旦错过信息,则很容易导致误判。
分辨率方面,24 寸 1280x960 的 4:3 比例分辨率,是当前 CS2 游戏中最佳选择。这是一个沿袭了近 20 年的分辨率选择,我在 20 年前购买第一台电脑时,就是的用二手 17 寸索尼特丽珑 CRT 显示器,那时显示器最大支持 1600x1200 分辨率,而玩 CS1.6 时则调整到 800x600 或 1024x768 分辨率。
在主流游戏都在拼 4K 画质甚至 8K 画质的当下,CS2 可谓是一股清流,一举带火了低分辨率显示器的销量。甚至有专门为 CS2 开发的高刷小屏显示器,售价普遍在 5000 元以上。
不过,我早已过了硬核 FPS 玩家年龄,现在都是佛系玩,也没必要刻意追求小屏和低分辨率。此前一度纠结在 32寸 2K 与 27 寸 4K 两个选项上。
最终,还是选了 27 寸,主要原因是家里原本两个 27 寸,如果突兀来个 32 寸的,双屏扩展时,好像有点怪怪的。
显示器接口是一个很多人忽略的问题。我现有的明基和 AOC 显示器都有着比较丰富的接口。比如明基 PD2700U ,有 HDMI2.0 DP1.2 Mini-DP 1.2 三个输入接口,1 个 DP 输出接口,以及 2 个 USB-B 输入接口和 4 个 USB-A 输出接口,另外还有个 3.5mm 音频接口。这些接口足够满足我两台电脑同时使用一个显示器的需求。
但是我在查找当下在售的显示器时发现,2000 元以下的显示器里边,除了个别办公用的 60Hz 显示器之外,游戏显示器里边几乎没有一款能支持这么多接口的,大部分就只有 DP 和 HDMI 接口,少数会增加一个 3.5mm 音频接口。
显示器多接口的易用性,让我选择又犯难。游戏显示器这边,能够支持丰富接口的,几乎都是 OLED 旗舰产品,售价基本都在 4000元 以上,与我这次选购需求显然有比较大的距离。
我挑选了 4 款 27 寸 Fast-IPS 面板的双模显示器作为竞品选择,它们都拥有 4K 分辨率,可供日常使用,都拥有低分辨率下的高刷新率性能,足够游戏使用。
品牌型号 | 尺寸 | 分辨率 | 刷新率(4K/1080P) | 显示接口 | 其他接口 | 标价 |
---|---|---|---|---|---|---|
红米 G27U | 27" | 4K | 160Hz/320Hz | DP×2, HDMI×2 | 3.5mm×1 | 1599 |
华硕 XG27UCG | 27" | 4K | 160Hz/320Hz | DP×1, HDMI×1 | USB-C×1, 3.5mm×1 | 2699 |
微星 272URDF | 27" | 4K | 160Hz/320Hz | DP×1, HDMI×2 | 3.5mm×1, USB-A×2, USB-B×1 | 1799 |
AOC U27G4 | 27" | 4K | 160Hz/320Hz | DP×1, HDMI×2 | 3.5mm×1 | 1699 |
在 618 期间,这些显示器都有或多或少折扣,以及国家补贴,例如红米 G27U 叠加国补能降到 1200 元,我最后选择购买的微星 272URDF 是 1350 元。
经过一段时期使用,我对这台显示器总体还是比较满意,起码在玩游戏时达到了预期要求,相比之前 60Hz 的显示器,游戏时的画面撕裂感明显没有了,操作起来感觉更为流畅。
在显示效果方面,调整显示器为显示模式为“用户模式”,并开启 Windows 系统 HDR 功能后,整体色彩相比明基 PD2700U 没有太大显示差距,毕竟这是相隔 8 年的产品,新的 Fast-IPS 再拉跨,基本素质也提上去了。
但是在使用过程中有几个问题还是比较糟心。
我原本以为微星这个显示器对我来说只是少了 USB 接口,但没想到,最后使用时发现是显示接口少了。
此前,我的 ThinkPad P53 和明基 PD2700U 以及用来链接两者的 ThinkPad Thunderbolt 3 Dock Gen 2 扩展坞都使用的是比较老的 DP1.2 和 HDMI 2.0 接口,其中 HDMI 2.0 接口无法支持 10bit 输出,导致我长期只用 DP 线连接。
接口类型 | 带宽 | 4K配置 | 色深 | 实现方式 | HDR支持 |
---|---|---|---|---|---|
DP 1.2 | 17.28 Gbps | 4K@60Hz RGB 4:4:4 | 8bit | 原生无损 | 有限 |
4K@60Hz 4:2:2 | 10bit | 色度抽样(画质损失) | 有限 | ||
DP 1.4 | 32.4 Gbps | 4K@120Hz RGB 4:4:4 | 10bit | 原生无损 | 是 |
4K@144Hz RGB 4:4:4 | 8bit | 原生无损 | 是 | ||
HDMI 2.0 | 18 Gbps | 4K@60Hz RGB 4:4:4 | 8bit | 原生无损 | 有限 |
4K@60Hz 4:2:0 | 10bit | 色度抽样(画质损失) | 有限 | ||
HDMI 2.1 | 48 Gbps | 4K@120Hz RGB 4:4:4 | 12bit | 原生无损 | 是 |
4K@144Hz RGB 4:4:4 | 10bit | 原生无损 | 是 |
又因为 ThinkPad 雷电 3 扩展坞在外接显示器时,DP 和 HDMI 无法同时使用,要么两个 DP 要么两个 HDMI,所以我在接双屏使用时,也都是用的 DP 接口。
原来在使用明基和 AOC 或戴尔组双屏时,都用 DP 接口还没啥问题,但这次换微星显示器后才后知后觉,微星居然只有 1 个 DP 接口,直接导致我没法用 ThinkPad 同时接明基和微星两个显示器(这种情况下,我只需要微星运行在 60Hz 就行了,毕竟不需要这款老笔记本继续玩游戏)。
一个折中的方案是,我的台式机用 HDMI 接口连微星显示器,DP 接口连明基显示器,把微星上的 DP 接口让给 ThinkPad。我也是按照这个方案购买了 HDMI 数据线。
结果万万没想到,我的 RTX 2080 显卡又不支持 HDMI 2.1,它上边共 5 个输出接口,其中 3 个 DP1.4a, 1 个 USB-C 都可以通过 DSC 技术支持这款微星显示器的 4K 160Hz 10bit HDR(略微压缩画质情况下),但 HDMI 只能支持到 4K 120Hz。毕竟 DP1.4a 也拥有 32.4 Gbps 带宽,而 HDMI 2.0 只有 18 Gbps 带宽。
到这里,也就没啥办法了。只能台式机接双显示器,ThinkPad 目前没办法接双显示器。
唯一希望是后续我可能会更换 RTX2080 显卡,比如 RTX5070 之类的(相比 RTX 2080 当年的价格,RTX 5080 实在太贵),新显卡都有 HDMI 2.1 接口 ,问题也就迎刃而解。
以前没想过,显示器上的按键居然能成为吐槽显示器的理由。
但不得不说,现在这些放置在背面的显示器按钮,按起来真是太别扭了。相比而言,我还是更喜欢放置在底部的按钮。
主要是我的显示器放置的位置很低,显示器下方基本没有留出多少空间,导致伸手进去按时,手部操作受限。
特别是这么一款双模游戏显示器,需要经常性进行显示器设置。例如,调整双模模式,调整游戏和普通画面模式,设置显示刷新率,调整它的一些游戏设置等等,这个问题也就显得比较突出。
我到现在还没太搞懂双模切换的逻辑,很容易搞错设置。
主要是设置分辨率、刷新率的切换,总共有 3 个地方需要调整。
一旦搞错顺序,很容易出问题。比如,有时进入游戏后发现刷新率只有 120Hz 或 160Hz,甚至 60Hz;有时在游戏中调整分辨率时,发现画面只在显示器的左上角显示;有时调整完显示设置,发现鼠标怎么点也点不中游戏中的设置项目,就像错位一般;有时调整完设置后,鼠标箭头都找不到了。
我理解是,在正常使用 4K 160Hz 过程中,直接在显示器切换双模到 1080P 320Hz 即可。但实际上,在未进入游戏前就需要先切换双模,让显示器先进入 1080P 320Hz 状态,进入游戏后再通过游戏设置确认显示模式。
由于我不止玩一款游戏。比如,CS2 我需要低分辨率 320Hz,而 Fortnite 我更喜欢 4K 160Hz。
因此在设置这些显示模式过程中真是很糟心,经常是进入游戏后才发现又搞错了。
我此前从未在购买一个电脑硬件的过程中,花过这么长时间,折腾这么久,这次真是有点蛋疼的感觉。
总的来说还是消费降级所引发的连锁反应,按照以往的搞法,大概率也就是戴尔 U3225QE 或者雷鸟 U9 这类产品了。
可惜再也回不到从前。
2025-07-04 12:00:00
今年初,在拿到 Soomal.com 网站源码后,我将源码上传到自己 VPS 上。但由于原网站架构较为陈旧,不便于管理以及手机访问,近期我对网站进行重构,将其整体转换并迁移到 Hugo。
对于 Soomal.cc 的重构,我其实早有想法。此前也简单测试过,但发现存在不少问题,之前就放下此事了。
原网站文章数量较大
Soomal 上共有 9630 篇文章,最早能追溯到 2003 年,总字数达到 1900 万。
Soomal 上共有 32.6 万张 JPG 图片,4700 多个图片文件夹,大多数图片都有 3 种尺寸,但也存在少量缺失的情况,整体容量接近 70 GB。
文章转换难度较大
由于 Soomal 网站源码中只有文章页面的 htm 文件,虽然这些文件可能都来自同一个程序制作。但我此前对这些 htm 文件进行简单测试时,发现页面内容架构也发生过多次变化,在不同阶段使用过不同的标签来命名,从 htm 中提取信息难度很大。
编码问题:Soomal 原来的 htm 都是使用 GB2312 编码,并且可能使用的是 Windows 服务器,在转换时需要处理特殊字符、转义字符问题。
图片问题:Soomal 网站中有大量图片内容,这些图片正是 Soomal 的精华所在,但图片使用了多种标签和样式,在提取图片链接和描述时,需要尽量避免缺漏。
标签和分类问题: Soomal 网站中标签数量庞大,有近 1.2 万个文章标签,另外有 20 多个文章分类。但在文章的 htm 文件中,缺少分类的内容,分类信息只能在 2000 多个分类切片 htm 中找到;而标签部分有些有空格,有些有特殊字符,还有一些同一篇文章重复标签的。
文章内容: Soomal 文章 htm 中包括正文、相关文章列表、标签等内容,都放在 DOC 标签下,我此前没留意到相关文章列表均使用的是小写的 doc 标签,造成测试时总是提取出错。这次主要是在打开网页时偶尔发现这个问题,才重新启动转换计划。
存储方案选择困难
我原本将 Soomal.cc 放在一台 VPS 上,几个月下来,发现虽然访问量不高,但流量掉的飞快,差不多用掉 1.5TB 流量。虽然是无限流量的 VPS,但看着也比较头疼。而在转换至 Hugo 后,主流的免费服务都很难使用,包括 Github 建议仓库小于 1GB,CloudFlare Pages 限制文件 2 万个, CloudFlare R2 存储限制文件 10GB,Vercel 和 Netlify 都限制流量 100GB 等等。
考虑到 Soomal 转换为 Hugo 过程中可能存在的诸多问题,我设计了五步走的转换方案。
明确转换需求
<head>
标签中提取出文章标题。例如,<title>刘延作品 - 谈谈手机产业链和手机厂商的相互影响 [Soomal]</title>
中提取 谈谈手机产业链和手机厂商的相互影响
这个标题。DOC
标签中提取出文章的正文信息,并截断 doc
标签之后的内容。smallpic, bigpic, smallpic2, wrappic
等图片信息全部提取出来。转换文件 由于转换需求较为明确,这里我直接用 Python 脚本进行转换。
|
|
受制于原来文章 htm 文件中没有包含分类信息影响,所以只能将文章分类目录单独进行处理,在处理分类时,可以顺便将文章摘要内容一并处理。
提取分类和摘要信息
主要是通过 Python 将 2000 多个分类页面中的分类和摘要信息提取出来,并处理成数据格式。
|
|
将分类和摘要信息写入 markdown 文件
这一步比较简单,将上边提取出的分类和摘要数据逐个写入先前转换的 markdown 文件。
|
|
这一步主要是对输出的 markdown 文件中 frontmatter 部分进行修正,以适应 Hugo 主题需要。
|
|
|
|
在 htm 转 md 文件的过程中,由于只提取文章内的信息,所以原网站中很多裁切图片已不再需要。为此,可以按照转换后的 md 文件内容,对应查找原网站图片,筛选出新网站所需的图片即可。
通过本步骤,网站所需图片数量从原来的 32.6 万下降到 11.8 万。
|
|
|
|
|
|
我此前已经对网站源图进行过一次压缩,但还不够,我期望是将图片容量压缩到 10 GB 以内,用以适应日后可能需要迁移到 CloudFlare R2 的限制要求。
实测经过这次压缩,图片体积下降到 7.7GB ,但是我发现图片处理逻辑还是有点小问题。主要是 Soomal 上不仅有很多竖版图片,也有不少横版图片,另外,960px 的宽度,在 4K 显示器下还是显得有点不够看。我最终按照图片中短边最大 1280px 质量 85% 的设定转换了图片,体积约 14GB,刚好可以放入我 20GB 硬盘的 VPS 中。另外我也按短边最大 1150px 质量 80% 测试了一下,刚好可以达到 10GB 体积要求。
|
|
|
|
对于一个上万 md 文件的 Hugo 项目来说,选择模板真是很折磨人。
我试过用一款比较精美的模板测试,发现连续构建三个小时都没能生成结束;试过有的模板生成过程中不断的报错;试过有的模板生成文件数量超过 20 万个。
最后我选择了最稳妥的 PaperMod 模板,这个模板默认只有 100 多个文件,生成网站后文件总数不到 5 万,总体来说还算好。
虽然达不到 Cloudflare Page 2万个文件的限制标准,但也相当精简了,在 Github Pages 上构建花了 6 分半钟,在 Vercel 上构建花了 8 分钟。
不过,在构建过程中还是发生一些小问题,比如搜索功能,因为文章数据实在有点大,默认索引文件达到 80MB,几乎没有实用性,最后只能忍痛将索引限制在文章标题和摘要内容上。
还有站点地图生成问题,默认生成站点地图 4MB,在提交到 Google Console 后一直读取失败。Bing Webmaster 那边倒是没问题。
另外,分页问题也是个比较头疼的是。默认 12000 个标签,采用 20 篇文章一个页面,都能生成 6 万文件,在我将文章数提高到 200 一个页面后,仍然有 3.7 万个文件。与此同时,其他文件加起来也只有 1.2 万个。
不过,这个标签问题倒也也给了进一步改造的可能性,即只提取前使用数量在前 1000 位的标签,将其他标签作为标题的一部分。这样,应该可以将文件数控制在 2 万以内,满足 Cloudflare Pages 的限制需求。
由于 Hugo 项目本身只有 100MB 不到(其中文章 md 文件 80M),所以托管到 Github 没有任何问题。考虑到 Github Pages 访问速度较慢,我选择将网站部署到 Vercel,虽然 Vercel 只有 100GB 流量,但对于静态页面来说,应该是够用了。
目前仍在找。本想将图片托管到 Cloudflare R2,但看那个免费计划也有点不敢用,虽然有一定免费额度,但怕爆账单。先继续用我 7 美刀包年的假阿里云 VPS 吧。
2025-06-26 16:00:00
在知乎上看到一个稀奇古怪的观点,说当前中国的强奸率比印度还高,质疑中国是否还是一个安全的国家。经过一番研究,发现这背后确实存在一些有意思的现象。
首先,知乎上这个答案提到的数据来源确实没什么大的问题。中国和印度的数据,都源自双方警务部门数据,可以说算得上是正常的对比。而其他一些国家的案件数,有的来源检察部门,有的来自法院最终判决数,相对来说对比的范围会有所区别。
我手头上正好有一本 2024 年《中国法律年鉴》,上边摘录了 2023 年公安部的刑事立案数,其中强奸立案是 39038 宗。按照国际通用的每 10 万人犯罪率换算下来,大约是 每 10 万人 2.8 件。
而印度的数据,我从网上查到印度内政部犯罪记录局的 报告 ,从 2017 - 2022 年,每年大概都是 3 万件左右。
到这里,可以说,中印两国以相近的人口,确实统计出了相近的强奸案件数。
虽然数据上看,中印强奸案数量似乎都差不多,但这种数据很不符合公众的印象。毕竟印度的强奸案,那真是五花八门,千奇百怪,一想起来就让人心惊胆战,而中国的强奸案,从日常感受来看,绝对说不上“严重”。
例如,美国每年都针对中印等国搞所谓的“人权报告”,其中关于中国这方面的批评,一句话写完了:
(在中国)强奸妇女是违法的,可判处三年监禁至死刑。法律不承认配偶强奸或同性强奸。另有一项关于性侵犯的法律,涵盖男性受害者,但最高刑罚较轻,为五年监禁。大多数强奸指控都是通过私人和解而非起诉结案的。
而关于印度的批评,却写了三页纸 报告原文 :
(在印度)法律根据受害者年龄等因素对强奸行为规定了不同程度的惩罚。该法律将大多数强奸案件定为犯罪,最低刑罚为10年监禁,但当女性年龄超过15岁时,婚内强奸并不违法。据法律专家称,法律并未将强奸成年男性定为犯罪。强奸16岁以下女孩的最低刑期为20年至终身监禁;轮奸12岁以下女孩的最低刑期为终身监禁或死刑。国家审查委员会(NCRB)的《2021年印度犯罪报告》指出,2021年(最新数据)报告了428,278起针对女性的犯罪案件,包括强奸和家庭暴力。全国犯罪统计数据显示,来自边缘化、弱势和部落社区的女性,包括达利特女性,是尤为严重的受害者。强奸受害者的执法和法律援助不足,司法系统也无法有效解决这个问题。非政府组织国际妇女研究中心指出,强奸案定罪率低是性暴力持续不断且有时未报告的主要原因之一。非政府组织观察到,审判时间过长、幸存者支持不足以及对证人和幸存者的保护不足是主要问题。政府努力解决强奸案审判时间过长的问题,并寻求加快涉及女性的案件的审理速度。截至7月,全国已有855个快速审理法庭投入运作。此外,一些高等法院还指示州政府设立更多快速审理法庭,以迅速结案。在某些情况下,警方鼓励强奸受害者与施暴者和解,或鼓励女性强奸受害者与施暴者结婚。有报道称,在对强奸受害者进行法医检查时,警方使用了所谓的贞操测试。民间社会组织为暴力幸存者提供性侵犯意识培训和以幸存者为中心、非歧视性、保密且免费的护理,并协助其转介至三级医疗机构、社会福利和法律服务机构。一些组织还为遭受强奸的妇女和儿童幸存者提供短期庇护。其中一些服务旨在鼓励妇女和儿童举报案件。
中央政府实施了一些项目,以改善妇女在举报暴力行为时的安全保障。这些项目包括设立举报和获取医疗支持的中心、在警察局设立妇女服务台以方便举报、通过移动应用程序构建应急响应支持系统以报告紧急情况,以及为警察、检察官、医务人员和司法人员提供培训项目,以便他们以富有同情心和尊重的方式对待受害者。
今年5月,在德里举行的抗议活动中,数名女摔跤运动员被警方拘留,抗议活动要求逮捕印度摔跤联合会主席布里吉·布尚·沙兰·辛格,指控其性骚扰。针对辛格的案件正在调查中。截至10月26日,最高法院尚未就11名男子提前释放提出异议的请愿书作出裁决。这11名男子被判处终身监禁,他们在2002年古吉拉特邦骚乱期间轮奸了比尔基斯·巴诺,并杀害了其14名家人,其中包括巴诺3岁的女儿。根据法院量刑指南,这11名男子有资格获得假释,并于2022年获释。
事实上,只要稍微看看新闻就知道印度那些夸张的强奸事迹数不胜数;而中国这方面更多是关于强奸方面司法案件的争议。
奥里萨邦海滩轮奸案(2025年6月)
以色列游客与印度民宿主人遭轮奸案(2025年3月)
北方邦瓦拉纳西轮奸案(2025年4月)
西班牙网红夫妇遭袭案(2024年3月)
婚内强奸致死案(2025年2月)
柔道教练性侵未成年运动员案(2025年6月)
抛开中印两国对比,回到全球各国关于强奸率的统计来看看。
我在联合国打击毒品和犯罪局官网下载了 各国强奸案件数据 ,这不看还好,一看吓一跳。
我筛选了一下表上 150 多个国家和地区强奸率数据,其中有的国家因为没有最新数据,使用的是表上最近一年的数据。
简单排序发现,整个发达国家的强奸率几乎都遥遥领先。
其中,大英帝国以每 10 万分之 117 的强奸率荣登榜首。
美国强奸率高达 10万分之 41 。
把表格倒序排了一下,又是毁三观的结果。全球强奸率最低的是黎巴嫩,只有 10 万分之 0.01 的发生率,不到英国的万分之一。
沙特、叙利亚、巴勒斯坦等中东国家,集体处于全球领先水平。就连尼日利亚、莫桑比克、埃及等非洲国家强奸率都低于 10万分之 0.5 ,也属于全球领先水平。
这他妈都是什么鬼神仙数据!
如果只看亚洲部分数据,系统性偏差倒没有全球那么大,最高的蒙古是十万分之 16,但与最低值也差了 1000 倍以上,即便剔除最高值与最低值,以色列和沙特的差距也达到 150 倍。
我重点研究了一下这个系统性偏差的问题,结论其实就是联合国打击毒品和犯罪局在之前报告上的一句话。
这些数据反映的是司法系统运作方式,而非实际犯罪发生率。 ——UNODC 2018 年全球犯罪报告技术注释
在前边查找印度数据时,我便发现,在印度内政部犯罪记录局的报告中,就有很多稀奇古怪的数据。
比如上边这个印度法院审理强奸案的数据。2022年印度法院积压了 17万起强奸案未审理。占新收案件的接近 7 倍。
而在中国,如此高比例的积案,几乎不可能存在。特别是在刑事诉讼领域,每年统计时,最多也就全年 1/12 的案件未结,实际相当于每年底进行统计时,当月新收的案件数。
同时,我也似乎看到为什么印度强奸案数据如此偏少的一些原因。
在印度内政部报告中,印度每年有 3 成以上强奸案无法及时破案,特别是在强奸杀人案中,高达 4 成的强奸杀人案未能及时破案。
在调查取证阶段,每年印度都有 2 成以上的强奸案在调查后被撤销。最终送到法院的案件数,平均每年只有 2.6 万件。大概只占调查总数 6 成。
在法院审理阶段,印度 6 成以上的强奸案都在法院作出无罪判决,最终每年因强奸案进监狱的人数平均不到 1 万人。甚至于,在强奸杀人案中,无罪判决的比例也接近 30 %。
如同前边提到印度法院积压案件数,在最严重的强奸/轮奸杀人案件,印度也挤压了大量案件,受审人员中,平均每年只有 13% 的嫌疑人被判刑。算下来,平均得等七八年才能判下来。
到这里,我也懒得再看下去了,印度的报告确实看的人心惊肉跳。
以前总是怀疑,为啥印度一个强奸案就能搞的全国上下鸡飞狗跳,动则引发骚乱。
就这种货色,也好意思拿来跟中国比数据。确实有点吃饱了撑的。
最后讲讲为啥各国之间数据存在如此巨大差异。
比如,美国在各种人权报告中反复提到某个国家的强奸入罪标准问题,看似无的放矢,其实也是为了给自己国家的高强奸率找补。一部分原因在于,有些欧美国家会将“未经同意的任何性接触”定义为强奸,典型就是婚内强奸,一定程度拉高了强奸率。与之对比,沙特等中东国家甚至不承认婚外强奸,认为婚外强奸属于“通奸”,除了处罚强奸者,同时也要处罚被害的女性。例如,2007年,沙特 19 岁女子遭 6 人轮奸后报案,却因“单独与陌生男性同处车内”被判鞭刑 200 下监禁半年。这种情况下,相信受害人基本都无力报案了。
很多宗教国家,对强奸有着强烈的抵触情绪,被害人容易在宗教背景下遭遇污名化和社会性死亡的风险。典型的,印度、埃及以往不少轰动全球的案件中,都出现过类似现象。例如,2014 年,印度比哈尔邦一名低种姓少女遭高种姓青年轮奸后,村长老援引《摩奴法典》“污染论”裁决受害者全家缴纳 5000 卢比赎罪金,受害者嫁予施暴者之一,同时受害人家庭被逐出种姓社区,禁止使用公共水井,受害人父亲也因“未能保护种姓纯洁”自杀。
虽然各国都有警察,但讲白了,很多国家的警察未必是人,未必就能履行警察职责。典型的,2020 年,一名女子在印度被五名男子轮奸,她去报案时又被一名警察强奸;2021 年,印度一名 16 岁少女在 6 个月期间遭到 400 人强奸,其中包括两名警察;2022 年,印度一 13 岁女孩遭 4 人轮奸后报警,在警局又被负责人强奸;2024 年,印度一警察在加尔各答的州立医学院强奸谋杀一名年轻女医生引发当地骚乱。另外,像中美洲墨西哥、尼日利亚等部分军阀、帮派势力地区,警察作用几乎很难在普通人身上体现,富人自己养军队、养帮派、养警察,穷人只能认命。这种情况下,受害人大多也就选择忍气吞声了。