八哥之神【番外篇6】

听说鲁豫要来采访稣

1. 听说稣特别能装逼是这样吗?能不能传授一下给大家?

这就得分析一下装逼的本质,一般人会觉得装逼就是吹牛,其实是一大误解,装逼的奥义在于——说实话!

举两个例子:

  • 想买个六米长的迈巴赫,却发现自己的 C1 驾照开不了,算了,不买了!反正钱也不够。——大实话!

  • 稣不喝酒,不喝茶,有人来做客就拿出绮怡招待,500ml 一瓶 35 元,结果被说太装逼。其实这水健康,换成酒岂止要 35 元,还致癌!您说到底谁装逼呢?

2. 好像很有道理,您赢了!我们还是回到剧情。您不是说过自己是无神论,为什么剧中还出现神?

简单地说,本剧出现的神指的是每个人的心头之师,可以认为它是每个人内心的原始愿力,它也受各种规则制约,和神话故事里那些有超能力的神完全不是一回事。

  • 西方的“宿命论”认为,在人的一生中,上帝每分钟都看着你,你没有神的许可,连一根头发都不会脱落。这显然是伪科学。

  • 本剧的“命运无神论”完全没有神祗的意志成分,也无前生所造之业的因果成分,而是自然而然,谁都不可能预测或改变。简单地说,头发掉了就掉了呗。

3. 那您相信有那种有超能力的神吗?

我相信有超能力的神在天道前一样是卑微。

4. 稣为什么从神变成人?

这是一个循环,不是单向变化,也有从人变成神的。

时机一到,神自然就变成人。如果有神主动变成人,那可能是因为做神太快乐,以致于满足贫穷,本来就穷,还因为太快乐被人嫉妒,这不科学。做凡人呢,虽然没有做神开心,但有动力去赚钱呀。

世界上有很多更重要的东西,但前提是有钱。举个例子,小学就学过一寸光阴一寸金,但长大后发现,上班族不就是出售自己的时间换钱?有钱时,时间才宝贵;有钱时,感情才珍贵。

5. 是不是因为作者不想写了,强行把稣写死?

当然不是!中国人的平均寿命是 76 岁,稣曾经在佛塔前立誓折寿守护亲人长寿,一命赔多命,消耗掉 10 年寿命,死于 66 岁,完全科学合理。

梦见的就是这样死的,我有什么办法?咳!

6. 稣的身体不是新的吗?

身体是新的,但记忆是旧的,而且处于慢慢恢复的过程,恢复到一定程度后,稣领悟到转世的意义,自主选择转世。这事情已经发生过无数遍,不用在意死不死。

7. 《八哥九九八十一难》后来去哪里了?

这本书是高中时,妈妈为了让稣不因为早恋耽误学习、正确理解异性心理而传授的。但他的作者是未来的稣……时空悖论。

里面的科研成果是花了巨大心力得来的,但失忆的稣看它其实是不太相信的,所以离婚时期稣去实践了几个,付出一些代价后相信。

和大部分时空悖论的处理方式一样,和秦阳结婚后,稣亲自把它烧毁。

8. 30 集中有一段写稣对陈博士的质疑,所以她到底是不是稣的前妻?

不知道……真的!虽然我是作者,但这些故事是梦见的,所以也说不清楚!第 27 集里,稣在和陈立姻讲和秦阳的故事,那些记忆都是从识界复制而来的,识界里稣的前妻叫陈提姻,而不是陈立姻。至于 AVILab 的那个陈立姻,到底是谁,作者至今没搞懂!

优化思维【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:这词得用闽南语念才会押韵。

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

诗盗·道梦无神论

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

注解

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

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

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