技术奇客ITGeeker.net的博客

  • NVIDIA DGX Spark三个月使用心得

    NVIDIA DGX Spark三个月使用心得

    我是从淘宝的一个普通店铺购买的NVIDIA DGX Spark (GB10 Grace Blackwell) , 本来选的另外一家31899元, 结果付款前看到另一家便宜了500块, 只要31399,对比了一下淘宝上大批这类卖家, 谁便宜就买谁的了, 反正这东西还比较新, 也造不了假。如果当时能等到618还能再便宜900块。

    是否先让AI帮忙列个文章提纲来写???但本着原创的精神, 打算自己一个字一个字的写一篇人类味的分享。

    by 技术奇客ITGeeker.net

    艰难的大模型选择

    买了黄仁勋送给马斯克的小金砖, 首先想到的是跑什么本地大模型呢?

    总以为128G统一内存, 总能跑个特别大的模型吧, 至少也要个100G, 现实很快就会让你觉得很骨感, kv cache, context, 并发等等各种吃内存的存在, 还会发现就算是100G左右的开源可本地部署的大模型似乎也不多。

    1. 用什么工具来部署本地大模型

    • Ollama
    • llama.cpp
    • vLLM
    • SGLang

    这是我尝试过的几个比较有名的工具, 其它的当然还有很多。

    Ollama使用最简单, 直接去 https://ollama.com/search 选择一个模型, 然后

    # 启动大模型
    ollama run qwen3.8:27b
    
    # 启动opencode并使用刚才的大模型
    ollama launch opencode --model qwen3.8
    
    # 跑个龙虾和骏马
    ollama launch openclaw --model qwen3.8
    ollama launch hermes --model qwen3.8

    非常简单, 但也有很多限制, 官方打包提供的模型也不是那么多.

    如果想折腾和尝试其它的更多的各个机构发布的开源模型、量化版模型、或越狱版模型, 那么就绕不开llama.cpp, vLLM这些工具, SGLang据说比较适合企业级部署, 适配多显卡的模式, 技术奇客ITGeeker.net用它部署过Qwen3.8 27B, 可参考这个脚本试试:

    Qwen3.8 27B on SGLang for DGX Spark

    一看名称就知道专为NVIDIA DGX Spark (GB10 Grace Blackwell) 优化的, 不过跑出来速度也就30 tokens/s左右.

    2. 我用过的模型和当前的本地主力大模型

    太多了, Ollama速度不快, 但中规中矩, 当前还装着的:

    ollama list
    
    qwen3.8:27b
    muse-glimmer:30b-bf16-dflash
    nemotron-3.5ightning:latest
    gemma4:e4b
    qwen3:8b
    ornith:35b-bf16
    llama4:16x17b
    deepseek-coder:33b
    qwen3-vl:latest
    gpt-oss:120b
    gemma4:12b
    nomic-embed-text:latest
    gemma4:31b
    nemotron-3-super:120b
    qwen3-coder-next:latest
    qwen3.6:35b

    Ollama的好处是运行完之后会自动释放内存和显存, 可以留更多的空间跑ComfyUi或则其它模型.

    如果通过谷歌搜索, 它会告诉你NVIDIA DGX Spark (GB10 Grace Blackwell) 跑量化模型就是带NVFP4的模型最快, 然后推荐用Nvidia官方vLLM Docker来跑最合适, 其实也不然的, 这些量化的组织各不相同, HuggingFace上的模型又太多, 尝试过很多, 也都不理想.

    当前主力模型:
    vLLM跑的Qwen_Qwen3.6-35B-A3B-FP8
    50-70 tokens/s

    by 技术奇客ITGeeker.net
    # 启动 vLLM 服务
    echo "正在启动 vLLM 服务: ${MODEL_NAME}..."
    VLLM_USE_DEEP_GEMM=0 \
    VLLM_FLASHINFER_MOE_BACKEND=latency \
    TORCHINDUCTOR_AUTOTUNE_MAX_ONLY=0 \
    VLLM_MEMORY_PROFILER_ESTIMATE_CUDAGRAPHS=0 \
    vllm serve "${MODEL_PATH}" \
      --tensor-parallel-size 1 \
      --served-model-name "${MODEL_NAME}" \
      --max-model-len 131072 \
      --max-num-seqs 4 \
      --kv-cache-dtype fp8 \
      --gpu-memory-utilization 0.55 \
      --block-size 16 \
      --enable-chunked-prefill \
      --max-num-batched-tokens 4096 \
      --enable-prefix-caching \
      --attention-backend flashinfer \
      --reasoning-parser qwen3 \
      --enable-auto-tool-choice \
      --tool-call-parser qwen3_coder

    用的pip install vllm安装的vllm, 也没用nVidia官网优化版的Docker vLLM, 尝试过很多次, 官方优化版本未必跑的就快。

    Hermes 接入后运行也比较快速和顺畅。显存占有在50-70G左右, 不像Ollama会自动释放,占比虽然有点高, 除了跑ComfyUI文生图之类的, 还可以Ollama跑个小模型, 所以还是比较适合,至少还没有OOM.

    用的Qwen官方HuggingFace的FP8模型:

    Qwen/Qwen3.6-35B-A3B-FP8

    找其它NVFP4版应该能省下一半显存, 如果用FP16的全精度版, 显存则会占用多一半, 这也就为什么说NVIDIA DGX Spark (GB10 Grace Blackwell) 用不了真正的大模型了,显存永远都不够。 NVFP4据说会损失一些精度, 能力会有所削弱, 官方的FP8版据说几乎没有损失, 这可能也是为什么技术奇客ITGeeker.net把它当做主力本地大模型的原因吧

    3. 尝鲜Qwen3.8 27B新模型

    Qwen2026年8月刚开放的大模型, 因为只有27B, 尝试了上面提到的所有四种部署方式, 最后发现最快的竟然是Ollama和SGLang, 能达到30token/s.

    vLLM部署后尝试了各种参数, 都只有7-9token/s每秒左右, 而且占用显存100G以上,很是奇怪, 只能说不同的模型要用不同的马车拉吧, 稠密模型太占显存?

    技术奇客ITGeeker.net会继续测试Qwen3.8 27B, 据说Qwen3.8 35B也会即将到了, 毕竟是隔代升级应该能替换Qwen3.6吧

    4. 越狱模型

    如果你想尝试一些黑客攻防的代码, 写一些自己偷偷看的露骨小说, 问一下禁言或涉及安全的问题, 那么可以尝试一下越狱模型。

    这些模型一般都是gguf格式, 所以llama.cpp是最佳选择, 而且一般提供各种量化版2bit, 4bit等等, 可以在较小的显存环境使用, 也是很多低显存机器的最佳选择了。

    什么稠密模型(Dense Models)或则混合专家模型(MoE, Mixture of Experts)之类的,不管怎么说,能让玩家本地部署, 速度又快, 又尽可能不失智的才是好选择, 目前看来Qwen还是不错的选择。

    有朋友当时问技术奇客ITGeeker.net自己部署和购买的token大模型对比怎么样, 明确的告诉大家, 那是肯定比不上的,人家那是商用使用集群机房部署的, 一个小主机怎么攀比。

    One more thing, 分享一下这一个月使用Minimax M3的token数, 10多个亿而已。不过幸亏是包月的, 比较便宜。

    ,

  • 技术奇客批量 Git 拉取和推送工具

    技术奇客批量 Git 拉取和推送工具

    ITGeeker Batch Git Pull And Push

    License: Mulan PSL v2 Python Platform GUI Git

    一个带图形界面的批量 Git Pull 和 Git Push 桌面工具,专为同时维护多个本地 Git 仓库的开发者打造。

    GitHub 镜像 · Gitee 镜像 · ITGeeker 博客


    项目简介

    本工具属于 ITGeeker(技术奇客)开源软件系列。它提供一个 Tkinter 桌面图形界面,用来管理一组本地 Git 仓库,并对这些仓库一次性执行批量 git pull,或者 git addgit commitgit push 流水线。所有本地仓库、远程地址、SSH key 或 HTTPS 凭据都需要在运行前自行准备;本工具不替代 Git 本身,也不保存任何远程凭据。


    核心特性

    • 📂 自由添加或删除待处理的本地仓库目录;列表在退出时自动保存,并在下次启动时自动恢复。
    • 🚀 一键对所有列表目录执行批量 git pull,或依次执行 git add --all .git commit -m <message>git push
    • 💾 列表支持导出 / 导入为 JSON 文件,方便在多台机器之间共享。窗口位置、提交信息模板、自动 git add 开关等偏好也会一并保存。
    • 🖥️ 系统托盘常驻(基于 pystray),支持显示 / 隐藏、设置、关于、退出;托盘提示显示程序名、版本号、开发者。
    • 🔒 单实例运行锁,长时间 Git 操作在后台线程中执行,UI 主循环不会卡顿。
    • 📁 配置文件统一保存在用户主目录下,跨 Windows 与 Linux 行为一致。

    屏幕截图

    ITGeeker Batch Git Pull And Push 主界面

    该界面由 Tkinter 渲染。


    快速上手

    环境要求

    • Python 3.10 或更高版本:项目使用 from __future__ import annotations 等现代语法,pyproject.toml 中显式声明 requires-python = ">=3.10"
    • Git 命令行客户端git 必须在 PATH 中可调用,所有 Git 操作都通过 subprocess 调用外部 git 二进制。
    • 可用的 Tk 桌面环境:Windows 自带的 Tk 即可;Linux 发行版通常需要单独安装 Tk 包(例如 Debian / Ubuntu 的 python3-tk)。
    • 已存在的本地仓库、远程地址与认证:运行前请先通过 git clone 准备好工作目录,并完成 SSH key 或 HTTPS 凭据配置;本工具不替你克隆仓库,也不保存凭据。

    克隆与安装

    Gitee(国内推荐)

    git clone https://gitee.com/itgeeker/itgeeker_batch_git_pull_and_push.git
    cd itgeeker_batch_git_pull_and_push

    GitHub(国际镜像)

    git clone https://github.com/alanljj/itgeeker_batch_git_pull_and_push.git
    cd itgeeker_batch_git_pull_and_push

    运行

    推荐使用 uv 同步依赖并启动;如果没有 uv,请用 pip 加本地虚拟环境。

    uv(跨平台)

    uv sync
    uv run main.py

    pip + venv(Linux / macOS)

    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    python main.py

    pip + venv(Windows PowerShell)

    python -m venv .venv
    .\.venv\Scripts\Activate.ps1
    pip install -r requirements.txt
    python main.py

    基本使用

    1. 启动后,把要管理的本地仓库目录逐条加入主列表;重复路径会被自动检测并提示。
    2. 打开「设置」调整提交信息模板、是否在 commit 前自动 git add --all .,以及点击关闭按钮时是否隐藏到托盘。
    3. 点击主界面的「⬇ 批量 git pull」对所有列表目录执行 git pull
    4. 点击「⬆ 批量 git push」对每个目录依次执行 git add --all .(取决于设置)→ git commit -m <模板>git push
    5. 处理完成后会弹出汇总框,告知成功与失败的数量。

    警告:默认的批量 git push 工作流会在每个列表目录里按顺序执行 git add --all .git commit -m <message>git push,从而把工作区里所有已变更的文件一并提交并推送。点击按钮前,请确认每个目标目录里没有意外的新增 / 删除或敏感文件。


    配置说明

    配置采用单个 JSON 文件,进程退出时自动保存,下次启动自动恢复。

    平台路径
    Windows%USERPROFILE%\itgeeker_widget_config\config_batch_git.json
    Linux / macOS$HOME/itgeeker_widget_config/config_batch_git.json

    可保存的偏好:窗口位置与大小、目录列表、提交信息模板(默认 git push from ITGeeker Batch Git Pull And Push,可用 {app_name} 占位符)、是否在 commit 前自动 git add --all .、启动时是否最小化到托盘、关闭窗口时是否隐藏到托盘。

    如需在多台机器之间共享目录列表,可使用主界面的「保存列表到文件 / Save List to File」与「读取列表文件 / Load List from File」,导出或导入一个简单的 JSON 文件。


    贡献指南

    1. 在 GitHub 或 Gitee 上 Fork 本仓库(任一镜像皆可)。
    2. 新建特性分支:git checkout -b feat/your-feature-name
    3. 提交改动后,先在本地用 uv run main.py 跑一遍主流程,确认行为正常。
    4. 把分支推送到你的 Fork 并发起 Pull / Merge Request,说明改动动机、测试方式与涉及的截图或 GIF。

    开源协议

    本项目以 木兰宽松许可证,第 2 版(Mulan Permissive Software License, v2) 发布。完整协议文本见仓库根目录的 LICENSE 文件。

    相关链接


    由 技术奇客 ITGeeker.net 以 Mulan PSL v2 开源 · Maintained by ITGeeker

    ,

  • 开源Office Word格式转换工具

    开源Office Word格式转换工具

    Open Source Office Word Document Format Converter

    批量将 Word 旧版 .doc 文件转换为新版 .docx 格式 — 基于 Tkinter 与 Word COM 的 Windows 桌面小工具。

    License: MulanPSL-2.0 Python 3.14+ Platform: Windows Version


    📖 项目简介 / Overview

    开源Office Word格式转换工具 是由 技术奇客 ITGeeker.net 出品的 Office 系列小工具,专门解决企业、政务与教育场景下的 Word 旧格式兼容问题 —— 当你面对成百上千份历史遗留的 .doc 文件时,逐个用 Word 打开再”另存为”效率极低,本工具一键批量转换。

    Batch-convert legacy Word .doc files to modern .docx format — a Tkinter + Word COM based Windows desktop utility.

    🎯 解决什么痛点

    • 🏢 企业迁移:旧系统留下的 .doc 文档需要快速升级到 .docx
    • 📦 批量处理:一次扫描整个目录(含子目录),挑选后一键转换
    • 💾 失败可查:损坏的 .doc 不中断任务,失败列表单独导出
    • 🎨 现代化 UI:森林主题(明/暗)+ 系统托盘,操作不打扰当前工作

    ✨ 核心特性 / Features

    • 🖱️ 一键批量转换 — 选定目录后列出所有 .doc(可含子目录),多选后后台线程并发处理,UI 不卡顿
    • 🛡️ 失败容忍 — 单个文件损坏不会中断整个任务;失败列表写入 %USERPROFILE%\itgeeker_widget_config\config_doctodocx_failed.json
    • 🎨 Forest 主题 — 采用 rdbende/Forest-ttk-theme,支持一键切换明/暗
    • 🖥️ 系统托盘 — 关闭窗口最小化到托盘,右键菜单含彩色 Emoji 图标(🏠 显示 / 🙈 隐藏 / ℹ️ 关于 / 🚪 退出)
    • 💾 状态持久化 — 自动记忆窗口位置/大小、上次目录、暗黑偏好、选中文件列表
    • 📦 零依赖 EXE — PyInstaller 单文件打包,含完整 Windows 版本信息(公司/版权/网址),无需 Python 环境即可运行
    • 🩺 统一版本元数据__version__ 单一来源,GUI 关于标签 / PyInstaller 版本信息 / pyproject.toml 自动同步
    • 🪟 关于对话框 — 单实例、含可点击超链接 https://www.itgeeker.net

    📸 效果演示 / Demo

    暗黑主题

    暗黑主题

    明亮主题

    明亮主题

    系统托盘(含彩色 Emoji 图标)
    (截图占位 — 运行 dist/ITGeekerConvertDocToDocx_v2.0.0.1.exe 后右键托盘查看)


    🚀 快速上手 / Getting Started

    1️⃣ 环境准备 / Prerequisites

    项目要求
    操作系统Windows 10 / 11
    Microsoft Office2003 或更高版本(需 Word,工具通过 COM 调用)
    Python(仅源码运行)3.14+
    包管理工具(推荐)uv

    2️⃣ 安装 / Installation

    方式 A:直接下载 EXE(推荐普通用户)

    Releases 页面下载最新的 ITGeekerConvertDocToDocx_v{version}.exe,双击运行即可。

    方式 B:从源码运行(推荐开发者)

    # 克隆仓库
    git clone https://github.com/alanljj/itgeeker_convert_doc_to_docx.git
    cd itgeeker_convert_doc_to_docx
    # uv 会自动创建 .venv/ 并安装依赖(pywin32 等)
    uv sync
    # 启动 GUI(任意工作目录均可执行)
    uv run main.py

    启动成功后会在右下角系统托盘出现 🟠 图标,同时弹出主窗口。

    3️⃣ 使用示例 / Usage

    GUI 操作流程:

    1. 点击 「选择目录」 选择含 .doc 文件的目录
    2. 勾选 「包含子目录」(可选)刷新列表
    3. 在文件列表中 多选 需要转换的文件(Ctrl/Shift 多选)
    4. 点击 「开始转换」,后台线程开始处理
    5. 完成后弹窗显示成功 / 失败数量,失败文件列表已自动写入 JSON

    命令行启动方式(三选一):

    # 方式一:根目录入口脚本(推荐,最直观)
    uv run main.py
    # 方式二:通过 pyproject.toml [project.scripts] 注册的命令
    uv run convert-doc-to-docx
    # 方式三:以模块形式调用
    uv run python -m app

    ⚙️ 配置说明 / Configuration

    应用无需任何手动配置即可运行。所有用户偏好自动持久化到:

    文件内容
    %USERPROFILE%\itgeeker_widget_config\config_doctodocx.json窗口几何、上次目录、主题偏好、文件列表
    %USERPROFILE%\itgeeker_widget_config\config_doctodocx_failed.json上次失败的 .doc 文件列表(仅在有失败时生成)

    💡 itgeeker_widget_config 子目录供多个 ITGeeker 工具共享,便于集中备份。


    🛠️ 开发与发布 / Development & Release

    项目结构

    itgeeker_convert_doc_to_docx/
    ├── _meta.py / app.py / conversion.py / gui.py / main.py
    │   └── persistence.py / theme.py / tray.py
    ├── assets\                    # 打包资源
    │   ├── geekercloud_orange32.ico
    │   ├── geekercloud_orange32.png
    │   ├── converdoc_dark.png
    │   └── converdoc_light.png
    ├── resources\                 # Forest 运行时主题
    │   ├── forest-light.tcl + forest-light/*.png  (70)
    │   └── forest-dark.tcl  + forest-dark/*.png   (68)
    ├── scripts\build_exe.py       # PyInstaller 打包脚本
    ├── tests\                     # 54 个单元测试
    ├── pyproject.toml             # PEP 621 元数据 + hatch 构建
    ├── README.md
    └── LICENSE                     # MulanPSL-2.0

    标准流程

    # 1. 修改代码后,先用 Python 主文件测试
    uv run main.py
    # 2. 静态检查 + 单元测试
    uv run ruff check .
    uv run pytest
    # 3. 静态检查通过后,按需打包(不是每次都打包)
    uv sync --extra build
    uv run python scripts/build_exe.py
    # 输出:dist/ITGeekerConvertDocToDocx_v{version}.exe

    ⚠️ 打包是手动操作 — 不会自动触发。修改代码后请按上面 1-2 步测试,通过后才打包。

    依赖 / Tech Stack

    类型说明
    运行时pywin32调用 Word COM 转换 .doc.docx
    运行时infi-systrayWindows 系统托盘(原生 Win32,支持菜单项彩色 Emoji 图标)
    运行时Pillow彩色 Emoji 渲染 + PNG/ICO 处理
    运行时Tkinter (stdlib)GUI + 主题
    开发pytest54 个单元测试
    开发ruff静态检查(PEP 8 / pyupgrade / bugbear 等)
    打包pyinstaller单文件 EXE

    🤝 贡献指南 / Contributing

    欢迎贡献代码、报告 Bug 或改进文档!

    1. Fork 本仓库到你的账号
    2. 创建特性分支:git checkout -b feat/your-feature
    3. 提交代码:git commit -m "feat: add your feature"
    4. 推送到你的 Fork:git push origin feat/your-feature
    5. 在 GitHub / Gitee 上发起 Pull Request

    📌 开发纪律(来自项目记忆):

    不要随意删除项目目录里不是你创建的文件(详见 [[no-deletions]])

    修改前先 uv run pytest 跑通全部 54 个测试

    提交前 uv run ruff check . 无警告


    📜 开源协议 / License

    本项目采用 木兰宽松许可证 第2版 (MulanPSL-2.0) 开源。

    Copyright (c) 2023 技术奇客ITGeeker.net
    https://www.itgeeker.net

    详见 LICENSE 文件。


    📝 更新日志 / Changelog

    v2.0.0.1(2026-07-28)

    1. 🐛 修复:剥离 infi.systray 自动追加的 Quit 菜单项(其 callback 是字符串,点会抛 TypeError)
    2. 🐛 修复:托盘退出时不能 join 自己线程;改用 os._exit(0) 强制终止进程,确保「关于」窗口同时关闭
    3. 📦 EXE 文件名格式改为 ITGeekerConvertDocToDocx_v{version}.exe
    4. 🏠 修复:传 ICO 而非 PNG 给 infi.systray.SysTrayIcon(之前显示默认图标)
    5. 🪟 关于对话框改为单实例
    6. 🐛 修复:Path.decodedict.add 错误(infi.systray 菜单更新)

    v2.0.0.0(2026-07-28)

    1. ✨ 系统托盘:彩色 Emoji 图标 + 切换显示/隐藏 + 单实例关于对话框
    2. ✨ 窗口位置/大小持久化:退出时保存,下次启动自动恢复
    3. ✨ 关于对话框:可点击超链接 https://www.itgeeker.net
    4. ✨ Forest 主题:明/暗切换 + 高 DPI ICO(16/32/48 多尺寸)
    5. 🔧 重构为根级 Python 包:app / conversion / gui / persistence / theme / tray
    6. 🔧 转换改为后台线程 + after() 轮询,UI 不再冻结
    7. 🔧 JSON 写入改为 tempfile + os.replace 原子化,旧中文字段 100% 兼容
    8. 🔧 主题资源(forest-light/dark tcl + 138 PNG + 图标)移入包内,CWD 无关
    9. 🔧 消除 geekerWin / style 模块级全局变量
    10. 🔧 默认窗口宽度改为 975px,标题栏/托盘使用统一图标
    11. 📦 PyInstaller 打包脚本:单文件 EXE,附带完整 Windows 版本信息
    12. 📦 54 个单元测试(persistence / conversion / tray / metadata)
    13. 🔧 修复 push.py(Python 2 raw_input → Python 3 input,加 __main__ 守卫)

    v1.0.2.0(2023-06-13)

    1. ✨ 增加文件计数,并一同保存和预读
    2. 🔧 改写转换接口,当碰到错误文件时,记录错误,但并不中断继续转换
    3. ✨ 弹窗显示成功和失败的数量,及失败的文件列表,便于移除错误文件

    v1.0.1.0(2023-06-12)

    1. 🐛 修复 Icon 文件错误问题,改用 base64 格式
    2. 📦 由于 PyInstaller 打包问题,改为安装包发行

    v1.0.0.0(2023-06-11)

    1. 🎉 工具首发并已开源。

    🔗 相关链接 / Links


    Made with ❤️ by 技术奇客 ITGeeker

    Copyright © 2023-present · MulanPSL-2.0

    ,

  • 一款轻量的Windows桌面黄金价格小组件-ITGeeker Gold Widget,实时查看当前国内与国际金价

    一款轻量的Windows桌面黄金价格小组件-ITGeeker Gold Widget,实时查看当前国内与国际金价

    🧈 ITGeeker Gold Widget

    Version v1.3.3.0
    Python 3.14+
    Windows 10/11
    MIT License

    Gitee 仓库 · Github 仓库 · 问题反馈 · ITGeeker 主页


    项目简介

    ITGeeker Gold Widget 是一款开源的桌面黄金价格小组件。它把沪金 Au9999 与国际金价浓缩成一个小巧的桌面浮窗,常驻屏幕一角,让你不用反复打开浏览器或行情 App,也能随时瞥一眼当前金价、涨跌与行情来源。

    小组件默认显示人民币 / 克(Au9999 沪金)的实时行情,也支持一键切换到美元 / 盎司观察国际金价。所有偏好(窗口位置、配色、刷新频率、货币单位、是否开机自启等)都会自动保存,下次启动时按习惯恢复。界面基于 PySide6 构建,外观是无边框、透明、可拖动、可调整大小的悬浮卡片,并提供完整的系统托盘菜单,方便隐藏、刷新、置顶或退出。

    ⚠️ 数据来源声明:界面展示的行情来自第三方公开接口(新浪财经、GoldPrice.org、Yahoo Finance),可能受网络状态与接口限制影响,仅作日常观察参考,不构成任何投资建议


    核心特性

    • 💱 双币种一键切换:内置「人民币 / 克(CNY)」与「美元 / 盎司(USD)」两种行情模式,按钮即点即换。
    • 📈 完整行情视图:同屏展示当前价、涨跌额、涨跌幅、开盘价、最高价、最低价与上一次收盘价。
    • 🔁 三级数据源自动回退:CNY 模式按「新浪 Au9999 → GoldPrice.org → Yahoo Finance(汇率换算)」依次尝试;USD 模式按「Yahoo GC=F → GoldPrice.org」依次尝试。
    • ⏱️ 可调刷新频率:在设置对话框内调整刷新间隔,范围 10 秒到 1 小时(默认 60 秒)。
    • 🪟 无边框透明浮窗:圆角玻璃质感,支持鼠标拖动移动,右下角拖拽调整大小,可选窗口置顶。
    • 🎨 可视化自定义:自定义背景色、背景透明度(30~255)、文字颜色与字体大小(8~32 px)。
    • 🖥️ 系统托盘常驻:托盘图标双击显示 / 隐藏窗口,右键菜单提供刷新、置顶、设置、官网、版本、退出等操作。
    • 💾 配置自动持久化:所有偏好写入本地 JSON,下次启动自动恢复窗口位置、大小与外观。
    • 🚀 Windows 开机自启:一键写入 HKCU\Software\Microsoft\Windows\CurrentVersion\Run,随系统后台常驻。

    效果演示

    ITGeeker Gold Widget 桌面浮窗效果 - Windows 11 桌面右下角金价小组件
    桌面一角的金价浮窗,支持拖动、置顶与个性化配色(默认尺寸 360×220)

    快速上手

    环境准备

    • 操作系统:Windows 10 或 Windows 11
    • Python:3.14 或更高版本(参考 pyproject.tomlrequires-python
    • 依赖库:PySide6(>= 6.11.1)、requests(>= 2.34.2)
    • 网络:首次运行需要联网以拉取金价行情

    如果你的本地 Python 版本低于 3.14,建议通过官方安装包升级后再继续。

    安装步骤

    以下命令在 Windows PowerShell 中执行即可,开箱即用:

    # 1. 克隆仓库
    git clone https://gitee.com/itgeeker/itgeeker_gold_widget.git
    
    # 2. 进入项目目录
    cd itgeeker_gold_widget
    
    # 3. 创建并激活虚拟环境
    python -m venv .venv
    .\.venv\Scripts\Activate.ps1
    
    # 4. 安装依赖
    python -m pip install -r requirements.txt
    

    使用示例

    启动桌面小组件:

    # 在已激活的虚拟环境中执行
    python main.py
    

    启动后,桌面上会出现一个半透明浮窗。常见交互:

    • 左键拖动:移动浮窗到任意位置
    • 右下角拖拽:调整浮窗大小
    • 右键菜单:刷新、设置、置顶、退出
    • 双击托盘图标:显示或隐藏浮窗
    • 货币切换按钮:在 CNY 与 USD 之间切换

    需要打包成独立 EXE 时:

    python -m pip install pyinstaller
    python -m PyInstaller itgeeker_gold_widget.spec --clean --noconfirm
    

    itgeeker_gold_widget.spec 中将 COLLECTname 设为空字符串,构建产物与所有依赖文件会落在项目根目录(与 spec 文件同级),而非默认的 dist/ 子目录。


    配置说明

    首次运行时,程序会在用户目录下创建配置文件:

    %USERPROFILE%\itgeeker_widget_config\config_gold.json
    

    所有可调参数均可在 设置对话框(右键菜单 → 设置)中修改并即时保存,无需手动编辑 JSON。下表列出了当前实现的全部用户级字段及其默认值:

    字段默认值取值范围 / 说明
    window_x100浮窗左上角 X 坐标(像素)
    window_y100浮窗左上角 Y 坐标(像素)
    window_width320浮窗宽度(像素,最小 210)
    window_height180浮窗高度(像素,最小 135)
    always_on_topfalse是否始终置顶
    bg_color#1a1a2e背景颜色(HEX)
    bg_opacity220背景透明度(30~255)
    font_size14正文字号(8~32 px)
    text_color#ffffff文字颜色(HEX)
    refresh_interval60数据刷新间隔(10~3600 秒)
    currencyCNY价格单位:CNYUSD
    auto_startfalse是否随 Windows 开机自启

    🛠️ 推荐做法:优先使用设置对话框修改配置。手动编辑 JSON 仅在排查问题时使用,并且注意保留合法的 JSON 语法(UTF-8 编码)。


    贡献指南

    欢迎通过 Issue 与 Pull Request 一起把这个小组件做得更好。流程很简单:

    1. Fork 仓库到你的 Gitee 账号下
    2. 基于 main 分支创建一个特性分支,例如 feat/awesome-improvement
    3. 在分支上提交改动,建议保持提交粒度小、描述清晰
    4. 推送到你的 Fork:git push origin feat/awesome-improvement
    5. Gitee 仓库发起 Pull Request,并在说明中写清楚改动动机与验证方式

    开源协议

    本仓库根目录下的 [`LICENSE`](./LICENSE) 文件包含完整的协议文本,采用:

    > **木兰宽松许可证,第 2 版(**Mulan Permissive Software License, Version 2, Mulan PSL v2**)**

    > 2020 年 1 月:http://license.coscl.org.cn/MulanPSL2


    **技术奇客 ITGeeker.net** 用心维护 ·
    若觉得这个小工具对你有帮助,欢迎点亮 Star ⭐

    ,

  • ITGeeker 博客 15 周年:从 2011 到 2026,一个人、一台服务器、一份执念

    ITGeeker 博客 15 周年:从 2011 到 2026,一个人、一台服务器、一份执念

    从 5478 天前的那个夏天说起

    2011 年 7 月 4 日,我用一台运行 Windows 2003 的入门 VPS,在 WordPress 后台敲下了 ITGeeker.net 的第一篇博客。标题叫《黑客集团Anonymous建泄密网站 曝光敏感信息》,时间是北京时间下午两点四十四分。

    当时没有任何宏大的计划 —— 只是想试一下 WP 主题汉化 顺手开个号,域名是 GoDaddy 第一年 0.99 美元那种优惠薅来的,买完心还在滴血。

    十五年过去了。今天是 2026 年 7 月,第 5478 天,第 295 篇博客。

    为什么是 15 年?

    很多人惊讶我会把一个独立博客做这么久。理由其实很朴素:

    • Wintel 联盟崩塌:从 WinXP 的全盛时代,写到 Win11 强制登录微软账户。从 Intel 奔腾 4,写到 Intel N5100 小主机和 128 核 ARM。
    • Linux 桌面没死,只是换了个形态:Ubuntu 11.04 到今天的 Ubuntu Server LTS,再到 ComfyUI 在 GB10 上跑 FLUX 2.0 nf4。
    • WordPress 还在,博客还在:从 PHP 5.2 到 PHP 8.3,从 MyISAM 到 MariaDB 10,从 jQuery 到 Gutenberg。我自己用 WP 写了 15 年文章,期间帮 3 家公司做过 WordPress 企业站定制。
    • 我还在 —— 这一点最重要。
    ITGeeker 博客 15 周年纪念封面 2011-2026

    三个我自己的第一次

    翻了一下 295 篇文章,有几篇让我停下来多看了两眼:

    • 2011-12-19《2011:那些逝去的 IT 英才》 —— Steve Jobs 走的那年写的,现在打开还会有一瞬间的恍惚。
    • 2012-01-18《Sn0wbreeze 2.9发布 支持iOS5.0.1完美越狱》 —— 当年的”技术前沿”现在看来全是怀旧。但越狱这件事,正是写 ITGeeker 的初心:让每一个普通用户也能掌握自己设备的”钥匙”
    • 2014 年的”折腾中学习”专题:我把一系列 NAS、软路由、家庭服务器折腾的文章归进了同一个 odoo 标签(虽然那个标签后来被 Odoo 项目的文章挤占了)。那时候我还在用一台退役的 ThinkPad X60 当软路由,跑 DD-WRT。

    不变的几件事

    写越久越发现,博客的价值不在 SEO 不在流量,在于以下几点保持没变:

    • 不接广告 —— 15 年接过的广告一只手数得过来,2018 年之后彻底归零。文章页只放自己的推荐,不放联盟链接。
    • 不抓热点写鸡汤 —— 写过的热点文章,我会给自己打分。15 年加权平均下来,67% 的文章属于”认真写的”,23% 属于”跟随写但有自己视角”,剩 10% 是”换方向发着玩的过渡期”。
    • 源文件本地保存 —— 每篇博客的 .md/.html 原文都在 /opt/syncthing/ai_sync/note_by_ai/ 留档,出门不带笔记本也能通过 Obsidian 回看。Synthing 跨 3 个节点同步,以防万一。
    • 文章里出现过的命令行,现在跑过 —— 我不写想象出来的解决方案。所有教程类文章,都有一次以上的实际验证。

    第 16 年想做什么

    15 年是一个值得停下来点根蜡烛的节点,但不是终点。

    • 继续写 Odoo v19 —— 100% Python 3.12,基于 Manifest v3。这个系列已经写到第 7 篇,会一直更到 v19 GA。
    • Hermes Agent 系列 —— 我现在写文章的这条 Telegram,就是 Hermes 在驱动。这个 Agent 已经能 24/7 自动发现 MCP server,自动监控家里的 12 台服务器,自动维护 30+ 个 cron job。下一篇打算写清楚它怎么帮我做 WordPress 自动化发布。
    • AI 编程札记 —— 422 号标签 AI编程 是我去年新开的,记录 LLM 帮我写代码的反思。不夸张也不焦虑,平视技术。

    写在最后

    如果你恰好是 2011 年就开始读 ITGeeker 的老读者 —— 谢谢,真的。

    如果你最近才偶然刷到这篇文章,那我希望你能在博客的归档里翻一翻。15 年,295 篇,约等于每周一篇的频率。这其实是一个凡人能做到的、最接近「持续输出」的状态。

    下一篇文章,见。

    — ITGeeker,2026-07-25,上海

    全文约 1450 字 · 阅读时长 4 分钟 · 分类:技术奇客


  • Google TV / Shield TV / Tivo Stream 4K 无法访问互联网?修改 NTP 服务器搞定

    Google TV / Shield TV / Tivo Stream 4K 无法访问互联网?修改 NTP 服务器搞定


    问题描述:Google TV、Nvidia Shield TV、Tivo Stream 4K 等设备连接 WiFi 后,系统提示”已连接但无法访问互联网”,导致部分应用无法正常使用。

    解决方案:通过 ADB 修改设备的 NTP(网络时间协议)服务器地址和 captive portal 验证服务器地址即可解决。


    问题原因

    Android TV 原生设备在联网时,系统会通过 isCaptivePortal() 函数检查网络状态。该函数需要访问 Google 的验证 URL:

    https://clients3.google.com/generate_204

    在国内网络环境下,这个地址无法直接访问,Android 系统因此判定”网络受限”,即使你的 WiFi 实际上是可以正常上网的。

    另外,部分设备还需要连接合法的 NTP 服务器来校准时间,默认的时间服务器同样在国内无法访问。


    前置准备

    1. 开启设备的 ADB 调试模式

    在 Google TV / Shield TV 上操作:

    1. 进入 设置 → 关于 → Android TV 操作系统版本(或 系统版本信息
    2. 连续点击 4-7 次版本号,直到提示”您已处于开发者模式”
    3. 返回上一级菜单,找到 开发者选项
    4. 开启 USB 调试(部分设备还需开启 网络 ADB / 无线调试

    2. 安装 ADB 工具包

    在电脑上下载 ADB 工具:

    • 网盘下载:ADB 工具包
    • GitHub 直接下载:同上链接
    • 或者自行安装 platform-tools(Linux: sudo apt install android-sdk-platform-tools

    3. 连接设备

    确保电脑和电视盒子在同一局域网内,使用无线 ADB 连接,无需数据线。

    查看设备的 IP 地址(设置 → 网络与互联网 → WiFi → 当前网络详情),然后执行:

    adb connect 192.168.x.x

    如果弹出调试授权对话框,在电视上点击”确定”即可。


    第一步:修改 NTP 服务器地址

    将 NTP 服务器改为国内的阿里云地址:

    adb shell settings put global ntp_server ntp3.aliyun.com

    国内可用的 NTP 服务器列表:

    服务器地址说明
    ntp1.aliyun.com阿里 NTP 1
    ntp2.aliyun.com阿里 NTP 2
    ntp3.aliyun.com阿里 NTP 3(推荐)
    ntp4.aliyun.com阿里 NTP 4
    ntp5.aliyun.com阿里 NTP 5
    ntp6.aliyun.com阿里 NTP 6
    ntp7.aliyun.com阿里 NPT 7

    第二步:修改 Captive Portal 验证服务器

    注意:如果你的设备同时使用了代理软件(如 Clash),这一步尤其重要。因为系统需要访问一个能返回 HTTP 204 的网址来确认网络正常,而 clients3.google.com/generate_204 在国内无法访问。

    Android 10.0 及以下版本(大部分设备):

    # 开启 captive portal 检测
    adb shell settings put global captive_portal_detection_enabled 1
    
    # 设置 HTTPS 验证服务器(设为 0 表示使用 HTTP)
    adb shell settings put global captive_portal_use_https 0
    
    # 设置返回 204 的 HTTP URL(注意 http_url 后面是空格,不是换行!)
    adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204

    Android 11.0 及以上版本:

    # 设置 captive portal 模式为 1(手动模式)
    adb shell settings put global captive_portal_mode 1
    
    # 设置 HTTP 验证服务器
    adb shell settings put global captive_portal_use_https 0
    adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204

    可用的 captive portal 验证服务器:

    厂商URL
    小米http://connect.rom.miui.com/generate_204
    华为/荣耀http://connect.hicloud.com/generate_204
    vivohttp://wifi.vivo.com.cn/generate_204

    第三步:验证配置

    查看所有全局设置,确认修改是否生效:

    adb shell settings list global

    查找以下项是否正确:

    • ntp_server → 应为 ntp3.aliyun.com(或其他阿里地址)
    • captive_portal_http_url → 应为小米/华为/vivo 的 URL
    • captive_portal_use_https → 应为 0

    如何恢复默认设置?

    如果你想撤销修改,删除相关配置即可(设备会恢复使用 Google 默认值):

    adb shell settings delete global captive_portal_http_url
    adb shell settings delete global captive_portal_https_url

    或者重启设备后重新手动连接 WiFi,系统可能会重新获取默认值。


    常见问题与排错

    ❌ error: more than one device/emulator

    说明 ADB 检测到多个设备,指定具体设备即可:

    # 先查看设备列表
    adb devices
    
    # 然后指定设备安装或执行命令
    adb -s 192.168.188.249:5555 shell settings put global ntp_server ntp3.aliyun.com

    ❌ INSTALL_FAILED_DEPRECATED_SDK_VERSION

    安装旧版 APK 时可能遇到 SDK 版本过低的问题,添加 --bypass-low-target-sdk-block 参数:

    adb install --bypass-low-target-sdk-block your_app.apk

    ❌ INSTALL_FAILED_NO_MATCHING_ABIS

    设备的 CPU 架构与 APK 不匹配,下载对应架构的版本(如 armeabi-v7aarm64-v8a):

    adb -s DEVICE_IP:5555 install --bypass-low-target-sdk-block app-armeabi-v7a.apk

    ❌ 修改后依然提示”网络受限”

    1. 检查 captive portal URL 是否拼写正确(空格、斜杠不要遗漏)
    2. 尝试更换另一个厂商的验证服务器地址
    3. 重启设备或断开 WiFi 重新连接
    4. 如果使用了代理软件,确保代理规则已将验证域名排除(直连)

    额外:安装常用应用

    通过 ADB 可以无线安装 APK,比在电视上操作更方便:

    # 先连接设备
    adb connect 192.168.x.x
    
    # 安装应用
    adb install your_app.apk
    
    # 如果报 SDK 版本错误,使用 bypass 参数
    adb install --bypass-low-target-sdk-block your_app.apk
    
    # 指定设备安装(多设备时)
    adb -s 192.168.x.x:5555 install your_app.apk

    一些实用 TV 应用:

    • Downloader:从 Apps 搜索安装,输入 6 位数字码即可下载(如 714656
    • Emotn Store:TV 应用市场,分享码 639502
    • 订阅助手 TV 版:通过 Downloader 输入 714656 安装
    • SmartTube(原 SmartTubeNext):YouTube 去广告客户端

    参考资源


    如果本文对你有帮助,欢迎分享转发~有任何问题欢迎留言讨论!


    ,

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4