2025-01-26 08:00:00
Block AI scrapers with Anubis - Xe Iaso
使用 [[hashcash]] 方式来对 AI 爬虫进行过滤。好像第一次看到 hashcash 的实际应用。代码实现在这里: x/cmd/anubis/README.md at master · Xe/x · GitHub
Getting good at these hard things doesn’t make life easier—it makes you responsible for harder problems. But that’s the point. Everyone faces difficult decisions. The difference is those who built this muscle early get to choose which hard problems they want to solve. Everyone else takes whatever hard problems life hands them. Start before life gets complex—before each new responsibility makes every risk feel heavier.
这次的画的图也是我花费时间最长的一次,学习了些时尚杂志的设计和布局。有些来不及调配色的图,我就参考媳妇买的巧克力包装配色。
每一张画作都很精美,完全不懂技术细节也看得很有滋味。
[[Turso]] Cloud 再一次发生数据丢失事故(是的,这是第二次)。这种事情发生过一次,就会失去信任了。
27 岁,一个日本留学生的 2024年终总结 - Simon’s Blog
至于屋久岛,则是一个令我想再去一次的地方。整个岛屿都像是一个巨大的森林公园,在西部林道到处都可以见到各种动物:躺在马路上晒太阳的鹿、在车子旁边抓耳挠腮的猴子。在这个岛上,比人类更多的是动物,而这些动物都没有受到任何拘束,随意行走,在岛上的生活很像隐居山林,每天都有新的惊喜。
[[日本]] [[屋久岛]]很美。
“所有的工资活动都是一种卖银”by🐴,我读的时候,我想,就算卖,也要写高效有用的代码,高效有用的卖。 但事实不是这样。卖的人太多了,该卖的花样和地盘已经全卖完了。但为了领工资,老板假装在卖,我也假装在卖,用花里胡哨的三年规划假装在卖,用层出不穷的汇报加班假装在卖。 卖吧,同志们,让我们美美与共,天下大卖。
无。
最近看到了很多次 PydanticAI ,自己实际上在代码场景下除了 Copilot,貌似没有使用 AI 解决实际的问题。正好我有一个需求场景是很适合 AI 来做:笔记中的拼写错误。于是花了些时间阅读了 PydanticAI 文档,跟着示例走了一遍,发现这个有些玄学,比如关于 Result 的示例中,预期是可以将 AI 返回的结果转换为特定的数据结构的,我预想是将笔记内容给 Agent 后,Agent 可以返回给我成一个特定的数据类型,然后我解析数据类型来更新笔记,但是实际上我试了多个 Model,都没有得到预期的结果。
from pydantic import BaseModel
from pydantic_ai import Agent
class CityLocation(BaseModel):
city: str
country: str
agent = Agent('gemini-1.5-flash', result_type=CityLocation)
result = agent.run_sync('Where were the olympics held in 2012?')
print(result.data)
#> city='London' country='United Kingdom'
我的笔记都是使用 Markdown 语法编写的,所以期望的是 AI 返回修复后的结果,并且能够正确的处理一些特殊格式,经过一些调试验证,最终我使用的 Prompt 如下,实际执行流程是 定义 Agent 和 System Prompt,遍历所有的笔记文件,然后将其内容读取,并添加 %%%{content}%%%
来传递给 Agent,将 Agent 的返回结果直接覆盖写入到笔记文件中。
general_prompt = """
找出内容中的中文和英文拼写错误,并将其更正。 请注意,不要更改内容的格式,例如空格,换行符等。
对于英文中没有通用中文翻译的技术术语,使用英文原文。
对于被反引号 (`) 包围的代码片段,不要更改内容,保持英文原文。 例如,`list`, `dict`,保持不变。
对于被 ([[]]) 包围的内容,不要更正内容,保持原文。 例如,[[pull request]],保持不变。
对于以 (---) 开头的内容,不要更正内容,保持原文。 例如,---,保持不变。
对于以 (> ) 开头的内容,不要更正内容,保持原文。 例如,> 请注意,保持不变。
内容以 Markdown 格式书写,更正结果也以 Markdown 格式写。 不要在生成的内容周围添加三反引号 (`)。
当出现代码示例,例如控制台或终端输出时,通常用三反引号和类似 “console” 或 “bash” 这样的关键词环绕(例如 ```console)。 不要更正内容,保持英文原文。
原始内容将被三重百分号 (%) 包裹, 你需要找出其中的中文拼写错误并将其原地更正,更正后内容不要包含三重百分号。
如果内容中没有中文或英文拼写错误,则直接返回原始内容, 返回内容不要包含三重百分号。
"""
2025-01-19 08:00:00
【BPF网络篇系列-2】容器网络延时之 ipvs 定时器篇 | Head First eBPF
[[IPVS]] 的统计函数 estimation_timer
导致的网络延迟。
排查过程中提到的工具有:
We’ve defined FDD as “A development process in which modifications to the code are tested by pushing them straight in and seeing what happens.”. We are relying on little more than a developer’s faith in their own ability.
FDD,有时候想要快速修复一个问题而直接 push 代码,引发了更多的问题。想到了之前看过的另一篇文章: The story of the one line fix | Dave Cheney 。
Downtown Doug Brown » Why is my CPU usage always 100%? (Upgrading my Chumby 8 kernel part 9)
从 CPU Usage 去调查,先去调查 top
的计算方式,然后去看 /proc/stat
实现,最终调查到和硬件定时器相关。
DBOS | Build Reliable Backends 10x Faster, Scale to Millions with 1 Click
[[DBOS]],基于 [[PostgreSQL]] 实现的代码框架,可以执行 workflow/task/job/…. 相较于 [[Temporal]] 需要 Server 和 Worker,DBOS 只是一个 Lib,目前提供了 TypeScript 和 Python 两个语言的 SDK。自身有 Cloud 服务,应该也可以本地化运行?
我尝试搜索 DBOS 名字的含义,本能的有些抗拒这个名字,像是蹭热度(即使 DB 或 OS 都不是啥大热点)。
So You Want to Build Your Own Data Center
This all seems very far removed from software, DevOps, or what you’d typically think of as “infrastructure,” and that is very true — building a datacenter cage is probably closer to building a house than to deploying a Terraform stack.
[[Railway]] 最初是基于 GCP 构建的,之前写过博客吐槽 [[GCP]] 的体验很糟糕,这篇文章讲述了他们自建基础设施的故事(租用了数据中心的一个笼子),包含了网络、电力、制冷相关的考虑。很喜欢引用中的这句话,Infrastructure 这个词包含的范围超过想象。
对应岗位的 JD 中的一句话: “Delivered projects 0→N. Lead it, scaled it, seen your “brilliant solutions” become tech debt, etc”
Benchmarking Gob vs JSON, XML & YAML | by Roman Sheremeta | Medium
Benchmarking Gob vs Protobuf. This article is a Part 2 of my… | by Roman Sheremeta | Medium
[[Golang]] 中常见的序列化方式性能比较。如果需要在 Gob 和 protobuf 中选择,直接选择 protobuf 就好。
I do NOT like message recall/replacement - Zhiqiang’s backyard
如果自己发送出去的消息有问题,尽量不要“撤回”、“删除”、“替换”,应该保留编辑的痕迹。至少不会让同一个 thread 对话里面的其他人显得很傻。
新疆二十日(下):古道高原,南疆的冰与火之歌 - Simon’s Blog
[[新疆]] [[游记]],太美了,看照片已经心情变好。
王星事件之后,网上流传出千余名受害者家属联名求救的表格,我看了之后百感交集。在很多家长眼里,自己的小孩是很乖的,都是被骗过去的。不排除会有一些受害者,但我倾向于认为,大部分人不是被骗过去的。
可我想说的是,其实在很多案例中,蛇头和报名的人是心照不宣的。大家都不会直接说去做诈骗,但其实也都知道剧本只是用来自欺欺人。
其实电诈园区跟国内的一些科技园区(的设施)没什么区别,里面有生活区,有写字楼,也有配套的餐厅。小一点的电诈公司窝点就设在宾馆里,一般老板会把两三层楼承包下来,把它改成办公区,进行电诈活动。园区里还养活了许多餐饮、超市和娱乐场所,形成了完整的闭环生态。
从过去到现在,我们谈了很多年的电诈,但隐私问题却谈得很少。其实这些东西才是看不见的黑洞。
最近缅甸诈骗的事情很火热,有些同事也在聊是否还会去泰国旅游,由于可能涉及到一些观点上的冲突,这个话题其实很难聊。从这两篇文章和花总的采访中,其实不难看出,一些“受害者”口中的“骗”,不是“诈骗”,更多的可能是利益不满足自己的期望。
Shape Up 阅读笔记(2)- 基本工作模式
Shape Up 阅读笔记(3)- Shaping: 如何真正对需求负责
Shape Up 阅读笔记(4)- Betting: 决策最重要的是发生在正确的层级
Shape Up 阅读笔记(5)- Building: 软件项目应该有的样子
整个公司不同产品线的研发工作,都强制使用同样的工作节奏。
- 原因:允许不同周期的项目并行,会导致资源的调配越来越复杂,最终项目管理工作变成了 Calendar 上的甘特图游戏,疲劳而无效
整个公司不同产品线的研发工作,都强制使用同样的工作节奏。
- 原因:允许不同周期的项目并行,会导致资源的调配越来越复杂,最终项目管理工作变成了 Calendar 上的甘特图游戏,疲劳而无效。
- 6 周时间的长度是价值和投入之间比较合适的比例。
- 更短的周期会导致需求太过碎片,太频繁的「Planning」会导致项目管理成本太高。
- 当每个人只是对 Task 负责,没有人对整个事情有责任感,项目的效果往往会走样。因此 Building 的核心意义是:让团队对一个指定范围内的价值交付(Pitch)端到端负责。
《冬泳》,班宇。本周读完了,最喜欢的三个故事是前三个:盘锦豹子、肃杀、冬泳。班宇好像对“水”有一些特殊的情感,试图用“水”来化解一切。
《坐在角落的人》,梁海源,单口喜剧专场。这个专场有两个版本,分别是《坐在角落的人》和《坐在角落的人2》,按照之前播客中的说法,在巡演过程中不断的迭代,最终两个版本的内容差别已经有一些了,所以加了 2
,专场线下全国巡演时我没抢到票,现在腾讯有了线上版本,线上和线下一定是有差距的,无论是观看氛围还是内容审核,是一定有缩水的,所以在豆瓣上有些差评可以理解。不同类型的专场差别很大,有些专场的内容,只适合看一遍,有些适合没事看看,这个专场就属于后者,像是一个多年没见的朋友跟你聊聊天。
《归途》,花总,柬埔寨缅甸,诈骗纪实拍摄。不要相信任何一个试图捞偏门的人说的话。
2025-01-12 08:00:00
GitHub Actions?! 想说爱你不容易之记一次 Release CI 重构经验 - 晒太阳的猫
[[Github]] [[Actions]] 的一些经验总结:
“只要代码是开源的,那么就保证软件制品和构建过程同样是开源的;”,这一条感觉需要结合公司实际策略来看待和执行。
OpenDAL RangeReader 的奥妙 - Grep.ing
这篇博客的代码效果真不错,应该是使用了 Code Hike 。
花了一天排查无果,问了朋友,最后发现这个问题:Goroutines cause deadlocks after fork () when run in shared library #155383,而且开发人员的回复是:This is to be expected. It’s almost impossible for multithreaded Go runtime to handle arbitrary forks.
而 mtr 正好执行了 fork,所以这算是一个 Golang 的 runtime 问题——如果以 shared-lib 的方式运行,那么主程序是不能 fork 的,如果 fork,Go runtime 中的 goroutine 管理与多线程模型,fork 后线程状态的不一致可能会导致无法正常恢复,从而触发死锁。
之前好像在其他地方也看到过这个问题,估计自己去 debug 要抓瞎。
Open source all the way down: Upgrading our developer documentation
[[CloudFlare]] 的开发者文档从 [[Hugo]] 迁移到了 [[Astro]]。他们在 2021 年从 Gatsby 迁移到了 Hugo,带来了更快的开发流程、自定义组件、结构化的 changelog 管理以及性能优化。
现在迁移到 Astro 是为了:内容组织改进、扩展性、开发体验、JS/TS 支持、CSS 管理。Starlight 🌟 Build documentation sites with Astro 是其中的一个决定性因素。
Living in the future, by the numbers
2024 年相较于 2004 年,发生了哪些变化,计算速度比 20 年前快了 200,000 倍,RAM 大小增加了 16 倍到 750 倍,硬盘容量增长了 100 倍,SSD 处理能力提升了 10,000 倍, SSD 的可靠性有了显著提高。
1.21+ 版本中有了 context.WithCancelCause
, context.WithTimeoutCause
, 可以携带一些 cancel 的上下文。
Little Endian vs Big Endian | 卡瓦邦噶!
想到了一个同事之前很喜欢的一道面试题,判断大端序小端序。
[[containerd]] internal 系列文章,这篇介绍了 Image 及 snapshotter。之前看过 OCI Image Spec 的话,感觉可以略过。
Cognitive load is what matters
中文版:cognitive-load/README.zh-cn.md at main · zakirullin/cognitive-load · GitHub
认知负荷指的不是任务本身的复杂度,而是与任务无关的 - 由信息的呈现方式导致。通常由与任务并无直接关联的因素引发,比如那些聪明人的 “骚操作”。并且这种类型的认知负荷是可以避免的。我们将在下文着重关注这一类型的认知负荷。
反复阅读,给自己建了一个半年之后的 Todo,半年之后再读一次。
厌倦了坐班的生活,向往 web 3 的自由。读了《Read Write Own》,学习了 WTF 的 Solidity 课程,以及其它平台关于 web 3 相关学习资料,最终,并没有找到 web 3 远程工作,但是对区块链技术,有了自己的认知:并非外界传闻的骗局,毕竟 USDT 在拉美、土耳其通涨严重的地区很流行,也能解决切实问题。几年前我曾经拒绝过两个区块链公司的 offer,拒绝的原因是觉得那是骗局,现在想想不免觉得可笑。只能说,一切因缘际会,皆因时机未到。依然看好 web 3 方向。
专栏:职场不用喝咖啡 - 求职之前关心啥?
专栏:职场不用喝咖啡 - 如何利人利己(1)
专栏:职场不用喝咖啡 - 如何利人利己(2)
专栏:职场不用喝咖啡 - 如何利人利己(3)
大部分时候,如果要主动跳槽,尽量往上选,不要平级甚至降级跳槽,哪怕薪资更高。 因为职场从来就不是一个单纯的生产环境,而是一个复杂的人际关系网络。 你需要更客观的,不带评分色彩的去了解你共事的同事们,注意,这里的任何一个方面,都没有「高低之分」,他们更像是「标签」,而不是「分数」。 你的上级是你最重要的职场「资源」,没有之一,是要利用的。
很多人在工作中都会遇到这样的困惑:什么情况下应该帮,什么情况下应该拒绝?什么情况下要争,什么情况下要让? 边界分两种:该打破的边界,和该坚守的边界。 该打破的边界:非本职工作类型的协作,如沟通,管理,流程,甚至办公室政治。 一定要坚守的边界,不能随便帮的,主要是这些场景:1. 需要明确责任归属的任务; 2. 专业性不足产生的困境。
不要让任何事情经过自己以后,居然没有任何进展。
TILs are great for the author. Yes, they are. Keeping a personal journal and reflecting on the things you’ve learned is a nice habit. But reading other people’s TILs is not nearly as useful. Quite the opposite, in fact.
完全认同。 TIL
主要用途是记录自己学到了某个技巧、知识。而这些 TIL 通常是零散的,作为读者没必要去读某个 TIL 合集。
这也是我自己的感情观,如果说亲情的亲密关系是不可选择的,那么对于自己另一半的亲密关系是可以有选择的,经过之前的感情,我是对「不可能改变」这件事情很强烈的认同感,不仅是别人不能为你改变,我在很大程度上也不会为对方改变,改变真的很难。
说多少次都不嫌多:不要妄图改变什么,你连你妈都改变不了。
Everything Must Be Paid for Twice
作者的观点是:我们在购买大多数东西时,都需要付款 2 次,第一次是为这个物品的商业价值付款,第二次是为使用这个物品时付出的精力价值付款。用读书来举例的话,第一次付款时 20 美元,第二次付款是 10 个小时的阅读时间。如果没有第二次付款,那么第一次付款相当于扔钱。 在消费主义社会,人们不断的追求第一次付款,来得到即时满足,潜在留下了大量的第二次付款负债,因为精力是有限的。我们往往会把自己的精力放在一些低价的事情上。
《冬泳》,班宇。每次读东北作家的小说,都会瞬间回到小时候的状态,书里的每一句话,我都能够想象到邻居的东北口音,书中的“虚构”故事,我都能想象是我身边的故事,从小听长辈聊到的故事,都会有一些想家。这可能也是为什么东三省可以统称东北人,因为大家的记忆是相同的。我想读一些关于哈尔滨的故事。
《生活大爆炸》,继续看第一季,谢尔顿之所以还能有人愿意和他相处,很重要的一点是他的真诚。谢尔顿的家里有电视,朋友们可以一起吃饭看电视,电视对我来说还挺重要的,可以随便放些什么,是一个“稳定”的象征?(在看剧的时候,想到了本周听的一期播客,在大城市是否有漂泊感,是否有“根”了,不同的人对此的定义差别很大:有些人觉得自己有稳定住所,有些人会觉得自己结婚/成家了,有些人会觉得家里有电视,有些人觉得家里安装了有线电视。)
2025-01-05 08:00:00
使用 [[Pydantic]] AI 将 [[FastAPI]] 的文档翻译为西班牙语。看上去使用起来很方便。[[piglei]]的 https://github.com/piglei/ai-vocabulary-builder 也在用 [[Pydantic]] AI。
落地的最大问题: 人力 链接到标题
遇到效果问题,很多客户都会提“微调行不行”,可以,但是得加钱。 我只调过 Ranking 模型和 LLM,都需要高质量的标注数据。但一般产出这些数据需要对应的业务专家,尤其是 LLM 的 SFT 数据,还需要提供结果的回答。我们见到的很多客户,连知识库的数据预期从哪来,哪些合适放在知识库都回答不了,更别说调动资源来准备这些数据了。 也因此,ToB 的 RAG 项目很难落地,无监督的各种方法很快就会达到上限,而后续的数据治理又没法推进,于是死局。
我司的内部工具中,只包含了 KB,没有所有的对外文档,导致 KB 的信息明显过于细节,割裂感严重,作为研发了解还可以,对于最终客户是否好用很难说。
Parkinson’s Law: It’s Real, So Use It
帕金森定律:指工作必须占用所有预先分配的时间才能完成。工作内容是会膨胀的。
如果一项工具没有 deadline,那么这项工作很有可能会无限的持续下去。无论是工作还是生活,从个人体感上说都是如此,所以需要给所有的事项都设置一个 deadline。下一个问题是如何设置一个“合理的” deadline?
备份一定需要做; 验证不同规模下数据恢复的时间,在事故发生后对于恢复周期有个预期。
对于数据备份的场景,我的经验是,即使有周期性的备份,优先选择重建,在前端进行流量切换,如果只能回滚,在时间允许的情况下,尽量把当前状态也备份一下。因为:
对于产品经理来说,第一要考虑是,到底要解决什么问题,解决这个问题是否会产生价值。而这个过程中,最痛苦的就是要持续不断的审视自己在做的事情到底是不是创造了价值,创造了多大的价值,是否有更大的价值被忽略掉了,真的为客户着迷了吗,足够着迷了吗。同时感叹中国 ToB 领域真的缺少优秀的产品经理,我们之前决定要自己来培养产品经理的思路还是非常明智的。
老板的年终总结。最近由于一些原因,也需要写一个工具类产品的需求文档,发现产品经理的活很难做,找到明确的用户很难,从明确的用户中找到共性,尽可能的均衡很难,从共性转换到功能需求也很难。
新疆二十日(上):雪域沙海,我的北疆探索之旅 - Simon’s Blog
[[新疆]] [[游记]]。我对冬天和大雪很熟悉,对冬天的雪山一无所知,这种地貌特征,太美了。 可惜我不会开车,不知道什么时候有机会去新疆。
《一往无前》,趁着元旦假期把这本读完了。顺势而为,在顺势的前提下要有做事的能力。
《生活大爆炸》,B 站最近有了版权,又重新开始看,真好看啊,放佛回到了大学时期。
元旦期间对自己的 2024 进行了一些总结,记录一些数据。
按照惯例,回答了 40 个问题,其中关于作品的:
Wakatime 的编码统计:
Last.fm:
豆瓣:
小宇宙:
小红书:
Bilibili:
滴滴:
2024-12-31 08:00:00
2024-12-29 08:00:00
This disruption of data export functionality was triggered by the deletion of an internal project containing essential API keys.:
- An internally used API key was flagged for a Google policy non-compliance and deemed no longer in use which led to the deleting of the API key.
[[GCP]] 因为删除了一个内部项目,内部项目中包含了一个必要的 API key,导致 BigQuery 服务中断。 看到这个事故调查,第一反应是我们内部有没有什么类似的仓库。
Break Stuff on Purpose - Engineering at Slack
Eventually, the cluster got into such a bad state that it couldn’t be saved, and we had to rebuild it from a clean slate. We thought we could stand up a new cluster by cycling in new hosts and restoring the Kibana objects from a backup. However, we were shocked and disappointed to discover our most recent backup was almost two years old.
“Complex systems usually operate in failure mode.”
[[Slack]] 的[[事故分析]],因为一次集群存储空间不足,导致所有的 Kibana 配置丢失。我没有理解即使再 bad state
,为什么数据会丢失呢? 我猜是因为他们自信自己有备份所以直接删除了,然后发现自己的备份一直是失效的,所以才 shocked and disappointed
。。。
有趣的文章,Julius 是一个能说会道,但是实际上动手能力不行的人,如果工作中有 Julius 这样的同事,我会躲开并远离。作者将现在的 LLM 比做 Julius 这样的人,我觉得是不太恰当的。我觉得现在的 LLM 是一个基础知识较好,兴趣广泛,沟通中容易发散的人。
我问他是怎么做到如此稳定的。他叹了口气,说:「心理医生很贵的,我简直凭一己之力把我医生的小孩们都送去了大学。」
Q4. 如果你的孩子向你寻求恋爱建议,你会说些什么? 慢慢来!虽然这听起来不太浪漫,但找到合适的人不仅取决于这个人本身,还取决于你生命中的那个阶段是否合适。 留意当你和这个人在一起时,你对自己的感受。合适的人会让你感到自信,成为最好的自己。而在一段让你感觉不好或自我怀疑的关系中,你是非常容易感到困扰的。你需要有勇气结束那些不健康的关系。 观察你的关系对你整个社交圈的影响。在我们的经验中,成功和健康的关系会拓宽你的社交圈——比如,你的朋友会成为他们的朋友等等。而我们认为,一段关系难以长久的一个迹象是,当对方过于占有你,或者对你与其他亲密关系感到威胁。
这个老板情商太高了,和他一起共事一定非常舒服。
原来新加坡的菠萝包是音译的 BoLuo。
关于这个书单,下面想要分享的,是我和 AI 关于这个书单的对话,当时自己正困惑于一个话题,“我们对 AI 的信任度,现在是什么程度,将来能到什么程度,当我们处在人生绝望时刻,是否会选择信任 AI,求助 AI?”。
让 AI 来分析书单,有趣,我也要试试。
《“活在当下”指南》,山姆·哈里斯。这本书相较于作者,可能译者会被更多人知晓,是俞立颖和朱静姝。前者是著名身心灵“导师”学霸猫,氪金玩家,后者是荷兰莱顿大学法律人类学博士,和前者的关系说不清道不明。我为啥会知道译者呢,是因为去年身心灵圈子出过一个著名的事情,2022 年朱主动加入学霸猫社群,现在走出,然后“痛斥”学霸猫。我为啥会看这本书呢,单纯的是因为我发现 2021 年标记了想读,在上海图书馆扫书的时候刚好看到了。这本书的内容有用,但不多。我目前的结论是:看到身心灵,直接远离就好。
《一往无前》,小米 10 年创业故事。小米是 2010 年成立的,最近股价来到了历史最高,年底找一本无需带入情感的书看。目前看完了 3 章,早期初创团队非常豪华,靠着微软(Windows Mobile)、谷歌(App)、摩托罗拉(硬件)快速推进,雷军个人精力爆表,加上有足够的想象,感觉很难失败。叙事上难免会带有一些套路,好在故事本身足够有吸引力。