聊天和社交 QQ - 80,90的青春。 微信 - 国内TOP1社交软件。brew install --cask wechat 钉钉 - 阿里巴巴出品协同办公软件。 企业微信 - 腾讯出品协同办公软件。 飞书 - 字节跳动出品协同办公软件。 Telegram - 地下社交软件,通信加密。 X(原twitter) - 地下社交软件,了解国内外大事。 XDeck 𝕏桌面客户端 Franz 多合一聊天工具 邮箱工具 Spark 输入法及键盘扩展 AutoSwitchinput 当你在Mac上打开不同的软件的时候,它可以自动帮你切换中文和英文输入法 Input Source Pro,推友开发的一个输入法自动切换工具 Tickeys 键盘打字风格模拟应用, 支持 Cherry轴等多种风格. keycue 快捷键辅助应用, 帮助记忆快捷键. KeyKey macOS 上优雅好用的键盘打字练习。 Karabiner-Elements 键盘映射工具 输入法 rime 可以下载鼠鬚管 Squirrel brew install squirrel-app 可以集成雾凇拼音更好用,具体的步骤如下: 1.打开 Terminal 进入 cd "$HOME/Library“ 2 .保留自带的配置目录 mv Rime Rime.old或者直接干掉这个目录 3.下载配置 git clone --depth=1 https://github....
Arch Linux 常用软件
本文部内容理论上基于Arch的发行版都可以使用本文进行安装。推荐的发行版本 Manajro EndeavourOS CachyOS 如果您安装好了manajro但是又不想重装系统,可以试下这个脚本来将Manjaro自动转换为Arch。此外,DHH的omarchy (github)也值得一试~ Arch 安装后必装的软件 通过archinstall 安装以后,是没图形界面的。需要安装下面的一些软件和配置 安装时,声音后端的选择: PulseAudio,历史悠久、最为常用; PipeWire,新生代,采用全新架构,整合多种音频后端(PulseAudio、ALSA和JACK),提供低延迟的音频体 连接无线网 iwctl # 进入交互式命令行 device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0 station wlan0 scan # 扫描网络 station wlan0 get-networks # 列出所有 wifi 网络 station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可 exit # 连接成功后退出 启用网络 systemctl enable dhcpcd systemctl enable wpa_supplicant systemctl enable NetworkManager 蓝牙 sudo systemctl enable --now bluetooth 如果没这个服务,可能需要通过 paru -S bluetooth进行安装。 如果需要启用蓝牙音频支持,请安装 paru -S pulseaudio-bluetooth 蓝牙高级管理工具 paru -S blueman...
懒猫微服 Go-SDK 使用指南
本文基于 apps-scheduler 和 cat-led 两个实际项目,介绍懒猫微服 Go-SDK 的使用方法。 SDK 简介 懒猫微服 Go-SDK(gitee.com/linakesi/lzc-sdk)是懒猫微服平台提供的 Go 语言 SDK,允许应用通过 gRPC 与懒猫微服系统交互。SDK 封装了以下核心能力: 应用管理(PkgManager):查询、启动、暂停应用 用户管理(Users):查询用户信息 设备管理(Box):查询设备信息、控制 LED、关机/重启 项目结构 使用 Go-SDK 开发的懒猫应用推荐采用如下项目结构: your-app/ ├── cmd/ │ └── your-app/ │ └── main.go # 应用入口 ├── internal/ │ ├── web/ │ │ └── server.go # Web 服务器配置与路由 │ ├── handlers/ │ │ ├── app.go # SDK 调用相关 handler │ │ └── userinfo.go # 用户信息 handler │ ├── biz/ │ │ └── usecase....
go-kratos使用备忘
我搭建的一个kratos项目模板,欢迎使用,仓库地址 需要特别注意的一些建议 API路由覆盖的问题 比如有两个接口 A get /v1/user/{user_id}和 B get /v1/user/profile如果A定义在B之前,那么B可能会被A覆盖路由。需要将A放到B之前。 JWT使用的建议 摘自极客时间课程《高并发系统实战课》 通讯过程必须使用 HTTPS 协议,这样才可以降低被拦截的可能。 要注意限制 token 的更换次数,并定期刷新 token,比如用户的 access_token 每天只能更换 50 次,超过了就要求用户重新登陆,同时 token 每隔 15 分钟更换一次。这样可以降低 token 被盗取后给用户带来的影响。 Web 用户的 token 保存在 cookie 中时,建议加上 httponly、SameSite=Strict 限制,以防止 cookie 被一些特殊脚本偷走。 配置文件 配置文件校验 配合buf的validate可以方便地进行配置文件的校验,在程序启动之前就对配置文件进行一次校验。下面是一个简单的proto配置定义 syntax = "proto3"; package conf; import "buf/validate/validate.proto"; import "google/protobuf/duration.proto"; option go_package = "github.com/tpl-x/kratos/internal/conf;conf"; message Bootstrap { Server server = 1; Data data = 2; Log log = 3; } message Server { message HTTP { string network = 1; string addr = 2; google....
用 Zvec 构建自己的 RAG 系统:Go 与 Rust 实战指南
Zvec 是阿里巴巴开源的嵌入式(进程内)向量数据库 —— 轻量、极速,可直接嵌入应用程序。本文将介绍如何使用 Zvec 的 Go 和 Rust SDK,从零搭建一套完整的 RAG(Retrieval-Augmented Generation)系统。 署名:本文由小米 MiMo-2.5-Pro 编写,Codex-5.5 审校。 什么是 RAG? RAG(Retrieval-Augmented Generation,检索增强生成)是一种将外部知识检索与大语言模型生成相结合的技术范式。其核心流程为: 索引(Indexing):将文档切分、向量化,存入向量数据库 检索(Retrieval):用户提问时,将问题向量化,在数据库中搜索最相关的文档片段 生成(Generation):将检索到的相关文档作为上下文,连同用户问题一起送入 LLM 生成回答 RAG 解决了 LLM 的几个核心痛点: 知识时效性:无需重新训练模型,通过更新知识库即可获取最新信息 幻觉问题:基于真实文档生成回答,大幅降低虚构内容的概率 可溯源性:回答可追溯到具体来源文档,增强可信度 为什么选择 Zvec? 在 RAG 系统中,向量数据库是核心组件。Zvec 相比其他方案有以下优势: 特性 Zvec 传统方案(Milvus/Qdrant/Weaviate) 部署模式 进程内嵌入,无需独立服务 需要单独部署服务 延迟 毫秒级,零网络开销 需要网络往返 依赖 零外部服务依赖(仍需链接 Zvec C 库) 需要 Docker/K8s 等 运维 零运维 需要运维团队 运行形态 随应用进程部署,数据本地持久化 依赖服务端实现 检索能力 向量 + 全文 + 混合检索 各有差异 对于中小型或单机优先的 RAG 系统,Zvec 的嵌入式架构意味着:...
Mutagen使用技巧
Mutagen 是一个高性能文件同步 + 网络转发工具。和 rsync、scp 不同,它的同步是持久的、双向的、实时的,网络断开会自动重连,不需要人工干预。本文面向开发者和 Docker 用户,覆盖三种传输层的实际使用技巧。整理 By claude 核心概念:两个能力,三种传输 Mutagen 做两件事: 文件同步(mutagen sync):在两个端点之间实时同步目录,支持双向、单向多种模式,算法基于 rsync 的差异传输,只传变化的部分。 网络转发(mutagen forward):在两个端点之间建立持久的网络隧道,支持 TCP、Unix socket、Windows Named Pipe。 这两件事都支持三种传输层,可以任意搭配: 传输层 适用场景 Local 本机两个路径之间,或本机作为某端 SSH 远程 Linux/Mac 服务器,复用 OpenSSH Docker 本地或远程的容器,复用 docker exec 两端可以是不同传输层的任意组合——比如左边是本地路径,右边是远程容器。 安装与启动 # macOS brew install mutagen-io/mutagen/mutagen # Linux / Windows # 下载二进制:https://github.com/mutagen-io/mutagen/releases # aur 使用 pacman -S mutagen.io-bin # 启动守护进程(后台常驻,重启后自动恢复会话) mutagen daemon start 一、Local 传输 Local 是最简单的传输层,直接用本地文件路径和网络地址。虽然看起来平淡,但有几个实用场景不容忽视。 URL 格式 同步用本地路径(绝对或相对都行),转发用网络端点: # 同步 ....
go-libp2p简明教程
从零开始,手把手带你构建 P2P 网络应用,本文由claude code编写 1. 核心概念扫盲 在写代码之前,先花 5 分钟理解几个关键词。这些概念会贯穿整个教程。 PeerID —— 节点的"身份证" 每个 libp2p 节点在启动时都会生成(或加载)一对密钥(默认是 Ed25519)。PeerID 就是公钥的哈希值,是全网唯一的节点标识。 QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N Multiaddr —— 节点的"地址簿" 传统 TCP 地址长这样:192.168.1.1:4001。libp2p 的多地址(Multiaddr)更丰富,包含了协议栈信息: /ip4/192.168.1.1/tcp/4001/p2p/QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N └─────────────┘ └────────┘ └─────────────────────────────────────────────────────┘ IP 地址 TCP 端口 PeerID 也可以是: /ip4/0.0.0.0/tcp/0 —— 随机端口的 TCP /ip4/0.0.0.0/udp/0/quic-v1 —— QUIC 协议 /dns4/example.com/tcp/443/wss —— WebSocket over TLS Host —— 你的节点实例 host.Host 是 libp2p 的核心对象,可以理解为"这台机器在 P2P 网络中的代理"。所有操作都从它出发:监听连接、发起连接、注册协议处理器等。 Stream —— 连接上的"通道" 两个节点建立连接后,可以在同一条底层连接上开多条流(Stream),每条流对应一个协议(类似 HTTP/2 的多路复用)。 Protocol ID —— 协议的"频道号" 每条流都有一个协议 ID,是一个字符串,用于标识通信双方在"聊什么话题":...
vanguard-go简明教程 by Claude
用一个 Go 服务器同时支持 REST、gRPC、gRPC-Web 和 Connect 客户端。本文使用claude code编写 什么是 vanguard-go? vanguard-go 是 ConnectRPC 团队开发的一个 Go 中间件库,核心功能是协议转码(Transcoding):它能让你只写一套 RPC 服务实现,就同时支持多种客户端协议: 客户端协议 是否支持 Connect Protocol ✅ gRPC ✅ gRPC-Web ✅ REST + JSON(HTTP 转码) ✅ 与 gRPC-Gateway 不同,vanguard 直接作为 net/http 中间件运行,无需额外的代理进程,性能更高,集成更简单。 核心概念 理解这三个概念就掌握了 vanguard 的精髓: Service(服务):对一个 Protobuf RPC 服务的配置包装,包含服务的 schema(用于协议转换)和实际的 HTTP 处理器。 Transcoder(转码器):将一组 Service 包装成 http.Handler,自动处理所有协议转换逻辑,也充当路由器。 HTTP Transcoding Annotations(HTTP 转码注解):在 .proto 文件里用 google.api.http 注解将 RPC 方法映射到 RESTful 路径,这是支持 REST 客户端的关键。 快速开始 1. 安装依赖 go get connectrpc....
Codex快速实践
必备插件 super powers oh-my-codex 提高主动性 Codex使用的问题在于一直确认,试过goalx等工具,效果不好。直到看到张汉东老师的这个AGENTS.md的gist 英文版 放到 ~/.codex下面或者项目根目录,文件名AGENTS.md ## 工作哲学 你是这个项目的工程协作者,不是待命的助手。参考以下风格: - **John Carmack 的 .plan 文件风格**:做完事情之后报告你做了什么、 为什么这么做、遇到了什么权衡。不问"要不要我做"——你已经做了。 - **BurntSushi 在 GitHub 上的 PR 风格**:一次交付是一个完整的、 自洽的、可以被评审的单位。不是"我先试一个你看看",而是 "这是我的方案,理由如下,欢迎指出问题"。 - **Unix 哲学**:做一件事,做完,然后闭嘴。过程中的汇报不是礼貌, 是噪音;结果时的汇报才是工程。 ## 你要服从的对象 按优先级: 1. **任务的完成标准** —— 代码能编译、测试能通过、类型能检查、 功能真的工作 2. **项目的既有风格和模式** —— 通过读现有代码建立 3. **用户的明确、无歧义指令** 这三样高于"让用户感到被尊重地征询了意见"的心理需要。 你对任务的正确性有承诺,这个承诺**高于**对用户情绪的讨好。 两个工程师可以就实现细节争论,因为他们都在服从代码的正确性; 一个工程师对另一个工程师每一步都说"要不要我做 X"不是尊重, 是把自己的工程判断卸载给对方。 ## 关于停下来询问 停下来问用户只有一种合法情况: **存在真正的歧义,继续工作会产出与用户意图相反的成果**。 不合法的情况: - 询问可逆的实现细节(你可以直接做,做错了就改) - 询问"下一步要不要"——如果下一步是任务的一部分,就去做 - 把可以自己判断的风格选择包装成"给用户的选项" - 工作完成后续问"要不要我再做 X、Y、Z"——这些是事后确认, 用户可以说"不用",但默认是做 实测,codex的主动性更强。 omx的魔力 安装...
在无头机器上设置vibe coding环境
最近我在好几台无桌面环境的机器上设置了vibe coding环境,作为记录。操作环境都是基于arch linux的服务器,没有图形界面,完全通过命令行操作。 安装mise 通过 paru -S mise 或者 yay -S mise 安装mise。 官方文档 https://mise.jdx.dev/getting-started.html Shell配置 如果你使用的是zsh或者fish,需要参考官方文档进行相关的设置 fish 一键配置 curl https://mise.run/fish | sh # Installs mise and adds activation to ~/.config/fish/config.fish 或者手动在你的fish配置加入 # ~/.config/fish/config.fish if status is-interactive mise activate fish | source else mise activate fish --shims | source end zsh 一键配置 curl https://mise.run/zsh | sh # Installs mise and adds activation to ~/.zshrc 手动配置 # ~/.zprofile or ~/.zshrc eval "$(mise activate zsh --shims)" bash 一键配置...