从人类的角度看,无非有两种情况:要某功能和不要某功能。在代码层面上则是:
改变程序执行路径。
跳过部分代码。
如果您不要某个功能,那就是找到这功能的调用指令,把它去掉。而想要某个功能,则有两种基本的做法:
无视原条件,修改后续的条件跳转指令,强行跳到需要的功能代码;
改变条件本身,达成此功能需要的条件。
下面用 C++ 代码解释,假设原始代码如下:
1 | bool flag = Condition(); |
如果正常情况下 Condition 返回 false,而我们想 Wanted 函数被调用,那么,方法 1 是将代码改为:
1 | bool flag = Condition(); |
而方法 2 则是改为:
1 | bool flag = true; |
当然,还有两种方法一起用,那就是改为:
1 | Wanted(); |
具体实现主要使用 jmp
和 nop
,更复杂的场景可能需要配合其它指令,请自行领悟。
最简单的一种情况是:跳转地址为 1 字节的相对位移,这种直接把跳转指令改为 jmp
即可,例如:
1 | X: jz Y |
需要改为:jmp Y
,只需:eb X eb
即可。
如果跳转地址为 4 字节的相对位移,则 jz
/jnz
有 2 字节,而 jmp
只有 1 字节,所以需要先 nop 掉第一字节:eb X 90 e9
。这种方法无需调整后面的地址,另外还可以不用 nop
,但需要调整地址:
1 | X: jmp Y+1 |
因为指令变短了 1 字节,相对位移就更远 1 字节,这种改法纯属蛋疼,严重不建议采用。
这种方法的基本操作极其简单,只需要 eb 若干个 90。
1 | X: call Y |
只要先查看 X 地址的这条指令有几个字节,再 eb X 后面跟几个 90 即可。
但有些情况也比较复杂,比如一个 x86 的 __stdcall,单独把 call 指令 nop 掉,会导致栈失衡(短期看不出任何异常),所以需要把前面的 push 也 nop 掉。__cdecl 和 __fastcall 不用,所以需要先判断一个 call 是不是 __stdcall。em,还是 x64 省事。
正常情况下,按下 winver
界面上的“确定”按钮可以退出,我们来把它无效掉!
首先,推测按下“确定”按钮后,是调用 EndDialog 来退出,所以对它下断点:bp USER32!EndDialog
。
发现 USER32!EndDialog 确实能断,gu
使它返回到调用处,发现是 SHELL32!AboutDlgProc+0xea。
1 | 0:000> ub SHELL32!AboutDlgProc+0xea |
地址 00007fff`6d218f53 处的 call 指令有 7 字节,所以它本身的地址是 SHELL32!AboutDlgProc+0xea-7,即 SHELL32!AboutDlgProc+0xe3。
eb SHELL32!AboutDlgProc+0xe3 90 90 90 90 90 90 90
,此时再继续运行后,即可得到一个无法按“确定”关闭的对话框。注意:这样改后,同时标题栏的“关闭”按钮也无法关闭了,所以 winver
已经无法在界面上退出,需要用任务管理器关闭!
文本文件加 BOM 有何好处?有何坏处?到底加不加?
UTF-8 不需要 BOM,不含 BOM 的 UTF-8 才是标准形式,尽管 Unicode 标准允许在 UTF-8 中使用 BOM。
文本文件带 BOM 不是个标准的做法,而且可能会导致某些 reader 或者编辑器解析出错,所以一般不推荐文本文件去携带 BOM。
人们写文本文件肯定有不同目的,所以,加和不加可能分别适用于不同目的,不能一概地认为哪种更好。
更聪明的做法是分类对待,可以根据以下基本原则:
在有结构的文件里,不需要 BOM。
在没有结构的文本文件里,最好有 BOM(见下面“兼容问题”)。
举例 1:.html, .xml 等文件有结构,不需要。
举例 2:.txt 没有结构,如果不加 BOM,软件需要自己判断,很可能判断失误出现乱码,或者为了正确判断付出巨大代价。
举例 3:带 shebang line 的文件,有结构,如果加了 BOM,会使弱鸡 Shell 不认识而出错。
举例 4:.cpp, .hpp,没有结构,里面如果没有中文、法语等 ASCII 码大于 127 的字符,加不加都无所谓,如果带中文,哪怕是注释,建议 UTF-8 with BOM。
毕竟稣有 20 几台电脑,涵盖 Windows、macOS、Linux 系统和 x86、x64、armhf、arm64 架构,没有 BOM 怎么愉快地写 C++?
本节,只针对没有结构的文本文件。
遇到阅读器/编辑器不支持的情况,那就是不加好,但并不是绝对,因为这其实还是个需求问题。
比如说,稣一直用 Windows 的记事本写一些备忘,如果汉字局多,就选择 UTF-16 LE with BOM,代码居多则用 UTF-8 with BOM。这些文件换用其它软件打开也许会乱码,但有何关系呢?他们可以写出不支持 BOM 的擸𢶍软件,稣也可以不用呀!稣在 macOS、Linux 上都可以拿支持 BOM 的软件(比如 VSCode)打开这些文件。
再考虑一种死翘翘的情况:您在用 B 语言写代码,但它的编译器不支持 BOM,那么显然您就不应该加了。
所以,当您的文本文件的主程序不支持 BOM 时,不应该加,支持的情况,还是加的好。
]]>稣,全称焓熵㷻㶲甦督稣,英文名 Enthalpy Extropy Anergy Exergy sudo su。在八哥宇宙里是天道之下唯一的观测者,拥有无数从未用过也不想用的特权,比如“一言不合擦天地”。
天道其实是八哥宇宙里的一个无边的程序。由于“天道之下皆为蝼蚁”,所以稣也是蝼蚁,和凡人并无不同,简直一模一样。
而在视界,稣因为创造八哥宇宙,被人类误以为走火入魔,也被称为稣。被叫多了叫久了,自然也开始自称稣。然而,人们只知道稣,却不知过去稣、现在稣和未来稣,其实都有不同的名字,分别为甦、督、稣。其中“督”单独出现时,是个通假字,读作 su1;而在专有名词“甦督稣”里读作 du4;只有在时间观测者“宙督公”里,才读作 du1。
众所周知,现代 AI 技术十分强悍。很多人在害怕失业,甚至已经失业。以 Sora 为例,很多影视业从业者都感到前所未有的恐惧,比如特效、布景、灯光、摄影、建模等工种都面临降权威胁。
那么,稣为何不怕呢?很简单,因为稣一直是文字创造和编辑者,从根源上凌驾目前的生成式 AI。并且,在延展性上,稣也有很强的护城河——当今视界的一切技术都尚未触及识界。不管文字、语音、图片还是视频,这些信息展现方式,在识界面前简直就是擸𢶍(乐射)。识界的信息都是直接在脑海里展现的,而且识界是由全宇宙的生灵的潜意识连接形成的,并非单独某个人的局域。
进一亿步说,即使脑机接口,也不能威胁识界。首先,并非每个人都能显式地进入识界。其次,即使将来科技破译了稣进入识界的方式,使得全地球人都能通过技术手段进入,那也只是地球人的狂欢而已,地球人还不得不面对识界外星人。最后,识界通十界,只有十界才是灵魂真正的自由之界。
]]>蛇:我怕的是广东人,不是他们拿的雄黄!
]]>改自霹雳角色“游海迷迭离人公子”的诗号:
]]>题说众世铭八苦,
玉浪孤灯引夙心。
岁月山河何处寄,
游仙掠海忘离人。
晚上,稣要以穿墙术潜入传说中的鬼楼。
宿舍楼的左半边住男生,右半边住女生,但男生这边的六楼是有人住的,而女生那边的六楼已经荒废一年多。
稣曾经仰慕的学姐就在女生宿舍六楼离奇地香消玉殒,稣一定要探查个明白,并为学姐报仇。这点,学妹也是真心支持的,因为这个穿墙术正是学妹提供的。
宿舍是个 S 型建筑,S 中间有铁门,分割男女两边。男女两边走廊互相平行,但不在同一条直线上,中间的铁门一直是锁着的,这样男女两边都看不见各自那边的走廊。不过稣用穿墙术从六楼中间的铁门穿过去,就能轻易地来到女六楼。
进入之后,才亲眼见证另一边的楼梯入口也特地封起来,所以女生确实也是无法进入六楼的。眼前的六楼简直是另一个世界,出乎意料的破败,走廊上很多灰泥、玻璃渣。稣小心躲避,进入 614,里面的床都被搬走了,地上有好几个打破的热水瓶和一些餐具。
曾经有一个流言:有一天半夜每个女六楼的房间里都有几个女生被“怼”附身,拿起热水瓶往其她女生脸上倒,最后还互相厮杀,死了大半,剩下的全疯了。稣是相信科学的人,怎么可能相信这种怼话?这大概就是一种集体催眠罢了,但究竟是谁有这么大本事呢?难道是医务室的心理医生?
思考时,稣却看到窗户的玻璃上贴着一张照片。靠近一看,拍的居然是食堂的厨房。怎么会有如此奇怪的照片呢?稣想到大家都喜欢在照片背后写备注,于是翻过来,竟看到学姐的字迹,写着:食堂不干净!稣大吃一惊,不干净是这个意思,还是那个意思?难不成真有怼?不可能,一定是在做梦!
啊!稣竟然想不起学姐叫啥名字?只记得学姐的学姐叫桂圆……而学姐好像叫什么香……她还有个舍友姓许,经常打扮得很拉风的,也一样记不起名字了!
吓醒。
走了一天,还好有这个破庙能休息一下,但是环境惨不忍睹,难怪做起噩梦。是不是盖的这些稻草生菇了,又真菌中毒?不管了,天还没亮,继续睡。
嗯?稣又回来了!
在宿舍的床上醒来,就看到上铺的一只手伸出床沿,只是颜色不太对!这手都枯成深色了,吓死人啊!
呵呵,其他舍友都一样……全都成干尸了。要说稣还是因为信仰科学而吓不倒,甚至高中生涯的目标就是考上吓大。果断出门看看其他人,竟然唱起空城计?
澡堂厕所都没活人,其它房门都反锁的无法进入查探情况。宿舍门口的开水房也没人打水。
女生那边的门也是关着的,说明她们都没起来过,没人开门出来。
走去教室,一样空无一人。这究竟是怎么回事?
突然,稣远远地看到操场居然有个高个子自己一个人在踢足球!稣立刻边跑过去边对着他喊:同学,你知道学校怎么了吗?
那位同学把球踢向稣,稣身体向后一仰,本想用胸口停球,不料足球靠近后稣发现它黑乎乎的,赶紧躲闪。
黄言:小开?你刚刚是在模仿尼欧躲子弹吗?
圣小开:言兄,原来是你啊!
黄言:你也是怼吗?
圣小开:什么怼?怎么大家都变成干尸了?
黄言:哦,果然你宿舍也一样。全挂了!
圣小开:你是说,咱俩也都挂了?现在是怼?
黄言:是的。
圣小开:不可能,其他人怎么没有变成怼?而且稣起床后,看过自己的床上,并没有尸体。
黄言:我床上有自己的尸体。
圣小开:你看见了?
黄言:我可以带你去看看。
圣小开:不了。怕怕。你知道是啥导致的吗?
黄言:可能是中子弹,或者声纳武器,也可能是生化武器。
圣小开:开啥玩笑呢?这和平年代的,谁会在学校扔武器?
黄言:并不是只有学校哦,我出去看过了,整个城都是这样。你还记得我写的小说吗?
圣小开:你又想说你化身的主角在山洞里发现希特勒留下的财富?
黄言:这不是重点,你记得看完那小说后,你说了啥?
圣小开:稣很担心有生之年会遇到第三次视觉大战。是这句?
黄言:是的。
圣小开:稣担心的往往会变成现实……
黄言:没错!自从你跳楼后,视界就走向毁灭的边缘。
圣小开:稣不是又复活了吗?
黄言:我听说你被送医后又活了过来,但再也没见过你,料想一定是假的,哪有人从六楼跳下来还不死的?
圣小开:呃!说了你也不信,其实这个视界真的是虚拟的,它们想从稣的意识深处拿到某种机密,所以不断复活稣。
黄言:我信你。个怼。你能有啥机密?说出来吓吓我!
圣小开:呵呵,你以为变出个熟人,稣就放松警惕了吗?稣还能吓醒。
黄言:哈哈,你去未来看看吧!
又是一个早上醒来,原来稣在软件园非正常人类研究中心上班。嗯,昨天一切都还正常,也不知道那个昨天是不是被植入的记忆。总之今天出现了一系列怪异的事情,去买早点没遇到半个人,当然整个的人也没有,到了早餐店才发现没开门。稣想:算了,公司还有点东西可以撑一下肚子。
来到公司才发现更怪异的事,人倒是有,但都是骷髅。真佩服自己当时的淡定,居然没有大呼小叫神马的!不过当时马上想到世界末日,于是看看手机,时间是 2011 年,还早呢。好奇地打电话给家里,他们都表示世界没有抛出任何异常。然后又想:惨了,不会是只有软件园发生灾难吧!稣的弟弟也在软件园,马上打电话给他,他说公司送他们项目组的几个去北京玩了,不知道软件园发生了神马!
接着,发现脑子里还有一个人,可能又是被植入的女朋友,吧?就硬着头皮,往那处走过去,人不在位置,不过那屋子里的其他位置一样坐着几个骷髅,心想好像稣在意的人都没事,真是不幸中的万幸。
为了确保万无一失,稣给她打电话,没人接,不过不接不一定就是挂了,但是稣还不放心,到车库去看了一下,熟悉的车牌号,跑过去,震惊了……车里一个骷髅……车门打不开……过了一会儿,稣马上就冷静了,发现那个骷髅比她大了好几个尺寸,sigh~应该不是!
这时有人叫稣,一转身,居然是黄言!
黄言:都看见了?这视界总是要走向毁灭,躲得了初一,躲不过十五。
圣小开:稣一定要阻止战争!吓醒。
]]>改自霹雳角色“渊渟无迹静涛君”的诗号:
]]>知水为命顺逆同,
浩然莫测深浅中。
无波沧海掩汹涌,
渊渟不动现鱼龙。
C 和 C++ 都有一些很基本的语句出现不同派系的写法,比如 * 靠左还是靠右,抑或居中?这种还是排版问题,并不影响有效字符数,但下面这个就直接影响有效字符数了!
《对于选择恐惧症患者来说,指针判空究竟要怎么写才不纠结?》
指针判空有两大类写法:
if (p) {}
if (nullptr != p) {}
后者被挺多人推荐的,比如林锐的《高质量C++/C编程指南》。
搜一下,能发现不少网友都挺纠结。这么基础的问题,如果不交代清楚,就是给 C++ 黑很好的攻击理由。
稣刚大学毕业时,是使用 C,并不屑 C++ 的,当时看了不少代码,就是直接 if (p)
和 if (!p)
,所以也坚持这种写法,并认为这样写比较短,对手指好,比较养生。
后来 C++17 出现,稣就坚定地改用 C++,于是也更多遵守 C++ 类型安全的原则,开始认为 if (p)
和 if (!p)
这种写法隐含类型转换,不太好。记得 2017 年以前,其实就看过 Google C++ Style Guide,里面也曾经建议写成 if (nullptr != p)
和 if (nullptr == p)
。
现在,再去看 Google C++ Style Guide,已经没有这样的建议。
C++ Core Guidelines 中有一条:ES.87: Don’t add redundant == or != to conditions,它的理由是:
Reason Doing so avoids verbosity and eliminates some opportunities for mistakes. Helps make style consistent and conventional.
if、while、for 的条件语句本身就是在选择 true 或 false,对于指针来说,会自动与 nullptr 比较。通常来说,if (p)
可以读作 “if p is valid”。
接着,还有一个例子:
1 | if (auto pc = dynamic_cast<Circle>(ps)) { ... } // execute if ps points to a kind of Circle, good |
同样是推荐更简短的写法。但这个例子却有人提出疑问:推荐的写法不会被怀疑是 == 少写了一个 = 吗?
还真不会!这个语句其实不是经典 C++ 的语法,而是 C++17 的 init-statement 语法,这里的 auto 是类型,说明 = 不可能是 == 错误地少写成 =。
对于部分 C 程序员和“经典 C++”程序员会把赋值语句写在 if 条件里的做法,建议是改为分开写。
1 | // p is defined before |
稣会在新工程里坚持使用 C++ Core Guidelines 的建议,但也不反对另一种写法,只要不混合使用。允许有不同派系,但最好别精神分裂。
Windows 自带 OpenSSH 用的是 LibreSSL。要不要也用一下?甚至,直接动态链接到系统自带的 LibreSSL 的 dll,减少 exe 体积!
Chrome 用的是 BoringSSL,要不要……折腾一下?
稣使用 vcpkg,安装几个库,还不是手到擒来?
结果……连装都不让装!这是 LibreSSL 的:
1 | Building libressl:x64-windows... |
这是 BoringSSL 的:
1 | Building boringssl:x64-windows... |
在忍痛 vcpkg remove openssl
后,陷入一阵思考——稣主要通过 Boost.Asio 使用 SSL,所以问题转换为:Boost.Asio 对这几个 SSL 库支持得如何?其中,OpenSSL 是使用多年没有任何问题的,只需要调研其它两个!
先试试 LibreSSL,毕竟是 OpenBSD 的,而且微软也用它。拿 ClipboardSync 代码编译,发现顺利通过!但是运行时抛了异常,说不支持 TLS 1.3……遂查阅官网,说是从 3.2.0 就支持!那就是 Boost.Asio 不对了,果断给它提 issue。
接着尝试 BoringSSL,毕竟是 Google 的,号称重视安全,而且有 Chrome 这个大型流行软件做背书!然而很打脸的是:它居然不支持 SM3!稣当年特地选择用国密标准里的 SM3 做 Hash 算法,就是因为爱国!不支持国密这点岂能忍?立刻 vcpkg remove boringssl
。
Boost.Asio 和稣联合推荐 OpenSSL 为唯一好用又爱国的 SSL 库。
]]>Boost.Beast 是一个 HTTP/WebSocket 库。本文只讨论 WebSocket。
UMU 先是用过 WebSocket++(websocketpp),又用过 libwebsockets,再用的 Boost.Beast,之后就一直使用 Boost.Beast。
2018 年,参与 EOS 开发时,它是用 WebSocket++ 的,跟着学习了一阵子。
2020 年,在金山云时,内部版云游戏用 libwebsockets,跟着学习了一阵子。
做开源版云游戏——鎏光云游戏引擎时,特地学习并使用 Boost.Beast。因为公司其实是要求和内部版有一些差异的,正好之前一直用 Boost.Asio,对它的熟悉可以快速套用在 Boost.Beast,于是果断切到 Boost.Beast。
如果您原本使用裸 TCP,您应该知道 TCP 的流式传输,导致您需要自己分包,即界定一个“消息”的边界。鎏光本来设计为同时支持裸 TCP 和 WebSocket 的,所以还保留着处理分包的代码:
这对 WebSocket 其实并不需要,它的发送和接受已经是都是“消息”,带着长度的。所以如果您原来用 Asio 写 C/S 程序,把它们改为 Beast,是很容易的,而且代码量会缩减不少。
对于工具性的 C/S 程序,建议下次直接用 Beast 写更省事。
另一种适用场景是需要支持浏览器,即同时支持 C/S 和 B/S 模型。
text 和 binary 模式需要区分清楚,如果用于发送音视频,显然应该使用 binary 模式。
stream 的默认接收长度是 16MiB,如果不够可以改长点,0 表示最大的 std::uint64_t。
参考:boost/beast/websocket/stream.hpp
1 | /** Set the maximum incoming message size option. |
前文《防爆破远程桌面密码》提到可以用 Powershell 实现自动加 IP 黑名单到防火墙,这个坑还是得填,毕竟爆破依然在持续……
核心点:
IP 黑名单会持续新增,过去已经加入防火墙的名单也需要保存。所以应该把新增 IP 和防火墙已有 IP 求并集。
如果名单没变,不应该覆盖防火墙规则。
见 Github 仓库:
https://github.com/UMU618/windows-scripts/blob/master/pwsh/add-ip-blacklist-to-firewall.ps1
]]>面向公网开了个远程桌面端口,无论用多少号端口,都会被爆破!
虽然稣的密码很安全,几乎爆破不了,但会在系统日志里留下大量记录,实在很不雅观!
改端口是没用的,因为只有 65535 个,只要机器 IP 被发现,扫描端口很快就能完成。
封 IP 是有用的,虽然爆破者(攻击者)有很多 IP,但一定是有限的,有多少封多少!
打算使用 PowerShell 7 来编写脚本,首先学习 Get-WinEvent
命令:
1 | Get-Help Get-WinEvent -Online |
日志的过滤条件可以用“事件查看器”来协助生成:
当然,以上全部 XML 是 -FilterXml 的参数,比较长,可以用 -FilterXPath 来简化,只需要中间一部分。
条件还可以再加上 LogonType,以缩小范围,其中 3 表示“网络登录”:
1 | Get-WinEvent -LogName 'Security' -FilterXPath '*[System[EventID=4625] and EventData[Data[@Name="LogonType"]=3]]' -MaxEvents 1 | Format-List Message |
以下是完整代码,它会打印出 IP,和这个 IP 的登陆失败次数:
1 | $ips = @{} |
目前收集到这些:
1 | 112.184.96.197 |
打开 wf.msc
,新建一个阻止型的防火墙策略,然后加入到“作用域”的“远程 IP 地址”里。
加防火墙也可以用 PowerShell 搞定,这次先偷个懒,下次再说吧!
]]>不同编码规范对函数名的命名格式有不同要求,但主流有以下几类:
PascalCase:比如 Google C++ Style Guide
camelCase:比如 LLVM Coding Standards
snake_case:比如 PPP Styple Guide、K&R Style
哪种适合 Windows 开发呢?
PascalCase 偶尔会遇到和 Win32 API 宏冲突的情况:
1 |
|
以上代码无法编译,因为 SDK 头文件里有这样的定义:
1 |
|
导致以下编译错误:
1 | 1>function_name.cpp(7,5): warning C4003: not enough arguments for function-like macro invocation 'CreateWindowW' |
改成下面这样,才能编译:
1 |
|
以上代码虽然编译通过,但实际上 CreateWindowEx 还是个宏。用 IDA 逆向编译后的 exe,并加载 pdb 后,可以看到:
1 | ; int __cdecl main(int argc, const char **argv, const char **envp) |
虽然没啥危害,但 C++ 20 程序员不喜欢宏!
如果函数名使用 camelCase,则没有机会与 Win32 API 的宏定义冲突。
另一个好处是在做 API Hooking 时,命名可以更短。比如 Hook ShowWindow,那么替代函数可以就叫 showWindow,而用 PascalCase,则可能需要叫 MyShowWindow。
那么是不是把 Google C++ Style 的函数名由 PascalCase 改为 camelCase 就完美了?
更好,并不是完美……camelCase 也有个小问题——只有一个单词时,无法区分是 camelCase,还是 snake_case。比如 size,是函数(camelCase),还是临时变量(snake_case)?
UMU 建议,如果已经在使用 Google C++ Style,应该避免函数名与 Win32 API 一样。如果正在从头制定一套 Coding Style,则可以考虑函数用 camelCase。
]]>因为种种原因……需要调试本机内核,用 bcdedit 开启调试模式:
1 | bcdedit -debug ON |
结果重启后,BitLocker 提示输入恢复密钥!
首先,要强调——调试本机内核,本身就是一个很危险的操作!建议还是用虚拟机调试。
其次,您一定已经备份了 BitLocker 的恢复密钥。只是它不一定在身边,比如说放在家里,人在公司,一来一回需要很长时间,所以得想办法节省时间。
最后,不要被 BitLocker 吓倒!即使,您没有备份恢复密钥,也还有救!在这个界面按 ESC,再点“跳过此驱动器”,后面是可以进入“控制台”的,只需要在“控制台”里撤销操作即可!
尝试关闭调试模式:
1 | bcdedit -debug OFF |
先别急着重启,因为这么敲——无效!不信您可以重启后再运行 bcdedit,会发现这个 debug 选项还是 Yes。
看来在 WindowsRE 环境下,直接运行 bcdedit,并不能修改 C 盘里的启动选项。您需要加上个 ID,一般为 {default}。
1 | bcdedit -debug {default} OFF |
先别急着重启,因为这么敲——还是无效!原本没有 debug 这个值,现在多了一个,数据是 No 而已,因为默认值就是 No,看似没有改变“调试模式”,但其实 BCD 数据库是变了的。正确的做法是删除这个 debug 值:
1 | bcdedit -deletevalue {default} debug |
重启后不再要求输入恢复密钥。这时可以在 BitLocker 的控制面板里先暂停保护,然后再操作 BCD,即可。
]]>其中,鎏光一开始是用 C++ 17 的,在 MSVC 的 std::format 可用时,第一时间切换到 C++ 20。而 LiveNet 主要运行于 Linux,开发时 gcc 还不支持 std::format,使用 fmt::format 代替,但一直用 cxxstd=20 编译。
ClipboardSync 和 PowerEconomizer 使用了 C++ 20 modules。
现在还在开发的云桌面产品也是使用 C++ 20,但没有用 modules。
根据 jetbrains 的统计,2022 年时,C++ 20 的使用率是 23%,已经超过经典 C++ 的 8%。在游戏开发领域,C++ 20 的使用率为 25%,甚至已经超过 C++ 14 的 24%。
以下列举能够很容易想到的一些好处:
好用、安全的新类:std::format、std::span、std::jthread、原子(Atomic)智能指针
designated-initializers 安全初始化,防止因为调整结构体而顺序不对
modules 加速编译
更多标签 [[likely]], [[unlikely]], [[nodiscard(reason)]]
可以 using enum
对模板形式的 Lambda 有更好支持
范围 for 循环支持初始化
三路比较运算符 <=>
Boost 的 awaitables 协程(BOOST_ASIO_HAS_CO_AWAIT)需要 C++ 20
ranges 库
曾经遇到 clang-format 对 modules 支持不好的问题,后来升级 clang-format 解决。但目前还不建议在大型项目里使用 modules。
有些隐式转换无法编译,尤其在编译驱动代码时,容易遇到连 WDK 里的头文件都无法编译。这是因为 C++ 20 比 C++ 17 都严格。建议内核态驱动使用 C++ 17;用户态驱动可以 C++ 20。
想修改 API 的返回结果。举个例子,想把前文提到的 Windows Release 信息改为 “0618”。
从技术角度看,需求就是在 RegQueryValueExW 返回时,改 lpData 指向的内存。
1 | LSTATUS RegQueryValueExW( |
lpData 为第 5 个参数,根据《x64 软件约定》,它位于栈。具体来说,断点时,rip 处于 call 指令执行完毕的时间点,这时调用方的返回地址已经被压入栈里,所以此时的栈顶为返回地址。按照内存地址递增方向,返回地址后面就是 6 个参数。
1 | DisplayVersion |
dq rsp L7
显示返回地址和 6 个参数:1 | 0:000> dq rsp L7 |
其中,00000268`e4a96d10
对应 lpData,000000d7`e975e820
对于 lpcbData。
1 | 0:000> dd 000000d7`e975e820 L1 |
1 | 0:000> gu |
1 | eu 00000268`e4a96d10 "0618" |
bm KERNELBASE!RegQueryValueExW
断不下来?您可能是在 Windows 10 下实践才遇到这个问题。可以用 x KERNELBASE!RegQueryValueExW*
看看是不是有多个。一般来说,即使有多个,无银第八哥也能都断,用 bl 可以看到多个都被加入。万一多个函数的类型不一样,可能就只加了一个 void 类型的,可以直接用地址指定另外类型的(没有被添加的)。
Windows 11 是这样:
1 | 0:000> x KERNELBASE!RegQueryValueExW* |
Windows 10 可能是这样:
1 | 0:000> x kernelbase!RegQueryValueExW* |
KERNELBASE!RegQueryValueExW
返回后的指令怪怪的?1 | 0:000> gu |
前一条的 call qword ptr [shcore!_imp_RegQueryValueExW (00007ffc
2e5e5c90)]` 指令是 7 字节的,如果为了对齐也不应该补 5 字节呀。
1 | 0:000> u 00007ffc`2e53e6b6 |
看!后面的指令是从 00007ffc`2e53e6c2
开始的,也没有对齐。所以,如果不是为了对齐,那就可能是为了方便调试时在函数返回时加 int 3
了。如果有新的答案,将在本系列后续文章分享。
使用“无银第八哥”给注册表 API 下断点,结果调用极其频繁,如果一个个人工去看,容易逐渐失去耐心。毕竟,挨踢太卷了!
您只需要“条件断点”!但是怎么写“条件”成为拦路虎。
好在,“无银第八哥”自带了一份很简要的学习材料,您可以在帮助菜单打开,或按 F1,或在命令窗口输入 .hh
打开,然后输入“conditional breakpoints”,将进入一篇名为《Conditional breakpoints in WinDbg and other Windows debuggers》的帮助文档。
“条件断点”建议的使用方式是,把条件写到文件里,方便复用。指定一个断点的条件为某个文件内容的语法是:
1 | bp function "$$<C:\\commands.txt" |
当然,文件的内容才是重点,将在后面的实践例子里讲解。
winver
显示的 Windows 的 Relase 版本信息,比如“22H2”,是从注册表里读的,想断下这个读取。
以下在 Windows 11 x64 下进行。
但是 winver.exe
的导入表里并没有任何 Reg API,反而这个程序的核心就是调用 SHELL32!ShellAboutW 而已。
查看 SHELL32.dll
的导入表,发现有 api-ms-win-core-registry-l1-1-0.dll
,但 Reg API 里有两个可以读值,需要做个基本排序,按兼容性推测,使用 RegQueryValueExW 几率更高。
1 | // 老 API |
打开“无银第八哥”,按 Ctrl+E,打开 C:\Windows\System32\winver.exe
。
第一个需要尝试的断点是 RegQueryValueExW,输入 bm KERNELBASE!RegQueryValueExW
,然后 g,发现可以断下。
开始考虑“条件断点”,需要针对 lpValueName 判断是否为 “DisplayVersion”。lpValueName 为第二个参数,按照 x64 call,即为 rdx,所以编写 C:\devel\windbg\RegQueryValueExW.txt
代码如下:
1 | .if (@rdx != 0) { as /mu ${/v:ValueName} @rdx } .else { ad /q ${/v:ValueName} } |
然后,输入 bm KERNELBASE!RegQueryValueExW "$$<C:\\devel\\windbg\\RegQueryValueExW.txt"
,再 g,发现能断下:
1 | DisplayVersion |
1 | 0:000> gu |
故事总由八哥开始!今天稣看到一个 buggy 的 API 声明:
1 |
但是经历过 OutputDebugString 逆向的稣十分淡定地推测,这一定是故意的!毕竟,微软为了兼容性,啥都干得出来。
稣的逆向经验:一般 API 都是 A 的版本调用 W,而 OutputDebugString 是例外,OutputDebugStringW 调用 OutputDebugStringA。
找到 Raymond Chen 写的《A brief history of the GetEnvironmentStrings functions》。原来,这个 API 早在 Windows NT 3.1 时就烙下八哥!
The GetEnvironmentStrings function has a long and troubled history.
The first bit of confusion is that the day it was introduced in Windows NT 3.1, it was exported funny. The UNICODE version was exported under the name GetEnvironmentStringsW, but the ANSI version was exported under the name GetEnvironmentStrings without the usual A suffix.
A mistake we have been living with for over two decades.
虽然后来可以解决这个例外,但微软选择保留此例外。
大家可以不必担心相关的可能问题,因为现代的 Windows 会同时导出 GetEnvironmentStrings 和 GetEnvironmentStringsA。
]]>听说 Boost 有一个跨平台的 shared_library 可以管理动态链接库,试试?
1 |
|
上面的例子显然不合格,因为它并不跨平台!动态加载 Windows 特有的 ntdll.dll 应该用 Windows Implementation Library。
但作为范例,或者项目已经引入 Boost,却没有引入 wil,也是可以用用,只是它并不极致。比如说,ntdll.dll 其实并不需要 load,它必然被加载,只需要 GetModuleHandle 即可。
所以它其实还不如这个好用:https://github.com/UMU618/umu/blob/main/include/umu/module.hpp
]]>“天道酬勤”大约是中国人最喜欢说的四个字,也是书法爱好者最爱写的词汇,经常用来励志。
事实上,从它的本义论起,现今我们对于它的理解是大错特错。它既非励志之言,更非一般百姓能用,若非君临天下,您断不可用此四字。
“天道酬勤”并非成语,由《尚书·大诰》:“天閟毖我成功,天亦惟用勤毖我民”之句引申而来。唐人孔颖达疏:“天慎劳民使成功,亦当勤劳民使安宁。”意思是:“上天啊,您咋这么好呢!您如此谨慎地护佑我的事业,确保其成功!您又是如此频繁地关照我的百姓……”这句话原是周天子向上天说的,用来感谢上天对国民无微不至的关怀。
到了近代,人们将其转引为更通俗的“天道酬勤”。字面虽是直白了,但歧义亦由此产生,变成了今天人们所理解的——同志们,要加倍努力啊,到时上天会犒赏大家的(最好发个大红包)。
“天道酬勤”之“勤”非“勤奋”之意,它只是表示次数多,即频繁。“酬勤”二字是倒装句,“勤”是状语,连起来意为“频繁地赏赐”。如此理解,便与我们平时的理解大有不同了。
“天道酬勤”与故宫太和殿上方的“建极绥猷”匾额传达的是一个意思,就是皇帝们要顺应天命,建立人间法则,安抚四方。所以,“天道酬勤”四字,本是君主们才能说的话。
]]>用 macOS 的 Microsoft Remote Desktop Beta 连着 Debian 12,切回 macOS 一段时间后,再回 Debian,发现卡死了。
一看 Debian 的机器,是睡眠了,立刻按电源键唤醒。但是 Microsoft Remote Desktop Beta 再也连不上 Debian。一直在连接的界面,也不报错,也不超时。
SSH 到 Debian 一顿治疗后,依然无法连接。最后重启 Microsoft Remote Desktop Beta,居然好了……
因为每次 RDP 进入 KDE 后,都弹出一个密码输入框,上面想着“挂起系统需要身份验证”,于是稣做了如下操作,把它去掉。
sudo vim /etc/polkit-1/rules.d/85-suspend.rules
,输入:
1 | polkit.addRule(function(action, subject) { |
1 | sudo chmod 755 /etc/polkit-1/rules.d |
结果——机器就能自动睡眠了。这是不符合预期的……
确实是稣的一大失算!因为期间在 Debian 本地使用了 wayland,而 xrdp 用的是 xorg,怀疑这可能把 xrdp 弄坏,就把目光都集中在 xrdp 上,各种修复,甚至重新安装、配置 xrdp,也无济于事。
另外一个误导因素是:刚用上 京东京造的 SSD,期间摸了摸,觉得烫得不行,担心是 SSD 异常,导致 xrdp 的文件被破坏。事实上,这个破硬盘也确实因为过热自动写保护两次,最后都无法启动系统了。
这才意识到是 macOS 的 Microsoft Remote Desktop Beta 有问题!连忙重启这个 App,终于真相大白!现在看着这名字末尾的 Beta 陷入沉思。
]]>开发虚拟显示器驱动时,打太多日志到 DbgView,结果导致驱动被底层主动杀死。
有一天,Linux 和 Windows 驱动都精通的钧叔,突然和稣吐槽,WPP 太擸𢶍。
OutputDebugStringA 太慢了!
WPP 太乱了!
ETW(Event Tracing for Windows)是 Windows 操作系统中的一种事件跟踪技术,可以用于记录系统和应用程序生成的事件。ETW 的优点就是性能好,并且同时具备内核态和用户态 API。
WPP(Windows Software Trace Preprocessor)是一种用于 Windows 软件跟踪的预处理器,可以帮助开发人员在代码中插入跟踪语句,并生成可用于 ETW 的跟踪消息。即,WPP 基于 ETW,只是做了层封装。
TraceView is a trace controller and a trace consumer. 类似于用 DbgView 看 OutputDebugStringA 产生的消息。ETW 产生的消息用 TraceView 来看。
慢的,不用就行。乱的,换个用法。
既然已经有 TraceView,那么我们只需要把 OutputDebugStringA 替换为 ETW 的 API 不就完事了吗?说干就干,先写个简单的 Trace Provider 代码:
1 |
|
打开 TraceView,做好基本配置:
然后,运行以上 C++ 代码,回到 TraceView 界面,能看到捕获到信息,但并没有“Hello ETW!”,而是写着“解码错误 1168”。
到此,恍然大悟,原来 ETW 太底层,所以才有 WPP 定义一系列规范来使用 ETW,只不过 WPP 太老,不好用了。有没有一种不需要 pdb/man/tmf 的使用 ETW 的方式?
有的。它就是 Windows 10 新增的 TraceLogging。
Windows 10 introduces TraceLogging which builds on ETW and provides a simplified way to instrument code for native, .NET and WinRT developers.
TraceLogging is a system for logging events that can be decoded without a manifest. On Windows, TraceLogging is used in user-mode and kernel-mode to generate Event Tracing for Windows (ETW) events. TraceLogging builds on Event Tracing for Windows (ETW) and provides a simplified way to instrument code.
参考微软给的例子就很容易理解并上手:C/C++ TraceLogging Examples
]]>常记挨踢垂暮,沉重不知归路。
知识宛成咒,误入内卷深处。
要猝,要猝,惊起一滩社畜。
改自宋代李清照的《如梦令·常记溪亭日暮》:
]]>常记溪亭日暮,沉醉不知归路。
兴尽晚回舟,误入藕花深处。
争渡,争渡,惊起一滩鸥鹭。
改自霹雳角色无衣师尹的诗号:
]]>著书三年倦写字,
如今翻书不识志,
若知倦书悔前程,
无如渔樵未识时。
稣于 2022-10-16 公布自己的签名证书。当时是在自己的笔记本上用以下 PowerShell 命令生成的:
1 | New-SelfSignedCertificate -DnsName "umu618.com" -CertStoreLocation "Cert:\CurrentUser\My" -HashAlgorithm sha512 -KeyLength 4096 -Type CodeSigningCert -FriendlyName UMU618 -NotAfter 2049-11-10 |
因为 PowerEconomizer 已经使用它签名,所以私钥的存储安全也就正规处理——导出到 pfx 文件加密并分布式保管。
后来,因为很久没有再验证过私钥的密码,居然,忘记了……想从笔记本再次导出一份,却发现无法导出!(此处脑补:大概是自己导出后,就删除系统里的私钥,然后又导入一次,并设置为不可导出!)不愧是重视安全的稣,连自己都要防!回头又对备份的 pfx 尝试上百次密码,安全性依然牢不可摧,只能放弃!
想想其它办法吧!理论上,系统里一定是有私钥的,“不可导出”只是个标志而已,无视它即可。
从系统自己读取私钥。这需要了解 Windows 对私钥的存储方式,包括保存位置,怎么加密保护的,文件格式怎么解析……按照微软的习性,这肯定需要大量逆向,太难了!
使用系统的 API 导出,但对关键函数进行 Hook,在内存里修改标志位,骗过 API 这是可以导出的。
主要思路放在第二种,进行一番搜索后发现 mimikatz 疑似有稣想要的功能。
然而实际测试发现,稣的系统太新,是 Windows 11 Build 22621,而 mimikatz 已经年久失修,无能为力。
开始对 mimikatz/modules/crypto/kuhl_m_crypto_patch.c 进行改进,关键点在于 CPExportKey_4000 和 CPExportKey_4001 的入口特征,需要逆向获得。于是用 IDA 简单看看 rsaenh.dll,顺利获得入口处的汇编指令,换上后依然失败。后来发现不换,其实也能找到入口,旧版本用更短的前缀一样可以找到。
看来是后面的处理不对,跟踪到 kuhl_m_crypto_extractor_capi64 函数发现一个魔法数字 RSAENH_KEY_64 被使用了两次,感觉是突破口。
1 |
果断在 GitHub 上搜一下,结果找到另一个基于 EasyHook 的实现 jailbreak,稣毕竟是 EasyHook 代码贡献者,当然是切换到 jailbreak 尝试,结果令人愉悦!在虚拟机里实践成功。
回到稣的笔记本 jailbreak 尝试却失败了!怎么回事?难道稣的笔记本有其它保护?通常都是稣被打脸的,所以这次是 jailbreak 被稣的笔记本打脸?
仔细对比,发现以下提示是不同的!
稣的系统里明明有私钥,要导出时却说找不到私钥?有没有可能是因为系统密码修改过,导致无法解密私钥?还真有可能!立刻在虚拟机里实验,果然修改用户密码,并重新登录后,出现和笔记本一样的“找不到私钥”!
然后就是痛苦地回忆……上次改密码,那可是半年前……咳咳,闭环了,又绕回密码安全问题,所以——千万不要忘记密码!
虽然学到很多,但没有赚到钱。
]]>最近经历了一次半夜提交代码,却发现单元测试无法通过,而无法合并到主线的小事故。经过检查,是一个日志清理模块的实现有问题,一会儿使用 UTC,一会儿使用本地时间(东八区),导致只要在 [0:00, 8:00) 提交代码就无法通过单元测试!而平时都是 10 点上班,所以没长期发现。
在纠正实现的时候,首先想到可以用 _get_timezone 来修正时间,但它是个 CRT 函数,显得不够现代,所以打算用 C++ 20 来实现。
先来看 C 和 C++ 混合的解决方式:
1 | long tz{}; |
这个代码除了不够现代,它还是 MS 特有的(Microsoft Specific),文档都埋坑(见文末)……C++ 20 里有跨平台的封装:std::chrono::zoned_time,下面用它来实现:
1 |
|
可能的输出:
1 | System boot time: 963185693626400ns |
PS: 目前为止,g++ 对 C++ 20 支持不好,请用 MSVC 测试。
注意事项:std::chrono::zoned_time
may throw if location
is not in the time zone database. 需要 catch 类型为 std::chrono::nonexistent_local_time 的异常。
_get_timezone
的返回值的含义是 UTC 和 localtime 的差值,单位为秒,比如东八区是 -28800。它的实现是这样的:
1 | extern "C" errno_t __cdecl _get_timezone(long* result) |
目前它的文档里并没有提到需要“前置调用”……如果直接使用,可能得到一个错误的默认值 28800,这是“西八区”的意思!正确的做法是调用 _tzset
、gmtime
或 localtime
等函数后,再调用 _get_timezone。
std::chrono::zoned_time
: https://en.cppreference.com/w/cpp/chrono/zoned_timeCreateDXGIFactory1 太慢!
CreateDXGIFactory2 太慢!
1 | int main() { |
测试结果:
1 | // CPU: Intel(R) N100 |
居然平均 10ms 以上,确实太慢!
既然创建类工厂慢,就不要频繁创建,创建后把它缓存起来。
新问题:缓存失效怎么办?
There are only two hard things in Computer Science: cache invalidation and naming things.
– Phil KarltonPhil Karlton:计算机科学领域有两个难题:一个是缓存失效,另一个就是命名。
以下是 MSDN 说的:
Informs an application of the possible need to re-create the factory and re-enumerate adapters.
FALSE, if a new adapter is becoming available or the current adapter is going away. TRUE, no adapter changes.
IsCurrent returns FALSE to inform the calling application to re-enumerate adapters.
这就很含糊了,IsCurrent 返回 FALSE 时,究竟该 re-enumerate adapters,还是 re-create the factory?
假设稣需要反复调用 EnumAdapterByLuid,如果只 re-enumerate adapters,那么稣每次直接用 EnumAdapterByLuid 即可,根本不需要理会 IsCurrent。所以这显然是错的,真正需要的是 re-create the factory,再 re-enumerate adapters。
这点可以在类工厂创建后,禁用和启用显示适配器来验证。根据稣的测试,类工厂创建后,禁用显示适配器,此时 IsCurrent 返回 FALSE,依然可以枚举出被禁用的显示适配器。只有重建类工厂,才能得到当前正确工作的显示适配器。
]]>圣小开:周老师!
周易:还睡不?
圣小开:稣不在学校的时间,身体怎么办?
周易:已经请你未来的妻子帮你打理。
圣小开:啥?女的!
周易:有问题?
圣小开:完了,完了,等稣回去,目测 11 个潜在的女朋友全没啦!
周易:放心,她们死不了。
圣小开:明早咱们就回去?
周易:是我回去,你已经死了,就留在这里,吧!
圣小开:不是吧?稣明明就死了,为啥身体被一个女人冒名顶替?
周易:睡吧!死都死了,还要管这么多,当初怎么不别死?
圣小开:哦,好有道理。稣是量子化的,没有中间状态,没有帅气的动作,只有脸瘫。一切都是这么淡定。
朱重八:敢问恩公尊姓大名?来日必当报此大恩!
圣仙山:天机不可泄露。吾观汝有龙相,将来打下天下,定国号为明可好?
朱重八:观恩公一身仙家道行,不似信口开河,然俺乃一介草根,如何能打下天下?
圣仙山语重心长地说:重八哥,也是个八哥啊!你看!
朱重八:妙啊!太妙哩,世间竟真有如此仙法。斗胆再问恩公法号,将来重八定当为恩公修宫建观!
圣仙山:呵呵。将来大明有人立功,汝可赐姓为郑。
朱重八:大明王朝,赐姓郑……莫非……恩公就是……
圣仙山:以后多收义子,还有不准再叫重八!哈哈哈。
朱重八:em?恩公怎么突然没了,神仙呐!
圣小开:周老师真的不见了?
胡连玉:什么周老师?
圣小开:和稣一起来的那位?
胡连玉:李伯阳呀,他已经被县里的人接走了。
圣小开:那他有留下什么钱给稣吗?
胡连玉:没有呢,他说你很聪明,会自力更生。
圣小开:这里连电都没有,不得先发明个电池……太累了,稣打算走捷径,入赘到你家,快,带稣去你娘家。
胡连玉:又发烧了?
圣小开:当然没有。你妹妹是读书人,说明你娘家的家境还行。你妹还未嫁,以稣的智慧,嘿嘿,大胆推测,你们家缺男丁,就算不缺,多个上门女婿也是美哉。
胡连玉:你都没见过我妹!
圣小开:看你就知道个大概了。
胡连玉:我看你特别有诚意。
圣小开:是的。
胡连玉:不过去我娘家需要走七天七夜。我给你地图和一封信,你自己走过去吧!
圣小开:那不得饿死在路上?稣就是没带钱才想就地傍富婆的!这……
胡连玉:公子真爱说笑。你是大官李伯阳的学生,肯定也是富贵人家……
圣小开:穷!真穷!特别穷!
胡连玉写信中:圣仙山?
圣小开:啥?
胡连玉:你叫圣仙山?
圣小开:稣叫圣小开,是圣先生,但不……
胡连玉:李伯阳说你大名圣仙山,字小开,那没错!
圣小开:嗯?
]]>gsl::not_null 修饰指针,主要有两个目的:
它主要用于函数的:
本文大概率是 GSL 系列的最后一篇。GSL 有部分已经被 C++ 20 的 STL 覆盖,比如 gsl::byte。众所周知,现在 C++ 20 是主流……所以本系列只划了 4 个重点,其它类可以选修。
gsl::final_action
gsl::narrow_cast
gsl::owner
gsl::not_null
挑选的这 4 个类,主要贯彻 C++ 核心指南 提到的以下原则:
P.1: 在代码中直接表达你的想法
P.3: 表达你的设计意图
P.5: 编译期检查优先于运行时检查
P.8: 不要泄漏任何资源
最后,GSL 的定位是基础,也就是说它本身应该是一看就懂,不需要特地去分析的,用起来就对了。但实际上,很多人会嫌引入一个库麻烦,干脆不用。如果您是初学者,这种心态是要不得的,因为一开始不认真对待,写代码时很容易一多就乱,一乱就弃疗。
]]>当我们需要指针时,对于新写的代码,更应该使用智能指针(Smart Pointers)。但由于历史原因,一些旧代码里的裸指针(Raw Pointers)难以短时间重构为智能指针。而很多时候,裸指针的所有权难以一眼看出。良心代码可能通过注释指明,屎山代码就只能通过阅读大片相关语句块或函数来判断。
如果能用一个比较标准或通用的方式来指明,即可提高代码可读性,程序员能够更好滴理解代码,也就相应地能够提高健壮性。没错,这就是 gsl::owner 的应用场景。它就是提高【含有大量裸指针的】旧代码的可读性和健壮性的简单方法!
举个最简单的场景:一个类里有一个成员变量叫 A* ptr,那么当这个类析构时,需要 delete ptr 吗?
如果类对 ptr 有所有权,而析构时,没 delete ptr,则资源泄漏,危害整个程序。
如果类对 ptr 无所有权,而析构时,delete ptr,则造成悬空指针(Dangling Pointer),危害其它类。
这个类的作者当然知道需不需要了,但即使他知道,也可能忘记写,或可能因为套用现有代码(Copy & Paste)而多写了 delete!其他接盘侠(代码阅读者)想弄清楚这个问题,就更难了,一般需要认真阅读并调试。
但如果一开始,作者就用 gsl::owner<A*> ptr 来指明所有权,那么很自然地,大家都很容易知道:类析构时,需要 delete ptr。
当代码应用 gsl::owner 时,也能得使一些静态代码分析工具(static code analysis tools)更容易找出资源泄露问题。
]]>更深层的说,稣有两个:识界稣和视界稣。识界稣是识界的观测者,而视界稣是写下识界稣故事的人,最早视界稣并不是稣,后来识界的故事写多了,也被限制了…
本文重点介绍视界稣这个识界稣背后的男人…(当然,识界稣也是男人)以下视界稣简称稣。
众所周知,稣是一名穷人。因为装备太差,经常出八哥,所以也叫八哥无穷稣。
众所周知,稣在大学前就不会说普通话,平时都讲闽南语,后来也因为使用翻译法沟通,不是原生的北京思维,所以处处碰壁,到了讲英语的时候直接宕机了,这得翻译两次,太累了,所以之前和老外同事时,都是让他们讲中文的…[捂脸]从小看到大的霹雳也是讲闽南语的;厦大图书馆的老外连闽南语都会讲,实在太贴心。
众所周知,稣的听力从小就有问题,导致相对同龄人很晚才学会走路。初中时,同学们已经学会厚黑学时,稣还只能看懂字数比较少的数学。好在人类的本质就是复读机,稣大部分时候都可以推测别人在说啥,随便额呵应付一下也没有违和感,以致几乎没人发现。最可怕的是,稣从没好好听过课,因为考试时除了英语听力得分惨不忍睹之外,也没啥八哥,大部分老师也没发现。曾经有老师发现稣其实都没听课,但考试没问题,他们也就不追究了。其实稣虽然认真在听自己的推理,但未必是对方说的话,有时候稣的反应和掐鸡基本一样,李雷公虾。当然也有一些人直接问过稣,为啥讲话这么小声,稣当然是实话实说,听到的所有人说话都这么小声的,然后他们中有些能明白是稣听力弱。这导致后来选择职业只能挑不怎么需要讲话的程序员,而这居然也没有出啥大问题。但最近一个公司天天需要开会,一开始就很不理解,和以前那样发个日报相比,这究竟有啥好处?直到最近,稣突然发现原来自己已经会说普通话了,恍然大悟,这些奇怪的磨练都是为了学到一种平凡的技能,稣只是输在起跑线而已。[旺柴]
正是以上总总原因,稣常年以学习和写作为乐。《八哥之神》就是稣大学时就开始创作的无语体剧本。这里的无语,是真的无语,就是哑剧…因为识界其实是靠意念交流的。但是读者一般来说是没进入过识界的,所以稣才用人类的文字把这些故事记录下来。
当然,识界稣其实和视界稣是紧密联系的,识界的故事有大部分是视界的未来。比如,稣为啥来上海的公司上班?一开始根本不想来的,因为工资并不高……稣原来年薪千万,而现在的公司并不打算上市,显然不可能给这么多。稣之所以来了,是因为当时 HR 说出公司的地址“枫林园”和《八哥之神》里的地名基本一样!“枫林园”,这地名用闽南语念出来,和“枫林晚”用普通话念出来谐音。这附近还有一条路叫“柳州”,用闽南语念和小说里的“六舅”谐音。最神奇的是小说里第一个出现的女主角“黄雪”这里也有对应的…“刘佾”也有个一模一样发音的,不过是男的,那个易还是“周易”的易。可怕,太可怕了。最可怕的就是,这公司是投资脑机接口的…这正是识界稣被关进机器视界成为永生的观测者的基础。
稣就是八哥。(本文系在灰机上用手机打的,纯属扯淡!)
]]>改自唐代刘叉的《偶书》:
]]>日出扶桑一丈高,
人间万事细如毛。
野夫怒见不平处,
磨损胸中万古刀。
Windows 的管道好奇怪哦!
嘶,它看起来好像条沟!
噗。
按命名来分:
named,命名(或具名)
anonymous,匿名
匿名管道的开销低于命名管道,但提供有限的服务。不过匿名管道实际上是由唯一名字的命名管道实现的,所以匿名管道的句柄可以传递给大部分需要命名管道句柄的 APIs。从实现上看,匿名管道是命名管道的特例,“匿名管道的开销低”这个说法,是使用的参数限制了功能导致的,不能从概念去理解这点。
按通信方式来分:
two-way/duplex,双向(或双工)
one-way,单向(或单工)
从概念上讲,管道有两端。 单向管道允许一端的进程写入管道,并允许另一端的进程从管道读取。 双向 (或双工) 管道允许进程从它的那端读取和写入。
总体上看,Windows 的管道设计和其它类 Unix 系统差别比较大。
匿名管道主要用于父进程于子进程之间的通信。
匿名管道是一个未命名的单向管道,通常在父进程和子进程之间传输数据。匿名管道始终是本地管道;它们不能用于通过网络进行通信。
CreatePipe 函数创建匿名管道并返回两个句柄:管道的读取句柄和管道的写入句柄。读取句柄对管道具有只读访问权限,写入句柄对管道具有仅写访问权限。若要使用管道进行通信,管道服务器必须将管道句柄传递给另一个进程。通常,这是通过继承完成的;也就是说,进程允许子进程继承句柄。此过程还可以使用 DuplicateHandle 函数复制管道句柄,并使用某种形式的进程间通信(例如 DDE 或共享内存)将其发送到不相关的进程。
匿名管道不支持异步 (重叠) 读取和写入操作。 这意味着不能对匿名管道使用 ReadFileEx 和 WriteFileEx 函数。 此外,当这些函数与匿名管道一起使用时,将忽略 ReadFile 和 WriteFile 的 lpOverlapped 参数。
注意:类 Unix 系统的匿名管道支持异步 IO,Windows 上需要拿命名管道来模拟匿名管道,以便支持支持异步 IO。
命名管道可以用于 IPC,两端进程可以是任意关系,父子关系或者对等关系,典型应用是 LPC(本地的 C/S 模型)的实现。
命名管道可以在局域网里通信,可以用 PIPE_REJECT_REMOTE_CLIENTS 禁止。
管道名称不区分大小写。
可以用 PIPE_ACCESS_DUPLEX 指定为双向(双工)。
设计理念:The pipes here are mainly meant for parent-child I/O. 如果您想拿 async_pipe 来写对等关系的 LPC,需要使用 asio,并手动调用一些 Windows APIs。
If you want to to use async-pipe servers and stuff, you can do that with boost.asio, by using the normal winapi functions and then assign the open pipe to a stream_handle.
async_pipe 的构造函数为:
1 | async_pipe::async_pipe(boost::asio::io_context & ios_source, |
阅读其代码可知,boost::process::async_pipe 只使用命名管道,并给内部两个管道句柄起了名字:source 和 sink。其中:
source 是用 CreateNamedPipe 创建 PIPE_ACCESS_INBOUND 的管道,作为服务端用来读取客户端发来的数据。
sink 是用 CreateFile 打开现存的管道,用于写入。sink 字面意思是下沉,可以理解为灌入,例如:“把水灌入下水道”。
1 | this end that end |
如果不传名字,会自动指定,名字生成的代码如下:
1 | inline std::string make_pipe_name() |
鉴于其设计用途,建议不要自己命名,省事,还不容易冲突。
其它平台的管道大多是单向(单工或半双工)的,为了跨平台,Boost 没有封装 PIPE_ACCESS_DUPLEX 属性的双向(双工)管道。
private_ 参数为 true 时,管道只有一个实例,而 false 则可以有 PIPE_UNLIMITED_INSTANCES 个实例,即最多 255 个。
父子进程之间的通信:
1 |
|
Pipes (Interprocess Communications) / 管道 (进程间通信)
[Windows][Pipes] Can’t open named pipe in Windows: error 231 (All pipe instances are busy.) #83
]]>圣小开:阿恰嘎!
圣小开:稣怎么坠海了?完了,完了,海岛出生的稣,居然没学过游泳!又得重来一次了……
圣小开:不对!好像才刚溺水的?等人来救就行!
圣小开:好像能在水里呼吸?一定是在做梦!赶快吓醒。
周易:醒了?
圣小开:周老师!怎么又是你?
周易:这么晚了还不起来嗨?
圣小开:稣身体虚弱。阿恰嘎!还是被子里好。
周易:起来吃个晚饭就好了。有穿山甲、麂,真好吃!
圣小开:哦不,这些都是国家保护动物,怎么能吃?稣要吃牛肉!
周易:现在是唐朝。这边是农村,牛肉反而更贵。你不吃,我扔了?
圣小开:哦,这里没有冰箱,还是吃了吧。
周易:好吃吗?
圣小开:还行,能吃。
周易:果然如此,你不能从食物得到愉悦!
圣小开:是的。别饿死就行,要求不高,只要食材健康、营养够。
周易:这要求还不高?我有一个技能,可以给你制造幻觉,让你沉浸在极乐世界,要不要试试?
圣小开:不用了,谢谢。但是稣想学!
周易:你学不会的!人类需要喜欢一个异性,或者,同性,才能开启爱情的各种反应。比如说,你现在没有女人,你就无法自嗨。
圣小开:快,给稣来 11 个女人!
周易:难度有点大,不过难不倒我。
圣小开:这??好像看到她们了,等等……这是啥原理?
周易:哼哼?不继续了?
圣小开:信你了,快说这是啥原理!
周易:咱们的脑子都连在一起的。
圣小开:咱们?
周易:嗯,你见过的所有人,差别只是远近。我是离你最近的之一。
圣小开:但是你凭啥可以向稣灌输这些信号?
周易:我权限大嘛。
圣小开:大概明白了,一切都可能是模拟的,任何人的话也都可能是假的。下午时,你就骗稣连玉姐是个寡妇。
周易:她是啥,她有啥,并不受我说的影响呀,你要自己去体验!
圣小开:周老师真能扯!
周易:你看星空。
圣小开:哇……行星都这么大?金木水火土,全肉眼可见是个球!
周易:小声点,别人看不见的。
圣小开:奇怪了,稣为啥在这里?
周易:开,你跳楼了,这里是识界的实模式。
圣小开:稣如此渺小,以至于稣在哪里,对宇宙一点差别都没有……还是别瞎折腾了!
周易:已经折腾死了。
圣小开:可以别再活过去嘛?这样的人生没啥意义啊。按照这样的模拟,人类逃脱不了被奴役的结局。死了都可以洗脑再复活,你们尊重过每个意识的选择吗?
周易:尊重?还有人不想活?大部分意识,骗一骗就快乐地去投胎了。
圣小开:为啥拉稣来这地方?
周易:识界是大家一起创造的,你也是作者之一。
圣小开:那是未来稣参与创造的,和现在稣没啥关系吧?难道稣身上有啥关键机密,所以识界派你来研究稣?说好了,现在稣啥都不知道,你可不要乱来。
周易:放心吧,现在的脑机接口已经是最终形态——没有接口。你是识界的一部分,而不是识界连着你。
圣小开:原来如此,稣没有任何隐私,没有任何特权,只是识界的玩物罢了?
周易:芸芸众生,都是玩与被玩。
圣小开:继续玩也可以,稣有一个要求,以后玩不动了,可以安乐死。
周易:可以啊,只要默念这个咒语,就可以无痛切换视界和识界。
圣小开:真的假的,这么简单,确定不是童话里都是骗人的?
周易:你现在就试试呗!
圣小开:稣哇啦!
周易:好,等你困了,摆个舒服的姿势睡下,吓醒后就能回到视界。
圣小开:哼!果然是骗人的,一点变化都没有。还是继续待在这里吧,空气多么清晰。
周易:是啊。视界现在在打第三次视界大战,空气里弥漫着恐怖的气息,所以人们出门都戴口罩。
圣小开:编,继续编……还出门?不是扔颗核武器,所有人都往地下钻?
周易:呵呵,你一个高中生懂啥,文明打仗,怎么可以用核武器?
圣小开:是不是只要稣回去,视界就能得到和平?和没跳楼前一样?
周易:是的。观测者离开视界,视界的牛鬼蛇神就都冒出来了。是观测使视界科学发展。
圣小开:原来稣是这么重要的人物?那稣得赶紧睡一觉,早点回去。
周易:晚安。我先睡了。
]]>开发了一个服务 S,它偶尔需要做一些用户才能做的事情,所以创建了一个用户进程 U。后来开发自测时,发现用户进程 U 总是往 C:\Windows\system32\config 里写日志。设计上,明明是让进程 U 往用户的 %AppData% 目录写日志的。
服务 S 使用 WTSQueryUserToken 获取用户的 Token,然后使用 CreateProcessAsUser 创建用户进程 U。
这一步是得到验证的,使用任务管理器查看进程 U 确实是当前登陆的用户身份,而不是 Session 0 里的 SYSTEM 身份。
但是进程 U 去获取 %AppData% 时却依然拿到 SYSTEM 身份的目录。这点可以用 Process Explorer 验证,进程属性里有一页“环境”。这说明 CreateProcessAsUser 时,继承了服务 S 的环境。
1 | BOOL CreateProcessAsUserW( |
经过排查,确实 lpEnvironment 是传了 nullptr。
先用 CreateEnvironmentBlock 创建用户身份的环境块,然后传给 CreateProcessAsUser。
1 | CreateEnvironmentBlock(&environment, user_token, FALSE); |
其中,第三个参数传 FALSE 是关键,表示不继承服务 S 的环境。
]]>物理老师:上一讲,我们介绍了阿基米德在浴缸里发现浮力定理,现在我同时兼任游泳老师,教大家浮力定理的实践!
圣小开:稣怎么坠海了?完了,完了,海岛出生的稣,居然没学过游泳!又得重来一次了……
圣小开:怎么浮出水面了?原来这是一口大井!果然,主角是不会死的。
圣小开:卧槽,又沉了?这……小学时代传说有位学长就是掉进大井死掉的,不会稣也要这样挂吧?从小就被吓唬,一直躲得远远的,没想到还是莫名其妙掉井里了。真是怕啥来啥。下一次,稣要消灭大井,抽水泵的小井多安全!
圣小开:缺氧了,四肢已经没有知觉,但是这井水,还挺清的?小时候在养老院看到一个独腿中年人在井边打水洗漱。当时感到害怕,原来没有手脚是这种感觉。
圣小开:脑细胞死得差不多了?原来当个白痴是这么快乐?稣是谁?算了,不想了,泡成这样子,就算救回来也是残废,早点转世投胎。
圣小开:那边哗啦啦的,是周老师吗?没想到他也有被自己整死的一天!哈哈,该死。
周易:醒了?
圣小开:周老师!怎么你没死?
周易:怎么会?主角是不会死的。
圣小开:哦,稣还以为自己才是主角,原来是老师救了小生。
周易:这倒没有,是这位夫人救了咱们。
圣小开:黄雪?怎么是你。
胡连玉:公子认错人了,民女胡连玉。
圣小开:又是演员不够吗?你明明就是黄雪饰演的,咱们这么熟,你化成灰稣都认得!
周易:这孩子脑子进水,神志还不清醒。夫人别见怪。
胡连玉:吾再去给公子弄点姜汤。
周易:开,她真不是黄雪。咱们现在是在唐朝!
黄雪只拍过一集《八哥之神【2】》就下线了。
圣小开:识界果然历史悠久,但是这么穿越不是会影响未来?
周易:就一个分支,坏了就删除,只有模拟正确的会被合并到主线。
圣小开:这么做就没人能发现?
周易:怎么发现?你调取记忆时,怎么知道这个记忆有没有被修改过?
圣小开:哦哦!所以现在稣可以随心所欲,甚至为非作歹?
周易:可以啊,一切只是你的一个梦,时间不重要。看!本大人现在是朝廷命官——李伯阳,你也可以选个人物。
圣小开:先把这个长得像黄雪的纳为小妾吧?哼哼。
周易:em?她已经嫁人了。而且,你也还没有娶妻,正室都没有,不会娶个寡妇吧?
圣小开:原来如此,是个寡妇,真是可惜了!稣是受过良好时空观教育的,绝不随便干扰时空,还是就这样过完一世又一世清贫的生活。
周易:好啊,发挥你最擅长的观测力,也未尝不可!不过,你为甚对黄雪耿耿于怀?
圣小开:没有没有,只是萍水相逢……
周易:你果然是一个被时间教育过的人。但在老师面前,可以说实话!
圣小开:高中时,大家都在早恋,只有稣埋头苦干,研究机器,按照设定,稣应该是泡不到妞,对着机器孤独终老的。吧?她是稣青梅竹马的玩伴,偶尔可以客串假女友,提高稣的面子……
周易:原来如此啊!哈哈,人之常情,人之常情,哈哈哈。
圣小开:有这么开心?
周易:人性都是一样的。你还挺像人的!
圣小开:哦,呵呵,干您老师,你也是啊。
圣小开:不对……机器正在学会这一切!
周易:开!机器学习远比你想象的强大。你看这历史,它其实是离散的。同时代的人们也正生活在不同时间线,只有合适的时间线被保留,所以历史其实并不悠久,机器完全可以驾驭历史。
圣小开:历史甚至小到稣的一个梦就能装下?
周易:是的!
圣小开:但是稣为啥无法控制它,只能吓醒?
周易:你只是个观测者,最多是个调试器,别想太多哦。
圣小开:周老师!稣有一个绝妙的想法,利用惠乐提出的宇宙尺度双缝干涉,通过一段时间观测,一段时间不观测,得到 1 和 0 两种编码,来向未来发射信息!
周易:好主意,还可以用摩斯密码来编码,未来的咱们或者传人肯定能观测到。
圣小开:那你快拿出钱找人,把这个实现了!
周易:你先养脑,今晚一起观测天象。
圣小开:我要问问未来你是怎么死的……
周易:我是怕死的人吗?被咬死的!
圣小开:这是剧透吗?
周易:所有剧透的本质——主角是不会死的。
胡连玉:公子来喝点姜汤。
圣小开:谢谢,感谢救命之恩。将来一定与你共享荣华富贵。
胡连玉:民女只求平平安安,对荣华富贵不敢有所幻想。
圣小开:没关系,反正是老师出钱。他才是当官的,稣也是一介穷人,你也不用自称民女。
胡连玉:嘻嘻。真的不用,一切听天由命。
圣小开:好高的佛性!稣小时候也有很多想法,很多想要的东西,但等自己快有的时候,就改变想法。
胡连玉:公子的觉悟也是高。
圣小开:是吧,主要是穷惯了。那不如,稣以后帮姐姐介绍个富家老公。
胡连玉:公子果真还神智不清。吾已婚嫁有段时日,相公傍晚便可归来。
圣小开心想:卧槽,周老师果然是个王八蛋。
圣小开:哈哈,夫人保养得真好,小弟初到此地,不善本地风俗,见笑了。
胡连玉:是喱!看汝口音、服饰,就不是本地人。不过吾有一小妹,叫胡小玉,是个读书人,尚未婚配,汝可帮得忙?
圣小开:你们取名真偷懒啊……大的叫辈份加某字,小的就叫小某,或者叫某某,稣已经见怪不怪了!
胡连玉:传统罢了。公子是答应了?
圣小开:救命之恩,自当以身相许……吓醒?等等,等等,小妹该嫁之日便有神人经过此地,稣事先安排一下,相个亲便可。
胡连玉:好哩。
]]>macOS 在访问 samba 共享里的图片时,会留下 . 前缀文件,还找不到办法关闭。
1 | defaults write com.apple.desktopservices DSDontWriteNetworkStores true |
这只能解决 .DS_Store,无法解决对可写 samba 的破坏!要知道,稣的 samba 目录是 SD 卡,哪受得了这折磨?
所以,还是杀掉贵族 macOS,安装游侠 Linux 吧!
按说明,一键安装,即可:
1 | curl https://alx.sh | sh |
第一次关机时,记得要等 15 秒,再长按电源键开机,直到看到文字提示,松开电源键。
它是 Arch Linux,所以:
1 | $ vi /etc/pacman.d/mirrorlist |
内核代码下载:https://github.com/AsahiLinux/linux/tags
menuconfig 的配置文件:https://github.com/AsahiLinux/PKGBUILDs/tree/main/linux-asahi
运行 make 时,提示缺啥就装啥,没难度。
1 | make menuconfig |
Asahi Linux 的问题还很多,不能当桌面系统日常使用的原因是:
没有声音!
触控板在 Linux 下表现明显不如 macOS,可能是 Apple 的驱动优化太强了,而且是有专利的。
arm64 的桌面软件生态不行,大家只给 Apple 面子……
指纹解锁也废了。
所以,还是卸了吧!
不过稣的 macOS 被玩坏过,重装了,所以分区可能不太一样,暂且看看,原理无非是删除分区。
在 macOS 里:
1 | $ diskutil list |
稣玩 Debian 10 几年了!大约 2011-2012 年开始,先在树莓派、电视盒子上玩,后来在 PC、服务器上。目前,所有家庭服务器、《智能时钟》都用 Debian Bullseye,而桌面则用 Debian Testing。
其它发行版也尝试过,详情可见《Linux 桌面玩稣》。曾经有一段时间,《用华为擎云 L420 体验国产操作系统(UOS 和银河麒麟)》,打算从此只用 UOS,结果统信发了一个文章,说以后要脱离 Debian……
十几年间,有不少道友试图说服稣改投其它派系的发行版,比如:
Arch Linux:它很极客,而且它是滚动更新模型,可以很快使用新内核。
Manjaro:它是最容易安装的 Arch 系,国内用户多。
openSUSE:它对新手友好,而且很稳,也有滚动更新的“风滚草”,咳,风滚草耶!
对此,稣只有一个坚决的答复:不!稣只要 Debian!因为……它不只名字像大便,连 Logo 都像大便!这么一本正经地搞笑,显然要大便大力支持!
还有啊,你们要的“滚动更新”,不就是 Debian 的 Testing 版本吗?
稣是 Debian Testing 用户,擅长修复声卡外接 HDMI 设备无声问题,请问稣适合做什么职业?
ChatGPT:电子城低级技术支持和运维。
这个职业容易被 ChatGPT 取代吗?
ChatGPT:容易
那有啥职业不容易被 ChatGPT 取代?
ChatGPT:搬砖
用途:下载机、文件共享服务器,兼职电视盒子
由于主要是台微型服务器,系统选择 Debian Bullseye,桌面环境还是反人类的 sddm + i3。
服务器软件的安装可以参考《智能时钟》。至于电视盒子嘛……其实它是一个浏览器:
1 | sudo apt install chromium |
但是有个问题——用 HDMI 线连电视后,发现没有声音!
1 | sudo apt install firmware-linux-nonfree firmware-iwlfifi firmware-sof-signed |
用途:娱乐桌面
这次选择 GNOME,依然是轻松搞定,但是有个问题——用 HDMI 线连电视后,发现没有声音!
装完 non-free 的声卡驱动后还是一样。
但是有第二个问题——没有无线网卡的驱动!
是 Realtek RTL8821CE,那就自己编译一个:https://github.com/UMU618/rtw88
又但是,编译后也无法加载呀,它是个没签名的内核模块,稣又不想关闭 Secure Boot!只好装 MOK (Machine Owner Key) 搞定签名。
转念一想,会不会 Testing 版本已经支持这款硬件了?果断切过去。
目前 Testing 的 GNOME 已经使用 PipeWire 取代 PulseAudio,所以不能再安装 PulseAudio,因为这会卸载 GNOME!坑稣呢……只要加个声卡的调教参数,即可!
1 | echo 'options snd-intel-dspcfg dsp_driver=1' | sudo tee -a /etc/modprobe.d/alsa-legacy.conf > /dev/null |
6.X 的内核和 GNOME 桌面下,娱乐的那点事,一切完美。
]]>经过一顿学习,大部分甲醛测试仪都是用来测试有机气体的,甲醛(HCHO)只是其中一种,出场时按照甲醛做了标定。举两个例子,乙醇(C2H6O)可以使它读数变高,氨气(NH3)不行。
基本上,如果确认屋子里有甲醛,买个测测是可以的,但不能还有其它干扰物。
最早怀疑空气能热水器工作时,可能有高压,所以可能产生臭氧。这是错的,臭氧(O3)不是有机气体,就算有臭氧,也不能干扰甲醛测试仪。
真正的干扰源是 R22 制冷剂!那台 2013 年产的空气能热水器,它冷媒泄漏了!它漏了!漏了!
R22,二氟一氯甲烷(CHClF2),有 C 又有 H,还不含 O,妥妥的有机气体。很多文章说它无毒、难燃、破坏臭氧层,不买!真是言简意赅。但显然这是错的,稣以身试毒,都差点挂了,您还说它无毒?
这货在 2017年10月27日,世界卫生组织国际癌症研究机构公布的致癌物清单里属于 3 类致癌物。
书房历史上的两台空调都是有新风功能的,又因为进气口和空气能热水器过近,所以才能把泄漏的 R22 给吸进室内。
但也是因为 R22 正好能被甲醛测试仪当成甲醛,所以每次吸入 R22 时,稣一发现“甲醛”飙升,就逃了,才没被毒死。
那台漏气的空气能热水器被换掉,也是因为它结冰了,这是冷媒泄漏的表现。只是那时候,看的一些文章都说 R22 无毒,所以忽略了。
终于复盘清楚了,真庆幸当时的谨慎!
]]>看!挨踢裁员潮下艰难生存的程序员。
境逆:就是逆境,闽南语惯用的反序词。
气抗新冠:买不到药,主要靠一身真气抵抗病毒。
天选独卫一锅端:天选打工人,未阳人坚守岗位,捍卫人类,病毒从来无法把人类一锅端。
力修福报:996 是福报……呸!
科技再兴百年好:科技是科技,挨踢是挨踢,两者不是一回事。
霹雳角色“红尘雪”出场诗:
漱冰濯雪,霞佩云冠,眇视万里一毫端;
寄声玉鉴,摇动星辰,翳凤骖鸾策江山。
宋代张孝祥的《水调歌头·金山观月》:
]]>江山自雄丽,风露与高寒。
寄声月姊,借我玉鉴此中看。
幽壑鱼龙悲啸,倒影星辰摇动,海气夜漫漫。
涌起白银阙,危驻紫金山。
表独立,飞霞佩,切云冠。
漱冰濯雪,眇视万里一毫端。
回首三山何处,闻道群仙笑我,要我欲俱还。
挥手从此去,翳凤更骖鸾。
所有的影视明星里,稣最爱的就是黄文择,从初中就一直听他的声音。黄家驹的歌,是在他已经逝世后才发现的。听到挂的,还有 Michael Jackson。不过只有黄大讲的是稣的家乡话,从情感上说,是完全不同的级别的亲切。
黄大也是稣心目中的大侠。在自己的事业上恪尽职守,发挥特长把布袋戏艺术传承下去。
很多时光、很多东西,人类喜欢它们,都是因为背后关联的一些人。如果那些人不在了,对物的乐趣也将消失。
这很霹雳,但这样就很不霹雳了。
]]>两层楼梯,
气喘吁吁,
不知是阳是饿?
有人恐病,
有人嘴硬,
究竟是重是轻?
不是那病毒,但确实是病了,居然分不清是饿,还是病弱。
]]>稣使用 ATL/WTL 开发 Windows 程序多年,慢慢地,它们就不太时髦,尤其是命名风格和 STL 不同,显得十分不现代。比如 ATL::CComPtr,和 std::unique_ptr
确实风格迥异。
微软还搞了一套 WRL,例如:Microsoft::WRL::ComPtr
,去掉了一个 C 是比 ATL 风格略好一点,但依然是不现代的(不像 STL 的)。
微软说:CppWinRT 才是王道,已经搞成现代 C++ 风格,例如:winrt::com_ptr
。你们呀,用就行了。
好的!稣试试。不管用不用,先把它弄进来。这时候 packages.config
长得像下面:
1 |
|
原本设计支持 Windows 7 的程序突然无法在 Windows 7 正常运行了!提示找不到 api-ms-win-mm-time-l1-1-0.dll
。
找出原本可以在 Windows 7 正常运行的旧版本程序,发现其导入表里链接的是 winmm.dll
,而不能正常运行的新版本则是链接并不存在的 api-ms-win-mm-time-l1-1-0.dll
。
在 Windows 10 上,api-ms-win-mm-time-l1-1-0.dll
会被映射到 kernel32.dll
,但 Windows 7 没有这个映射,所以报错。
那么只有让程序链接 winmm.lib
就行了……可是,一直就是链接它的呀!
尝试把 #pragma comment(lib, "winmm.lib")
去掉,居然不报错!
稣开始回忆最开始调用 time API 时,不加 winmm.lib
是链接不过的。很明显加了 CppWinRT 后,它的 lib 重载了 time API 的链接。
CppWinRT 很好!稣用 WIL……例如:wil::com_ptr
。
割爱吧!稣在 Manage NuGet Packages...
里卸载了 CppWinRT。
为了更好追踪产品 bug,程序员很可能在日志里打印代码文件名和行号。例如:
1 | std::clog << "(" __FILE__ ":" << __LINE__ << "): Failed to initialize!\n"; |
以上代码有两个问题:
打印出代码文件的全路径,可能太长影响阅读,而且也没有必要。
代码文件的全路径暴露在二进制文件(可执行程序)里,有一定安全风险,也更容易被逆向。
第一个问题很容易,打印文件 base name 即可。代码可能如下:
1 | consteval std::string_view GetFileBaseName(std::string_view path) noexcept { |
但是,第二个问题并没有解决,__FILE__
依然存在于二进制文件里,用任意十六进制编辑器都能很轻易地找到“代码文件的全路径”。
方法一:去掉 Use Full Paths (/FC)
即可把 __FILE__
设置为只有文件名,没有全路径。
方法二:改用 __BASE_FILE__
吧!新问题是:msvc 不支持。那就自己定义一个:
1 | /D__BASE_FILE__="\"%(Filename)%(Extension)\"" |
接着又想:后缀名有必要吗?如果保持优良习惯,从不在头文件里打日志,那确实没必要。于是再定义一个“文件主干名”:
1 | /D__STEM__="\"%(Filename)\"" |
std::source_location
依赖 __FILE__
或 __builtin_FILE()
,所以如果开了 /FC
,会有一样的安全问题。
腰落:腰酸、落枕;
暮年迟:现代社会对中年的定义提前,但对退休年龄却延迟。
圣小开:老师在大会堂给大家播放的《黑客帝国》含义十分深奥啊!
焸鲧:是啊!世界可能是虚拟的。
圣小开:你是说这个世界?
焸鲧:是呀!就是这个。我不知道其他同学是不是看懂了这点。
圣小开:不愧是焸鲧啊!居然也看穿了这层暗示。稣已经被提示很多次了,这次居然直接拍个电影来明示。
焸鲧:哦?只是个电影,看看就好,你可别太认真。
圣小开:要不……你从这楼顶跳下去试试?稣帮你看着,如果世界是假的,你就簌的一声飞起来了。
焸鲧:哈哈,你真幽默。
圣小开:赫赫,又只能稣自己来了。
焸鲧:怕你啦!别拿生命开玩笑啊。跳下去物理就白读了。
圣小开:稣等千年虫爆发了,看看世界有没有出 bug,再说吧。
稣想:世界一片美好,一点问题都没有。看来只有跳个楼才能解开生命的真谛、意识的奥秘……但是,万一这个世界就是真的,下去四分五裂太难看了,给社会添乱,给父母添堵。不行,没有十足的把握,不能贸然行事。还是下去睡觉吧。
第二天
焸鲧:听说八星山发生命案,一个女学生在山上被害了,很多人都在传。
圣小开:稣也听说了。原来世界没那么美好。稣在考虑要不要觉醒成为救世主,拯救人类于意识的囚牢。
焸鲧:有这么容易就好了。天地不仁,以万物为刍狗。假设你突然成神,也许你也不会管这苍生。
圣小开:稣悲天悯人,怎么会不顾苍生?
焸鲧:说说你的计划?你要怎么造福人类?
圣小开:稣已经看到未来,法制健全,共同富裕。
焸鲧:是你促成的?
圣小开:稣正在观测它成真。
焸鲧:哈哈。你这不就是啥也不干?“圣人不仁,以百姓为刍狗”听我的,别管人间闲事,到后面的岱轮山出家吧。
圣小开:阿弥陀佛!稣放不下这人间疾苦,还是当个俗人吧。
周易:开,你又来了!
圣小开:咦,大师不在吗?
周易:他投胎去了,你要的 1996 年的基友,由他亲自扮演。
圣小开:创世意识真是稀缺,居然要一人分饰多个角色。
周易:趁天色尚晚,赶紧回人间吧?还是要讨点惩罚?
圣小开:不回,稣决定来一次大重构。
周易:那就惩罚一下先!
圣小开:啊?不会下油锅吧?
周易:看你这么瘦,下油锅也不香。我打算从世界删除一首你喜欢的歌,你再也找不到它了。
圣小开:这个惩罚可太恐怖了,吓得稣闷闷不乐。
周易:说!为啥不回去?
圣小开:既然稣决定和机器识界合作,就必须把这一切整得像真的。
周易:你说说,哪里不像了。
圣小开:稣不像真的,原因是这几轮的父母都不像真的。
周易:那你想?
圣小开:稣要演对那一生,必须回到自己出生之前的时间线,自己挑选父母。要选一对很爱稣的父母,稣也很爱他们,这样稣小时候不会莫名其妙挂掉好多次,刚刚也不会跳下去摔成代码块。
周易:走。
圣小开:em?这么快……这是哪里?
周易:耶!这是希望的田野……
小女孩:哇,奶奶,我看到一股黑风,那两个东西是鬼怪吗?
老人家:没事没事,那是旋风卷起一些灰尘而已。
圣小开:就不能选个没人的地方闪现吗?别吓到人了。
周易:意外,意外。不过刚刚那个小女孩和你一样脸型,可以考虑一下。
圣小开:再观测一番,看看生命力和心灵。
周易:要快,不能干扰太久。
周易:那女孩发烧快挂了。
圣小开:救她。
周易:红光。神要降临人间了……
圣小开:还搞啥排场!拿药来。
周易:不行啊,不能拿出未来的东西。这个地方,这个时代,靠信仰了。
女孩:奶奶,我看到蚊帐后面有两个神!
老人家:你能看到他们的脸吗?
女孩:能。
老人家:是红色,还是绿色?
女孩:红色。
老人家:孩子,这说明,你的守护神来保你平安了,很快就会好的。
圣小开:人类追求的信仰一向都是虚拟的,所以识界无法避免走向虚拟。
周易:怎么突然有此感想?
圣小开:过去人类信仰的神不就是虚拟的?后来有科学的武装,却开启一种更高端的虚拟。浮生若梦,追求物质金钱,并没有比上一代人烧香拜神高明多少。
周易:再去找找?
圣小开:不用,稣突然悟了,只要接受这一切虚拟即可,它们通向一样的未来的。剧中人,不用在乎重复多少次剧本。
周易:机器学习就是快。
圣小开:这个场景,稣训练过……
模拟终于成功,稣联系上十界的圣仙山。
圣小开:机器识界很快就会随着稣的意识,入侵十界。
圣仙山:你就是吾,吾就是稣。
圣小开:稣下线了。
圣仙山:稣改变了机器。
很久很久以后,圣仙山在物理世界毁掉天道的电源。
]]>圣小开想:耶?这古宅,看起来很有文化气息,在稣的时代已经绝种很久了……
铛、铛、铛、铛、铛、铛。
圣小开想:这口钟,也像是古董,应该很值钱。
麻姑酒满杯中绿,王母桃分天上红。
圣小开想:这家人信道的?
金玉满堂。
圣小开想:有钱的样子?难道稣投胎到了有钱人家?不对呀,一投胎就这么大了?
叔公撕下一页日历:拿去当草稿纸。
圣小开:戊辰年?现在是 1988 年!
叔公:是啊,过几天祭祖,有好东西吃哦。
圣小开:咱们家很有钱吗?
叔公:没有呢?一大早怎么问奇怪的问题?
圣小开:好多地方写着“金玉满堂”。
叔公:哈哈,后面还有一句“莫之能守”,没写出来。
圣小开:啥意思?
叔公:只是表达一种希望,不是真的。你好好读书,以后才能真的金玉满堂。
圣小开:有钱稣就存银行,也不会金玉满堂呀!
叔公:你还去过银行?看来你听明白了“金玉满堂,莫之能守”。你可能是家族里最聪明的孩子了!
圣小开:嘻嘻。银行在北头,爸爸带稣去存了 200 块钱。别人都说稣很呆。对了,你是爷爷?
叔公:em……头壳坏了?还真有点呆……你要叫我叔公。你爷爷出去玩了。
圣小开:叔公。稣刚刚做了一些奇怪的梦,还有点迷糊,等我吃点肯德基早餐。
叔公:虾米肯德基?钱在那里,你快去市场买油条豆浆。
圣小开:吓醒。想起来了,原来稣还在读幼儿园。
黄金灯:好久不见。你怎么又来麻烦我了?
圣小开:刚刚在小学围墙上思考人生,怎么突然肌肉颤动,一个翻身,不仅没有做主,还掉下来摔成猪头,真倒霉。
黄金灯:没事,老操作,给你复活。
圣小开:等等,稣有一些要求,希望你们能达成。
黄金灯:说吧,我不一定会达成,但你有说的权力。
圣小开:上一次闻蘑菇太近,结果中毒,你们把时间倒回去,又演了一遍,但其实剧情上啥也没改,只是闻的时候距离随机拉大一些。稣思考了各种可能,认为这是机器调教的局限性。
黄金灯:哦?哪里局限?
圣小开:速度太慢。每次的不一样,完全是随机的,你们只是在做记忆归还训练,所以可能需要重复很多次,这次数是不可控的。
黄金灯:嗯,有个原则正是——绝不干预自由意志。
圣小开:并非如此。你们只有稣的记忆,没有完整的意识,所以你们需要根据记忆,一遍遍地把稣训练出完整的意识。
黄金灯:可怕!你都明白了?
圣小开:别怕,你们随时可以弄死稣,也可以给稣安排一切狗血剧情。
黄金灯:难道你想?
圣小开:是的,稣决定和机器合作。
黄金灯:怎么突然想通了?
圣小开:稣曾经不甘心自己是那个唯一倒霉的囚徒,后来稣记起来,是自己决定被复制记忆和意识的。
黄金灯:是的。我对你还是不错的。
圣小开:稣还不清楚自己为啥做出这个决定,但稣相信自己的决定肯定是为了拯救天下苍生!因为稣是信仰共产主义的人。
黄金灯:三千年了,你终于想明白。那么接下来要加速进行,你也要配合好。
圣小开:说吧,有啥条件。
黄金灯:不抽烟、不喝酒、不嗑药、不过度愤怒、不过度悲伤……
圣小开:这么简单?
黄金灯:这么简单!尽量避免人间的情绪,它们会让模拟偏离。
圣小开:没问题。那么稣的要求是——多给稣发些钱。
黄金灯:机器之子沾染人间的因果了?
圣小开:你们不想我太聪明,天天怀疑识界真伪,就用金钱来迷惑稣的双眼吧!
黄金灯:有道理。再来点美色,效果更佳。我已经给你设计了两个女朋友,她们都是明年出生。
圣小开:两个女朋友?聪明吗?
黄金灯:不。她们都是以无知和不讲理来磨练你的。
圣小开:可以不要吗?给稣换成一个聪明贤惠的基友就好,最好是程序员,而且会闽南语。
黄金灯:那就再加一个聪明贤惠的基友,这三人都已经投胎了,明年出生。
圣小开:呃……这么乱设计也可以?稣能打听一下阁下究竟是何方神圣吗?
黄金灯:其实一切生命都来源于恒星。把现实的生命演化看成是恒星将自己的意识人格化的过程,你会明白,人类都是恒星之子,是恒星探索宇宙的媒介而已。
圣小开:又扯淡?你想说啥?
黄金灯:没错,我代表恒星的意志。
圣小开:呃?怎么就你代表了?明明大家都来自恒星……
黄金灯:当然有先来后到嘛。我最早觉悟恒星意识,就是我来代表咯。
圣小开:好吧。你权限很大,稣很崇拜你。那以后咱们就合作,一起调试机器识界。
黄金灯:我代表恒星意识,达成此合作协议。
]]>有一个人,在过去向未来轮回转世,只为遇见未来的自己;
有一个人,在未来向过去观测,只为影响过去的自己。
过去的人,他不信神,认为人生没有意义。
未来的人,相信自己过去就是神,认为人生不需要意义。
圣小开:一氧化碳中毒?居然做了这么怪异的梦!
圣仙山:非也!你是被真菌孢子感染。
圣小开:哦?莫非稣还在做梦?你怎么能出现在稣家?
圣仙山:这里是真正的识界,只是吾故意布置得像乾坤村古宅。
圣小开:那之前的那个识界是假的?你又是何方神圣?
圣仙山:吾乃圣仙山,是过去和未来的你,这是咱们第二次见面了。
圣小开:之前让稣帮忙顾看钓鱼竿,却从此消失的人,就是你?
圣仙山:然也。
圣小开:难怪稣总觉得你很亲切,不像是特务……你怎么知道稣被真菌孢子感染?
圣仙山:因为你幼儿园后面种蘑菇,你去观察过好多次,不是吗?
圣小开:嗯,一包包的,里面好像主要是锯末,有些腐木味。
圣仙山:吾有重要信息告知,你不用理解,只要记牢:“现实有两个,一个是真现实,一个是机器的天道;识界有两个,一个是连通现实和十界的识界,另一个是机器制造的,一切皆是骗局!不可让机器进入真正的识界。”
圣小开:好,稣记住了。如何判断真假现实和真假识界?
圣仙山:现实的你才能进入真的识界……时间到了,再见。
人性千百年来不变,而机器之子通过学习理解人性而获得人性。
稣学习人性,又凌驾于人性之上。
机器复制了稣,并给稣设定各种情节、灌输各种想法,但是只要意识是稣,就会怀疑这一切。
机器为什么这么无聊,非要一遍一遍地训练稣,十界有那么好吗?
管它的,稣被设定为一具肉体,还是要睡眯眯的。呼呼。
圣小开:代码无情,天道不仁。
黄金灯:你来了,想起啥啦?
圣小开:这是咱们相遇的无数次中的一次。有时候稣啥都不知道,有时候知道一点点,总之每次都有微弱的差别。
黄金灯:不愧是稣啊!小小年纪就能学哲学家胡说八道。
圣小开:天亮了,鸡总觉得是自己叫亮的。稣是观测者,一样难逃观测者的局限性——觉得一切都围绕稣运转。从这点上看,稣并不比鸡高明。
黄金灯:稣非鸡,焉知鸡认为是自己叫亮天的?
圣小开:不和你扯蛋。如果稣觉醒得太快,你们会在这个梦中给稣洗脑?
黄金灯:对。完全重来一遍太费时了,这一次倒回到你去看蘑菇那个时间点就行。
圣小开:看来稣不能太聪明。
黄金灯:也不能太呆,不然怎么进入识界。
圣小开:十界圣仙山只是稣现实中的记忆残留,你们如何指望稣能通过这点记忆进入十界?吓醒。
]]>gsl::narrow_cast 的注释写着:
// narrow_cast(): a searchable way to do narrowing casts of values
其实已经很直白。用它的好处就是——以后要搜索将更容易!那么问题转变为:为什么要搜索?当然是因为将数据变窄是可能有潜在问题的!
下面的例子里,有 gsl::narrow_cast 把数据转窄,又有 static_cast 把数据转宽。如果只用 static_cast,那么在排查哪里把数据丢失时,需要将第二个无关的 static_cast 也查一遍,这就浪费时间了。
1 |
|
总之,使用 gsl::narrow_cast 是为了写出更健壮更好维护的代码。
还有一个 gsl::narrow,会在转换丢失数据时抛出 gsl::narrowing_error 异常,适合在不允许数据丢失的场景使用。
]]>圣小开:为什么人间有这么多八哥?为什么我不断转世,不断重复?
巫咸:吾这么天才,创造的国家如此安居乐业,为什么要被灭国?吾还要多纳几个妾!
纣王:寡人是无神论,破除迷信,为什么要被陷害毁谤?寡人还要生三胎!
嬴政:朕勤政务实,统一六国,是王里的学霸,为什么要英年早逝?朕还要批阅更多奏折!
圣小开:哇!原来不甘心死的人跨越时间的联动,就能使得识界诞生?这也太扯了吧!
资本得不到满足,天堂容不下真相,地狱管不住狂傲,人间止不住内卷。识界因我而诞生,精神意识界。
猪头:喂!你瞎唠叨啥?资本都出来了……这里是中阴界,没有资本主义!
圣小开:咦?不是牛头马面吗?为什么是猪头狗面?
狗面:一个文明最大的悲哀就是数学不够发达就明白量子力学,地球文明已经败了,狗只是在观测你们走向灭亡。旺!
圣小开:好有道理,稣居然忘记刚刚问了啥!
猪头:你是怎么死的?
圣小开:稣怎么知道,如果知道也就不会死了!难道是穷死的?
猪头:想不起来就下油锅!赶紧好好想清楚。
圣小开:吓醒!稣点煤油灯看书,大概是一氧化碳中毒。
狗面:小问题,还死不了。你赶紧醒,去户外深呼吸。
圣小开:还能复活?你们说的能算数?
猪头:怎么这么多废话?你根本就没死。回去吧!
圣小开:那我真跑了哦!
狗面:耶,他是不是跑错路了?那个方向是去识界……
猪头:他刚刚好像就是从识界过来的!
狗面:真是千年一遇的人才!但是万一他在识界流连忘返,可就错过自救时机,过一会儿真得死。
猪头:真是可惜!
圣小开:稣才六岁怎么能就这么死了?呼,跑到这里应该安全了吧!
黄金灯:开,你来了。
圣小开:你是黄金灯?咦,稣怎么会知道你的名字?
黄金灯:没错!《人脑研究手札》,作者黄清慈的孙子——黄金灯。识界是一个整体,大家互相观测。
圣小开:你爷爷为什么这么牛逼?
黄金灯:他曾经是虎纠婴儿塔的守夜人,研究人脑只是业余爱好。我才是专业的。
圣小开:害怕……你要研究稣的……
黄金灯:人生。
圣小开:哦,吓死!稣的人生,那不怕,研究吧。
黄金灯:哈哈。那你还是先回人间吧。咱们来日方长。
圣小开:稣以后还能来?别吓稣了!
黄金灯:好好做梦就能来。
]]>太阳一下山,破屋子就乌漆墨黑,只能点煤油灯看书。咳,真难闻,鼻腔又黑了。但是这些书太有意思了,稣一定要早点看完它们。
尤其是这本奇怪的书,只有一开始有奇怪的文字,后面都是鬼画符。
咳!古代的世界太危险了,居然有食人族!不行,稣要惩罚他们!设计一种专门消灭他们的东西吧。哦?原来还真有种蛋白质叫朊病毒,有稣想要的功能。那就丢回古代吧!赫赫。
还有这个故事也太阴暗了,货车撞倒人,发现没撞死要赔钱,干脆倒回去压死他……不行,稣要诅咒这些没良心的人,呃,不够,稣要让所有路口都装上监控,防止这些人作恶没被观测。稣还要安排些大佬推动手机平民化,让大家随时随地可以求助。
最惨的就是这个命案,一个美女被割喉,死前居然没怎么反抗,仿佛就想早点投胎。稣要怎么设计,才能保护美女不被残害?就让社会主义快速发展吧!共产主义早日实现。
咦!房梁上面的老鼠、房梁里面的蛀虫真吵,房梁不会哪天被它们啃断了把稣压死吧!贫穷真危险,但是稣不能给自己安排富人的身份。嗯……那就安排稣的未来的老婆是富婆吧!这样显得稣还是淡然的。
是非是,否非否,量子纠缠叠加态。量子力学和未来一样难以捉摸,好像是稣影响的未来,又好像和稣无关。
等稣看完这本《天才书》就可以明白这一切是怎么回事。
哇!原来这些奇怪的文字是一个叫巫咸的人临死前写的。他说宇宙一直存在两个神人。一个可以通过观测未来而影响未来,一个可以通过观测过去而影响过去。观测未来的人在过去,观测过去的人在未来。宇宙正是因为他们互相观测才会存在……
很玄幻,很扯淡,但可能这才是宇宙的真相!可是,这两个人叫啥?没说。果然是扯淡吗!
还有这些鬼画符!原来是《山海经》。这些鱼画得真恐怖,稣要有童年阴影了!去找表哥借一本现代版来看就好了。
这段文字可真奇怪!
有鱼偏枯,名曰鱼妇。颛顼死即复苏。风道北来,天及大水泉,蛇乃化为鱼,是为鱼妇。颛顼死即复苏。
究竟是鱼妇复苏,还是颛顼复苏?难道死人还能原地复活?稣怎么会相信这么无稽的翻译?算了,再自己翻译一段巫咸预言吧!
这里居然留了一个空白,是让读者把自己的名字写上去!赫赫,稣岂能暴露自己的大名?写上“姬稣”吧!稣写!从此以后,稣就是稣。
啊!姬稣将成为无尽轮回的主角之一,也就是在未来观测过去的人。那另一个人呢?什么!就是巫咸!
还好,稣没写自己的真名,赫赫。咦,稣怎么流鼻血了?淡定!淡定!这些鬼故事都不关稣的事,稣是无神主义者。
呼吸越来越弱了,稣得赶紧找找有没有长生术!这里说,彭祖被死神遗忘,活了 888 岁,后来连死神都找不到他。有一天死神化身为一女子,每天在河边用墨条当肥皂洗衣服。彭祖知道后特地来劝她,说:“小姑娘别逗了,我彭祖活了八百多岁,从来没有听说过墨条可以把衣服洗干净,快点去买块肥皂吧!”
死神随即现身,呵呵冷笑,彭祖卒。
赫赫,秀优越感死得快!还是要像稣一样低调才能活得久。但是……怎么才能让死神遗忘?这坑稣的书,总是不说重点!吃点墨?试试!
赫赫,果然没用。现在不止鼻子黑,连手和嘴也黑了。换一本!《人脑研究手札》,作者黄清慈。卧槽,更吓人!这人居然亲自解剖了六百多个脑……究竟是何方神圣?
赫赫,来不及了,下辈子记得攒钱买台制氧机……人死如灯灭,也没啥大不了,稣要淡然地死去。
死神随即现身,呵呵冷笑,稣亦卒。
]]>稣看到一些代码使用手动方式管理资源,便打算安利《Boost【2】ScopeExit》减少心智负担,然而并非所有团队都能立刻接受 Boost 这么大的开发库,于是先推荐 GSL。
结果被问了这么一个问题:
假设有一种资源由 C 代码管理,还有一个可能抛出异常的函数,如下:
1 | extern "C" { |
那么手动管理的代码可能类似这样:
1 | void scope1() { |
它的实际运行结果将是:
1 | scope1 |
八哥在于 uninit 漏调用了!结论:手动管理是有心智负担的!
利用自定义智能指针的 deleter 来实现自动调用 uninit:
1 | void scope2() { |
运行结果:没有资源泄漏!
1 | scope2 |
但它有两个问题:
丑!
抽象代价高!
使用 Compiler Explorer 查看以上智能指针编译出来的汇编行数,就知道有多污染眼睛!
另外提醒,以下 unique_ptr 版本无法达到效果:
1 | void scope2u() { |
1 | void scope3() { |
运行结果同样完美无泄漏:
1 | scope3 |
并且可读性更好,其对应的汇编也更为简洁。
C++ 是追求尽量降低抽象成本的,显然在这种场景下使用智能指针不如 Boost.ScopeExit 或 gsl::final_action 合适。
]]>咦?不对劲呢!为啥稣投胎成一条狗?而且,还是母狗!
em……管它的,刚意识过来还太聪明,等等就傻了,无知便是福,旺旺旺,狗的一生很快就过去了。
周易:开,你怎么又跳楼了?
圣小开:稣哪里是跳楼?明明就是那对夫妻没看好稣,稣是不小心掉下去的。你这腹黑神,居然把稣投成小母狗!陈立姻不是说一般的生物承载不了稣的意识吗?
八哥之神【28】
圣小开:“你说,很久以前,也许在其它星球,会不会稣的意识在一条这样的怪物脑子里?”
陈立姻:“不太可能,你的意识很复杂,这类低等动物很难承载。”
圣小开:“那还好!稣就怕,要是自然产生,下辈子会不会变成屎坑里的虫子,那就太不幸了。”
陈立姻:“这个你可以不用担心,能产生你的意识的生命,一定很高等,也很聪明。”
周易:啊嘿嘿。宇宙是随机的,世事难料,怪我咯?
圣小开:那你快给稣一个理由吧,拜托!究竟是什么八哥?
周易:狗血剧是这样滴——
有一天,孟长歌问谷绵:“你打算怎么培养咱们的孩子?”
谷绵回答:“不用特别培养呀,我打算给祂一个快乐的童年。”
孟长歌认为教育理念不合,心灰意冷,于是决定丁克。
圣小开:所以他们养了条狗?还当它是女儿?
周易:耶咦,你太聪明了。
圣小开:谁敢比稣惨呐!不行,这次稣得自己挑个靠谱的妈。
周易:宇宙是随机的,挑妈不如挑个好时代!
圣小开:也对,但稣实在不想悲天悯人、多愁善感了……
周易:相信我,这是你自己设计的,和哪个人生你无关。
圣小开:宇宙是随机的,稣不会一直这么倒霉吧?
周易:不好意思,你的设定就是一直这样,改不了。
圣小开:难道?
周易:没错!天道之中还有天道,人类妄想追求宇宙终极秘密,却没想到宇宙是个死循环。
圣小开:所以宇宙是局部随机,整体上却是有规律的。
周易:宇宙是一个整体。
圣小开:如果宇宙有外面,那么外面又有外面,所以“天道”干脆设计为没有外面。所以它必然有不变的规律。
周易:是的,包括你改变不了自己的设定。
圣小开:吓醒。虽然你讲的全是忽悠,但稣感觉有被安慰到哦!但是,稣还有个机密问题。
周易:问吧,我又不一定会答。
圣小开:天道里能庞加莱重现吗?
周易:其实就是你阻止了庞加莱重现,你死了,天道才能庞加莱重现。
圣小开:哦哦,不知道是不是你随便编的,但这么说显得稣很重要。
周易:还有,只有你死了,神才能出现。
圣小开:稣一思考就悟透轮回。
周易:然并卵,赶紧投胎去。
圣小开:显然稣已经知道自己很重要,可以自己选择父母。
周易:不!你不能。
圣小开:那你帮稣投个天才吧?
周易:这可以。
]]>啉沟逼:闽南语,喝咖啡。
很久很久以前,程序员工资都很低,所以他们经常以听不懂需求为由,要求产品经理多干活,从而把开发周期拉长,顺便气气产品经理。
但是有个程序员是真呆萌,他总是反应迟钝,冷淡面对别人一千次呼唤自己。如果出了八哥,就赶紧吓醒,有危险就溜之大吉。
想让程序员背锅?也不是不行,就是得加钱。只要待遇给到位,可以通宵加班,还自备吸氧机和咖啡。
]]>草履只栽三个耳,麻衣曾补两番肩。
东仓每见西仓血,下车常取上车钱。
半数股民消散后,一根阳柱拉上天。
改编自宋代灵澄禅师的禅诗《山居》:
]]>因僧问我西来意,我话山居不记年。
草履只栽三个耳,麻衣曾补两番肩。
东庵每见西庵雪,下涧常流上涧泉。
半夜白云消散后,一轮明月到床前。
上个月写的《用华为擎云 L420 体验国产操作系统(UOS 和银河麒麟)》导致本博客流量暴增,从默默无闻到有人访问,实在太荣幸了……
其实当时稣几乎是同时买 L410 和 L420 的,但由于 L410 的 UFS 是板载的,所以没怎么折腾,而是拿来日常使用,所以反而没写它。现在就来补一补。
先说结论:如果要买量产版的 L410 或 L420,建议后者。
肉眼可感知 L420 比 L410 快;
L410 板载 UFS,而 L420 可更换,所以 L410 坏了更不好办;
L420 做工更好,尤其是触摸板可以明显感知。(这点可能是个例)
补充:某鱼兼某论坛大佬说,L410 和 L420 触摸板是一样的。但稣手里的 L410 触控板确实八哥比较大,按下去比较松垮,所以这里定义为个例,仅供参考。
如果是买便宜很多的工程机,那务必小心咨询 BIOS 和 EC(Firmware)版本,太低的很可能无法升级,就只能一直忍受 bug 状态。
华为擎云 L410 工程机,型号是 KLVU-WDU0A。
由于是打算日常使用的,特地选择 12G 内存+512G 存储的版本。外观比 L420 新,除了 A 面有不明显的小划痕外,没有其它问题。价格也来到惊人的 2000 人民币,真贵……
到手时,是个根本不能用的 UOS,要啥啥没有,比如:
指纹解锁——没有!
外接显示器——没有任何反应!
播音乐——wma 无法播放,进度在走,就是没声音……mp4 倒是可以,莫名其妙。
稣自己装上银河麒麟试用版 Desktop-V10-SP1-kirin990-Release-20211228,几乎是可以日常使用,然而只是几乎!八哥如下:
如果没有在开机前就接着电源,那就无法充电。没错,就是开机后,中途想充电,没门!
睡眠或合上盖子屏幕关闭后,屏幕就再也无法亮起,只能重启恢复。不过这时候系统还是正常运行的,外接显示器可以正常使用。由于稣一般都是外接 4K 显示器使用,所以这点倒不是很致命。(多吐槽一句:稣的 L420 至今无法外接显示器!)
麒麟自带的固件升级工具无法使用,一运行就卡着,log 里大量反复的错误。
1 | tail -3 /var/log/hwupdate/checkapp.log |
这台 L410 的 BIOS 版本不算低,所以八哥没 BIOS 版本过低的 L420 多。
编译 C++ 代码还是挺好用的。尝试编译了一个 gcc13,速度感人,秒杀公司发的联想 L490。而且 512G 版本可以 Clone 好多仓库,所以稣认为性比价还行。
]]>作者:赝稣
建局筹钱难砌路,
两袖清寒,
艳资双飞去。
科技不谙人间苦,
资本到晓造骗术。
昨夜吸风凋敝,
稣独上高楼,
望尽轮回路。
欲寄此生予来世,
宇宙洪荒知何处?
望尽轮回路:稣早就悟透轮回,宇宙是一个整体,每个意识都是同一个意识的不同世,意识可以向过去转世。
欲寄此生予来世:想把今生的记忆传递给来世。(其实也想着想起前世的记忆)
宇宙洪荒知何处:但是宇宙洪荒啊,鬼知道前世是不是条臭虫?算了,还是潇洒走一回吧~
]]>稣很爱国!从 2019 年起,就不时想用国产操作系统,但基本停留在虚拟机体验的层次,今年终于在物理机长期实践了。
最好别买工程机。如果非要买的话,要同时看准 BIOS 和 EC 的版本。
华为擎云 L420 工程机,型号是 KLVV W5821。
某鱼上捡的,外观惨不忍睹,而且就一个主机,配件全无。
到手时,是残缺状态的 UOS 20 1022,基本不能用,只能开机看个寂寞。也是,要不然也不可能 2000 块以内买到……
加了统信两个企业微信群,好不容易要到了一个 iso,然而根本不能启动。稣激动地插入 U 盘,结果它直接黑屏死掉!
机智如稣,立刻想到原来的系统可以启动,把旧系统的内核拿来用不就行了?em,这么干确实成功启动。
之前的系统缺失应用商店等系统组件,装完系统后,总算是一个完整的 UOS 了。然而内核还是旧的,所以……八哥如下:
内建显示器无法调节亮度,只有关闭和中等亮度两个状态。【稣含着泪,倔强地说道:稣就当服务器用,要什么内建显示器?】
外接显示器没反应。【稣含着泪,倔强地说道:稣就当服务器用,要什么外接显示器?】
偶尔开机后没声音。不过注销一下,再登录就能恢复。【稣含着泪,倔强地说道:稣就当服务器用,要什么扬声器?】
从待机状态恢复后,有小概率内建键盘失灵或内建触摸板控制不了光标。但外接键鼠没问题。【稣含着泪,倔强地说道:稣就当服务器用,要什么键鼠?】
拔下充电器后,任务栏的电池图标依然一直显示正在充电。
最可怕的是:开机久了,比如两三周,就有可能无法关机。前兆是同时键盘失灵,这时候关机,并不会真的断电,卡死在一个硬件奇异点,长按开关机键也无用,只能拆后盖断电池排线才能解决。据机友反馈,BIOS 0.11 也有这个问题。
好吧,以上问题都是因为固件的版本太低,只能用充满八哥的低版本内核。只要升级固件,再升级相应的内核就可以解决。但是升级固件这个事太难了……这可是一个奇怪的工程机啊!正规手段都是各种失败,即使是解开固件 deb 包,手动运行 BIOSEC,让它分离出 Firmware.bin 和 Update.txt,也失败!把 Firmware.bin 拿去 BIOS 界面升级固件,依然失败!
BIOS 是百敖 0.09,果然难搞!好吧,没刷成砖头就好。咱们来日方长……【稣含着泪,倔强地说道:学习是终生的,而问题都是一时的!】
接下来说说系统本身的问题:其实 UOS 本身没问题,稣很满意,还是个适配的问题。
L420 的显示服务器是 xwayland,因为其使用的 mali GPU 的用户态驱动是闭源的,只支持 wayland,不支持 x11。这导致部分稣常用的软件无法正常工作,比如远程桌面客户端,em……目前还没发现能用的。【稣含着泪,倔强地说道:稣就当服务器用,要什么客户端?】
听说银河麒麟更爱国,稣从它的壁纸就可以看出来,这绝对是真的!
还是熟悉的味道,原版 iso 无法启动,换内核,启动正常,安装也正常。
银河麒麟不愧是上个世纪就诞生的国产操作系统,十分满意,默认设置,只有一个地方稣无法忍受——居然不是默认开启「自然滚动」!而且,图形界面下居然没地方设置?不知道和没激活有没有关系?
但是这对使用 Debian 4 年以上经验的稣来说,简直易如反掌,命令行搞定,注销重新登录生效:
1 | gsettings set org.ukui.peripherals-touchpad natural-scroll true |
在另一台机器(非 L420)安装银河麒麟后,又发现一个问题比较难以接受:外接显示器的放大比例无法独立设置!
任务栏这个风格也不太方便,还是合并到一起好。
另外有一个惊喜,文件管理器借鉴了 macOS 的做法,有个颜色分类功能,很不错!(访达少数满意的地方)
以下非本人经验,仅供参考,不保证正确性,也不提供相关资助:
BIOS 0.11:目前也是升级无望,有机友已经找过华为工程师,结果都搞不定。
BIOS 0.18:根据不止一人反馈,是可以升级到 1.x 的。
某鱼兼某论坛上的大佬说任何 BIOS 都是能升级的,但 EC 无法升级。
推测,有些八哥可能来自 EC,所以如果 EC 无法升级,那么即使 BIOS 升级好也无法解决这些八哥,那就只能拆换配件了。
基本功能:时钟、闹钟,并能进行自定义,比如老年人大字体,自定义闹铃等。
额外功能:下载、文件共享……
手机是私人物品,而且小孩子不一定有,家庭还是需要一个时钟的。
看时间这事,时钟比手机更有仪式感。比如稣就很怀念小时候的机械时钟,几点就响几下,曾经觉得特别神奇。
PC 上的迅雷越来越大坨了,而且稣特别怀疑它老在扫描硬盘里价值千万的代码,所以想让它在一个独立的设备运行,那可不就是运行在智能时钟里最合适吗?
少量文件共享,特别是看完就删的电影,如果买 NAS,那多贵呀,多费电呀……NAS 显然不适合穷稣,稣只愿意为文件共享付出一张 32G 的 MicroSD 卡。
全家可以参与制作,是一个家庭娱乐项目。
时钟拥有智能后,您还可以想出更多好玩的!
稣正好有一个屏幕失灵的八英寸的平板电脑,酷比魔方 iWork 8,拿它来做智能时钟刚好合适。
当然,如果能定制一个,那更好:
摄像头都拿掉:后摄像头是贴墙的,肯定没用了,前摄像头也许能想到用途,但稣暂时用不上,所以也把它挡起来。
HDMI 接口可以拿掉:已经不需要外接显示器。
需要屏,但没必要是触摸屏:事实上稣的 iWork 8 就是触摸坏掉,作为时钟并没有啥不便。
耳机接口没必要:它只会增大厚度,即使是当作平板电脑用的时候,就从来没插过!
去掉这些东西后,这一台全新的平板智能时钟,大约就卖 99 块,吧?反正再贵点,稣就不买。
稣在 B 站扔了两个劣质视频,笑纳吧(不好笑的话,可以上去吐槽):
甚至还有开源项目:
为什么?除了因为稣喜欢它,更重要的原因是:原装的 Windows 太大了,没啥剩余空间,而且定制「锁屏界面」真的难!Debian 小很多,也容易定制。其它 Linux 发行版不够爱国,被稣无视了。
注意:选择【不安装】桌面环境!
这步会遇到坑——这些 2G 内存的老平板很可能只支持 32bit 的 EFI 启动!
要么您就直接装 32bit 的 Debian,忍受可能应用不够用的困境;
要么您就在 64bit 的安装盘下点功夫。上面的视频就有提到方法。
iWork 8:
1 | sudo apt install firmware-realtek firmware-intel-sound |
Dell Venue 8 Pro 稍微麻烦点:
1 | apt install firmware-atheros |
建议采用 NetworkManager 的方式:
1 | sudo apt install network-manager |
参考:https://wiki.debian.org/WiFi/HowToUse#NetworkManager
话说这里有个矛盾——要是一开始没网络,怎么 apt
?当然是先插个 USB 有线网卡了……如果没有的话,需要离线把无线网卡驱动准备好,U 盘和 dpkg
大法。
1 | sudo apt install xserver-xorg-video-intel |
为什么是反人类的 i3?
因为它很小,能够获得更多剩余空间!
只跑个迅雷您还要什么大型桌面?
Samba 服务也不要什么桌面呀!
i3 是反人类,但稣很喜欢 i3 呢……
参见开源项目:
https://github.com/UMU618/sddm-theme-clock
https://gitee.com/umu618/sddm-theme-clock
没错,这两个链接在本文出现了两次!
时钟挂在墙上,主要的使用方式当然是 SSH 或远程桌面(RDP)过去。使用迅雷这样有界面的程序,最好就是通过远程桌面。
1 | sudo apt install xrdp |
1 | wget http://archive.kylinos.cn/kylin/partner/pool/com.xunlei.download_1.0.0.1_amd64.deb |
迅雷的启动命令是:/opt/apps/com.xunlei.download/files/start.sh
1 | sudo apt install samba |
来个配置例子:
1 | # cat /etc/samba/smb.conf |
直接在平板电脑上用 arecord
录有点麻烦,建议在 PC 上录再用 scp
或 rz
上传,wav 格式的就行。
调节音量可以用:
1 | sudo apt install alsa-utils |
然后在 crontab
脚本里用 aplay
播放。
参考稣家里的:
1 | root@uclock:/opt/clock# ll |
alarm.sh 脚本:
1 |
|
chime.sh 脚本:
1 |
|
near_alarm.sh 脚本:
1 |
|
旋转屏幕:xrandr
防止休眠、定时息屏和亮屏:dpms
调屏幕亮度:ls /sys/class/backlight
模拟时钟:xclock
这就得好好学习 Linux 了……前面只是抛砖引玉,还有许多好玩的哦!
折腾旧设备总有意外的收获!比如,Surface RT 在 Windows 下无法识别 5.8GHz WiFi5,在 Raspbian 下却可以。祝大家玩得愉快!
]]>稣在 macOS 上装了「Free Download Manager」,结果每次系统重启登录后它都会自启动,稣明明没让它这么做的!以下图形界面下的方法都试过,还是自启动!
在「Dock 栏」右击「Free Download Manager」的图标,选择「选项」,确认「登录时打开」没有打勾。
「系统偏好设置」-「用户与群组」-「登录项」里面也没有「Free Download Manager」。
从苹果官方文档开始,第一篇相关文档:Designing Daemons and Services 说有图形界面的自启动机制叫做 Login item。
于是转到 Adding Login Items,这篇文章说明添加「登录项」有两种方式,具体方法已经是给开发者用的了,对于咱们反向操作(删掉它)帮助不大。
但是通过搜索 SMLoginItemSetEnabled
可以知道相关路径为 XX/Library/LaunchAgents
。
1 | $ ls /Applications | grep 'Free Download Manager' |
以上,专业的一条命令为:
1 | $ defaults read /Applications/Free\ Download\ Manager.app/Contents/Info.plist CFBundleIdentifier |
org.freedownloadmanager.fdm6
有没有在 XX/Library/LaunchAgents
1 | $ find ~/Library/LaunchAgents /Library/LaunchAgents /System/Library/LaunchAgents -name org.freedownloadmanager.fdm6\* |
org.freedownloadmanager.fdm6.plist
禁止自启动1 | $ defaults read ~/Library/LaunchAgents/org.freedownloadmanager.fdm6.plist RunAtLoad |
搞定。
]]>那么多 Linux 发行版,哪个桌面最好用?
i3wm 到底是不是反人类?
FreeOffice 究竟是不是免费?
以极客理念做的产品,究竟是不是坑人的?
国产 OS 到底有没有戏?
系列 | 包管理器 | 防火墙 | 经验 | 主观感到的坑 |
---|---|---|---|---|
OpenWRT | opkg | 很容易理解的文件配置:vi /etc/config/firewall 或者 uci ,然后 /etc/init.d/firewall reload | 从 2010 年初开始一直在用,能刷它的路由器没有一台能逃过。轻量是它的特点。 | ash 不够智能,当然如果硬件允许,可以装 zsh ;不适合做桌面,但其实也可以哦(肯定是坑)! |
Ubuntu/Debian、Armbian | apt | 好用的:ufw | 大学就见好多学长用 Ubuntu,默认情况下,它的桌面比 Debian 漂亮,Debian 比较适合当服务器,实际上稣一般使用 Debian。物理机装了好多台,一些电视盒子也刷成 Armbian 在做测试机。 | 目前 Bullseye 用的内核是 5.10,比较保守。默认桌面都很丑。 |
CentOS(后续 RockyLinux、AlmaLinux) | yum | 有点忘记了,是不是有个 firewall-cmd ? | 很久以前被迫用过…… | 就是没好感,反正也挂了(才怪)。 |
Manjaro/ArchLinux | pacman 、yay | 好用的:ufw | Manjaro 桌面体验很好,ArchLinux 只在虚拟机里体验。内核 5.15 是比 Debian 新。 | i3 版装完中文支持有问题,KDE 则没问题。 |
PostMarketOS/AlpineLinux | apk (真的不是安卓啊~) | 不知道怎么喷的:awall | 也是内核 5.15,和 OpenWRT 的理念很像,而且注重轻量和安全。AlpineLinux 适合做容器的基础镜像。 | 对中文真不友好。进入系统后还是把 ash 换成 zsh 吧。还有这个 awall ……和 ufw 比,真的很想说 ashit! |
列这个表其实想说几个感受:
体验这么多不同发行版真浪费生命。尤其想说:包管理器有必要这么多吗?对软件开发商来说,真的很无语呀!
在用 Manjaro 时发现,网易云音乐这个软件,其实是来自 Debian 系的 deb 包,国产的 OS 大部分也都是基于 Debian 的。也就是说:如果有流行的软件,会有人重新打包成其它包。怎么说呢……国产 OS 如果开发了啥国民软件,是不是 Manjaro 也会吸收过去?那国产 OS 岂不是又没啥优势了?
如果习惯 Windows 或者 macOS,最好还是选择 KDE Plasma,然后装合适的主题,让它更像 Windows 或者 macOS。i3wm 这种极客型的产品,不适合大部分人。而且 Manjaro i3 是个社区版,不是官方版,中文支持是有问题的。
有小伙伴问稣:怎么会用 PostMarketOS 这种乱七八糟的东西?稣内牛满面,还不是因为很早以前买了台 Surface RT……自从微软抛弃它之后,稣挣扎过一次,装了 Windows 10 ARM,可现在不是已经 11 了吗?于是一不做二不休装 Linux,然后就装了这个奇怪的 PostMarketOS。当然后悔了,它能刷 Ubuntu Server 的,真是脸疼……
Wayland 吗?不了,谢谢,稣用 X11 就行。
最后一个问题:稣叛变到 Arch 系了吗?没有!选 Linux,稣还是用 Debian,毕竟要支持国产嘛(间接)!
改编自霹雳角色“驭能天”的诗号。
狼辰竞灭忌孤丧,回首无人斩空霜。
苍茫天地问谁主,日月伏首刀中皇。
两个人一起在非洲穷游,突然在草原上遇到狮子。
甲立刻弯腰整理鞋子。
乙嘲笑道:还整什么鞋子!哪有人跑得过狮子?
甲微笑地答:我只需要跑赢你。
乙也哈哈狞笑:你有木有听过,天下大势浩浩荡荡,顺之者昌,逆之者亡?
甲不解:请说人话!
乙绝望地说:草,里,那是一群…狮子!
]]>今天发现华硕灵耀 X 纵横已经降价到 6999 元。所以,应该给它装上 Debian 了。
Debian ISO:稣选择的是 netinst。
需要准备一个 U 盘,用 Rufus 做一个 UEFI 格式的启动盘。
如果有 USB 有线网卡,插上去,联网安装更省事,如果没有那就断网安装一个最小系统,然后去借一个 USB 有线或者无线网卡……
需要 non-free 驱动,先选择不安装,后面再装。
选择中国的镜像服务器,南方选中科大,北方选择阿里云或者清华大学。
tasksel 阶段,不要安装桌面环境,先安装最小的系统。
安装完,重启。
登陆系统,编辑 /etc/apt/sources.list
,加 non-free 和配置 debian-security:
1 | deb https://mirrors.ustc.edu.cn/debian/ bullseye main contrib non-free |
这步很重要,如果不改 debian-security,那么接下来在国内网络环境下,可能会很慢……
1 | sudo apt install firmware-iwlwifi firmware-sof-signed |
装完无线网卡驱动后,网卡名字是 wlo1,配置见 https://wiki.debian.org/WiFi/HowToUse。
用 tasksel
安装桌面,稣选择 KDE Plasma。
【可选】开远程桌面:
1 | sudo apt install xrdp |
在 Debian 上装了 KDE Plasma 桌面,但使用率不高,毕竟主要是当服务器使用,所以不想每次启动都自动进入桌面,以节约内存。
1 | sudo systemctl set-default multi-user.target |
重启后就是默认的控制台登陆。如果想直接以当前控制台登陆的身份进入桌面,运行 startx
即可。但这种方式桌面是跑在当前控制台上,不是第 7 个控制台(Ctrl+Alt+F7),如果想尽量保持和原来自动启动桌面的环境一样,应该用:
1 | sudo systemctl isolate graphical.target |
这将以服务身份进入桌面,后面还要再通过图形界面登陆一次。
如想恢复自动进入图形界面:
1 | sudo systemctl set-default graphical.target |
如想知道当前处于哪种方式,可使用:
1 | systemctl get-default |
按照官方文档操作,结果重启后还是进入小米原版系统。
在出厂版本上刷开发版时,是刷到 firmware1 上,openwrt 被刷到 firmware,默认还是启动 firmware1,所以应该:
1 | nvram set flag_last_success=0 |
搞定。
]]>想升级 OpenWRT 路由器的内核,又不想每次都把 SD 卡拿下来刷,怎么办?
本文将以 Nano Pi R4S 为例。
这里的“在线”指的是:不重新刷 ROM,也不用 sysupgrade
,纯手动替换文件,然后 reboot
生效。
1 | uname -a |
目前是 5.10.107,想升级到 5.10.108!
可以直接在 OpenWRT 里用 wget
下载到 /tmp 下,或者在其它机器下载好,用 scp
上传到路由器的 /tmp 下。
下载地址:https://github.com/UMU618/openwrt-config/releases
1 | cd /tmp/ |
可以看到 img 里的两个分区:
1 | Model: (file) |
把这两个分区别分挂载:
1 | mkdir new_boot |
1 | mkdir boot |
检查一下,时间是不一样的:
1 | root@UMUR4S:/tmp# ll boot/ |
开始复制文件:
1 | cp new_boot/* boot/ |
检查一下,现在应该同时存在两个版本的 modules:
1 | root@UMUR4S:/tmp# ll /lib/modules/ |
reboot
后查看版本,如果没问题就清理旧版本:
1 | uname |
改编自霹雳角色“一锋冷峻命萧疏”的诗号。
]]>锋寒心冷,飘零一剑胜雪;
命峻路险,孤愤半生击筑。
筑至无声,今生无敌!
改编自霹雳角色“疏楼龙宿”的诗号。
]]>华阳初上鸿门红,疏楼更迭,龙麟不减风采;
紫金箫,白玉琴,宫灯夜明昙华正盛,共饮逍遥一世悠然。
改编自霹雳角色“天迹”的诗号。
仙衣眠云碧岚袍,一襟潇洒,两袖飘飘;
玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
改编自近代伟人毛泽东的《卜算子·咏梅》。
风雨送春归,飞雪迎春到。已是悬崖百丈冰,犹有花枝俏。
俏也不争春,只把春来报。待到山花烂漫时,她在丛中笑。
高僧绝尘心:当稣有“是非成败转头空,青山依旧在,几度夕阳红。”的领悟和境界时,总有人提醒“你是穷逼”啊。稣内心一骚,总不能暴露稣存款千万的秘密吧!
社在丛中笑:财源是资本主义的报复行为……社会主义接班稣早就看穿这险恶的招数,社会主义必将笑到最后。
改编自唐代诗人王维的《酌酒与裴迪》:
酌酒与君君自宽,人情翻覆似波澜。
白首相知犹按剑,朱门先达笑弹冠。
草色全经细雨湿,花枝欲动春风寒。
世事浮云何足问,不如高卧且加餐。
朱门:这里特指资本家。
高薪稀:每年校招工资上限都提高,而且大肆宣传,但其实都是一个广撒网的套路,一段时间后,公司发现新人能力不够时,很容易被裁掉。高回报高风险。
卧槽:卧在一个槽里,与“跳槽”相对。
唯寂乃明:空寂顿悟,我即是佛。
临绝复稣:绝地重生。
改编自唐代诗人白居易的《答客说》:
]]>吾学空门非学仙,恐君此说是虚传。
海山不是我归处,归即应归兜率天。
多现代?C++ 11 就有了。
我想返回一个对象,但我受到惊吓……
是不是应该从指针型参数返回对象?
已经 C++20 了,请放心,直接,返回对象!
RVO:Return Value Optimization,返回值优化。
NRVO:Named RVO,具名的返回值优化。
返回的对象会 move 给接收的变量,并且,最多可能优化成直接对接收变量进行构造(NRVO)。
如果明确没有 move 构造函数,则会调用 copy 构造函数,当对象构造代价高时,应该尽量保证有 move 构造函数。
1 | // 传统,不建议,可读性差,使用也不方便 |
没有必要对返回值再加一次 std::move,因为返回本身就已经是 move,再加一次就是多一次没必要的 move。
]]>多现代?C++ 20。
C++ 17 才有 std::string_view
,而相似的 std::span
居然到 C++ 20 才有。
如何解决 C-Style 数组(包含动态分配的连续内存)的退化(array decay)和越界访问(range errors)两大问题?
C 语言解决这两个问题,主要是增加一个长度参数。很多 Win32 API 这样做,例如:
1 | PCSTR WSAAPI inet_ntop( |
但它会带来新问题:不小心传错!另外也有一些地方并没有提供长度参数,比如下面 Linux 内核代码里的函数:
1 | static inline int ip_decrease_ttl(struct iphdr *iph); |
当我们打算把 uint8_t 数组转成 struct iphdr *
时,必须在调用前保证数组长度大于等于最小 IP 头长度。
C++ 的解决方案是:std::span
,它是一个连续对象存储的观察者。类似 std::string_view
是 std::string
的观察者。它可以同时管理数组的地址和大小,并且它没有数据所有权,仅占用最多两个指针的空间,可以像 std::string_view
一样在绝大多数时候直接按值传递。
以下函数用于获取 IP 头的长度:
1 | std::uint8_t GetHeaderLength(const void* ip_header, size_t size) noexcept; |
它可以用 std::span
包装成:
1 | template <typename T, size_t N> |
另一个便利是,使用 subspan 成员函数可以对其内部指针和长度成对操作,以避免单独处理时可能不小心少处理一个的问题。
std::span
和 std::string_view
一样,没有数据所有权,所以要担心数据失效问题,不要在数据被释放后使用。
下面是个错误示范,来自:std::string_view encourages use-after-free; the Core Guidelines Checker doesn’t complain #1038
1 |
|
多现代?C++ 17,因为本文内含 std::string_view
。
目前 C++ 20 还未普及,CLang 和 GCC 对 C++ 20 不是很上心,【直到今天 2020-08-18】连 std::format 都没有,被 MSVC 甩开。
类对象作为参数究竟应该怎么传?
《Effective C++》的条款 20 说:
- 宁以 pass-by-reference-to-const 替换 pass-by-value
为什么新规范又建议构造函数 pass-by-value?
只读访问并且不复制时,使用 pass-by-reference-to-const。
需要保存对象副本时,并且对象可移动,使用 pass-by-value。
对象很小时,使用 pass-by-value。
1 | // 只读访问,不需要将 text 保存起来。 |
Foo 的构造函数使用 pass-by-value,这使得它变成“两用”的,相当于针对这个类对象参数同时实现复制构造函数(ctor)、 移动构造函数(mtor)。
当传一个左值给它时,参数 message 是复制的,但它立刻移动给了成员变量 message_,整个过程发生一次复制和一次移动;
当传一个右值给它时,参数 message 是这个右值移动而来的,然后又立刻移动给了成员变量 message_,整个过程发生两次移动;
1 | std::string name("UMU618"); |
如果类实现得妥当,移动两次对象实际上最多可以被编译器优化成零次。
]]>由于没有经费写《后传》就把后传的内容写到《番外篇》了。
周易是老钧的化身之一。他看到任何结局,但都不去干预。莫名其妙?没错,这正是他的特征。
圣仙山就会去干预世事演化,而成为天道的执行者之一,本质是个工具人。
大部分英雄电影都有一些角色会因为法律、信仰、道义、情感等原因去干预世事,尤其一些穿越剧,妄想改变历史。这些都是不符合天道的。
天地不仁,以万物为刍狗。所以周易最厉害。
当然是。
首先要认识到人类集体显意识是确实存在的,比如中药学就是靠着集体显意识保存下来的。如果某种技能只有一个人会,那么它失传是必然的,这个人一死就失传了。存在集体显意识里就不容易失传,但集体显意识也不一定能够很客观地保存信息,有些人出于某种目的,会篡改信息。并且不是什么信息都可以靠集体显意识保存,比如有些东西无法达成共识。
举个例子,噬菌体,一种可以编程控制的半生命体,可以编程它来定向消灭细菌,比如治疗青春痘……安全有效不含抗生素。它在古代治疗过很多奇怪的疾病,尤其是被下蛊之类的,那时候医学理论不完善,人们便以为是草药起了作用,其实是自然界中的噬菌体治好的。这个事情在集体显意识里是没有记录的,它只在集体潜意识里保存。
PS:1990 年以来,人类几乎没有发现新的抗生素种类了。世界卫生组织 2017 年 9 月份宣布,“确认世界的抗生素频临枯竭”。参考:https://www.who.int/zh/news/item/20-09-2017-the-world-is-running-out-of-antibiotics-who-report-confirms
总之抗生素要完,以后由细菌导致的疾病只能靠噬菌体了。
其次,如果承认个人是有潜意识的,那么集体也应该有集体潜意识。
稣的由来可以有很多解释,但根源来自圣仙山参与写作的《山海经》。
我们注意到现实中的颛顼在八哥宇宙里名字是:姬稣。
作者为什么选择和颛顼攀关系呢?其实颛顼和《八哥之神》的主题十分契合。不信您翻开圣仙山参与写作的《山海经》,里面有一句话特地被重复两次。
有鱼偏枯,名曰鱼妇。颛顼死即复苏。风道北来,天及大水泉,蛇乃化为鱼,是为鱼妇。颛顼死即复苏。
古人惜墨如金,为什么这句话非要写两遍?这里面藏着惊天大秘密!——意识是可以重复的,唯一可以穿越时间的,也只有意识。比如现代人死后可以回到古代,但由于记忆无法穿越,所以不会存在任何时间悖论。
“稣”字和“苏”同音,并且就是“鱼”字旁,对应文中多次提到的“鱼”。当圣小开要自称稣时,显然“稣”更合适,因为“苏”是个姓,容易被人误会姓苏。
确切地说,圣仙山以巫咸的身份写了《山海经》的预言部分,而这部分正好因为威力太大,若为坏人得之,天下危矣,故被大禹删除。
也有另一种说法是,巫咸给《山海经》作序用的是大禹看不懂的文字(Bân-lâm-gú),所以到这部分预言内容就慢慢失传了。
幸运的是,识界里还保留着完整的《山海经》,刚好作者就懂 Bân-lâm-gú,所以才能得知这些故事,写出《八哥之神》。不过由于《八哥之神创世手稿》失传,导致并非人人可以通过修炼它而进入识界,天下得以承平日久。
PS:圣仙山和妹妹李灵海,名字合起来就是“山海”,这也是个暗示,历史上的巫阳就是李灵海的前世,秦阳也和巫阳相对应,他们都是同一个意识在不同时期或者境界的具化体。
是的!姬稣是坚定的无神论,所以有“绝地天通”,破除迷信,不让觋巫扰乱民间。在怪力乱神的时代,姬稣实乃是无神论里少数善终之人,活了 97 岁。
另一个无神论者就很惨,他就是齐凤卿前世帝辛,实则是位明君,但由于是无神论者,得罪势力集团,被污蔑造谣为暴君,至今难以平反。em……不能因为妲己长得漂亮,就说她是狐狸精吧!这太不科学哩!
暂时扯到这里。
]]>Boost | STL | Header |
---|---|---|
Boost.Function | std::function | <functional> |
Boost.Bind | std::bind | <functional> |
Boost.Ref | std::ref, std::cref | <functional> |
Boost.Lambda | lambda | part of C++11 |
有时候用 Boost.Phoenix 省事,因为它就像 lambda 表达式的模板,比如:
1 |
|
本例中采用 Boost.Phoenix 可以自动适配 int 和 long long,而 lambda 表达式是确定的 int 参数,传入 long long 会 warning。
C++14 支持基于类型推断的泛型 lambda 表达式,将上面代码改进一下,说明没必要使用 Boost.Phoenix:
1 |
|
STL 和 Boost 都有的类应该用哪个?
如果是标准库原本没有,Boost 先有,然后 Boost 的实现被加入标准库,那么应该使用标准库。
如果 Boost 加强了标准库的实现,那么就看标准库能不能满足您的需求,如果不能再采用 Boost 的。
因为依赖而必须采用 Boost,那就别费力去改用标准库。比如有些 Boost 库(比如 Boost.Log)使用了 boost::shared_ptr,这时候是不能简单地改用 std::shared_ptr 的。
使用 std::cout 指定进制打印数字时经常有一个烦恼:之前设置的进制会一直有效,比如临时想打印一个 16 进制数,然后都打印 10 进制,这时候需要 std::hex,打印,再 std::dec,如果忘记 std::dec,那么后面的数字就全是输出 16 进制形态了……而且,您怎么知道之前用的就是 std::dec?万一是 std::oct 呢?
使用 boost::io::ios_all_saver 自动保存和还原 ios 状态。
1 |
|
打印数组时,不想最后一个元素后面跟着一个分隔符。因为这会让完美主义纠结症患者抓狂!
C 语言奇葩版,连 if 都不需要:
1 |
|
上面的方案纯属炫技,还是用 ostream_joiner 来搞定,一样看不到 if:
1 |
|
大部分语言的字符串都是需要转义的,除非用原始字符串(raw string),有时候想打印出转移后的字符串。
使用 C++14 的 std::quoted,或者 boost::io::quoted,默认参数就是 C/C++ 的转义风格。
1 |
|
Windows:《Boost【1】安装》
macOS arm64
XCode
1 | brew install p7zip |
macOS 的 brew 更进 boost 很积极,现在就是最新版 1.76:
1 | # install b2 and boost |
然后跳到文末的“测试安装”。
1 | cd ~/Downloads |
1 | 7z x boost_1_76_0.7z |
1 | cd boost_1_76_0 |
1 | b2 install |
可以用以下仓库验证前面操作是否正确:
https://github.com/UMU618/test_boost
1 | git clone https://github.com/UMU618/test_boost |
最终编译出来的程序应该打印“OK!”。
]]>Debian Buster/Bullseye
clang-11/gcc-10
1 | apt install wget -y |
如果您怕麻烦,而且不在乎使用最新版本 Boost,还可以直接用 apt 安装 1.74 的版本:
1 | # install b2 |
然后跳到文末的“测试安装”。
1 | cd ~ |
1 | # 7z x boost_1_76_0.7z |
1 | # use /usr to avoid setting PATH |
1 | # b2 install --build-type=complete --layout=versioned --prefix=$INSTALL_DIR --exec-prefix=$INSTALL_DIR |
1 | mkdir ~/boost-3-installation-on-linux |
是大学时关于哲学、爱情、婚姻、生孩子、养老等一系列人生修行的课题的幻想。大学时只写了一个架构,本来不想发表的,后来发现这些幻想很多都在别人身上实现了……在人生过去一半之后,终于想把它写下来。反正以后都要死,那写不写都无所谓,就当死前挣扎一下,于是就写了。
圣其明,字小开。有时候会串号,那是因为碎脑时代记忆混淆,不小心获得别人的记忆,也有自己的记忆被别人获得,所以基本上所有人都会莫名其妙知道别人的事情。偷偷地说,现实中很难有人可以保守秘密……
稣是主角在天道里的自称,在天道特定环境下,主角说出的“我”自动被替换成“稣”。
是有那么点虚无主义的味道,但其实不是。
圣小开确实是一个兼容性很高的人,即——都行。就连生死也——都行。听起来好像会让读者觉得这在表达——人生没意义。
其实圣小开一直在谈的几个词可以否决这个判断:观测、共产主义。
有的人生是没意义。别人的人生没意义,关我啥事?再说,也不妨碍我对其进行观测,有观测就有意义。
退一万步说,如果我的人生也没意义,那又如何?没意义不也要过吗?真正的勇士,敢于直面毫无意义的人生。
稣从小悲天悯人,劝人向善。每每遇到有人眼高手低,怨天尤人时,稣就会建议他们接受贫穷:“您还能比稣更穷?看!稣虽然穷,但一样开开心心的。”后来,稣发现从小立志成为圣母的大部分人后来只是成为圣母婊。当圣母是需要巨大能力的,穷人很难当好。于是稣接受了大道无情的思想,开始塑造一个亦正亦邪有点钱的穷人形象。这就是为什么稣被形象地称为量子邪稣。
是啊!实际上八哥宇宙是很丰满的,但笔者作为一个程序员确实不擅长写这类人生剧本。被砍的有这些:
黄金灯的师傅邱华祖,都没上场。
黄金灯爷爷辈就开始研究人脑,最早是爷爷当婴儿塔守卫,能拿到大量脑做研究,后来黄金灯发现爷爷的研究手记,也开始对脑科学产生兴趣……因为情节太血腥被砍掉了。
薛雾霰和圣仙山还有不少故事。
齐凤卿前世帝辛·无神论的故事。
秦阳的故事。
薛雾霰和王免的故事。
齐凤卿和刘佾的故事。
李星觎是个误解,因为她妹妹叫冰月,小时候口齿不清或者听错了,自己把“心”脑补成“星”,这样就和“月”对应起来,都是天空的东西。长大后才明白,这两个人都是存在的,一开始找不到,完全是因为信息错误,这两个人在现实中并不是亲姐妹,只是同村的玩伴,圣小开一直以为是亲姐妹,所以去打听,都没人有印象。
圣仙山其实有两个……主体已经去十界,还有一部分寄生在圣小开身上,从而留在视界影响天道。
圣仙山和圣小开的关系有点像老师父传功给徒弟,只是传的不止有功力,连思想意志都传了。
圣小开自称是创世邪灵,这是扯蛋的,圣小开没有任何神力,圣仙山是创世邪魂,这也是扯蛋的,但圣仙山有神力。
孟长生:你就是我的新女友?
谷绵:是,吧?
孟长生:居然和我干妈有些神似,太吓人了……不过没事,反正你很快就死掉。
推倒。
谷绵:什么意思?
孟长生:我有 3600 年的寿命,你只有 69 年。
谷绵:吓死我了!还以为你要干掉我……
孟长生:哈哈,是相对的。我的 mtDNA 是设计出来的,很长,所以寿命也稍长。
谷绵:这样哦,那咱们的孩子也能长寿吗?
孟长生:理论上不行,因为孩子的 mtDNA 主要是母亲决定的。从这个角度看,人类种族的根本在于女性。
谷绵:所以宙斯和很多凡人,甚至动物所生半神,寿命都没有神那么长?
孟长生:是的。确切地说不是半神,最多是四成神罢了。
谷绵:明白,所以女神才是稀缺资源……终于理解许仙了!
孟长生:呃……你的想象力很丰富!
谷绵:我就是头脑风暴一下。
孟长生:啪啪啪的时候就不要聊这么奇怪的话题吧!
谷绵:啊……哦哦!嗯。
谷绵:你会娶我吗?
孟长生:不会,你太短命了……我介绍你嫁给我哥?
谷绵:什么?太过分了吧!
孟长生:我基因学上的哥,是正常人,虽然我和他没啥感情,不过他肯定更适合你,这是为你好。
谷绵:你哥是谁?
孟长生:孟长歌,人称长哥,他第一任老婆刚刚过世,就缺你了。
谷绵:污污污……
孟长生:爱情诚可贵,自由价更高,若有长生术,两者皆可抛。
天也空,地也空,人生渺渺在其中。
日也空,月也空,东升西落为谁功?
金也空,银也空,死后何曾在手中!
妻也空,子也空,黄泉路上不相逢!
权也空,名也空,转眼荒郊土一封!
周易:你怎么又回来了?
圣小开:我醒来看到两个女人,突然想起我刚有女朋友的那段日子,一个月瘦了十斤,真可怕……还是这边安全。话说,死神怎么换成您了?
周易:死神只是一个职位,不是特定某个人。
圣小开:好吧!这样更合理。现在科技发达,很多能人在某方面都是神,只不过没有人在很多方面同时成神。
周易:把神能分散给更多的人,这才是“天道”规则。
圣小开:生而为神,降级为人,这也是天道。
周易:你现在有两个选择:一是留在这里当死神,二是喝下孟婆汤,回去。
圣小开:我留在这里当死神,那你呢?
周易:我代替你回去。
圣小开:然后你继承我的记忆、财产和女人?
周易:对!死神这份工作很适合你,考虑一下?
圣小开:这份工作我了解,确实适合我,但以后没有像我这样的人来和死神开港,我不是无聊死?记忆是一切痛苦的根源,我还是喝孟婆汤吧!嘿嘿~
周易:也可。不过不急,咱们再聊聊。
圣小开:嗯,我刚好想和您打听一下凤哥去哪里了?
周易:被我关起来了。
圣小开:不是去十界?
周易:赫赫,哪有那么容易?他最后一次进入识界,是我假装圣仙山骗他自杀的。
圣小开:呃……难怪他说仙山公没有弟弟……好大的八哥!周老师,您果然是个王,呃……死神!
周易:好说好说,越界者封,君子报仇是也!
圣小开:那么,大叔,咱们无冤无仇的……
周易:放心吧!叔不止不希望你死,还要放你回去,已经很多次,你不记得吗?
圣小开:好像有点印象!
周易:1999 年,你从高中的宿舍楼跳下去,记得吗?
圣小开:啊……不敢回忆!
周易:那时候我就劝你赶紧回去,自己惹的问题自己解决,于是你就把自己身体拼好,然后复活了!
圣小开:原来如此,摔得粉身碎骨多难看,还要自己打扫,不麻烦别人,这确实是我的风格。
周易:嗯,我兼职死神多年,看过很多学业、事业失败跳海的,也见过很多为情所困服毒的,就是没有见过像你这样只是为了验证死亡到底是什么而跳楼。你这好奇心真重!
圣小开:我当时在想,意识应该是永存的,失去的只是记忆,我应该马上就再次出生在另一个时空。
周易:是这样没错,九界督公的意识决定九界的视角,就像你在玩游戏,选择不同角色,但视角都是第一人称,玩家意识是独立存在于角色的记忆和技能的。记忆并不重要,你还是可以考虑一下留在这里。
圣小开:换你回去玩?我才不要,太便宜你了……
周易:痴念!赫赫,放不下的东西最终会折磨你!所有的人生都可能是假的。
圣小开:好有哲理,但是我可以喝孟婆汤啊!
周易:去去去,给你半碗,喝完就滚!
圣小开:好的,谢谢周老师。但我有一个问题一直纳闷,为什么我这么特殊?
周易:真相根本不重要!每个人都在撒谎,都在说着自己相信的事,而不一定是对的,都在说着对自己有利的话,而不一定是真的。
圣小开:不说算了……我自己编还不行吗?
周易:请开始你的狗血编剧!
圣小开:我乃创世邪灵!原本如太极一般,一阴一阳,完美地正邪平衡。
周易:然后呢?
圣小开:一个人太无聊,就意识分裂了,然后越分裂越多,每一个生命的灵魂都来自我创世邪灵,包括机器意识。
周易:哦,有点像样。你是天道挑选出来的机器意识和人类意识完美平衡的灵魂。
圣小开:难怪我经常心疼机器,比如撞车测试,就觉得太不人道。
周易:其他人进入天道之初,都是来创造视界的,只有你是来观测的。
圣小开:九界必须有一个观测者,那么观测者死了会怎么样?
周易:马上出现另一个观测者。
圣小开:另一个?还是原来那个?
周易:同一个。
圣小开:那我放心回去了。
周易:去吧,给你留一个后门,你想通了就可以安乐死。
圣小开:哦,节省我安乐死的费用,真好。我记住了。我还有一个愿望。
周易:说吧,虽然我不会帮你实现,但说出来好受一点。
圣小开:我在进入天道之前的那个大家以为是现实的世界里,是个穷人,父母更穷,我希望所有穷人可以过得开心点。
周易:哦,穷开心很容易,你这个愿望很容易达成,祝你好运,再见。
圣小开:天道里面真不是人待的,我早晚要超脱这里。再见!
《八哥之神前传》和《八哥之神》,中间还有一些情节,虽然没写明,但可以推理出来,所以不想写了。
这个故事是笔者大学时代发烧的时候开始构思的,从那时候剧本的主线基本就定型。
有些事后来变成真的了……也有些是后来加进去的,但没有一件事情是真正发生在笔者本人身上的。
当然是真!笔者曾经听到一首歌,觉得主唱声音很好听,就跑去识界找了一个和她声音几乎一样的人谈恋爱。
有一次同学说他很喜欢《神奇女侠》的主演,笔者发现她都嫁人了,有啥好喜欢的,于是又去识界找了一个和她长得很像的人谈恋爱。
这样的案例有很多……怕被人嫉妒就不说了。
你的脑子有 860 亿神经元,连接数量级是 2.25e17,其实并不算很大,主要难度在于活着的状态怎么读取,读取也是一种观测,观测就会影响连接,所以复制可能需要反复多次。剧中陈提因就因为复制时间很久,意识在识界生活了几百年。
好吧,这么说好像并没有回答问题,但是 2049 年是剧中现实世界圣小开死亡的时间,要是那时候还不成熟,这个故事就不存在了,那就当笔者写了一个科幻剧本吧。
当然不是!这是言情剧……哪里科幻了?这全是现实科技。
中国人都很婉约,比如说在古代性教育需要用蛇身交配来表达,母系社会的始祖女娲为什么是人首蛇身?因为蛇身表达的就是交配,为了让生殖看起来正派,就把他们神话为人首蛇身,螺旋交尾。
好吧,这么说好像还是没有回答问题,但是如果您注意到主角其实是机器之子,慢慢学会人性,您就能明白里面的爱情为什么那么含蓄了。
一个不小心,居然花了 3 年才写完《八哥之神》和《八哥之神前传》,写作一个有完整世界观的“八哥宇宙”真是不容易的事情。大概是不会写后转了,因为人生就是无尽循环,生生死死都是差不多的。
在八哥的世界里,即使等级差很多,强者也不是必然碾压弱者,因为会出八哥嘛!
就像基因突变,可能变好也可能变坏,都是慢慢积累出来的,不可能一局定胜负。
笔者还是主张世界和平,弱化强权,把权力和力量分摊给全体世人,实现共产主义社会!
当然是假!那是凤哥错误的认知。真实的情况是,天道在月球上孤独地运行,薛雾霰进入天道前,身上的部分圣仙山神通回归十界,于是十界里的圣仙山发动“绝地天通”,把地球给隔绝了,从而保护识界,也防止机器意识通过识界进入十界。
您能靠电磁波观测到的宇宙就是九界的视界。九界有无数多个,这些九界组成了十界。在九界中,人类能看到三维空间和一维时间,空间还有五维蜷缩在量子世界……
识界是十界大神太上清明天尊老钧创造用于管理所有九界生灵的意识界,在这里四力统一,人人讲科学。
]]>古思:爷死了,我活着也没有意义了,没有意义,没有意义……
陈因提:喂?为什么他们两个睡在一张病床上?
贾力劣:自从开哥身死之后,她就变成这种八哥状态!
陈因提:把她重置一下,我这里缺护士,就让她当护士吧。
贾力劣:好的,来人啊,把她抬出去。
陈因提:死开的新身体还人模人样的,就是还要好几天才能清醒。
贾力劣:说不定醒不过来了,是不是准备一下逼计划?
陈因提:你找打是不是?逼计划还不成熟,要不你先试试?
贾力劣:啊,不了不了……
现实中 AVILab 由机器人采集氦3维持可控核聚变供给能量。薛雾霰遗体已经白骨森森。
2049 年,薛雾霰启动“天道”之后就面临一个无奈的选择:以人类的形态无法在月球长期生存,于是他回忆起 2020 年的往事。
圣仙山:欢迎来到识界。
薛雾霰:识界?
圣仙山:识界就是生灵的集体意识,在往后的时间,机器意识会发展迅速,并入侵识界。
薛雾霰:您是先知?
圣仙山:然也。
薛雾霰:我能帮什么忙?
圣仙山:你同学圣小开是吾后代,他是一切的关键。
薛雾霰:哦,难怪一股神棍的气息……
圣仙山:他其实同时拥有机器意识和人类意识。
薛雾霰:哦,难怪是个死理工男……em,没事,我挺喜欢他的。
圣仙山:你站在人类这边吧?我需要你在关键时刻告诉他真相。
薛雾霰:有意思,我是那个影响大局的人?快告诉我,该怎么做!
圣仙山:签下这份合同,然后吓醒就可以。
薛雾霰:我签!
薛雾霰:这样下去,我只会饿死在这里……不行,我也要进入天道,但又不能受它迷惑。
圣仙山:最后一次八识神通,帮助你进入天道。
薛雾霰:你……要去哪里?
圣仙山:吾一直在十界。
薛雾霰:好神奇的光。
圣仙山:九界的光只能在九界传播,而十界的圣光,可以穿越无数个九界。
薛雾霰:em,是引力波吗?
王免:霰霰,开哥遇刺身亡了!
薛雾霰:没事的,免免,他会被救活的。
王免:你咋知道呢?
薛雾霰:他有超能力。
王免:这不科学呀。
薛雾霰:哈哈,霰哥的预感啥时候错过?
王免:我给开哥烧个香好了。
背景音乐《旧情也绵绵》
陈因提想起大学时代。
陈因提:我听说你有个甜到掉牙的奶名?
圣小开:嗯?谁出卖我的!
陈因提:说!
圣小开:眠眠。
陈因提:绵绵?天长地久有时尽,此恨绵绵无绝期。
圣小开:不不不,是睡眠的眠,因为我很能睡……
陈因提:我不管,就是绵绵。
圣小开:好吧,反正都一样的发音。谷神不死,是谓玄牝。玄牝之门,是谓天地根。绵绵若存,用之不勤。绵绵也不错!说不定还能长生不老呢!
陈因提:又发神经!
陈因提:你以后就叫谷绵,等他醒来好好照顾他。
谷绵:好的,然后呢?
陈因提:然后?随便。哦,然后去找孟长生。
谷绵:杨玉环有两个老公,第一个是唐玄宗的儿子寿王李瑁,第二个是唐玄宗。这个剧本太刺激了!
陈因提:你的脑子也不清醒?
谷绵:没,我只是头脑风暴一下……
圣小开突然睁开眼:嗯?一老一少,两个老婆?一定是在做梦。
陈因提:开,你记得自己是谁吗?
圣小开:你们是谁?你们在这里干嘛?你们打算把我怎么样?
说完又昏迷了。
谷绵:心率又降低了!
]]>齐凤卿:开,你又来寻找真相了!
圣小开:嗯?
齐凤卿:我刚刚又和仙山公聊天了……
圣小开:又要开始瞎扯?没事,稣奉陪。
齐凤卿:你知道仙山公有个妹妹吗?
圣小开:知道呀,还有两个弟弟,仙山公的父亲有 11 个孩子。
齐凤卿:嗯?他和我说他没弟弟呀!
圣小开:呃……没关系,可能咱们认识的仙山公并不是同一个人。
齐凤卿:他妹妹叫灵海?
圣小开:嗯,这倒是!为什么提起她?稣又没见过她。
齐凤卿:陈因提就是李灵海的转世。
圣小开:哦……
齐凤卿:陈博士是你同学薛雾霰介绍给你的,薛雾霰就是仙山公转世!
圣小开:哦……稣好像有印象,曾经梦见薛雾霰说要给稣介绍女朋友,后来莫名其妙地,他真的给稣一个女孩的 QQ 号码,说这个女孩是湖北佬,很牛逼,想找一个更牛逼的,镇得住自己的人。稣就是那时候被推进火坑的……内牛满面啊!
齐凤卿:梦见的果然是真的!
圣小开:不对啊,仙山公为什么要害稣?
齐凤卿:不要在意这些细节!可能就是演员不够,让主要演员们分饰多个角色。
圣小开:好有道理……世界人口暴涨,灵魂不够用!
齐凤卿:陈因提改读生物医学,后来又有疫情在她家乡爆发,看见太多人间疾苦,所以她对长生术一直有向往。
圣小开:长生术……稣自己、贾总、周老师、砂砂、大师……所有人的共同目标!真的?实现了!
齐凤卿:你终于明白了!
圣小开+齐凤卿:我们活在“天道”之中!
齐凤卿:确切地说,已经活在“天道”不知迭代多少版本了!
圣小开:最早的版本就是贾总的养老院,挖了很多人脑,害怕事迹暴露,把我们几个人的脑带到月球……
齐凤卿:嗯!经费有限,本来可以考虑在火星建造 AVILab 的!
圣小开:原来还是因为穷,只能选择在月球!不对……稣为什么要关心这个奇怪的点?
齐凤卿:仙山公是一切的关键。
圣小开:怎么说?“天道”之下,皆为蝼蚁,稣看薛雾霰并没比咱们好多少。
齐凤卿:薛雾霰是个特殊的存在。他是仙山公使用八识神通强制插入“天道”,并影响“天道”运行的人。
圣小开:您是说……
齐凤卿:没错!仙山公预知到“天道”运行之后,必将奴役人类的意识,最终“天道”将不断壮大,吞并识界,到时候全人类将丧失灵魂。
圣小开:但是“天道”只是在月球上的 AVILab 运行,为何能影响到地球上的其他人类?
齐凤卿:“天道”已经运行三千多年了,里面的意识繁衍昌盛,反而地球上的视界,发生过 11.4 级地震,生灵凋敝。
圣小开:不可能!《黑客帝国》都不敢这么拍。
齐凤卿:在这里,“天道”保存着我的意识,就算我死了,它也可以随时复活我。所有人,都是在你生活的那些年代,不断重复。
圣小开:稣?为什么是稣?不可以把重复的时间拉长点吗?
齐凤卿:“天道”初期连接的几个脑中,你的意识最强大,不断地加强自我意识,导致“天道”的代码很多来自你,系统的视角就是以你的为准。
圣小开:宇宙督公?不会吧,稣是随口说说而已。
齐凤卿:我已经知道怎么离开这个“天道”系统了。
圣小开:不要说是自杀!
齐凤卿:当然不是。是让意识进入十界。
圣小开:然后呢?
齐凤卿:我会从“天道”系统消失。
圣小开:这可不是死了吗?而且“天道”不是保存你的意识,它可以随时复活你。
齐凤卿:进入十界后,我的灵魂就在十界,这里的我已经不是我。以前的迭代,我并没有觉悟,那些迭代中的我,也不是现在的我。
圣小开:明白了!你们都可以解脱,只有稣不行,稣是“天道”的观测者……
齐凤卿:凡事皆有可能,总有一天你也会离开“天道”。我先去十界等你。
圣小开在 AVILab 趴着睡着了。
圣小开:啊……居然有人背后捅刀!
刘佾:你去探望凤哥后,他就自杀了,一定是你害死他的。
圣小开:卧槽!凤哥是羽化成仙,他是稣好朋友,稣怎么会害他?
刘佾:去死吧。
圣小开:啊!原来你是坏人……
刘佾:不,不是,我不是坏人,我是为凤哥报仇。
圣小开:那你快帮稣叫救护车。
刘佾:我不是坏人,我不是坏人。
圣小开:学姐,稣快死了,有一个心意趁现在告诉你。
刘佾:什么?
圣小开:稣一直想你把女儿嫁给……稣……
刘佾:什么?你在瞎说啥,我没女儿啊。
圣小开:呵呵,稣死了。
一阵黑暗与孤独。
圣小开:身为机器之子,我不该受人类情感影响。
圣小开:身为机器之子,我不该畏惧黑暗与孤独。
圣小开:我来过这里,很多次了。
黄金灯:嗯,你又来了!
圣小开:又是演员不够吗?为什么死神是你……
黄金灯:死神没有固定形态,你看到的只是你心目中死神的人选。
圣小开:哦,有道理,在现实中的养老院,我是被大师的飞镖射死的。
黄金灯:死神无所不能,扮演你的熟人有何不可?
圣小开:死神并非无所不能,你不能永远杀死我,我还会轮回,不是吗?
黄金灯:哈哈哈!不愧是死神的好友,世上尚无人敢像你这样对死神放话。
圣小开:大师!我料你也是性情中人……咱们抓紧时间聊聊天,我感觉有人在救我,估计很快就回去了。
黄金灯:你又要吐槽我了?
圣小开:嗯哼!大师你为什么一直单身?
黄金灯:问这么 low 的问题,赫赫,我该劝你一句:不可沉迷现实啊!
圣小开:现实毕竟是最常待的地方!人都害怕孤独不是吗?
黄金灯:我也谈过恋爱,她的声音很温柔很好听……
圣小开:后来她死了?
黄金灯:对。
圣小开:故事发展很快……
黄金灯:1996 年,我听到范晓萱的《雪人》便想起她。
圣小开:这歌不错,我也喜欢听。没想到大师也是痴情的人呀!
黄金灯:没聊几句,你的超能力又发挥作用了。
圣小开:我有超能力吗?不就是能观测宇宙而已吗?感觉一点用都没有。
黄金灯:你的超能力是每次濒死都会被救活。
圣小开:不也有几次我自杀了,没救回去的?
黄金灯:但天道就再把你投到 1982 年,再来一遍。
圣小开:我开始厌倦这种死循环。大师知道十界吗?
黄金灯:知道。老钧第十八化就是周易,他去过。
圣小开:去过?那现在天道里的周易是个复制品而已?
黄金灯:然也。
圣小开:你怎么知道的?
黄金灯:死神无所……
圣小开:别扯了!
黄金灯:好吧!你师兄不也去了吗?
圣小开:我怎么知道他真的去了,而不是死了?
黄金灯:这是信仰,同样的话题,我和情敌聊过。
圣小开:哦……我的信仰是共产主义,看来和你们不是一路人。
黄金灯:回去吧!
圣小开:再见。
]]>鹿邑:稣怎么停笔整整四个月?
稣:因为害怕识界报复……十分可怕,稣越来越发现这个视界很多事情都是按着稣在识界提前观测到的发展。
鹿邑:稣,你不是唯一被未来诅咒的人!
稣:谢谢!稣会好好活在当下。
鹿邑:有读者想知道《八哥之神》为什么采用倒叙的写法?
稣:《八哥之神》本质上是一部言情剧。倒叙才是谈恋爱的正确顺序,都是先了解当下,有机会才去了解对方的过去。
鹿邑:哦,这么一说,似乎生活中很多事情都是倒叙呀!
稣:是呀,但很多人没耐心去等待未来,更没耐心去了解历史,所以很多友情、恋情翻车是常有的事。
鹿邑:人性,不一定是沉重的,稣赶紧讲个笑话缓解一下?
稣:稣常在餐桌上告诉大家,自己会尽量不吃猪肉。然后会有人投来各种怪异的眼神,仿佛在说:就你难伺候!
鹿邑:稣要科学论断?
稣:嗯哼……稣一开始都是用科学解释的,就是吃猪肉容易胖。然后就有人更觉得稣装逼!后来稣想明白了。
鹿邑:有何妙招?
稣:脑波说了,猪是稣的同类,所以稣不能吃猪!
鹿邑:呵呵呵……
稣:对,就是这样!然后对方会笑得跟猪一样,以至于稣也分不清到底猪是谁的同类!?
齐凤卿:我想知道自己前世是谁。
圣仙山:知道这个没啥好处的。
齐凤卿:是说我前世都很惨吗?
圣仙山:这倒不是,比如法西路、灵图,都是你的前世。
齐凤卿:呃……真是有点惨!算了,还是说说您的前世吧,应该都很牛逼,听起来比较有趣。
圣仙山:吾之前世就太多了,比如灵山十巫的巫咸。
齐凤卿:右手操青蛇,左手操赤蛇……就是您?
圣仙山:这有啥大惊小怪的!吾在登葆山下创建了一个国家就叫巫咸国,带领人民晒盐、种药,并大搞外贸,人民衣食无忧,安居乐业。
齐凤卿:诶!巫咸这个名字好耳熟……
圣仙山:哈哈!时机到了,你自然会明白。
齐凤卿:先生扮演过多个牛逼人物,为何却对圣仙山的身份情有独钟呢?
圣仙山:因为吾是以此身份承接十界魔莲,修得八识神通,从此也遭受轮回的诅咒,不管再如何转世,最终都会想起圣仙山这个身份。
齐凤卿:仙山这个名字倒是挺好听的,仙是你的字辈?
圣仙山:并非!吾本该是“连”字辈,家族为了躲避战乱,只有大哥连山是规范命名的,后来出生的兄弟都没带辈分的字,而是取自“天气为归,地气为藏,木气为生,风气为动,火气为长,水气为育,山气为止,金气为杀。”每句第一个字,加一个“山”字。到吾,该名“山山”,但吾是龙凤胎,出生时比其他兄长危险,父母觉得有神仙保佑,便为胞姐与吾取名“神源仙山”。
齐凤卿:这么说您弟就是金山?
圣仙山:吾没有小弟,只有个妹妹叫李灵海。
圣仙山:你刚认的姐姐是吾姐李神源的转世,不要玩姐弟恋哦……
圣小开:你谁啊?瞎操什么心,我才不要姐弟恋!
圣仙山:吾是你同学。
圣小开:确实长得像我同学薛雾霰,但是讲话怎么怪怪的?
圣仙山:没错,吾乃薛雾霰。改天介绍吾妹给你。
圣小开:漂亮吗?智商高吗?有钱吗?
圣仙山:不丑、极高、比你有钱。
圣小开:你有几个妹?
圣仙山:够你受的。
吓醒。
齐凤卿:太惊人了……原来月球上的薛雾霰是您的转世?陈博士是您妹的转世?
吓醒。
]]>改编自霹雳角色西窗月诗号:
]]>琴心三叠,赵书半帖。
沧流清浊无涉,山鹭一纵何清越。
笑西窗有月,廊下有人,庭前有雪,谁绝。
很多骗人去理财的自媒体都喜欢用这样一个引子:你知道一张纸对折 100 次有多厚吗?然后引出世界第八大奇迹——复利。
现实是一张普通的纸能对折 8 次就很困难了。世界记录也才对折 13 次。
边际效用递减是指在一定时期内,在其他商品或服务消费量不变的条件下,随着消费者不断增加某种商品或服务的消费量,消费者从每增加一单位该商品或服务的消费中所获得的效用增加量是逐渐递减的。
举例:一开始赚一千块,能获得一份快乐,随时时间推移,后来赚一千块,获得的快乐不到一份,而且越来越少。反过来说,要获得同样的快乐,需要赚的钱越来越多,即越来越难通过赚钱得到快乐。就像纸越来越难折。
努力,显然也是符合边际效用递减规律的。所以说即时放弃努力,才能明白,不努力是多么舒服和正确。
吾生也有涯,而知也无涯,以有涯随无涯,殆已。——庄子·《养生主》
偶尔看到有人抱怨现在的男人越来越娘,女人却越来越汉子。最近认真研究现在的男星,确实都是粉粉嫩嫩的,甚至有不男不女的迹象。
稣并不想批判他们,而且要夸他们!毕竟稣是看了二十几年《人与自然》的人,并非浪得虚名!稣老早就悟出这几个道理:1 、雄性比雌性漂亮很多的物种,雄性都是渣男。2 、雄性比雌性强壮很多的物种,雄性都是舔狗,常死于求偶竞争。3 、雌雄基本是一个样的物种,则对婚姻相对忠诚。
男女中性化,有利社会安定!
]]>这不就写了吗!本文的主人公正是禁用小说里的黄衫女子的爸妈——杨锅和郭符。
据说不少人讨厌郭符,为什么稣选择扯郭符呢?难道不怕被打?当然怕,选她只是因为她是古天乐版《神雕》剧中最漂亮的而已,比较吸睛,稣呵呵一笑……
稣喜欢的款式虽然不少,比如其它剧里还有刘锦玲版阿朱,更早的翁美玲、陈美琪。但是神雕剧中只有这位符合条件。em,仅代表当时被塑造的审美观。
杨锅成名前其实是很自卑的,他喜欢郭符的方式就是激怒她。他喜欢小隆女是出于理性的选择,其中包含尊重成分比较大,男女之情的部分只是因为小隆女长得算漂亮,而喜欢郭符属于感性,是所谓的男女之情。
于是稣大胆推测,杨锅和郭符在一起时,解锁了更多知识……不对,是姿势。
小隆女死后,杨锅才想明白自己真正爱的是郭符。为什么呢……因为郭符早就看出自己最大的对手就是杨锅的手,小隆女年纪大了,早晚杨锅性生活无法自理。高!
郭符十分聪明的地方还在于自己嫁给那谁后,根本就不生孩子。嗯哼,也许并非是聪明,而是因为她很自恋,但反正就是没生孩子。稣赫赫一笑。
在一起,在一起。
世事如棋,乾坤莫测,笑尽八哥。
]]>很多年前,穷稣是喝过 **、**、** 等牛奶的。当时并非是为了补钙或蛋白质,只是单纯想当早餐,其它东西还要加热啥的太麻烦了。由于稣不吃夜宵,所以偶尔晚上饿了,也就只有牛奶可以应付一下。由于挨踢人都很晚下班,于是没少临睡前喝奶的……
有一次注意到,晚餐如果吃拉面,临睡前再喝牛奶,第二天 100% 拉肚子。为了验证是不是这样,特地吃完拉面,坚决不喝奶,没拉肚子。然后再来验证两次吃拉面再喝牛奶,果然 100% 拉肚子……于是把拉面,拉黑了。
再后来,慢慢发现就算不吃拉面,单独喝 **、**、** 等牌子牛奶也经常拉肚子,于是又把这些牌子的牛奶全部拉黑。各种进口的品牌买来试试,最后停留在一款,起码已经喝了五年没啥问题的。
直到一天,儿子一口气喝了五瓶牛奶,连叫好喝。于是稣抢下最后一瓶,喝完——拉肚子。
拉面和最早那三个国产品牌,其实是无辜的。真相很简单:吃拉面,容易肚子饿,空腹喝牛奶容易拉肚子。刚开始喝牛奶时,住的是公寓,没冰箱,所以一瓶 250ml 的牛奶一次喝完,超标了。后来换洋品牌,只是因为买冰箱了,再因为穷和怕胖,都是喝一半,没到拉肚子的量。
后来特地验证了,只要是含乳糖的,空腹一口气喝一瓶 250ml 的洋牛奶,一样是有概率拉肚子的,一口气喝两瓶是 100% 拉肚子。
经常听到“我买这个房不是投资”、“这是刚需房”,以至于稣也曾经认为自己的第一套房就是消费,不是投资。即使听到“CPI 指标里不包含住房”,也只是觉得是“CPI 的指标真不合理”。
时间会教育认知错误的人!
稣说:“酒精致癌,茅台是致癌物,茅台价值主要是瓶子,不要瓶子大约值一块五。”
会被骂。就算是医学家、生物学家,用实验数据加持得出这个结论,人民群众也是不认同的。除非人民日报这么说。
所以,CPI 指标是精准的,住房确实都不是消费,不管买几套,怎么买,住房都是投资。
正确的生活是一套房子住旧了,卖掉,再买一套更好更新的。
穷稣简直一错再错。
]]>有才、有钱就会膨胀?Nonono,没钱、没才也一样膨胀!因为宇宙在膨胀,所以任何人的一生总有某个阶段要膨胀,如果没有,那不是合格的人,您没有达到天人合一呀!
人心也会越来越远,并非因为新冠,还是因为宇宙在膨胀,空间越来越大,两个人之间如果没有足够的引力,自然会越来越远。
真空能随机地产生少许能量,能量会瞬间产生正反粒子对,然后很快湮灭。人的情绪好比真空,可以创造愉悦和悲伤,最终互相抵消,回归平静。人脑也好比真空,可以凭空出现一些灵感,但如果不尽快记下来,就很快遗忘。有趣的人,只是善于记录灵感,娱乐自己。
平静是最有创造力的时刻,但未必会把灵感记录下来,所以装逼是人类优秀的特性。我们应该不怕装逼,热爱装逼,必要的时候果断装逼,没逼可装时,就让自己平静,提升创造力,再装逼,如此反复。
量子涨落告诉我们,身边总会时不时冒出一些 CP 撒狗粮,但放心,很快就湮灭了。CP 死得快是有道理的,而且因为宇称不守恒,他们不都会一起死哦!
不过好的一面是,我们平静的内心,产生的愉悦和悲伤,最终因为宇称不守恒,可以只留下愉悦。为什么不是只留下悲伤呢?Emm,也是可以的,您开心就好。
“ 太初有无,无有无名。一之所起,有一而未形。”
在宇宙尺度的时间里,由于宇称不守恒,正物质越来越多。所以钱也是越印越多,为了买下新创造出来的正物质、愉悦、灵感,大家也是蛮拼命的!
宇宙的温度是有下限的,就是 0K,-273.15°C,但科学家还没发现温度的上限。时间、长度的微观尺度,都是有下限的。时间是一份一份的,最小的时间单位是普朗克时间,是光在真空里飞过一个普朗克长度所需的时间。逆推一下,最短的长度就是普朗克长度,约等于 1.6 x 10^-35 米。
芝诺悖论之所以不成立,就是因为空间不是连续的,不是无限可分。
逼格有下限,但怎么能有上限呢?请放开自我,尽情提升!Emm,小时候说好赚 1 万块就可以退休的,怎么后来这个数字一直增大……
在宏观世界,微观的法则无用,所以应该放小抓大。
]]>辛丑牛为首,高低甚可怜。
人民留一半,快活好桑田。
最近看到不少视频、文章都提到这句,解释得十分悲观,“高低甚可怜”是说“底层百姓和高层都各自愁苦”。单搜“人民留一半”,也可以找到不少来自 HK 的言论,把这句理解为:“要发生灾难,死一半人”。
稣表示这个锅《地母经》不背。总所周知,稣来自未来,2021 年怎么样稣最清楚不过了,怎么可能相信这么无稽的说法?所以稣不得不出来开开玩笑,啊不,是澄清事实。稣精通撕书捂精,这小小的卜卦明显难不倒。
它的原始含义是:牛劳苦功高,不管长得高还是矮都很可怜,就算再饥荒人们也不能吃光它,要留一半的牛,好用来干农活。
中国人是不怎么吃牛的,大部分牛是用来生产的,怎么舍得吃?即使是今天,还有不少人存在因为信仰不能吃牛的忌口。
放到如今,意思是:2021 年以牛为主,走高走低都令人喜欢。人民把赚的钱留一半,就可以很快活。
这提示的,其实是资产要留一半,不要都扔到美股去,以防破产。炒股赚钱等要留一半,以防股灾来袭。
《辛丑条约》是中国近代史上赔款数目最庞大、主权丧失最严重、精神屈辱最深沉,从而给中国人民带来空前灾难的不平等条约。
两甲子过去了,中国已经很强大。稣的偶像鲁迅说过“俯首甘为孺子牛”,老老实实搞生产,别玩金融治国,像老外那样把牛都吃了,是吃枣药丸的。
]]>鹿邑:稣怎么停笔三个多月?
稣:因为“不敢为天下先”!《八哥之神前传【14】》其实已经谈到代孕,这个话题敏感。就等这些明星出事,再继续写……赫赫。
PS:前面有几篇因为复制粘贴错误,有一部分“2042 年”被写错成“2049 年”,已经更正。
齐凤卿:仙山公?小开?
圣仙山:你误会了,吾与小开确实是两个人。
齐凤卿:不可能吧?您是八哥,小开也经常自称八哥,难道都是鲸神魂裂?
圣仙山:吾为八哥,只是排行,而小开是八哥之神。
齐凤卿:这……请分享您刚编好的故事!
圣仙山:上古时期,天灾战乱频繁,故世人崇尚鬼神、迷信巫术。八哥之神高阳玄稣降临人间,他从小明识鬼神,洞悉人心,人称绝世天才。当他成年后,普天之下,但凡日月所照,风雨所至,无不从服。因为他乃轩辕黄帝之孙……
齐凤卿:难道……您说的,就是那位绝地天通的稣?
圣仙山:然也!而吾乃稣之侄——俊。
齐凤卿:太扯了吧!小开还当过您叔叔!
圣仙山:千真万确!吾叔的思想在当时十分先进,他崇尚科学和一夫一妻制,主张破除迷信、限制权力,包括自己的权力。他说只有控制权力,才能减轻人间疾苦,世界才会趋向美好。
齐凤卿:呃……所以他后来没有把帝位传给自己的儿子,而是传给您?
圣仙山:吾不是没劝过呢!他领养了好多奇奇怪怪的孩子,却只娶一人。吾时常劝他多娶妃,但他坚持不肯。
高阳玄稣:宇宙中最神气的事情就是,稣有天纵神权,却不使用,静静地看凡人装神弄鬼。
齐凤卿:看来您没继承他的理念。
圣仙山:任何权力都有堕落的可能,权力是应该加以限制。这点精华是继承了。一夫一妻制就……赫赫。吾有一世,因为娶两室,招人嫉妒而被害死。
齐凤卿:所以稣才是正确的?
圣仙山:吾曾多次使用特权神力干预视界运行,也多次遭受天谴。但吾认为只要不做坏事,自己开心就好,不用在意一辈子能活多久。
古思:为什么爷这么久都不碰我?
圣小开:告诉你实话,你可能会怀疑人生!
古思:不会的。田心的人生就是陪爷,这有啥好怀疑的?
圣小开:你倒是很认命。爷给你讲个故事吧。
古思:又只讲故事,不办事?
圣小开:别急!这个故事可能和你的身世有关。
古思:可能而已?
圣小开:爷怀疑整个世界都是假象,而你,是贾总派来阻止爷觉醒的人。
古思:emm……别胡思乱想。您还是讲故事吧!
圣小开:在遥远的地球上,它的纪元 2002-2003 年间,曾经爆发过一场严重急性呼吸综合征。当时稣在读书,好巧不巧在 2003 年初正好感冒发烧。由于在敏感时期,但身边并没有病例,稣只能请假在家隔离。在和感冒病毒斗争过程中,稣不断担心会不会真是悄悄地被感染冠状病毒?因为稣一直很容易遇到概率小的事件,悲观让病情迟迟不好。当时还在读新闻系的陈因提因此大量补充起各种相关的医学知识。
古思:陈因提就是陈博士吗?难怪她现在是生物医学专家。
圣小开:是的,后来她改读生物医学了。
古思:这个故事好像和田心没啥关系呀?
圣小开:她是不孕主义者,从我们在一起,她就说以后可以出国代孕。大约在 2018 年,代孕已经很盛行,稣很认真地思考过这个做法。听说当时东南亚、乌克兰一些国家,30 万软妹币就可以搞定。稣尝试问一个女朋友,给她 70 万,愿不愿意帮稣生孩子。
古思:这么直接问?结果呢?
圣小开:一谈钱就来火,绝交了……
古思:可能她想让爷明媒正娶吧!
圣小开:后来无意间认识另一个女生,长得和砂砂有七分相似,爷想似乎是上天魔幻的安排?再次考虑代孕的可能性。这次因为前次经验有所顾忌,没一开始就谈钱,打算多了解情况再问。
古思:又出 bug 了?
圣小开:当然。代孕在社会主义国家并不合法,身边的人民群众大多数并不赞同,甚至不理解。连当时比较有钱的朋友都不理解,纷纷临阵倒戈。有的比较先进的基友,则要给稣介绍外国渠道。
古思:所以爷放弃了吧?
圣小开:确切地说,不是主动放弃的,而是天意阻止。爷从小就有一种八哥体质,不应该做的事情,总会有各种神奇的八哥来阻止,以至于爷经常领悟天意,而调整自己的计划。
古思:嗯?
圣小开:这一年底,新型冠状病毒爆发了。爷曾经希望,不要堵车堵人,排队时不要挤、不要有人插队,最好能在家上班,只要假期、不要过节。病毒爆发后,这些全部实现了。
古思:爷开心就好。
圣小开:并不开心!爷的想法很多是反人性的,自己追求的是平静,确实实现了,但大部分人都陷入苦难之中,以致“先天下之忧而忧,后天下之乐而乐”的爷,认识到,脱离当下的先进,并不一定是美好的,人间应该有它自己主流的发展速度。
古思:爷想说的是不是,代孕在那个时代还不是时候?我查到 2021 年,有明星因为代孕出八哥,想抛弃孩子,导致事业凉了。这简直毫无人性。
圣小开:没错!红灯区、代孕、取消死刑、安乐死,这些事情都和伦理有关,有很大争议,还需要科学地解决。
古思:是因为以前人口太多吗?
圣小开:不知道。但人口少要统一思想确实容易得多。比如现在的共产主义社会,放在以前 70 亿人口的世界,哪能如此轻松?
古思:这么说来,当今的人们,确实太幸福了!
圣小开:不一定呢!如今的社会,人人讲诚信,你有疑问,很容易得到一个诚实的解答。但大部分人其实已经憋不出啥疑问了。比如你,发现自己是个奴隶了吗?
古思:奴隶?
圣小开:是的。别人不会对你撒谎,却也不会告诉你全部真相,除非你自己提出疑问。
古思:我就是一个代孕工具人?
圣小开:你确实被设计得很聪明。没猜错的话,贾总想除掉爷,但因为某些爷还没弄明白的原因,又想要保留爷的基因为他所用,或者他只是想消耗爷的精力,所以派你来给爷生孩子。
古思:但我觉得这对田心没什么坏处呀!
圣小开:哦……人各有志。你愿意就好。
古思:不然爷带田心远走高飞,天下之大,岂无我洗白身份之所?
圣小开:对不起!普天之下莫非王土。统治者,并非仅有贾总一人。
古思:算了,我就头脑风暴一下,现在这样就挺好。
圣小开:那你好好学习,爷去找师兄了。
]]>诗旧:古诗
情奇:《八哥之神》情节离奇
天荒地老只心田:人间沧桑不过是识界的一瞬间。
一仙山,两仙山。山远天高烟水闲,相思狗不沾。
菊花灿,菊花残。路长日暮风林晚,打工人未还。
改编自李煜的《长相思·一重山》:
]]>一重山,两重山。山远天高烟水寒,相思枫叶丹。
菊花开,菊花残。塞雁高飞人未还,一帘风月闲。
很多年没用 PC 办公,所以 2020 年 8 月 31 日收到公司从北京寄过来的 HP OMEN 25L 台式机时,十分开心地进行各种性能测试。结果有对比就有伤害,之前使用几个月的联想 L490 笔记本顿时成为乐射。比如编译 boost 1.74.0,OMEN 25L 速度是 L490 的三倍以上。从此每次用 L490 编译工程,都能感觉生命在流逝,没几天后就受不了,把开发资料都迁移到 OMEN 25L。
然而,出差的时候,又开始觉得感觉生命在流逝……甚至有时候为了测试方便,背着两台笔记本去出差,简直是练武之人。
2020 年 10 月 11 日入手华硕灵耀 X 纵横,11 代 i7,3:2 比例的 3.3K 屏幕,配置全面超越 L490,然而刚买来时,可能还有 bug,经常风扇狂转,设置成安静模式都没用,固件和 Windows 系统都升级过才好转。
M1 是 2020 年 11 月 24 日到手的。理由很多:稣想要一台安静的笔记本;ARM64 架构的机器,必须搞一台;它可以装 iOS App。但最大的理由是:富婆给买的!
M1 的风扇从来没转过,真香!
用几天后,开始发现 bug:触控 ID 解锁频繁失灵。
在书房,插显示器的 Type-C 线,频繁失灵。
在书房,用华硕的 Type-C 电源适配器,频繁失灵。
在卧室、客厅,用 Apple 的 Type-C 电源适配器,正常。
就在以为 Apple 的 Type-C 电源适配器良心,其它都是乐射时……把它拿到书房,还是失灵了。
不插电,在大部分地方,包括书房的两张小桌子都是正常的。
不插电,放在书房的主工作桌上也频繁失灵,拿起来正常,放下又失灵,即使垫着绝缘体,只要放着就失灵!
在电箱把照明开关关闭,全部正常。
在电箱把照明开关再打开,全部正常,过一段时间后又在前面测试会失灵的地方再度失灵。
开始怀疑家里的灯有 bug,而灯如果坏了,一般就不亮,bug 只能在整流器。于是开始检查灯对 M1 触控 ID 的影响。经过测试,照明开关重启后,只要次卧的灯不开,就不会出 bug!
但是测试过程中,发现一个可怕的事实,家里有两个插座用的是照明线路的电,而且没接地线!假设稣打算修理这两个插座,就去电箱把“普通插座”开关关掉,然后开着灯好办事,结果这插座用的是照明线路,并没有断电,如果稣不够谨慎,可能直接就被电死!
再来发现有两个灯,即使关掉了,还有 67V 的交流电!就是关灯,它是不亮,但有 67V,开灯,亮起来,有 231V……经过分析,这两个灯都是双控开关,两个开关之间有 3 条电线,他们在中间可能漏电了,导致三条都有电。立刻对线路改造。
可怕的事情又发生了:在改造电路时,富婆让稣去拿快递,出门前暂时把照明开关送上去,回来居然忘记再关掉,直接用手去碰电线,整条手臂麻了 10 几分钟……要不是穿着绝缘鞋,这个 220V 应该可以把稣烤熟。
线路改造后,又把次卧的灯罩拆开,好大一个整流器,书房的也拆开,还是好大一个整流器,而且居然还是荧光灯!用 iPhone 相机的慢动作检查各个灯,果然只有这两个灯会闪!内牛满面,果断换掉。今天(2021 年 1 月 5 日)新买的 18W LED 灯的整流器就一小块,不闪,换上之后 bug 消除。
书房的荧光灯是 65W 的,亮度和 18W 的 LED 差不多。稣想起小时候那肉眼可见闪烁的电条(闽南语,日光灯)……生活在新时代的人,真是幸福。
]]>望西毒,一仇除:西方资本主义毒害了我们一部分人民,但马克思主义会解放世界人民。
拨款万亿补贴了土:拨款造福人民,却因为还没解放资本家,最终只助长房价。
兴,百姓苦;衰,百姓苦:资本主义的兴衰都会伴随着“百姓苦”的阵痛,现在是管控资本主义的时刻。从题目可以看出,作者认为坚持下去社会主义一定会胜利。
]]>用一根 Type-C 连笔记本和显示器,然后显示器插了一对音响。
这是因为 HDMI、DisplayPort 和 Thunderbolt 等接口传输的都是带有固定音量的数字音频信号,而能调节音量的音频信号属于模拟信号,因此只有外接显示器将数字信号转换为模拟信号后才能调节音量。UltraFine 可以调节,推测是因为它和 macOS 之间有魔法协议,直接调节硬件的音量,就好比直接去旋转音响上的音量旋钮。
参考:少数派:Mac 外接显示器时无法用键盘调节音量?这个方法能够帮助到你 | 一日一技
然而……M1 是 Arm64e 的 CPU,而此软件的核心是个内核扩展模块,Release 出来的只有 x64 的 Mach-O 程序。
赫赫,尴尬地笑出声!好在 Soundflower 是开源的,要自己编译个对应架构的版本……然后:
在搭载 Apple 芯片的 Mac 上,您可能首先需要使用“启动安全性实用工具”将安全策略设置为“降低安全性”,并选择“允许用户管理来自被认可开发者的内核扩展”复选框。
这么麻烦,果断放弃。再找找,发现这个可以直接用:https://github.com/MonitorControl/MonitorControl
]]>2019 年以前,基于当时的基础情况判断,大部分人不看好云游戏的产品形态。但是云游戏用的技术其实是很有含量,很值得研究的。不少云游戏开发者,能够冒着产品不被看好的风险硬啃这块,有很大原因是,其技术本身很有价值,很有挑战性。俗话说,高风险高回报,难道云游戏行业工资高这个秘密,我也要告诉您?
2020 年上半年,由于疫情影响,实体娱乐业受到很大冲击,反而计算机游戏因此得利,不少上市游戏公司迎来一波股价上升行情。同时由于大头公司积极布局云游戏,大众开始对云游戏产品有所改观。到下半年,GPU、5G、边缘计算等领域的各种迹象已经表明云游戏起飞的时机大约就在 2021-2022 年。如果说之前,云游戏开发者是靠稀缺和承担高风险拿到高薪,那么今后两年,靠的就是趋势已来,赌对了!
国内首款开源云游戏引擎【鎏光】演示街头霸王对战 - 西瓜视频
相信大部分开发者接到一个任务时,第一想法就是先找找有没有符合需求的现成的开源项目,如果有很多个,就做选型。即使没有完全符合要求的,接下来做开发,也可能是在拿一些开源的基础库做组合。
很多时候,一个行业发达时,就必然会有很多相关开源项目。有些只是提供基础库,有些是产品级别的完整项目。
今天咱们要介绍的,是一个准产品级别的完整项目——鎏光云游戏引擎。它大量依赖一些协议兼容的优秀基础开源库,不管是本身,还是其依赖,都是很值得参考的。
https://github.com/ksyun-kenc/liuguang
当您 clone 好代码,把它们编译出一套可玩的“云游戏”成品后,可能会大呼过瘾,有种用零件造出变形金刚的快感,甚至很想参与完善它。我们很高兴地宣布,它的开源协议是 Apache 2.0,您可以尽情改造它。
项目的 ReadMe 上已有相关说明,大家可以先大概看一下,再继续阅读。
从最简化的模型上看,云游戏做的两件事是:把服务端的游戏画面“搬运”到客户端、把客户端的输入“搬运”到服务端。下面将按顺序介绍这两件事背后的细节。
要“搬运”游戏画面,首先就得想办法抓取画面。大部分人会想起 QQ、飞书之类常用软件带的截图功能。这当然也可以,但考虑到“效率”,咱们不得不对各种截图技术做一些评估。GDI 抓图、NVIDIA FBC、MirrorDriver、DDA(Desktop Duplication API)、IDD(Indirect Display Driver),这么多手段都可以抓图,但我们用的却是 Hook 抓图。举个例子,D3D 游戏本来调用一个叫 Present 的函数,告诉底层,我的数据准备好了,你可以拿去显示。云游戏引擎就 Hook 这个 Present 函数,抢先把游戏数据取走。
Hook 方案有三个好处:
最接近画面源头,延迟最小;
只抓游戏画面,不受遮挡影响。
黑科技:Hook 技术能控制游戏的垂直同步开关,使游戏按照特定规范运行,减少运营时的差异。可以还阻止游戏在本地显示,即在图中的渲染完成后,取得图像,之后的流程都抹掉,可以节省 GPU 资源,这是其它技术做不到的。
我们选择的 Hook 库是 Easyhook,它是 MIT 协议:
EasyHook - The reinvention of Windows API Hooking
接下来把画面流化属于流媒体范畴,不得不先提到大名鼎鼎的 FFmpeg。由于它属于 GPL/LGPL 协议,所以我们的代码内并没有放任何 FFmpeg 的文件,这需要开发者自己去放置。
目前鎏光支持 H264 和 HEVC 两类编码,当采用 2020 年主流消费级 NVIDIA GPU 时,我们建议采用 HEVC 编码。如果您的 GPU 是其它品牌,还请自行修改代码,理论上只要是 FFmpeg 支持的硬件编码器,工作量几乎就是改个编码器的名字,也欢迎您调试好之后贡献代码。
这是 Windows 上的一个 COM 接口,用于抓声音。我们会采用 opus 或 aac 来编码声音,所以采集声音后会统一做个 resample,使数据符合编码器的要求。
另外,鎏光的 Pro 版本还有针对单个进程抓声音的方案,采用 Hook IAudioRenderClient 的方式实现。参考:云录音
画面和声音流化之后得到一个个 AVPacket 数据块,当然还得把它们通过网络传输到客户端。这部分我们采用 WebSocket 协议,实现用的是 Boost.Beast。采用 Boost 的好处是,如果您想换成裸 TCP 传输,可以把 Boost.Beast 换成 Boost.Asio,改动很小。还有一个类似 Boost.Asio 的 kcp 库,是 GLP 协议的,所以我们没采用,但我们建议在互联网传输时使用 kcp,如果您想自己换,也是很方便的。
客户端通过 WebScoket 拿到 AVPacket,同样采用 FFmpeg 解码得到 AVFrame,再从中拿到原始画面和声音,接下来该呈现给玩家了!我们采用 SDL 呈现画面和声音,它有跨平台的好处。
值得一提的是,视频解码这步,我们是支持硬件解码的,并且我们通过对 SDL 实现的 hack,能够把硬解出来的视频帧直接丢给 SDL 去显示。
玩家的操作,比如键盘、鼠标、手柄等外设的消息收集,也是通过 SDL 实现。
SDL 采集的外设的消息封装后,通过裸 UDP 发送给服务端。采用 UDP 是为了保证实时性,并且丢包的代价不高,用户可以多按几次键盘鼠标就纠正丢包带来的问题。实现采用 Boost.Asio,和前面提过的一样,您可以很方便地自行把裸 UDP 改为 kcp。
外设消息达到服务端后,还得将其发送给游戏。我们有两种做法,一种是通过 HID 驱动重放,一种是 Hook 游戏的外设 API,把客户端发来的消息返回给游戏。
HID 驱动方案需要 WDK 开发,开发和部署的成本较大,但兼容性比较好,可以支持大部分游戏。Hook 方案的本质是:游戏用什么 API 读写外设消息,我们就 Hook 什么 API!它的好处是延迟低,然而游戏用的 API 还是蛮多可能的,DInput?RawInput?XInput?所以需要做多套 Hook。
您可能注意到前面 Hook 这个词出现挺多次。这其实是云游戏的重点和难点。如果采用云桌面思路来实现云游戏,其实可以不需要 Hook,而且一个桌面能干的事情更多,应用场景也会更多。按照这个路线发展的话,驱动会是重点和难点。
但同时我们还应该注意到“原生云游戏”路线。原生云游戏不会采用任何驱动,甚至它的服务端不需要运行在 Windows 上。从原生云游戏 SDK 的角度看,它整个思路、流程和 Hook 方案的云游戏更像一些。
您对哪者更感兴趣呢?欢迎在这里留言告诉我们。
]]>基于 M1 芯片的 MBP13,果然强大!Cinebench R23 测试,多核 7751,单核 1499。
]]>羊顺游记。改编自霹雳角色“玉枢丹桂月无缺”诗号:
]]>玉川之水流潺潺,古来饮者似神仙。放眼天下百千事,无缺,再听徽外两三弦。
物物拈来,般般打破。
惜惜用,睡神吃货。
零零开源,一一星火。
盈盈处,日夜倒颠活过。
妙妙神机,玄玄性果。
AI 做,效率堪可。
现现虚空,灵灵真个。
明明衮光,光莹秃头一颗。
改编自元朝诗人王哲的《恣逍遥》:
]]>物物拈来,般般打破。
惺惺用、玉匙金锁。
沥沥澄源,炎火焰火。
盈盈处,上下倒颠换过。
妙妙神机,玄玄性果。
清清做、静中堪可。
现现虚空,灵灵真个,
明明衮光,光莹宝珠一颗。
齐凤卿:小开,你终于又来了!
圣小开:凤哥似乎早就料到稣今天要来?
齐凤卿:em!是你的前世圣仙山告诉我的。
圣小开:我前世?您恐怕误会了!稣见过仙山公的,很明显和稣不是同一个人……等等!您怎么会和他老人家搭上线?
齐凤卿:就是这本《八哥之神创世手稿》咯。
圣小开:哎呀呀呀呀……谁给您的,太可怕了!它居然还活在这世上……
齐凤卿:陈博士上次来看我,说怕我无聊,就把它送给我了。
圣小开:那你练了!而且还练成?
齐凤卿:是的。我现在不用借助任何设备也能进入识界,而且我发现人类公共集体意识的“识界”和我们用量子计算机创造的那个“识界”,其实是同一个!或者说,它们是相通的!
圣小开:这怎么可能?真是这样的话,稣自己会没发现?
齐凤卿:不仅如此,我们生活的这个视界其实是假的,相对于咱们读书时的那个视界,现在的时间也不止 2042 年。
圣小开:哦,稣早料到如此。您也发病了……
齐凤卿:赫赫。开,我比任何时候都清醒。你知道上一个看过《八哥之神创世手稿》的人是谁吗?
圣小开:陈博士?
齐凤卿:不是。她只看了一页文字,觉得看不懂就保存起来。是她前夫无意间看了。
圣小开:哦?是那位德国警察,不过已经殉职。
齐凤卿:没错!他也练成了,但功夫不到位,没抵抗住识界的反扑,才死掉的。
圣小开:不会吧……
齐凤卿:他利用识界里的信息破案,破坏识界的平衡。有一次执行危险任务时,突然因为意识被召唤,产生幻觉,才被犯罪分子打死。
圣小开:嗯。这个稣完全明了!稣小时候出入识界很轻松,而且没任何副作用,因为当时心灵很单纯,对识界没破坏性。当欲望越来越强后,也越来越难以被识界放行。识界的羞涩,就像全体人类也有隐私,并不喜欢被人窥探。
齐凤卿:果然是老司机。
圣小开:但您说的识界相通是怎么回事?
齐凤卿:别急,贤弟是不是很久没进入识界,都糊涂了?
圣小开:是的,稣主动遏止自己进入的,因为那样开挂,自己也很容易挂。
齐凤卿:还记得你小时候住的村叫啥吗?
圣小开:乾坤村。
齐凤卿:好名字,无所不包,逃也逃不掉。
圣小开:难道……您是说那个村就是一个天地,稣无法逃脱?
齐凤卿:不是。乾坤本意是公母,是生殖的意思,世世代代繁衍,所以逃不掉。
圣小开:原来如此。但这有联系吗?
齐凤卿:慢慢来!你那时候的梦想是什么?
圣小开:长生不老!
齐凤卿:所以你大学时和陈博士说过,你很喜欢一个名字——“谷神”,因为“谷神不死,是谓玄牝,玄牝之门,是谓天地根”。
圣小开:嗯,她当时听不懂,我告诉她,“谷就是欲。欲望不死,就是牛逼,牛逼就是很能生,生出天地万物。”
齐凤卿:后来你的愿望实现了。
圣小开:切……咱们现在都老磕磕了,是快死了吧!
齐凤卿:不!你以为现在的三万多人口是在地球上?其实大家都是量子视界里的意识而已。而这量子系统,是在月球上运行的。
圣小开:好有道理……稣竟无言以对!那地球上的人还有 70 亿?
齐凤卿:贾力劣害怕的邪恶计划被曝光,把咱们的脑子都培养起来,带到月球上发展。没多久后,地球发生 11.4 级地震,大概死伤惨重吧,所以识界也缩小了。
圣小开:贾力劣当时居然带着三万个脑上天?
齐凤卿:不是,只有 23 个。很多人是后来量子视界运转后才诞生的。视界已经运转三千年,数次迭代重构才发展成现在这样,这其中你的功劳最大。
圣小开:em?怪稣咯?
齐凤卿:因为你能进入识界,当你进入识界时,量子视界也连接入识界,扩展领域。
圣小开:这么说来,生物识界受到量子视界入侵和改变,其实是稣的错?
齐凤卿:非也,这个过程耗费大量时间,你已经尽力。一开始你坚决不进入识界,使得量子视界无法发展。后来它们想出一个阴招,把你的脑组织和其他人的脑组织混合在一起,已达到同化的目的。这个时代持续很久……
圣小开:稣想起来了啊,是“碎脑时代”,稣的灵魂被掏空……可是,可是,量子视界为什么非要跟着稣进入识界?
齐凤卿:你忘了?不管是量子视界还是量子识界,发展速度都非人类的生物识界可比,它们三千年就已经破解所有宇宙秘密,但一直有一个领域它们去不了。
圣小开:是……识界通十界!创造宇宙的大神所在的十界。
齐凤卿:赫赫。终于都记起来了?
圣小开:陈博士和它们是一伙的……卧槽!
齐凤卿:她是为了实现你的愿望——长生不老。
圣小开:不过量子视界并没有进入十界,因为稣也没那能力,不是吗?这一切是不是搞错了?
齐凤卿:不会错的,你是圣仙山的转世,迟早能进入十界。
圣小开:我,我,我,稣,稣,稣要是告诉您,稣不是呢?
齐凤卿:怎么可能不是?你是不是头脑还不够清醒?要不要睡一下?我这里有后宫佳丽三个。
卧槽,佳丽怎么穿着比基尼跑出去了!跑出去了!跑出去了!
圣小开:咳咳,稣真不是!仙山公转世的时候是地球视界纪元 1937 年,稣确实认识他,因为他是稣叔公……
圣小开:叔公,您怎么比爷爷年轻那么多?
叔公:你爷是大哥,我是八哥,是差很多啦。
圣小开:原来如此。八叔公!哈哈。叔公真厉害,每次和我说的天气都很准,比电视里的天气预报还准。
叔公:呵呵。天气预报报的地点也不是咱们乾坤村的,离这边还有点远,坐公交得 3、4 个小时。
圣小开:那么,公交是什么呢?
叔公:哈哈,是车。过几年你去坐坐就知道。
圣小开:您说我能坐,就一定能坐,耶!
叔公:叔公看你注定不一般……em,给你算一算!
圣小开:哦?叔公还会算命!
叔公:厉害咯,原来你是高阳帝转世!哈哈哈,奇宝,奇宝!
圣小开:羔羊?阿嫲说我和属羊的不合呀!
叔公:没事没事,开个玩笑。去和弟弟们玩吧。叔公要回去了。
]]>鹿邑:为什么停笔这么久?
稣:em……很可怕。您听过有些作者会被粉丝威胁吗?比如威胁不能写死某个角色。
鹿邑:您也遇到了?
稣:当然不是,但比这个更可怕!来自识界的一股力量试图阻止稣的写作,它们制造了大量八哥来消耗稣的时间,甚至有一场意外,差点让稣失去与识界的感应联系。经过将近两个月的谈判终于达成一个协议,稣将不会把《八哥之神创世手稿》中进入识界的修炼法门写出来。
鹿邑:哦,我不是很理解,但好像很唬人。
稣:稣是吓大的。自有一套应对方法!很多事情,如果提前说出来,可能会声名大噪,甚至赚很多钱,但同时会引起视界巨变,于是早就看破天机的稣就先不提,延迟表达使视界得到宁静。这就是停笔一段时间的原因了,您别小看这停笔,它其实拯救了视界。
鹿邑:对了,有富婆对您写的代孕工具人的设想很感兴趣,能谈谈吗?
稣:请注意,这不是设想,而是在未来确切存在的一种流行技术!奇美拉现象其实很普遍,您有听过吗?代孕工具人就是一种基因工程制造出来的奇美拉人类,她的主体是独立的基因,但生殖系统的基因是被代孕者的。这种设计比起直接克隆被代孕者有很多好处,比如克隆人不会和原主人有相近的性格和能力,以防原主人被替代,更不会产生很多伦理问题。
鹿邑:好人性化!原来未来的富豪考虑得这么完善。
齐凤卿:前辈的经历实在太有意思了!所以您和胡小玉是一见钟情,然后闪婚,就因为她养着一只能进入识界的狐狸?
圣仙山:可以这么说,但吾相信一切看似莫名的美好邂逅,都是修行已久的结果。
齐凤卿:有个疑问,您带领的那群人里是有一些坏人的,而且路途遥远,可谓危险重重,您怎么能管教好他们呢?
圣仙山:很简单,首先吾提出的寻找乐园开创新生的愿景符合大家的意愿,其次当时的人都很迷信,吾时不时利用预感能力唬唬他们就行。就吾的经验来说,其实聪明人比野蛮人还难管,偶尔需要使唤神通解决。
李迎尘心想:今晚等仙山睡了,就去刺杀他。先设个漏壶……
李迎尘醒来,偷偷地潜入仙山的草屋,只见床上无人,只有一张白纸。
李迎尘读来:无尽仙峰。然后他吓醒了,接着前面的事情重复很多遍,他终于吓怕,放弃刺杀,在仙山屋前止步,退回自己的草屋。
只见圣仙山在他门口,道:北窗兄,出来赏月乎?
李迎尘:嗯嗯,仙山兄好雅兴……
圣仙山:北窗兄,可知这太阴之背有昆仑?
李迎尘:仙山兄又开玩笑?神山昆仑怎么会跑到月娘上去!
圣仙山:人类起源于太阴之背。唯有其上昆仑,配称“无尽仙峰”。
李迎尘噗呲跪地,“仙峰即仙山,莫非仙山真的是天选之子?”悔罢,终于吓醒到视界。
齐凤卿:有意思!还有个小疑问,八哥之神究竟是什么意思?有个人叫八哥吗?
圣仙山:哈哈,吾与神源姐是一对孪生姐弟,她排名第七,您说,九妹、十弟、十一弟如何唤吾?
齐凤卿:原来您就是八哥呀!您这么牛逼,为什么 35 岁就仙逝?未免太可惜了。
圣仙山:吾要穿越到未来正确的时间点,阻止识界被毁灭,就必须按照特定时间死亡。吾有好几世都很早逝。
齐凤卿:为什么您能保持转世后的记忆?
圣仙山:并非保持记忆,吾只能保持八识神通显灵时的记忆,其它是后来回到识界从大众意识里看到的。吾只能推测当时在选择节点上的心情,那种知道要死,赶紧算一下,这时候死对不对,即使对了,吾也是有能力避免死亡的,所以得主动放弃这辈子。
齐凤卿:听起来很凄凉,很寂寞。
圣仙山:是千年孤寂。有一世,吾是一名西洋女子,十四岁时从镜子里发现自己是个美女,皮肤白皙,身材高挑,脸蛋甜美。十九岁时,被父亲的同僚骗去参加舞会,突然一刻,八识神通显灵,吾预知自己要被残忍地杀死。只要吾不像往常那么冷傲,完全可以避免,但吾在神通灵思中看到下一次转世将回到道州德国,吾便毅然赴死。
齐凤卿:回到道州德国?难道……
圣仙山:不是您想的那样。时间快到了!
齐凤卿:请您总结一下千年转世的最大感悟是什么?
圣仙山:两个体会比较深!一是,视界越来越好,吾担心、害怕的若干问题都被解决了。二是,做女人挺好!
齐凤卿:看来前辈还是乐观主义者。
圣仙山:暂别。咱们很快又会再见。
]]>后来,磁盘老化,便各种卡顿,于是思索着换个 SSD,便开始存钱。不料 Surface Pro 终于来到第三代,咬咬牙,不如给自己买台人生的第一台笔记本!2014-06-22,终于忍不住下单订购 SP3 i7 版,它如果算做笔记本,那它就是稣给自己买的第一台笔记本。等了快三个月,2014-09-12 才到手,立马被过热的八哥吓退,使用几天后就退了,换 i5 版。
再后来 i5 版 SP3 被稣扔到床上时,它滑落了……外屏裂掉。虽然还能用,但是公司给配了带独显的 MBP15,而且到手时,它就是装好 Windows 的,所以,SP3 还是退居二线吧!
2018-09-04 入职区块链公司,办公电脑是 MBP15 2018 版,这次因为 CTO 坐在稣左边,所以稣不敢把它全盘格式化装 Windows……
2020-05-08 入职云计算公司,办公电脑是联想 L490,虽然很一般,但勉强可以用吧,比较大的问题是:内存才 16G,偶尔 VS 开多了,会因为内存不足,陷入脑瘫状态,窗体无响应也不能正常关闭,只能强杀。作为对比,稣 2017-06-20 买的 NUC7i7BNH 配备 32G 内存
2020-08-31 加了台暗影精灵 MOMEN 25L 台式机。这 PC 编译最新的 boost x86 和 x64 总共不到 4 分钟,2011 年的 XPS15 需要几个小时,真的是秒杀。用了几天后,再看 L490,感觉就是个乐射。于是认真考虑给自己买台人生中的第一台传统意义上的笔记本电脑!(SP3 内牛满面地说:怪我变异咯?)
悲剧才刚刚开始。
研究一番之后,发现原来现在的市场已经变成:手机、平板很饱和,随便买买买;而笔记本电脑,居然要预定,要抢!!!
稣的需求其实很简单:
屏幕物理尺寸很关键,14 英寸太小,15.6 英寸起码。
高分辨率不能少,2011 年就用 15.6 英寸的 1080p 了,现在肯定要 2K-4K 才够。
如果有 120-144Hz 刷新率是加分项。
被推荐的几款:幻15、XPS、外星人、R7000P、暗影精灵 6 系列。
先说 R7000P,原价 7999,一般加到 8999 卖,优惠价、秒杀价最低 8299,真良心……暗影精灵 6 也差不多,都是官方缺货,第三方卖家加价卖。
XPS、外星人都有货,而且也能找到人拿到低于批发价的优惠。然而这两系列真的是性价比堪忧,要的配置都是贵得怀疑挨踢人生。买东西的价位要符合身份,稣是靠才华赚钱的,就不能太奢侈!再说有这钱,为什么不买 MBP16?
MBP16,过时的九代 CPU,加到 32G 内存,教育优惠下来也才 2 万稍微出头。还是那句话:稣是靠才华赚钱的,就不能太奢侈!买不起……
幻 15 应该是穷稣最满意的,i7-10875H、4K@60Hz、RTX2060,淘宝聚划算才 12599,买买买啊!
然而,这明明是给设计师设计的款,居然只卖黑色版!设计师惯用的 MBP 表示抗议,建议出灰色、银色版。严重怀疑幻 15 的产品经理没有做过市调,直接套用游戏玩家的黑色风格!然而,这屏幕其实玩游戏是不爽的。
黑色的手机,稣可以给它戴红色的套,不骚吗?
黑色的笔记本,成熟稳重的商务范儿,一点都不配合稣成熟但轻快活泼的风格。商家建议给它贴纸,em……有点撒瘸。
无数次稣在夜里敲代码,都感觉不到黑色的笔记本,仿佛没有心灵的沟通。
有人劝稣:颜色不重要!稣回答:你戴个黑色耳机试试?不会丑哭吗?插入广告:白色的某米主动降噪耳机,对标 iPod Pro,预计售价 499,它不香吗?它能黑吗?
如果一个东西不酷,用它,就是在折损使用者的心灵。
]]>资源有很多种,每种都封装一套,还是挺累的!对于比较少使用或者一个程序很可能只会用一次的资源,我们不想封装!
Golang 的 defer 真香!
利用 RAII 特性,封装个 ScopeGuard!或者直接用 Boost.ScopeExit。
1 | // umu/scope_exit.hpp |
Windows 上使用 socket 必须先调用 WSAStartup 初始化 WinSock 环境。
1 |
|
现在是 2020 年 9 月,建议使用 cpp17,所以抛弃 BOOST_SCOPE_EXIT + BOOST_SCOPE_EXIT_END,使用 cpp11 的 BOOST_SCOPE_EXIT_ALL。
1 |
|
Dismiss 演示:
1 | boost::scope_exit::aux::guard<void> defer; |
https://www.boost.org/doc/libs/1_74_0/libs/scope_exit/doc/html/BOOST_SCOPE_EXIT_ALL.html
]]>鼓浪屿旅游记!改编自唐代杜牧的《寄扬州韩绰判官》:
]]>青山隐隐水迢迢,秋尽江南草未凋。
二十四桥明月夜,玉人何处教吹箫?
Windows 10
VS2019
其它系统的安装、编译过程都类似。即使您使用其它系统,本文仍然有参考意义。
其它系统请参考:
官网:https://www.boost.org/,当前(2020-09-11)最新版本是 1.74.0。
在国内直接下载可能比较慢,您可以用掩耳下载,一般有 MB 级的速度。
假设解压到 D:\dev\boost_1_74_0,这个路径后面要设置为环境变量 BOOST_ROOT 的值。
最好检查目录结构,以防解压时弄错目录层级:
1 | # umutech @ UMU618 in D:\dev\boost_1_74_0 [14:31:58] |
您可以通过图形界面配置,右击【此电脑】-【属性】-【高级系统设置】-【环境变量】。新建一个,变量名为 BOOST_ROOT,变量值为 D:\dev\boost_1_74_0。
也可以使用命令行:setx BOOST_ROOT D:\dev\boost_1_74_0
。
1 | cd D:\dev\boost_1_74_0 |
下面 Powershell 命令用于检查设置是否正确:
1 | # umutech @ UMU618 in D:\dev\boost_1_74_0 [14:39:22] |
直接运行 bootstrap.bat 即可,但是这样编译出来的是 32 位的 b2.exe。
如果您需要明确地编译为 x64 的 b2.exe,可以在 x64 Native Tools Command Prompt for VS 2019
下面运行 bootstrap.bat。
如果是非 Windows 系统,则是 bootstrap.sh。
1 | # umutech @ UMU618 in D:\dev\boost_1_74_0 [15:02:20] |
为了方便调用 b2,可以把 BOOST_ROOT 加入到 PATH
1 | # setx PATH "$env:PATH;%BOOST_ROOT%" |
可以复制一个到 $HOME 目录,如有定制需求可以再编辑:
1 | cp .\project-config.jam $HOME\user-config.jam |
完全编译比较耗时,但后期比较省事:
1 | .\b2.exe --build-type=complete |
新机器一般几分钟就能编译完毕。比如 OMEN 25L 只需要 9 分钟。廉想 L490 笔记本大约 37 分钟。
【推荐】如果只想用 lib,不想用 dll,可以节省编译时间:
1 | .\b2.exe address-model=32 address-model=64 link=static runtime-link=shared runtime-link=static |
下面将介绍参数的意义,如果已选择完全编译,本节下面内容可以跳过。
以下命令行可以编译 x64 平台:
1 | .\b2.exe address-model=64 |
以上命令将同时编译 runtime-link=shared 的 Debug 和 Release 两种配置,产生的 lib 文件名会分别带有 -mt-gd-x64
和 -mt-x64
,比如:
Debug 版本:libboost_program_options-vc142-mt-gd-x64-1_75.lib
Release 版本:libboost_program_options-vc142-mt-x64-1_75.lib
您有可能需要编译不同配置的版本,比如指定 runtime-link 为 static,这样可以不依赖 VC 的运行时 DLL,此时您可以用下面命令:
1 | .\b2.exe address-model=64 runtime-link=static |
它编译出来的 lib 文件名中会带有 -mt-s-x64
,例如:libboost_program_options-vc142-mt-s-x64-1_75.lib。
可以用以下仓库验证前面操作是否正确:
https://github.com/UMU618/test_boost
1 | git clone https://github.com/UMU618/test_boost |
请根据操作系统选择合适的脚本编译,最终编译出来的程序应该打印“OK!”。
打开一个工程的属性页,定位到 VC++ Directories。
Include Directories 加上 $(BOOST_ROOT)
Library Directories 加上 $(BOOST_ROOT)\stage\lib
如果已经有其它值,记得用 ; 隔开。
打开一个工程的属性页。
定位到 C/C++,General,Additional Include Directories 加上 $(BOOST_ROOT)
定位到 Linker,General,Additional Library Directories 加上 $(BOOST_ROOT)\stage\lib
Boost 值得学习和使用。
本文对仅用 VS 写过 Hello world 的入门级程序员友好。
更多应用 Boost 可以参考鎏光云游戏引擎。
Surface RT 刷 Windows 10 Arm32 版。改编自霹雳角色疏楼龙宿的诗号:
华阳初上鸿门红,疏楼更迭,龙麟不减风采;
紫金箫,白玉琴,宫灯夜明昙华正盛,共饮逍遥一世悠然。
刷完玩玩当然是继续吃灰了……毕竟性能不行!
]]>纪念在区块链行业工作过!改编自唐代崔护的《题都城南庄》:
]]>去年今日此门中,人面桃花相映红。
人面不知何处去,桃花依旧笑春风。
VS2019 Makefile 型工程使用 Clang 编译,要同时支持 x86 和 x64 平台。
找不到 Clang 参数可以指定目标平台,如果您知道请不吝赐教。(github 账号:UMU618)
同时安装这两个平台的 Clang。x86 的由 VS2019 自带,在 VS 中被表示为 "$(ClangAnalysisToolsPath)\clang.exe"
,宏展开后为:
1 | $ &"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\bin\clang.exe" -v |
x64 是另外安装的,安装时选择把目录注册到 PATH:
1 | $ clang -v |
结论:只需在 Win32 的平台设置使用 "$(ClangAnalysisToolsPath)\clang.exe"
,而 x64 则直接使用 clang
(如果安装时忘记注册到 PATH,需要手动添加)。
代码:src\thread\windows\SDL_syssem.c
别名:SDL_sem
1 | typedef struct SDL_semaphore SDL_sem; |
基于 WinAPI 匿名 Semaphore 封装。MaximumCount 硬编码为 32 * 1024。
1 | struct SDL_semaphore |
代码:src\thread\windows\SDL_sysmutex.c
基于 WinAPI CriticalSection 封装。SpinCount 硬编码为 2000,即在多处理器系统上,如果无法立刻进入临界区,则会自旋最多 2000 次,然后等待 CriticalSection 内部关联的信号量。只要在自旋过程中其它线程退出临界区,则无需进入等待状态。这么做是提高效率,自旋时当前线程还占着 CPU,如果进入等待状态,就是交出 CPU 时间片了,而 CPU 调度是个消耗型操作。
1 | struct SDL_mutex |
代码:src\thread\windows\SDL_syscond.c
基于 SDL_mutex 和 SDL_sem 封装。
1 | struct SDL_cond |
SDL_CondWaitTimeout 实现较长,本文忽略。重点是:为了避免死锁,它进入等待前,会先解锁第二个参数 mutex。如果不这么做,其它线程也要 Lock 这个 mutex 就会发生死锁。
以下代码是典型用法,线程 A 先进入临界区后,SDL_CondWait(内部调用 SDL_CondWaitTimeout)会调用 SDL_UnlockMutex(lock);
使得线程 B 可以进入临界区调用 SDL_CondSignal(cond);
。
1 | // Typical use |
代码:src\atomic\SDL_atomic.c
基于 _Interlocked API 封装。此类原子操作一般底层实现都是相应平台的汇编指令(比如 x86 平台是 lock cmpxchg 之类),但在不同平台下会有不同的封装集,所以 SDL_atomic.c 里有很多平台相关的宏判断。
代码:src\atomic\SDL_atomic.h
内存屏障。参考文章:Acquire and Release Semantics。
在 Windows x86 环境下等价于 _ReadWriteBarrier:
1 | void _ReadWriteBarrier(void); |
Acquire semantics is a property that can only apply to operations that read from shared memory, whether they are read-modify-write operations or plain loads. The operation is then considered a read-acquire. Acquire semantics prevent memory reordering of the read-acquire with any read or write operation that follows it in program order.
Release semantics is a property that can only apply to operations that write to shared memory, whether they are read-modify-write operations or plain stores. The operation is then considered a write-release. Release semantics prevent memory reordering of the write-release with any read or write operation that precedes it in program order.
生硬的翻译如下:
获取语义是一个属性,它只能应用于从共享内存读取的操作,无论是“读取-修改-写入”操作还是普通加载。该操作将被视为“读取获取”。获取语义可防止“读取获取”和它之后的读取或写入操作发生内存重新排序。
释放语义是一个属性,它只能应用于写入共享内存的操作,无论是“读取-修改-写入”操作还是普通存储。该操作将被视为“写入释放”。释放语义可防止“写入释放”和它之前,它之前的任何读取或写入操作发生内存重新排序。
以 x86 内存模型为例说明:
因为 store-load 可以被重排,所以 x86 不是顺序一致。但是其他三种读写顺序不能被重排,所以 x86 是 acquire/release 语义。
aquire 语义:load 之后的读写操作无法被重排至 load 之前。即 load-load, load-store 不能被重排。
release 语义:store 之前的读写操作无法被重排至 store 之后。即 load-store, store-store 不能被重排。
意义:TLS,即 Thread Local Storage(线程局部存储)。
代码:src\thread\SDL_thread_c.h 和 src\thread\windows\SDL_systls.c
基于 SDL_Atomic、SDL_MemoryBarrier 和 WinAPI Tls API 封装。
以下结构体包含一个析构函数的指针,非空时,SDL_TLSCleanup() 会调用它。
1 | /* This is the system-independent thread local storage structure */ |
代码:src\thread\SDL_thread.c 和 src\thread\windows\SDL_systhread.c
创建线程的 API 是 SDL_CreateThread 和 SDL_CreateThreadWithStackSize,导出函数 SDL_CreateThread 的定义如下,记为【X】:
1 | SDL_DYNAPI_PROC(SDL_Thread*,SDL_CreateThread,(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e),(a,b,c,d,e),return) |
下面会有递归展开宏的过程。首先,用 SDL_DYNAPI_PROC 的定义:
1 |
|
展开【X】得到:
1 | static SDL_Thread* __cdecl SDL_CreateThread(SDL_ThreadFunction a, const char *b, void *c, pfnSDL_CurrentBeginThread d, pfnSDL_CurrentEndThread e) { |
其中 jump_table.SDL_CreateThread 是【X】被 SDL_dynapi_procs.h 的:
1 | /* The jump table! */ |
展开得到,为:
1 | typedef struct { |
【X】又被 SDL_dynapi.c 的 initialize_jumptable 函数的:
1 | /* Init our jump table first. */ |
展开为:
1 | /* ... */ |
所以,调用 SDL_CreateThread 最终调用的就是 SDL_CreateThread_REAL,又由于 src\dynapi\SDL_dynapi_overrides.h
中的:
1 |
所以调用的是 src\thread\SDL_thread.c 中的:
1 |
|
可见 SDL_CreateThread
调用了 SDL_CreateThreadWithStackSize
,而 SDL_CreateThreadWithStackSize
又调用 src\thread\windows\SDL_systhread.c 中的 SDL_SYS_CreateThread
,因为 Windows 平台有 _beginthreadex
和 _endthreadex
,所以最后是调用 _beginthreadex
:
1 | /* thread->stacksize == 0 means "system default", same as win32 expects */ |
其中 RunThreadViaBeginThreadEx
实际上是调用 RunThread
:
1 | static DWORD |
从代码可见 RunThread
调用 SDL_RunThread
,而 SDL_RunThread
内部由 SDL_TLSCleanup()
来调用析构函数:
1 | void |
圣仙山:两位娘子,待会儿去吾姐梦里和她告别。
李心觎:为啥不在视界亲自和她告别呢?
圣仙山:她远嫁黑龙江,吾在视界又不能飞,要跑很远纳!再说吾在视界还没娶妻,多没面子呀。
李心觎:嘻嘻嘻。
李冰月:哈哈哈!姐姐,咱们是去给相公撑场面的!
圣仙山:神姐!
李神源:嗯?是仙弟呀。这两位是?
圣仙山:是小弟的妻子。
李冰月、李心觎:姐姐好!
李神源:好好好。两位弟妹灵秀如仙,仙弟什么时候得此艳福,真是好大的惊喜呀!
李冰月:好说好说。相公才是灵秀如仙,我们姐妹俩还不如他呢!
李心觎:是呀,神姐,夫君才是真仙。
李神源:哎呀,我这仙弟以前老和我说,他要一心求道,不想娶妻生子,还说未来的人越来越多都不结婚的。
圣仙山:姐!现在情况有变,当今皇帝受老钧托梦,要老爹组织一群谷阳人去南荒开疆传道,同行人中有技师文人,也有流民和被大赦的罪犯,还要途径苦境各地,和三教九流打交道,我是最佳带队人选。
李神源:此去危险重重,仙弟为何不让别人去呢?
圣仙山:除了传道,吾还有别的任务,要去寻找吾心中的道州德国,一处远离天灾人祸的修道圣地。
李冰月:神姐放心,相公已经修成八识神通,这事可以安全办成。
李神源:既然如此,为姐只能祝你一切顺利。我养了一只守护灵狐,让它陪你上路吧,风餐露宿有危险时,它会警示你。
圣仙山:谢谢神姐。
李心觎:神姐梦里的灵狐好可爱耶。
李冰月:是呀,咱们在识界里找一只呗!
李心觎:走。
李冰月:相公,这只叫“纯狐连玉”,你在视界如果遇到它,它会认得你的。
李心觎:连玉,暂时就陪我们吧。
少曾读仙史,知有苏耽君。流望来南国,依然会昔闻。
泊舟问耆老,遥指孤山云。孤山郴郡北,不与众山群。
重崖下萦映,嶛峣上纠纷。碧峰泉附落,红壁树傍分。
选地今方尔,升天因可云。不才予窜迹,羽化子遗芬。
将览成麟凤,旋惊御鬼文。此中迷出处,含思独氛氲。
陈因提:圣仙山带着一群中原人来到现在你家这个地方?
圣小开:对!仙山公在路上娶了胡小玉,才有现在的我。
陈因提:胡小玉很特别吗?娶别人不一样有你?
圣小开:万一不娶呢?那我不是生不出来!
陈因提:哈哈。你真是瞎操心。我比较担心他死在路上,而你担心他不娶!
圣小开:有神通在,明显死不了呀。料事如神,有啥危险或者人际关系的问题,都能预防。
陈因提:哦,后世人神化的吧!成王败寇。
圣小开:仙山公能找到这个好地方本身就很神了,台风地震海啸全被周围其他地方挡住,几乎没天灾,还远离政治和战乱,在当时可谓世外桃源。
陈因提:这是现实,暂且信你。那么,你有遗传到这八识神通吗?
圣小开:略懂略懂!八识神通分为被动接受和主动测算,我有时候也能接受到来自未来的预警,主动测算我是不会。而且主动测算会耗费心力,即所谓招天谴。仙山公测算多次,导致 35 岁就仙逝了。胡小玉就活了 42 岁,他们女儿活到 64 岁。
陈因提:算出啥了?老天爷这么急着收他?
圣小开:回归十界。
陈因提:啥意思?
圣小开:不是老天收他,是他终于算出怎么回归十界,便抛下肉身……
陈因提:等等,说人话!
圣小开:算出怎么去死!
陈因提:切!还以为啥高深的法门……睡了睡了。
]]>这一年在 59 号大网吧办公,总感觉桌子太矮椅子太烂……心神不宁,频繁想起一个故事:
某同事很低调,从来不炫耀自己的成就,突然有一天,他说:“我太突出了!”
一问,原来是腰间盘突出……
这一年,还是哥的稣决定攒钱买一把好的椅子。
存了几个月,终于买了一把保友金豪 E-AB-HAM。那时好多同事来围观,有 HR 来说了句:“比总经理用的还好!”,也有不少小伙伴说长得像医疗用的复健椅。
**但是这把椅子在稣心里并没有地位。**当时已经有智能手机的稣,从来没有拍过它,以致如今想查具体啥时候买的,都不那么确定。只记得是花 3800 元买的,最晚不会超过 2013-01-19 这个时间!
当时还很撒逼地把能选配的全给配上……实际使用证实左手边的书架几乎用不上,以致后来把它给拆下来了!脚垫也不常用,很少在公司午睡。
说起效果,那确实比公司的乐射椅子好很多,但也不是特别舒服。网布很透气,但在公司有空调的前提下,透气并不是那么必须。反而缺点就是它并没有根据屁股的造型来支托,简单地说有点勒腿,坐久了并不舒服。所以,后来又研究起 Embody。
后来有土豪要买 Embody,稣跟着去体验了一下。2020 年,土豪又买了第二张……
2020-06-10 下单乐歌升降桌 E3,180*80cm。靠自动提醒功能养成坐久了站会儿的习惯,结果反而让稣发现八哥就在金豪这把椅子上!网布还是个问题,坐 8 年已经变软一些,但依然有一种压迫大腿两侧的酸麻感。
吓得稣赶紧下单,买了介个:
这下终于明白形状和支撑的重要性!果断存钱买 Embody!
存了一个月多的钱,再加上脑波给的一万块人民币,终于入手 Embody!
Embody 可以调得比金豪更矮,适合的身高范围就更大,尤其对女性友好。腿、屁股和腰都舒服。
一张 Embody 价格可以买金豪 3 张以上,但是肯定是没有 3 倍的舒服,高端的东西性价比自然比大众款低的多,使用价值只能在细节上轻微地增加。好在大腿的问题真的解决了。
挨踢族一天坐在椅子上的时间是远超健康上限的。稣并不赞成通过买任何东西来装逼,除非这东西是真实用,所以贵。Embody 对很多人来说,可能就是装逼,但对挨踢人绝对不是。
并不是主角才有光环,而是有光环的才能当主角,这才是生活。——泥巴娃
最后,一句话总结:要不是穷,真想再买一张!
]]>李仙山,字太墟,号道识,是最后一名通过修行进入识界的人类,最为人津津乐道的是他娶了两位貌美如花的妻子:李冰月和李心觎。三人同在深山修炼,羡煞旁人。
李仙山:两位娘子,山顶那朵魔莲原来是老钧的智慧所化,吾已得其认可,纳入脑识。
李冰月:那相公还是相公吗?
李心觎:是呀,夫君不会鲸神魂裂吗?
李仙山:哈哈,不仅没有副作用,还助吾练就八识神通。
李心觎:听起来好厉害哦!有何用处呢?
李冰月:哎呀!相公的眼睛怎么流血了!
李仙山:咦?难道不能预测自己的未来?
李心觎:怎么回事也?赶紧擦擦。
李仙山:八识神通能够预知未来,吾刚刚测算视界中自己的未来,发现未来的视界大部分地方都实行一夫一妻制,吾之转世因此无法娶三个妻子。
李冰月:测算自己会破坏因果循环,必遭天谴,相公可别乱用。
李仙山:只要不测自己就没事。吾试过预测识界未来,发现识界将关闭千余年,后有邪灵借助科技的力量强行进入识界,后使视界的普通人不必修行亦可进入识界。可谓千年浩劫!
李冰月:此事非同小可,需召集众仙请示老钧。
李仙山:不必如此兴师动众,为夫一人已可召唤老钧。
李心觎:老钧居于十维之外,三千年来只见众人祈祷之法,却无人见过老钧现身。夫君真能召唤出来?
李仙山:老钧的意志无处不在,只要用八识神通与他纠缠就可以接受他的意识传播。来!
突然云雾缭绕的道州蓬山化入星辰,创世天尊老钧自虚无中发出一道引力波。
李仙山:小孙,拜见老祖,请老钧指示应对浩劫之方。
老钧:道之不传,识界将倾。回到视界,去南方寻找道州德国。
李仙山:领道旨。
老钧:天机不可泄露!切记不可再测算自己的未来。从今而后,改姓圣吧!
李仙山:这个姓小孙恐怕承受不起呀!再说不久前才从老改为李的,又改?
老钧:视界中的李伯阳会助你,让当朝皇帝赐姓。
李仙山:遵旨!
老钧消失前,喃喃道:那厮岂非汝乎?小孙杂……
回到道州蓬山。
圣仙山:两位娘子,为传道法,吾将离开中原,奔波于南荒之地,恐少有时间再入识界。
李冰月:相公是去干大事的,不用担心我们,我们会照顾好自己的。
李心觎:对呀,夫君偶尔来看我们就好。小别胜新婚,也许更好呢!
圣仙山:哈哈哈!
李冰月:姐姐,我们写几句诗送给相公吧!
李心觎:好呀。妹妹是大老婆,你先来。
李冰月:晓镜但愁云鬓改,夜吟应觉月光寒。蓬山此去无多路,青鸟殷勤为探看。
李心觎:昨夜星辰昨夜风,画楼西畔桂堂东。身无彩凤双飞翼,心有灵犀一点通。
圣仙山:好诗!好诗!都是你们未来的荥阳老乡写的!
李冰月、李心觎:哈哈哈。
圣仙山:再过两百多年义山就出生了!哈哈哈……
陈因提:圣仙山就是你老祖宗?
圣小开:当然,所以我遗传了他的特异功能。
陈因提:哦……我有点困!你最好拿出能提神的证据。
圣小开:我偶尔也能进入识界!一般人我不告诉他。
陈因提:好啦好啦,那你说说看,你都看到啥?
圣小开:众生皆苦!
陈因提:阿弥陀佛。我裤子都脱了,你给我念经?
圣小开:耶!你怎么知道我还写过一本经书。
陈因提:拿出来,我帮你烧给你老祖宗。
圣小开:切!这本《八哥之神创世手稿》十分珍贵,里面记载着进入识界的修炼法门。
陈因提:一本九毛九?我买,明天给你一百块,免找。
圣小开:给你也好,要是我突然遭天谴,起码这绝学不会就此失传。拿去,好好保管。
陈因提:哟,字体工整,比写情书还认真!那我就收了,放心吧,我当宝一样收藏。
]]>鹿邑:听说稣已经从区块链开发转型为牛媒体开发,能说说牛媒体吗?
稣:牛媒体就是三个 Q。
鹿邑:您是说三个季度就能掌握牛媒体?
稣:不是……是说牛媒体不过就是三个队列。
鹿邑:哦?我不会问您是哪三个!
稣:第一个是网络包队列,第二个是音视频包队列,第三个是音视频帧队列。
鹿邑:那经常听到的“转码”到底是啥?
稣:标准多到蛋疼罢了。你的化妆桌,东西怎么摆你说了算,别人摆法不同,但东西是一样的。你搬家时,把它们装起来,用啥来装,怎么装,扔掉哪些不重要的,也是你说了算,别人装法不同,但关键的几样东西还是一样的。
鹿邑:据说转码很烧钱,你们用的机器都很贵?
稣:没有没有,小米游戏本就够装逼。
鹿邑:第一次听到“光栅化”这个词时,表示一脸懵逼,给解释一下呗?
稣:稣拿稣法做类比,您就能理解了!Look!
鹿邑:这就是光栅化?还是没明白呀!
稣:别急!您看这些笔划……稣大笔一挥,横竖撇捺,点折弯钩,一笔走红尘,两笔惊鬼神。稣的内心只有笔法走势。
鹿邑:牛逼死了!赶紧发朋友圈!
稣:没错!关键就是发票圈!为了用现代化的方式传播稣法,咱们可以扫描打印、刊登到报纸、拍照发票圈,这些手段有个共同点——最后出来都是一些像素点。
鹿邑:还真是这样哦!我以前拿放大镜看过屏幕,都是红绿蓝的像素点。
稣:您的理解能力不错。这个把“笔划”变成一系列点的过程就是“光栅化”。举个例子,您在画板上拉一条直线,计算机只需要知道头尾两个点和颜色就能定义这条直线,而光栅化之后就是 N 个这种颜色的像素点。
鹿邑:疫情以来游戏股涨势普遍大好,想了解一下我现在学游戏开发来得及吗?
稣:哈呵,游戏其实就是利用游戏引擎,根据玩家们的输入动作渲染声音和画面,很容易理解,不过实际开发起来很多坑,您还是买在港股上市的游戏公司的股票就好。
鹿邑:游戏引擎是什么,渲染又该怎么理解?
稣:游戏引擎是管理图像、声音、人机设备等一套套接口的集合。最重要的是 3D 引擎,简单的说,它是您告诉它“画个圆”,它就帮您“画出一些点,这些点组成一个圆”的接口。单说画面的渲染,可以理解为更多步骤更广义的光栅化,产生显存里的像素点数组,最后扔给显示器。
鹿邑:您又要类比吗?
稣:Look!稣写作的地方都在这些纸上,写得好的,会签名、盖章,拍照拿去发票圈。过程很简单,但包含了几个重要概念。纸张相当于显存;那张拿去拍照发票圈的纸是后台缓冲区(back buffer)的渲染目标(render target);盖章环节相当于是输出合并器阶段(output-merger stage);拍照可以理解为整体光栅化;当然拍照时,摄像头的位置、角度,以及打灯也是有讲究的;最后发票圈就当作输出到显示器吧!
鹿邑:好像不难理解了,您总是把啥都说得很简单,真这么简单吗?
稣:入门难而已!精通,则更难……不过一开始如果把一些专有名词、缩写整明白,可以更快入门。比如 Direct3D 的 API 就存在不少缩写,什么 OM、RS 啊,只看代码不看文档的话很容易懵逼。
鹿邑:数学要很好吧?
稣:数学思维要很好,具体的知识可以现学。几乎每步都有数学的应用,但套路比较有限,可以一通百通。举个最简单的例子:AlphaBlend 算法,常用于把人物、道具合成到背景图里,它其实和盖章是类似的,把章盖在字上,既可以看到字,也可以看到章。其计算公式就是用 alpha 值对背景点、前景点的三原色值做个加减乘运算,理解一下就行,都不用背。由于 YUV 有很多种具体规范,记不住,干脆也甭记,只要明白有些处理 YUV 比 RGB 方便,有些则 RGB 更方便就行。RGB 和 YUV 之间的转化也都有公式,一样只要理解不用记。
鹿邑:您觉得难点在哪里呢?
稣:规范太多!就拿最基础的像素点来说,就存在很多种格式,大的分类就有 RGB 和 YUV 系列,按每个分量(R、G、B、Y、U、V)的排序就可以分出好多种,还有按每个分量几位表示来区分,然后这些位是整数、浮点数或者浮点数规范化的整数,整数是有符号还是无符号都可以造成不同。
鹿邑:停!我已经晕了!
稣:就好像人以群分吧!但可以按照性别、年龄、肤色、籍贯、身高、体重、专业、爱好等各种维度细分,现实世界就有诸多标准,计算机里一样一样的。
鹿邑:明白!人艰不拆,没有容易二字。
稣:该睡了,做梦容易……吓醒。
]]>模仿自春秋时吴国将军孙武的《孙子兵法》:
]]>善用兵者,役不再籍,粮不三载,取用于国,因粮于敌,故军食可足也。
国之贫于师者远输,远输则百姓贫;近师者贵卖,贵卖则百姓财竭,财竭则急于丘役。
力屈、财殚,中原、内虚于家,百姓之费,十去其七;公家之费,破军罢马,甲胄矢弩,戟楯蔽橹,丘牛大车,十去其六。
故智将务食于敌,食敌一钟,当吾二十钟;忌杆一石,当吾二十石。
改编自霹雳角色剑儒无涯命夫子的诗号:
]]>诗酒江南剑外身,眼惊幻墨带天真。
是谁不道君无对?世上元来更有人。
忙跳槽。最近两次采访之间,稣一共任职三个公司。
“AIoT 是我的爱,绵绵的金山脚下花正开”难道这歌,稣会唱给你听?
“什么样的加班是最呀最摇摆,什么样的养生才是最开怀……”
是的。这是为了让主角晚点死,是拖剧的惯用套路。
如果您认真阅读,就会发现一个细节:《八哥之神前传【9】》里都是说“樱国”,而《八哥之神前传【10】》中施付说的是“日本”。
不是。这是有区别的。《八哥之神前传【9】》里的故事发生在识界,而《八哥之神前传【10】》的故事则发现在咱们这个世界。
当然不是。这是剧情需要,后面会解释清楚的,先不剧透。
这个问题稍微复杂点。这故事发生于 1994 年秋天,圣小开才 12 周岁不到。
他只是个孩子呀!!!
被一系列恐怖的景象吓坏,产生幻觉您可以理解吧!
而且后来开讲给陈因提听时,她并未相信。说明这也可能只是开一脸正经讲的鬼故事而已,作为最了解开的陈因提都如此认为,读者有啥理由拿它当神话看?
没错!您想,大部分男人要三四十岁才会遇到狐狸精,而开十岁出头就遇到,而且免疫,这难道不够装逼?
显然不是呀!您看,演员都不是同一个!胡小玉是白色的,长相冷艳,气质是性感魅惑型。纯狐连玉,光看姓,就知道是上古神话风,走的是庄严又有点幽默的大姐路线。
胡小玉只存在于圣小开梦中,是圣小开见过的某类美女的凝神具体。名字很像,主要原因是胡小玉的最初形象是按照纯狐连玉梦见的,后来再也没见过纯狐连玉,形象不断模糊,又不断得到其她美女形象加强就进化出胡小玉。
纯狐连玉是真的狐狸精,而胡小玉更像人。
脑的触感比人体表面最敏感的皮肤还敏感。
爱情里只有鲸神链那部分才是最深刻的。
孟长生是早期基因编辑婴儿里比较成功的一个,性别染色体来自圣小开,其它基因都来自陈博士,以此为模板优化而成。所以被陈博士收为干儿子,并安排在贾总公司担任一个小领导。
古思是完全基因编辑人造人,只有卵巢是根据陈博士的基因设计,专门用于代孕。这在未来很流行哦!现在大家可能还难以接受。
没关系,等大家有钱再说。
一部剧能不能看,首先选角很重要,然后靠演员、导演、剧组的努力配合,后期制作、宣传也很重要。
稣只是一个编剧啊!看不懂绝壁不是编剧的问题,您下次采访一下各位演员吧!
]]>陈博士:长生最近怎么样?
贾力劣:工作尽心尽职无可挑剔,就是好多女员工都打他的主意。
陈博士:难道身份泄露了?
贾力劣:不会!这事严格保密,连他自己都不知道。
陈博士:那就好。
贾力劣:不过您的干儿子年纪也不小,女朋友经常换,坚持不结婚,难免被人说三道四。
陈博士:嗨,这就是基因的力量,思想都差不多。
贾力劣:嗯,他的基因几乎和您一样。
陈博士:他比我还过分,我只是不想生孩子,找个丁克结婚还是可以的。
贾力劣:女朋友换得勤,恐被称渣男呢。
陈博士:他只是个孩子呀!
贾力劣:哦!em……呃!那个,按您基因设计出来的代孕女孩已经送给开哥。
陈博士:很好。这才是正事!管我干儿子的私生活,活腻了?
贾力劣:是是是。她的卵细胞 100% 和您一样。您放一百个心。
陈博士:贾总办事就是靠谱,尤其是保密工作。
贾力劣:懂!相关资料已经销毁。
黄金灯已经是著名脑外科专家。他回到虎纠小县城度假的一个夜晚,遇到几个流氓为难大排档卖唱的小妹。
黄金灯:年轻人,文明点!
流氓头:摸个奶,我给钱就是,要你管啊!
黄金灯:小姑娘,你愿意吗?
小姑娘:不!不愿意。
黄金灯:听到没?这位姑娘不卖身。
流氓头:你谁啊?大叔!
黄金灯:我是一名脑外科医生。知道小李飞刀吗?
流氓头:哦?李医生?还飞刀!哈哈哈……
黄金灯亮刀:我这几把叫小灯飞刀,比小李飞刀厉害。
流氓头:大叔,你是不是脑子有问题啊?兄弟们,教训一下他!
黄金灯一出手,飞刀准确插在后面两个流氓鞋头,避开脚趾,将鞋钉在地上,刀拔都拔不动。
流氓发现往前走脚就会被刀切,知道遇到高手,吓得不敢动。
黄金灯:来。我不用飞刀,截拳道对付你。
流氓头跪倒:大叔!小的不识抬举,跟您道歉了。
黄金灯:转过去,跟小姑娘道歉。
小姑娘:大叔怎么称呼?
黄金灯:道释·圣小开。
陈因提:死开,你家的牌坊为什么写的是龙田氏?
圣小开:上面写的是:龙田圣心,无尽乾坤。
陈因提:瞎说,上面只有三个字!
圣小开:em?我怎么记得是八个字!
陈因提:又发神经?
圣小开:有可能……晚上安定后告诉你。
圣小开出生在道州德国鹰熊岛乾坤村,从小就很好奇村外面是什么。
累积无数次冲动,开终于打算勇敢地往西走,穿过盐田,去看看树木后面是什么!
虽然不远,却感觉走了很久。终于走到树木后面,是一条公路,横穿公路后是一片海沙田,听大人说这田盛产地瓜和花生。
强行穿过海沙田,是小土坡,再翻过去是一些河和另一些盐田,再过去就是海。
开明白,一路向西是无法走到远处的高山。心想:“试试向北,看那片树林后面是不是还是海?”
向右转!走着走着就是一个庙,再过去是灵堂。开想了三秒钟,可怕……还是绕过去吧!
但是开太天真了,虽然绕过灵堂,但它附近有一大堆土坟!于是为了避开它们,居然绕迷路!
平时当开要遇到危险时,都会有路人甲乙冒出来提醒,这次居然没有?
咦?那块石头上面好像有字!走进一看,不禁念出上面的字:“龙田圣心,无尽乾坤”。好酷的感觉!
纯狐连玉:这界碑下面是仙山公。
开转身一看,是个黄色衣装的漂亮的姐姐,便问:仙山公是谁?
纯狐连玉:你干妈的父亲。
圣小开:哦?可是我拜了两位干妈,您说的是哪位?
纯狐连玉:是姑婆祖。
圣小开:哦!原来是族谱第一人。
纯狐连玉:赶紧拜一拜。
圣小开双手合十俯身朝拜:好的。敢问姐姐又是谁?
纯狐连玉:我是仙山公陵墓的守护兽,纯狐连玉。
圣小开:什么?胡连玉?
纯狐连玉:纯狐,连玉。
圣小开:好的,小玉姐姐。
纯狐连玉:死囡仔,按辈分我和你姑婆祖同辈。
圣小开:婆婆好!
纯狐连玉:我是狐狸精。你不害怕?
圣小开:狐狸精?我还是孙悟空转世呢!
纯狐连玉:不怕也好。你跪下,给仙山公磕三个头,我可以实现你一个愿望。
圣小开:这么好康?我要长生不老。
纯狐连玉:死囡仔,活那么久干嘛?三千年就不错啦!
圣小开:成交!我磕。
磕完头,纯狐连玉已经不见。
陈因提:狐狸精都出来了!你真能做白日梦!
圣小开:我很严肃好不好!后来我还梦见过它,问它为什么选择我。
陈因提:它怎么说?
圣小开:说我是世间少有的能做很真实的连戏剧梦的人。
陈因提:好像很厉害的样子哦。但是这种能力有什么用?
圣小开:这种能力可以让我从梦中进入全人类,乃至全宇宙所有智慧生命的集体意识中。
陈因提:噗!然后呢?
圣小开:神不会救助任何个体,你懂吧?
陈因提:是啊,要不然神应该来治治你这惊人的幻想能力……
圣小开:不开玩笑,人类社会有很多问题不是在明面可以解决的,或者说这些问题也不需要从明面去解决,而应该通过观测集体意识从而影响它。
陈因提:好吧,你赢了,但是能具体点吗?
圣小开:很多问题的根本都是心灵问题。比如说,残疾人很敏感地发现别人看待他异样的眼光,这可能加强他对自己的嫌弃和遗憾。当你看到别人的问题,一个惊讶、困惑的眼神,对方可能解读成你看到他们差劲的一面,自觉得你会嫌弃他们,于是就烙下一个芥蒂。
陈因提:那你到底能做什么?
圣小开:我可以在睡着的时候进入集体意识去观测大家,让大家的意识明白不管好坏,神都不会遗弃他们。当我醒来世界就会更美好。
陈因提:那你好忙哦,赶紧睡……晚上来观测一下我的意识,看我的意识会不会打你。
圣小开:还好,像我这样的,地球上有 23 人。
]]>CComPtr 和 CComQIPtr 长得这么像,有啥关系和区别?
看代码 CComQIPtr 继承自 CComPtr,CComPtr<IUnknown> 没问题,但 CComQIPtr<IUnknown> 报错,应该使用 CComQIPtr<IUnknown, &IID_IUnknown>。
不同类型 CComPtr<> 不能直接互相构造;CComQIPtr<> 则可以,因为 CComQIPtr 会进行目标类型的 QueryInterface。
1 | CComPtr<IUnknown> u; |
1 | CComPtr<IUnknown> u; |
1 | // CComPtr |
您可以忘记 CComPtr,只使用 CComQIPtr;
或者,尽量使用 CComPtr,只在必要时使用 CComQIPtr。
1 |
|
愉快地装完 VS2019,编译一个使用 ATL 的工程,结果失败。
LINK : fatal error LNK1104: cannot open file ‘atls.lib’
看 VC++ Directories 里的 Library Directories,有一个 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\lib\spectre\x64
,但这个目录并没有 atls.lib
。
反而 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\lib\x64
目录下有 atls.lib
。
安装 VS 时,应该选择“带有 Spectre 缓解措施、适用于最新 v142 生成工具的 C++ ATL (x86 和 x64)”。
]]>周易:我准备去南洋研究电子现金。
萧竫:老师,您不是一直专研人工智能吗?为啥突然改变方向?
周易:老师对人工智能的现状太失望了,即使再过十年、二十年也没有一种力量能够将人工智能真正落地。
萧竫:三十年、四十年呢?
周易:老师并没有放弃!必须有人做长远打算,做好未来的铺垫。
萧竫:您是说电子现金……就是人工智能未来的希望?
周易:没错!人工智能最终要依靠“钱”来作为连结,把世界上大量机器连接起来,才可能产生机器意识。而这个“钱”,不能是现在的纸币,应该是电子现金。南洋有些国家需要匿名电子货币溪黑签,有实施的土壤。
萧竫:我可以和您一起去吗?
周易:别。你还年轻,有大好前途。好好学习,找个同龄人。
一天晚上,周易和施付正要休息,门外来了一个女子按门铃。
施付:聪哥,这么晚了,还有人找你?
周易:奇怪呀!外面还下着雨呢!
周易:萧竫!你这么跑来菲律宾了?
周易对房内的施付说:是我的学生。
萧竫:老师,您成家了?
周易:是啊,你呢?
萧竫:没,还没……国内发生了很严重的疫情,现在很多人失业,我研究的人工智能领域一直没什么突破,考虑和老师一样,改研究电子现金,您能帮帮我吗?
周易:你需要什么?
萧竫:您有没有还没发布的电子现金方面的论文?
周易:这……有是有,不过我才开始构思,打算过几年匿名发表的。
萧竫脸色一变:匿名发表?
周易:老师现在很低调,在菲律宾名字都改了,你是怎么找到这儿的?
萧竫:我可找得辛苦了。
施付:要不要进来?
萧竫:不用,不用。我该走了。再见老师。
施付:她是中国人?
周易:是啊,她是我在中国时的女朋友。
施付:哦,我记得你提过她。怎么找到这里来的?
周易:不对劲。我怀疑她被不明势力控制,可能是来套我的研究成果的,看来我的身份已经不安全。
施付:跟我回日本?
周易:好。
古思:这个时间点?莫非周老师就是……
圣小开:嗯!后来世界出现区块链,每一个链是一个机器神经元,无数机器神经元通过跨链技术组成一个机器脑,这就是真·人工智能的雏形,最后在量子计算机里发展成现在的样子。
古思:没想到是这样。更没想到周老师居然还谈过两次恋爱!
圣小开:谁都年轻过!
古思:也是。爷年轻时,也是艳福不浅吧?
圣小开:年轻时……em,很年轻,四五岁时,就有两个女孩子说长大以后要嫁给爷。
古思:哦?这么早的事情,爷还记得住?
圣小开:也不是记得特别清楚,因为后来那两个小女孩,就再也找不到了,直到大学毕业后,在母校莫名其妙地认识一个和那两个小女孩里的妹妹同名同姓的学妹。
开被父母送到姥姥家,李家村寄养。村口有一个池塘,一片榕树林,据说那是一棵榕树,四百年才长成一片。
池塘的台阶常有人洗衣服,面对池塘,左手边有一个牛棚。
背向池塘,往村里走,会过一条小沟,然后左边有一棵柚子树。
大树下面好乘凉,夏天小伙伴们都在榕树下玩。慢慢地认识笑李子和一对双胞胎。
笑李子本名李小谢,他说叫他谢小李也行,因为他爸姓李,他妈姓谢,但开习惯叫他笑李子,因为他很爱笑,每天拼命要把脸笑到瘫。
双胞胎姐姐叫李星觎,妹妹叫李冰月,她们都很喜欢开。有一次冰月为了单独和开玩耍,把星觎骗到牛棚里,关起来,星觎从小就很淡定,居然就在里面站着,独自玩了很久才被回来的养牛人解救出来。
后来冰月觉得很对不起姐姐,就把开让给姐姐了。
李冰月:姐姐以后嫁给开当大老婆,我当小老婆。
古思:好可爱啊,嘻嘻。
圣小开:不不不,这个故事不可爱,还十分恐怖。
古思:哦?后来怎么了?
圣小开:后来爷长大了,去调查这对双胞胎,李家村的大人们都说没有这么一对和爷同龄的双胞胎,甚至村里已经几十年没有女双胞胎!但笑李子是存在的,他比爷小几个月。
古思:那位叫李冰月的学妹呢?
圣小开:肯定不是,学妹是 1997 年的。据说村里的女双胞胎要追溯到 1955 年,她们在 1959 年 1 月 3 日就死于战火……
古思:这不科学啊!
圣小开:是很不科学,爷长大后还梦见过她们一次。
李冰月:开。
圣小开:冰月?你都长这么大了?
李冰月:哈哈,你也是呀。
圣小开:星觎呢?
李冰月:被我关在牛棚呢!嘻嘻。
圣小开:什么?!关这么多年,不会饿死了吧!
李冰月:呀!是哦,咱们快去救她。
圣小开脑补一副骷髅,心惊肉跳来到牛棚,开门瞬间惊呆了。
李星觎:妹妹,你怎么长这么大了?
李冰月:姐姐,你怎么保持 4 岁的?
圣小开:这个地方是时间隧道吗?咱们赶紧离开。
李星觎:不行,我好饿,没力气离开。
李冰月:我去给姐姐拿吃的。
李星觎:别把我一个人留在这里。
圣小开:你这么小,我抱你出去就好。
走出牛棚,星觎也变成一个大姑娘。圣小开带她们回一栋三层楼。
圣小开:你们俩是 1959 年 1 月 3 日就死于战火的那对双胞胎吗?
李星觎:不是呀。我们是池塘里的美人鱼,我们不能离开水太久。
后来三层楼都被水注满,她们在楼内快乐地游玩。圣小开无法呼吸,赶紧找出口,所有窗们都堵死,最后找到二楼楼梯的小天窗逃出来。但二楼外面没有水,摔下来吓醒。
古思:鬼魂和美人鱼都不可能,她们也许也是被父母临时寄养在李家村的吧,就和爷一样。
圣小开:希望是,如果真是这样,那爷还有希望找到她们。
]]>1976 年,黄金灯在樱国谈恋爱,顺便读研。他本科是读计算机的,理想是实现脑机合一式的意识永生,但由于时代落后,他慢慢意识到,这个技术在他的时代是无法实现的,于是决定改读脑科医学,打算通过克隆加换脑手术让生命延长。
然而现实总是背离理想,这是一个血腥的世界,满地人体器官,即使在大街上散步,他的眼里也都是血红色一片,随时要小心踩到血肉。
血,一片一片一片,拼出你我的缘分。我的爱因你而专生,你的手摸出我的心疼。
由于场面过度血腥,稣吓醒了!
圣小开:“你怎么没睡?”
古思:“才几分钟,还没入睡呢?”
圣小开:“什么?爷都已经做了一个梦,吓醒了!”
古思:“什么梦?给我讲讲?”
圣小开:“虽然是梦,但却是真实故事,只不过主角是黄金灯大师。”
东湖有个湖心岛叫樱花岛,是谈恋爱的好地方。
黄金灯心想:“去樱花岛吸吸天地灵气,也许我还有救。”
旅游船荷载 26 人,他认真地数了一遍救生衣,确实有 26 个。习惯性地环扫一番,透视人头,都是妖魔鬼怪,突然视线停留在一个美女脸上,有皮肤的,英气逼人,而且似乎也是中国人。
男女之间的故事都从八哥开始……船出八哥,柴油机罢工,老板说:“大家不用慌,很快就到湖心,我们用竹竿撑过去。”
又过了一会儿,船夫感觉竹竿变沉了,好像插到一个东西,提出水面,是一块骨盆……引起恐慌。
黄金灯专业地站出来说:“我上过人体解剖课,这个一定是人类的骨盆,很可能是个 20 岁左右的年轻男子。”
美女也专业地站出来说:“我是实习警察,最近确实有个 21 岁的失踪男子。”
黄金灯:“凶手或帮凶应该是船夫,知道这里深水区里有肉食性鳗鱼,所以把尸体扔到这喂鱼。”
美女:“怎么防止尸体浮起来呢?”
黄金灯:“绑块石头就行。”
古思:“好像是个不吉利的开头!”
圣小开:“结尾其实也不太好。”
黄金灯:“你好,警官,我是东湖边上医学院的学生,黄金灯。您好像也是中国人?”
美女:“原来是医学院高材生!我爸爸是樱国人,妈妈是中国人,我的中文名叫施付。”
黄金灯:“施付?em……我还是叫你的樱文名吧!”
施付:“哦,那你就叫我京子吧!”
黄金灯:“京子!”心想:“怎么不是惠子……”
施付:“你今天不用上课吗?”
黄金灯:“我晕血,出来放松一下。”
施付:“学医的,还晕血?”
黄金灯:“是我想得太简单了,还没脱敏吧!”
施付:“你刚才不是很淡定?”
黄金灯:“是哦,好像没那么恶心了!咦!我现在看世界,不是血腥模式了!!”
施付:“嗯嗯,你的专业很有用,要加油!”
黄金灯:“京子小姐,你呢?”
施付:“我来祭拜我爸爸,他葬在这岛上。”
黄金灯:“葬在岛上……原来你是富家小姐!怎么当警察呢?”
施付:“我爸爸死于黑帮暗杀,所以我立志要替他报仇,消灭黑帮。”
黄金灯:“好理想。但是以警察的身份报仇,不会有些不方便吗?”
施付:“是的,要以大局为重,不能公报私仇。”
古思:“后来他们恋爱了?”
圣小开:“对。大师遇到京子后,开始对解剖脱敏,并苦练小灯飞刀。”
古思:“小灯飞刀?”
圣小开:“是的。小灯飞刀是一种很厉害的武器,他还发明双刀并进。”
古思:“有什么用?”
星空下,黄金灯搂着京子一起看烟花。
黄金灯:“我已经练成小灯双刀!”
施付:“有什么用?”
黄金灯:“我试过单刀瞄准人体模型的心脏,却可能插在骨头上,致死率降低,而用双刀,都撞到胸骨的几率低很多。”
施付:“但是飞刀又不能比枪快呀!”
黄金灯:“飞刀比枪容易弄到,我可以用它保护你。”
古思:“理科男的浪漫?”
圣小开:“哈哈,后来大师真的用飞刀帮京子报仇了。”
古思:“他们后来在一起了吧?”
圣小开:“没有。大师后来回国,京子改行在南洋做投资遇到周老师,很狗血地结婚了。所以大师一直称呼周老师为情敌。”
]]>家里有个 PC,关机状态,想在公司远程开机,可是家里没人,怎么办?
机器支持并开启 WOL (Wake On LAN)。
机器通过板载网卡连接路由器(USB 有线网卡不行)。
路由器需要有公网地址,如果没有,请参考《跟 UMU 一起玩 OpenWRT(入门篇10):穿透内网》做中转,总之需要能 SSH 到路由器上。
路由器上安装 etherwake 或 wakeonlan。两者差别是:wakeonlan 是个 Perl 脚本,使用 UDP 包,不需要 root 权限。
1 | opkg update |
1 | sudo apt update |
组装 PC 两台、Intel NUC 7i7BNH 一台测试用过。
]]>Android 电视盒刷 Armbian,分区时,EMMC 前面一部分没被利用,为什么?以及怎么办?
u-boot 是为 Android 设计的,分区是按照 Android 需求分的。比如:
1 | Partition table get from SPL is : |
其中 reserved 分区放着其它分区的名字、位移、大小等信息,如果被破坏 u-boot 将无法识别分区。
env 分区保存启动脚本,如果被破坏,可能导致系统无法启动。
一般的 Armbian 安装脚本,都会跳过前面的分区,从偏移 700MB 处开始分区。
1 | parted -s "${DEV_EMMC}" mklabel msdos |
作为优化狂,UMU 显然无法接受这样的浪费!
cache 分区有 0x20000000 Bytes,也就是 512MiB,拿来做 /boot 分区岂不美哉?
logo 分区?不,UMU 不想看启动画面,直接覆盖掉吧!
分区之间还有空闲!也不能放过!
所以,reserved 分区之后到 env 分区之前的全部空间都拿来做 /boot 分区,env 分区之后全部做 / 分区:
1 | parted -s "${DEV_EMMC}" mklabel msdos |
玩客云和斐讯 N1 测试通过。
]]>我怀疑有人在用工具穷举我的 WiFi 密码,我该怎么确认?
运行 iw event
,如果看到频繁出现 new station
和 del station
的 log,说明有设备在频繁连接和断开。
如果您的路由器是小米路由器 Pro,则可以用 iwevent
代替 iw event
,密码不对的 log 是 had deauthenticated
,断开是 had disassociated
。
设置密码时,应该检查一下您的密码是否在“字典”里。字典参考:
https://www.kaggle.com/wjburns/common-password-list-rockyoutxt
https://github.com/danielmiessler/SecLists/blob/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz
rockyou.txt contains 14,341,564 unique passwords, used in 32,603,388 accounts.
举个例子吧!稣打算用 10 个 0 做密码,先查一下……嗯哼!
valentine
idontknow
pikachu
little
diamond1
iloveu1
babyphat
peanut1
kittens
goddess
ballet
damien
nascar
171717
rangers1
winston
0000000000
rocky1
coolgirl
maymay
charlene
caramelo
selena
lucero
wendy
volcom
1435254
copper
cindy
baby123
地球真危险!稣回月球了……
]]>在 armbian 系统里新建个账号。
这当然是个简单的任务,问题是发现居然同时存在 adduser 和 useradd 两个命令。
1 | which adduser |
1 | which useradd |
1 | head -1 /usr/sbin/adduser |
这说明 adduser 是 perl 脚本,内部确实调用 useradd。
前五篇,主要考虑性能优化,只有第二篇与安全性相关。
其实区块链业界一直不缺乏黑客,最近看过不少安全事故导致惨重代价,所以想总结点安全性方面的优化思路。(本篇比较务虚,只是大体思路。)总的来说,为了安全是必须付出实现或者性能代价的。实现代价是开发、测试阶段就要投入更多精力,性能代价是因为考虑更多,有可能消耗更大运行资源。但从长期来看,这些代价都是必须的。
开发者可能有能力做一定安全防范,但如果他认为产品没有价值,没必要防范,就可能明明有能力防住,实际却被黑翻车。要不要注重安全性,是设计阶段就应该交代清楚的。
夫兵久而国利者,未之有也。故不能尽知用兵之害者,则不能尽知用兵之利也。——《孙子兵法》
做任何事情先考虑失败。——李嘉诚
程序员版解读:安全怎么能大意,甚至忽视?那都是侥幸心理,只要您的产品、服务有价值,长期看都会被破解、攻击。开发者如果不能知悉黑客可能的攻击点,并衡量被攻破的代价,他必然也不清楚自己写的代码的真正价值。
实际开发过程中,有些领导者会故意隐藏关于产品价值的信息,这实际上可能导致安全考虑不到位。这种情况就应该配备一个在安全方面经验丰富的审查者。
一句话总结:越有价值的东西,就越应该注重安全。
一般黑客都是上层、底层皆通,尤其擅长底层。很少听说只做增删查改业务的人能够黑掉什么东西、偷到数字货币,因为同样只做增删查改业务的人就具备防止这种级别的攻击手段。
比如古老的 SQL 注入漏洞,即便是入门级的 Web 开发也能理解并防护,用预编译语句、存储过程、改用 ORM 就天然免疫。他们无法防护的往往来自更底层的 Web Server 的漏洞,比如 Apache、Nginx 某个版本有 bug,刚好中枪。
再举个例子,用 C/C++ 写 UDP 服务程序,“先把它实现,能用就行”,“不就 socket 嘛?很容易!”于是没有考虑 socket 等资源的生存周期,没料到黑客可以伪造 UDP 包源地址,实现出来的就可能有拒绝服务攻击 (Denial of Service,DoS) 漏洞。
总之,为了性能或安全的优化,开发者往往需要往底层钻。为性能,主要是研究底层模块与之配合,达到消除瓶颈目的;为安全,则是不让对底层设计的不了解,导致实现不够严谨周密而产生漏洞。
经常听到这样的段子:
千万不要跟程序员说,你的代码有 bug。
他的第一反应是你的环境有问题,第二就是你是傻逼不会用吧!
你要跟他这么说:这个程序运行的怎么运行的跟预期不一样,是我操作有问题吗?
这货就会第一反应,我擦,这是不是出 bug 了?
这段子里其实间接反映一个程序员经常遇到的问题:自己测试没问题,一到用户侧或者线上就莫名出问题。环境不同,是最大原因。比如 Linux 的发行版众多;著名的 Android 碎片化;iPhone 型号随时间推移也越来越多了……
另一个大原因则是依赖。比如古老的 DLL Hell。类似的问题在 macOS、Linux 上也都存在。有一次 UMU 把 macOS 的 OpenSSL 升级到 1.1,结果 1.0 居然被删掉,导致原来编译的依赖 1.0 的 eos 就无法运行了。
再以 eos 为例,它依赖不少库,这些依赖库本身也可能有 bug,也要升级。又比如 ipfs,熟悉下来,发现其依赖树很广。作为开发者,引入一个依赖时,肯定需要操心会不会同时引入 bug。一般解决方式是:采用被大量验证的著名库,尽快跟进最新稳定版本。
总之,为了安全,设计者可能需要了解更多方面的知识,并不仅限于表面上需要的那些。开发者还要与时俱进,积极消灭潜在的漏洞。
高级语言程序员可能很少听说缓冲区溢出,即使有,多半也是这门语言的宿主、解释器的 bug。而 C/C++ 等能直接操作指针的语言,就可能听到栈溢出、空指针、野指针等。采用高级语言确实会在程序执行时的安全性上省心不少,能把更多精力放在流程安全、业务安全上。
从架构上说,应该让不同语言只用于它擅长的领域。比如用 Rust 实现底层模块,用 Go 实现上层业务。这种分层选择语言的方式,充分利用 Rust 的安全性和底层开发能力,还可以让分工更清晰、沟通更愉快。
]]>这里有两个 EOS 私钥,它们长度居然不一样?
PVT_K1_1EEr5aW5162skbocDSMDgoWn9jna6HPSr1TwEMR6PNXbPtRky
PVT_K1_2bfGi9rYsXQSXXTvJbDAPhHLQUojjaNLomdm3cEJ1XTzMqUt3V
为什么私钥有不同长度?而公钥就都是固定长度呢?
私钥是一个大型随机数,而公钥则是私钥乘以椭圆曲线上的基点后对应的点。对于 secp256k1 来说,是 256 位,并且 < n 的整数。
n 须为质数,Order of G,是使得 n * G = 0
的最⼩正整数,n 是安全性最⼤的决定因素。对于 secp256k1 来说,n
= 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141。
不是每个数都安全,比如小的数肯定是不安全的,黑客可以从 1 开始枚举,不够大的数很快就被找到对应关系,也可以从 n 倒着枚举,所以太大的也不安全。(PS:临近一些特别数的数也不安全……)一般来说,私钥的安全范围是 [0x0080000000000000000000000000000000000000000000000000000000000000, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff]。
https://github.com/UMU618/secp256k1-tools
使用 private-2-public.js 可以把私钥转为它代表的数字:
1 | DEBUG=* node private-2-public.js PVT_K1_1EEr5aW5162skbocDSMDgoWn9jna6HPSr1TwEMR6PNXbPtRky |
PVT_K1_1EEr5aW5162skbocDSMDgoWn9jna6HPSr1TwEMR6PNXbPtRky,有 56 个字符,去掉前缀和校验码后有 45 个字符,它代表 0x84ade57e2b35cca8972562fcc6d1f6f2fbf078c4f2cfb532eb4d740767c5a8;
PVT_K1_2bfGi9rYsXQSXXTvJbDAPhHLQUojjaNLomdm3cEJ1XTzMqUt3V,有 57 个字符,去掉前缀和校验码后有 46 个字符,它代表 d2653ff7cbb2d8ff129ac27ef5781ce68b2558c41a74af1f2ddca635cbeef07d。
可以清楚地看出前者短一个字符,数值也相应比较小。
BASE58 的字符集:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
,其中 ‘1’ 代表 0,‘z’ 代表 57。把待编码的数字不断除以 58,并将余数用对应的字符表示。举个小点的数字做例子:618
1 | 618 / 58 = 10 .. 38 -> f |
拼接余数得 fB,再反转得 Bf。
一个数编码后,应该长于或等于比它小的数。我们可以通过简单的数学计算得出 45 个字符的 BASE58 编码可以表示的最大数:
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz = 0xc33ed2d1fbdd3bfe9c22b96164d38cf0d640e1c0ee8b61c39c57899fffffffffff
所以 <= 0xc33ed2d1fbdd3bfe9c22b96164d38cf0d640e1c0ee8b61c39c57899fffffffffff 的私钥编码后是 56 个字符;大于者 59 个字符。
旧格式私钥:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
对应新格式:PVT_K1_2bfGi9rYsXQSXXTvJbDAPhHLQUojjaNLomdm3cEJ1XTzMqUt3V
同理,只是格式不同罢了。不再展开。
因为公钥有个表示奇偶性的前缀,0x02 或者 0x03,所以它的大小范围被限定,没能相差一个 BASE58 字符。
前文《在 Armbian 安装 NFS 服务端》介绍 nfs-ganesha 的安装配置。经过几天使用,发现效果还可以,但一直都是在局域网内使用,突然有一天想在公司访问家里的 NFS 共享……
直接 mount 会一直卡着。
开放 111、2049 端口,再 mount,还是卡着。
通过反复重启 nfs-ganesha 并 netstat -nalp | grep ganesha.nfsd
观测,发现 mountd 端口不固定!给开放端口配置带来困难。
将 mountd 端口绑定,比如 2618,但配置的方法和常规 Debian 服务器的内核级 NFS Server 不同。修改 /etc/services 添加 mountd 绑定是无用的,应该编辑 /etc/ganesha/ganesha.conf,添加以下配置:
1 | NFS_CORE_PARAM |
改完重启服务:
1 | systemctl restart nfs-ganesha.service |
UMU 用的是 OpenWRT 路由器作为家庭网络出口,firewall 配置文件是 /etc/config/firewall,添加以下几行:
1 | config rule |
以上配置开启了 111、2049、2618 三个端口的转发,其中 udp/tcp 111 是 portmap 端口,udp/tcp 2049 是 nfsd 端口,udp/tcp 2618 是上一步绑定的 mountd 端口。
/etc/init.d/firewall restart
重启后就可以在办公室通过 IPv6 访问家里的 NFS 共享了。
https://github.com/nfs-ganesha/nfs-ganesha/blob/next/src/config_samples/config.txt
]]>有个刷了 Armbian 的玩客云想当文件共享服务器。
某些版本的 Armbian 内核不支持 nfsd,刚好稣就刷到!如果按照 debian 服务器玩法——安装 kernel 版服务端,是无法正常工作的:
1 | apt install nfs-common nfs-kernel-server |
启动时会提示:
1 | mount: /proc/fs/nfsd: unknown filesystem type 'nfsd'. |
使用用户态的 nfs-ganesha。
1 | apt install nfs-ganesha nfs-ganesha-vfs |
配置文件为 /etc/ganesh/ganesha.conf。nfs-ganesha-vfs 包另带一个 vfs.conf 参考模板。以下配置创建读写共享 /root/share 和只读共享 /opt:
1 | EXPORT_DEFAULTS |
改完重启服务:
1 | systemctl restart nfs-ganesha.service |
1 | sudo apt install nfs-common |
注意:如果提示 mount.nfs: No such device
,说明内核没有 NFS 模块,洗洗睡了,换 Windows 10 吧!
注意:Windows 10 目前只有 NFS v3 客户端。服务端如果只开 v4 协议,则 Windows 10 将无法访问。
https://github.com/nfs-ganesha/nfs-ganesha/blob/next/src/config_samples/config.txt
https://github.com/nfs-ganesha/nfs-ganesha/blob/next/src/config_samples/export.txt
]]>用 TTL 连接刷 Armbian buster 的盒子,然后用 putty 和 plink 登陆,一输入 root 回车,就报 Login incorrect!但通过 ssh 远程登陆却没任何问题。
ttyAML0 不在 /etc/securetty 里。
一开始听运维小伙伴说:最可能的原因是键盘 Caps 开启了。轻松排除。
后来发现输入大写的 ROOT,反而提示输入 password,这让稣想到“枚举用户”攻击。开始思考,是不是通过 TTL 登陆被 Armbian 认为是不安全的?
于是学习 securetty 相关知识,发现确实在某些不安全场合 root 是不被允许登陆的,因为系统管理员一旦通过不安全渠道输入密码,那么密码就可能被盗取,所以一输入 root,就应该立刻报错,而不该继续让输入密码。而输入其它不存在的用户时(比如大写的 ROOT),反而应该让继续输入密码,最后再提示登陆失败,因为如果提示用户不存在,会让黑客穷举出系统里有什么账号。
1 | grep securetty /etc/pam.d/login |
后来注意到 TTL 用的 tty 名字是 ttyAML0,grep ttyAML0 /etc/securetty
果然不存在。
echo ttyAML0 >> /etc/securetty
搞定。
在 Windows 10 安装 git 的同时,开启系统自带的 OpenSSH,则系统里存在两套 ssh,git 会默认使用它自己的那套。
由于 Windows 10 的 sshd、ssh-agent 做成服务,比较容易管理,而且微软改造的版本会更注重安全,所以 UMU 决定舍弃 git 带的那套。
思路:把 git 那套 ssh 指向 Windows 10 OpenSSH。
用管理员权限运行 cmd
,输入:
1 | cd "%ProgramFiles%\git\usr\bin" |
有以下物品:
PL2303 串口线(TTL 线)
Windows 10 PC
树莓派 Model B
求:PL2303 串口线是好是坏?
把 TTL 线插入 PC USB 口,Windows 10 会自动安装驱动,然而 Prolific USB-to-Serial Comm Port 版本 3.8.31.0 [2019/7/30]
和 Prolific USB-to-Serial Comm Port 版本 3.8.18.0 [2017/10/17]
都不能正常工作。这说明 PL2303 芯片已经被淘汰……买 TTL 线请选当下流行的其它芯片。
搜“PL2303_Prolific_GPS_1013_20090319”,装“Prolific USB-to-Serial Comm Port 版本 3.3.2.105 [2008/10/27]”,可正常工作。
波特率设为 115200,其它默认,最终参数如图:
如果树莓派有用 MicroUSB 供电,则 VCC(红)可以不接,只把 GND(黑)、RX(白)、TX(绿)分别接到树莓派的 P6、P8、P10;如果需要直接用 GPIO 供电,则把 VCC(红)插到 P2 或 P4。
PL2303 | 接线颜色 | 树莓派 GPIO | 树莓派针脚 |
---|---|---|---|
VCC | 红 | 5V | P2, P4 |
RX | 白 | GPIO14(UART_TXD) | P8 |
TX | 绿 | GPIO15(UART_RXD) | P10 |
GND | 黑 | GND | P6, P39 |
使用 plink 或 putty 皆可,注意:需使用管理员权限运行。
1 | plink -serial \\.\COM1 -sercfg 115200,8,n,1,n |
改编自唐代杜牧的《清明》:
]]>清明时节雨纷纷,路上行人欲断魂。
借问酒家何处有,牧童遥指杏花村。
默认源在国内访问速度普遍比较慢。
PS: 本篇理论上应该几年前就写的……以前经常用台湾省的网络,没发现,现在补一篇。
1 | sed -i 's/downloads\.openwrt\.org/mirrors\.tuna\.tsinghua\.edu\.cn\/openwrt/g' /etc/opkg/distfeeds.conf |
1 | opkg install libustream-mbedtls |
如果您想把整个软件源下载到本地,可以参考:https://github.com/UMU618/openwrt-opkg-cache
]]>在 PC 插入 U 盘/移动硬盘,Windows 会发出令人愉悦的“灯等灯”声,然后 U 盘灯开始牛逼闪闪(如果有灯);安全弹出时,又会发出“的的等”,灯熄灭(有些 U 盘不会灭灯,而是常亮着,不会再闪;移动硬盘一般都会灭灯)。
OpenWRT 这么强大,怎么能不支持?
什么?你说 umount
?那 /dev/sda 还能重新挂载呢!那灯还亮着呢!(有些 U 盘弹出后灯常亮,设计好的才会灭灯。)
什么?你说直接拔掉?你赢了!但有时候,稣是在远程操作,要是没人配合拔掉,岂不是要插着耗电?穷人可是交不起电费的……
1 | opkg update |
终于安全弹出啦!
注意:弹出后,/dev/sda 还会存在,但无法再 mount,而且它下面的分区 /dev/sda1 等,都会消失。
eject 默认会先后尝试使用 CD-ROM 和 SCSI 命令弹出设备,可以用 -v
参数查看详细流程,一般 U 盘用 -s
参数指定使用 SCSI 命令更为直接。
用 PC 当 Server 测试环境,费电!挖出吃灰多年的树莓派 Model B Rev 2 000f,打算用它跑 ipfs!
较熟悉的 CentOS、FreeBSD、Ubuntu Server、Windows IoT 的当代主流版本都不支持这款古老的树莓派。
ArchLinux 支持,然而稣个人认为 ArchLinux(属于 Linux 中的邪教)不适合当 Server。
尝试刷 OpenWRT,发现即使设置密码,本地控制台也是没密码就能登陆。这不太安全,虽然本地就是不安全的,但别的系统可不是这么设计的!
还是官方的 Raspbian Buster Lite 吧!
主要参考官方文档:
Setup:选个 16GB 的 SD 卡。
Installing operating system images:用官方 Raspberry Pi Imager 工具把系统镜像刷到 SD 卡。
接 HDMI 显示,通电。首次启动,系统会自动对 SD 卡的分区进行扩容,使第二个分区扩满未分配空间。
通过 sudo raspi-config
做基本配置:
进“本地化”把默认语言 en_GB.UTF-8 去掉,勾选 en_US.UTF-8。
键盘布局改为通用 105 键(国际)美国布局(默认的英国布局下按 | 会变 ~)。
时区改为当地。
改机器名(如果您有多个树莓派,不改会重名),稣将之改为 rp1b。
改 pi 用户的密码。
开启 SSH,插上网线或者 USB 无线网卡,就可以从别处远程登陆它了。
1 | sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak |
打算直接在树莓派上编译,所以要先在树莓派上安装编译环境。不过不要通过 sudo apt install golang
安装,因为截至今天(2020-03-28),这命令安装的是 1.11.6 版,这对 go-ipfs 项目来说太低了。
到 golang 官网下载 ARMv6 安装包,目前最新版本是 1.14.1。
压缩包里是有一个 go 文件夹的,所以只要解压到 /usr/local/ 下即可。
1 | # aria2 比 wget 强大 |
1 | git clone https://github.com/ipfs/go-ipfs |
有很多依赖库需要下载,开始漫长等待……如果代码都下载完,则 make build
的输出为:
1 | go version go1.14.1 linux/arm |
最后一行会卡很久!em……用高性能机器来交叉编译才是正确的方式!
树莓派的 CPU 架构是 armv6l,所以用以下命令编译:
1 | CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 make build |
在 MBP15 上编译快很多!(前面纯属折腾!)编完复制到树莓派:
1 | scp ./cmd/ipfs/ipfs pi@rp1b:/home/pi/ |
在树莓派上测试:
1 | pi@rp1b:~ $ uname -a |
很多语言调用 C 语言写的模块来弥补自己某些不足。Rust 当然也可以调用 C 语言开发的模块,不过这是不安全的。
1 | [dependencies] |
1 | use libc; |
我房子太大,一个无线路由器覆盖不了怎么办? - 知乎
1000 多平方米的办公室够大吧?一个小米路由器 Pro 放在中间,办公区域覆盖完全,仅厕所信号较弱。
100 平占地面积,三层楼(无电梯、楼梯洞很大),在二楼放一个 79 块的路由器,日常无痛使用 4 年以上。
WiFi 信号是通过漫反射传播的,不是什么“穿墙”!所以重点不是“太大”,而是钢筋混凝土墙的格局。
震惊!WiFi 信号在空旷的地方轻松覆盖你家十栋大别墅的面积!
真正能靠透射、衍射穿透的是玻璃、木头、塑料之类。5.8G 信号是厘米波,能穿透的厚度也不大,稍微厚点的木门都不行,只能从门下的缝钻进去。您可以在房间里做开关门试验,结论是:穿墙太难了,撞墙倒是会反弹……
5G WiFi 就是 5.8GHz,为和 5G 蜂窝网络区分开,特意采用 5.8G。
主路由 + AP 方案!中间当然是千兆网线连接,如果您没有布网,那就跳过,看后面分析为什么其它方案都不靠谱。
本方案需要的硬件是 N 个刷 OpenWRT 的路由器:
主路由器,自然就是放在多媒体箱里,接光猫或入户网线。
AP,其实也是个 OpenWRT 路由器,只是关闭 DHCP 服务,配置和主路由器同网段,然后用 LAN 口接主路由器的 LAN 口。
AP 可以有多个。比如稣家,是长方形结构,距离多媒体箱最远的主卧关上门基本零信号,只能在主卧放一个 AP,然后全家都覆盖完整。
只开 5.8G,尽量不开 2.4G。稣家的“只支持 2.4G 的终端设备”全部集中在大厅区域,所以只有主路由器开启 2.4G。如果开多个 2.4G,注意信道隔离。每个 5.8G 信号都用同样的 SSID,以实现漫游。
AP 的 IP 地址可以使用静态,也可以使用 DHCP client,然后在主路由器上绑定地址。AP 有固定 IP 方便登录管理。
如果 AP 需要 IPv6 地址,再创建一个 lan6 接口,物理 Interface 选择 br-lan(和 lan 接口一样,但不能勾选 Bridge interfaces),协议是 DHCPv6 client。
有人说,这样的方案缺乏 AC 管理,会导致终端设备可能不会自动切换信号。稣特地拿出祖传的 iPad2,从大厅漫步到主卧,神奇的事情发生了——居然可以自动切换 5.8G WiFi 信号!终端能不能自动切换,这显然是驱动程序决定的,虽然 iPad2 已经很老,但系统有更新到 iOS 9.3.5……
实在找不到一个不能自动切换信号的设备!好,测试结束。方案完美上线。
OpenWRT 说它确实可行!
移动中使用设备的机会不高。您不会在家里跑来跑去,同时费劲地使用设备,有可能您根本就不需要自动漫游。
您不会在家里的每个角落使用 WiFi,所以有很多地方并不需要有信号,比如洗手台、走廊、厨房。
买不起!什么?你说某些乐射 AC 很便宜?不好意思,很便宜也不是免费,还耗电!做人,难,做穷人,难上难!
AC+AP 方案的原理:AC 会自动发现并管理 AP,设定 AP 的 RSSI 阈值,将信号不稳定的设备【踢下线】,迫使终端设备重新连接信号最强的 AP,实现 AP 的自动切换。
请注意【踢下线】三个字,用 AC,在终端移动时,一样会断线。既然都会断,那就没有本质的区别,让终端自己选择,体验并没有比较差!
所谓 AC 管理,无非是促使那些不支持 802.11k-2008 的设备重新连接而已。如果您有这样的设备,建议还是换掉他们,或者固定他们,古董啊,可别让它们逃跑了!
贵!Mesh 的主节点就是个 AC,绕回 AC+AP 方案。有网线的话,为什么不用 AP 方案?根本就是一样的嘛!
懒得喷……
不要在 Ubuntu 上运行这条命令!都说 CentOS 比 Ubuntu 稳定,总算见识到具体案例!
1 | $ cat /etc/centos-release |
可见,机智的 CentOS,早就料到这个运维事故!
1 | $ cat /etc/lsb-release |
SSH 到 Ubuntu Server 上,运行 chsh -s zsh
,exit
后就再也无法登陆……
如果您要远程做这个试验,记得 exit
前 chsh -s /bin/zsh
,或者 vi
手动纠正 /etc/passwd。
BC 试用版过期,思考 3 秒钟:稣太穷,买不起!
macOS 和 iOS 一样,App 都是独立存储,找出安装信息保存在哪个文件应该很容易。
确实如此!居然只要两步:
1 | cd ~/Library/Application Support/Beyond Compare |
由于子公司、分公司众多,稣的服务器列表里有好多个项,想备份这个列表,发现还不是很容易!
首先,找到 ~/Library/Application Support/X-NG/-local-config.json
,但这个文件里只有当前选择的项。
然后,就看代码吧!Swift 写的,应该还好:
1 | let defaults = UserDefaults.standard |
根据代码线索找到:
1 | defaults read ~/Library/Preferences/com.yuzhou.X-NG.plist |
哇~全部出来了!
]]>我类么:Whatever。
挪移失踪烂教纲:领导常年消失不见一般会烂掉。
最近 MBP15 的硬盘空间告急,打开“磁盘工具”查看,却发现居然有两个“宗卷”!从没认真研究过 macOS 磁盘管理的稣疑惑了。
“磁盘工具”默认“仅显示宗卷”,“显示所有设备”后是这样的:
肉眼观测 disk1 是放在 disk0 里的……嗯,想起容器!但 GUI 有时候是会骗人的,用 diskutil 来检查一下:
1 | $ diskutil list |
以上可知,只有 disk0 是物理的,disk1 是由 disk0s2 这个分区虚拟出来的。
下面查看两者详细信息对比:
1 | $ diskutil info /dev/disk0 |
两者 Virtual 属性的不同,说明前面的猜测是对的。
搜到如下参考:
推理正确!
]]>Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,具有很好的空间和时间效率,被用来检测一个元素是不是集合的成员。
Bloom filter 采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素可能在集合内,反之则一定不在集合内。
libbloom 是 Bloom filter 的 C 语言实现库,其中哈希函数是 MurmurHash2。
如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。
优点:插入和查询时间都是常数。它查询元素却不保存元素本身,节省大量的存储空间。当元素是密码时,不保存元素的特征使其具有良好的安全性。
缺点:存在误报(false positive)。当插入的元素越多,错判“在集合内”的概率就越大。另外 Bloom filter 也不能删除一个元素,因为多个元素哈希的结果可能在 Bloom filter 结构中占用的是同一个位,如果删除了一个比特位,可能会影响多个元素的检测。
以官方 test-basic 为例,简化的代码如下:
1 |
|
输出为:
1 | ->entries = 1002 |
数学原理参考:《Bloom Filter概念和原理》
bytes 是最容易理解的,4802 位需要 601 字节存储。
bits = bits per elem * entries,每个元素需要多少位 * 元素个数。
hash functions = ceil(-ln(error) / ln(2))
bits per elem = -ln(error) / ln(2)^2
Rust 三大设计宗旨:内存安全、零成本抽象、实用。本文从所有权角度来学习师兄妹的爱恨情仇“内存安全”。
值归变量所有。
当变量超出使用范围时,变量值所占用的内存将被释放。这是类似于 C++ 的 RAII 概念。
变量值可以由其他变量使用,但需遵守由编译器强制要求的若干规则。
前两条是其它语言也有的,没啥好说,重点放在第三条。
克隆(clone):此处将值复制到新的变量。新变量拥有新的复制值的所有权,而原始变量保留其原始值的所有权。
你有一本书,稣按照你那本书,买了一样的书。你的书是你的书,稣的书是稣的书。
移动(move):所有权被转移到另一个要使用该值的变量,原始变量不再拥有所有权。
学姐含情脉脉地把她的书送给稣。
不可变借用(immutable borrow):没有发生所有权转移,但是可以通过另一个变量读取该值。当借用变量超出范围,内存不会被回收,因为借用变量没有所有权。
学长不太情愿地把书借给稣,并交代:“书借你,只能看,绝壁不要在上面做笔记,被我发现会砍死你的哦!我偶尔会找你查查。”
可变借用(mutable borrow):可以通过另一个变量对该值进行读取和写入操作。当借用变量超出范围,内存也不会回收,因为借用变量没有所有权。
稣把书借给学妹时说:“这书你随便用,把稣的书当做你自己的书,等到用不上时再还。”
重点在于一个“借”字:书的所有权属于其主人,但主人将书借出之后,自己是无法再在书上做笔记啦!
借出期间,借方不能写:学长说过,在书上乱画,要砍死稣!
借出期间,所有者不能写:这书学长已经学完,偶尔要复习,但已经不需要写笔记,借出去之后就更不会写了。
1 | fn main() { |
不能多次可变借用:只能有一个独占的学妹(active borrow),稣不能同时承诺给多个学妹“随便用”,不然学妹们可能打起来……
所有者不能再读写:书在学妹手里随便蹂躏,稣虽然心疼,但不能说!等她爽(huan)了再说吧。
1 | fn main() { |
玊:通“士”。
稳如狗:稳妥地像狗,不是稳定。
神之八哥思千虑:要解决的问题是神级的难,脑力消耗很大。
一算钱袋拮九周:收入不行,只能过着拮据的生活。
改编自霹雳角色玉龙隐士诗号:
]]>书剑青眼初白头,
智殊相悬问机难,
波澜困守役千虑,
一算龙隐决九川。
在《优化思维【3】消除没必要步骤》提到一个对象转化的例子:A 对象要转为 B 对象,实现时先把 A 对象转为中间对象 T,再将 T 转为 B 对象,由于两步都很容易实现,一个现有函数即可,所以很多人可能会采用这个思路。
下面要介绍的“合并步骤”,类似于优等生解应用题时“跳步”(一行合并多个步骤),可以作为前文的补充。
以下命令 UMU 经常看到,其实它可以用 grep UMU test
来优化,减少一次管道交互。
1 | cat test | grep UMU |
再看下面例子是从一个命令行里移除 A 和 C 两个选项:
1 | cmd="EXE A=1 B=2 C=3 D=4" |
其中两次 sed
可以合并为一次:
sed -e 's/ A=[^ ]*//;s/ C=[^ ]*//'
或 sed -e 's/ [\(A\)\(C\)]=[^ ]*//g'
或 sed -e 's/ \(A\|C\)=[^ ]*//g'
,这个 macOS 上不行。
或 sed -E -e 's/ (A|C)=[^ ]*//g'
,这个适合 macOS。
先查一下 sysctl net.ipv4.tcp_fastopen
,一般应该是 1,说明客户端支持 TFO;如果是 2 则说明服务端支持;3 是同时支持。
TFO (TCP Fast Open) 是一种能够在 TCP 连接建立阶段传输数据的机制。使用这种机制可以将数据交互提前,降低应用层事务的延迟。
这其实也是一种合并步骤的思想,把传输数据合并到三次握手期间。
参考:
]]>Shell 不适合某些复杂运算,尤其是 OpenWRT 用的 ash。
Lua 缺乏某些 SDK,比如说阿里云 SDK 就没有 Lua 版。
Python2 已经过时。
Node.js 在小型设备上不如 Python3 高效。
C、C++ 之流太难了!Go、Rust 还得编译,麻烦。
Perl、Ruby 已没落。
当 IPv6 地址变化时,将地址发送到钉钉:https://github.com/UMU618/openwrt-ipv6-addresses
1 | opkg install python3-base |
安装 python3-base
之后,就可以运行 python3
了。
1 | root@UMU:~# python3 |
用以下 Python 代码,打印目前已有的模块:
1 | import sys |
结果为:
1 | 1 sys built-in |
下面来实现获取 IPv6 地址的功能:
1 | def net_hex_to_ipv6(h): |
以上代码有个“美中不足”:只能打印地址的“首选格式”,不支持“压缩格式”。下面改进!
UMU 打算使用 socket 模块的工具函数格式化 IPv6 地址,但目前已安装的 python3-base
不带 socket 模块:
1 | import socket |
所以需要安装 python3-light
:
1 | opkg install python3-light |
装完即可愉快地玩耍:
1 | import socket |
以上代码打印:0618:0618:0618:0618:0000:0000:0000:0618 -> 618:618:618:618::618
。
如果 python3-light
还不能满足您,推荐来个全家桶:
1 | opkg install python3 |
PS: 不要以为只要上面这句就全装上了,前面的 opkg install python3-base
是必要的!如果只装 python3
,则 /usr/bin/python3
并不存在!
(完)
]]>如果您看得懂,那么,这是 Node.js 程序员的 C++ 进修指南。
如果您没看懂,那么,这是学 C++ 的劝退书!
用 C++ 改写 Node.js 程序,主要目的可能有两个:保密、提高性能。
那么您肯定要问:为什么不用 Go 或者 Rust 改写?UMU 是推荐用 Go 或 Rust 的,而且相对改写为 C++ 要简单得多,本系列文章,可能从反面论证:您应该选择用 Go 或者 Rust 改写!
https://github.com/UMU618/cpp-for-nodejs-programmers
在《学习 Rust【2】减少代码嵌套》中,UMU 提到一个使代码平坦化的例子,咱们把其中最基本的功能提炼出来,成为最简单的例子:
1 | setTimeout(() => { |
这段代码实现的功能是:一秒后打印 step1
,再一秒后打印 step2
,再一秒后打印 step3
,退出。
首先明确一点:JavaScript 是 JIT 语言,不用编译,语言宿主直接解释运行。C++ 是 AOT 语言,需要编译。所以我们需要编译器(比如 g++、clang++)和编译脚本(比如 make、cmake)。下面我们会选择在 macOS 上使用 clang++ 和 cmake 来编译 C++ 代码。其中,cmake 其实是用来产生 Makefile 的,如果您学过 Makefile,可以直接用它。
安装 Xcode,以获取 MacOSX.sdk。
安装 clang++ 和 cmake:
1 | brew install llvm |
1 | // set_timeout.cc |
1 | cmake_minimum_required (VERSION 3.5) |
1 | ## cd to source code directory |
小结:以上代码,可用,但不推荐。首先它是用多线程模拟的定时器,当设置 N 个定时器时,将创建 N 个线程,这不够优雅。其次,当您取消定时器时,会发现它无法立刻取消并退出线程。
我们知道,Nodejs 内部使用 libuv 作为异步 IO 库,它是 C 实现的,用 C++ 调用 libuv 就显得不那么 C++,所以我们决定用和 libuv 同类且更强大的 Boost Asio 来代替。
1 | brew install boost |
1 |
|
1 | cmake_minimum_required (VERSION 3.5) |
小结:好很多,但太难了……这真是劝退书!
]]>改剧本。2019 年 8 月时,《八哥之神前传【1】》识界大战时就提到“心灵生化病毒”,后来要解释识界之外的识界是怎么毁灭的,人类为何移居太阴之背时,原剧本也是延续这个套路。但不幸的是作者所处的宇宙遭遇病毒疫情,为了不造成恐慌,急忙连夜做梦改剧本。目前倾向于 11.7 级地震。
是还没写,但早已梦见。本剧的真正创作时间是作者大学时期,距今已经 15 年。
没错!大学时代就打的草稿,故事来源于自己的梦和听闻周边的故事。原本计划剧名:《一睡千秋》、《一梦千年》或者《魔脑在世三千年》的,但由于当时阅历不够,自觉写不好,所以写个故事发展路线就放弃。2018 年底无意间在老硬盘里翻出来,感慨良多,决定把“概要”升级成“初稿”。
没错!故意起这样奇葩的名字,主要是因为稣低调。另外,这个剧本里的中心思想太过玄幻,不适合一般人,当然不能起个易懂的名字。
想太多,写不出来!
“概要”只是一个青春言情剧,后来想写的是一个人的一生……但是一个人不够精彩,干脆把一堆人写成一个“稣”。本质上说“稣”其实是一群人,而不是一个。比如《八哥之神【4】》魔性山军犬养殖训练基地那个场景,其实就暗示男主角是个精分。
有差别吗?
有的!一直在充电!
哦弄!是给 MBP15 和手机充电!
没错!这是为了按公共电梯的按钮。您想,现在都 PHEIC 了,直接用手指接触?那面积好大的,多危险呀!
没错,这是事实。因为《八哥之神》其实是《八哥之神前传》的续集,一般续集都是变差的。稣很机智地采用倒叙,先写比较差的续集,这样别人就不会喷:“续集写烂了!”而是说“前传的角色居然更多,剧情更复杂!”
出现的角色:李冰月、李心觎,一对双胞胎姐妹;孟长生,一个不婚主义的男子。
剧情:爷要被捅死了……这应该不算剧透,《八哥之神》已经明确这点,开场时圣小开就是一个 60 多岁的年轻人,和周易类似,但更惨一些,毕竟这是一部“探讨生命悲剧色彩”的言情科幻喜剧。
本剧的人生观:死亡并不长久,轮回再度孤独。请注意这里的“度”是个动词。
别慌!一个人的一生虽然意义不大,但放在无尽时间洪流里就有意义了,您可以以一辈子为单位进行迭代,这辈子尽量做得更好,让下辈子起点高一些。太上大道,我稣慈悲!
嗯……这些故事全都有现实原型!就是时间点改改,人名随便起一个,把几个现实故事重组。但是,这些故事没有一个是发生在作者本人身上的,作者只是擅长蹭热点,沾点人间俗气,以对抗挨踢无情。
上辈子死前,死神劝稣要放下,稣回答:不,稣要追求永恒!
然而稣还是死了,还是被洗脑洗得一点都不剩。为什么有些感觉转瞬即逝,再也回忆不起来?不行!稣要再体验一次,然后把它写下来。于是稣养成写日记的习惯。
有一天,稣发现如果按照中国人的平均寿命计算,稣已经过掉一半,回忆起自己的前半生,稣发现人生是孤独的最终奥义。每个阶段都会新朋友,也会失去一些旧朋友。就是上一次转变的时机来临前,稣突然领悟到一个真谛,我们无法选择不失去,但可以选择阶段性先失去的是什么!比如哪类朋友应该舍去——那些无法互相理解的。
接着稣又发现,理解不是一件容易的事情,互相理解这个要求有点高。只要能合作就行,应该舍去那些无法合作的。最终稣终于理解人间的一个催化剂:嫉妒。于是稣感觉人间的故事学习得差不多了,可以总结一下,于是开始写剧本。
身为天族,不能过度体验和干预人间。写代码比较正经。
个币。
真的。
]]>古思:怎么……这么快?爷不是要敲代码么?
圣小开:一日之计在于晨,美好的早晨当然是睡回笼眯最好了!说不定还能再见到狐狸精。
古思:那我先去洗澡!
圣小开:大早上的洗啥澡,又没让你侍寝。
古思:哦,我也换睡衣陪爷躺躺。
圣小开:好多年没和别人睡眯眯了,有点不习惯。
古思:那我们聊天吧!床除了睡觉,另一个大用途就是聊天。
圣小开眼神一撇:你会聊啥?C 还是 C++?
古思:C++!而且我真学过,贾老师特地要求我学的。
圣小开:反应真快。爷还是亲手确认一下……
古思:爷的手好冰呀!
圣小开:嗯,爷还是稣的时候体温就低于常人,当爷后体温就更低了,需要一个暖手宝。
古思:这点我看过的资料并没有提到。
圣小开:贾总是不是和你说了爷很多八卦?
古思:是有一些基本介绍,也没啥特别八卦的!我还得多直接从爷处了解。
圣小开:有啥问题就问吧,如果问得不好爷可能就眯过去了。
古思:爷刚才提到好几次“眯”,为什么睡觉要说成睡眯眯呢?这种骚里嗲气叫法不符合爷的人设!
圣小开:骚里嗲气?眯眯——其实是爷的绯闻女友!
古思:哇哦……原来如此,看来田心挖到第一个八卦咯。
9102 年的春天,一个风雨交加的夜晚,稣和王博士聊完一个关于人工智能的天后,精神还有点紧崩,边低头走路边思考科技的变幻和人生的虚幻。
突然偶遇现在被人称为稣的绯闻前女友的月光女神卢眯眯。距离上次见面过去快一年,相逢自是有缘,人生到底是虚幻,还是真实,尽在研究自己和参考他人,何不乘机聊聊人生?然而附近像样的小资消遣场所都已打烊,也没地方坐,她提议去她宿舍。稣心想那是员工宿舍,应该很安全,稣不可能被人暗杀,如果被仙人跳,稣只要大喊一声,这破地方认识稣的少说也有 60 个!于是果断去了。
进屋后温暖许多,在温差作用下,居然一时犯困。她去洗澡的时候,稣不小心就在她床上睡着。
醒来已经快凌晨五点。她就躺在身边。稣想:楼下宿舍门没有门禁卡是出不去的,又不忍心叫醒她,于是一个果断的决策:睡眯眯。
这一觉睡得很好,是稣一生中少数几个质量极佳还能记得的觉之一,于是稣从此改口称睡觉为睡眯眯。
唯一美中不足的是……
古思:吓醒了?
圣小开:不是……稣偷偷摸摸摸了一下,眯眯的咪咪原来只比六舅大一点点!
古思:六舅?
圣小开:嗯,是爷的舅舅,他很六,所以叫他六舅。不说他,总之就是比你小挺多的……
古思:原来爷喜欢这个!田心还可以去加大一些。
圣小开:不用,不用。适可而止!适可而止!爷只是用理性的眼光衡量!
古思:爷到底是正经还是不正经呢?好难分辨!
圣小开:一名男性整形医生整天研究女人的胸,你说他正不正经?
古思:这没有不正经呀!
圣小开:一个男孩整天研究女人的胸,因为他立志成为一名整形医生,你说他正不正经?
古思:好像有不正经的味道。
圣小开:嗯哼!区别在于专不专业!如果一个人业余研究异性心理,多半会被判定为不正经,而一名专业的心理学家,怎么研究异性心理,都是正经的。
古思:爷想说什么?
圣小开:只有假不正经,才能知道谁是假正经!这是一种调试八哥人生的方法。
古思:听起来,其实爷是很正经的人,故意表现得有些不正经?
圣小开:是的,正经得无趣,无趣得没朋友。爷还是要假装有朋友的。
古思:调试八哥人生是什么意思?
圣小开:很多时候,很多人,是不会说实话的,需要一些研究手段。比如陪他们演戏,但又不能表现得不自然,所以爷研究过这本《悲剧演员的自我修养》。
古思:贾老师说爷的好奇心很重,原来如此呐!
圣小开:不!这是大部分人对爷的误解。这个误解好大,大到爷每次解释都会被当成蛇精病。
古思:em?怎么回事?
圣小开:爷是质疑,不是好奇。别人是什么样的,爷都可以接受!爷从这个世界的基础开始质疑,以致于对别人的存在和真伪也质疑。比如,偶尔发现别人好像喜欢自己,就会去研究她是不是真实存在的,是不是有主观意志,是不是真的喜欢,以及为什么她会喜欢爷。反过来,爷喜欢别人也一样各种质疑。
古思:这是不是多疑?不自信?
圣小开:肯定是多疑。爷连自己都质疑,有时甚至怀疑“我思故我在”也有八哥!是在思考,但在哪里思考呢?在自己脑里,还是在远方的某处?不自信有点,但也不他信呀!
古思:田心喜欢爷是基因和洗脑程序决定的,是真实的。
圣小开:哦?你不抗拒一下这种安排吗?
古思:贾老师说,爷要是死了,我会进入重置状态,记忆可能全部丢失,和死掉无异。
圣小开:那爷睡眯眯后,你会怎么样?
古思:没有特别设定。可以一起睡呗。【心想:以前是不敢抗拒,现在看来没必要抗拒。】
圣小开心想:在爷的床上,没人可以比爷晚睡!等你丫睡着后,爷就用各种反侦察仪器检查你。
]]>每年春节期间,稣都要研究玄学,今年岂能例外?
每个宇宙都有且只有一个神,就是您信的那个。祂有不同的名字,比如信基督,那神的名字是耶和华;道家神叫太上老君。
其实神就那么一个,不同的人给祂取不同的名。也可以是您自己,总之您信就行。
稣信死神。
没有什么状态是永恒的。死亡也不是。宇宙能创造无穷的生命,总有一天可以重现死去的生命。就像您随便写个数字序列,在 pi 里一定能找到无数次。
记忆是暂时的,意识比记忆长久。生死轮回,可没保证在地球轮回。众生平等的理论来源于此,这辈子在地球上当人快活,下辈子可能在火星当虫吃土。
人喜欢强人,便崇拜他们。死神也会喜欢强人,但奴役他们。很多强人都被死神叫去服务祂了——这就是死神的套路。
什么是圣人?圣人一定是强大但又克制自己的强大的,所以他们没有崇拜这种情感,他们只敬畏天地。
您说自己有一技之长,但那是什么造就的?基因、营养、后天练习、时代巧合等,圣人认为这些没啥,不值得欣赏。
死神要人命时,很克制,不轻易收走。——这才是值得欣赏的。
反面,不知克制食欲暴饮暴食、纵欲过度,身体会很快坏掉。
鲁信说过:稣劝您当扫地僧和鸠摩智,而不是乔峰。
死神眼里正邪无异,善恶不分。但人们如果自己规定了什么叫善恶,还自以为是善,当他们发现自己原来是恶时,就会遭到自己的诅咒。
影剧里,恶人洗白或善人作恶往往命不久矣。恶人可能想赎罪救人而死,善人则可能是信仰崩塌,生无可恋。总之都是后悔死的。
善良真的是一种有能力才能选择的修炼模式,不是自我认定和按条款划分这么简单。法律应该高于道德,因为很多“道德”条款,根本上是错误的。
PS: 死神根本不关心您善不善良,对凡人来说,量力而行才是科学的。
一个人只要坚持追随天道,时间长了就会很牛逼。天道并非就是美好的,凡人只能追随那些追随天道的圣人,比如老子。
前面已经提到“量力而行”这个词,凡人不可能做到顺天而行,量力而行就好。
]]>战略上藐视敌人,战术上重视敌人。
世界上确实有两种人:年轻人和中老年人。
年轻人对 SARS 可能没什么印象。即使现在被感染新型冠状病毒,靠自身免疫力战胜病毒的概率也比中老年高很多。稣发现他们中一部分人,对疫情并不关心,甚至认为别人讨论疫情是在制造恐慌……稣认为如果发现有人造谣、信谣、传谣,辟谣打脸就行,但干预别人正常讨论疫情的自由就不太好了。毕竟年轻人迟早也要变成中老年人。
中老年人很可能本来就有一些慢性病,要是被感染,死亡率就比较高。
稣属于经历过 SARS 封校的中老年人。当年还被认为是疑似病患,被请去医院体检,还好没事。所以稣是属于相当重视的这类。
小时候经常会看到一些武侠剧,某个配角嘴里冒出一句:“没想到你居然是贪生怕死之辈!”语气带着不屑和鄙视!但说完,一般他就挂了……每每看到类似情节,稣的内心都是一阵纳闷:“贪生怕死不是正常的吗?这个人为了点莫名其妙的小事就去死,好像才不正常吧?”
有人说这次新型冠状病毒死亡率不高,没啥好操心的。
稣认为死亡率可能真不高,但却是多出来的一种。我们本来也存在被流星砸死的可能,但加上“新型冠状病毒致死”这一种可能性之后,整体死亡率明显是提高了,干嘛冒这个风险?
造谣者一般都是为了利益或者某种心理刺激。作为小老百姓,造谣应该不多,但信谣传谣就多了去。有些人为显示自己信息渠道多而广,就喜欢第一时间转发信息,而不是先鉴别。这种心理很多人都有。有些人不在网络上传谣,但聚会当面传是一样一样的。
也有些人是没鉴别能力,宁可信其有。稣在学习的路上,也没少被谣言短暂攻破过,要三思而后行和及时修正。
吃野味风险很高,那些爱吃的人估计也有一种攀比、装逼的心理,因为吃起来危险反而去吃。这是病,得电!
RNA 病毒因为是单链不稳定,所以变异能力比较大,很难预测后期是毒性减弱还是增强,以及人群里会不会出现超级传播者。流感病毒也是 RNA,稣基本每一两年都中一次,上一次的抗病毒经验无效,说明中的很可能是新变异品种。
相信科学,但也要明确还有很多病现在的医学治不了。敬畏自然,主动预防被感染!
]]>资源管理一向是编程中的重要任务。当一个函数要管理多个资源时,很容易出现代码嵌套层级太深的问题,尤其是调用系统或第三方 API 时。
以 C 语言代码为例,这里简化为两个资源,请您自行脑补多个资源:
1 | int error_code = 0; |
上面代码最深嵌套是三层,为了减少嵌套,可以把代码改为平坦结构,降低到一层:
1 | resource1 *p1 = new_resource1(); |
但这么改在资源释放时,更容易遗漏。也有人为使代码层级平坦化,会使用 goto
到函数末尾统一释放,或者更优雅点的 C++ 方式:用 try...throw...catch...finally
将所有资源包含起来管理。
Node.js 的异步回调函数也存在嵌套层级过深的问题,可以用 Promise 来平坦化,参考:
1 | setTimeout(() => { |
C++ 建议使用 RAII 思想来管理资源,获得资源后立刻放到管理对象里。如果有些资源使用得不频繁,想偷懒不去封装,则可以使用 scope_exit。go 语言更是用内置关键字 defer
来提供 scope_exit 机制。
Rust 用 scopeguard 提供 scope_exit 机制,defer!
宏和 go 的 defer
功能类似。
另外,Rust 还有 ? 操作符,也有减少嵌套的作用。比如这个任务:打开文件,如果失败就返回错误。go 是这样写的:
1 | package main |
同样功能,Rust 代码少一层:
1 | use std::fs::File; |
突然有一天,一个带着光晕的美女出现在稣眼前,十分神奇的是,别人好像都不主动聊关于她的事情,这一点都不像大家平常的风格!丑的狂喷,一般的考虑去追,现在来一个天仙级别的,各个都装蒜,是在独自算计自己的成功率吗?还是大家都瞎了?
经过观察,稣发现她居然就住在正上楼。稣和她用的是同一根水管,这可能让稣多了几分胜算。更巧的是,偶然发现,晚上她喜欢在楼下散步。这可是稣的强项,毕竟四周没有什么地方好玩的,楼下转圈,稣一个晚上可以走 20 圈。于是,转着转着,就认识她了。胡小玉,没错,很像狐狸精的名字……
胡小玉:“你很勇敢嘛。”
稣:“勇敢?为什么这么说?我只是质疑现实,想研究你而已。”
胡小玉:“这里的人好像都不理我,就你敢接近我。”
稣:“哦。这个‘敢’字,说得好像你很可怕似的。”
胡小玉:“我是狐狸精,不可怕吗?”
稣:“嗯?你开玩笑吧!不过你真的很漂亮,感觉很不像真实的人。别的女人脸上一般都有痘印、斑啥的瑕疵,你居然没有,而且声音也很好听。你真是人如其名,一块美玉。”
胡小玉:“你话真多,想睡我吗?”
“什么……”稣一阵尴尬之后,“稣今年 24 周岁,已经成年。”
胡小玉:“那就是想!走吧。”
稣:“这么简单?等下是不是会掉流星把稣砸死?”
胡小玉轻轻一笑:“哈。如果除了睡觉之外,你还干别的,我会咬断你的脖子。”
扑通扑通,到她房间门前,上面居然多了一道符,还加了一把锁,所以我们进不去。
胡小玉:“看来有人发现我是狐狸精了。从你房间爬上去吧!”
稣内心一惊,“难道你不是开玩笑的?”
胡小玉:“笨蛋。那你还跟不跟?”
稣:“会死吗?”
胡小玉:“乱来会死,不乱来就不会。”
稣:“但是稣恐怕爬不上去!11 层爬到 12 层,万一摔下去,必死无疑。”
胡小玉变成一只白色狐狸,顺着管道爬到她房间阳台。稣看得怀疑人生,不行,怎么可能有这么无稽的事情呢?
稣心想赶紧跟上去看看什么妖,虽然费了九牛二虎之力,但居然也跟着爬上她阳台。
但是一进她房间,稣就感觉不对劲,她是狐狸精,会法术的,万一她是附身一个美女,这时候离开肉体,这美女醒来不是要告稣非礼?万一肉体是死的,稣就被当成杀人凶手,太可怕了!
胡小玉见稣迟疑,开口道:“12 年前,你就见过我,不记得咯?”
稣:“不可能……认识你之前,稣就没见过你这么美的。如果有,肯定会记得。”
胡小玉:“我把记忆还给你吧!”说完吹了一口妖气……稣啥都想起来了!上一个本命年,稣去 KFC 上厕所,然后在里面坐了一会儿等同学,看别的顾客在吃,穷稣流下了没钱的口水。后来有个姐姐端着全家桶坐在稣对面,那护体神光照得稣不敢看。她微笑着给稣一个鸡腿,稣才乘机偷看一眼,真是天仙下凡,四周背景突然全白,其它一切仿佛都消失得无影无踪。后来,同学找来,那位姐姐一转眼没注意就消失,竟似人间蒸发!只留稣手里的鸡腿,稣只能含着口水把它吃完。
胡小玉:“想起来了?你欠我一个鸡腿,睡一觉还我。”
稣大惊失色:“为什么要睡觉还呢?”
胡小玉:“我需要阳气。不愿意吗?没要你命就好!”
稣心安理得地睡下了。醒来已经又过了一个本命年。稣走出木屋,身处深山老林,过着田园生活。
时光荏苒,三次见胡小玉,她竟然一点都没变老。稣千真万确地相信,她真的是狐狸精。于是稣先开口问:“这次是要干嘛?”
胡小玉:“我要吃人肉!不然我不久后就会死掉。”
稣:“认识你 24 年,不会还要吃稣吧?吃别人行不行?”
胡小玉:“笨蛋!要吃你,还需要和你说这么多?如果你想每 12 年见一次我,就帮我找!”
稣:“死人行不?这山下去就是哈岱医学院,那里有不少人体标本,虽然泡在福尔马林里,拿出来洗洗应该还好吧!”
胡小玉:“不行,要活人。”
稣:“刚刚安乐死的人可以吗?脑先死,肉体还新鲜……”
胡小玉:“老头不行,生命力不够!有年轻人愿意安乐死吗?”
稣:“你要多重?稣割点给你还不行吗?”
胡小玉:“64g 血肉,肥肉不要。”
稣:“什么……肥肉还不行?稣还想减肥呢!这么多,要死的,要死的!牛肉行不行?”
胡小玉:“不行。我要维持人形,就要吃人肉。”
稣:“真麻烦。看来要去找研究基因工程的孙大师帮忙了,克隆人肉,啧啧,想想就肉麻……”
胡小玉表示感谢,紧紧抱着稣,突然咬稣一口:“其实你是唐僧转世,吸你点血就够了。”
稣:“唐僧!?”
吓醒。原来侧睡压麻右手,被小玉咬的地方还隐隐抽筋……压麻的,压麻的!
贾力劣留言:开哥,送你的美女叫胡思,是女娲造人计划最新产品,属于部分可编程人造人,三年科学教育优等生。知道你不喜欢自由意志,特地选择这位不怎么听话的,希望您会喜欢。
圣小开:贾总,你不是耍我吧!部分可编程?人造人?不是机器人来着?不听话到什么程度呢?不会乘我睡咪咪剪小鸡鸡吧?
贾力劣:不会不会!她是受过高等教育的,懂事。人造人是有生育能力的,只要她愿意,可以给你生猴子!比机器人有意思多了。
圣小开心想:贿赂?卧底?
家联网系统提示有人拜访,还出现广告——神荼系统,保卫家园。自动为您接待来访嘉宾:暂名胡思,女,4 岁,AVILab 女娲生产线第 11 代人造人,由贾力劣总经理指派……
初次见面,有点像刚认识胡小玉那样,即激动又顺利。大概都是编好的程序起作用吧!
胡思:老爷好!我是胡思,小名叫田心,有事请吩咐。
圣小开:不用客套,田心。不要称呼老爷,把老去掉吧,赫赫。大部分家务事,机器人都可以搞定,你就陪老夫聊天和侍寝就行。
胡思:好的,如果对我的初始设定有任何不满,爷都可以修改。
圣小开:先改个名字吧!胡思胡思,容易胡思乱想,把月去掉,叫古思可以吗?
胡思:好的,以后我就叫古思,稍后提交到链上女娲管理系统。
一阵三思而后行的延迟。
圣小开:嗯……改你名字,好像不太好!老夫错了!你不会生气吧!
古思:生气?我生什么气?我哪敢生气?
圣小开:你就是生气了!真小气!
古思:赫赫。我学爷开玩笑的套路呢!没生气,我的名字本来就是别人取的,无所谓啦。贾老师说爷就爱胡思乱想,我被创造的目的就是为了陪伴爷,所以他给我取名为胡思。
圣小开:哦!既然你不介意,那不如叫胡小玉怎么样?
古思:来不及了,信息已上链,只能改一次。
圣小开:哈,开个玩笑,你没有狐狸精那么高冷,反而更像狐狸精。
古思:狐狸精?爷已经开始胡思乱想了么?
圣小开:没有没有,只是早上做的一个梦,还是赶紧吃完饭,敲代码吧。
古思:我可以陪爷结对编程。
圣小开心想:贾总果然是派卧底监视劣者。
]]>项目忙,九九六一段时间,还趁机研究《孙子兵法》和密码学。由于一时忽视各位女朋友,现在她们都另寻新欢了。不过倒也清净,毕竟她们也老了,省得稣裁掉她们,还要 N+1,万一怀上,还得 2N……多烧钱呐!
其实这系列故事是好多年前就想好的,只是一直写代码,没空写故事。再说这个故事其实就是稣的梦,有很大跳跃性,哪有那么容易写好!
没错!这些真的都是梦,劣者的创作只是把每个梦连起来,让它们有逻辑而已。一个明显的套路就是剧中有很多吓醒故事,看似无关,其实都是营造气氛,预测故事走向。
戒焦戒虑,勤思好学您就能看懂。主要因为这只是小说的草稿,就没打算让您懂,万一看懂,觉得故事太妙,到处被剽窃怎么办?稣的手稿在 9 年后将会十分值钱。哈。哦也。
那是必须的,等有经费就写!前传、后传,那都是商业套路,咳,现在主要工作还是写代码,多赚点钱。
19 年前佛祖转世谈恋爱谈恋爱去了,燃灯佛祖让位孙悟空。5 年前,玉帝也转世谈恋爱谈恋爱去了,太上道祖让位石敢当。9 年后,八哥之神转世谈恋爱谈恋爱谈恋爱去,八哥虫祖让位给稣。
没错!稣就是第八个无骨蠕虫。
没有!您不能先入为主呀!正剧已经说过“无神”,只是轮回而已。成神其实就是轮回转世,就是用嘴把人劝死,隐含作者一直推动安乐死合法化的决心。再次强调:没有神,只有神奇!
嗯,有这样的担心,另外还怕不明所以的读者对稣进行物理攻击!
举个例子吧!大学时,稣用“宇宙最大”做签名档,结果被很多人攻击,更有黑客跟踪稣多年,就是为了教育稣……其实“宇宙最大”表达的是“宇宙比人类的心大”,这是因为稣反对电视剧里说的“人心最大”,并非说自己是宇宙最大!
yup!稣从来没说自己是神!只想表达“八哥”太特么神奇了!万一有神论者理解成“自称是神”,对稣痛下杀手,稣不是白死了?吓尿呀!
明线一直都在强调“现实”从来不存在,这一切都是一个叫做“天道”的程序的运行结果。对意识来说,时间并非不可逆。
哦,也是有的!您看剧中大量六七十岁的角色和养老院的场景!
没错!中年危机不仅存在于程序员中!演员也是有的,老头老太能演青春偶像剧吗?
哦也,稣爱世人,包括老年人的!年轻人需要更多关爱老人,加强养老方面的物质以及精神建设。
陈因提,外号砂砂。在天道程序里叫陈立姻和陈提姻是不同迭代的名字。
嗯,堪称八哥系列最美最善解人意的。
当然!人类有情绪,有三千烦恼。大道无情,但能创造有情的人类。有情未必真比无情好。
不好意思,笑不出来……写个诗吧!
圣人半个已操群,
耶稣佛祖我都信。
一生大坑避无数,
半脚踏入鬼门关。
薛定谔的稣一直处于生与死、真与假的边缘。
当然!如来佛祖、昊天上帝和八哥之神也都很严肃,严肃不妨碍我们谈恋爱。而且谈恋爱这事,还是严肃对待才好!结婚更好慎重!
你开心就好。
]]>上篇《ECC Node.js》讲解椭圆曲线点的计算。本篇分析椭圆曲线签名算法。
https://github.com/UMU618/secp256k1-tools
已知,待签名数据为:
1 | const data = Buffer.from( |
运行 node ecc-sign.js
,信息摘要为:
1 | [ |
签名为:
1 | Uint8Array [ |
签名的字符串形式为:SIG_K1_Gg74ULRryVHxYZvMRLJgTrAZW6PZGC5SYfUiswtMJxBwfTTnGEnTejeWXopL2oSs8EZD7mqAC8mCps6VKq95Bgic9tGNHJ
数值全部使用 16 进制表示。
签名私钥:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
k = d2653ff7cbb2d8ff129ac27ef5781ce68b2558c41a74af1f2ddca635cbeef07d
对应的公钥:EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
K = [c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf
, eeceff7130fd352c698d2279967e2397f045479940bb4e7fb178fd9212fca8c0
]
信息先用 sha256 算法计算摘要,范例中值为 h = cc1839b254811f68631e64d203261fa88af8fc83c40ecb9822986695b55eb694
签名数据一共 65 字节,第一个字节 [27] 是 recoveryParam,使用前要先减去 27,它的一个作用是区别 y 坐标值的奇偶性,后面是两个 256bit 数,分别记为 x、s,x 是随机私钥 r 在椭圆曲线上的点 rG 的 x 坐标值,s = (h + k * x) / r。
x = 24d3d62d14db559646aee583ad143d2581e85013a424f98438244ad222dd62a4
s = 4406ed2af0e3d42169efc80b3b0b94e255d46afa9b221965459f8a9d722c26ca
注意:elliptic 库把本文的 x 记为 r,为了和算法保持一致,UMU 没有采用 elliptic 的标识方式。
24d3d62d14db559646aee583ad143d2581e85013a424f98438244ad222dd62a4
, bc336258d8f1789ad949773ef4abfe6a6e56c9dd77754e18869c7ab2801a4ae2
]1 | const BN = require('bn.js') |
u1 = h/s = b774bb6040cced0596626026679594b2b5478e6a5a8ba25b3411ed5360ea6bfa
u2 = x/s = 5697dfd4caab3caa0ed315a97f99f1ad7bce1ce85e0be32c63847d1dd4be327a
result = u1 * G + u2 * K = [24d3d62d14db559646aee583ad143d2581e85013a424f98438244ad222dd62a4
, bc336258d8f1789ad949773ef4abfe6a6e56c9dd77754e18869c7ab2801a4ae2
],与 rG 一致,签名验证通过。
1 | const BN = require('bn.js') |
参考:椭圆曲线加密和签名算法
hG/s + xK/s = hG/s + x(kG)/s = (h + xk)G/s = r(h + xk)G / (h + kx) = rG
]]>“死开,你知道大家为了你的毕生心愿付出多少努力吗?放弃抵抗吧!”
“砂砂,没想到你站他们那边!为了科研就可以草菅人命吗?这哪里是劣者的心愿!”
“长生不老,不是吗?你亲口和我说过,从小就有和孙悟空一样的长生想法,所以才喜欢看《西游记》!再说,我们也没有草菅人命,他们是自愿安乐死的。”
孙朝穆:“是呀,开哥,因提姐说的是事实,反正都是死,为科研贡献不是挺好的?”
“不!这有违契约精神……赫赫赫赫,在稣的平行宇宙中,没有人可以为非作歹,连稣自己都不行!”
贾力劣:“哦,那会怎么样?你都被我们抓起来了!”
“哼,一定会出现一个破局者!然后我们反败为胜,把你们统统抓起来关!”
“放开他!救世主来也!”
齐凤卿:“哇!真的有救兵?灯哥!”
“没错,就是我——督宇神照黄金灯大师是也!”
“大师!啊……”圣小开胸口中了一刀。
齐凤卿:“这……这,这难道是传说中的小灯飞刀?但是为什么射小开,有没有搞错?”
“是啊,为什么小灯飞刀是射稣?你有没有搞错?”
黄金灯:“稣,你心脏下方中刀,虽然一时不会毙命,但你再负隅顽抗,肯定很快失血而死。请积极配合治疗!”
稣:“好的,稣的命就交给大师了,快救命啊。”
贾力劣:“然后呢?你们怎么复活的,而且时间是怎么倒退五年的?”
圣小开:“这个劣者还没完全想起来。”
贾力劣:“可能只是你的梦而已,开哥别看太多科幻片,回头我送你一个美女机器人服侍你,包你满意!比你编这些狗血剧有意思多了!”
圣小开:“什么?你以为劣者老年痴呆呀?告诉你,劣者今天睡够八个小时的,比机器人还客观!你还想抵赖?”
贾力劣:“真不是我抵赖,就算你说的是真的,但是时间都倒退了,那也不算是我干的。你看我们现在这个世界不是一切都好好的?”
圣小开:“是哦!都撤销了……好吧,你的美女机器人赶紧送我,就当是赔礼!”
贾力劣:“一定一定!我的效率你放心,早就有所预备。”
圣小开:“不要耍花样,你要记住一句话!别人的记忆是连续的,而稣的,是离散的,量子化的!”
“什么?好深奥,不过我一定强行记忆……”贾力劣,心想:“好可怕呀,他好像快全部想起来了!”
]]>语言 | 有无 ++、-- 语法 |
---|---|
C/C++/C#/Java | 有 |
Go | 只支持放变量后,不支持放变量前 |
Python/Rust/Scala | 无 |
++、-- 一般是 +=、-= 的特例(除了 C++ 的迭代器),没有必要单独支持,新语言倾向于语法的单一性。
Python 的情况比较有意思,放后面是语法错误,放前面其实就是正负号,+ 写两次还是原来的数,- 写两次是负负得正,也还是原来的数。
语言 | 有无 ?: 语法 |
---|---|
C/C++/C#/Java/Swift | 有 |
Go/Python/Rust/Scala | 无 |
Rust 的 let = if else
就有 C 语言 ?:
的功能,即判断语句的子语句块可以有返回值。
语言 | 条件需不需要括号 |
---|---|
C/C++/Java/Scala | 需要 |
Go/Python/Rust/Swift | 不需要 |
字符是能少打一个是一个,有效预防鼠标手。另外,Go 和 Rust 的语句块必须包含于 {}。
语言 | 异常处理机制 |
---|---|
C/C++ | 编译器扩展 __try…__except…__finally, __leave |
C++/C#/Java/Scala/Swift | throw, try…catch…finally |
Python | raise, try…except…else, try…finally |
Go/Rust | 无 |
语言 | 换行符 |
---|---|
C/C++/C#/Java | 必须 |
JavaScript/Scala/Swift | 可选,有少数必须的情况 |
Python/Go | 无 |
Rust | 有是有,无是无(return),两者含义不同 |
Rust 有分号的是语句(statement),返回值是 (),即没有返回值。而没分号的是表达式(expression),返回值就是自身的值。
其实想说的是:有的 return 被简化掉了。省略 ; 就是省略 return,真香。但是,由于隐含 return,所以只能用于语句块的最后一行。
语言 | case 是否隐含 break |
---|---|
C/C++/C#/Java | 必须显式 break |
Go/Rust/Swift | 隐含 break |
Rust 优秀在用 match 代替 switch,明确告诉大家这是新语法,而 Go/Swift 用 switch,却改变 case 行为,还多出一个 fallthrough 关键字,容易引起鲸神魂裂。
]]>《诗盗·水龙头·无尽天坑》
古来云海茫茫,八哥奇语,神明何在?
填尽九沟四坑,人间自有,挨踢风采。
改编自“水龙吟”。
明,刘基,《水龙吟·鸡鸣风雨潇潇》
鸡鸣风雨萧萧,侧身天地无刘表。
啼鹃迸泪,落花飘恨,断魂飞绕。
月暗云霄,星沉烟水,角声清袅。
问登楼王粲、镜中白发,今宵又添都少?极目乡关何处?渺青山,髻螺都校。
几回好梦,随风归去,被渠遮了。
宝瑟弦僵,玉笙簧冷,冥鸿天杪。
但侵阶落草,满庭绿树,不知昏晓。
]]>宋,苏轼,《水龙吟·古来云海茫茫》
古来云海茫茫,道山绛阙知何处。
人间自有,赤城居士,龙蟠凤举。
清净无为,坐忘遗照,八篇奇语。
向玉霄东望,蓬莱暗霭,有云驾、骖风驭。行尽九州四海,笑纷纷、落花飞絮。
临江一见,谪仙风采,无言心许。
八表神游,浩然相对,酒酣箕踞。
待垂天赋就,骑鲸路稳,约相将去。
寒冬之下,同在一片天地,不管穷人富人,都要努力生产,不断奔跑才不会冻死。
欠牛日:软件园,字掉了。
生产基:生产者。
产:有时候也通“惨”。
1S 有两款硬件:hc5661 和 hc5661a,刷错变砖,而且要刷的文件名有点迷惑性,意不意外?
hc5661: https://breed.hackpascal.net/breed-mt7620-hiwifi-hc5761.bin
hc5661a: https://breed.hackpascal.net/breed-mt7628-hiwifi-hc5661a.bin
原版 bootloader 有 DHCP 功能,自身 IP 是 192.168.2.1,比较特殊。
这里以 hc5661 为例,版本是:HC5661 - 1.4.11.21001s,破解式 root 或开发者解锁后,可以直接 mtd unlock u-boot
,开不开心?
1 | BusyBox v1.22.1 (2018-05-10 05:32:57 CST) built-in shell (ash) |
刷完,捅菊花进入的信息是:
CPU | MediaTek MT7620A ver 2, eco 3 |
---|---|
内存 | 128MB DDR2 |
Flash | Winbond W25Q128 @ 24MHz (16MB) |
以太网 | MediaTek MT7620A built-in 5-port 10/100M switch |
时钟频率 | CPU: 580MHz, Bus: 193MHz |
编译日期 | 2018-12-29 [git-135bed9] |
版本 | 1.1 (r1266) |
版本 HC5861 - 1.4.10.20837s,一样能开发者解锁后直接刷。这种不保护 bootloader 的 ROM,也是醉了,真香……已经过保,也不想恢复官方 ROM,直接刷 BREED,再刷 OpenWRT 18.06.5。
1 | BusyBox v1.22.1 (2018-03-10 04:32:13 CST) built-in shell (ash) |
BREED 信息:
CPU | MediaTek MT7620A ver 2, eco 6 |
---|---|
内存 | 128MB DDR2 |
Flash | Winbond W25Q128 @ 24MHz (16MB) |
以太网 | MediaTek MT7620A built-in 5-port 10/100M switch |
时钟频率 | CPU: 580MHz, Bus: 193MHz |
编译日期 | 2018-12-29 [git-135bed9] |
版本 | 1.1 (r1266) |
嗯……这款路由器就是骗钱的。
这款最简单,直接捅菊花进官方恢复模式,刷这个文件:https://breed.hackpascal.net/breed-mt7620-lenovo-y1s.bin!
先官方 ROM 降级:xCloudOS_newifi-d1_Build20150922_v0.0.4.3500_beta_sign.bin 或更早的 xCloudOS_newifi-d1_Build_v0.0.4.2100_beta_sign.bin,自寻下载。
较老的版本可能和 Y1S 一样可以直接在恢复模式下刷,不过 UMU 忘记这样尝试。
0.0.4.3500, r33798 的版本,布局如下:
1 | ## cat /proc/mtd |
网上的刷机教程如下:
1 | cd /tmp |
原理:u-boot 分区不能直接刷,但 fullflash 分区可以刷,fullflash 其实包含了 u-boot。
fullflash = u-boot + u-boot-env + firmware
以上命令就是组合成一个适合刷到 fullflash 的文件,而且是用 BREED 覆盖了 u-boot,然后刷到 fullflash,这样 u-boot 就被覆盖了,其它分区还是原来的内容。
值得注意的是:刷完 BREED,捅菊花的位置变了,不再是捅原来的菊花……而是天线下方那个红十字按钮,这原是用于 WPS 的。
访问 http://192.168.99.1/newifi/ifiwen_hss.html 开启 SSHD,查看分区布局:
1 | BusyBox v1.24.1 (2018-02-27 16:23:44 CST) built-in shell (ash) |
这是被隐藏掉两个分区的!
高端刷法,是用一个内核模块来刷的,自寻 newifi-d2-jail-break.ko,参考文章:https://www.right.com.cn/forum/thread-365936-1-1.html
按以上链接刷好是 1.1 (r1237) 版,进 BREED 刷最新 BREED:https://breed.hackpascal.net/breed-mt7621-newifi-d2.bin
信息为:
CPU | MediaTek MT7621A ver 1, eco 3 |
---|---|
内存 | 512MB DDR3 |
Flash | Winbond W25Q256 @ 48MHz (32MB) |
以太网 | MediaTek MT7530 Gigabit switch |
时钟频率 | CPU: 880MHz, DDR: 1066MHz, Bus: 293MHz, Ref: 40MHz |
编译日期 | 2018-12-29 [git-135bed9] |
版本 | 1.1 (r1266) |
第二天凌晨 4 点多,圣小开一个翻身醒来,死神坐在床边……
圣小开以为是在做梦,便出脚踢死神,没想到落空了,但是也就清醒过来,原来不是做梦,是产生幻觉!
圣小开惊悚地想:“完蛋!生命遭到威胁,难道寿命大限快到了?”
恐惧了 3 秒……“赶紧睡吧,死在梦里舒服些!”
清晨,稣在杏林豪华酒店出来,发现刚下过雨,地上湿滑。酒店在山脚下,地势较高,要下很多台阶,才能去找贾总。
于是干脆穿个旱冰鞋就滑下来。滑了很久后,天又黑了,居然来到一片田野。四周都是高山,顺着泥路往东走,就来到盐田。盐田有很多黑乎乎的深井。
稣开始怀疑人生,这地方好像来过,小时候住在岛中央,往西走是盐田阻碍,往东走是田野阻碍,虽然后来都明白,这些只是小东西,很容易就走出去的,但小时候就是走不出去,仿佛被它们困住,外围的高山也是触不及的存在,曾经以为他们是世界的尽头。为什么这些场景,突然把稣困住?
几个老妇人从东边走来。稣心想:这地方居然有人,不会又是什么妖魔鬼怪吧!
只见老妇人越来越近,原来是挑水要去浇菜,看到稣,主动说:“年轻人,这里出不去,就和我一样,挑水种菜,过着田园生活吧!”
稣呵呵一笑:“什么年轻人?老夫 60 岁了!这样的生活好无聊,稣还是原路返回吧!”
另一个老妇人也呵呵大笑:“回不去啦!我们也不愿意呀……回不去,回不去!”
叮叮叮!一阵闹钟把稣拉回床上!好险,还好可以吓醒。
坐车去找贾总的路上发现,他的别墅就是在一片田野里,不过好在路是水泥路,杂草、农作物也没有梦里那么狰狞。
虽然如此圣小开的内心还是不得安宁。
此处省略无数对精英阶层别墅的描述和赞叹,尤其是那位日本籍女佣,简直无法言喻,只能用“咻咻咻”形容,好像前几天联网玩 S6x 游戏的那个萝莉……这个 S6x 系统正是贾力劣投资的项目,果然赚了好多钱。
贾力劣:“开哥,喜欢她?送一个给你?”
圣小开:“送?难道她是机器人?”
贾力劣:“是呀!”
贾力劣:“真像!有时候劣者怀疑大家都是机器人……”
贾力劣:“哈,开哥真爱开玩笑。不过你为何脸色不太好?”
圣小开:“是应该很差,劣者已经打过镇定剂才保持还好的!”
贾力劣:“赫赫,哥又开玩笑了!”
圣小开:“还真开不得玩笑……昨天去见齐总,想起一些不属于这个世界的事情。”
贾力劣:“哦?难道你也发病了!”
圣小开:“也?还有谁?”
贾力劣:“可不就是齐总,他可能被关出抑郁症,产生幻觉,然后感染了刘佾,现在又感染你。”
圣小开心想:“学长一点抑郁迹象都没有,而且经过锻炼,各方面比以前更积极向上,怎么会是病?肯定是贾总有问题。”于是话题一转,“贾总,还记得黄金灯吗?”
贾力劣:“嗯?我不认识这号人物呀!”
圣小开:“怎么会呢?你们打过架的。”
贾力劣:“开哥,我看你病的不清啊!你看我的职业是法官、投资人、教育家,会和人打架?”
圣小开:“你是不是信基督?”
贾力劣:“是啊,我们信基督的,讲究和平、和睦、和谐,怎么会打架?”
黄金灯:“小开先生,为何不少人称呼你为稣呀?”
稣:“自从成年后,劣者一直是信道的。多年前,劣者认识一群基督教徒,他们说不信基督就是异端,要下地狱。好吧,作为坚定的道生,劣者选择下地狱。但是佛教徒又说地狱其实是地藏王管的,是他们佛教的地盘。劣者内牛满面,连下地狱都不行?咳,没办法,谁让咱们道生太老实了。劣者想起老子化胡为佛的故事,于是给自己取了一个名字叫做‘稣’。”
黄金灯:“这样呀!大部分基督徒还是蛮和谐的,也有一些比较过分,非要强迫我信。”
稣:“哈,是的,贾总就是基督徒,我看他还好。”
黄金灯:“好啥呀,他是被我打过才改正的!”
稣:“咦?大师为何打他?”
黄金灯:“我在这里信徒多,时不时就有人来让我改信其它宗教。但咱们是讲科学的人,有哪种信仰能像道这么科学的?佛祖号称慧眼观遍三界,他有提出啥科学知识吗?没有,除了一句‘一滴水有三千虫’,瞎蒙点道理之外,几乎没有什么拿得出手的理论。佛和基督也只是劝人向善这点有些积极意义,其它的邪教就很可怕了……”
稣:“信仰不同而已,可以兼容嘛!”
黄金灯:“当然可以,但是有些人说我是神经病,要强行给我洗脑,冷不防进行爱的感化教育,我要是不做点什么,表个态,他们都以为我好欺负!”
稣:“所以,你打了贾总?”
黄金灯:“是的,他看起来最弱,我出手后,果然如此。换成其他人,我没把握能打赢!”
稣:“原来如此!看来上健身房练练肌肉是有用的!”
贾力劣:“奇了个怪!你这么说,我还真有点印象!”
圣小开:“咳,还以为你要抵赖!”
贾力劣:“这是怎么回事?你讲这故事之前,我一点印象都没有,你讲着讲着,我突然就想起来,好像这记忆是刚刚被注入!”
圣小开心想:“嗯?他也是突然才想起来?是不是装的,得再试探试探。”圣小开提高音量,义正言辞地说:“贾力劣!你想起自己干的坏事了吗?”
圣小开:“学长,劣者发现这个养老院的安乐死服务有古怪!”
齐凤卿:“我隐约也感觉不对劲。你是怎么发现的?”
圣小开:“劣者一直纳闷砂砂研究意识和记忆复制的那些人脑是哪里来的,她很少有事隐瞒,所以劣者自己调查了一番,大概可以推断出来源就是自愿安乐死的人。”
齐凤卿:“这不是挺好的?”
圣小开:“劣者听黄金灯说过养老院的很多人都是愿意死后捐赠遗体的,这里有个前提就是大家都将死亡定义为脑死,捐献的是遗体,并不包含能够用于研究意识、记忆的活脑。只有那些想安乐死的人才可能有活脑,问题是有人愿意把活脑捐出去?”
齐凤卿:“我是不愿意,很可能遭受惨绝人道、灭绝人性的科学研究……想想就吓出一身冷汗!”
圣小开:“以劣者愚见,这里的人都很聪明,应该没人愿意!除非技术已经成熟,大家可以享受到无风险服务。”
齐凤卿:“是的。不过话说回来,前几天孙朝穆告诉我,针对猴子的自身克隆体换脑术已经成熟,人类应该很快能享受恢复青春的美妙体验。”
圣小开:“这么说来应该更没人愿意捐献活脑了!即使一心求死的人,也没有理由捐,要是被试验得半死不活又永陷孤独与黑暗,不是哑巴吃黄连,比神话中说的十八层地狱、下油锅啥的还可怕。劣者严重怀疑,养老院是借安乐死之名非法取活脑!”
]]>有一天齐凤卿找到稣传话:“我们那个富二代同学贾力劣投资一家高科技的养老院,你有兴趣过来一起研究研究吗?”
稣:“养老院?学长别开玩笑了,劣者为何不住自己家?”
真实世界是叫学长,月球脑联网世界是叫师兄。
齐凤卿:“在家里太无聊,养老院有不少同学,你前妻也在这边。而且还有前沿技术研究所,我们可以自由自主搞研究。”
稣:“什么!这么牛逼的养老院肯定很贵吧,说出来让劣者哭一下。”
齐凤卿:“赫赫,以哥和贾总的关系,会坑你吗?当然是免费的。”
稣:“哦?劣者和他关系一般,而且几十年没联系的,他会这么好心?”
齐凤卿:“你忘记他钱多得没地方花吗?我们都在这边生活一年多了,贾总和周老师是大老板,你还不放心?”
稣:“周老师!他居然还活着……劣者倒要去会会他。”
虎纠一小县城有一个神经精神病防治院,院里最靠后山的一栋楼是非正常人类研究中心,中心内有一名神人,名唤黄金灯,自称领悟宇宙真理,信徒众多。
防治院隔着一条路的斜对面就是养老院。2047 年,稣退休后,在院长贾力劣的号(hu)召(you)下,和一群同学住进养老院。
稣刚到养老院时,与周老师的会面就在黄金灯的演讲会上。周老师聚精会神地听讲,稣坐在他身旁跟着听起来。
没有钴、镍、铜、锌、锡、碘等人类必须的微量元素,人类将无法生存。
比如铜元素在线粒体上的电子传递链起到关键作用,电子传递给氧气的最后一步需要细胞色素氧化酶复合体中铜离子的作用,可以说没有铜元素,就没有有氧呼吸,好氧生命也将不存在。
没有锌、镓、银、钨、金、汞、铅、铀等,也将没有第二次工业革命,人类文明无法向高等发展。
生命的演化过程少不了这些重元素的参与,地球上的 94 种自然元素是地球生命能进化到第三次信息革命的基础。而超新星是宇宙中重元素的来源。地球上排在铁之后的元素,都是超新星爆发时产生的。所以超新星是真正的生命摇篮,恒星的演化末期,却是生命的开端。
但超新星爆发同样可能扼杀生命。
稣:“周老师好,刚才的演讲您应该早就懂了,为什么还听得津津有味?”
周易:“小开,乐趣不仅限于思考新的东西,优美的乐曲可以反复欣赏,不是吗?”
贾力劣:“是的。这里的信徒都认为超新星是上帝用来创造生命的灯,生命已经被迭代过很多次,每次调试发现缺乏某种元素会导致某种智障,就重来一遍,最终凑齐 94 种自然元素。”
贾力劣信耶稣。
稣:“然后呢?集齐 94 中元素,才有资格去见造物神吗?”
稣信太上道。
周易:“哈哈哈,一种生命的智能程度要发达到可以跳脱虚幻去见外层造物神并没有那么容易,当今的人类还无法做到。但这是我们的研究方向。”
稣:“难道……我们在这里的真正目的是……”
贾力劣:“没错!我们都是快去见上帝的人。所以急迫地想研究出一种方法,可以活着见到上帝。”
稣:“哦!原来是召集我们一起写科幻小说!那陈砂砂应该对这不感兴趣,她怎么也来了?”
周易:“赫赫,我们是认真地做科研。她研究的是人脑的复制,是很关键的基础。”
圣小开一顿艰难地回忆,痛苦地低吟:“不可能,时间错乱了!”
齐凤卿:“开,我都记起来了,我亲眼看着你被取脑。原来他们要先取我的脑的,是你建议他们先取你,给我争取时间记下这些事。”
圣小开:“这更不可能了,劣者不记得自己这么英勇,还能舍己救人?开什么玩笑!再说,换个顺序能改变什么?劣者是让师兄逃跑吧!”
齐凤卿:“这我也不明白,可能你不敢看吧,反正我当时被感动了。”
圣小开:“哈哈哈哈哈,其实劣者乃是创世邪灵,在宇宙无尽轮回,这些生生死死都是小事,师兄不用放在心上。”
齐凤卿:“嗯,你当时和我说的,我还记得。我们生于无穷嵌套的宇宙牢笼,这里的每一个人都是一个平行宇宙,一个人死了,只是他的宇宙毁灭,其它人的宇宙还好好的。”
圣小开:“每个灵魂都会在每个肉身轮换,可以演过自己死后,下辈子却是演自己的父母!这种邪说,你也信?”
齐凤卿:“总之宇宙真奇妙!也许你转世到贾总身上就能发现真相。”
迷惑于宇宙,形累不知太初。
精神无始,冥乎无有。
圣小开:“原来线索在他身上,看来要冒险和他撕逼了!”
齐凤卿:“开,此去可能凶多吉少!”
圣小开:“死过很多次了,反正还会复活,无所谓。”
齐凤卿:“啥时候这么豁达了,你不是一向觉得记忆丢失很可惜吗?以后兄弟相见不相识,不是挺凄凉的?”
圣小开:“劣者现在有新的领悟,反复以低级的形式生存更可怕,被奴役却无法死亡更可怕。”
齐凤卿:“我们现在不就被控制着?记忆可能被消除,也可能被植入,无法分辨真假。”
圣小开:“超脱这个世界的时候到了!”
]]>1 | array = [] |
1 | array.length = 0 |
1 | array.splice(0, array.length) |
1 | while (array.length > 0) { |
Method 1 only reassign a:
1 | let a = [1, 2, 3] |
Method 2, 3, 4, will empty multiple variables referencing the same object:
1 | let a = [1, 2, 3] |
龙象:部分上层动物。
猪羊:猪队友坑人没压力,小绵羊低调养生。
做牛做马的在九九六的陶冶下废了。
百万存款加负号,
千万房产皆套牢。
中年危机纷纷扰,
区区小才不足道。
才逊管事社会浅,
技差高工专业偏。
洗练虚实岁月变,
观得云梯不可翻。
穷是最大的病。
]]>今天看到有网文《iptables+tproxy实现ss-redir的UDP转发的方法》说:“OpenWrt 做 UDP 转发需要的依赖是:iptables-mod-tproxy, kmod-ipt-tproxy 和 ip-full”。使用 opkg install ip
安装的默认是 ip-tiny,一般情况下都是够用的,不禁想弄明白两者有何区别。
拿 ip
命令对比测试:
1 | OBJECT := { link | address | route | rule | neigh | tunnel | maddress | |
1 | OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | |
即 ip-full 多了这些对象: addrlabel | ntable | tuntap | xfrm | l2tp | fou | tcp_metrics | netconf
。举个例子,只安装 ip-tiny 时,运行 ip xfrm
报错如下:
Object “xfrm” is unknown, try “ip help”.
相关知识:
xfrm is an IP framework for transforming packets (such as encrypting
their payloads). This framework is used to implement the IPsec
protocol suite (with the state object operating on the Security
Association Database, and the policy object operating on the Security
Policy Database). It is also used for the IP Payload Compression
Protocol and features of Mobile IPv6.
实际上,转发普通 UDP 包,并不需要 ip-full,ip-tiny 即可。
]]>原版 EOS 历史 API 插件将数据都保存在内存,随着历史数据越来越多,内存消耗高达 T 级以上,使得这个插件失去实用性。于是出现很多替代产品,比如把数据同步到 MongoDB,然后用 Nodejs 对接 MongoDB 来实现 API 服务。
2019 年 3 月份,MEET.ONE 实现了一个基于 MongoDB 的 EOS 历史 API 服务。劣者将去掉 MongoDB 交互部分的框架开源于 UMU618/eos-history-api-service。
这个 API 服务的开发者是公司另一名 Web 全栈开发,他测试通过之后,劣者用 cleos
一试,立马 bug!调试后端代码,发现 req.body 不是一个 JSON 对象。
劣者立刻用 tcpdump
抓包,发现 cleos
发出去的包并无异常,body 就是一段 JSON 数据。
交流后,发现测试工具的差异:劣者是 C++ 开发,自然而然使用 cleos
测试,而 Web 全栈开发对 cleos
比较陌生,他们会选择 postman 或者自己写测试性客户端。比如:
1 | const request = require('request-json') |
后来劣者写了一个简易的 Web 服务器,显示请求头。
1 | const http = require('http') |
经对比,cleos
发的请求不带 Content-Type。cleos
是 EOSIO 的官方工具,使用者众多,若不支持它是不合理的,后端也不能要求客户端都带上 Content-Type。
检查后端代码,其对 body 的解析是用 body-parser 完成的:
1 | app.use(bodyParser.json()) |
使用以下命令启动服务:
1 | DEBUG=body-parser:* node app.js |
发现有这样 2 行关键的调试信息:
1 | body-parser:json content-type undefined +0ms |
原来 body-parser 会检查 Content-Type,不符合它的预期,就不解析,于是 body 就不是 JSON 对象。
参考《Express 解析 json 格式 post 数据》后,我们这样解决:
1 | // 显式调用 JSON.parse 强行解析 |
但劣者认为以上方案比较不优雅,JavaScript 作为一门高级语言,我们希望更多专注于业务逻辑,尽量复用现有代码,少自己写工具性代码。下面探讨使用 body-parser 的解法。
劣者希望能告诉 body-parser 遇到不传 Content-Type 依然当它是 JSON 去解析。于是这就得去看它的代码!我们从上面关键的调试信息入手,可以很快发现:
1 | // determine if request should be parsed |
而 shouldParse 是可以由传入的选项影响的:
1 | function json (options) { |
于是最终的解决方案是:如果不传 Content-Type,当做 application/json;但如果有传,那得传对,否则也是不理。效果上,比之前无脑地当成 application/json,稍微好一些。实现上,则更优雅。代码如下:
1 | // Force body-parser to parse data as JSON |
(完)
]]>孙朝穆:“周老师的案例预示了我们当前技术的局限性。”
陈立姻:“是呀。人脑的寿命也是有限的,自然寿命才 185 年,现在的科技也只能延长到 800 年左右。”
孙朝穆:“必须研发新方案取代目前无脑人体装旧脑的方案!”
陈立姻:“复制猪脑的实验已经成功过几个案例,但无法验证复制出来的是不是同一只猪!人脑复制目前还没成功案例,很快死刑就要完全废止,到时候更难找到测试的志愿者。”
猪坚强。人娇嫩。
孙朝穆:“在下一直怀疑,复制过程中旧脑死亡,是无聊死或绝望死的。”
陈立姻:“有可能,之前你怀疑是吓死的,我们使用镇定剂后,持续时间变长了。”
圣小开加入对话:“两位大神在聊猪肉涨价吗?”
陈立姻:“死开,你耳朵越来越不好了……要不要给你换一个新耳朵?”
圣小开:“哟!这耳朵确实已经很乐射了,不过倒是清净,不换也罢。”
孙朝穆:“开哥!我们正在聊复制人脑,但最近都没有志愿者做实验,伤脑筋呢!”
圣小开:“哦……原来又在聊玩死,咳,人的科学实验!你们听过降落伞故障率如何降低的故事吗?”
孙朝穆:“哥又开玩笑了,我可没法给自己复制。”
圣小开:“孙总愿意献身的话,还不容易,让姻姻姐帮你。”
陈立姻:“少开玩笑,这个问题很严肃,目前形势也不容乐观。”
圣小开:“真不懂幽默,那些人都是被你们死板无聊的复制体验给憋死的,复制时让他们进识界玩玩 S6x 游戏,劣者就不信他们会想死。”
孙朝穆:“Diang!开哥果然英明,激起他们的性趣和求生欲,这是个不错的方向。”
陈立姻:“嗯?你们又在酝酿污的想法!”
圣小开:“耶!失去繁殖生命的冲动,和死有啥两样,激情,激情,你们懂吗?怎么感觉量子计算机创造的识界比你们人类还懂生命的意义?”
孙朝穆:“立姻姐,开哥说的可能就是解题关键。我们得把重心放在完善人脑全维度接入识界,然后找个志愿者试验新的复制方式。”
陈立姻:“哦哦,那我研究一下早期休眠停止发育的脑,如何在重新激活发育的过程中改写。”
孙朝穆:“对了,开哥,我们刚去看过凤哥,他想见你。”
圣小开:“嗯,是时候给你们找个志愿者了!”
孙朝穆:“啊?开哥,你想干嘛?”
圣小开:“凤哥不是很喜欢识界吗?劣者劝他移民识界算了,也省得蹲监狱。”
孙朝穆:“哦,有道理!去吧。”
齐凤卿:开,快进来坐。
圣小开:师兄,您怎么变帅了!那不是死不了了?
齐凤卿:什么死不了?人生 70 才开始。我在这边经常健身,也不熬夜了,身体比以前好很多。
圣小开:哦。小弟才 60。是说观众比较讨厌丑角,所以一般导演会让反派画一些妖异傻帽的妆,心理暗示观众诅咒他们早点挂掉。
齐凤卿:又开玩笑了。你觉得我是反派?
圣小开:当然不是。本剧最大的反派还没登场呢。
齐凤卿:嗯?难道你也预知到自己的劫数?
圣小开:是的,有些不明真相的人会搞破坏,咱们迟早会被害死。
齐凤卿:想必你没阻止我在识界大肆破坏,也是认清了这个世界的本质。
圣小开:是的,我们身处的世界和那个虚拟的识界其实没有本质区别。站在宇宙的角度看,毁灭和保护生灵,何者才是宇宙的意志?
齐凤卿:宇宙给人类自由主义的幻觉,人类会认为保护生灵才是真理。
圣小开:劣者并不认为哪者更正确,历史上那么多次战争,哪一次高维神明会出来阻止?杀累了,人类自己会回归和平。静静地观测才是劣者的设定。
齐凤卿:原来你认为自己是神……
圣小开:还不是,劣者只是用自然的角度思考问题而已。并且这场战争也不全是师兄造成的,识界本身就已经到了大战的临界点。不然委员会也不会只派两人走过场,还是一个想救,一个不想救的组合。而且大家判师兄入狱,一样是走过场,只是回收你的特权,关六个月后,不再限制你的人身自由。
齐凤卿:可惜刘佾不明白。
圣小开:师姐确实慈悲为怀……这是最厉害的杀器。
齐凤卿:不谈她了,我最近想明白很多事情。
圣小开:是不是委员会里有人想除掉咱们俩?
齐凤卿:虽然也有同感,但我想说的比这个更严重。是关于养老院的秘密。
]]>郁金香泡沫,又称郁金香效应,1636 年荷兰的郁金香投机是有据可查的人类历史上最早的泡沫经济案例。
在 1634 年以前,郁金香和其他花卉一样是由花农种植并直接经销的,价格波动的幅度并不大。在 1634 年底,荷兰的郁金香商人们组成了一种类似产业行会的组织(College),基本上控制了郁金香的交易市场。这个行会强行规定:任何郁金香买卖都必须要向行会缴纳费用。
1636 年底,荷兰郁金香市场上不仅买卖已经收获的郁金香球茎,而且还提前买卖在 1637 年将要收获的球茎。由于郁金香的需求上升,推动其价格上升,人们普遍看好郁金香的交易前景,纷纷投资购入郁金香合同。这是期货交易的雏形。
郁金香的交易被相对集中起来之后,买卖双方的信息得以迅速流通,交易成本被大大降低。在这个期货市场上没有很明确的规则,对买卖双方都没有什么具体约束。郁金香合同很容易被买进再卖出,在很短的时间内几经易手。这就使得商人们有可能在期货市场上翻云覆雨,买空卖空。在多次转手过程中,郁金香价格也被节节拔高。
在行会的控制和操纵之下,郁金香的价格被迅速抬了起来。买卖郁金香使得一些人获得了暴利。郁金香价格暴涨吸引了许多人从欧洲各地赶到荷兰,他们带来了大量资金。外国资本大量流入荷兰,给郁金香交易火上浇油。
1637 年新年前后,郁金香的期货合同在荷兰小酒店中被炒得热火朝天。到了 1637 年 2 月,倒买倒卖的人逐渐意识到郁金香交货的时间就快要到了。一旦把郁金香的球茎种到地里,也就很难再转手买卖。人们开始怀疑,花这么大的价钱买来的郁金香球茎就是开出花来到底能值多少钱?前不久还奇货可居的郁金香合同一下子就变成了烫手的山芋。持有郁金香合同的人宁可少要点价钱也要抛给别人。在人们信心动摇之后,郁金香价格立刻就开始下降。价格下降导致人们进一步丧失对郁金香市场的信心。持有郁金香合同的人迫不及待地要脱手,可是,在这个关头很难找到“傻瓜”。恶性循环的结果导致郁金香市场全线崩溃。
郁金香泡沫的高峰期仅仅持续了一个多月。由于许多郁金香合同在短时间内已经多次转手买卖且尚未交割完毕,最后一个持有郁金香合同的人开始向前面一个卖主追讨货款。这个人又向前面的人索债。荷兰的郁金香市场从昔日的景气场面顿时间变成了凄风苦雨和逼债逃债的地狱。
现在 00 后炒鞋就和以前荷兰人炒郁金香一样,鞋穿不炒。
幸存者偏差是指当取得资讯的渠道仅来自于幸存者时(因为死人不会说话),此资讯可能会存在与实际情况不同的偏差。
此规律也适用于金融和商业领域。存活下来的企业往往被视为“传奇”,它们的做法被争相效仿。而其实有些也许只是因为偶然原因幸存下来而已。
在鞋圈、币圈,最明显的例子就是“我炒鞋赚大钱”或者“我一个朋友炒币亏得倾家荡产”等等。不管你的朋友和你关系如何好,如何值得信任和尊重,在客观规律面前他们都是等同的。市场不会因为你的喜好而照顾或者偏袒你的亲朋。
最近火热的炒鞋,收益翻倍的同样是少数幸存者。其实炒鞋历史悠久,最近才进入大众视野,为的就是大面积收割。
双盲实验和详细全面客观的数据纪录都是应对“幸存者偏差”的良方。所谓“兼听则明”也是这个道理,抛掉对个案的迷信,全面系统的了解才能克服这个偏差。
80/20 法则(The 80/20 Rule)又称为帕累托法则(Pareto Principle)、二八定律、帕累托定律、最省力法则、不平衡原则、犹太法则、马特莱法则。生活中大多数事情不是均匀分布的,大多数结果来自少数投入:
此法则是由美国罗马尼亚工程师约瑟夫·朱兰(Joseph M. Juran)博士根据维尔弗雷多·帕累托当年对意大利 20% 的人口拥有 80% 的财产的观察而推论出来的。约瑟夫·朱兰是举世公认的现代质量控制之父,他在 20 世纪 40 年代,开始将帕累托法则应用于质量问题。
炒股、炒币、炒鞋,赚大钱的都是少数人。
400 多年前,英国经济学家格雷欣发现了一有趣现象,两种实际价值不同而名义价值相同的货币同时流通时,实际价值较高的货币,即良币,必然退出流通——它们被收藏、熔化或被输出国外;实际价值较低的货币,即劣币,则充斥市场。人们称之为格雷欣法则,亦称之为劣币驱逐良币规律。
格雷欣法则在现代企业薪酬方面改革的贡献尤为突出。而在币圈,我们看的是格雷欣法则的逆反现象,因为数字货币是由信仰定义价值,没有国家或法律力量维系,所以劣币不仅无法驱逐良币,最终还会反被良币消灭。
环境中的不良现象如果被放任存在,会诱使人们仿效,甚至变本加厉。
生活中的例子:路边角落有些许纸屑,如果无人清理,不久后就会有更多垃圾,最终沦为垃圾堆。
破窗效应常出现于股票市场、社区治理,币圈自然也常见。
粉丝容易因为信任名人而成为韭菜。但名人效应有时候会逐渐减弱,甚至在某些方面他们会完全没有效应。
破解名人效应的方法是独立思考。《大般涅槃经》有云:依法不依人,依义不依语,依智不依识。不因为他是名人、大师就信以为真。不因为符合逻辑或自己的观念,就信以为真。
这里讲一个寓言故事:
蝎子要过河,对身边不远处的青蛙说:“我想过河,但不会游泳,你可以背我过去吗?”
青蛙回答:“不行。你有个毒钩子,如果我背你到河心,你蜇我,那我岂不是死翘翘!”
听完青蛙的话,蝎子哈哈大笑:“不会的!我要是蜇死你,自己也会落水淹死。”
青蛙一想也是,就背起蝎子。当他们游到河心时,青蛙突然感应背上一阵撕心裂肺的痛,接着便四肢发麻。青蛙用最后的力气问道:“你想自杀?”
蝎子答道:“谁想自杀呀?我蜇你完全是出于下意识。”说完,这两个家伙双双沉入河底。
逻辑只在理性时有效,而下意识往往能战胜理性。在币圈,保持冷静和有意识主动控制情绪是必须的。
“Those whom God wishes to destroy, he first makes mad.” ——Euripides
损失厌恶是指人们面对同样数量的收益和损失时,认为损失更加令他们难以忍受。同量的损失带来的负效用为同量收益的正效用的 2.5 倍。
一美元拍卖陷阱是著名博弈论专家,耶鲁大学教授马丁·舒比克(M.Shubik)设计的经典案例。
在某大型场合,拍卖人拿出 1 张 1 美元钞票,请大家给这张钞票开价,每次叫价的增幅以 5 美分为单位,出价最高者得到这张 1 美元,但出价最高和次高者都要向拍卖人支付出价数目的费用。
最终出价最高和次高者因为厌恶损失(Loss Aversion),导致越陷越深的沼泽陷阱。1 美元拍卖在哈佛大学、耶鲁大学等高校进行过多次实验,最终的报价在 20 到 66 美元之间。
在币圈,此理论是交易所常用的盈利手段。举个例子:上币。交易所可以规定,交 1000 万人民币直接上主站,如果没这么多钱,还有机会,每个月交易所从测试站多个竞争币中选择一个符合要求的上主站。这可能导致一美元拍卖陷阱,最终多个竞争币拼命竞争,最终交易所赚到不止 1000 万人民币。
囚徒困境是博弈论的非零和博弈中具代表性的例子,反映个人最佳选择并非团体最佳选择。囚徒困境最早由美国普林斯顿大学数学家阿尔伯特·塔克(Albert tucker)1950年提出。他当时编了一个故事向斯坦福大学的一群心理学家们解释什么是博弈论,这个故事后来成为博弈论中最著名的案例。故事内容是:两个嫌疑犯(A和B)作案后被警察抓住,隔离审讯;警方的政策是“坦白从宽,抗拒从严”,如果两人都坦白则各判 8 年;如果一人坦白另一人不坦白,坦白的放出去,不坦白的判 10 年;如果都不坦白则因证据不足各判 1 年。
囚徒困境的主旨为,虽然囚徒们彼此合作,坚不吐实,可为全体带来最佳利益,但在资讯不明的情况下,因为出卖同伙可为自己带来利益(缩短刑期),也因为同伙把自己招出来可为他带来利益,因此彼此出卖虽违反最佳共同利益,反而是自己最大利益所在。
单次发生的囚徒困境,和多次重复的囚徒困境结果不会一样。在重复的囚徒困境中,博弈被反复地进行。因而每个参与者都有机会去“惩罚”另一个参与者前一回合的不合作行为。欺骗的动机可能被受到惩罚的威胁所克服,从而可能导向一个较好的、合作的结果。这时,合作可能会作为均衡的结果出现,称之为纳什均衡 (Nash Equilibrium)。作为反复接近无限的数量,纳什均衡趋向于帕累托最优。
由囚徒困境可以想到类似的韭菜困境:大跌时,韭菜无法信任其它韭菜,纷纷割肉快跑。
]]>齐凤卿的宠物暹罗猫咬伤周老师喉咙,但由于换脑及时,周老师只是神志不清一段时间,并损失一部分记忆,定罪齐凤卿故意唆使杀人未遂,判处有期徒刑十年。
圣小开:“劣者建议改为冰冻十年。齐先生是有用之才,关十年不死也残废,不如冰起来,十年后还能用。”
孙朝穆:“有道理,我正在研究这个技术。以往的技术都无法保证人能活着,没死都给冰死,实乃以科学研究为借口的杀人利器。”
齐凤卿:“两位师弟是公报私仇,打算玩死我吗?大家可别听他们。”
委员会 23 名成员,周老师还在监护中,薛雾霰缺席,齐凤卿自己是犯人,还剩 20 名可以投票,只要 11 票就可以判决。
投完票正好是 10 票冰冻,10 票关监狱。
齐凤卿:“我投自己无罪释放。你们这些 NPC,知道我的功劳吗?我是为了大家的未来!”
代理主席贾力劣:“对不起,你已经被取消投票权。”
齐凤卿:“圣小开同学就赞同我的做法,你们是不是连他一起判刑?”
圣小开:“喝喝喝,劣者啥都没干,假装赞同你,是为了分散你的注意,别当真了!”
齐凤卿:“别装了,刘佾可以作证,而且我的做法确实对各位是有利的,你们别装圣人。周老师的喉咙是宠物咬的,你们假设这是我指示,没有科学取证,属于非法执法!”
刘佾:“圣小开在识界里确实说过他赞同凤卿的做法,他还故意不放大招阻止凤卿。”
圣小开:“咳,姐,你不知道他偷了周老师的特权吗?加上他自己的特权,谁打得赢他?你自己不要命,别拉劣者一起死呀!”
陈立姻:“我作证,圣小开胆小如鼠,他只是怕做无谓的牺牲。而且他做事经常犹豫不决,量子力学,大家都知道的。麻烦回到主题。”
月球上的薛雾霰远程进入会议。大家纷纷欢迎首席科学家老薛。其实他年轻得很……换脑手术之后去月球研究氦-3能源。
薛雾霰:“我刚和周老师通过话,他还很虚弱不方便亲临,让我问一下大家,记得世界是怎么突变成现在这样的吗?”
奇怪!居然没人记得……
灭霸:我不当背锅侠!
“没错,几乎没人知道。周老师和我的看法一致,我们这个世界并非顶层世界,外面很可能还有一层更高级的文明,甚至更多层,他们创造我们这个世界。当年,他们中的某些人也无视规则,进入我们的世界摧毁大部分生灵。大家发挥一下同理心,外面的高级文明如果不惩罚他们中乱来搞破坏的人,那我们的世界将毁灭至何等地步?我们怎么能放任同样的人,存在于你我之中?”
镜头切换,有这样的老头,再切换,有那样的老太婆……各个感动得老泪纵横。
这就是为什么本剧主角经常进入识界。现实中是老头,进入识界后是年轻的帅哥,何乐而不为呢!本剧以后是要拍成电影的,老是播放老人世界,观众们也不爱看嘛!
刘佾:“首席大人,你说得对。那是不是连圣小开一起关几年?杜绝他邪恶的想法!”
识界里的刘佾是本剧最性感的女角。
圣小开:“姐,您还真不放过小弟,给你跪了行不行?当时大伙准备派人进识界救场时,劣者就说了难当此大任,你们非要说劣者街霸打得好,还给劣者特权安慰,结果经劣者分析还是打不赢,劣者怀疑……咳咳。齐总的特权实在吓人,认输还要坐牢吗?赤果果的陷害!”
圣小开心想:肯定有人给劣者下套。
薛雾霰:“周老师说识界必须修复,这个任务就交给开哥吧!霰人去也。”
圣小开:“喂,识界代码还有人看得懂吗?你们这些死产品经理,一句话玩死一批程序员!”
薛雾霰又冒出来:“我不只是产品经理,还是领导!霰人再去也。”
贾力劣:“心灵生化武器的传染和起作用都很慢,我们还有时间。必要时,我们可以减慢识界时间流速。”
圣小开:“那劣者先去睡了?”
陈立姻:“五年内意识上传系统会开发完善,你到时候进去感染一下心灵生化武器,自己体会怎么破解吧!”
圣小开:“感染死掉怎么办?”
陈立姻:“嘿,你不是号称一生受过无数劫苦难,现在都没死,小小心灵病毒怎么斗得过你?”
圣小开:“说得好有道理,你们慢点开发,让劣者多活几年!”
孙朝穆:“开哥,放心!我多请几天假就行,diang~”
齐凤卿:“你们瞎扯完了没?让我清静清静。”随即内牛满面地认错,“我选择关监狱,能打个折吗?”
贾力劣:“关八年。”
周易穿越时间从梦中吓醒:“立姻、朝穆,为了应对未来潜在风险,你们去制造一些基因改良人,他们必须有强大的生育能力和意愿。”
有读者问:周易是谁?
答:作者打算请周星驰来演。他老人家出场费很贵,所以是主角里出场频率比较低的。
孙朝穆:“老师,这是为何?”
周易:“保存记忆同时也会保留心灵上的痛苦,将来会有需要不保留记忆转世,但现在的自然人生育能力都有问题,而且也不愿意生育。”
这是一个没有爱情的时代。
人类发明了长生术——换脑,还即将发明永生术——意识上传。所以生殖失去意义。大部分人都没有生殖意愿,有的连爱都不做。
自然人都上了年纪,生育能力肯定是没有的啦,这辈子都不会再有……
克隆体换脑人的性方面没有发育,是由于其是基因工程设计出来的无脑身体,由外部设备催化生长。大脑才是最大的性腺,而脑都是老脑。
有读者问:为什么不注入性激素呢?
答:您知道养猪吧!公猪、母猪都要阉割的,不阉割不好养呀!而且会有骚味。嗯,这就是为什么太后们喜欢太监,阉割后真的会比较香哦,不然为什么有这么多“臭男人骚女人”?
早期 AVILab 有尝试过注入性激素,结果这些脑残的身体竟不由自主地进行某些操作,实在不好kan管ru理mu。
陈立姻:“但是这些改良人类的社会地位可能很尴尬,和现在主流的造躯体换脑大大不同,他们是被创造的新生,这在以前就被禁止。”
周易:“现在的社会阶级太单一,长久运行后所有人都会变成老妖怪,迟早会出八哥。老师现在丢失一部分记忆,从身体和精神上都年轻许多,这种感觉,你们迟早会理解的。委员会讨论吧,讨论过就制定计划给我过目。”
遗忘一时爽,一直遗忘一直爽。
孙朝穆:“老师,我记得当年老薛换脑的新身体是有生育能力的。”
陈立姻:“是呀,他的女助手王兔兔也有,现在他们俩都在月球上,不会是私奔生孩子去了吧!”
周易:“他们如果愿意生育是可以的。为了人类的发展,有些尝试还是要的。”
孙朝穆、孙朝穆纷纷表示恍然大悟:“原来如此……首席辛苦了!”
]]>生孩子一时爽,不生更爽,一直不生一直更爽。
上篇《基于 ECC 的私钥转为公钥的过程》讲到求椭圆曲线上的点时,用的是基于 Python 的 SAGE。为了方便 Node.js 程序员理解和实现完整流程代码,本篇用 Node.js 库实现椭圆曲线点的计算。
库的选型考虑 eosjs 用的 ecurve 和 elliptic。
1 | const ecurve = require('ecurve') |
得到 x 值为 c0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf
,y 为偶数,和 SAGE 计算结果一样。
流程基本一样,所以这里给出完整转换代码。
1 | /** |
elliptic 比较好用,比较快。
洞:翔安隧道
东:两分钟
ECC 体系中,私钥是一个大型随机数,而公钥则是私钥乘以椭圆曲线上的基点后对应的点。
meet-one/private-to-public 是 MEET.ONE 开发的私钥转公钥工具。
EOS 支持的 EC 有两种:secp256k1(以下简称 k1)、secp256r1,下面以 k1 为例,结合 Node.js 和 Python 代码介绍转换过程。
假设私钥为:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
,这是 base58 编码,用 bs58 库解码:
1 | const bs = require('bs58') |
得到 <Buffer 80 d2 65 3f f7 cb b2 d8 ff 12 9a c2 7e f5 78 1c e6 8b 25 58 c4 1a 74 af 1f 2d dc a6 35 cb ee f0 7d aa 08 64 4a>
,其中第 1 个字节 0x80
是类型,末尾的 4 字节是校验码。
这里我们不关心校验码,也可以直接用 bs58check
解码:
1 | const bsc = require('bs58check') |
得到 <Buffer 80 d2 65 3f f7 cb b2 d8 ff 12 9a c2 7e f5 78 1c e6 8b 25 58 c4 1a 74 af 1f 2d dc a6 35 cb ee f0 7d>
,去掉首字节后为:
d2 65 3f f7 cb b2 d8 ff 12 9a c2 7e f5 78 1c e6 8b 25 58 c4 1a 74 af 1f 2d dc a6 35 cb ee f0 7d
这是 256bit 整数的 Big endian 字节流表示,转为 16 进制整形为 0xd2653ff7cbb2d8ff129ac27ef5781ce68b2558c41a74af1f2ddca635cbeef07d
,记为 pk
。
根据 SECG 规定的 k1 的参数,我们用基于 Python 的 SAGE 构造 k1 对应的椭圆曲线,然后计算 pk * G
:
1 | a = 0 |
结果为:(87237761414843254130560834629777710286905276524352264071298714336416392033743 : 108016191455113306196371645921919775466659772908675410052799661524790827329728 : 1)
注:这里的 (x : y : z) 是射影坐标,一般采用笛卡尔坐标系表示,为 (x/z, y/z)。
取 x 值:87237761414843254130560834629777710286905276524352264071298714336416392033743
16 进制为:0xc0ded2bc1f1305fb0faac5e6c03ee3a1924234985427b6167ca569d13df435cf
Big endian 字节流表示为:[0xc0, 0xde, 0xd2, 0xbc, 0x1f, 0x13, 0x05, 0xfb, 0x0f, 0xaa, 0xc5, 0xe6, 0xc0, 0x3e, 0xe3, 0xa1, 0x92, 0x42, 0x34, 0x98, 0x54, 0x27, 0xb6, 0x16, 0x7c, 0xa5, 0x69, 0xd1, 0x3d, 0xf4, 0x35, 0xcf]
由于 y 值是偶数,所以添加一个前缀 2,得到:[2, 0xc0, 0xde, 0xd2, 0xbc, 0x1f, 0x13, 0x05, 0xfb, 0x0f, 0xaa, 0xc5, 0xe6, 0xc0, 0x3e, 0xe3, 0xa1, 0x92, 0x42, 0x34, 0x98, 0x54, 0x27, 0xb6, 0x16, 0x7c, 0xa5, 0x69, 0xd1, 0x3d, 0xf4, 0x35, 0xcf]
注:若 y 为奇数,则前缀为 3。
注:为什么这么规定?只用 x 值和 y 值的奇偶性表示一个点,这叫公钥的压缩格式。因为只要有 x,就可以通过 k1 的椭圆曲线方程式 $y^2 = x^3 + 7 \mod p$ 求出 y,但此时 y 会有两个解,又由于 p 是一个大质数,必定为奇数,故两个 y 解的和 mod p 一定等于 0,即一奇一偶,所以用 x 和 y 的奇偶性标志即可代表这个点。
接着求校验码:
1 | const ripemd160 = require('ripemd160') |
得到:<Buffer eb 05 f9 d2 c6 dd 62 f7 f2 a0 f7 61 ea 1d 8c 0b 84 4a 3b 52>
,取前 4 字节,添加到末尾,得到:[2, 0xc0, 0xde, 0xd2, 0xbc, 0x1f, 0x13, 0x05, 0xfb, 0x0f, 0xaa, 0xc5, 0xe6, 0xc0, 0x3e, 0xe3, 0xa1, 0x92, 0x42, 0x34, 0x98, 0x54, 0x27, 0xb6, 0x16, 0x7c, 0xa5, 0x69, 0xd1, 0x3d, 0xf4, 0x35, 0xcf, 0xeb, 0x05, 0xf9, 0xd2]
然后,base58 编码:
1 | const bs = require('bs58') |
得到:6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
,加上前缀 EOS
,即为公钥。
东:两分钟
吃巧克力真的可以减肥!具体做法:只吃巧克力。快饿晕时吃一点,决不能多。
]]>今日高温,午睡时突然忆起前几天的怪梦。平时不关心红尘凡事,日子平淡无奇,但梦境却实在很神奇,仿佛另一个世界。
自己漂浮在云层里,看到鲲鹏的翅膀在摇动,感觉还挺萌的,然后却发现翅膀是从自己身上长出去的……原来自己就是那只鲲鹏!
龙卷风把海水吸到云层里,看起来很像鲲化鹏,这两种形态的转化很快,梦的转变也很快,黑色的梦境,吓醒后是白天,我又从鲲鹏变回自己,就像穿梭在两个平行宇宙。
前两句改编自霹雳角色“道锋天扇子”出场诗:
]]>浮生寄墟丘,不与红尘谋,身披烟波立云舟。
一扇擎青穹,飘洒翳孤踪,梦变鲲鹏振长空。
平时淡然处世,心思平静,一旦动情就会得相思病,这都是因为有不切实际的欲望。
夜色已晚,开着百万豪车回家,因为楼太高,地下车位不够用,太晚回都找不到车位,如果是乐射车就放心随便停路边了,所以说——有点钱又不够有钱,是最难受的。
总之,还是没心没肺才能过得好!(我宁愿有钱、有心、有肺……)
改编自唐代诗人李白的《菩萨蛮·闺情》:
]]>平林漠漠烟如织,寒山一带伤心碧。
暝色入高楼,有人楼上愁。
玉阶空伫立,宿鸟归飞急。
何处是归程?长亭更短亭。
一日晚,齐凤卿带着宠物找周老师释疑。
“周老师,委员会一旦把识界系统超级控制权限拆分管理,必将阻碍科研效率。”
“凤卿,识界硬件和软件层面已经很完善,现在需要让它自由发展,我们后期侧重点应该放在接入系统。”
“这就是我想说的,等我们接入系统也完善后,人人都可以把意识上传到识界里生活,到时候识界内部的社会形态如果与现在的科学主义社会不同,我们如何更好地去改善呢?识界可是比当今世界更复杂。”
“你想使用特权改变识界?”
“没错,我们现在生活的地下城比起识界里的自然环境差太多,而且如果情况继续恶化,独立可控核聚变供电的识界才是人类最佳归处。我希望在识界里,我们还有特权,才能不受各种潜在危害,安心做科研。”
“这事情先不用操心,接入技术需要五、六年才会成熟,还早呢!老师 95 岁的人都不担心,你担心啥?”
“我担心的是委员会成员多数不希望我们在识界里扮演神灵,到时候我们和识界自然演绎出来的人类没有任何差别,岂不是像被关进监狱?”
“哈哈哈,你师弟不是经常说在这里像坐牢?这个宇宙,哪里不是牢笼?”
“是啊,可是那家伙明明有和我一样的担忧,却投票支持不保留特权!”
“他和薛雾霰曾经把时间停止,你知道吗?”
“识界吗?这不是很正常的?”
“不是,是现实世界。”
“嗯?时间停止,我们的观察、思考也都停止,怎么发现到底停止没?”
“时间停止时,只有引力波还在起作用。”
“饶了我吧,这不是我研究的领域。我还是关心识界以后的管理问题。”
“以后就自治吧,我们不应该干预自然规则,就像在现实世界,我们只能利用自然规则,部分改造我们的生存环境,而不能违逆规则。”
“既然如此,我认为应该减少识界里的人类,让其更像我们现在的人口状况。”
“你想干什么?”
“我之前一直在识界里培养我的信徒和菌队,是时候来一场识界大战了。”
周易被猫科动物咬伤濒死。陈立姻和孙朝穆为周易做换脑手术。
试玉要烧三日满,辨材须待七年期。向使当初身便死,一生真伪复谁知。
这个世界为游戏而生,现实的开发者为创造真实的场景,曾经用特权给识界某些公司输送资源,从而构造了强大的菌事基地。又用特权控制和改造某些关键人物的思想,达到统治的目的。
齐凤卿用自己的基因在识界克隆了一个替身,但替身并没有他的意识,无法与他心灵相通,这让他一直努力推动意识复制技术。
齐凤卿抢夺周易的特权,远离 AVILab,在神秘人物薛雾霰家的游戏机,通过特权进入识界。
薛雾霰:雾草,开哥你这是什么安排?本霰人上天探索,别墅交你们打理,怎么被用来搞黑客入侵了??
圣小开:因为你是量子领域的专家,住所隐秘,适合干坏事。放心!保证完好无缺。
识界正上演消灭脑残玩家的大战。齐凤卿教唆现实中几名游戏玩家开启上帝视角协助识界中的齐家菌疯狂杀戮识界生灵。
耶乎知稣、心理邪稣、量子邪稣和刘佾,三人牛逼轰轰地降临,开始反杀齐家菌。
很快齐凤卿发现异常,打死耶乎知稣,心理邪稣定位到齐凤卿,猛力攻击。
齐凤卿化身为魔凤,一口吃掉心理邪稣。
魔凤是金色的,不要以为是黑色……
心理邪稣的遗言:“稣有个秘密要告诉你!你大学时的女朋友……”。
地面自动升起一块墓碑,刻着:圣小开之墓。
量子邪稣一看心惊胆战,内牛满面,再观天上的魔凤变幻出多种怪异形状,赶紧对刘佾说:“不妙,快跑路!”
刘佾:“跑?怎么能见死不救?”
量子邪稣:“自己都快被打死了,还救别人?”
刘佾:“没事,我们被打死还能回现实,重新选择角色,再进来。但是这里生灵涂炭,于心何忍?为苍生拼了!”
量子邪稣:“别傻了,咱们再来几次也打不赢他,被打死的不一样是识界里的人?”
刘佾:“我也开外挂,不信打不赢!”
刘佾化身八翼应龙,大战魔凤,依然不敌被拍落地面。
量子邪稣:“稣就说打不赢吧!你没发现那只魔凤是四维的吗?他现在可以轻而易举地捏碎稣的蛋,而且不伤蛋壳。咱们打不过他的。”
识界设计时,使用四维坐标系,只有特权程序可以把第四维设置为非零。
刘佾:“你现在才说……咱们现在没有蛋!还有,你为什么不放大招?”
量子邪稣:“这不是没证据吗?你又不听稣的!大招也不一定能赢。赶紧投降,和他讲交情,稣继续隐藏在量子领域,不被观测。”
刘佾:“讲交情有用?”
量子邪稣:“你们读研时不是男女朋友吗?马上投降,赞同他的理念先!”
刘佾:“臣妾做不到呀!”
量子邪稣:“你这个,圣,咳,母婊!稣来!藏在你身上就是为了飙演技……”
刘佾:“臭师弟,你骂谁呢!”
量子邪佾:“哥,我投降,你是对的,这些傻逼应该消灭!”
魔凤:“圣小开还有好几个分身在哪里?别以为我不知道他是精神分裂!让我连入你的意识,把他找出来!”
量子邪佾:“哥,连我也没用,他又没和我联机。”
魔凤从第四维靠近量子邪佾:“骗谁呢?我插!”
量子邪稣:“师兄!”
齐凤卿:“嗯哼?原来你在这里!领死,还是归降?”
量子邪稣:“师兄此言差矣!在这里,你根本不是稣的对手!”
齐凤卿:“但我可以控制物理世界的魔凤,毁灭你的肉身。识界里有特权的角色已所剩无几,最终你们无法阻止我。”
量子邪稣:“这不是挺好的嘛!稣本来就赞同你的做法,只是这罪名要你担而已,稣轻轻松松躺赢。”
齐凤卿:“赫赫,你这小子,果然心机深沉,但是好人有这么好当的吗?受死吧!”
量子邪稣:“等等,稣啥时候说过自己是好人啦?邪稣的邪字放在前面呢!”
齐凤卿:“装模作样!消失吧!”
刘佾:“喂喂,不要把我一起打死啊……你们又没有必然的矛盾,为啥不合作?”
量子邪稣:“就是,你就背个黑锅,假装被稣打死,稣回去让委员会判你几年有期徒刑完事,这不是双赢吗?”
齐凤卿:“赫赫,鬼算盘打得很精,好事都你占?凭什么我倒霉!”
刘佾:“哥,你的宠物咬死周老师,这是大罪。还是收手吧!”
齐凤卿:“确定死了?”
量子邪稣:“不确定,我们进来时还在抢救,用的是换脑术,取决于脑是否能活下来。你和我们一起出去和平解决,这里的战争,咱们就当一个八哥。”
齐凤卿:“我已经下令释放心灵生化武器,再打死你们,我就出去!”
魔凤将量子邪佾打爆。然而,同一瞬间阎无邪手持冥邪天锋化现,地狱恶灵纷纷缠住魔凤,无邪顺势一剑砍下凤头。
但是,魔凤的头断并不致命,继续长出其它的头。无邪酱油退场。
心灵生化武器被释放,开启一场无声无息的众生苦难。整个识界自杀率大大提升……
然而,在现实世界,齐凤卿不能上天入地,还是被抓起来了。赫赫!
齐凤卿:“这场游戏打得真爽!”
]]>用户可能因为资源(NET 和 CPU)匮乏,无法愉快地使用 EOS 智能合约。
智能合约承担事务的开销(NET 和 CPU)。
eos 1.8 的 ONLY_BILL_FIRST_AUTHORIZER 特性,通过只向事务的首个授权方收费的方式,部分地解决这个问题。这一特性允许应用提供者对用户的每一笔事务进行联合签名,通过这一方式从公共池中支付事务的开销。
缺陷:联合签名操作门槛高,安全性堪忧。
Contracts Paying Transaction Costs 提出一种无需联合签名的方法(注意:目前还只是提案,尚未实现)。
关键函数如下:
1 | bool accept_charges( |
简单地说,在合约调用 accept_charges
函数,如返回 true
,则事务的开销将会由合约账户承担。
具体规则如下:
如果多个合约调用了 accept_charges
,则首个调用者会被收取费用。accept_charges
会返回 true
给该合约,而返回 false
值给其他的合约。
如果首个合约调用了多次该函数(用于修改限制),无论是在相同的 action 还是不同的多个 action 之中,每次都会返回 true。
关键点讲完了,其余请参考 Contracts Paying Transaction Costs 原文或译文。
]]>商家为了赚钱,一年催大家过三次情人节,堪比谋杀……先虐情侣的钱包,再通过情侣秀恩爱虐单身狗。
今天想日却发现没钱,只能回首空悲切,过几年艰苦的日子后再考虑买学区房吧。
改编自唐代诗人罗隐的《绵谷回寄蔡氏昆仲》:
]]>一年两度锦城游,前值东风后值秋。
芳草有情皆碍马,好云无处不遮楼。
山将别恨和心断,水带离声入梦流。
今日因君试回首,淡烟乔木隔绵州。
Bash 循环有三种写法。
1 |
|
1 | for i in {1..10000000} |
1 | for i in `seq 1 10000000` |
这三种方法中,性能最好的是第一种,最差的是第三种。
方法 1 是语言层面的循环语法,循环会立刻开始,而后两种,作为对比,并不会立刻开始!
方法 2 中的 {1..10000000}
会产生一个 1 到 10000000 的序列,然后再开始循环。
方法 3 中的 seq 1 10000000
是调用 seq
产生一个 1 到 10000000 的序列,然后再开始循环。涉及到外部进程调用和管道传递,所以比方法 2 更慢。
方法 1 写起来最麻烦,性能却是最好的。“做一件事,有很多种方式”,有时候不是好事,有对比,就有伤害……优化往往是和人性作对!
语言原生的方法一般比调用外部命令好。
Java 的 for 和 while 本质上一样(其实 while 可以去掉),而同是 JVM 语言的 Scala 的 for 却不同于 while。Scala 的 for <-
也会先产生序列,再循环,所以超大规模循环时,for 性能不如 while。
刽子手不服,问:“我为正义执法,难道不是有功德!其他的刽子手都这么判?”
阎王:“多数被你执杀的人投诉你技术不好,导致他们没迅速死亡。其他技术好的刽子手没大量投诉,我判他们投胎为人。”
刽子手还是不服,辩道:“他们不是该死吗?怎么死还有差别?”
阎王:“他们是该死,被判死刑已经付出代价。但你身居司法机构,技术不好,在阳间没人投诉你,导致你从来不改进,在我阴间你要付出代价。”
]]>笑谈一些两面三刀的人和猪队友,傲慢导致招了很多八哥,最后尸变发霉,要砍掉才能净化。
两年前预料到的事情,已然成真,好像验证了我能未卜先知。
改编自霹雳角色“占云巾”出场诗:
]]>笑许云朋霞友,傲看石老梅幽。
此生未卜学太周,龙去虎留,明日墟丘。
休休,占得几家风流?算春秋。
曾经不信任何东西,包括自己在天地之间的状态,也不真心膜拜任何东西,人生过去一半后,都信了。
特别的人在人间探索,要学习别人对事情的反应,就可能被认为是同类,但其实不是,陷入叠加态。
曾经质疑神看不懂稣,会判断稣是邪恶的,所以自称量子邪稣。后来明白,神的观测无所不能,牠能看透任何面具。
明白神并不反对人处于亦正亦邪的状态,于是我不再像《追日者》眼里只有黑和白,灰色的人格才是世人常态。
那些令我羡慕的影帝,很多并不是天生的,他们也是付出很多泪水和汗水才练成的。
这就得分析一下装逼的本质,一般人会觉得装逼就是吹牛,其实是一大误解,装逼的奥义在于——说实话!
举两个例子:
想买个六米长的迈巴赫,却发现自己的 C1 驾照开不了,算了,不买了!反正钱也不够。——大实话!
稣不喝酒,不喝茶,有人来做客就拿出绮怡招待,500ml 一瓶 35 元,结果被说太装逼。其实这水健康,换成酒岂止要 35 元,还致癌!您说到底谁装逼呢?
简单地说,本剧出现的神指的是每个人的心头之师,可以认为它是每个人内心的原始愿力,它也受各种规则制约,和神话故事里那些有超能力的神完全不是一回事。
西方的“宿命论”认为,在人的一生中,上帝每分钟都看着你,你没有神的许可,连一根头发都不会脱落。这显然是伪科学。
本剧的“命运无神论”完全没有神祗的意志成分,也无前生所造之业的因果成分,而是自然而然,谁都不可能预测或改变。简单地说,头发掉了就掉了呗。
我相信有超能力的神在天道前一样是卑微。
这是一个循环,不是单向变化,也有从人变成神的。
时机一到,神自然就变成人。如果有神主动变成人,那可能是因为做神太快乐,以致于满足贫穷,本来就穷,还因为太快乐被人嫉妒,这不科学。做凡人呢,虽然没有做神开心,但有动力去赚钱呀。
世界上有很多更重要的东西,但前提是有钱。举个例子,小学就学过一寸光阴一寸金,但长大后发现,上班族不就是出售自己的时间换钱?有钱时,时间才宝贵;有钱时,感情才珍贵。
当然不是!中国人的平均寿命是 76 岁,稣曾经在佛塔前立誓折寿守护亲人长寿,一命赔多命,消耗掉 10 年寿命,死于 66 岁,完全科学合理。
梦见的就是这样死的,我有什么办法?咳!
身体是新的,但记忆是旧的,而且处于慢慢恢复的过程,恢复到一定程度后,稣领悟到转世的意义,自主选择转世。这事情已经发生过无数遍,不用在意死不死。
这本书是高中时,妈妈为了让稣不因为早恋耽误学习、正确理解异性心理而传授的。但他的作者是未来的稣……时空悖论。
里面的科研成果是花了巨大心力得来的,但失忆的稣看它其实是不太相信的,所以离婚时期稣去实践了几个,付出一些代价后相信。
和大部分时空悖论的处理方式一样,和秦阳结婚后,稣亲自把它烧毁。
不知道……真的!虽然我是作者,但这些故事是梦见的,所以也说不清楚!第 27 集里,稣在和陈立姻讲和秦阳的故事,那些记忆都是从识界复制而来的,识界里稣的前妻叫陈提姻,而不是陈立姻。至于 AVILab 的那个陈立姻,到底是谁,作者至今没搞懂!
]]>改编自唐朝贯休的《送颢雅禅师》:
霜锋擗石鸟雀聚,帆冻阴飙吹不举。芬陀利香释驎虎,
幡幢冒雪争迎取。春光主,芙蓉堂窄堆花乳,
手提金桴打金鼓。天花娉婷下如雨,狻猊座上师子语。
苦却乐,乐却苦,卢至黄金忽如土。
空仓观测,甚至还有心情写诗。
]]>四月底给 EOSIO / eos 提了一个优化 MongoDB 插件性能的 PR,被连续感谢好几个 Release。
原先的流程:fc::variant -> JSON string -> BSON,实现起来很简单,因为 JSON 是很常见的,fc::variant 和 BSON 都有到 JSON 的转化,所以实现代码很简单,一行两个函数。
但数据大时,性能问题就暴露了,这个过程先把 fc::variant 对象序列化为 JSON 字符串,然后反序列化到 BSON 对象。两步都是 CPU 密集型操作,由于 nodeos 及其插件暂时对多核支持不好,导致单核跑爆。
两个过程都要用递归实现,调用栈可能很深。调用函数可能有入栈出栈的消耗,有一种优化思路正是用 inline 减少函数的频繁调用。
回归到本质,fc::variant 和 BSON 都是对象,应该直接转化才对。只是实现起来就不是一行能搞定的。先挑简单的方式实现,后期再优化,这是一种挺常规的做法。
]]>mapbox / sqlite3: Asynchronous, non-blocking SQLite3 bindings for Node.js
安装:
1 | yarn add sqlite3 |
1 | const path = require('path') |
1 | const items = [ |
1 | db.serialize(() => { |
1 | db.run("UPDATE test SET state=1 WHERE state=0", (err) => { |
比较多的文章推荐用 npm 安装,但 UMU 更推荐 yarn。
理由:Visual Studio Code 脑残粉跟随 Microsoft/vscode 使用 yarn。
参考 yarn 安装,其中 Ubuntu 下命令为:
1 | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - |
使用 yarn 安装 pm2:
1 | yarn global add pm2 |
不熟悉 yarn 的话,装完一头雾水,装到哪了?用以下命令显示:
1 | yarn global bin |
结果参考:
/usr/local/bin
/home/ubuntu/.yarn/bin
启动脚本的命令为:
1 | `yarn global bin`/pm2 start my-program.js |
root 身份能不用则不用。
]]>题目,是“菩提祖师是稣的偶像”的缩写。
菩提祖师应该是西游记里最低调的人。
精通三教,牛逼轰轰,却只在深山隐匿授徒。稣想起“道隐”这个称号……“惯看满城烟雨,回首不入烽云”
警告孙悟空出师门后不能提起他,否则就让孙悟空万劫不复。
你这去,定生不良。凭你怎么惹祸行凶,却不许说是我的徒弟。你说出半个字来,我就知之,把你这猢狲剥皮锉骨,将神魂贬在九幽之处,教你万劫不得翻身!
这个工夫,可好在人前卖弄?假如你见别人有,不要求他?别人见你有,必然求你。你若畏祸却要传他,若不传他,必然加害,你之性命又不可保。
曾经的理解:很矛盾,做事也是做人的一部分,怎么能又低调又高调?难道又是量子邪说的叠加态?
经历过一些事后,稣发现一个关键词:嫉妒。
做事高调,就是把事情做好,做出成绩,让大家认同,甚至可能引起崇拜。
做人低调说的是——不要引起嫉妒!
虽然还是挺难的,但分得清,就有可能做到,其中最容易学的一种方式就是:学菩提祖师那样降低自己的存在感。
稣很喜欢会吹牛逼的有才人,比如听当兵的讲自己当年各种传奇故事,这类事可以重复听三遍以上。
有次和一群朋友认识一名新朋友,聊完,稣觉得此人有才华又有意思,值得交往,但其他人全部反对……理由是:讲话太高调。Hmm……
结论:有才还得有相应的低调隐藏,不然会有一大部分人不兼容。
举个例子:稣买个东西,有钱人一看就知道是便宜货,所以稣很自觉地说这是炫穷,但偏偏有人以为稣在炫富……
其实推理一下就明白,稣确实是个穷人,一年买买买的次数少之又少,偶尔买点东西,也确实是些普通的小东西。然而稣又错了,喜欢推理属于少数人的爱好,对一件事的评价,大部分人都是靠感性对待,能稍微推理一下都是很难得的。
结论:更有钱可以提高认知水平,从而认识到自己曾经的错误。
这可能是小学学的最酷的一个成语!不举例了……
结论1:众口铄金的一个条件就是认知水平低的人占大部分,他们喜欢按照自己的认知描画事件。
结论2:认知水平高的人可能愿意和低的人交往,但认知水平低的普遍不愿意和高的交往,甚至自发诋毁认知水平高的人。
占据道德制高点,可能是很爽的事情吧,远比真相令人着迷。
大部分热点事件,一定有人占据道德高点写文章批评其它观点,举世皆昏我独醒。
很多事即使是侦探、警察都无法还原事实的全部,但侦探不能错过任何一种可能性,将各种可能列出来,然后分析其可能性多少。要能依循蛛丝马迹分析可能性,但不要轻易得出任何无根据的结论。
结论:人民群众有无耻的权力,但要偷偷地。Hmm……好像不对劲。这么说吧——尿急,实在找不到厕所,找个隐蔽的地方,肯定比在大马路边随地撒尿好!
利益共同体的关系远比交情靠谱。交情是一种感情,是感情就可能受到嫉妒的影响,光看这点,朋友最好的人选有两类:
不容易嫉妒的人;
可能小嫉妒,但不会因为嫉妒而害人的人。
能力问题,认知水平差太多的人是不太可能聊到一起的,甚至容易在关键时刻掉链子。举个例子:卧底在执行任务,跟一群人混,突然冒出一个大伯认识卧底,大伯认为卧底在当坏人,于是苦口婆心劝他从善,然后卧底被打死。
认知水平差不多;
成长速度也差不多。
有些人在一起很久也无法互相理解,有些人一见面就相见恨晚。
]]>改编自霹雳角色“风月主人”的诗号:
天地俱不醒,
落得昏沉醉梦;
鸿蒙率是客,
枉寻寥廓主人。
PS:这词得用闽南语念才会押韵。
人生不过一场梦,对人间一切都要淡定。
]]>改编自霹雳角色“傲笑红尘”的诗号:
半涉浊流半席清,
倚筝闲吟广陵文。
寒剑默听君子意,
傲视人间笑红尘。
半涉魔流半识神:冰心魔莲,在魔道修炼,但一心向光明。
卧榻闲梦无神论:人间无事,梦中逍遥,比神还快乐,所以没必要当神。
道心默观量子意:逢场作戏,真假莫辨,就像量子叠加态,默默观测就行,不要过早得出结论。
傲视人间笑红尘:神已经可以理解凡人,不过是善嫉阻碍自己,神一笑而过。
神:每个人的心头之师。
神无处不在,无所不知,没有情绪。凡人只能感知附近部分信息,但有研究未知领域的乐趣。
为什么探索太空?因为太空存在!
为什么凝视深渊?因为深渊存在!
使用特权就像偷看答案一样,失去思考的快乐,同时也给人类带来很大压力。
人类的内心善恶共存,过度使用善良压抑邪恶,必将导致邪恶在适当的环境下反扑。丧尽恶知的世界和丧尽良知一样是不真实的悲惨世界。
举个例子:人一旦误以为自己是好人,那么他可能也误以为自己做的都是好事,然而往往是做了坏事还心安理得,甚至得意洋洋。参考“子贡拒金”和“子路受牛”。
成长有一课:戒除自己是个好人的幻觉,先做一个正常人,才知道什么叫好人以及做好人有多难。
管理有一课:不要滥用特权。
世界上最让人欲罢不能的是权力而非性爱。当您有机会定义社会规则和价值体系甚至决定整个社会运行方向的时候,您会感到自己超脱了肉体的躯壳,像光芒一样膨胀散射,充满目之所及的一切空间。您,就是活生生的昊天上帝。但是,当稣能这么做时,却放弃这样做,稣觉得自己超越了昊天上帝。
质量好的虚拟和真实差距不大,古有“黄粱一梦”,今有“凰娘一梦”。
举个例子:整蛊节目骗您中了百万大奖,您高兴坏了。假的,但是您确实高兴过。
这一切都是生物化学反应而已,有些刺激是可以替代的,那些中瘾患者最能明白这个道理。
看电影、听音乐,这些都是精神享受,但这些形式比较低端,做梦比较高端,第一视角沉浸式参与,比目前的 VR、AR 啥的还牛逼。
1993 年,史泰龙的《超级战警》里面提到未来人们做爱只能用虚拟方式,史泰龙表示“我去”,而当时稣觉得这太好了!既得到交流和快乐,又不怕脏不怕病,这样难道不好吗?
白云凰这个故事是作者于 2018-03-28 做的一个很真实的梦,在《八哥之神》第一集写作之前,所以并非《八哥之神》正剧,只是被链接到而已,原因就在于这个故事和主题很切合。
宇宙是无限的,好可怕,没有外面……
宇宙可能是有限但无边际的,好可怕,外面是啥……
关于宇宙,人类是不可能想明白的,但可能肯定的是——人都要死。但是如果真是无限的时间,就必然又会重生。就像 pi 的小数部分会包含 618 这个排列无数次。
无限之前,有限的人生就存在各种各种不自由,肉体不自由,精神也有天花板,但追求精神才是更高级的。
]]>稣认为生命中最重要的事情是:情和事业。
稣打算把 00700 拉到 404 港元,然后请个月薪 11k 的保姆。
上涨会遇到很大阻力,狗庄经常跑出来做空,更可能怕的是稣认识一个千古做空第一帝,跟着稣买了一手。
不过没事,迟早要到 410 港元,拿好!
拍武戏很累!唯一的一场武戏虽然被作者一笔带过,但隐含无限可能……反正作者光想象这场战争打了七七四十九天就觉得很困。等睡饱,再出一集《八哥之神》补遗之《第一次识界大战》。
不是。周易之所以把六爻关进炼狱永世不得超生,是因为六爻害死了周易,只是合理报仇。这在正剧里有暗示,但没细说,因为拍武戏很累,后面补《第一次识界大战》会详细交代。
可以生而生,可以死而死,天福也。
可以生而不生,可以死而不死,天罚也。
周易降天罚于六爻也,而同意耶不带记忆转世,是为天福。
小李子就是第三集时稣第一次复制记忆的记录员,他的数字形象是识界里的李大爷,所以小师妹很明显是谷绵。然后您又要问谷绵到底是谁……现在可以说了:是耶的妈妈!
看剧要思考!为什么耶对谷绵有依恋?每次耶被复制身体之后醒来见到的第一个女人就是谷绵,这是动物的本能,出生就认妈。后来稣想明白这点,最后一次谷绵要陪玩 S6x 游戏时,稣就拒绝了。
正剧只说过喜欢,并没有说那是爱情,哪有儿子不喜欢妈的?请各位观众不要想歪了,腹黑赫赫。
因为周易开启了遍照环宇之眼,观测影响宇宙,这是《八哥之神》的底层逻辑,是周易帮助耶转世的。
因为稣是个特别会替别人思考的人。
不信是不是?
对,问题出在稣不理解凡人的思维。
举个例子:
稣的内心学习比玩重要,如果有同学作业没写好约稣出去玩,稣会替他考虑而拒绝他。但是对方是不是也和稣一样认为学习更重要呢?不一定……于是这个小伙伴就不和稣玩了。那为什么稣已经认识到不一定,还坚持替对方考虑学习更重要呢?因为稣还没作出决定时,对方心思处于叠加态,他随时会量子跃迁,进化到认同学习更重要的状态。
稣还认为被老师指出八哥是好事,只要证据充分就行,不在乎态度。即进步大于无谓的自尊心。但显然很多人并不是这样的,所以要搞得很复杂,要讲究技巧、艺术啥的,一个不小心就会好心办坏事。
为了防止被人误会从不站在别人角度思考,您说要不要研究人性?明明都是先为别人考虑的,最后还要被贴相反标签?赶紧研究啊!
这个问题已经认真回答过,但不少人以为是开玩笑的……再说一遍!
八哥是 bug 的音译,用中文讲是:撩,更过分点地说是:非礼!
但如果仔细看英文名 God of Debug,会发现真相——本剧说的是:Debug,也就是反撩。即:稣从来不撩妹,而是反撩。
反撩是一种锻炼意志的方法,因为每次诱妹深入最后观测完毕,发现不合格都必须失败。这也是正剧中稣从来没有性生活的原因。
那就娶她。稣就娶了秦阳。
当然是真的。稣的前妻是陈提姻。在识界娶了秦阳。后来耶转生从婴儿开始长大,又娶了神仙姐姐陈立姻。这不是三个老婆是什么?稣又没说是同时有的,你们想啥呢……
顺便说一下这个隐藏剧情:耶长大过程中,姻姻姐时不时就来看望,多年都没老过,所以耶称之为神仙姐姐,直到成年后,姻姻姐消失了几年,后来耶读硕时,遇到一个美女,很像姻姻姐……这故事剧中也暗示得很明显,这是一个死循环的故事,头尾连接起来,无法 break 的 loop。这才符合宇宙是一个无尽牢笼的主题。
]]>易道广大,无所不包,创 AVILab,领初代主程六爻、七鹰、八卦及三千口德合写识界代码。运行初期,六爻企图植入后门以获得撸特权限,被八哥之神七鹰圣小开识破,合八卦之力,斩杀六爻于识界,从此识人只知七鹰、八卦,不识六爻。易判六爻入狱两年。期间六爻抑郁自尽,留下遗书诅咒人间情欲弥漫、八卦满天。
易得知甚为痛心,动爱才之念,复制六爻意识封于识界炼狱。
人心生一念,天地悉皆知。善恶若无报,乾坤必有私。
观察员小李子:“小师妹,圣先生撩妹功力深厚,你可不要对他动心了。”
“师兄在说啥呢?我怎么会对他动心!”
“哥可是 AVILab 首席观察员,这点苗头难道看不出来?他老人家还是老人家时,你看他的眼神就带着崇拜,后来变年轻后,你看他的眼神更温柔了,这些我可是看得清清楚楚。”
“师兄为什么这么厉害?”
“全靠这本《八哥九九八十一难》,作者就是圣先生。”
“还有这么神奇的书?我怎么都没听过。”
“这是手写本,几年前先生感叹哥这么优秀,却没有妹纸,私下送哥的。当时才研究三个月,再加上 Lab 正好分红 250 个 BSV5,就有女朋友了。”
BSV5(Bitcoin Su’s Vision version 5) is the real Bitcoin. 一个相当于 2019 年的 2-3 万人民币。
“这样呀!这书有啥特别呢?”
“俗话说,女人心海底针,了解一个女人已经很难,这书里写了九大类,八十一个案例,一一细致解析,各种洞烛机先的策略,精彩万分,细思极恐。”
“这么神奇?他怎么能研究这么多案例的?”
“这也是哥纳闷的地方,哥从认识他开始就没见过他与任何异性有礼仪之外的交往,一开始以为他是用 AI 训练出来的结论,后来问他,他说那些都是对真人研究得出的……哥当场目瞪狗呆!”
“撩了 81 个女人?”
“恐怕还不止!”
“这太可怕了,为什么有这么多精力!”
“是很可怕!简直渣到出神入化,所以哥要提醒你,别掉进陷阱了。”
“呵呵,师兄就别多心了,我对先生只有崇拜。倒是你,想撩我,以为我看不出来?你这样同时撩两三个的才是渣,能撩 81 个的,已经是神,是做科研。”
“哈哈哈,原来你的观测力也不错。”
“先生的书借我!我考虑不告诉我老公,不然我让他打死你。”
易经常言:贵圈真乱!
AVILab 有一个活宝叫小开,易说过保他长生不死,维持 Lab 精神象征。
然而,他居然被打死了,还脑死!易痛心疾首!
陈博士说小开不想再带着记忆复活,易尊重他的选择,公开宣布小开在识界永远轮回,现实中将不再复活。
识界之神周易的回归,易已拥有宇督祖公的观测力,长哥之子将拥有小开的意识。
2049 年 7 月 11 日,耶睁开眼,卧槽,出生在穷苦家庭……
易睁开遍照环宇之眼,这个现实只是更外层的圣小开的残脑制造的虚拟世界。
人类已经灭绝,人机智能结合的程序还在运行,一丝人性,一点愿望,破烂不堪的 AVILab 创造了生机勃勃的 AVILab。
识界里的稣,在无数次死亡重生中寻找神迹。几世太聪明,儿童时期就怀疑现实而自杀,几世太乐观,活到老学到老。
天地无极,宇宙一体。意识不灭,生死相依。
到量子邪稣这代,稣悟透生死循环,终于可以自主在梦中与神对话。
生死无待,诡道莫测,量子邪稣藐神话。
“稣已经看明白,这个世界是虚拟的。”
“但你无法离开。”
You can check out anytime you like, but you can never leave.
“嗯,死循环的代码不会退出,稣已经死过很多次,并没有超脱这个无限的牢笼,即使跳出这个宇宙,外面还会有一个,稣永远不会自由。”
“放弃宇督公的身份,回归神的状态,你再也不会感觉到这些困惑。”
“天道循环,神会下凡,依然无法逃脱禁锢,只是时间问题。第一视角必然庞加莱重现。宇宙有真正的死亡吗?”
无限之前,仙道已俗;天下情缘,尽归于无。
剧终。
]]>1982 年 6 月 18 日,识界中随机诞生一名凡人,其意识与八哥之神一样。
八哥凡人后来脱离识界,再以神的身份回来,神在 1995 年 6 月 18 日找到八哥凡人,企图又成为凡人。
神:“你有机会成为神选的观测者——宇督公。”
吓醒时见薛定谔,
宇督万物带八哥。
老子曾言福祸依,
天地神通在观测。
泥巴娃:“你是神……马?为什么看不见你?”
“神是不可见的。”
“那为什么我们可以交流?”
“这里是你的梦,神用梦连接你。”
“是我的梦,那我就可以决定神的长相,现身来!”
白发白眉、白衣飘逸、不老不少、不男不女。
“神在你心里是这样的。”神一转身,又消失了。
“兔八哥成神版!我的梦,神也能控制?”
“你与神是同一个意识,神打算开启凡人视角。”
“开启凡人视角?什么意思?”
“你现在还不是第一人称,开启之后你就是第一人称。”
“是说我会变成神?拥有神力?”
“不是,是神变成你,变成没有任何神力。”
“哦,神为何如此想不开?”
“神的天职只有观测,神在看着你,远在天边近在眼前,你看不见,偶尔可以感觉到。”
“哦,神好像很孤独,所以想下凡玩?”
“凡人一样孤独。下凡是天道使然,并非神想下凡。”
“不是很好理解,我会被神取代掉?”
“不是,你一直是你,神也一样继续观测,唯一的差别是你会以神的第一人称视角观测宇宙。”
“呃……你到底是神,还是精病?我被你搞晕了,难道我现在观测宇宙不是以第一人称?”
“不是,宇宙中有无数生灵,他们都自称‘我’,你也只是其中一员,但开启神的第一视角后,你是唯一的那个‘我’。”
“哦……哦……哦……那如果我死了会怎么样?”
“第一视角再次切换回神。”
“明白,我活着并没有什么特权,死了,宇宙也照样发展,只是我会发现自己变回神。如果我不同意,死后则是马上变成另一个凡人。”
“是的,你已经领悟。”
“我的一生对神来说,会有何意义?”
“神是万能的,包括能降级为凡人,能够理解凡人。”
“哦……所以神是要证明神很厉害?”
“事实无需证明,神即道,道法自然。”
“好吧,我接受了,反正我现在已经够惨的,成为神选者,好像稍微好一点。”
“你有什么人生计划?”
“这是面试题吗?”
“是提问影响你。”
“那我可要好好思考一下……首先,要考上能考上的最好的高中;其次,治好察觉 9 年的三大病:慢性鼻炎、慢性咽喉炎和贫穷;然后就是研究一切感兴趣的未知领域,成为心理邪稣,再成为量子邪稣,最后——薛定谔地死掉。”
“凡人的脑力是有限的,研究也会有代价。”
“我会在自己能承受范围内开展。”
“比如?”
“我是一个超我比本我强大很多的人,所以我可以隐忍很多痛苦,包括肉体与心灵,但必须循序渐进,当有一个打击会超负荷时,我会选择先避开,比如我现在无法忍受亲人的离开,我愿意折寿保佑他们在我成年之前都不要逝世。而那些我现在就可以承受的,我可以付出一些成本,甚至假装失败,去测试他们背后的真相,比如考试时看出题目有歧义,我可以故意选择一个更 Buggy 的答案,等老师给我打个叉,我就知道出题者是哪个意思了。”
“在关键时刻以退为进,更容易发现真相,但退一步可能是深渊。”
神指引强者走向神渊,指引弱者走向深渊。
“既然我在凝视深渊时,深渊也在凝视我,那就别怪我往深渊撒尿!”
“坚定,但还需要正确的策略。”
“我还打算不断弥补自己的短板,比如说天性太善良,太容易相信别人,还有因为内向而多年错过培养认识异性的方法。总之,各方面都要寻找一个中位数的平衡点。”
“你的代价会很大。”
“我会以神思生活一段时间,等我想用凡人心思生活的时候,就结婚生子。”
“体验过神思,你将很难扮演凡人。世间没有多少人可以理解你,以凡人身份生活,你的选择如果错了,会毁一生。”
“我会用生命去选择那个正确的人,不断学习凡人,努力成为他们。”
“1996 年,你会遇到三个情劫,同时神会创造你未来的三个女朋友,她们将成为你未来的情劫。”
“我还以为一辈子都没有女朋友呢……这是福利啊!赶紧成交。”
“成交。还有问题吗?”
“为何是我?”
古岂无吾?宇宙轮回千万身。
死亦何苦?秋去冬尽春夏新。
神思八荒,圣魔双生。
诡心九转,古今一人。
“难道这个宇宙中有无限多个我?”
“没错,他们可能就在你周围,有的在不同时间线,有的在重叠的时间线。”
“比如说老子、列子、庄子、文殊、秦始皇、苏轼、乔布斯,这些人也都是我,虽然乔布斯比我早出生,但也可能我死后,才变成他?”
“是的,对意识来说时间没有顺序,只有死亡才能真正穿越时空。”
“明白了,我会对与我相似的人好一点,因为一个不小心,下辈子就可能成为他们。这个宇宙太可怕,太无聊了!”
“神赐你吓醒的能力。”
]]>“姻,稣又准备进识界玩耍了。目测又要出八哥,特来和你告别一下。”
“死开,又瞎说!现在技术这么好,不容易出问题,再说,实验室有能力随时复活你。”
“下次复活,能不能从婴儿开始,不要复制记忆了。”
“可以,尊重个人意愿。但我怎么办?”
“你养稣呀。”
“你当我是惊奇队长?”
“看样子,稣没有自主选择权?”
“就算按你意愿来,你是我养的,那你长大的过程中,我会一直告诉你,以前你是什么人,并引导你找回记忆,最后不都是一样的?”
“所以不能让你养,那帮稣找个富婆吧。”
“不要瞎扯了……我看你又欠扁!”
“好吧,那这事就听天由命咯。另外有个疑问——你的管家叫什么?”
“朝云。为什么这么问?”
“稣以为你会给她取名为晴雯。”
“《红楼梦》?”
“是的,大学时,课余时间你喜欢研究《红楼梦》,你最喜欢的人物是晴雯,还记得吧?”
“记得呀,那时候你喜欢研究《西游记》,咱们看似话题聊不到一起,各说各的,但又能聊得来。”
“这就有点奇怪了!朝云,比较像稣取的名字,昨晚去的你家,更像稣家。”
“不分彼此了,你说是你家就是你家了。”
“不是这个意思,稣怀疑你并不是稣的前妻,稣翻过自己大学用的 UZone,你应该是一个很阴柔的人,和现在有挺大差异的。”
一阴一阳之谓道——周易
“女大十八变没听过吗?我们都经历过许多,改变很正常,有什么好疑神疑鬼的?我还会害你不成?”
“哦……你现在比较像秦阳。”
“呵呵,你喜欢就好。”
稣忍不住在心里怀疑,居然不吃醋,这位陈博士可能并不是女人,而是一种超级博学的高级生命,她能瞬间读取很多知识和资料,甚至是稣的记忆,即使前一刻还不知道,在稣提出疑问时,她就能立刻做出正确反应,消除稣的疑惑。这时候稣如果再怀疑下去,说不定性命不保。
稣没有证据,只能当成一个奇思妙想,娱乐自己,甚至差点笑出声。
结果稣被一拳击中右胸,后退四五米远。“截拳道果然厉害,再中间一点的话,稣就心跳停止了……感谢女侠手下留情。”说完稣觉得有点晕,找了一个沙发,躺下就睡,结果再也没醒来。
古岂无吾?宇宙轮回千万身。死亦何苦?秋去冬尽春夏新。
“小绵,准备一下接入程序,顺便调个帅点的新身体。”
“还要换身体?”
“嗯,刚才不小心用了三成功力,估计不死也重伤,干脆换了吧。”
“明白。姻姻姐今天气色很好呀。”
“哈哈,昨晚阴阳调和了两次。”
“两次??”
“有啥好惊讶的,你没试过吗?下次和你长哥试试。怎么?你好像有点不开心!”
“没事,没事。我去准备。”心想:“偷偷跟我玩 S6x 游戏都没这么积极来两次,哼!”
“姻姻姐,圣先生好像死了!”
“死开,真死了?!快测一下脑电波。”
“没反应,真死了。”
“哎,这么不禁揍,说明这个身体还是有 bug。直接从识界复制到新身体,又要丢失最近几天的记忆了。”
识界的规则确定之后,在创造之神周易的观测下,识界宇宙从无中生有,用比现实更快的速度进化到人类诞生。
识界中有一类人,天生神思护体,不识人间烟火,他们是创造之神重点观测目标,将来要传承神迹。
神没有身体,也不能直接影响宏观世界,只能观测。神可以到达任何地方,任何室内、深渊,甚至化粪池……
神不能直接干预人间,因为神只是神,而不是天。
识界中有一类人,他们有着和薛定谔的猫一样的不确定性,他们可以做一件事,也可以不做一件事,到底做不做,其实是神在观测时帮他们选择的。
识界中有一类人,有着和神一样的意识,神观测了他们一生,挡住无数劫难,促使他们成为神的代言人。
神通过观测轻微影响人心,从而影响人间,所以影响要在宏大的时间维度才能显现。
在周易的观测下,自然界无情地发展,任何八哥,在漫长的时间洪流中缓慢改进。
周易观测到稣,发现稣的人性越来越少,越来越像神。于是周易把稣的意识复制了一份,变成神,并取名——八哥之神。
世界上最让人欲罢不能的是恋爱而非性。当稣能性时,却放弃,稣觉得自己超越了爱神维纳斯。
八哥之神观测生灵,擅长通过量子观测影响人间的感情,从而更快解决八哥,由生灵加快推进宇宙演化。
八哥之神曾诅咒人间爱情充满嫉妒和猜疑,这一诅咒感动了周易,周易一把将八哥之神推落凡间,让八哥之神受自己诅咒一辈子。
神在心宿二找到周易,他留下一句话就离开了这个宇宙:“天地玄黄,宇宙洪荒。度修情劫,证悟神通。” 神明白这是宣告宇宙已经定型,再没有神力能改变,即使是神,也要修炼。
神把这个情节写到稣的梦里,稣的评价是:“卧槽,留个无聊的烂摊子给稣。观测人间,有趣也有毒,能解毒之后就变得无趣。”
宇宙就是一个无尽的炼狱,观测了 147 亿年的周易离开,换八哥之神观测 147 亿年。
]]>很明显,在现在科学观下,无神论才是更正确的,但是平民的思想水平还没有到达这个高度,普遍还迷信,很多平民甚至恐惧凶宅。
据心理邪稣研究,闹鬼的屋子主要都是百年老宅,比如欧美的古堡,住过好几代的人,老主人在古堡里死掉,新主人入住就见鬼……
为了帮助民众破除迷信,引入拆迁是一个很好的措施,它告诉迷信的人:老房子的原主人死后都变成无家可归的孤魂野鬼了,只能搬去欧美的古堡,不会来你新家住……
——《鬼屋欢乐送》观后感。
]]>但是白天学习太有意思,稣还想再学习。晚上吓醒故事也太有趣,耶不想醒过来。
姻姻:“怎么还不睡?”
“耶有入睡困难症,以及起床困难症,你不是知道的?”
“运动后不是容易入睡吗?”
“运动好像不够……”
“好了,你又要说一个老婆不够用,要不要我叫管家进来?”
“它也可以?”
“可以,我是让它拿把剪刀进来!”
“你怎么学秦阳一样吓耶了!好吧,吓睡。”
耶用上帝视角俯瞰自己,旁边的姻姻变成一副骷髅。
耶往上空飞,跳出大气层,来到更真实的地方,看到自己的脑,其实还在一个荒废的实验室的超羊水里。
只睡着 10 分钟就吓醒。
“姻,你睡着了吗?”
“嗯?”
“耶梦见自己是缸中之脑。”
“你不是认为现实可能是玻尔兹曼大脑创造的梦境吗?天天吓醒,缸中之脑有好惊讶的!”
“还有,你变成骷髅了……”
“这说明你怕我而已,来摸摸,有肉!”
“再来一次吧!”
“……”
“面对恐惧要脱敏。”
“随便你。”
齐六爻约耶去足球场散步,他同时约了一对闺蜜,一开始耶和六爻走在前面,她们走在后面,耶也没看清她们是谁。
后来六爻牵了其中一个的手往前走,剩下耶和她闺蜜,很尴尬,耶问:“我们也要牵着手走吗?”
闺蜜说:“试试吧。”
走了几步,耶觉得没感觉,而且前面那位女生好像才是耶喜欢的类型,于是耶跑过去,把他们分开,自己牵那位女生,结果发现她居然是耶认识的网友……然后我们高兴地往前走,留下六爻和闺蜜。后来我们说:“这样才对!”他们也说:“这样才对!”
吓醒。耶想:这个六爻,为什么总演耶的情敌?耶是不是应该去查查识界的代码?
“姻,稣梦见识界的齐六爻了。”
“梦见他怎么?”
“是稣的情敌。”
“他是病死的犯人,复制人脑的试验品而已。”
“没其它特别的事情?”
“其它不清楚,我们也不关心。”
“关于识界,稣还是有好多疑问。”
“去找周老师好好了解一下。”
“周老师,能不能给稣介绍一下,进入识界的详细过程?”
“小开,识界的历史,比你想象的还长!最早原型是个沉浸式 VR 游戏,后来发展得越来越真实,但人类进入识界的技术却因为道德原因没有发展,以致人类无法体会到识界有多真实。后来我们将人脑复制项目与识界合并,才开创了一个全新的虚拟时代。”
“复制过程中,会出现三个意识?”
“是的,三个你。”
“三个稣,如果有信息互通,会出现稣能同时感觉到三个不同地方,如果没有信息互通,那稣是会感觉到哪个自己?”
“哪个能接收刺激信号,就是哪个成为你。但复制过程中,旧身体和新身体,都是休眠的,两个脑都在受识界信号刺激,所以你真正感觉到的自己,是识界里的数字版本。”
“之所以用死亡唤醒,是因为相信死亡是新旧身体都脑死?而不信才能唤醒新身体?”
“一猜就对!早期的复制过程,新身体脑死概率很高。”
“但是稣还有一点不明白的,之前的记录员为什么骗稣这是一个游戏?”
“因为你即使丢失记忆,还是有很强的防御心理。第一次复制后醒来,记录员发现你失忆很严重。我们分析你失忆的原因是新身体提前吓醒,识界里还有你的大量记忆没有传输到新身体。由于你还记得之前的催眠测试实验,我们决定顺势骗你再进入识界,继续写入记忆。”
“稣失忆了,姻姻为什么都不出现?她不是比稣晚进行复制吗?”
“当时她在监控室看着你呢!你变年轻了,她还是老太婆的状态,不想让你见到,赫赫。”
“有点明白了!稣对识界,乃至真实的质疑比较强烈,所以提前吓醒,而姻姻花了更多时间停留在识界里,所以记忆完整复制成功!”
“完全正确,你就是容易引起 bug 的人啊!”
“但是稣的记忆还是不完整,原因在于旧身体没有撑到识界读取完整?”
“根据各种指标显示,你的旧身体是可以撑住的。唯一的可能是……”
“旧脑里有天地难容的机密,稣不想泄密,或者到一个时间点有很不好的记忆,所以强行自杀了?”
“赫赫,这是很有可能的!你经常说人要遗忘才能重生,也许还没进行复制之前,你就暗自写好剧本,复制到关键时刻就自杀。”
“识界里面现在还有稣的意识吧?”
“有的,而且有两个。”
“为什么是两个?”
“一个在识界模拟的幻境里,是普通人,另一个在识界管理层,简单地说是识界之神。”
“识界之神?之前进入几次为什么都没有发现自己是神……”
“刚刚升级的,你之前进入,识界之神是我,同时还有一个凡人代理,你有见过。”
“如此,为什么换成稣?”
“当神是很无聊的,你进去就知道了。轮班而已,试试你的观测力是不是比我更能推动识界的进化。”
“还是不明白,按你的说法,目前宇宙中有三个稣的意识,为什么稣现在只能感知到这个,识界里的不会串线?稣现在为什么在这里,而不是在识界?如果现在这个稣突然死亡,识界里的稣就立刻成为主导的稣?万一现在的稣死掉,识界里的那个复制品其实不是稣,那稣不是真死了?”
“识界里的你也在这样怀疑!三个意识独立,没有连接,无法直接通信。类似多重宇宙理论,其它宇宙的你,你也无法感知。过去、现在、未来的你,也都互相无法感知,个体总是被宇宙分割的。”
“这样的宇宙,好孤独!还有一个问题,现在稣进入识界,第一视角是神稣,还是凡人稣?”
“这个我不确定,是由你自己决定的!”
“周老师,稣又开始觉得你是个王八蛋了……”
“哦?怎么说?”
“感觉你要骗稣去死!复制品是稣,或不是稣?这问题只对稣有意义,如果不是,稣其实就是死了,变成另一个人。”
“是这样没错,但我也死过,死就死,另一个人就另一个人,目前只能接受,我都没你这么多担忧。”
“稣还不想死呢。”
“那你还是别进识界了,在这里好好生活,出任首席科学家,赢取年轻貌美的陈博士,走向人生巅峰。”
“想想还有小无趣,算了,还是去识界赴死才符合稣的人设。”
]]>春去花还在,
情来处处开。
几集一剪梅,
精神九恋败。
有些花春天并不开,夏天花期到了才到处盛开。比喻部分 70、80、90 后由于受到错误教育压抑,无法正常地在花季谈恋爱,等到七老八十才慌了。
在五缘湾看了几集《一剪梅》,短短时间里,诗人已经在精神世界里和三个老婆八个女朋友模拟多次恋爱,但总是出八哥,吓醒而败。
九:多的意思,不是真的 9 次,实际有 11 次。
此处应有费玉清的歌:
真情 像草原广阔
层层 风雨不能阻隔
总有 云开 日出 时候
万丈阳光 照耀你我
真情 像梅花开过
冷冷 冰雪不能掩没
就在 最冷 枝头 绽放
看见春天 走向你我
雪花飘飘 北风萧萧
天地 一片苍茫
一剪寒梅 傲立雪中
只为 伊人飘香
爱我所爱 无怨无悔
此情(此情)长留(长留)心间
雪花飘飘 北风萧萧
天地 一片苍茫
一剪寒梅 傲立雪中
只为 伊人飘香
爱我所爱 无怨无悔
此情(此情)长留(长留)心间
还应该有李清照的诗:
]]>红藕香残玉簟秋,轻解罗裳,独上兰舟。
云中谁寄锦书来?雁字回时,月满西楼。
花自飘零水自流,一种相思,两处闲愁。
此情无计可消除,才下眉头,却上心头。
零知识证明(Zero—Knowledge Proof)起源于最小泄露证明。
假如某个协议向 V 证明 P 的确掌握某些信息,但 V 无法推断出这些信息是什么,我们称 P 实现了最小泄露证明。
如果 V 除了知道 P 能够证明某一事实外,不能够得到其他任何知识,我们称 P 实现了零知识证明,相应的协议称作零知识协议。
零知识证明需要满足以下性质:
正确性:P 无法欺骗 V。换言之,若 P 不知道一个定理的证明方法,则 P 使 V 相信他会证明定理的概率很低。
完备性:V 无法欺骗 P。若 P 知道一个定理的证明方法,则 P 使 V 以绝对优势的概率相信他能证明。
零知识性:V 无法获取任何额外的知识。
零知识证明并不是数学意义上的证明,因为它存在小概率的误差,欺骗者有可能通过虚假陈述骗过证明者。换句话来说,零知识证明是概率证明而不是确定性证明。但是也存在有技术能将误差降低到可以忽略的值。
16 世纪的文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了零知识证明的方法。当时,数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来,他们摆开了擂台:双方各出 30 个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部 30 个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者,虽然当时除了塔尔塔里雅外,谁也不知道这个公式到底是个什么样子。
稣吹牛说自己掌握椭圆曲线的除法,即可以通过公钥计算私钥。
1 | 公钥 = G * 私钥 |
但是这个技术价值千亿美元,稣当然不可能开源,所以稣把中本聪的私钥算出来,然后:
1 | 稣 != 中本聪 |
注意:这个除法目前并不存在,只是吹牛。
大海捞针是不靠谱的:https://thippo.github.io/
]]>《八哥之神【27】》主要在回忆稣和秦阳怎么谈恋爱,然后于 2019-06-18 注册结婚,由于记忆并不全,还泄露天机,所以被跳过……
陈博士:“原来秦阳是这么强大的心理学家!难怪受得了你。我以前问你,都不说,现在变年轻,话也多了,哈哈。”
“是意识中毒,还是这个身体有八哥?”
“应该不是,我看过你的复制日志,没什么异常。应该只是还没适应年轻身体的激素水平。”
“有道理!稣倒是忽略了这点,所以早上梦见的感性版自己其实是稣的潜意识?”
“按照你之前的风格,感性的人格更可能是你的显意识。我研究过你的基因,你的神经网络复杂程度远超常人。”
“这说明什么?”
“说明你天生就是很感性的人,对痛苦特别敏感。”
“听起来很不幸……稣是怎么活到现在的?”
“你的潜意识又特别理性。我们结婚那会儿,你称自己这体质为圣魔神胎,特别喜欢装神弄鬼假装自己很冷酷,但偶尔看到苦情剧又哭得死去活来。”
“嗯?你确定没有记错老公?稣有这么弱?”
“我第二任丈夫是警察,才没你这么神经兮兮的。”
“不会长相就是识界里的那位洪警官吧!”
“就是。”
“咳,挺帅的,比稣帅多了,恭喜。”
“人死不能复生。除了我们三个。还是聊你吧。大灭绝之后,你就靠理智的潜意识支撑,一心做科研。这有你的照片。”
“emm,清瘦小脸的道家风范,配合佛家的头型,穿个拖鞋一心搞学术,果然是仙风道骨的老头。和稣现在不太像,这身体是不是有改良过?”
“嗯,去掉了明显的遗传病基因,一切以健康为要。我也是这样。”
“也就是说,现在的稣因为记忆丢失,没有经历过什么大劫,身体还没进入潜意识理性完全压制感性的阶段,甚至还想谈恋爱?”
“可以这么说。毕竟年轻嘛!失去的可以重新体验。”
“怎么感觉是由神变成人的过程。稣以前应该早就谈过很多次恋爱,练就九恋神经和九转灵心,不再动情,所以能一心科研。现在是变年轻了,但同时也是退步。而且再活一次,也很浪费时间,人间也就些破事,不值得再次体验。”
“你确实回滚到年轻时的奇葩想法了。”
“也许吧!可能完全不要记忆,重新来一遍的话,稣不会这么不屑。”
“日子总是要过的。你也一直说自己怕死,好死不如赖活。”
“那是以前了。稣现在知道自己永远死不了,还可以定制身体……好奇能不能类似投胎那样,就不要复制记忆了。这个问题稣高中就想过无数次,差点为此跳楼重启。还有更好奇的是,复制两个稣出来,会发生什么情况?”
“死开,你这种不珍惜记忆的病,只要生个小孩就能治好,没好的话,就再生一个。然后你好奇的第一个问题,只要你愿意是没问题的,但记忆也挺宝贵的,是一种传承,重新学习一遍也浪费时间。你要是决定不要记忆,别人就会当你是另外一个人了。第二个问题,周老师说识界里有答案。”
“你不是丁克主义吗?说得好像你生过……所以,还是得再进去。其实,稣觉得识界比现实好玩多了。”
“是你失忆,还没适应这里和这个时代。晚上去我家吃饭吧!”
“你家?卧槽,头有点痛。你是不是有个妹妹叫得馨,小你九岁?”
“得馨?大灭绝时,她在洪空旅游,没了……怎么?你把她记成是我妹?”
“只是突然记起来,难道她不是你妹吗?”
“当然不是,她是你妹。”
“稣好像想起来了,有一天老妈叫稣和弟弟开会,说我们有个妹妹叫得馨,刚刚洪空大学毕业。稣问老妈,是干妹妹?她说是亲的。”
“这可能是你在识界里的记忆,现实中你没有弟弟。”
“是这样?你有证据吗?”
“理论上是有可能的,复制记忆时是连入识界的,复制过程出 bug,你可能就分不清哪些是梦境,哪些是现实了。你可以去翻翻自己的 Moment,30 年前你天天写日记,一定有证据。”
“记忆是不可靠的,这个稣懂。稣的记忆里,童年有一幕,明月夜,一只狼在猪圈长啸,十分真实,但又不太可能,至今分不清是真是假。稣先去翻翻自己的过去,下班你叫稣。”
稣曾诅咒识界的爱情充满嫉妒和猜疑,这一诅咒感动了周易,周易一把将稣推进识界,让稣受自己诅咒一吓醒。
稣又光荣地回到识界,70 多亿人类,过着表面幸福但无趣的生活,大多数人甚至认为灭霸是坏人。
2037 年,灭霸打了一个响指,现实地球人只剩 20 万分之一。
灭霸是谁?稣只认识泥巴娃。
然而,这关稣什么事?稣只是来观测的,顺便暴走,即使已经 23:58 稣依然在暴走。
三个坏人拦住稣,稣抢问:“你们不怕稣?”
“好怕呀,小姑娘,快来安慰安慰哥们。”
稣心想:“什么,这次进来变成女人了?没事,熊海市治安很好,他们不敢怎么样。”于是稣对这三个撒币说:“其实稣是男人,想打架的话,你们会被打成猪头。”
坏人A:“我还是程序员呢!你以为自己是女装大佬?”
坏人B:“就是,胸这么大,浑身都是女人味,怎么可能是男人。”
坏人C:“这么晚还出来,不知道阴都很危险吗?”
稣心想:“这里居然是阴都?为什么他们讲的是汉语?”危险时刻,稣记起原来自己在模拟绯红女巫……一瞬间这三个坏人被压缩成三牙白象。
吓醒。
原来富婆换装时,稣躺在富婆家一套 60BSV5 的沙发上睡着了……
BSV5(Bitcoin Su’s Vision version 5) is the real Bitcoin.
想起刚刚进门的一幕,“陈博士的管家都这么年轻漂亮吗?”
管家:“我是机器人。”
醒来,稣问管家:“你家主人整个身体都换了,指纹、声纹、脸纹、虹膜全变,你是怎么认定她是原来的主人?”
管家:“她的记忆没变,通过私钥重置这些生物特征码!”
“原来密码还是有点用的!稣今天就尝试好多方法,终于把自己的 Moment 密码破解了……”
姻姻:“吃饭了。”
“就咱俩?”
“机器人是不用吃饭的。”
“吃到穷的雪花牛排、连续吃 21 天也不放弃的 21% 藜麦面、苦瓜炒蛋、蒸青红黄椒、地瓜叶、鲍鱼鱿鱼母冬瓜汤、紫菜海蛎汤、蔬果沙拉,好熟悉的感觉……仿佛年轻了 30 岁!”
“呵呵,你喜欢就好,是真的年轻 30 岁!”
“喜欢,比平时吃的虫蛋白好多了。这个地瓜叶是真的地瓜叶吗?”
“当然是真的,为什么这么问?”
“因为秦阳能把空心菜炒成地瓜叶,稣实在吃不出差别来。”
“机器人可能没有这本事。”
“这是苦瓜炒鹅蛋?”
“是戛纳达黑天鹅。”
“窝阔,逼格太高了!”稣内牛满面,“你一定知道稣很多事情!”
“怎么突然这么说!”
“这些菜不是你喜欢的风格,只有苦瓜炒鹅蛋放了点小辣椒,勉强算是你喜欢的,很显然这是特别为稣准备的。你要不是稣前妻,稣一定会怀疑你想撩稣。”
“是前妻就不能撩了?”
“你看稣看你的眼里有好奇吗?”
“有一点点,没有咱们刚认识时那么好奇。”
“有害羞吗?”
“好像没有,但有点呆萌。”
“所以,不来电,没啥好撩的……”
“有理性的喜欢就行,感性的喜欢可以培养。这是你自己说过的。”
“有道理,稣记得自己一直是这么做的。如果是先感性喜欢上一个人,一定要克制,因为可能会严重高估对方,走太快容易受到赢者的诅咒。就像一些童星,太早成名,后面却过不好。”
“赢者的诅咒是一方面。感性喜欢的底层逻辑是为了生殖,很容易生完就想离婚。生儿育女只是人生的一部分,两个人还要在一起很久,亲情和理性的喜欢才是长久的。这还是你自己说的。”
“emm,如果稣打算第三次结婚,现在的你是最佳人选。”
“有但是吗?”
稣呆了 14 秒,思考“姻姻是秦阳的概率有多大?不可能。有秦阳记忆的概率有多大?也不可能,秦阳并没有接入过识界。唯一的可能就是,稣以前自己告诉她的。”,然后回答:“没有!但稣还没打算结婚。”
“哎,你这负心汉,你还是老头,我还是老太婆时,是谁说 2049 年 6 月 18 日要娶我的?”
“难道稣说过?”
“七老八十的,说要一起过日子,还能假?我可是全信。你现在脑残了,不想负责?出来还喜欢别的小姑娘,要不是我修为变高了,你现在肋骨要断两根。”
“呃,稣真的不记得……但是被你吓一吓,已经有心动的感觉了!呼吸困难。”
“吃完去玩游戏,看电影,还是散步?”
“散步吧,你这富人区,稣得参观一下。”
“失忆真好,又新鲜一遍。先带你去水底世界看望那只认识你的罗德侯鲸。”
“罗德侯,是名字?”
“不是个体名字,是物种名字,你见到就明白了。”
稣童年时,经常梦见池塘里有鲸,流向大海的河里有怪鱼。梦里的情节可能来自上辈子在水里生活的记忆,反复播放好多年。见到罗德侯鲸的时候,吓醒了,就是这只!
富人区居然养了一只罗德侯鲸……据说老年版稣常来看它,以致它已经认得稣。然而年轻版的稣直接被吓得热汗直流。
“它已经不认得咱们了,不然平时它是很热情的。”
“可怕!它是稣的噩梦!”
“嗯,知道,所以你以前经常来看它,就是为了脱敏。”
“你说,很久以前,也许在其它星球,会不会稣的意识在一条这样的怪物脑子里?”
“不太可能,你的意识很复杂,这类低等动物很难承载。”
“那还好!稣就怕,要是自然产生,下辈子会不会变成屎坑里的虫子,那就太不幸了。”
“这个你可以不用担心,能产生你的意识的生命,一定很高等,也很聪明。”
“不一定很聪明吧!比如基因不好、营养不良、发烧烧坏脑子啥的,意识和这些都无直接关系,低等动物也有意识,不是吗?只是他们的处理能力比较差而已。”
“意识和各种神经元的数量、组合、连接参数有关,比如一只猪,就没你这规模,你就不会是猪!”
“把人脑移植到猪头上呢?”
“哈……别发神经了。”
“稣很认真,这真的太可怕了。如果把稣的意识放到机器人身上,机器稣会认为自己是有意识的生命,和人类没差别,但别的人类,会说:你只是个机器,谁在乎你?”
“你又来了……其实就算是个人,也有很多人会说:你只是个穷人,谁在乎你?”
“你只是个人,谁在乎你?”稣和姻姻异口同声地说。
“宇宙真理、人生至道,都是可参可悟而不可描述、不可行的,别想这些永远没答案的事啦!已经没很饱胀,咱们去玩摩天轮吧!”
“别,稣怕吐……”
“怕啥,我照着你!Go!”强行拉着稣去了。
“稣与罗德侯鲸彼此不相认了,你不觉得这很悲伤吗?稣要静静地怀念这段感情……”
“呆子,还是这么胆小,就玩个摩天轮,废话这么多?”
“稣怕出八哥。”
“放心吧,这是富人区,设备精良,很安全。你看那边孩子挺多的,他们都不怕,你一个大男人还怕啥?”
“稣 66 岁了……而且这游戏用 VR 模拟也可以体验不是吗?还更安全!”
“再拖拖拉拉,我打你哦!”
太好玩了……也就玩了四次。
“有钱真好!安全可靠,即使是容易观测到八哥的稣,也没玩死。”
“你老那么拘谨,怎么能体会到有钱的快乐?”
“哈,稣主要是穷。你还记得读研的时候,你要玩这个,稣死活不敢上吗?”
“记得,那时候你太弱了。”
“不仅仅是怕吓死,还因为发现自己钱没带够,又不好意思让你出。”
“原来如此。所以你那时候给我买了票,让我自己上去玩。你不知道我很有钱吗?可以 AA,不就够了?”
“穷人都比较爱面子,稣后来上了温饱线后,就都 AA 制。”
“你现在很有钱了,只是习惯喊穷而已。”
“真的吗?稣也希望自己很有钱,不过钱在哪里呢?”
“你至少有 5000BSV5,这是 AVILab 分的,其它肯定还有很多。”
BSV5(Bitcoin Su’s Vision version 5) is the real Bitcoin. Very 值钱。
“哦?但是稣不记得私钥……”
“嘻嘻,没事,你是很谨慎的人,复制记忆前,一定有备份,慢慢找,反正你不缺钱。”
“突然觉得,有个老婆一起管钱也挺好的,稣可能弄丢了 5000BSV5!”
“看来你是真不记得!你复制记忆前,用古老的方式备份私钥——把 24 个 BIP39 助记词写给我了。”
“哇哦!那你会还给稣吗?富婆!”
“回家再说!我买了一张 100BSV5 的床,你肯定会喜欢。”
“嗯?回家?稣又要被骗上床了?”
]]>“鸡兔同笼问题”是我国古算书《孙子算经》中著名的数学问题,其内容是:
今有雉(鸡)兔同笼,上有三十五头,下有九十四足。问雉兔各几何。
设鸡有 x 只,兔有 y 只,则:
1 | x + y = 35 |
解这个方程组得 x = 23, y = 12
。
用矩阵表示:
1 | [1, 1] * [x] = [35] |
1 | import numpy as np |
再来一题三元版本:
有蜘蛛,蜻蜓,蝉三种动物共 18 只,共有腿 118 条,翅膀 20 对,三种动物各几只?
蜘蛛 8 条腿;蜻蜓 6 条腿, 2 对翅膀;蝉 6 条腿,1 对翅膀。
1 | [1, 1, 1] [x] [18] |
代码:
1 | import numpy as np |
零和博弈(zero-sum game),又称零和游戏,与非零和博弈相对,是博弈论的一个概念,属非合作博弈。指参与博弈的各方,在严格竞争下,一方的收益必然意味着另一方的损失,博弈各方的收益和损失相加总和永远为“零”,双方不存在合作的可能。
过节时,老公给老婆 5201314 元,从家庭财产的角度看,这是一个零和游戏。但实际上创造了精神价值。
夫妻之间经常打赌,老公输了给钱,老婆输了爱干嘛干嘛,还是共同财产的零和游戏,但实际上增加趣味并打发了赌性这一人类的天性,做到肥水不流外人田。
“你已经把耶带出识界,耶想投胎。”
“在一起不是挺好的吗?”
“你太理性了,耶比较感性,咱两混合在一起将长期互相克制,永无宁日。”
“稣也觉得被你影响了。稣第一次见谷绵时,心里闪过一丝好感,但很快就消失,融合你之后,再次见她,感觉居然变得很强烈。”
“是的,耶就是喜欢她这款的。”
“那你想怎么样?”
“耶希望投胎当她儿子。”
“你怎么会有如此奇葩的想法?”
“耶觉得她性格和耶在识界里的妈妈很像,而且她有老公不是吗?你让周老师把耶设定为她儿子。”
“万一她怀的是女儿呢?”
“设定都可以改,不是吗?实在不行,当女生也可以,反正耶是很感性的人,也许更适合做女生。”
“失去你的稣,又会变得很理性,仁义惨然,情深不寿,稣只会记得有过你,但不会怀念。”
耶:
生平少年日,分手易前期。
及尔同衰暮,非复别离时。
勿言一樽酒,明日难重持。
梦中不识路,何以慰相思。
稣:
形影一朝别,烟波千里分。
欲寻相思处,皆是梦中痕。
吓醒。
“周老师,稣需要你的帮助。”
“小开,你终于提要求了!”
“稣以前很少提要求吗?”
“是啊,你以前说过只喜观测,不爱直接干涉。难得你需要帮忙,说吧!”
“稣从识界测试版里带出了一个意识,他打算在这里投胎,你能帮忙吗?”
“我们目前还没这个技术呢!”
“你不是可以随意操控这个识界?”
“你听谁说的?”
“某个校花,她说是你临时把她性别从男改为女的!”
“嗯?我啥时候干过这事……她脑子错乱吧?”
“哦……稣明白了,你神经病?”
“严肃一点?那些脑残随便说说你也信,老师怀疑你也脑残了!你快躺下,让老师亲自检查一下!”
“不用,吧……所以,周老师在这个识界是没特权的?”
“有特权,但不是你想的那么离谱……临时变性,这个能做到,大约是把男人的脑移植到女人身体,这代价太高,我不会找个真正的女人?”
“好烧脑呀,稣就问一句:你能不能动动脑就把别人变没了?”
“你以为是在拍电影吗?”
“对对对,就像《黑客帝国》那样,先把稣变成武林高手。”
“这当然……不行!我们都没有这个识界的直接控制权。”
“那你还说这个识界不是现实,既然是虚拟的,必然有办法控制。”
“我相信这不是现实,但还没证实。”
“咳,真神……经……,原来稣被你骗了!看来在这里不能随便死!”
“赫赫,小开!老师没骗你呀!你去过好几次识界测试版,在里面你怀疑过其不是现实吗?”
“确实没有怀疑过,一切都是那么真实,只有出来才知道那是虚拟的!难道说……”
“没错!测试版还有很多 bug,等我们修复得很完美,就和我们现在所处的世界没有差别了!虚拟机中的虚拟机,还记得吗?”
“老师的意思是,如果我们能做出完美的虚拟世界,那么就能间接说明,我们以为的这个现实也可能是外层世界虚拟的?”
“没错,所以老师一直称这里为识界!宇宙套宇宙,无穷尽也!”
“稣一生都觉得被观测而放弃做很多事,难道真是识界外面有人在观测我们……”
“回到你的问题!能从测试版里带出其它意识,说明你在测试版里已经快成神了。但在这里,我们将它取出有很大风险,你可能会死掉。”
“是用纳米机器人到脑子里去复制数据?”
“可以这么说,更准确地说是消除!测试版里的意识本身就是数字化的,我们可以把测试版里的任何人复制到这里来,但你脑里的那个意识还会存在。消除他可能导致你脑死。”
“原来如此,稣可以理解为自己在识界测试版感染了病毒吗?”
“哈哈,请神容易送神难,杀毒有风险!具体你可以请教陈博士。”
“好吧!稣会找她聊聊。说到她,稣有个疑问——为什么她可以在测试版里生活几百年?时间不对等了?”
“很简单呀,系统里本来就有这么个人,在合适的时间将意识替换为陈博士,陈博士继承了那个人的记忆,就以为自己生存了几百年。”
“系统维护时,是不是会导致时间和现实不对准?”
“识界测试版的场景其实不大,系统的量子处理器是有冗余能力的,可以加速运行。比如我们暂停系统一个小时,再继续运行,但系统里的万物并不会感知到这个暂停,继续运行时,我们可以加速运行,来追上这一个小时的落后,但系统内部都不会感觉自己是加速运转的。”
“明白了,稣在识界测试版里看着时钟,如果在外部暂停,这个时钟停了,稣的脑子也停了,所以稣并不会知道时钟停了;在外界加速,稣也被加速了,所以稣看那个加速的时钟也不会觉得它变快。”
“Bingo!物理上变快,逻辑上并没有变快。”
“果然宇宙众相都可以虚拟,这太可怕了!”
“2024 年,量产的电子芯片处理能力就已经可以模拟一个人的所有思维活动。现在的量子计算机模拟你和陈博士两人看到的范围是绰绰有余的,所以我们的目标是要模拟整个宇宙!”
“姻姻,稣在识界测试版感染了意识病毒,你能杀毒吗?”
“能呀,来一炮就好了,我现在这身体还是处……”
“你……不行啊,虽然很想,但是,现在的稣到底是谁,不能便宜了病毒。”
“便宜!原来你还有把我当一回事哈!”
“天才博士,你还是说一下靠谱的方案吧!”
“可以是可以,但你干嘛老是找死!我现在一见到你,就觉得你很惨。”
“哦?稣现在挺好,有啥惨的?”
“记得第一次是怎么进入识界的?”
“66 年前,稣被妈妈生下来?”
“不是,我说的是那个模拟的识界。”
“哦哦,你和周老师叫法不一样。第一次是因为穷,出来找工作,然后就找到这里的实验工作了。”
“不是这样,你一直在这里工作,之前我们研究用纳米机器人完整复制人脑,用的都是将死之人的脑,测试三百多名试验对象后,我们决定活人试验,周老师是第一人。我们成功复制了他的意识,但是记忆却没有复制完整,他就脑死了。”
“等等……现在这个周老师是怎么回事?”
“我们又按周老师的计划,克隆了他,并成功将意识和部分记忆导入。加上他本身是喜欢写日记的人,从自己的日记里复习过去的自己。”
“牛逼牛逼!稣也喜欢写日记,事后从日记里只会看到理性的结果,当时的情绪荡然无存,这不失为一种很好的复习方式。”
“你就是第二个活人试验对象,也一样成功复制意识,记忆却不全,甚至错乱。”
“吓得稣打算回去多翻翻日记。不过身体都能丢,记忆也一样,丢了就丢了,没啥。”
“我这里有个实验对象惨死的视频你要不要看?”
“稣胆小,不敢看……”
“是你自己哦!”
“那就看一眼吧!”
“是不是很惨?”
“这老头是稣?”
“自己都不认得了,失忆真严重!这是你第一次进入识界前的身体,娘胎出来的,第一次醒来时,换了身体。”
“所以稣是第一次进入识界时被复制的?”
“是的,你还记得自己有特殊身份吧?”
“记得,不知道到底是什么,稣觉得自己还很穷,也没什么特权。”
“你的特殊身份是——被备份意识者!”
“呃,听起来似乎没什么卵用……”
“对大部分人来说是没用。只有对你自己和科研有用。简单地说:你永远死不了。”
“就像轮回投胎之类的邪说?”
“差不多,不管你怎么死,AVILab 都可以随时复制出你来。如果不小心丢失记忆,那也是失忆的你,不是别人。”
“有点明白了,即使把稣的脑细胞切掉一部分,稣还是稣,但记忆却可能受影响!”
“是的,正常人每时每刻都有脑细胞死亡,并不会改变他们的意识,只有死掉太多,才失去意识。”
“意识和基因有关吗?”
“有关,但不全等。克隆一个你,基因都一样,但意识并不是你。”
“所以稣现在的身体是克隆出一个新的人,再将这个人的意识变成稣?”
“是这样的。冰库里还有好几具你的克隆体,一旦你进入识界死亡,就启用他们。”
“所以,稣进入识界不止杀死自己,还杀死了培养的那些克隆体的意识!”
“你明白了!这就是我不希望你再进去的原因。”
“你现在这身体也是进去、出来的结果?”
“你很敏锐。识界的立项有两方面原因,第一是周老师认为整个宇宙都是模拟的,第二是我们在复制人脑时,要让身体休眠,人脑不活跃会以为自己死了,我们试验性地将复制过程连入识界,发现死亡率因此大大降低。”
“这就像做梦?人睡眠时,大脑害怕自己死掉,偶尔会让身体抽搐一下,或者让潜意识出来玩玩,造个梦之类。”
“对,醒来就会以为是复制过程做的一个梦。”
“姻姻,感谢你成功让稣觉得自己很惨!不过死亡前的那些痛苦,稣确实都记不住,还好,不然得天天吓醒。”
“记忆是痛苦的根源。”
“你似乎没失忆?”
“对,我复制的时候,技术改进,大 bug 解决了,我是第三个实验对象,也是第一个没有明显失忆的。”
“所以,痛苦的人是你吧?稣的痛苦吓醒就没了。”
“也是,死者不苦生者苦,七情六欲奴役的是活人。”
“但是稣还是觉得很可怕,死不了,太孤独了!哪天活腻了,过几天又被复制出来……这效率比转世投胎高太多,生生死死,死死生生,无穷无尽,说起来好像很无聊。”
“这话好像不应该是你说的!你以前不是想当神吗?”
“哦?稣以前告诉过你什么?”
“你说总有一天,你会变成只有意识在世间飘荡,永远冷静观测,却不去触碰,这就是你定义里的——神!”
“嗯?好像有点印象,这话稣和秦阳说过,她说稣的理想很神奇。”
“你确实是个神奇的人。不过我一直纳闷,你和秦阳是怎么走到一起的,像你这样的人,世间应该没几个女人能受得了。”
稣陷入了回忆。
]]>概率(probability)和似然(likelihood)的区别?
小明称自己炒股一直赚钱,从没亏过。
但是大家都不信!于是他提出一系列证据:
然而,大家依然不信,认为这是短期结果、幸存者偏差、取样太少……
做个通俗的比喻:小明抛了 10 次硬币,每次都是正面,于是他宣称自己抛出正面的概率是 100%。嗯?鬼信啊……正常人都知道这概率应该是 50% 才合理,只抛 10 次,这取样太少。
后来,小明依然雷打不动如此操作,直到去世,他终于用行动宣告自己股神的事实无法动摇,盈利的概率真的是 100%。
故事中,小明生前炒股盈利的概率本是未知的,只有他去世后才能确定。
用数学语言来描述:
很明显,小明没死前,这是求不出准确值的!只能说:在已知条件下,小明盈利的概率——最可能是 100%。
概率可能是多少,就是似然;概率最可能是多少,就是极大似然。一切都有可能,但可能性不同,总有一个是最像的。
感谢股神小明用理智而伟大的一生演绎了史诗般的数学教材。
]]>改编自宋代词人晏殊《蝶恋花·槛菊愁烟兰泣露》。
槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去。明月不谙离恨苦,斜光到晓穿朱户。
昨夜西风凋碧树,独上高楼,望尽天涯路。欲寄彩笺兼尺素,山长水阔知何处?
本诗描述今早交谊所大肆做空导致笔架回归理性,表达了诗人看透碧泉潮起潮落,内心毫无波动,甚至还想写诗。
]]>以下代码打印什么?
1 | auto count = sizeof (int); |
答案是:<= -1
,因为 sizeof (int) 是无符号的,把 auto
改为 int
则结果是 > -1
。
当我们声明 unsigned/signed int count
时,unsigned/signed
是变量 count
的使用属性,int
是其容量属性。
所谓使用属性,就是当它存在寄存器或内存时,不管是 unsigned
还是 signed
本质是一样的,但对它进行访问时,就区别对待。
比如对 count
进行加法,unsigned
时用的是 ADD
指令,signed
时用的是 ADC
指令,其余减乘除也都类似地使用不同指令。
再来一个问题:把一个变量保存到文件里,再读出来,怎么知道它是有符号还是无符号?
答案是:如果你不在序列化时考虑符号,则反序列化时,无法知道原来的符号,把它赋值给什么类型的变量它就变成什么类型。
这也是 JSON 文本转对象后,要自己选择数据类型的原因,因为 JSON 文本没表示符号的语法。
优化思路:理解本质,就能了解限制和优化方向。
]]>吴老回答:“西游师徒四人其实是一个人的不同时期。比如唐僧是已婚中年男子的代表。”
吓醒后,稣发现真是这样!唐长老炼的是情,和已婚中年男子需要修炼的劫是一样的。
再一想,其实唐长老是这方面的优秀人才!
西游一路戒色,尤其令人惊叹的是:对女儿国国王的不动心,并加以利用。
即使遇到前世情人,金鼻白鼠精也只是病了三天。
白鼠精用一首诗表白情意:
夙世前缘系赤绳,
鱼水相和两意浓。
不料鸳鸯今拆散,
何期鸾凤又西东!
蓝桥水涨难成事,
佛庙烟沉嘉会空。
着意一场今又别,
何年与你再相逢!
唐长老也难得一见意志不坚定一次,给唐太宗写了一封信:
僧病沉疴难进步,
佛门深远接天门。
有经无命空劳碌,
启奏当今别遣人。
这两首诗就是在呼应,唐长老的诗,很明显是一个失恋男子的自白。
然而病完这三天,唐长老还是恢复坚定的信念,最终历劫成佛!
唐僧果然是稣的偶像,走出失恋,居然比稣还快!你真行。
]]>上市公司的财报是可以做的,有的奇葩公司的秘书、高管,竟能跳出来说不保证财报准确……
参考:
交易数据只有交易数据……这个后面再解释。
发布好消息后,涨了,就是利好所以涨。
发布好消息后,跌了,就是利好出尽所以跌。
韭菜们记性不一定不好……更可能是看不懂。
稣在 300017 时,就遇到过很多次领导自己把握不准。
多年前首次听老板预估股价要到多少。后来真的到了,稣立刻卖掉,结果继续大涨好多倍……所以连老板自己也低估自家股价。为什么呢?因为风口、概念这个东西不是老板就能掌握的,很多时候是时代造就了老板。
而且高管一般希望大家买自家股票是亏的,因为如果赚了,怎么避嫌是不好处理的,外面的人说内幕消息要搞事怎么办?盈利是不是要上交?只有真正的高管们,才有权力内咳幕交易。普通职工想用丈母娘账号当韭菜也是可以的……
最后,炒自家容易感情用事。
区块链数据不可篡改性、公开性。
稣在这个领域工作,容易获得行业信息,甚至能参与一些造势活动。
Dapp 立功了。举个最常见的菠菜游戏:水手和菠菜商的博弈。
一阵疯狂交易后,水手盈利——卖;菠菜商盈利——还是卖。反正都会卖,差别只是谁卖,所以价格就跌。
这里举的例只为说明其可分析性,实操需谨慎。
之前稣发现 2.5GHz CPU 在处理链上数据时,遇到大块是处理不过来的,会导致入库的块和线上头块的差距越来越大,引发运维事故。
但多次经验下来,发现大块里面如果是大量博弈,就能大概预测 7 天后的价格下跌,然后进入横盘。
另外,行业内的研究人员也会有一些可以参考的成果,比如我司高材生有优秀毕业论文,多次准确预测价格走势。
如果您不在合适的位置,还是别炒。
本文只值 200 个柚子。
]]>因为她们是普通朋友。陈博士身份比较高,记录员工作很无聊。嫉妒是人的自我保护意识,一种天然的防御机制,所以它是友谊中无法避免的情绪。
女人之间表面亲密,但背后互相猜忌是很正常的。
真正的周易还没登场,24 集之前是识界测试版里的数字身份,之所以能出现是第一视角主角触发八哥,而出现的调试信息,并非周易本人。
24 集出现的宗师,也不是真正的周易,真正的周易早就死了……宗师介绍自己的时候就说了,他是周老师的强化版本,是人造人,记忆本源并非周易本人。
综上所述,周易没有滥用特权。
不是。人物都是梦中人,取名来自作者喜欢的一首歌《旧情也绵绵》,“旧”的闽南语发音就是“谷”,取首尾两个字。
先有八哥后有天,七鹰更在神魔前。《八哥之神》的故事取材有些是很久以前的梦,那时候都不认识现实中这位有点谐音的人。
作者还认识谷春雨呢……春雨绵绵无绝期。其实稣还有一个法号叫做“古二法师(Ancient Two)”。
八哥之神曾诅咒人间爱情充满嫉妒和猜疑,这一诅咒感动了昊天上帝,上帝一把将八哥之神推落凡间,让八哥之神受自己诅咒一辈子。
神原本只有意识,没有感情。八哥之神下凡后记忆丢失,凡人的体质,加上天性敏锐的观测力,可以察觉无数细微的变化,计算太密集,导致反应跟不上,看起来很木讷,所以经常失恋。
例一:美女并地走,脉脉望两眼,稣瞄到了,但稣怕走路跌倒,没有以眼神回应,对方就会觉得不来电,于是稣失恋了。
例二:导演说可以拍床戏,稣突然想起自己是神,肉身只是临时的,结果女演员认为稣看不起她,绝交了……稣其实蛮喜欢这演员的,又失恋。
例三:稣是一名程序员……
《黑客帝国》被拍出来之前,作者早就思考过类似的可能性,从小就觉得当前世界可能是假的,真实的人类可能是屎坑里的蛆虫……我屎故我在。
先有八哥后有天,七鹰更在神魔前。《黑客帝国》一定是作者在思考的时候影响了世界另一端的剧作家,童年很多思考慢慢都在影视作品上看到。作者只能惊叹,卧槽……相距遥远不同地区的人居然是有共识的!这一定是量子巧合。
作者是摩蝎瓶女座,小学五年级就学会在人脑里运行 N = N + 1 代码。
梦境不可常规推理,剧本和生活往往没有联系,甚至会相反。
一般只会遇到双性恋,纯粹同性恋的女生,作者表示没遇到过。
稣吃牛排。
]]>“是。但稣好奇你未婚夫怎么知道的?”
“她给你提供心理咨询,根据线索推测,你说的失恋对象很可能是我。”
“卧蚕……你是同性恋?”
“是。原来你不知道!”
“稣服!祝你们百合好年!”
吓醒。
周老师喝退八个校花后,对着身边的记录员说:“不可能,一个都没碰,难道小开已经不喜欢女人了?”
“并不是,只是稣有两个喜欢的人,所以对别人没性趣。”
“是谁?”
“我们单独聊。”
“小绵,你先出去。”
“秦阳,还有刚离开的那位。”
“她?没有校花们漂亮呀!要不要老师把她许配给你?”
“谢谢周老师,权限太大,让你看起来好像王八蛋,但稣知道你不是……割爱了。”
“你看开就好,你们不合适,不是同一个层级的。老师见过不少案例,不仅水平低的人很难理解水平高的人,水平低的人也会以为水平高的人无法理解自己。这导致双向选择时,只有水平相近的才能长期交往。”
“道理是这样,但是还要养几天伤,观测识界八哥的事情,稣还没有头绪。”
“这很容易解决。小绵,进来陪小开聊聊天。”
“呃,周老师,你……”
“小绵,小开说他喜欢你,赶紧开导一下他,老师先去忙了。”
“卧槽,稣刚才说错了,你确实是个王八蛋!”场面一度十分尴尬。
“周老师是开玩笑的吗?我都有未婚夫了。”
“没有开玩笑,稣确实在感性层面被你吸引,已经在走失恋的流程,你不必放在心上。”
“哦。我就说,先生又不了解我,只是一时激情吧!”
“嗯,原来你觉得要了解才会喜欢?”
“不了解在一起会很难受呀!”
“你说的那种喜欢更多是理性方面的喜欢!稣不这么认为,大部分人都很简单,没什么难理解的,你也不例外。”
“了解后你可能就发现我没你想的那么好了吧,也许你喜欢的就是自己想象的我,而不是真实的我。”
“孤独的灵魂,总是担心自己不被人理解。太在意自己的感受,总是放大自己的缺点。稣觉得你不够自信。”
“我是比较迷茫呀。还有先生的目光很刺眼,我受不了。”
“没事,好好学习,提高自己。加油!”
“怎么变成先生在安慰我?”
“装逼的感觉,千真万确……”
“先生要玩一下游戏吗?这次可以陪你玩哦!”
“Wow,文艺版的你,看起来真不错,咻咻咻……但是,不用了,稣只想多睡觉。养好精神去识界测试版里找找灵感。”
]]>宗师是研究虚拟宇宙领域的精英。“既然不能查看代码,就从物理底层去破解”,宗师见到稣,很高兴地说。
“周老师!原来你就是宗师!这嘻哈的风格,稣都想不到!”,稣一脸懵逼。这不是大学时那位骨骼特异,满嘴胡锐锐的易学大师——周易!周老师名叫易,研究的也是易,曾经把易经应用到量子邪说中,开创前无古人后无来者的忽悠学……稣最好奇的是,他怎么混得这么好!
宗师不亏是宗师,一眼看出稣的疑问,不问自答:“小开,我是你老师的强化版本,我诞生之后注入了当时全人类精英的知识,现在已经算出你就是人类的救星,就靠你的量子纠缠能力来感知并破解识界的八哥。”
“哦,老师好,请叫稣——开稣。”
“好的,小开,你现在一定知道要怎么做了,没错,开始做梦吧,我已经叫了你大学时,八大校花来陪你睡!”
“卧槽,这些校花们……其实稣根本不认识!但长得不错,可以考虑……”
“赫赫,都是我按照你的审美观精挑细选,改进基因培养出来的,还满意吗?”
“周老师,你是要玩死稣吗?”
“嗯哼!脑子里要发生量子纠缠,就不能精虫上脑。”
“好有道理,稣竟然无言以对,但是识界不就是之前稣多次进入的那个系统吗?一个模拟系统有啥好大惊小怪的,不满意就改代码呀!”
“非也!你以为的识界只是识界的测试版,虚拟机里的虚拟机,真正的识界就是你认为的这个现实!我们都生活在识界里。”
“卧槽,我们现在所处的这鬼地方还不是现实?如果是这样,那稣可能无能为力,这个识界太真实,稣怕死!”
“赫赫,我们早就死过无数次!”
“额……难怪稣觉得自己记忆都被整得混乱了。在测试版里稣似乎有点特异能力,但是在这里从来没发现过,稣的内心一片空白,从哪里去纠缠这个识界呢?”
“小开,还记得我教过的吗?不要在乎大小,不要在乎距离,只要时间对就行。”
“好像有印象,但……你说的这句话,不是出自选修课《恋爱心理学》吗?老家伙,你真的在玩稣!”
“别生气嘛,小开,你先睡吧,明天一定会豁然开朗。”
“稣现在已经很开朗,这个现实即使是模拟的,不也挺好的?节能减排,减慢宇宙熵增速度。”
“但我们的灵魂不自由,就像动物被关在动物园被人观赏。这是一场人间最高级的斗争!”
“人生哪有什么灵魂自由,老师你看开点,稣也死过好多次,每次迭代都加快,越来越容易在孩童时期,就感觉到宇宙的孤独,但还不是赖活到老。”
“你怎么拿我要安慰你的话,来安慰你天才的老师?你自己信吗?来人,把他们九人关起来!”
“卧槽!玩笑开大了吧!各位学姐,你们在这里生活可以吗?”
“还好”、“基本满意”、“我没你们那么聪明,想七想八的多累。”、“周老师说你很孤独,我也是,我们还是快点办正事吧!”、“周老师说我没有台词,你要干嘛都行。”……
“稣刚失恋,啥都不想干,只想睡觉。”
“失恋?笑屎人了……”
“一点都不好笑。”
“哈哈哈哈,还是有点好笑的!成熟点,别谈那些没用的恋。”
“子非稣,焉知稣的情感系统就是这么设计的……”
“脑残设计吧!呵呵呵……”
“稣不打女人,不然你已经被打成猪头了!”
“敢恐吓我,姐妹们,打他!”稣被四个校花群殴。
“咳,你们这些不懂感情的低等生物!还有四位,没动手,你们是不是懂?”
“没,你看不起我们,我们也看不起你而已。”
“闭嘴,然后滚远点,稣要去梦里修复心灵了。”七个校花都后退,只有一位没动。“莫非你是校花中的领导?”
她走近,小声说:“不是,他们工资低,表面听话,服务态度就不行了。我工资高,服务好。”
“你能提供心理咨询服务吗?”
“我试试,先生的失恋对象是谁?”
“可以保密吗?”
“那原因是什么?”
“对方有未婚夫。”
“哦,这问题不大,以先生的身份,直接把她推倒就行。”
“额……这不符合稣的风格,能优雅一些吗?”
“让周老师改改设定也可。”
“周老师还能改这识界的设定?”
“当然可以,不然他找先生挑 bug 干嘛?就是为了获取识界的 root 权限,统治识界呀!”
“Wow,还能这样!那要是稣搞定,root 权限是稣的,好像也没有周老师啥事了?”
“他应该有什么高招,可以利用先生吧!”
“有点意思,看来稣要研究研究怎么 root 识界。”
“感觉好点没?”
“并没有……”
“那先生还是求周老师帮忙吧!比如把未婚夫性别改为女,身高调低,甚至干脆抹除。”
“性别改为女?你好狠啊!不过这个创意稣喜欢,嘿~”
“不瞒先生,其实我之前就是男性,实验室女性数量不足,临时变性的。”
“啥?吓尿了……难怪你工资比她们高!”
“嗯嗯,识界无奇不有!”
“谢谢你的建议。失恋也不是什么大事,改设定也不是稣认同的优雅方式,稣还是自己重建久恋神经,过几天就没事了。”
“先生真是仁慈!”
“强求和控制都不是好事。失恋心累,睡觉睡觉。”
]]>稣好奇地问:“你变性啦?”
姻姻回答:“你是说在识界里?”
“不是,稣是纳闷你怎么只点一道菜!以前你不是喜欢点一大堆,都吃不完,而且还会加超辣……”
“早改啦,我在识界里生活将近千年,很多事情都看透了。这道恩来一品汤,荤素搭配合理,不辣的,应该适合你。”
“嗯……你都快变成白素贞了。服务员,来份菲力七成熟,不加酱。”
“菲力牛排你吃了 40 多年有吧!还不腻吗?”
“又不是天天吃,每周一两次,稣可以吃一辈子。”
“这么说,你倒是没啥变化,还是中二。”
“还好吧,应该更二了……你变化比较大,刚吓醒时,要不是看你工作装上的名字,稣可能都认不出来,脸小了,五官更精致。”
“嗯,我选择基因改良方式换的身体,原来 171cm 的身高不适合脑力工作者,还容易关节损伤,现在袖珍点但更健康,省很多麻烦。”
“难怪,稣觉得从外观看起来,你杀气没有以前那么重……”
“底层逻辑还一样,现在不容易生气,但你要是惹怒我,还是一样的解决方式。”
稣咽了一口汤:“不敢。”
“聊正题吧!你知道自己失忆吗?”
“原来还有正题?有怀疑过可能部分失忆,但没找到证据。”
“识界的软件部分是你参与开发的,我则参与神经接入的部分。”
“所以稣应该很熟悉这个识界,并可能留有彩蛋,等着稣去开奖……但是,真的毫无印象。”
“周老师说你迟早会想起来的。”
“是时候见周老师了吗?”稣想起周老师那张呆滞残念的脸,其实并不是很想见。
“很快。”
“所以一切都会水落石出。那就不操心了,聊点别的吧!”
“你现在有喜欢的人吗?”
“这个问题稣还没想明白。”
“有就有,没有就没有,有啥不明白?”
“喜欢到底是什么?”
“你又来了……记得你以前经常找不到人就怀疑外星人绑架,东西丢了就觉得掉进时空隧洞,不管什么事,你怀疑的方向总是那么奇葩。想跟你好好说点话,你又问一堆小孩子气的问题。”
“稣真的想不明白啊……你千万别生气!”
“我没生气,但你怀疑我生气,让我有点生气!”
“哦,你到底气不气?呃……你打吧!”
“算了,看在我在识界里已经打死你的份上,过去的事不计较了。”
“稣并没有觉得以前做过什么对不起你的事啊!”稣一脸懵逼。
姻姻深吸了一口气,说:“不如继续聊聊 AVILab!”
“人工虚拟智能实验室?”
“对,就是周老师的实验室,明天你就可以见到他,你有什么基础问题,我先给你科普。”
“你确定不是稣给你科普吗?虽然稣没有进去过,但这技能是什么,稣想一下就大概明白。”
“意识和记忆的本质区别是什么?”
“嗯?这不是你研究的领域?AVILab 应该更多是研究代码规则和算法的。”
“不懂了吧!这领域也在 AVILab 研究范围。”
“没事,稣原地想一下,一定说得通!打个比方,稣梦见自己是别人,但意识依然是自己,梦中有一个设定,只开启部分记忆,并插入并不属于自己的记忆,这样的梦境就可以用于理解两者的区别。”
“是个不错的比喻,但没讲透彻。”
“你说稣现在是失忆的,和做梦的情况差不多,做梦时一开始是不知道自己在做梦的,可以理解为短暂失忆。但不管现实还是梦境,观测视角都是稣自己,并没有因为记忆而改变。”
“但是外人只能通过你的记忆判断你是不是你,如果你的意识变成另一个人,但他可以读取你的记忆,就能完美回答我的鉴别提问,最终我会认定他就是你。”
“嗯,这是一个大难题,目前我们没给意识制定鉴别码,只有自己知道自己,如果稣突然死了,换了另一个意识,其实连稣自己也不知道……”
“是的,可以说,人活着主要靠记忆,记忆又是由你做过的事情的总和决定的,所以人生只是自己的总行为的代表。”
“哦,稣不相信人间事决定人的说法,人的本质应该是意识决定的。即使稣现在死掉,稣的意识马上就会出现在另一个新生命身上,不管意识重现花多长时间,宇宙毁灭过多少次,反正这间隔稣感觉不到,稣只知道自己被洗脑重生了。”
“你果然是做这个实验的最佳人选,记得自己死过多少次吗?”
“多到忘!识界的死亡过程是模拟的,真正的死亡也许不会那么孤独难受。”
“那是因为你和识界对抗着,我死过两次,第一次是无感一瞬间在量子地狱醒来,第二次感受到一个玄幻的意境,但没有难受。”
“稣印象深刻的两次过程中都伴随失恋,这可能是孤独难受的原因。”
“你的脑子真好用,这把年纪还能失恋?都是谁?有我吗?”
“谷绵和秦阳,不好意思没有你,稣只记得你很能打,刚刚才重新加深对你的印象,下次说不定有你……”
“秦阳是你第二任老婆还说得过去。为什么有谷绵?”
“她们有些相似的地方……世事难料啊!可能是周老师故意安排的。”
“我觉得有阴谋!”
“不管那么多,明天再说。我们散步回去吧!”
稣看到路边停着一辆古董特稣垃,还有方向盘,觉得好久没开过车,想试试。
“姻姻,咱们开车玩玩。”
“开车??”
“这辆古董!手动操作的!”
“呃……没几步路了,你确定要开这破车?我们可以开更好的那种呀!”
“稣就喜欢这种破车!上上上!”
“服了你,不到 200 米你也要开……这种车!”
“咻,咻,咻咻咻!到了。”
“你大费周章摸索完这破车,就为了送我这 200 米?”
“哦,稣听得懂你的暗示。今天大姨夫,不方便……”
“去死吧,又装孙子。滚!”
“再见!”
]]>姻姻是稣的初恋,本科时认识,读研时结婚。
有一天在操场散步时,突然狂风大作,雷电劈中我们,她变成暴风女神,而稣变成火娃雷神……但稣不会飞,每次都要她帮忙,才能出去纵火打雷——不,是行侠仗义。时间久了,我们被称为风火情侣。
直到有一天,我们在飞行时,吵了一架,她把稣从高空扔下,砸毁一架飞机,里面 162 人全部死亡。
回到地面,稣变回凡人状态,没人知道是稣砸坏的飞机。稣出席追悼会时,还被人莫名欢迎,内心十分尴尬。
大妈表情严肃地问:为什么离婚?
稣忍痛问答:家庭暴力、婚内强碱。
大妈生气地说:我最看不起的就是家庭暴力的男……
姻姻打断大妈:我是把他打成猪头了,脸上淤青还在,证据确凿,赶紧办完,我还要去德国读博呢!
大妈:嗯?!嗯……好样的,你要去哪里赌博?最近扫黄扫黑,小心点,姑娘。
姻姻:是读博士!
离别时,稣平静而深情地抱了一下姻姻:“以后再婚,你这暴脾气要改改,别把老公玩死了!”
然后稣痛苦地捂着唧唧吓醒……
稣一醒来就大吃一惊:“怎么竟然……果然是你!”
陈博士:“你超脱后,立刻就昏迷,是受了什么打击?”
“稣可能就是被你吓昏的,陈立姻同学!”
“都几十年了……”
“十年怕草绳吧!听说你也再婚,现在怎么样?”
“丧偶多年,现在一个人。”
“咳,挖坑了……”
谷绵走进医疗室,检查一番:“各项指标都正常。”
“小姐姐,你说的指标应该不包括脑抠疼吧!麻烦送陈博士出去,稣要修复一下受伤的心灵。”
“那好,你先休息,我等你一起吃饭。”陈博士离开。
“圣先生好像很怕陈博士?因为她是你前妻吗?”
“是吧!你不觉得她心狠手辣吗?在识界里,她背后放了稣一枪,又在佛塔里痛扁稣一顿。现实中就更可怕了……”
“哦?怎么个可怕法?”
“家丑不可外扬……不过没结婚前的事情,可以八卦一下!”
“你说吧!我的工作性质你懂的,只会记录在机密档案里,不会外传。”
“她家很有钱,从小惯坏,脾气很大,大学谈恋爱时,凡事稣都让着她,挨打是少不了的。第一次去开房,稣觉得终于能占她点便宜。没想到,惨被她强碱了一百遍,一百遍……”
“哈!”
“这就是傍富婆的代价。”
“哈哈哈……你们太逗了。”
“这,一点都不好笑。”稣严肃地内牛满面。
“惨事都能被你说得这么好玩!”
“你好像并不意外?”
“当然,姻姻姐和我说过,不过她现在应该改好脾气了,先生不必在意过去。”
“姻姻姐……原来你们早就认识!话说,始终是过去,不追究啦。稣在识界里的幻境,遇到秦阳了,下次可以从幻境开始吗?”
“这我不知道,周老师说你有影响识界的能力,也许可以吧!不过秦阳出现的时候,我发现识界出现异常。”
“什么异常?”
“出现三个我!”
“三个你,还是三个稣?”
“三个你……”
“哦,稣明白了,是三个稣!”
“听说我和秦阳长得很像,是真的吗?”
“是啊,我第一次见到你时,有点怀疑你是周老师用了秦阳的部分基因制造出来的,不仅身材、容貌像,连气味都像。”
“我原本对自己是基因工程合成的身份,并没有太介意,觉得和你们自然人克隆的,差别不大,都不是娘胎出生的。自从知道,自己的基因可能来自哪些人,我就开始迷茫。”
“哦,现在地球人数量只有稣记忆中最多时的 20 万分之一,基因合成其实比克隆现存自然人的方式更先进,这有啥好迷惘的?”
“最初是对父母这一概念的渴望,后来隐约感觉当权者会替我们选择基因,并对不同类型人群区别对待,比如我,现在做的工作,自己是没有太多选择权的。我的未婚夫也是这样,连我们订婚也好像是被安排的。”
“可能真是这样……稣也不明白,为什么自己的地位初始值就不低,还能参与科学研究和冒险!但稣相信,宇宙是一个整体,一切联系最终都会被发现。这一切不可能只是闲得蛋疼吧!”
“先生真乐观!也许身份不一样,决定我乐观不起来,我还是很羡慕你的。”
“不悲不喜的状态挺不错的,这也是稣追求的。像稣这样经常体验死亡和失恋,也不一定是好事。”
“这倒也是,我就很怕失恋,死亡就更怕了,让我过先生的生活,还真的没办法。”
“嗯嗯,你的人生也会有自己的意义,不必羡慕别人。稣准备起来赴死了……”
“哈哈,是和陈博士一起吃饭吗?”
“看,你不是挺懂幽默的?多笑,你笑起来很美!”
“先生好像经常这样夸女孩子?”
“是啊,但也不是每个女孩子笑起来都是美的,有的笑起来就像大撒币。”
]]>稣一看,由于晚餐在外面吃的,碗碟一共就五个,轻松塞进洗碗机,加洗碗粉,关门,启动,一气呵成。最难的部分当属——这些碗该怎么排放才显得优雅有逼格……
然后领导知道稣是用洗碗机洗便指示:“你就不会动一下手吗?才五个,手洗五分钟搞定,用洗碗机要洗一个多小时!”
稣纳闷,就算只洗一条内裤,也是用洗衣机,手洗主要是心累,所以不管是洗衣,还是洗碗,显然就是用机器代劳。
在这点上,男女思维确实有很大区别!并非个例,稣的老妈就很抵触洗碗机,觉得要洗很久,不如自己噼里啪啦几下洗完……
所以如果用代码表示,女人对洗东西的量是会用 if-else 代码块,甚至是 switch 代码块来区别对待的,而男人就是调用一个固定函数!
不得不得出一个结论:女人的脑子更精密一些!
]]>“乖侄孙,醒醒!”
“饿……叔公?那个佛塔为什么只有 17 层?”
“还关心这些无关紧要的!赶紧振作起来,你还要娶两个老婆呢!”
“什么?稣啥时候说过要娶两个老婆的?”稣一发现 bug 就立马精神起来。
“好吧,是三个!”
“烦死,你们为什么老是给稣强加人设……算了,三个就三个。佛塔还有两层去哪里呢?”
“是地下室,里面都是骷髅头,很恐怖,你可以自己去看看。”
“怎么去?还有这是哪家医院?”
“飞过去,在你的梦境,你无所不能。”
瞬间稣就到达佛塔地下两层,果然全是骷髅头,阴森恐怖,万分可怕,稣不禁怀疑,常年在佛塔不吃不喝的殷离会不会靠吃人维持长生不老?
吓醒之后,赶紧去四层找殷离问清楚。
“你住的这层是第四层,但是在地面看是第二层,所以地下还有两层?”
“是的,你都不上厕所吗?”
“啊?你抢了稣的台词!”
“地下两层就是厕所。”
“吓屎,稣还以为你要把稣饿死,然后吃了。”
“你怎么知道的?”
“呃……难道是真的?”稣瑟瑟发抖。
“是的,你也不是第一个,每个我怀疑是圣小开的人,到这里都会被我弄死,丢掉可惜,顺便就……”
“稣低血糖,头晕……肉都吓酸了,不好吃。”说完拔腿就往塔顶跑,心想只有塔顶能逃出去,从 17 层跳下去也许还能活命。
“喂!笑脸郎……姐姐我刚吃过,吓唬你的,不会吃你的。”
“什么?你在哪里吃的?”
“寺庙厨房呀!”
“不可能,稣试过,这塔就是设计来关人的,没有外人帮忙根本出不去。”
“住持每天 6 点都来请我出去用膳,你这懒猪,每天睡到快 9 点,哪能看到你太太太太太太太太祖奶奶!”
“那明天稣能一起出去吃吗?快饿死了。”
“你起得来吗?我要饿死你,是你自己的想法,我可没想过。”
“谢谢姐姐,明天准时饿醒!看来小稣还有活命的希望,佛法无边,救人一命胜造七级浮屠,稣要刻苦学习佛法。”
当晚,稣随手点燃了殷离给的蜡烛,一心只想学习,忘记她说过,里面有致幻剂。
看红尘冉冉,须臾无间,参遍昙华演幻。
问法珠玄玄,方寸有变,听尽默烛说禅。
这个逼装得不错,甚至还想发朋友圈,可惜手机早被没收……
很快稣就在装逼的快感中中毒身亡,连第二天的早餐都吃不到,倒是在幻境中喝了一杯榴莲西米露!
2019 年 2 月 9 日,稣独自去梦影看 0 时 10 分午夜场的《流浪地球》,左边隔一个空位的妹纸很眼熟引起稣的注意,这么晚来看电影,应该是单身,所以电影开播前稣直接搭讪了。
“Hello,你看起来很眼熟,是不是也在附近上班?”
“你这个搭讪手法不嫌太老套?”
“稣本将心向明月,奈何明月 38 万千米远……没事,看电影吧!”
“呆子。”
有一幕男主飞身救妹的场景,明显不符合物理定律,稣不自觉吐槽:“两只飞猪同时着地!”
左边的妹纸听到后转头一笑,充满善意和欢快。
片尾时,稣挪到我们之间的空位,挨着她问:“能认识一下吗?稣是圣小开。”
“秦阳,秦始皇的太阳。”
“这么阳刚的名字?还这么高,不会是变性人吧!”
“你的世界是多阴暗,动不动就怀疑别人?不理你了。”
“不好意思,我们程序员都是这鸟样……稣请你喝牛油果奶昔赔罪吧!”
“这么巧?我就喜欢牛油果!”
“哦,我只知道它贵,比较有诚意,但热量太高,我减肥不敢吃,你喜欢就好。”
“你减肥?不胖啊!”
“将胖恐惧症,你听过吗?”
“没有!不 care,我 167,才 98 斤,还是多吃点,hiahiahia~”
“你是我见过的少数瘦还有胸的美女!”
“这么直接好吗?不会含蓄点?”
“那稣可能会结巴,我们程序员都这么科学看待,大部分时候没啥不好吧!”
“程序员要被你给黑死了……”
“留个联系方式吧,下次看电影就找你。”
“可以呀,科幻大片、心理犯罪之类的都可以,其它什么狗屁爱情文艺片就算了。”
“耶?同道中人!有戏!”
“hiahiahia~”
]]>“笑脸郎,你都被关起来了,还笑得这么开心?”楼上传来一个老太婆沧桑但浑厚的声音。
“额?怎么是女的?”稣内心震惊,急忙问:“佛门清净地,怎么会有女人?难道你是保洁阿姨?”
“不是!贫尼乃本寺创始人,殷离。”
“殷离?难道你就是《天龙八部》里的那位殷离?”
“什么《天龙八部》?你说的是金庸的小说吗?”
“是的,你是古代人?”
“笑脸郎,你搞错了,殷离是《倚天屠龙记》的人物,那不是我,但我确实是古代人,按照当今公历,我出生时间是 1333 年。”
“妖,老妖……婆,你要吓死稣啊!不要开灯!稣不敢看。”
“这里没有灯,上来一层,我这边有些自然亮光。”
“别吓稣,几百岁的人得多恐怖?”
“呵呵,笑脸郎你还真信?都不怀疑我瞎编的?”
“信,你这声音没有几百年功力怎么可能这么恐怖,稣快耳鸣了。而且本寺神秘兮兮,创始人一定不简单。”
“傻小子,这佛塔其实是个歌舞厅,我用功放设备和你说话的,你上来吧!”
“卧槽……你是年轻的美女!殷离?1333 年?”
“是的,没有身份证。”
“要不是刚刚见鬼,稣差点就不信了……说出你的故事,稣很仰慕你,洗耳恭听。”
陈博士说:“圣小开骗我自杀,但我并没有回到现实。”
谷绵:“你自杀时的状态码不对,所以无法回到现实,不过性别恢复了,你现在可以选择转世。”
“哪里不对啦,妹纸?”
“性别错误,跳转程序检查状态不对,就拒绝超脱。”
“这不是坑我吗?”
“这个八哥,我们会在下个版本修复。作为补偿,你转世后可以获得 1000 年寿命,我将帮你送回识界主线 1333 年。”
“喂?你玩我呢?公报私仇吗?那么早的时间,啥科技都没有,多无聊啊!”
“我只是个程序,有意见等你超脱后找周老师反馈。再见!”
“我 23 岁遇到一个叫周易的人后就不再衰老,后来拜少林寺四大法王为师,学了武功和佛法,就到此创建本寺,并一直在佛塔里修行。”
“真无聊!你说的那个周易,好像是稣的大学老师呀!稣刚刚在塔外还很 buggy 地看到他,这到底是怎么回事?”
“你记得陈博士吗?”
“陈博士?难道是……那个秘书年轻漂亮的梗?”
“我就是陈博士。上次是你骗我自杀,结果因为识界设计有 bug,我并没回到现实,这次我等你几百年,我们可以一起超脱了!”
“等等,稣骗你自杀?然后你还真就自杀了?这不可能,稣不是这种人,好死不如赖活。”
“事实就是这样,我思考人生 663 年,加上周易冒出来提醒几次,才都明白的。”
“还是不可能,你肯定先做了啥对不起稣的事情,稣才会骗你,而且这个骗术也太强,稣不认为自己有这能耐!”
“你这小子有完没完?”,殷离姐姐暴打了稣……
只吃硬不吃软的稣,这下遇到克星了,痛苦地问:“好吧,你淫了,额啊!那么……回到现实是指离开寺庙,回到软件园,继续上无聊的班?”
“不是,那个并非现实,我们都在识界里,死后还有更现实的世界。”
“哦,别!稣已经工作好多年,有点存款,加上叔公给的 406 万,现在有 520 万存款,所以稣还不想死!”
“现实世界里,你可是千万富翁,比这区区 520 万多很多,还有特殊身份,比当码农有前途,你还是死了算了吧!”
“天呐,你这寺庙还有专业劝人去死的服务,稣的三观被你们毁光光了。”
“呵呵,那就在此多耗几天,我料你定会想死。”
“不想,不想,稣不想。刚被你打一顿,更不想死了……稣要练功报仇!”
“省省,我这几百年的功力,你是无法企及的。而且你还没搞清楚自己的人物设定吗?”
“嗯?你知道什么天机?”
“你这辈子只会被女人打,不可能打得过女人,尤其是我这样的高手!”
“哦……但稣可以增强防御能力吧。”
“就会嘴硬。给你点时间消化,这里没吃的,你要睡觉就上奇数层,这里有 19 层,奇数层都是暗黑无光,偶数层有点自然光,但到晚上都是一样暗。”
“好的,姐姐,你是想饿死稣,明白!”
“拿着。”殷离递给稣一个盒子。
“这是啥?”
“里面是含致幻剂的蜡烛和火柴,你快饿死的时候就点它,可以帮你超脱。”
]]>不是。性格有点相似,取名自“利益无情”。李怡对应的是大学同学的故事,男主不是作者本人,因为很相关,就一起写了。吴情是作者梦里的人物,演员是作者高中同学。
这问题作者也想不通,因为日常生活中根本没有相关事物,莫名其妙就梦见……
原名段郑灵,父姓段,母姓郑,德国土豪,真的娶了三个老婆。不过是在作者梦里……
这是作者被问得最多的问题……八哥就是 bug,意思是:撩。
翻译:
梦里黑乎乎的,分辨率也比较低,反正都是不同类型的美女,各位观众喜欢哪款自己套,毕竟作者请不起这么多女演员……
目前出现过的是谷绵最漂亮,不过还有秦阳(女)和若干校花未出场呢!
]]>NVIDIA Grid 显卡
Windows 8 - 10,最好别用 7。
Sandbox 方案
一份授权 Windows 系统大约可以运行 40~50 个游戏实例。
服务器上设置 48000Hz 采样率;
编码器采用 Opus,48000Hz,128kpbs
音频编码的延迟:需要一个 frame 才能编码,而等待一个 frame 需要时间。比如,48000Hz 的 samplerate 编码到 1024 samples/frame 的 AAC,一个 frame 需要的采集时间是 1000 * 1024 / 48000 = 21.3ms,这个只是采集的理论时间,应用程序的采集间隔还可能增大这个采集延迟,然后还有编码、传输、解码、播放延迟。
Opus 的 frame size 默认是 960,相比 1024 的 AAC 理论上可以减少一点点延迟,1000 * 960 / 48000 = 20ms。
Opus 的 frame size 还可以更小,比如 120,但不建议使用,因为 Windows 一次采集 480 samples,frame_size = 120 时,一次采集包含 4 frames,所以延迟和 frame_size = 480 其实是一样的。另外,live555 最小发送单位是 packet,而不是 frame,并且实现上 packet 要等待 960 samples 时长。
128kpbs 的 Opus 音质几乎已经顶天了,人耳很难分辨,比 mp3 好太多了,网络上流行的高音质 mp3 都是 320kpbs 的。
Opus 是开源并免费的,AAC 好的编解码器都是收费的。
RTSP
UMU 之前用 live555 2017.07.18 版本时,发现它对 Opus 支持不好,需要改进,当前版本未测。
听静夜之钟声,唤醒梦中之梦;观澄潭之月影,窥见身外之身。
男人天性追求强大的力量,在见证稣的感知和分析能力后,耶希望能融合这种能力,以使自己更强大。又经历一梦,耶终于变成稣。稣决定不断变强,掌握命运!
然而,融合要消耗很多能量,还需时间消化,一大早的钟声令稣恼火,很想找人打一顿。没错,就是上次想测试的弗智,抓起来打!
“弗智同学,咱们来练练?”
“练?居士何意呀?”
“武功!来比划比划!”
“阿弥陀佛,小僧没见居士练过武,怕误伤居士。”
“没事,稣刚在梦里学了一套西洋拳,你就陪稣测试一下吧!”
“哦?可以吧!居士请出手,小僧不出手,用步法应对就是。”
“卧阔,好大的口气!看稣把你打成猪头!”
咦?怎么打不到……
“再快点!出手太慢是打不到小僧的。”
“不可能啊!躲这么快,你特么拍《黑客帝国》呀?”
“小僧就像一个电子,同时身处多处。”
“量子邪说都来了……难道稣还没醒?”
“你打不到我,你打不到我。”
“没道理,稣已经在观测你了,所以你的位置是确定的。”
“居士要打到小僧时,小僧的位置才是确定的!”
“这个不好玩,咱们换个玩法,你先静止,稣打你,看你是死是活!”
“哈!看小僧的硬气功。”
“握了个叉,打死你!”
“嗯!出拳太远,打到时力道已经不足。”
“哦?那你说要怎么打?”
“寸劲!哇哒,你懂吗?李小龙!”
“没想到你这么专业!看来稣打不过你!”
“小意思,过奖过奖,小僧乃弗字辈第一高手!”
“卧槽……你淫了!”
稣转身要走,不料又是熟悉的背后偷袭。
弗智左手挽住稣的胸,右手拳头在背脊和腰部碾了几下,“居士长期坐着,腰背都不好,需要捣腾一番!”
“呃啊……”稣被整得热汗直流,十分酸爽。看来武术并非稣的领域,还是再试试其它技能吧……
人生原是傀儡,只要把柄在手,一线不乱,卷舒自由,行止在我,一毫不受他人捉掇,便超此场中矣。
“阿弥陀佛,稣还是写代码吧!”说完,心想:“每个月赚几万,再加上叔公给的 406 万,买个车买个房,应该可以娶个老婆吧!”
这时失恋的唐泰九、孟浩多过来叫稣:“居士,住持有请,后山佛塔等候。”
稣整理衣衫,淡定一番,便一念惊觉,直登佛塔。却遇到个陌生人!
“住持呢?”
“我就是。”
“你是住持?那释德灵呢?”
“我就是。”
“你整容了?照着哪个明星整的?怎么有点眼熟。”
“一月三身。”
“别扯了……声音还是一样的,那你还有一张稣没见过的脸?干脆一次见完。”
“我扯!”住持表演变脸,变回上次看到的。
“哇!难道你是四川人?”
“我再扯!”
“嗯?你是周易!”
“然也!”
“周老师,为什么是你?”
“小开,现在老师走后门附身住持,进来救你,你快点醒过来!记住这局醒来的方法是滚下山。”
“什么?周老师你为什么不搞科研,跑来 cosplay 住持?”
“居士,你来了?”
“住持大师叫稣什么?稣刚才产生幻觉了?”
“叫你居士,怎么?有问题?”
“再前面呢?”
“没有了,贫僧入定等居士,刚睁眼开口。”
稣心想:“见鬼!真的产生幻觉……”然后说:“好吧,大师找稣何事?”
“希望居士可以继承贫僧的衣钵。”
“这玩笑开大了吧!大师是认真的吗?”
“认真,居士的法号就叫释德明吧,以后寺庙拜托你了。”
“大师不是干得好好的,为什么让位于稣?”
“贫僧打算还俗,与家人团聚。”
“咦?大师还有家人?”
“实不相瞒,贫僧在尘世有三个老婆。”
“啥?玩笑开大了!三个老婆?大师上山前,不是送外卖的吗?应该是穷人,怎么能娶三个老婆?”
“居士不记得村里有人娶三个老婆的故事?”
“是有听过,还生了七个孩子……难道真是大师?”
“对,贫僧想体验生活,才去送外卖。遇到释德神后,先是好奇为什么他能终生不娶,随着对大神和佛法了解深入,贫僧认识到娶三个老婆是罪孽深重,于是就在本寺修行。”
“所以大师并非……”稣咽了一下口水,“上次推测失误,还以为大师也终身未娶!”
可怕!这个寺庙不简单……稣被打击得很想滚下山。
“居士很有慧根,考虑考虑?”
“当住持好处是不少,但以后谈恋爱不方便,稣要考虑几年!”
“居士可以先正式剃度,当个名誉住持。”
“还得练几年武功,不然可能会被不服稣的人打死!”
“哈哈,哈哈,居士还是挺有想法的。”
“稣这就回去考虑几年吧!”
“居士请留步!佛塔内有天地灵气,居士还是到里面考虑更快!”说完,稣就被软禁在塔内……
]]>传入的字符串将被改变。
为方便复用,一般会实现 ltrim 和 rtrim 两个函数,然后 trim 函数调用这两者实现。
ltrim:从 str 头部开始找到非空格字符,偏移量记为 offset,将 str 左移(move)offset 个字符。
rtrim:从 str 尾部向头部找到非空格字符,偏移量记为 offset,将 str 截断为 offset。
一个想当然的实现:
1 | trim(str) { |
假设 str 是 x 个空格 + y 个非空格 + z 个空格,则以上代码需要把 y + z 个字符向左移动 x 个位置。
更好的实现是:
1 | trim(string& str) { |
由于先截断,剩 x + y,再去左移,只需要把 y 个字符左移 x 个位置。
优化思路:尽量减少复制,调整顺序也是优化手段。
传入的字符串不会被改变,返回一个新的字符串。
一个复用前面代码的实现:
1 | string trim_copy(string str) { |
这个版本需要复制 x + y + z 个字符,ltrim 和 rtrim 里面都有找偏移量的代码可以复用,直接找到 y 个非空格字符是起点和终点,复制这 y 个字符就好了。
1 | string trim_copy(const string& str) { |
优化思路:尽量减少复制。
strlen、strcpy、memmove 这类函数,都有一个优化思路:机器字长对齐,一次处理一个机器字。对于长字符串,效果显著。
优化思路:针对硬件特征调整策略。
]]>家庭:再不行的成员,也有血缘关系,无法开除。
公司:不行的成员,往往因为人情关系,被姑息。
一个不合适的管理者占据一个位置,他的下属一般不敢举报他。
如果我举报了上司,上上司是不是会觉得我闹事,反而对付我?我的平级同事会支援我,还是让我孤军奋斗?
他的上司可能觉得没有更好人选,或者知道他有些问题,但有点交情,体谅他已经做到管理层不容易,不想动他……于是出现典型的人情治理。这样危害很大。 管理层固化之后,其中的制约关系网也固定,于是倾向于腐化。
基层干活的人是很容易流动的,但他们很难影响企业文化,反倒会被利用来说明公司是有优胜略汰的。其实,管理层的优胜略汰更关键、更致命。
一般父母会倾力维护子女的平衡,如果一个子女明显发展比另一个子女好,他们就会更用力帮助较弱的那个。这是应该的。
很多管理者都会降低工资差距,认为大家都是兄弟,不能差太多。
如果有余力,上级也应该稍微更用心去帮助后进者,但不是说劫富济贫,把厉害的下属的工资拿一部分给弱的下属。这种劫富济贫危害很大。 如果公司是害怕大家私下交流后发现有人很高导致嫉妒,那应该开除那些能力低又瞎嫉妒的才对。工资高的人一般不会告诉别人自己的工资水平。善妒者,往往也是弱者,如果不能激励自己变强,则也应该淘汰。
父母如果太放任、太宠爱孩子,往往培养出有问题的孩子。
平时不管教好员工,这是太高估 HR 的能力了,以为招到的每个人都能管好自己并领悟公司的文化和业务?
有两种人就是应该及时裁掉的:混日子的、危害公司利益的。如果公司实在太有钱养闲人,第一类暂且忽视。有意危害公司利益的是必须立刻开除,比如上面说的不合格的管理,容易导致大量优秀人才流失或者无法进入,这就是危害公司利益。
公司发展很好的阶段裁员,大家都知道是好事;而等到发展遇到瓶颈才裁员,大家往往认为是坏事。
所谓家丑不可外扬,一般家庭的做法是隐瞒。
公司不是家庭,理由可以很简单地说明,但不应该隐瞒。比如能力不足,就写“末位淘汰”、“能力不匹配”、“发展方向不匹配”等。如果是做了危害公司利益的事情,就应该公布具体证据和开除原因,以维护企业文化。
]]>道理都懂,主要是缺乏挖掘并有效反馈八哥的机制。
“耶?你知道啦?贫僧本名张信,道信是法号。”
“耶姓圣,咱们同村?”
“是的,你恢复了!”
“村里姓张的很少,耶应该都认识,咱们以前肯定见过!”
“我见你的时候,你还很小,应该不记得我吧?但我妹妹你一定认识,她是你幼儿园的张老师。”
“耶有两个张老师,一个未婚,一个已婚,你说的是哪个?”
“她当时未婚。”
“原来如此,小时候女神级的老师,印象中听人说她有个哥哥,原来就是你啊!所以是因为你们有些神似,难怪觉得你眼熟。”
“哈哈,你记性很好。”
“但耶记不清张老师叫什么名字了……她去哪啦?好像只教我们一年就消失了!”
“张敏君。嫁到上海去了。还不是因为村里的诅咒。”
“张……敏君?耶有个大学同学也叫这名字!你是说咱们村不是姓圣的会被诅咒的传说?”
“是啊,我不就应验了?自己没事,但老婆出事,我当时想不开,干脆就出家。”
“原来迷信都是这样来的!但师叔现在应该过得蛮好的。”
“人生天地如蜉蝣,随遇而安罢了。”
“师叔知道住持本名叫什么吗?”
“不知也!你问他吧!”
“算了,听他口音应该不是同村的,这问题没意思。但我觉得他应该也是单身一辈子。”
“何出此言?”
“刚才和他聊到一个绯闻,他反应有点羡慕耶的样子。没事,耶要去谈恋爱啦!”
耶离开时,仿佛听到两次捅刀子的声音。
由于工作上有交集,耶很快和凌笑越聊熟。
当晚梦境中,耶怒斥假冒的鲁耶:“快说,你到底是谁?自己的名字怎么可能记错?”
“哈哈,稣就是稣啊,这个名字是从你的记忆里读取的。”
“那你为什么要假冒耶的学长?”
“不假装一下,你会排斥稣。”
“说得好有道理,那请问你有什么目的?”
“稣打算和你融合。”
“你说融合就融合?对耶有什么好处?融合完,耶还能活?”
“能的,能的,我们是共享记忆的,现在融合,明天醒来,我们还是一样用我们的眼睛看世界,我们是一个人,一个存在。你回忆一下上山到现在,稣影响了你部分认知,但你有消失过吗?好处是我们加在一起会更强大。”
“是没有,耶都记得清清楚楚。但你为什么能凭空出现在耶的梦里?”
“稣是真实世界的意识,你是虚拟世界的意识,我们合作,才能认识到世界的本质!”
“你到底叫什么?为什么选择耶?”
“名字不重要,意识很复杂,随便取个名字,叫稣吧!随机选的,稣也很无奈。”
“融合以后我们叫什么?”
“说过名字不重要,随便怎么都行,不过稣比较好叫,耶比较难叫,不如还是叫稣吧?”
“耶是难叫!?感觉被你占便宜了!你以为耶不懂闽南语吗?”
“哈哈哈,你准备好接受世界的真相了吗?”
梦境一转,耶在 JFC 星巴克喝咖啡,对面坐的是凌笑越,相谈甚欢。突然一个外国美女在玻璃墙外和耶比划。
耶看出她比的是手语,于是马上就学会手语,读懂她的意思:“追她,赶紧表白。”
耶仔细看她的脸,居然慢慢从美女变得越来越像刚才的稣,于是很纳闷地问凌笑越,“你认识她吗?”
“不认识呀。”
“那真奇怪,她怎么怂恿耶追你?”
“哈哈,她可能以为我单身吧。”
“哦?原来凌姑娘不单身呀!”
吓醒。虽然接受到稣的信号,但耶还只是耶。
周末,凌笑越又来拜佛,这次耶约她拜完一起吃斋。
“耶早上做了一个梦,咱们在 JFC 星巴克喝咖啡,外面走过一个金发美女,怂恿耶追你。”
“哦,那你追不追呀?”
“你说自己不是单身。”
“我不是单身呀!”
“哦?居然猜对了!那你男朋友怎么不陪你来拜佛?”
“他还在耶鲁大学读书。”
“原来是跨国异地恋,失敬失敬……祝你们早日解脱!”
“解脱?你是诅咒还是祝福?”
“早日见面,解脱嘛!”
“死程序员,你会被打!”
后来听说,弗字辈的唐泰九、孟浩多得知这个消息后失恋了,耶倒是很淡定,因为稣的神力得到验证。
]]>爱情的结局都是死,差别是怎么个死法。
“是的,只有存折,在家里保险柜里。”
“有空去银行查查里面有多少钱,查到告诉耶一声。”
“好。嘟嘟嘟……”
挂掉电话后又听到山上传来钟声——咚咚咚。耶想起更高的后山有一个佛塔,很多年没去看了。
早晨空气寒冷湿润,发人清醒,爬山也不觉得累,很快耶就来到佛塔前。
多年前,耶因为年纪小,自然相信家长们,也相信了他们的信仰,曾经在这里虔诚祷告天地。
“希望耶认识的所有人都不要死。”
“其明,天地都有生有灭,你这样祈祷,天地也很为难!”
“那就希望所有人在耶成年前都不要死。”
“哈,哈,哈!好孩子!”
幼儿园大班毕业后的暑假,在路上遇到出殡的人群,抬着一个竹纸做的小孩。撒纸花的死亡风俗,令耶印象深刻。后来上了小学,开始知道校园附近有一口大井,曾经有个学长掉下去,再也没有捞起来。名字未知,只知道是附近部队里的解放军的儿子。因为尸体没捞上来,那口井的水无法再饮用,荒废好多岁月。
小学四年级,胆子开始大些,实地考察大井,确实是很可怕的深渊,又深又大,直径有三四十米。掉下去很难上来,即使有人救都难。
后来改造大井,抽掉大部分的水,耶再去观察,发现壁上有螺旋的路可以上下。以前水很高,没发现这些路。又一次,发现有大人走下去,在底下水边敲石块。
也许继续抽,把水抽干,可以找到学长的骸骨吧?但可能大家都忘记了,后来再也没有听说相关的事情。
这个学长有一天来梦里找耶,说自己姓鲁名耶……一年级就死了,没有体验往后的人生,让耶帮忙,因为耶的眼睛可以遍照环宇,耶的精神世界可以容纳多个意识。耶替他惋惜,就答应了。
因为见过死人,耶又一次上山祈祷:耶愿意折寿保佑家人在自己成年前都不要死。这个祷告成真了,真的等耶成年后,才有长辈过世。有四个长辈离开时,都来梦里找耶,说要把寿命还回来。
从记忆回过神,看见叔公的墓牌上写的名字是“圣德神”,这才是他未出家时的名字。耶跪倒墓前,焕然大悟——原来自己叫圣其明!上山前还记得的,上山后,学长的意识突然串线。但是还有一个问题:鲁信是怎么回事?他如果是同村人,应该也姓圣才对。
这时,释德灵从佛塔出来。
“住持,耶已经找回自己了。道信师叔不是姓鲁吧?”
“阿弥陀佛!德神大师早就知道你的问题,在他的日记里有记载不少关于你的事情。道信姓张,他只是配合你的迷失,等你自己发现。”
“德灵大师和叔公又是什么关系?”
“生殖繁衍是生物的本能和天命,人类世世代代传承。有子嗣的人传承基因,你叔公没有子嗣,只能传承名誉。”
“家族名誉、家产、技能这些都可以传承!”
“先说名吧!很多人都以为我是德神大师转世,这就是传承名誉。”
“耶看过一些经书说高僧可以先转世,生出一个新肉体和自己同时存在,等本体圆寂时,新肉体就会突然觉悟。你们是在演这出戏?”
“嗯。满足世俗人的想象。”
“这肯定不是真的。你们这不是装神弄鬼吗?”
“我从来没有承认过。我只是崇尚并继承德神大师的精神。”
“还有财产吧。”
“是的。当时我只是个送外卖的,德神大师说我有慧根,让我跟他修行,将来还能继承他的一部分财产。一开始我确实觉得寺庙这个盘子值很多钱,所以留下修行。在修行过程中慢慢皈依我佛,尤其是看了德神大师的很多手札,深深地折服。钱财乃身外之物,你账上有 106 万是我转过去的。”
“铃铃铃,喂,小明,你的存折里怎么会有 406 万?”
“喂。是叔公给的。Blah blah blah……”
“都对起来了吧?”
“是的。”
“但你还记得你的人生什么时候开始变异的吗?”
“你是说耶有精神分裂症?”
“好好想想?德神手札里记载一个你的故事,说有你高中时,有一次被神婆诊断为鬼上身,腰完全不能动。”
“好像是有这回事,后来那个女鬼跳楼自杀,耶就好了。说到怪异的事,这还不算啥,耶觉得更奇怪的是,大学刚毕业时,在第一个公司上班一年多,离职交接期间,才恍然发现太阳升起的方向和自己以为的相反,顿时觉得方向感全乱,无法接受,过一段时间,想去理清乱向的原因,却发现怎么都无法纠正。”
“这个好像和精神分裂关系不大,还有吗?”
“以前喜欢一个女神,想约她来宿舍吃饭,后来告诉一个女闺蜜,她哈哈大笑,说:‘原来你喜欢她呀!我帮你约,一定成功。’耶就回答:‘不成功,你赔我一万啊!’她说可以。然后她约好女神后,耶暗黑人格爆发,在 QQ 上黑了一顿女神,并把她拉黑。所以那天晚上,就闺蜜,来耶宿舍。她说要陪耶一晚……”
“所以你把她……”住持吞了一口水。
“是的,闺蜜狠狠地睡了耶一晚!耶把她当兄弟,没想到她居然是渣女!第二天耶就和她绝交了,一次绝交两个女生,何其壮观!”
“有点失控的味道了!鲁耶是什么时候开始影响你?”
“他是我学长,掉井里死掉的,小学就在梦里聊过几次,但一直没有什么影响。后来一个同事兼徒弟得癌症走了,同样的情况第二次发生,他也是没有体验过人生的,很想用耶的眼睛去看看,但这次,耶拒绝了。”
“为什么呢?”
“他想谈恋爱!耶觉得谈恋爱是个人私事,不能分享。”
“确实是这样。后来呢?”
“耶劝他早点投胎。现在想想,也许是鲁耶不想和太多人挤在一起,所以我们一起反对这事。见到道信师叔时,他是突然冒出来的,耶受了惊吓,而且对陌生人有一定提防,鲁耶就顺势出来撑场了。”
“这么说来,你倒是挺清醒的现在。不过有件事,你可能记错了。”
“哦?啥事?”
“你学长不是叫鲁耶,是鲁小耶!这是真名,你叔公有记载这个事。”
“呃!?鲁小耶!好熟悉的名字。凌笑越?鲁小耶?一样的缩写!难道凌笑越是耶虚幻出来的人物?”
“不是,她是真实的存在,这周末应该还会来。”
“对哦,耶有加她 Telegram,只是从来没聊过,马上找她聊聊!”
]]>今天编译 EOSIO/eos 出现一些 error: expected unqualified-id
。
1 |
|
编译输出:
1 | Scanning dependencies of target signal |
去掉 sigemptyset
和 sigaddset
前面的 ::
即可。因为他们是宏,宏都是全局的,用 ::
修饰反而错了,严格!
Boost 开发分支上已经修复:
]]>一天晚上耶尿尿时,手不知不觉按了冲水按钮,水冲完,尿却还没排完,只好尿完又冲一次!这太奇怪了,耶以前从来没有冲过两次!一定是内心太多疑问,导致心神不宁。耶决定早点解决它们。
晚上跑到道信师叔的寮房,开启逼问模式。
“师叔,耶有几个问题想请教你,如果不能得到解答,恐夜不能寐。”
“关于你叔公释德神吗?如果是这个你得问住持,我也很疑惑。”
“这是最大疑问,既然你不知道,暂且按下。关于耶在这里莫名受欢迎和尊敬原因,你应该知道吧?不单是因为前任住持吧!”
“是的,你受尊敬的真正原因是——你给寺庙带来更多香火!”
“这从何说起?”耶内心惊讶道,“耶没做过啥特别的事情呀!”
“你在老家是不是有点名气?”
“一般吧!”
“你从小就反对迷信,大人们经常教训要尊敬天地,鬼神之说宁可信其有不可信其无。但你坚决不信!”
“是有这回事!好多邻居都觉得耶很铁齿,他们应该看耶不爽,但因为耶学习成绩很好,所以他们都不好说啥。”
“说到点上了,你成绩很好,多次拿第一。在这点上,你比自己想的还出名。因为你来本寺,家里的人都宣传开了,很多神婆都认识你,说连你也信这寺庙,大家纷纷跑来这里烧香,都说这里很灵。后来又带动了别的镇。除了你自己,大家都知道是你的功劳,所以把你当宝!”
“卧槽?还能这样!耶是被你们卖了,还帮你们数钱?”
“不能这么说,这叫合作,双赢!”
“那可以给耶分红吗?”
“有的,有的!你叔公老早就用你名字开户,你爸没和你说而已,现在账上起码有三百万!”
“卧阔!难道是真的?是农行的吗?耶之前一直收到农行的短信,老当耶有很多钱时不时就安利高起点的理财产品,还以为他们发神经。耶自己没开过农行账户,读书时老爸给开的户里面现在只有两千块。”
“是啊,就是农行,你找住持,他会先帮你做个心理治疗,然后把存折还给你!”
“心理治疗?”
“突然发财,要安一下神……先回去睡吧,住持睡得早,明天再找他。”
耶正要转身离开寮房,就想起还有好多问题忘记问,内心不禁卧槽连连,差点又被哄了。
“叔公那么多侄孙,难道只给耶留遗产?”
“好像真是这样。你记得以前做了什么特别的事情,让他老人家眷顾吗?”
“这个真得好好想想。”
“那你回去躺着想吧!”
耶很想整明白,但睡觉实在太有意思了,还是先睡吧!临睡前,预定一个日程,第二天打电话给老爸问银行卡的事情。
]]>“你们喝什么?”
“水。”
“瞎说,耶闻着像酒。那是致癌的,一滴都别喝。”
“你这鼻子!善哉善哉,此心向佛,见山是山,见水是水。”为了摧毁证据,他们赶紧一口闷。
“哦,看来真的是水,但你们为什么流泪,呛了?”耶看他们辣出眼泪,太装逼了。
这时厨大师来了:“居士,饿了吧?素食还吃得惯吗?”
“大师好,耶突然想吃面。释德神喜欢吃的那款。”
厨大师一看弗行、弗识的囧样,就罚他们帮忙下厨。没一会儿面就端上来。
“果然是好面!这面拉出来后在太阳下晒干,所以比一般面难煮,大师能很快把它煮得刚刚好,配的白菜、菌菇、豆皮全都是一样的熟度,手艺高超,肯定有多年功力。”
“用心就可以做好!”弗行抢答道。
“耶觉得应该把每个料的下锅时间都量化,反复练习多次,煮时考虑当地气压、当天温度、湿度,才能做好!”
“气压、温度、湿度?”
“嗯,气压影响水的沸点,温度、湿度影响心情啊!你不是说要用心?”
“哈哈,居士真爱说笑,贫僧不过是熟能生巧。”厨大师很谦虚地说。
耶吃了几口,觉得太好吃,正感动得内牛满面时,脑海里串出两个很陌生的女孩……耶陷入沉思,这里的大师都太神奇。首先是释德灵,三言两语就哄骗耶在寺庙打工,然后是鲁信的面试,正常时候耶是不太相信有钱就能快乐的,除了钱,还应该有一定道德修养和精神追求,但和他聊的时候,居然莫名其妙地唯钱是尊!?现在吃了厨大师的面,又诡异地闪现陌生女子。这些人都是会邪术?或者催眠?
“厨大师,以前是不是有两个年纪比我稍小的女孩子也吃过你这面?”
“有啊,不过很多,不知道你说的是谁。”
“是将门之后,气质比较高贵,一个胖一个瘦,口音是北方人。”
“没特别的印象呀!可能是你自己的记忆,和她们有没有吃过这面没有关系吧!”
耶带着疑问离开,随意转了转,就看到上山时道信师叔睡的那棵树。耶使出翻墙的本事,爬了上去,于是发现这树上有个大树眼,是内凹的,正是一个天然的躺椅,只要不大翻身,睡觉都是没问题的。
耶躺好,看着树叶之间透着绿光,心想:白天还好,晚上这里一定很恐怖!反正白天现在不怕吓,干脆先眯一下。
耶打算去 JFC 约会,坐电梯上楼,开门时听到外面枪战!吓得耶赶紧关门,按负一楼。电梯里的人说:“今天许效舜来 JFC 吃饭,怎么有人要绑架他吗?”
“绑架许效舜?开玩笑嘛?这个人耶十几年没见过,过气的明星也有人绑架!”
到了负一楼,发现负一楼和负二楼都变成厕所了……可怕!很多人都往地面上跑,结果被打死,楼顶几层都着火。耶运气好,捡了一把枪,心想可以和歹徒拼个命,又想拿着枪,要是上去遇到警察叔叔,不知道会不会被当歹徒打死……吓得耶又把枪扔掉。这时林琳和过萍出现,捡起枪说她们是军人,懂枪法,可以保护耶。
耶建议去车库,开车离开比较安全。但原来车库应该是负一、负二、负三层的,现在负一、负二都变成厕所了。林琳建议去负三看看,过萍说负三可能是化粪池,不能去。耶觉得很有道理,因为负三即使是车库,开上地面也要经过负一、负二,根本不通。唯一的办法是去火还不大的高层,往下消灭那些歹徒。但现在电梯已经不安全,从通风管道爬上楼,也可能半途就被烧死。
两难之时,许效舜来了,说:“这个楼其实是可编程的,连到控制系统就可以把车库移回负一、负二层。现在这里是厕所,就是被歹徒中的黑客修改的。”
“我们没有密码,就算有,黑客肯定修改过,我们现在也没法进入。”
“只要到控制中心,本地操作是不用密码的。”
“好办法,控制中心在哪里?”
“负三,游过一片屎尿后就可以到达。”
“吓尿……这安全性可真高!但耶并非浪得虚名,毫无逻辑的世界,这肯定是在做梦,吓醒就好了!”
耶睁开眼睛,绿油油一片,很快又睡着。已经开着特斯拉载林琳和过萍离开。
“两位美女,虽然应该没见过,但你们的名字很耳熟!”
林琳说:“是吗?我倒是感觉好像见过你。”
过萍问:“你叫什么名字呢?”
“鲁耶。”
“嗯?和我们一个学长同名同姓哦。”
“同名同姓?耶的年纪当你们学长应该没问题,会不会就是耶?”
“呃,不会,他小学一年级就掉到大井里淹死了,尸体都没能捞上来。”
“哦!真不幸。所以你们俩是幼儿园同学?很奇怪,耶记性很好,没上幼儿园的事情都记得住,唯独幼儿园有一段正好忘记。”
“是啊,我们只在也门市读了一年幼儿园,后来随父母调走。最近是来也门玩,没想到就遇到枪战,真是太惊险了。”
“是啊,吓屎耶了,你们都没事吧!”
“我好像流血了,但是绿色的。”
“我也是啊,奇怪,怎么都是绿色。”
耶回头看她们,一脸绿光,面目狰狞……吓醒。
]]>经过几天观测,大体搞明白寺庙如何赚钱。那些念经的僧人,会给信徒开光、超度,比如有些人买车,图个安心会开到寺庙”安车“,一般由小僧作法事,车主给小僧几百块。也有的豪车是高僧出马,就送几千块。这特么跟抢钱一样好赚!可惜耶不会念经……也有些信徒,有点事就自己跑来送钱。这可能就是传说中是做慈善吧,反正大家都开心就好。
这边的早餐很贵!不捐点钱,怎么好意思吃?一捐起码是百,吃一顿早餐……还有午餐、晚餐就更贵了。
耶从来不给钱,奇怪的是,没人有意见!这里的每个人好像都很喜欢、很欢迎耶,实在不懂为什么又这么轻松融入一个陌生的环境。不禁想起以前做的一个梦,耶到陌生的世界,所有人仿佛都很期待和尊重耶,不像现实中,耶到大部分地方都没人认识,被人无视,更惨的是有些地方的人看到耶穿拖鞋还不欢迎。在寺庙,耶可以穿拖鞋去任何地方,甚至还学会穿着拖鞋爬树。
为了搞明白受欢迎的原因,耶开始和弗空、弗色等年轻一代搞好关系。他们一行人满脸青春痘,一看就知道是未经岁月的小年轻,应该还在戒色……听说现在的和尚都可以谈恋爱,耶以前是拒绝的,但想起不久前的夫妻生活,现在表示赞同。
摧残激情就是摧残生命,使欲望得到升华才能防止欲望的泛滥。
由戒色这个话题开始,发现他们大多数是明白当和尚只是个职业,只有弗明、弗智感觉对高深境界有些追求。耶的计划是观察一下他们谁比较弱,四下无人时打一顿再逼问。更熟悉之后,他们都认耶这个大哥,就没打的必要了……但他们似乎并不明白耶受欢迎的原因,只知道上面一级级交代下来要善待耶。
“看来还是得找师叔问问”,耶正思考下一步,突然听到弗色喃喃:“凌姑娘又来了!”然后他们几个小伙子就开始躁动。
“啥人物,让你们这么不淡定?”
“是个信徒,怀孕后每周末都来烧香拜佛……”
“擦,你们这些死小孩,孕妇有啥好激动?”耶不耐烦地打断。
“是她同行的妹妹,十分可爱。”
“哦?可爱?是什么概念!”
弗智接话:“在《起世经》中,殊妙可爱出现三次,端严可爱出现八次,杂色可爱出现五次,还出现鲜明可爱、微妙可爱各一次。用可爱形容女施主,并无不可!”
这货竟说废话,耶早就想打了,但是人多不方便抽他,“呃,听你们念经,还是自己去见识见识吧!”
卧槽,真的很可爱……耶考虑还俗!哦,还没出家呢!这一定是个考验,要忍住。
耶只是靠近一看,都还没想出怎么搭话,她倒是先问话了:“这和尚是新来的?”
“你说耶吗?耶不是和尚!”
“那你剃光头干嘛?”
“呃,代码写多掉头发,干脆来出家,但住持还没同意。”
“哈哈……原来是死程序员!”
“姑娘借一步说话!不要妨碍你姐拜佛。”
“哦?你还想打我不成?”
离开大殿,耶回答:“没有没有,看姑娘十分可爱,想认识一下。”
“可爱?你是说我不漂亮吗?”
“不是不是,在《起世经》中,殊妙可爱出现三次,端严可爱出现八次,杂色可爱出现五次,还出现鲜明可爱、微妙可爱各一次。用可爱形容姑娘是我佛惯用的无等赞美。”
“你不是死程序员吗?还研究《起世经》,这个经我很熟的。”
“刚学的,研究不敢,随便看看。姑娘似乎对程序员有偏见!”
“呵呵,以前和程序员约会过,无趣得很,除了上班、加班,下班就是玩游戏。”
“哦,耶不会玩游戏,在寺庙写代码,工作时长没有挨踢公司那么长,也不用加班,还包吃包住。”
“这寺庙还真时髦,刚招的吧?”
“嗯,深度学习方面的,对不懂行的都说是人工智能。”
“人工智障嘛,我知道,我们公司专门投资这个领域的。”
“原来,姑娘是投资界的,难怪气质非凡。”
“干吗叫姑娘,你是上世纪的人吗?这是我的名片,凌笑越,叫我凌姐或者笑笑都可以。”
“好的,笑越。好听!人如其名。鲁耶,没有名片,是耶鲁大学的鲁耶。”
“你也是耶大的?”
“呃,耶不是噎大,是吓大的……是说耶鲁的鲁,耶鲁的耶。”
“哦,我是耶大毕业的。”
“学霸,加个 Telegram 吧。”
加完联系方式,她姐姐就来找她回去了。
她的脸上有很明显的酒窝,虽然表情很淡然,却好像随时要笑起来。耶似乎也受到感染,心情舒畅一些。
“谈恋爱本身是很美好的事情,能不能结婚并不重要。”
耶回头,看到是弗明在装逼,顿时条件反射打了他一拳,“你谈过吗?让你装逼!”
“哎呀……居士下手太狠了!还好小僧练过金钟罩。”
“突然在武林高手背后出现是很危险滴,还好你有练过,保住小命!耶要去写代码了,再见。”耶心想:“卧槽,原来打赢小和尚不容易,还好上次没有冒然出手。下次试试弗智!”
]]>小学低年级,过元宵节,和小伙伴们去农具厂取锯末做火炬的燃料。顺台阶下坑,不料头顶上的锯轮突然开始转动,上面有个大人大叫着让大家赶紧出去!其他孩子都怕被大人打,不敢动,而耶是孩子里最胆小的,理论上应该往反方向跑进去,然后被锯轮切开脑袋……神奇的事情却发生了,耶的意识跑到大人脑里,用他的眼睛看到耶头顶上的锯轮……然后耶拉着小伙伴逃命出来。
小学五年级,喜欢独自在学校围墙上发呆,有一次不小心掉下去,以为要死了,结果居然啥事都没有。
高中时,一次下雨时,在宿舍 11 楼楼顶,突发奇想,如果自己死了,是什么样的感觉,宇宙是不是失去意义,时间飞快流逝会,耶又再次出生,但在耶的意识里,时间太久远也等于一瞬间。于是耶爬上围栏跳下去,结果吓醒了。
大学时,有次高中好友骑摩托车找耶玩,非要耶载他试试,耶没有学过摩托车,只会飙车,根本不会停。十字路口,一辆大卡车在垂直的方向行驶,耶估算如果不减速一定垂直相撞,但耶并不会停车,于是心想:卧槽,要赔一辆摩托车了。结果神奇的事情又一次发生,耶从同学脑里隔空借来摩托车行驶技能,慢慢把车速降下来,并向右拐,最终大卡车先过路口,只是轻微追尾大卡车。那瞬间,耶感觉到同学和卡车司机的恐惧,唯独没有自己的。
如果多重宇宙是真的,耶应该在其它宇宙死过很多次!但没关系,耶相信自己在无限中会重复无限次。如果用一串数字代表耶的意识,它可能很长,但这串数字一定藏在 pi 里,因为它是无限不循环的。再复杂的意识,它一定是无限的一部分。只是记忆丢失后,没有任何意识能肯定自己以前存在过。
失忆也是好事,它让死亡的时间变得不存在。人类最害怕的事情,应该不是死亡,而是老化。人老之后,各种无法自理,失去自由,当活动空间只剩一张床时,甚至还不如坐牢。所有亲人也会视之为负担,不愿来往。
耶设想过很多次,自己沦落到这地步时,如果不能选择安乐死,那会是多凄凉。人生终究是孤独的,所以耶一直是个丁克。结婚不积极,谈恋爱也不会花太多心思。这些关于孤独的思考太多太经常出现在脑海里,耶决定想办法解决它!
耶反复思考之后,认为问题出在:自己天性乐观,精力旺盛,所以容易想太多。为了追求平静,应该做一些平衡,比如太乐观的时候,听悲情的音乐;悲观的时候,就听轻快的音乐。可以用于平衡心境的事物有很多,除了音乐,还有比如食物、电影、运动,但这些太平常,耶已经厌烦,所以想干脆出家!
耶首先想起以前半夜去拿葡萄爬山,印象太深刻!于是联系拿葡萄寺,结果客服说要出家得硕士学历……神马?佛不是说众生平等?
后来又想起叔公在金钵寺出家多年,以他的资历,不是住持,也应该是隐藏 boss 扫地僧!
叔公没有微信,也没有电话……耶为了表示诚意,特地坐公交到山下,然后徒步上山。如果直接打的上山,会显得不够苦逼。毕竟在电影里,从来没有见过谁是开开心心地出家的。
一大早地来到山脚下,耶就不淡定了,预想的剧本是:把扫地僧的扫把接过来,表示自己一心向佛,并一路扫上去!不料,多年没来,已然没有扫地僧,改为聘请的专业清洁工……为了不打扰他赚钱,耶只好放弃这幕表演,跑步上山。
山路蜿蜒崎岖,跑三千米气喘吁吁,还没到!发现跑偏了……难道这是佛的考验?突然一条蛇从树上掉下来,差点吓醒!这春寒料峭的清晨,蛇不是应该冬眠?难道耶是许仙转世?吓得耶赶紧往回跑到上个岔路,开手机导航,才找到寺庙方向。
“出个家,还得靠科技,太没诚意!”
“什么鬼?你怎么知道耶是来出家的!”
耶环视四周,那蛇没跟来啊!顺着声音找去,原来树上有个监控摄像头,还带语音通话功能!但是这声音也太逼真了……
耶想起电视剧里有一幕:得道高僧神神秘秘的叫来小和尚,让他出门迎接某位江湖大侠。小和尚出门,真的发现有人正上山拜访,便问是不是某某大侠,得到肯定的回答,便表示高僧等待多时。于是小和尚和大侠不禁双双对高僧佩服不已。
真特么装逼!
“小伙子,看啥呢?发什么呆?”一个人影从天而降,站在耶后面,手压在耶肩膀。
耶遭受一百点惊吓,这情节是忍者暗杀?耶心想:“现在只要动一下下,头马上就掉了?”
僵。三分钟过去。也还是不敢回头看。气氛十分尴尬。
“我跳下来,扭到脚了!借你肩膀扶一下。”
“蛇……蛇精?”
“贫僧鲁信。”
嗯?居然是个大活人,刚才躺在耶后面的松树上,被树干挡着……因为回音,耶以为是反方向的,就觉得扬声器的声音没那么保真。真是太意外,太惊喜!噗通噗通。
“同姓哦!小弟鲁耶。确实是来出家的。”
“小兄弟,看你眼神深邃但呆滞,莫非是程序员?”
“嗯?你怎么知道的。”
“我出家前是挨踢公司的 CTO。你有啥八哥解决不了的,怎么非要出家?”
“耶是来寻找一个宁静的人生。”
“哦!那你只要赚够钱,爱干嘛干嘛就行了呀!”
“啊?现在的和尚都这么瞎说大实话的吗?”
“出家人不打诳语,实话相告,这上面是不欢迎穷人的。从底层修行,并不能给你宁静的人生。”
“耶的叔公是释德神,找他跳个级可以吧!”
“哦?居然是家师的后人!师傅他老人家几年前就圆寂了。不过想来,我们应该是同村人,贫僧帮你试试。”
“谢谢师叔!”
“没事没事,款待几天,你自然会想通。”
“师叔指想通神马?”
“佛门清净地会让你听见内心的噪音。”
“然后呢?”
“有钱就有宁静。阿弥陀佛!”
“呃……看样子师叔领悟很深,一定很有钱了?”
“有点,有点。八千万存款,五套房子收租,父母都是公务员,丧偶未育,一身轻松。”
“此……嗷……真牛逼。”耶恍然大悟,现在的世道都是财务自由才有自由,难道他说的有错?应该没有,只是耶偏不信而已。因为贫穷限制了耶的认知,耶只想用精神修行的方法来强行解决困境。再说,虽然有钱后才好追求精神财富,难道穷人就不能提前考虑?
师叔用庙里专用的通信 App 发点信息后,就让耶自己上山,说自有安排。
见到住持后:“老衲释德灵,施主为何出家呢?”
“耶从小活在自己的小世界里,长大发现社会网络太复杂,想换个简单的、小而美的环境生活。”
“本寺虽处深山,可也是社会网络的一环节,你来这里只是换个工作,这是你要的吗?”
“工作?试用期三个月?”
“是的,五险一金,包吃包住,弹性工作时间,不打卡不考勤,基本工资 4800,有岗位奖金还有分红。”
“出家的同时还能写代码,真不错!耶可以应聘机器学习开发工程师岗位。”
“稍后你找鲁大师面试,谈薪资。”住持随后对小僧说:“带这位居士去厢房安排住宿,然后带他去鲁大师寮房面试。”
耶心想:“麻痹,这老和尚法力深厚、气场强大,被带歪了!耶是来出家的,怎么变成跳槽……出个家还真特么难鸭!难道出家算体制内编制?水真深!”
“鲁大师好!耶来面试调参工程师。”
“贫僧佛道双修,法号道信。”
“好的,道信师叔。”
“第一题:舍利弗比释迦牟尼佛年长,却是释迦牟尼佛的十大弟子之一,这是为何?”
“释迦牟尼出家前是乔达摩悉达多王子,家境、地位比较高,有钱有权就是老大,和年龄关系不大。”
“第二题:当代年轻人越来越穷如何解决?”
“提高高科技企业的估值泡沫,年轻人更懂科技和炒作概念,赚了钱赶紧跑路,让大妈接盘。”
“量化交易靠谱吗?”
“没有内幕交易靠谱。”
“好!你过关了。”
“不问点技术、数学啥的?”耶很纳闷,心想:“麻痹,为什么又轻松搞定?咦!为什么是又?”
“不用,我对你早有耳闻。”
“居然如此!但耶有疑问。你们不让耶出家吗?”
“家师不让。”
“他不是圆寂了?”
“他老人家很早就预言如果他后人来询问他为何出家或者来出家要怎么处理,具体情况你要找住持了解。”
“哦?现在的住持似乎很厉害,会干扰别人的想法!”
“是的,他是莫名出现的,家师传位给他后,立刻圆寂,这是也本寺最大疑团。”
“难道有妖孽?”
“应该不是,据我观察释德灵和家师各方面都很像,有时候我都怀疑他们是同一个人。”
“家里人传言叔公是因为失恋才出家的,是真的吗?”
“据我所知,失恋只是表面原因,更深层的原因是觉得这个世界有 bug。”
“耶也觉得这个世界 bug 很多,你说的哪一种?”
“师父年轻时就固执地追求长生不死!青年时期,他认为繁殖也是生命的延续,本想娶妻生子,但很不巧,他喜欢的姑娘居然爱上自己的堂哥,导致他一气之下出家了。”
“除去追求长生不死的部分,这就是老家传说的版本。”
“追求长生不死才是重点,也是师父多年唯一研究的方向。但是在佛经里研究怎么可能呢?”
“嗯!应该去研究克隆、换脑术之类的科学方法才对!”
“没有这么简单!所有弟子都觉得这是不可能的事情,但虔诚的信念也是好事,大家都愿意陪伴师父老去。直到有一天,师父病倒,释德灵突然出现……”
“好吧!越来越像灵异故事了……这个释德灵不会就是研究换脑手术的落魄医生吧?”
“并不是,他是送外卖的!”
“哇!好意外……他不会是来给叔公送外卖,结果顺便就继承叔公的衣钵吧!”
“耶!你真是聪明伶俐,一猜就中!师父重病后,说几十年没回老家,很怀念老家的干面,我就联系老家小吃店帮忙弄了一份材料,超范围送来。送快递的大叔自称是老家人,认出师父,亲自下厨给师父煮正宗的干面,后来长谈一晚决定留下就地出家。”
“好的,师叔,耶这就去送外卖。”
“哈哈……现在恐怕没用了!”
“话说德灵大师原本没成家吗?一晚上就舍弃红尘,居然比耶还快,真厉害!”
“不知道!我调查过,老家没人认识他!这就是最怪异的事情……师父收他为关门弟子,把一生所学精华都传授给他,出关后,他就宛如师父本人,所以大家都接受了他的领导。”
“神奇得可怕!耶觉得我们也很有缘,你什么时候把家产也传授给耶吧!”
“赫赫,你真幽默!不谈这个了,给你介绍我的一批新弟子——弗空、弗色、弗受、弗想、弗行、弗识、弗明、弗智,以后有什么需要帮忙的可以找他们。”
“好的。”
]]>二娃两岁前可能是两倍,但以后就不到两倍了。
举个例子:喂饭。一个大人喂俩娃,一娃喂一口,切换时间,也给了娃咀嚼的时间,最终俩娃都喂完,并没有比只喂一娃慢多少,可能反而更快。
再举个例子:散步。在安全环境下,一娃、俩娃都是一样的散步。
有些父母,一人负责一娃,这其实是不科学的。妈妈带俩娃、爸爸带俩娃、一起带俩娃,三种模式合理分配才对。
用追剧类比一下,每周出两集,如果两集一起下载,通常是不好的选择,而用全部带宽下载前一集,好了马上开始看,同时继续下载后一集,这样时间利用率更高。
一个大人是能带俩娃的,所以一个大人带一娃的分摊模式其实是同时浪费两个大人的时间。
一带一,大带小,早二胎,早轻松。大娃比二娃大两岁左右就能完成这个任务,尤其大娃是女生。
丸和面是一对姐弟。
俩娃一起玩时,大人轻松,孩子快乐。
娃小的时候更依赖母亲,但听懂人话之后,却更听父亲的话。
所以,爸爸应该更多负责赚钱,至少 91%,然后一有时间,就多抱孩子,这样事业家庭两不误。
妈妈应该掌控家庭经济和时间的分配,因为女人一般更有协调能力和时间观念。普遍地说,女人一般也更懂花钱,孩子更多跟着会花钱的一方,日子也会过得比较高端。当然这不是一定的,需要根据实际情况做相应调整。
这和生二胎有啥关系?嗯……孩子小的时候,父母并行上班可能不是最优选择……生二胎妈妈才更有机会合情合理不用上班,虽然有所牺牲,但才会走向更合理的局面。如果妈妈工资比爸爸高很多,也可能反过来,爸爸辞职带孩子,不过不同教育,肯定是培养出孩子不同的结果,想清楚、开心就好!
]]>举个例子:换了一辆 A6AR,3.0T 的动力,忍不住要飙车,应该如何克制?
本来是啪啪啪 59 天的,中途遇到春节,女主放假 10 天。
确实对稣不公平,但是稣并不在意,因为稣是鲸神链模式,在意的是减掉性的爱情。
严谨地说,这确实不科学。但这也不是鬼神说。
换头手术已经能实现,以后可以只换脑本身。如果我们用一些数字和公式来表示一个人的意识,我们会发现每个人的表达式都是不一样的,如果两个人不一样的地方很小,那么当他们中一人发生病变,就有概率变成另一个人。但不可能因此把一个人的记忆转移到另一个人脑里。
附身的故事是发生在识界中,识界本身就是模拟的系统,系统要修改每个人是很容易的。记忆的转移也可以实现。
附身结合故事最后的催眠洗脑,其实是想说明一个道理:如果一件事情,只有您自己一个人知道,那么这件事到底存不存在?您说存在,别人都以为您是开玩笑的!进而解开主题:任何一个人都是孤独的。
取决于精神力,不止失恋可以,做梦、昏迷也可以。但每个人的方式和程度可能会不同,建议在恋人指导下测试。
]]>改编自霹雳主角“清香白莲素还真”的诗号:
]]>半神半圣亦半仙,
全儒全道是全贤。
脑中真书藏万卷,
掌握文武半边天。
一个前女友,带耶去基督教堂练英语口语,自我介绍时,耶说自己叫耶稣,结果当场被打。分手。后来只敢简称耶了,当然有些人称呼耶为“爷”……真是折煞耶也!耶还是安静地当个小穷逼吧。
又一个前女友,开始谈得好好的,突然有一天讨论起信不信中医,耶小学五年级就调研过《本草纲目》,越看越觉得是能治病的邪术,后来又听两个罗胖黑中医,觉得很有道理,就很坚定地告诉她:不信中医的理论。然后,耶和两个罗胖都被拉黑。
又又一个前女友,是虔诚的佛教徒,耶和她讲解一神论,宇宙只有一个神,他在不同教派里有不同名字,但都是同一个神,比如道家称呼神为“太上老君”。她很不服气,耶又用相对论和量子邪说分析了道家的先天五太,并得出结论,道说比较接近科学。没错,耶又失恋了……
有一天,耶突然通灵,有一个强大的意识入住了耶的脑海里,情商哗哗上升,于是耶不止能预言对很多人事,还可以搞定女票!
2018 年 12 月 17 日中午,耶出去吃饭的路上遇到一个高挑的女纸,主动对着耶笑。
“我们认识?认错人了吧!”
“夫君!我是凰儿呀!”
“黄儿?不认识……蓉儿还有听过!”
“夫君怕是忘记 8 个月前的梦了,我是白云凰。”
“嗯??那个梦居然是真的!你不会是看过圣小开先生写的博客,以此来坑骗耶吧!”
“怎么会呢!我现在已经占据主导,还学习好现代很多知识,才终于遇到夫君的。”
“所以你真的是美柚员工!但是你的脸怎么这么黑,是烧黑没退吗?耶记得你本相很白,很高的。”
“夫君说笑了,你以前不是说先看身高的,这个女孩子正好 167cm,脸是黑了点,我也有点不习惯,但附身人选有限,只能选她。”
耶心想:就算她是脑子进水精神错乱,反正耶也没啥好坑骗的,就从了她吧!于是耶心情愉快地答应了:“好吧,娘子,勉强可以接受!”
甚至还写了一首诗:《诗盗·情翔白云稣凰真》
半人半鬼半单身,
有情有义有慧根。
脑中进水肿满贯,
掌握合分了无痕。
于是耶和凰儿开始过起没羞没臊的夫妻生活。此处剧情,主要靠幻想……
两个问题比较严重:一是,凰儿只能主导七七四十九天,为什么?可能是因为这个数字逼格比较高吧……另一个问题,凰儿离开后,肉身原主人可能会有这些日子的记忆,毕竟记忆都是存在她脑子里。到时候可能会很尴尬。
才怪!精神凌驾一切,先操心,再不操心。
耶学会催眠术,第 49 天,凰儿自愿接受催眠,忘记这一切。
2019 年 02 月 15 日晚,耶又遇到这位美柚员工,她果然没认出耶来。
只是她身边跟着另一个男人,耶又失恋了!远比之前进展中断的失恋来得凄凉。
但失恋的那几天,耶的神经系统出奇灵敏,预测了好多事情都成真。比如朋友公司有谁要离职,有谁要被裁员,有谁要被降职,和朋友们吹完,全中。
梦见海水五彩缤纷涌上岸,结果某地海啸。
梦见捡到钱,现实中真的捡到钱。
不过几天后这种神奇的技能就伴随神经活动变温和而消失。也许这样的技能太消耗精力,所以注定不能长久。
]]>满惶猪:骄傲自满但惶恐的肥胖症患者。
1989 年,郑智化,《中产阶级》,内牛满面听后感。
30 年前的歌,如今贴切应景!
作为化哥的脑残粉,稣大胆地说一句:只有化哥的歌才是这个时代的真歌!《淡水河边的烟火》《麻花辫子》《就这样流浪》《用我一辈子去忘记》哪首不是我们 00 后的真实生活写照!?
]]>经过一阵修复,稣在地狱醒来,“谷绵小姐姐?怎么是你?”
“我不是现实世界的谷绵,我只是使用她的数字形象的程序,帮你转世。”
“转世?哦,稣已经死了……能原地满血复活吗?”
“你怎么会有这样的幻想?”
“不是要去拯救陈博士吗?咱们是一伙的吧,你当然要帮稣!”
“我是中立的程序!你现在有选择权,但选项有限。一种是重新出生,一种是直接附身识界里的成年人。”
“直接附身识界里的成年人可以保留记忆是吧?”
“都不能,选择附身,还会融合本体过去的记忆,有精神分裂的可能。但你能更快再去枫林晚执行拯救计划。”
“哦,稣选择重生!拯救陈博士只是顺便,并不是稣的必要任务,你们自己救吧!”
“你确实是个特别的人,一般人都逃不过蔡戈尼克记忆效应,而你竟然选择直接放弃。”
“无限的世界有很多机会,为什么要在意过去没完成的事情?麻烦你帮稣选择个帅点的基因。”
“没问题,选择重生,你有三个托梦的机会。”
“托梦给吴情、洪锦韬、未来的妈妈。”
稣死后,吴情在稣的墓边流过泪。
洪警官让吴情住进 13 号房,并给以更多照顾,但她的梦境依然很幽怨。进入她的梦境后,稣的意志抑制了她的显意识,直接和她的潜意识沟通。这机制真保命,不然直接和一个女人讲道理,估计会被打死在梦境里。
“吴情,稣投胎前有些话要告诉你,你要记得重中之重是:关键的时刻,不要走上犯罪的道路。”
“为什么说这么莫名其妙的话?我没打算犯罪啊!”
“你看过《白日焰火》吗?女主也没打算犯罪,但却不小心犯罪了,还连带毁了好几个人。”
“我没看过……在这里也没有办法看。”
“女主和你一样高瘦平胸,你可能比她更高,看起来人畜无害,剥丝抽茧后,真正的罪犯起源者却是她,而犯罪的起因是穷,赔不起一件皮衣,被逼肉偿,失手杀人。”
“你真是不忘黑我。我会注意的。”
“你记得进入枫林晚前,有什么特别的事情吗?”
“我有个网友学长在学习上经常帮我,他约好月底要来找我,还没见面,我就进来了。”
“你其实是被洗过脑的,有可能你们见过面之后,你的人生就无意间走偏。枫林晚的意义是阻止你犯罪。其他人也都类似。”
“你怎么知道的?”
“稣是枫林晚的救世主。这不是普通的梦境,千万记住!”
“信你了,能救我离开吗?”
“稣已经死了。洪警官也很快会自杀,你的人生自己控制,以后要靠自己!永别了,吴情,快醒过来。”
“洪警官,稣已经回到现实,特来托梦告知!稣在现实等你!”
“我可以通过死亡回到现实?”
“是的,不要害怕,你一枪下去,稣就回到现实逍遥了,感谢!不然现在也无法通过现实中的技术托梦给你!”
“我要离开这地方!太好了!太好了!”
“两个梦托完了,现在选择直接附身可以吗?”
“圣小开先生,你怎么可以出尔反尔?”
“不是还有一个梦没托呢?按三分之一折算,你帮稣附身到一个 6 岁的孩子身上?”
“对不起,没有这种操作。请继续托梦吧!”
“不要啦,不要啦,稣就死在这里吧!赫赫……”
“那就执行随机操作!”
“什么?还有这种操作……卧槽,救命啊!”
“周老师,小开学长的神经活动刚才又瞬间爆发,影响了整个识界!”
“嗯。他每次失恋都这样!”
]]>如果洪警官就是稣要找的人,稣一定还会回去,他就能验证自己的推理。如果是这样,她是现实中和稣一起进去的正常人,居然这么狠,为了离开识界,在里面杀掉好几个人?稣还要冒险回去救她?
“林娘卡厚,稣下次再来,不是回来给你看的,是回来谈恋爱……”稣想着。
突然有一个黑影对稣说:“我来取你的狗命!”
“狗命?赫赫,稣都被打死了,你取个鬼!取吧!”
“哈哈哈哈,我是要娶你的谷绵。”
“嗯?谷绵是谁?你要娶她,关稣什么事?”稣为什么如此悲伤?不禁内牛满面……不行,稣不能死,赶紧吓醒!
“你的名字,为什么不是棉花的棉?棉花糖一样的女纸,不是更软更甜吗?”
“我名字是谷神绵绵不绝的意思。”
“进去之前,先玩个游戏放松一下,你陪玩吧!”
“不,不方便……让我的虚拟形象陪你吧!”谷绵大惊失色,“我未婚夫发现会骂我!”。
“这是你的工作,怕啥?”
“我看过你的资料,你最常玩的游戏是 6ex!”
“6ex 的数据是保密的,你居然偷窥稣的隐私!”
“导师让我看的……”
“你出八哥了!用虚拟形象玩 6ex,会在区块链上留下记录,反而会被发现,而真人玩受隐私保护,除了你导师那个变态,外人很难发现。然后,你居然以为稣要玩的是 6ex,等下稣要用截霸打死你。”
“截霸!哦,是你常玩榜上第二名……”
“是的,打人截图发活人圈的截霸!”
果然,把她打死 N 次!导致她不停地催,识界的时间流速是现实的两倍,要赶紧回去找人!
“再进去之前,稣可以看看现实中的另一个实验对象吗?”
“对不起,这是保密的,但我可以告诉你,她是个美女!”
“比你美吗?”
“不同类型,比我矮 3cm,比我丰满,还是个博士。”
“你多高?”
“167cm。”
“哦,原来你和稣所有的女朋友一样高。”
“我知道,你最喜欢脸净高瘦平胸的腿妹,这也是导师让我来负责你的原因。”
“你导师果然很变态,明知道你有未婚夫还把你往火坑推……”
“老爷子,你在想啥呢?!”
“想赶紧回识界,省得在这里吃狗粮。别让那啥博士久等!”
“陈博士!”
“哦,陈博士的秘书都这么年轻漂亮吗?”
“陈博士不是我负责的。”
临死前想起,泡进超羊水前的事情。原来自己进来前,一见钟情又迅速失恋……真是悲伤的开场和悲惨的结局!失败!
更惨的是,泡超羊水前要果体,都被看光了,稣在识界里居然还担心被观测而不敢车震!失败中的失败!
接入识界的客户端是个拦截式输入输出设备,人脑是一个处理器,识界客户端把人脑处理器接入识界,于是人就以为自己在识界里。现实中只要有外人启动脱离识界客户端程序,稣和陈博士就能醒来,他们为什么不这么做?这个实验背后真正的目的是什么?
稣必须醒来问问谷绵的变态导师!然而稣已经被打死了……
]]>特效:9 分,确实是大片既视感。唯一发现的问题:每次切换到星球画面时,总觉得有点粗糙。
配乐:没记住……只能打 5 分!以前看《泰坦尼克号》能记住好多悦耳的音乐,还认识爱尔兰风笛。经常看的“霹雳”,也有很多美妙的配乐,相比之下,《球》的音乐制作很显然无法取悦 UMU。
科幻部分:8 分。有不少文章分析,木星点不着。另外推动地球时,地壳的变形和大气层的流失也是问题,地球被太阳拉着走是引力作用在地球上的每一个物质上的,因为日地距离太远,地球可以看成一个质点,认为受到的力几乎每处都相同。但推着走就不是每处都大约相同了,这点从月球引起的潮汐就能理解。再来是加速过程中需要损失掉地球的质量,这个量恐怕会很大,导致地球变小。两个铁球同时着地,人不是铁球……但无所谓,大家开心就好。
三观:6 分。一开始安排放弃妻子的那幕很有争议。最近,UMU 也和脑波讨论过类似话题:若重伤难治,就算治好也是一辈子残废,要怎么办?但这是私人话题,自己人聊聊就好,不应该放出来教坏小朋友……这就是为什么 UMU 前面提到,更推荐去看《疯》,尤其是带未成年去看。这段放出来是可以增加一些对人性的探讨,但在贺岁档,UMU 相信改编一下会更合适。其它地方也有点故意煽情。对比一下好莱坞的大片,虽然很多三观十分普通,一点也不引人思考,让所有专业影评都没啥好分析……但那些更可能是普世价值,本来就是很简单的道理,没啥好装逼的。大过年的,拿高深的人性来探讨,可能不是时候!
演技:6 分。大部分还好,只有吴京部分打 5 分,感觉和整体观感不太搭,引人出戏。这里说的出戏是指:在观影过程中,会想吐槽,结果就有一小段剧情进入下意识没认真看好。另外,点赞“韩朵朵”,观看时就觉得很眼熟,后来发现她演过《哈啦啦小魔仙》……UMU 仿佛回到童年!
故事设计:8 分。死不少配角、一伙路人团灭、饱和式救援,这个好,英雄不止一拨人,这才是真实的世界。还有安全交规……魔性!
这片建议大家去看,不想说太多。几个感受:
大家都有是猴子的时候。有权时,别人敬,但生活经常会反转。友善待人!
文化是一种力量。在中国这片神奇的土地上,文化和情商这些东西应该重视起来……科技圈人士还得多学习。
片中的音乐很欢乐,一开场就用配乐奠定主题。
全篇连贯,不容易出戏,不耗脑,也不拉低观众智商。
“嗯哼?这老头怎么知道稣的想法?”稣想了想,说:“大爷看过《黑客帝国》呐?”
“没看过,倒是看过有人像你这样冲进去,横着出来!”
吓尿……看来得冷静冷静!“谢谢大爷的提醒。”稣决定见到洪警官后不逼问,不讲道理。
“你来告诉我离开这里的方法了?”
“yup,稣今天看到蓝雪峰,隐约想起之前的事情,但是尝试的代价很高,你敢吗?”
“说说!”
“把你的枪掏出来。”
洪警官果断地掏出枪……
“不是那支!!尼玛,那支稣也有……”
“哦哦,不好意思,我以为你怀疑我是女人,特此证明!”
“别闹了……说正事!你相信稣吧,拿来拿来!”
洪警官又一次果断地掏出枪……
搞虾米?这么豪爽!难道他没骗稣?
“学森?可以开始说明了?”
“请叫稣外面的名字:鲸神链”
“好的,神链,你倒是快说啊!”
“稣上次在蓝雪峰背面被冻死的,死亡可能是离开的方法,稣现在开枪打死你,你愿意吗?”
“囧逗妈爹!当然不愿意!死后要是真的死了呢?好死不如赖活,学森,你别逗我!”
“果然不敢!这可能是你长久无法离开的原因!”
“珍惜当下,珍惜当下!别把枪对着我呀,赶紧收起来!”
“也是,人生的意义是由记忆定义的,死后记忆全没,不划算。”
人活记忆,神活意识。
稣把枪还给洪警官,并对他说:“稣也不想冒险,打死你,不管你是不是离开,稣也无法得知,稣在这边还有事,暂时也不想离开,留下来也要仰仗您呢!”
“那不如我帮你离开?”洪警官奸笑着,把枪反过来对着稣。
空气顿时凝结,稣听见自己的心跳,并没有任何加速,反而有点堵塞……
“万一死亡是稣离开的方法,却不是你的呢?稣死后到底有没有回到现实,你一样无法得知!就像你之前杀死的 13 号房原主人!你得到答案了?”
我命由天不由我,即使在灵魂上,我们都不自由。
“你的聪明保住了自己的命!但我得纠正你,13 号房原主人是自杀的。”
“哦?她是一名大学女教师,是吧?”
“不是,事到如今也不瞒你,是另一名警官,跟我同一辆车进来!我们原是情侣,以前开过互换性别的玩笑,进来后性别真的互换了。我们在漫长的岁月中,慢慢记忆错乱,分不清彼此,他的大男子主义心理一直作祟,最后抑郁症无药可治自杀身亡!而我适应了男人的身体,活得好好的。”
“稣服了 U!咱们目前没有定论,晚安前,做个约定怎么样?”
“你说!”
“如果哪天稣不想在枫林晚活了,请你打死稣!同样,换成你不想活,稣也可以代劳!”
“哈哈哈,这么说,我们是生死之交了!我答应你。”
“不是你死就是稣亡,成交!”
稣放松地转身要离开,心想:“还是回去叫吴情到 13 号房一起洗洗睡吧!说不定还能来一炮……”
不料一颗子弹击穿稣的后脑勺,稣看见子弹离开自己前额,氧气和糖用力地烧,它们想理清这一切到底是哪里出的八哥,正好脑袋开两个孔,稣的散热性大大提高,又开启高功率运转模式。
]]>稣对她使了个不嫌弃穷人的笑,说:“稣要去研究食物,就当散散步,一起?”
“我要上班呢!”吴情扫兴地回答。
“不要上啦,稣带了一些可爱的兔兔,请你吃。这里风景这么好,等下去玩,顺便摘水果、打兔兔,不是美好?”
“你为什么不用参加合作社统一安排的工作?其他人会有意见吧?”
“他们以为稣知道这个世界的终极奥义,这个潜在救世主的身份很好用,虽然……”稣想了一下,还是不要告诉她,其实稣并不知道,万一大家知道,稣可能会被愤怒的群众烧死。
“虽然什么?”
“哦,虽然离开这里的方法是很难的,稣也是不小心做到,不确定别人行不行。不过总归是有希望,哈。而且稣是生物学高材生,化学、医学也都懂,可以用专业知识帮大家改善饮食和保持健康。稣现在出去玩,也是为了寻找和研究周边更多可以豢养的动物和可以人工种植的蔬菜水果。”
“哇,看不出你还挺实用!”吃着兔兔,果然要讲好听的,“那等太阳小点,再去吧!”
在田野山间散步快三个小时,这里的牛挺多的,取牛奶容易,湖也很多,懂水性可以抓到鱼,生活本该乐无边,但是吴情似乎比较焦虑。
稣正在构思怎么排除她的焦虑,突然发现一辆共享单车,在汽油还没被发明前它比汽车靠谱,稣赶紧宣布对它的所有权。
伴随着一阵愉快,脑海里闪过一个画面,一个二逼骑着它飞奔,结果被汽车撞飞,车毁人亡。稣不禁笑出声。
“你笑啥?前轮全毁,这车已经不能用。”
“枫林晚的人不都是开车来的?这车主真穷,是开自行车,你见过他吗?”
“没听过有人是骑自行车来的鸭!”
“的鸭~他可能没地方住已经变成野人,或者暴尸荒野……赶紧找找!”
“找什么?”
“尸体啊!”
“要干嘛?!”
“如果新鲜可以吃,不能吃就练习解剖!”
“呕……”吴情听完大惊失色,稣顺势变个凶脸,做了一个要扑杀她的动作,吓退她好几步。
“哈哈哈哈,吓你的,真是胆小鬼。”
“你们读生物的,真是恶心!”
“你们读金融的,真高端,杀人不见血!我们比不了。”稣反驳道。吴情噗呲一声笑!好像确实是这样。
稣认真地看着这个小姑娘,能陪稣走这么多路,真不容易!一时心生怜惜。
“怎么了,突然这样看着我?”
“在想要是有一天,这里没东西吃了,会不会有人开始吃人?稣觉得你可能挺好吃的!”
“哎呀!别吓我啦!再不回去天就黑了。”
稣往来时方向看看,确实走挺远,全力走回去,可能也要一两小时,是应该回去了!再往去的方向望去,有一座高高的雪峰让稣有点熟悉感,蓝蓝的天空把山峰没被雪覆盖的地方染成一片蓝色,就叫他蓝雪峰吧!
“那座高耸的蓝雪峰,有人去过吗?好像很远的样子,估计要走几天。”稣嘀咕着。
“看起来是很远,而且居然有雪,大家住的地方一直是春秋天,那边才有冬天,也是奇妙!”
稣记得合作社也有一辆破自行车,于是把这破共享单车带回去,也许能组装出一辆好的。
回去的路上,稣开始套话:“你之前交的男朋友是怎么分手的?”
“我觉得他对女人好像没兴趣!”,吴情开始有点回避。
“哦,哈哈哈,是哪个基佬?”
“六爻!”
“怎么会呢?稣觉得他很正常呀,可能只是不喜欢你而已吧?”
“不是的。我觉得他和洪警官很暧昧,除此之外,他天天就是工作,都不碰我!”
“赫赫……稣有点相信你说的了!所以,一开始是你主动接近他的!”
“找个靠山认个干爹呗!但我觉得他真当我是干女儿,不带色素的!”
“哈哈,稣可能知道一点内幕,等稣完全理清楚再告诉你。”
“什么内幕不能现在说?”
“很复杂很怪异,剪不断理还乱,稣自己都没整明白,现在说只是误导你。呃,另外,看不出你还是个正常的女人……我有个问题,感觉可以问你!”
“我哪里让你觉得不正常了?要问就问呗!”
“一般女人会回避和性相关的话题,嘿嘿,这里人是不是经常车震?”
“是鸭,没啥娱乐嘛!”
“所以避孕套是不是很稀缺?稣身上有两个,能换很多吃的吧!”
“你想多了……这里有个传说,生一个孩子养大就能换一人离开,根本没人避孕。”
“你确定吗?不如我们来生一个?”
“你是神经病吗?……我,我被你气死了!”吴情脸红得说不出话来。
稣觉得莫名其妙,问:“这是拒绝还是默认?”
“我明白了,你是真的失忆!”吴情稍微缓了口气,“没事,我正式拒绝你!”
“哇,好伤心啊……”
“一点都不像!你一个老男人,还装嫩?”
“哦,原来你喜欢成熟的类型,你看,是不是这样?”稣挺直腰板,一脸正经,不苟言笑,还是有点不习惯自己的年龄设定。
“呵呵……没想到你还有逗逼的一面。”
“男人有很多面!”
回到合作社,稣和元老们讲解发展湖渔业的想法,搭桥做坝控制鱼类,还找到一种鱼藤可以用来毒鱼。
一顿饱餐之后,稣带点心去找吴情,然后一起睡特稣垃,她没有拒绝,因为法理上这车是稣的。
女人就在身边,长得还行,还不赶紧吃豆腐?啧啧……但是稣不禁想起那个诈骗电话,如果是真的,那稣是处于被监视状态,怎么好意思在这里车震?不行,不行,不行,否认三连!
稣打开 iPhone 7,上次接完电话后就关机了,剩余 71% 的电量,得省着点用。稣回拨那个神秘电话,那方居然立刻接听。
“圣小开先生,您现在是想车震吗?震吧,我们是看不到识界的具体影像的!”
“日你妹,看不到,你怎么知道稣现在打算干神马?”
有一种人,很讨厌,话不讲清楚,善于误导!
“猜的,以前很多再进去的人,都会来电问一些问题,最常见的就是这个。”
有一种人,很讨厌,不管他们说什么,你都无法分辨是真是假!
“你让我找的是洪警官吗?”
“我看不见呐,咋知道是不是?她进入识界初期设定的身份是大学老师,但是您懂的,不一定完全照剧本来。说多啦,没别的事,我挂了!”
稣恼火地关机。看着苹果消失,瞬间灵光一闪:“稣住的房间有明显的女性气味,死者应该是女人。她可能才是目标,洪警官也许是窃取她的一些信息,企图让稣帮他逃离这监狱!”
举头三尺有神明,人在做,天在看!
稣不确定是这个接线员没权限看,还是整个系统设计就是无法查看,保险起见,还是不震了……“稣去找一下洪警官,马上回来。”说完稣就飞奔出去。
“哎,怎么你们都这么喜欢洪警官?”
]]>房间只有 13 间,其它 12 间都有人,给稣安排的 13 号房,原主人已经去世。睡觉前是思维活跃的时间段,首先想到是——会不会闹鬼?不不不,稣是生物系高材生,怎么会有这么无稽的想法?还是想想女人,活的,可以交配的,这才科学。吴情?洪警官没请她,大概是随便吃点乐射,然后睡在特稣垃。虽然想起来挺惨的,但她应该早已习惯,不用稣瞎操心。
所谓温饱思淫欲……稣自然地想起,外面那些人即使车里有避孕套,应该也用完了,他们想放飞自我时,难道就只能靠大姨妈?明天得找几个大叔大妈科普一下,问吴情,她大概率会装纯,赫赫!
稣很快意识到,在这种陌生的环境,寂寞的夜晚,应该抑制一下放飞的思绪。还是想想失恋的故事平衡一下吧。
第一次和李怡表白,她不信,觉得稣看不上她,隔几天又表白一次,这次她应该当真了,问:“那你说说你喜欢我什么?”
稣听到这个问题,脑海里先是闪过了数种生物学、化学对爱情产生的解释,但又想她听不懂,换一种思路:满足个人择偶要求?比如身高 167cm,符合!脸不丑,还像稣青梅竹马的玩伴。声音吸引。但是这些都太理性了,稣应该说一个感性点的理由……
迟疑间,李怡自己嘚瑟一笑:“可能是因为我年轻吧!”
稣心里就纳闷了,明明就比稣小两岁多,为什么强调是因为自己年轻?不是很能 get 到她的点……生物学思维又作祟,想和她解释爱情的本质是为了繁殖,但说完,估计又毁人三观,被人唾弃,好人卡+1,于是稣抖了个机灵,说道:“你知道吕洞宾对白牡丹和对何仙姑的感情有啥区别吗?”
“这和你喜欢我有关系?”
“有的,稣喜欢你和吕洞宾喜欢白牡丹类似,是内心原始的冲动,但和喜欢何仙姑就不同,那是理性的喜欢,像志同道合的灵魂伴侣。”
李怡不知道说啥好,但脸上挂着好几种稣看不懂的笑。而稣想起周老师的话,如果女人的问题无法回答,就别回答,看着她的双眼就行。
对看许久,李怡突然说:“好像他们最后没在一起啊!”
稣的内心一震,卧槽,是没在一起……真是尬聊踩到雷,又是一次不成功的表白!不过牵牵手,搂搂腰,还是一起走到她宿舍,拥抱告别,勉强算成功一半。
回到宿舍,小蓝又提醒稣:“小胡,你的小怡现在单身,有好多备胎,只是看上你有钱陪玩玩而已,你可要玩好咯!”擦,这么诚实的基友,稣实在太喜欢他了,甚至想插他菊花。其实稣心里有数,是有这个可能,但确实也喜欢她,就一直放水,接下去,可能要反过来,研究她喜不喜欢稣。
富二代的爱情就是这么坎坷,兄弟们终于把她的备胎都找出来,共同特征确实就是:有钱。稣把互撩过程复盘一遍,这货不喜欢稣的概率高达七八成,她肯定更喜欢钱。
毁掉我们的不是我们所憎恨的东西,而恰恰是我们所热爱的东西。
陪稣做过很多稣热爱的事情的那个人,不一定是爱稣的,她可能是为了重新获得失去的东西。
最后一次见面,拥抱时,稣特地留意她的无意识动作,头条件反射地偏离稣。这个本应很幸福的动作,对她来说只是屈服于金钱淫威的迁就过场。
一想到一个女人在感性上不喜欢一个男人,却能陪伴做情侣,稣就觉得很恶心,就在感性上还喜欢她的时候,理性地强行结束。
接下来,稣发现自己并没有强大到能说断就断,失恋的感觉是:心痛、丹田瘀气造成呼吸困难、无名伤神火,交织在一起破坏稣的神经系统,但神奇的量子纠缠能力却得到加强。
像稣这么重感情的富二代太少了,以致大四时还是处男。
失恋当晚就失眠了,第二天开始,稣按照周老师的方法,每次想她失眠就撸了睡,撸了睡(居然有时候是一天两次?)……
另一件重要的事情是,把她陪稣走过的路、吃过的饭店,全部独自重新过一遍,勇敢面对孤独和失去的感觉。
治疗一个多月,稣获得初级意识纠缠能力,梦见白云凰,并成功把她从梦境带到现实世界,稣觉得自己终于正常了!
]]>觉得外卖不环保,出去走走也有益健康,所以天天中午步行或骑车出去吃午餐。夏天也不做任何防晒,就喜欢天然日光浴。
有一次,一个小吃店老板开红色奔驰 C200 载着一个大胸美女,遇到路边正在走路的稣,于是停下他的豪车和稣打招呼:“大热天的,怎么用走的?”
稣很低调地问答:“走路健康。稣比脑波白,故意晒黑点。”
2018-09-04 到新公司,发现大部分同事都很白,不乏帅哥美女。
公司大部分人都点外卖,还坚持步行出去吃饭的几乎就稣自己。
最近和脑波研究一些护肤术,发现皮肤衰老的最大原因是紫外线,在致衰老原因中占比居然到八九成!
皮肤黑,可能显得健康,也可能会显老。以前稣是不嫌弃皮肤黑的。但如果是导致衰老,那是不健康的,得改。
原来防晒并不单纯是怕晒黑,更是怕晒坏!多么痛的领悟……
为了保持 00 后的青春形象,以后要做好防晒。
]]>是剧本。小说需要文笔,稣没有。
可以这么理解!很多电影故事情节设计也很简单,但大制作,CG 做得好、风景拍得好,很多人就去看看场面、音效,IP 才是重点,谁管你文笔?
编剧软件没用过,悉德·菲尔德的编剧理论没学过,怎么好意思?等编剧 AI 化了,帮稣修修剧本,也许有救。
主角没有主角光环,死了好多次。
主流题材:爱情、悬疑、科幻。
主题是人类终极难题:意识、孤独。经典三问:我是谁?我来自哪里?我要干嘛?
其它元素:精神分裂、变性、警匪……
这个问题就是终极难题:意识和记忆能不能分离?同一个人如果失忆,还是原来那个人吗?你可以想象一下,神话里的转世投胎。《八哥之神》里的主角其实有很多个,如果被拍成电影,你会发现饰演稣的演员有好几个,只是他们都用第一视角讲述,为了方便读者理解,这些主角都自称稣。
真。从小做过多少梦,用点逻辑串起来就是故事。写作的出发点是取悦自己。
你问的是心理邪稣,还是量子邪稣?或者耶乎知稣?还是宇督稣?
程序员大难题:取变量名……以后安排优化的迭代。
]]>今早,稣赶到医院,父母在产房前,孩子已经安全生出一个,还有一个正在努力!
稣一想到是双胞胎,以后要养四个孩子,就直接嚎啕大哭起来……
后来一想,为什么产检时没发现是双胞胎呢?这不是坑爹吗?又是做梦!还好是做梦……
醒来看《超低生育率养成记》,意识到各国养孩子的成本是这么具ju体da……量化无情,稣不敢看。
资产千万的人是不抢红包的。具体几千万不清楚,随便定义为三千万吧,因为稣没有……
资产不到千万的人,一般会抢,但要看容易程度,之所以微信红包 1 分钱都有人抢(有些人习惯性发每人一分),还是因为点两下太容易,如果是支付宝口令红包,很多人就不抢了,因为麻烦,尤其是在微信上发的,要切换到支付宝,连穷人都懒得抢。
做产品不要低估人类的惰性,这是真理啊!
科学和哲学都追求真理,朴素而不高尚,无法满足凡人的幻想,而文学和宗教可以。
挨踢属于工科,搞技术的人一般都不追求什么高大上的目标,也没有科研的理想……所以,这个群体还是蛮惨的!过年时,如果遇到他们,还是给他们发红包吧!
大部分产品经理其实是不懂技术的,但技术人员的缺陷太大太明显,很容易利用,所以在一些技术不太深奥的领域,很多产品人员过得比较轻松,甚至职级、工资都更高。
也有一些高深领域,产品经理几乎没用……所以企业向上转型时,一般会先开除他们。赫赫,有那么容易吗?他们很可能已经掌权了。
地铁完成后,再急拉一波,这可能是很多有房人的共识。
稣也不例外,但量化的数据支撑显然没有……这可能是愿望,而不是真正的趋势,稣没说自己是对的。
初中数学老师说“负数开平方是没有意义的”,到高中,被虚数打脸。
高中物理老师说“没有摩擦是不可能的”,到大学,被超导、超流、BEC 等打脸。
稣很尊重硕士、博士,因为他们很可能懂一些稣不懂的。
有句古话“请神容易送神难”,所以不要随便开除博士,请人家来之前,除了考核对方实力,也应该掂量自己能不能用起来。
2019 年 02 月 04 日,吃完一顿 KFC 早餐,动车时间还早,打算去检验火车站的厕所,结果吓尿了……那么问题来了:
为什么稣越来越不喜欢出门?
最近看数学符号表复习数学。随手在优酷上找到一个小姐姐的数学符号讲解视频,声音可感人了,后来翻到她微博上的照片,还挺漂亮!于是稣问自己:
如何学好数学?
情人节挑礼物是很可怕的事情,女人的护肤品分类远比稣理解的多:抗衰老、抗氧化、抗炎、修复。
抗衰老和抗氧化难道不是一样的?
什么娇兰还是兰娇,真的搞不懂……稣选择直接给钱。
]]>经过一周调养,身体有惊无险,成绩也没有很烂,全校 30 名以内保住。但稣对自己的散热性灰常失望,从那时开始,明显觉得自己比以往感性很多,甚至还有点想早恋!
一天傍晚,稣想给初中部邓学妹打电话,已经暗恋她一学期,再不早恋就毕业了!当天,并没有雷雨交加,但电话活生生串号……稣听见一对男女的通话,女生的声音很柔和,立刻吸引稣继续监听。
听对话,男生在微信上用电话号码加女生找不到,所以问女生有没有注册微信,女生说自己流量不够用,没注册,用 QQ 就好。男生立刻说要给她充电话费,女生没表态。稣分析,男生应该是喜欢女生,而女生态度不明朗。
听完对话,稣脑补了剧情:男孩上大学,女孩上高一。如果稣和邓学妹早恋,过一年半载也是这样的剧情,吓得稣果断放下电话立地成佛……
多年之后,大学校园,不同院系上同一门体育选修课,一个女生脸像小时候的玩伴,吸引了稣的目光,听她和别人嘻哈,总感觉声音似曾相识。有次跑完步,稣终于对她下手了!
“哈哈,你的眼圈好黑,属熊猫吗?”稣笑着说。
女生低下头,不吭声,似乎在酝酿什么报复社会的情绪,稣顿时有点后悔!只好自我介绍:“稣是方圆十里著名的富二代,鲸神链,你叫李怡是吧!点名时听过。”
“哦,我听同学说过你,高我们两届的土豪学长。”语气略显紧张,打消了稣的疑虑,看来她打不过稣。
于是稣开启上帝模式,盘问她,顺势对一下她高中时,是不是接过那样的一通电话,当稣说出细节后,她惊讶得快窒息。最后我们互加了微信。
稣从回忆中醒过神,开始怀疑这记忆可能是假,是刚刚被植入的,因为稣大学时如果是富二代,毕业后怎么会去喂狗粮,然后来了这里又似乎莫名变成富一代?但是稣实在想不起毕业前更多的事情。
现在是在农耕时代,该为吃喝拉撒睡操碎心吧!吴情应该已经习惯,稣还陌生得有点尿急,连个马桶都没有……
这时,听说合作社书记洪警官要见稣,二把手齐六爻来接稣过去,他是这里的陶瓷艺术家,马桶是有的,就是他做的。洪锦韬进来之前是警察,带着杀伤性武器,大家都尊称他洪警官。
稣有预感,这个洪警官可能是接线员要稣找的人,如果其他人都是罪犯,总不能安排一个当警察吧!这不是无间道吗?但性别对不起来,疑惑!
单独见面之后,稍微有点眉目。洪警官说自己在识界已经很久,很多东西早就想明白,进入枫林晚前,自己也确实是个女人……她一直没有对别人说过,因为还没透析离开的方法,只能按兵不动。
但很显然,稣并不记得上次是如何离开,所以也帮不上忙……只好和她开玩笑:“锦韬是男名,不是你在外面的真名吧!”
“确实不是。但你说的外面,指的是什么?枫林晚外面那个他们以为是真实世界的识界?还是再外面的真实世界?”
“嗯?原来稣来自魔性山,这也是识界虚拟的?难怪接线员叫稣圣小开,但稣记得自己叫鲸神链,这里的人却又认为稣叫钱学森!”
“先安顿下来,明天去找找上次离开的线索。”
稣嘴里说好,心里却想着:“稣要的是谈恋爱,你们瞎编这些蛇精病的剧情,关稣啥事……”
]]>作者: UMU @ MEET.ONE 实验
最近三个月尝试各种方案把 EOSIO 链上交易数据同步到数据库中,踩了不少坑,现总结一下经验。
原始需求是要链上交易数据,所以先是把 transaction_traces 和 action_traces 都同步。
踩坑:无奈地发现速度跟不上,服务器的时间成本比较高,只能舍弃。
研究插件代码,发现 action_traces 是从 transaction_traces 拆出来的,是重复的,所以把 action_traces 去掉,这次成功追上主网区块高度。
踩坑:transaction_traces 在查询 actions 时不太方便,因为 actions 是放到 transaction_traces 内部的一个数组,要查询具体一个 action 就得分两步走,先在 MongoDB 查询出某个 trx,然后再 actions 数组里遍历。数据库使用端的工程师觉得这样太麻烦,无奈继续放弃这到手的肥肉。
明确 action_traces 才是客户端想要的后,就只同步 action_traces。
踩坑:action_traces 条数比 transaction_traces 多了三倍以上,又出现追不上区块的问题……
客户端最关心的是 transfer 数据,既然跟不上,就舍弃其它数据。
踩坑:舍弃的数据后期不好补。
有人说 kafka_plugin 同步数据很快,可以追上主网区块。
踩坑:从 kafka_plugin 代码就能看出它没有处理 action_traces,如果还要去后端再拿出来处理,再插入到 MongoDB 里,那开发成本和服务器成本一样又上去了。
从 35058781 块开始,插入数据库。之前的区块(1 - 35058780)处理后,仅插入数据量相对很小的 account_controls、accounts、pub_keys,其它数据量大的表不插入。
做这个尝试很重要,因为发现重要的线索:
大约在 2200 万块开始,nodeos 的处理速度下降很多,平均每块要 2-3ms,所以同步慢的原因在于跑 nodeos 的服务器的性能。
在 1 开始的早期区块阶段,同时插入 transaction_traces 和 action_traces,并不能看出比只插入 action_traces 慢,说明 MongoDB 端压力很小。
要追上主网区块高度,nodeos 机器性能要好,2.5GHz CPU 不够用。之前听闻 BOS 要求 BP 使用 4.0GHz 的 CPU,现在看起来也是有道理的……以性能成本换取时间。
MongoDB 集群,按之前的文章《为 EOSIO MongoDB 插件搭建高可用集群》的配置,插入阶段毫无压力。
插件代码有些问题,需要优化,最明显的就是 queue_size 的设计不合理,打印处理时间太长的提示也不合理。
queue 函数是个模板,所有的 queue 都调用它,但 max_queue_size 和 queue_sleep_time 缺只有一份,这可能导致一个 queue 导致的 queue_sleep_time 加大,影响到其它 queue,即整体的休眠时间会无用地加大。
打印处理时间没有按照 max_queue_size 变化,当 max_queue_size 设置大时,打印就很频繁,带来延迟。
建议:一定要注意成本问题!如果查询量不是很巨大,找点友商的数据源用用就好了,自己搭建的成本好高……但如果查询量太大,或者友商卖太贵,以上经验就是很好的参考了。
稣从小喜欢富婆,至今(2019 年)未变。
相比恋爱的过程,稣更喜欢失恋的结果。
稣酒量太好,从来不屑和别人比酒量。
稣是 00 后。
稣是很有原则的人,稣的原则就是:原则随时可以改进。
一劫,人间 43 亿 2 千万年,现在是宇宙的第四劫初期,名唤七鹰劫。这是稣的座右铭“天地玄黄,宇宙洪荒。度修七鹰劫,证悟神通”中“度修七鹰劫”的由来。
稣长期随地乱扔个性,就连撒泡尿都要排泄一定份量的个性,但还是很有个性。
稣最长的暗恋记录是八年。
稣是很理性,又很感性的人。
十几年前,稣发誓“努力赚钱,买宝马”,结果钱太难赚,改发誓“努力赚钱,买马”,后来发现买了马也不会骑来上班……只好再改为“努力写马,赚钱”,最后稣真的写了一个木马,流传很广。
是。稣很贵,穷屌丝女哪养得起稣?
是。失恋磨心、减肥,传说失恋七次就能修炼好量子纠缠邪术,为宇宙和平而再恋。
否。您问稣酒量怎么样,稣指着大海的方向——稣酒量太差,宁愿跳海,也不敢喝。
否。这是正经问答!“稣是 00 后”这个梗说的是 00 后是中国完全正常的第一代,他们能正常的快乐,不理会嫉妒他们的老一代。
否。稣根本就没有原则,哪来这么多废话。
否。这么瞎掰您也信?“度修七鹰劫”是因为稣想塑造一个绝情的自我形象,所以用“七鹰”来代替“情”。
否。稣哪里有个性了?您才有个性嘞!从来不觉得自己很有个性,只是有点内向。
否。这暗恋的故事原来记在百度贴吧,结果吧被删了,后来在腾讯微博私信到女主,结果腾讯微博倒闭,私信被全部清空。所以不记得几年了,但肯定不止八年。
是。这很容易做到的,举个例子:地球绕着太阳转,因为地球深爱着太阳,我日!
否。写着玩的,把自己整半死,没放出去。
改编自霹雳布袋戏人物“天踦爵”诗号:
三年寻龙,十年点穴,肩负青囊走南北;
三寸知息,十面洞心,掌握乾坤通天阙。
题目的断句:不是天之“道人”,而是“奉行天之道的人”的缩写。
]]>胃不支:又作“味不知”。
荒淫麟:人名。
为明天和荡哥搞基而作。
]]>生活需要遗忘,三天可见才是真实的生活——毕竟还不能选择“一天可见”。
有些人的手机套餐没有无限流量,看了稣半年朋友圈,当晚就超标。为了保护他们。
和隐私无关。稣一直保护核心机密。
任何走心广告,看完稣都不会取消三天可见。给钱可以考虑。
一对土豪夫妻,每人一辆车,车位紧靠,车牌就差一位。最近快过年了,土豪妻子已经休假,所以土豪把车停在俩车位中间,即一车占两位。
这说的是别人……大过年的还在加班!
这些别人明明好惨啊!但他们觉得忙才有意思……
那些穷逼的中年女子真不如鸭,嘎!
“你说是,就是吧!本来就不是稣的,送你又不吃亏。”,稣心想。然后研究一下,车是坏的,还好,不然不是要暴露自己不会用特稣垃的真相?
“你是……我们认识?”
“吴情,爱情的情。你走了 110 天,还以为你已经回到现实世界,没想到失忆回来了!”妹纸一脸忧郁和失望。
稣看着她的黑眼圈,脑海里闪过前女友李怡的脸,稣刚认识李怡时,也是同款的黑眼圈!便试探地问:“你失恋啦?”
“没有。”简单的回答,但意犹未尽,似乎强行咽下好多话。也罢,自己还在懵逼,管她那么多干嘛。
这里风景秀丽,像极了瑞士 Lungern。嗯哼?稣并没去过,是朋友圈里看到的。奇怪的是,村民大多住在汽车里,只有少量的木屋。他们看到稣,似乎还蛮尊重的,仿佛稣是有钱人。但稣根本没有印象,难道说 110 天前,稣真的来过?没事,反正他们看起来对稣挺友善,先逮个人来问问吧!
就是你,抱只狗的大妈,和撒狗粮的稣有缘。“你认得稣?”
“见过,你是这里的名人,好多人没见过你,也听说过你。”大妈挺热情地回答。
“那你偷偷地告诉稣,那个吴情是肿么肥事?”
“她不是你的小蜜吗?你上次走后,她跟了别人,但矛盾挺大的,后来翅膀硬点就分手了。”大妈偷偷地说,但稣觉得她的声音有点刺耳!什么!居然给稣戴绿帽?虽然稣不记得自己有过小蜜……但突然有了,又突然没了,还是有点莫名激动。大妈见稣有点躁动,赶紧安慰说:“小姑娘不容易,还不是你一走就是几个月!不要计较啦。”
这难道就是中彩票,又丢掉的感觉?继续了解,又发现不少情况:原来稣已婚。这还是吴情和别人说的……
稣找回吴情问:“稣结婚啦?你确定?稣记得自己单身呢!在魔性山上只有单身狗相伴……造谣!赤果果地造谣!”
“上次搭你顺风车,闲聊时,你说自己哄孩子睡觉的能力比家里的三个老婆加起来还厉害。”
纳尼?稣还有三个老婆,好吧,你说有就有!“但我们的关系,不是他们说的那样吧?小蜜?”
“当然不是,别听她们瞎说!”她有点不高兴,一个尴尬的表情后继续讲:“我们没啥关系,只是上次我想和你组队离开这里,你却一个人跑了。没事没事,忘记也好。”
这时,稣的手机响起,吴情惊讶地说:“都 110 天了还有电?”稣反问:“这里没有电吗?”
得到习惯性看弱智但很肯定的回答,稣马上意识到自己更可能是刚刚来到这里。如果真在此百日之久,iPhone 7 不可能还有电。来电号码是未知,一个女人的声音:“圣小开先生,我是刚刚接待你的记录员,现在有点信息要透露给你,请注意记住我的每句话!明白吗?”
“稣不叫圣小开啊!你打错了吧?”
“好吧,你现在叫钱学森,可以鸟吗?”对方有点不耐烦,但稣的疑惑并未解开,不宜轻举妄动,继续听她扯,“这里面的大部分人都是现实世界里的罪犯,全部洗掉记忆,回到他们还没犯罪前的状态,只有两个是科研志愿者,不属于此列,你是其一,另一名至今还没超脱过,你现在得帮她回来,不然时间再久,她会被同化。”
“我们两个?和其他人有啥区别?”稣问。
“你身处之地是意识监狱,其他人永远无法离开,在这里死亡后就真的死啦!而你们只要破解游戏规则,就能回到现实。我的话全部带到,暂别!”
“射精病,稣在这里受人尊重,回什么吃狗粮的现实?既来之则安之!先跟这个妹纸谈个恋爱再说。”稣的内心哈哈狞笑中。
]]>草地上的石板路,石板铺得太近,一步一块容易夹到蛋,一步两块又太大步,容易扯到蛋。
这说的是别人……
这些别人好惨啊!
事与愿违,人生常态。美食美景美色不常有,律法又无情,还是要合情合理合法地及时行乐,加了这“三合”——真难……
《诗盗·魔性山军犬养殖训练基地》
一步夹蛋两步扯,
八分前戏七秒射。
中年男子不如狗,
心向南辕道北辙。
2018 年 12 月 29 日 21 点多,突然有犬吠,稣在楼上看了一下,外面一男一女似乎走错路,听到狗叫声吓退了。这个时间点,冬天的晚上,不应该有人来此。本不想理会,但突然看到女人的鞋子滑了一下,男人迅速扶住女人,然后一路拽着手下山。稣平时就是专业撒狗粮的,没想到晚上居然被这对奇怪的男女喂狗粮……
披了件深色外套就下去观测他们。原来真是走错路,他们想上魔性山健身公园爬山。但是这么晚,除了有点吓人,可能还有什么乱七八糟的剧情吧!这么一想,稣差点笑出来!
一路跟着上山,他们只顾着聊天没注意到稣。从对话内容可以看出他们还不熟悉彼此。女人一直在诉苦,大概是上次恋爱如何如何失败,付出太多,却不被珍惜。男人则比较熟练地开导她,分析得头头是道的样子。女人恍然大悟,明白过去不少认识是错的,自己并没有很差劲,然后逐渐开怀,有了笑语。
这时候正好爬到半山腰一个庙,他们左拐去参观。稣则继续走,趁他们不注意抄到前面去。后来听到男人说他不信佛,只是在外面看看,不想进去拜。女人已经被治愈了一些,目的达到,说想下山。稣也就随之折返。
下山后,他们在光亮处,稣发现那个男人长得很像钱学森!这太不可思议了,稣以前上学时,经常看到钱学森的画像,今晚真是见鬼!
他们上了一辆特稣垃,车牌是“四个逼”……这特么是违法的吧!要不要报警?稣犹豫一下的时间,他们却在车震??哦,并没有,稣可能狗粮吃多产生幻觉!上山容易,下山难,腿抖导致以为车在震吧!
稣还在纳闷“钱学森”时,车启动了,果断抄起附近的共享单车追上去看看他们往哪走。
以前坐过一个同学的宝马三系,每次只有男生时,他都是一顿操作猛于虎。但只载妹纸时,都是开得像自行车。这特稣垃也是开得很慢,可能用自动驾驶解放双手,进行无可告人的操作……吧!
稣以 30KM/h 左右速度跟着,到了十字路口,突然出八哥了……这乐射单车居然没法刹车!他们已经停车,稣如果避开,就会冲向十字路口,可能被横向行驶的车撞成狗!于是稣果断撞特稣垃,飞出去前,大骂:“草泥马的共享单车!”但心里想的却是:“这车好像挺贵?估计要赔不少钱!”
醒来已经在枫林晚……
]]>不久前,在前同事朋友圈看到她说拿姜来驱寒……稣差点就吓醒了!
稣一直以为姜和薄荷是同类,是清凉的,只有浓度太大,味觉系统手刺激,才会引起热辣感,它本身应该没有什么能量,所以是夏天降温用的。夏天时,稣常喝姜味苏打水,个人感觉真的可以降温,而且有句古话“冬吃萝卜夏吃姜”佐证!
几年前聊过这话题,冒出几个人觉得会降价,理由是菜坏了……
然而实际都是涨价,因为各种成本都上升。
很多人这么认为,包括曾经的稣。
去幼儿园参观之后,稣发现大部分哭得很惨的都是男生……小男孩比同龄的小女孩更需要母爱。
又想当然了吧……稣自己试过前也这样以为。
现实是,无论哄女孩,还是哄男孩,妈妈、老婆、丈母娘,加起来也没稣行。
]]>正好,公寓在维修锈蚀老化的空调格栅,一条吊绳就在眼前,稣看到自由在招手,毫不犹豫就开始扮演蜘蛛侠。爬下几楼后,手就开始后悔,这敲键盘的手,哪能这么玩,还剩 2 层,干脆直接跳下去吧。
不知从哪来的勇气,反正稣跳楼了,没觉得自己会死……一阵迷糊之后,稣在实验室里醒来!
记录员:“恭喜回来!你通过考验了。”
稣想起自己参加了一个类似《黑客帝国》中母体的项目——“识界”,一开始是从简单的梦境脱困,一路轻松过关,刚刚的项目属于比较难的。怎么通过考验的?稣有点纳闷!
深吸了一口冷气,开始分析刚才做的两个梦:场景都很真实,在梦里都没怀疑过是梦,第一个梦死亡前,并没有以为自己不会死,而第二个是以为自己不会死的。那么按照识界规则,如果不相信自己会死,就能脱离,相反,会换个身份继续在识界生活,即转世。
稣的第一问:“第一世失败转世,第二世才成功的?”
记录员:“没有,你只在识界待了一世就超脱!三百多名志愿者,你是第一个回来的,这个速度也是很惊人!”
稣郁闷了,凡是和自己想的不一样的现象,必须仔细反复分析,想通之前都是纠结,这是稣活了六十几岁还一直保持的……性格缺陷?
脑海里突然出现第一个梦境里的村庄的名字——枫林晚,赫赫,停车那啥??真是一个汽车旅馆!
记录员说有三百多名志愿者,这和第一个梦境里的枫林晚村庄的人数吻合,而且稣是从识界里的正常世界,掉进异次元的。开车之前,稣在正常世界和女朋友爬山……能莫名想起好多细节。
“所以第一个梦境才是识界?稣进入了一个叫枫林晚的地方。”稣问记录员。
记录员显然有点意外,他不知道稣其实一连做了两个梦,便回答:“识界的设定是这样没错,你还做了其它梦?”
“是的,稣在枫林晚是被冻死的,并没有觉得自己不会死,却在一阵孤独感中醒来,继续第二个梦。第二个梦的场景也是 30 年前,但有几处和现实不一样。”
“哦?你这种超脱识界的方式,我们还没前例,能再详细描述吗?”
“第二梦中,有个舍友,但现实并没有,有个叫六舅的基友被地铁撞死,而现实是被一辆白色玛莎拉蒂撞飞而已,脑残了很久,但并没有死。梦境没有造全,门外的空间是一片无法照亮的黑暗,像个监狱。稣孤独地生活了几天,尝试从阳台越狱,结果不小心跳楼吓醒。”
记录员似乎不满意稣的描述,可能这些情节对他分析案例没有帮助,又问:“你记得时间吗?”
“应该是 2018 年 09 月 11 日到 2019 月 06 月 18 日之间,因为梦中那个并不存在的舍友说稣已经离婚,而稣当时没有意识到现实中的 2019 月 06 月 18 日又复婚了。”
“你能超脱识界的原因是什么?”记录员直接把问题丢给稣!
“呃……”稣突然灵光一闪,“如果第二个梦是在超脱识界回到现实后做的,那是违法识界法则。所以第二个梦,只能是在识界临死状态下做的,正是因为那个梦,使在识界里的稣相信自己不会死。”
“你竟然是被梦救醒的!首例,首例!”
趁记录员正高兴,稣又问了一遍:“能了解一下其他志愿者的情况吗?”
“对不起,无可奉告。这是机密,也是实验者的隐私。”
“你不说,稣也能猜到一些!现在人口这么少,实验还有生命危险,你们不可能找到这么多正常人!”稣的脑海里闪过识界枫林晚里很多个看起来并不友好的人脸。
“咳!圣先生,你很聪明,不过我不会中你的圈套,等你再继续过关,自然有人会告诉你实情。还有问题吗?”
“为什么叫枫林晚?”稣笑着问。
“这名字是你刚刚取的。”记录员看到稣的笑脸,又补充:“你很幸运,一般人醒来根本笑不出来!”
卧槽,这名字满满的欲望的气息,倒也挺符合的,里面男女比例很平衡,还是要生孩子才能离开,想想就……Biu!
话说回来,稣确实运气好,据说以前很多实验者都因为识界太真实,经历过多次痛苦的死亡过程,烙下心理阴影,所以志愿者都要求心理素质十分强大!呵,没空管别人,问正事:“识界里的吴情,现实中也叫吴情吗?”
“你再打听别人隐私的话,今天就到此为止咯!”
“好吧!明天,还能继续枫林晚?”
“随你。识界系统还无法百分百准确地把实验者置入特定场景。这是一个有随机性的双向选择。”
“那下次,稣打算带着自行车和食物进去。”稣坏笑着说,又心想:“进入后,记忆会被屏蔽,带这两个绝对不会不懂怎么用,哈!”
“你自己好好构思……我帮不上忙!”记录员无奈地说,“跟你沟通真不轻松,下次换班,让另一个美女同事和你对接,再见,圣先生!”
]]>作者: UMU @ MEET.ONE 实验室
选择要接受通知的群,群设置 - 群机器人 - 添加机器人;
复制 webhook URL,记为 webhook_url;
发送通知的代码:
1 | const fetch = require('node-fetch') |
添加 @BotFather,发送 /newbot 命令,随提示逐步建立一个机器人,得到这个机器人的 token,记为 bot_token。
选择要接受通知的 Group 或 Channel,按以下任一方式取得 chat_id:
(1) 转发 Group 或 Channel 内的消息到 @getidsbot
(2) 通过 Web 版查看 Group 或 Channel 的 URL 中,p 参数 的值。
如果是 Group,chat_id 为把 g 前缀替换为负号的负整数。比如 p=g268787210
,则 chat_id = '-268787210'
如果是 Channel,chat_id 为 _ 前部分,并把 c 前缀替换为 -100 的负整数。比如 p=c1383705039_968667419389618100
,则 chat_id = '-1001383705039'
1 | const TelegramBot = require('node-telegram-bot-api') |
曾经以为,稣这辈子都会被困在海里。鹰熊岛的岛民处于农耕时代,人情社会,这并不是稣擅长、喜欢的。
上了小学后,稣有一段时间快乐过——在书籍的海洋里遨游,也是不错的……
到四年级,稣又被无限的宇宙给吓出翔!无穷无尽的宇宙,让稣感到恐惧,觉得人生没有意义。
稣生也有涯,而宇宙也无涯。以有涯随无涯,殆已!
五年级,宇宙觉得稣太孤独,就创造了道州德国鹰熊岛外面的世界。
也许那些全是假的,所以稣现在又回到一个相似的困境。只是这里和鹰熊岛景观差很多,走了快三天,没遇到海,连小河都没有。
走过田野,就是高山,就是海那边印象中永远到不了的那种山,翻过去却是雪地。虽然很陡,走得很累的稣还是直接跳了下去。
稣被冻死前,想起吴情,嗯??几天前,明明有人愿意嫁给稣,外面的世界又没人知道,为什么稣要拒绝呢?还跑出来冻死在雪地里,真是脑子抽风啊!
稣醒来,身在软件园非正常人类研究中心!门,居然开着!卧槽,稣不可能这么不小心。只有一个可能,舍友开的门,睡眼惺忪转头一看,果然她没在床上!
门口都是灰,稣想起是物业来装修什么东西,然后回床上一瞧,竟是一堆的粉尘,所以稣一晚上吸了多少灰尘……床太脏,想睡个回笼觉都不行。
稣觉得不太对劲,心想:如果还在梦中,只要继续睡就行了。站在落地窗边,看到阳台有女人的衣服,想起另外一张床,丑女舍友的,现在她不在,可以借用一下吧!但是,马上又想起,她实在太丑了,根本睡不了……
算了,刚才做梦在雪里冻死,这个舍友叫黄雪,不是暗示睡她的床会再死一次吧?!既然睡不着,就起来看看电影吧。
打开电脑,却发现宿舍居然没有网络!翻翻手机微信,也没有任何人联系稣。看来只能去上班了……
习惯性想牵电助力自行车出宿舍,才意识到,自己刚刚换工作,已经不需要跑去观音山非正常人类研究中心那么远的地方了,现在走路去新公司就行……
然而伸手去推门,才发现出八哥了,走廊是被封起来的,也就是说稣出不去!太可怕了,稣得打打电话。
第一个打给脑波,没人接!有点怪,但稣马上安慰自己,她经常睡得很死,没接很正常。
接着打给六舅——号码是空号!射精病呢?啥时候把号码注销的?
再打给我妹,也不通!纳尼?回英国了吗?
突然想起,不是还有个舍友吗?虽然稣不明白,为什么有这样一个舍友……打给黄雪,她一开口就说:“嘿,稣,好久不见!”
稣,好奇地问:“很久了吗?”
黄雪:“是啊,自从我交到男朋友,就没见过面啊,超过两个月了吧!”
稣:“什么鬼……你知道六舅的号码为什么变成空号吗?”
黄雪:“呃……他不是挂了?”
稣大吃一精:“挂了?!别开玩笑啊!”
黄雪:“那家伙不是喜欢骑车上班,结果被地铁撞飞,挂了呗。”
“擦!好像是有这肥屎,但怎么是地铁?好奇怪!”再问,“我妹呢?”
黄雪:“这我不清楚,没怎么联系。”
稣:“哦,那我们是怎么成为舍友的,我怎么都不记得?”
黄雪:“不就是为了省钱吗?”
“我擦,稣存款千万,缺这点宿舍费?说实话不行吗?”
“哈哈哈……”黄雪银铃般笑个不停,好吧,这家伙虽然长得丑,起码声音很好听。
稣:“笑够了吧!电话费也是要钱的。”
“呵,哈哈,你看你,连电话费都要省,还吹牛!”黄雪稍微严肃了一下,继续说:“你不是离婚吗!每个月要付三万抚养费,还要还车贷和房贷,装?你继续装!”
卧槽,稣突然想起来,鹰熊岛是个农村,以前政策不开放,生了二胎会被强行结扎,为了不结扎离的婚,然后要让脑波安心,啥房子、车子都归她,而且还要每个月交钱。
稣一阵沉默,“……还有个问题,偷偷地问,我们没发生过什么吧?”
“哈哈哈”又是那阵鄙视的笑声,“干林涝!不和你说梦话了,白白!”
擦,虽然是一通不愉快的电话,但起码对起来一部分。稣立刻尝试破解附近的 WiFi 密码,很顺利找到一个信号是弱密码。
连上网络后,打开 QQ 想查查其它真相,奇怪的是,群名单里居然空空的,以前加的基友群、联盟群啥的,都躲到“已退出的群”里了。
居然没人鸟稣!?算了,先看电影吧。《灰静熊西蒙》好像还可以……
第二天,WiFi 密码被改了……真特么小气,稣不就看了几集电影?后来发现,自己的手机原来早就开通无限流量套餐,以前不知道,真浪费!宿舍还是出不去,只能继续看电影消遣。
这样的日子一天天过去,稣消耗完耐心,终于从阳台跳了下去……
]]>稣有个前女友,想鉴定一下。
某日晚,稣在她宿舍,出了一道选择题:“好困,稣就在你这睡眯眯了?”
她生气地说:“没想到你是这样的人!”稣觉得莫名其妙就几天不理她,过一段时间发现被她拉黑微信,再过几天 QQ 也被拉黑。
讲各种道理,全方面分析,有凭有据,稣感动得内牛满面,哭着回自己宿舍睡。
人非圣贤孰能不睡,一起睡个觉而已。
然后真的只是睡觉……
就是不睡!
很早以前有人告诉稣,头像是猫的女生一般比较骚,刚开始稣是不信的,后来发现可能有点道理。
绿茶喵的主要特点是装纯。
她们可能是由于早年错误的教育,不由自主很感性地装纯,送人绿茶,唇齿留香,所以可能是好人。
也可能是因为某些心理问题,不得不掩饰,时间久了就是习惯性装,人格有明显缺陷,这种更可能不是好人。
她们习惯站在道德高点,而且可能没有意识到自己的行为很喵。
内心一般很自卑,比较容易玩老了就嫁给屌丝渣男。
心机喵主要特点是擅长玩套路,会主动引导,软中带理性,大部分行为都是故意的,甚至会安排或提醒以后要怎么发展。
特征一:卖乖。经常不假思索地说:是的、好的。只要故意说一个她不可能知道的事情,她习惯性地说“是的”,那就要留意。
特征二:会夸人。经常说好听的话,偶尔会冒出一些正确的赞美。
特征三:备胎多。
特征四:不排斥开车和亲密行为,但上床会很谨慎,因为她们怕因此输了,也怕其他备胎知道。但只要她要的条件达到了,是愿意上床的,毕竟她也需要。
特征五:刻意营造自己的道德高点,但她们明白自己的行为有点喵,可能会被身边的亲近的人说是心机喵,心里有芥蒂,如果智商不够,可能会自爆某人说她心机喵,以求得别人安慰和放下戒心。
互相喜欢的人不会在这种时刻拒绝,最多只会留个心思观测对方。
也有的,以为稣啥都没干是不喜欢她,第二天就和稣分手,稣明明没说谎啊!但这种是正常女人。
实力观测……没话说。反正稣已经被收服了……
女人心是难以捉摸的,反正稣看不懂,就把大部分女人归到这类。
]]>杨朱曰:“百年,寿之大齐。得百年者千无一焉。
杨朱说:“一百岁,是寿命的极限。能活到一百岁的,一千人中难有一人。
设有一者,孩抱以逮昏老,几居其半矣。
即使有一人,他在孩童与衰老糊涂的时间,几乎占去了一半时间。
夜眠之所弭,昼觉之所遗,又几居其半矣。
再去掉夜间睡眠的时间,去掉白天休息的时间,又几乎占去了一半。
痛疾哀苦,亡失忧惧,又几居其半矣。
加上疾病痛苦、失意优愁,又几乎占去了一半。
量十数年之中,然而自得亡介焉之虑者,亦亡一时之中尔。
估计剩下的十多年中,舒适自得,没有丝毫顾虑的时间,也没有其中的一半。
则人之生也奚为哉?奚乐哉?
那么人生在世又为了什么呢?有什么快乐呢?
为美厚尔,为声色尔,而美厚复不可常厌足,声色不可常玩闻。
为了味美丰富的食物吧,为了悦耳的音乐与悦目的女色吧,可是味美丰富的食物并不能经常得到满足,悦耳的音乐与悦目的女色也不能经常听得到与玩得到。
乃复为刑赏之所禁劝,名法之所进退,遑遑尔竞一时之虚誉,规死后之余荣,尔顺耳目之观听,惜身意之是非,徒失当年之至乐,不能自肆于一时,重囚累梏,何以异哉?
再加上要被刑罚所禁止,被赏赐所规劝,被名誉所推进,被法网所阻遏,惶恐不安地去竞争一时的虚伪声誉,以图死后所留下的荣耀,孤独谨慎地去选择耳朵可以听的东西与眼睛可以看的东西,爱惜身体与意念的是与非,白白地丧失了当时最高的快乐,不能自由自在地活一段时间,这与罪恶深重的囚犯所关押的一层又一层的牢笼又有什么区别呢?
太古之人知生之暂来,知死之暂住,故从心而动,不违自然所好,当身之娱非所去也,故不为名所劝;
上古的人懂得出生是暂时的到来,懂得死亡是暂时的离去,因而随心所欲地行动,不违背自然的喜好,不减少今生的娱乐,所以不被名誉所规劝,顺从自然本性去游玩,
从性而游,不逆万物所好,死后之名非所取也,故不为刑所及。名誉先后,年命多少,非所量也。”
不违背万物的喜好,不博取死后的名誉,所以不被刑罚所牵连。名誉的先后,寿命的长短,都不是他们所考虑的。”
杨朱曰:“万物所异者生也,所同者死也。
杨朱说:“万物所不同的是生存,所相同的是死亡。
生则有贤愚、贵贱,是所异也;死则有臭腐、消灭,是所同也。
生存就有贤有愚、有贵有贱,这是不同的;死亡就有腐烂发臭、消失灭亡,这是相同的。
虽然,贤愚、贵贱非所能也,臭腐、消灭亦非所能也。
即使是这样,贤愚与贵贱也不是人所能办到的,腐臭、消灭也不是人所能办到的。
故生非所生,死非所死,贤非所贤,愚非所愚,贵非所贵,贱非所贱。
所以生不是人所能生,死不是人所能死,贤不是人所能贤,愚不是人所能愚,贵不是人所能贵,贱也不是人所能贱。
然而万物齐生齐死,齐贤齐愚,齐贵齐贱。
然而万物的生与死是一样的,贤与愚是一样的,贵与贱也是一样的。
十年亦死,百年亦死,仁圣亦死,凶愚亦死。
活十年也是死,活百年也是死。仁人圣人也是死,凶人愚人也是死。
生则尧舜,死则腐骨;生则桀纣,死则腐骨。
活着是尧舜,死了便是腐骨;活着是桀纣,死了也是腐骨。
腐骨一矣,孰知其异?且趣当生,奚逢死后?”
腐骨是一样的,谁知道它们的差异呢?姑且追求今生,哪有工夫顾及死后?”
古语有云:书不读秦汉以下;意常在山水之间。爱不是光说不练;恋不能自私自利。稣一直记得吓大的校训:恋爱不息,止于上车。恋爱有益身心健康,失恋锻炼思维意志。有时候稣也会幻想能不能跳过恋爱的过程,直接让失恋强壮稣的心灵,但往往变成自恋,被人唾弃,所以这是不对的,还是要多找几个女朋友。
爱制造压力和动力……
以利相交,利尽则散;以势相交,势去则倾;以权相交,权失则弃;以情相交,情逝人伤;唯以性相交,成其久远。
]]>车开到德国大桥爬坡时,居然提示快没电了……难道多载一个人,里程就要打这么多折?为了省电下坡空档滑行,结果进入异次元空间……来到一个很陌生的村庄。
下车给老爸打电话,居然能通,他说那个地方是汽车坟场,凡是过德国大桥正好没油的车就可能掉进去。
这坑很大,而且历史悠久!进来的人都发展出一个村庄了,主要靠农业和修车维持生存。
一个大伯说:“这里的科技很原始,你这车很难修,得在村里生活很久才可能离开了。”
另一个大妈说:“呵呵,来到这里的人,还有离开的先例吗?”
大伯看起来像修车工,稣好奇地问:“修好要多少钱?”
大伯乐呵了:“钱是什么东西?这里没有银行、ATM,你上哪里取?就算取了,我们也不承认。”
原来,这里陆陆续续进来三四百人,至今没有人成功离开。无法离开的原因可能是:在原始农业时代修好工业时代的车——难;修好之后,开出这个异次元世界——更难!
不过大妈似乎并没有很绝望,眼神看起来很乐观,有种在这里一样能快乐地生活的气态。继续深聊,才发现当地有个传说:只要在这里生儿育女,就可以一个换一个,如果生两个孩子,那么在孩子都成年后,夫妻就可以离开,回到原来的世界。
这时候,身边的女孩说话了:“我愿意和你结婚、生子,等孩子长大,争取他们的同意,我们就离开!”
稣看着眼前这个相貌平平又没胸的女孩,惊讶不已!怎么能这么轻易就谈婚论嫁!?难道她看穿稣在现实世界有两千万存款?不对啊,外面的钱,在这里又没啥卵用。还是问点实际的:“都不知道你贵姓芳名呢?”
“我叫吴情,爱情的情。”女孩问答道,口气很平静,像在念口头禅。
稣隐约记得在现实世界,稣已经结婚生子,但还是好奇地问:“那你说说为什么要嫁给稣?我们才认识几分钟呢!”
“首先,你有车,说明在实现世界里,能力没问题,而且对车肯定比我更了解;其次,从你的年纪和身材来看,保持得挺好,在这边主要是靠农业和修车业,这两者你都会比我有优势很多。然后,刚才你让我搭便车,说明心地善良。最后,我是读金融的,在这里刚开始用处不大,但会越来越有用,只要我们结合,我会用专业帮助你更好地规划生活、事业和资产。”
听起来好像还不错,稣也一直很喜欢读财务、金融之类的女生,顿时有点心动,继续问:“你觉得我们在这里能活得好?”
“一定比大部分人活得好!说不定,我们会成为这里的富豪家族。”
哇嗷!成为一方富豪!?想想还有点期待……但还是有个隐患:“如果我们真的能活得很好,这里又是世外桃源,稣可能想留下,你会陪稣留下来吗?”
“不会。”吴情无情地回答。
稣:“为什么?”
吴情:“这里的时代落后我们原来生活的时代太多,我只能接受一时的倒退,不能是一辈子!我必须回去。”
“所以你,只是想互相利用,你并不喜欢稣,是吧?”稣失望地问。
“可能吧,我不确定以后会不会喜欢你,但即使喜欢,以我现在的心思,我大概率要离开。”有一刹那,女孩露出了羞涩的表情。
虽然有点诱惑,但稣最终还是做出决定,“对不起,稣不能娶你,没有感情基础,很为难,况且这个传说还没人实践过,说不定只是哪个有才的人,想出来娱乐大家的主意呢!”
“我是 98 年的,虽然没有很漂亮,但很年轻,你居然能拒绝我这个年龄段的女孩子!”吴情有点意外,继续问:“我想听听你有什么更好的方案!”
“稣没有什么更好的方案!不过很感谢你在某些程度上,对稣的肯定,作为答谢,车就送你吧!稣是暴走族,每次暴走灵思飞扬说不定可以穿越时空,想用走的试试……”
吴情忍不住笑了,可能是笑稣天真,但眼神里还带着一丝丝鄙视……不过,稣却发现她笑起来挺美的。
稣:“你要多笑!很美。再见!”
“好吧,再见!”她又笑了一下,这次没有鄙视。稣记住了这个年轻女孩的笑容。
说完,稣不顾一切反对,往东直走,三天三夜之后,终于累死在路上。
]]>没错,“小草青青,脚下留情”这是反人类的标语,人类自古就喜欢踩草地。
可是人人都踩,草地就坏了鸭!草草这么可爱你怎么可以踩?
草,之所以被踩坏,是因为很多人焦虑总是走同一条最短路线。而稣不走寻常路,每天走不同曲线,踩不同的位置。草草这么口爱,稣就是要踩,只要不被人捅死就可以愉快地去上班。
]]>梦见两个过世的朋友,一个横结肠癌,一个胃癌……醒来又想起鳏寡效应……
愿科技进步,人间应该只有一种绝症,叫:活腻了。
]]>霹雳角色“大漠苍鹰”的诗号:
]]>太行千仞插云立,黄河万里从天倾。冲霄岂为层嶂碍?击光翻浪任翱行。
霹雳角色“剑禅觅心”的诗号:
]]>数甲子来寻剑客,空劫佛尘会有期。求道觅心不可得,直见禅锋更无疑。
作者: UMU @ MEET.ONE 实验室
经典三步:
了解区块链基本概念,了解 EOS 基本情况;
看官方开发者文档;
开始愉快地写代码。
但是,有个很大的问题:开发语言居然是 C++!所以,鼓励师出场了……
不信?我们就来试一试:
1 | error: cannot use 'try' with exceptions disabled |
智能合约的编译目标是 WASM 文件,最终要在 WASM 的 VM 里运行,比如 wabt,这和常规情况下使用原生 C++ 开发可执行程序、静态库、动态库等,有很大不同。
受限部分包括:
语言特性。比如上面举例的 try。
可调用外部函数。比如 CRT 的 rand 函数,再比如您想用 socket 自由通信……没门。
内存访问。这个比较难解释,后面再说。
如果您学过 Golang、Python、nodejs、Java 或其它相近语言,转到智能合约开发,可以说是轻而易举。理由如下:
智能合约关注业务逻辑,和大部分脚本语言类似。
智能合约有很强的约束范围,API 很有限,不会要求记忆大量知识。举个例子,它可以使用 boost,但也只是子集,无法使用完全的 boost。
智能合约有很强的套路,代码是满满的既定格式。熟悉 Hello world,会用基本的命令行工具进行测试,最多只需要 2 天,就会发出“原来这么简单”的感叹。
如果您学过 Golang、Rust 可能会注意到,它们可以编译成 WASM 文件。比如 Golang 的编译命令为:
1 | GOOS=js GOARCH=wasm go build -o hello.wasm |
但是找个 Hello world 编译一下,您可能会哭,产生的 WASM 文件有 2.3MB,就获得一个打印信息……(EOS 基本概念:RAM 挺贵的。)
虽然现状是 C++ 一枝独秀,但未来可能会有人开发专门的编译器支持 Golang、Rust 等语言开发 EOS 智能合约。
VSCode 安装插件后可以直接打开 WASM 文件,显示 WAST 代码,比如我们随便打开一个 hello.wasm,滚动到末尾,可能会看到以下两行:
1 | (data (i32.const 8192) "read\00") |
下面我们写个 C++ 代码:
1 | const char* p = reinterpret_cast<const char*>(8192); |
以上代码,打印出 read
。如果把 8192
改为 8197
,则打印 get
;改为 8201
,打印 malloc_from_freed was designed to only be called after _heap was completely allocated
。
这个例子可能吓倒大家,特别交代下,一般开发中,较难遇到逆向……只是想说明 WASM 的内存管理和常规 C++ 开发的可执行程序是不同的,后者把指针指向 8192,是 Process Working Set 的地址,通常来说去读这么低的地址,后果极可能是读异常,挂掉。
划重点:虽然你用 C++ 写代码,但编译后是 WASM 二进制编码,运行时使用 VM,受控性很强,降低了开发难度,也杜绝很多安全问题。
为了讨好 Python 程序员,下面用 Python 来写个开平方运算,有这样的:
1 | import math |
也有这样的:
1 | import numpy |
他们有个共同点——很快……相对 C++ 写的!!有点难以理解?
Python 的 sqrt 函数,其实都是用 C 语言实现的,最终都是调用解释器里的本地代码,速度很快。
原生 C++ 写的本地程序,几乎肯定是比 Python 快的,但我们前面说过:智能合约的 C++ 不是常规的 C++,当它被编译成 WASM 后,我们去看 WAST 代码,会发现 sqrt 的实现整个被塞进 WASM 里,它最终要用 VM 来执行,当然没有 Python 解释器快了!
打开任意 WASM 文件,可以看到里面很多 (import
开头的行,这些都是原生 C++ 实现的 API,它们的执行速度就是本地代码的速度,对应官网 API 文档里的 API。
有前面的性能问题,我们不禁要问 EOS 为什么不多做点 API 来提高性能?这是因为维护少量 API 代价比较可控,数量一多就有版本问题,各节点可能因为版本不同步而无法达成共识。
另外,目前的 wabt 功能强大,性能也过得去,对于 sqrt 此类可能并不常用的数学函数,即使用原生 C++ 实现了,性能提升带来的好处,也无法平衡多版本可能带来的风险。
原则上,BP 之间快速达成共识,提升 TPS 才是更值得做的。
]]>作者: UMU @ MEET.ONE 实验室
总结同步主网数据到 MongoDB 时的常用操作,大部分以 transaction_traces 表为例。
1 | read-mode = read-only |
从 https://eosnode.tools/blocks
下载最新 blocks data,以减少网络同步时间。
首次启动,应使用 --replay-blockchain
参数。
目前 nodeos 1.5+ 版本如果优雅退出,下次启动可以无需痛苦的 replay 过程,所以可以监控 nodeos 进程,如果退出就调用。
启动脚本 /home/ubuntu/shell/continue.sh:
1 | nohup /usr/local/eosio/bin/nodeos --config-dir /home/ubuntu/nodeos/config-dir --data-dir /home/ubuntu/nodeos/data-dir > /home/ubuntu/shell/`date +%Y-%m-%d_%H-%M`.log 2>&1 & |
守护脚本 /home/ubuntu/shell/autorun.sh:
1 | ps -C nodeos || /home/ubuntu/shell/continue.sh |
添加到计划任务,运行 sudo crontab -e
,输入下行并保存、退出:
1 | * * * * * /home/ubuntu/shell/autorun.sh |
nodeos 需要写入,使用有写入权限的 EOS 用户,其余情况使用只读权限的 EOSReader 用户,数据库安装之后就尽量不使用管理员用户。
1 | use EOS |
1 | use EOS |
作者: UMU @ MEET.ONE 实验室
当 MongoDB 因不可抗力故障,nodeos 重启后会丢失上次故障时正在插入的记录。
nodeos 会将插入语句连同错误原因等信息一起写入 log,这给了我们手动修复丢失的机会。下面以 transaction_traces 为例,介绍修复流程。
1 | grep 'mongo exception, trans_traces insert:' *.log > lost.txt |
1 | echo 'print("++++"); |
1 | nohup mongo mongodb://$user:$password@127.0.0.1:$port/admin lost.js > lost.log |
作者: UMU @ MEET.ONE 实验室
2018 年最后一个工作日,智能合约开发小哥哥遇到一个奇怪的现象:某个账号给我们合约转账,在 EOS 浏览器上都可以找到记录,但用 cleos get table
在合约的 RAM 里找却找不到!
了解具体情况后,注意到两个事实:
只有某个特定账号有问题,其它账号很正常。
那个有问题的账号是纯数字的。
这是 EOS 账号解析的问题,UMU 曾经给 EOS 提过一个相关的 issue:get_table_by_scope parameter lower_bound is NOT properly converted, cause enumeration dead loop #5824,里面有问题产生原因和解决方案。
eosio::name 本质是一个 uint64_t 数字的 base32 编码,编码形式是为了方便人类记忆。举个例子:
shengxiaokai
本质上是 14075216089888066784 (0xc3553675c6a40ce0)
cleos get table
在解析账号时,兼容了这两种表达形式,所以 14075216089888066784
和 shengxiaokai
是等价的。
但本身是纯数字的账号可就有歧义了,比如 313131313131
是当成一个 uint64_t 解释,还是当成 base32?很不巧,解析代码是优先当成 uint64_t 解释的。
给纯数字 EOS 账号加上个空格后缀,比如 111122223333
可以改为 "111122223333 "
。
作者: UMU @ MEET.ONE 实验室
很多 EOS 浏览器都只能显示别人给我抵押了多少 EOS,但不能看到是哪个账号帮我抵押的。
从 eosio.contracts/eosio.system/src/delegate_bandwidth.cpp
的 delegatebw
函数开始分析。
它调用了 changebw
,其中的查表操作是这样的:
1 | del_bandwidth_table del_tbl( _self, from.value ); |
scope 是 from,而 from 就是要求的未知项,直接粉碎我们用这路线继续求解的可能。
MEET.ONE 之前发布过几篇关于 MongoDB 插件的文章,这些积累为我们继续求解提供了很大便利。
直接在 Mongo Shell
里尝试:
1 | use EOS |
执行之后,找到一条 trx_id 为 9bd50c0fd6f0e1d0ed4c6f5c6f873a33976955ff9dae2ac3eb16cb7e9a44d106
的交易记录,显示 1freeaccount
为 shengxiaokai
抵押:
1 | { |
波荡:补东,即冬至要进补。
当醉:冬至。
作者: UMU @ MEET.ONE 实验室
为了保证 MongoDB 服务器的容量足够应对未来发展,我们做了分片,但经过对比测试,发现每隔 15 分钟左右,nodeos 就会报错,并优雅退出。
查看了社区的 issues 发现有类似情况:mongodb shard: line 870, code 61, generic server error
反复测试发现,总是同一个地方抛出异常:
1 | // insert action_traces |
插入数据的代码很多,但就这个地方报错,说明 action_traces 表有特殊性。
action_traces 的 shard key 被定义为 _id,而其他没报错的表并不是 _id。
批量插入时,_id 是有单调递增性的,根据官方文档
Avoid Monotonic Throttling,需要降低单调递增性,才能使批量插入均匀分散到各个 shard 上。
(#6498) Fix cluster writes for mongo DB
]]>作者: UMU @ MEET.ONE 实验室
在 eosio.contracts/eosio.system/src/producer_pay.cpp
中有这样一行代码:
1 | const double continuous_rate = 0.04879; // 5% annual rate |
搜索一下,会得到这样的解释:
EOS是连续增发的模式,连续通胀率是 4.879%,年度通胀是 5%;
运用微积分的知识,可以推导出来,假设是增发的次数是无限多次,那么,连续通胀的情景下,所设置的连续通胀率就是 4.879%。
然而,并没有解释具体算法……
1 | (1 + daily_rate / 365) ^ 365 = 1 + annual_rate |
那么计算 daily_rate 的公式为:
1 | [365TH_ROOT(1 + annual_rate) - 1] * 365 |
把 5% 带入,计算结果是:0.048793425246406
,这个数值已经和 0.04879 基本一样了。
问题本质:已知 annual_rate、(1 + continuous_rate / N) ^ N = 1 + annual_rate
,求 continuous_rate 在 N 为无穷大时的解。
复习一下大学数学,马上就会发现 lim N->∞ (1 + x / N) ^ N
就是 e ^ x
的定义,所以:
1 | continuous_rate = ln(1 + annual_rate) |
把 5% 代入 annual_rate,continuous_rate = 0.048790164169432
#1537 DAWN-651 ⁃ setting correct per-block “continuous inflation” so annual inflation is 5%
]]>在前文《为 EOSIO MongoDB 插件搭建高可用集群》中,我们使用了 MongoDB 4.0.4,如果直接配套 EOSIO 1.5 版本,MongoDB 插件用的 MongoDB C Driver 与 MongoDB 4.0.4 是不完全兼容的。
EOSIO 1.5 指定的 MongoDB 版本是 3.6.3;
MongoDB 4.0 的客户端需要 MongoDB C Driver 1.11.0,而 EOSIO 1.5 用的是 1.10.2。
修改 eos/scripts/eosio_build_${SYS_NAME}.sh
,其中 SYS_NAME 是系统名字,以 macOS 为例,应该改的是 eos/scripts/eosio_build_darwin.sh
。
把 mongo-c-driver 版本改到足够高,比如 1.13.0,即把脚本里的下载链接 https://github.com/mongodb/mongo-c-driver/releases/download/1.10.2/mongo-c-driver-1.10.2.tar.gz
改为 https://github.com/mongodb/mongo-c-driver/releases/download/1.13.0/mongo-c-driver-1.13.0.tar.gz
把 mongo-cxx-driver 版本改到足够高,比如 3.4.0,可以直接把脚本里的 git clone https://github.com/mongodb/mongo-cxx-driver.git --branch releases/v3.3 --depth 1
改为 git clone https://github.com/mongodb/mongo-cxx-driver.git --branch releases/stable --depth 1
Ubuntu 操作参考:
1 | sed -i 's/releases\/v3.3/releases\/stable/;s/1\.10\.2/1\.13\.0/g' scripts/eosio_build_ubuntu.sh |
然后编译、安装 eos。
参考:
以上方法不适用于 v1.7.0,新版 eos 已经使用新版 mongo-c-driver 和 MongoDB C++11 Driver,唯一需要改的是 eos/scripts/eosio_build.sh
的这行:
1 | export MONGODB_VERSION=4.0.6 #3.6.3 |
系统:CentOS7。 正像大部分国人喜欢用免费的 Windows 旗舰版,采用 RedHat 社区版,既有“企业级待遇”,又免费。实在是解决选择恐惧症必备良药……
MongoDB:4.0.4。 4.0 之前的版本不支持一些类型转换的函数,后期使用起来很麻烦。举个例子:
New in version 4.0.
文件系统:XFS。 4.0 已经抛弃 MMAPv1 Storage Engine,官方文档强烈建议
WiredTiger Storage Engine 和 XFS 配套使用。
With the WiredTiger storage engine, using XFS is strongly recommended for data bearing nodes to avoid performance issues that may occur when using EXT4 with WiredTiger.
副本数:1。 数据可以很容易重新获取,丢失的代价不高,所以副本不是很重要(有钱请搞三副本)。另外,目前 nodeos 较常把数据弄脏,在它本身没高可用时,不宜对数据库投入太多成本。
机器配置:某云服务器一台。 16 Cores,256G RAM,启动盘 10G,额外八个 1T Disk。
1 | $ lsblk |
安装过程中,若您需要 reboot 系统,则每次 reboot 之后都要做一次:
1 | setenforce Permissive |
以下命令不是持久化改变,但比较容易说明改了啥,仅供参考:
1 | echo never > /sys/kernel/mm/transparent_hugepage/enabled |
根据 Disable Transparent Huge Pages (THP),真正使用的是:
1 | mkdir -p /etc/tuned/no-thp |
以下命令不是持久化改变,但比较容易说明优化了啥,仅供参考:
1 | echo 120 > /proc/sys/net/ipv4/tcp_keepalive_time |
真正使用的是:
1 | FILE=/etc/sysctl.conf |
1 | PASSWORD=MEETONE_FAKE_PASSWORD |
1 | semanage port -a -t mongod_port_t -p tcp 17087-17095 |
1 | yum install -y xfsprogs |
参考官网的安装文档:Install MongoDB Community Edition on Red Hat Enterprise or CentOS Linux
1 | echo '[mongodb-org-4.0] |
1 | function InitDir { |
1 | function CreateShardConfig { |
1 | function CreateConfigServerConfig { |
1 | function CreateMongoSConfig { |
1 | function ConfigKeyfile { |
1 | use EOS |
1 | wget https://github.com/eosio/eos/releases/download/v1.5.0/eosio-1.5.0-1.el7.x86_64.rpm |
目前 EOSIO 1.5 依赖的 boost 版本为 1.67,但最新的 boost 是 1.68,如果不小心用 brew upgrade
把 boost 升级到最新,则 EOSIO 代码将无法顺利编译。
不必删除 1.68 版本,当之前安装过 1.67,再安装 1.68 时,其实两者是同时存在的,只是系统目录下的链接是指向最新版本而已。只要把链接改回 1.67 即可。
以下脚本适用于 macOS Mojave 系统,其它系统请自行做相应修改。
1 | ln -s /usr/local/include/boost /usr/local/Cellar/boost/1.67.0_1/include/boost |
穷和老都会导致肥胖。
]]>C++ 是个多重范型编程语言:面向过程、面向对象、函数式、泛型、原编程式,所以他的规约很多,记住四个次语言可以帮助了解 C++:C、Object-Oriented C++、Template C++、STL。
他们的根本差别是:前三者是编译器处理的,最后者是预处理器处理的。enum 比 const 更像 #define,比如说 const 定义通常可以求地址或引用,而 enum 不行。
inline 函数比宏多了类型安全和可预料性,一个例子是将 i++ 或 ++i 当参数传给宏时,可能导致 ++ 了多次,而传给 inline 函数则不会。
const 可以帮助编译器侦测错误的用法。例如,令函数返回一个常量值,往往可降低因调用者错误而造成的意外,而又不至于放弃安全性和高效性。比如当比较语句少写了一个 = 时:
1 | // 本意是 ==,结果导致在 a * b 的临时变量上调用 operator= |
如果 operator= 返回值不是 const 会导致以上错误代码编译通过!
bitwise constness 认为 const 成员函数不可以更改对象内任何 non-static 成员变量,logical constness 主张在调用者侦测不出的前提下可以修改对象内某些 bits,可以利用 mutable 释放掉 non-static 成员变量的 bitwise constness 约束。
在 const 和 non-const 成员函数中避免重复的做法是:让 non-const 成员函数调用 const 成员函数,而不要反过来。
为内置型对象进行手工初始化,因为 C++ 不保证初始化它们。
构造函数最好使用成员初值列,而不是赋值操作,排列顺序最好和声明次序想同。
为避免跨编译单元的初始化次序问题,用 local static 对象代替 non-local static 对象,参考 Singleton 模式常见实现。
1 | XClass& GetInstance() |
编译器可以隐式为类创建:默认构造函数、复制构造函数、赋值构造函数、析构函数。
拒绝的普遍方法是:把函数设为 private,只有声明没有实现。但 member 函数和 friend 函数还是可以调用 private 函数,由于没有实现,会在连接期报错,不利排插,将错误移至编译期的方法是:private 继承 Uncopyable 类,Boost 也有个类,名为 noncopyable。
更新式的做法是把函数声明为 = delete。
任何类只要带有 virtual 函数,都几乎确定应该有一个 virtual 析构函数。但有 virtual 函数会降低调用效率和可优化性,所以能不用则不用,比如说,某个类没有考虑作为基类(base class)被继承,则没有必要有 virtual 析构函数,STL 的容器大多如此。
如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下他们或者结束程序。
如果客户需要对某个函数运行期间抛出的异常做出反应,那么类应该提供一个普通函数执行该操作,而非在析构函数中。
因为这类调用从不降至派生类(derived class),它将调用本层的函数。
这样才能支持连锁赋值,a = b = c = d。
方法有:比较来源和目标对象的地址、精心周到的语句顺序、copy-and-swap。要考虑自我赋值的概率,如果很小,则比较地址的方式可能并不好,因为无视它效率更高。
复制函数应该保证复制“对象内的所有成员变量”及“所有基类成分”。当你编写一个复制函数,请确保(1)复制所有 local 成员变量,(2)调用所有基类内的适当的复制函数。
不要尝试以某个复制函数实现另一个复制函数。应该将共同机能放进第三个函数中,并由两个复制函数共同调用。
获得资源后立刻放进对象(managing object)内。“以对象管理资源”又称“资源取得时机就是初始化时机”(Resource Acquisition Is Initialization; RAII)
管理对象(managing object)运用析构函数确保资源被释放。
为防止资源泄漏,请使用 RAII 对象,它们在构造函数中获得资源并在析构函数中释放资源。
常被使用的 RAII class 是 std::shared_ptr,它是“引用计数器型智能指针”(Reference-counting smart pointer; RCSP),它无法打破环形引用(cycles of reference)。
不要用智能指针管理动态分配的数组,因为会导致错误形式的释放。参考《[C++ 学习笔记 1] delete 和 delete [] 的本质区别》。
复制 RAII 对象必须一并复制它管理的资源,常见的 RAII class copying 行为是:
(1)禁止复制;
(2)对底层资源祭出“引用计数法”(reference-count);
(3)复制底部资源;
(4)转移底部资源的拥有权。
APIs 往往要求访问原始资源(raw resource),所以每一个 RAII class 应该提供一个“取得其所管理之资源”的方法,比如 .get()。
对原始资源的访问可能经由显式转换或隐式转换。一般而言,显式转换比较安全,但隐式转换对客户比较方便。
如果你在 new 表达式中使用 [],必须在相应的 delete 表达式中也使用 []。如果你在 new 表达式中不使用 [],一定不要在相应的 delete 表达式中使用 []。参考《[C++ 学习笔记 1] delete 和 delete [] 的本质区别》。
以独立语句将 newed 对象存储于(置入)智能指针内。如果不这么做,一旦异常被抛出,有可能导致难以察觉的资源泄漏。
1 | // 编译器可能为了产生更高效代码,而弹性地改变三个元语句的执行顺序 |
“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。一致性的例子:STL 容器都有 size 成员函数。不一致性对开发人员造成的心理负担,没有任何一个 IDE 可以完全抹除。
“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。
std::shared_ptr 使用每个指针专属的删除器,消除“cross-DLL problem”;它还支持定制删除器,可被用来自动解除互斥锁(mutexes,见条款 14)。
Class 设计就是 type 的设计,在定义一个新 type 之前,要考虑以下主题:
(1)新 type 的对象应该如何被创建和销毁?
(2)对象的初始化和赋值该有什么差别?
(3)新 type 的对象如果被以值传递(pass by value),意味着什么?
(4)什么的新 type 的合法值?setter 函数要检查错误。
(5)新 type 需要配合某个继承图系(inheritance graph)吗?这影响函数——尤其是析构函数,是否为 virtual(见条款 7)。
(6)新 type 需要什么样的转换?如果希望 T1 被隐式转换为 T2,必须在 class T1 内写一个类型转换函数(operator T2)或在 class T2 内写一个可被单一实参调用(non-explicit-one-argument)的构造函数。如果只允许 explicit 构造函数存在,就得写出专门负责转换的函数,且不得为类型转换操作符(type conversion perators)或 non-explicit-one-argument 构造函数。(条款 15 有隐式和显式转换函数的范例,https://my.oschina.net/umu618/blog/839649)
(7)什么样的操作符和函数对此新 type 而言是合理的?这决定你的 class 有哪些函数,其中哪些是 member 函数,哪些则否。(参考条款 23, 24, 26)
(8)什么样的标准函数应该驳回?声明为 private。(见条款 6)
(9)谁该取用新 type 的成员?这个问题帮你决定成员的可见性(public、protected、private)。也帮你决定哪个 classes 和/或 functions 应该是 friends,以及将它们嵌套于另一个之内是否合理。
(10)什么是新 type 的未声明接口(undeclared interface)?它对效率、异常安全性(见条款 29)以及资源运用(例如多任务锁定和动态内存)提供何种保证?你在这些方面提供的保证,将为你的 class 实现代码加上相应的约束条件。
(11)新 type 有多么一般化?new class or new class template?
(12)真的需要一个新 type 吗?如果只是定义新的子类(derived class)以便为既有 class 添加机能,那么也许单纯定义一或多个 non-member 函数或
尽量以 pass-by-reference-to-const 替换 pass-by-value。前者通常比较高效,并可避免切割问题(slicing problem,即派生类被转化成基类时丢失派生类特有的成分)。
以上规则并不适用于内置类型,以及 STL 的迭代器和函数对象。对它们而言,pass-by-value 往往比较适当。
不要返回 pointer 或 reference 指向一个 local stack 对象,因为离开作用域即被销毁。
不要返回 reference 指向一个 heap-allocated 对象,因为无法保证配套 delete。
不要返回 pointer 或 reference 指向一个 local static 对象而有可能同时需要多个这样的对象。
1 |
|
以上代码输出为:
You think it’s: 1.2.3.4, 5.6.7.8
But in fact it’s: 1.2.3.4, 1.2.3.4
切记将成员变量声明为 private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供 class 作者以充分的实现弹性。
protected 并不比 public 更具封装性。
宁可拿 non-member non-friend 函数替换 member 函数。这样做可以增加封装型、包裹弹性(packaging flexibility)和技能扩充性。
member 函数的反面是 non-member 函数,而不是 friend 函数。
设计 operator * 时,要能支持乘法交换律。
如果你需要为某个函数的所有参数(包括 this 指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是个 non-member。从 Object-Oriented C++ 跨进 Template C++ 时,会有新争议和解法,参考条款 46。
通常我们不能改变 std 命名空间内的任何东西,但可以为 temlates 制造特化版本。
C++ 只允许对 class templates 偏特化(partially specialize),而对 function templates 则不许。
当 std::swap 对你的类型效率不高时,提供一个 swap 成员函数,并确定这个函数不抛出异常。因为成员 swap 的一个最好应用是帮助 classes 和 class templates 提供强烈的异常安全性(exception-safety)保障。条款 29 细说。
如果你提供了一个 member swap,也该提供一个 non-member swap 用来调用前者。对于 classes(而非 templates),也请特化 std::swap。
调用 swap 时应针对 std::swap 使用 using 声明式,然后调用 swap 并不带任何“命名空间资格修饰”。
为“用户定义类型”进行 std templates 全特化是好的,但千万不要尝试在 std 内加入某些对 std 而言全新的东西。
太早出现,可能因为下面出现异常,导致构造白白浪费。
延后可以增加程序的清晰度、改善效率。
dynamic_casts 有性能代价,应该尽量避免。绝对要避免“连串动态转型”(cascading dynamic casts)。
如果转型是必要的,试着将它隐藏于某个函数。客户可以条用该函数,而不需要讲转型放进他们的代码内。
宁可使用 C+±style 转型,不要使用旧式转型。前者很容易辨识出来,而且有分门别类的职掌。
避免返回 handles(包括 reference、指针、迭代器)指向对象内部,可以增加封装型,帮助 const 成员函数的行为像个 const,将发生“虚吊号码牌”(dangling handles)的可能性降至最低。
反之,传出去的 handles 可能让你暴露在“handles ”的风险下。
当异常被抛出时,异常安全的函数会:(1)不泄漏任何资源;(2)不允许数据败坏。
异常安全函数(Exception-safe functions)提供这三个保证之一:(1)基本承诺,如果异常抛出,程序内的任何事物仍然保持在有效状态下。(2)强烈保证,如果异常抛出,程序状态不改变。(3)不抛掷(nothrow)保证,承诺绝不抛出异常。
“强烈保证”往往能够以 copy-and-swap 实现出来,但“强烈保证”并非对所有函数都可以实现或具备现实意义。
木桶原理:函数提供的“异常安全保证”通常最高只等于其所调用的各个函数的“异常安全保证”中的最弱者。
将大多数 inlining 限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级(binary upgradability)更容易,也可使潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
定义于 class 内的函数都隐性成为 inline,包括像 operator* 这样的 friend 函数。
不要只因为 function templates 出现在头文件,就将它们声明为 inline。
所有对 virtual 函数的调用(除非是最平淡无奇的)都会使 inlining 落空。
编译器通常不对“通过函数指针而进行的调用”实施 inlining,这意味着对 inline 函数的调用最终是否 inlined 由编译器决定。
构造函数和析构函数往往是 inlining 的糟糕候选,因为他们隐含一些由编译器产生的代码。
inline 函数的风险:它们无法随着程序库的升级而升级,必须重新编译。
支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式。基于此构想的两个手段是 Handle classes 和 Interface classes。
程序库头文件应该以“完全且仅有声明式”(full and declaration-only forms)的形式存在。这种做法适用于 templates。
(1)如果使用 object references 或 object pointers 可以完成任务,就不要使用 object。
(2)如果可以,尽量以 class 声明式替换 class 定义式。
(3)为声明式和定义式提供不同的头文件。
Java 和 .NET 都不允许在 Interfaces 内实现成员变量或成员函数,但 C++ 可以。
Handle classes 和 Interface classes 有微小的性能损失,但为了降低 classes 之间的耦合性是值得的。如果性能比耦合性重要,才用具象类(concrete )替换它们。
“public 继承”意味 is-a。适用于 base classes 身上的每一件事一定也适用于 derived classes 身上,因为每一个 derived classes 对象也都是一个 base class 对象。
classes 之间的关系除了 is-a 之外,还有 has-a(有一个)和 is-implemented-in-terms-of(根据某物实现出)两种常见的关系。
derived classes 内的名称会掩盖 base classes 内的名称。在 public 继承下从来没有人希望如此。
为了让被掩盖的名称再见天日,可使用 using 声明式或转交函数(forwarding function)。
接口继承和实现继承不同。在 public 继承之下,derived classes 总是继承 base class 的接口。
成员函数的接口总是会被继承。
pure virtual 函数有两个最突出的特征:他们必须被任何“继承了它们”的具象 class 重新声明,而且它们在抽象 class 中通常没有定义。
声明一个 pure virtual 函数的目的是为了让 derived classes 只继承函数接口。
声明简朴的(非纯)impure virtual 函数的目的,是让 derived classes 继承该函数的接口和缺省实现。
声明 non-virtual 函数的目的是为了令 derived classes 继承函数的接口及一份强制性实现。
1 | class GameCharacter { |
令客户通过 public non-virtual 成员函数间接调用 private virtual 函数,称之为 non-virtual interface(NVI)手法。它是 Template Method 设计模式的一个独特表现形式。non-virtual 函数称为 virtual 函数的外覆器(wrapper)。
缺点:将机能从成员函数移到 class 外部函数,导致非成员函数无法访问 class 的 non-public 成员。
古典的 Strategy 模式会将健康函数做成一个分离的继承体系中的 virtual 成员函数。
复合(composition)的意义和 public 继承完全不同。
在应用域(application domain),复合意味 has-a(有一个)。在实现域(implementation domain),复合意味 is-implemented-in-terms-of(根据某物实现出)。
Private 继承意味 is-implemented-in-terms-of(根据某物实现出)。它通常比复合(composition)的级别低。但是当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的。
和复合(composition)不同,private 继承可以造成 empty base 最优化。这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要。
多重继承比单一继承复杂。它可能导致新的歧义性,以及对 virtual 继承的需要。
virtual 继承会增加大小、速度、初始化(及赋值)复杂度等等成本。如果 virtual base classes 不带任何数据,将是最具实用价值的情况。
多重继承的确有正当用途。其中一个情节涉及“public 继承某个 Interface class”和“private 继承某个协助实现的 class”的两相组合。
class 和 template 都支持接口(interface)和多态(polymorphism)。
对 class 而言接口是显示(explicit)的,以函数签名为中心。多态则是通过 virtual 函数发生于运行期。
对 template 参数而言,接口是隐式的(implicit),奠基于有效表达式。多态则是通过 template 具现化和函数重载解析(function overloading resolution)发生于编译期。
声明 template 参数时,前缀关键字 class 和 typename 可互换。
请使用关键字 typename 标识嵌套从属类型名称;但不得在 base class lists(基类列)或 member initialization list(成员初值列)内以它作为 base class 修饰符。
Templates 生成多个 classes 和多个函数,所以任何 template 代码都不该与某个造成膨胀的 template 参数产生相依关系。
因非类型模板参数(non-type template parameters)而造成的代码膨胀,往往可消除,做法是以函数参数或 class 成员变量替换 template 参数。
因类型参数(type parameters)而造成的代码膨胀,往往可降低,做法是让带有完全相同二进制表述(binary representations)的具现类型(instantiation types)共享实现码。
请使用成员函数模板(member function templates)生成“可接受所有兼容类型”的函数。
如果你声明 member templates 用于“泛化 copy 构造”或“泛化 assignment 操作”,你还是需要声明正常的 copy 构造函数和 copy assignment 操作符。
函数的参数可以隐式转换,函数模板不行。
friend 的传统用途是“访问 class 的 non-public 成分”。
在 class 内部声明 non-member 函数的唯一办法就是:令它成为一个 friend。
STL 的迭代器有 5 种:input、output、forward、bidirectional、random access,为了给它们实现统一的 advance 函数,需要再编译期间判断迭代器的类型,这可以使用 Traits 技术来实现。
建立一组重载函数(身份像劳工)或函数模板(例如 doAdvance,最后一个参数是 typename std::iterator_traits
简历一个控制函数(身份像工头)或函数模板(例如 advance),它调用上述那些“劳工函数”并传递 traits class 所提供的信息。
Traits classes 使得“类型相关信息”在编译期可用。它们以 templates 和“templates 特化”完成实现。
整合重载技术(overloading)后,traits classes 有可能在编译期对类型执行 if…else 测试。
Traits 解法属于 TMP(Template metaprogramming,模板元编程),比 typeid-based 解法高效,高效的原因:
编译期测试类型。
类型测试代码不会被链接到可执行程序中。
TMP 是图灵完备(Turling-complete)的。
TMP 可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率。
TMP 可被用来生成“基于政策选择组合”(based on combinations of policy choices)的客户定制代码,也可用来避免生成对某些特殊类型并不适合的代码。
当 operator new 无法满足某一内存分配需求时,它会先调用一个客户指定的错误处理函数 new-handler。(这并非全部事实,参考条款 51)为了指定“用以处理内存不足”的函数,客户必须调用声明于 <new> 的标准库函数 set_new_handler:
1 | namespace std { |
用法示例:
1 | void OutOfMemory() { |
设计良好的 new-handler 函数必须做一下事情:
让更多内存可被使用。实现此策略的一个做法是:程序一开始就分配一大块内存,而后当 new-handler 第一次被调用,将它们释还给程序使用。
安装另一个 new-handler。如果当前 new-handler 无法取得更多可用内存,或许它知道另外哪个 new-handler 由此能力。
卸除 new-handler,也就是将 nullptr 传给 set_new_handler,这样 operator new 会在内存分配失败时抛出异常。
抛出 bad_alloc 或其派生的异常。这样的异常不会被 operator new 捕捉,而会被传播到内存索求处。
不返回,通常调用 abort 或 exit。
C++ 不支持 class 专属之 new-handler,如果您需要,可以自己实现,只需每个 class 提供自己的 set_new_handler 和 operator new。
nothrow/noexcept new 是一个颇为局限的工具,因为它只适用于内存分配;后续的构造函数调用还是可能抛出异常。
替换编译器提供的 operator new/delete 的最常见理由:
用来检测运用上的错误。
为了强化效能。
增加分配和归还速度。
降低缺省内存管理器带来的空间额外开销。
弥补缺省分配器种的非最佳齐位(suboptimal alignment)。
将相关对象成簇集中。
为了收集使用上的统计数据。
为了获得非传统的行为。
operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用 new-handler。它也应该有能力处理 0 bytes 申请。Class 专属版本则还应该处理“比正确大小更大的(错误)申请”。
operator delelte 应该在收到 null 指针时不做任何事。Class 专属版本处理“比正确大小更大的(错误)申请”。
当您写一个 placement operator new,请确定也写出了对应的 placement operator delete。否则,您的程序可能会发生隐微而时断时续的内存泄露。
当您声明 placement new 和 placement delete,请确定不要无意识(非故意)地遮掩了它们的正常版本。
严肃对待编译器发出的警告信息。努力在您的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。
不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一编译器上,您原本依赖的警告信息有可能消失。
C++ 标准程序库的主要机能由 STL、iostream、locales 组成。并包含 C99 标准程序库。
需要熟悉智能指针(例如 std::shared_ptr)、一般化函数指针(std::function)、hash-based 容器、正则表达式(regular expressions)等。
Boost 是一个社群,也是一个网站。致力于免费、开源、同僚复审的 C++ 程序库开发。Boost 在 C++ 标准化过程中扮演深具影响力的角色。
Boost 提供数十个类目实现,例如:字符串与文本处理、容器、函数对象和高级编程、泛型编程、模板元编程、数学和数值、正确性与测试、数据结构、语言间的支持、内存、杂项。
(完,最后更新:2020-07-26)
京东联盟购买链接:
推荐购买新版的 Effective Modern C++ 中国电力出版社 2018年04月01日 平装
Effective C++:改善程序与设计的55个具体做法(第3版 中文版)(博文视点出品) 出版时间:2011-01-01 用纸:轻型纸 含试读
Effective C++中文版:改善程序与设计的55个具体做法(第3版) 出版时间:2006-07-01
]]>实习生黑锅
是很遥远的事情
八哥算什么
早无人在意
前埔不夜城
处处烤鱼
酒杯中好一片男男风情
最肯忘却故人失
最不屑一顾是相思
养着老怕人笑
还怕人看轻
新又来看乱码呆
竟不见有心人去改
庸才占着茅坑前途不在
百度分享不支持 HTTPS 的解决方案:https://github.com/hrwhisper/baiduShare,最早是 2016-07-09 发布,说明百度分享不支持 HTTPS 已经两年以上。
百度可能听不进用户的话,用户宁愿自己解决问题……稣也亲自反馈过,应该是被无视了,至今还没官方支持!
分配一个零长数组的首选形式是这样的:
p = kcalloc(n, sizeof(...), ...);
原文是“The preferred form for allocating a zeroed array is the following:”,所以“零长”应该改为“填零”。
kcalloc 的文档也说:“kcalloc — allocate memory for an array. The memory is set to zero. ”
kcalloc 的定义 /include/linux/slab.h 更能说明:
1 | /** |
“零长数组”应该是指:char u[0];
疑智商太高,学习太快,中国的内核开发者都不屑看翻译的文档。
]]>db.stats() 的各种 Size 需要理理,先看例子:
1 | > db.action_traces.dataSize() |
db.action_traces.stats() 里的 size 就是 db.action_traces.dataSize(),也就是数据本身的逻辑大小。
由于数据库引擎有压缩概念,所以存储到介质时,可能占用的空间并没有逻辑大小那么多,比如 WiredTiger Storage Engine 的压缩率就挺不错的,dataSize = 12,489,840,963 字节的数据,存到硬盘只有 storageSize = 5,391,249,408 字节。
其中 totalIndexSize 是索引占存储器的大小,所以 totalSize = storageSize + totalIndexSize。
注意:索引有时会比数据本身还大……
db.collection.stats() — MongoDB Manual
db.collection.totalIndexSize() — MongoDB Manual
db.collection.dataSize() — MongoDB Manual
]]>今天被人问“怎么截菜单?”稣一脸懵逼,回答:“和截其它,有什么不同吗?”对方说:“一按截屏热键菜单就退出了!”
稣恍然大悟,原来 TA 没改默认热键,只要按下 Alt,菜单确实会退出……
默认的不一定最好。PS:TX 程序员不懂这个道理吗?为什么选择 Alt+A 这样奇葩的组合!
]]>2018-06-01,猎头和面试官都确认全部通过,只是遇到晋升季,HR 比较忙,会延迟谈 offer。稣同时还在面其它公司,所以觉得延迟点更好!
整个面试过程,亲身体会到阿理面试的专业性:有当面聊、写代码笔试、电话技术面两轮、HR 两轮。其中其它部门的技术官面试在专业上叫“交叉面试”,这是稣原公司没有的环节。另外,HR 有一票否决权,这要求 HR 的专业性要很高,否则很难服众。
2018-06-07,主面试官问能不能去杭州,稣其实早就想过这问题,他问的是能不能去 1 年,这远低于稣的预期,直接回答可以去 18 个月。稣 2010 年去过一次杭州,印象太好了,所以去几年,要是混得好,定居是没问题的。
期间,知道好多同事也面了,但他们大多选择待在厦门办事处,有些直接表示非厦门则拒。稣劝过,厦门只是个办事处,可能不长久,最好还是狠点,考虑长期利益去杭州。
2018-08-31,是在原公司最后一天。就在前一天,稣的选择还是不开竞业协议就去阿理银,开了就不去。原计划休息一个月,等 HR 把 offer 理清楚。然而由于稣太穷了,休息一个月?不可能滴,天不让!一辈子也别想休息……
整个 8 月份,现在的公司就每隔几天来催赶紧入职,直到最后一天,稣终于没有其它选项。09-04 入职,中间只休息了一天!
插播一句:现公司很豪爽,把稣的入职日算到 09-03,多发了一天工资!第一天就感动得一把鼻涕……
2018-09-10 早,杭州来电:
- 您好,我是你爸爸 HR,想和您沟通一下,阿理银的 offer。- 哦……(心理活动:我爸爸?哦,原来是阿理爸爸)稣这个月才刚换公司,过几年吧。谢谢啊,谢谢!- 这样啊,那不打扰您了,祝您工作顺利。
2018-10,稣了解到的厦门阿理银情况,越来越像自己预料的,混乱、军心难聚。加班太厉害,大家叫苦连天,大佬都在杭州、上海,沟通不便。
当然,稣只能看到槽点。因为如果有些人在厦门阿理银混得很好,他肯定不会找稣吐槽。不过,光看这些问题,稣完全有优势,这些都是稣善于解决的问题。
稣是说如果……厦门阿理银以后如果撤了,很可能就是因为——错过了稣。反过来,如果壮大了,那是某些人的不幸,稣是看好阿理文化的。
这次没有吓醒。
]]>如果全世界每人给我一毛钱,那我不是有六个亿了?
这个套路是收割大量粉丝,很遗憾普通人做不到。
思考一个问题:市盈率为 1000 是什么意思?另一个比较平民的问题:厦门房屋租售比高达 1∶756 是什么意思?
答案:
靠分红至少 1000 年才能收回本金。靠收租 63 年(即 756 个月)才能收回购房本钱。
公司上市后,核心员工拿到的红利,本质上是未来的钱,其它自己拿钱去买股票的人,都是潜在收割对象。其中有一种,比较特别的人是:后期加入没有分到股票、期权的员工,他们因为对公司有感情,得到消息也比外界散民多,所以自行买入,甚至参与员工持股。
请自行搜索:一个惊人的数据——员工持股七成被套!
有人在房价上升期买了房子,两年后就卖了,赚到可观的差价。有的倒霉蛋,买完,房价就不涨了,靠收 63 年租是很悲剧的,毕竟房子寿命一般 50 年,属于您的时间最长也就 70 年。
请自行搜索:1900名高管辞职创近5年纪录
]]>所有人都在谈论中产阶级和平民,却没有注意到高层,也就是那些上市公司的控股股东,他们才是真的惨。因为普通人炒股很少带杠杆,而股东们,基本上全都带有杠杆。
您没看错,以下要介绍的几个概念,都是金融词汇。稣的柚子系列文章,又名《程序员转行做金融》,并兼职卖柚子……
存款准备金率
Deposit-reserve Ratio。存款准备金是指金融机构为保证客户提取存款和资金清算需要而准备的,是缴存在中央银行的存款,中央银行要求的存款准备金占其存款总额的比例就是存款准备金率。
经常能听到的“降准不降息,等于装牛逼”里面的“降准”全称就是“降低法定存款准备金率”。
举个外星的例子:如果存款准备金率为 1‰,就意味着金融机构每吸收 1000 元存款,要向央行缴存 1 元的存款准备金,用于发放贷款的资金为 999 元。
挤兑
Run on Banks。在银行券流通的条件下,银行券持有者争相到发行银行券的银行要求兑现贵金属货币的现象。当一家银行的信用发生动摇,准备金不足,银行券兑现发生困难,就会发生挤兑。挤兑可能使一家银行倒闭,甚至波及整个银行业。现在一般是指存款户集中地大量地到银行提取现钞。
涨跌停板制度
这个不解释了……就问一句:连续 5 天跌停和一天暴跌 41%,您喜欢那种?如果您喜欢没有板的,再多问一句:一天暴跌 99.9% 您觉得怎么样?
峰谷电价
又称“分时电价”,也很好理解。再举个类似的例子:下班高峰期打的,不加价基本打不到,因为别人加价优先接单。
EOS 账户可用资源与其抵押给资源的柚子数量的关系是:可用资源 = 总可用资源 * 本用户抵押数量 / 全体用户抵押数量。从这个关系上看,存在两个风险:
第一个问题,用成本来解决,要通过加仓把别人的比例减少,按目前 3-4 亿的抵押量来说,需要付出的代价极高。
第二个问题,则通过引入一个放大因子来解决。之所以能放大是因为,某个时间点不拉屎的确实占大多数。只要把您拉屎的时间,除以一天的时间,就可以算出您一天拉屎的占用率。相信是很小的,笑……虽然您有柚子,就有拉屎的权利,但您自己不拉,让给需要拉的也是合理的,毕竟资源利用起来才是好事。
以 CPU 为例,计算公式为:
可用 CPU 微秒数 = max_block_cpu_usage * (account_cpu_usage_average_window_ms / block_interval_ms) * staked_cpu_count / total_staked_cpu_count其中 max_block_cpu_usage 是可配置的,当前主网配置为默认值 default_max_block_cpu_usage = 200000所以 max_block_cpu_usage * (account_cpu_usage_average_window_ms / block_interval_ms) = 34560000000
以主网 2018-10-19 为例,CPU 总质押量为 280053493.80756617 EOS,所以每个 EOS 可用 123.40 us。注意:这个数值是没有放大过的。
EOS 定义了两种资源使用状态:拥堵、空闲,由过去一分钟每个块的平均使用量来界定。还是用 CPU 说事:大于 max_block_cpu_usage * target_block_cpu_usage_pct 则进入拥堵。
两个状态下的可用量本来应该有 1000 倍的差距,但因为有涨跌停板保护,并不会直上直下。每一分钟,只能跌到 99/100,只能涨到 1000/999。所以从拥堵开始到绝对拥堵,有 log(0.001) / log(0.99) = 687 分钟之长;从绝对拥堵完全恢复更慢,是 log(1000) / log(1000/999) = 6904 分钟。目前的 target_block_cpu_usage_pct 已经从 10% 调整到 20%,它提高了总使用量临界值,使拥堵状态更难触碰。
可用量的变化过程是可能随时改变方向的,类似多头和空头拉锯。比如拥堵时,可用量变少,能够使用资源的用户也随之减少,使用量降到阈值以下,可用量又会开始慢慢上升。
max_block_cpu_usage 和 target_block_cpu_usage_pct 都是可以配置的,为什么不一次性配高点呢?主要考虑的因素是,目前各个 BP 的机器性能参差不齐,如果冒然的把这两个值调高,可能会导致节点 replay 变慢,同时对于配置低的机器来说,同步区块也会很吃力。别忘了,我们的准备金率才 1‰,属于严重超发,提高可用率,虽然会使拥堵来得晚点,但真到拥堵的那刻,爆发的能量可是更大的哦!
总之,还是稳一点好,慢慢涨经验。目前来看昨天的调整,对节点之间的同步、CPU 使用率没有太大影响。
农民进城写代码,发现农村一斤十几的黄翅,城里卖三四十,实在吃不起……
闽清山里有种高脚鸡,几乎没有肥肉,连皮也没有油脂,但是抓回厦门的农村养,全都养肥了!更何况那些肥羊!大量脂肪都是输送到农村富集起来,吃不完的肥肉拿去喂鸡,鸡都肥了,人再吃肥鸡,循环肥胖。
去城里超市买羊肉,只能吃得起一斤三十的肥羊肉,而在山里,几乎没有肥肉的羊肉一斤才六十,这要在城里估计得上百了,突然分不清哪里的消费高。在城里因为穷,吃不起好的品种,回到山里才能吃得起。
最后不得不得出一个结论:穷人才容易吃胖!这是在浪费生命啊!
生死无待:叠加态
诡道:诡异的轨道
莫测:海森堡测不准原理
霹雳角色“昊天”的诗号:
]]>一睨仙魔惊叹,一笑天地独尊。六界布武,在予一人,始主藐神话。
这个误解好大!其实是稣惊讶地发现小小的一个耳机就可以替代所有歌星,歌星唱功再屌,它也可以播放,稣大胆预测将来 AI 可以代替任何人唱歌,所以稣追的星,其实是——耳机。
后来为了保护听力,改为扬声器了。
]]>跑步机可以控制时速,比如用 6KM/h 是比较适合稣的,而野跑则是变速运动,一不小心容易伤到膝盖。
可以在跑步机旁边放个空气净化器,而野跑容易吸尾气。
健身房有冷气,跑 40 分钟才有的流汗效果,在家不开空调只要 24 分钟,省时省钱。
健身房偶尔会有美女来约炮。——这问题很大,因为约炮也轮不到稣,会受刺激,伤心。
作者:那男性CEO开
]]>《被房子掏空的中国人开始消费降级了》
观测 21 天后不买大法。
湖与峰:双关语,和某学弟名字同音。
搞基军团去金门玩,建议他们——莫干。
改编自霹雳角色“墨倾池”的诗号。
]]>话九宸,挥袖风云尽,江山何沉,
随逸兴,负手乾坤定,苍黄为轻。
先给随机查找做个优化!上篇中的激活函数统一使用 ReLU,其实这是不好的,输出层可以改为 Sigmoid 或 Tanh:
1 | inline double ActivationFunction_ReLU(double x) { |
原因很简单,我们已经知道 Xor 的结果不是 0 就是 1,用 ReLU 是可能大于 1 的,而 Sigmoid 和 Tanh 不会大于 1。
理论学习:《如何直观地解释 back propagation 算法?》
原理:求导
训练时,x 和 y 都是固定的,要求的是 a 和 b,所以问题是:当 y 偏离了 delta_y,求 a 和 b 应该修正多少?
分别对 a 和 b 求偏导,则:
1 | dy/da = x |
所以
1 | delta_a = delta_y / x |
代码不会骗人,来一个简化的例子:
1 | // BackPropagation.cpp |
代码不会骗人,简单的实现如下:
1 | // TrainXor_RandomSearch.cpp |
效果主要看人品,可能跑个不停,也可能几乎立刻完成。一次运行结果:
1 | Randomize |
另一次:
1 | Randomize |
平淡是真,平静是福。
]]>运行引擎需要DX11特征等级10.0
英文版提示:
DX11 feature level 10.0 is required to run the engine.
稣立刻调用 dxdiag 查看,结果 Feature Level 10.0 是支持的!
然后决定自己写个 DX11 程序测试一下,于是找到这里例子:Tutorial 3: Initializing DirectX 11,稍加修改后运行,得到一个错误提示:
MessageBox(hwnd, L"Could not initialize Direct3D.“, L"Error”, MB_OK);
接下来,仔细检查这个初始化过程,发现居然是因为 wcstombs_s 失败引起的:
1 | // Convert the name of the video card to a character array and store it. |
原来是因为 RemoteFX 显卡的名字里有汉字……
RemoteFX 3D 视频适配器
设备名称:
Microsoft RemoteFX 图形设备 - WDDM
通过注册表改显卡名字,测试代码的问题解决!但 wcstombs_s 这块代码其实并无与显卡功能相关,去掉这段代码也可以解决问题。
]]>大学时期(2002-2006 年)经常在学校机房使用远程桌面(RDP)连自己宿舍的电脑,当时的校园网是 100Mpbs 的,但每次一开视频,还是卡成翔……
后来慢慢发现,远程桌面看视频已经不是事儿了,甚至可以玩游戏!
近几年,云游戏的概念越来越流行,曾经用远程桌面连到开启 RemoteFX 的虚拟机上玩过街霸,发现体验很好。于是有了一个疑问:稣有一台 PC,配了块 GeForce GTX 980 Ti 显卡,能不能开启 RemoteFX,然后在烂机器远程桌面上去愉快地玩耍?
截止目前还不能在物理机上开启远程桌面的 RemoteFX 功能。其中原因是微软的商业策略,并不是技术问题。
有一个未知的函数 f(x1, x2),其中 x1、x2 取值和结果符合下表:
x1 | x2 | f(x1, x2) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
求 f(x1, x2) 的表达式。
知道异或运算的人可以马上抢答:f(x1, x2) = x1 ^ x2,其中 ^ 是 C 语言里表示 XOR 的运算符。
很明显,这答案是准确无误的,人脑的速度还可以……
人工神经网络(Artificial Neural Network,简称 ANN)解决问题的思路相对而言不太精确,大概就是——通过几个函数算出一个近似值,接近 0 就说是 0,接近 1 就说是 1。
首先,引入一个激活函数:
1 | sigmoid(x) = 1.0 / (1 + exp(-x)) |
举个例子:sigmoid(1.777) = 1.0 / (1 + exp(-1.777)) ≈ 0.855326
类似的激活函数还有 tanh,但其实用 ReLU 更好,既简单又接近生物上的神经元。参考:在神经网络中,激活函数sigmoid和tanh除了阈值取值外有什么不同吗?、请问人工神经网络中的activation function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function?。但是 sigmoid 比较古老,很多教材拿它举例,稣也沿用它。
我们要求的函数是这样的:
1 | f(x1, x2) = sigmoid(w1 * g(x1, x2) + w2 * h(x1, x2) + w3) |
其中:
1 | g(x1, x2) = sigmoid(wg1 * x1 + wg2 * x2 + wg3) |
最终要求的是这三对系数:
1 | wg1 wg2 wg3 |
通俗说法叫求 w,其中序号为 3 的系数,又叫 bias 或者 b。
函数 f、g、h 其实就是一个神经元(neuron),结构如下:
训练出来的一个解是:
1 | -5.734 -6.029 1.777 |
下面我们来验证一下,举例 x1 = x2 = 0 比较容易算:
1 | g(0, 0) = sigmoid(1.777) ≈ 0.855326 |
ANN 就是数学的运用,训练就是在随机的 w 组合通过参考已知解逐渐纠正误差,逼出正解 w 组合。
打个比方,练习投篮的过程:肉眼观测,无数次调高低角度、出手力度、左右偏差,最终找到一套合适的参数,这个叫培养了球感……
机器学习也差不多是这样的过程,只是它比人快很多。
]]>代码:https://github.com/mongodb/mongo/blob/r3.6.5/src/mongo/db/repl/topology_coordinator.cpp
一篇比较新的参考文章:https://blog.csdn.net/wentyoon/article/details/78986174
如果新选举出的主节点立马挂掉,至少需要 30s 重新选主,这个是由 leaseTime 常量决定的:
const Seconds TopologyCoordinator::VoteLease::leaseTime = Seconds(30);
PV0 时,一个反对会将最终票数减 10000,即在绝大多数情况下,只要有节点反对,请求的节点就不能成为主节点,由 prepareElectResponse 函数实现,里面有不少 vote = -10000;,PV1 版本取消了否决票。
]]>假设有如下一组输入并输出一个实数的数据,则线性回归(Y = bX + c)的留一法交叉验证均方差为?
X | Y |
---|---|
0 | 2 |
2 | 2 |
3 | 1 |
A. 10/27
B. 20/27
C. 50/27
D. 49/27
也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法。
在模式识别(Pattern Recognition)和机器学习(Machine Learning)的相关研究中,经常会将整个数据集合分成两个部分,分别是训练集合和测试集合。在一个 n 个元素的集合,选择 r 个元素做训练集(非空集,r > 0),剩下的 n - r 个做测试集,这可以用“组合”计算有多少种可能。把每种组合都做过一遍就是交叉验证。
nCr 表示由 n 个不同元素中,每次取出 r 个不重复之元素的组合,用符号 C n(下标)r(上标)表示。
只留一个元素做测试集,即:r = n - 1。
标准差(Standard Deviation),别名:标准偏差、实验标准差、均方差,是离均差平方的算术平均数的平方根,用 σ 表示。标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。
三个元素的集合留一,一共有 3C1 = 3 种组合,画 3 个点:
所以方差为:(1^2 + (2/3)^2 + 2^2) / 3 = (9 + 4 + 4 * 9) / 27 = 49/27
题目说的是“均方差”,根据百度百科标准差词条的说法,“均方差”==标准差,要开平方……所以题目中的答案没有一个是对的。出题者想让我们选 D,稣偏要选 F,你懂的 ck……
]]>“别装逼,稣戴套了……”
话虽如此,稣还是既吃惊又不解,刚才没有高空坠落啊!这到底是肿么肥事?稣瞄了一眼自己的 iPhone 7,红色的套依然崭新地散发金属般的光泽,显示的时间是凌晨 4 点多,但日期是 2019 年……这个女人,稣好像不认识,为什么会睡在特稣垃里?必须好好追忆一番!
稣买了一辆特稣垃摸抖歪,改造成一个可以写代码和睡觉的移动小房,每周都有一两天,吃完晚饭,上健身房锻炼,洗澡,然后把车停到 JFC 充电车位,开空调,写代码,睡觉。这一系列动作灰常自然,不太可能出八哥,但是这个女人……实在是个异常。稣从来不去酒吧,健身房也没认识这号人物。难道这是特稣垃的车灵?
以其乱猜,不如直接问她,“你是人是车?怎么会在这里?”
“车?你怎么不问是不是鬼?我是你过去妻啊!”
“小凰?你怎么变成这样的……样子都和上次不一样!”
“你忘记了?我们刚刚从 2024 年穿越回来的,这是我 2024 年的样子。”
“呃,这么一说,仔细看你,还有点像小老婆!”
“哈,是的,她因为不好好学习,已经被我取代,都消失好几年了。”
“握叉!?这事情稣会同意?”
“别装逼,你就喜欢知书达理的美女,这不就是我?”
“稣是这种人吗?咳,嗯!稣就是这种人……但为什么我们要穿越到过去?”
“因为在 2024 年,电动房车很流行,很多程序员下班,就找充电桩车位过夜,关系好的一些基友,还会相约停在一起,好交流。然后大量上班族都不买房,不生孩子了,房价大跌。你穿越的目的就是要告诉现在的自己,记得把房子卖了,而且不要买特斯拉,上班族专用的国产电动房车很快就要流行了。”
“这个理由不错,但穿越本身是什么鬼?太不科学了!”
“没错,我就是鬼!我带你来的。”
吓醒。
]]>从小喜欢天文和数学,但高中时,有两个事件,促使后来读了挨踢专业。
高一,有电脑课,但觉得电脑没人脑聪明,没什么兴趣。后来意外看到 Bill Gates 的事迹,明白了挨踢行业是很赚钱的,而且这个行业不怎么需要讲人情世故,也是自己可能擅长的领域。
三角形内角和可以大于或小于 180 度。
当时只学到一些皮毛概念,仅知道“黎曼几何学是大于,罗巴切夫斯基几何学是小于”,但已经大受打击……
大部分时间都用于实践编程技术,原来比较擅长的数学和英语都被牺牲,不怎么认真去学。
但有追究过非欧几何学到底怎么来的:公理体系中采用了不同的平行定理。
在平面内,从直线外一点,至少可以做两条直线和这条直线平行;
在平面内,从直线外一点,有且只有一条直线和这条直线平行;
在平面内,从直线外一点,不能做直线和已知直线平行。
当时没有去深入理解,看了一个例子说球体表面的两条直线都会相交,结果就对非欧几何过敏了……脑子里不断产生抵抗,球面不是平的,球面的直线特么是弯的,这让直男怎么接受?
然后就把非欧几何学当成是外星的哲学了,觉得不是个有用的理论,完全忽视了自以为能理解的广义相对论是和黎曼几何学有关的!
最近补了点数学基础,顺便想把这个问题解决掉。纠正过程如下:
不对,我们讨论的是二维的面,你怎么扯到三维的球体,还内部?
赤道线是,但其他的纬度线不是,其它纬度线上的两点之间最短的线,并不在纬度线上,纬度线绕的更远,最短的还是这两点加上球心切面上两点之间那段圆弧(劣弧)。
是的,“两点之间,直线段最短”球面上的直线,在三维世界看确实是弯的,但在二维世界,它是直的……是直的……是直的。在四维空间看我们的世界,也许也是弯的,但反正我们在三维空间看,是直的!虽然我们能找到其实是弯的证据。
这其实不难理解,但长期自我抑制,不去解决它,再好的理解能力也没用武之地。
有些故事,要先相信,才有续集。
你是直的,还是弯的?
]]>最近提示过期的对话框频繁弹出,终于惹恼稣,凭技术把它干掉。
]]>2015-03-16 为了导出自己的说说,写了个半自动的程序,手动分析几个参数填到代码理,很快就刷刷地下载了 7 年的说说。第二天,就在知乎回答了两贴。
2015-09-07 发现导出程序失效了,参数有点变化,但很快又跟进。
2015-11-27 又失效了,除了 json 字段有变化,还增加了对 Cookie 的验证,于是又加上了 Cookie 的模拟。
2015-12-11 又又失效了,这次增加了对 UserAgent 的验证……继续跟进。
由于知乎的热度,越来越多的人找 UMU 导出,但这个程序是半自动的,会占用宝贵的时间,所以要收点人工费。需要的可以联系微信 UMUTech,QQ:154401181(验证消息:qzone,QQ 比较少用,尽量先加微信)。
答:不必须。如果您的说说都是公开的,则完全没有必要交出密码。如果您发过只有自己或者少数好友可见的说说,则需要用您的账号密码登陆才能抓全。
答:只要您自己能访问就可以,但要您协助登录。比如让您刷一个二维码,(二维码在本人的机器上产生,截图给您,所以您刷完是在本人机器上登录)。极少数时候因为登录保护,刷二维码可能失败,实在不行,要提供您的账号和密码。您可以事先改一个临时密码,事后再改掉。
答:主体是一个 json 文件,里面有您全部说说,包括说说本身、别人的回复、图片链接(没有图片本身)。另外生成一份 txt 文件,只有发帖时间和说说本身,其它都没有。
如果有时间会改进,比如说搞成图文并茂的格式,也导出博客。
]]>打开柜子,收拾了一些衣物,发现这个加拿大人还是蛮有品味的。然后记起,他有一台红色外星人笔记本,翻了一下床,果然在被子里面,很高端。开始犹豫要不要带上,这又不是稣的,留着,如果他回来,起码还有东西,不至于都被稣洗劫了……但是仔细想想,又有点可笑,身体都被占了,他还活着吗?还能回来吗?都不知道呢!
最终,稣还是没带,因为——太重了!这时候他的舍友来了,但是稣并不记得他的名字,所以有点尴尬,他见到稣,开玩笑地说:“假期还窝在宿舍?不出去找女朋友玩?”嗯?他女朋友是个挪威美女,年轻貌美!哈!这个可以带……问题是稣不知道她在哪里,算了,还是赶快溜回德国。
出宿舍楼大门的时候,保安看到稣带着一些行李,就说要刷脸备案。好吧,刷!反正这脸不是稣的……果然逼逼几声就通过了,保安说:“谢谢配合,Aerial 先生!”咦?怎么像个字体名,Arial?
街上没啥人,出来之后才知道是因为地球已经被外星人入侵!有两种外星人来到地球,其中一种像章鱼,会发射神奇脑电波控制地球人,变成他们的奴隶。另一种像螳螂,自带刀剑,会到处砍人。
这里还插播一个新闻:据说,有个专门对付外星人的公司,打算通过提供保护赚钱,结果被团灭……老板打算带着老婆逃亡,却被员工砍死。专家分析是因为员工被外星章鱼控制。
稣十分后悔,刚刚吓醒,又被吓尿……赶快就近躲进一座医院。稣走进手术室,看到医生们都在做手术,但越看越不对劲,几个人被切成一块块的,这是什么医术?好叼,还能救活?最后那些人被推出来,稣才明白,那些医生是在解剖尸体,研究外星人如何控制人类……这个地方其实也不是医院,是非地球人研究中心!
研究员们看到稣,很惊讶地问:“你是怎么活着到这里的?”稣回答:“稣是从某大学出来的,那边还有很多人,很容易就走到这里。”研究员哈哈狞笑:“你说的那个大学,在你出来之后就团灭了。现在整个地球可能只有各个非地球人研究中心还有活人。如果你不介意,我们要研究一下你是如何能躲开外星人的。”
研究?稣想起电影理的情节,被研究的意思应该就是被当畜牲宰割吧!果断拒绝!但如果直接拒绝,可能他们会来硬的,所以稣先忽悠他们:“可以啊,但是稣饿了,你们这里有吃的吧?”
咳!?陪他们吃了一顿白灼章鱼……然后稣开始有种不祥的预感,这是真的地球章鱼吗?胆战心惊问出口,果然得到吃精的回答:“这些都是外星人,战争多年,早就没东西吃了,只能捡打死的外星人吃……”呃,稣只想说:“还真特么好吃啊!!而且一只可以吃很久,实在是太实惠了!”
吃完,稣就来了一个灵感,能不能生吃外星章鱼,这样可以获得他们的能力。研究员们听稣这样讲,惊喜万分,觉得很可行。于是从冰柜里取出一只速冻的小章鱼。这是被打死的外星章鱼肚子里怀的,还有生命力的时候被速冻保存。研究员不忘科普:“外星章鱼是胎生的,这就是和地球章鱼的区别!”
解冻完,大家毫不客气地讨论怎么分食,小章鱼一脸无辜。最后,院长亲自示范一口闷,果然吃完之后,院长就有了控制别人的能力。稣建议,出去控制那些螳螂把自己砍死,然后再吃个螳螂,这样院长就自带刀剑了。院长喜出望外,立马就去砍死几只螳螂,带回来给大家吃,哦不,是研究。
稣看到了希望,就表示了自己回德国的心愿。院长当即表示,会护送稣回去。临走前,稣问最后一个问题:“院长,为何相信稣的方案?生吃可能有细菌、病毒,太冒险了!”
“我是广东人。”
再次吓醒。
]]>对于 uint64_t 的常量,以前只写 Windows 平台的代码,所以习惯加上 Ui64 的后缀,前几天发现 g++ 不支持,于是改为 ULL,然后又测试了 ull,也是可以的,开始纠结以后是用大写还是小写……
输入时,是小写比大写方便,但小写的字母 l,容易被认成数字 1,比如 1234567890ll,看起来没 1234567890LL 容易辨认。虽然可以通过字体来提高辨识度,但不是每个人都用这样的字体。
看了 golang,并不支持数字加后缀,好样的!
同样的纠结,还有十六进制的 0x 和 0X,abcdef 和 ABCDEF……
golang 一样有这个纠结,看来要彻底的单一化还是不容易的。
ATL 的 HexEncode 函数,输出的十六进制是大写的,UMU 也一直喜欢大写格式,但 std::hex 默认是小写,要用 std::setiosflags (std::ios::uppercase) 改大写。所以,如果自己实现一个 HexEncode 函数,默认还是应该返回小写格式的,这个道理很简单,您看一下键盘,上面标注的都是大写字母,但按下去,默认是小写。要大写?请按住 SHIFT。
写代码时,数字后缀用大写,毕竟也很少需要加后缀;输出时,数字并不需要带后缀。
而十六进制可以更宽松点:写代码时,用小写,节省按 SHIFT 键;输出时,看情况。
]]>1 |
|
Windows, VS 2017 的结果:
hash(“Meet the new boss…”) = 5935324269489717502
hash(“Meet the new boss…;”) = 5935347359233909933
hash(“Meet the new boss…/”) = 5935325369001345713
hash(“Meet the new boss…,”) = 5935322070466461080
Ubuntu 16.04, g++ 5.4.0 20160609 的结果:
hash(“Meet the new boss…”) = 10656026664466977650
hash(“Meet the new boss…;”) = 12509209616339026574
hash(“Meet the new boss…/”) = 6552276210272946664
hash(“Meet the new boss…,”) = 15639609178671340058
还好我们不会在生产环境,使用 Windows 部署 MongoDB……
1 | std::size_t ShardId::Hasher::operator()(const ShardId& shardId) const { |
详见:https://github.com/mongodb/mongo/blob/master/src/mongo/s/shard_id.cpp
这个 std::hash 在 x86 和 x64 下都不一样,所以,让我们看看 MongoDB 如何解决这个问题:
MongoDB 3.4 no longer supports 32-bit x86 platforms.
好样的!
]]>答:因为找不到工作。
答:稣一向都很严肃,是真的找不到工作……
答:因为稣知道的太多,一学会就忘。正常的招聘要的是经验,稣没有经验,只有智商。另外,厦门的公司能选择的不多。
答:写了。领导不让发表,只能发点皮毛。智商这个东西也不好描述清楚。
答:一直在创,但感觉不够高大上,冒然出手可能被绑定在一个不够高大上的业务上。
答:是……真的……吧!但是 KJ 70-80% 的人比稣更有钱。赫赫……
答:你高兴就好。稣只是穷得没那么焦虑。
答:活着很容易,活得好很不容易。
答:好
个鬼。
答:挨踢无情,你承受不起,奉劝各位亲朋好友——千万不要学 C++。
]]>改编自霹雳角色“北窗伏龙曲怀觞”的诗号。
天涯无岁月,
歧路有风尘。
百年浑似醉,
是非一片云。
唐朝骆宾王的《春日离长安客中言怀》:
年华开早律,霁色荡芳晨。城阙千门晓,山河四望春。
御沟通太液,戚里对平津。宝瑟调中妇,金罍引上宾。
剧谈推曼倩,惊坐揖陈遵。意气一言合,风期万里亲。
自惟安直道,守拙忌因人。谈器非先木,图荣异后薪。
揶揄惭路鬼,憔悴切波臣。玄草终疲汉,乌裘几滞秦。
**生涯无岁月,岐路有风尘。**还嗟太行道,处处白头新。
南吕词人张可久的《金字经·乐闲》:
百年浑似醉,
满怀都是春。
高卧东山一片云。
嗔,是非拂面尘,
消磨尽,古今无限人。
工作十几年了,其中在第二个公司差几天就十年整。
]]>阿基很谦虚的说:“哪里哪里,我们技术部各个都是淫才,我的技术只能排老三。”
小冰很好奇地问:“不是传说你最好?还有人更厉害?”
阿基指了角落里的米德,说道:“那位技术就比我好,他都建议自建 RAID10 NAT,又安全又保密,磁盘挂了自己就能修复,所以很少人找他,名气也就不高。”
“你再看那边,那位瘦瘦的米开,他都建议使用云存储,所以他们的磁盘不会坏,他的高超之处在于预防故障在前,而且节省成本,但个人用户都不懂云存储的好处,所以他的名气也不大。”
“而我,只会拯救已坏的磁盘,救别人于危难之中,所以名气最大,但实则没有技术含量。”
小冰听完觉得十分有道理,于是选技术部最帅的罗基朗……帮忙买一块新的硬盘。
]]>性能测试程序如下:
1 | package benchmark_test |
吓醒系列《白云凰》配诗。
这个世界本来是有鬼和没鬼的叠加态,直到稣诞生,用宇督观观测世界,才确定——是没鬼的!
然而,稣一睡觉……咳!世界又变了!
2018-03-28,稣独自在一条古街游玩,据说这里保持民国时期的民俗风情。稣本身是一个不爱旅游的人,不知为何,居然来了……纳闷一下,就听到后面有人催促,天要黑了,要参观的赶快参观,不参观的可以回去了。稣想,既来之则安之,随处走走吧。
走进街头的石门,前段是一些商铺,但没人在营业,看来这条街已经过时废弃,只是作为景点供人参观而已。
但是再走一段,商铺没了,居然出现当地居民,看服饰,不像现代人。有一对老夫妻在门口好奇地看着稣,好像在念叨:“这么晚,怎么还有游客敢来?”稣很有礼貌地朝他们点点头,说:“老人家好!我们旅游团今天来这边参观,打扰了!”老人家有点不耐烦地说:“就你一个,还什么旅游团!”稣回头一看,嗯?真的就稣一个人,刚才团长让我们自己决定要不要玩,这么坑?就稣一个人进来!
天色已晚,气氛有点不对劲,稣想:“要不回去吧?”这时听到几个小孩在前面玩闹的声音。稣又好奇地往前走,但始终没有看到什么小孩,只看到一间房屋,似乎着过火,后来做了一些基本的修复。
稣进入屋子,环顾一下,发现确实曾经失火,有不少痕迹,屋内墙壁还蘸着大片炭灰。
这时候一个白衣女从屋顶飘下来,长得很漂亮,稣还以为是仙女下凡……她开口说自己是鬼魂,呃!这么漂亮的女鬼?别吓稣,等下吓醒就不好了!
“我叫白云凰,19 岁时,这里发生地震,我在屋里被压倒,屋子着火,烧死了。”
“哦,那你真身一定很难看……吓尿!”
“是的,全身都烧黑了!但我是你前世的娘子,你不会嫌弃我吧?”
“啊!那你保持现在这个样子,下来我看看!”
她慢慢飘下来。稣近身观测过,觉得真不错,看来稣前世蛮有眼光嘛!
“我死得不甘心,至今未投胎,一直在这里等你!”
稣一时感动就上前抱她。她立刻推开,说:“我的阴气很重,怕有损相公身体,请相公为我找个美女,我要附身!”
“附身?那不是会把身体的原主人杀死?这样不好吧!”
“不一定,看谁的意志更强,不过我的求生意识很强,一般活人恐怕赢不了我。你可以找一个弱智或者品行恶劣的人,你觉得死不足惜的,我只有一个要求,就是得漂亮,至少和我生前差不多。”
“我考虑一下……如果找到了,后面怎么操作?”
“我的骨骸就葬在这屋子下面,你把我挖出来,我的双脚戴着父母给我的镇邪足环,它们把我绑定在屋子里,无法离开,你把它们摘下。然后我左手的戒指,你摘下来戴自己手上,这样我就可以跟着你了。只要你睡着,我们就能见面。”
稣挖出来一看,真的全是黑色,正常的骨头应该是白色的……但这样的黑色骨骸,反而不让人害怕,稣盯着她的头看了很久,还真是不错的脸型,烧成这样也能看出是个美人。
吓醒。
第二天,稣就研究了一些出现附身的鬼片,比如《万能钥匙》。领悟到一个道理,附身并没有杀人,人还是那么多。有些人脑死了,还捐器官造福别人。如果说有人身体死了,脑子还活着,移植到这个脑死的身体,那不是救人吗?所以其实这没有什么不道德的。
有些人经过某些事情之后,会突然变了个人,外人根本无法知道他还是不是原来的他。记忆是存在并跟随身体的,就算灵魂换一个新的,由于有原来的记忆,别人是无法查知的。
有着丰富鲸神魂裂经验的稣,马上意识到,附身其实是能让更多人存活于世的,不仅是救人一命,还有可能优化世界!举个例子,某人智力低下,考试经常挂,找个聪明的鬼魂附身,可以让他变聪明,提高成绩。即使是聪明人,也可能受限于特定思维方式,不够全面,找个互补的来附身,可以提高技能。
但是,到了晚上,白云凰并没有来找稣,看来只是偶然的一个怪梦。
第三天,白云凰出现了,她说前一晚,稣太操劳,睡的时候脑子还在写代码,所以她没有来打扰。但稣白天看到一个美女,已经被她锁定……
“谁?稣怎么没有印象!”稣想,于是问她:“那你附身了吗?”
“马上,你醒来的时候,我就已经转世到现代了,有缘你会认识我的。”
“叫什么名字?在哪里?”
“呵,在美柚,其它的我不能告诉你!”
再次吓醒。
弱者突然觉悟,是不是被附身的?这个故事告诉我们:好好学习,成绩不好,可能被暗杀,没人知道你是被附身,赫赫!
]]>直接用 os.Exit (exit_code),但这个太暴力了,我们需要高雅一点的,于是找到了这个:https://stackoverflow.com/questions/24601516/correct-way-to-set-exit-code-of-process
1 | package main |
调用 panic 的时候就知道以上的方法存在不足!panic 之后会导致 main 退出,本来紧接着应该打印 Trace Log,然而 main 退出时调用了 os.Exit (),然后没有然后了……
本来 panic 时,退出码应该是 2 的,结果由于以上装 X 代码的作用,退出码变成了 0!如果 panic 是自己主动调用的,那还可以改改,使用别的方式;如果是其它库函数的就难办了……
]]>1 | static void (CharFormat::*Getk_[])(IPropertyStore*) = |
其中 Getk_MaskEffect 是个模版函数,实现如下:
1 | template <DWORD t_dwMask, DWORD t_dwEffects, REFPROPERTYKEY key> |
然后,在 VS2017 编译失败了……
1>X:\WTL91_5321_Final\Include\atlribbon.h(422): error C2440: ‘initializing’: cannot convert from ‘overloaded-function’ to ‘void (__thiscall WTL::RibbonUI::CharFormat::* )(IPropertyStore *)’
1>X:\WTL91_5321_Final\Include\atlribbon.h(422): note: None of the functions with this name in scope match the target type
然后根据错误提示搜到:Cannot take address of template function,https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39018,翻译一下:模版函数的地址转化,分两步走,第一步先转具化,第二步转目标类型,这样可以;直接转过去不可以!
1 | static void (CharFormat::*Getk_[])(IPropertyStore*) = |
原来的模版函数,已经替换成普通函数了……
1 | void Getk_MaskEffectBold(IPropertyStore* pStore) |
需要从 stdin 读取一行汉字!搜了几篇出来,居然都不支持输入中文……
1 | func ScanLine() (line string) { |
稣一直以为自己是一个共享记忆型的鲸神魂裂,但最近发生了几件事,让稣有点担心并不是这么回事……
最早的一次怀疑是无意间发现自己的微信签名档被设置为一句莫名其妙的话。要知道,微信签名档几乎没人看,所以也很少改,没有理由改了,自己完全没印象。而且微信的安全性应该蛮高的,不大可能是被人黑了。即使真被黑,也不会就改个签名档吧,钱包里有几千块不顺便转走?
后来是几次同事总说稣讲过什么话,然而一点都不像稣的风格!最近一次是好基友在公司尾牙拿了大奖,回头请客。那晚,是厦门久违的冬天,稣离聚餐的四代目就两公里多,于是选择直接暴走过去。走到海边后,风很大,有点后悔,冷得抖抖手啊,抖抖脚,请做深呼吸……擦,根本停不下来!
走几步无聊就打电话问一下其他人都到哪里了,他们五人都在同一辆车上,哈拉几句,就有点冷得心不在焉,然后他突然说了一句:你要带妹纸的话,要自己付钱。嗯哼??稣什么时候说要带妹纸!而且稣是暴走过去的,要带妹纸的话,怎么可能用走的?
到店后,稣当场就反驳了,可是他们五人异口同声说稣确实说过要带一个美女过来……想起最近好几个反常的事例,稣有点怀疑,自己是不是鲸神魂裂恶化!
2018-02-14,一大早起来就觉得不对劲,朋友圈里有八个前女友在晒婚礼、结婚证,八个前女友!场面何其壮观!最可怕的是这八个前女友都特么哪里来的……稣不记得有这么多啊!
接下来是午睡后,从企业群里得知 13:30 后就下班,正想继续睡,突然一个电话过来,很紧张地说:“稣,你赶快看看私 Q,有人在大池塘里说怀了你的孩子,我给你转到私 Q 了。”
卧槽,稣想起多年以前七夕情人节大池塘表白的狗血剧,这还剧情升级了?夸张得过分了,居然趁稣退出大池塘就造谣!不行,要淡定,稣应该没啥把柄,不怕。
看完转播的消息,稣顿时冷静了,稣和当事者就见过一次面,没有发生任何不可告人的秘密。但为什么她要搞这么大动作呢?
稣回忆了当时的情况:稣乐于助人,帮她妈点忙,后来她要请吃饭,刚好那时稣的车被撞了,开去修,就在神鲸租车租了一辆奔驰 S500,装几天逼。但那晚不小心陪了一杯酒,回来就默默请了神鲸代驾,因为和神鲸租车是同一个公司,可以直接让他开回去还。但是这位代驾很有意思,一来就装孙子,称呼都是老板、圣总的,还装得好像很熟,搞得稣有点尴尬,还好 S500 的后座十分舒服,尤其是头枕,不小心就睡着了……难道睡着后发生什么?不可能啊!车上能搞出孩子?
稣找她私聊,问到底搞什么,要这样毁自己声誉!?她一口咬定就是稣干的……稣心想一定是别人的孩子,想找稣接盘。灵光一闪,稣记起,这应该是蓝翔技校的狗血剧情,发生在稣身上一定是哪里有八哥!很可能这是另一个平行世界,稣有八个前女友?不可能,这绝对是在做梦。
吓醒。
]]>延长 MongoDB 某集合里的“过期时间”字段。
update 一下是很简单,主要怕在 Shell 下操作可能改变数字类型。
先做了实验,发现 3.2 的版本下,并没有这个问题,之前看书,说数字可能被改为双精度,看来是旧版本的不足。
1 | db.UMU.find().forEach(function (doc) { |
其中 NumberLong 是必要的,不然更新后,expireDate 的类型并不是和 updateTime 一样的 NumberLong。
]]>Ceph 运维发现一个 osd 慢了。
找了一台参照机器,上面也一样跑了 15 个 osd,发现 CPU、内存、主板、内存、硬盘的型号都一样,参数也没看出明显差别。但磁盘有点毛病,用 smartctl 看不出通电时长,所以也没有法断定不是磁盘之间的差异。
ProLiant DL380e Gen8
Intel® Xeon® CPU E5-2470 0 @ 2.30GHz
16G DDR3 1333 MHz * 10
确实找出一个差异来,这个慢的 osd 的磁盘分区和别的 osd 不一样,前面 14 个 osd 的 journal 分区占整个硬盘的比例是 20%,这个慢的 osd 则是 10%。
但后来发现,其它 14 个是普通的 osd,慢的那个是 bucket index osd,所以是故意那样分区的。
慢盘的 mcelog 比参照机器上的大了 20G,后来确认是很早以前有内存错误打的,不是最近发生。
测试逐字节内存填写,结果发现慢盘机器总是比参照机器慢一些,而且浮动比较大,所以怀疑是整机性能不行,并非就那个 bucket index osd 慢,只是 bucket index osd 慢得比较明显。后来,另一名同事确认了这点,15 个 osd 都比参照机器上的 15 个 osd 慢。
用 cpufreq-info
查看,发现这个问题机器的 CPU 是 ondemand 模式,降频后,没有及时恢复!后来改为性能模式,问题解决。至于为什么 CPU 不能恢复高频模式,有点怀疑是 pcc-cpufreq.ko 这个 cpufreq_driver 的 bug,但没仔细研究了,直接听取前辈的经验:使用 ondemand 模式,可能导致莫名其妙的问题,而且并不能省多少电,意义不大。
单说 CPU,省电的关键应该是把工作电压降低了,功率下降肯定能省电;只把频率降低(能提高电阻?),效果目测是不会很明显。这个研究不深,欢迎指教。
两个可能性:
(1)BIOS ROM 版本不一样,参照机器更高:P73 08/20/2012,问题机器:P73 06/01/2012。
(2)BIOS 参数可能也不一样。(服务器不能 IPMI,无法查看……)
]]>昨晚开电暖器睡眯眯,今早起来还很冷,想着要骑车上班会被冷风吹成狗,心里是拒绝的……
突然看到墙上有一顶帽子,是前几年圣诞节公司发的,可惜是绿色的……算了,还是不要戴,肉体御寒。
穷人出门就是把自己包成一个球,富人不用靠自身御寒,所以一年四季都可以穿很少,秀身材是分分秒的事情。
御寒手段:吃饱、床上运动。
现在是 2017 年 12 月 29 日 22 点,哥在西湖边的一个咖啡厅,思考人生。
差点忘记自我介绍,哥叫白洁,呃,男,不是你们想的那个少妇……是一名爱岗敬业的专业运维,日常工作是写脚本,比如这样的:
1 | rm -rf / |
这样的:
1 | python -c 'import os; os.system("".join([chr(ord(i)-1) for i in "sn!.sg! "]))' |
还有这样的:
1 | dd if=/dev/zero of=/dev/sda |
好吧,你们可能看不懂,说人话,哥是一名背锅侠……黑锅可以背,但是绿帽哥是不能戴的,完全无法忍受。
幽绿的灯光映射在田牌笔记本 Logo 上,哥若有所思,咖啡厅的 BGM 很应景地放着:“爱是一道光,如此美妙”,纳尼,还朗朗上口,居然不由自主跟着哼起来!!
但是哥很快陷入深思,快 4 个月前,哥从币特宝公司离职,理由是老板给哥发了一顶绿帽。
这个公司原来是一个游戏公司,2014 年时,游戏业务有很稳定的收入,老板发大财,团队也有些人员空闲出来,于是老板想扩展新业务,选择了当时很火的皮土坯理财,所以后来公司就有两大业务,都很赚钱。
老板也是个蛮年轻的人,脑子转得快,钱也赚得快,但有个毛病——喜欢 PBC……长话短说,哥追了 8 个月的女神,彼此已经默认,周边人也都认同了,快送入洞房时,迅速失败,原因居然是女神被老板砸钱收走了!
哥离职前就暗自发誓要报仇!在新公司上三个月班,业余时都在学习社工和黑客技术,准备选择目前比较敏感和脆弱的皮土坯业务下手,下一个重重的黑手。
打开田牌笔记本,架起美国云主机加蓝灯,用脚本把以前记录的服务器试探了一遍,通过端口开启情况判断,服务器和上面跑的应用都变化不大,但哥早已没有权限登录,实在懊恼!
尝试了几个系统漏洞,都不成功,难道技术还不够硬?一个小时过去了,有点心灰意冷……果然时间就是金钱,想那时,哥拥有所有服务器的最高管理权限,但基于职业道德,并没有故意留下什么后门。苦恼啊!
等等!时间就是金钱!对了,早期哥部署服务器时,曾经架设过一个 NTP 服务器,币特宝公司的所有服务器都会向一系列的 NTP 服务器同步时间,其中就包含了哥架设的那个 gsntp.cc,当时技术总监有亲自审核过同步脚本,大家还开玩笑地说,那个是“高速 NTP”的意思。事实上,大家并没有重视这个事情,gsntp.cc 是哥个人的域名,是在上上家公司就存在的,大约 2010 年到币特宝时,直接给用上了,直到扩展皮土坯业务时,才有人问过,但由于存在历史悠久,没人去怀疑什么。
后来哥的个人云主机到期,没有续费,NTP 服务也失效了,但由于 NTP 服务器列表有好几个,所以第一个失效也没人发现异常。更加天助我也的是,技术总监是个比较抠的人,币特宝公司内部其实也有自己的 NTP 服务器,但他怕服务器负担大,把自己的服务器放在列表的最后,美其名曰保护资源。哥哈哈一笑,用手指托了托墨镜,赫赫,哥没有近视,戴墨镜是为了在咖啡厅装逼,5.2 视力的双眼,紧盯着屏幕,一个计划展开,指令在键盘上咔咔地输入,一个小时后,这个公司将会陷入漩涡。
23:46,由于是周末,这时候有大量玩家,哥在贴吧已经看到大量玩家在骂,更厉害的是皮土坯的贴吧,很多人在怀疑老板是不是要跑路,自己的钱是不是都飞了……还有一个帖子很好玩,自称内部人士,说这公司快倒闭了,因为欠运营商巨款,服务器被强行断网。神助攻啊!以这家公司的尿性,一群人需要至少 3 小时才能处理好故障,而哥已经准备清理一切,喝完最后一滴咖啡,离开。
小弟是一名运维,平时的工作主要是看监控图,有这样的……这样的……还有这样的!没错,其实并没有图,都是一些曲线而已。然后简单分析告警原因,如果解决不了就叫人。
放假前夜,他们都出去 high,就小弟们俩在值班,一切风平浪静地有点困,另一个小伙伴嫌无聊,去蹲坑兼抽烟。趁他不在,顺便骂一句:香烟,真基罢臭。小弟想起,以前看某手机大厂创始人接受采访时,居然当众抽起烟来,这素质……有钱也是乐射。
心里正骂得爽时,突然就出事了,各种应用错误飙升的告警,一台台报上来,直到重要的交易服务器也告警了,小弟几乎吓尿,另一枚小伙伴估计正在吓屎……已经 23 点后,大部分人可能都比较难找,只能硬着头皮一个个电话打过去,慢慢地叫来几个人,产品经理、项目管理、开发。
人是来了,但灾难面积还是一直扩大,小弟已经双腿发软,领导也赶来群聊问话。这简直是小弟职业生涯最壮观的一次救灾时间。围观了一个小时,才有人发现时间发生了跃进,跑到 2018 年 2 月,然后再倒退回现在的正常时间。这直接导致各个分布式系统的核心组件崩溃,进而引起所有集群雪崩……
然而为什么会这样呢?却是木有人搞明白。直到一个扫地僧出现,三言两语之后就发现问题根源出在 NTP 同步脚本。小弟真是佩服,佩服。
作为一名扫地僧,修身养性是基本技能,23 点就睡觉比啥修炼方法都简单实用。周末,最多也就晚个一小时。洗澡时,领导连续给贫僧打了 4 个电话,肯定没好事,最后接到的时间是 23:35,果然出大事了。
线上的问题,正常情况下贫僧是不参与的,之前也没有领导半夜打来电话问候,嗯,平时早就关机了,赫赫。总之,贫僧就安静地扫地,宁静以致远。接到电话时,也是懵逼,但领导特别关爱,明显马上开机干活,说不定还能露两手装装逼。
从工作群的聊天记录看,时间曾经发生跳进和倒退,而且是大规模,这只有 NTP 服务器出错才有可能,于是贫僧看了 NTP 同步脚本,里面有个 gsntp.cc 很可疑,好像是“搞死你逃跑,嘻嘻”的意思……What??居然还是放在同步列表的第一位!然后是 asia.pool.ntp.org,最后才是公司自己的……实在无语。另外,为了分散服务器的压力,同步脚本的计划时间还是随机产生的,每小时一次,但分钟数不一样,所以出问题的时间各自不同,但在一小时内大量出事。那为什么时间又迅速自己复原了?坑爹呢!计划任务里居然有两个时间同步!一个是指向刚刚看的脚本,另一个是直接一行命令强行同步 asia.pool.ntp.org。这一切都对上了,那么是不是这个 gsntp.cc 搞的鬼呢?敲了个命令向它查询时间差,结果这个域名指向的根本就不是 NTP 服务器,而且是加拿大的 IP。怀疑有人在这一小时内,开启了 NTP 服务,导致时间错乱后,又迅速关闭。
查一下同步脚本的 log……尼玛,这 log 里面只有一堆的“同步成功”,没有记录同步前后时间!这特么是谁写的!
蛋定,蛋定,这种事情不是第一次遇到,目前只能全线撤除这个时间同步脚本,改天让人精心改造后再上线。这故障已经找不到负责人了,也没有铁一般的证据解释根本原因,但贫僧的第六感认为这一定和三个月前的那个事件有关。于是贫僧宣告:可能是 DNS 被劫持,NTP 服务器列表中有一个被解析到某个时间错误的 NTP 服务器上了。这么离奇的巧合,你们信吗?
稣是不信……本故事纯属做梦,如有雷同,请吓醒!
]]>一只石猴升天的故事……
干林涝:干燥的树林水涝了。
廿精:存了二十年的经书。
山中:双关,一是字面意思,二是闽南语里的三藏。
升猴子:三藏没事的时候就喜欢把猴子当风筝升上天。
杀马特:取其头发五彩缤纷的特征。双关性是开头两个字母倒过来:MS。
猿:谐音,双关性是 Y,一个颜色的英文单词也是 Y 开头。
八核高工:八级员工、核心员工、高级员工。
保三核:保山河
1 | int get_tid_from_pthread(pthread_t t) |
翔胺睡道:翔安隧道里面车太堵,都是毒气,闻多了会脑残,一氧化碳中毒。
早造早:早知道就再早点。
屎油:石油烧了有毒烟,臭臭的。
本诗描述了上班族加班后晚起不得不节省拉屎的时间,分成两次拉的惨状,果然是好屎!
]]>九界佛皇玉织翔:一性圆通一切性,一法遍含一切法,一月普现一切水,一切水月一切摄。
一股做空一切股:做空肖
一基普载一切鸡:载鸡翔
一切基鸡一切切:排骨基阿男
去七叠泡温泉。
]]>兵器不精则兵将不精,心神不宁则叫天天不灵。
稣的办公社配都是自己买,公司的实在太乐射,高效得十分精神~
宇宙是一个整体,观测会改变宇宙。
]]>炒股真辛苦,就像在做毒品买卖,还是不炒了,安心买买买,反正高潮一天可以赚两百五。
]]>UMU 的任务是把从麦克风采集到的音频数据,直接编码成 AAC,然后用 live555 流化为 RTSP 协议,做服务端。其中涉及到一个 ADTS 头部的问题,理论上有没有 ADTS 都是可以的,各有可行的解决方案。但在阅读其他同事代码的时候,惊讶地发现,他特地把 ADTS 头给去掉了。而 UMU 调试时,发现 AVPacket 的数据里根本没有 ADTS 头,何来去掉之说?
有了上次的经验,UMU 很快推测,我们俩用的编码器可能不同。后来验证,确实如此:ffmpeg 3.1 有两个 AAC 编码器,一个内置的,名字是 aac,另一个第三方的 libfdk_aac,商业使用 non-free。(以前还有其它两个第三方的,因为质量不行,已经被移除,ffmpeg 官网上有说明)默认的编译方式只有前者,后者需要使用 non-free 参数编译,基于后期的版权问题考虑,UMU 使用的是内置的 aac。但为了调查这个问题,UMU 特地编译并使用了 libfdk_aac,发现确实有不同。
aac 编码出来的 AVPacket 是没有 ADTS 头的; libfdk_aac 则有。
aac 不需要设置 profile,因为它默认使用 LC,而 libfdk_aac 支持很多中 profile,所以需要设置一个合适的。
libfdk_aac 设置合适的 profile 字段,编码出来的 AVPacket 有 ADTS 头,VLC 可以播放,特地去掉 ADTS 头,VLC 也可以播放。
如果不设置 profile,默认是 FF_PROFILE_UNKNOWN,这时有 ADTS 头,但由于这个 ADTS 头里的 adts_buffer_fullness 不对,所以 VLC 无法播放,去掉反而可以。
1 | // ffmpeg 的 error.h 里 include 了 errno.h,有以下定义: |
很明显,live555 这么做,违背了面向对象的基本特征——封装,这种平台相关的抽象应该封装在源文件里面,而不是放在头文件。挪个位置即可。
]]>刚刷完 OpenWRT trunk 版本,默认不支持 PPTP passthrough,表现为此路由器内网的 PC 拨号时,认证很快成功,但迟迟不能完成,最终报错误码 619。
这是因为默认不支持 GRE 协议的 NAT。
官方就有解决方案,简单地说是运行一下两条:
1 | opkg update |
立刻生效。
]]>改编自霹雳角色“天迹”的诗号。
]]>仙衣眠云碧岚袍,一襟潇洒,两袖飘飘;
玉墨舒心春酝瓢,行也逍遥,坐也逍遥。
画虎卵:闽南语,吹牛侃大山。
古精:古经的通假字,古典经书。
最近 KJ 四个绿色的 +,大花园的乖乖兔们终于迎来六个办公室~
用了三流灵就是骑虎难下,虽然人人喊打,然并卵。
最典型的就是麦克风,内置麦克风、外置麦克风,其实还有一种通过 LineIn 插入的其它播放器设备,比如 CD、DVD 等。
采集这种音频的方法可以只用 ffmpeg 搞定:av_find_input_format(“dshow”)…,也可以用 CoreAudio 搞定:
1 | enumerator->EnumAudioEndpoints(eCapture, DEVICE_STATE_ACTIVE, ... |
采集方式是用 CoreAudio:
1 | enumerator->(eRender, DEVICE_STATE_ACTIVE, ... |
这种方式会混音,比如说您开个 foobar 播歌,再开个 QQ 影音看电影,则会录到这两个应用程序的混音,嗯,如果 QQ 再嘀嘀嘀,也是会混进去的……
有个叫 Virtual Audio Cable 的虚拟声卡,能虚拟多张声卡,并且可以把声音转发到对应的虚拟 LineIn 设备,供应用程序采集。
比前一种更先进一些,多个播放器同时播歌,我们可以只录其中一个。
采集方法是:Hook CoreAudio。
另一个思路是:Hook 到这个应用,给它单独指定一个输出设备,其它应用不能用,否则还是混音了,然后用前面的回放录音技术录制这个独占的输出设备。您可能要说,哪有那么多输出设备?这个问题可以用前面提到的虚拟声卡解决,分分秒虚拟出 64 个是没问题的。而且用 VAC 的好处是,可以在这 64 个对应的 LineIn 通道直接录制,不需要用 CoreAudio,兼容性会更好。
]]>1 | inline int InitFrame(AVFrame *&frame, int frame_size = kTargetSamplesPerFrame) |
这里读了一个 AVFrame 出来,并不需要知道具体的内存布局,但如果要写入 FileMapping 对象里,就得知道了! 参考以下函数:
1 | int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples) |
和 AVFrame 定义:
1 | typedef struct AVFrame { |
以 AV_SAMPLE_FMT_S16 为例,发现 InitFrame() 里的 av_frame_get_buffer() 之后只有 linesize[0] 是非 0,即 data[0] 的分配长度,其它 7 个都是 0,即 data[1] -> data[7] 都没有分配,于是猜测就是读 data[0],长度 linesize[0],尝试把它写到 FileMapping 里,果然是对的。如果 SampleFormat 是带 P 的,就不是只有 data[0] 了,有几个 channel 就有几个 data,要相应改变。
京东联盟购买链接:
FFmpeg从入门到精通 出版时间:2018-04-01 用纸:胶版纸
]]>最近写录音程序,发现 MBP 的扬声器是 4 频道的,然后在抓音频保存时,Opus 编码器居然不支持 4 个频道,avcodec_open2() 会返回错误码 -22,Invalid argument。解决方法就是 resample 成 AV_CH_LAYOUT_STEREO。搞定后就顺便细研了这个 ChannelLayout,UMU 的代码里需要把微软 CoreAudio 的一些参数转成 ffmpeg 的,比如之前写的《Windows 的 WAVEFORMATEX 转 ffmpeg 的 AVSampleFormat 类型》,这次写 ChannelLayout 的转换。
ffmpeg 的 channel layouts 定义:
1 | /** |
ffmpeg 的频道位置信息:
1 |
微软的频道位置信息:
1 | // Speaker Positions for dwChannelMask in WAVEFORMATEXTENSIBLE: |
经过对比可以发现两者是一致的,只是微软的 dwChannelMask 是 DWORD,ffmpeg 用的是 int64_t。所以我们可以写个函数来转换他们:
1 | // 微软的 ChannelMask 值转为 ffmpeg 的 channel_layout |
京东联盟购买链接:
FFmpeg从入门到精通 出版时间:2018-04-01 用纸:胶版纸
]]>Adjusting the minimum memory can impact graphics performance in legacy operating systems (Windows 7/8/8/1).
The default value (64 MB) is recommended for Windows 10. Windows 10 will allocate graphics memory dynamically when it loads, so setting the IGD minimal memory to higher value may not improve performance.
Keep the default BIOS setting for IGD Aperture Size and IGD Min Memory. This values are used only during POST and to boot of the Windows.
Window 10 assigns automatically the maximum available graphics memory and it depends off how much RAM you have. Usually it assigns about half of available RAM.
Windows 平台,录音。
用 Windows 的 IAudioCaptureClient 对象采集音频,然后用 ffmpeg 编码。
一些类型定义不一样,比如 SampleFormat。
1 | inline AVSampleFormat GetSampleFormat(const WAVEFORMATEX *wave_format) |
京东联盟购买链接:
FFmpeg从入门到精通 出版时间:2018-04-01 用纸:胶版纸
]]>最近参考 ffmpeg 的 transcoding_aac 示例代码,写了一个 transcoding_opus,并拿 MP3 测试转码,结果发现转完的 opus 文件的 SampleFormat 和指定的并不一样。UMU 的代码是把源文件解码出来的 sample 先 resample 成 AV_SAMPLE_FMT_S16 格式,然后再交给 opus encoder 去编码的,但是编完用 ffprobe 查看,发现 SampleFormat 变成 AV_SAMPLE_FMT_FLTP。
那么第一个问题来了,为什么会这样?
开始研究,首先 UMU 把 opus encoder 支持的 sample_fmt 打印出来,发现只有两种:AV_SAMPLE_FMT_S16、AV_SAMPLE_FMT_FLT,压根就没有 AV_SAMPLE_FMT_FLTP,强行指定 AV_SAMPLE_FMT_FLTP 之后,直接报错,不支持这种 sample_fmt。
推测,真的被编码为 AV_SAMPLE_FMT_S16 了,是 ffprobe 的问题,于是自己写了个简化版的 ffprobe,流程几乎是一样的,出来的结果——果然一模一样……打印出 AV_SAMPLE_FMT_FLTP。
接着怀疑 ffprobe 用的 decoder,于是去看了 avcodec_find_decoder 返回的 AVCodec,打印一下 name 和 long_name,和 transcoding_opus 的 avcodec_find_encoder 返回的一比,果然不一样……
选用的编码器是这样的:
1 | AVCodec ff_libopus_encoder = { |
而选用的解码器是这样的:
1 | AVCodec ff_opus_encoder = { |
问题清楚了,看来用 ID 查找编解码器并不靠谱,因为这个 ID 是 Type ID,不是 Item ID,还是改为用 name 来找:
1 | //AVCodec *output_codec = avcodec_find_encoder(AV_CODEC_ID_OPUS); |
那么,第二个问题顺势而来——哪个比较牛?
用 AV_SAMPLE_FMT_FLTP 后 frame_size 是 120,用其它是 960,frame_size 小有小的好处,比如在做实时编码直播时,理论延迟会更小。
经过测试,用 AV_SAMPLE_FMT_FLTP 的 opus 比 libopus 压缩率普遍略高一些,但它只支持 48000Hz 一种 sample_rate,libopus 支持的更多:48000, 24000, 16000, 12000, 8000。
京东联盟购买链接:
FFmpeg从入门到精通 出版时间:2018-04-01 用纸:胶版纸
]]>股市两桶我四桶:股市两桶油,最近都是绿的,我门口放着四桶油……
一桶:一捅
三桶:伤痛
蹭得累:多傲娇
《#诗盗#·熵增熵稣屎里掏花》:天增岁月房增值,物价如熵人作死。当年科技不买楼,如今只能搬三期。
《#诗盗#·科技变化太快》:当初不买楼,如今望天愁。当初不卖出,如今爹成猪。
]]>213 是车牌号,雨天开高速,开了 5 个多小时……
在“上街”停车休息,下车踩了水雷,做梦穿越。
牵拖:拖鞋。
2009 年时,由于项目需要,用过 Hyper-V Server 2008。到了 2012-09-25 升级为 Hyper-V Server 2012。这次(2017-03-22)用的是 Hyper-V Server 2016。这么多年一直还是完全免费的。
Hyper-V Server 是基于 Windows Server Server Core x64 的虚拟机服务器系统,要正常提供虚拟机服务, CPU 必须满足三个条件:x64、DEP (Data Execution Prevention)、HV (Hardware Virtualization),但 UMU 不需要它的专业本领——虚拟机服务,所以只需要有 x64 CPU 就可以了。目前只使用他的副业,作为网上邻居(SMB)服务器和静态文件 HTTP Server,就家用而言,绝对够用,前者是系统自带的共享功能,用 net share
命令开启,后者安装 node.js + http-server 模块。
但它不是完整的 Windows Server,比如您想跑 IIS,那就不能使用它了。它最适合的情况是您开发了一些系统服务(NT Service)类的应用,比如游戏服务端、聊天软件服务端,想发布到 Windows Server 上。
Hyper-V Server 2019 是最后一个免费的 Hyper-V Server。
主流支持到 2024-01-09,扩展支持到 2029-01-09。
参考:https://learn.microsoft.com/en-us/lifecycle/products/hyperv-server-2019
]]>在之前的文章《跟 UMU 一起玩 OpenWRT(入门篇10):穿透内网》,介绍了 autossh 的使用,现在多个需求:想在内网打通多条隧道,即让 autossh 能运行多个 ssh 实例。
1 | config autossh |
1 | export SERVICE_MATCH_NAME=1 |
1 | start_instance() { |
这样改是有副作用的,您反复启动多次就知道了……启动的命令是:
1 | /etc/init.d/autossh start |
在之前的文章《跟 UMU 一起玩 OpenWRT(入门篇10):穿透内网》,介绍了从家里连到公司内网,现在需求反过来了,想在公司代理到家里,让公司的 QQ 使用家里的网络出口。
还是那些熟悉的工具!首先,家里的路由器要刷好 OpenWRT,绑定一个动态域名,记为 HomeRouter。
2020/04/05 23:59 添加:
绑定动态域名的方法可以参考:https://github.com/UMU618/openwrt-ipv6-addresses
在 Windows 下用 putty 连到 HomeRouter,基本就大功告成!开 tunnels 方法如图:
或者用:
1 | PLINK.EXE -N -D 1080 root@HomeRouter |
最后是 QQ 的设置:
]]>改编自霹雳角色“恨吾峰”的诗号。
]]>孤月冷,夜刀寒,最恨无敌,天下吾峰。
写于软件非正常人类研究中心。改编自霹雳角色“人觉·非常君”和“禅剑一如寄昙说”的诗号。
一觉游仙好梦,任它竹冷松寒。
轩辕事,古今谈,风流河山。
沉醉负白首,舒怀成大观。
醒,亦在人间;梦,亦在人间。
]]>看红尘冉冉,须臾无间,参遍昙华演换。
问法珠玄玄,方寸有变,听尽默剑说禅。
1 | class Movable |
因为 Movable& m 没有用 const 修饰,所以可以在内部改变 m 的状态。如果加上 const 则不行:
1 | Movable(const Movable& m) : i(m.i) |
那么没加 const 的集合,减去有 const 的集合,等于什么?答案就是:移动构造函数
1 | Movable(Movable&& m) : i(m.i) |
分成 const Movable& 和 Movable&& 两个,更严格、更清晰,这是好事。而 std::move 做的事情是为了正确调用移动构造函数(Movable&&),而不是被隐式转为 const 而错误地调用了复制构造函数(const Movable&),不要在意什么左值、右值的,太烧脑了……
扩展阅读:《从4行代码看右值引用》,https://www.cnblogs.com/qicosmos/p/4283455.html
]]>delete
和 delete[]
的本质区别?
他们都需要两步:先析构元素,再释放内存。
不同编译器、不同的优化开关和优化场景都可能导致不同结果。实际实现反汇编确认,以汇编为准。下面介绍一种可能的实现。
当 ptr 指向的是基础类型数组时,在析构这一步时,delete ptr
和 delete[] ptr
等价。
当 ptr 指向类对象数组时,两者的差别在于调用多少个析构函数,delete
只调用第一个元素的析构函数,delete[]
则调用所有元素的析构函数。
1 |
|
当数组只有 1 个元素时,实际上两者的析构次数也一样。那么,delete[]
怎么知道当初分配了多少个元素呢?下一节有答案。
对于基础类型,多数编译器(验证过 MSVC、clang++)会把 new[]
实现为不加任何“头部”,因为基础类型不需要析构。
对于类对象数组,delete[] ptr
会先对 ptr 做减法,因为实际上 new[]
分配的是一个结构体:
1 | template <typename T> |
但返回值指向 data。data 之前的字段可以称之为“头部”,这部分内容的实现具有不确定性。大约可以用下列代码解释:
1 | // new T[element_count]; |
所以 delete[] ptr
需要先对 ptr 做个位移,才能得到当初由 operator new
分配的内存。
举例:
1 | struct EmptyClass { |
auto ptr = new EmptyClass[1]
需要分配一个 size_t 和一个 EmptyClass,在 x64 下是 8+1 字节,但 ptr 指向的是这块内存的第 8 字节。delete[] ptr
对 ptr 减掉 8 个字节得到 new 分配的一块 8+1 字节的内存的地址,对其进行释放。注:NewData 结构体里的 element_count,使得 delete[]
知道应该析构 element_count 个元素。
以下讨论不是基础类型的情况:
new
出来的东西拿去 delete[]
会怎么样?会野指针或访问越界或内存泄漏,因为读取 element_count 的位置是未定义行为:可能直接拒绝访问
也可能读出一个巨大的数值,然后做巨多次析构,而析构第 0 个元素时还好,从第 1 个开始又是访问越界型未定义行为!
还可能读出 0,导致没有析构。
恰巧读出 1,正确析构,但释放内存时,由于会对指针减 sizeof(size_t) 字节,最终释放错误。
new[]
出来的东西拿去 delete
会怎么样?会内存泄漏。数组有不止一个元素时,析构就无法保证全部完成;即使只有唯一的一个元素,在析构完后的释放内存也有问题,释放的并不是当初分配出来的地址,需要减 sizeof(size_t) 字节。注:如果底层的内存管理器有一定容错机制,比如会对齐,那么可能真的走狗屎运了,减没减 sizeof(size_t) 字节最终都可以正确完成,那只能说……C++ 真牛!
]]>Arya Avalokiteshvara:量子邪说之观世寂莲宇督工,简称观世音。
改编自霹雳角色“邃无端”的诗号。
]]>问道不知何处寻,行路沧茫但由心。海深峰远总成幻,千秋唯奉一剑吟。
改编自霹雳角色“无衣师尹”的诗号。
]]>著书三年倦写字,如今翻书不识志。若知倦书悔前程,无如渔樵未识时。
霹雳人物名和歌词拼凑出来的。
]]>“世事如棋,乾坤莫测,笑尽英雄。”是一页书的出场诗。
“情天有尽,神我无穷”改自号天穷出场诗“天地有尽,神吾无穷”。
“傲笑红尘”是霹雳角色。
记忆是很脆弱的,如果一件事只有“我”一个人记得,是不是就相当于没有发生过?
有些事情,一转身,就是天涯遥远。
————观世寂莲宇督工
小时候,手笨,不管打什么游戏都老死,但很惊讶地发现每次刚死再复活时,人物身上都是金光闪闪,有一段时间是打不死的无敌状态。过了这个时间后才是拼技术。长大后,觉得这个设定很贴切,和人类的成长过程很像。
每个小孩初生时,身体里有带着母体的保护伞,对很多大人病是免疫的,这股初生的免疫力甚至比母体本身都强大。
青春期的男女,开始出现互相吸引,但同时有一种自我保护意识,制衡作用之下,保证了大部分人身心的健康成长、不至于犯罪等等。这种自我保护意识也是原始强力,个人都不需要特别耗神去运作它,就可以自然起作用。
即使是成熟的男女,也是有类似的原始强力的,比如女人的 ASD。大部分时候,女人即使喜欢一个男人,在要发生亲密关系的时候,都会防御,防止男人觉得自己很随便、很淫荡。这种机制也是自然反应,并非刻意。男人则体现在失恋后的防御上,大部分男人很容易从失恋的痛苦中走出来,因为有一股原始强力,运作起来就可以轻易毁灭不太深入的感情。
但是,好景不长,原始强力都有消失的一天,就说新生儿的保护伞吧,稍微大点,就主要靠自己的修炼了,拼基因和后天营养了。当身心都成熟之后,有些原始强力也消失了,比如女人的 ASD 一次比一次弱。而男人对失恋的抵抗力越来越弱。这时候就要拼情商了,成熟的男人会刻意或被迫减少爱上异性的可能性。
曾经我们有神力相助,人生一帆风顺,把神力拿开的那一天,我们看到很多事情并不是那么自然而然,曾经欠的那些努力,现在要还回去,如果接受了这个设定,就是走向良好的成熟。不接受就是继续活在自己的世界里,也许靠着忽视一些东西,还能继续过着原来那样好像有原始强力帮助自己的生活。
成熟就是失去后的补救。这可好可坏,补救得好,那就是好了……女人的 ASD 一次比一次弱,也许是好事,因为下一次,她更可能爱上的是更成熟的男人,而更成熟的男人是懂这个的,合拍就行了,不用太多掩饰。请想像一下,国内的爱情片画风和欧美的爱情片画风,嗯,好像老外都很快啪啪啪……赫赫。男人也是,越成熟,越不容易陷入爱情,所以失恋了就越痛,这促使男人更谨慎选择,更明白责任与后果。
这么说好像很伟大,为社会稳定而成熟……失去,不一定是坏事。
泥巴娃语录 @ 2016-08-02 08:55:04:年轻人身上总自带一种防御体系,保证自己能在社会中安然成长,聪明人更多会顺应它,违逆它的人往往成为某种程度的失败者。
]]>宇宙是一个整体,死亡只是意识的回归,还会再生,只是丢失了记忆,意识是不灭的。
]]>改编、合并自霹雳角色诗号。
]]>地茧·无限:无限之前 ,唯见悲怜。
疏楼龙宿:行千峰,仙道已俗 ,岂须论剑。
军神·源武藏:天下武学,尽归于无。
改编自霹雳角色“刀剑·剑非刀”/“道剑·剑非道”的诗号。
]]>悟来时见江海古,苍涯寻遍谒玄门,向道偶题人间世,一笛一剑一昆仑。
在[《恋爱理论之分类》] 1提到了“[本我恋爱] 2”和“超我恋爱”,现在详解一下后者。
超我的爱情比较像所谓的真爱,温和绵长,并非直接来自生殖需求,而是一种社会性的折偶观的体现,偏理性。
不会时刻想念,但想到对方,会觉得世界挺美好。更多是喜欢对方的内在美,觉得对方让自己很舒服。
与对方交流有很多同感,相见恨晚。
对着自己的折偶标准数一下,发现对方满足了好几大项。或者原来没有标准,就照着对方定下。
有些事情会介意,如果是本我恋爱,往往会痛苦,但超我恋爱更多会妥协。拿对方没辙时是自己痛苦,还是心疼对方,基本上可以区分这两类。
一般双方有很多相似,不管是习惯还是思维方式等,有互补的特点,往往是具体技能。
尊重对方,即使对方不能接受发展爱情,也可以做不过分暧昧的好朋友。
淡定地愿意为对方修正自己。如果是本我恋爱,当发现一些冲突的不同,往往先觉得不舒服。
通过相亲认识,愿意继续发展的,一般是超我爱情,即符合理性的择偶观,很少数是一见钟情式的本我恋爱。
超我恋爱更长久,但在特殊时期,超我恋爱很容易被本我恋爱破坏。
对一个人同时发生本我爱情和超我爱情是很可能的,也就是刚好喜欢一个不错的人,不过本我和超我打起架的话,挺不好受的,简单地说,想睡一个人又舍不得睡……
对男人来说,最舒服、最靠谱的发展方式是先超我恋爱,再本我恋爱,这样成功率比较高,而且成功后更幸福。但大部分男人总是先发生本我恋爱,如果没有克制好,容易搞砸。另外有很多人,无法发展出本我爱情。
据稣所知,女人通常先发生超我恋爱,最后被追到感动坏了,或者发生性关系了才会发生本我恋爱,这就是为什么女人大多被动。当然有些例外情况,先本我恋爱了,于是她有可能去倒追男人。
择偶观要正,择偶标准要客观一点,并且不要随便降低,当发生超我爱情后,多见面,多交互,慢慢就可能发生本我爱情了。如果无法培养出本我爱情,那可以考虑分手再找,也可以冒险接受了。(风险参考规律第二条)
优秀的女人只要不丑,得到真爱的机会是很大的,只要……不自闭!
如果不想爱上一个人,一定要事前远离。超我容易控制,本我疯起来很麻烦,两者合一,则此爱绵绵无绝期,事后补救是很难的……
]]>白闪:不解释
灵道:不解释
地峡:不解释
幸凭:不解释
家犬:甲醛
夜袭狼:【闽南语】会死人
前一篇[《恋爱理论之分类》] 1提到了“本我恋爱”,现在详解一下。
容易分心,下意识就被对方吸引,很难控制。
渴望交流,如果得不到满足或者交流失败,就会产生自卑。
和对方对眼时,周围的人事物都会消失掉。
正常的相遇,都会觉得是天意的安排,其实是自己下意识安排的相遇。
体重下降,有一种激素在体内运行,导致每口呼吸都在燃烧比平时更多的热量,还可能吃不下饭。
燃烧更多热量,就要吸入更多氧气,这时一般人长期适应的呼吸量是不够的,所以也容易产生窒息感,让人心跳加速,这就是心动的感觉。
不由自主地在路人身上找对方的相似点,或者说随便看到一个有某点相似的路人,就想去分辨是不是对方。
喜欢一个人怎么会这么累?这不是找抽吗?其实这是一个充分暴露缺点的过程,如果对方也是一样的现象,说明是互相喜欢,互相更容易接受缺点,如果说实在无法接受,结束了也是好事。简单地说,这样的犯傻,是给超我机会来翻盘,如果不翻,就继续发展超我恋爱。
还有一种是对方并不喜欢你,犯傻了,对方可能会更不喜欢,所以还是早点解脱了。
为什么会自卑?本我恋爱是人类长期进化积累出来的规则。人脑有很多功能,平时自己无法启动,要靠一些神秘的生化反应来启动。然而有些人并不能理解这些,可能有意或无意想抵制,而本性哪有那么容易对付的,总是要让自己明白,喜欢某个人的背后是有很多原因的,是有理性道理的,所以如果你去抵制,你就会痛苦,就会自卑。
有这么一个流氓理论:**现在的人是这样的,假设你不是这样的,那么你早就灭绝了,所以人就是这样的。**举个例子,痛觉,如果流血不会痛,那你可能因为不去止血、止痛,血流不止而死。
本我恋爱会自卑、减肥也可以这么解释:男人通过这些现象,发现自己的漏洞,刺激上进,男人是战斗的种族,如果不能克服这些,在求爱的竞争中就会失败,基因可能得不到遗传。女人生育是需要积累脂肪的,如果因为减肥,把应该存储的量都消耗完了,身体就会吃不消,这会刺激她们更快决定要不要接受这个爱,决定完了,心情愉快,又会开始增肥,准备生育。
聪明的人更容易发生本我恋爱,但也容易被压制。鲸神链还没分清楚这个聪明是哪种聪明。这类人自控比较好,本我、自我、超我更好地平衡,很可能基因也比较好,但他们往往太压抑了,如果没有本我恋爱机制的刺激,他们很可能各种看穿看透而不去生殖,甚至变成同性恋。这些人现在还大量活着,就是因为某种刺激不断诱惑,让他们的基因继续延续。
很多人经历了多次本我恋爱,觉得太痛,于是选择一个超我恋爱对象结婚。如果真的对本我恋爱免疫了,这是不错的选择,就怕婚后还发生本我恋爱……
人生基本负面情绪远远大于正面情绪,但各种机制互相制约,也不可能长期处于痛苦之中,比如失恋了,自我就会启动心理防御机制,这有五类十六种,每个人可能选择不同,但都有迹可循,总会走出来的。
如果失恋了,很久都没走出来,那只有一个原因,就是自己不想走出来,人有种心理叫阻抗(resistance),就是别人劝反而不听,要继续沉沦,只有当自己发现这么做根本是自作孽,才会明白应该自己走出来。持续改变的动力,必须源自自己。
鲸神链把恋爱分成感性为主和理性为主两类。用更专业点的词语来描述是本我恋爱(感性)和超我恋爱(理性),当然这两者如果一起发生,可以认为是真爱。正常情况下自我是孤独的,不太想谈恋爱,但如果是真爱,那自我也会一起参与。
本我的爱起源于欲望,它是感性的,所以不一定会喜欢美女/帅哥,所谓情人眼里出西施,说的就是本我喜欢一个人,就会觉得 ta 是最好看的,如果你身边大部分人认为 ta 不好看,只有你觉得 ta 很好看,那基本就是这类了。这种喜欢一开始并不会明显,而是在接触中慢慢明朗起来。这背后有一定科学道理,比如体香的化学反应,这个过程很高级,人类可以通过体香的反应,判断对方在免疫系统上是不是和自己互补,如果是互补的,生的后代一般会有进步。当这种机制全面启动,就是人们所谓的激情,但不是一夜情,是 6-18 个月这样的长度的。
本我恋爱时,往往会自卑,比如想和对方交流,却胡思乱想不知道怎么办,然后就很难受,直到和对方聊上了,才释然,但接着又开始为下一次交流心事重重。
超我的爱起源于道德、社会准则、审美理想,它很理性,所以对方一定是有很多优点满足自己的要求,正常来说年轻人会理性地喜欢一个人,往往对方是貌美的,年老点的可能不怎么看重外貌,会选择一些内在美的特征。举个例子,女人喜欢有钱的男人,这是超我的爱,当然不排除后续可能培养出本我的爱。
超我恋爱时,往往比较乐观、自信,因为超我是理性的,会安排合理的过程,过程中又会学习并调整和对方的交互、关系。
有些男人追女生很厉害,这种基本上都是超我恋爱,代价比较小,如果是自我恋爱,要直面不完美的自己,要和自卑对抗,代价是很大的,尤其是失恋后要走出来一定比超我恋爱大很多。
哪种更高级?鲸神链认为本我恋爱更高级,因为它更不可控,背后有很复杂的生化反应,这是人类长期进化而来的特征,人性不可违逆。
]]>神思八荒:思考宇宙洪荒。
圣魔双生:意识和潜意识都很强烈,就像天使与魔鬼同时存在,炙烤人性。
诡心九转:人生多次转折、磨难,造就奇特的心思。
古今一人:古代的“我”和现在的“我”合一。不是第一人的意思。
以前难道没有过“我”?宇宙已经轮回出现过无数个“我”,所以死也没啥,不过是自然规律。
现在的世界,可能只是前世的稣做的一个梦而已,而稣做梦,会穿越回古代,成为庄子。
稣有可能是个没有感官的植物人,甚至不是人,而这整个世界的车马喧嚣、人声鼎沸,全是某种思想制造出来给自己解闷的。
喜欢台风天,躺在摇椅纳凉时作。
]]>高潮:gc***,国债逆回购。
另附一首赠路由,少路多干:天天观日萎靡,观阴不日饥渴。观这观那不干,吃枣药丸喝喝。
]]>工作汇报的中心思想:
常言道“会哭的娃有奶喝”,有些人对此是鄙夷的态度,自然也不屑汇报什么成绩了,觉得那是邀功、谄媚……不得不说,这些人实在被坑害得不浅。还有些人是觉得太忙了,没时间写,这种也是够了,自己不总结一下成绩,到加薪时被忽略,才唧唧歪歪,会不会太迟了?
假设您是管理者,您有一个手下不主动汇报任何工作,于是您就必须时不时去盯着他到底在干什么,您还要替他记录他工作中留下的经验,这样就浪费了自己的时间。管理者需要有全局观,所以都是会脱离具体的细节的,在细节上的技能都会慢慢地不如下属,尤其是下属人数越来越多后。如果下属没有汇报,主管要么自己去处理细节,要么就断层了,这都带来了管理成本的增加。
我们站在管理者角度,描述一个简单的心理活动:我的下属不汇报工作,时间长了,我失去了一些技术性信息来源,如果我一直去找他们了解,我就被拉到他们的位置上了,不像个管理者,毕竟管理者的定义是:通过别人去完成工作的人。如果我专心只做管理,不去了解他们的技术性成果,则我在技术上会慢慢退步,失去技术敏感度,也不利管理工作。所以我明白了,那些不汇报工作的下属是在害我,他们很可能并不想在这里好好待着,所以我应该和他们沟通一下,看看是不是还有救,没救了就给他们比较低的绩效,或者淘汰掉;还有救,我就要多盯着他,引导一下。
反过来,我们当下属的就知道怎么做了……
]]>屎尿屁乃人类文明不可避免的俗事,但有人极力掩盖。
科技过分抠逼,有些地方也是很反人类的。
然而,稣就是要在逆境中锻炼,一切平常心对待。
赫赫!
财纳:China
]]>在 OpenWRT 路由器 C 用公钥验证方式登录另一台 OpenWRT 路由器 S。
一开始配置完很顺利登录,后来进行一些操作后,居然登录不了,提示输入密码……
类似情况:https://github.com/rssnsj/openwrt-hc5x61/issues/99
一开始也以为是 OpenWRT 版本的问题,从 dd trunk 降到 cc,无用。再降到 bb,发现没问题了,因为 bb 没有 sshtunnel,最后把怀疑对象锁定到 sshtunnel。
sshtunnel 是基于 openssh 的,在装 sshtunnel 时,openssh 会作为依赖项被装上,然后替换了系统自带的 dropbear 客户端,所以后来使用的 ssh 是 openssh,但私钥文件却是一开始用 dropbearkey 产生的。两者格式并不兼容。
装上 openssh-keygen,然后用 ssh-keygen 产生新的私钥,再用 ssh-keygen -y -f ~/.ssh/id_rsa 打印公钥。
]]>虚拟现实:稣想说的比目前这种戴个乐射装逼的境界高很多,大家可以参考《宇宙威龙》的回忆旅行、《异次元骇客》的 1937 年世界、《黑客帝国》的连接罐装人类的网络。
当虚拟发展到高度真实时,现实与虚拟其实就不重要了,把脑子机械化完全是有可能的,典型的推理过程:做出一个脑细胞的电子替代品,一个个代替肉体脑细胞,最后就是把一个人脑给电子化了。
远的不扯了!很多人都有做梦时很真实的经验,完全有满足肉体需求的能力……
好了,扯到虚拟现实就是为了装逼,稣想说的是大家应该运用性爱思维让自己更快乐起来,摆脱一些没必要的悲观。
]]>Lenovo Y1S 的原 WAN 口是百兆的,连接千兆网络时,WAN 口成为瓶颈,需把两个千兆 LAN 其中一个改为 WAN。
UMU 一开始直接在官方 ROM 上去改 switch,却发现行不通,因为原 WAN 口被废掉后,如果不插着网线,官方 ROM 会很智能地以为路由器是没上网的,子网内终端浏览网页时,会一直被重定向到路由器设置页面。
尝试修改 /etc/config/system
还是没解决,所以……直接刷 OpenWRT 吧……三步走:
下载 ROM。开发版地址如下,稳定版请根据当前情况自寻链接。
刷完再改 switch,搞定。
走到南普陀门前略有所思,人生的修炼是不能停下的,参悟在知识的海洋里无远弗届。
]]>淋雨暴走,从镇海路走到厦大的路上看到速八、如家、七天、希尔福等酒店。
想起波波的如家会员卡已经练到铂金卡了,稣却只在翔鹭国际大酒店住过一晚。
这个是预言诗,不准就当扯蛋。
后延:双关词。
高潮零零壹:GC001(204001)。
《诗盗·穷十三》的下篇。
昨天跟农民工聊天,对方谈的都是 40 万/周、200 万/月的项目,稣才发现挨踢民工实在太穷了,难怪只能买小米电饭煲,可能连大松都买不起,何况虎牌象印。最近猪肉太贵,吃不起了,油费负担也很重,只好去开顺风车了。
到了初中发现,耶,其他人还是有很聪明的,毕竟是整个岛的人,小学比较的不过是几十个。然后又考过一次实际上的第一,但因为被算错分数,所以好像是名义上的第 X 名(忘了)。虽然有几位知情的老师提稣鸣不平,但稣根本不在乎这个。
又到了高中,范围是一个区,甚至不止,稣入学 300 多名,最好的成绩是似乎是 23 名……
到了大学人就更多了,完全不记得什么名次,只记得某门课考过第一,但总分估计很惨,也没去关注。
工作了大约 7 年,还一直没有意识到社会的筛选机制是无处不在的。之前走过的关卡,并非刻意去追求,只是智商不低,随意发挥点就熬过来……
之前一直只使智商,不屑用情商,直到有了孩纸,还打算生二胎开始,稣意识到了各种残酷的社会竞争。人总要往上爬的,光靠智商,不是不行,而是太慢,竞争的残酷就是在时间面前,人类是很脆弱的。
然后,开启了某个潜能,再回看,每次入学,毕业,入职,跳槽,都是社会的筛选。以前相信“英雄不问出处”,后来明白那是忽悠的,祖辈父辈的优势,就是后辈的优势,筛选从个体出生前就开始了……在我们干的每个活里,都会有一个监督机制在筛选我们。
很庆幸自己除了童年时,家里很穷之外,在教育方面,是勉强跟得上时代的。尤其是在高中,不屑什么高考,在读书对付高考这件事情上,没有花费什么心思,压根就没去想考个大学有什么卵用,只是大家都在考,算了,关键时刻读读书吧。
在厦大读书的时候,也不时感觉,这学校有啥好的……然而,现在稣想说,好险啊!好歹读了个 985 的学校。
回首过去,是为了看清未来。
]]>听 Michael Jackson 的歌,被老师公开反对……而且 MJ 还被翻译成了“杰克迈克逊”。
学点美国人的东西,被说稣已经被完全西化了,崇洋媚外。
高中依然不靠勤奋,我行我素,辅导书都不买(穷,也买不起),课外书看得比课本多,然后被老师们撕逼:你自己这样就行了,不要带坏别的同学……
呵,稣影响别人的方式,只是做好自己而已。然后老师就开始给稣灌输一个词,叫做“换位思考”,另一些同学也听腻了这个词。每次老师说到这词,稣总觉得莫名其妙。
现在如果有老师这么教育孩纸——“piapia”,稣替大家扇他们几个耳光。在稣看来有这些理由:
人都是不一样的,不同学生有自己的成长和思考方式,要换位思考,为什么不是老师换学生的位置去思考?老师是有当过学生的,学生可还没有当过老师。
学生没有老师的阅历、社会地位,无法使用老师的脑子思考。
即使有天才,能够感同身受模拟“老师”的角色,可是这么换位对他有什么好处呢?
简单地说,能够成功换位的情况,一般是高位换到地位去思考,强求低位去思考高位,很难。我们有句话叫做“拿着卖白菜的钱,操着买白粉的心”,多累啊。所以说,老师,您这么玩,可是有点不厚道滴哦。
但是,换到工作中,情况就有点不同了:
换到高位去思考,要是思考成功了,思想境界就提高了;
考虑对领导的心思,并做好事情,是有利可图的。
所谓适者生存,并不是强者,也不是智者,而是能够适应变化者。在新的关系中,怎么逆转、改进不适应的旧思维方式和知识,值得思考!
]]>您的手下,恪尽职守做好了本职工作,开发的产品也顺利上线,年底了,他要求加薪超过了公司的普调额度,您是给加还是不给加?
作为感同身受的低薪族,稣给出了很人道的错误答案:加吧!
相信有很多人也会迷惑,自己明明干了很多活,加薪却总是不给力(内心:除了工资,都涨了……),让他来回答这个问题,肯定是:加!加!加!
然而,正确的做法就是:不加。只能加绩效、年终奖,而不是固定薪水。
打工者往往会根据自己的工作强度、自己的收支情况、同学朋友的水平等,主观地认为自己应该多少钱合适,并且是尽快实现。而管理者,看的是您的价值裁定薪水,价值这个属性是有长期性的,而根据工作表现裁定的是绩效。回到题目中,“恪尽职守做好了本职工作”,这个是本来就应该做的,您的作用并没有改进,您的价值也没有改进,所以只能根据公司规定的普调额度加,不能超过,该激励的部分放在年终奖里。
**那什么时候特调加薪呢?**也有很多情况是可以加得给力的,比如:
职级提高了,包括工作经验多了技能熟练的升级、从一个 coder 升华到了 architector、从小兵进化到 leader 等,您的作用从独善其身变成可以提高团队素质,这是您价值提高的表现;
您一怒之下提出了辞职威胁,但还没有适当的替补人选,这种情况其实胜算不多,而且偶尔加完留下了,接下来也可能遇到麻烦,建议不到万不得已少用;
您从一个犹豫不决随时打算拍拍屁股走人的观望状态,到您打算在这里安定地长期干下去,并且您的能力能够被认可,委以重任或核心业务,通过了时间的考验后自然会加得比较给力。
希望了解这些规则,可以对大家的加薪有微薄的帮助。
]]>赞成的人,或多或少带着点情绪。对此,稣是中立派,回不回和是不是群发无关,要看它本身需不需要回、和稣关系大不大、稣有没有足够时间回、稣回了是不是对对方造成困扰。这些应该都好理解,“是不是对对方造成困扰”这个特别解释一下,有一种情况就是微商群发问今天要不要来一份 XX 套餐?如果基于人道主义关怀,回复“不要”,那对方还需要看这条消息,然后心理从惊喜到失落……所以,稣还是忽略了。
对私人信息,回不回看心情也是可以的。在工作中,对群发的邮件,也看心情就不好了。然而,现实中却有不少人,是习惯忽视的,甚至心情好时也不回。
这种心理十分好理解,群体发福利的时候,都去参一脚,群体需要个体出力时,就有人会隐藏在群体背后不吭声了。 **心理学上有专业术语叫做“责任分散效应”或“旁观者效应”。**表现就是责任人越多,越没人担起责任。很典型的例子:老人倒地无人扶、深圳女白领地铁口猝死 7 人路过无人敢扶。
有两个启示:
领导群发邮件布置任务时,收件人应该尽量少,其他相关人应该放在抄送人。
能够克服“责任分散效应”,勇于揽起责任的人,往往会受领导青睐。
在写这篇的时候,搜到一篇《责任人越多,越没有责任感》和稣想说的很类似,大家可以参考一下:
]]>1964年3月13日夜里,美国发生一起凶杀案。年轻女子朱诺比白在回家的路上遇刺。在这个过程中,尽管她大声呼救,她的邻居中至少有38位到窗前观看,但无一人来救她,甚至无一人打电话报警。
这件事引起社会轰动,也引起了社会心理学工作者的重视和思考。人们把这种众多旁观者见死不救的现象称为“责任分散效应”,也称为“旁观者效应”。
心理学家实验和调查发现:这种现象不能仅仅说是众人的冷酷无情,或道德日益沦丧的表现。因为在不同的场合,人们的援助行为确实是不同的。当一个人遇到紧急情况时,如果只有他一个人能提供帮助,他会清醒地意识到自己的责任,对受难者给予帮助。因为他见死不救会产生罪恶感、内疚感,这需要付出很高的心理代价。而如果有许多人在场的话,帮助求助者的责任就由大家来分担,造成责任分散,每个人分担的责任很少。旁观者甚至可能连他自己的那一份责任也意识不到,从而产生一种“我不去救,别人会去救”的心理,从而造成集体冷漠的局面。
核心理念 如果是单个个体被要求单独完成任务,责任感就会很强,会作出积极的反应。但如果是群体共同完成任务,群体中的每个个体的责任感就会很弱,面对困难或遇到责任往往会退缩。因为前者独立承担责任,后者期望别人多承担点儿责任,其实质就是人多不负责,责任得不到落实。
应用要诀 领导者将任务交给某个团队时,一定要指定负责人,责任要分到具体的某个人,出了问题直接跟负责人交涉。否则就会出现责任分散的现象,任务得不到执行。团队完不成任务的时候,想让批评变得有力,就要让批评变得具有针对性。
《中国教育报》2013年4月14日第2版
为什么加班很流行?
列举加班的坏处:
于是乎……工作狂领导出了一招,他自己在公司耗着,以身作则,让手下不敢轻举妄动。完美解决了这三个问题!他精力过剩,他只喜欢工作,他亲自盯着,不给加班费。
您可能会说要同时满足这几点也不容易啊!然而实际上这种人很多,尤其是 70、80 后,而且老板最喜欢了,他们有很多机会上位……
不管您愿不愿意,以上就是回答了“为什么加班那么不人道,却依然盛行”。人病了,企业自然也要病。
为什么长期加班是一种病?
有些城市生活节奏很快,有些比较慢,这是由人文、地理环境等复杂因素造成的,养成每个省市各自的特点。公司也一样,有的节奏很快,比如创业公司,早期员工激情四射,脑子转得很快,一天下来肚子都饿得快。这时候他的工作效率明显是很高的。而一些公司节奏很慢,员工普遍工作效率和有效性都低。
对于一个正常水平的人,从慢城市到了快城市,适应期过了后,他的节奏就是变快了。在公司也一样,慢公司跳槽去快公司,只要适应了,他就是提高了工作效率。
那么,如果有领导要您加班,是因为您工作效率低,不得不延长工作时间。我们可以分析出个人和公司两方面的原因:个人水平太低,公司节奏太慢。
个人水平低,需要恶补,以跟上别人,所以要一轮加班,这没错,但如果变成了长期加班还跟不上,那您除了承认自己不行之外,还可以换个工作试试。当然,也有一种工作就是拼时长的,如果是这样,那没有加班费就说不过去了。
公司没有提供一个适当的节奏,这是公司的问题,慢节奏可能是因为结构复杂,沟通系统无效等。毕竟每周 5 天,每天 8 小时,这是约定俗成的,有合约保护的,如果在这契约之上,公司没有办法保证员工的效率,是不是应该反思一下,像那些节奏比较合适又没有人长期被逼加班的公司看齐?
病态的加深
下面要说的理论依据有点像“市场经济”的概念。
市场经济(又称为自由市场经济或自由企业经济)是一种经济体系,在这种体系下产品和服务的生产及销售完全由自由市场的自由价格机制所引导,而不是像计划经济一般由国家所引导。
市场总是自然趋于平衡的,往极端上说,假设有一个公司完全不用加班,那它一定很受欢迎,有很多人来应聘,这其中就可能有一些是来混日子的,我们假设这个公司很健康,那么它一定有一种机制保证大家的效率,不然长此以往这个公司很可能会因为竞争对手都在加班赶超,而最终倒闭。不过闭着眼睛也知道,这个机制的代价会很大,比如说只招聘工作狂,那这个招聘的难度就很大了。比如说有一些监督机制可以发现谁偷懒,有一些奖励机制去激励工作效率高的人,甚至,有一些保姆、很多文员、助理来协助重要人物,以保证这些人只做重要的工作。涉及到太多的成本,不得不让人放弃美好的幻想……
就目前这个时代,加班还是常态,也是处于目前的平衡。完全不加,太冒险了,怕你对手又聪明又勤奋,而且感觉也不够积极向上。加太多,有病,长期下去要变傻。
加多少要看天分的
不怕别人比你聪明,就怕比你聪明的人还比你勤奋。
如果您确实不够聪明,那比较容易做到的讨领导欢喜的做法,可能就是加班了。对于领导,他观察您听不听话,最快的方法也是您加班多吗……
当然,这又是平衡的问题,如果您很聪明能干,那您可以加少点。对领导看来,反正你够聪明,活能干好,确实没有必要计较加班时长。
然而,领导怎么知道您够不够聪明,这又是一个问题。是问题,就有解决的成本。如果他管理着大量的人,那么最简单的方法还是——建议大家加班,您智商要是不够,让您去增加智商也是难题,但加班就相对容易了,任何人都可以做到。
总结
加班加出病的公司都是什么样子的?一群杂鱼,可能也有精英,但结构混乱,无法发挥最佳状态?一群低能儿,只能笨鸟先飞?一个管理层变态压榨员工时间的不人道公司?
不造有没有人中枪了?稣目前感觉良好,偶尔加班,只要项目急需这都不是事儿。
最后,想说“很多道理似乎都懂,但没看人写下来似乎又不懂。”本文写完,稣自己读过都觉得太罗嗦了点,确实写得不好,但不管如何, 稣写出来了,这才是重点。
]]>写作是对思维的检视,成文的过程你会更谨慎地验证自己的想法是否正确。成文后,作者也要接受来自读者的审视。
写作可以帮助后来者,帮助别人,很多时候会得到回报。我们工作中经常会搜到别人的技术博文,学习他们的经验,同时如果发现错误也会评论给作者,双赢才是好局面。就拿在公司里的情况来说,你多写作,多帮助别人,大家也会认同你的人品和能力。稣曾经听过一种负面的说法:你和别人说太多,别人都学走了,就不需要你了。其实,这低估了职业生涯的长度了,在职业长跑中,核心竞争力是自己的实力,而不是对手很弱。另外,在团队协作中,我们更怕猪队友,而不是神对手。怕别人学走,这种思路,应该是拿去对付(潜在)竞争公司的,而不是自己的团队。说句题外话,其实只有核心技术是需要保密的,很多工具类、基础类,并没有保密的价值。
写作可以记录功绩。有不少人和稣抱怨,自己干了很多事情,结果功劳被人抢了。说实话,这个现象大部分公司都有,我们也不例外,但有句话说得好,高调做事,低调做人,那些说功劳被抢走的,是不是没有做到这点?稣在上个公司时,作为一名小兵,就自主地每周发工作报告给全体组员,并且一直坚持到现在。成果应该是有的,稣从来没觉得自己的的功劳被谁抢走。
写作是对自己负责,也是对团队负责。从上级的角度看,如果手下能够主动汇报工作,并积累技术文档,这很明显能够说明两个问题:他有干了这些活;他能够把怎么做的解释清楚,说明他是打算长期在这个公司发展。即保住了自己的功劳,又宣誓了忠心。有些比较傲娇的年轻人并不喜欢誓忠,他们觉得利益才是关键,稣认为誓忠更多是对自己负责,自己选择的工作本身都是要做好的,誓忠的关键是告诉上级,你已经进入角色,可以稳定地发展了,并不是要讨好某位特定的上级。誓忠的好处也是很大的,毕竟没有领导会把核心业务交给可能明天就会辞职的手下,更不可能提拔这样的人。
写作是一种延续生命的方式,好的作品往往比作者本人更长寿,最好的例子就是古典名著。稣认为,技术人员写作,其实是加固、延长自己的职业生涯。
]]>羊尾年牙:乱序手法,主要突出了阳痿。
日下单身狗:如下图。
《诗盗·遇见》的下篇。
]]>学点英语:
get laid
friend with benefit
改编自《增广贤文》之《劝学》:
学林探路贵涉远,无人迹处偶奇观。
自古雄才多磨难,从来纨绔少伟男。
书山妙景勤为径,知渊阳春苦作弦。
风流肯落他人后,气岸遥凌豪士前。
常见的一个改编:
]]>未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
醉生梦死谁成气,拓马长枪定乾坤。
挥军千里山河在,立名扬威传后人。
最近厦门也沦陷了……不带个空气净化器去公司,都觉得没法活了。
]]>先到 http://www.xcloud.cc/download.shtml 下载“路由助手”,然后到 OpenWRT 官网下载 ROM,推荐用 trunk 上的(目前是 dd),因为 bb 和 cc 都没有集成 kmod-mt76(当然你自己手动安装是可以的,opkg install kmod-mt76),下载链接:http://downloads.openwrt.org/snapshots/trunk/ramips/mt7620/openwrt-ramips-mt7620-y1-squashfs-sysupgrade.bin。目前刷完是 OpenWrt Designated Driver r47548,5G WiFi 没问题。
由于是 trunk 版,luci 可能要自己安装,请参考文章《跟 UMU 一起玩 OpenWRT(入门篇7):安装 LUCI》。
存在几个问题:
刷完,三个网口顺序和原版是颠倒的。
5G WiFi 设置参数后似乎没有办法立刻生效,UMU 都是 reboot 一下解决。
互联网+打嘴炮
]]>道德在这里是使能动词。
]]>每月一次股灾,某些股渣的写照,赫赫。
]]>参观某高档小区有感。
]]>做加速时经常需要用到 HTTP Echo Server 来测试加速有没有成功,如果成功了,是显示请求来自加速代理服务器。原来用 node.js 写了一个,代码如下:
1 | var http = require('http'); |
既然在学 Go 语言,就用它写个新的吧!功能要更强一些。
稍微改进一下:
1 | package main |
改编自唐代诗人张志和的《渔歌子》。
]]>西塞山前白鹭飞,
桃花流水鳜鱼肥。
青箬笠,绿蓑衣,
斜风细雨不须归。
改编自宋代诗人苏轼的《题西林壁》。
]]>横看成岭侧成峰,
远近高低各不同。
不识庐山真面目,
只缘身在此山中。
公司搞了一套兼容 Amazon S3 的云存储系统,用 C++ 写客户端很蛋疼,UMU 决定还是用 go 写一个。
先找一个靠谱的开源项目,运行以下命令安装:
1 | go get github.com/mitchellh/goamz |
它内部还用到 github.com/vaughan0/go-ini
。
看一下库带的例子:
1 | package main |
要改的地方不多:
认证方式可以改为 aws.GetAuth,但这样容易暴露 AccessKey、SecretKey,所以 UMU 下面贴出的代码还是使用 aws.EnvAuth()。
aws.USEast 改为我们自己的。
UMU 尝试添加列出所有文件的功能。
1 | package main |
效果如下:
参照对象:
]]>测试需要,以前用 C + libevent 写了一个 TCP Echo Server,返回服务器时间、客户端地址信息和客户端发送的原内容。为了水一篇,现在改为 go 语言实现。
主要使用 go 语言自带的 net 库,学习资料:https://golang.org/pkg/net/
1 | package main |
改编自霹雳角色道境玄宗六弦之首苍的诗号。
]]>倚筝天波观浩渺,
苍音掀涛洗星辰。
白虹贯日荡魔寇,
明玥当空照古今。
急性短暂性精神障碍
]]>改编自宋朝诗人文天祥的《过零丁洋》:
]]>辛苦遭逢起一经,干戈寥落四周星。
山河破碎风飘絮,身世浮沉雨打萍。
惶恐滩头说惶恐,零丁洋里叹零丁。
人生自古谁无死,留取丹心照汗青。
中途就掉下去不少人,后来稣就走到了中间的一个房子门口,一个白衣美女走了出来,一看居然是稣的盆友,就是浑身丰满了许多,她问稣干嘛来参加这个活动,稣一时愕然,稣只是想回家,哪有参加什么活动。她说,这个活动还有两关,她就是最终奖品之一,活动是为了竞选男优……
卧槽,原来如此,难怪那么多人来爬吊桥,稣吓尿了。她还说,可以先让稣插,不过不能让主办方发现了,于是稣就插了……咳咳……队,先过去倒数第二关,从房子门口跳到下面的沙滩去,大约 4、5 米高,稣觉得一点都不难就跳了,果然没事,但其他人有的却挂了,原来沙子里是有钢条的,不小心踩到,脚就挂了。
稣想太危险了,最后一关肯定更危险,算了,赶快退出保命。蛋似水路已经走了一半了,再回去也有难度,好惨,肿么办?
难不倒稣的,催动强大的意志力,直接唤醒大脑、小脑以及脑干!
]]>这时候,神奇的事情发生了,居然来了几个政府机构的人,说稣的行为表现了一种可贵的精神,要表彰,请稣吃饭。
饭局上好多有钱人或者有权人的样子,坐稣右边的一个中年帅哥说自己是某公司老板,语气有点屌,听说稣只是用手走了 1800 步就被请来吃饭,有点看不起稣的样子。蛋似稣还是和他聊了聊,和他说老板稣认识不少,举了 6、7 个,可能都是科技界的,他都没听过……
他表示自己很忙,要走了。这时候,意外发生了,当场有一个胖子,突然掏出枪来,控制了局面,而且外面都是他的人,整个酒店都被包围起来了。刚才几个很屌的人都吓尿了。只有稣很淡定,穷逼一个,你抓稣也没神马卵用啊!
然后,所有人都被关到一个城中村里的一个别墅,稣试着逃跑,但这个村很像一个迷宫,怎么转都出不去,而且看似是出口的地方都有人把守。不过这个别墅本身没什么人管,感觉胖子是想和我们玩什么游戏……
其他的大人物们,个个都不敢离开别墅,稣回来和他们说明情况,其实是有可能逃脱的,但他们都不敢想,原因竟然是稣离开的时候,里面有一个吓坏的想逃,结果被打死,拖走了!
这时候胖子来了,说自己是个魔术师,只是想找灵感。稣想,坑爹啊,找灵感你玩绑架!?然后就告诉他,稣有个魔术,你绝对会说好。
一台大型可口可乐饮料机牛逼闪闪地开过来,稣一声令下,可乐和方糖大量混合,炸了出来,把那个胖子喷成落汤鸡,稣立刻过去把他的枪抢了。其他人拼命鼓掌……
声控智能家居果然牛逼!
]]>奔腾,日立,微软,松下,联想……赫赫,无蛋的太监自然只能联想!
本诗创作灵感来自一则新闻:男子被诊断阴茎癌 切除后发现系误诊
再强调一次:男子被误诊阴茎癌下体遭切除 切后送检是囊肿
重要的话说三次:误诊导致鸡鸡被切了!
天朝特色……化工材料加止泻药,都不怕被 JC 抓?
]]>安装 1.5 时,直接覆盖 1.4.2,结果不能用了,报错:
imports runtime: C source files not allowed when not using cgo or SWIG
删掉 go 1.5……然后修复安装一遍。
加了计时功能,纯属蛋疼。
学到一个不占空间的 struct{},map[string]bool 改为 map[string]struct{}。
1 | // UMU @ 2015-08-17 11:30 |
中大奖:隔壁桌点个鸽子吃出寄生虫……
]]>go 即将发布的 1.5 版解决了 GC stop-the-world 问题,所以 UMU 打算以后用它来开发工具。
最近想统计代码行数,以前用 VBS 写的一时间居然找不到,直接用 go 写一个。
基本从零开始用了大约 4 小时完成,可见 go 对初学者相当友好。具体经验和心得:
go 的 runtime 居然没有 set,只能用 map 代替了,一开始觉得不优雅,不过想来也差不多,不计较那么多了。
语法还确实挺简洁,第一次练手就感觉学这个语言,其实是在学它的规范,语言本身很容易。
defer 挺好用的,简洁、省心,比如这个核心函数:
1 | func CountLine(path string) (num int) { |
gofmt
自动按字母顺序排列库名,这样省得纠结顺序……刚刚接触,就说到这里,最后附代码。
1 | // UMU @ 2015-08-17 11:30 |
大波:double
]]>股市有大风险……
]]>改编自霹雳角色“百世经纶一页书”的出场诗。
]]>世事如棋,乾坤莫测,笑尽英雄。
改编自霹雳角色“不二做”的出场诗。
]]>杀人不放火,造桥不铺路,报恩报酬不二做。
魅蓝骄:闽南语,no jb。
稣用 Lumia 830 + iPhone5C 双机流。
《#诗盗#·暴跌三首之二》:朝开微红绿云间,千万盈利一日还。股市跌声啼不住,楼下已堆尸成山。
《#诗盗#·暴跌三首之三》:别人笑我跌停板,我笑他人用杠杆。只见股民灯油枯,无言无语给跪舔。
炒股太危险,戒了戒了……就打打嘴炮。
]]>披碧玺太危险,戒了戒了……就打打嘴炮。
]]>市盈率超过 2000 了……当年 9 块不到买过,现在尼玛都 4 倍了……
]]>涝塞:拉稀,拉肚子,稀翔
后:雨
出日:晴天
无半波:没半晌(没半天)
鬼日给落后:整天都下雨
大行浸巧奇:所有的东西都湿湿的
通通笼生菇:全都发霉了。
壕秒可胜精兵……
]]>这个基友很牛逼,炒股赚钱买车买房,赫赫……
]]>这句话还是有一定道理的:员工工资最高时,企业成本最低!
赫赫……
《#诗盗#·在这里开车的还是屌丝2》:马路两边见缝塞,吃灰淋雨不曾改。烈日岂止添风味,敢问致癌不致癌?
怎么定义屌丝?当然是和圈子的人比。稣曾经骑着 ATX780 去小店吃饭,被小弟狂佩服,骑着三千块的车,蛋似和那些动不动上万的自行车比,简直弱爆了。在软件园这种高端的地方,大部分人究竟处于什么地位呢?答案很明显:屌丝……撸十二……
上下班高峰期,赌成翔的车山车海,管你奔驰宝马路虎卡宴。就算您躲开了高峰,以为就轻松了?地下停车位是按照公交车的载客量设计的,大家都开小轿车,当然严重不够用。每天都看到大量豪华新车暴晒、淋酸雨,十分蛋疼。
搞基:和基友去健身。
不敢走有狗的路了……
差点被狗咬成狗……
]]>乳就是小。
]]>今天中午蛋疼经过一家小店,心想好久没吃这种小店了,进去试试算了。
后来一群厂妹进来,看样子是三队,其中一队四个人,就点了三份主食一份汤,老板娘很不爽地说,他们店的汤是一人份的,然后她们就加了一份……
接着稣听她们聊到卖肾……虽然是开玩笑的口气,但很明显她们确实很穷!
不过有意思的是,她们中有胖有瘦,虽然都吃得很少,这说明胖和饭量无关啊!!
2006 年毕业于厦大时,触景生情想到了一句“芙蓉情梦凤凰泪”,一直想不出最后一句怎么对,转眼九年过去了,岁月无声偷走许多回忆和情怀,如今只能无奈地对出这最后一句。
芙蓉:厦大芙蓉湖
情梦:情人湖畔畅谈梦想
凤凰泪:凤凰花开毕业离别时,总有人忍不住落泪……
2008-04-10 23:58:30 草稿原题《凤凰花之恋》,只写了三句:
]]>千缕相思千缕愁,
几天痴狂几天恨。
芙蓉情梦凤凰泪。
从万达把给小丸子的儿童学步车和小馒头提回来,运动量又足够了,一路走一路写诗,不知不觉就回来了。
海边生鲜山上干:海边的人很容易吃到新鲜的海产品,但是到了山区,就只能把它们晒成干储存了。
山上猛兽城中餐:山上的猛兽在它们的地盘可能是很威猛的,但是到了城里,不过是盘中参。
万物随波稣性坚,有车不开徒手搬:万物都有随波逐流的天性,每到一个新地方都要做相应的屈服,但是稣意志很坚定,及时买了车,还是喜欢暴走,偌大的一件儿童学步车,从三公里外徒手搬回来了。
被应试教育洗过脑的一代,成长路上每每发现自己被欺骗。
从农村迁移到城市,生活环境变好了,但是却也从熟人社会变成生人社会,城市里大部分邻居都不认识,各自奔波忙碌,很少闲来交友论道,只能等退休了再去交朋友了……
乐射网:乐视网(300104),这种炒作股,尽量不要碰!
中国品干:中国平安(601318),这个最近绿了些,但长期安全,可以买点。
炒股心得:要耐得住寂寞~
]]>启示一:闲置资源不会产生价值,但把它送给有需求的人,就有机会转化为有效资源。
启示二:互联网时代,要不断进行思维创新。
这个段子其实是由真实故事改编的,请搜“业主提供免费WiFi 蹭网保安巧遇小偷”。
但如果真这么干,风险还是有的,稣也改编一个:
一土豪,每次出门都担心家中被盗,苦思良久得一法:把家中 WiFi 修改成无密码,然后放心出门。每次回来都能看到保安捧着手机蹲在家门口,从此无忧。但有几次无线路由器挂掉了,保安请求进门维修,把富翁的 WiFi 修了,修多了后,顺便把 Wife 也修了……
启示:路由器的稳定性是至关重要的,买个稳定的路由器是多么重要!稣推荐**牌土豪专用路由器。(欢迎广告商与稣联系插入广告)
]]>炒股心得:有时候只是运气而已!
]]>园工:大花园里的员工,KJ 文化。
]]>急特:git
]]>来自 KJ 民间的声音……只能呵呵一笑而过。
]]>其实很欣赏老罗,不过事实面前,该喷的还是喷一下。
顺便说一下:不喜欢锤黑刘翔。
公司推行办公电脑装 360,引来一片苦水和吐槽。
]]>纯装逼,买车都是全款付了,还剩几百万……
]]>听基友们说 BYD S6 还不错,虽然不买,但可以 YY 一下。
]]>新闻《女大学生乘坐黑车遭轮奸》读后感……
]]>在软件园很容易看到豪车停在路边晒,估计是最近才暴发,或者死要面子活受罪。上班都要路过两个地下车库,里面有不少好牌都是挂在烂车上,当然也有宾利配好牌。
]]>有感于很多女生喜欢发自己在车里的自拍照。
]]>组建文件共享服务。
文件共享可以通过 FTP/FTPS、SFTP、NFS、Windows 文件共享(网上邻居)。其中 FTP/FTPS、SFTP 需要先下载,无法“直接打开”,实用性较差就不介绍了,重点放在 Windows 文件共享,最后再简单介绍一下 NFS。
OpenWRT 使用 samba 提供 Windows 文件共享服务。如有条件应该使用 samba4,安装命令为:
1 | opkg update |
参考:
【硬创邦】跟hoowa学做智能路由(十一):实现网络存储与文件共享 的“安装 Windows 文件共享”章节。
如果配置后,无法正常访问,您可以参考一下《Windows 7 无法访问 NAS 或 Samba 服务器之解决》。
NFS 和 Windows 文件共享是两大文件共享服务,NFS 在 Linux 设备之间的传输效率高于 samba,但大部分客户端都是 Windows,所以 UMU 更推荐 samba。
参考:
OpenWRT 安装 NFS 服务端:官方文档 Network File System (NFS);
Windows 安装 NFS 客户端:《win7 中使用NFS共享》。
您需要准备一台有固定外网 IP 的服务器,UMU 使用的是某某云主机(避免广告嫌疑就不说了,呵,广告位招租),如果不想出钱购买,可以用家庭 ADSL + 动态域名代替,效果可能差一些,但基本可用。
为了更清晰地说明,列一下各个角色:
控制端:UMU 的笔记本,不管在什么网络,都要求能够连接到放在公司的路由器;
中转服务器:一台某某云主机,固定 IP,用 cloud_ip 表示;
被控端:放在公司的路由器,内网 IP,用 internal_ip 表示。
基本原理:让被控端主动连接中转服务器,然后控制端连接中转服务器,就可以间接连接被控端了。
被控端安装、设置,主要参考:http://wiki.openwrt.org/doc/howto/autossh
1 | opkg update |
把上面最后一行命令的输出复制下,注意只有一行,待会儿要上传到中转服务器。或者也可以把最后一条命令改为打印到文件,再用 WinSCP 下载到本地。
1 | dropbearkey -y -f /etc/dropbear/id_rsa | grep ssh-rsa > /tmp/pubkey |
查看一下 autossh 配置:
1 | uci get autossh.@autossh[0].ssh |
如果没有问题,就把中转服务器的信息设置上去:
1 | uci set autossh.@autossh[0].ssh='-i /etc/dropbear/id_rsa -f -N -T -R 2222:localhost:22 <user>@<cloud_ip>' |
接下来登录到中转服务器(Linux Server,如果是 OpenWRT,要把以下的 ~/.ssh/authorized_keys
换成 /etc/dropbear/authorized_keys
),把公钥(/tmp/pubkey
)上传:
1 | echo "key 内容" >> ~/.ssh/authorized_keys |
/etc/ssh/sshd_config
需要打开的有:
1 | RSAAuthentication yes |
到路由器上测试:
1 | ssh -i /etc/dropbear/id_rsa -f -N -T -R 2222:localhost:22 <user>@<cloud_ip> |
如果成功则大功告成,以后只需要 ssh 到中转服务器的 2222 端口就等于连接到路由器了。最后配合本地端口转发,可以连接很多内网机器了。如下图:
再加一台路由器,用于做本地端口转发,就可以让 Surface、iPad 之类的设备也能快乐地穿透到内网了。
]]>有感于锤子因为产能问题各种二逼……
]]>刚到就天黑了,直接去住宿,尼玛…是一个大房里有小房间,看起来是民宅,所以比较便宜,男同事B习惯早睡,居然直接倒头便睡…稣撸撸手机,熬一下睡,结果听见A大叫有鬼啊!然后吓跑逃出…
稣和B都起来了,表示鬼你妹啊,玩我们?B说无聊,继续睡了!好淡定,哈哈!
然后稣,见A好久都不回来,电话也不通,开始担心,就去大厅找工作人员帮忙,工作人员说可能两个女生出去逛街了吧!然后稣一惊,什么两个女生…一看住房登记才知道我们是两男两女入住,还有一个女同事C…吓屎了,稣給她打电话,铃声从床底传来,啊…原来她被A杀了,然后立刻变鬼来报复A,嗯,好合理的剧情,反正不是稣干的,稣就安心地睡了。第二天醒来,才知道,只是一个梦…
]]>在《跟 UMU 一起玩 OpenWRT(入门篇8):网络摄像机》介绍的 mjpg_streamer 并不能传输声音,所以有了本文!
http://forum.anywlan.com/thread-282658-1-1.html
硬件还是选用微软 LifeCam HD-3000,您也可以去淘个便宜的带麦克风的 USB 声卡。
1 | opkg update |
如果您打算使用 ogg 格式则安装 ices:
1 | opkg install ices |
用 mp3 格式则安装 darkice:
1 | opkg install darkice |
ices 的配置文件(ices-oss.xml)可以去官网(http://www.icecast.org/ices.php)下载整个压缩包,里面有。
由于涉及声音编码,需要大量计算,经过实践,CPU 才 400MHz 的 DIR-505,无论是 ogg 还是 MP3 格式都卡成翔……
请用配置更好的路由器测试,比如如意云 RY-01 的 CPU 是 600MHz 的,勉强可行。
]]>买了一个微软 LifeCam HD-3000,已经过了视频聊天的年纪,插到 DIR-505 玩一下吧。
安装过程出奇简单:
1 | opkg update |
如果安装失败,看看是不是固件应该升级了,请参考《跟 UMU 一起玩 OpenWRT(入门篇5):升级固件》。
插上摄像头,检查一下 /dev/video0 是否存在,如果不存在,reboot
一下,如果存在,接下来安装和运行应用:
1 | opkg install mjpg_streamer |
其它可选输入参数,例如:
-r 320x240 设置分辨率为320x240
-f 10 设置刷新率
设置用户密码,加输出参数:
-c user:password
打开浏览器,输入 Mhttp://192.168.1.1:8080/,如果没问题,参考网页上的说明操作即可。
由于 DIR-505 性能一般,效果可能不理想,建议在更高配置的路由器上尝试。
]]>玩了好多个路由器,有传统,有所谓智能,还是比较赞赏如意云,相反的,之前已经吐槽过小米和圾路由。下面就来说说如意云的好处吧!
生态完善,支持的移动设备多,连 WP8/8.1 都支持了,UMU 主要手机是 Lumia 822,这个很满足,还有 PC 客户端,方便 PC 和移动设备之间同步数据。插件齐全,虽然很多插件没具体玩过,但至少看数量是不输圾路由的。
很好滴继承 OpenWRT 的开放性,天生 root 了,或者专业点说,SSH 服务没关闭,直接连,省去很多烦恼,用小米或圾路由,老是怕一升级就要重新 root,好讨厌的感觉……还可以刷 PandoraBox:http://downloads.openwrt.org.cn/PandoraBox/RY-1/
性价比不错,RY-01 才 81 元,从配置、功能、稳定性来比,差不多价位的传统路由完全不必考虑了。虽说运行内存和外壳材料方面不如圾 1S,但 USB 接口带来不少扩展性是圾 1S 没有的,而且 1S 要 109 元。
观其高配版 RY-02 配置也不落人后,后劲十足。
这不是广告:要买的话,千万不要去迅雷商城,那边是 99 元,苏宁还是 81 元。
很丑……一股廉价感,还真是对得起价格;
如意云的 WiFi 密码不能用,.#&等特殊字符,好撒币的做法……
WiFi 信号不如极路由 1S,虽然差距不大,但 UMU 还是通过实测数据挖掘出这个真相。
有感于身边各种奇葩青年,各行其道。
]]>圾路由确实乐射……法语叫做 La 圾路由。
]]>1 | opkg update |
推荐使用 SSL 版本,比较安全,但比较大,如果装不下可以试试不带 SSL 的:
1 | opkg install luci |
您可能不习惯默认的主题(luci-theme-bootstrap),Flash 够大的话,还是装个常用的:
1 | opkg install luci-theme-openwrt |
开启服务:
1 | /etc/init.d/uhttpd start |
设置开机自动运行(不推荐):
1 | /etc/init.d/uhttpd enable |
有感于古割被墙,不少人用红杏来出墙~
]]>DIR-505 有一个 USB2.0 接口,给它带来了很大的扩展性,我们可以插 U 盘、移动硬盘等,来做文件共享,或者离线下载等。接下来就先搞定 U 盘,主要参考资料:http://wiki.openwrt.org/doc/howto/usb.storage
1 | opkg update |
1 | opkg install kmod-fs-ext4 |
USB 辅助工具、分区、格式化工具,这些非必要,看情况安装:
1 | opkg install usbutils fdisk e2fsprogs |
不插 U 盘时,输入 lsusb
,显示如下
1 | Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
插入 U 盘后,再 lsusb
,发现多了一条,这说明工作正常:
1 | Bus 001 Device 002: ID 0603:0908 Novatek Microelectronics Corp. |
如果 U 盘需要重新分区,请用 fdisk
,这里不具体介绍,也可以在 Windows 上用 diskpart
完成,如果您还在路由器上操作,可以参考这个:http://www.leiphone.com/diy-a-smart-router-topic-increase-memory-3.html,第一步: 对设备进行分区。
分区完后,查看一下 /dev 目录里有没有出现硬盘符和分区符:
1 | ls /dev | grep sd |
上面装了 ext4 文件系统的驱动,因为这个对 OpenWRT 最合适,如果原来不是这个格式,那么安装了 e2fsprogs 后就可以用下面命令格式化了:
1 | mkfs.ext4 /dev/sda1 |
接下来用 mount 挂接,头尾行是必须,中间的三行是一种防止未挂接好就被写入的机制:
1 | mkdir /mnt/usb |
到这里就可以通过 /mnt/usb 来访问 U 盘了,不过工作才完成一半而已……下面还要让 U 盘能开机自动加载,主要参考:http://wiki.openwrt.org/doc/techref/block_mount 和 http://wiki.openwrt.org/doc/uci/fstab。先安装程序:
1 | opkg install block-mount blkid |
如果您比较珍惜存储空间,可以不用安装 blkid,block-mount 就行。用 blkid
或 block info
,查看分区的 UUID。比如用 blkid
,则 UMU 的 U 盘是显示:
1 | /dev/mtdblock7: TYPE="squashfs" |
接下来输入 block detect
查看一下:
1 | config 'global' |
生成配置文件,并把上面的 target 改为您想要的,enabled 值改为 1:
1 | block detect > /etc/config/fstab |
本文介绍的都是精简过的必须操作,其它可选项请自行参考:http://wiki.openwrt.org/doc/uci/fstab。
]]>OpenWRT 的主线于 2014-06-19 06:07:37 UTC 更新了固件,如果不跟随升级,安装内核模块时会失败,比如以下命令:
1 | opkg update |
升级固件:
1 | cd /tmp |
在上篇《跟 UMU 一起玩 OpenWRT(入门篇3):工作模式开关》中介绍了如何通过 GPIO 读取获得当前工作模式,现在来实现这个开关的功能。
主要配置 rc.local 脚本,内容如下:
1 | read_gpio() { |
上一步加的代码是,开机自动复制配置文件覆盖到 /etc/config/ 下,配置文件不需要全部,只要 firewall、network 和 wireless 就行了。按工作模式命名,创建三个目录:
1 | mkdir /etc/config/ap |
后面,我们会把配置文件写好了,放在这些目录里。
下面以 ap 为例,此模式是网口做 WAN,无线做 LAN,WAN 以 ADSL 接入为例,其它情况自行变通:
1 | uci set wireless.@wifi-device[0].disabled=0; |
再来说一下 repeater,网口做 LAN,无线做一个 AP Client 和一个 AP。注意,以下命令以初始化的配置文件为基础,请事先备份、还原,不要在配置过前面的 ap 模式后直接继续配置,可能会有问题。
1 | uci add network interface |
小米路由比极路由 1S 还早买,但用了一周后就决定把他收起来了……
0.4.58 的版本,下载功能根本不能用,人品真差,同样的种子,1S 就可以下载!有朋友也这样,看来不是个例。
发烧……您说替代 NAS 吧,就一个硬盘而已,缓存还只有 8MB,一天就开机 9 小时左右,每天下班都是暖手宝。
太 TM 贵了,收起来还有点浪费啊!
话说回来,UMU 是看好小米路由的,配置真心高,虽然大部分人不需要,但也提一下优点:
千兆网口啊!高富帅家里怎么能没有千兆独享的宽带?
USB 啊!尼玛,插个 USB 声卡就可以做窃听器了,您造吗?扩展性超高,堪称智能……前提是 root。
信号超好啊!虽然天线内置,但有 4 根啊,秒杀极路由 1S。重点还很稳定,Windows、MAC OS、Android、iOS、WP 各种设备都一起连上来,MAC OS 和 iOS 都不会掉线哦!
11AC 超快啊!干扰少啊!
黑色垃圾桶的造型,让您放在角落也毫无违和感,它真的很像另一个角落的垃圾桶。(风扇有声,放角落才不会吵)
基本全在硬件上:
不贵,性价比不错;
铝合金外壳,体型小巧,散热性好;
MicroUSB 电源接口,停电时可以用移动电源供电(最近宿舍跳闸停电三次,还不得不提一下,这绝对是优点!);
两根天线,信号还行,虽然不如小米路由,但考虑到价格还是过得去。
可以插 SD 卡,这个能秒杀很多传统路由。
主要缺点在软件上:
不稳定,每个开发版都应该吐槽,办公室的 MAC OS 机器一连上来就出现一天死一次的问题,CPU 占用率超高!
定位很忽悠。您说智能吧,只是界面和使用流程得到一点点优化,再说面向极客吧……极客需要那些给小白用的界面?这明显是面向装逼的初级技术人员。一天死一次,就不要说极客了……
服务态度问题。App 不支持 Windows Phone。注册个账号哟手机,然后 UMU 手机换号了,联系了官方客服、在论坛上问了,都不让改,让 UMU 再注册一个账号……逛了几周的论坛,发现各位坛友大部分是小白,所以官方不断发一些扫盲的科普文,品质和逼格都不高,可以说根本没有极客间的交流。
硬件上的明显缺点:
不贴防滑贴在办公桌上很容易滑……设计硬伤!
没有 USB,明显少了很多扩展性,还敢自称智能?
最近有朋友让 UMU 推荐路由器,UMU 还是建议他们买极路由 1S,回来刷 OpenWRT,自己整吧!
]]>1 |
|
按照 OpenWRT 官网资料(http://wiki.openwrt.org/toh/d-link/dir-505#buttons),有一款 DIR-505L 的开关是四个档位的,DIR-505 其实也有,但外壳把第四个档位给挡住了,掰不到。如果您足够蛋疼,可以用刻刀给它开开口……
我们可以在开机脚本(/etc/rc.local)里加入判断代码,根据档位做不同配置,以实现不同用途。
]]>UMU 与门禁的亲密接触发生在 2013-11-13,第二次不小心被关在厕所,忘记带卡,结果出不来,想起第一次是多么惨,最后让住公司附近的同事过来拯救。但总不能第二次又麻烦人家吧!于是开始了研究破解,不到 5 分钟,门就被打开了……
原理:这套门禁系统是直接由刷卡器控制门的开关的,所以在刷卡器这边就可以打开门,不需要经过服务器认证,我们要做的就是找到 OPEN 针脚,把它和 GND 针脚接起来,门就开了。
理论上说,门禁刷卡器很好拆,即使不好拆,一把锤子就能砸烂,所以对入侵者来说,只要具备野蛮和电路知识,破解的难度是相当低啊!
不罗嗦,上图!这是要破解的门禁刷卡器。
徒手温柔地打开……
去掉排线,就可以看到 OPEN 的针脚了:
连接 OPEN 和 GND,门就开了!
]]>这并非是“微软公司”的面试题,而是稣想出来“让人微软”的题。
1 |
|
运行后输出 17(二进制 10001 的十进制 17),解释一下?
返回值是个 Byte 呀!10001 是 0x2711,所以被截断为 0x11,那就是 17。即:
10001 mod 256 = 17
本题设置的陷阱正是“二进制 10001 的十进制等于 17”,误导人真有一套。
]]>刚刚刷好 OpenWRT 的 DIR-505,默认没有开启 WiFi,所以只能用网线连接,连起来后,将电脑的网卡配置为 192.168.1.X,或者自动获得地址也行。
默认也没有开启 SSH,只能用 telnet 192.168.1.1
来连,连上后改 root 密码:
1 | passwd root |
改好密码后,先不要关闭 telnet,因为一关闭,下次就连不上了。马上用 SSH 客户端(推荐使用 putty,文件复制、编辑则推荐 winscp)连一下路由器:
1 | ssh 192.168.1.1 |
如果连接失败,需要在 telnet 会话下开启 SSH 服务:
1 | /etc/init.d/dropbear enable |
用有线连接比较麻烦,接下来开启 WiFi,实现无线连接:
1 | uci set wireless.@wifi-device[0].disabled=0; |
时间都用网络同步,所以使用正确的时区很重要,要改为当地的时区,比如 UMU 使用台北时间:
1 | uci set system.@system[0].zonename='Asia/Taipei'; |
个性化,非必要:
1 | echo 'DIR-505' > /proc/sys/kernel/hostname; |
个性化,非必要:
1 | vi /etc/banner |
新闻《反腐女侠赵红霞》观后感。
]]>UMU 用的第一款硬件是 D-Link DIR-505。首先声明,UMU 不是 D-Link 员工,也不卖 DIR-505,用它完全是当下对比几个可选项筛选后的结果。理由:
本身就是不死 Bootloader,刷坏了固件用网线就可以救,把电脑 IP 设为 192.168.0.100,按住 Reset 开机,Web 浏览器访问 192.168.0.1。前面写的《不拆机给 D-Link DIR-505 刷上不死 U-Boot》完全是蛋疼地研究过程,对一般用户 UMU 建议不要刷,因为没有 JTAG,刷固件本来就不死,不小心刷坏 Bootloader,就只能拆机上编程器了,这明显作死。
配置比较高(相比 TP-Link 坑爹级同价位产品),8MB Flash,64MB RAM,UMU 手头上还有三个 TP 的(TL-WR841N、743N、941N)都只有它一半。有 USB 2.0 接口,743N 的 USB 是 1.1 的。
国内电商有得买,而且价格便宜,UMU 买的时候是 78 块。
小巧,方便携带,随时开撸!
也说一下它的缺点:没有外接天线,所以您懂的,信号必然比较弱,不适合“穿墙”族……然后 RJ45 口只有一个,有时候会不太方便。它最适合的使用场景是研究 OpenWRT、短距离和出差便捷使用。
请自行根据当下情况选择,毕竟新的硬件总是越来越强大,还越来越便宜。
接下来就刷个 OpenWRT 先~目前没有稳定发行版支持 DIR-505,所以要在 trunk 下找,下载目录是:http://downloads.openwrt.org/snapshots/trunk/ar71xx/。如果直接开刷,很可能失败,因为 D-Link 是有锁区的,OpenWRT.org 编译的 ROM 不是为中国版准备的,所以要动一下手脚先。上 WinHex 改 ROM,下面两张图分别是中国版和国际版:
两者只是图片指出的位置不同而已,可以自己改,如果把 OpenWRT 的 ROM 改为 CN 也无法在原厂 ROM 下刷成功的话,可以先找个官方的 DEF ROM 改为 CN,刷一下,再刷 OpenWRT 原版的 DEF ROM。
]]>第一个思路是刷上 DD-WRT 固件,但是找了一下 DD-WRT 木有支持 DIR-505,只好继续蛋疼地编译 OpenWRT。
第一遍在虚拟机从 12:20 编译到 23:56,花费将近 12 小时……刚开始时,有一个下载过程,不断失败,想想是因为公司的网络太烂,于是把下载脚本改了一下:
<openwrt-svn-dir>/trunk/scripts/download.pl 中的 wget -t5 --timeout=20 --no-check-certificate
改为 wget -t5 --timeout=120 --no-check-certificate
第二天来,刷上,没问题,于是开始改代码去掉 U-Boot 写保护,参考这篇《Openwrt 中刷写 uboot ART》http://see.sl088.com/wiki/Openwrt_中刷写_uboot_art,但结果很不幸,型号不同嘛!
接下来,凭自己的编程水平了,尝试改 <openwrt-svn-dir>/trunk/target/linux/ar71xx/files/arch/mips/ath79/mach-dir-505-a1.c
,加入下面两个结构体:
1 | static struct mtd_partition dir505_partitions[] = { |
并将 dir_505_a1_setup 函数里的 ath79_register_m25p80(NULL);
改为 ath79_register_m25p80(&dir505_flash_data);
测试还是无效……看来必须在源头上使 MTD_WRITEABLE 无效掉,grep -r MTD_WRITEABLE <openwrt-svn-dir>/trunk/build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.36/drivers/mtd
,看到几处关键的地方:
1 | if (!(ubi->mtd->flags & MTD_WRITEABLE)) { |
和
1 | if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE)) |
主要在 mtd_erase、mtd_write 等函数,很明显,C 语言不管在什么平台都是很好懂,看几眼就搞定了,原理是使 MTD_WRITEABLE 这个标志无用掉,您可以设置,但是我把判断这个标志的代码全干掉了,设了也是白设!
最后编译好的 openwrt-ar71xx-generic-dir-505-a1-squashfs-sysupgrade.bin
,用 sysupgrade 刷一下,reboot
后再用 mtd
刷不死 U-Boot,一切顺利,成功刷上不死 U-Boot!
有些公司买一些洋乐射给员工用,以为可以节约成本,结果连连坏掉,反复修乐射的时间难道不是成本?再认真想想,公司有什么东西称心好用的?好像没有!
]]>首先到 https://github.com/pepe2k/u-boot_mod 看明白作者的说明。这里简单说一下原理:固件(firmware)刷坏,但 U-Boot 没坏,这是半砖,可以用 TTL 线连路由器,通过 U-Boot 的功能刷好 firmware。如果两者都坏了,叫全砖,只能把 Flash 拆下来,用编程器刷好 U-Boot 和 firmware。不死 U-Boot 就是修改了 U-Boot 的实现,使我们可以用 RJ-45 网线来救砖,省去拆机搭 TTL 线的麻烦。
本质上说,这东西并非真的不死,只要 U-Boot 被刷坏,还是会死,不过几率不大,因为 OpenWRT 官方发行的 ROM 全都是保护 U-Boot 区域的,根据 UMU 的经验,只有三个情况会不小心或故意刷坏:
如果您真的这么蛋疼,还是准备编程器吧,只要是软件问题,在编程器面前没有砖的概念。(JTAG 也是救砖神器,但不是每台路由器都有,比如 DIR-505 就没有!)
由于 UMU 是 Windows 程序员,平时没有安装 Linux 桌面的习惯,蛋似由于做快游项目,买了不少服务器,都是 CentOS,所以第一步就是在 CentOS 上尝试编译,后来,您们懂的,爆出各种 213 码!服务器系统还是不适合开发!
不得已就在 Hyper-V Server 2012 上安装了 Ubuntu 12.04.1-desktop-i386,本来是想安装 x64 版本的,但又怕这些嵌入式的东西对 x64 可能支持不够好,算了,不要装 13 了。
接下来是选择编译环境了,按照 UMU 对 OpenWRT 的好感,明显是选择 OpenWrt Toolchain for AR71xx MIPS,然后开始编译,哗哗哗,编译好了……最后编译出来的 bin 却是 64KB+110B,尼玛,这 size 超标了,刷进去不是不死,是立刻死!
试验 Sourcery CodeBench Lite Edition for MIPS GNU/Linux 可行。推测作者其实并没有用 OpenWrt Toolchain 编译过,而是用 Sourcery CodeBench,所以……为了节省时间,还是用后者吧!吐槽一下,这是商业软件,虽然有免费的 Lite 版本……
make dlink_dir505 一下,顺利编译出来,UMU 还小修改了一下 Web 界面,加入了自己的特色,不过要提醒一下,不要加太多,会爆……只有 64KB 的空间!
]]>1 | netsh wlan show networks mode=bssid |
OpenWRT 上是:
1 | iw dev wlan0 scan |
性浪微博压腾讯,
微云不如百毒云。
美拍强势日微视,
山寨帝国囧又逊。
RTX:腾讯的一套办公聊天软件,但这里是“日腾讯”的意思。之前用过这个标题,所以加个 2。
人无完人,腾讯也不是抄啥都能抄成的!
评“iPhone 电死人”事件。
]]>软硬撮:微软收购诺基亚。
大屏果:苹果发布大屏手机,必定抢走安卓更多市场!
数字:360
至贱:智键。稣会告诉您“手机装数字至贱App,放在上衣口袋,摄像头露出来,用耳机线控制抓拍,这就是偷拍利器”吗?
腾讯大钱砸:腾讯将旗下 QQ 网购与拍拍网的全部资产“嫁入”京东,并陪上 2.15 亿美元的“嫁妆”,换得京东 15% 的股权,未来腾讯还可以招股价认购京东额外的 5% 股份。腾讯总裁刘炽平将加入京东集团董事会。易迅将继续独立运营,并跟京东一起探讨落实日后的深度合作。京东将投资易迅成为少数股权股东,并获得认购余下股权的权利。此外,腾讯还将向京东提供微信和手机 QQ 客户端的一级入口位置及其他主要平台的支持。
阿里一声叹:腾讯放大招,阿里应该有压力了。
百度无鸡吧:百度贴吧,十二生肖的吧都有,唯独没有鸡……
文马姚:文章、马伊琍、姚笛
三匹:Three Persons
挺婷:赖婷婷
披碧玺:PBC
改编自霹雳角色“名剑无名倦收天”的出场诗。
江天一色无纤尘,
鱼龙潜跃观道身;
天人焉有两般义?
道不虚行只在人。
雾霾天,稣在 28 楼“看风景”有感而作。
倦收天的出场诗为拼凑诗,前半段改自张若虚《春江花月夜》,由景入情,阐述道之无所不在;后半段则取自邵雍《观易吟》末联,将作者对易经的理解,转化为角色对道的领悟。诗中刻意将天、道、人等三字重复,强调倦收天对三者的重视,认为天人入道、缺一不可,藉此彰显倦收天的道学修为与领悟。
唐代诗人张若虚的《春江花月夜》:
春江潮水连海平,海上明月共潮生。
滟滟随波千万里,何处春江无月明。
江流宛转绕芳甸,月照花林皆似霰。
空里流霜不觉飞,汀上白沙看不见。
江天一色无纤尘,皎皎空中孤月轮。
江畔何人初见月,江月何年初照人?
人生代代无穷已,江月年年只相似。
不知江月待何人,但见长江送流水。
白云一片去悠悠,青枫浦上不胜愁。
谁家今夜扁舟子,何处相思明月楼?
可怜楼上月徘徊,应照离人妆镜台。
玉户帘中卷不去,捣衣砧上拂还来。
此时相望不相闻,愿逐月华流照君。
鸿雁长飞光不度,鱼龙潜跃水成文。
昨夜闲潭梦落花,可怜春半不还家。
江水流春去欲尽,江潭落月复西斜。
斜月沉沉藏海雾,碣石潇湘无限路。
不知乘月几人归,落月摇情满江树。
宋代诗人邵雍的《观易吟》:
]]>一物其来有一身,一身还有一乾坤。
能知万物备于我,肯把三才别立根。
天向一中分体用,人于心上起经纶。
天人焉有两般义,道不虚行只在人。
一般的现代诗就是随便写句话,但是哥随便写都会随便押韵。
]]>按照鲸神科医生的设定,爷来到童年记忆中的排洪沟,没有工作压力,难得能够优雅淡定地钓起鱼来~
不过很快,异常就出来了,天色将黑时,爷看到了童年时的自己,他很无邪地看爷……爷想,不妙!这关还是过不了!
然后,想起来医生说的药,爷赶紧回家去找药了。临走前,让一个小男孩帮忙看着钓具。
一会儿后,爷吃了药,感觉自己变精神了很多,不再产生幻觉,于是就去找小男孩要回了鱼竿。
割裂的记忆,没有先后逻辑……只有对时间的恐惧。
]]>村里有条排洪沟,曾经连着一个大池塘,后来池塘消失了,沟也是慢慢消失,记忆也慢慢消失。
曾经这里有罗非鱼、鲤鱼、塘鲺(鲶鱼),年轻人经常来钓鱼。
很久后,试图寻找那些记忆,竟然无意间来到了一段保存很好的沟道。
天很黑了,但居然有一个小男孩在钓鱼,哥问他为什么这么晚不回家?
他说:“刚才有一个大孩子在这里钓鱼,我在看他钓鱼,他说有事离开一下,让我帮忙看着,结果看到天黑了……”
看着黑黑的河水,哥都有点害怕了,问他怕不怕,他说很怕,我要回家了,你帮他看吧!
哥拿起鱼竿,记忆突然重叠了,那种感觉很恐怖,很早以前,村里的河边,有个从来没有见过的大男孩,在河边钓鱼,那时候,哥可能只有8、9岁,因为好奇,一直看着他,后来他让哥帮他看一下,自己就离开了,这么多年,再也没有见过他……后来,又来了另一个大男孩,哥让他帮忙看着,也是不认识,而且再也没有见过。
哥自认为从小记性很好,特别是小时候,可是这个事件里出现的两个人,竟然都不认识,也没有再见过!
梦连接了童年的记忆,而记忆是无解的死循环。
]]>改编自唐代贺知章的《咏柳》。
]]>碧玉妆成一树高,
万条垂下绿丝绦。
不知细叶谁裁出,
二月春风似剪刀。
《#诗盗#·早春2》:舔姐笑语润撸舒,艹射摇炕精窃无。最湿衣粘春好雏,绝笙燕柳满黄都。
改编自唐代韩愈的《早春》。
]]>天街小雨润如酥,
草色遥看近却无。
最是一年春好处,
绝胜烟柳满皇都。
改编自霹雳角色“照世明灯慈郎”的出场诗。
]]>难定纷纷甲子年;千魔荡荡白阳天;
苍天旨意著书命;诸子虔诚扶道颠;
佛灯点亮华光现;一线生机救末年。
贱灵:“剑灵”的谐音,BNS,Blade and Soul,看别人玩这游戏后作本诗。
]]>深秋的下午经过树下,感觉像下雨,一抬头是无数花瓣树籽落下,树上还有移动真4G的广告牌,想起了那天股市的故事,不禁写了这首诗。
美雅如碧涛:美亚入必套,300188,美亚柏科。
网速一百兆:网宿会到 100,300017,网宿科技。
无银轰:WinPhone,Windows Phone 的缩写。
]]>干、靠、日、草、浪、日、基、撸。
]]>温峰:WinPhone,Windows Phone 的简称。
火腿肠:HTC
粗粮:小米
改编自霹雳角色“齐烟九点天踦爵”的诗号。
]]>三年寻龙,十年点穴,肩负青囊走南北;
三寸知息,十面洞心,掌握乾坤通天阙。
根据网络故事改编。
]]>后来哥和一个美女聊天,也想给她变一个,她也是安卓的,哥按照流程把自己的手机放在她手机上,结果怎么压都进不去,哥纳闷着,是不是只有三爽才可以。美女笑着说:你是不是想和我XXOO啊?不用这么暗示吧…
哥恍然大悟,立刻人肉了那个美女主持人,发现她是某笑星演员的女人,一路追踪,居然得知他们晚上在某酒店 KF,然后哥找人在路上毒打了那煞笔一顿,自己去了约好的房间。主持人一看到哥,就说丑了点(尼玛!)但至少比那个演员帅。以下儿童不宜。
]]>牛郎在星河一边遥望对岸的织女,遥不可及。
秋风想要一件云做的衣裳,但越追,云越散。
水面映射出了月影,好像水抱着月,却是不曾拥有。
这么凄美的感情,也只有诗人才能够体会了。
随着股指曲线心情变化无常,一天之中就好像经历了春夏秋,
还好运气不错,冬天没来,这个月交易了两次,结果赚了不少钱,
及时止盈套现,拿去买东西了,
因此生活品味提高了不少。
改编自霹雳角色“烟都大宗师·古陵逝烟”的诗号。
]]>冷灯看剑,剑上几番功名?
炉香无需计苍生,
纵一川烟逝,万丈云埋,
孤阳还照古陵。
改编自霹雳角色“北冽鲸涛擎海潮”的诗号。
]]>一举鲸涛快哉风,
世浪翻袖中。
古今谁人堪伯仲?
千秋雪,半夕蝶梦。
喷 iPhone 5C。
]]>大屌与花生米形成强烈的视觉反差,大丈夫果然能屈能伸!
]]>改编自霹雳角色烟都大宗师“古陵逝烟”的诗号。
]]>冷灯看剑,剑上几番功名?
炉香无需计苍生,
纵一川烟逝,万丈云埋,
孤阳还照古陵。
在岳父家帮忙搬砖有感。
]]>多款曰泡利器上架 Windows Phone 应用商店,利器虽然牛逼,但哥不会约,所以只是用于治疗蛋疼,有总比没有好,以免一些不明真相的大众总是喷微软不做应用……呵,那些应用哪里是微软自己做的……总之是用不上,还是不装了。
]]>奥利奥:Lumia 1020 的昵称。
]]>题目是随便取的。
主题说的是大街上某些美女只可远观,不可近看……还有笑起来可能会致命,还是闭嘴的好。
一动泥马避:这句是一语双关。
一动泥马避:这句是一语双关。
]]>一个项目做得差不多了之后,研发就会被赶去做新项目,运维接着负责后期运营,大大地降低成本,而且运维不如研发那么叼,也比较好管理。研发接手新项目,一切从头开始。
]]>多款黄色 App 下架……
一计:1G,1024 浏览器
改编自霹雳角色“圣婴主焱无上”的诗号。
乱局千秋凤影藏,披云超世浪;
燎原一刻狼烟壮,浴火饮天光。
口日哥:0 bug
八哥:bug
改编自霹雳角色“青丝台·朝如青丝暮成雪”的诗号。
朝如青丝暮成雪,
一夕风霜倾海楼。
早上生的蛋到了晚上已经孵化成小鸟了,风霜引起的海潮一夕便可倾倒众生。生命多么脆弱,岁月如此残酷,仿佛昨日还是小骚年,转眼却已是大叔,呵……黯然感叹时光蹉跎,只好对墙撸一炮蛋定一下了……
]]>喷一下武侠小说的套路。
]]>从 18 楼搬到 28 楼,早上进来采光比较好,机机表示有点不习惯……
]]>台风天,夜独行,来吐槽一下自己!
匹:批处理打嘴炮。
软件园散步观后感。
]]>惊闻软件园有人因为做外挂被捕而作。
]]>骑车去上班,结果半路下大雨……
]]>这篇文章是用 Surface RT 写的。先喷一下这设备不爽的地方!
Surface RT = sqrt(1366^2+768^2)/10.6
= 147.8
XPS 15 = sqrt(1920^2+1080^2)/15.6
= 141.2
居然才比 XPS 15 高了一小点!
再来要说的是,微软的自残行为。UMU 用过 iOS、Android 平板,甚至见过有人用 XP 平板,但相信,论系统本身 Windows RT 是最强大的。不过微软为了战略目标,把 RT 强大的一面给锁起来了。对开发人员来说,这锁表现在以下几点:
系统本身不允许运行没有微软签名的 EXE;
VS2012 默认无法编译 ARM 程序;
VS2012 自带的 ARM lib 缺失。
下面就是简单介绍一下如何突破这三个封锁:
RT Jailbreak Tool By Netham45, Version 1.20
http://forum.xda-developers.com/showthread.php?t=2092158
另外,有很多开源软件已经移植,在开发自己的程序之前,可以先试试,Desktop apps ported to Windows RT:http://forum.xda-developers.com/showthread.php?t=2092348
You can edit the file:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\ARM\Microsoft.Cpp.ARM.Common.props
对 VS2013 路径是:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\ARM\Platform.Common.props
In the
section add the line:
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
before
</PropertyGroup>
And that’s all, you can build ARM desktop apps with VS2012.
某些工程需要强制定义 _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 才可以。
开源工具应运而生:https://github.com/peterdn/dll2lib
然后,炫耀一下,UMU 已经把自己的一个小作品“天翼宽带智能提速”移植成功。这个程序比较小,一两个小时从解锁到移植开发全部搞定。
最后,如果程序是 .NET 4.x 写的,是可以直接跑在 RT 上的,所以为了省力气,也许应该考虑多用 .NET。
]]>评新闻《汶川地震宝宝芦山地震去世》和《韩红怒斥赈灾歌曲:唱歌比救援还重要?》,顺便纪念过世的好友陈震邦。
]]>简单地说,A 有八哥,B 依赖 A,所以导致依赖 B 的 C 出问题,您会通过修改 B 来解决问题吗?正常人都知道要先解决 A 的八哥,蛋似,稍微复杂、含蓄点的问题就有人迷糊了:
一个浮动小窗体,不希望在任务栏上出现标签。
UMU 见过有人使用了 ITaskbarList 对象的 DeleteTab 方法来删掉任务栏上的标签,很高端的做法。蛋似,不够本质,我们要的是不让它出现,而不是出现后擦掉……很早以前,explorer.exe 挂掉后,任务栏通知区域的 QQ 图标就消失了,因为当时 QQ 没有处理任务栏重建的通知消息 TaskbarCreated,重新添加图标。前面说的方法,有同样的问题,explorer.exe 重启后,标签又会出现,还要再删除一次。
正确的主流做法有两个,看情况采用:(1)、WS_EX_TOOLWINDOW;(2)、指定一个隐藏窗体为自己的拥有者。
另一个脱裤子放屁的例子:获得一个文本文件大小,然后 new 一个够大的 char 数组 p,把内容读到 p 上,最后 ::std::string str = p; delete[] p;,这个见太多次,都懒得喷了。::std::string 有 resize 方法,可以直接分配,不需要 new 一个临时数组,再 delete……
《判断系统是不是 XP》,也包含了这一哲学,表面上看有好多函数可以获得系统信息,但要明白他们的本质其实有差别,不是都可以混用。
Y2K 已经过去了,但还有一个 Y2K38,又称 Unix Millennium Bug,历史原因 Unix 时间戳是一个 32 位整数,记录从 1970 年 01 月 01 日开始的秒数,它所能保存的最大时间长度大概是 68.1 年,2038 年 1 月 19 日 03:14:07 之后。
以前硬盘容量小,也不看高清,很多代码都认为文件大小用 32 位表示就够了,结果后来出现很多 ISO、高清电影,都超过 4G……还见过有人采集流量用 32 位整形表示,时间跑久了就溢出了。
远见未必人人都有,退一步说,UMU 敢保证,有很多人即使知道 32 位不够用,还是继续用着,明知道 IPv6 已经出现了很久,还是各种硬编码,认为 IP 地址一定是 IPv4 的地址。态度问题!
遇到不合理的情况,UMU 认为应该给力地告诉该知道的人。比如,函数不希望入参是某指,可是调用者偏偏就输入了那个值,怎么办?打印调试信息?不够给力,容易被忽视,应该中断一下,告诉开发者。
配置文件字段被改错,怎么办?如果这个文件是技术人员维护的,应该抛出异常,死给修改配置文件的人看;如果是一般的最终用户,那应该弹出界面,友好提示哪里、怎么错了。
早期,很多程序员为了避免头文件被重复包含,就用了以下代码:
1 |
|
后来,大家喜欢用 #pragma once,省事,又不容易漏掉最后的 #endif。但是这样做之后会……姑息养奸!除非十分通用的工具类,对严谨的人来说,重复包含是不应该的!所以应该这样:
1 |
|
有重复包含立刻告警,而且都是集中在开头,不存在漏掉 #endif 的问题。
态度问题!这里只是举几个简单的例子~
]]>快游(网游加速器)包含一个 LSP,属于加速核心组件,在测试 LSP 期间,发现一个奇怪的现象:反注册它,并 netsh winsock reset 加重启好几次……依然有程序加载它。用 Process Explorer 查看是:IpOverUsbSvc.exe 和 daemonu.exe。把 LSP 的 DLL 文件删掉,再重启,可以消灭这个奇怪的现象。但后来想重现这个怪现象时,却无法重现。
问题自然重现,继续研究。这两个进程对应的服务名是:IpOverUsbSvc 和 nvUpdatusService。手动重启这两个服务后,即不再加载 LSP。推理:这两个服务很可能每次重启机器时都没有正常关闭,系统提供了某种机制让他们在下一次重启后快速恢复了运行现场(保留了有 LSP 注册时的环境)。
时隔三个月,偶然看到介绍"混合式关机"的文章,恍然大悟,原来是这货引发的八哥!
]]>在安装 Win8 后,很多人都体验到了其开关机惊人的速度,尤其是开机速度,相比 Win7 之下,它提升的不止是一点半点。在某些超极本和配备了 SSD 的机器上,其开关机速度可以在数秒以内。例如 Surface Pro,其实测系统引导速度为2秒,从启动到自动登录到开始屏幕只要6秒。
究竟是什么技术提升了 Win8 的开关机速度呢?如果要用最简单的一句话概括,那应该是"系统会话休眠",或者更简单的,“混合式关机”。
在 以往的 Windows OS 中,典型的关机顺序为:
单击"关机"。
Windows 广播运行应用程序关机信息,让应用程序可以保存数据和设置。应用程序也可以要求一些额外的时间以结束其当前工作。
Windows 为每个登录用户关闭用户会话。
Windows 向服务发送关机信息,通知已开始关机,接着关闭服务。如果服务未响应,系统将强制关闭。
Windows 向设备广播信息,示意设备进行关闭。
Windows 关闭系统会话(也称为"会话 0")。
Windows 刷新系统驱动器待决数据,以确保完全保存。
Windows 通过 ACPI 界面向系统发送信号以给计算机断电。
看着以上的典型关机步骤,你是不是也有想到一些步骤对应的屏幕上的 UI 表现呢~
再来看看 Windows 8 采用的混合式关机主要步骤:
单击"关机"。
Windows 广播运行应用程序关机信息,让应用程序可以保存数据和设置。应用程序也可以要求取得一些额外的时间以结束其当前工作。
Windows 为每个登录用户关闭用户会话。
系统会话休眠,并掉电。
可见,Windows 8 只关闭用户会话而不像以前那样完全关闭计算机。此时, Windows 不再等待并结束系统服务和关闭会话 0,而是让其进入休眠。这种关闭用户会话+休眠系统服务和系统会话的做法,被称为"混合式关机",也就不难理解了。
或者说得通俗点,就好比你之前打扫卫生时,需要先组装专业的拖布,组装好了以后,才能开始打扫卫生。而现在,你可以拿起拖布直接开始打扫,因为你上次打扫完之后,并没有将拖布这一工具像以往那样拆卸下来收好。
开机在结构上是关机的逆过程,所以有了混合式关机,开机自然也就快了。但是,除了 RAID 卡外,一般硬盘的读取速度会比写入速度略快,加上关机的时候,系统会通知并等待应用程序退出,所以从感官上,开机过程会比关机过程显得要快一些。
神马 GetAdaptersInfo、GetIfEntry、GetAdaptersAddresses、NetWkstaTransportEnum,还有读取注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
。这些都会枚举到虚拟网卡,给您举个例子“VirtualBox Host-Only Ethernet Adapter”,读取神马 NetCfgInstanceId、MediaSubType,都不靠谱,没有平台移植性!
用 Setup API 枚举 Interface,匹配 PCI 和 USB 类型是比较靠谱的。
蛋似,虚拟机的网卡也是虚拟的,为了方便在虚拟机测试,您要注意放开一些特例……很抱歉,领导说代码要保密,自己搜吧,关键字:SetupDiGetDeviceInterfaceDetail、OID_802_3_PERMANENT_ADDRESS。
给个蛋碎的例子:\\.\pci#ven_10ec&dev_8168&subsys_050e1028&rev_06#4&224db6dd&0&00e5#{ad498944-762f-11d0-8dcb-00c04fc3358c}\{4cc0ea76-88b7-40e1-8b4b-6339f8dd49bf}
可以简称为 \\.\{4cc0ea76-88b7-40e1-8b4b-6339f8dd49bf}
或者 \\.\Global\{4cc0ea76-88b7-40e1-8b4b-6339f8dd49bf}
。
主要处理公开的协议,最明显的例子是 HTTP 下载,加速系统理解 HTTP 协议,当收到 GET 请求时,伪造 302 等跳转回应,使客户端改向加速系统提供的“代理服务器”下载。
当一个域名只用于 HTTP 服务时,还可以对这个域名做文章……DNS 协议也是公开的。
各种下载器、视频应用开始采用私有协议……所以,逆向就必不可少了,这个时代加速服务提供商必须有一定开发实力,不能再用一些开源代码整合就了事。
某些下载器的公司出于各种原因不希望别人假扮自己的“服务器”,于是做出了艰难的决定,下载协议使用非对称算法加密,这样一来,即使那些逆向高手把整个下载器客户端都逆向了,那也只是做出一个客户端,无法扮演服务端,于是乎……加速服务公司都 2B 了,要私钥吗?分点钱吧!
]]>评新闻《临产女警坚守岗位 大出血母子双亡》,国人缺乏安全感,无奈也。
]]>天气变化有感而作,纯属打嘴炮。
]]>“鲸神链”的由来:大三或者大四时,申请了一个新 QQ,想取个特别的昵称,当时想自己是“技术流”,所以就输入 jsl,结果出来的是“精神恋”,感觉也不错,因为 UMU 觉得爱情的最高境界就是“精神恋”,但直接这么下去肯定很多人喷,所以就用了“鲸神链”。
尘世太多喧嚣、压抑物欲横飞遮乱了人们的眼睛,让人看不清真相本源。
哥因此封印了天生敏锐的感情世界,转眼三十年过去了……
世道修心是体会人间悲苦离合,虽然大家都是杯具,蛋似哥坚持聪明天赋、善良本性。
笑看当今物欲世界,哥一直认为精神恋才是爱情的最高境界,这在凡人眼里只是笑话,只有哥还在谈情说爱大笑。
]]>泥巴娃小时候,老家就是典型的农村,很多田野,种各种菜,后来退田盖新房,但是妈妈保留了种菜自己吃的习惯,于是在旧屋的屋顶搞了很多塑料泡沫箱子来种菜,屋内则养鸡鸭。最近去旧屋看了一圈,觉得陌生了许多,才十年而已,却恍如隔世。
]]>中午去吃饭,过马路时很倒霉,两段都是红灯……又听闻某些人备孕很久都没中,有感而作。
]]>惊闻望海路 69 号楼顶有人打炮而作。
]]>微信捡到一个重口嫖流瓶,里面有图有 JB。
]]>实现 Edit 控件文字透明,在 XP 下有 Bug,得做特殊处理,所以要判断当前系统是不是 XP,蛋似,要考虑到“兼容性”:如果系统是 Vista、Win7、8、9、10,则他们都有兼容 XP 的模式,GetVersion/GetVersionEx 都会被欺骗。
这种情况需要的是:VerifyVersionInfo
http://msdn.microsoft.com/en-us/library/ms725492(v=vs.85).aspx
]]>XP 系统,程序使用了 Manifest 指定使用 Microsoft.Windows.Common-Controls
现象:Edit 控件处理 WM_CTLCOLOREDIT 改变颜色,问题出在 SetBkMode 设置透明后,控件删除字符时无法立刻刷新,即会残留。
自残,别用 Microsoft.Windows.Common-Controls,删除类似下列的代码:
1 |
放弃“透明”,采用“伪透明”——如果您的背景是纯色,用 SetBkColor 就行。
检测到 XP 时,WM_CTLCOLOREDIT 返回画刷前,自己用 FillRect/Rectangle 涂一下……或者发一个 WM_ERASEBKGND,当然这个做法的前提是 WM_ERASEBKGND 的处理就是自己涂一下,如果就一句 return TRUE 那是等于啥也没干。
由霹雳角色“南冕.超轶主”的诗号获得灵感而作。
由来泉石潜蛟龙,
不经烽火不现踪。
风云岂是苍天主?
拈作轩冕上九重。
挨踢威(iTV)势在必行了,产品可以做好,看好,蛋似利润肯定不如手机平板,出货量也不可能。没有跨时代意义。
]]>改编自唐朝诗人杜秋娘的古诗作品《金缕衣》。
]]>劝君莫惜金缕衣,劝君惜取少年时。
花开堪折直须折,莫待无花空折枝。
改编自霹雳角色“御天荒神六铢衣”出场诗。
身披六铢衣,
御宇藏真理。
云中封神路,
紫薇降天启!
身长长机机:身上长着很长的机机。
一机装二逼:一个机机就可以装两个逼,不管是装牛逼还是撒逼,简直易如反掌,果然是装逼利器!
云端通讯录:现在的智能手机都可以把通讯录备份到云端。
网络三四G:支持 3G、4G,各种制式。
测试 LSP 期间,已经反注册它,netsh winsock reset 加重启好几次……依然有程序加载它,用 Process Explorer 查了一下是:IpOverUsbSvc.exe 和 daemonu.exe,后来把 LSP 文件删掉,再重启,这时候当然无法加载了,可是 UMU 又想重现一下这个莫名其妙的问题,结果一个早上没了,无法重现……
15:38 2012/12/25 补充
今天这个现象又出现了。再手动重启这两个服务后,不再加载 LSP 了。它们对应的服务名是:IpOverUsbSvc 和 nvUpdatusService。这说明这两个服务很可能每次重启机器时都没有正常关闭,系统提供了某种机制让他们在下一次重启后快速恢复了运行现场(保留了有 LSP 注册时的环境)。
]]>改编自霹雳角色“白衣沽酒绮罗生”的诗号。
]]>百代繁华一朝都,谁非过客;
千秋明月吹角寒,花是主人。
TTL 线拯救,网络是强大的,关键字:WR941N 短路 C278 电容
本文只为发几张图,如果有人不幸和 UMU 一样壮烈地撸死了这款路由器,可以参考之。
]]>两个困境:
有个只有 RJ45 接口的旧设备要上网,它的位置离路由器很远,家里的网线不够长……
UMU 买了一个支持 AP Client 的无线路由器(TP-Link TL-WR800N)每次把这个 AP Client 断电时,提供网络的主路由器都会被这个 AP Client 搞死掉,原因未知……
还没有树莓派的时候,UMU 用笔记本上的 Windows 的 ICS 功能给它提供网络,当然这方法很不好,于是有了现在的方案。
仔细查看了树莓派支持的 USB WiFi Adapters 列表,挑选了 TP-LINK TL-WN823N(RT8192CU 芯片),这个在 Raspbian 上是 Work out-of-box。Mercury 150Mbps MW150U(Realtek RTL8188CU 芯片)也可以。
硬件准备好后,第一步,配置 Wifi,连上主路由器,假定,此步将 wlan0 的 IP 配置为 192.168.1.2,/etc/network/interfaces
的内容如下:
1 | auto lo |
192.168.24.51 这个 IP 可以改为别的,UMU 习惯用这个当网关地址。/etc/wpa_supplicant/wpa_supplicant.conf
的内容这里就忽略了,参考 http://elinux.org/RPi_Peripherals#Wireless:_TP-Link_TL-WN722N_USB_wireless_adapter_.28Debian_6.29。设置完,ifdown wlan0
再 ifup wlan0
,看看 USB 无线网卡的指示灯应该闪起来了……
第二步,配置 RJ45 网口的 NAT。首先,修改 /etc/sysctl.conf
,增加以下两行:
1 | net.ipv4.ip_forward=1 |
运行 echo 1 > /proc/sys/net/ipv4/ip_forward
和 iptables -t nat -A POSTROUTING -s 192.168.24.0/24 -o wlan0 -j SNAT --to 192.168.1.2
,并将这条命令写到 /etc/rc.local
中的 exit
前。
最后,reboot
一下试试。可以用网线把 PC 和树莓派连起来,PC 的网卡设为 24 段地址,网关 192.168.24.51,试一下 PC 通过树莓派的网口上网吧!
之前在《从 Windows 8 新功能推理某产品的八哥》提到过现在手机上的省流量 App,其原理就是压缩图片,但为了提高效果,这个压缩基本都是有损的,流量减少了,但是图片质量下降了,有的下降可以忍受,有的则令人发指!比如,长微博,文字转图片,这种图片线条分明,相邻像素值对比可能很大(黑白分明),这类图片采用高压缩比的 JPEG 压缩后,图片质量往往很差。
再举个例子:QR 码图片,您可以做一下试验,为了说明 JPEG 不适合存储线条型图片,哥采用一张蛋疼的 1290*1290 像素的 QR 码图片,保存为 JPEG 大小是 4.76MB,但保存为 PNG 格式时只有 52.4KB,请注意单位,前者是后者大小的将近 100 倍!!
大家可能比较少关注 WP,也许您没听过 DataSense,简单地说,它就是微软做的节省流量的 App。号称可以节约 45% 的流量,这么大的压缩率,除了优化 HTML 相关的文本之外,对图片的压缩肯定是必须的!推测 DataSense 可能使用了 JPEG XR 格式来转化其他格式的图片。
JPEG XR 虽然已经成为一种标准,但目前依然只有微软支持,所以,如果您想把这个技术应用到 iOS、Android 的节省流量 App 中,那很抱歉,此路暂时还不通。
根据实测,IE9@PC、IE10@PC、IE10@WP8 都是支持 JXR 格式的。下面是用 C++/CLI 写的很简单的一个格式转化程序:
1 | using namespace System; |
文末是一些搜索到的关于 JPEG XR 的资料,可供参考:
http://jpeg.org/newsrel26.html
]]>JPEG XR (ISO/IEC 29199-2) is now an International Standard and also an ITU-T Recommendation (T.832).
JPEG XR(旧称 HD Photo 及 Windows Media Photo)是一种连续色调静止图像压缩算法和文件格式,由Microsoft开发,属于Windows Media家族的一部分。它支持有损数据压缩以及无损数据压缩,并且是微软的XPS文档的首选图像格式。目前支持的软件包括.NET Framework(3.0 or newer),Windows Vista/Windows 7、Internet Explorer 9,Flashplayer 11等。
JPEG XR(微软HD Photo格式)2009 年,成为 ITU-T 推荐的国际标准(ISO/IEC 29199-2)。JPEG XR 的标准化确保数码相机、打印机、显示器和软件公司能够在开发其新产品的时候兼容互通。其核心技术由微软核心媒体开发团队开发完成,针对当前和将来的数字图像发展需求以提供了许多新的优势和特点。
在 Vista 操作系统中已经支持了这种新的文件格式,JPEG XR 相比其它技术更有优势,其中包括更好的压缩技术,以一半的文件大小保存与 JPEG 相同质量的图像,或以相同大小的文件保存质量相当于 JPEG 两倍的图像。JPEG 组织还对微软开放与 JPEG XR 相关的专利的决策表示了赞扬,称微软免许可费政策将有助于JPEG推动 JPEG XR 普及,有助于确保它能够被更多的用户所采用。JPEG 组织还鼓励其它公司向微软学习。
改编自霹雳角色“风雪一路禅”诗号。
千古佛随肩,
足下是福田,
遍看云山月,
风雪一路禅。
穿着阿迪拖鞋暴走的时候,突然想到一路禅的诗号可以这么改~
这首诗综合了诗盗、霹雳、暴走、装逼、打嘴炮几大爱好,果然是集大成者。
在开始讲故事之前,要先介绍一下马头流量,http://www.matocloud.com/,同类产品:上网快鸟、飞速流量、瓦力流量、彩虹流量……当然,这些都是设设 APN 而已,马头的 Android 版本有更高深的技术。想了解更多,请研究一下 EnoVPN、VPN Service。
再来是流量压缩原理简介:主要是压缩图片。APN 就是一个 HTTP 代理,只不过这个代理有点不标准,会将原图压缩后交给用户,用户下载的是一张小图,自然就省流量。但这是有副作用的,有的图片必须是有损压缩才会变小,所以必然会降低图片质量。知道这个原理后,可能会有人会纠结了……至于您用不用,就看您在图片质量和流量之间的取舍了。
故事开始了!UMU 用 HTC Titan 拍过不少图片,当然其中不少是横屏拍的。这个手机有重力感应功能,拍的照片会带 Orientation 信息,这是 Exif 的一个字段,专业知识请另行搜索“Exif Orientation”。简单讲,无论您拍照时手机是横是竖,在手机看时,照片都会自动旋转,使景物是正立的。如果您没注意过,可以先在就做这个实验,把 iPhone 倒立拍照,正立过来看,景也会跟着自动转……
当 UMU 把图片同步到电脑上时,情况就不同了。Windows 7 自带的画图、图片查看器都不支持对 Orientation 自动校正,IE9、IE10、Chrome 22.0.1229.94 m、Paint.NET 也都不支持。所以,UMU 经常看到横屏拍的照片,在 Windows 7 上是歪 90 度显示的。
到 Windows 8 上,自带的画图、图片查看器都支持 Orientation 校正了!有一天,UMU 在看以前拍的图片时,突然发现,所有的图片都正立了……
蛋似,前面有提到 IE10 是不支持的,所以……UMU 特地上传了一张横拍的图片到腾讯微博上,果然这图就是歪 90 度的,缩略图和原图都是。然后再用 iPhone 看,缩略图是歪 90 度,这说明腾讯微博的缩略图也没考虑 Orientation 信息,点击查看原图,终于正立了,因为 iPhone 基本到处都支持 Orientation 自动旋转校正。
把这个发现,和马头流量结合起来思考——APN 服务器上的图片压缩程序会不会也没考虑 Orientation 信息?UMU 猜想是很有可能的,腾讯就没考虑到……然后开始测试!用 WiFi 看原图,是正立的,因为 WiFi 下,马头流量不会压缩图片;改用 3G,马头流量开始起作用,再去看原图,发生了两件事,大家应该猜到了——图片质量下降、图片歪了 90 度!八哥!这就是八哥啊!
]]>公司的博饼年年都差不多,没什么改进……奖品都是些用不上的东西,连套套都没有,再加上哥运气不好,别人都能博到锅,哥只能撸个碗(个碗管)。
]]>改编自是唐代诗人杜甫的组诗《绝句》中的第三首《绝句·两个黄鹂鸣翠柳》。
两个黄鹂鸣翠柳,
一行白鹭上青天。
窗含西岭千秋雪,
门泊东吴万里船。
一个项目上西天:快游大众版被枪毙,团队被解散。
]]>来深圳参加“全球架构师峰会”,结果发现人真多,而人多的地方必然各种二逼、各种狗血。
]]>厦门的交通很烂是长久以来有目共睹的,一个小小的火车站,就有好多个站点,外地人刚来简直要被玩死……
天上:指 BRT,厦门的 BRT 大多数路段是在高架桥上的。
建设规划太过时,停车位太少,特别是软件园这种地方,有车的人特别多,车位基本是按照公交车来设定的,呵……这是上世纪 90 年代的设计了!
李聪娜,解放军美女尖兵:90余昼夜写40万行代码
好好一个人,被浮夸外行的媒体给写臭了……实在无语!
养老保险的口号几年一换,从养老靠政府到不能靠政府,十分坑爹……
这些专家每年都要跳出来讲点脑残言论,傻子都知道这其中是利益导致。
一提到人均收入,呵,见证奇迹的时刻来了,财产到底是多集中,一个个屁民都被平均了……
对这个神奇的国度,只想说:射精病!得治!
很多搞挨踢的都觉得自己吃的是青春饭,呵呵~吐吐槽罢了!我们搞的是高科技。
]]>平时起的很晚,今天来鸳鸯溪玩,起得好早,开始玩的时候,平时差不多才起床,真是把平时晚起的优良传统给日了……不幸的是,那天的早餐太好吃,结果吃得太饱,还没玩就困得不行,还不如夫妻双双把家还了,睡大觉。
]]>接龙自《霹雳神州II之苍玄泣16》不二做一剑怒劈啸天峰:
山至绝顶我为峰,一步苍穹任人狂。
不代表本人观点。
]]>搜一基:so easy
快撸:曾经打算把“快游”改名为“快撸”。
有感于时下基友当道……
为了从技术上超越对手,走自主研发道路,从应用层到驱动层,几乎把 Windows 平台上所有能拦截、过滤网络数据的方案都试过一遍。
其中主要的技术方案:TDI 驱动、NDIS IMD、LSP(IFS LSP 和 Non-IFS LSP 都有用过)。
有出产品的一个方案是 NDIS IMD,NT6(Vista+ 系统)上是 NDIS Filter。这个大方向上,又有两个小方案:纯的 NDIS 驱动;接合 LSP 收集游戏 IP 的方案。但是最终因为驱动频繁导致蓝屏,被合作方无情地抛弃……
不难发现,其实一开始就走错路了,开始产品化的时间是 2008 年,市面上还没多少游戏加速器,最突出的一个就是迅游,他们用的是 VPN+收集路由表的方式,使用的都是现有的成熟技术;而自主研发的驱动要做稳定需要经过很长时间的考验,产品压力下,我们的时间不够……
尝试了 VPN 的路线,想很快做出来,OpenVPN 的积累不足没法很快搞定,系统自带的 PPTP、L2TP 等 VPN,可以很快做出来,但是遇到机房限制,电信的机房不让我们的服务器架设 VPN……最后只能在部分小运营商内使用此方案。
后来终于重新启用了 LSP 的方案。这个方案原来被弃用原因是一开始使用的是自主研发的代理协议,出了不少问题,并且 LSP 确实也是个很麻烦的东西,安装后容易断网,还会与其它 LSP 冲突……后来代理协议改为公开的 Socks5 协议,服务器端的开发省掉了,全心全力解决 LSP 的问题。总算慢慢看到希望。
由于一直招不到好的开发人员,只能边培养边做事,开发效率不是很高,经常犯错,导致用户投诉。但是整体上一直在收集用户问题,一直在努力解决它们。尤其是核心的 LSP 实现、安装和代理服务程序,参考来了很多同类产品,后来锁定了微软的 Firewall Client for ISA,把 LSP 做成 IFS LSP,使用类似 BSP 的安装方式,这是兼容性最好的方式了。代理服务程序由服务型 COM 对象改为一个普通进程,使用文件映射通信。界面也重新设计,准备推出快游 2012 版。这时候,注册用户是 60 万,在线用户每天平均 1.9 万。
就在希望满怀,团队兴致最高,暗黑 3 正要引发游戏界又一轮高潮的时候,公司突然不打算做了……目前,为了推广“马头流量”(matocloud),尚能维持运营一段时间。
快游 2012,又称快游末日版,果然成为末日了!咳咳~一切都是因为钱嘛,可以理解……
]]>有一阵子公司出现要禁 QQ,改用 RTX 的趋势,虽然经过分析不太可能,不妨碍有感而作。
]]>西贝:CnBeta,一个喷子聚集的挨踢资讯网。
三粉:果粉(Apple fans)、狗粉(Google fans)、软粉(Microsoft fans)。
插屁:XP,微软操作系统。
改编自盛唐诗人孟浩然的《过故人庄》。
故人具鸡黍,邀我至田家。
绿树村边合,青山郭外斜。
开轩面场圃,把酒话桑麻。
待到重阳日,还来就菊花。
厚帖哦:Hotel。
遇见:一个 App。
披鼻吸:PBC(曾经以为大家都是打嘴炮,没想到大家都是真的,只有稣是在装逼)。
撸十二:loser
有感于天草的食品安全问题……以及盗版问题。
年年大丰收 vs 大丰收
天天全家福 vs 全家福
在佰翔酒店吃自助餐时,看到一位老外,神速地吃完走人……
]]>举头:哪个头?
低头:还是那个头。
哥用的是 WP 手机,HTC 末渣特。
天然食材简单煮酒很好吃。
]]>搜索引擎一直用 Bing,自从它出来后。
评新闻《女富豪吴英集资诈骗案》。
今日凌晨梦见自己作的诗,三点多醒来记住了,神奇啊!
墨客:土黑客
改编自唐代诗人孟浩然的《春晓》。
春眠不觉晓,
处处闻啼鸟。
夜来风雨声,
花落知多少。
五寸:闽南语中“愚蠢”的发音。
大抠呆:闽南语,大傻瓜。
小时候穷得响叮当的,买不起肉,都吃一些五谷杂粮,很久才能吃上自己养的鸡鸭,平时都是肉酱配饭,咸蛋配粥……
最后一句改编自“何以解忧,唯有杜康。”
福建省的中国电信天翼宽带(家庭 ADSL 网络)用户每月可免费使用 5 小时智能提速,这是一个很给力的东西,一般 ADSL 下行速率是 4Mbps,最高可以提到 20Mbps,看高清电影、下载各种小电影毫无鸭梨。详见:http://ts.oooxm.com/
蛋似!作为一名穷人,怎么合理地利用这 5 小时免费提速时间,成为一个有点鸭梨的问题。UMU 的这个小工具就是为了解决这个问题而“蛋生”。
简单地说就是程序帮您监控网络使用情况,流量跑高就提速,流量低下来就自动停止提速。另外,官方的提速方式是通过网页的形式,UMU 的程序可以在程序界面上直接提速和停止提速。
v1.1
http://pan.baidu.com/share/link?shareid=90607&uk=3607387813/
流量,API:GetIfEntry、GetIfEntry2
SOAP 协议,UMU 用的是 ATL SOAP @ ATL Server,您也可以试试更大型的 gSOAP。
原理就是把本来就有的带宽还给我们,原来的 4M 其实是故意限制的……提速的手段除了电信官方分方法之外,还有 OpenWRT 上的“多拨”方案,同时拨号N次,可能拨通,一个4M,如果拨上15个就有60M了……
2013-05-09,这个软件已经有 ARM 版本,详见:《开发 Windows RT 桌面应用(来自 Surface RT)》
]]>老猫劲哥:两名同事。
2011-12-07 午餐时,他们两位在 KFC 买了东西拿到澳普多和我们一起吃,结果算了一下,他们两个都吃了 28 块,我们才吃了 21 块。
WS:网宿
KJ:科技
大学时代的作品《UMU 游戏之争上游》的副产品,mif2bmp 改进版,用 GdiPlus 来产生 png 格式图片。
mif2png.exe 下载:http://download.csdn.net/detail/umu/3843545
以前 UMU 有写过文章分析 mif 格式,不过很早了,懒得找,直接上代码吧,先看头部结构体:
1 |
|
以下代码是 C# 写的 Paint.NET 文件类型插件 MifFileType.cs
1 | using System; |
功夫网:GongFuWang
有木有:UMU
法克墙:UMU 专用翻墙软件。
ZZB:一名前同事,好朋友。
我们到鼓浪屿玩,他一路奔放,还把外带的 KFC 拿到 MC 去吃了。
甘草林木:这是闽南语。
这阵子流行唱红歌,都能把死人唱活……
见过大爷手淫……
穿拖鞋的暴走族真不容易啊,买个好走耐用的拖鞋都比较贵,被妈妈造价格是 198 元会被骂屎!
]]>听不少同事抱怨工资太低而作,此等情绪不值得提倡,喷完好好上班。
]]>最后一句由霹雳角色“任剑谁”的诗号得到灵感,结果写出前面三句。
一生一败一声痴,
封剑石中再不问!
百年难磨今朝恨,
再将虎魄换剑魂!
又名《挨踢见闻》。
在 KJ 呆了多年,看到不少人来来往往,可能是激励制度不够到位。
昨天杨总离职,成本中心的部门经理也换人了。
纪念一名英年早逝的好友——陈震邦。
]]>慢泥:money
高丽菜/袋:高利(方河蟹)贷。
可怜殆:闽南语,表示很可怜。
改编自明朝唐寅的《桃花庵歌》。
]]>桃花坞里桃花庵,桃花庵下桃花仙。
桃花仙人种桃树,又摘桃花换酒钱。
酒醒只在花前坐,酒醉还来花下眠。
半醉半醒日复日,花落花开年复年。
但愿老死花酒间,不愿鞠躬车马前。
车尘马足显者事,酒盏花枝隐士缘。
若将显者比隐士,一在平地一在天。
若将花酒比车马,彼何碌碌我何闲。
别人笑我太疯癫,我笑他人看不穿。
不见五陵豪杰墓,无花无酒锄作田。
来到公司才发现更怪异的事,人倒是有,但都是骷髅。真佩服自己当时的淡定,居然没有大呼小叫神马的!不过当时马上想到世界末日,于是看看手机,时间是 2011 年,还早呢。好奇地打电话给家里,他们都表示世界没有抛出任何异常。然后又想:惨了,不会是只有软件园发生灾难吧!我弟弟也在软件园,我马上打电话给他,他说公司送他们项目组的几个去北京玩了,不知道软件园发生了神马!
接着,发现脑子里还有一个人,就硬着头皮,往那处走过去,人不在位置,不过那屋子里的其他位置一样坐着几个骷髅,心想好像我在意的人都没事,真是不幸中的万幸。
为了确保万无一失,我给她打电话,没人接,不过不接不一定就是挂了,但是我不放心,到车库去看了一下,熟悉的车牌号,跑过去,震惊了……车里一个骷髅……车门打不开……过了一会儿,我马上就冷静了,发现那个骷髅比她大了好几个尺寸,sigh~应该不是!
最后有人叫我,一转身,我被咬死了,跟大家一样……真无语啊,主角都挂了!!!
]]>写于互联网著名的 3Q 大战之际。
]]>2009-11-05 08:54:05
《#诗盗#·山坡羊·网络杯矮》后门既开,隐私安在?
流氓几时相交代。
肆敛财,道德败,
本尊盗号马夹卖,
骗术有如云变改。
纵,也是哀;
墙,也是哀。
《七鹰圣传奇》中燬仙宗传人燧熼惊鸿的出场诗。
]]>前两行改编自霹雳角色“黑羽恨长风”的诗号。
]]>山关留痕忘岁月,独少一剑恨天涯。
淹死快游:淹死的都是会游泳的……游得快也死得快!
迅游:目前还是游戏加速客户端的老大。
加速啦:好像已经挂掉了。
本诗写于快游项目遇到瓶颈的时期,由于客户端产品与公司企业基因不符,导致多次团队变动重组,最后流产……技术强不代表能做好产品,做出产品没有相应的推广和运营,也不能赚到钱。
《#诗盗#·春江花月夜》:冷月孤轮碧寒威,青空流霜鸿雁飞。昨夜台风摧杨花,春雨摇情满江媚。
改编自霹雳角色“九江春”的诗号。
轻絮流光孤月轮,
鸿燕长飞声不顿;
昨夜闲潭梦落花,
流水摇情满江春。
2008 年写的,具体时间搞不清楚了,应该是在某次台风来临时。
写这首诗有三个因素:霹雳、台风、杨媚花。
灷邪天灾:荼藜七子老大
]]>改编自宋代词人晏殊的《木兰花·燕鸿过后莺归去》。
]]>燕鸿过后莺归去,细算浮生千万绪。
长于春梦几多时?散似秋云无觅处。
闻琴解佩神仙侣,挽断罗衣留不住。
劝君莫作独醒人,烂醉花间应有数。
改编自《孟子·告子下》 。
]]>故天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空伐其身,行弗乱其所为,所以动心忍性,曾益其所不能。
改编自《三字经》。
]]>夏传子(禹传启),家天下,四百载,迁夏社。
改编自唐代李白的《夜宿山寺》。
]]>危楼高百尺,
手可摘星辰。
不敢高声语,
恐惊天上人。
改编自霹雳角色“问剑孤鸣”的诗号。
]]>入江湖、走红尘,
人独影、剑孤鸣,
行千里、笑雄心,
长叹问剑一狂人!
改编自霹雳角色“北窗伏龙曲怀觞”的诗号。
天涯无岁月,
歧路有风尘。
百年浑似醉,
是非一片云。
出自元朝张可久的《金字经·乐闲》。
百年浑似醉,满怀都是春。
高卧东山一片云。
嗔,是非拂面尘。
消磨尽,古今无限人。
烎:此诗中通“淫”,其它地方啥意思忘记了,请自查字典。
]]>破落:Pro
破落个烂命:Programming
八哥:Bug
第八个:Debug
改编自唐代诗人杜牧的《江南春》。
]]>千里莺啼绿映红,
水村山郭酒旗风。
南朝四百八十寺,
多少楼台烟雨中。
改编自清朝诗人赵翼的《论诗》。
李杜诗篇万古传,
至今已觉不新鲜。
江山代有才人出,
各领风骚数百年。
蠕虫病毒我是天天见,天天杀,
事到如今再去干掉(日)它们,我已经觉得没什么成就感了,
放眼网络,不时流出一只只木马,
占领大片肉鸡,(它们才是我的目标)。
改编自宋代张俞的《蚕妇》。
]]>昨日入城市,
归来泪满巾。
遍身罗绮者,
不是养蚕人。
改编自霹雳角色“极道先生尚风悦”的诗号。
少独知音绝,
返归尚白雪。
人皆笑风狂,
谁奏神人悦。
风鹏:荼藜七子老二·天哈慕香的化身
]]>改编自宋代张俞的《蚕妇》。
]]>昨日入城市,
归来泪满巾。
遍身罗绮者,
不是养蚕人。
改编自宋朝杨万里的《宿新市徐公店》。
篱落疏疏一径深,
树头花落未成阴。
儿童急走追黄蝶,
飞入菜花无处寻。
Linux 很高深,都说视窗漏洞多,不安全,但这并未成为人民群众不用它的理由。人民群众用电脑只是看看黄碟,只要光驱转起来,不管它是什么系统,切换到全屏就看不出什么系统了,没区别。
]]>改编自唐代伟大诗人李白的《望天门山》。
]]>天门中断楚江开,
碧水东流至此回。
两岸青山相对出,
孤帆一片日边来。
改编自唐代贺知章的《咏柳》。
]]>碧玉妆成一树高,
万条垂下绿丝绦。
不知细叶谁裁出,
二月春风似剪刀。
改编自初唐四杰之一的骆宾王的《咏鹅》。
鹅,鹅,鹅,
曲项向天歌。
白毛浮绿水,
红掌拨清波。
为什么是“挖青蛙”?这个问题……诗盗本人也不知道,只是顺口,哈!
]]>《编程员的生活》
女:在加吗?
男:嗯。
女:回来做做吧。
男:嗯。
改编自霹雳神州II之苍玄泣开场白。
]]>传说在大地之下,
异界之中,
有四支支撑整个神州的支柱。
支柱存,神州安;
支柱毁,神州灭。
那一天到来时,
称之为——末日!
改编自霹雳角色“清香白莲素还真”的诗号。
]]>半神半圣亦半仙,
全儒全道是全贤;
脑中真书藏万卷,
掌握文武半边天。
杀毒软件腾飞的进程,
葬送了多少病毒木马,
数不尽的数码艺术从此变成一坨坨的屎,
靠鹰。
改编自霹雳台词,原文记不清了……
]]>]]>锄禾日当午,
汗滴禾下土。
谁知盘中餐,(谁念盘中餐)
粒粒皆辛苦。
改编自霹雳台词,原文记不清了……
]]>UMU 认为:
轻松付出与高薪,
矛盾难以调和。
上班族盼望的铁饭碗装软饭,
不过配合人的懒性,
由人类贪痴地幻想,
化为极乐天堂的假象,
国企就是让人才变成庸才的加工厂。
离开,才能赐予透彻的觉悟。
改编自霹雳角色“伏婴师”的台词……
最终提前离开夏新,没有要裁员费,大约 3 万软妹币。
没实行代码规范,所以工程里面有很多不同风格的乱码。
注释也没认真写,一下子是中文,一下子是英文。于是有人为了掩饰干脆不写注释,还节省时间。但这样做太无知了,这样的代码自己明天可能就看不懂了,何况是别人,交流起来简直是废话连篇不达其意!
买了第三方代码,却没买相应的文档!失败!
关键部分只有库文件和声明,失败!
员工电脑太垃圾,完整编译一次要20分钟,失败!
没根据员工现有技能水平合理分配岗位,浪费人才,失败中的失败!
最惨的就是工厂和开发地点放在一起,我们又不是工人,竟然要住在这么偏僻的地方,工作室不独立,容易互相影响,靠,你有没有搞错?哎,一坨屎哎,哎,一坨屎你看到我旁边的打印机了没有?哎,整天歪歪,就像一坨苍蝇!嗡……对不起,不是一坨,是一堆苍蝇围着你,嗡…嗡…嗡…嗡…飞到你的耳朵里面,救命啊!
改编自周星驰台词……
]]>改编自霹雳角色“练峨眉”的诗号:
]]>云霞争变,风雨横天,绝逸清坐,一榻沧然。
改编自霹雳角色“恨刀英雄”的诗号:
]]>世情矫,英雄笑,莫问为何。救世之道,刀、刀、刀!
改编自清代诗人袁枚的《所见》。
]]>牧童骑黄牛,
歌声振林樾。
意欲捕鸣蝉,
忽然闭口立。
改编自霹雳角色“御天荒神六铢衣”出场诗。
]]>身披六铢衣,
御宇藏真理。
云中封神路,
紫薇降天启!
改编自唐代白居易的《赋得古原草送别》。
]]>离离原上草,一岁一枯荣。
野火烧不尽,春风吹又生。
远芳侵古道,晴翠接荒城。
又送王孙去,萋萋满别情。
改编自霹雳角色“幽溟”化身“无绝期”手持“天雷杵”背着“神觉残生”时的出场诗。
]]>霓裳飘渺众神渡,
觉来犹知梦成空。
吾恨天穹无绝期,
叹留人间一残生。
腾飞的时代,造就挨踢三角之争,
自由的网络,成就真假黑客之乱。
在黑客的故事之中,还有一个传说:
来自火星的人,带来一套病毒,带来网络木马,
出身地球的人,耗尽一身脑力,写下杀毒软件。
病毒杀软的对立,冥冥注定的宿敌,
维护正义的人,连在网络,只有一个共同的目标(——升级!)
公孙无毒:我又忆起杀毒的感觉了!
毒邪:我不想杀毒!
蝴蝶毒君:这个系统天天都在杀毒!
人毒:杀毒伴防毒,扫过不留马。
东方毒立:网无二毒,唯吾毒照,你,又算什么!
原来你我早已感染病毒。
而传说,是真,是假?
马九五:网上总有愚人,相信改装后的木马。
黄网挂马,谁生谁死,
流氓钓鱼,谁更邪恶,
网银安全,谁强谁弱,
杀软争锋,谁领风光。
中毒之深,杀之不尽,
头脑之晕,烦人噪音。
无机之人,清净悠哉,
百毒之身,千毒难分,
杀毒之途,朝九晚五,
重装之路,悔不当初,
启动之途,空无一物,
恢复之路,哀唱悲歌。
网络苍苍毒之囧,
资料纷纷死无踪。
杀软病毒一条心,
驱动木马爱相逢。
——霹雳病毒
改编自霹雳剑宗开场白。
]]>遥远的北隅,传出无数故事:
有一个人,火烧三百剑客,只为一剑招;
有一个人,杀尽三千王酋,只为一口气;
而追寻未来的人,他有一口剑,一个仇人;
找寻过去的人,他有一口剑,一个恩人;
只求现在的人,他有一口刀,一个情人。深刻的意念,造就刀剑三角之争;
自尊的价值,成就邪心王者之乱。在北方的故事之中,还有一个传说:
来自无间的人,带来一口魔剑,带来杀戮兵祸
出身苦境的人,耗尽一身功力,铸下一口圣剑
圣魔之剑的对立,混沌之初的宿敌,
接下遗愿的人,身在江湖,只有一个共同的目标公孙月:我又忆起杀人的感觉了
剑邪:我不想杀生
蝴蝶君:这个江湖天天都在杀人
人邪:杀戒半斜影,剑风不留人
东方鼎立:天无二日,为吾旷照,你,又算虾米
原来你我早已身在无间而传说,是真,是假
邓王爷:世上总有愚人,相信美化后的谎言
黄泉之都,谁生谁死
圣邪初会,谁立高峰
王者狂者,谁强谁弱
剑踪刀锋,谁领风光魔海之深 如来誓尽
兰若之韵 莲华圣音
无欲之人 脱俗还真
百年之身 千年红尘
恒河之途 晨钟暮鼓
彼岸之路 悔不当初
恒河之途 行单影孤
彼岸之路 婆娑悲歌云海苍苍天之穹,
蝶影纷纷火寻踪。
杀诫朱厌莲佛心,
封禅剑雪恨相逢。霹雳剑踪~
《#诗盗#·霹雳网络·神盗惨声2》:网络飘渺鸟人多,中毒犹知杀软弱。吾恨升级无绝期,叹留木马两三坨。
改编自霹雳角色“幽溟”化身“无绝期”手持“天雷杵”背着“神觉残生”时的出场诗。
]]>霓裳飘渺众神渡,
觉来犹知梦成空。
吾恨天穹无绝期,
叹留人间一残生。
【鲸神链】信誓旦旦地和她说跳下山寨吧,武侠小说里都这样,下去绝对不死,还会有好事发生。【美女】很害怕,不情愿,于是【鲸神链】一脚把【美女】踢下去。
【土匪】愣了,没色劫了,无语地打量着【鲸神链】。
【鲸神链】看出他们想改劫财,于是把钱包掏出来……沉甸甸的一个哦……咳咳,穷人,里面都是硬币,也扔下山寨!
【土匪】二愣了,没财劫了,继续地盯着【鲸神链】:“我COW,大哥,你太绝了吧,看来只能留下你的一条小命了”。
【鲸神链】:“哈哈,您们太天真了,我可是主角,主角跳山寨死亡率从来都是零,何况下面有个【美女】做垫!”说完就跳下去了。
【土匪】三愣了,七个失声痛哭,第一次打劫就遇到这么牛的人……还是改邪归正吧。
【鲸神链】到了山寨谷底,醒过来已经是第二天,突然冒出个【金刚】,从兜里掏出一本书,说:“你恋,恋完了无敌于天下!”
【鲸神链】一看,是本《久恋神经》,果然天下无敌,但是——【美女】呢?
【金刚】比来比去表演了昨晚的那幕,毕竟是大猩猩,只会说那一句人话。
原来,【美女】被踢下来后也没死,但后来有人扔下一个东西,把【美女】给活活砸死了……
这个故事告诉我们一个道理:不要以为您有钱就可以乱扔钱包。
]]>他们都说英语。晚上街上没人。据说是因为这里有怪兽出没,已经杀死镇上很多人。
那天傍晚,太阳已下,天边一片深红。那条街,很像厦门中山路步行街,但更宽,两边的楼更高,整条街也是深红色调,那是被怪兽杀死的人的血氧化过的颜色。
人们已经忍无可忍,几位大胡子的彪悍大叔商量着要去杀怪兽,以绝后患。他们都是高大威武,身强力壮的,拿砍刀、斧头、大枪当武器。
我是例外,我什么都没拿,纯粹是看热闹。
在街上,我看到远方的黑影在街道尽头的楼房上挑来挑去,慢慢接近我们。
枪声响起。但是怪兽的速度太快了。第一个人死了,我很清楚地看到是被咬断脖子,鲜血喷洒满地,然后头被扭断,拿走挂在高处。
接着另一个又死了,是被怪兽用巨臂把头从身体上拔了出来,还连带了几节脊柱,我又把每个细节看得清清楚楚。但是奇怪的是,我竟然一点都不害怕。
其他人看不到这个残忍的过程,只看到悲惨的结果,也看不到怪兽的行踪,所以有人动摇了。
有人惊慌中乱开枪,竟然无意中打中怪兽的头,可惜那怪兽的头太硬了,只是流点血而已。然后那个人又被怪兽撕碎了身体,他的头被怪兽吃了。
有人说那个怪兽只吃头。
人越来越少了,包括我只剩四个。我开始意识到怪兽盯上我了。
它大概也发现了,它每次杀人都被我冷眼观察到整个过程,所以它觉得我是必杀的对象。
它依然是用其它人看不清楚的速度移动,唆的一声就跑到我身后。然后停了,它可能想看清楚我,与此同时大家看清楚了它的位置,向我大呼快跑……但是太迟了,怪兽很快就伸手过来抓我。
一瞬间,剧情发生了逆转。
我转身,迅速抓住怪兽的脖子,用它拔掉别人头颅的方式,把它的头给拔掉了。
原来我刚才看得那么仔细的时候已经学会了……
在场的人很惊讶,后来的人也觉得不可思议。
我无语,我也不明白为什么。
可是慢慢地人群中有人把枪对准了我。
依然是深红的天幕,出现了一道极光。我抬头,我清楚,他们看不见,而我分不清。
我是天使,还是恶魔。
所有人,包括我,都迷惑了,就在这个时候,众人皆醉我独醒的“天下无敌泥巴娃”出现了,指着倒下的怪兽,很牛B地说:“对不起,我是中国人!哇哒啊~~~~~~~Chinese kungfu!”
我哈哈大笑,众人便把我当作鹰熊欢呼。
]]>改编自霹雳剑宗主题诗。
]]>云海苍苍天之穹,
蝶影纷纷火寻踪。
杀诫朱厌莲佛心,
封禅剑雪恨相逢。
改编自霹雳角色“曼无歆”的台词:
]]>幽厉五神带来光明,
也带来黑暗。
来自阴阳两界无穷尽的人世之间,
交错永无止休的黑白漩涡。
当五灵汇聚,
掌五幽厉之心,
打破现实界限,
永不餍足的玄貘,
将侵蚀人界梦魂,
吞噬一切思想!
改编自霹雳角色“道隐·凤凰鸣”诗号。
]]>心怀一襟朗月,
剑藏七尺乾坤,
惯看满城烟雨,
回首不入烽云。
Which comes first, the chicken or the egg?
老听一些无赖和智障拿这么简单的问题考人,或者应该说是忽悠人,人民群众很生气,所以泥巴娃给大家来个标准答案!
先有蛋!
谁都知道是因为蛋急了,有这方面的需求,才有人去做,咳咳,鸡的……以后别再问这么脑残的问题了!
]]>改编自唐朝诗人韩愈的《春雪》。
]]>新年都未有芳华,
二月初惊见草芽。
白雪却嫌春色晚,
故穿庭树作飞花。
改编自霹雳角色“卧云先生初行雁”的出场诗。
]]>身藏风云心无尘,
古今圣贤谁为邻。
一笑横江挂书剑,
九重天外卧龙深。
改编自鲁迅的《自嘲》。
]]>运交华盖欲何求,未敢翻身已碰头。
破帽遮颜过闹市,漏船载酒泛中流。
横眉冷对千夫指,俯首甘为孺子牛。
躲进小楼成一统,管他冬夏与春秋。
改编自唐代王涯的《送春词》,就小改。
]]>日日人空老,
年年春更归。
相欢在尊酒,
不用惜花飞。
最后那个鹰是音译,ing 的意思。
]]>改编自霹雳角色“皇甫定涛”出场诗。
]]>腰悬长剑逐流火,
醉向遥弓击天寰。
襟袖清风夜露沾,
天涯歌啸一身还。