codedump的电报频道
4.4K subscribers
148 photos
4 videos
2 files
614 links
发布个人博客(主页 codedump.info)、想法、推荐等。RSS订阅地址:https://rsshub.app/telegram/channel/codedump_notes,过往汇总搜索可以到:https://app.shokichan.com/c/tg/codedump_notes。
Download Telegram
#杂
我记得大概是去年这个时候,由于前公司要重构一下存储元数据的存储引擎,开始研究怎么实现一个轻量级的存储引擎。

当时想研究一下市面上的B+Tree版本的存储引擎,可是有的项目很大(Innodb、WireTigger等),有的项目就是个玩具,只能演示原理做不到生产级别。这段时间可以说压力很大,印象最深的是当时去北京团建外出到景区,当天凌晨有世界杯亚洲区预选赛澳大利亚对中国,睡不着就一边看代码一边听比赛。

这时候偶然看到的一个精简的2.5版本的sqlite btree库,只有几千行代码,这个简单的实现打开了理解生产级B+Tree实现的大门。

在这之后就是“顺势”看了更高版本的sqlite btree实现,这些故事都写在了:sqlite3.36版本 btree实现(零)- 起步及概述》

仅就“生产级B+Tree”实现而言,sqlite的实现虽然还是有各种问题:比如效率不高等,但是都向我展现了总体的实现思路,后面再看这方面的实现也有了基础,比如今年研究了ARIES这篇论文,最近还在看BW-Tree的论文。

现在一年时间过去了,我又开始探索一个新的领域:Jepsen,想在项目里使用上这个项目来验证我们系统的实现,初期仍然跟以往自己独立研究一些问题一样遇到很多困难,因为太多新的知识点没有接触过:Clojure、模型检验(Model checking),等等。

回头来看,很多我后来看来获得技术上很大成长的时候,都是这种独立、深入研究某个领域之后带来的:身边没人请教、自己找答案、深入阅读文档、代码,等等。这样的经历多了以后,对这种压力似乎也感到适应,对压力之后的收益也清楚,甚至对解决这些难题有一些期望了。
👍36😁1
#杂
程序员始终逃不过所谓的“35岁年龄问题”(有可能这个问题过了几年又变成了40:)

我今年已经40了,而且:

* 我是从大学一毕业就开始做程序员的。
* 从来没有做过一天的管理,从来的身份都是“工程师”,未来也不想转方向。
* 我非常喜欢写代码,未来打算一直写代码到退休。

尽管如此,仍然有很多其他人可能关心的问题,我解决(解答)不了:

* 如何做到“财富自由”?(我工作这些年也没有达到,还欠了一屁股的债,惭愧:)
* 程序员如何转管理?(没想过,和代码打交道比跟人打交道轻松多了:)
* 如何成为“技术大牛”?(别问我,我不是,你认错人了:)
* 如何确保学习的技术永不过时?(空气凝固了:)

....

以上这些别人关注的问题,有些我不关心,还有一些确实是能力所限解答不了。

而且我还有可能将来某天面对这样现实的问题:

* 假如某天我失业了,如何确保一定能再找到一份程序员的工作?
* 新知识你要是学不动了,该怎么办?

....

无法回答。

我对这些现实问题的处理方式就是等真的有问题了再来处理吧(懒惰是程序员的美德之一)。现阶段能做的就是做好工作、在所在领域保持学习。

我这样的“大龄、非成功程序员样本”,可能对陌生人的意义,更多的在于:当你开始问所谓的“35岁年龄问题”时,不妨可以看看我这个“异常样本”。

虽然是“异常样本”,虽然可能不太具备参考价值,也不是“标准答案”,不具备“可复制性”,但是由于我相当多的输出都在网上可见,所以总归可能对所谓的“35岁年龄问题”提供另一种角度和思考。

至于什么角度、如何思考,这就见仁见智了。我只提供事实,不参和观点和评论。

以上。
👍70👏1
Forwarded from 硬核小卒
https://github.com/rui314/chibicc

一个C语言编译器项目。为了让读者可以从头到尾清晰地理解项目演进的过程,作者非常用心地编排每一次的commit。虽然这是一个挺“玩具”的编译器,但是已经可以对一些项目进行编译了,这些项目包括Git、SQLite、libpng,它甚至也已经实现了自举。

挺有意思的。
👍23
This media is not supported in your browser
VIEW IN TELEGRAM
#杂
这个动图通过物理的实验演示了一下有的时候最短路径并非最快路径。

数学里有一个结论“两点之间直线最短”,可是注意了这个说法里只说“最短”,并没有说一定“最快”。

以前总以为很直接的做一些事情能够最快得达到目的,因为背后有这个直线最短的理论支撑(理工傻直男)。

经历很多捶打之后,慢慢理解一些事情要圆滑、妥协、曲线前进,因为假如你非得走所谓的“直线”,路上的阻碍不见得一定比绕点弯路就少。

回过头看这个动图里的演示,才恍然大悟:其实“长短”更多是一个数学上的概念,只交待了距离维度而没有时间维度,“快慢”则是物理上的概念。用各自领域来解释都没错,错在了自己看问题的维度不够。
👍30
#杂
《详解 OpenDAL Data Infra 研究社第三期》

由于Databend是一个面向多云环境的云数据库,所以数据需要支持保存在不同云厂商的对象存储里,另外测试的时候也有类似于写入本地fs等的需求,于是需要一个通用的数据读写层来抽象数据在不同存储介质里的读写操作,这个项目就是OpenDAL(DAL,“Data Access Layer”的缩写)。这个项目有挺高的社区活跃参与度,比如前两天有人提交了读写ftp的支持

本期的Data Infra 研究社OpenDAL的作者xuanwo老板将介绍OpenDAL的实现等内容。
👍3
#推特
作者用推特thread简单总结阐述了现在主要的经济观念,由于这个领域我不懂,于是就只是纯转发做了标记以后看到相关的可以回顾一下。

https://twitter.com/myanTokenGeek/status/1564855220617695232
BTW:作者孟岩是以前CSDN上很出名的那位孟岩,早年知道他还是《程序员》杂志刚创办的时候,现在CSDN的 博客 还在。
👍3
#sqlite
这个叫 fly.io 的网站博客上,分享了好些sqlite的实现文章:

SQLite Internals: Pages & B-trees
How SQLite Helps You Do ACID
How SQLite Scales Read Concurrency

另外不知道是我最近研究sqlite的缘故,感觉对比以前能看到的各种玩sqlite的姿势越来越多了。
👍3
#杂
偶然在推上看到有推友讨论深入理解UNIX系统内核》这本书,译者之一的李雨正好是我之前的同事,他的故事也比较“传奇”。

中专学历出身(上世纪90年代中,因为好的中专包工作分配,还能去当时还挺吃香的事业单位,所以有好些成绩好的初中毕业生初中毕业以后选择了读中专,李雨就是这种情况),后来中专毕业之后,到运营商工作,从事入户安装网络之类的工作。不知道咋回事开始对刚刚兴起的Linux感兴趣,于是就开始自学编程,加入一家当时在中国做开源Linux桌面系统的公司,一步一步搞起了Linux,后面又开始接触Linux内核编程。

再后来,到了淘宝刚组建的Linux内核组工作正儿八经开始了Linux内核编程相关的工作,好像最后做到了阿里P8级别。华为开始组建自己的OS内核实验室之后,跳到华为从事自主OS内核的开发。

以“华为 李雨”为关键字,能在网上搜到他的一篇PPT

他的故事又(为什么我说“又”)是一个“异常样本”,但在我看来样本提供的就是各种“可能性”。
👍24
#博客
《周刊(第24期):sqlite并发读写的演进之路》

本文梳理sqlite并发读写方案的演进之路,已经介绍现在看到几个可能的优化方案。

公众号:https://mp.weixin.qq.com/s/9Y1EfzM5cups9oklByAW5Q
博客:https://www.codedump.info/post/20220904-weekly-24/
邮件订阅:https://www.getrevue.co/profile/lichuang/add_subscriber
👍8
#杂
我最近特别喜欢“迭代”这个词,尽管这个词现在已经成为一众互联网黑话词中的一员,更多时候用起来都是个梗而已。

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

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

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

换言之,“迭代”这个词隐含了一种:接受当前现状、对后续改动开放并且保持乐观的心理状态,并且还能够以一种流动的时间视角去看待事物的发展,而不是在一个时间节点看到某个状态就下定论。
👍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