08.04.202504:00
#分布式
#共识算法
Paxos System,讲解Paxos实现的网站,对应论文《Paxos Made Moderately Complex》,提供Python版演示代码。
#共识算法
Paxos System,讲解Paxos实现的网站,对应论文《Paxos Made Moderately Complex》,提供Python版演示代码。
02.04.202500:55
#杂
特别喜欢下面这段话,尤其是“「专业化」是为虫子准备的”:
特别喜欢下面这段话,尤其是“「专业化」是为虫子准备的”:
一个人应该懂得如何更换尿布、策划战争、杀猪、开船、设计建筑、创作诗歌、算清账目、搬砖砌墙、接续断骨、安抚将死之人、听从命令、发布命令、与人合作、独断独行、解方程组、分析前所未见的问题、清理肮脏的畜栏、编写计算机程序、烹制美味佳肴、高效地战斗,并勇敢地死去。「专业化」是为虫子准备的。
-- 罗伯特·海因莱因《时间足够你爱》
28.03.202504:39
#共识算法
#分布式
最近面试一家做web3 infra方向的公司,给我发来一篇论文让我照着论文写一个项目(不限制语言,我选了Rust),论文与共识算法相关,只不过web3都是工作在拜占庭环境下(可以理解为里面有恶意节点存在)。
我粗浅得了解了一下如何在拜占庭环境下做共识。除了和基本的Raft这些算法一样,要使用全序版本来对日志保序以外,每个节点收到消息后还需要往外广播(类似于Gossip),于是时间复杂度到了O(n^2),而Raft这类的算法只需要Leader节点广播即可,时间复杂度O(n)。
除此以外,过程中还需要使用对应的密码学工具来保证消息以及写入数据的合法性。
总结下来就是:在拜占庭环境下,密码学解决信任问题,共识算法解决去中心化问题。总体感觉是挺有意思的。
等我全部写完,会公布一下论文题目和项目地址给大家看看。
#分布式
最近面试一家做web3 infra方向的公司,给我发来一篇论文让我照着论文写一个项目(不限制语言,我选了Rust),论文与共识算法相关,只不过web3都是工作在拜占庭环境下(可以理解为里面有恶意节点存在)。
我粗浅得了解了一下如何在拜占庭环境下做共识。除了和基本的Raft这些算法一样,要使用全序版本来对日志保序以外,每个节点收到消息后还需要往外广播(类似于Gossip),于是时间复杂度到了O(n^2),而Raft这类的算法只需要Leader节点广播即可,时间复杂度O(n)。
除此以外,过程中还需要使用对应的密码学工具来保证消息以及写入数据的合法性。
总结下来就是:在拜占庭环境下,密码学解决信任问题,共识算法解决去中心化问题。总体感觉是挺有意思的。
等我全部写完,会公布一下论文题目和项目地址给大家看看。
16.03.202506:15
#分布式
Paxos解决的核心问题是:分布式系统里如何确定一个值。Paxos的做法是:给每次提交一个版本号,一个版本确定之后就不再能修改。
这里的“版本号”不一样非得是自然数,只需要满足全序性(total order,简单理解一个全序关系里的任意两个元素都能对比大小)就可以了。正因为版本号必须满足全序关系,才能保证前面说的“版本的值确定之后,不能再进行修改”。
比如Raft里面的版本号就是(Term,Index),这也是满足全序关系的,Raft里面对比(Term,Index)大小关系的算法大体是:
所以从这个意义上来说,Raft本质上还是Paxos,可以理解为换了另外一种版本号来实现的Paxos。
多说一句,实际上定义一类新的数据类型时定义这类型数据之间的比较关系,C++里面早就有了,提供了operator >、>=、<、<= 这些操作符函数。很早之前学C++的时候就已经知道,但是那时候还没有上升到数学的层面理解为什么需要定义这些关系,一直到我接触了全序、偏序关系的概念才恍然大悟。
再推一次XP的这篇讲解Paxos原理的文章,其它讲Paxos的文章,多是一上来给读者按照论文给出流程,专注在How,而这篇文章反向来推导过程,给出了Paxos的Why。
Paxos解决的核心问题是:分布式系统里如何确定一个值。Paxos的做法是:给每次提交一个版本号,一个版本确定之后就不再能修改。
这里的“版本号”不一样非得是自然数,只需要满足全序性(total order,简单理解一个全序关系里的任意两个元素都能对比大小)就可以了。正因为版本号必须满足全序关系,才能保证前面说的“版本的值确定之后,不能再进行修改”。
比如Raft里面的版本号就是(Term,Index),这也是满足全序关系的,Raft里面对比(Term,Index)大小关系的算法大体是:
if (left.Term == right.Term)
return left.Index > right.Index
else
return left.Term > right.Term
所以从这个意义上来说,Raft本质上还是Paxos,可以理解为换了另外一种版本号来实现的Paxos。
多说一句,实际上定义一类新的数据类型时定义这类型数据之间的比较关系,C++里面早就有了,提供了operator >、>=、<、<= 这些操作符函数。很早之前学C++的时候就已经知道,但是那时候还没有上升到数学的层面理解为什么需要定义这些关系,一直到我接触了全序、偏序关系的概念才恍然大悟。
再推一次XP的这篇讲解Paxos原理的文章,其它讲Paxos的文章,多是一上来给读者按照论文给出流程,专注在How,而这篇文章反向来推导过程,给出了Paxos的Why。
11.03.202506:49
#数学
从微博上看到的关于《凉宫春日的忧郁》和数学的故事,原文见《How Anime Fans Stumbled upon a Mathematical Proof》:
从微博上看到的关于《凉宫春日的忧郁》和数学的故事,原文见《How Anime Fans Stumbled upon a Mathematical Proof》:
你敢信?一群二次元在4chan上随口聊了几句《凉宫春日的忧郁》,结果无意间推动了数学界的研究进展,甚至被正式写进了学术论文!
事情得从2011年说起,当时4chan上有人讨论《凉宫春日的忧郁》这部动画的特殊播放顺序。
当时这部作品还只有14集,内容被设计成非线性叙事,官方特意打乱了播放顺序,让观众可以按照不同方式观看,每种顺序可能都会带来不同的剧情体验。
于是,有人提出了一个有趣的问题:“如果要看完所有可能的播放顺序,最少需要看多少集?”
本来这只是个单纯的刷番问题,没想到它竟然撞上了数学界的一个未解难题——超排列(Superpermutation)问题。
简单来说,超排列指的是如何用最短的序列,把所有可能的排列顺序都包含进去。
比如,如果你有3集动画,所有顺序有3! = 6种,看完整个列表的话,理论上需要刷18集(3×6),但如果巧妙地让顺序部分重叠,比如1-2-3-1-2-1-3-2-1,这样只需要9集就能包含所有排列。(1-2-3和2-3-1共享2-3)
这就是超排列的精髓——用最短的方式覆盖所有可能性。
在4chan这场讨论里,一个匿名网友无意间给出了一个新的数学推导,得出了超排列最短长度的下界公式。
也就是说,他算出了这个问题的最小值范围,而数学家们当时还没找到这个结论!
离谱的是,这个匿名网友自己都没意识到自己的推导有多重要,只是随手发了几条帖子,说:“我想到了一个方法,看看有没有漏洞。”然后这些帖子就被埋没在互联网的浩瀚信息流之中了。
直到2018年,数学家Robin Houston在研究超排列问题时,偶然在某数学博客上看到了2013年转帖的这段4chan讨论。
他越研究越觉得不对劲,直到确认,这位匿名网友的公式是正确的,而且是数学界当时未曾正式提出的突破!
这一发现让数学界瞬间炸锅,最后Houston和另外两位数学家Jay Pantone、Vince Vatter专门整理了这位4chan网友的解法,并把它写进了正式的数学论文,论文的第一作者赫然写着——Anonymous 4chan Poster(4chan匿名网友)。
更有趣的是,数学家Greg Egan后来发现了超排列的一个新的上界公式,而4chan网友的公式刚好提供了下界。
换句话说,数学家们终于有了一个明确的数值范围,来估算超排列的最短可能长度。
如果真的要按照所有可能的顺序刷完一部n集的动画,你至少要看n! + (n-1)! + (n-2)! + (n-3)集,最多要看n! + (n-1)! + (n-2)! + (n-3)! + (n-3)集。
比如,如果是一部14集的动画,你最少要刷93884313611集,最多要刷93924230411集,哪怕从人类诞生开始刷到现在,都不一定能看完!
所以,下次再看到有人熬夜狂刷动画,说不定他在进行数学研究呢。
24.02.202501:59
01.04.202504:02
#分布式
公众号荒了很久,转一篇XP写的《理解 Calvin - Fast Distributed Transactions》。
最近忙着写面试的论文题目,分布式教程的撰写又停滞了一段时间,目前写到分布式事务章节了,整体进度50%。
公众号荒了很久,转一篇XP写的《理解 Calvin - Fast Distributed Transactions》。
最近忙着写面试的论文题目,分布式教程的撰写又停滞了一段时间,目前写到分布式事务章节了,整体进度50%。


21.03.202512:26
#方法论
写技术博客时,我很喜欢画图来表达原理。也因为自己画的图多了,有了一层感悟:但凡能把技术原理通过画图清晰表达出来的,一般文章内容也不会太差。这是因为,画图不同于文字和简单的贴代码,是经过作者理解了原理再翻译成图形语言的。
按照这个推论,得到一个搜索优质技术文章的技巧:使用Google搜索技术文章时,以前是根据关键字搜索相信搜索引擎的排名,现在可以试一下切换到Google搜索中“图片”那一栏看看。图片这一栏可以在不用点击文章的情况下马上看到文章中的一些缩略图,根据画的缩略图能大体判断文章的质量。
写技术博客时,我很喜欢画图来表达原理。也因为自己画的图多了,有了一层感悟:但凡能把技术原理通过画图清晰表达出来的,一般文章内容也不会太差。这是因为,画图不同于文字和简单的贴代码,是经过作者理解了原理再翻译成图形语言的。
按照这个推论,得到一个搜索优质技术文章的技巧:使用Google搜索技术文章时,以前是根据关键字搜索相信搜索引擎的排名,现在可以试一下切换到Google搜索中“图片”那一栏看看。图片这一栏可以在不用点击文章的情况下马上看到文章中的一些缩略图,根据画的缩略图能大体判断文章的质量。


05.03.202503:51
#人工智能
最近在朋友圈看到大量的腾讯元宝广告。毫无意外,在大量的广告投入以后,腾讯元宝也一下超越豆包、DeepSeek官方App来到第一名。
在DeepSeek完成市场用户教育,打好基建(将模型开源)以后,凭借社交媒体的优势,腾讯元宝只要能够支持好普通人使用DeepSeek模型,摘下这个桃子一点都不意外,也早就驾轻就熟了。
可换一个角度来想,DeepSeek同样也是需要腾讯的社交来帮助自己更广泛传播的。这就好比果实要通过被鸟吃下,才能完成种子的传播一样。DeepSeek志在建立一个更广泛的开源模型生态,而搭上腾讯的便车,让更多一般老百姓就能使用上它的模型,才是后续建立生态的基础。
从这个角度而言,两者相互需要,因为诉求不一样但却互补:鸟想果腹,而果实希望被传播。
最近在朋友圈看到大量的腾讯元宝广告。毫无意外,在大量的广告投入以后,腾讯元宝也一下超越豆包、DeepSeek官方App来到第一名。
在DeepSeek完成市场用户教育,打好基建(将模型开源)以后,凭借社交媒体的优势,腾讯元宝只要能够支持好普通人使用DeepSeek模型,摘下这个桃子一点都不意外,也早就驾轻就熟了。
可换一个角度来想,DeepSeek同样也是需要腾讯的社交来帮助自己更广泛传播的。这就好比果实要通过被鸟吃下,才能完成种子的传播一样。DeepSeek志在建立一个更广泛的开源模型生态,而搭上腾讯的便车,让更多一般老百姓就能使用上它的模型,才是后续建立生态的基础。
从这个角度而言,两者相互需要,因为诉求不一样但却互补:鸟想果腹,而果实希望被传播。
23.02.202508:29


03.04.202509:39
#杂
中国南方很大一块民间势力就是宗族。我以前没有什么感觉,直到我被拉进了宗族群(不是家族群)。这里的活动主要就是宗族相关的祭拜、扫墓、宗祠维护等等。我想可能是因为现在中国南方的很多人,往上数都是外地迁徙过来的,一群人到一个陌生的环境,就需要抱团,而宗族就是最好的抱团共识吧,这可能也是南方人如此重视清明节的原因吧。比如我们家,按照我爸的说法,就是明代从福建迁徙到了海南,附近的村里有不少李氏宗族的人。
2025年了,我也是第一次在我的日常生活里看到了“宗亲”这个词,过去只是在三国里一直听刘备自称自己“汉室宗亲”,对我来说真的是复古又遥远的称呼。
中国南方很大一块民间势力就是宗族。我以前没有什么感觉,直到我被拉进了宗族群(不是家族群)。这里的活动主要就是宗族相关的祭拜、扫墓、宗祠维护等等。我想可能是因为现在中国南方的很多人,往上数都是外地迁徙过来的,一群人到一个陌生的环境,就需要抱团,而宗族就是最好的抱团共识吧,这可能也是南方人如此重视清明节的原因吧。比如我们家,按照我爸的说法,就是明代从福建迁徙到了海南,附近的村里有不少李氏宗族的人。
2025年了,我也是第一次在我的日常生活里看到了“宗亲”这个词,过去只是在三国里一直听刘备自称自己“汉室宗亲”,对我来说真的是复古又遥远的称呼。


31.03.202510:26
#杂
去年十月份去了一趟普陀山。从舟山机场出来,还得转轮船才能到达普陀山所在的小岛。去往普陀山的码头门口上大字写着“彼岸”两个字,普陀山是中国佛教圣地,所以“彼岸”在这里有一语双关的意思,感觉太酷啦。
去年十月份去了一趟普陀山。从舟山机场出来,还得转轮船才能到达普陀山所在的小岛。去往普陀山的码头门口上大字写着“彼岸”两个字,普陀山是中国佛教圣地,所以“彼岸”在这里有一语双关的意思,感觉太酷啦。
19.03.202504:13
#脚本语言
#解释器
#开源项目
《Crafting Interpreters》的中文翻译,看介绍已经基本完成了。
#解释器
#开源项目
《Crafting Interpreters》的中文翻译,看介绍已经基本完成了。
14.03.202504:27
#开源项目
krep - 一个C写的高性能的字符串搜索工具
github.com/davidesantangelo/krep
krep 的设计以性能为主要目标:
🌟内存映射 I/O:避免昂贵的 read() 系统调用
🌟优化算法:默认使用 Boyer-Moore-Horspool 算法
🌟SIMD 加速: 在可用时利用 SSE4.2 或 AVX2
🌟多线程: 并行处理大文件的块
🌟最小化内存分配: 减少内存开销和碎片化
感觉可以拿来学一学SIMD编程,正好不会。
krep - 一个C写的高性能的字符串搜索工具
github.com/davidesantangelo/krep
krep 的设计以性能为主要目标:
🌟内存映射 I/O:避免昂贵的 read() 系统调用
🌟优化算法:默认使用 Boyer-Moore-Horspool 算法
🌟SIMD 加速: 在可用时利用 SSE4.2 或 AVX2
🌟多线程: 并行处理大文件的块
🌟最小化内存分配: 减少内存开销和碎片化
感觉可以拿来学一学SIMD编程,正好不会。


02.04.202504:15
#工具
国内很多网站(微博、知乎等)在跳转外链时,会弹出一个提醒确认界面。可以安装油猴脚本Open the F**king URL Right Now实现自动跳转。最新的版本里,还把微博跳转外链时加上的continueflag参数去掉了,这个功能在收藏网页的时候挺实用的,因为像Raindrop这样的收藏网页工具里,同一个地址带的参数不同会被认为是不同的网址。
作者是之前推荐过的Douban book+插件的作者OldPanda。
国内很多网站(微博、知乎等)在跳转外链时,会弹出一个提醒确认界面。可以安装油猴脚本Open the F**king URL Right Now实现自动跳转。最新的版本里,还把微博跳转外链时加上的continueflag参数去掉了,这个功能在收藏网页的时候挺实用的,因为像Raindrop这样的收藏网页工具里,同一个地址带的参数不同会被认为是不同的网址。
作者是之前推荐过的Douban book+插件的作者OldPanda。


29.03.202514:41
#杂
今天扛叱扛叱写了1000多行代码。我感觉即使我在思路清晰的时候,一天的输出也就是1千多行代码,大概7个小时的高效工作时间,这个时长的专注度和输出对我来说顶天了。
今天扛叱扛叱写了1000多行代码。我感觉即使我在思路清晰的时候,一天的输出也就是1千多行代码,大概7个小时的高效工作时间,这个时长的专注度和输出对我来说顶天了。


18.03.202507:23
#存储引擎
非常好的存储引擎文档,总共176页幻灯片:《Bedtime Stories For Children: Storage Engines》,可惜的是没有完全写完。
非常好的存储引擎文档,总共176页幻灯片:《Bedtime Stories For Children: Storage Engines》,可惜的是没有完全写完。
14.03.202504:23
#方法论
2024年看到的最好的一个建议就是“把手弄脏(To get your hands dirty)”,其实就是强调亲自实践的另一种表述,但是把手弄脏更形象一些,我用DS重新展开解读了一遍:
2024年看到的最好的一个建议就是“把手弄脏(To get your hands dirty)”,其实就是强调亲自实践的另一种表述,但是把手弄脏更形象一些,我用DS重新展开解读了一遍:
"把手弄脏"是一个比喻性的表达,通常用于强调实践和亲身参与的重要性。它的核心含义是:通过亲自动手和实际操练来深入理解问题、积累经验,而不是仅仅停留在理论或表面观察。以下是对这一表述的详细解读:
1. 字面意义
"把手弄脏"从字面上看,指的是在实际操作或工作中,手可能会沾染灰尘、泥污或其他物质。这种"弄脏"的动作象征了真实参与和努力工作,而不是轻松地站在一旁观察或指挥。
2. 深层含义
(1) 实践出真知
- 核心思想:理论固然重要,但只有通过实践才能真正掌握知识和技能。
- 例子:在学习编程时,读很多书和看教程固然有用,但只有自己动手写代码、调试错误,才能真正理解编程的逻辑和技巧。
(2) 不怕困难
- 核心思想:在实践过程中,可能会遇到挑战、错误或失败,但这些都是成长的机会。
- 例子:创业者在创业初期需要亲自处理各种琐事,可能会"把手弄脏",但这是积累经验、发现问题的重要过程。
(3) 脚踏实地
- 核心思想:强调务实和实干精神,而不是空谈或幻想。
- 例子:在团队合作中,领导者也需要亲自参与实际工作,而不是只坐在办公室里发号施令。
(4) 深入一线
- 核心思想:只有深入实际场景,才能真正理解问题的本质。
- 例子:产品经理需要通过用户调研和亲自试用产品,而不是仅仅依赖数据分析,才能设计出符合用户需求的产品。
3. 使用场景
"把手弄脏"这一表达在以下场景中尤为常见:
父母希望学生不要只埋头读书,而是要积极参与社会实践,积累实际经验。
- 职场:鼓励员工不仅要有理论支持,还要在项目中亲自实践、解决问题。
- 创业:创业者需要亲自参与每一个环节,而不是只做"甩手掌柜"。
- 教育:老师会鼓励学生通过实验、项目等方式"把手弄脏",从而深入理解知识。
4. 类比与延伸
"把手弄脏"可以与其他类似表达类比:
- "Practice makes perfect"(熟能生巧):强调通过反复练习提升技能。
- "Get your hands dirty"(英文中的对应表达):强调亲自参与实践。
- "深入一线":强调实际接触问题,而不是高高在上。
5. 总结
"把手弄脏"是一种提倡实干精神的表达,强调通过亲身体验和实践来获得知识和成长。它提醒我们:
- 不要害怕失败:实践中的错误和挑战是宝贵的经验。
- 不要空谈理论:只有通过行动,才能真正理解问题的本质。
- 不要远离实际:只有深入一线,才能做出切实有效的决策。
无论是学习、工作还是生活,"把手弄脏"都是一种积极的人生态度,它鼓励我们主动参与、亲身体验,从而获得更深刻的感悟和成长。


25.02.202513:40
#人工智能
我最近的一个感想,人工智能时代,知识的获取不再困难,但是获取经验仍然很难。就是说,很容易变成一个“知道分子”,但是一提具体问题的思路,就无从下手。
我最近的一个感想,人工智能时代,知识的获取不再困难,但是获取经验仍然很难。就是说,很容易变成一个“知道分子”,但是一提具体问题的思路,就无从下手。
Көрсетілген 1 - 22 арасынан 22
Көбірек мүмкіндіктерді ашу үшін кіріңіз.