Artigo
20356 descobertas · Descobertas escolhidas da web aberta, das mais recentes às mais antigas.
-
macOS 里 神秘的 kernel_task ,为什么一直在写入硬盘?
最近我在 Mac 上发现,刚开机没多久活动监视器里的 kernel_task 已经写入了五百多 MB。过了一会儿,这个数字涨到七百多 MB。更早之前,我有几周没有关机,累计写入还曾经达到 1.4 TB。 难道我的电脑硬盘即将英年早逝了?
kok的笔记本 · ZH
-
海南之行后记
趁还记得,记录一些 起初是发现 嫦娥七号 在文昌发射,于是兴冲冲带着孩子去观看 CZ-5 发射 围绕着这个火箭发射基地做了大量调研;了解到很多知识: 发射基地分两块,一个是国发,一个是商发;CZ-5 在国发 国发最佳观赏地是 文昌县 门楼镇,淇水湾 发射前会封路,开车进不去 二话不说,定机票;无意中刷到 云闪付 有 -200 优惠,于是周五定闹钟抢票,抢到手。不过发现使用优惠,折腾了大半天发现 这优惠只能买去海南的单程,不能往返; 订单必须只有一人,而且必须是自己,付款人和乘机人必须是同一个人。 孩子未成年无法单独购票 未成年人在 -200 优惠之后附加购买,+100 折腾半天,感觉还比如直接一起打包买往返划算。囧 然后就是轰轰烈烈的定住处,观礼台。 因为时间比较接近了,发现价格贵得起飞,甚至一度想到骑电瓶车去路边看,考虑发射时间早上8点太早,很可能天气预报有雨于是作罢 选了一圈定 淇水湾五号 小区,价格 1500 。其实在门楼镇上有1200甚至900的,但是住宿条件更差。 然后,延迟一天,房东也爽快的答应延期一天入住; 但是返程机票已定,时间不够,于是折腾半天去改机票,每个人 -140 。啊痛死! 接下来,让人更崩溃的事发生了,发射tmd取消了! 还好这个房东比较爽快,直接退款。网上很多撕逼的。 虽然我也一直关注今年广西边上这个土台风,没想到居然取消了啊。虽然有消息传言说天气因素
Est's Blog · ZH
-
Doherty 多尔蒂阈值
前几天鼠标坏了。随手换了个新的,双飞燕。没想到这垃圾鼠标居然在 macbook 下有间歇性卡顿 失联问题,表现是光标不动 怀疑是 系统问题,驱动问题,鼠标本身,商家卖假货问题。最后想明白了,这几十元破玩意就tmd不值得去折腾心态。直接扔。 回想了一下,这玩意其实对工作影响比意料中的大得多。平时操作触摸板 键盘都是下意识的,根本不会去多想; 光标在显示器上一旦当场卡住,你大脑瞬间被吸引过去,从软件到硬件到购买决策,到损失厌恶,全部过一遍,恶心死了 生活中我们习惯了太多「常见」的事,是工业和质量体系支撑着这一切的「正常」。我想到骑车可以走神,开车可以走神,走路也可以走神,有的时候经过一个路口,你都完全不知道道路上发生了什么,怎么过的红绿灯,有没有危险,浑然不知;自己反正在操心着别的事儿,身体就不由自主的「自动驾驶」 电脑上 打字 也是一样。一个输入法如果能连续不断正确打出你想要的东西,那种表达的流畅是让人很舒服的。因为新生代很多人都不会 盲打 了,我想很多人可能很难体会到这一点了吧 我想到,其实写代码也是一种同样的感受。无论是以前古法手搓,还是现在 AI 写代码,都有那么一些任务不想去碰,即便动工也完成得不好。 仔细观察了下这类任务都有几个特点:缺的东西和中间步骤比较多,可选的方向变化也比较多。比如你要给一个推送任务加一个可选参数,但是要动底层基础数据结构,这个事儿也不急,这种改造除非
Est's Blog · ZH
-
Register Token以及对变形金刚AI的四大批判
前几天 Yann LeCun 对 变形金刚(transformers) AI 进行了深刻的 批判 First, the reasoning abilities of current AI systems are based non-auto-regressive search (which is what I have always advocated for). But AFAICT, they do it in token space, which is limited and inefficient. I have claimed that human-like reasoning must be a search in continuous representation space. It looks like the industry is moving towards that. Second, the self-improvement methods, as currently practiced, only work for domains where the quality of outputs can be scored without human intervention, such as mathematics, code, and scenarios th
Est's Blog · EN
-
聪明 Agent 四套路 和 人肉学习
nVIDIA 联合 NTU,MIT 联合研究了一项关于 Agent harness 自我提升的 研究 ,项目叫 SoL-Pi , Scaling Auto-Research Loops for Efficient Agent Harnesses 让 Research Agent 自动发现 Harness 里的 Token 浪费,再通过大规模实验筛掉无效改法。把结论再放进大量环境中反复测试。整个探索一共 152 个候选方向,分成 context、progress、tools、delegation、prompt/policy、improvement/evaluation 六类,然后把这些想法扔进大量相互隔离的 research lineage 里,让 agent 自己观察 trajectory、提出机制、实现、review、跑实验、继续修改。最终用了 535 个可执行搜索环境,其中 495 个来自 GitHub issue-PR pair,40 个是 verifier-driven synthetic tasks;论文说总共跑了 3000+ 次实验和 60000+ 次 agent-environment interaction 最后真正留下来的精华,只有 4 大机制: Action Fusion:把“修改文件”和紧接着的测试/运行命令融合进一次 tool request。典型情况从 3
Est's Blog · ZH
-
Node.js、浏览器和 Cloudflare Workers 的wasm引入问题
最近在鼓捣 WebAssembly,这玩意没啥神秘的,可以看出一坨二进制的 .js 库文件 它本身的export和调用方式是统一的,但如今天我才知道,在不同 JavaScript 运行环境加载 .wasm 方式并不完全一样。 例如 Cloudflare Workers 可以直接: import wasm from "./simple.wasm"; const { instance } = await WebAssembly.instantiate(wasm, imports); Cloudflare 会把 .wasm 模块作为 WebAssembly.Module 提供给代码。 浏览器通常则是通过 fetch() 获取 Wasm,再使用 WebAssembly.instantiateStreaming() : const { instance } = await WebAssembly.instantiateStreaming( fetch("./simple.wasm"), imports, ); Node.js 则通过文件系统读取 .wasm 二进制,然后初始化。 .instantiate() 第一参数必须是 typed array 或者 ArrayBuffer 我自己 写了个 Wasm 库 ,AI 为 Node、浏览器、Cloudflare Workers 分别写一套初始化代
Est's Blog
-
preconnect 走 http3
想让 <link rel="preconnect"> 强制走 HTTP/3,能做到吗? preconnect 是什么 <link rel="preconnect" href="https://example.com"> 浏览器看到这个标签,会立刻去做这几件事: 解析 example.com 域名 建立一个连接 完成 TLS 握手(如必要) 保持连接并等着,不发送任何请求正文 等真正要请求资源时,这个连接已经热好了。这就是 提前连接 preconnect HTTP/3 跑在 UDP 上(QUIC 协议),HTTP/1.1 和 HTTP/2 跑在 TCP 上。 HTML 层面没有任何办法声明"这个 preconnect 要走 h3"。 这个连接最终用什么协议,HTTP/1.1、HTTP/2、HTTP/3,浏览器有一系列决定流程 触发 h3 preconnect 的三个条件 网络层有两条实现路径(Chromium 正在迁移,两条并存) 条件 ①:浏览器缓存了这个站点的 Alt-Svc 服务端某次响应头带上: Alt-Svc: h3=":443"; ma=86400 浏览器把它记下来(存进 profile 磁盘缓存),之后所有对该站点的 preconnect 都会走 QUIC。 传统路径: http_stream_factory_job_controller.cc:915-919, 950
Est's Blog · ZH
-
浏览器点2下就能让小爱音箱播放http音乐!
还在被 冈易 QQ 音乐困扰吗,让小爱同学播放NAS上的歌需要几步? https://est.github.io/play2mi/ 装个书签,点两下就行。不需要下载软件,不需要第三方服务器 期间还是碰壁了不少的。也学到不少东西。小米音箱以前应该是openwrt魔改 ubus 控制,后来都改成 Android 了。 这一分裂也导致它内部有两套API接口。一个是 sid=micoapi 一个是 sid=xiaomiio ,前者跑在 小爱云 Mina api2.mina.mi.com ,后者跑在 米家 IoT 云 api.io.mi.com/app 和 api.mijia.tech/app 这次就简单做了 Mina (micoapi) 的支持 能放歌,能 TTS 就行了。要扩展等有缘人吧。 期间搞出来个巨搞笑的插曲,AI 发现浏览器死活登录不上,一度以为是风控了,账号被画像了,IP被标记了,结果是 nonce 计算的时候没用 bigint 精度被截断了。笑死。幸好在去研究 TLS 指纹之前被我拦住了。 这种一般都是低级错误。 然后无聊让AI去扒一下能不能拿到shell,还真有注入漏洞。不过,老固件才行!!气死了!!!!! 算是又填了一个坑吧。对了,这个项目如果想跑在服务器,估计不太行,据说小爱的HTTP对IDC出口有风控。
Est's Blog · ZH
-
HTML里的“宏”
摊牌了,分享两个极少有人知道的技巧。 观察下面的网页 https://lab.est.im/xhtml/ 有没有发现神奇之处 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html [ <!ENTITY my_symbol "★"> <!ENTITY wikipedia '<img height="14" src="https://en.wikipedia.org/favicon.ico" alt="Wikipedia" />'> ]> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Entity test</title> </head> <body> <p>hey &my_symbol; visit &wikipedia; for more!</p> </body> </html> 另外就是刚做的 play2mi 有一个特立独行的想法:不让出现厂牌的关键字,一律用图标 代替。 但是这个 <img height="16" src="https://www.mi.com/favicon.ico" /> 出现得次数太多,就很重复了。有没有 宏/macro 来节约呢? 浑身不舒服。经过一番激烈拷打AI,最终结果: div.wrap param {display: inl
Est's Blog
-
从 Bartender 迁移到 Thaw
我用了很长一段时间的 Bartender。 对于菜单栏里常驻着一大堆应用的 Mac 用户来说,Bartender 确实很好用:不常用的图标可以隐藏,需要时再展开,整个菜单栏看起来清爽很多。尤其是换到带刘海的 MacBook 之后,菜单栏空间更加紧张,这类工具几
唐巧的博客 · ZH
-
OpenConnector:给 AI Agent 加上一道凭据防火墙
过去,我们使用 AI,主要是在对话框里问问题。现在,AI Agent 开始读取邮件、管理日历、查询 Notion、处理 GitHub Issue,甚至操作企业内部系统。 这时,一个绕不开的问题出现了: 怎样把外部账号交给 Agent,又不把账号的
唐巧的博客 · ZH
-
关于渠道的思考
增长遇到瓶颈时,团队很容易把希望寄托在“多开一个渠道”上:找更多达人、进入更多平台、铺更多线下门店,或者接入一个看起来拥有大量用户的合作方。 但渠道越多,生意不一定越好。它可能带来增量,也可能只是把原来的订单重新分配一遍;可能提升收入,也可能因为价格竞争、重复
唐巧的博客 · ZH
-
《估值原理》读书笔记:价格背后的游戏、责任与社会秩序
对我来说,《估值原理》不是一本很容易读懂的书。 这本书的作者是周洛华老师,上海大学经济学院副院长。它和一般讲投资、财务、估值模型的书很不一
唐巧的博客 · ZH
-
404 Not Found
今天早上在机场候机时,我看到一架飞机停在“404”前。 太阳刚刚升起,金色的晨光穿过云层,落在银白色的机身上。机场正在苏醒,而那个醒目的数字,让我这个程
唐巧的博客 · ZH
-
对抗衰老 - 读《抗衰大脑》
最近读完了《抗衰大脑》,作者马克·米尔斯坦(Marc Milstein)是美国生物化学博士,拥有分子生物学、癌症生物学和神经科学相关研究背景,现主要从事脑健康的科学传播。 以下是一些总结。 <a href="
唐巧的博客 · ZH
-
读《信号与噪声》
最近读完了《信号与噪声》,作者纳特·西尔弗是一位统计学家。他毕业于芝加哥大学经济学专业,早期从事棒球数据分析,开发了预测球员表现的 PECOTA 系统,后来创办数据分析网站 FiveThirtyEight(538),因对美国总统选举的预测而广受关注。 <str
唐巧的博客 · ZH
-
Flyer:基于FastAPI的轻量级API开发框架
概述 我们经常会听到“不会开发的运维不是个好运维”,确实在运维工作当中,娴熟的开发经验能让运维工作如鱼得水,事半功倍!高级的运维除了需要精通 Shell 脚本编程之外,最好还需要掌握一门高级语言,比如 Python、Golang、PHP、Lua 等。高级语言除了可以解决一些更复杂的运维场景,还可以帮助我们更好的理解业务,做好业务运维,毕竟知己知彼才能百战不殆。 经常看到很多运维同学写接口通常是基于 Flask,只用一个脚本一撸到底,完全没有框架的概念,总体给人的感觉比较粗糙简陋。本文分享一个我个人基于 FastAPI 框架设计的轻量级 API 开发框架,能够应付绝大部分的业务运维的后台 API 场景,这个框架我取名为 Flyer,意味着轻量且快速。 Flyer API 开发框架 框架特性 继承 FastAPI 所有特性,包括高性能、自带 Swagger/ReDoc 文档、易开发等,详见:( FastAPI (tiangolo.com) ) 拥抱云原生,所有参数都可以通过七彩石/环境变量来自定义,代码中也可以非常方便的获取指定环境变量的值 鹅厂内部版本集成了七彩石、智研日志汇、监控宝等各种研效库(外部版本已剥离) MySQL/Redis/Kafka 等开源组件已默认对接,可以开箱即用 支持记录全局请求/被请求流水日志及耗时等监控特性 可以快速开启简单的 BasicAuth 鉴权等 更
张戈博客 · ZH
-
SQLAlchemy因密码含有@符号连接MySQL失败
最近新来的实习生在重构一个我入职时开发的老系统。这个系统之前用的是 Python twisted 框架,这次希望换成 FastAPI,也就是我上一篇文章分享的 Flyer 开发框架 。 小伙子很给力,自学了几天 FastAPI 和 Flyer 就开工了,结果用 Flyer 连接 MySQL 时报错: 问题现象 1 sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'xxxx@x.x.x.x' ([Errno -2] Name or service not known 报错原因一眼就能看出来: 密码里有一个 @ 符号 ,导致 @ 之后的内容被当成了数据库主机地址。 解决办法:密码做 URL 转义 用 urllib.parse.quote_plus 对密码转义即可: 1 2 3 4 from urllib.parse import quote_plus password = quote_plus ( "your_p@ssw0rd" ) # 再把转义后的密码拼进连接串 为什么我的老项目没这个问题 奇怪的是,我之前有个基于 Flyer 的项目复用了同一个数据库、同样的账号密码,却从没出现过这个问题,所以我一度笃定是 SQLAlche
张戈博客 · ZH
-
gRPC开发过程中遇到的问题记录
最近我在改造手头负责的一个 HTTP Restful API 服务,集成对 gRPC 协议(在鹅厂叫 tRPC,是 gRPC 的本土衍生版本)的支持。由于是从 0 学习这个协议,因此也踩了不少坑,这里用一篇文章来记录下,希望可以帮助到同样从 0 学习 gRPC 的朋友。 列表参数赋值 老的 Rest 接口中,大量用到了列表参数,看了下 pb 协议,给这个参数定义如下: 1 2 3 message Foo { repeated string Bar = 1 ; } 在 Python RPC 客户端调用测试时,按照经验,传参如下: 1 2 req = pb . Foo () req . Bar = [ "a" , "b" ] 结果赋值就报错了: 1 AttributeError: Assignment not allowed to repeated field "Bar" in protocol message object. 经过一番搜索,最终发现 Python 客户端应该如下赋值列表参数: 1 2 3 req = pb . Foo () bar_list = [ "a" , "b" ] req . Bar . extend ( bar_list ) 这样就可以正常赋值了,但是总觉得这个设计太绕了,直接赋值不行么?总体来说,gRPC 还是偏编译型语言的设计的,在 Python 这种解
张戈博客 · ZH
-
FastTTS:支持私有化部署和源阅读无缝对接的语音合成服务
概述 长话短说,最近发现微软的语音服务莫名扣费了,然后看着国内云服务动辄几千上万的语音合成服务资源包,一阵苦涩。搜了下,发现挺多基于 edge-tts 的白嫖项目,试用了下确实能用,就是和源阅读对接的体验有待提高。 因此决定自己封装一个更适合源阅读 APP 的语音合成服务,以下是介绍,有需要的直接拿。 项目介绍 本项目基于 Edge-TTS 和 FastFlyer 开发框架,可以直接私有化部署提供语音合成服务,支持和源阅读 APP 无缝对接。 体验地址(账号密码:guest / guest): 在线合成 在线调试 项目地址: FastTTS 框架介绍 FastFlyer 是基于 FastAPI 设计的轻量级 API 开发框架。在 FastAPI 优异特性的基础上集成了一系列开箱即用的组件,包括 Redis、MySQL、Kafka 等。采用 SDK 接入方式,内置脚手架代码生成等辅助工具,让研发人员只需要专注于业务逻辑的实现,真正开箱即用! 注:更多框架介绍请阅读: FastFlyer 快速部署 1 docker run --name fasttts -d -p 8080:8080 jagerzhang/fast-tts 成功启动后,访问: http://<host>:8080/speech/docs 可以看到 Swagger 工具页面。 简单鉴权 如果需要外网访问,建议开启接口鉴权
张戈博客 · ZH
-
FastFlyer:基于FastAPI的轻量级API开发框架
概述 很早前分享过一个开发框架 Flyer,这些年一直在用,也攒了不少痛点:框架代码和业务代码耦合在一起,想升个级就得挨个项目改一遍,非常痛苦。 所以这次重写了一版,取名 FastFlyer ——基于 FastAPI 的轻量级 API 开发框架。最大的变化是把框架做成了 SDK ,和业务代码彻底隔离,装个包就能用,升级也只是换个版本号的事。 项目地址: https://github.com/jagerzhang/fastflyer 主要特性 SDK 即装即用 :框架以 SDK 形式提供,与业务代码隔离,不再有「框架版本难以升级」的问题 自动生成项目骨架 :一条命令生成标准目录结构和演示应用,开箱即用 自动加载应用 :自动加载 app/ 目录下符合规范的应用,只需暴露名为 router 的路由对象 自带接口文档 :启动即有 SwaggerUI 和 Redoc 性能足够用 :单核单进程空载 9000+ QPS ,基本能覆盖绝大部分运维场景 快速开始 安装 SDK 1 pip3 install --upgrade fastflyer 这一步是可选的,主要为了让 IDE 能正常提示。 创建项目 1 2 3 4 5 export new_project = myproject mkdir -p /data/ ${ new_project } && cd /data/ ${ new_proje
张戈博客 · ZH
-
Beggar:让 CodeBuddy 多 Agent 协作研发成本直降 90% 的开源套件
一套可复用的多 Agent 配置方案,通过模型差异化分工 + 双 Reviewer 交叉审查 + Review Gate 自动升级,在保证质量的前提下大幅降低 AI 编程成本。 为什么需要 Beggar 如果你正在用 CodeBuddy Code 做 AI 辅助开发,大概率遇到过这样的困境: 成本焦虑 :所有任务都用最强模型?太贵。都用便宜模型?质量没保障。 单模型盲区 :同一个模型写代码又审代码,自己的 bug 自己审不出来。 编排混乱 :Agent 之间职责不清,Leader 直接下场写代码,角色边界形同虚设。 缺乏质量兜底 :审查不过怎么办?升级谁?几轮后还不过呢?Beggar 的解决思路很直接—— 把"用哪个模型做哪件事"这件事工程化 。 核心设计:四层成本优化 1. 模型分层——不是所有任务都需要最强模型 Beggar 把研发流程拆成 9 个角色,每个角色匹配能力够用的最便宜模型: 角色类型 代表 Agent balanced 预设模型 倍率 编排调度 Leader deepseek-v4-pro x0.16 方案设计 Architect glm-5.2 x0.79 复杂编码 Coder-Senior deepseek-v4-pro x0.16 常规编码 Coder-Standard deepseek-v4-flash x0.06 简单编码 Coder-Lite hy3
张戈博客 · ZH
-
博客重构手记:从 WordPress 到 Hugo 静态化
起因:其实挺惭愧的 这个博客荒废挺久了。 工作越来越忙,更新从一周一篇变成一月一篇,再到后来大半年都想不起来登录。偶尔上去看一眼,后台堆着一堆插件更新提示,我一般直接关掉——不是不想管,是真抽不出时间,而且心里清楚,一个没人维护的 WordPress 本身就是个隐患。 真正让我下决心的是前阵子 PHP 又爆了个漏洞。看到消息的时候我第一反应不是“赶紧升级”,而是“算了,换个不需要 PHP 的方案吧”。 为什么不直接升级 也不是没想过就地升级。但盘了一下现状就放弃了: WordPress 版本落后不少,主题是好几年前改过的,插件一堆 PHP 环境也要跟着升,升完还得一个个测兼容性 服务器上的 MySQL、Nginx 配置都是当年手动调的,动一个地方心里没底 最关键的是,就算全部升级完,得到的还是一个需要我一直维护的动态站。而我恰恰最缺的就是“一直维护”这四个字。 静态化就很对症:没有 PHP、没有数据库、没有后台,生成完就是一堆 HTML。攻击者连个入口都找不到。平时我只管写 Markdown,剩下的交给 Git。 文章迁移:467 篇 数据库里躺着的家当比我以为的多不少: 1 2 3 4 5 6 post publish 467 篇(另有 8 篇草稿) page 8 个 attachment 1745 个 comment 20309 条(13.8MB,全库最大的一张表) 分类 13
张戈博客 · ZH