codedump的电报频道
4.41K subscribers
149 photos
4 videos
2 files
615 links
发布个人博客(主页 codedump.info)、想法、推荐等。RSS订阅地址:https://rsshub.app/telegram/channel/codedump_notes,过往汇总搜索可以到:https://app.shokichan.com/c/tg/codedump_notes。
Download Telegram
#数据库
“数据库”这个领域涉及的知识太多,之前还只是了解一些一致性算法和存储引擎的知识,后面开始要学习一下查询相关的知识了,知乎问题《学习数据库优化器如何入手?》的这个回答提供了一些参考的论文:https://www.zhihu.com/question/544427791/answer/2692512370
👍16
#杂
前阵子B站上“二舅治好了我的精神内耗”这个视频,让“精神内耗”这个词小火了一把。

据我观察自己,“内耗”好些时候还是自己造成,或者可以通过对自己的一些“心理干预”给减少的,不然也不会被称为“内耗”了,这时候就要搬出那段“宁静祷文”了:


God,
Grant me
the serenity to accept the thing I cannot change,
the courage to change the thing I can change,
and wisdom to separate the difference.

神啊.
.请赐与我宁静,好让我能接受,我无法改变的事情
.请赐与我勇气,好让我能改变,我能去改变的事情
.请赐与我睿智,好让我能区别,以上这两者的不同


我记得这段话最早我还是在大学时期有一次听李开复的现场演讲听他说的,这么多年如此简单的一句话都得反复修炼才可以,而且还是时不时的犯。

“知易行难”,以前有个描述“懂得很多道理还是过不好这一生”,从这里来看,“懂得道理”距离自己的“实践”,中间的距离还是非常非常大的。
👍124
#杂
上一次谈了程序员这个职业给我的最大规训是“错误处理”,其实除此以外还有别的思维锻炼,打算逐个聊聊,今天聊“压力测试”。

做C端的同学可能不太了解“压力测试(benchmark)”的概念,简单做个说明。

比方一个服务在上线之前,业务的可用性(Availability)要求99%的请求都在10ms返回,这时候就需要测试这个服务在多大并发请求下能达到这个指标。

有了这个数据之后,根据估算出来的业务同时并发数量,可以来反推需要多少服务器才能满足前面的可用性指标。

这里只是最简单的介绍,实际上线时要考虑压力测试一般都是在理想情况下做出来的,另外还要给系统一定的冗余度(尽量不要刚好到水位的阈值),所以需要给前面的测试数据打一个折扣。

回到“压力测试”这个话题本身,给我最大的概念就是:(压力)测试环境才能更全面了解一个人(公司、组织)。

比如一个人会说一些很漂亮的话,可一旦面临一些压力,话和动作就会变形;
比如一些公司,说起“愿景”都是很漂亮的话,但是遇到营收压力的时候身体的动作才是最真实的;
比如建筑物,都会给出说明在怎样的压力下能保持多大的耐久度,等等。

简而言之,一个指标、承诺都不是凭空给出的,要看ta当时所处的压力测试环境,结合起来看才能更全面了解。

山本耀司有一段话:“自己”这个东西是看不见的,撞上一些别的什么,反弹回来,才会了解“自己”。 所以,跟很强的东西、可怕的东西、水准很高的东西相碰撞,然后才知道“自己”是什么。我觉得这句话就带有很浓的“压力测试”思维。

再比如,去年在线K12教育团灭,在这个“压力测试”背景下,俞敏洪及新东方的表现让我很意外,这个可能才是更接近于真实的。

“压力测试”给我的第二个规训,是看统计数字的时候不太看“平均值”这个指标,因为这个指标不能反映数据的分布,更好的是看比如“中位数”,即半数以上的数据都在哪个数据线之上,或者9成以上都在哪个数据线以上,这类指标更能反映数据的分布情况。

最后,尽管有压力测试才能更全面了解一个人,但是不建议“压力测试”用在考验人性身上,因为还有一句话:“人性经不起考验”,并不是所有时候都需要足够的理性、客观,有时候也需要“难得糊涂”,要不然活得太累了。

对自己来说,尽管“压力测试”下才能看到更接近于真实的表现,很多时候也不必为自己在压测下的表现感到过分沮丧,相信自己能随着环境、见识等等的变化,能一点一点进步的,一时的表现不能说明一切。
👍40
#杂
Databend metasrvJepsen测试环境,我在README里面写了一下测试的步骤。目前用例还不够丰富,以目前的用例暂未发现服务的问题,后面需要继续丰富用例。

学习Jepsen的流程里,顺便了解(目前的深度确实只能说是“了解”)了一下以下的内容:

* 模型测试(Model Checking)
* 一致性模型(输出了博客一篇:《周刊(22期):图解一致性模型》
* Clojure语言和函数式编程。
* 还有很多不懂的...

BTW:Clojure的编码体验真的sucks,编译慢、社区vscode插件几乎没有,给不了太多的编码提示,门槛太高了。
👍3
#播客
ep.3 多抓鱼:“我最大的兴趣是发明永动机”》

做为多抓鱼的深度用户,这还是我第一次知道创始人是谁,这个叫“猫助”的老板,好像是我听了这么多次播客最爱笑的嘉宾,而且思路清晰、逻辑清楚,总之很加分。
可惜的就是这个主持人,问的都是些什么玩意儿,尤其到后面和什么web 3的DAO扯到一起,被猫助一顿批判,这个主持人的素质有点对不住嘉宾的素质,没能问出一些更好的问题。

继续深度遍历了一下,找到了猫助之前在一席上的演讲视频:《【一席】多抓鱼 猫助:在中国开一家二手书店》

按照她自己说法,履历大概是节目导演(我查了一下中国传媒大学毕业)出身,后来去了知乎、阿里,最后2017年出来创办了多抓鱼,这个跨度很是挺大的。
👍8
Media is too big
VIEW IN TELEGRAM
#杂
配置了一下Sublime 4的Rust开发环境,过程不算繁琐,初步体验下来感觉还可以,我用这套环境写一礼拜Rust下来试试看。
我录制了一个我的操作视频,演示了一下Sublime 4操作Rust项目,有一些限于时长没展示出来,目前我需要的功能基本都有了,包括:

* 给出Rust标识符的类型定义、跳转到定义处、列出所有引用的地方。
* 单独运行一个Rust用例。
* 保存Rust文件之后自动格式化、clippy检查、提示错误。
* ctrl+p快捷键能打开项目的任意文件。
* 基本的Vim编辑模式。

(BTW,这里列出了sublime lsp插件的功能点:https://lsp.sublimetext.io/features/)

如果sublime能玩转Rust项目,对比起Vscode来说这个环境就“轻量”了很多,体验会好一些。

我今天也折腾了一下NeoVim的Rust环境,但是折腾下来发现一套全终端的方案并不适合我,没有了弹出菜单有些东西(比如跳转、单独运行某个用例)等功能没有。
👍11
#数学
知乎上列的一个数学专业书单合集,里面列了一个数学基础课程的分支及学习顺序,我打算把其中最基础的数学分析、线性代数两门基础课学完,再学习最左边的概率论分支以及最右边的图论分支。

暂时来说,纯数学(尤其纯数学专业的非离散数学)对我当前的专业领域用途不大,就是学着来玩的。

https://zhuanlan.zhihu.com/p/549542271
👍20
#杂
这几天韦易笑在知乎问题《为什么 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