codedump的电报频道
4.53K subscribers
152 photos
4 videos
2 files
631 links
发布个人博客(主页 codedump.info)、想法、推荐等。RSS订阅地址:https://rsshub.app/telegram/channel/codedump_notes,过往汇总搜索可以到:https://app.shokichan.com/c/tg/codedump_notes。
Download Telegram
#杂
这几天韦易笑在知乎问题《为什么 lua 在游戏开发中应用普遍?》下的回答很火,引来了一些讨论,我也想聊聊我的看法。

我觉得任何产品肯定都是时代的产物,时代的局限性本身就是产品的一部分特性。Lua诞生在上世纪90年代,我记得当年即便是比尔盖茨好像也说过PC电脑只要8MB内存就够了这样的话。在这样局限的硬件环境下诞生的Lua,其特点(卖点)就是小巧精干。换言之,我认为如果都是发展了N年之后的视角再去对比一个诞生于更早之前、诞生环境更严苛的产品,并不算很公平。

回到Lua本身,Lua可能是所有语言里,既能拿来写纯文本配置,又能拿来写代码逻辑且轻量的脚本语言(欢迎补充其它方案)。比如XML、Json等只能称之为“格式”,也就是只能用于表达数据,没办法表达逻辑;其他脚本语言就只能用来表达逻辑,纯表达文本类型的数据也有点困难。

而Lua,恰好两个都能做,这个特点成为了它被时代(再次强调“时代”)选中为那个胶水语言的重要原因。在一些游戏里,想写个插件,里面包含一些配置数据,还有一些插件本身的逻辑,这时候如果要用一个数据格式,还要用一个语言就比较麻烦了,这些麻烦很可能一下子就挡住了那些非程序员的插件开发者。

除此以外,Lua还能实现协程,在早年C、C++没有好的协程方案的时候,这个特性可是太重要了,有了协程的支持就可以用同步的编程方式写异步的代码逻辑。

总而言之,我认为放到上世纪90年代诞生的一门常年只有2W行C代码的脚本语言来说,Lua已经够优秀了。今天对它的很多挑剔,多少有点“关公战秦琼”的意思。

另外,用户自己最后会用脚投票的,谁最有生产效率、综合开发起来最舒服、相关领域的生态更好,等等因素,最后用户自己会实打实地用自己的实践去投票。

最后,Lua的这个既能做为数据格式、又能用来写逻辑的特点,有一点像Sqlite:

* Lua:恰好有一点编程能力的文本文件。
* Sqlite:恰好有一点存储、索引、查询能力的单文件。

这种“单一文件”特性放到嵌入式领域就很吸引人,“单文件”意味着便携(portable)。
👍332
Forwarded from 不求甚解
#Web #Chrome

🌍 帮助你每天进步一点的生词本 + 翻译服务 —— Relingo

👀 上周 有介绍 腾讯家出的翻译服务,在推送评论中有朋友推荐 Relingo 这款服务,我也抱着试一试的态度进行了使用,实际体验下来还真是不错,今天就来介绍一下它。

🙌 首先,我之前是比较重度使用彩云小译的,比较看重的是在原有页面中以段落为粒度进行翻译,这一点 Relingo 也有提供,所以让我在第一次使用就非常有好感,整体汇总一下它的特性:

🔹支持根据 CEFR 框架标准设置自己的词汇量;
🔹支持网页中对生词进行不同样式的标记(下划线/单词高亮/右侧注解,以及其中两类的组合样式);
🔹支持网页中的划词和段落翻译;
🔹生词本管理(自动记录、复习、掌握);
🔹支持视频字幕;
🔹支持统计,并可以发送学习概况至邮箱中;
🔹支持多设备同步,并可以导出导入词本;
🔹支持单独屏蔽网站;
🔹支持浅色和深色模式。

💻 Relingo 目前支持 Chrome/Edge/Firefox 浏览器,可以前往相应的商店进行下载,未来还将提供单独的 App。拓展插件可以免费使用,基础功能无限制。也提供付费服务,付费服务提供 DeepL 翻译引擎(无需自己购买 DeepL API)、无限制的跨设备同步、周期记忆等服务。目前 Beta 阶段高级版本享受折扣($ 0.99/月或 $ 29.99/终身 )。
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
#暴论
没有全自动化回归测试的“有状态服务”就是梦魇。

游戏就是一个很典型的“有状态服务”,“有状态”的意思,是游戏服务的连接对应到一个在线角色的信息,角色的数据包括但不限于:角色的属性、所在的地图场景、日期的特殊性(比如大型节假日要做一些运营活动)。

由于游戏服务是一个如此特殊的“有状态服务”,要构造它的测试数据来跑自动化测试就很难,基本都是靠人肉来测试。

没有了全自动化的回归测试,随时可能踩到坑里来。比如某个节假日来了,要临时开一个这个节日的运营活动,于是可能改了一些玩法逻辑,测试的时候一般只会去验证这个活动相关的逻辑。但是问题来了,有可能这个活动还影响了其它的玩法。由于缺少全自动化测试,就没有去验证,于是很可能到了上线的时候才发现问题,这就要一顿忙活热更新修复了。

在我短暂的做游戏开发的时间里,大概半数以上的错误本质都是由于缺少全自动化验证导致的。还有一个原因,游戏逻辑代码以百万计,而经常又是使用Lua、Python这样的解释型脚本语言来写的,缺少编译期的检查,这又是可能产生问题的原因之一。

所以人生苦短,如果不是特别热爱,还是远离这类做游戏逻辑的工作,这类工作的技术难度也就是比普通CRUD高那么一丢丢,但是生命都浪费在没有自动化测试导致的问题修复里了。

会修问题、解决问题都不算什么本领,学会理解这类开发的流程导致了问题总是此起彼伏,避开问题的高发领域,别把宝贵的时间浪费在这种无休止的问题解决里。
👍27
#SQL
我这两天看databend的SQL解析代码,才发现一个之前完全没见过的SQL语法:“with table_alias_name as”来创建一个局限于查询的临时表,这种语法好像有个的名称:common table expression(简称CTE)。

这里是解释:https://learnsql.com/blog/what-is-cte/

BTW:上面这个learnsql.com好像是某个专门学习SQL的知识付费网站。
👍3
#算法
HyperLogLog算法是被广泛使用来估算一组数据里有多少不相同值(distinct value)的算法,可以参考这里的讲解:https://www.yuque.com/abser/aboutme/nfx0a4

它用较小的数据量实现了不差的预估准确率。

比如要估算一天有多少不同的页面被访问(注意不是被访问的次数),这个算法就派上了用场。

在数据库里,要优化一个查询计划时,也需要知道被访问的表里每一列有多少不同的值来指定查询计划,于是也需要用到这个这个算法。

但是原始的HyperLogLog实现并不支持删除数据,比如一个表每一列原先的预估是一个值,但是也得考虑这个表被删除一些数据之后算一个新的预估值。

论文Every Row Counts: Combining Sketches and Sampling for
Accurate Group-By Result Estimates
给出了一个大体的解决思路:

* 可以在每个值加一个计数器(counter)。
* 但是如果每个值的计数器是8Byte的话,就需要新增30KB的容量来存储计数,违背了HyperLogLog的初衷:小代价实现估算。
* 于是论文里提出这个计数器只需要1Byte,这1Byte的前128的值是精确存储,后128存的只是概率值。换成1Byte之后,成本从30KB降到了3.6KB。

我把RustHyperLogLogstreaming_algorithms fork下来在其基础上提供了delete的实现,diff见:https://github.com/datafuse-extras/streaming_algorithms/commit/762a59c5e65b36797a1ee1cad6fc410c62c9a8b9

貌似这应该是业内第一份不限语言的hll delete实现:)
👍17
#区块链
“中本聪的比特币论文写得也太简练了,2年多前就下来看过,当时完全没看懂。
最近学完北大肖臻老师的这门课程的前半部分, http://zhenxiao.com/blockchain/ 再回头去看论文,终于看懂了。。。
不得不说,设计真是精巧,考虑也是相当周到。佩服!”

课程链接:http://zhenxiao.com/blockchain/
原推:https://twitter.com/senob_/status/1591725292170932226
👍16
#电子书
“《像黑客一样使用命令行》是我4年前写的一本电子书,现在开放出来,希望对各位有所帮助,同时也欢迎感兴趣的朋友完善~”

原推:https://twitter.com/linuxtoy/status/1593213048122376192
项目地址:https://github.com/xuxiaodong/usingcli-book
预生成的PDF及ePUB:https://github.com/xuxiaodong/usingcli-book/releases
12👍3
#杂
使用Sublime替换vscode配置成主力IDE已经大半个月了,目前感觉还好,最重要的是:Sublime足够轻量,不会出现vscode那样时不时的卡顿情况。

插件系统能覆盖常见的辅助插件,更重要的是LSP的出现,使得很多以前在专业IDE才能支持的代码提示、辅助功能也能在编辑器上支持起来了。

另外,这个替换IDE的过程里,也不是没有考虑过类似NeoVim这样的方案,但是几个问题把我挡住了(也许是暂时的拦住,后面也可能再尝试:):

* 需要自己配置的插件太多;
* 没有太好的右键菜单项支持,这样使用的时候就需要记很多的快捷键,有点望而却步了。

以前很多人提起Vim的时候,经常强调是Vim用得好了能有“全部操作使用键盘完成”的爽感,我后来自己的体会,感觉其实不必对全部操作都得纯键盘完成有太多的偏执,该鼠标操作的时候还是鼠标操作,自己怎么舒服怎么来吧。

简而言之,现在我已经不去过度追求去驾驶一辆“纯手动挡”的车了,该辅助的时候就上辅助。
👍16
#杂
“有一句常见的鸡汤,叫走出舒适区。

我非常讨厌这句鸡汤。

什么叫舒适区?你能容易地获得正反馈,就是舒适区。人是被正反馈驱动的生物。

我讨厌这句鸡汤,是因为经常被滥用,鼓励挑战负反馈,仿佛不能战胜负反馈你就是loser。

比如以前有人建议我学好英语,而我的外语天赋极差,近乎于英文盲。这哥们连连督促我走出舒适区,拿自己的学习经历来举例,说得我愁眉苦脸一蹶不振。但这哥们又是个死宅,一边说想去香港看看,一边推三阻四不肯出门。说到旅行我可就不困了,拍着胸脯给他做好了香港攻略,他打死都不去……

后来我想明白这个道理,他很容易在学英语上获得正反馈,所以鼓励我走出舒适区去学英语。但他对于长途旅行感到恐惧,所以打死不肯走出舒适区去香港旅行。

彼之蜜糖,我之砒霜。鸡汤有毒,因为我俩的天赋点根本就不一样啊。

所以我个人的立场是:
1、人应该拥有更大的舒适区,更大的能力栈
2、扩大舒适区,应该寻找那些可以带来正反馈的事
3、如果形势所迫,只能去挑战负反馈,但知道这不可持续且上限较低
4、如果负反馈领域对你很重要,就去找互补的伙伴或者环境”

By 纯银。

我很同意里面的观点:“舒适区”就是更容易得到正反馈的事情,但是一件事情需要持续做下去,大前提是能够获得“正反馈”。
所以,我现在很警惕做什么事情需要用“坚持”这样的字眼,因为一旦需要坚持,就意味着:

* 可能有东西阻碍了你,
* 可能做这件事情本身没有让你获得正反馈。

而这些问题,都不是简单的意志上喊一喊“坚持”就能解决的。所以现在,遇到不顺利的时候,更多不去安慰自己要“坚持”,而是反问一下上面两个因素里遇到了什么问题,解除阻碍、拿到正反馈,事情才可能继续做下去。

原微博:https://weibo.com/1134424202/MgWPzydfd
👏22👍16🥰2
#资源
一个收集了各种文件格式解释、相关工具的wiki:

http://fileformats.archiveteam.org/wiki/Main_Page
👍1
#杂
今年买过的硬件产品里,个人觉得最值得是2021年版顶配的MacBook Pro。

当时主力写Rust之后,感觉之前的机器性能不太够用,于是动了想升级机器的念头。

自己感觉M1的CPU加上32G的内存应该是足够的,但是老婆的建议是直接上顶配搞到64G,两者差了几千块。

最后还是买了64G的顶配,实际用下来64G的配置确实能够“从容”很多,做很多事情不再抠抠搜搜的。

回想起来,人生实际有很多事情都被动得不够从容,有时候去打车,连司机都会催你赶紧过来。

只是多花几千块钱,在最常用的工具上,切实换取“从容”的感受,这个性价比还是挺高的。(截图出自Runcat)
👍263🔥1
#杂
一转眼,上一篇博客还是9月份了,原因是这一阵实在有点忙,工作方向有了比较大的变动。

我之前对数据库相关技术,更多是了解一致性算法(Paxos略懂,Raft懂的更多一些)、存储引擎(BTree、LSM等),但是目前在Databend里,这两部分已经较为稳定了:openraft改动不大、底层的数据存储用S3类的存储,所以这两部分可做的事情不是太多。

另外,我自己也更愿意多去探索数据库技术栈里的其他技术,比如现在更多业余时间在学习SQL查询引擎的实现,一时半会儿在一个新的领域很难有像样的输出来。

所以暂时来说,博客只能鸽一下,更多时间用在学习不熟悉的新技术上面了:)
👍1
#杂
一年一度喜剧大赛2落下帷幕,我特别喜欢总冠军“某某某”的三个节目:

《军师恋盟》
《遇人不赎》
《再见老张》

三个节目分别讨论了:爱情、死亡、亲情,笑中带泪中间还带翻转的。尤其是《再见老张》是这季的最后一个节目,以这样的节目结束整季节目,这个结尾收的很棒。
👍7👏1
#播客
《跟 Xiaohanyu 聊聊在 gojek 的工作经历、远程工作和不同城市的风貌》

xiaohanyu 在网上认识好几年了,一直没有机会面基,前几天发现他上了ByteTalk这款播客节目,特推荐一下,节目里谈及了很多远程工作、国外工程文化等话题。

同时,他之前还写过一篇文章,讲到了自己的亲弟弟是如何在他的辅导之下发生改变考上名校改变生活走向的:《教育对人的改变有多大?》
👍13
#杂
知乎问题“为什么现在生活比以前(或者古代)好了,我却感觉不到幸福?”下的一个回答,里面提到衡量幸福与否,关键在于时间的使用上,个人赞同这个说法:


当你在考虑你幸不幸福的时候,不妨在这三方面质问自己:

——从自由支配个人时间的量上来看。我的人生的确是由我自己支配的吗?
——从自由支配个人时间过程的质上来看。我自由支配的这段人生过的有趣吗?
——从自由支配个人时间结果的质上来看。我自由支配的这段人生真的是有意义的吗?
👍11