<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>技术选型 on 搬砖程序员带你飞</title>
        <link>https://lpflpf.cn/tags/%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B/</link>
        <description>Recent content in 技术选型 on 搬砖程序员带你飞</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-CN</language>
        <managingEditor>lipengfei634626165@163.com (lpflpf)</managingEditor>
        <webMaster>lipengfei634626165@163.com (lpflpf)</webMaster>
        <lastBuildDate>Mon, 26 Oct 2026 12:00:00 +0800</lastBuildDate><atom:link href="https://lpflpf.cn/tags/%E6%8A%80%E6%9C%AF%E9%80%89%E5%9E%8B/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>51 个应用，14 个能真用：我把那个“重写全世界软件”的仓库逐个点开了</title>
            <link>https://lpflpf.cn/posts/everything-51-apps-2026-10-26/</link>
            <pubDate>Mon, 26 Oct 2026 12:00:00 +0800</pubDate><author>lipengfei634626165@163.com (lpflpf)</author>
            <guid>https://lpflpf.cn/posts/everything-51-apps-2026-10-26/</guid>
            <description>&lt;img src=&#34;https://cdn.lpflpf.cn/covers/everything-51-apps-2026-10-26-v1-plain.png&#34; alt=&#34;Featured image of post 51 个应用，14 个能真用：我把那个“重写全世界软件”的仓库逐个点开了&#34; /&gt;&lt;p&gt;先在浏览器里敲一个地址：spreadsheet.puter.com。页面加载完之后，菜单栏、公式栏、A 到 O 的列标全在那儿，A1 单元格亮着绿框，右下角状态栏写着 Ready。不用注册，就能开始敲数字。&lt;/p&gt;&#xA;&lt;p&gt;这就是那个仓库里的一个应用，来自 HeyPuter/everything。README 挂着一句话：把全世界的软件重建、开源，MIT 协议。底下九张表，从 Office 到 AutoCAD，每个应用写明替代谁，旁边挂个 Try it。&lt;/p&gt;&#xA;&lt;p&gt;这个仓库 10 月 13 日创建，到今天 13 天，227 次提交，3884 颗星。媒体讲它的口径是“一个人用 AI 重写了全世界软件”。&lt;/p&gt;&#xA;&lt;p&gt;我不太信这种话。所以我换了个验证办法：把 README 里每一行的 Try it 都点了一遍。&lt;/p&gt;&#xA;&lt;h2 id=&#34;readme-本来就是一份验收清单我只换了一个判据&#34;&gt;README 本来就是一份验收清单，我只换了一个判据&#xA;&lt;/h2&gt;&lt;p&gt;判断一个“替代品”做没做，最省事的说法是看它宣传了几项功能。宣传词没法验。能验的只有一件事：打开之后，屏幕上有没有能动手的地方。&lt;/p&gt;&#xA;&lt;p&gt;我的操作很简单。用 Chromium 按 1440×900 打开每个链接，等页面加载完再等 3 秒，然后看页面上有没有出现菜单栏（File、Edit、View）、网格或者画布。有，算能用；没有，只算有个页面。&lt;/p&gt;&#xA;&lt;p&gt;判据特意选成“有没有编辑界面”，不是“要不要登录”。这两样经常被混。有个应用显示 Sign in to save，但编辑器已经全部渲染好了。我能直接往里填字，只是暂时存不进云盘。另一个应用只有一个居中的 Sign in 按钮和一句介绍。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;分界线在这里，不在登录与否。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;51 个入口，结果分成五堆：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;打开就是编辑器：14 个。Spreadsheet、Documents、Presentation、Whiteboard、PDF、Photo Studio、Vector Studio、Audio Studio、Music Studio、3D Studio、CAD、Parametric、Circuits、Building Design。&lt;/li&gt;&#xA;&lt;li&gt;只有介绍页和入场按钮：25 个。Records、Meetings、Teamchat、Email、Calendar、CRM、Hiring、Fleet 这些都在这一堆。&lt;/li&gt;&#xA;&lt;li&gt;README 的 Try it 指向一个“Demo 地址还没给”的页内锚点：6 个。Notes、Wiki、Expenses、API Client 属于这类。&lt;/li&gt;&#xA;&lt;li&gt;直接 404：1 个，Field Service。&lt;/li&gt;&#xA;&lt;li&gt;另有 5 个小游戏，得单拎出来，不算替代品，不然分母就虚了。名字是国际象棋、双陆棋、跳棋、纸牌、数独。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;点开是个登录框，不代表功能没写。但连登录框背后都只有一段介绍文字，那就是没写。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;51 个 README 入口的实际可用状态分布&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;448px&#34; data-flex-grow=&#34;186&#34; height=&#34;1060&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://cdn.lpflpf.cn/images/posts/everything-apps-20261026.png&#34; srcset=&#34;https://lpflpf.cn/everything-apps-20261026_14454444005556834802_hu_5e2d7b958ae1f340.png 800w, https://lpflpf.cn/everything-apps-20261026_14454444005556834802_hu_7f64eae2465b156.png 1600w, https://cdn.lpflpf.cn/images/posts/everything-apps-20261026.png 1980w&#34; width=&#34;1980&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;这张图是自己实测出来的，不是引用谁的说法。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;14 除以 51，约等于四分之一。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;对两拨人，这是同一个答案、相反的方向。想找替代品的人看到四分之一，大概就可以关页面了。对做工具的人来说恰好反着：这 14 个入口每一个都是可以拆开读的。&lt;/p&gt;&#xA;&lt;p&gt;它给不了你“一边写前端一边铺五十个目录是什么体验”的答案，但把“先铺入口、再挑着填”这套打法演示清楚了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;真正被写了的只有两个目录剩下的靠骨架铺得快&#34;&gt;真正被写了的只有两个目录，剩下的靠骨架铺得快&#xA;&lt;/h2&gt;&lt;p&gt;13 天铺开 51 个目录，听起来离谱。看一眼文件数就明白了，这件事在结构上是可以成立的。&lt;/p&gt;&#xA;&lt;p&gt;仓库全量文件树 34216 个文件。documents 一个目录占了 13320 个，whiteboard 4777 个，spreadsheet 4151 个。剩下的应用，大多数只有几百个文件。&lt;/p&gt;&#xA;&lt;p&gt;**铺开五十个目录的成本，和写完五十个软件的成本，差着一个数量级。**这几个数字就是那个差距的形状。&lt;/p&gt;&#xA;&lt;p&gt;这里面的路径凡是沾 test 的，一共 17922 个文件，占 52%。按目录口径只算 tests 目录，是 17568 个，占 51%。两个数口径不同，结论一样：一半以上的文件是测试。&lt;/p&gt;&#xA;&lt;p&gt;在开源圈这算正面信号，至少说明作者在拿测试当尺子量自己。但它也反过来标出了哪里是真的在写：测试最密的那两个目录，就是真的在写的那两个。&lt;/p&gt;&#xA;&lt;p&gt;真正解释速度的是架构。这不是四五十个后端，它根本没有自建后端。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;一个应用的结构：Vite 前端加唯一的 Puter.js 后端&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;1072px&#34; data-flex-grow=&#34;446&#34; height=&#34;670&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://cdn.lpflpf.cn/images/posts/everything-arch-20261026.png&#34; srcset=&#34;https://lpflpf.cn/everything-arch-20261026_11909434067631528360_hu_8aaba6e775ee794e.png 800w, https://lpflpf.cn/everything-arch-20261026_11909434067631528360_hu_3c9dc45aaf965c55.png 1600w, https://lpflpf.cn/everything-arch-20261026_11909434067631528360_hu_802cbc6f0ddf89f0.png 2400w, https://cdn.lpflpf.cn/images/posts/everything-arch-20261026.png 2994w&#34; width=&#34;2994&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;每个 &lt;code&gt;src/&amp;lt;应用&amp;gt;/&lt;/code&gt; 是一个独立的 Vite 项目，用 vanilla JS 写，没有 React 也没有 Vue。逻辑层 core 只管纯计算，不碰 DOM。视图层管菜单、网格、canvas。后端统一交给 Puter.js。&lt;/p&gt;&#xA;&lt;p&gt;Puter.js 是 Puter 这家公司的 BaaS，鉴权、KV、文件存储、模型调用全是现成的。&lt;/p&gt;&#xA;&lt;p&gt;Spreadsheet 的运行时依赖只有三个：@noble/hashes、@xmldom/xmldom、lucide。就这些。&lt;/p&gt;&#xA;&lt;p&gt;所以“一个人 13 天做五十个软件”这句话，把因果装反了。准确的说法是：一个人用一套现成的前端骨架加一个现成的 BaaS，把五十个软件的入口先立起来，然后挑其中几个真的往里填。&lt;/p&gt;&#xA;&lt;p&gt;填得最实的是 Spreadsheet。它的 src 目录有 534 个 JavaScript 文件，32 万多行代码，公式求值、图表、条件格式、协作都分开放在 core 底下。&lt;/p&gt;&#xA;&lt;p&gt;这不是骨架。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;未登录状态下的 Spreadsheet：菜单、公式栏、网格全在，状态栏提示 Sign in to save&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;384px&#34; data-flex-grow=&#34;160&#34; height=&#34;900&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://cdn.lpflpf.cn/images/posts/everything-spreadsheet-20261026.jpg&#34; srcset=&#34;https://lpflpf.cn/everything-spreadsheet-20261026_3854456770455533542_hu_5c742a4d676553a0.jpg 800w, https://cdn.lpflpf.cn/images/posts/everything-spreadsheet-20261026.jpg 1440w&#34; width=&#34;1440&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;作者自己写了一份哪里没做完的清单比任何评测都狠&#34;&gt;作者自己写了一份“哪里没做完”的清单，比任何评测都狠&#xA;&lt;/h2&gt;&lt;p&gt;我最想看的东西不在 README，在 docs 目录里。&lt;/p&gt;&#xA;&lt;p&gt;documents 底下有一份 docx 兼容路线图。它没有一句宣传词，就是一张勾选表：61 项没勾，1 项勾了。&lt;/p&gt;&#xA;&lt;p&gt;每条还分类型。Missing 指特性根本不存在。Partial 指做了，但某种子集被拒、被忽略或者被限制。后者有 45 条。&lt;/p&gt;&#xA;&lt;p&gt;开头两句写得很清楚，我直接引：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;It is not a declaration of exhaustive schema coverage or native-reference layout equivalence.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;还有一句更关键：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;A feature being retained in XML, or appearing in an XML property-order list, does not mean it is rendered or editable.&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;意思是：XML 里存着这段内容，不等于它能渲染出来，也不等于用户能编辑它。&lt;/p&gt;&#xA;&lt;p&gt;这句话把整个“格式兼容”生意的坑说完了。打开一个 docx，文件里的属性可能一个字节都没丢，但你在屏幕上看到的已经是另一份东西。&lt;/p&gt;&#xA;&lt;p&gt;PSD 那边也是同一个路子。photo-studio 的审计文档写了 50 个样本，只有 01 到 06 走完了导入、渲染、原生工程、PSD 导出再导入的完整往返验证，第 07 个还在查。&lt;/p&gt;&#xA;&lt;p&gt;文档里明说：在其他 PSD 软件里的验证还没做。&lt;/p&gt;&#xA;&lt;p&gt;Spreadsheet 的自述也诚实。它说自己支持 510 多个公式函数，但单列了不支持的东西：Excel 数据模型透视表刷新、Slicer 操作、Office 自定义图标集。&lt;/p&gt;&#xA;&lt;p&gt;有一处容易被误读，得说清。docx 文档里写着 “GitHub Actions remains disabled”，这句话指的是那份审计流程的自动化，不是整个仓库。&lt;/p&gt;&#xA;&lt;p&gt;仓库根目录有 ci.yml 在跑。看到这句就推断“这项目连 CI 都关了”，是错的。&lt;/p&gt;&#xA;&lt;p&gt;这些文档的存在本身，比它们写了什么更值得说。仓库里最能证明“作者知道自己在哪”的东西，不是那张应用墙的宣传图，是这几页没勾完的清单。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;一个项目对自己缺什么记得这么清楚，比它宣传了什么可信得多。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;该换的该抄的和动不了的那部分&#34;&gt;该换的、该抄的，和动不了的那部分&#xA;&lt;/h2&gt;&lt;p&gt;回到选型。一个技术负责人看到这仓库，真正要回答的是两个问题，而且答案不一致。&lt;/p&gt;&#xA;&lt;p&gt;能不能替代，答案基本是不能，边界也清楚。&lt;/p&gt;&#xA;&lt;p&gt;单机、离线优先、数据不出自己的磁盘，这类需求上，Spreadsheet、Documents、PDF、Whiteboard 现在就能派上用场。&lt;/p&gt;&#xA;&lt;p&gt;文件存进你自己的 Puter 云盘，是真实的 .xlsx 和 .docx，下载下来能在 Excel 里打开。给家里记账、临时改个 PDF、开会画个板子，够用。&lt;/p&gt;&#xA;&lt;p&gt;一旦碰到这四件事，立刻停。&lt;/p&gt;&#xA;&lt;p&gt;宏和插件生态，VBA 没了就是没了。版式保真的交付，给客户的合同、标书、论文排版都属这类。实时协同的冲突合并。合规审计。&lt;/p&gt;&#xA;&lt;p&gt;还有一条容易忽略：它开源不等于能自托管。默认后端是 Puter 云，你要自己部署一套 Puter 才行，那是另一件事的工作量。&lt;/p&gt;&#xA;&lt;p&gt;值不值得抄，答案是值得，但别抄整个仓库。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;git clone&lt;/code&gt; 下来是 425 MB，51 个应用每个目录要单独 &lt;code&gt;npm install&lt;/code&gt;，Node 22.12 以上。这不是拿起来就能跑的体量。要抄就抄三段。&lt;/p&gt;&#xA;&lt;p&gt;公式求值怎么分层。core 里公式、图表、条件格式、协作各管一段，纯逻辑不碰 DOM，所以能单独测。想做在线表格的人，这一段的组织方式比任何教程都实在。&lt;/p&gt;&#xA;&lt;p&gt;xlsx 往返的 sidecar 设计。它往文件里塞了一个隐藏 sheet 叫 &lt;code&gt;_puter_meta&lt;/code&gt;，存自己的样式覆盖和图表模型。别的软件读文件时忽略它，它自己读回来。&lt;/p&gt;&#xA;&lt;p&gt;这是“不改别人的格式，又能记住自己的状态”的一种解法。代价是文件在别的软件里会多出一张隐形表。&lt;/p&gt;&#xA;&lt;p&gt;失败隔离怎么定规矩。docx 审计文档里有一条，我觉得是整份文档最值钱的一句：一个不支持的特性，不能毁掉文档其余部分的正常渲染。它们的做法是宁可进只读模式保住源文件，也不赌一把重排。&lt;/p&gt;&#xA;&lt;p&gt;做过格式转换的人都懂这条有多重。&lt;/p&gt;&#xA;&lt;p&gt;如果你只是想验证某个应用到底做没做，别点开首页就下结论。先去 &lt;code&gt;src/&amp;lt;应用&amp;gt;/&lt;/code&gt; 看有没有 src 和 tests，再看 package.json 里的 scripts，最后才看 README。&lt;/p&gt;&#xA;&lt;p&gt;今天那 25 个只有登录页的应用里，不少目录是空的。&lt;/p&gt;&#xA;&lt;p&gt;顺便说一句我这轮的局限。我没登录，所以登录之后那些应用能做到什么，我不知道，也不猜。**14 这个数字是“不登录能动手”的下限。**真实可用数可能更高，也可能高不了多少，这个得你自己登进去点一下。&lt;/p&gt;&#xA;&lt;p&gt;一个仓库的宣传图和它的文档，通常是两个作者写的。这个仓库有意思的地方在于，它们是一个人写的，而且文档那份比宣传那份诚实。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
