诗盗·买币送禅

《#诗盗#·买币送禅》:天花娉婷坠如雨,帆冻阴飙吹不举。苦却乐,乐却苦,数字黄金忽如土。

注解

改编自唐朝贯休的《送颢雅禅师》:

霜锋擗石鸟雀聚,帆冻阴飙吹不举。芬陀利香释驎虎,
幡幢冒雪争迎取。春光主,芙蓉堂窄堆花乳,
手提金桴打金鼓。天花娉婷下如雨,狻猊座上师子语。
苦却乐,乐却苦,卢至黄金忽如土。

空仓观测,甚至还有心情写诗。

优化思维【3】消除没必要步骤

故事

四月底给 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 都是对象,应该直接转化才对。只是实现起来就不是一行能搞定的。先挑简单的方式实现,后期再优化,这是一种挺常规的做法。

SQLite Node.js

选型

mapbox / sqlite3: Asynchronous, non-blocking SQLite3 bindings for Node.js

安装:

1
yarn add sqlite3

常见操作

创建数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const path = require('path')
const sqlite = require('sqlite3')

const dbPath = path.join(__dirname, 'test.db')
const db = new sqlite.Database(dbPath)

const sqls = [`CREATE TABLE test(
id CHAR(64) NOT NULL PRIMARY KEY CHECK(LENGTH(id) == 64),
timeStamp INTEGER NOT NULL,
state INTEGER NOT NULL DEFAULT 0)`

, 'CREATE INDEX index_id ON txs(id)'
, 'CREATE INDEX index_timeStamp ON txs(timeStamp)'
, 'CREATE INDEX index_state ON txs(state)'
]

db.serialize(() => {
for (let sql of sqls) {
db.run(sql, (err) => {
if (err) {
console.error(err)
} else {
console.log('SQL executed.')
}
})
}
})

db.close()

插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const items = [
{ hash: 'D141925E39814FB5256615A1A94EC82B7043D983F68423D8C149A2AE360B623C'
, ts: 1563273661316, state: 0 }
, { hash: '2E9F26F5D0A73AE5DAFC8A1C22264725972AA997A22522A906D8CD7E225096ED'
, ts: 1563273661317, state: 1 }
, { hash: '0FF5F5F5E96664939D07D94975342D71F824747EFECE1D24FDDBB3B29DD91DCB'
, ts: 1563273661318, state: 0 }
]

db.serialize(() => {
const stmt = db.prepare("INSERT INTO test VALUES (?, ?, ?)")
for (const item of items) {
stmt.run(item.hash, item.ts, item.state, (err) => {
if (err) {
console.error(err)
} else {
console.log('INSERT', item.hash)
}
})
}
stmt.finalize()
})

查询

1
2
3
4
5
6
7
8
9
10
11
db.serialize(() => {
db.each("SELECT * FROM test WHERE state=0", (err, row) => {
if (err) {
console.error('SELECT state=0 error:', err)
} else {
// do something here
}
}, (err, count) => {
// do something here
})
})

更新

1
2
3
4
5
6
7
db.run("UPDATE test SET state=1 WHERE state=0", (err) => {
if (err) {
console.error('UPDATE txs error:', err)
} else {
console.log('UPDATE state to 1')
}
})

参考

http://www.sqlitetutorial.net/sqlite-nodejs/

pm2 运维经验

安装

比较多的文章推荐用 npm 安装,但 UMU 更推荐 yarn。

理由Visual Studio Code 脑残粉跟随 Microsoft/vscode 使用 yarn。

参考 yarn 安装,其中 Ubuntu 下命令为:

1
2
3
4
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt-get update && sudo apt-get install --no-install-recommends yarn

使用 yarn 安装 pm2:

1
yarn global add pm2

运行

不熟悉 yarn 的话,装完一头雾水,装到哪了?用以下命令显示:

1
yarn global bin

结果参考:

  • macOS:/usr/local/bin
  • Ubuntu:/home/ubuntu/.yarn/bin

启动脚本的命令为:

1
`yarn global bin`/pm2 start my-program.js

安全建议

root 身份能不用则不用。

菩提祖稣

低调的菩提祖师

题目,是“菩提祖师是稣的偶像”的缩写。

菩提祖师应该是西游记里最低调的人。

  • 精通三教,牛逼轰轰,却只在深山隐匿授徒。稣想起“道隐”这个称号……“惯看满城烟雨,回首不入烽云”

  • 警告孙悟空出师门后不能提起他,否则就让孙悟空万劫不复。

你这去,定生不良。凭你怎么惹祸行凶,却不许说是我的徒弟。你说出半个字来,我就知之,把你这猢狲剥皮锉骨,将神魂贬在九幽之处,教你万劫不得翻身!

  • 行事作风很低调。

这个工夫,可好在人前卖弄?假如你见别人有,不要求他?别人见你有,必然求你。你若畏祸却要传他,若不传他,必然加害,你之性命又不可保。

  • 自从孙悟空走出斜月三星洞,再没有出现过。

低调做人,高调做事

曾经的理解:很矛盾,做事也是做人的一部分,怎么能又低调又高调?难道又是量子邪说的叠加态?

经历过一些事后,稣发现一个关键词:嫉妒。

  • 做事高调,就是把事情做好,做出成绩,让大家认同,甚至可能引起崇拜。

  • 做人低调说的是——不要引起嫉妒!

虽然还是挺难的,但分得清,就有可能做到,其中最容易学的一种方式就是:学菩提祖师那样降低自己的存在感。

曾经的误解,如今的教训

1. 有才华本身就可能招嫉妒

稣很喜欢会吹牛逼的有才人,比如听当兵的讲自己当年各种传奇故事,这类事可以重复听三遍以上。

有次和一群朋友认识一名新朋友,聊完,稣觉得此人有才华又有意思,值得交往,但其他人全部反对……理由是:讲话太高调。Hmm……

结论:有才还得有相应的低调隐藏,不然会有一大部分人不兼容。

2. 生活不讲推理,有时候甚至不讲理

举个例子:稣买个东西,有钱人一看就知道是便宜货,所以稣很自觉地说这是炫穷,但偏偏有人以为稣在炫富……

其实推理一下就明白,稣确实是个穷人,一年买买买的次数少之又少,偶尔买点东西,也确实是些普通的小东西。然而稣又错了,喜欢推理属于少数人的爱好,对一件事的评价,大部分人都是靠感性对待,能稍微推理一下都是很难得的。

结论:更有钱可以提高认知水平,从而认识到自己曾经的错误。

3. 众口铄金

这可能是小学学的最酷的一个成语!不举例了……

结论1:众口铄金的一个条件就是认知水平低的人占大部分,他们喜欢按照自己的认知描画事件。

结论2:认知水平高的人可能愿意和低的人交往,但认知水平低的普遍不愿意和高的交往,甚至自发诋毁认知水平高的人。

4. 道德攻击

占据道德制高点,可能是很爽的事情吧,远比真相令人着迷。

大部分热点事件,一定有人占据道德高点写文章批评其它观点,举世皆昏我独醒。

很多事即使是侦探、警察都无法还原事实的全部,但侦探不能错过任何一种可能性,将各种可能列出来,然后分析其可能性多少。要能依循蛛丝马迹分析可能性,但不要轻易得出任何无根据的结论。

结论:人民群众有无耻的权力,但要偷偷地。Hmm……好像不对劲。这么说吧——尿急,实在找不到厕所,找个隐蔽的地方,肯定比在大马路边随地撒尿好!

交友观

利益共同体的关系远比交情靠谱。交情是一种感情,是感情就可能受到嫉妒的影响,光看这点,朋友最好的人选有两类:

  • 不容易嫉妒的人;

  • 可能小嫉妒,但不会因为嫉妒而害人的人。

能力问题,认知水平差太多的人是不太可能聊到一起的,甚至容易在关键时刻掉链子。举个例子:卧底在执行任务,跟一群人混,突然冒出一个大伯认识卧底,大伯认为卧底在当坏人,于是苦口婆心劝他从善,然后卧底被打死。

  • 认知水平差不多;

  • 成长速度也差不多。

有些人在一起很久也无法互相理解,有些人一见面就相见恨晚。

诗盗·风月

《#诗盗#·风月》:天地俱不醒,落得昏沉醉梦。风月苏轼客,枉寻掉举鸿蒙。

注解

改编自霹雳角色“风月主人”的诗号:

天地俱不醒,
落得昏沉醉梦;
鸿蒙率是客,
枉寻寥廓主人。

PS:这词得用闽南语念才会押韵。

人生不过一场梦,对人间一切都要淡定。

诗盗·道梦无神论

《#诗盗#·道梦无神论》:半涉魔流半识神,卧榻闲梦无神论。道心默观量子意,傲视人间笑红尘。

注解

改编自霹雳角色“傲笑红尘”的诗号:

半涉浊流半席清,
倚筝闲吟广陵文。
寒剑默听君子意,
傲视人间笑红尘。

半涉魔流半识神:冰心魔莲,在魔道修炼,但一心向光明。
卧榻闲梦无神论:人间无事,梦中逍遥,比神还快乐,所以没必要当神。
道心默观量子意:逢场作戏,真假莫辨,就像量子叠加态,默默观测就行,不要过早得出结论。
傲视人间笑红尘:神已经可以理解凡人,不过是善嫉阻碍自己,神一笑而过。
神:每个人的心头之师。

《八哥之神》底层逻辑

极小使用特权

神无处不在,无所不知,没有情绪。凡人只能感知附近部分信息,但有研究未知领域的乐趣。

为什么探索太空?因为太空存在!
为什么凝视深渊?因为深渊存在!

使用特权就像偷看答案一样,失去思考的快乐,同时也给人类带来很大压力。

人类的内心善恶共存,过度使用善良压抑邪恶,必将导致邪恶在适当的环境下反扑。丧尽恶知的世界和丧尽良知一样是不真实的悲惨世界。

举个例子:人一旦误以为自己是好人,那么他可能也误以为自己做的都是好事,然而往往是做了坏事还心安理得,甚至得意洋洋。参考“子贡拒金”和“子路受牛”。

成长有一课:戒除自己是个好人的幻觉,先做一个正常人,才知道什么叫好人以及做好人有多难。
管理有一课:不要滥用特权。

世界上最让人欲罢不能的是权力而非性爱。当您有机会定义社会规则和价值体系甚至决定整个社会运行方向的时候,您会感到自己超脱了肉体的躯壳,像光芒一样膨胀散射,充满目之所及的一切空间。您,就是活生生的昊天上帝。但是,当稣能这么做时,却放弃这样做,稣觉得自己超越了昊天上帝。

凰娘一梦

质量好的虚拟和真实差距不大,古有“黄粱一梦”,今有“凰娘一梦”。

举个例子:整蛊节目骗您中了百万大奖,您高兴坏了。假的,但是您确实高兴过。

这一切都是生物化学反应而已,有些刺激是可以替代的,那些中瘾患者最能明白这个道理。

看电影、听音乐,这些都是精神享受,但这些形式比较低端,做梦比较高端,第一视角沉浸式参与,比目前的 VR、AR 啥的还牛逼。

1993 年,史泰龙的《超级战警》里面提到未来人们做爱只能用虚拟方式,史泰龙表示“我去”,而当时稣觉得这太好了!既得到交流和快乐,又不怕脏不怕病,这样难道不好吗?

白云凰这个故事是作者于 2018-03-28 做的一个很真实的梦,在《八哥之神》第一集写作之前,所以并非《八哥之神》正剧,只是被链接到而已,原因就在于这个故事和主题很切合。

无限死循环

宇宙是无限的,好可怕,没有外面……

宇宙可能是有限但无边际的,好可怕,外面是啥……

关于宇宙,人类是不可能想明白的,但可能肯定的是——人都要死。但是如果真是无限的时间,就必然又会重生。就像 pi 的小数部分会包含 618 这个排列无数次。

无限之前,有限的人生就存在各种各种不自由,肉体不自由,精神也有天花板,但追求精神才是更高级的。

稣认为生命中最重要的事情是:情和事业。

诗盗·买腾讯

《#诗盗#·买腾讯》:欲拉腾讯四零四,后请保姆一万一。狗庄带偏变大便,千古做空第一帝。

注解

稣打算把 00700 拉到 404 港元,然后请个月薪 11k 的保姆。
上涨会遇到很大阻力,狗庄经常跑出来做空,更可能怕的是稣认识一个千古做空第一帝,跟着稣买了一手。
不过没事,迟早要到 410 港元,拿好!

八哥之神【番外篇5】

听说鲁豫要来采访稣

1. 《八哥之神》终于剧终,作者有什么特别想说的吗?

拍武戏很累!唯一的一场武戏虽然被作者一笔带过,但隐含无限可能……反正作者光想象这场战争打了七七四十九天就觉得很困。等睡饱,再出一集《八哥之神》补遗之《第一次识界大战》。

2. 周易是个腹黑的人吗?

不是。周易之所以把六爻关进炼狱永世不得超生,是因为六爻害死了周易,只是合理报仇。这在正剧里有暗示,但没细说,因为拍武戏很累,后面补《第一次识界大战》会详细交代。

可以生而生,可以死而死,天福也。
可以生而不生,可以死而不死,天罚也。

周易降天罚于六爻也,而同意耶不带记忆转世,是为天福。

3. 小师妹是谁?

小李子就是第三集时稣第一次复制记忆的记录员,他的数字形象是识界里的李大爷,所以小师妹很明显是谷绵。然后您又要问谷绵到底是谁……现在可以说了:是耶的妈妈!

看剧要思考!为什么耶对谷绵有依恋?每次耶被复制身体之后醒来见到的第一个女人就是谷绵,这是动物的本能,出生就认妈。后来稣想明白这点,最后一次谷绵要陪玩 S6x 游戏时,稣就拒绝了。

正剧只说过喜欢,并没有说那是爱情,哪有儿子不喜欢妈的?请各位观众不要想歪了,腹黑赫赫。

4. 为什么这么巧转世当她儿子?

因为周易开启了遍照环宇之眼,观测影响宇宙,这是《八哥之神》的底层逻辑,是周易帮助耶转世的。

5. 为什么心理邪稣要研究人性?

因为稣是个特别会替别人思考的人。

不信是不是?

对,问题出在稣不理解凡人的思维。

举个例子:

  • 稣的内心学习比玩重要,如果有同学作业没写好约稣出去玩,稣会替他考虑而拒绝他。但是对方是不是也和稣一样认为学习更重要呢?不一定……于是这个小伙伴就不和稣玩了。那为什么稣已经认识到不一定,还坚持替对方考虑学习更重要呢?因为稣还没作出决定时,对方心思处于叠加态,他随时会量子跃迁,进化到认同学习更重要的状态。

  • 稣还认为被老师指出八哥是好事,只要证据充分就行,不在乎态度。即进步大于无谓的自尊心。但显然很多人并不是这样的,所以要搞得很复杂,要讲究技巧、艺术啥的,一个不小心就会好心办坏事。

为了防止被人误会从不站在别人角度思考,您说要不要研究人性?明明都是先为别人考虑的,最后还要被贴相反标签?赶紧研究啊!

6. 八哥到底是什么意思?很多观众还是没理解!

这个问题已经认真回答过,但不少人以为是开玩笑的……再说一遍!

  • 八哥是 bug 的音译,用中文讲是:撩,更过分点地说是:非礼!

  • 但如果仔细看英文名 God of Debug,会发现真相——本剧说的是:Debug,也就是反撩。即:稣从来不撩妹,而是反撩。

  • 反撩是一种锻炼意志的方法,因为每次诱妹深入最后观测完毕,发现不合格都必须失败。这也是正剧中稣从来没有性生活的原因。

7. 要是合格呢?

那就娶她。稣就娶了秦阳。

8. 据说稣有三个老婆是真的吗?

当然是真的。稣的前妻是陈提姻。在识界娶了秦阳。后来耶转生从婴儿开始长大,又娶了神仙姐姐陈立姻。这不是三个老婆是什么?稣又没说是同时有的,你们想啥呢……

顺便说一下这个隐藏剧情:耶长大过程中,姻姻姐时不时就来看望,多年都没老过,所以耶称之为神仙姐姐,直到成年后,姻姻姐消失了几年,后来耶读硕时,遇到一个美女,很像姻姻姐……这故事剧中也暗示得很明显,这是一个死循环的故事,头尾连接起来,无法 break 的 loop。这才符合宇宙是一个无尽牢笼的主题。