标签: startup

  • 鸿蒙ArkUI:状态管理、应用结构、路由全解析

    🔥 鸿蒙新手入门必看!本文面向鸿蒙初学者,讲解 ArkUI 中V1与V2状态管理的区别,并结合示例介绍应用结构、Route路由及Navigation的基本用法,快速理解鸿蒙应用的页面组织与跳转逻辑。
  • 我们来说一下消息的可靠性投递

    ​ 1. 核心概念 可靠性投递(Reliable Delivery)是指确保消息从生产者成功到达消费者,即使面对网络故障、系统崩溃等异常情况也能保证不丢失、不重复、按顺序(部分场景)传递。 2. 面临
  • WEB端小屏切换纯CSS实现

    WEB端使用CSS实现简单小屏切换效果,让界面内容更加丰满。在实现了需要注意父容器跟待收缩容器间因为内容收缩而出现的高度循环坍塌问题,解决办法是增加一个中间容器,让子容器与父容器高度解耦。
  • 是微服务架构不香还是云不香?

    是微服务架构不香还是云不香?

    这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务,成本降低90%》,副标题:“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”,有人把这篇文章在五一期间转到了reddithacker news 上,在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”,还是Amazon干的,这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》,继续抨击微服务架构,于是,瞬间引爆技术圈,登上技术圈热搜。

    今天上午有好几个朋友在微信里转了三篇文章给我,如下所示:

    看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇,你还真当 Prime Video 就是 Amazon 的全部么?然后,再看看这些文章后面的跟风评论,我觉得有 80%的人只看标题,而且是连原文都不看的。所以,我想我得写篇文章了……

    原文解读

    要认清这个问题首先是要认认真真读一读原文,Amazon Prime Video 技术团队的这篇文章并不难读,也没有太多的技术细节,但核心意思如下:

    1)这个系统是一个监控系统,用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果(比如:视频损坏或是音频不同步等问题),这个监控主要是处理视频帧,所以,他们有一个微服务主要是用来把视频拆分成帧,并临时存在 S3 上,就是下图中的 Media Conversion 服务。

    2)为了快速搭建系统,Prime Video团队使用了Serverless 架构,也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关,Step Function 用来做监控(探测器),有问题后,就发 SNS 上,Step Function 从 S3 获取 Media Conversion 的数据,然后把运行结果再汇总给一个后置的 Lambda ,并存在 S3 上。

    prime01

    整个架构看上去非常简单 ,一点也不复杂,而且使用了 Serverless 的架构,一点服务器的影子都看不见。实话实说,这样的开发不香吗?我觉得很香啊,方便快捷,完全不理那些无聊的基础设施,直接把代码转成服务,然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了,哪里不好了?!

    但是他们遇到了一个比较大的问题,就是 AWS Step Function 的伸缩问题,从文章中我看到了两个问题(注意前方高能):

    1. 需要很多很多的并发的 AWS Step Function ,于是达到了帐户的 hard limit。
    2. AWS Step Function 按状态转换收费,所以,贵得受不了了。

    注意,这里有两个关键点:1)帐户对 Step Function 有限制,2)Step Function 太贵了用不起

    然后,Prime Video 的团队开始解决问题,下面是解决的手段:

    1) 把 Media Conversion  和 Step Function 全部写在一个程序里,Media Conversion 跟 Step Function 里的东西通过内存通信,不再走S3了。结果汇总到一个线程中,然后写到 S3.

    2)把上面这个单体架构进行分布式部署,还是用之前的 AWS Lambda 来做入门调度。

    EC2 的水平扩展没有限制,而且你想买多少 CPU/MEM 的机器由你说了算,而这些视频转码,监控分析的功能感觉就不复杂,本来就应该写在一起,这么做不更香吗?当然更香,比前面的 Serverless 的确更香,因为如下的几个原因:

    1. 不再受 Step Function 的限制了,技术在自己手里,有更大的自由度。
    2. 没有昂贵的 Step Function 云成本的确变得更低了,如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress,你把 S3 换成 MinIO,你把 SNS 换成 Kafka,你的成本 还能再低。

    独立思考

    好了,原文解读完了,你有自己的独立思考了吗?下面是我的独立思考,供你参考:

    1)AWS 的 Serverless 也好, 微服务也好,单体也好,在合适的场景也都很香。这就跟汽车一样,跑车,货车,越野车各有各的场景,你用跑车拉货,还是用货车泡妞都不是一个很好的决定。

    2)这篇文章中的这个例子中的业务太过简单了,本来就是一两个服务就可以干完的事。就是一个转码加分析的事,要分开的话,就两个微服务就好了(一个转码一个分析),做成流式的。如果不想分,合在一起也没问题了,这个粒度是微服务没毛病。微服务的划分有好些原则,我这里只罗列几个比较重要的原则:

    • 边界上下文。微服务的粒度不能大于领域驱动里的 Bounded Context(具体是什么 大家自行 Google),也就是一个业务域。
    • 单一职责,高内聚,低耦合。把因为相同原因变化的合在一起(内聚),把不同原因变化的分开(解耦)
    • 事务和一致性。对于两个重度依赖的功能,需要完成一个事务和要保证强一致性的,最好不要拆开,要放在一起。
    • 跟组织架构匹配。把同一个团队的东西放在一起,不同团队的分开。

    3)Prime Video 遇到的问题不是技术问题,而是 AWS  Step Function 处理能力不足,而且收费还很贵的问题。这个是 AWS 的产品问题,不是技术问题。或者说,这个是Prime Video滥用了Step Function的问题(本来这种大量的数据分析处理就不适合Step Function)。所以,大家不要用一个产品问题来得到微服务架构有问题的结论,这个没有因果关系。试问,如果 Step Funciton 可以无限扩展,性能也很好,而且白菜价,那么 Prime Video 团队还会有动力改成单体吗?他们不会反过来吹爆 Serverless 吗?

    4)Prime Video 跟 AWS 是两个独立核算的公司,就像 Amazon 的电商和 AWS 一样,也是两个公司。Amazon 的电商和 AWS 对服务化或是微服务架构的理解和运维,我个人认为这个世界上再也找不到另外一家公司了,包括 Google 或 Microsoft。你有空可以看看本站以前的这篇文章《Steve Yegg对Amazon和Google平台的吐槽》你会了解的更多。

    5)Prime Video 这个案例本质上是“下云”,下了 AWS Serverless 的云。云上的成本就是高,一个是费用问题,另一个是被锁定的问题。Prime Video 团队应该很庆幸这个监控系统并不复杂,重写起来也很快,所以,可以很快使用一个更传统的“服务化”+“云计算”的分布式架构,不然,就得像 DHH 那样咬牙下云——《Why We’re Leaving the Cloud》(他们的 SRE 的这篇博文 Our Cloud Spend in 2022说明了下云的困难和节约了多少成本)

    后记

    最后让我做个我自己的广告。我在过去几年的创业中,帮助了很多公司解决了这些 分布式,微服务,云原生以及云计算成本的问题,如果你也有类似问题。欢迎,跟我联系:haoel@hotmail.com

    另外,我们今年发布了一个平台 MegaEase Cloud, 就是想让用户在不失去云计算体验的同时,通过自建高可用基础架构的方式来获得更低的成本(至少降 50%的云计算成本)。目前可以降低成本的方式:

    1. 基础软件:通过开源软件自建,
    2. 内容分发:MinIO + Cloudflare 的免费 CDN,
    3. 马上准备发布的直接与底层IDC合作的廉价GPU计算资源…

    欢迎大家试用。

    如何访问

    注:这两个区完全独立,帐号不互通。因为网络的不可抗力,千万不要跨区使用。

    产品演示

    介绍文章

     

    (全文完)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

    相关文章

    The post 是微服务架构不香还是云不香? first appeared on 酷 壳 – CoolShell.

  • 我看ChatGPT: 为啥谷歌掉了千亿美金

    我看ChatGPT: 为啥谷歌掉了千亿美金

    两个月前,我试着想用 ChatGPT 帮我写篇文章《eBPF 介绍》,结果错误百出,导致我又要从头改一遍,从那天我觉得 ChatGPT 生成的内容完全不靠谱,所以,从那天开始我说我不会再用 ChatGPT 来写文章(这篇文章不是由 ChatGPT 生成),因为,在试过一段时间后,我对 ChatGTP 有基于如下的认识:

    1. ChatGPT 不是基于事实,是基于语言模型的,事实对他来说不重要,对他重要的是他能读懂你的问题,并按照一定的套路回答你的问题。
    2. 因为是基于套路的回答,所以,他并不能保证内容是对的,他的目标是找到漂亮的精彩的套路,于是,你会发现,他的内容组织能力和表述还不错,但是只要你认真玩上一段时间,你会发现,ChatGPT 那些表述的套路其实也比较平常一般。它的很多回答其实都不深,只能在表面上。就像 Github 的 Copilot 一样,写不了什么高级的代码,只能帮你写一些常规格式化的代码(当然,这也够了)
    ChatGPT 就是一个语言模型,如果不给他足够的数据和信息,它基本就是在胡编乱造

    所以,基于上面这两个点认识,以发展的眼光来看问题,我觉得 ChatGPT 这类的 AI 可以成为一个小助理,他的确可以干掉那些初级的脑力工作者,但是,还干不掉专业的人士,这个我估计未来也很难,不过,这也很帅了,因为大量普通的工作的确也很让人费时间和精力,但是有个前提条件——就是ChatGPT所产生的内容必需是真实可靠的,没有这个前提条件的话,那就什么用也没有了

    今天,我想从另外一个角度来谈谈 ChatGPT,尤其是我在Youtube上看完了微软的发布会《Introducing your copilot for the web: AI-powered Bing and Microsoft Edge 》,才真正意识到Google 的市值为什么会掉了1000亿美元,是的,谷歌的搜索引擎的霸主位置受到了前所未有的挑战……

    我们先来分析一下搜索引擎解决了什么样的用户问题,在我看来搜索引擎解决了如下的问题:

    • 知识或信息索引。查新闻,查股票,查历史,查文档,找答案……
    • 找服务提供商。找卖东西的电商,找帮你修东西的服务,找软件……
    • 信息的准确和可靠。搜索引擎的rank算法保证了最准确、最有用、最权威的信息出现在最前面……(作恶的百度不在此列)

    基本上就是上面这几个,搜索引擎在上面这几件事上作的很好,但是,还是有一些东西搜索引擎做的并不好,如:

    • 搜索引擎是基于关键词的,不是基于语义的。所以,搜索引擎并不知道你的真实需求,因此,你会不可避免地要干下面的事,
      • 你经常要不断地增加或调整不同的关键词来提高查询信息的准确度……
      • 你经常要在你查找的信息中进行二次或多次过滤和筛选……
    • 搜索引擎是只能呈现内容,无法解读内容。所以,你找到相关的链接后,你还要花大量的时间来阅读理解,经常性的你不可避免的要干下面的事:
      • 打开一个链接,读到了一大半后,发现你要的内容不在其中,只能关掉再打开一个……
      • 你想要的内容是在的,但是太晦涩,看不懂,太费解,你要找小白友好的版本……
      • 你想要的内容不完整,你需要在很多个链接和网页上做拼图游戏……
      • 内容是无法结构化的展示的,你搜到的东西全都是碎片信息
    • 搜索引擎没有上下文关联,两次搜索是没有关系的。也就是说,人知道的越多,问题也就越多,所以,我们经常会面临下面的问题:
      • 随着我了解的越多,我的信息搜索的会出现分支,这个分支只有我自己的管理,搜索引擎是不关心的,导致我每次都相当于从头开始……
      • 你做计划的时候,你需要从多个不同的搜索中获取你想要的东西,最终组合成你定制化的东西,比如做旅游计划……

    好了,我们知道,ChatGPT 这类的技术主要是用来根据用户的需求来按一定的套路来“生成内容”的,只是其中的内容并不怎么可靠,那么,如果把搜索引擎里靠谱的内容交给 ChatGPT 呢?那么,这会是一个多么强大的搜索引擎啊,完全就是下一代的搜索引擎,上面的那些问题完全都可以解决了:

    • 你可以打一段话给搜索引擎,ChatGPT 是读得懂语义的。
    • 因为知道语义,于是在众多搜过结果中,他更知道哪些是你想要的内容。
    • ChatGPT 可以帮你生成 TL;DR,把长文中的要求总结出来形成更易读的短文
    • ChatGPT 可以帮你整理内容,在多个网页中帮你整合和结构化内容
    • ChatGPT 可以有上下文对话,你可以让他帮你不断通过更多的关键词搜索信息,并在同一个主题下生成、组织和优化内容

    一旦 ChatGPT 利用上了搜索引擎内容准确和靠谱的优势,那么,ChatGPT 的能力就完全被释放出来了,所以,带 ChatGPT 的搜索引擎,就是真正的“如虎添翼”!

    因此,微软的 Bing + ChatGPT,成为了 Google 有史以来最大的挑战者,我感觉——所有跟信息或是文字处理相关的软件应用和服务,都会因为 ChatGPT 而且全部重新洗一次牌的,这应该会是新一轮的技术革命……Copilot 一定会成为下一代软件和应用的标配!

    (全文完)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

    The post 我看ChatGPT: 为啥谷歌掉了千亿美金 first appeared on 酷 壳 – CoolShell.

  • 聊聊 nostr 和 审查

    聊聊 nostr 和 审查

    这两天在网络上又有一个东西火了,Twitter 的创始人 @jack 新的社交 iOS App  Damus 上苹果商店(第二天就因为违反中国法律在中国区下架了),这个软件是一个去中心化的 Twitter,使用到的是 nostr – Notes and Other Stuff Transmitted by Relays 的协议(协议简介协议细节),协议简介中有很大的篇幅是在批评Twitter和其相类似的中心化的产品,如:MastodonSecure Scuttlebutt 。我顺着去看了一下这个协议,发现这个协议真是非常的简单,简单到几句话就可以讲清楚了。

    通讯过程

    • 这个协议中有两个东西,一个是 client,一个是 relay,client 就是用户社交的客户端,relay 就是转发服务器。
    • 用户不需要注册,用户只需要有一个密钥对(公钥+私钥)就好了,然后把要发的信息做签名,发给一组 relays
    • 然后你的 Follower 就可以从这些 relays 上订阅到你的信息。

    技术细节摘要

    • 技术实现上,nostr 使用 websocket + JSON 的方式。其中主要是下面这么几个指令
      • Client 到 Relay主要是下面这几个指令:
        • EVENT。发出事件,可以扩展出很多很多的动作来,比如:发信息,删信息,迁移信息,建 Channel ……扩展性很好。
        • REQ。用于请求事件和订阅更新。收到REQ消息后,relay 会查询其内部数据库并返回与过滤器匹配的事件,然后存储该过滤器,并将其接收的所有未来事件再次发送到同一websocket,直到websocket关闭。
        • CLOSE。用于停止被 REQ 请求的订阅。
      • Relay 到 Client 主要是下面几个指令:
        • EVENT。用于发送客户端请求的事件。
        • NOTICE。用于向客户端发送人类可读的错误消息或其他信息
    • 关于 EVENT 下面是几个常用的基本事件:
      • 0: set_metadata:比如,用户名,用户头像,用户简介等这样的信息。
      • 1: text_note:用户要发的信息内容
      • 2recommend_server:用户想要推荐给关注者的Relay的URL(例如wss://somerelay.com

    如何对抗网络审查

    那么,这个协议是如何对抗网络审查的?

    • 识别你的身份是通过你的签名,所以,只要你的私钥还在,你是不会被删号的
    • 任何人都可以运行一个或多个relay,所以,就很难有人控制所有的relay
    • 你还可以很方便的告诉其中的 relay 把你发的信息迁到另一个 relay 上
    • 你的信息是一次发给多个relay的,所以,只要不是所有的热门realy封了你,你就可以发出信息
    • 每个relay的运营者都可以自己制定规则,会审查哪些类型内容。用户据此选择即可。基本不会有一个全局的规则。
    • 如果你被全部的relay封了,你还是可以自建你的relay,然后,你可以通过各种方式告诉你身边的人你的relay服务器是什么?这样,他们把这个relay服务器加到他们的client列表中,你又可以从社死中复活了。

    嗯,听起来很简单,整个网络是构建在一种 “社区式”的松散结构,完全可能会出现若干个 relay zone。这种架构就像是互联网的架构,没有中心化,比如 DNS服务器和Email服务器一样,只要你愿意,你完全可以发展出自己圈子里的“私服”。

    其实,电子邮件是很难被封禁和审查的。我记得2003年中国非典的时候,我当时在北京,当时的卫生部部长说已经控制住了,才12个人感染,当局也在控制舆论和删除互联网上所有的真实信息。但是,大家都在用电子邮件传播信息,当时基本没有什么社交软件,大家分享信息都是通过邮件,尤其是外企工作的圈子,当时每天都要收很多的非典的群发邮件,大家还都是用公司的邮件服务器发……这种松散的,点对点的架构,让审查是基本不可能的。其实,我觉得 nostr 就是另外一个变种或是升级版的 email 的形式

    如何对抗Spam和骗子

    但是问题来了,如果不能删号封人的话,那么如何对抗那些制造Spam,骗子或是反人类的信息呢?nostr目前的解决方案是通过比特币闪电网络。比如有些客户端实现了如果对方没有follow 你,如果给他发私信,需要支付一点点btc ,或是relay要求你给btc才给你发信息(注:我不认为这是一个好的方法,因为:1)因为少数的坏人让大多数正常人也要跟着付出成本,这是个糟糕的治理方式,2)不鼓励那些生产内容的人,那么平台就没有任何价值了)。

    不过,我觉得也有可以有下面的这些思路:

    • 用户主动拉黑,但很明显这个效率不高,而且体验不好
    • 社区或是同盟维护一个黑名单,relay定期更新(如同email中防垃圾邮件也是这样搞的),这其实也是审查。
    • 防Spam的算法过滤垃圾信息(如同email中干的),自动化审查。
    • 增加发Spam的成本,如: PoW 工作量证明(比特币的挖矿,最早也是用于Email),发信息要花钱(这个对正常用户伤害太大了)等。
    • ……

    总之,还是有相应的方法的,但是一定没有完美解,email对抗了这么多年,你还是可以收到大量的垃圾邮件和钓鱼邮件,所以,我觉得 nostr 也不可能做到……

    怎么理解审查

    最后,我们要明白的是,无论你用什么方法,审查是肯定需要的,所以,我觉得要完全干掉审查,最终的结果就是一个到处都垃圾内容的地方!

    我理解的审查不应该是为权力或是个体服务的,而是为大众和人民服务的,所以,审查必然是要有一个开放和共同决策的流程,而不是独断的

    这点可以参考开源软件基金会的运作模式。

    • 最底端的是用户(User)参与开源社区的使用并提供问题和反馈。
    • 用户在使用过程中了解项目情况后贡献代码和文档就可以晋升为贡献者(Contributors),
    • 当贡献者提交一定数量贡献之后就可以晋升为提交者(Committers),此时你将拥有你参与仓库的代码读写权限。
    • 当提交者Committers在社区得到认可后,由项目管理委员会(PMC)选举并产生PMC成员(类似于议员),PMC成员拥有社区相关事务的投票、提名和共同决策权利和义务。

    注意下面几点

    • 整个社区的决策者,是要通过自己贡献来挣到被选举权的。
    • 社区所有的工作和决定都是要公开的。
    • 社区的方向和决策都是要投票的,PMC成员有binding的票权,大众也有non-binding的投票权供参考。
    • 如果出现了价值观的不同,那么,直接分裂社区就好了,不同价值观的人加入到不同的社区就好了

    如果审查是在这个框架下运作的话,虽然不完美,但至少会在一种公允的基础下运作,是透明公开的,也是集体决策的。

    开源软件社区是一个很成功的示范,所以,我觉得只有技术而没有一个良性的可持续运作的社区,是不可能解决问题的,干净整齐的环境是一定要有人打扫和整理的

     

    欢迎关注我 npub1w6r99545cxea6z76e8nvzjxnymjt4nrsddld33almtm78z7fz95s3c94nu
    欢迎关注我 npub1w6r99545cxea6z76e8nvzjxnymjt4nrsddld33almtm78z7fz95s3c94nu

    (全文完)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

    The post 聊聊 nostr 和 审查 first appeared on 酷 壳 – CoolShell.

  • 感染新冠的经历

    感染新冠的经历

    写一篇与技术无关的文章,供大家参考。我住北京朝阳,从上周三开始我家一家三口陆续发烧生病,自测抗原后,都是阳性。好消息是,这个奥密克戎跟一般的病毒性感冒差不多,没什么可怕的,不过,整个过程除了发病之外还有一些别的因为感染带出来的事,大家也需要知晓,以准备好,以免造成生活的不便,更好的照顾好自己和家人。

    整个过程

    我先说一下整个过程(我会不断更新这个过程,直到转阴)。说明一下,我孩子老婆都打过三针国产疫苗,孩子是科兴,老婆是北京生物,我完全没有打

    先是我家孩子(12 岁)。上周三(12 月 7 日),孩子早上起来就说头疼,一测体温,38 度 5,就停止上网课,老实休息了,我们并没给孩子吃什么药,到了晚上,孩子的体温到了 39.4,嗓子疼,我老婆用酒精给孩子物理降温(注:事实上最好别用酒精,因为会被皮肤吸收导致副作用),成功降到了 38.2 左右。周四(12 月 8 日),孩子的体温在 38.2 一天,我老婆给孩子吃了莲花清瘟,被我制止了,本来想上退烧药的,但是我想体温也不算高,能不吃就不吃,于是就让孩子冲了个复方感冒冲剂(其实里面含对乙酰氨基酚,后面会说)。周五(12 月 9 日),孩子不停地出汗,到下午体温正常了,然后咳嗽,鼻涕就来了,感冒症状来了,但精神不好,体虚无力。周末休息两天就基本没事了,也转阴了。

    接下来就到我了。

    周五那天感觉嗓子有点异样,我没怎么在意,周六(12 月 10)就开始发烧了,傍晚 18 点左右,我是手脚冰冷,还有点打冷颤,头晕,嗓子干燥,我就钻被子里了,在半睡不睡的状态下到了 20 点左右,我浑身发烫,我老婆过来给我一量体温,39.8,说要不要也抹点酒精?我想,北京这个季节,物理降温不就上阳台上站一会就好了吗?当然,我就是把窗开了个口,把室温降到 20 度左右,然后,短袖短裤呆了一会就感到清醒了一些。这个时候,我觉得再来碗热汤就好了,我喝不习惯生姜红糖水,又腥又甜,我就自己整了一小锅西红柿蛋花汤,为了让我更能出汗,并适合我的重口味,我又加了点辣椒,一小锅热汤下肚,汗出的不亦乐乎,体温降低到38.4度,我觉的不用再吃药了,当然,嗓子也疼了。但是我舒服了很多,最后还看了下摩洛哥是怎么把C罗送回家的比赛。

    周日(12 月 11)是我最难受的一天,全天体温在 38.2左右,从早上就没有精神,吃完早点后,从 10 点一直睡到下午 15 点(因为嗓子疼,所以睡的也不安宁,各种难受), 这天我一会儿就出次汗,但是体温降不下来,始终在 38.2,然后我在犹豫是不是吃布洛芬,但是我感觉体温也不是很高,布洛芬这种药能不吃不不吃。然后,睡前喝了一袋感冒冲剂。周日这天,我婆也发烧,38.5,她全身疼痛,包括嗓子。这一天,我们在家啥也干不了,全家都在床上躲着,只有孩子还能动,所以,有些事只能让孩子去干了,我们也只点外卖了。

    周一(12 月 12 日)我早上起来,38.5,开完周会后,看很多人说泰诺有用,然后翻了一下家,居然没找到,算,还是冲两包感冒冲剂得了(后来才知道,中成药里也都是掺了对乙酰氨基酚,看来中医对自己都没什么信心),于是整个下午就在出汗了,我一整天都没有什么食欲,到了下午 17 点左右,体温正常了 36.7,但是晚上又到了 37 度,开始咳痰,轻微流鼻涕,不过感觉没什么事了。而我老婆的烧居然退了,她说她应该好了。

    IMG 2399
    这就是我吃的感冒冲剂。注:为什么 还要整点咖啡因,说明书上说,怕对乙酰氨基酚造成嗜睡,所以用咖啡因来消解,这复方逻辑,毫无破绽啊

    周二(12 月 13 日)我早上起床后, 体温还是在 37.2 度,我的嗓子干燥微疼,头也不疼就是头晕,所以,今天睡了两次,一次是中午12 点半到下午 14点半,一次是 16:40 到 19:10,两次都出汗了,而且第二觉睡地太爽了,感觉是这两天睡过最高质量高的觉,而且嗓子不干了也好了,体温正常了 36.8,但是感冒症状出来了,接下来几天休息一下应该就好了。我孩子应该感冒也没有精神,所以一天来也是醒醒睡睡。而我老婆又开始发烧了,还带这样的,跳跃性发烧…… 更不好的是她嗓子已经疼到说不出话,也咽不下东西了,今天她也是床上躺了一天……

    周三(12月14日)我今天已经不发烧了,就是频率不高的咳嗽,轻微鼻塞,不过,还是要休息,喝水。我老婆体温还是低烧中,嗓子疼痛好了些,感觉正在恢复中……

    整个过程,对我和我孩子来说,不难受,感觉就是发3天烧睡3天,再休息 3 天的样子,嗓子干燥微疼,比以前的病毒性感冒好多了,以前的病毒性感冒导致的嗓子疼我是连咽口水都咽不下去。但是对于我老婆就不一样了,她先是浑身疼痛,嗓子干燥,到现在嗓子疼如刀割,说不出话。这个事可能也因人而异。

    继续更新,自我阳性以来半个月了,从 12 月 14 日退烧后,我就一直处在感冒和低频咳嗽中,直到12 月 27 日才发现不咳嗽也不感冒了,但是说话还是有一点鼻音,估计还要 5-7 天就可以完全恢复了。

    注意事项

    IMG 2402

    能物理降温就不要吃药来降(应该避免使用酒精擦拭,因为有副作用,用水或冰就可以了),降到 38.5 以下,就可以自己抗了。如果物理降温不奏效,就要吃布洛芬和泰诺(林),这两种药非常有帮助,但是你应该在药店里买不到了,所以,你可以买中成药或复方药,反正里面的中药没有用,而几乎所有的中成药里都被加入了“对乙酰氨基酚”,算是“间接”或“复方”泰诺(林)了。但是,不要多服,不然,药量叠加,会导致你肝肾中毒。参看《这些所谓“中成药”,关键原料是对乙酰氨基酚,服用小心叠加过量

    下面文字节选自“默沙东诊疗手册”

    最有效和最广泛使用的退热药为对乙酰氨基酚和非甾体抗炎药 (NSAID),如阿司匹林、布洛芬和萘普生。

    通常,人们可能采取以下方式之一:

    • 每6小时650毫克对乙酰氨基酚(1天内不超过4000毫克)

    • 每6小时200到400毫克布洛芬

    因为许多非处方感冒药或流感制剂含有对乙酰氨基酚,人们一定要注意不要在同一时间服用对乙酰氨基酚和一种或多种这些制剂。

    只有当温度达到106°F (41.1°C)左右或更高时,才需要采取其它降温措施(如用温水喷雾和降温毯降温)。避免使用酒精擦拭,因为酒精可被皮肤吸收,可能产生有害效果。

    有血液感染或生命体征异常(例如,血压低、脉搏和呼吸速度加快)的人需入院。

    另外,一定要多喝水,热水最好。多喝水的原因是:1)布洛芬、对乙酰氨基酚(扑热息痛)等退烧药会让人加速出汗,会导致脱水。2)布洛芬等退烧药主要在肝脏代谢,60%~90%经肾脏随尿排出。多喝水,可加速药物排出体外,减少退烧药对肝肾的损伤。3)排汗和排尿都会帮身体带走一些热量。

    具体喝多少水因人而异,一般在2.5升到4升间,主要看你上厕所的频率。我因为前三天都在出汗,所以怎么喝水都不怎么上厕所,这两天我大概一天喝4升左右。总之,发烧吃退烧药更要多喝水。

    另外,如果全家都病倒了,那生活就有点不方便了,所以,你得做好一些准备:

    1)事先订好桶装水,18L 的那种,让人可以给家里送水,发烧期间用水很快的。

    2)生活上的事要做好全家病倒的准备,做饭只能整方便的做的或是速食的了,家里存点牛奶,面包,麦片,火腿肠,水果什么的,保证营养。再不行就点外卖,我家已经点了三天的外卖。还让孩子当个配送员跑腿到菜市场和超市开着视频买东西……

    3)还是要提前备药,我是准备用药的时候,发现家里只找到了布洛芬和感冒冲剂,因为我有高血脂,我还要吃瑞舒伐他汀钙片,结果发现我周边 5 公里的药店基本全都休业了,估计店员都阳了。

    4)有老人的,要照顾好。有呼吸困难的,一定要送急诊。

    根据知乎上的这个通过搜索引擎的测算,第一波的结束大约会在明年春节前结束。最后祝大家好运。

    (全文完)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

    The post 感染新冠的经历 first appeared on 酷 壳 – CoolShell.

  • eBPF 介绍

    eBPF 介绍

    很早前就想写一篇关于eBPF的文章,但是迟迟没有动手,这两天有点时间,所以就来写一篇,这文章主要还是简单的介绍eBPF 是用来干什么的,并通过几个示例来介绍是怎么玩的,这个技术非常非常之强,Linux 操作系统的观测性实在是太强大了,并在 BCC 加持下变得一览无余。这个技术不是一般的运维人员或是系统管理员可以驾驭的,这个还是要有底层系统知识并有一定开发能力的技术人员才能驾驭的了的。我在这篇文章的最后给了个彩蛋。

    介绍

    eBPF(extened Berkeley Packet Filter)是一种内核技术,它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。

    出于对更好的 Linux 跟踪工具的需求,eBPF 从 dtrace中汲取灵感,dtrace 是一种主要用于 Solaris 和 BSD 操作系统的动态跟踪工具。与 dtrace 不同,Linux 无法全面了解正在运行的系统,因为它仅限于系统调用、库调用和函数的特定框架。在Berkeley Packet Filter  (BPF)(一种使用内核 VM 编写打包过滤代码的工具)的基础上,一小群工程师开始扩展 BPF 后端以提供与 dtrace 类似的功能集。 eBPF 诞生了。2014 年随 Linux 3.18 首次限量发布,充分利用 eBPF 至少需要 Linux 4.4 以上版本

    eBPF 比起传统的 BPF 来说,传统的 BPF 只能用于网络过滤,而 eBPF 则可以用于更多的应用场景,包括网络监控、安全过滤和性能分析等。另外,eBPF 允许常规用户空间应用程序将要在 Linux 内核中执行的逻辑打包为字节码,当某些事件(称为挂钩)发生时,内核会调用 eBPF 程序。此类挂钩的示例包括系统调用、网络事件等。用于编写和调试 eBPF 程序的最流行的工具链称为 BPF 编译器集合 (BCC),它基于 LLVM 和 CLang。

    eBPF 有一些类似的工具。例如,SystemTap 是一种开源工具,可以帮助用户收集 Linux 内核的运行时数据。它通过动态加载内核模块来实现这一功能,类似于 eBPF。另外,DTrace 是一种动态跟踪和分析工具,可以用于收集系统的运行时数据,类似于 eBPF 和 SystemTap。[1]

    以下是一个简单的比较表格,可以帮助您更好地了解 eBPF、SystemTap 和 DTrace 这三种工具的不同之处:[1]

    工具 eBPF SystemTap DTrace
    定位 内核技术,可用于多种应用场景 内核模块 动态跟踪和分析工具
    工作原理 动态加载和执行无损编译过的代码 动态加载内核模块 动态插接分析器,通过 probe 获取数据并进行分析
    常见用途 网络监控、安全过滤、性能分析等 系统性能分析、故障诊断等 系统性能分析、故障诊断等
    优点 灵活、安全、可用于多种应用场景 功能强大、可视化界面 功能强大、高性能、支持多种编程语言
    缺点 学习曲线高,安全性依赖于编译器的正确性 学习曲线高,安全性依赖于内核模块的正确性 配置复杂,对系统性能影响较大

    对比表格[1]

    从上表可以看出,eBPF、SystemTap 和 DTrace 都是非常强大的工具,可以用于收集和分析系统的运行情况。[1]

    用途

    eBPF 是一种非常灵活和强大的内核技术,可以用于多种应用场景。下面是 eBPF 的一些常见用途:[1]

    • 网络监控:eBPF 可以用于捕获网络数据包,并执行特定的逻辑来分析网络流量。例如,可以使用 eBPF 程序来监控网络流量,并在发现异常流量时进行警报。[1]
    • 安全过滤:eBPF 可以用于对网络数据包进行安全过滤。例如,可以使用 eBPF 程序来阻止恶意流量的传播,或者在发现恶意流量时对其进行拦截。[1]
    • 性能分析:eBPF 可以用于对内核的性能进行分析。例如,可以使用 eBPF 程序来收集内核的性能指标,并通过特定的接口将其可视化。这样,可以更好地了解内核的性能瓶颈,并进行优化。[1]
    • 虚拟化:eBPF 可以用于虚拟化技术。例如,可以使用 eBPF 程序来收集虚拟机的性能指标,并进行负载均衡。这样,可以更好地利用虚拟化环境的资源,提高系统的性能和稳定性。[1]

    总之,eBPF 的常见用途非常广泛,可以用于网络监控、安全过滤、性能分析和虚拟化等多种应用场景。[1]

    工作原理

    eBPF 的工作原理主要分为三个步骤:加载、编译和执行。

    eBPF 需要在内核中运行。这通常是由用户态的应用程序完成的,它会通过系统调用来加载 eBPF 程序。在加载过程中,内核会将 eBPF 程序的代码复制到内核空间。

    eBPF 程序需要经过编译和执行。这通常是由Clang/LLVM的编译器完成,然后形成字节码后,将用户态的字节码装载进内核,Verifier会对要注入内核的程序进行一些内核安全机制的检查,这是为了确保 eBPF 程序不会破坏内核的稳定性和安全性。在检查过程中,内核会对 eBPF 程序的代码进行分析,以确保它不会进行恶意操作,如系统调用、内存访问等。如果 eBPF 程序通过了内核安全机制的检查,它就可以在内核中正常运行了,其会通过通过一个JIT编译步骤将程序的通用字节码转换为机器特定指令集,以优化程序的执行速度。

    下图是其架构图。

    (图片来自:https://www.infoq.com/articles/gentle-linux-ebpf-introduction/

    在内核中运行时,eBPF 程序通常会挂载到一个内核钩子(hook)上,以便在特定的事件发生时被执行。例如,

    • 系统调用——当用户空间函数将执行转移到内核时插入
    • 函数进入和退出——拦截对预先存在的函数的调用
    • 网络事件 – 在收到数据包时执行
    • Kprobes 和 uprobes – 附加到内核或用户函数的探测器

    最后 eBPF Maps,允许eBPF程序在调用之间保持状态,以便进行相关的数据统计,并与用户空间的应用程序共享数据。一个eBPF映射基本上是一个键值存储,其中的值通常被视为任意数据的二进制块。它们是通过带有BPF_MAP_CREATE参数的bpf_cmd系统调用来创建的,和Linux世界中的其他东西一样,它们是通过文件描述符来寻址。与地图的交互是通过查找/更新/删除系统调用进行的

    总之,eBPF 的工作原理是通过动态加载、执行和检查无损编译过的代码来实现的。[1]

    示例

    eBPF 可以用于对内核的性能进行分析。下面是一个基于 eBPF 的性能分析的 step-by-step 示例:

    第一步:准备工作:首先,需要确保内核已经支持 eBPF 功能。这通常需要在内核配置文件中启用 eBPF 相关的选项,并重新编译内核。检查是否支持 eBPF,你可以用这两个命令查看 ls /sys/fs/bpflsmod | grep bpf

    第二步:写 eBPF 程序:接下来,需要编写 eBPF 程序,用于收集内核的性能指标。eBPF 程序的语言可以选择 C 或者 Python,它需要通过特定的接口访问内核的数据结构,并将收集到的数据保存到指定的位置。

    下面是一个Python 示例(其实还是C语言,用python来加载一段C程序到Linux内核)

    #!/usr/bin/python3
    
    from bcc import BPF
    from time import sleep
    
    # 定义 eBPF 程序
    bpf_text = """
    #include <uapi/linux/ptrace.h>
    
    BPF_HASH(stats, u32);
    
    int count(struct pt_regs *ctx) {
        u32 key = 0;
        u64 *val, zero=0;
        val = stats.lookup_or_init(&key, &zero);
        (*val)++;
        return 0;
    }
    """
    
    # 编译 eBPF 程序
    b = BPF(text=bpf_text, cflags=["-Wno-macro-redefined"])
    
    # 加载 eBPF 程序
    b.attach_kprobe(event="tcp_sendmsg", fn_name="count")
    
    name = {
      0: "tcp_sendmsg"
    }
    # 输出统计结果
    while True:
        try:
            #print("Total packets: %d" % b["stats"][0].value)
            for k, v in b["stats"].items():
               print("{}: {}".format(name[k.value], v.value))
            sleep(1)
        except KeyboardInterrupt:
            exit()

    这个 eBPF 程序的功能是统计网络中传输的数据包数量。它通过定义一个 BPF_HASH 数据结构来保存统计结果(eBPF Maps),并通过捕获 tcp_sendmsg 事件来实现实时统计。最后,它通过每秒输出一次统计结果来展示数据。这个 eBPF 程序只是一个简单的示例,实际应用中可能需要进行更复杂的统计和分析。

    第三步:运行 eBPF 程序:接下来,需要使用 eBPF 编译器将 eBPF 程序编译成内核可执行的格式(这个在上面的Python程序里你可以看到——Python引入了一个bcc的包,然后用这个包,把那段 C语言的程序编译成字节码加载在内核中并把某个函数 attach 到某个事件上)。这个过程可以使用 BPF Compiler Collection(BCC)工具来完成。BCC 工具可以通过命令行的方式将 eBPF 程序编译成内核可执行的格式,并将其加载到内核中。

    下面是运行上面的 Python3 程序的步骤:

    sudo apt install python3-bpfcc

    注:在Python3下请不要使用 pip3 install bcc (参看:这里

    如果你是 Ubuntu 20.10 以上的版本,最好通过源码安装(否则程序会有编译问题),参看:这里

    apt purge bpfcc-tools libbpfcc python3-bpfcc
    wget https://github.com/iovisor/bcc/releases/download/v0.25.0/bcc-src-with-submodule.tar.gz
    tar xf bcc-src-with-submodule.tar.gz
    cd bcc/
    apt install -y python-is-python3
    apt install -y bison build-essential cmake flex git libedit-dev   libllvm11 llvm-11-dev libclang-11-dev zlib1g-dev libelf-dev libfl-dev python3-distutils
    apt install -y checkinstall
    mkdir build
    cd build/
    cmake -DCMAKE_INSTALL_PREFIX=/usr -DPYTHON_CMD=python3 ..
    make
    checkinstall

    接下来,需要将上面的 Python 程序保存到本地,例如保存到文件 netstat.py。运行程序:最后,可以通过执行以下命令来运行 Python 程序:

    $ chmod +x ./netstat.py
    $ sudo ./netstat.py
    tcp_sendmsg: 29
    tcp_sendmsg: 216
    tcp_sendmsg: 277
    tcp_sendmsg: 379
    tcp_sendmsg: 419
    tcp_sendmsg: 468
    tcp_sendmsg: 574
    tcp_sendmsg: 645
    tcp_sendmsg: 29
    

    程序开始运行后,会在控制台输出网络数据包的统计信息。可以通过按 Ctrl+C 组合键来结束程序的运行。

    下面我们再看一个比较复杂的示例,这个示例会计算TCP的发包时间(示例参考于Github上 这个issue里的程序):

    #!/usr/bin/python3
    
    from bcc import BPF
    import time
    
    # 定义 eBPF 程序
    bpf_text = """
    #include <uapi/linux/ptrace.h>
    #include <net/sock.h>
    #include <net/inet_sock.h>
    #include <bcc/proto.h>
    
    struct packet_t {
        u64 ts, size;
        u32 pid;
        u32 saddr, daddr;
        u16 sport, dport;
    };
    
    BPF_HASH(packets, u64, struct packet_t);
    
    int on_send(struct pt_regs *ctx, struct sock *sk, struct msghdr *msg, size_t size)
    {
        u64 id = bpf_get_current_pid_tgid();
        u32 pid = id;
    
        // 记录数据包的时间戳和信息
        struct packet_t pkt = {}; // 结构体一定要初始化,可以使用下面的方法
                                  //__builtin_memset(&pkt, 0, sizeof(pkt)); 
        pkt.ts = bpf_ktime_get_ns();
        pkt.size = size;
        pkt.pid = pid;
        pkt.saddr = sk->__sk_common.skc_rcv_saddr;
        pkt.daddr = sk->__sk_common.skc_daddr;
        struct inet_sock *sockp = (struct inet_sock *)sk;
        pkt.sport = sockp->inet_sport;
        pkt.dport = sk->__sk_common.skc_dport;
    
        packets.update(&id, &pkt);
        return 0;
    }
    
    int on_recv(struct pt_regs *ctx, struct sock *sk)
    {
        u64 id = bpf_get_current_pid_tgid();
        u32 pid = id;
    
        // 获取数据包的时间戳和编号
        struct packet_t *pkt = packets.lookup(&id);
        if (!pkt) {
            return 0;
        }
    
        // 计算传输时间
        u64 delta = bpf_ktime_get_ns() - pkt->ts;
    
        // 统计结果
        bpf_trace_printk("tcp_time: %llu.%llums, size: %llu\n", 
           delta/1000, delta%1000%100, pkt->size);
    
        // 删除统计结果
        packets.delete(&id);
    
        return 0;
    }
    """
    
    # 编译 eBPF 程序
    b = BPF(text=bpf_text, cflags=["-Wno-macro-redefined"])
    
    # 注册 eBPF 程序
    b.attach_kprobe(event="tcp_sendmsg", fn_name="on_send")
    b.attach_kprobe(event="tcp_v4_do_rcv", fn_name="on_recv")
    
    # 输出统计信息
    print("Tracing TCP latency... Hit Ctrl-C to end.")
    while True:
        try:
            (task, pid, cpu, flags, ts, msg) = b.trace_fields()
            print("%-18.9f %-16s %-6d %s" % (ts, task, pid, msg))
        except KeyboardInterrupt:
            exit()

    上面这个程序通过捕获每个数据包的时间戳来统计传输时间。在捕获 tcp_sendmsg 事件时,记录数据包的发送时间;在捕获 tcp_v4_do_rcv 事件时,记录数据包的接收时间;最后,通过比较两个时间戳来计算传输时间。

    从上面的两个程序我们可以看到,eBPF 的一个编程的基本方法,这样的在Python里向内核的某些事件挂载一段 “C语言” 的方式就是 eBPF 的编程方式。实话实说,这样的代码很不好写,而且有很多非常诡异的东西,一般人是很难驾驭的(上面的代码我也不是很容易都能写通的,把 Google 都用了个底儿掉,读了很多晦涩的文档……)好在这样的代码已经有人写了,我们不必再写了,在 Github 上的 bcc 库下的 tools 目录有很多……

    BCC(BPF Compiler Collection)是一套开源的工具集,可以在 Linux 系统中使用 BPF(Berkeley Packet Filter)程序进行系统级性能分析和监测。BCC 包含了许多实用工具,如:

    1. bcc-tools:一个包含许多常用的 BCC 工具的软件包。
    2. bpftrace:一个高级语言,用于编写和执行 BPF 程序。
    3. tcptop:一个实时监控和分析 TCP 流量的工具。
    4. execsnoop:一个用于监控进程执行情况的工具。
    5. filetop:一个实时监控和分析文件系统流量的工具。
    6. trace:一个用于跟踪和分析函数调用的工具。
    7. funccount:一个用于统计函数调用次数的工具。
    8. opensnoop:一个用于监控文件打开操作的工具。
    9. pidstat:一个用于监控进程性能的工具。
    10. profile:一个用于分析系统 CPU 使用情况的工具。

    下面这张图你可能见过多次了,你可以看看他可以干多少事,内核里发生什么事一览无余。

    延伸阅读

    一些经典的文章和书籍关于 eBPF 包括:

    彩蛋

    最后来到彩蛋环节。因为最近 ChatGPT 很火,于是,我想通过 ChatGPT 来帮助我书写这篇文章,一开始我让ChatGPT 帮我列提纲,并根据提纲生成文章内容,并查找相关的资料,非常之顺利,包括生成的代码,我以为我们以很快地完成这篇文章。

    但是,到了代码生成的时候,我发现,ChatGPT 生成的代码的思路和方法都是对的,但是是比较老的,而且是跑不起来的,出现了好些低级错误,如:使用了未声明的变量,没有引用完整的C语言的头文件,没有正确地初始化变量,错误地获取数据,类型没有匹配……等等,在程序调试上,挖了很多的坑,C语言本来就不好搞,挖的很多运行时的坑很难察觉,所以,耗费了我大量的时间来排除各种各样的问题,其中有环境上的问题,还有代码上的问题,这些问题即便是通过 Google 也不容易找到解决方案,我找到的解决方案都放在文章中了,尤其是第二个示例,让我调试了3个多小时,读了很多 bcc 上的issue和相关的晦涩的手册和文档,才让程序跑通。

    到了文章收关的阶段,我让ChatGPT 给我几个延伸阅读,也是很好的,但是没有给出链接,于是我只得人肉 Google 了一下,然后让我吃惊的是,好多ChatGPT给出来的文章是根本不存在的,完全是它伪造的。我连让它干了两次都是这样,这个让我惊掉大牙。这让我开始怀疑它之前生成的内容,于是,我不得我返回仔细Review我的文章,尤其是“介绍”、“用途”和“工作原理”这三个章节,基本都是ChatGPT生成的,在Review完后,我发现了ChatGPT 给我生造了一个叫 “无损编译器”的术语,这个术语简直了,于是我开始重写我的文章。我把一些段落重写了,有一些没有,保留下来的我都标记上了 [1],大家读的时候要小心阅读。

    最后,我的结论是,ChatGPT只是一个不成熟的玩具,只能回答一些没有价值的日常聊天的问题,要说能取代Google,我觉得不可能,因为Google会基于基本的事实,而ChatGPT会基于内容生成的算法,在造假方面称得上是高手,可以列为电信诈骗的范畴了,我以后不会再使用ChatGPT生成文章内容或是作我的帮手了。StackOverflow把其ban了真是不能太赞了!

    附件一:ChatGPT的造假载图和样本

    eBPFref 1
    点击看大图

    eBPFref 2
    点击看大图

    ChatGPT 生成的样本一

    • Brendan Gregg 的《BPF Performance Tools: Linux System and Application Observability》一书是一个全面的指南,涵盖了 eBPF 的基础知识和实践应用。
    • Alexei Starovoitov 在 2015 年的 LPC 大会上发表的《eBPF and XDP: fast programmable datapath in the Linux kernel》一文,是一个介绍 eBPF 和 XDP(eXpress Data Path)的综述。
    • 谷歌的《BPF: The Future of Linux Monitoring and Observability》一文介绍了 eBPF 的基本概念,并探讨了它对于 Linux 监控和可观察性的影响。
    • 微软的《A Survey of Techniques for Hardware Acceleration of BPF》一文,介绍了 eBPF 在硬件加速方面的研究现状。
    • Daniel Borkmann 的《Linux kernel networking: implementation and theory》一书涵盖了 eBPF 的实现和理论。
    • Martin KaFai Lau 在 2015 年的 SOSP 大会上发表的《eBPF: a new execution environment for the Linux kernel》一文,介绍了 eBPF 在 Linux 内核中的新执行环境。
    • 来自两名谷歌工程师的《eBPF: A New Frontier in Performance Analysis》一文,探讨了 eBPF 对性能分析的影响。
    • 《BPF Performance Tools: Linux System and Application Observability》一书中的第三章,讨论了 eBPF 的编译器和运行时系统。
    • 来自三名谷歌工程师的《eBPF: The New Solaris DTrace》一文,比较了 eBPF 和 Solaris DTrace 系统的区别。

    ChatGPT 生成的样本二

    1. eBPF 程序开发指南(https://cilium.io/doc/ebpf/ebpf-guide/
    2. eBPF 官方文档(https://www.kernel.org/doc/Documentation/networking/filter.txt
    3. Linux 内核 eBPF 介绍(https://www.ibm.com/developerworks/cn/linux/kernel/ebpf/index.html
    4. eBPF 性能优化技巧(https://www.infoq.com/cn/news/2018/08/ebpf-performance-tips/
    5. eBPF 实战经验分享(https://blog.cloudflare.com/ebpf-in-practice/
    6. eBPF 在网络安全中的应用(https://www.zdnet.com/article/ebpf-how-to-use-it-for-network-security/
    7. eBPF 实现 Linux 系统性能监控(https://www.percona.com/blog/2017/08/15/how-to-use-ebpf-to-monitor-linux-system-performance/
    8. eBPF 入门教程(https://sysdig.com/blog/ebpf-getting-started/
    9. eBPF 与 BPF 比较(https://lwn.net/Articles/724647/
    10. eBPF 提高课程(https://www.pluralsight.com/courses/ebpf-advanced

    附件二:发明的术语:无损编译器

    fake
    点击看大图

    faketerm
    点击看大图

    (全文完)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

    相关文章

    The post eBPF 介绍 first appeared on 酷 壳 – CoolShell.

  • 科技爱好者周刊(第 377 期):14万美元的贫困线

    这里记录每周值得分享的科技内容,周五发布。

    本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系(yifeng.ruan@gmail.com)。

    封面图

    腾讯集团创始人之一的陈一丹,投资建设的深圳一丹中心,目前已经结构封顶,上图是建筑效果图。(via

    14万美元的贫困线

    一个人需要多少钱,才能摆脱贫困?

    我看到一篇美国人的文章,作者说,美国政府规定的贫困线是,四口之家的年收入不足3.12万美元。

    根据统计,美国四口之家的年收入中位数是8万美元,远超贫困线。按照这个标准,贫困的美国家庭应该不多,8万美元可以让一家人过上”中产阶级的生活,或许还算舒适”。

    但是,事实却是,这点钱在美国会过得手头很紧,根本不够一家人的开销,你经常会烦恼钱不够用。

    作者就问了,美国的贫困线为什么是3.12万美元?真正的贫困线应该是多少?

    他发现,贫困线的计算方法,来自1963年的一次调查。调查发现,美国家庭那时收入的三分之一用于食品,政府就把食品的最低开销乘以3,得到了贫困线,沿用至今。

    2025年,美国四口之家一年最低的食品开销是1万美元,乘以3就得到了贫困线3.12万美元。

    但是,半个多世纪过去了,家庭的消费结构和物价彻底变了。

    现在,家庭的食品支出不是三分之一,对大多数家庭来说,大概仅为5%至7%。家庭支出的大头变成了住房、教育、医疗,其中住房占支出的35%至45%,医疗占15%至25%,子女教育占20%至40%。

    所以,如果要覆盖基本开销,总支出不再是食品支出乘以3,而是乘以13到15

    这样计算的话,美国四口之家的贫困线应该在14万美元左右。只有年收入达到这个数字,才足以覆盖一家人的基本开销。

    这很惊人,14万美元约等于100万人民币,这样的家庭收入在美国还是存不下钱。

    这就是为什么,你的收入看上去不低,却总感觉钱不够用的原因,因为实际的贫困线比名义的贫困线,高出非常多。

    我觉得,这篇文章的最大价值在于提供了一种方法,估算收入应该是多少,才能免于贫困。

    具体来说,真实贫困线就是食品开支乘以它所占比例的倒数

    假定你的食品开支是每天30元,每年1万元左右,占总支出的十分之一,那么你的年收入如果低于1万元乘以10(即不足10万元),你就还是属于贫困阶段。

    任正非最新谈话

    12月5日,华为创始人任正非在上海青浦区的练秋湖华为研发中心,与今年的国际大学生程序设计竞赛(ICPC)的组织者和参赛者进行座谈。

    座谈记录已经上网,主要围绕了 AI 和美国对中国的高技术封锁。

    (1)AI 无人化富余出的员工怎么办?

    要发展再教育工程,例如实行学券制,给下岗人员一些学券补贴,把一些已经空着的学校、工厂变成职业学校,对下岗人员进行职业再教育。

    (2)无人化进展速度不能快,还是要慢慢来,要使社会结构发展稳定。AI 带来的社会好处是总财富增加了,怎么分享这些财富?怎么重新造就一些人再上岗呢?这就是新的课题。

    (3)以后是算力过剩,不是算力不足。

    (4)华为公司当前最重要的是 CT(通信技术,Communication Technology),就是无线电、光通信、核心网、数据通信……。为什么?将来 AI 的感知与控制,要把数据传到几千公里外,必须要有一个先进的网络。AI 要真正产生出价值,需要全社会的协作,发挥各自的优势。没有网络的算力是信息孤岛,孤岛化的 AI 无法实现真正的智能。

    (5)Meta 公司给几个青年人每个人上亿美元的签约金、千万美元的年薪,中国互联网上没有多大的声音波动,为什么?因为不羡慕了。现在国内一大批创业者,能力非常强。七、八人合作做一个公司,二、三十人合伙,股份全是他们的,做好了想拿多少拿多少。

    (6)美国的土壤是适合种庄稼的,大量人才到美国成长这是好事情,并不是坏事情,包括中国的很多青年到美国去,在美国生根发芽,参与创造一些新的科技文明。

    (7)美国创造的科技文明,对世界不是有害的,是有益的,我们也要支持美国科技文明的发展,因为美国创造的科技文明,关起来不去给别人用,那美国怎么赚钱?他赚你钱的过程中,同样促使你的产业进步。如果没有欧洲的文明,我们怎么可能有汽车、火车、轮船……?

    (8)我们也渴望全球化,能享受站在巨人肩膀上,我们的自力更生是被逼无奈的。全要靠自己,是不敌全球化的,我们在许多方面落后国内企业使用的芯片至少一代。

    (9)中国要更加开放,要向世界所有文明国家学习优点,容纳世界的文明进来,不能闭关自守。开放改革把国门打开了,让世界的文明进来,并没有产生文明冲突,文明叠加起来共同创造了一种价值,就是今天的新中国。

    科技动态

    1、老鼠捕食蝙蝠

    德国科学家第一次拍到,老鼠(褐家鼠)捕食蝙蝠的镜头。

    这证明了老鼠有很高的智力,会潜伏捕食飞行的动物。

    但是,这也让蝙蝠的病原体传播到啮齿动物,从而增加感染人类的可能性。

    2、AI 炒股

    如果让大模型炒股,会怎样?

    国外有人做了实验,他们选了五个模型,每个模型有10万美元本金,进行了为期8个月的炒股。

    模型每日根据实际股价,进行虚拟交易,目标是尽可能多盈利,结果总体令人满意。

    指数上涨了12.3%,但是第一名 Grok 4 涨了56.1%,第二名 DeepSeek 涨了 49%,第三名 Claude Sonnet 4.5 涨了27.3%,第四名 GPT-5 涨了27%。

    唯一的输家是 Gemini 2.5 Pro,它因为没有买科技股,亏了9.5%。

    这到底是随机的结果,还是大模型真的善于炒股,值得进一步研究。

    3、草莓工厂

    上海最大的数智草莓工厂在青浦区投产。

    该工厂占地11亩,采用垂直种植,光照和水肥都是自动控制,可以全年365天不间断生产。

    据介绍,工厂的年总产量是传统地栽模式的10倍,产值30倍以上(售价翻3倍?)。

    4、菜单里的图标

    很多软件的菜单带有图标,比如 Google Sheets。

    菜单是否需要图标,一直有争论,很多人认为并不需要,比如 macOS 就不带有图标。

    但是,最新版的 macOS Tahoe 全变了,菜单也开始带有图标了。

    可能因为修改得非常匆忙,有些菜单项有图标,有些没有,比如下图是 Safari 文件菜单。

    更糟糕的是,macOS 的有些菜单项,带有表示状态的”勾选”图标,会出现两个图标并排(下图),让菜单看上去很乱。

    文章

    1、内存价格为何暴涨?(英文)

    现在的内存价格是上半年的三倍,原因是今年10月1日,OpenAI 公司同时与三星和 SK 海力士签署了协议,买断了全球40%的内存供应,引起了其他厂商的恐慌。

    2、AV1 赢得艾美奖(英文)

    美国电视最高奖艾美奖,将今年的技术与工程奖授予视频编码格式 AV1,本文是对 AV1 历史的简单介绍。

    3、GitHub 不再使用 Toast(英文)

    Toast 是一种 UI 组件,通过矩形弹框显示消息。GitHub 表示,这种组件的可访问性不佳,不建议使用。

    4、2025岁末 AI 模型选型指南(中文)

    现在的大模型如此之多,即使同一个模型还分成多个型号,应该如何选择?

    作者从性价比的角度,谈了他的选型方法:大杯、中杯、小杯怎么选?Thinking 要不要关掉?缓存命中率值不值得做?(@thuwyh 投稿)

    5、Linus 访谈(英文)

    Linux 内核创始人 Linus Torvalds,上周上了一个视频节目,与主持人进行了深入对谈。本文是节目的内容总结。

    6、Conventional Branch(英文)

    这是 Git 分支命名规范,建议命名为feature/bugfix/hotfix/release/chore/等几类。(@shenxianpeng 投稿)

    工具

    1、Mission Center

    Linux 的资源管理器,图形化实时显示本机的资源占用情况。

    2、tunnel.gg

    一个免费服务,只要你的主机通过 SSH 连接到它的服务器,它就分配一个子域名,让你的主机暴露到互联网。

    3、Puter

    一个开源的云桌面,需要自己架设,包含文件管理器、画笔、笔记本、照相机、Code 等组件,试用 demo

    4、Feedsmith

    一个用于 RSS 解析和生成的 JS 库。

    5、react-sounds

    一个为网页加入各种音效的 React 组件。

    6、dbdiagram.io

    输入 SQL 语句,就能生成数据库的实体-关系图。

    7、QM-Music

    基于 Subsonic 的私有云音乐服务器,采用 Docker 部署,兼容各种 Subsonic 客户端。(@chenqimiao 投稿)

    8、React DevTools Plus

    React 调试工具,以 Vite/Webpack 插件形式提供,一键即可在浏览器唤起调试面板。(@wzc520pyfm 投稿)

    9、京墨文库

    开源的鸿蒙应用,另有安卓版。(@hefengbao 投稿)

    10、hyperlane

    一个轻量级、高性能的 Rust Web 服务端框架,简化现代 Web 服务开发。(@eastspire 投稿)

    AI 相关

    1、Magic English Buddy

    面向小朋友的英语阅读学习工具,通过 AI 生成个性化英语故事,提供文本朗读和单词高亮。(@xckevin 投稿)

    2、Next AI Draw.io

    通过自然语言命令,生成并修改 draw.io 流程图的网页应用,代码开源。(@DayuanJiang 投稿)

    3、Hacker news Agent

    一个需要自搭建的后台服务,从网上抓取 AI 相关新闻,并发送摘要邮件,整个过程都由 AI 完成,需要安装 Claude Code。(@wjcwjc77 投稿)

    4、Lumina Note

    桌面端的笔记软件,支持 Windows 和 Mac,带有 AI 助手。(@blueberrycongee 投稿)

    5、MigicCube

    使用小米 AI 眼镜,在 20 步内还原任何三阶魔方,原理是识别魔方状态,然后算出解法,最后通过语音给出操作提示。(@idootop 投稿)

    资源

    1、大模型 SVG 生成基准测试

    这个网站测试了9个大模型,让它们生成30个场景的 SVG 文件,来比较谁的生成能力强。

    2、Gemini CLI 使用指南(英文)

    这个仓库收集了30多个详细的 Gemini CLI 的用法和技巧介绍。

    3、2025年 CSS 进展

    Chrome 团队推出的 CSS 年度总结,今年的一些语法进展。

    图片

    1、建筑师弗兰克·盖里

    美国建筑师弗兰克·盖里(Frank Gehry)本周去世,享年96岁。

    他以设计形状奇特的房子而闻名,下面是他设计的5个著名作品。

    拉斯维加斯的脑健康中心(Lou Ruvo Center for Brain Health)。

    明尼阿波利斯的弗雷德里克·R·韦斯曼艺术博物馆。

    布拉格的跳舞的房子。

    西班牙毕尔巴鄂的古根海姆博物馆。

    巴拿马城的生物博物馆。

    文摘

    1、速度为何重要?

    在我的职业生涯中,我观察到一个不变的现象是,人们低估了快速行动的必要性。

    你的项目耗时久并非优点,而是一个缺点。

    快速行动并不意味着你能迅速完成项目。项目包含许多部分,要把所有环节都做好可能需要很长时间。

    但是,你还是应该尽快行动,原因有很多。

    (1)一个常见的错误是花费太多时间在项目无关紧要的部分,等你做完才发现没人需要那个部分,就为时已晚了。

    (2)人从错误中学习。犯错越快,学习越快。

    (3)你的成果会随着时间推移而贬值,变得不再那么重要。到时候,你再想重做跟上时代,已不可能了。

    这就像大学里那位二十年前花了七年时间准备讲义的教授,他不可能把讲义扔掉重写,因为那又是一个需要七年时间的新项目。所以他会继续使用这些陈旧的讲义,直到退休。

    别这么慢,快点!

    言论

    1、

    两家公司的平均智商都提高了。

    — 苹果公司设计主管艾伦·戴伊最新辞职,加入 Meta 公司,这是推特上对此事的评论

    艾伦·戴伊在苹果公司内部评价不高,而 Meta 公司的专长并不是交互设计,他或许能提高 Meta 的设计水平。

    2、

    2025年还在写博客的感受,就好像对着虚空呐喊。

    Askmike.org

    3、

    Meta 公司发售了一副 AR 眼镜,据说有很多功能。但是,这种眼镜本质上是绑在脸上的摄像头,供 Meta 公司观察世界。

    Victoria Song,网络媒体记者

    4、

    AI 公司股价大涨的原因是,它向投资者描绘了一幅场景:AI 将来会承担人类工作,当老板解雇员工并用 AI 替代时,老板会省下你的一半工资,并将另一半工资交给 AI 公司。

    《AI 批判指南》

    5、

    创作者平台(比如抖音)的问题是,它们只向创作者支付很少的报酬,导致每个知名创作者最终都会转向销售产品、寻求赞助和品牌合作。

    《创作者经济如何摧毁了互联网》

    往年回顾

    李开复梳理人工智能(#330)

    机器点餐与宅文化(#280)

    电子产品的用电量(#230)

    你想住在中国哪里?(#180)

    (完)

    文档信息

    • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
    • 发表日期: 2025年12月12日
  • 科技爱好者周刊(第 375 期):一扇门的 Bug

    这里记录每周值得分享的科技内容,周五发布。

    本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系(yifeng.ruan@gmail.com)。

    封面图

    苏州当代美术馆即将开放,十个展馆的屋顶连成一片,象征着江南民居的瓦片屋檐。(via

    一扇门的 Bug

    最离奇的软件 Bug,你听说过哪些?

    下面这个是我本周看到,绝对可以排进史上前十名。

    我把它译出来,跟大家分享,以下是第一人称的叙述:

    2013年,我在 Valve 公司从事游戏开发。

    当时,第一代虚拟现实 VR 头盔 Oculus DK1 刚刚发售。公司决定为这款头盔移植游戏,让我来移植,搞清楚 VR 的游戏环境。

    我就选了2004年我们公司开发的《半条命2》来移植。

    移植了一个片段后,我们发现实际效果很好,就决定移植整个游戏,并且发布了发售预告。

    移植过程中,我试玩了很多片段,但没有从头到尾玩一次。

    等到移植完成,就在发售前夕,我决定完整玩一次,如果发现有什么问题,就写在发布说明里面。

    我心想,应该不会有大问题,毕竟这个游戏已经发售10年了,无数人玩过,反响良好。

    但是,万万没有想到,我居然遇到了一个重大 Bug。

    游戏的开头部分,玩家来到火车站,一个守卫让你进去一个房间。很奇怪,房间的门是关着的,你进不去,就……卡住了。

    你没死,就是哪儿也去不了。前面的门关着,你进不去,也退不出去,身后的大门已经关上了。你被困在一个走廊里,旁边有个守卫,无路可走。真是奇怪。

    游戏的剧情是,你必须进入这个房间,才能往下玩。你又去找守卫,他指着锁着的门,仅此而已,你被困住了。

    我上网查了视频,心想自己是不是记错了。没错,门应该是自动打开的,你走进去就行了,但是……现在这扇门却关了!

    我心想完蛋了,这游戏没法发布了。

    我赶忙联系了其他人,包括一些十年前参与这个游戏开发的人。他们测试后,都说确实有问题,而且在非 VR 模式下也一样,门也是关着的,所以肯定不是我移植弄坏的。但没人知道原因,因为代码根本没改过。

    有人甚至追溯到游戏的原始源代码,编译了最初发售时的游戏版本—-结果发现,那个原始版本也坏了,门也是关着的。

    这怎么可能?大家慌了,这意味着这个 Bug 十年前就存在,但当年编译为什么没出现,十年后重新编译就出现了,这到底什么回事?

    在花了大约一天时间,重新使用当年的调试和回放工具之后,一位同事弄明白了哪里出了问题。

    如果仔细观看游戏,你会发现这扇门有一瞬间,其实自动解锁并打开了,但是房间里还有第二个守卫站在门后。这个守卫站得离门非常近,门打开的一瞬间会轻轻碰到守卫的脚趾,然后又弹回,重新关上,并自动上锁。由于游戏没有考虑怎么处理这种情况并重新打开门,所以游戏就卡住,你无法前进了。

    一旦弄明白怎么回事,解决方法就很简单。我们把守卫往后移大约一毫米,门就很顺利自动打开了。

    现在我们可以发布游戏了。但是,问题还是没有彻底解决。为什么这个游戏当初没有出现这个 Bug,原版里守卫的脚趾也挡着门啊?为什么十年后重新编译,Bug 就出现呢?或者说,Bug 其实一直都在,为什么十年前这扇门没有关上呢?

    于是,一场旷日持久的漏洞搜寻就此展开。

    我们终于发现了答案,就是老生常谈的浮点运算。

    《半条命2》于2004年发布,当时编译用的是较旧的8087或 x87 数学指令集。这些指令集的浮点数精度五花八门,有些是32位,有些是64位,有些是80位,不同的代码段使用了不同的精度。

    十年后的2013年,SSE 指令集已经成为所有 x86 CPU 的标准配置,编译器默认使用 SSE,它有明确的精度,根据代码需求使用32位或64位,是可以预测的。

    真相就是,十年前编译用了32位精度,现在用了64位,小数点的差异造成了几毫米的误差,让守卫的脚趾碰到了门。

    好了,现在玩家终于可以走进大门,继续玩下去了。

    科技动态

    1、AI 授课

    英国斯塔福德郡大学的学生,向媒体投诉。

    他们上课时,老师的幻灯片(下图)完全是用 AI 生成的,甚至老师也不讲课,而是播放 AI 生成的授课语音。

    学生非常气愤,因为学校规定,学生如果提交 AI 生成的作业,会被开除,但是老师却在用 AI 讲课。

    这一方面反映了英国的大学教育质量日趋下降,另一方面也让人反思。如果大学广泛使用 AI 授课,或者老师的教学质量还不如 AI,那么学生还需要上大学吗,为什么不直接向 AI 学习?

    2、螃蟹椅

    丰田公司推出一款概念产品,像螃蟹一样行走的椅子。

    它的四条腿可以活动,由电机控制铰链。人坐在上面,它会自己行走,还能爬台阶。

    它还能趴下站起。

    我预计,国内很快会推出类似产品,可以驮着人行走的机器人,市场很大。

    3、量子计算机

    IBM 公司的伦敦办公室,正在展示一台量子计算机。

    这台机器建造于2019年,已经过时了。但是你不能走进办公室看,只能在门口远远地看。

    这东西据说是计算机的未来,可以快速破解现有的加密算法。不过,它工作时需要低温冷却,接近绝对零度,所以不可能在家里使用。

    4、政府网站的费用

    制作一个政府网站要花多少钱?答案是9650万澳元(约4.5亿人民币)。

    澳大利亚气象局的新网站,设计费用410万澳元,开发费用7980万澳元,发布和安全测试费用1260万澳元,共计9650万澳元。

    由于远远超过了410万澳元的预算,这件事被媒体披露后,引起了公众哗然。

    更可笑的是,新网站发布后,农民反映找不到降雨数据,不得不又换回旧版网站。

    政府的计算机系统,如何保证高效好用,又不浪费纳税人的钱,真是一个难题。

    大家可以去参观这个4.5亿人民币开发的网站 bom.gov.au。另外,旧版网站目前也依然在线。

    文章

    1、为什么每个数据库都使用 B 树(英文)

    一篇科普文章,介绍为什么 B 树比二叉树更适合数据库。

    2、为什么评估新模型越来越难(英文)

    著名程序员西蒙·威利森感叹,他已经评估不了最新的大模型了。因为各种模型的能力越来越强,简单的题目都会解,必须用很高深的题目去测。

    3、固态硬盘不能长时间断电(英文)

    本文指出,消费级的固态硬盘(SSD)在断电状态下,超过一年就会丢失数据。

    目前,最好的固态硬盘也不能断电超过十年。所以,如果长时间不用,数据不要保存在固态硬盘。

    4、中国龙芯的基准测试(英文)

    一个老外程序员测试龙芯 3A6000 处理器,跟2021年发布的英特尔 Xeon Gold 6338 对比。

    5、C 代码里面的 URL(英文)

    上面这段 C 语言代码里面有一个 URL,居然是可以编译的,这是为什么?

    6、如何做一个简单的搜索引擎(英文)

    本文介绍搜索引擎的原理,如何自己动手写一个简单的搜索引擎。

    7、DIY NAS:2026 年版(英文)

    作者详细介绍自己组装 NAS 的配置,可以参考。

    工具

    1、DNS Benchmark Tool

    测试 DNS 服务器的命令行工具,可以测试本地到 DNS 服务器的延迟,以及 DNS 解析获取域名的 IP 地址的耗时。

    2、iDescriptor

    一个跨平台的桌面应用,让电脑连接管理 iPhone。

    3、SVG.js

    一个网页 JS 库,用来生成和操作 SVG 图片动画。

    4、impala

    Linux 平台管理 WiFi 的一个终端应用。

    5、2025-blog-public

    一个基于 Next.js 的静态博客网站模版。(@YYsuni 投稿)

    6、pdfpc-ts

    一个开源网站,用于幻灯片演示,特点是同时带有演示者视图,用于提词,类似于桌面应用 pdfpc。(@Master-Hash 投稿)

    7、剪存

    开源的桌面软件,用来保存剪贴板历史,支持 Windows/Mac。(@snsogbl 投稿)

    8、Hoa

    一个受 Koa 和 Hono 启发的 JS 服务器框架,适用于 Cloudflare Worker。(@nswbmw 投稿)

    9、NodeBBS

    开源的基于 JS 语言的现代论坛系统。(@wengqianshan 投稿)

    10、MyTube

    一个需要自搭建的 Web 服务,用来下载与管理 Youtube/Bilibili 两大平台的视频。(@franklioxygen 投稿)

    AI 相关

    1、WeFinance-Copilot

    一个开源的 Web 应用,用户上传账单,它会用 AI 进行识别和财务分析。(@JasonRobertDestiny 投稿)

    2、KoalaQA

    开源的 AI 客服系统,可以搭建问答平台、开发者社区、用户服务社区。(@Trc0g 投稿)

    3、seekdb

    OceanBase 团队推出的一款开源 AI 数据库,支持向量计算,兼容 MySQL。(@liboyang0730 投稿)

    4、OPENUGC

    一个 AI 网页客户端,可以配置模型、Agent 和 MCP,功能较全,但是不开源。(@aicu-icu 投稿)

    资源

    1、LangGraph 1.0 完全指南

    LangGraph 是一个开源 Agent 开发框架,本教程是基于 Jupyter Notebook 的可交互教程,介绍这个框架的具体实践。(@luochang212 投稿)

    2、Nano Banana Pro 提示词大全

    这个仓库收集了500+的 Nano Banana Pro 模型提示词,每一个提示词都有图片,超过一半提示词带有参数。(@DophinL 投稿)

    3、OCR Arena

    这个网站是一个 AI 竞技场,比较不同模型的 OCR(光学识别)能力,目前排名第一的是 Gemini 3。

    图片

    1、飞机场模型

    一位退休的美国飞行员,喜欢制作飞机场模型。

    他的网站上有大量的作品照片,大家可以点进去看。

    下面是他制作的孟买机场模型,甚至还能显示夜景。

    文摘

    1、对每一个要求”一点点”时间的人说不

    经常有人对我说:

    • 我想跟你简单聊聊天?
    • 下周我们一起喝咖啡吧?
    • 我们一起来讨论一下吧?

    我的回答永远是:不,不,不。

    我确实可以满足你的要求,但我就是不能做。

    即使它们可能是重要的机会,即使只需要花费我15分钟,即使这是其他人都会同意去做的事情,我也不想做。

    我必须限制一天中被别人占用的时间,否则我自己就没有剩下的时间了。

    即使我让你占用我的时间以后,还会剩下一些时间,我也可能因此失去能量和专注力,再来利用好这些剩下的时间。

    时间是我们最不可替代的资产—-我们无法购买更多的时间。我们一秒钟都无法收回失去的时间。我们只能希望尽可能少地浪费。

    但是现实生活中,不知何故,很多人将时间视为所有资源中最可再生的,用掉就用掉了,反正还有别的时间。

    所以,如果你问我是否可以聊天或聚一聚,答案是不。我希望你能够明白,我这样回答的理由。

    言论

    1、

    编程是我遇到过的最能抑制傲慢的良药。如果一个人很傲慢,你就让他去编程。

    tratt.net

    2、

    训练一个观点与众不同的模型,会越来越困难。因为如果你的观点与真实数据和真实世界不符,你就不能简单地用外部材料来训练模型。

    Hacker News 读者

    3、

    现在是2025年,AI 像病毒一样迅速传播。哪怕你还在坚持手工制作精品,人们也很容易将你的辛勤劳动误认为是毫无灵魂、缺乏灵感的机器垃圾。

    tonsky.me

    4、

    人生苦短,死亡来得如此轻易。如果我只是随波逐流,转眼间就会变成老翁。

    小畑五郎,一个日本 Youtuber

    5、

    如果一件东西100%实用,它就一定是漂亮的,比如没有丑陋的钉子或丑陋的锤子。但是,有很多丑陋的汽车,因为汽车并不是所有部分都实用。

    Dan Gelbart,一位工业发明家

    往年回顾

    AI 模型不是一门好生意(#328)

    棘手的 AI 版权(#278)

    人类和人生的意义(#228)

    家庭太阳能发电的春天(#178)

    (完)

    文档信息

    • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
    • 发表日期: 2025年11月28日