codedump的电报频道
4.46K subscribers
152 photos
4 videos
2 files
626 links
发布个人博客(主页 codedump.info)、想法、推荐等。RSS订阅地址:https://rsshub.app/telegram/channel/codedump_notes,过往汇总搜索可以到:https://app.shokichan.com/c/tg/codedump_notes。
Download Telegram
#杂
我最近特别喜欢“迭代”这个词,尽管这个词现在已经成为一众互联网黑话词中的一员,更多时候用起来都是个梗而已。

之所以喜欢“迭代”,是因为这个词自带了“时间”属性,即认为事物的当前状态只是当前的状态而已,状态可能随着时间流逝发生改变。

当说到“迭代一件事情”时,隐含了以下的情况:

* 它现在可能并不完美,还有很多问题。注意是“现在”,当说“现在”时相当于这个状态是时间序列上的一个点、一个切面上的状态;
* 可以对它进行改进,让它更好一些;
* 即它的状态并不是一成不变的,而是可能随着时间变化发生改变,且能够往更好的方向走的;
* 尽管可能通过改进会更好一些,但是仍然可能继续存在很多问题也并不完美。因为即便改进了也是将来的“现在”的某个状态;
* 尽管在各个对它改进的时间点都可能不完美,但是接受这样的状态,并且相信能继续往前推进让它更好一点。

换言之,“迭代”这个词隐含了一种:接受当前现状、对后续改动开放并且保持乐观的心理状态,并且还能够以一种流动的时间视角去看待事物的发展,而不是在一个时间节点看到某个状态就下定论。
👍15
#杂
我一个大学的同乡师兄,昨天(2022.09.15)从华为离职。从1998.09.15毕业入职华为,到24年后离职,职业生涯里只经历了华为一家公司,完整地“吃下”了这24年华为、中国经济高速发展的红利。尽管如此,过程中间还是有不少艰难的时刻,可以参看他文章中的描写。Again,这是过去24年中国、华为的另一个个人视角。

《以梦为马 不负韶华--写在离开华为之际》
👍107
#函数式编程
最近在看Clojure这门函数式编程语言,找到一个不错的对函数式编程特点的入门介绍:“命令式编程与函数式编程的主要区别:

“命令式编程关注的是"what",即"做什么",它按步骤规定程序要做的事情,并在这一过程中改变状态(计算机的内存、硬盘);
声明式编程,或者更确切些,函数式编程关注的是"how",即"怎么做",它描述处理数据的方式(定义函数),组合这些"方式",来完成对数据的处理。

命令式编程更加贴合机器的结构;函数式编程更加贴合数学与人的抽象思维。”

在线演示版本:《函数式编程入门》
PDF版本:https://www.yichenxu.me/files/talks/fp/Handout.pdf
👍19
#函数式编程

另外一份介绍函数式编程的文档Why Functional Programming Matters
👍15
#databend
《活动推荐|Data Infra 研究社第四期》

databend项目开始有使用用户了,这一期请来Dmall 数据库负责人来分享在项目中使用databend来做数据归档、节省成本的一些实践经验。
👍5
#推荐
OI(Olympiad in Informatics,信息学奥林匹克竞赛)在中国起源于 1984 年,是五大高中学科竞赛之一。OI Wiki,致力于成为一个免费开放且持续更新的 编程竞赛(competitive programming) 知识整合站点,大家可以在这里获取与竞赛相关的、有趣又实用的知识。
👏1
This media is not supported in your browser
VIEW IN TELEGRAM
#杂
在Mac上装了一个Runcat app,可以监控内存、硬盘、CPU等系统资源的使用。
比较好玩的是,旁边有一只小猫咪,CPU越忙跑得越快,一般CPU飙到90%以上的时候就是在编译Rust的时候。
👍22
#杂

我今天看sqlite btree的平衡实现,一个感想就是树形结构的实现比其他诸如链表、数组之类的结构复杂多了。

任何树形的数据结构,都要满足某种程度上的平衡,维持这个“平衡”的操作十分复杂。红黑树、B-Tree都需要在平衡被破坏之后,马上进行自下而上的平衡操作。比如截图中sqlite的负责平衡的函数,实现长达800多行,这还只是平衡算法其中的一种情况。

除此之外,中间的corner case的测试也很多,构造出测试的用例数据也难,如果不能覆盖所有场景,很难拍板说这个实现针对任何数据都是对的。

而链表之类的可就简单多了,除了头尾节点跟链表上的其他节点略有不同以外,其他都一致,这意味着边界情况很少。

这可能也是现在LSM类型的存储比Btree类型要流行得多的原因。
👍8
#三体
腾讯和Netflix分别发布了《三体》电视剧版本的预告片,预计都会在2023年面世。

先说Netflix版本。在我眼里,《三体》是带有一些东方哲学色彩的科幻片,比如罗辑最后并不是想办法消灭了三体人,而是有某种手段达成了与三体人之间的一种平衡:你不来犯我,我也不会灭你。按照以往欧美拍摄东方色彩故事上的表现,比如《花木兰》,感觉欧美人要理解带有中国色彩的故事来,不一定能说得好。再来的一个担心是,《三体》主要的故事背景都在中国,这意味着需要大量的亚裔(面孔)的演员,好像在好莱坞找到这一大批优秀的亚裔演员有点困难,我看了一下豆瓣页面上奈飞版本的演员表,基本都是欧美演员,这个就让我有点摸不着头脑了。(附:《三体》网飞官宣的12名演员,认识一下

再说腾讯版本。最大的担忧是不知道怎么讲好《三体》第一部的女主角叶文洁在文革期间的遭遇而逐渐黑化的故事。目前在国内的尺度上,WG不是不可以谈,但是怎么谈、谈到什么程度,不好把握,但是要讲好叶文洁这个人物又不得不谈,这就比较考验编剧的能力了。第二个担忧是,国内科幻剧的制作经验较少,能不能拍好一部科幻巨作,也存疑。

总而言之,在今天看到奈飞的预告片和演员表之后,我倒是觉得:奈飞版本不一定就会比腾讯版本更好、更接近于原著,等到时候上映了再看看吧。

腾讯版三体预告片 Netflix版三体预告片
👍3
#杂
我记得在微软收购了Github之后,由于有了有钱的金主爸爸,于是Github上可以随便开private仓库了。

这个对我来说最大的影响就是,我能把我阅读项目代码的注释直接放到这些私人仓库里面了。

一般来说,“阅读一个项目源代码”我有两方面的输出:
* 整理清楚思路之后写代码分析类的文章。
* 还没整理清楚的时候就直接一边看一边在代码里写注释。

第二个工作其实才是常态。这种一边读一边留注释的过程,有时候感觉就是跟作者在通过代码在交流;如果这份代码之前没什么人看过,又会有一种考古队员擦拭考古出来的东西逐步还原本来面目的感觉。

截图是最近在看sqlite btree平衡算法的实现,对我来说很难看懂,但是大部分时候,最终整理发表的那些代码分析类文章,就是这样一点一点扣细节给扣出来的。
👍39
#推荐
Databend中使用了petgraph这个图数据结构库看到其中的一位核心开发XVilkaGithub,一路又深度遍历了一下其它资料,技能栈感觉是又深又广。

推特上个人的介绍页面写着:“Reverse engineer. Firmware dissector. Rizin&Cutter developer. GitHub influencer. Foreign languages fanatic. OCamler and Rustacean. Loves to C into the void.”

看项目应该主要在逆向工程这方面,有几个不错的项目:
https://github.com/radareorg/radare2
https://rizin.re/

看名字“Anton Kochkov”应该是个东欧(可能俄罗斯)人,看个人简介生活地点又在上海,感觉是个在上海生活的老外,总之是强的一逼。(附:另外的朋友找到的油管视频:https://www.youtube.com/watch?v=iTKra0XD6z4)

所以以后,看到好东西的时候,不妨“深度遍历”看看:)
👍12
#杂

今年工作关系连学了两门新语言:Rust和Clojure。

由于Rust社区相对更强大,提供了更多辅助工具:编译提示、IDE插件,所以能“教”我写代码;反之Clojure社区没这么完善,我就看得很辛苦。

我今天看了一段用了Rust高级技巧的代码,突然意识到:实际上我的Rust水平并不见得就比Clojure好多少,只是因为有了这些辅助才轻松一些,距离能够用Rust单独从零干活了,还差得远。

尽管说“人与动物的区别是使用工具”,但是有时候也应该意识到对工具的依赖,一个事情托管给工具的时候,这部分能力就会慢慢变差,这可能是我下意识地不去使用copilot这种能“帮你”写代码的工具的原因。
👍35
#杂
那位用Rust重写数据库的创始人来复盘了:删除27万行C++代码,值吗?》

仅引用文中两句话:

“C++ 比较经典的问题是内存泄漏,但这类 Bug 比较容易修,我们觉得可以忍。”

“与此同时,我也想起之前在 AWS Redshift 工作中遇到的一个 Bug,三个人不断调试了两周都无解,最终发现是内存泄漏的问题,如果现在的项目继续下去很可能会遇到类似的情景,假设那时的产品已经有了很多用户,我们还需要因为这种内存泄露的问题调试许久,得不偿失。”

重新定义了“容易”。

我这一年用Rust的体验:业务特性可以往前继续开发,不太需要回头看有没有可能出现内存问题(泄露、野指针、越界)等情况,还是很令人安心的。

至于说什么“内存Bug容易修”之类的话,不多说了懂的都懂。我以前记录过也是我查了一周多的问题,本质也是个内存问题:《线上存储服务崩溃问题分析记录》,老实说这种问题查得累死了,能最后解决当然是有成就感的,可问题是:真的需要每次都这样吗,如果一边开发一边还为这种问题困扰,业务很难往前走。
👍14🍌5
👍27
#杂
《乱世不闯新加坡》

作者主要分析了新加坡这样处于重要地理位置的小国,由于国家小缺乏战略缓冲等原因,好比是大海中的小帆船,一有个波动就麻烦了,所以如果all in在这样的小船上,在乱世这样的决策比较危险。

另外,其中一句话非常认同:

“接下来有第二点,即使已经身在海外,但不能做空祖国,或者以祖国为对手,有几个人通过做空自己的祖国发达呢,相反,所做的事都要力所能及的加强祖国,与祖国协同,最好双剑合璧。”
👎12😁4👍3🤨2🥰1
#杂
我突然想到,“开源”真的是一个很伟大的发明,而且貌似是程序员这个行业的独一份儿。

如果是个演员,想参演一部戏,需要导演点头;律师想去打一场官司,需要当事人聘请。等等。

但是如果一个项目是”开源项目“,即便是那种KPI导向、定期把公司内进度同步到github的项目,你也能读到它的代码学习它的实现,更别提那些正儿八经以开源社区来运营的项目,甚至能通过PR参与到项目中去。

参与一个开源项目,更多的时候,阻碍都在自己身上,别人无法阻止你参与、阅读这些开源项目。

所以,当在日常的工作、学习中找不到好的项目时,不妨多看看相关的开源项目,看看有没有机会学习、参与这些项目。我当年如果不是为了学习Raft,阅读了etcd的Raft实现,恐怕也不会有现在能转方向到数据库开发的可能。
👍44
#杂
做了这些年程序员,这个职业给我日常工作生活最大的“规训”就是“错误处理”。

做一件事情之前,下意识会想:这个事情可能出什么错,错误如何处理,有哪些可以兜底、优雅一些处理这些错误的策略,等等的。

这些下意识的错误处理N板斧,还是很管用的,让我避免了很多可能出错的情况,也有了应对错误的处理机制。
👍40