在两个浏览器窗口中打开相同的标签。在 Chrome 或 Safari 中,你会得到两个不相连的页面。而在 Arc 中,一个窗口显示占位符。在 Zen 中,它会默默地创建一个副本。
在我构建的浏览器 Refrax 中,两个窗口显示相同的页面,并实时更新。你可以在任意数量的窗口中查看同一个网页。
这本不应该是可能的。WebKit 的 WKWebView 一次只能存在于一个视图层次中。随着 macOS 26 的发布,苹果增加了一个 SwiftUI API,将 WebView 与 WebPage 分开,这样你可以拥有多个视图引用同一个页面。但如果你尝试这样做,你的应用会崩溃。WebKit 源代码中有一个前提条件,注释是:“我们不能有多个拥有页面,但我们需要决定这是否是一个错误,是否可以优雅地处理,以及它可能有多确定……”
所以,这就是我如何做到的。
CAPortalLayer 是一个未记录的私有类,自 macOS 10.12 起就存在。它通过引用相同的 GPU 内存来镜像一个层的合成输出,而不是复制它。每次滚动、动画或重绘都会立即反映出来。这就是驱动液态玻璃效果、iOS 文本选择放大器和拖放时的虚影的技术。苹果使用门户来实现效果。我则利用它们在两个窗口中显示相同的网页。
Refrax 每个标签保持一个真实的 WKWebView,并在其他地方显示 CAPortalLayer 镜像。当你点击不同的窗口时,协调器会将真实视图移动到那里,而旧窗口则获得一个门户。你无法分辨哪个是哪个。
这在理论上听起来简单,但要让它真正无缝工作却花费了不少精力。每个 macOS 窗口都有自己的渲染上下文,而上下文 ID 是异步更新的,因此立即创建一个门户会捕获一个过时的 ID,导致什么都无法渲染。门户的创建需要延迟,但延迟会造成视觉间隙。我使用一个私有的 CoreGraphics 函数捕获 GPU 快照,并将其放置在门户后面作为后备。另一个困难之处在于,这些都没有文档。门户非常不稳定,如果使用不当会导致应用崩溃。我不得不检查头文件,然后反汇编二进制文件,以探索它的具体工作原理,从而构建出一个稳健的系统。
在此之前,我从未参与过浏览器的开发,只是一个用户。我在 2022 年开始使用 Arc。我记得曾请求邀请,学习快捷键,慢慢适应它。起初我并不喜欢,因为它对我来说有太多 Google Chrome 的味道,而那时我一直在使用 Safari。但我逐渐喜欢上了它,当它基本上被放弃并卖给 Atlassian 时,我再也无法回到 Safari。
我尝试了所有东西:Zen、SigmaOS、Helium。没有一个让我觉得合适,我也不想要另一个 Chromium 分支。WebKit 随操作系统一起提供,但你得到的只是渲染引擎。标签、历史记录、书签、密码、扩展,其他一切都必须单独制作。因此,作为一个非常理智的人,我决定从头开始制作自己的 Arc 替代品。
我做到了。Refrax 是用 Swift 和 Objective-C 构建的,没有外部依赖。应用本身不到 30 MB。我现在打开了 393 个标签,使用了 442 MB 的 RAM;而在 Safari 中,150 个标签已经超过 1 GB。我已经每天使用它超过一个月,我的一些朋友也是。
门户镜像只是一个功能。整个浏览器都采用了相同的方法,寻找苹果为自己构建的东西,并利用它创造他们没有想到的东西。你可以用可调的混合模式和透明度为你的玻璃窗口上色。紧凑模式下的侧边栏会采样页面并匹配颜色。它还支持 Firefox 和 Chrome 扩展。
Alpha 版本是公开的。可以从链接网站下载,输入 REFRAX-ALPHA-HACKERNEWS 激活。无需账户。遥测仅包括崩溃报告和每日活跃用户的 ping,别无他用。如果你发现了 bug——我独自构建了这个,所以我会认真阅读你的报告。
返回首页
一周热榜
我们从2006年10月以来每天收集了前三条HN(Hacker News)故事(总计约21,000条),对这些故事进行了主题聚类,并可视化了主题随时间的变化情况。<p>您可以放大查看任何时间段——一些模式出人意料地清晰(例如,人工智能超越创业文化成为HN的热门话题,加密货币的兴起与衰落,以及因COVID疫情导致的远程工作的激增)。<p>欢迎随时询问有关方法论的问题。
嗨,HN,
这是一个小型的 Python 应用程序,带有可选的网页用户界面。它旨在本地运行,可以通过 Docker 运行(但 cookie 自动检测功能将无法使用)。
该应用允许您下载单个 Substack 内容,可以选择全部或部分下载,并将输出保存为 epub 文件,方便转移到 Kindle 或其他阅读设备上。
坦白说,这是一个“随意编码”的应用,使用 Claude Code 和几小时的迭代完成,但我发现它对我自己非常有用。
它支持免费和付费内容(如果您是该创作者的付费订阅者)。
您可以按受欢迎程度、新est first(最新优先)或 oldest first(最旧优先)对 epub 中的条目进行排序,并且可以限制条目的数量,如果您不想下载所有内容。
您可以手动提供您的 substack.sid cookie,也可以让大多数浏览器/操作系统自动检测。
我对这种炒作曾经翻了个白眼,但实际上,<i>阅读</i>这方面的内容和<i>体验</i>它是完全不同的。如果你有任何旧的代码库,试试看,你可能会感到惊讶。
我不确定对于复杂的遗留企业系统,长期的“*90% 生产力*”的说法是否可信,但对于模板、库、构建工具和重构来说,收益是巨大的。那些耗时且令人紧张的工作大部分都得到了处理。
一开始你会像鹰一样仔细检查每一个差异,期待它会破坏东西,但老实说,很快你会发现大多数情况下这并不是必要的。你只需保持IDE开启,将“分析代码”的输出反馈给它。在Java中,告诉它“<i>添加checkstyle,运行mvn verify并修复</i>”的效果很好,你甚至可以去喝杯咖啡,而不是与linter警告作斗争。
理论上,剩下的只是<i>逻辑</i>和<i>想法</i>。当架构真正变得复杂时,我们将看看这一点是否成立。但目前,让它分支、创建模板并编写简单的测试,同时你只需在规格上进行迭代,效果出奇地好。只有在写下规格用普通英语太麻烦时,你才会编写源代码。
这提出了一个真正的问题:如果你的竞争对手Y刚刚解雇了90%的开发人员以节省成本,你会盲目跟随吗?还是会保留你的团队,利用这个巨大的杠杆,以一个远远更好的产品将Y彻底超越?
我写了《高产出软件工程》这本小书,主要讲述工程师必须关注的技能(决策和沟通),以便为组织创造真正的价值(不仅仅是代码本身)。<p>书名参考了安德鲁·格罗夫的《高产出管理》,因为书中阐述的技能和思维模型旨在提升“产出”(创造的价值),而不单是“活动”(产生的代码)。<p>我现在的目标是宣传这本书,让那些能从中受益的人或公司能够得到它。我听说这本书对初创团队特别有帮助。<p>我非常希望能从这个社区获得对书籍内容以及包装/营销方面的反馈。<p>使用优惠码 HACKERNEWS 可以免费获取一本(有效期至本月底):<a href="https://payhip.com/buy?link=YeABa" rel="nofollow">https://payhip.com/buy?link=YeABa</a><p>书籍着陆页:<a href="https://leomax.fyi/book/" rel="nofollow">https://leomax.fyi/book/</a><p>如果你觉得更方便,它也可以在亚马逊上找到:<a href="https://www.amazon.com/High-Output-Software-Engineering-Communication-ebook/dp/B0GS6GK461/" rel="nofollow">https://www.amazon.com/High-Output-Software-Engineering-Comm...</a><p>附言:我确实写了这本书(我相信写作是终极的思考工具)。使用了人工智能进行语法润色和事实核查。
嗨,HN
我创建TMA1是因为我想更好地理解编码代理实际上在做什么——包括令牌/成本使用、工具调用、延迟、失败、完整会话重放等。最重要的是,我不想注册或向任何云服务发送数据。
当然,它是开源的:
[https://github.com/tma1-ai/tma1](https://github.com/tma1-ai/tma1)