阅读视图

发现新文章,点击刷新页面。
🔲 ☆

冷知识:bin、sbin 与 usr/bin、usr/sbin 目录的由来

在 Linux/macOS 系统的根目录 / 下,有这样几个目录:binsbinusr/binusr/sbin

青小蛙一直搞不懂为什么要这样,直到看了 BusyBox 的核心开发者 Rob Landley 在邮件列表中吐槽这件事,才终于明白为什么,堪称 Linux 冷知识呀。@Appinn

冷知识:bin、sbin 与 usr/bin、usr/sbin 目录的由来 38

说起来,这个冷知识的来源,也十分的冷门。在 2010 年(是的,16年前),BusyBox 的核心开发者 Rob Landley 在邮件列表中直接提到:

我发现 busybox 将其链接分散到这 4 个目录中,是否存在一条简单的规则来决定每个链接位于哪个目录?

例如,我看到 kill 命令在 /bin 目录下,而 killall 命令在 /usr/bin 目录下……我不明白。
弄清楚这背后的逻辑是什么。


为什么要分这么多目录?它们到底是干什么的?

答案有些简单,也有点出乎意料,这不是特意设计出来的,而是又一个历史遗留

这要从 1970 年代说起

Unix 诞生于 1970 年代,运行在 PDP-11 这样的古老机器上。
当时的硬盘有多大?1.5MB。

冷知识:bin、sbin 与 usr/bin、usr/sbin 目录的由来 39
底部是PDP-11/40 CPU,顶安装了一个TU56双磁带DECtape驱动器。

最开始,整个系统都装在根文件系统 / 里,其中包括:

  • /bin:基本命令
  • /sbin:系统管理命令
  • /lib:库文件

后来系统越写越大,磁盘装不下了

第二块硬盘

于是需要第二块硬盘,并挂载到 /usr 目录下。

(与 Windows 不太一样,没有 C 盘、D 盘。在 Linux 下,你可以把第二块磁盘挂载到 /usr 等任何目录下)

此时,就出现了四个路径:

  • /bin/sbin必须在系统早期启动时就能用的命令
  • /usr/bin/usr/sbin系统启动完成、挂载 /usr 后才能用的命令

这解决一个当年真实存在的先有蛋还是先有鸡的问题:

先挂载磁盘才能用 mount 命令,但 mount 又在磁盘里 😂

为什么这种划分在今天已经不合理了?

Rob Landley 觉得,这套规则在现代设备,以及现代 Linux 中,已经没有意义了。

临时根文件系统

现代系统有临时根文件系统(initramfs / initrd)了,这是在内核启动后、真正的根文件系统挂载前,用来“过渡启动”的一个小型 Linux 系统。

冷知识:bin、sbin 与 usr/bin、usr/sbin 目录的由来 40

启动早期依赖的问题早就由临时根文件系统解决了,所以不再需要靠目录结构来“区分启动阶段”,

共享库

共享库是一份可以被多个程序同时使用的公共代码。它可以是:

/lib/libc.so.6
/usr/lib/libc.so.6
/usr/lib/libstdc++.so.6

没有共享库之前:

早期 Unix(1970s),程序是这样的:

  • 全部静态链接
  • 每个可执行文件里:
    • 都自带一整套函数代码
    • 比如字符串处理、IO、数学函数

举个极端但真实的例子:

ls 里有一份 printf
cp 里有一份 printf
mv 里也有一份 printf

这种方式的特点是:

  • 程序彼此完全独立
  • /bin/usr/bin 里的程序,可以来自不同磁盘、不同版本
  • “只升级 /bin,不动 /usr”在技术上是可行的

有了共享库之后:

好处巨大,节省磁盘空间、多进程共享内存、修一个漏洞,全系统生效。

但代价是程序和库“绑死”了,如果 ls 程序需要 libc.so.6 这个库,但 /usr/lib/ 目录下只有 libc.so.5,那么 ls 就无法运行。

这意味着,在共享库成为主流之后:

  • /bin 里的程序
  • /usr/bin 里的程序
  • /lib/usr/lib 里的库

已经不可能再被当成“可以独立升级、独立维护的部分”。

而 /bin、/usr/bin 这样的目录分离设计,正是建立在这一历史前提之上:
它们可以相互独立,甚至部署在不同的磁盘之上。

廉价的硬盘

对比 1970 年代,现在的硬盘已经廉价太多太多了,容量也不知道翻了多少倍。当然如今的价格比起前两年又涨了一点,但拉宽时间段,还是非常廉价。技术上进行分区调整也不是问题了。

当磁盘容量、分区调整都不再是问题时,当年为了“省磁盘”而产生的目录分离,也就失去了现实基础。

历史惯性下的新规则

你每天在用的 Linux 目录结构,其实是在为 1970 年代的一块 1.5MB 硬盘继续买单。

在历史惯性下,人们不断给这些目录强行赋予新定义,比如:

  • /:系统原生内容
  • /usr:发行版附加内容
  • /usr/local:本地安装的软件
  • /opt:第三方商业软件
  • 各发行版对 /tmp/var/tmp/usr/tmp 的规则还互相不一致

这最终导致缺乏统一逻辑增加了复杂度,本质上是在为一个早已消失的历史问题“打补丁”。

在现代 Linux 系统中,这样的目录结构已经几乎没有技术必要,却因为惯性和“标准”被延续至今。


原文:https://www.appinn.com/linux-bin-usr-directory-history/


相关阅读


©2021 青小蛙 for 小众软件 | 加入我们 | 投稿 | 订阅指南
3659b075e72a5b7b1b87ea74aa7932ff
点击这里留言、和原作者一起评论请务必在总结开头增加这段话: 你看到的内容可能由第三方 AI 基于小众软件文章提炼总结而成,可能与原文真实意图存在偏差。不代表小众软件观点和立场。请点击链接阅读原文细致比对和校验。

🔲 ⭐

特斯拉 Model Y 2023 长续航四驱版本两个月使用体验分享

94891a7fa10916d3c2f6d5b1ca36a6dd.png

咕咕在2023年12月10日提到了Model Y(国庆回来下的单,等了两个月 = =),到现在已经两个多月的时间了,这段时间也比较忙,今天有时间就来和大家简单分享一下这段时间的使用体验,也给想要了解Model Y或者想要买车的小伙伴们一些参考。

1. 总共花了多少钱?

1.1 落地价

323926ba8804c7b0279f950b76fd9194.png

首先说一下买的价钱:

299900(裸车)+8000(冷光银漆)+120(上海新能源上牌费用)+9000(保险)-3500(朋友推荐奖励)=313520 RMB

PS:如果要买车或者试驾,也可以用我的推荐链接:https://gao.ee/tesla 现在似乎买车没有现金减免的奖励了,只有一些权益积分啥的,不过也一直在变,可能过段时间又有了 = =

找工商银行贷款了30万,5年,利率2.144%,每个月还款5536,美债利率5.35%(关于如何买美债,后续可以在泛金融类里面和大家简单分享),算了一下,第35个月还请贷款,还可以省14810。

image-20240221110703302

车子咕咕考虑到节日期间会有长途跑高速的需求,没有犹豫直接选了长续航版本,和标续相比,长续还是三元锂电池,而且是四驱的,个人感觉还是很值得的。(我是19英寸的轮毂,官方CLTC 688公里,充满电表显续航529公里,实际续航下文会有分享)

55a5fb8c4117c864336d39efa721d0a3.png

至于颜色,黑色是不加价的,其余颜色都需要加价8000。黑色的漆最薄,而且也是最不耐脏的。加价的颜色中,其实红色和白色的漆是最厚的,我本来想要白色的,但是对象觉得白色的看起来像个大鼠标,就选了银色。

f3a2fc1e2121d551697815f5a0a9e939.png

当然你也可以选一个黑色,然后去贴车衣,价格好像也差不多要1w块,但是我的修车的哥哥(也有给人贴车膜车衣的)说那个是智商税,建议我买的时候买个喜欢的颜色,开就行了,不要浪费那个钱……

牌照,这个是我们决定这么快买电车的很大原因。因为之前沪牌蓝牌我不信邪,觉得自己能拍上,结果自己手动拍了6次没拍上,临近年末又有传言说可能2024年不送新能源的牌照了,加上我们的小宝是粤B的,平时晚上要7点之后才能开,有时候不方便,所以综合考虑下来,我们决定入手一台电车。

4e5709aabe236784174576bb9ed6ddae.png

保险,我们选了太平洋产险,总共差不多9000块,保500万。据说第二年会便宜一些,好像续保的时候可以要求送一些权益,比如一次喷漆啥的。

引荐奖励。通过朋友的引荐下单,朋友可以获得7000积分,我们可以少花3500元,而且还赠送了90天的增强版自动驾驶。(现在好像没了 = =)

特斯拉是直营的,价格透明,也没有砍价这一说,不需要和销售斗智斗勇,车型简单(S、3、X、Y,标准续航、长续航和高性能版本)甚至你可以在官网直接下单,这点我非常喜欢。

1.2 “装潢”费用

1.2.1 特斯拉内饰大礼包

除了这些之外,七七八八配件啥的大概还花了小2000?具体没统计,老婆买的一个特斯拉大礼包,里面啥都有 = =。其实我个人感觉没必要买那么多,几件必需品(脚垫、前后备箱垫、手机支架、平板膜和防护套、防虫网买一下就差不多了)

补几张我这边买的配件的图,这几个都还不错(尤其是手机支架,因为我不需要无线充电功能,买的这款,非常好用),蔡徐坤的那个吸铁不建议买,容易掉,我才一周就发现头不见了,后来洗了一次车,身子也不见了 = =

306f9f9f15a5897873a9842a3e952521.png4ec95d1016f88a219bac929e4ce94254.png81093ce5c5b78dcb40466361129b6446.pngbe04af4ecdd82c421de658800436309e.png5578791d7a9b916399b91e8345236815.png

1.2.2 玻璃膜

bce1c89965de28155c662c831a90a924.png

这个其实也是交车的时候定的,不过是过了一周才贴的。我本来以为是特斯拉自己人,没想到后面发现是特斯拉和3M合作的,2998,”MY特享深色全车”升级成”MY畅享深色全车”,45%隔热(感觉这个交学费了,因为之前听说夏天特斯拉顶部大玻璃会很热就搞的这个45%的,后面发现太黑了,晚上倒车的时候不摇下车窗根本看不清后视镜 = =)

1.3 后续费用

电车基本没有啥维护费,就每年120块换个空调滤芯,1w公里的时候做一下轮胎换位。充电的话如果家里有条件装充电桩(特斯拉的充电桩不免费送,要加钱的,不过那些说送充电桩的基本上也早就把价格算到你车价里了 = =),基本上5毛一度电,78度电池充满才40块,可以跑500公里,真是很香了。

我这边暂时搞不了充电桩,只能去充电站充电,特斯拉自己的超级充电桩比较贵,差不多要2块钱一度,好处就是快,而且因为有超时占用费,基本上应急补能的时候都能有空位。

一般来说我会选择去国网充电或者是蔚来的充电桩,速度比特斯拉自己的慢一点点,(20%充到80%大概慢10分钟的样子)但是便宜,均价差不多1.4-1.5的样子。

国网的充电app叫“e充电”,蔚来的用的微信小程序。

2. 续航怎么样?

车辆外观啥的,没啥好讲,大家应该已经看过很多了,下面就讲讲我最关心的一个,续航。

官方全轮驱动长续航版本的CLTC 续航里程为688 公里,这个是理论值。

表显100%电量是529 公里,529/688=76.89%

过年从上海到杭州,正好赶上雨雪天气(0-3度左右),车里塞满东西,两人一猫,全程空调自动,单踏板模式,动能回收标准,跑了3个多小时,能耗163Wh/km,换算的话,model Y长续航有78.4度(kWh)的电池,78.4/0.163=480.98 公里。

WechatIMG1463.jpg

回程的时候,天气比较适宜(15度左右),我从老家到杭州,居然跑出了139 Wh/Km的能耗,这样换算的话,78.4/0.139=564 公里。

WechatIMG1464.jpg

因为提车到现在基本是全年最低温的一段时间了,跑了3500多公里,整体能耗是165 Wh/Km,换算的话是,78.4/0.165=475.15 公里。

所以大概这台长续航的实际续航表现,目前来看,最少也有表显的,475.15/529=89.82%

如果是139 Wh/Km的能耗甚至会超过表显(这个有点夸张)

总体来看,Model Y的表显还是比较准的。

3. 有哪些优缺点?

3.1 缺点

先说缺点。

1、裸车很多地方都是毛毡材质的,为了好打理,你需要去买一堆配件(比如脚垫,后备箱垫啥的)

2、悬挂太硬,后排坐会感觉比较颠,尤其是你单踏板掌握还不是很好的情况下。

3、没有360全景影像轮毂特别容易刮花,老司机也会刮到。停路边的特斯拉你去看一眼基本轮毂都有蹭到马路牙子的痕迹。(这个有的车型似乎已经有OTA升级了3D建模,不过我的还没收到推送 = =)

dfc5d769bf9286e72f7211743ad9e40c.png

4、雨刮器自动模式不是很智能。(最新OTA升级,AP模式下已经可以选择是否自动开启雨刮器了。)

5、车机地图不如高德,有时候走的不是最优路线。

6、空调自动无法调节出风是冷风还是热风。

7、没有座椅通风。

8、后排座椅感觉还是有点短,腿部支撑不是很够,如果能长一点就好了。

8、不知道是不是无门框车窗的缘故,路噪还是挺大的个人感觉,驾驶的时候不开点音乐还是挺吵的

以上。

3.2 优点

除此之外,都是优点。

这边简单列几个感受最深的。

  • 加速快,方向盘指向非常精准,操控感极佳(大家可以自己去特斯拉店里亲身试驾一下)。这次跑高速,超车变道体验非常丝滑
  • 辅助驾驶很好用,基本版本就够用了,开高速真的会轻松很多
  • 可以自由设置油车模式还是单踏板模式,方便之前开油车的小伙伴
  • 单踏板模式真香(相信我,只要你用过就会喜欢上它,而且你并不会把油门当刹车踩,网上那些说什么单踏板模式有安全隐患,吐槽刹车失灵的,骂的,绝对是没开过的,单踏板模式反而是最安全的方式,而且你可以前期选择搭配舒适模式的动能回收,等自己熟悉了再调到标准模式的动能回收)
  • 空间大,贼能装
  • 车机很简约好用,OTA升级每次都有新功能。(AMD Ryzen处理器芯片真的很顶加上性能强劲的GPU,甚至可以在车上玩赛博朋克2077,目测可能比小米su7的高通骁龙8295要好)
  • 车辆保修维护很简单,APP上直接预约即可,维修中心的工作人员也很不错(跑长途之前预约了一次免费检测,白嫖洗车)

等等等等。

4. 总结

Model Y的销量高不是没有原因的,整体看来他就是一辆性价比不错的车子,尤其是对于我这种比较注重汽车本身性能的来说。我不喜欢和销售斗智斗勇砍价,我不需要车上冰箱彩电(当然沙发有还是不错的 = =),我也不用担心自己会因为太相信表显续航而在长途路上抛锚,更不用担心是不是过3-5年修车找不到厂家。

最后,如果你打算入手,建议入手HW4.0的硬件版本,目前应该已经有售卖了,还新增了一个快银配色,非常酷,前阵子好像换色颜色只要2000块了,而且长续航车价又回到了299900。

🔲 ⭐

【经验分享】还算顺利的香港开卡之旅——中银香港、汇丰香港、招商永隆、ZA Bank及其他虚拟银行

大A拉垮,上周趁着通行证签注快到期了去了趟香港,办了几张银行卡。

image-20240202140109085

本来是想着绑定到香港PayPal上的(香港PayPal绑定香港银行卡超过2000港币提款免手续费,大陆的PayPal提款到大陆或者美国的银行卡每笔收35刀手续费),但是发现香港PayPal需要我验证身份,没有港区ID,用不了了 = =

这边关于香港之行其他的内容之后有机会再和大家分享,这边就存粹记个流水账,把开卡部分单独和大家分享一下。

image-20240202140133263

先看结果,一共开了这些银行:

image-20240202141347822

那个右下角的Octopus是八达通,不是银行 = =

Q&A

1、预约了吗?

没有预约,中银根本预约不上,全是灰色的,汇丰预约要1个月之后,所以我都是没有预约直接去的。

2、那个理财证明的资金量是多少?我担心太少不给开?

不看你有多少钱的,不用担心

下面分享下用了哪些东西。

准备材料

  • 身份证
  • 港澳通行证
  • 过关小票
  • 地址证明(我用的是招商银行的近三个月的信用卡账单,去线下找工作人员打的,如果你身份证地址和邮寄地址是同一个的话就不需要额外地址证明了)
  • 15000港币(如果你不开招商永隆,其他的银行可以不用充钱)

额外准备的东西:

  • 一个转接插头(香港是英标的,需要转接插头)
  • 到香港地铁站可以买一个八达通(Octopus)的卡,需要200元,里面有150元余额,不过你可以透支50元,退卡的话需要11元港币的费用(虽然目前香港绝大多数场景都可以用微信和支付宝)
  • 下载一个CityMapper的APP(比高德和谷歌都好用)
  • 到丰泽的店里买一张hahasim(50块钱,都是话费,使用的时候需要实名)或者你提前手机开通漫游功能,接验证码需要用到

感谢TG的好友帮忙指导,让我少走了很多弯路,也祝愿他顺利拿到香港身份。

开户理由

想要炒美股,港股

时间选择

周一(注意香港银行周六下午和周日是不工作的。)

地点选择

我的汇丰、中银香港、招商永隆都是在元朗开的,8点15先去中银元朗大厦排队,结束之后去汇丰,最后去的招商永隆,11点30左右全部搞定。

image-20240202140720182

中银香港

开户地点:中银元朗分行

image-20240202142011495

无需存款,不用管理费,可以直接拿到卡。

8点我就到了,看到有四五个小姐姐在门口吃早餐,我也去排队了,心想居然还有人比我早,后来8点15左右她们进去了,原来是银行的工作人员 = =

image-20240202140205637

中间我跑到汇丰元朗大厦去看了一下(大概距离200米)

回来之后前面有两个人,到8点30左右排在我后面的人也渐渐多起来了,大概陆陆续续有8、9个人。

九点开门,取号,我是003,正好这边有三位客户经理。接待我的是一名小伙子,询问是开户,他带我到了他的工位那边,我直接掏出四件套给他,询问开户理由,我说炒港美股,之前有买过美债和英伟达的股票(我还额外打印了嘉信理财的对账单过去),全场很顺利。

资料录入完毕,需要他们的经理再来确认一下,刷一下工牌,然后就下卡了。

image-20240202140318064

整体耗时35分钟左右。

客户经理表示无需存款,不过需要先去楼下的机器上激活一下,激活的方法就是查询一下余额。(这边需要等一会儿,我第一次插卡查看的时候提示在更新信息,等了两分钟再查看就OK了)

image-20240202140409093

注意查询余额的机器和存钱的机器是分开的,查询余额的机器在门外,存钱的机器在门里头。

中银客户经理明确和我表示不用存钱,无管理费,不过每年最好动一动转一两笔钱。

之后会收到银行的满意度调研,客户经理强调一定要打10分,不然他不用干了 = =

eb672b31374caedffbb6e2967f157111.pngbae08762b35a2c3f4ff2b8e593aa36c2.png

汇丰one

开户地点:汇丰元朗大厦

image-20240202142046361

无需存款,不用管理费,一般可以直接拿到卡(我运气不好需要邮寄)

开完中银就来这边的汇丰了,注意汇丰元朗大厦对面也有一家中银香港,我对象是这边开的,客户经理要求存1000港币。

image-20240202140244264

汇丰这边说要开户,工作人员说要等大概3小时,现在人很多,我说先取个号吧,然后就坐电梯上了二楼(我们所在的是G层,一楼是卓越理财的,二楼是普通理财)

一进门,被震惊了,这边乱糟糟的,大家也不排队,都在围着客户经理。

我先和他说我要开户,然后他让我下载香港汇丰流动理财的app,然后点击“开立账户(繁体版)”填资料,填了一部分资料之后,有一个二维码需要客户经理用他的iPad给你扫一下才能继续填资料,全程基本上都是你自己在填东西,客户经理不问你开户理由,甚至不看你的过关小票。

注意这边如果你不小心退出了app,是需要全部从头再来的,我就不小心退出了,而且是两次 = =

扫描港澳通行证的时候,把手机和通行证给客户经理,让他帮你扫,顺利的话,填完就可以等下卡了,大概30分钟搞定。

当然你也可能遇到和我一样的悲催情况,最后一步不是提示成功,而是提示审核中。我问客户经理咋回事,他说这个的话就要人工了,我不信邪又重新填资料,提交了一次,最后一步的界面又变成了5个工作日内会有客户经理和我联系,看着边上的人一个一个都拿卡走了,很难受,没办法只能等人工,还好之前取了号的。

大概等了有一个半小时才到号,接待我的是一个小姐姐,看了我的资料说填的应该没问题,可以回去等等看,一般五个工作日之内就会收到邮件提示,然后会寄送卡片,需要自己本人签收卡片,并需要把卡片附带的回单寄回到汇丰这边,他们才会再给我寄密码函,我才能使用。

我问了下寄卡片用的是平邮还是挂号信,她说应该是挂号信。(有知道的麻烦评论区交流一下)

今天早上收到了汇丰的邮件,看样子应该是开户成功了,

95d1d8cc8c394aad473371fba0a3b8fd.png

接下来就是等寄卡,然后激活,再申请master蓝狮子了,这部分后续更新。

关于触发人工审核,可能是因为名字有重名或者你通行证没拍好,或者是随机抽查,因为其实那天也有几个人和我一样的情况,一开始我还以为是我的手机解了BL锁的缘故 = =

所以综上,汇丰如果你顺利的话,半小时就能搞定,并且拿到ATM柜员机的红狮子卡,而且不用存钱,没有管理费。

招商永隆

开户地点:香港元朗元朗安寧路 Man Yau Building

image-20240202141849518

招商永隆在大陆就可以自己下载app填资料了(选择“全新客户网点开户”),来香港只是最后一步。

招商永隆的人很少,因为不存满1w港币,每个月会有120块的管理费。

本来有了中银香港和汇丰,这家我都不打算开了,但是因为先前资料也已经提交了,想想还是开了得了。

叫号很快,简单询问了一下开户理由,回答买港股美股,要求地址证明,我拿了招商银行的信用卡账单,因为我的是去银行机器上打的,左上角没有招行的logo,客户经理表示奇怪(其他人都有),我说我这边有银行的红章,可能他们的是网上下载打印的。

然后问我带钱了吗,需要存款,我说带了。

审核通过之后,重新取号存钱。把钱+通行证+app上的账户号码给存钱的工作人员即可。

招商永隆的卡需要自己在app上申请,寄的顺丰(听说是到付),我还没有申请。

内地金葵花用户可以免管理费,即使你没有存够1w港币。

内地金葵花可以要求永隆给你开成招商永隆金葵花账户,这样可以免管理费。

ZA BANK(虚拟银行,推荐开这一个就行其实)

这个很有意思,之前看了网上说到香港连上香港Wi-Fi或者流量就能开,我到了元朗就在巴士上兴冲冲开了,结果点到最后一步,提示我不在指定区域内 = = 需要再往市区靠一靠才能成功开通。

审核很快,可以自定义卡号,za coin积分能直接换成港币,还是不错的。

注册的时候填了朋友的邀请码,还拿到了一张10%的一个月定存加息券。

有需要的小伙伴开通的时候也可以用我的邀请码:YG97D8 这样俩人都能拿到一张10%的一个月定存加息券。

除此之外,还有蚂蚁银行、天星银行、livi 理慧银行,这三家纯在线银行可以用类似的方法开通,蚂蚁好像要你上次出入境的材料,需要去支付宝里下载一下,反正全程都有指引,很简单,审核都很快。(其实开多了也没啥用,存粹是坐巴士到尖沙咀太久了,闲着没事开的,我开了就没再登录过 = =)

livi 理慧银行他家有虚拟万事达借记卡,可以绑定微信和支付宝,200元一下免手续费,ZA Bank的话好像每笔都要手续费。

za livi他们的卡消费外币(人民币美元这种)都有货转费,200免是支付宝的收费免。

如果你想内地消费直接全免手续费消费可以微信开个wechatpay hk,也就是香港钱包,这个消费是wechatpay hk转成港币后扣费,不会产生货转费,关注wechatpay hk公众号里面有开通方法。

ZA Bank也可以申请实体卡,不过需要支付25港币。

最后

还发现了香港有直接买比特币和ETH的机器,不过当时还没开卡, 身上没钱 = =

image-20240202140932495

大家有任何问题欢迎评论区交流!

🔲 ☆

10分钟把域名从西部数码转移到Cloudflare

前言

之前的cc域名国内应该是西部数据最便宜,一年好像50多块钱,而且西数家没有强制实名,所以咕咕的cc域名一直放他家。

不过西数从2022年6月15号开始需要域名实名认证了,当时转了俩cc域名到了cloudflare,统一管理(8刀/年)。虽然贵了一点点,但是心里不膈应,而且也不怕域名出现一些莫名其妙的事情。(关于这些莫名其妙的事情大家可以自行搜索一下,这边就没有统一整理了,后续有机会补上)

当时这个域名转出再转入的过程也折腾了好久。

今天偶然发现还有一只漏网之鱼没有转出,看看现在西数续费的价格,一年68,比cf还贵了,

136d2e8878ad4b75237d09e921e324da.pngdd5900b4e409b34cb9361c85de695e84.png

2023年11月28日汇率:
826373e6e488cf8b4e885cee884ae597.png

就索性把它也转出去,顺便记录一下整个过程,供后续有同样需求的小伙伴参考使用。(其他家服务商互转也是类似的操作,举一反三即可)

PS:可以看到他家新购域名是有优惠的,所以如果有新购域名需求的小伙伴,可以在新购之后的60天之后,再转移到cf,享受一下这个折扣,不过代价是,需要实名后才能转出。

正文

下面我们直接开始操作,从开始到完全转完成,全程大概15分钟时间。

西部数据域名转出准备

找到”域名转出”:

ec6b53a930c909e21f84603381890799.png

随便填一下:

ece843915368e85a4ee86061a0360580.png

填一下邮箱的验证码:

fe757c0676fd55c8693cf6cbb69740a9.png

我这边还有密保验证:

07e29d73ad95f088f592e2e9052b6722.png

然后是短信验证:

658d289f78e342530285050d63d46b40.png

ok,转移的密码已经发到邮箱了:

16710ab5c1ac9ed57851d84924f36dd2.png

登陆邮箱查看转移码,即转出密码

e5577b1edd96a60965c226b630a47852.png

登陆Cloudflare,接受域名转入

登陆CloudFlare:

2dee0b30988708a3a6e9785619b0cfb2.png

这边之前已经把dns解析放到cloudflare了,所以可以直接选择转移:

002f66f18ee15b3d9a8dddb25e754ee5.pngd3558795782f7e8f0d93e796a0d158f9.png

输入前面邮箱收到的转移密码,点击确认:

4ea45cb9c091dd16bed3a19abb0eec92.png

这边会自动弹出你之前填的一些个人信息,不过放心这部分内容,通过whois查询查不出的,而且你提交给CF的这个信息也不用是完全真实的。

点击Confirm:

c5ed64d1039be7ebc50a741096bc9ceb.png

您当前的注册商可能需要最多五天时间将您的域名转移到Cloudflare。但是,您可以通过回复他们的确认电子邮件或在他们的仪表板中批准转移来要求他们提前释放该域名。

至此,CF这边我们就搞定了。

5001528934dde1a3aad2d82c943dffaf.png

登陆西部数据,立即转移

找到域名转出列表:

d40754a00ec4191fcfd5e7dc478d56a0.png

刷新一下状态:

766fefe0297292d2508d48c1c2b37a6d.png

然后点击立即同意转出

9b7f8395e2b7cff9683d91a4ae48f8ce.png

确定:

b39e37af850597dbc4db810c840ec6a5.png18901f0b2fb24712b1f7b63ffa157f58.png

搞定了!

14ceec60e12f7de16dfeb33505b44f6b.png

检查是否转移成功

可以到CF的域名续费列表这边,看到CF显示已经成功!

a5abffae230c25a055af62624ca1aba8.png

因为我的CF绑定了paypal自动扣款,这边看到已经扣了费用(域名转入到新的服务商,默认会续费一年时间)

903a1e44759a5711f3b88c88d56cb39d.pngcefddff732a53cfb1f08b15a606f20f1.png

邮箱也确认完成。

26c7ee00af16772702d210e31af1b35e.png

好了,可以愉快玩耍起来了。

🔲 ⭐

什么才是真正的知识与智慧?

现代人都可以说是学富五车,阅读量远超孔子,那么是否现代人就比孔子聪明了?没那个傻缺敢这么吹吧!那么,什么才是真正的知识与智慧了?

什么才是聪明?

不好理解什么是聪明,那么,我们先来找个聪明人,看看聪明人有什么特点!

老子

老子,孔子可以说是聪明吧!

他们有什么成果流传于世了?

没错,就是《论语》《道德经》,能写出这种作品的人,没有那个大骗子敢说这两老爷子不聪明吧。

知识与聪明

很多人把技能,知识储量当作聪明,这其实是不对的。

读书读到博士,只能说明知识储量高,但是智慧不一定高。

一个受过基本教育的现代人,就阅读量,知识储备来说,知识量远不止学富五车,学富五十车,五百车都不止。

但是,有谁能写出《论语》《道德经》这样的集智慧之大成做?

学不出来这种作品,你能说比孔子,老子聪明?

没那个骗子敢这么大言不惭吧!

那么,什么才是真正的智慧了?到底什么才是聪明真正的评价标准?

知识与书籍

机器学习与聪明

为了更好的理解和解释智慧,这里用机器学习三要素来类比聪明程度。

机器学习评价 聪明评价
算力(cpu频率,某个特定算法专用硬件加速器,cache,内存大小等的综合评价。在某个算法算力高,在另一种算法算力低是很常见的。) 个人精力,专注力,在某一特定学科领域处理速度的综合表现。一种综合概念,经过长时间学习,训练形成的在某一特定领域解决问题的能力,包括速度,准确性等。
算法(解决问题的逻辑思路,不同算法自建性能,速度可以差距几个,甚至几十个数量级) 智慧,处理各种知识,技能的能力。偏向哲学概念,天才真正是在这里突出。可以说是天分,后天很难增加。
数据(被标注的数据) 知识储量,技能数量。剋有后天学习积累,只要肯花时间,可以积累巨量的知识。知识量足够多,但是处理知识的智慧不够时,我们称呼这种人为书呆子!

AI与智慧

科学与聪明

经过前一个章节的对比,我们可以知道,智慧更多的是一个哲学方面的概念。而科学更多的是一个对现实世界认识的知识量储备!

科技发达,不代表智慧高!

智慧高,也不代表科技发达!

中国过去几千年,智慧成果有《道德经》《论语》《孙子兵法》等等,都是远超时代的智慧结晶,领先世界几千年!

近代西方几百年,科学成果超越才超越中国,但论社会智慧成果,连两千多年前的中国都比不上。

盎克鲁撒克逊国家只是海盗穿上了西服,但本质上还是海盗,几千年一直没变。

科学

教育的目的是培养技能工人,而不是教你赚钱!

知识在哪里

  • 最前沿的知识都在行业顶尖大佬的老子里面,只通过口耳相传

  • 书本的知识一般至少落后行业10年以上

  • 论文的知识一般落后行业一年以上

  • 入门一门知识最好的方式还是章节全面的书本,碎片化的学习没法掌握一门新技能

知识也分三六九等

  • 第一等叫天机,只在对顶尖一小嘬人中流传,比如某些帝王术
  • 第二等叫真传,传内不传外,你还需要深度学习才能掌握
  • 第三等叫技术,某门手艺活,大学普及教育的都只能算技术
  • 第四等叫常识,基础教育教你的东西
  • 第五等叫鸡汤,奶头乐麻木你的东西,成功学,抖音教你的都是这类鸡汤

总结

聪明,智慧,知识是三个不同角度的评判标准。

知识储量 + 处理知识的技巧和方法 + 特定领域的专注钻研 才是真正的聪明!

🔲 ☆

WordPress 超美观免费中文主题

如题所示,本文关注的重点有四点。

  • WordPress 主题
  • 超美观
  • 免费
  • 中文

芒果帆帆用 WordPress 干各种怪事情也不是一天两天了,现在我们就来回顾一下,在过去的日子里,芒果帆帆都发现了哪些超美观的免费中文主题吧!

评价标准

芒果帆帆会从这三个方面(美观、免费、中文)来推荐主题不是没有原因的,而是有原因的(突然废话)

首先,作为一款主题,一款能在 2022 年(马上 2023 啦都要)流行的主题,无论是博客主题、下载站主题还是自媒体主题和社交圈子主题,都需要美观才能打动人心叭!无论是平面化,还是拟物化,还是简约线条或者花里胡哨——我相信都会有人喜欢的。

然后,WordPress 网站千千万,但个人站长能占一大半,不是每个人都能支付得起一个强大的付费主题。付费的优秀主题往往价格上百,有的还是年费订阅制,在这样的价格面前很多像我一样经济能力有限的同学可能就只能叹为观止了。

最后,您也一定发现了 WordPress 存储库中的大部分主题都是原生支持英语,但支持中文的主题并不多。WordPress 对中文社区的本地化不是很友好,但恰恰是中文主题才能够降低主题设置的门槛。

综上,下面我们介绍几个同时符合上述三点的主题。

主题:Sakurairo

帆域使用最久的主题是 Sakurairo,该主题是中文主题,但已经在国际化的路上了。主题支持在框架下自定义,采用后台设置页面,不支持 WordPress 的 customize API,说白了就是不能在 WordPress 主题的“自定义”选项中实时预览对主题的改动的显示效果。

截图来自 汤包 – 砂糖站 (tangbao.ltd)

主题演示站点可以在这里找到,上图是其中之一。这个页面一般被称为“第一屏”,Sakurairo 支持在第一屏中使用(多张可切换的)静态图片或视频作为背景,也可以调用外部的随机图片 API;支持使用白猫特效字体代替头像或 Logo,支持显示社交链接。您也可以在后台设置中一键关闭第一屏。

截图来自 汤包 – 砂糖站 (tangbao.ltd)
截图来自 汤包 – 砂糖站 (tangbao.ltd)

除第一屏之外,首页显示文章列表,底部显示版权和各种文字,这些都是可自定义或修改的。主题使用图片灯箱来处理用户点击图片的事件,并且支持代码高亮。

主题后台设置框架区分了不同的 TAB 窗口,但是实现了在窗口之间的免刷新切换,这使得设置变得更方便,免去每个 TAB 都要单独保存刷新的尴尬。同时主题内置自动更新功能,更新源可在 GitHub 和国内高速镜像之间切换。

主题增加了五种简码,但是不支持在 Gutenberg 编辑器中直接添加,您必须记住这五个简码才能在编辑器中使用。简码在这里:短代码 | Fuukei 周边文档。总得来说,是一款符合我们的要求的优秀主题。

Sakurairo 主题提供赞助渠道,但是没有付费增值服务。

主题:Argon

这也是截至本文发布时,帆域主站(本站)所采用的主题。本主题同 Sakurairo 主题类似,仅拥有后端配置页面,而不支持 customize API 继而无法实现前端自定义主题并实时预览。不同于 Sakurairo,本主题的后端配置页面只有一页,避免了不同 TAB 之间的切换问题。

帆域 后端 Argon 主题配置页面的一部分

本主题同样提供海量的配置选项,高度自定义化,并且为选项设置了详细的说明(Sakurairo 也有详细说明 hhh 好像忘记说了)。本主题也支持第一屏的开启和关闭,以及第一屏上的文字显示,但是帆域没有配置这些东西。

Argon 主题宣传图组

此外,Argon 主题添加的新区块可以在 Gutenberg 中直接添加,相当舒适。主题支持代码块样式,可以配置代码高亮,支持图片灯箱。

总结:优秀的个人博客主题。

主题:Kratos

Kratos 是一款两栏的个人博客主题,主题内置了 SMTP 邮件工具,可以帮助无法正常发送邮件的 WordPress 解决燃眉之急。Kratos 定制了几个小工具用于放置在侧栏,但是需要在经典编辑器(旧版小工具)的状态下才能完美适配(不是说在 Gutenberg 下不能用,但是看着真的很不爽)。

同上面两个主题一样,不支持 customize API,有免刷新的后台分 TAB 设置页面。

此外,支持 SEO,支持灯箱,高度自定义,免费,不妨碍其是一款优秀的个人博客主题。

主题:Blosky

Blocksy 也许是本页中唯一能够在 WordPress 官方存储库中发现的主题。这款主题提供付费升级服务,但是其免费版本已经十分强大,足够俘获 88% 的建站者的芳心,无论您是准备搭建博客网站、社区网站、企业网站、非盈利宣传网站,这款主题都能够通过其强大的自定义功能来帮助您。

帆域空间(www.ifanspace.org.cn)目前正在使用此主题。

没错,这款主题的所有强大的设置功能,全部支持 customize API,您可以完全在前端预览一切更改,完全不带怕的。

超级多的自定义选项,不需要任何插件即可从头到尾地定制网站。当然,主题也支持 Gutenberg、Elementor 等页面编辑器,更不怕了。

几乎完整的中文支持,虽然是出自翻译志愿者,看起来大家都很认同这款主题的强大之处,简繁都翻译得基本到位。

翻译页面 Blocksy < GlotPress | WordPress.org
页脚支持完全自定义
页眉支持完全自定义
首页的文章列表支持完全自定义

您在自定义页面目力所及的一切,都可以通过鼠标单击来实现跳转和编辑。刚刚安装的 Blosky 可能是一张白纸,但是它给你递来了一整套的绘画工具。不想从零开始?来看看别人做好的模板吧家人们!

Blosky 拥有伴侣插件,您如果需要的话可以安装,伴侣插件会拓展主题的功能并提供其他附加插件的安装。伴侣插件仅在 Blosky 主题被启用时工作。

本截图中的“有用的插件”是 Blosky 推荐的第三方有用插件,除了兼容之外与 Blosky 没有什么关系

Blosky 的高级版将为您提供一个 Pro 插件,将 Pro 插件上传并安装即可开始享用高级版主题功能。即使不使用高级版,上述的所有功能也都是免费提供的,这就是为何 Blosky 会进入到芒果帆帆的推荐名单的答案。

本推荐主题系列将在未来持续更新,芒果帆帆会不断地推送符合以上三点要求的优秀主题,还望各位多多关注!QAQ

🔲 ☆

美观实用的PPT制作教程:1-全局设计

刚刚新建的 PPT

PPT,来源于微软公司发布的 Office 套装中的一大重头:Microsoft Office PowerPoint。1987 年,PowerPoint 正式加入 Microsoft 大家庭;从 2003 年开始,PPT 拥有了现在版本的雏形;到今天的 Office 2019 和 Office 365[11] 拥有更多更花里胡哨方便快捷且美观的功能,任何人都能够通过 PPT 大显自己的一番创意。

在这个系列的教程中,我将尝试以一个专业制作 PPT 的卑微工具人[12]的视角,来为您的 PPT 创作流程提出一些建议[13]

系列目录(快速跳转)

  • 美观实用的PPT制作教程:1-全局设计
看似只是普通的 PPT 教程,其实是不止的,这其中还包含了我三年以来制作视频、建筑、当 UP 主的一些总结。
什么?你说这是怎么跟 PPT 串起来的?我不到啊?(划掉)

PPT 应该长什么样?

这也许是我们都经常看见的一种类型的 PPT。它不需要精妙的设计,不需要极佳的版式,不需要任何刻意渲染的美观,而是通过实打实的内容来惊艳人的眼球。[14]

但是这绝对不应该是 PPT 就应该拥有的模样,事实上——PPT 还可以长成下面的几种模样:

甚至可以在成品效果上媲美于视频,但是可现场操控[15]

由于原提问已经消失于知识的汪洋,因而直接链接的外部视频无法播放,还请见谅。

进阶版本的 PPT 往往不再是一个人(比如一个我这样的工具人)能解决的项目了,这种项目需要专业的平面设计、动效设计、3D 建模和内容制作,而大多数同我一样的人都是只有三脚猫功夫的 PPT 萌新()

但是这不代表我们就没有办法做出好看又有料的 PPT,首先让我们捋一捋,在开始真正地制作一个 PPT 之前,前置的准备工作都包括哪些……

确定色调和版式

我认为,在确定了一个制作主题之后,首先应该敲定的就是将要贯穿于整个成品 PPT 中的主色调。一般来说,一个 PPT 的色调自始至终都应该是不加改变的,我们称之为“配色”或“色彩搭配表(色表)”。

网络上存在很多能够为你提供有创意的配色的网站,同时你也可以在 PPT 的创作过程中修改主题配色。这一步骤最好在向 PPT 中填充内容之前完成,记住——PPT 并没有强大到智能地整个文稿中的一切都跟随你设置的配色自动地最佳适配。

大概确定好一个主要的色调,然后去确定版式。Office 365 提供来自 Office 的高级模板集成,但 2019 版并不提供。不过,除了那些早就被你用过千万次的内置版式,你还可以去别的地方寻找适合你的 PPT 模板(标注星号*的网站对非会员用户存在较大的限制):

在 PPT 内自定义一个版式与寻找一个来自互联网的版式相比没有优劣之分,以下是二者在部分方面的对比:

自定义版式

  • 高度可自定义
  • 结构清晰,易操作
  • 基本从零开始
  • 全文版式一键设置切换
  • 版式本身不存在版权/著作权问题

公共版式(大部分)

  • 高度定制化
  • 结构复杂,操作难度大,容易雷同
  • 模板中包括文稿的基本结构
  • 一旦开始,无法一键切换至其他版式
  • 若授权不当,可能存在版权/著作权问题

总之,敲定一套中意的色调和版式,然后再开始内容创作。

如果是公共版式

如果是公共版式,你也应当发现了这么一个不大和谐的问题:公共版式的本质往往也是一个演示文稿。

既然如此,最方便的做法无疑就是直接在下载来的模板的基础上修改创作,但我不建议这样操作。我的建议是保留公共版式模板的原样不去改动,无所谓是双开一个公共模板和一个空白演示文稿然后复制粘贴幻灯片,还是复制一个公共版式的副本再修改。保持非破坏性是使用公共素材时的基本操作,这可以在日后万一出现意外时方便抢救。

以上。

著作权归属问题

放在教程的第一部分足以表明我们作为内容作者对这个问题的重视程度,在现在这样的环境下,如果我们不重视著作权问题,那么我们指望谁来重视呢?

首先扫除文化沙漠,不只是需要花钱的东西才是受著作权保护的东西!当代互联网民通过搜索引擎所能找到的绝大多数内容都不是免著作权的内容,包括在上文我们寻找的公共模板,和制作 PPT 所需要的图片、图标、其他媒体资源和文本内容。

一般来说,作为内容的使用者,我们需要在遵守、尊重内容创作者的基础上使用他们所提供的内容。比如说,在包图网上,你至少需要一个在对应领域的个人 VIP 身份才能使用其中的内容,这还不包括你使用内容盈利为企业使用的情况。

另外,知识共享为人人提供了一套统一而易于遵守的著作权声明方式,即 CC(Creative Commons)协议。CC 协议已经发展到第四代,并且其第三代版本在中国大陆已经获得承认[16]。作为一种相对宽松的著作权许可协议,CC 协议使用一组“权限”来标注内容使用者所拥有的和所受限的行为,我以后可能会抽个空写点东西谈一谈这个协议,以及它的整个家族的来世今生。

CC 协议的一大特点是,在遵守协议的限制的前提下,完全自由使用;创作者可以在内容发布后更改协议,但已授权的许可仍然具有法律效力。需要注意,CC 0 是一种著作权人放弃作品的一切权利的声明,但是这不代表该作品可以被随意使用[17]

任何作品都可以拥有自己的许可协议,就像任何软件都可以拥有自己的开源协议(或者不开源)。等您的 PPT 大功告成,你也可以给自己的作品加上一个许可协议,可以是现成的 CC 系列协议之一,也可以是自定义的许可协议,那就是另一门学问了。

记住,作为内容的使用者和创作者,重视知识,重视著作权,不仅是在帮助别人,也是在帮助自己。

🔲 ☆

随机数生成算法与其图形应用

By KSkun, 2020/12

注:由于本文章面向非专业读者,其中的描述可能不够准确。需要获取准确的说明请阅读参考资料等。

什么是随机数

随机数是一种在各种行业中被广泛应用的工具。在密码学中,我们利用随机数生成随机密钥;在图形学中,我们利用随机数进行蒙特卡洛积分,计算渲染的结果;在统计学中,我们利用随机数进行抽样调查,减小统计的工作量。

对于随机数的不同用途,我们对随机数的要求不一,因此随机数也存在着多种定义[1]

  • 统计学伪随机数:指生成的随机数大致均匀分布在其取值空间中。 例如,对于统计学伪随机数比特流而言,其均匀分布即样本中的 1 与 0 的数量大致相同;对于在二维有限空间中生成的统计学伪随机数点而言,图 1-1 是较均匀的分布。
  • 密码学安全伪随机数:指取得随机数样本的一部分,不能轻易计算出样本的剩余部分。 在密码学中,随机数通常用于生成成对或成组的密钥,如果随机数样本可以预测,则获得其中的一部分密钥,其余密钥也有被破解的风险。
  • 随机数:随机样本不可重现。 由量子力学可知,在自然界中存在具有真随机性的现象,但我们很难采集这些随机性;常用的随机性通过物理噪音采集,但也只是接近理想的真随机数。
图 1.1 利用 Sobol 序列生成的二维随机数点[2]

以上三个随机数的条件是逐渐增强的,获得它们的难度也是逐渐增加的。因此我们需要面向随机数的使用场景选择合适的随机数产生方式,以实现安全性与性能的最佳匹配。

噪声也很有用:真随机数的获取与使用

真随机数的获取机理

真随机数生成器(True Random Number Generator,TRNG)用于生成真正的随机数,即不可预测、不可重现的随机数。目前应用中的真随机数大多来自于物理定律保证的随机性,根据原理可以分为量子和经典两种类型。接下来分别简单介绍两种随机性的采集。[3]

量子随机性

量子随机性的来源主要可以分为两类:原子或更小尺度的量子现象,如原子的衰变;或热噪声,如气体分子的碰撞。以下是一些可以被采集的量子随机性源:

  • 散粒噪声(Shot Noise):观测微观粒子时,样本数量足够小时,可以观测到数据产生涨落变化,这种涨落便是散粒噪声。如可以用光电二极管采集光源的光子,由于不确定性原理,光子作用在二极管上会在电路中产生噪声;
  • 衰变辐射源:原子的衰变是随机过程。可以用盖革计数器采集这种衰变的随机性;
  • 晶体管实现的放大电路:在使用晶体管放大信号时,发射极富含电子,这些电子偶尔会穿越势垒从基极离开,可以使用放大电路放大这一随机性并采集。

经典随机性

经典随机性通常来源于热现象,但由于温度越高热现象越剧烈,降低温度可能会减少热随机性。以下是一些可以被采集的热随机性源:

  • 热噪声(Johnson-Nyquist Noise):导体内部的电荷在热运动时产生的电噪声,可以通过放大电路放大并采集;[4]
  • 二极管的击穿:齐纳二极管通常工作在反向击穿区起稳压作用,击穿时也会产生噪声;
  • 大气噪声:环境中存在形式为电磁波的噪声,可以通过一个无线电接收器采集。

Linux 中的真随机数:/dev/random

Linux 中存在两个与随机数相关的虚拟设备:/dev/random/dev/urandom。这两个设备可以输出随机比特流,用户也可以通过输入数据增加其熵池中的熵。两个设备的区别是,当熵池中的熵低到一定程度时,前者会阻塞并等待熵增加,后者则不会阻塞,但可能导致输出的随机性较差。

Linux 的这些设备可以认为是真随机数生成器。其随机性来源自计算机系统运行中的噪声,具体而言,是 IO 操作的时间戳。磁盘、网络以及键盘、鼠标等设备的输入时间戳会被捕捉,并截取其毫秒或微秒部分的数值,这一部分的数值通常具有随机性。[5]

采集到随机性后,系统将其与熵池中的现有熵进行一系列数学组合,增加熵池中的熵。在生成随机数时,系统使用 SHA-1 对整个熵池计算散列值,这个值便是随机数的输出。

统计学工具:准随机数生成器

蒙特卡洛方法往往需要均匀分布在一定空间中的随机数,准随机数生成器(Quasi-Random Number Generator,QRNG)便是用于生成这样一系列随机数的工具。具体而言,常用的准随机数序列包括:Halton 序列、Sobol 序列等。[6][7]这些序列在选取不同参数时,呈现出低相关性,因此可以用于生成随机数。

Van der Corput 序列

我们先给出 Van der Corput 序列的定义:给定一个正整数 $b$ 作为基,对于一个整数 $i$,其可表示为 $b$ 进制数 $i=\sum a_l(i) b^l$,则 Van der Corput 序列可以由正整数序列通过下列变换获得

$$ \mathbf{\Phi}_b(i) = (b^{-1} \ b^{-2} \ \cdots \ b^{-M}) \cdot (a_0(i) \ a_1(i) \ \cdots \ a_{M-1}(i))^{\mathbf{T}} = \sum a_l(b)\cdot b^{-(l+1)} $$

这可以看做将一个数字的 ​ 进制表示镜像翻转到小数点右侧,如下图所示是一个以 2 为基的 Van der Corput 序列的一部分:

图 3-1 部分以 2 为基的 Van der Corput 序列[7]

容易发现,这个序列的每一个点都是取目前最长的未覆盖区域的中点,因此具有平均分布的特性。

Halton 序列与 Hammersley 点集

Halton 序列通过下式生成:

$$ \boldsymbol{X}_i = (\mathbf{\Phi}_{b_1}(i) \ \mathbf{\Phi}_{b_2}(i) \ \cdots \ \mathbf{\Phi}_{b_n}(i)) $$

其中,$b_1, b_2, \dots, b_n$ 取一些互质的质数。由于每一维都是一个 Van der Corput 序列,如此得到的 $n$ 维空间中的一些点在每一维上都是均匀分布的,因此其也具有均匀分布的性质。

而 Hammersley 点集通过下式生成:

$$ \boldsymbol{X}_i = \left(\dfrac{i}{N} \ \mathbf{\Phi}_{b_1}(i) \ \mathbf{\Phi}_{b_2}(i) \ \cdots \ \mathbf{\Phi}_{b_{n-1}}(i)\right) $$

它和 Halton 序列的区别只有第一维是 ​ 上均匀分布的,由于这一区别,其平均分布的性质较 Halton 序列更好。此外,生成 Hammersley 点集需要知道样本点的总数量。下图展示了数量为 100 的二维 Halton 序列和 Hammersley 点集的分布状况:

图 3-2 数量为 100 的二维 Halton 序列(左)[7]
图 3-3 数量为 100 的二维 Hammersley 点集(右)[7]

这些序列的缺点是,当基数选取的较大时,生成的前一些点容易呈线性相关性,如基为 17、19 的 Halton 序列的前 16 项为 $(1/17, 1/19), (2/17, 2/19), \dots, (16/17, 16/19)$。为了避免此问题,通常可以丢弃生成的前一些点,或使用一些手段打乱序列的顺序。打乱顺序并不会影响序列的平均分布性质和无关性。[8]

Sobol 序列

让我们修改一下 Van der Corput 序列的生成方式,在翻转之前先乘以一个生成矩阵 $\mathbf{C}$,即:

$$ \mathbf{\Phi}_{b,\mathbf{C}}(i) = (b^{-1} \ b^{-2} \ \cdots \ b^{-M}) \cdot [\mathbf{C} \cdot (a_0(i) \ a_1(i) \ \cdots \ a_{M-1}(i))^{\mathbf{T}}] $$

而 Sobol 序列则可以通过下式生成:

$$ \boldsymbol{X}_i = (\mathbf{\Phi}_{2,\mathbf{C}_1}(i) \ \mathbf{\Phi}_{2,\mathbf{C}_2}(i) \ \cdots \ \mathbf{\Phi}_{2,\mathbf{C}_n}(i)) $$

即,Sobol 序列的每一维都是以 2 为基的,带不同生成矩阵的类似 Van der Corput 序列。它也具有均匀分布性质,且是对于每一维的 2 的幂次等分区域都会恰好有一个样本点。为了得到分布良好的数列,且避免类似 Halton 序列前几个点出现的线性相关性,生成矩阵需要精心设计,可以在相关资料中获取设计好的生成矩阵。

很快啊,啪一下就生成了:伪随机数生成器

真随机数的获得需要采集物理现象,准随机数的获得可能需要大量运算,生成这些随机数的成本都较高。为了适应需要快速获得随机数的场景,我们可以降低对随机数性质的要求,则伪随机数生成器(Pseudo Random Number Generator,PRNG)就被提了出来。它用于生成近似具有随机数分布的特性,但可能可以通过分析预测的伪随机数,出于性能考量,其算法具有快速计算的特征。[9]

线性同余生成器

线性同余生成器(Linear Congruential Generator,LCG)生成随机数的原理基于一个迭代公式:

$$ X_{n+1}=(aX_n+c) \bmod m $$

这种算法在早期是最常用的随机数生成算法,因为其计算简单,且当时并没有发现更好的方法。例如,C 中的 rand() 函数便是以这种方法实现的。[10]

这一方法产生的随机数周期与参数 $a, c, m$ 值的选取有关,根据取模运算的性质,这一算法生成随机数的周期最多为 $m$,因此存在周期较小的问题。[11]

梅森旋转算法(梅森转转转)

梅森旋转算法(Mersenne Twister,MT)是一种于 1997 年新发明的伪随机数生成算法。该算法的运算非常适合计算,且周期达到了 $2^{19937}-1$ 规模,这个数字被称作梅森质数(Mersenne Prime),这也是该算法名的由来。[13]

为了清晰地分析 MT 算法的流程,我们先给出一个伪随机数生成器的抽象工作流程:

图 4-1 伪随机数生成器的抽象工作流程[12]

如图所示,我们先用种子(seed)初始化一个初始状态,此时可以通过一个生成函数从状态中生成随机数,生成后通过一个转换函数将当前状态转换成下一个状态。在 MT 中,生成随机数的函数被称为 temper,转换状态的函数被称为 twist。接下来我们按照工作流的先后顺序解释算法各部分的流程[13][15],下面给出了 MT 的全流程示意图,读者也可以结合该图理解。

图 4-2 梅森旋转算法的全流程示意图[14]

初始化

MT 算法的工作区包含 $n$ 个 $w$ 位整数组成的数组 $x_0, x_1, \dots, x_{n-1}$,初始化的工作即是通过种子计算出这些整数的值。下式用于迭代地计算这些整数的值:

$$ x_i=f \cdot {x_{i-1} \oplus [x_{i-1} \gg (w-2)]} + i $$

其中,$\oplus$ 表示按位异或,$\gg$ 表示二进制右移,$\cdot$ 表示常规的整数乘法。通过上式即可获得初始状态的数值,但初始状态不能直接用于生成随机数,必须要经过一次 twist 转换到下一状态。

twist

twist 是 MT 的状态转换函数,其通过下式迭代地计算下一状态的值:

$$ x_{k+n} = x_{k+m} \oplus [(\operatorname{upperbits}x_k || \operatorname{lowerbits}x_{k+1}) \cdot \mathbf{A}] \ (\text{for } k: \ 0\rightarrow n-1)$$

其中,$\operatorname{upperbits}$ 代表该整数的高 $w-r$ 位(低位填 0),$\operatorname{lowerbits}$ 代表该整数的低 $r$ 位(高位填 0),$||$ 代表二进制或,在这里的作用是将高位和低位组合起来,其他记号同上。通过上式计算出的 $x_n, x_{n+1}, \dots, x_{2n-1}$ 即为下一状态的值。

这里的 $\mathbf{A}$ 是一个矩阵,如果将一个 $w$ 位的整数看成是 $w$ 维的向量,则上式中则是令此向量乘上矩阵 $\mathbf{A}$。该矩阵定义如下:

$$ \mathbf{A} = \begin{pmatrix} 0 & \mathbf{I}_{w-1} \\ a_{w-1} & (a_{w-2}, \dots, a_0) \end{pmatrix} $$

则乘上该矩阵的作用等效为下式:

$$ x\mathbf{A} = \begin{cases} x \gg 1, & x_0=0, \\ (x \gg 1) \oplus a, & x_0=1. \end{cases} $$

这一操作的设计将在之后提到。

temper

容易发现,MT 的一个状态包括了 $n$ 个整数 $x_0, x_1, \dots, x_{n-1}$,其中每一个整数都可以用于产生一个随机数,因此一个状态共可以产生 $n$ 个随机数。产生随机数时,我们取出下一个未使用的数字 $x_m$,并进行如下操作:

$$ \begin{cases} y=x\oplus[(x\gg u)\&d] \\ y=y\oplus[(y\ll s)\&b] \\ y=y\oplus [(y\ll t)\& c] \\ z=y\oplus (y\gg l) \end{cases} $$

其中 $u, s, t, b, c, d$ 都是参数,$\ll$ 和 $\gg$ 分别代表二进制左移和右移,$\&$ 代表按位与。操作后产生的 $z$ 即为此次生成的随机数。

线性反馈移位寄存器与 twist

为了解释 MT 算法的核心操作 twist,我们首先要引入一个概念:线性反馈移位寄存器(Linear Feedback Shifting Register,LFSR)

学过数电的同学对移位寄存器的概念并不陌生,该寄存器支持存储几个位,并支持将存储的位进行左移或右移,空出来的一位通过外部输入的信号指定。而 LFSR 则是将空出来的一位通过一个反馈函数进行迭代异或来指定的,因此被称作线性反馈。

对于一个 4 位的 LFSR,有反馈函数 $f(x)=x^4+x^2+x+1$ ,则反馈应该通过高 4、2、1 位迭代异或后生成,即 $a_{\text{new}}=a_3\oplus a_1\oplus a_0$。令其初始状态为 1000,则迭代进行向右移位,其状态变化:1000→1100→1110→0111→0011→0001→1000。容易发现此处形成了一个长为 6 的状态环。

对于一个 $w$ 位的 LFSR,其最多有 $2^w$ 种可能的状态,其中全 0 是无效状态,因此有 $2^w-1$ 种有效状态。当反馈函数 $f(x)$ 满足某些条件时,可以让 LFSR 的状态环长度达到最大值 $2^w-1$。

图 4-3 MT 看做 LSFR 的示意图[15]

让我们回头来看 twist 的流程,它包含一个迭代进行的递推式,如果将 $x_{k+n}$ 看做 $x_{k-1}$,则可以认为 $x_{k+n}$ 便是其中的反馈位,该反馈位通过 $x_k$ 的高位和 $x_{k+1}$ 的低位拼接,再与 $x_{k+m}$ 进行迭代异或得到。因此 MT 可以看做一个 $nw-r$ 位的线性反馈移位寄存器,一次 twist 本质上在做 $w$ 次原子化的反馈移位。根据上面我们得到的结论,MT 的周期最大可达 $2^{nw-r}-1$,一组精心设计的参数可以令其达到梅森质数的周期大小,作为参考,MT19937 的参数为:

图 4-4 MT19937 的参数[13]

基于上述过程,容易发现,MT 的运算大多为简单的加、乘与位运算,对于 CPU 而言这些运算比取模、浮点数与矩阵更快,因此 MT 是高效率的。MT 的周期高达 $2^{19937}-1$,在一般应用中可以不用考虑其周期问题,因此 MT 是性质好的。这就是为什么现在主流的随机数算法都采用了 MT19937,其中包括 C++11 中引入的 std::mt19937

一个 MT19937 的 C++ 实现可以参见参考资料的 [16]。

Xorshift 随机数生成器

2003 年发明的 Xorshift 随机数生成器系列也基于 LSFR,但并没有 MT 中那么复杂的规则。它通过多次异或移位后的状态来生成随机数,移位的规则需要精心构造才能保证随机数的性质。

例如,下面是一个最简单的 32 位 Xorshift 随机数生成器的 C 源代码[17]

#include <stdint.h>
​
struct xorshift32_state {
  uint32_t a;
};
​
/* The state word must be initialized to non-zero */
uint32_t xorshift32(struct xorshift32_state *state)
{
    /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */
    uint32_t x = state->a;
    x ^= x << 13;
    x ^= x >> 17;
    x ^= x << 5;
    return state->a = x;
}

图形学中的随机数:全局光照渲染

随机数的一个应用便是在图形学中广泛存在的蒙特卡洛方法。蒙特卡洛方法通过随机采样对函数的积分值进行估计,从而快速计算出一些不便计算的积分值,且估计的过程可以并行化,便于在 GPU 上计算。

在这一节中将介绍全局光照渲染的光线追踪方法,来展现随机数与蒙特卡洛方法在图形学中的应用。[18][19]

蒙特卡洛方法

蒙特卡洛方法(Monte Carlo Method)是一种通过随机采样进行大量实验,根据实验结果来计算不易计算的积分结构或得到概率分布等。根据大数定理,蒙特卡洛方法在采样数越大的时候,估计结果越接近真实值。

下面以一个例子来理解蒙特卡洛方法。利用蒙特卡洛方法可以求圆周率 π,我们画一个半径为 1、圆心在原点的圆,并取其右上角在 (1, 1) 的外切正方形,接下来在 $(-1,1)^2$ 空间中随机取一些样本点,利用点到圆心的距离判断是否在圆内。假设总样本数为 $n$,在圆内的样本数为 $m$,则圆与外切正方形的面积之比为 $\dfrac{m}{n}$,而 π 可以根据下式求出:

$$ \pi = \dfrac{m}{n} \cdot 2^2 $$

图 5-1 利用蒙特卡洛方法求 π 的值[18]

全局光照渲染原理

在本例中,我们只介绍较为简单的模型。

图 5-2 环境光渲染示意图[19]

如上图所示,我们想求出观测者观测到给定点 $p$ 的亮度值 $L_o(p, \omega_0)$,其中 $\omega_0$ 为给定点 $p$ 出射到观测者的光线角度。考虑光线入射到 $p$ 点后发生反射,再出射到观测者眼中,则我们可以反着找出哪些入射光可以反射到观测者眼中即可。

给定一个入射角度 $\omega_i$,要找出入射光强 $L_i(p, \omega_i)$ 是简单的,根据光沿直线传播的原理,可以考虑反着求出该光的传播路径,即反着射出一束光,如果路径与某一光源相交,则该光的入射光强可通过光源参数求出。

由于 $p$ 点的反射性质存在漫反射成分,入射角度具有连续的取值区间。假设 $p$ 点自身不发光,则下式可以表示 $p$ 点出射的亮度:

$$ L_o(p,\omega_0) = \int L_i(p,\omega_i)f_r(p,\omega_i,\omega_o) \mathrm{d}S$$

此积分值往往较复杂,在实时渲染中通常采用蒙特卡洛方法快速计算出积分的值。即,从取值区间中取出随机样本,对于每一个角度进行光线追踪,并对所有追踪得到的亮度值求平均叠加。在实际应用中,样本数越多,则积分精度越高,渲染效果越接近理想的物理效果。

GPU 在计算上述流程时,可以并行地生成多组相关度低的随机数作为样本,之后并行地对大量样本进行追踪和计算,随机数生成与蒙特卡洛方法的并行性和高效性在此充分展现出来。

结语

本文的灵感来源为 NVIDIA Developer 上的一篇文章《Efficient Random Number Generation and Application Using CUDA》(参考资料 [18]),该文章启发我学习与研究各种随机数生成算法及其特征,以及文章本身提到的 GPU 上的随机数生成与随机数在图形学中的应用。

随机数是生活中常见的概念,但生活中的随机概念一般基于我们的定性认识。本文尝试从数学与计算机科学的角度研究随机数与其应用,大概介绍了常用的各类随机数与一个随机数在图形学中的应用实例,以期读者能建立对随机数的系统认知。

本文参考了大量网络与文献资料,在此对这些资料的贡献者表示感谢。

参考资料

The post 随机数生成算法与其图形应用 first appeared on KSkun's Blog.
❌