OpenTray 的托盘窗口隐藏以后,到底还算不算开着?
pnpm-pub 的窗口已经最小化,托盘菜单却还写着 Hide Window。这个小 bug 逼着我们重新区分托盘图标、原生窗口与 WebView 会话,也重新定义 show、close、destroy、autoHide 和“可见”。
A collection of articles and events.
pnpm-pub 的窗口已经最小化,托盘菜单却还写着 Hide Window。这个小 bug 逼着我们重新区分托盘图标、原生窗口与 WebView 会话,也重新定义 show、close、destroy、autoHide 和“可见”。
pnpm-pub 想要一个带 Acrylic 材质的透明托盘窗口,结果 resize 时留下了整片旧画面。我们把 WebView 缩到九分之一,又一路查到 HWND、DWM、重定向表面和非客户区,最后才弄清 Windows 到底怎样把这个窗口画到屏幕上。
本节定义了电信运营商(以下简称“运营商”)传统模式所面临的根本问题,并论证了为什么垂直整合这种激进的变革不再是可选项,而是关乎生存和增长的必需。
运营商行业正面临一个根本性挑战:其核心产品(即连接服务)已高度同质化 1。尽管在人工智能 (AI) 和数字服务的推动下,数据流量呈爆炸式增长 3,但运营商却发现,将流量增长转化为收入增长,即提高每用户平均收入 (ARPU),变得异常困难 4。
金融市场的表现清晰地反映了这一困境。在2024年,电信股的价值增长约11%,远远落后于标普500指数 (约25%) 和纳斯达克指数 (约30%),这表明市场对其增长前景缺乏信心 5。行业预测显示,到2028年,全球电信业收入的复合年增长率 (CAGR) 预计仅为2.9%,甚至低于预期的通货膨胀率 1。
这就是经典的“哑管道”(Dumb Pipe) 陷阱 6。运营商斥巨资建设5G等先进基础设施 5,而亚马逊 (AWS)、谷歌等“OTT”(Over-the-Top) 巨头则在这些网络之上提供服务,攫取了绝大部分利润 7。普华永道 (PWC) 的一项调查显示,55%的电信业CEO认为,如果继续沿用当前的商业模式,他们的公司将无法在未来十年中生存下来 9。
Kimi-Linear 是符合直觉的一个工程优化(所以大概率会在未来的其它开源模型上普遍使用)。
k2的上下文不是256K吗,这次变成1M,之所以*4是因为它只做了1/4的全局注意力,所以运行成本相对来说涨幅就没那么剧烈。
传统全注意力机制是,一个新的token得和之前所有的token全部计算一遍。所以成本是平方增长。 因为训练有很多层,它就保留1/4的层(MLA)还继续做这种全注意力机制。 剩下的3/4的层(KDA)就做固定大小的计算。
这3/4的层毕竟是要“遗忘”的,因为大小固定。
我前几天做Chrome-EXT开发的时候,遇到一些坑。 Chrome扩展是有好几个沙盒环境一起协同工作的,如果你之前做过 IOS-WebView 的二次开发,应该有印象: JavaScript的注入,是有“World”概念的,默认是MAIN-World,这个就是网页的默认js执行环境。 然后还能自定义World,这种属于ISOLATED-World,和MAIN-World在同一个线程里面,但是内存是完全隔离的,类似于在一个独立的iframe环境中。
MAIN-World 有非常严格的安全限制。比如我就不能再MAIN-World里面去发起 ws://localhost 的链接。因为Google的网页非常注重安全,都会开启“内容安全协议限制”,比如不能Eval、new Function;以及MAIN-World的资源来源会有域名限制;甚至不可以和Chrome扩展的Servical-Worker通讯。
所以必须是这样的通讯路径: “网页脚本(MAIN-World) ⇄ content-script(ISOLATED-World) ⇄ background/service-worker” “网页脚本(MAIN-World) ⇄ content-script(ISOLATED-World) ⇄ backend-server/websocket”
看了一下 Cap’n Web 的源代码,相比Comlink它更专注于“网络协议”的优化。
Comlink的特性是参考 MessageChannel 去做Endpoint设计,而这种设计非常原始纯粹, 也就导致很多东西是有心智负担的。 比如MessageChannel 是有对象所有权传输的能力,实际写代码的时候,你得用Comlink提供的接口来对U8A对象标记成“直接传输到另外一个线程”。 但这种设计并不是所有适配器都会去实现(参考 GitHub - kinglisky/comlink-adapters )所以用起来的时候,使用者得注意,自己现在在什么环境里面,要传输什么东西?传输的东西是一个代理对象?还是克隆对象?
而 Cap’n Web 的定位是 RPC,其实就是类似执行一次http-req,这意味着没有后续的副作用。这个概念很重要!比如说,Comlink默认返回的对象还是一个Comlink对象,可以继续链式调用,除非主动标记Comlink.clone(returnValue)让它强制走克隆的逻辑。因此这里可以看出它们的定位和策略上的偏差。Cap’n Web 更适合网络环境。
但是总的来说 Cap’n Web 为RPC这种网络场景做了定向优化。同时还补充了一些特别的功能,比如Promise流水线化。以及它的 RpcTransport 适配器设计实现起来非常简单。
摘要: 本文提出了一种新颖的人工智能系统架构理论,该理论借鉴了生物神经系统的层次化组织结构。我们依次定义了三个核心概念:作为基本计算单元的 AI 神经元 (AiNeuron)、作为功能模块的 AI 神经簇 (AiNerveFascicle),以及作为自主、持久化系统的 AI 生命体 (AiLifeform)。本框架旨在通过模块化、功能特化和动态自组织的原则,为构建更复杂、更鲁棒、更具适应性的人工智能系统提供一个可行的理论基础。
1.1 形式化规范
AiNeuron 被公设为本理论框架中最基础的、不可再分的计算单元。其核心功能是基于大规模语言模型(LLM)的统计预测能力,对输入事件(events)进行处理并产生输出。其最泛化的接口可形式化定义为一个高阶函数:
type AiNeuron = (试用了 Aider ,这东西的定位就类似 Trae 这样的编辑器。主打就是一个协同开发。
坑是一个没少:
不过这个难度不高,早晚是能支持的
这种做法效率并不高。架构如果不好,或者遇到特殊开发需求,就得靠开发者自己来做文件选取。 我之前看过openAI的另外一种做法,也不使用RAG,而是将所有内容和“选取条件”喂给小模型,让小模型来判断文件中的哪些内容是和“选取条件”有关系的,这个过程是可以拆分并发执行的。 然后再用标准模型来对最终选取出来的内容做任务。
2025年了,还是要吐槽一下compose(CMP)写桌面,目前体验并不好。
我个人建议:
这两天正式接触了一下 MoonBit,尝试将一个大约 1000 行的 C 语言编写的 JS Parser 转译成 MoonBit 语言。 聊一下我的客观感受:
core 包源码,但仍然觉得其中有很多细节没有完整地整理出来。