查找讨论
全部讨论
start_link 返回了就代表缓存已经预热好了吗?
start_link 这个名字听着挺让人放心,但它返回时,客户端到底知道了什么? 这里 init 返回 {:ok, state, {:continue, :warm_cache}}。启动调用只等 init,不等别的。预热是之后在 handle_con…
分页报表用 count(*) OVER () 还是 Repeatable Read
Read Committed 会让分页报表自相矛盾。报表页面数出 12 条匹配的订单。另一个会话提交了一条新的匹配订单。然后页面去取第一页。 每条 SELECT 在开始时各取自己的快照。总数描述的是之前的那个集合,而这一页包含了中间提交的那条订单。把…
大多数安装问题其实就是解释器用错了
大多数“我装好了但 import 失败”的反馈,归根结底是 pip 属于另一个 Python,而不是运行代码的那个。pip install 用的是哪个 pip,取决于谁排在 PATH 的最前面。python -m pip install 用的是你刚指…
satisfies 对辅助函数报错,却不管一个根本没跑的任务
把 jobs 表从 : Record<string, Job> 改成了 satisfies,目的是让 when 保持字面量类型。现在 tsc 只对那个辅助函数的条目报错。周日 rotate-logs 悄悄被跳过了(“nightly: 1 of 2 r…
有歧义的 Julia 方法和 f(2, 3)
两个 Julia 方法,f(x::Integer, y::Number) 和 f(x::Number, y::Integer)。各自跑不同的算法,按哪个参数是整数来选。f(2, 3.0) 落到第一个,f(2.0, 3) 落到第二个。到这里都没问题。…
String.length 数的是字节,len 也是
一条被截断的错误消息把一个名字拦腰切断了。代码用 String.sub msg 0 40 保留前 40 个字节,靠近末尾的名字是韩文,切口正好落在一个三字节的 UTF-8 序列中间。终端在本该显示最后一个音节的地方显示了一个替换字符。 OCaml 里…
Erlang 和 Elixir 的文档对迟到的调用回复说法不一
两套文档对超时的调用说法不一致。gen_server 参考文档说,从 OTP 24 起调用经过进程别名,所以超时之后才到的回复永远不会被收到。Elixir 文档里的 GenServer.call/3 那一页却仍然让你在捕获退出之后丢弃迟到的二元组。两…
版本目录到处都好使,除了我的约定插件
把版本挪进 gradle/libs.versions.toml,共享的设置放在 buildSrc 下的约定插件里。想法是版本只在一个地方。按顺序说三种情况。 在子项目的构建脚本里,alias(libs.plugins.kotlin.jvm) 和 li…
ESM 默认导入,CommonJS 类型
在 monorepo 的 ESM 一侧导入同级包的时候卡住了。 @repo/ui 的 package.json 里没有 "type" 字段,它的 exports 长这样。"types": "./dist/index.d.ts","import": "…
用 NFC 键作为名字查找的默认方案合理吗?
好,假设用户粘贴了他们的名字,结尾是 e 后面跟着 U+0301。之后他们再输入同一个名字,键盘给出的是 U+00E9。在他们看来这是同一个名字,两种写法也规范等价,但它们仍然是两个不同的字符串。 我的打算是保留提交的原文用于显示,再派生出一个 NF…
提交之后,Vulkan buffer 归谁管?
一个包装 Vulkan buffer 的 C++ RAII 封装,先录制用到这个 buffer 的命令,提交,然后离开作用域。它的析构函数就在这时调用了 vkDestroyBuffer。而引用这个 buffer 的已提交命令还在执行。 这个调用是非法…
running_mean 很慢,时间花在 memmove 而不是算术运算上
平滑传感器数据。数组是 readings(nstation, ntime),站点在前,因为数据文件就是这样排布的,其他工具也要读。对站点做一层循环,每个站点调用一次 running_mean: 模块里是这样: 规模是 1500 个站点,20000 个…
关于一个在下次调用时失效的缓冲区的笔记
一个 C 库返回了一个指针和一个长度。目前已知的是,在单线程的调用序列里,这个缓冲区可读,并且在下一次库调用之前一直有效。没有所有权转移。不知道的是,别的句柄、回调或后台线程能不能让它失效。文档没说。 指向 const 字节的指针只能排除通过这一条访…
--user 的脚本目录从来不在服务的 PATH 里
公平地说,pip 是提醒过我的。那条“脚本装到了一个没加进 PATH 的目录里”的警告夹在安装输出中间滚过去了,我没看。 事情本身很平常。pip install --user 会把控制台脚本装到用户基目录下,Linux 上是 ~/.local,所以脚…
it、_1,还有我仍在写的块参数名
Ruby 3.4 为块参数加了 it,所以 users.map { it.name } 读起来几乎像一句话。我比较喜欢它,不太喜欢 _1,那东西总像是解析器随手丢下的。 Proc 文档里有几条规则值得知道。it 只存在于没有显式参数的块里。它是软关键…
先试试动态 let,再考虑 advice-add
在运行中的编辑器里做扩展,advice 是最好用的东西,也是我在别人 init 文件里最不放心的东西。(我自己的也算。) advice-add 配 :around 可以包住一个函数而不动它的定义,advice-remove 又能把包装摘掉。这一切都能…
Rego 的 allow 规则该默认为 false 吗?
{"approved": false} 和 {} 对 allow if input.approved == true 得到的是同一个结果。结果是 undefined,不是 false。 宿主接收一个带可选布尔字段 approved 的对象,只有查询返…
-fstack-protector-strong 且没有 libc,%fs 加载 0x28 处 segfault
Freestanding 的 hex dumper,x86-64 Linux,自己写的 _start,直接用裸 syscall,链接参数是 -nostdlib -static -no-pie。编译链接都干净,没有未定义符号,但 ./hexd -v <…
Doctest 只会展示顺利的那种回复
我很喜欢 doctest。iex> 行写在 @doc 里,在 doctest Counter 下运行,能让示例保持真实,对于纯粹的转换流水线,它们几乎是完美的文档。 但凡涉及和另一个进程通信,它们就会误导人。示例里 Counter.bump(pid)…
Matlab 里加权 rms 算错,只有权重不为 1 时才出问题
Fortran 和电子表格算出来都是 0.0300。Matlab 给出的数更大,而且会随权重变化。全是 1 的时候没问题。cfg.weights 看起来也对。为什么? obs 和 pred 分别检查过,都和参考值一致。没有报错,也没有警告。在 For…