Tag Archives:闲聊
Rust 适合开发游戏吗?
Rust 并不适合开发游戏,它更擅长有明确定义,边界清晰的项目,这样你类型体操一遍做完问题不大,比如重构个已经十年没变过的 C 模块,但游戏领域并没有明确的定义,策划案不停修改,你的代码不但要求快速迭代还要求不停重构,那么类型体操在这过程中就变成锁死你的紧箍咒。
参考文章:3 年写了 10 万行代码开发者吐槽:当初用 Rust 是被忽悠了
这里解释一下,为什么当项目没有明确定义时,rust 为啥会显得笨拙?因为此时不但需求会随时间变来变去,更要命的是你没有一份十年没变过的 C 代码做参考,对项目整体实现缺乏全局的认识,只有自底向上的方法不断尝试和修正自己,不段反思和改进中上层代码,才能像盲人摸象那样逐步认清楚整个世界因该是啥样。
而此时类型体操会在这时勒得你喘不过气来,一个之前需要横着用的变量现在需要竖着用了,你思来想去发现你完全没办像其他语言那样改成法竖着用了,于是你只有引入更大范围的重写才能解决问题,你觉得这样很难受,去 rust 社区寻求帮助,但发现他们并不会帮助你真的解决语言问题,只会一个劲的指责你 “你觉得痛苦正是因为你对 rust 不熟悉导致的” 或者 “rust 逼迫你更大范围重写正是逼你尽早写出更好的代码”,他们这么说在定义清晰的项目里的确没问题,越早重构越好,但在定义不清晰的项目上里存在大量中间设计,你今天改成这样,八成不是最终形态,隔几天可能还要改,而此时 rust 却逼迫你每次都提前费精力进行更大范围的重写,即使这时完全没必要的,过两天就不需要的,他也不许你像其他语言那样用快速实现的方式应对新的中间状态,等需求稳定了,技术方案也收敛的情况下再进行迭代和完善,然后你就抓狂了!
网友 FENG DONG:项目没有明确定义时候,需要设计 cost function,然后让代码沿着 gradient 演进。但 Rust 不是一种可微的语言。
网友 Aaltonen:游戏开发是 “巨型可变状态球” (giant balls of mutable state),需求像 gradient descent 一样逐步演进,但 Rust 的借用检查器(borrow checker)和所有权模型强制你 “一次性想好”,导致小改动引发大重构。
那么 Rust 适合开发游戏引擎么?我只能说 depends,主要到了现在也没啥 rust 开发游戏引擎的成功例子啊,一天到晚到处搞营销的 rust 游戏引擎 bevy 基本上类似个玩具,到现在都没啥靠谱的商业游戏案例,顶多几个独立小游戏之类,而且它要求用 rust 来写业务逻辑,这个上面已经论述过,它并不适合开发游戏业务逻辑;

博客迁移服务商
我的博客使用的 wordpress 一直架设在 bluehost.cn 上,差不多十多年了,前两天突然就不能访问了,后台也登录不进去,一查 bluehost.cn 主页,原来停止服务了,很多和我一样在上面运营十多年的网站都是说停就停,然后完全不提供数据备份的时间,连个电话都不给你打一个,就是邮件垃圾箱里提前几天给你发了一封告知邮件,人家 linode 之类的欠费停止你服务后,任然给你机会备份走,结果它完全不给。
所以没有啥完全稳定会一直存在的服务商,幸亏我机器上有备份,调查了以下几家虚拟主机提供商,他们的业务发展情况及稳定性,最后迁移 bluehost.com 了,帖子和评论都恢复了,但是页面访问统计没恢复到,因为页面访问统计插件是把数据存在别的 mysql 表里的,但之前用的备份插件又是只导出 wordpress 标准表格,所以包括访问统计,upvote 之类的数据全部清零了,无所谓了,还好访问量不算啥重要的东西,希望这次 bluehost.com 能多用两年。
之前我用过 bluehost.com 的,指示图 bluehost.cn 服务器在香港,国内访问会快点后面才选他,看来太小众的还是有问题。这次 bluehost.com 的服务器在亚利桑那,虽然远点,但国内访问起来,只要不下载,看个页面什么的也还算顺利。
有人问我为何不用静态页面?发布到 github pages 上那种,因为我这个 wordpress 博客以及个人 wiki 只依赖一家服务商,但是 github pages 页面需要依赖 github,评论需要依赖 gihtub issues+插件,计数器又需要依赖别的什么服务,依赖的服务太多了,上网那么多年我从不相信有什么服务可以一直持续下去的,所以依赖自然也少越好。
除了服务外,依赖的项目也是越少越好,之前那些 github pages 使用的基于 issues 的插件突然作妖,要收费,不收费就给你插广告,闹得天怒人怨,你还没办法,历史评论是博客相当重要的数据,依赖 github issues 作为评论数据存储的机制还有个致命方案是你还不能方便的导入导出,你会被绑死在 github issues 这个方案上,完全无法掌握自己的数据,不说 github 停止服务,一旦它一朝更改 api 规则(跟 twitter 一样)就只有哭了。
最后 wordpress 的功能真的很强大,插件生态也非常丰富,我也比较熟悉,有啥需求大概都能搞得定。

微信比 Telegram 落后在哪里?
不怕不识货,就怕货比货,以下七点帮你了解差距究竟有多大:
第一:微信桌面 Qt 版引用了来自 Telegram 的 GPL 代码,对二进制 grep 一下字符串 desktop-app 就可以看到。有人找相关负责人提了一年了,结果连删掉字符串都懒得删。
第二:微信这么喜欢抄 Telegram 却不多抄点好的,比如微信群历史服务器只能保存两周,图片更短,当时没下载的图片几天后想看看就发现被服务器清除了,而 tg 全球十亿用户,消息存服务器四五年都不会删;
第三:什么年代了,微信附件大小最大 100M(不知改了没?)tg 随便存 10G 附件,一存好几年!一年前群里存的视频现在都找的到;
第四:微信那么挣钱的产品,结果给你搞个朋友圈合照都看不清脸的究极图片压缩,号称节省存储空间,好意思么?语音质量被压缩的经常听不清楚,飞书和钉钉的语音都比它清晰一万倍;
第五:微信用起来比 Telegram 卡有很多原因,其中一个重要原因就是微信使用单消息队列,所有消息挤压在一起,每次切换到微信就要同步一半天,包括全局消息和每个群最近的几百条消息,必须要同步完才能近一步操作,几秒时间消息列表不断更新跳变,点击无响应,导致想发给老婆的话明明点了老婆头像,最后因为列表跳变发到了同事群或者小孩班级群里去了,闹出了无穷无尽的笑话;但 Telegram 之所以不卡一个重要设计就是消息使用多队列,同时不需要等消息同步完才能操作,多个消息队列可以一边同步一边操作,每次切换过去你都可以立即流畅的操作,各个群的最近消息历史会使用并行的多个消息队列在后台并行同步,根本不影响你操作;

你是在什么电脑上学编程的?
我小学时用的 GMT-92 学习机写程序,就是 FC 6502 那一套,但比后辈小霸王强多了:右上方有磁带盒,有很多扩展软件以磁带形式发布,自己写的 BASIC 程序也可以录制到磁带上下次接着写,小霸王那种没有存储设备一关机你的代码就没有的环境是根本没法学习编程的,因为代码完全无法积累,每次重来,你永远写不了复杂的软件,而这台 GMT-92 最核心的地方就是提供磁带存储,让我可以写稍微复杂点的代码,我就抱着一本 BASIC 说明书开始抄写上面的各种例子代码,然后修改部分不停验证学编程的:

那时我想做一个空战游戏,但是我只会每次循环控制一个飞机从左边移动到右边,完全不知道该如何同时控制多架飞机,因为身边没人教,没网络,书店里没游戏开发书籍,也没处问人,只能去书店看相关的电脑书籍得知有些操作系统是有多任务功能的,可以同时运行几段程序,我心想这就是我想要的,可 GMT 根本没有多任务这个功能怎么办呢?

Atom 编辑器的插件开发
老王卖瓜,自卖自夸,Atom 比较方便的地方是可以用 javascript/coffee 给 Atom写插件,并且写起来很简单,我刚按说明给 Atom 写了一个插件:atom-shell-commands 用户自定义 Shell 命令,类似 NotePad++ 中的 “Run Commands”,EditPlus/UltraEdit里面的”User Tool”,以及 GEdit 中的 “External Tool” 和 TextMate 里的 “Shell Command”。
1. 用户可以自定义工具,并且配置到 Atom 中,比如一键调用编译器,一键运行,
2. 输出结果会显示再底部的 bottom panel 中
3. 点击错误输出可以跳转到对应有错误的文件上去
4. 自定义正则表达式匹配错误输出中包含的文件名和行号。
5. 全平台支持,再 Mac/Ubuntu/Windows 下充分的测试过。
初始化时,再你的用户配置中(Atom File->Open Your Config或者 ~/.atom/config.cson),写入类似:

[转载] 《论语》魔兽版
曾子曰:吾日三省吾身。
曾子墨说:我一天要检查三次装备、药水和道具
曾子曰:君子思不出其位。
曾子墨说:牧师专心加血,不要乱跑。
子曰:父母在,不远游。游必有方。
孔子说:奶妈奶爸在后面,战士不要跑太远,即使要走也是带着盾牌走。
子曰:以约失之者,鲜矣。
孔子说:因为公会活动而下副本跑掉,听着都新鲜。
子曰:德不孤,必有邻。
孔子说:德鲁依单干不好,必须有同伴。
子曰:吾未见刚者。
孔子说:我连一件甲板都没有。
子曰:兴于诗,立于礼。成于乐。
孔子说:联盟的优点在于有爱唱诗的牧师英雄和彬彬有礼的骑士,大功告成自然众人高兴了。
子曰:吾自卫反鲁,然后乐正。
孔子说:有个德鲁依在野外偷袭我,我快乐的原因是因为我打跑了他。
子曰:吾未见好德如好色者也。
孔子说:我还从来没见过像色狼一样喜欢德鲁伊的人。
子曰:后生可畏,焉知来者之不如今也?四十、五十而无闻焉,斯亦不足畏也已。
子曰:新来的玩家似乎很牛b,你怎么知道他不是用钱买的?有的战士四五十级还不会嘲讽,下副本根本不鸟他。
子曰:不患人之不己知,患其不能也。
孔子说:我不怕你看我的装备,就怕你近不了身。
子曰:由!知德者鲜矣。
孔子说:哟,知道怎么善用德鲁依很少。
子曰:工欲善其事,必先利其器。
孔子说:你想要去燃烧,还不快去找把像样的武器。
子曰:性相近也,习相远也。
孔子说:职业相同,天赋配点会相差很远。
子曰:唯上知与下愚不移。
孔子说:只要超级高手和初级菜鸟,pk的时候才不怎么动。
子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?”
孔子说:玩魔兽要多学习,这还用说么?有部落的朋友来较量武艺,不也是很开心的事么?
子曰:“吾十有五而志于学,三十而立,四十而不惑,五十而知天命,六十而耳顺,七十而从心所欲不逾矩。”
孔子说:我15级了还想着继续学习,30级开始出去闯,40级可还是什么都没捞到,50级才学会复活术,60级等了大半年,70级终于可以随心所欲去燃烧了。
子曰:“攻乎异端,斯害也已。”
孔子说:副本里面乱引怪,这会害了自己的。
孔子谓季氏,“八佾舞于庭,是可忍,孰不可忍也!”
孔子对季氏 “对方八个60级都跑到你们新手区杀人了,这都可以忍受,还有什么不能忍受呢”
子曰:“苟志于仁矣,无恶也。”
孔子说:喜欢外形美观的玩家一般喜欢联盟,不喜欢部落
子曰:“唯仁者能好人,能恶人。”
孔子说:只有追求游戏技术的高手,才既用联盟,又用部落
子曰:“朝闻道,夕死可矣。”
孔子说:“想45分钟dk就要知道路,迟了人质就要死了”
子曰:“德之不修,学之不讲,闻义不能徙,不善不能改,是吾忧也。”
孔子说:德鲁依肉搏不强,魔法一般,看到有好的野兵不能做宠物,玩了这么久又不能换职业,我真郁闷啊
子曰:“回也非助我者也,于吾言无所不说。”
老师说:被别人逼着无敌加回城,其实我一点也不爽。
季路问事鬼神。子曰:“未能事人,焉能事鬼?”曰:“敢问死。”曰:“未知生,焉知死?”
季路来问怎么玩鬼族。老师说:“人族都没玩好玩什么鬼?”季路又问:“怎么打败对方?”老师说:“怎么保命都不知道,学什么打败别人?”
子曰: 二三子以我为隐乎 吾无隐乎尔
孔子说: 你们以为我要隐身么,对付你们两三个菜鸟还用隐身?
子曰:邦有道,危言危行。
孔子说:下副本有规则,不要刷屏,小心行动
子在川上,曰:“逝者如斯夫!不舍昼夜。
孔子边上厕所边说:时间过得好快,排队排了一天一夜还进不去
子曰:朽木不可雕也。
孔子说:拿着这个烂盾牌还想做MT?

断点-C语言
看着那密密麻麻的反汇编,
连眼睛红了都没有发现,
听到你说错误很难重现,
人数还一点一点再往下减;
我转过我的脸,
不和你争辩,
未检测边界肯定,
非常的危险;
发誓从今天,
不再用 C语言,
我真想改用脚本重构好几遍!
我点上一根烟,
在这个需求善变的年代,
再好的程序员也不能幸免;
打开的源文件,
设满很多断点,
只想在睡前让程序能够,
撑到明天。

今天要上课
周日周一要参加《绩效管理》培训,周二要给新人讲《服务端开发》,现在新版本的讲义还没有改好,累呀。

[转载] 二十六史 – 毛太祖本纪
本朝太祖毛姓讳泽东字润之,湖南湘潭人氏。其寿诞之日为西夷之圣诞日。帝少有大志。未冠之时即作咏蛙诗,以述其志。及少壮,游学长沙,师从杨昌济,后入京,供职于京师太学藏书阁,问学于鸿儒陈仲甫、胡适之、李守常等。适之昔日留学于美夷,恃才傲物,因帝未忝科名,适之甚轻之。适之门生傅斯年、罗家纶之辈亦甚轻帝。后帝一统天下,欲灭群儒,盖因此三人故耳。帝受仲甫命,返湘结党,得仲甫提携,得以拜见于前朝太祖,官侍读学士。
前朝太祖崩,时,前朝武厉帝为大司马大将军,阴结其党,欲灭帝党人。帝谏以兵击之,仲甫不许,武厉得以蓄积羽翼,民朝十六年武厉于松沪,前朝摄政王汪公于江夏,大杀帝党人。八月帝与诸党人会于汉口议事,帝曰:枪杆子里面出政权!众皆异之,后受命返湘,策反南军卢尔德铭部,九月九日兴兵起事,围长沙,不克,败走江西。军次三弯,帝重编余部,至队官皆有帝之党人监军。帝据井岗,与朱武胜公所部合兵,屡败官军,威名远扬,号朱毛军。武厉怒,令江西巡府鲁涤平统兵十万进剿,帝诱敌深入,引兵击之,涤平败,帝擒官军先锋总兵张辉瓒。武厉闻信,令兵部尚书何应钦统兵二十万进剿,帝大败之。武厉益恐,统兵三十万再战,又败于帝。
一载余,武厉又率五十万劲旅进剿。时帝因党争,被削兵权,虚职赋闲。官军犯境红朝震恐,朱武公与周文正公掌兵权,问计于帝,帝授奇计再破官军。武厉败绩,再整旗鼓,以西夷部番将参赞军机,以百万之众犯境。时自俄狄归国之儒生博古辈摄政,番将李德与周文正公参赞军机,博古一儒生耳,挟俄狄酋斯大林之威,夺帝兵权,唯俄狄之命是从,事无巨细,皆听命于李德。李德辈纸上谈兵,屡战屡败。引兵西走,兵渡湘水,不足三万,众将皆恶李德,兵次遵义,诸将议政,帝之威众人咸服,周文正、朱武胜公皆附之,夺博古、李德兵权,帝得以再统雄兵。帝帅余部,转战滇、黔、川诸省。过雪山,与张国焘部合兵,国焘忌帝之官居其右,欲害帝,大将军叶剑英闻信,间道驰告帝,帝得脱。国焘部将陈昌浩欲引兵击帝,大将军徐向前拍案而起,国焘、昌浩乃罢。民朝二十四年入陕,据陕北以抗官军。官军进剿屡败于帝。帝令徐向前率所部西征,败于西北回军,丧师数万,向前等仅以身脱。丙子双十二,帝策反满洲王张公、陕西镇守使杨公兵谏,囚武厉,帝使周文正公谒武厉,晓以大义,武厉罢兵。

春运生存手册
在书写正文之前,笔者将使用推理手法,预测春运的规模、环境和潜在危机,并给出自己的分析结果,在此判断的基础上,以春运的各个阶段为分界线书写手册正文。再次说明笔者并非专业人士,文中的各种结论和推导过程仅供参考。
必要储备与使用方法
1. 水
没有食物,一个人可以生存1-2个月;但是没有水,生命最多只能支撑10天。一个成人在正常情况下日消耗2-3升水,限量供应下一天至少需要500毫升水。(大瓶可乐为1.25升,冰红茶为500毫升,缺乏量具时可代替使用。)水可以在春运开始前,确定等车地点所处环境即将缺水时储存。届时把家中所有可以存水的大型器皿全部盛满水(黑色、很结实的塑料袋也可以存水,注意把袋口封好,避光储存),并采取定量供应,有机会就外出采水。
2. 食物
所有食物都应在阴凉、干燥、通风处保存,贴上标签、写明储存日期和保质期,先存的先用,并在春运时实行定量配给,以吃到半饱为准(不会饿死的)。因为笔者无法预测春运会持续多长时间,所以请各位自行决定储备的种类和数量。
盐:盐份为人体所必需,按年纪、身体状况、气温、和劳动强度不同,一个人平均每天消耗10-15克盐,储备时应选择加碘盐。注意,不能干吞盐粒,那会损伤肾脏,应用开水溶解后饮用或做进菜里(如果那时候你还能弄到新鲜食物)。
白糖、醋、烧烤用的各种调料粉:
白糖为身体提供热量,水一冲就能喝,也是不错的调味品;醋可以为储备的干肉之类食物增加味道(吃起来别有风味),也可以用来消毒和预防疾病;烧烤用的调味料中含盐份和各种香料,可以撒在食物上或者做汤,储备它的目的也就是让春运时饭菜的口味看起来并不那么糟糕。
芥末:芥末有很好的消毒杀菌止泻作用,买牙膏状的芥末需冷藏,推荐芥末粉。
干肉、鱼干、虾干或虾皮:
干肉类首推咸牛肉和牛肉干,它们营养丰富、口味一流、保存时间长、可在天冷时提供大量热量;鱼干类首推海鱼干,它们种类繁多、价格便宜、容易保存;虾干或虾皮中含有丰富的营养及矿物质,可在做汤时加入。
罐头食品:种类繁多,口味不错,保存时间非常长,但是价格昂贵。如有多余的钱,那可以储备一些。
维生素片:犹豫了很久,还是把维生素片列为食物一类,因为在春运时很难弄到新鲜食物,而人体在紧张状态下维生素消耗得非常快,因此要把它当作食物那样储存它。不悔推荐的是21金维他(安利的太贵了),80多元6瓶,每瓶可以供一个成人一月的消耗量,细算下来还是比较便宜的。

