Hertz使用笔记

Hertz的优缺点 优点 中文社区维护 稳定,字节产品,有相关的开源项目参考,比如coze和coze studio hz的模板支持,使得代码生成更加灵活 缺点 工程体验上,不如go-kratos等项目。比如不能很好得支持buf等第三方生态。代码生成的使用场景,如多service模式下体验不好。 Template 模板 之所以将模板放在第一,是因为Hertz里面模板是过不去的坎。😄官方的一个mvc的template 或者 cwgo内置的模板 自动生成路由注册 新建一个template/package.yaml layouts: # 覆盖默认 router.go 模板 # 关键:将 Register 函数名改为包含服务名的唯一名称 - path: router.go delims: ['{{', '}}'] body: |- // Code generated by hertz generator. DO NOT EDIT. package {{$.PackageName}} import ( "github.com/cloudwego/hertz/pkg/app/server" {{- range $k, $v := .HandlerPackages}} {{$k}} "{{$v}}" {{- end}} ) /* This file will register all the routes of the services in the master idl....

Omarchy 使用笔记

omarchy是DHH发布的一款Arch内核的Linux发行版。最近安装了下,稍作记录 特色功能 命令行 可以使用 eza替换ls 快捷键 导航快捷键 Super + Space:应用启动器 Super + Alt + Space:Omarchy 控制菜单 Super + Escape:锁定、暂停、重启、关机 Super + Ctrl + L:锁定计算机 Super + W:关闭窗口 Ctrl + Alt + Del:关闭所有窗口 Super + T:切换窗口的平铺/浮动模式 Super + O:切换窗口为粘性浮动模式 Super + F:全屏显示 Super + Alt + F:全宽度显示 工作区快捷键 Super + 1/2/3/4:跳转到指定工作区 Super + Tab:跳转到下一个工作区 Super + Shift + Tab:跳转到上一个工作区 Super + Ctrl + Tab:跳转到之前的工作区 Super + Shift + 1/2/3/4:移动窗口到指定工作区 Super + Shift + Alt + 方向键:将工作区移动到指定显示器 窗口管理快捷键 Super + 方向键:将焦点移动到指定方向的窗口 Super + Shift + 方向键:与指定方向的窗口交换位置 Super + Equal:向左扩展窗口 Super + Minus:向右扩展窗口 Super + Shift + Equal:向下扩展窗口 Super + Shift + Minus:向上扩展窗口 Super + G:切换窗口分组 Super + Alt + G:将窗口移出分组 Super + Alt + Tab:在分组中的窗口间循环切换 Super + Alt + 1/2/3/4:跳转到分组中的指定窗口 Super + Alt + 方向键:将窗口移动到指定方向的分组中 Super + Ctrl + 方向键:在平铺分组中的窗口间移动 Super + S:显示便签工作区覆盖层 Super + Alt + S:将窗口移动到便签工作区 系统控制快捷键 Super + Ctrl + A:音频控制(wiremix) Super + Ctrl + B:蓝牙控制(bluetui) Super + Ctrl + W:WiFi 控制(impala) Super + Ctrl + S:共享菜单(通过 LocalSend) Super + Ctrl + T:活动监视器(btop) 应用启动快捷键 Super + Return:终端 Super + Shift + B:浏览器 Super + Shift + Alt + B:浏览器(隐私/无痕模式) Super + Shift + F:文件管理器 Super + Shift + M:音乐(Spotify) Super + Shift + /:密码管理器(1password) Super + Shift + N:Neovim Super + Shift + C:日历(HEY) Super + Shift + E:邮件(HEY) Super + Shift + A:AI(ChatGPT) Super + Shift + G:消息(Signal) Super + Shift + Alt + G:消息(WhatsApp) Super + Shift + Ctrl + G:消息(Google) Super + Shift + D:Docker(LazyDocker) Super + Shift + O:Obsidian Super + Shift + X:X 通用剪贴板快捷键(统一系统) Super + C:复制 Super + X:剪切(终端中不可用) Super + V:粘贴 Super + Ctrl + V:剪贴板管理器 注意:在 Linux 上,通常需要在终端中使用 Ctrl + Shift + C/V 进行复制粘贴,而在其他地方使用 Ctrl + C/V。Omarchy 的统一剪贴板快捷键在所有地方都有效(文件管理器除外)。...

Arch NVIDIA 驱动故障排查与修复指南

本文基于warp Terminal的修复操作使用deepseek进行复盘 问题描述 在EndeavourOS系统更新后,显示器因NVIDIA驱动问题停止工作,主要症状如下: nvidia-smi 命令报错: NVIDIA-SMI 失败:无法与NVIDIA驱动通信 检测不到显示设备: xrandr --listproviders 提供方数量:0 内核模块缺失: modprobe: 致命错误:在/lib/modules/6.16.6-arch1-1中找不到nvidia模块 问题根源 版本不匹配 nvidia=580.82.07-2 与 nvidia-utils=580.82.07-1 版本不一致 内核兼容性问题 预编译的nvidia驱动不支持新内核(6.16.6-arch1-1) 驱动类型限制 标准nvidia软件包无法自动重建内核模块 完整解决方案 1. 排除问题包进行系统更新 paru -Syyu --ignore nvidia,nvidia-utils,nvidia-settings --noconfirm 2. 卸载问题驱动并安装DKMS版本 paru -R nvidia --noconfirm # 移除问题驱动包 paru -S nvidia-dkms --noconfirm # 安装DKMS版本 3. 加载NVIDIA模块并验证 sudo modprobe nvidia # 强制加载驱动模块 nvidia-smi # 验证驱动状态 预期输出示例: +-----------------------------------------------------------------------------+ | NVIDIA-SMI 580.82.07 驱动版本: 580.82.07 CUDA版本: 12.1 | |-------------------------------+----------------------+----------------------+ | GPU 名称 持久性| Bus-Id 显存使用 | 易失性非校正ECC | | 风扇 温度 性能 功耗上限 | 显存使用率 | GPU利用率 计算模式 | |===============================+======================+======================| | 0 NVIDIA RTX 3050 关闭 | 00000000:01:00....

一些适合小朋友的电影合辑

资源整理来自网络,如有侵权,请联系我删除. 因为小朋友看不懂字幕,所以优先收集的是带多音轨的版本资源。 外国 蜘蛛侠 magnet:?xt=urn:btih:DF16B7D9B96E46D78DCC3241ECDBFA456C15CF90&dn=蜘蛛侠全家桶&tr=udp://tracker.openbittorrent.com:80/announce&tr=udp://tracker.opentrackr.org:1337/announce 哈利波特 magnet:?xt=urn:btih:BC9997161B52E3472156BBF5D51541E793BA8233&dn=[y5y4.com]哈利波特1-8合集.多语音轨字幕.珍藏版.Harry.Potter.Collection.2001-2011.BluRay.1080p.x265.10bit.DuoAudio-AIU 驯龙高手 magnet:?xt=urn:btih:53330826EE05220B5E79DDD3B734D6178DE69467&dn=【首发于高清影视之家 www.BBQDDQ.com】驯龙高手2[国粤英多音轨+简繁英双语字幕].How.to.Train.Your.Dragon.2.2014.UHD.BluRay.2160p.MultiAudio.DTS-X.MA.7.1.x265.10bit.HDR-ALT magnet:?xt=urn:btih:5E89BC62EA3443A7A28D4366A00CFA78959A0E32&dn=【首发于高清影视之家 www.BBQDDQ.com】驯龙高手3[国粤英多音轨+简繁英字幕].How.to.Train.Your.Dragon.The.Hidden.World.2019.UHD.BluRay.2160p.MultiAudio.TrueHD(Atmos).7.1.x265.10bit.HDR-ALT magnet:?xt=urn:btih:6F417913B9C669C5CBCC3C6FE1ABEE9D2F7BE953&dn=【首发于高清影视之家 www.BBQDDQ.com】驯龙高手[国粤英多音轨+简繁英字幕].How.To.Train.Your.Dragon.2010.UHD.BluRay.2160p.MultiAudio.DTS-X.MA.7.1.x265.10bit.HDR-ALT 漫威十年十八部大作中英双语 magnet:?xt=urn:btih:BE8EBED29654C90DDC59B2552E7A7FF5F4BB068B

在并发Go应用中保持顺序【译】

原文链接 https://destel.dev/blog/preserving-order-in-concurrent-go 并发是 Go 语言的一大优势,但它带来一个根本性的权衡:当多个 goroutine 同时处理数据时,自然顺序会被打乱。大多数情况下,这并无大碍——无序处理已足够,且更快速、更简单。 但有时,顺序至关重要。 当顺序至关重要 以下是三个需要保持顺序至关重要的实际场景: 实时日志增强 :您正在处理高流量的日志流,通过数据库或外部 API 为每个条目添加用户元数据。顺序处理无法跟上输入速率,但并发处理会打乱顺序,使得增强后的日志对依赖时间顺序的下游消费者变得不可用。 在文件列表中查找首个匹配项 :您需要从云存储下载文件列表,并找到包含特定字符串的第一个文件。并发下载速度更快,但完成顺序是乱序的——第 50 个文件可能比第 5 个文件先完成,因此您不能简单地返回找到的第一个匹配项,因为无法确定更早的文件是否也包含该字符串。 时间序列数据处理 :这个场景激发了我的原始实现。我需要下载 90 天的交易日志(每个约 600MB),提取部分数据,然后比较连续日期的数据以进行趋势分析。顺序下载需要数小时;并发下载可实现数量级的速度提升,但会破坏我进行比较所需的时间关联性。 挑战很明确:我们需要在不牺牲结果顺序可预测性的前提下获得并发处理的速度优势。这不仅是理论问题——更是影响实际大规模系统的现实约束。 本文将探讨我在生产级 Go 应用中开发并采用的三种方法。我们将构建一个并发的 OrderedMap 函数,它能在保持顺序的同时将输入通道转换为输出通道,并支持具有背压机制的无限流处理。通过对每种方法进行基准测试,我们将理解其权衡取舍,并在此过程中发现令人惊讶的性能洞见。 问题:为何并发会破坏顺序 让我们快速回顾一下为什么并发会打乱顺序。原因之一是各个 goroutine 处理任务的速度不同。另一个常见原因——我们无法预测 Go 运行时如何精确调度 goroutine。 例如,goroutine #2 可能在 goroutine #1 完成第 10 项之前就处理完了第 50 项,导致结果顺序错乱。这是并发处理的自然行为。 若想查看实际效果,这里有一个在 Go Playground 上的快速演示 。 设计理念:背压与缓冲的权衡 传统的顺序并发方法采用某种重排序缓冲区或队列。当工作线程计算出结果但尚不能写入输出时,该结果会被暂存于缓冲区中,直至能够按正确顺序写入。 在这种设计中,缓冲区通常可以无限制地增长。这种情况发生在: 输入存在倾斜 – 早期项目的处理时间比后续项目更长 下游消费者处理速度较慢 另一种常见方法是将所有结果暂存于内存中(切片/映射等)再进行排序。但我们今天的目标是构建一个流式解决方案,它能够: 最小化延迟 – 结果一旦准备就绪立即输出 处理无限输入流 – 支持任意大甚至无限的输入(例如从标准输入或网络流读取) 保持内存受限 – 避免不必要地在内存中累积结果 话虽如此,下面介绍的算法是背压优先的。如果工作协程还无法将结果写入输出通道,它就会阻塞。这种设计受内存限制,并保持了开发者对 Go 通道行为的预期。...

Zsh自动完成文件的一个例子

亚马逊发布了kiro ,基于Claude,于是下载安装文件,发现在它的安装文件里面有那么一个文件。 文件内容如下 #compdef kiro local arguments arguments=( '(-d --diff)'{-d,--diff}'[compare two files with each other]:file to compare:_files:file to compare with:_files' \*'--folder-uri[open a window with given folder uri(s)]:folder uri: ' \*{-a,--add}'[add folder(s) to the last active window]:directory:_directories' '(-g --goto)'{-g,--goto}'[open a file at the path on the specified line and column position]:file\:line[\:column]:_files -r \:' '(-n --new-window -r --reuse-window)'{-n,--new-window}'[force to open a new window]' '(-n --new-window -r --reuse-window)'{-r,--reuse-window}'[force to open a file or folder in an already opened window]' '(-w --wait)'{-w,--wait}'[wait for the files to be closed before returning]' '--locale=[the locale to use (e....

使用go编写一个简单的人脸识别服务

需要下载相关的模型 https://github.com/Kagami/go-face-testdata 下面的models 代码实现 代码如下 package main import ( "encoding/base64" "encoding/json" "errors" "fmt" "io" "log" "math" "net/http" "os" "path/filepath" "strconv" "sync" "time" "unsafe" "github.com/Kagami/go-face" "github.com/gorilla/mux" ) // Config 配置结构 type Config struct { Port string `json:"port"` ModelsDir string `json:"models_dir"` UploadsDir string `json:"uploads_dir"` TempDir string `json:"temp_dir"` DataFile string `json:"data_file"` MaxFileSize int64 `json:"max_file_size"` DefaultThreshold float32 `json:"default_threshold"` LogLevel string `json:"log_level"` } // Person 人员结构(支持多样本) type Person struct { ID int `json:"id"` Name string `json:"name"` Samples []FaceSample `json:"samples"` Created time....

通过比较两个 Go pprof文件来发现性能问题【译】

原文链接 https://www.dolthub.com/blog/2025-06-20-go-pprof-diffing/ 我们正在努力进行兼容性工作 Doltgres,世界上首个且唯一的版本控制兼容 Postgres 的 SQL 数据库。这意味着它能够开箱即用地与 Postgres 兼容的每一款库和工具协同工作。近来我们投入了大量精力在 SQLAlchemy 上,这是一款流行的 Python ORM。他们的 MySQL 集成与 Dolt 配合完美无缺,但他们的 Postgres 版本显然完全不同,严重依赖 pg_catalog 表。一位客户尝试使用后发现存在许多空白 ,因为 Doltgres 未将系统表(例如 dolt_log)包含在 pg_catalog 表中。所以我修复了这个问题,但这导致我们其中一个测试套件出现了神秘的性能退化,速度慢了 3 倍。 费了相当大的心思才弄清楚为什么这样一个看似无害的更改会导致性能出现如此巨大的差异。最终,最有帮助的是一个令人惊叹的 Go 工具链工具:使用 -base 选项来可视化两个性能分析之间的差异。 pprof 使用 pprof 对两个 profile 进行差异比较 Go 自带了一个强大的性能分析工具,pprof。与某些其他语言不同,您必须在代码中显式启用它才能获取性能分析结果;您不能事后进行或使用命令行标志。这很简单,但您必须编写代码来实现它。在我们的案例中,我将它直接放置在被分析的性能测试方法中。 func TestRegressionTests(t *testing.T) { // We'll only run this on GitHub Actions, so set this environment variable to run locally if _, ok := os.LookupEnv("REGRESSION_TESTING"); !ok { // t....

Git Submodule Update 命令备忘笔记

核心命令差异分析 git submodule update 行为:将子模块检出到父仓库记录的特定提交(commit hash) 特点:保持与父仓库 .gitmodules 和索引中记录的版本一致 适用场景:需要精确重现项目某个时间点的状态 局限性:不会拉取远程最新提交,只同步到父仓库索引中记录的版本 git submodule update --remote --recursive 行为:将子模块更新到远程分支的最新提交 特点:忽略父仓库记录的提交,直接拉取远程最新版本 适用场景:需要获取子模块的最新开发进度 常见困惑:为什么普通 update 拉取不到最新版本? 问题现象 许多开发者会遇到这种情况: # 执行普通更新,发现子模块没有更新到最新版本 git submodule update # 但是使用 --remote 参数却能拉取到最新版本 git submodule update --remote --recursive 根本原因分析 这个现象的核心在于 Git 子模块的版本绑定机制: 父仓库记录的是具体提交:当你添加子模块时,父仓库会在其索引中记录子模块的具体 commit hash 普通 update 遵循绑定版本:git submodule update 只会将子模块检出到父仓库记录的那个具体提交 –remote 忽略绑定版本:git submodule update --remote 会直接从远程仓库拉取最新提交 实际演示场景 # 查看当前子模块状态 git submodule status # 输出示例:-a1b2c3d4 path/to/submodule (v1.0-5-ga1b2c3d) # 父仓库记录的是 a1b2c3d4 这个提交 # 即使远程仓库已经有新的提交 e5f6g7h8 # 使用普通 update git submodule update # 子模块仍然停留在 a1b2c3d4 # 使用 --remote 参数 git submodule update --remote # 子模块更新到最新的 e5f6g7h8 详细参数说明 --remote 参数 # 更新到远程分支最新版本 git submodule update --remote # 指定远程分支 git submodule update --remote --branch main --recursive 参数 # 递归更新嵌套的子模块 git submodule update --recursive # 组合使用 git submodule update --remote --recursive 其他常用参数 # 强制更新(丢弃本地修改) git submodule update --force # 初始化并更新 git submodule update --init --recursive # 并行更新(提高速度) git submodule update --jobs 4 配置选项管理 局部配置(仅当前仓库) 设置子模块默认更新行为 # 设置特定子模块跟踪远程分支 git config -f ....

Claude Code使用笔记

来自https://x.com/shao__meng/status/1950196917595754662的ClaudeCode技巧 安装 你需要有nodejs这样的环境,bun没进行测试.需要安装npm或者pnpm包管理器 安装 Claude Code Homebrew brew install --cask claude-code Winget winget install Anthropics.ClaudeCode macOS, Linux, WSL curl -fsSL https://claude.ai/install.sh | bash Windows PowerShell irm https://claude.ai/install.ps1 | iex Windows CMD curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd deno环境 安装Deno curl -fsSL https://deno.land/install.sh | sh 全局按照Claude code deno install --global -A npm:@anthropic-ai/claude-code 将 ~/.deno/bin 添加到PATH claude --version 1.0.65 (Claude Code) Claude Code Router使用 虽说Claude Code很好用,但是国内很难稳定直连Claude,手上的硅基余额还有上百块,于是突发奇想,如何把手上的硅基DeepSeek用到Claude Code上。找了下,发现Claude Code Router 这个项目。安装方法:...