数学建模揭示:旋转陀螺游戏Dreidel有多糟糕

2024-12-18

博主去年使用PRISM概率建模语言对传统节日游戏Dreidel进行了建模,证明其缺乏乐趣。今年,他完善了模型,使其能够模拟直至游戏结束的全过程。新的模型修正了之前仅模拟首位玩家出局的缺陷,并改进了计算押注和玩家出局逻辑。通过模型模拟,博主发现,平均而言,一场四名玩家的游戏需要760次旋转才能结束,最长甚至可能超过6小时。这充分证明了Dreidel游戏冗长乏味,令人沮丧。

阅读更多

关于DuckDB疯狂语法特性的思考

2024-12-03

本文探讨了DuckDB允许用户通过扩展在运行时修改SQL语法这一特性。作者认为,对于一次性分析查询而言,这种语法扩展能力非常有吸引力。文章进一步探讨了通过解析表达式语法(PEG)实现这一特性的可能性,并提出了一个更深层次的想法:将语言按功能分解,每个功能都包含其语法和语义解析。作者还实现了一个简单的原型,演示了如何动态添加数组字面量到语言中,并讨论了这种方法的优缺点以及未来研究方向。

阅读更多
未分类 语法扩展

我算是服了!来玩玩跳表吧

2024-12-01

本文探讨了LSM树及其核心组件memtable的实现方式。作者认为无锁并发跳表是memtable的最佳选择,尽管其较为复杂。文章详细解释了memtable的需求:快速读写、并发读写支持、有序扫描以及内存限制。作者研究了跳表的并发写操作,比较了单写多读和多写多读的实现,并通过模拟实验探究了概率p和最大高度对跳表性能的影响。

阅读更多
未分类 LSM树 memtable

文档的缺失会导致迷信

2024-11-30

作者分享了在使用OneNote的“墨迹转形状”功能时遇到的困惑。由于缺乏文档说明,作者只能通过反复尝试来理解该功能的运作方式,并对某些操作产生了类似“迷信”的想法,就像斯金纳的鸽子实验一样。作者呼吁软件开发者提供更完善的文档,避免用户因缺乏指导而产生不必要的猜测和误解。

阅读更多
未分类 OneNote 迷信

五个不寻常的Raku语言特性

2024-11-13

本文介绍了Raku编程语言的五个独特之处:Junctions(用于布尔逻辑的复合值)、Whatevers(多功能占位符,可用于创建匿名函数)、正则表达式(改进的可组合性和语法)、Hyperoperators(用于并行列表操作的特殊运算符)以及Pair语法(用于简洁定义键值对的语法糖)。文章还简要提及了Slangs(语法扩展)和RakuAST(抽象语法树处理),并推荐了一些Raku相关的博客和资源。

阅读更多
未分类 语法特性

概率冒险之旅

2024-11-11

作者反思了学生时代对统计学学习的遗憾,并分享了近期对概率和统计学的深入学习。文章重点介绍了指数分布在排队论、控制论和性能建模中的普遍性,并以CoDel算法为例,解释了如何模拟排队系统。作者通过模拟泊松点过程,阐述了指数分布的无记忆性以及如何利用该特性简化模拟过程。最后,作者反思了指数分布的教学方法,认为应该先介绍无记忆性的概念和优势,再引出指数分布这一唯一具备该特性的连续分布。

阅读更多
未分类 指数分布

将设计与工程分离

2024-10-31

本文探讨了在小型工程团队中,如何在没有专职设计师的情况下交付美观、直观的软件。作者提倡将设计工作与工程工作分离,即先进行纯粹的设计,再进行工程实现。作者认为,工程师在编码时容易受限于现有代码和技术能力,导致设计缺乏创造性。而将设计与工程分离,可以让工程师跳出思维定式,设计出更优秀的产品。作者还分享了具体的实践方法,例如离开工作站、寻找新的环境、手绘设计稿等。

阅读更多
未分类

TLA+入门:从基本原理出发

2024-10-25

本文介绍了TLA+的基础数学原理,以及如何用其进行系统建模。文章以银行账户转账为例,逐步讲解如何使用谓词逻辑、时间变量、状态转换等概念描述系统行为。并引入了时间逻辑、Stutter步骤、不变式等关键概念,最终用TLA+语言表达了转账模型和无透支属性。文章还讨论了如何简化模型以提高可验证性,并鼓励读者思考如何扩展模型以支持双向转账。

阅读更多
未分类 系统建模