八哥之神【20】

“佛塔里肯定有一个老头等稣好多年,即将传输百年功力给稣,然后稣立马变成武林高手,把这些撒币和尚打成猪头。”一想到这,稣忍不住在一团漆黑中笑起来。

“笑脸郎,你都被关起来了,还笑得这么开心?”楼上传来一个老太婆沧桑但浑厚的声音。

“额?怎么是女的?”稣内心震惊,急忙问:“佛门清净地,怎么会有女人?难道你是保洁阿姨?”

“不是!贫尼乃本寺创始人,殷离。”

“殷离?难道你就是《天龙八部》里的那位殷离?”

“什么《天龙八部》?你说的是金庸的小说吗?”

“是的,你是古代人?”

“笑脸郎,你搞错了,殷离是《倚天屠龙记》的人物,那不是我,但我确实是古代人,按照当今公历,我出生时间是 1333 年。”

“妖,老妖……婆,你要吓死稣啊!不要开灯!稣不敢看。”

“这里没有灯,上来一层,我这边有些自然亮光。”

“别吓稣,几百岁的人得多恐怖?”

“呵呵,笑脸郎你还真信?都不怀疑我瞎编的?”

“信,你这声音没有几百年功力怎么可能这么恐怖,稣快耳鸣了。而且本寺神秘兮兮,创始人一定不简单。”

“傻小子,这佛塔其实是个歌舞厅,我用功放设备和你说话的,你上来吧!”

“卧槽……你是年轻的美女!殷离?1333 年?”

“是的,没有身份证。”

“要不是刚刚见鬼,稣差点就不信了……说出你的故事,稣很仰慕你,洗耳恭听。”

识界量子地狱

陈博士说:“圣小开骗我自杀,但我并没有回到现实。”

谷绵:“你自杀时的状态码不对,所以无法回到现实,不过性别恢复了,你现在可以选择转世。”

“哪里不对啦,妹纸?”

“性别错误,跳转程序检查状态不对,就拒绝超脱。”

“这不是坑我吗?”

“这个八哥,我们会在下个版本修复。作为补偿,你转世后可以获得 1000 年寿命,我将帮你送回识界主线 1333 年。”

“喂?你玩我呢?公报私仇吗?那么早的时间,啥科技都没有,多无聊啊!”

“我只是个程序,有意见等你超脱后找周老师反馈。再见!”

佛塔神秘四层

“我 23 岁遇到一个叫周易的人后就不再衰老,后来拜少林寺四大法王为师,学了武功和佛法,就到此创建本寺,并一直在佛塔里修行。”

“真无聊!你说的那个周易,好像是稣的大学老师呀!稣刚刚在塔外还很 buggy 地看到他,这到底是怎么回事?”

“你记得陈博士吗?”

“陈博士?难道是……那个秘书年轻漂亮的梗?”

“我就是陈博士。上次是你骗我自杀,结果因为识界设计有 bug,我并没回到现实,这次我等你几百年,我们可以一起超脱了!”

“等等,稣骗你自杀?然后你还真就自杀了?这不可能,稣不是这种人,好死不如赖活。”

“事实就是这样,我思考人生 663 年,加上周易冒出来提醒几次,才都明白的。”

“还是不可能,你肯定先做了啥对不起稣的事情,稣才会骗你,而且这个骗术也太强,稣不认为自己有这能耐!”

“你这小子有完没完?”,殷离姐姐暴打了稣……

只吃硬不吃软的稣,这下遇到克星了,痛苦地问:“好吧,你淫了,额啊!那么……回到现实是指离开寺庙,回到软件园,继续上无聊的班?”

“不是,那个并非现实,我们都在识界里,死后还有更现实的世界。”

“哦,别!稣已经工作好多年,有点存款,加上叔公给的 406 万,现在有 520 万存款,所以稣还不想死!”

“现实世界里,你可是千万富翁,比这区区 520 万多很多,还有特殊身份,比当码农有前途,你还是死了算了吧!”

“天呐,你这寺庙还有专业劝人去死的服务,稣的三观被你们毁光光了。”

“呵呵,那就在此多耗几天,我料你定会想死。”

“不想,不想,稣不想。刚被你打一顿,更不想死了……稣要练功报仇!”

“省省,我这几百年的功力,你是无法企及的。而且你还没搞清楚自己的人物设定吗?”

“嗯?你知道什么天机?”

“你这辈子只会被女人打,不可能打得过女人,尤其是我这样的高手!”

“哦……但稣可以增强防御能力吧。”

“就会嘴硬。给你点时间消化,这里没吃的,你要睡觉就上奇数层,这里有 19 层,奇数层都是暗黑无光,偶数层有点自然光,但到晚上都是一样暗。”

“好的,姐姐,你是想饿死稣,明白!”

“拿着。”殷离递给稣一个盒子。

“这是啥?”

“里面是含致幻剂的蜡烛和火柴,你快饿死的时候就点它,可以帮你超脱。”

八哥之神【番外篇3】

听说鲁豫要来采访稣

1. 李怡和吴情是同一个人吗?

不是。性格有点相似,取名自“利益无情”。李怡对应的是大学同学的故事,男主不是作者本人,因为很相关,就一起写了。吴情是作者梦里的人物,演员是作者高中同学。

2. 为什么出现美柚这种现实中的公司?会不会泄露隐私?

  • 什么是现实?能吃吗?
  • 美柚是“美国柚子开发商”的缩写,这是一家区块链技术公司。
  • 全是做梦,甚至偶尔是梦中梦。啪啪啪也是做梦……千万别当真。

3. 出现许效舜有什么特别含义吗?

这问题作者也想不通,因为日常生活中根本没有相关事物,莫名其妙就梦见……

4. 释德灵究竟是何方神圣?

原名段郑灵,父姓段,母姓郑,德国土豪,真的娶了三个老婆。不过是在作者梦里……

5. 八哥到底是什么意思?

这是作者被问得最多的问题……八哥就是 bug,意思是:撩。

  • Can I bug you?
  • I already fell for someone, so please do not bug me anymore.

翻译:

  • 我可以撩你吗?
  • 我已经心有所属,所以请不要再撩我。

6. 为什么好多女角只出现一小会就消失?

  • 春梦易醒,匆匆过客。
  • 抓不出爱情的我,总是眼睁睁看她溜走……人生就是百年孤寂,大部分时间都在挣扎,谈恋爱哪有那么容易,不是人不对,就是时间不对,还是洗洗睡。
  • 那一夜,冷风小雨,空旷的广场,还飘着一只小海豚,耶问自己在干嘛?稣小心翼翼地回答:一路风雨参禅,即使美人在侧,稣一心向佛,阿弥陀佛……

7. 为什么不描述一下女角的容貌?

梦里黑乎乎的,分辨率也比较低,反正都是不同类型的美女,各位观众喜欢哪款自己套,毕竟作者请不起这么多女演员……

8. 哪位女角最漂亮?

目前出现过的是谷绵最漂亮,不过还有秦阳(女)和若干校花未出场呢!

云游戏开发指南【1】

实用参考

  1. 云游戏的架构设计和技术实现

    https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/79226317

  2. GamingAnywhere

    http://www.gaminganywhere.org

  3. OBS Studio

    https://github.com/obsproject/obs-studio

服务器架构

  • NVIDIA Grid 显卡

  • Windows 8 - 10,最好别用 7。

  • Sandbox 方案

一份授权 Windows 系统大约可以运行 40~50 个游戏实例。

音频

  • 服务器上设置 48000Hz 采样率;

  • 编码器采用 Opus,48000Hz,128kpbs

    1. 音频编码的延迟:需要一个 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 的。

    2. Opus 是开源并免费的,AAC 好的编解码器都是收费的。

流传输协议

  • RTSP

  • live555

    http://www.live555.com/

    UMU 之前用 live555 2017.07.18 版本时,发现它对 Opus 支持不好,需要改进,当前版本未测。

八哥之神【19】

听静夜之钟声,唤醒梦中之梦;观澄潭之月影,窥见身外之身。

男人天性追求强大的力量,在见证稣的感知和分析能力后,耶希望能融合这种能力,以使自己更强大。又经历一梦,耶终于变成稣。稣决定不断变强,掌握命运!

然而,融合要消耗很多能量,还需时间消化,一大早的钟声令稣恼火,很想找人打一顿。没错,就是上次想测试的弗智,抓起来打!

“弗智同学,咱们来练练?”

“练?居士何意呀?”

“武功!来比划比划!”

“阿弥陀佛,小僧没见居士练过武,怕误伤居士。”

“没事,稣刚在梦里学了一套西洋拳,你就陪稣测试一下吧!”

“哦?可以吧!居士请出手,小僧不出手,用步法应对就是。”

“卧阔,好大的口气!看稣把你打成猪头!”

咦?怎么打不到……

“再快点!出手太慢是打不到小僧的。”

“不可能啊!躲这么快,你特么拍《黑客帝国》呀?”

“小僧就像一个电子,同时身处多处。”

“量子邪说都来了……难道稣还没醒?”

“你打不到我,你打不到我。”

“没道理,稣已经在观测你了,所以你的位置是确定的。”

“居士要打到小僧时,小僧的位置才是确定的!”

“这个不好玩,咱们换个玩法,你先静止,稣打你,看你是死是活!”

“哈!看小僧的硬气功。”

“握了个叉,打死你!”

“嗯!出拳太远,打到时力道已经不足。”

“哦?那你说要怎么打?”

“寸劲!哇哒,你懂吗?李小龙!”

“没想到你这么专业!看来稣打不过你!”

“小意思,过奖过奖,小僧乃弗字辈第一高手!”

“卧槽……你淫了!”

稣转身要走,不料又是熟悉的背后偷袭。

弗智左手挽住稣的胸,右手拳头在背脊和腰部碾了几下,“居士长期坐着,腰背都不好,需要捣腾一番!”

“呃啊……”稣被整得热汗直流,十分酸爽。看来武术并非稣的领域,还是再试试其它技能吧……

人生原是傀儡,只要把柄在手,一线不乱,卷舒自由,行止在我,一毫不受他人捉掇,便超此场中矣。

“阿弥陀佛,稣还是写代码吧!”说完,心想:“每个月赚几万,再加上叔公给的 406 万,买个车买个房,应该可以娶个老婆吧!”

这时失恋的唐泰九、孟浩多过来叫稣:“居士,住持有请,后山佛塔等候。”

稣整理衣衫,淡定一番,便一念惊觉,直登佛塔。却遇到个陌生人!

“住持呢?”

“我就是。”

“你是住持?那释德灵呢?”

“我就是。”

“你整容了?照着哪个明星整的?怎么有点眼熟。”

“一月三身。”

“别扯了……声音还是一样的,那你还有一张稣没见过的脸?干脆一次见完。”

“我扯!”住持表演变脸,变回上次看到的。

“哇!难道你是四川人?”

“我再扯!”

“嗯?你是周易!”

“然也!”

“周老师,为什么是你?”

“小开,现在老师走后门附身住持,进来救你,你快点醒过来!记住这局醒来的方法是滚下山。”

“什么?周老师你为什么不搞科研,跑来 cosplay 住持?”

“居士,你来了?”

“住持大师叫稣什么?稣刚才产生幻觉了?”

“叫你居士,怎么?有问题?”

“再前面呢?”

“没有了,贫僧入定等居士,刚睁眼开口。”

稣心想:“见鬼!真的产生幻觉……”然后说:“好吧,大师找稣何事?”

“希望居士可以继承贫僧的衣钵。”

“这玩笑开大了吧!大师是认真的吗?”

“认真,居士的法号就叫释德明吧,以后寺庙拜托你了。”

“大师不是干得好好的,为什么让位于稣?”

“贫僧打算还俗,与家人团聚。”

“咦?大师还有家人?”

“实不相瞒,贫僧在尘世有三个老婆。”

“啥?玩笑开大了!三个老婆?大师上山前,不是送外卖的吗?应该是穷人,怎么能娶三个老婆?”

“居士不记得村里有人娶三个老婆的故事?”

“是有听过,还生了七个孩子……难道真是大师?”

“对,贫僧想体验生活,才去送外卖。遇到释德神后,先是好奇为什么他能终生不娶,随着对大神和佛法了解深入,贫僧认识到娶三个老婆是罪孽深重,于是就在本寺修行。”

“所以大师并非……”稣咽了一下口水,“上次推测失误,还以为大师也终身未娶!”

可怕!这个寺庙不简单……稣被打击得很想滚下山。

“居士很有慧根,考虑考虑?”

“当住持好处是不少,但以后谈恋爱不方便,稣要考虑几年!”

“居士可以先正式剃度,当个名誉住持。”

“还得练几年武功,不然可能会被不服稣的人打死!”

“哈哈,哈哈,居士还是挺有想法的。”

“稣这就回去考虑几年吧!”

“居士请留步!佛塔内有天地灵气,居士还是到里面考虑更快!”说完,稣就被软禁在塔内……

优化思维【1】字符串去空格

In place 版本

传入的字符串将被改变。

为方便复用,一般会实现 ltrim 和 rtrim 两个函数,然后 trim 函数调用这两者实现。

  • ltrim:从 str 头部开始找到非空格字符,偏移量记为 offset,将 str 左移(move)offset 个字符。

  • rtrim:从 str 尾部向头部找到非空格字符,偏移量记为 offset,将 str 截断为 offset。

一个想当然的实现:

1
2
3
4
trim(str) {
ltrim(str)
rtrim(str)
}

假设 str 是 x 个空格 + y 个非空格 + z 个空格,则以上代码需要把 y + z 个字符向左移动 x 个位置。

更好的实现是:

1
2
3
4
trim(string& str) {
rtrim(str)
ltrim(str)
}

由于先截断,剩 x + y,再去左移,只需要把 y 个字符左移 x 个位置。

优化思路:尽量减少复制,调整顺序也是优化手段。

Copy 版本

传入的字符串不会被改变,返回一个新的字符串。

一个复用前面代码的实现:

1
2
3
4
5
6
string trim_copy(string str) {
// str is a copy
rtrim(str)
ltrim(str)
return str
}

这个版本需要复制 x + y + z 个字符,ltrim 和 rtrim 里面都有找偏移量的代码可以复用,直接找到 y 个非空格字符是起点和终点,复制这 y 个字符就好了。

1
2
3
4
5
6
string trim_copy(const string& str) {
// str is a copy
l = lfind(str)
r = rfind(str)
return str[l, r]
}

优化思路:尽量减少复制。

move

strlen、strcpy、memmove 这类函数,都有一个优化思路:机器字长对齐,一次处理一个机器字。对于长字符串,效果显著。

优化思路:针对硬件特征调整策略。

公司不是家庭

很多公司会有家庭特征,因为管理者水平不够,就把家庭的理念搬到公司。甚至有的管理者,本身就是巨婴,蹂躏完家人,到公司继续蹂躏员工。

1. 有问题的管理者不降级或开除

  • 家庭:再不行的成员,也有血缘关系,无法开除。

  • 公司:不行的成员,往往因为人情关系,被姑息。

一个不合适的管理者占据一个位置,他的下属一般不敢举报他。

如果我举报了上司,上上司是不是会觉得我闹事,反而对付我?我的平级同事会支援我,还是让我孤军奋斗?

他的上司可能觉得没有更好人选,或者知道他有些问题,但有点交情,体谅他已经做到管理层不容易,不想动他……于是出现典型的人情治理。这样危害很大。 管理层固化之后,其中的制约关系网也固定,于是倾向于腐化。

基层干活的人是很容易流动的,但他们很难影响企业文化,反倒会被利用来说明公司是有优胜略汰的。其实,管理层的优胜略汰更关键、更致命。

2. 优劣员工的工资拉不开距离

  • 一般父母会倾力维护子女的平衡,如果一个子女明显发展比另一个子女好,他们就会更用力帮助较弱的那个。这是应该的。

  • 很多管理者都会降低工资差距,认为大家都是兄弟,不能差太多。

如果有余力,上级也应该稍微更用心去帮助后进者,但不是说劫富济贫,把厉害的下属的工资拿一部分给弱的下属。这种劫富济贫危害很大。 如果公司是害怕大家私下交流后发现有人很高导致嫉妒,那应该开除那些能力低又瞎嫉妒的才对。工资高的人一般不会告诉别人自己的工资水平。善妒者,往往也是弱者,如果不能激励自己变强,则也应该淘汰。

3. 长期没有策略性裁员,公司出问题才开始裁

  • 父母如果太放任、太宠爱孩子,往往培养出有问题的孩子。

  • 平时不管教好员工,这是太高估 HR 的能力了,以为招到的每个人都能管好自己并领悟公司的文化和业务?

有两种人就是应该及时裁掉的:混日子的、危害公司利益的。如果公司实在太有钱养闲人,第一类暂且忽视。有意危害公司利益的是必须立刻开除,比如上面说的不合格的管理,容易导致大量优秀人才流失或者无法进入,这就是危害公司利益。

公司发展很好的阶段裁员,大家都知道是好事;而等到发展遇到瓶颈才裁员,大家往往认为是坏事。

4. 裁员不公开原因

所谓家丑不可外扬,一般家庭的做法是隐瞒。

公司不是家庭,理由可以很简单地说明,但不应该隐瞒。比如能力不足,就写“末位淘汰”、“能力不匹配”、“发展方向不匹配”等。如果是做了危害公司利益的事情,就应该公布具体证据和开除原因,以维护企业文化。


道理都懂,主要是缺乏挖掘并有效反馈八哥的机制。