疯狂的键盘

爱软件爱开发

Bun vs npm:为什么我们需要另一个 JavaScript 运行时和包管理器?

先说结论 如果你只用过 Node.js + npm,觉得"够用了",这很正常。Bun 的核心卖点是速度——它把 JavaScript 生态里最慢的几个环节(安装依赖、运行脚本、启动服务器、跑测试)全部重写了一遍,速度提升通常是 3-30 倍。 但速度只是表象。Bun 更深层的野心是:把 Node.js 生态里需要五六个工具才能搞定的事,用一个工具全包了。 npm 是什么? npm(Node Package Manager)从 2010 年随 Node.js 诞生,干两件事: 包管理器:安装、管理第三方依赖(npm install) 脚本运行器:执行 package.json 里定义的脚本(npm run dev) 它是 JavaScript 生态的基石。截至 2026 年,npm 仓库有超过 300 万个包,是全球最大的软件注册表。 npm 的问题 老实说,npm 本身没什么大问题,但它慢: npm install 一个中型项目可能要 10-30 秒 冷启动一个 Node.js 服务通常需要几百毫秒到几秒 跑测试需要额外装 Jest 或 Vitest 打包需要额外装 Webpack/Vite/esbuild TypeScript 需要额外配置 ts-node 或 tsc 这些"额外安装"才是真正的痛点。 Bun 是什么? Bun 是 2022 年由 Jarred Sumner 创建的一个 JavaScript/TypeScript 运行时,用 Zig 语言编写。注意,Bun 不是 npm 的替代品那么简单,它是一个"全家桶": ...

2026年4月8日 · 3 分钟 · Jid

OpenClaw 2026.3.31 升级后疯狂弹审批?改这两个配置就够了

问题 升级 OpenClaw 2026.3.31 后,执行命令频繁弹出 /approve 要求手动审批。关掉 ask 之后命令还是报 exec denied: allowlist miss,依然跑不了。 原因 OpenClaw 2026.3.31 把执行权限拆成了两层: 审批层(ask)—— 决定要不要弹窗让你批准 执行层(security)—— 决定命令有没有资格执行 很多人只改了第一层,第二层没动,所以审批没了但命令还是死。不弹窗 ≠ 放行。 解决方案 打开 ~/.openclaw/openclaw.json,确保 tools.exec 同时配置这两项: { "tools": { "exec": { "ask": "off", "security": "full" } } } ask: "off" —— 不再弹审批 security: "full" —— 放开执行权限 改完后执行: openclaw config validate openclaw gateway restart 用一个最轻的命令验证: pwd 能直接返回路径就说明生效了。 注意事项 这套配置适合单人使用、追求效率的场景。如果你的 OpenClaw 是多人共享或挂在群聊里,security: "full" 风险较大,建议用 allowlist 模式精细控制。

2026年4月4日 · 1 分钟 · Jid

iPhone 输入法横评:7款主流iOS输入法深度对比

iPhone 输入法横评:7款主流iOS输入法深度对比 数据来源:Apple App Store(中国区),2026年3月29日实时查询 一、硬数据总览 输入法 App Store 评分 评分数量 安装包大小 最近更新 搜狗输入法 ⭐ 4.84 824 万 267 MB 2026-03-26 微信输入法 ⭐ 4.74 12.7 万 402 MB 2026-02-06 百度输入法 ⭐ 4.70 40 万 363 MB 2026-03-29 讯飞输入法 ⭐ 4.25 439 370 MB 2026-03-28 手心输入法 ⭐ 3.81 278 109 MB 2026-03-26 豆包输入法 ⭐ 3.70 1900 264 MB — 苹果自带键盘 — — 0(系统内置) 数据说明: 评分和安装包大小来自 iTunes Search API 实时查询 苹果自带键盘无独立评分,作为对照列入 讯飞输入法评分数量仅 439 条,可能是新版替换了旧版 App,评分被重置 豆包输入法 2025年11月底才上架 iOS,评分数据较少 二、评分分析 评分反映的是用户综合满意度。824万条评分的搜狗拿到 4.84,可信度非常高。微信输入法 12.7万条评分拿到 4.74,同样优秀。百度 40万条 4.70,稳定。 ...

2026年3月29日 · 3 分钟 · Jid

WinGet vs Chocolatey vs Scoop 全面对比指南

WinGet vs Chocolatey vs Scoop 全面对比指南 Windows 包管理器深度对比 · 2026年3月 一、引言 Linux 有 apt/yum,macOS 有 Homebrew,Windows 呢?目前有三个主流选择:微软官方的 WinGet、老牌的 Chocolatey、轻量的 Scoop。本文从设计理念、实际使用、进阶技巧到选型建议,帮你全面了解它们的差异。 二、一句话认识三者 包管理器 一句话概括 类比 WinGet 微软官方的包管理器,Windows 11 预装 类似 iPhone 自带 App Store Chocolatey 社区驱动的老牌包管理器,企业方案成熟 类似 Red Hat 的 yum,成熟但重 Scoop 为开发者设计的轻量安装器,无需管理员权限 类似 macOS 的 Homebrew 三、安装与首次体验 WinGet Windows 11 已预装。Windows 10 需确认 App Installer 已安装: winget --version 如果提示找不到命令,在 PowerShell 中执行: Add-AppxPackage -RegisterByFamilyName -MainPackage Microsoft.DesktopAppInstaller_8wekyb3d8bbwe Chocolatey 以管理员身份打开 PowerShell,执行: Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) Scoop 普通用户权限即可,打开 PowerShell: ...

2026年3月29日 · 5 分钟 · Jid

Claude Code + clangd 实战笔记:大代码项目的高效 AI 辅助开发

一、问题:代码量大,AI 上下文装不下 当项目代码量很大时,Claude Code 直接从头到尾阅读代码很容易超过上下文窗口限制。解决方案是让 Claude Code 通过 LSP(Language Server Protocol) 精准定位代码,而不是全文阅读。 有无 LSP 的区别 无 LSP 有 LSP(clangd) 以文本形式解析代码,用 Grep 模糊搜索 直接调用语言服务器,获取精确语法结构 查找引用/定义需反复搜索,Token 消耗高 单次查询到位,Token 消耗降低 40%+ 不理解类型信息 能获取类型签名、跨文件引用 没有 LSP,Claude Code 是"聪明的文本搜索";有了 LSP,才具备 IDE 级别的代码理解能力。 二、clangd 是什么 clangd 是 LLVM/Clang 项目提供的 C/C++ 语言服务器,它能: 精确的代码补全(比 VS 原生 IntelliSense 在复杂模板代码中更准) 跨文件的符号查找(定义、引用、调用关系) 实时诊断(类型错误、未使用变量等) 代码导航(跳转到定义、查找所有引用) clangd 的局限 clangd 不是实时分析的,它依赖一个 compile_commands.json 文件来了解每个文件的编译参数(包含路径、宏定义、编译选项等)。没有这个文件,clangd 就无法正确工作。 三、轻量方案:手动创建 .clangd 配置文件 如果你的项目结构比较简单,或者不想安装额外工具生成 compile_commands.json,可以手动创建一个 .clangd 配置文件来告诉 clangd 需要检索的包含目录。 在项目根目录创建 .clangd 文件(YAML 格式): ...

2026年3月28日 · 2 分钟 · Jid

Ubuntu一键安装及卸载LAMP

一键安装LAMP服务: sudo tasksel install lamp-server 一键卸载LAMP: sudo tasksel remove lamp-server 补充: LAMP = Linux+Apache+MySQL+PHP 通过上面的命令卸载Lamp时不免把Linux系统本身的东西卸载掉了,因此, 在卸载LAMP后一定记着更新一下系统: sudo apt-get update sudo apt-get upgrade 上面两条都要执行,切记! 参考资料:Ubuntu Skills

2015年5月10日 · 1 分钟 · Jid

声明模板类为友元类

如题,要将模板类(template class)声明为友元类,需要注意两点: (1)模板类本身的声明要足够早,我指的是在被声明为友元类之前就进行了模板类的声明。 比如: template<typename T> class AA { public: …… private: …… }; class BB { public: template<typename T> friend class AA; …… }; (2)友元类声明时的格式,应该是这样: template<typename T> friend class AA; AA是之前已经声明的模板类。 格式必须是这样,不然一定出错。 下面列出源代码,及源代码下载: //friend.h #include <iostream> using namespace std; template<typename T> class AA { public: AA(T vl):val(vl){}; void funcA(); private: T val; }; class BB { public: BB(int d=0):tmp(d){}; template<typename T> friend class AA; private: void funcB(); int tmp; }; template<typename T> void AA<T>::funcA() { BB bb(100); bb.funcB(); } void BB::funcB() { cout<< tmp <<endl; } //friendmain.cpp #include "friend.h" using namespace std; int main() { AA<int> aa(9); aa.funcA(); return 0; } //欢迎交流 备注: ...

2015年5月10日 · 1 分钟 · Jid

在Scite里用Astyle格式化代码

在 VC6.0 里很喜欢用 Alt+F8 的功能,它能够快速格式化代码,Scite中没有这个功能。今天看它的配置文件发现这么两行: command.name.0.*.cxx=Indent command.0.*.cxx=astyle -tapO $(FileNameExt) 用来缩进的? 查了一下 astyle, 原来我需要的就是这个功能.。 下载 astyle 最新版, 解压之后把bin目录下的 AStyle.exe 复制到C:/windows, 然后,修改一下配置文件 cpp.properties,(这一步可以忽略), 如下: command.name.0.*.cpp=Indent command.0.*.cpp=astyle --style=ansi $(FileNameExt) OK, 现在可以先选中文本然后Ctrl+0快速格式化代码了。 PS: 其实要在Scite里面使用Astyle工具,只需要在astyle官网astyle中下载一个可执行程序astyle.exe,然后放到搜索路径中,比如C:/windows, 即可。修改配置文件是为了让格式化更漂亮,这里推荐用 --style=ansi 格式。 AStyle安装使用可以阅读刚才下载文件里的相关文件(很详细)。 Astyle用法: astyle --style=ansi filename.c

2015年5月10日 · 1 分钟 · Jid

ubuntu remove and install Gui desktop

Ubuntu安装和卸载图形界面 通常的流程是这样:假如你已经默认安装了Gnome,现在想安装KDE或XFCE4,那么需要先卸载掉gnome,然后“在线”下载安装另一个桌面系统;如果你一开始用的是ubuntu-server版,直接安装就可以了,看下面。 卸载桌面 卸载gnome: sudo apt-get --purge remove liborbit2 sudo apt-get autoremove 卸载kde: sudo apt-get --purge remove kdelibs4c2a libarts1c2a sudo apt-get autoremove 卸载xfce4: sudo apt-get --purge remove kdelibs4c2a libarts1c2a sudo apt-get autoremove 安装桌面 安装gnome: sudo apt-get install ubuntu-desktop 安装kde: sudo apt-get install kubuntu-desktop 安装xfce4: sudo apt-get install xubuntu-desktop

2015年5月9日 · 1 分钟 · Jid

Vim 对中文编码的支持

1、支持中文编码的基础 Vim要更好地支持中文编码需要两个特性:+multi_byte和+iconv,可以用|:version|命令检查当前使用的Vim是否支持,否则的话需要重新编译。 2、影响中文编码的设置项 Vim中有几个选项会影响对多字节编码的支持: encoding(enc):encoding是Vim的内部使用编码,encoding的设置会影响Vim内部的Buffer、消息文字等。在Unix环境下,encoding的默认设置等于locale;Windows环境下会和当前代码页相同。在中文Windows环境下encoding的默认设置是cp936(GBK)。 fileencodings(fenc):Vim在打开文件时会根据fileencodings选项来识别文件编码,fileencodings可以同时设置多个编码,Vim会根据设置的顺序来猜测所打开文件的编码。 fileencoding(fencs) :Vim在保存新建文件时会根据fileencoding的设置编码来保存。如果是打开已有文件,Vim会根据打开文件时所识别的编码来保存,除非在保存时重新设置fileencoding。 termencodings(tenc):在终端环境下使用Vim时,通过termencoding项来告诉Vim终端所使用的编码。 3、Vim中的编码转换 Vim内部使用iconv库进行编码转换,如果这几个选项所设置的编码不一致,Vim就有可能会转换编码。打开已有文件时会从文件编码转换到encoding所设置的编码;保存文件时会从encoding设置的编码转换到fileencoding对应的编码。经常会看到Vim提示[已转换],这是表明Vim内部作了编码转换。终端环境下使用Vim,会从termencoding设置的编码转换到encoding设置的编码。 可以用|:help encoding-values|列出Vim支持的所有编码。 4、具体应用环境的设置 只编辑GBK编码的文件 set fileencodings=cp936 set fileencoding=cp936 set encoding=cp936 只编辑UTF-8编码的中文文件 set fileencodings=utf-8 set fileencoding=utf-8 set encoding=cp936 "或者 set encoding=utf-8 同时支持GBK和UTF-8编码 set fileencodings=ucs-bom,utf-8,cp936 set fileencoding=utf-8 set encoding=cp936 "或者 set encoding=utf-8 如果在终端环境下使用Vim,需要设置termencoding和终端所使用的编码一致。例如: set termencoding=cp936 "或者 set termencoding=utf-8 Windows记事本编辑UTF-8编码文件时会在文件头上加上三个字节的BOM:EFBBBF。如果fileencodings中设置ucs-bom的目的就是为了能够兼容用记事本编辑的文件,不需要的话可以去掉。Vim在保存UTF-8编码的文件时会去掉BOM。去掉BOM的最大好处是在Unix下能够使用cat a b>c来正确合并文件,这点经常被忽略。 5、FAQ 为什么在Vim中一次只能删除半个汉字? 因为encoding设置错误,把encoding设置为cp936就可以解决此问题。在Unix环境下Vim会根据locale来设置默认的encoding,如果没有正确设置locale并且没有设置encoding就会一次只能删除半个汉字。 VIM为什么不能输入繁体字? 把euc-cn或者GB2312改为cp936就可以了。euc-cn是GB2312的别名,不支持繁体汉字。cp936是GBK的别名,是GB2312的超集,可以支持繁体汉字。 VIM为什么提示不能转换? 因为在编译Vim时没有加入iconv选项,重新编译Vim才能解决。 如何打开一个GBK编码的文件并另存为UTf-8编码? 保存文件时运行命令|:set fileencoding=utf-8|就可以了。 From : CSDN Blog

2015年5月9日 · 1 分钟 · Jid