|
-
OpenTelemetry 从埋点到排障
程序出问题的时候,日志通常是最先被翻出来的东西。 它能告诉我请求进来了,也能告诉我某个函数报错了,但当一个异步接口偶尔慢两秒时,日志很快就不够用了:到底是排队等了 1.5 秒,还是外部请求慢了 1.5 秒?是一个任务拖住了整个批次,还是所有任务都变慢... -
把市场研究做成程序:用 Python 搭一条可复现的美股行业轮动流水线
写完一篇市场报告之后,我通常会有一点不踏实。 当时的判断可能有数据、有图表,也有一套听起来完整的逻辑,但过两周再回头看,很难回答一个简单的问题:如果把今天的分析重新跑一遍,结论还会不会一样? 问题往往不在公式,而在过程。数据从哪里来、什么时候拿到的、... -
八月前的美股:AI估值、能源轮动与利率约束
我先把结论放在前面:现在的美股并不是“指数涨不涨”这么简单,而是市场内部已经换了一套定价顺序。 七月最明显的变化,是能源板块大涨、科技板块回撤。S&P Dow Jones Indices 的月度行业报告把这次切换归结为两件事:油价上行,以及投... -
把 asyncio 写到能停下来:TaskGroup、取消、超时与背压
很多 Python 异步教程最后都会停在这里:同时创建几个协程,然后 gather 一下,看着总耗时从 5 秒变成 1 秒。 这当然没错,但它只回答了“任务能不能同时跑”,没有回答更难的问题:任务出错时怎么办?某个请求超时以后,其他任务要不要停?用户... -
按下发布以后:一篇 Markdown 到达浏览器的完整旅程
在 Pages CMS 里写完文章,点一下保存,过一会儿刷新网站,新文章就出现了。
这个过程看起来很像把一张照片发到社交平台:选择、确认、等待几秒,然后结束。但个人博客背后没有一个长期运行的后台替我处理请求。服务器上也没有 WordPress 和数据库。真正被发布出去的,只是一批 HTML、CSS、JavaScript、字体和图片文件。
那么,从一个 Markdown 文件到读者屏幕上的文字,中间究竟发生了什么?
这一次我不再写一份搭建步骤,而是沿着金猪博客当前正在使用的发布链路,从头走一遍。途中会经过 Hexo、Keep 主题、Git、GitHub Actions、Cloudflare Pages、DNS、CDN,最后才轮到浏览器。
-
博客重新开张以后
这几天,我几乎每天都要打开自己的博客看上几遍。 倒不是访问量突然多了,也不是有什么非更新不可的大事。更多时候,我只是想看看它还好不好。电脑上打开一次,手机上再打开一次,点点首页,翻翻旧文章,顺手看看那个粉色的猪头是不是还老老实实待在原来的位置。 它当... -
别再把个人博客搭建想复杂了:从买域名到手机发文的完整指南
搭个人博客看起来像一件很简单的事:选个主题,写篇文章,再把网页放到网上。 真正做起来才会发现,问题不是“怎样生成一个首页”,而是怎样让写作、备份、构建、部署、域名和搜索引擎长期配合。我的博客也踩过不少坑:CMS 保存后没有触发 Actions、公式生... -
如何做一份金融市场深度研究:从宏观周期到估值与风险
金融市场研究最容易陷入两个极端:一种是堆满宏观数据,却说不清它们怎样影响资产;另一种是先有“看多”或“看空”的结论,再从新闻里寻找支持。 真正有用的研究不应该从价格目标开始,而应该从一个可以被证伪的问题开始。例如: AI 算力产业链未来两年的盈利增... -
从矩阵公式到 PyTorch 代码:手写一个两层 GCN
上一篇文章从消息传递的角度介绍了 GCN、GraphSAGE 和 GAT。公式看懂之后,我一直觉得还差一步:矩阵里的每一项,放进代码到底是什么? 这篇文章只做一件事——不依赖 PyTorch Geometric 的卷积层,用 PyTorch 写出一个... -
一次 Hexo 主题样式事故复盘:本地正常,部署后为什么全乱了
这次故障发生得有点突然。 我刚通过 CMS 更新并部署博客,打开首页后,原本正常的猪头 Logo 被拉成了一条很长的粉色图形,文字也挤到了错误的位置。开始我以为只是浏览器缓存,换了手机,结果还是一样。 问题同时出现在电脑和手机上,说明它不像是某一个...