Everything you care about in one place

Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.

Get Feeder

liam.page

始终

Get the latest updates from 始终 directly as they happen.

Follow now 81 followers

Latest posts

Last updated 7 days ago

Pineapple v0.3.4 → v0.4.0:从可视化到数据并行的十次迭代

7 days ago

本文是「Pineapple」系列的第二篇,上一篇完整拆解了引擎的核心原理——数据冒险驱动的 DAG 构建、channel-per-node 并行调度、Lua 嵌入和控制流编译。之后的两天里,项目经历了 10 个版本迭代、27 次功能提交,沿三条主线推进:可观测性与调试体验、运行时架构演进、新算子与数据并行框架。本文逐一记录每个改动的背景、技术决策和收效。DAG 可视化:让黑箱变成白盒Pineapple 的 DAG 是引擎自动从算子的输入输出字段推导出来的——用户不手动画图。这带来了便利,但也带来了黑箱:当...

Pineapple:用数据冒险模型自动构建 DAG 的高性能流水线引擎

8 days ago

搜索、推荐、广告——这类在线系统的后端往往需要一条多步骤数据处理流水线:召回候选集、特征计算、过滤、排序、截断……步骤之间存在复杂的数据依赖,手动编排执行顺序既繁琐又容易出错。Pineapple 的回答是:让算子只声明「我读什么、写什么」,引擎借鉴 CPU 流水线的数据冒险分析,自动推导依赖、构建 DAG、并行调度。Python 声明,Go 执行,JSON 解耦——三条线各司其职,业务迭代不需要重编译 Go 代码,Go 服务自动热加载配置变更。本文将从架构设计、DAG 构建算法、并行调度机制、Lua...

从 C++ 到 Go(七):实战 TODO API

13 days ago

本文是「从 C++ 到 Go」系列的第七篇,也是整个系列的收官之作。上一篇讨论了 IO 接口与标准库,本篇把前面所有知识串联起来,用纯标准库(不依赖任何第三方包)实现一个完整的 TODO REST API 服务。项目不大,但覆盖了包组织、接口、泛型、JSON、HTTP、并发安全、错误处理和测试——每个部分都对应着前面某一课的内容。项目结构先看整体目录:12345678910111214_todo_api/├── main.go ←...

从 C++ 到 Go(六):IO 与标准库

13 days ago

本文是「从 C++ 到 Go」系列的第六篇,承接上一篇对泛型的讨论,进入 Go 标准库中最核心的一块领域——IO 与数据序列化。C++ 程序员对 iostream 的复杂继承体系和 nlohmann/json 的手动映射不会陌生;Go...

从 C++ 到 Go(五):泛型

13 days ago

本文是「从 C++ 到 Go」系列的第五篇,承接上一篇对包管理与测试的讨论,进入 Go 1.18 引入的泛型系统。对于 C++ 程序员来说,模板是最强大也最复杂的语言特性之一;Go 的泛型是一个有趣的对照——它花了十多年才加入语言,设计上刻意做了大量简化。理解这些取舍,比学会语法本身更有价值。泛型函数与类型参数没有泛型时,想写一个通用的 Max 函数,要么为每种类型写一遍,要么用...

从 C++ 到 Go(四):包管理与测试

14 days ago

本文是「从 C++ 到 Go」系列的第四篇,承接上一篇对并发模型与错误处理的讨论,进入 Go 项目的工程化领域——包管理与测试。对于 C++ 程序员来说,这两部分的体验差异可能是整个系列中最令人愉悦的:C++ 的构建系统和测试框架需要大量外部工具的配合,而 Go 把这一切内置了。包管理与项目组织目录即包Go 的核心规则很简单:一个目录对应一个包。同一目录下的所有...

从 C++ 到 Go(三):并发模型与错误处理

14 days ago

本文是「从 C++ 到 Go」系列的第三篇,承接上一篇对集合、结构体与接口的讨论,进入 Go 最有特色的两个领域——并发模型与错误处理。对于 C++ 程序员来说,这两部分恰好是思维转换最大的地方:并发从「手动管理线程和锁」变成「goroutine + channel」,错误处理从「异常冒泡」变成「错误即返回值」。并发Goroutine:不是线程在 C++ 中启动一个线程需要...

从 C++ 到 Go(二):集合、结构体与接口

14 days ago

本文是「从 C++ 到 Go」系列的第二篇,承接上一篇对基础语法、类型系统和函数的讨论,继续深入 Go 的核心数据结构(数组、切片、Map)、结构体与方法、以及接口机制。对于 C++ 程序员来说,这三部分恰好覆盖了 Go 与 C++ 差异最集中的区域——从...

从 C++ 到 Go(一):基础语法、类型系统与函数

14 days ago

对于有 C++ 经验的程序员来说,学习 Go 是一次有趣的体验。Go 在许多设计上与 C++ 有着相似的底层思路,但又在语法和哲学上做出了截然不同的取舍。本文是我学习 Go 的实践笔记,以代码为主线,穿插与 C++ 的对比,力求在「知其然」的同时也「知其所以然」。Hello...

光与影的魔术②:微距摄影的景深·一个反直觉的结论

about 1 month ago

摄影,说到底,是在处理光与空间的关系;不过,一旦进入微距,这件事会变得有点「反直觉」。一个简单的问题我们先来看一个具体问题:一支 100mm F2.8 的全画幅微距镜头,在 1:1 放大倍率下,景深是多少?如果沿用日常拍摄(风光、人像)的经验去判断,大概率会严重高估。结论先行在以下条件下:全画幅(CoC ≈ 0.03 mm)光圈 F2.8放大倍率 1:1计算结果是:总景深 ≈...

湿法提纯黄金的关键细节补充:还原剂与去硝

about 1 month ago

前文已经把王水体系的主流程讲清楚了,但真正决定你能不能稳定做出高纯金的,其实不是那些「流程步骤」,而是两个细节:你用什么还原剂(怎么把金「干净地」还原下来)你有没有把硝处理干净(否则还原剂白给)这篇试图讲清楚这俩问题。一、还原剂:本质其实很简单所有还原剂,本质都是「电子提供者」。金在溶液中是 Au³⁺(准确说是 AuCl₄⁻),要变成金属:Au³⁺ + 3e⁻ → Au所以问题就变成:谁来提供这 3 个电子?二、三类典型还原剂对比(核心)1)锌(Zn):简单粗暴反应本质Zn → Zn²⁺ +...

湿法提纯黄金操作指南与技术说明(王水体系为主)

about 1 month ago

最近金价飞涨,偶尔看到民间有提纯黄金的店铺发布的提纯过程的视频。沉睡多年的「化学」基因动了一下,于是总结了王水体系湿法提纯黄金(王水溶解 → 分离 → 选择性还原 → 酸洗 → 重复精炼 → 熔融成型)的简要操作指南和技术说明。此外,也简述硫脲(无氰)体系作为对照。特别说明:纯属娱乐,操作风险极大,请勿在居民区操作。一、整体流程(先有全局感)可以把整个过程理解为 4...