<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>魔都水滴</title>
    <link>https://blog.margrop.net/</link>
    <description>Recent content on 魔都水滴</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Tue, 21 Jul 2026 07:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ubuntu 22.04 通过ufw / iptables 开放指定端口——20230715更新</title>
      <link>https://blog.margrop.net/post/ubuntu-add-port-filter-using-iptables/</link>
      <pubDate>Sun, 26 Feb 2023 20:04:53 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-add-port-filter-using-iptables/</guid>
      <description>&lt;h1 id=&#34;ubuntu2204-新增防火墙端口&#34;&gt;Ubuntu22.04 新增防火墙端口&lt;/h1&gt;&#xA;&lt;h2 id=&#34;查看防火墙状态&#34;&gt;查看防火墙状态&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw status&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;开放22端口&#34;&gt;开放22端口&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw allow 22&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;添加完成查看防火墙状态&#34;&gt;添加完成，查看防火墙状态&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ufw status&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 9.0 日常维护，去掉未订阅的提示，和设置国内源——2025年8月6日更新</title>
      <link>https://blog.margrop.net/post/proxmox-ve-daily-maintain/</link>
      <pubDate>Sun, 26 Feb 2023 20:00:19 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-daily-maintain/</guid>
      <description>&lt;p&gt;本文整理了 PVE 6.x / 7.x / 8.x / 9.x 的高频维护操作，并修正了旧版内容里的重复段落和明显错误。&lt;/p&gt;&#xA;&lt;p&gt;建议先执行一次版本确认，再按对应版本操作，不要混用不同版本的源配置。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pveversion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>国内 Coding Plan 大洗牌：GLM 抢不到、Kimi 关入口，谁还值得买？</title>
      <link>https://blog.margrop.net/post/domestic-coding-plan-2026/</link>
      <pubDate>Tue, 21 Jul 2026 07:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/domestic-coding-plan-2026/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;国内 Coding Plan 主视觉&#34; src=&#34;https://blog.margrop.net/post-images/domestic-coding-plan-2026/hero.svg&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;**先给结论：**截至 &lt;strong&gt;2026 年 7 月 21 日&lt;/strong&gt;，国内 Coding Plan 已经出现明显分层：智谱 GLM 是每天固定时间的限量秒杀，实际接近“完全买不到”；Kimi 当前会员订阅入口已关闭；MiniMax TokenPlan 目前不限购，但实际编码体验弱于那些限购型 Plan；千问 AI 刚推出 qwen3.8，当前不限购且有使用优惠，是现阶段更值得优先尝试的选择，但不排除后续限购；火山方舟 CodingPlan 和 AgentPlan 虽然限购，但仍有机会购买。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Coding Plan 还能买到吗？2026 年主流大模型编程套餐限购、限额与避坑实测</title>
      <link>https://blog.margrop.net/post/coding-plan-market-2026/</link>
      <pubDate>Mon, 20 Jul 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/coding-plan-market-2026/</guid>
      <description>&lt;p&gt;&lt;img alt=&#34;Coding Plan 主视觉&#34; src=&#34;https://blog.margrop.net/post-images/coding-plan-market-2026/hero.svg&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;**结论先说：**截至 &lt;strong&gt;2026 年 7 月 20 日&lt;/strong&gt;，主流 Coding Plan 并不是简单的“全部涨价”或“全部限购”。更准确的说法是：**大多数方案仍能购买，但购买入口、地区、支付方式、模型额度和高峰期并发，已经被拆成了几道不同的门槛。**其中，Google Gemini CLI 的个人服务、部分新产品的高阶档位，以及地区不支持的本地化套餐，最容易出现“看得到、买不到”或“买到了、用不满”的情况。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>AI 怎么学会“用手”的？从只会聊天到会查、会写、会操作</title>
      <link>https://blog.margrop.net/post/ai-tool-calling-mcp/</link>
      <pubDate>Sun, 19 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-tool-calling-mcp/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI 并不是突然长出了手。它只是学会了一个非常关键的动作：&lt;strong&gt;先判断自己需要什么工具，再用结构化参数请求工具，等工具返回真实结果，最后把结果翻译成人话。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这套机制通常叫 &lt;strong&gt;Tool Calling（工具调用）&lt;/strong&gt;；在不同平台上也会看到 Function Calling、Tools API 等名字。MCP（Model Context Protocol，模型上下文协议）则像一套“统一插座”，让不同的 AI 应用可以用相似的方式发现和调用文件、数据库、搜索、工单、浏览器等能力。&lt;/p&gt;&#xA;&lt;p&gt;本文不把 AI 神化成“会自己做事的数字员工”，而是把一次调用拆开给你看：模型到底做了什么、真正执行动作的是谁、为什么 MCP 会火、权限应该放在哪里，以及为什么“能调用工具”不等于“可以随便给它钥匙”。文中截图来自 OpenAI 与 MCP 官方页面，命令输出图为本文根据真实调用流程制作的示意证据；文章不包含任何真实内网地址或主机名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别急着装电脑管家：AI Agent 到底能替代桌面上的哪些软件？一次看懂清理、优化、改配置和维修的边界</title>
      <link>https://blog.margrop.net/post/ai-agent-replace-desktop-software/</link>
      <pubDate>Sun, 19 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-agent-replace-desktop-software/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI Agent 可以替代一大批“只会点按钮”的桌面工具，但它不是把所有软件图标变成一个聊天框。它真正擅长的是：先看懂问题，再组合系统自带工具，执行一连串步骤，最后把结果解释给你。&lt;/p&gt;&#xA;&lt;p&gt;在文件格式转换、垃圾扫描、性能检查、配置修改和软件故障排查这五类任务里，AI Agent 对前两类的替代程度最高，对性能优化和配置修改属于“半自动”，对硬件维修只能做诊断助手，不能代替人拆机。&lt;/p&gt;&#xA;&lt;p&gt;本文用一条简单原则贯穿全文：&lt;strong&gt;先读，再写；先备份，再改变；先验证，再宣布成功。&lt;/strong&gt; 文中的脚本不依赖第三方服务，默认只扫描和生成报告，必须加参数并再次确认才会清理。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>AI 为什么会一本正经地胡说八道？——你以为它在思考，其实它在玩‘超级成语接龙’</title>
      <link>https://blog.margrop.net/post/ai-hallucination-super-chengyu/</link>
      <pubDate>Sun, 19 Jul 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-hallucination-super-chengyu/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI 幻觉不是“模型偶尔抽风”，也不只是某个版本的 Bug。只要模型的核心任务仍然是：根据上下文预测下一段最可能出现的文字，那么它就可能生成一段听起来非常完整、语气非常肯定、实际上没有证据支撑的内容。&lt;/p&gt;&#xA;&lt;p&gt;最容易记住的比喻是：&lt;strong&gt;大语言模型像一个读过很多书、特别会接话的“超级成语接龙选手”。它擅长把句子接得顺，却不天然保证每句话都是真的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>AI 为什么总说‘我忘了’？Token、上下文窗口与那叠写满就必须丢掉的便利贴</title>
      <link>https://blog.margrop.net/post/ai-token-context-window-sticky-notes/</link>
      <pubDate>Sun, 19 Jul 2026 18:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-token-context-window-sticky-notes/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI 的“记忆力差”，很多时候不是它完全没有记住，而是当前对话能带进模型的内容有限。可以把上下文窗口想成一叠有限容量的便利贴：新的问题和工具输出不断贴上去，便利贴写满以后，系统就必须压缩、截断，或者把最旧的一部分移走。被移走的内容，模型在当前请求里就很可能再也看不到。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;你有没有遇到过这种场景：刚刚和 AI 约定“所有代码都用 Python”，聊了十几轮以后，它突然给出一段 JavaScript；你明明把项目背景写得很完整，AI 却又问了一遍“你使用的是什么系统”；或者你上传了一篇长文档，AI 能准确复述开头，却对中间那条最重要的限制条件一无所知。&lt;/p&gt;&#xA;&lt;p&gt;这看起来像“AI 记性不好”，但更准确的说法是：&lt;strong&gt;AI 每次回答时，能看到的内容受到上下文窗口限制；而能看到，也不代表它会同等重视每一段内容。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本文不把 Token 讲成吓人的数学名词，而是把它讲成一套便利贴管理规则。你会看到 Token 是什么、上下文窗口如何装载、为什么长对话会遗忘、Agent 为什么更容易把窗口塞满，以及普通用户如何用简单的整理方法让 AI 少忘事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用了 40 年的 TCP，为什么被 HTTP/3“抛弃”了？</title>
      <link>https://blog.margrop.net/post/why-http3-ditched-tcp-quic/</link>
      <pubDate>Sat, 18 Jul 2026 19:40:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/why-http3-ditched-tcp-quic/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;先给标题&amp;quot;打假&amp;quot;：TCP 并没有被抛弃——文件下载、视频、邮件、SSH，今天依然跑在 TCP 上。但 &lt;strong&gt;Web 世界确实换司机了&lt;/strong&gt;：2022 年 6 月，HTTP/3 成为正式标准（RFC 9114），它不再使用 TCP，而是把网页传输交给了跑在 UDP 上的 QUIC。&lt;/p&gt;&#xA;&lt;p&gt;TCP 被&amp;quot;换掉&amp;quot;的原因，是三个治不好的&amp;quot;中年病&amp;quot;：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;队头阻塞&lt;/strong&gt;：TCP 是一条必须按顺序交付的字节流，丢一个包裹，后面所有包裹一起罚站；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;握手太贵&lt;/strong&gt;：传数据之前要先&amp;quot;寒暄&amp;quot; 2-3 个来回（TCP 握手 + TLS 握手），跨洲网络下光打招呼就半秒；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;协议被&amp;quot;焊死&amp;quot;&lt;/strong&gt;：TCP 长在操作系统内核里，中间设备只认&amp;quot;经典款&amp;quot;，想改进它比登天难。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;QUIC 的药方简单粗暴：&lt;strong&gt;把 TCP 的全部智慧，搬到没人管的 UDP 上重做一遍&lt;/strong&gt;。本文是网络科普三部曲的最后一篇——第一篇讲&amp;quot;网络怎么用&amp;quot;，第二篇讲&amp;quot;TCP/IP 为什么这么设计&amp;quot;，这一篇讲&amp;quot;连最成功的 TCP，是怎么被自己人换掉的&amp;quot;。所有截图来自真实系统，IP 与主机名已打码。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>1974 年的设计，为什么至今统治互联网？TCP/IP 的 6 个设计哲学</title>
      <link>https://blog.margrop.net/post/tcpip-design-philosophy/</link>
      <pubDate>Sat, 18 Jul 2026 09:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/tcpip-design-philosophy/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;TCP/IP 快 50 岁了。它的竞争对手——电话公司的 X.25、IBM 的 SNA、国际标准化组织的 OSI——全都进了博物馆，而它还在承载你今天刷的每一个网页。它赢不是因为最先进，而是因为 6 个设计选择：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;分组交换&lt;/strong&gt;：不铺专列，大家共享公路——便宜，而且炸不断；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分层&lt;/strong&gt;：每层只管一件事，像乐高积木一样可以整块换掉；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;端到端原则&lt;/strong&gt;：网络保持&amp;quot;笨&amp;quot;，聪明全放在两端——所以创新不需要改造网络；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;尽力而为&lt;/strong&gt;：核心不承诺&amp;quot;必达&amp;quot;，可靠性按需购买——简单才能铺到全球；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;粗略共识 + 能跑的代码&lt;/strong&gt;：不要国王、不要投票，标准在跑动中长大；&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;给未来留位置&lt;/strong&gt;：从 IPv4 到 IPv6、从 HTTP/1 到 HTTP/3，地基不动，上面随便翻修。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;一句话：&lt;strong&gt;好的设计不是预测未来，而是给未来留位置。&lt;/strong&gt; 本文是《WiFi 为什么卡？》的姊妹篇——上一篇讲&amp;quot;网络是什么、怎么用&amp;quot;，这一篇讲&amp;quot;它为什么这么设计、凭什么活了半个世纪&amp;quot;。文中所有截图均来自真实系统与真实协议文档，IP 与主机名已打码。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>WiFi 为什么卡？用小学生能懂的话，一次讲透网络、TCP/UDP 和两个“5G”</title>
      <link>https://blog.margrop.net/post/network-basics-tcp-udp-wifi-5g/</link>
      <pubDate>Sat, 18 Jul 2026 08:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/network-basics-tcp-udp-wifi-5g/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;网络&lt;/strong&gt;就是电脑之间的&amp;quot;快递系统&amp;quot;：数据被切成一个个&amp;quot;包裹&amp;quot;（数据包），贴上&amp;quot;地址&amp;quot;（IP），由&amp;quot;分拣中心&amp;quot;（路由器）一站站转运到对方手里。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;TCP 像打电话&lt;/strong&gt;：先接通再说话，没听清就重说，靠谱但麻烦；&lt;strong&gt;UDP 像寄明信片&lt;/strong&gt;：写完就扔出去，快但不保证送到。看视频、打游戏用 UDP 更合适，传文件、刷网页用 TCP 更稳妥。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;三次握手&lt;/strong&gt;就是打电话开头的三句话：&amp;ldquo;喂，听得到吗？&amp;quot;——&amp;ldquo;听得到，你听得见我吗？&amp;quot;——&amp;ldquo;我也听得见，开始说正事吧。&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;有线网络&lt;/strong&gt;像家里的专用水管，&lt;strong&gt;WiFi&lt;/strong&gt; 像大广场上喊话——大家一起喊就会互相听不清，这就是 WiFi 卡顿的最大原因。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;WiFi 的 5G&lt;/strong&gt; 是&amp;quot;5GHz 频段&amp;rdquo;（一条更宽更快的车道），&lt;strong&gt;手机信号的 5G&lt;/strong&gt; 是&amp;quot;第五代移动通信技术&amp;rdquo;（一代标准）。两个 5G 只是重名，完全是两回事。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;全文没有一句黑话，每个概念都用生活里的事打比方；但所有数据都来自真实命令实测（IP 地址和主机名均已打码），小学生能看懂七成，大人也不会觉得浅。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker 拉不动别急着换 DNS：国内镜像加速源挑选、配置与避坑全指南</title>
      <link>https://blog.margrop.net/post/docker-mirror-source-selection-guide/</link>
      <pubDate>Wed, 15 Jul 2026 19:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-mirror-source-selection-guide/</guid>
      <description>先说结论&#xA;国内网络环境下，Docker 拉取镜像失败，往往不是镜像不存在，也不一定是 DNS 的锅。更常见的原因是：公共仓库的访问链路拥堵、某个加速源临时故障，或者配置文件改对了却没有重启 Docker。&#xA;我的建议是：先打开 status.anye.xyz，把它当作“镜像源天气预报”，看多个源最近是否可用；再根据自己的系统改对配置文件；改完先校验 JSON，再重启 Docker，最后用一个小镜像做真实拉取验证。&#xA;一、问题背景：为什么昨天能拉，今天就超时？ 很多人第一次遇到这个问题，是在部署一个很普通的服务：nginx、redis、postgres，或者 NAS 上的媒体服务。命令可能只有一句：&#xA;docker pull nginx:alpine 但终端却出现了超时、context deadline exceeded、TLS handshake timeout、connection reset by peer，甚至长时间停在下载层。换一个镜像标签、重启路由器、修改本地 DNS，有时能暂时恢复，于是大家容易得出一个结论：Docker 太玄学。&#xA;其实 Docker 拉镜像像是“从仓库借书”：&#xA;Docker 客户端先找到仓库地址； 再通过网络连接仓库； 仓库返回镜像清单； 客户端逐层下载内容； 最后校验每一层是否完整。 这条链路中任何一段堵住，都会表现为“拉不下来”。所以，镜像加速源不是魔法按钮，而是给这条路增加一条更顺畅的入口。&#xA;二、问题表现：不要只看网页能不能打开 一个镜像源网页能打开，不等于 Docker 一定能用。选择加速源时，至少要看四件事：&#xA;1. 地址是否真的可达 浏览器打开首页，只能证明首页响应了。Docker 还要访问 Registry API、鉴权接口和镜像层下载接口。网页正常、拉取失败，是完全可能的。&#xA;2. 是否支持完整的 Docker Hub 加速链路 有些地址只是一个网页代理或搜索页面，并不是 Docker Registry mirror。配置到 registry-mirrors 后，如果 docker info 看不到它，或者 docker pull 仍然直接访问默认仓库，就要怀疑它并非真正的加速服务。&#xA;3. 是否持续稳定，而不是刚好今天在线 镜像源很像城市道路：今天通车，不代表明天不施工。稳定性比某一次测速的峰值更重要。家用 NAS 可以接受偶尔切换，CI 构建和生产环境则应该准备备用方案。</description>
    </item>
    <item>
      <title>你给 Agent 装了 Superpowers 吗？v6 这一波更新，把 Skill 从「说明书」改造成了「自动工厂」</title>
      <link>https://blog.margrop.net/post/superpowers-6-whats-new/</link>
      <pubDate>Mon, 13 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/superpowers-6-whats-new/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你已经在用 Claude Code、OpenCode、Codex 之类的工具写代码，大概率已经听过 Superpowers 这个名字。它不是又一个「魔法 prompt」，而是一套让 Agent &lt;strong&gt;按流程工作&lt;/strong&gt;的 Skill 框架——把「先想清楚再动手」「先写测试再看代码」「修 bug 先收集证据」这些人类工程师的好习惯，变成 Agent 必须遵守的操作规程。&lt;/p&gt;&#xA;&lt;p&gt;截至 2026 年 7 月 13 日，Superpowers 的最新稳定版本是 &lt;strong&gt;v6.1.1&lt;/strong&gt;。从 v6.0.0 到 v6.1.1，这个项目连续完成了六个版本节点：&lt;strong&gt;子代理驱动开发（SDD）减少 reviewer，但审查更严格；Plans 增加「全局约束」和「接口契约」；Codex 进入官方插件市场；bootstrap 变得更轻；Gemini CLI 支持被移除；最后还修了一个 &lt;code&gt;hooks: {}&lt;/code&gt; 才能表达「明确没有 hook」的兼容性坑。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这篇文章就一起把这波更新拆开看看，你到底能拿到什么新东西，以及它为什么能让你的 Agent 输出更稳。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>一个周末硬重置 4 次，还送两张卡：当 Token 不再稀缺，我们真正缺的是什么？</title>
      <link>https://blog.margrop.net/post/codex-four-resets-token-abundance-creativity/</link>
      <pubDate>Mon, 13 Jul 2026 07:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/codex-four-resets-token-abundance-creativity/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;上个周末的 Codex 用户，像是突然住进了一家不断续杯的自助餐厅：北京时间周五凌晨硬重置一次，周六又重置两次，到了周一早上，一觉醒来发现额度再次装满；账户里还多了一张可以留到以后使用的重置卡。Tibo 在庆祝 Codex 达到 600 万活跃用户时又预告，第二天还会给所有用户再发一张卡。&lt;/p&gt;&#xA;&lt;p&gt;更夸张的是，当时所有 Codex 订阅用户的 &lt;strong&gt;5 小时限额被临时移除，只剩周限额&lt;/strong&gt;。与此同时，我手里还有一批 GLM-5.2 额度要在周日到期。以前总担心 Token 不够，那几天却变成了另一种烦恼：&lt;strong&gt;怎么才能认真、有效、甚至体面地把 Token 用掉？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;折腾完这个忙碌、惊喜又无奈的周末，我越来越相信：AI 时代真正稀缺的可能不是 Token，而是值得消耗 Token 的问题、与别人不同的创意，以及把创意迅速变成现实的能力。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再盲目执行 rsync！我用 Dry Run 揪出差异文件，再安全完成增量同步</title>
      <link>https://blog.margrop.net/post/rsync-diff-incremental-sync/</link>
      <pubDate>Sat, 11 Jul 2026 13:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/rsync-diff-incremental-sync/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;rsync&lt;/code&gt; 最值得养成的习惯，不是背更多参数，而是把同步拆成两步：&lt;strong&gt;先用 &lt;code&gt;--dry-run&lt;/code&gt; 生成差异计划，确认无误后再执行正式同步&lt;/strong&gt;。如果还会删除目标端文件，则必须把删除能力单独授权，不能让 &lt;code&gt;--delete&lt;/code&gt; 悄悄成为默认动作。&lt;/p&gt;&#xA;&lt;p&gt;文首那段 &lt;code&gt;rsync -n -avz --delete --out-format=&amp;quot;%n&amp;quot;&lt;/code&gt; 确实能看到一部分将变化的路径，但它只输出文件名，后续再靠 &lt;code&gt;grep&lt;/code&gt; 猜“哪些是文件、哪些是删除”并不稳。更可靠的做法是使用 &lt;code&gt;--itemize-changes&lt;/code&gt;，并把 &lt;code&gt;%i&lt;/code&gt; 与 &lt;code&gt;%n&lt;/code&gt; 一起输出，让每一行自己说明是新增、更新、删除还是目录属性变化。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>买了海外 VPS 又有顶级域名，然后呢？这 12 件事，才是公网 IP 真正的含金量</title>
      <link>https://blog.margrop.net/post/vps-domain-personal-internet-infrastructure/</link>
      <pubDate>Sat, 11 Jul 2026 13:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/vps-domain-personal-internet-infrastructure/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;单独一台海外 VPS，只是一间通了电、接了网、却没有门牌号的小房间；单独一个顶级域名，只是一块漂亮招牌。把域名托管到 Cloudflare，再将 DNS 指向 VPS，才等于同时拥有“门牌、导航、店面和公网入口”。&lt;/p&gt;&#xA;&lt;p&gt;它真正的价值并不是“可以搭一个博客”这么简单，而是让普通人第一次拥有一块全天在线、能被全世界标准互联网访问、能运行自己代码的数字土地：博客、API、Webhook、状态页、密码库、监控、文件入口、自动化任务、远程访问中转，甚至个人 AI 服务的统一入口，都可以从这里长出来。&lt;/p&gt;&#xA;&lt;p&gt;但公网 IP 也像一扇开在闹市区的门：你刚装好门锁，互联网上的扫描器可能已经来拧过门把手。因此本文既讲“能做什么”，也讲“哪些东西千万别直接暴露”。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>RAID 不是备份！群晖、飞牛、Unraid 到底怎么选，别等硬盘坏了才看懂</title>
      <link>https://blog.margrop.net/post/nas-raid-selection-guide/</link>
      <pubDate>Sat, 11 Jul 2026 12:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/nas-raid-selection-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RAID 的主要任务，是在一块或几块硬盘故障时，让 NAS 尽量继续工作；备份的主要任务，是在文件被误删、被勒索软件加密、NAS 被偷、主板损坏或房屋发生意外后，把数据找回来。两者都重要，但绝不是一回事。&lt;/p&gt;&#xA;&lt;p&gt;如果你用群晖，家庭用户通常优先考虑 SHR-1，硬盘多、容量大且数据重要时考虑 SHR-2；如果你用飞牛 fnOS，应把“文件系统、存储模式、硬盘数量和备份位置”一起决定，而不是只看 RAID 名称；如果你用 Unraid，则要先理解它不是传统条带化 RAID：每块数据盘保留独立文件系统，校验盘负责故障恢复，混盘与扩容更灵活，但写入性能、校验规则和备份责任也完全不同。&lt;/p&gt;&#xA;&lt;p&gt;最简单的选择法是：&lt;strong&gt;两盘选镜像思路，三到五盘且容量优先选单盘冗余，六盘以上或单盘容量很大时认真考虑双盘冗余；不可重下的数据，无论选什么 RAID，都再做一份异地或离线备份。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再让 AI 猜故障了：MySQL &#43; Prometheus &#43; Loki &#43; Grafana 四件套接入 Agent 全自动实战</title>
      <link>https://blog.margrop.net/post/mysql-prometheus-loki-grafana-ai-agent-hands-on/</link>
      <pubDate>Sat, 11 Jul 2026 08:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mysql-prometheus-loki-grafana-ai-agent-hands-on/</guid>
      <description>很多团队已经把 MySQL、Prometheus、Loki 和 Grafana 装起来了，但线上报警之后，值班人员仍然要在四个窗口之间来回切换：先看仪表盘，再写 PromQL，然后去日志里搜索 trace_id，最后登录数据库核对业务记录。&#xA;这就像医院明明有体温计、病历、化验单和监护大屏，医生却仍要自己跑四个房间抄数据。AI Agent 真正有价值的地方，不是替医生“猜病”，而是拿着受限制的工具，自动把四处证据取回来，再把“现象、证据、根因和建议”分开说明。&#xA;本文不是概念拼贴。我实际启动了一套隔离环境，使用 MySQL 8.4、Prometheus 3.13、mysqld_exporter 0.19、Loki 3.7 和 Grafana 13.1，注入了一次带统一 trace_id 的慢查询故障，然后通过自建只读 MCP Bridge 完成协议初始化、工具发现、PromQL 查询、LogQL 查询、MySQL 只读查询和 Grafana 数据源审计。&#xA;先说结论：四件套接入 Agent，不等于把四套管理员密码交给 AI 正确的架构应该满足下面几条：&#xA;MySQL 仍然保存业务事实，Agent 只能使用专门的只读账号； Prometheus 负责保存数字随时间的变化，例如连接数、QPS 和缓存命中率； Loki 保存“发生了什么”的日志，并通过标签、时间和 trace_id 关联事件； Grafana 继续承担人工观察、仪表盘、数据源管理和结果复核； MCP Bridge 把查询包装成边界明确的工具，而不是开放任意 Shell； Agent 先调用工具取证，再总结答案，不能把语言模型的推测冒充事实。 换句话说，Agent 拿到的应该是一串“只能打开指定抽屉的钥匙”，而不是整栋楼的万能钥匙。&#xA;四件套分别是什么？用小学生也能懂的方式解释 MySQL：学校老师手里的成绩册 MySQL 保存订单、用户、库存、付款状态等业务事实。你问“这个订单到底有没有支付”，最终应该以数据库记录为准。&#xA;它像成绩册：里面写着谁参加了考试、得了多少分。成绩册擅长回答具体事实，却不适合每隔五秒画一次“全校平均分变化曲线”。&#xA;Prometheus：每隔几秒自动测一次体温 Prometheus 会定时抓取指标，并保存时间序列。借助 mysqld_exporter，MySQL 的连接数、查询数、线程状态等数据会被翻译成 Prometheus 能理解的格式。&#xA;它像自动体温计：一次读数只能告诉你现在是 38℃，连续读数才能告诉你温度是突然升高、持续升高，还是已经恢复。&#xA;下面是真实实验中的 Prometheus Targets 页面。mysql 抓取目标显示为 UP，说明 exporter 与 Prometheus 的链路已经打通。</description>
    </item>
    <item>
      <title>密码没写错，群晖却不让登录？我拆开 DSM 的 RSA &#43; AES 双层信封，完整复刻 WebAPI 登录</title>
      <link>https://blog.margrop.net/post/synology-webapi-login-encryption-deep-dive/</link>
      <pubDate>Sat, 11 Jul 2026 08:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-webapi-login-encryption-deep-dive/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;群晖某些 WebAPI 登录请求并不是简单地把 &lt;code&gt;account&lt;/code&gt; 和 &lt;code&gt;passwd&lt;/code&gt; 直接提交给 &lt;code&gt;auth.cgi&lt;/code&gt;。OpenStack Cinder 的 Synology 驱动展示了一套完整兼容流程：先调用 &lt;code&gt;SYNO.API.Encryption.getinfo&lt;/code&gt;，取得 RSA 公钥、服务器时间和两个动态字段名；客户端生成一次性随机 passphrase，用 RSA 加密它，再用它派生 AES-256-CBC 的密钥和 IV，对 URL 编码后的登录参数加密，最后把两段 Base64 密文放入服务器指定的 &lt;code&gt;cipherkey&lt;/code&gt; 字段。&lt;/p&gt;&#xA;&lt;p&gt;但必须先划清边界：这是一种 &lt;strong&gt;WebAPI 身份认证兼容方式&lt;/strong&gt;，不是破解密码，也不是绕过权限；拿到 &lt;code&gt;session=DSM&lt;/code&gt; 的 API SID，也不等于凭空获得浏览器 DSM 管理页面的完整 Cookie 登录状态。HTTP 参数加密同样不能代替 HTTPS，因为 TLS 还负责服务器身份校验、完整性保护和抵抗中间人攻击。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;原创题图：RSA 与 AES 双层信封保护 NAS 登录&#34; src=&#34;https://blog.margrop.net/post-images/synology-webapi-login-encryption-deep-dive/00-cover-original.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac mini 别吃灰：养双 Agent，Windows 随时接管</title>
      <link>https://blog.margrop.net/post/windows-remote-desktop-mac-realvnc/</link>
      <pubDate>Sat, 11 Jul 2026 04:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/windows-remote-desktop-mac-realvnc/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你的日常主力设备都是 Windows，却专门留了一台低功耗 Mac mini 长期开机运行 OpenClaw、HermesAgent 或 macOS 专属自动化任务，那么最省桌面空间的做法，不是再给它配一套显示器和键鼠，而是把它当成一台安静的“Agent 小服务器”。macOS 自带“屏幕共享”，Windows 端安装 RealVNC Viewer 后，需要配置、升级或排障时再远程接管桌面。&lt;/p&gt;&#xA;&lt;p&gt;这种组合特别适合“平时只用 Windows，Mac mini 负责 24 小时养 Agent”的家庭或个人工作室：Mac mini 功耗相对较低、体积小、运行安静，OpenClaw / HermesAgent 可以持续处理消息、自动化和定时任务；Windows 继续承担日常办公，需要查看 Agent 状态时再打开 RealVNC。&lt;/p&gt;&#xA;&lt;p&gt;真正容易踩坑的不是“软件不会装”，而是屏幕共享、用户权限、VNC 兼容密码、网络可达性，以及无人值守 Mac 的睡眠和重启恢复。本文按真实排障顺序讲清楚，并提供 Windows 11、Ubuntu 26.04、macOS 26 三套检查脚本。&lt;/p&gt;&#xA;&lt;p&gt;安全底线也先写在前面：&lt;strong&gt;不要把 VNC 常用的 TCP 5900 端口直接暴露到公网。&lt;/strong&gt; 同一局域网直接连接最简单；跨网络使用时，应先进入自建 VPN、可信内网隧道或其他受控网络，再连接 Mac。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再人工翻日志了：ELK 三件套接入 AI Agent，从部署到自动排障的手把手教程</title>
      <link>https://blog.margrop.net/post/elk-ai-agent-hands-on/</link>
      <pubDate>Sat, 11 Jul 2026 03:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/elk-ai-agent-hands-on/</guid>
      <description>过去，线上报警后的标准动作通常是：打开 Kibana、选择时间范围、输入查询语句、翻几十页日志、复制错误堆栈，再把零散证据拼成结论。系统一多，这件事很像在一座没有导购员的巨大仓库里找一颗螺丝。&#xA;现在可以换一种方式：让 ELK 继续负责可靠地收集、整理和搜索日志，再给它加一座 MCP “翻译桥”，让 AI Agent 用工具读取证据。于是你可以直接问：&#xA;最近 15 分钟哪个服务的 5xx 最多？请列出证据、关联 trace_id，并给出下一步排查建议。&#xA;Agent 不再只靠语言模型“猜”，而是先调用 Elasticsearch 查询，再根据返回的数据组织答案。本文不是概念拼贴。我实际启动了 Elasticsearch、Logstash、Kibana 和 Elasticsearch MCP Server，导入一组脱敏故障日志，完成 MCP 协议握手与查询，并记录了中途踩到的权限问题。&#xA;先说结论：真正有价值的不是“让 AI 看日志”，而是让它有边界地查日志 接入后的合理架构是：&#xA;Logstash 负责接收、解析、清洗和补充字段； Elasticsearch 负责索引、搜索、聚合与保存； Kibana 负责人工可视化、验证和审计； MCP Server 把查询能力包装成 Agent 能理解的工具； AI Agent 负责拆解问题、调用工具、总结证据，但默认不拥有删除和写入权限。 这与“把所有日志复制给聊天机器人”完全不同。后者既容易泄密，也会受上下文长度限制；前者让数据留在自己的 ELK 中，Agent 只取当前问题需要的少量结果。&#xA;如果给小学生解释，可以把它想成一座图书馆：Logstash 是收书和贴标签的工作人员，Elasticsearch 是记住每本书放在哪里的图书管理员，Kibana 是墙上的查询大屏，MCP 是翻译员，AI Agent 是会帮你办事的值班同学。你问“哪一类事故最多”，值班同学不会凭印象回答，而是让翻译员去问图书管理员，然后把查到的书名和页码一起交给你。&#xA;ELK 三件套到底是什么 Elasticsearch：不是数据库替代品，而是搜索与分析引擎 Elasticsearch 将文档建立倒排索引，擅长全文检索、时间范围过滤、多条件查询和聚合统计。日志场景中，一条日志通常是一份 JSON 文档，包含时间、服务、级别、消息、状态码、耗时、链路标识等字段。&#xA;它最像一本超级厚的词典。普通数据库像按页码翻书；倒排索引则像先做“关键词 → 出现位置”的目录。因此当日志达到百万甚至亿级时，仍然可以快速回答“过去 10 分钟 payment 服务出现了多少次 504”。</description>
    </item>
    <item>
      <title>GLM Coding Plan 抢不到？火山方舟 9.9 元还能叠 95 折：邀请码买最低约 9.4 元</title>
      <link>https://blog.margrop.net/post/volcengine-coding-plan-9-9-glm-5-2/</link>
      <pubDate>Sat, 11 Jul 2026 03:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/volcengine-coding-plan-9-9-glm-5-2/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你最近想买 GLM Coding Plan，却遇到名额、活动入口或购买节奏不合适，不必一直守着页面刷新。火山方舟 Coding Plan 当前提供 &lt;strong&gt;Lite 连续包月首两个月 9.9 元/月&lt;/strong&gt;的限时优惠；通过邀请入口首次订阅，还能在 9.9 元基础上再叠加 &lt;strong&gt;9.5 折&lt;/strong&gt;，按宣传口径最低约 &lt;strong&gt;9.4 元/月&lt;/strong&gt;。活动页同时明确列出了 &lt;strong&gt;GLM-5.2&lt;/strong&gt;，并写明 GLM-5.2 等热门模型限时加量 4 倍。&lt;/p&gt;&#xA;&lt;p&gt;但先别只看“9.9”三个数字：优惠是首两个月，不是永久价；第三个月会恢复页面标注的 40 元/月；套餐额度只能用于 Coding Plan 支持的编程工具，不等同于一笔随便调用所有 API 的通用余额。本文写作与截图时间为 2026 年 7 月 11 日，活动页标注截止日期为 &lt;strong&gt;2026 年 8 月 7 日&lt;/strong&gt;，最终规则以购买页实时显示为准。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再手点虚拟机了：Proxmox VE 接入 AI Agent 手把手教程，默认只读也能自动巡检</title>
      <link>https://blog.margrop.net/post/proxmox-ve-ai-agent-guide/</link>
      <pubDate>Sat, 11 Jul 2026 02:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-ai-agent-guide/</guid>
      <description>很多人第一次听到“让 AI 管 Proxmox VE”，脑子里出现的画面是：对 AI 说一句话，它就能创建虚拟机、扩容磁盘、重启服务，甚至自动修复故障。这个方向没有错，但真正安全的起点不是“把管理员密码交给 AI”，而是给 AI 一张只读、可撤销、可限制范围的门禁卡。本文会从零解释 Proxmox VE、API Token、MCP 和 AI Agent 的关系，给出人工配置与 Agent 自动配置两条路线，并提供 Windows 11、Ubuntu 26.04、macOS 26 三套一键脚本。&#xA;图：本文自制题图。AI Agent 不应拿到机房“万能钥匙”，而应通过受限 Token 和 MCP 桥接访问 Proxmox VE。&#xA;先说结论 如果你只想记住最重要的内容，请记住下面几句话：&#xA;Proxmox VE 是一套开源虚拟化管理平台，可以集中管理物理节点、KVM 虚拟机、LXC 容器、存储、网络、备份与集群。 AI Agent 不能凭空理解 Proxmox VE，它需要一个“翻译员”。本文使用本地运行的 MCP Server，把 Agent 的工具调用翻译成 Proxmox REST API 请求。 第一阶段只授予 PVEAuditor，并保持 PROXMOX_ALLOW_ELEVATED=false。此时 AI 可以盘点和巡检，但不能开关机、删除或修改资源。 API Token 要单独创建、单独授权、随时可撤销，不要把 root 密码写进 Agent 配置。 接入成功的标准不是“配置文件没报错”，而是 Agent 能列出工具、Proxmox 返回合法数据、权限边界符合预期，而且写操作确实被拒绝。 Proxmox VE 到底是什么 Proxmox Virtual Environment，通常简称 Proxmox VE 或 PVE，是一套面向服务器虚拟化的开源平台。它把几个原本需要分别维护的能力放进同一个管理平面：</description>
    </item>
    <item>
      <title>受够远程控制被限速？我把 RustDesk 服务端搬回自己家：多合一部署、避坑与安全加固</title>
      <link>https://blog.margrop.net/post/rustdesk-all-in-one-server-guide/</link>
      <pubDate>Fri, 10 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/rustdesk-all-in-one-server-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RustDesk 是一款强调开源与自托管的远程桌面工具。客户端之间能直接连接时，画面和键鼠数据优先点对点传输；直连失败时，才由中继服务转发。把服务端部署在自己控制的机器上，最大的价值不是“完全不要服务器”，而是把设备登记、中继路径、密钥、账号和日志重新放回自己的控制范围。&lt;/p&gt;&#xA;&lt;p&gt;本文使用社区维护的 &lt;code&gt;lejianwen/rustdesk-server-s6&lt;/code&gt; 多合一镜像，把 RustDesk OSS 的 &lt;code&gt;hbbs&lt;/code&gt;、&lt;code&gt;hbbr&lt;/code&gt; 与社区 API、Web 管理功能放进一个容器。它适合家庭、实验室和小团队简化部署，但&lt;strong&gt;不是 RustDesk 官方发行的多合一服务端&lt;/strong&gt;。生产环境仍需自行评估社区镜像、固定版本或镜像摘要、备份数据，并测试升级和回滚。&lt;/p&gt;&#xA;&lt;p&gt;本文所有域名都使用 &lt;code&gt;example.com&lt;/code&gt;，没有展示真实 IP、私有域名、主机名、设备 ID、账号、密钥、Token、Cookie 或镜像仓库地址。公开截图来自项目官方页面或社区仓库公开素材。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别把 API Key 到处塞了：我用 NewAPI 搭了一个自用 AI 中转站</title>
      <link>https://blog.margrop.net/post/newapi-self-hosted-relay-station/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/newapi-self-hosted-relay-station/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;NewAPI 不是一个“白嫖模型”的工具，也不是一个神秘代理。它更像我家里的“AI 前台”：所有 App 只认一个入口，前台负责转发到合法授权的上游模型，顺手做令牌、额度、分组、日志、模型限制和用量统计。对自用场景来说，最舒服的地方不是“多了一个网页”，而是终于不用把每个上游 Key 分散塞进十几个客户端。&lt;/p&gt;&#xA;&lt;p&gt;本文会按我自己搭自用中转站的思路写：为什么需要它、容易误解在哪里、最小可用 Docker Compose 怎么跑、为什么我建议加持久化目录、Windows 11 / Ubuntu 26.04 / macOS 26 三套一键脚本怎么写，以及让 Agent 自动配置时应该给它什么边界。全文不放真实内网地址、完整主机名、私有域名和任何密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>我把 Docker 命令行装进了“驾驶舱”：Portainer 2.39.4 从部署到避坑，一篇就够</title>
      <link>https://blog.margrop.net/post/portainer-ce-docker-deployment-guide/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/portainer-ce-docker-deployment-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer 不是 Docker 的替代品，它更像 Docker 主机的“驾驶舱”：底层发动机仍然是 Docker Engine，Portainer 只是把容器、镜像、网络、卷和 Compose Stack 整理成网页按钮、表格与状态卡片。&lt;/p&gt;&#xA;&lt;p&gt;我用 &lt;code&gt;portainer/portainer-ce:2.39.4&lt;/code&gt; 做了一次隔离部署，完成初始化、接入本机 Docker、查看仪表盘、筛选容器、创建演示 Stack，并记录了真实截图。部署本身只要一条 &lt;code&gt;docker run&lt;/code&gt;，真正需要认真理解的却是三件事：&lt;code&gt;/data&lt;/code&gt; 必须持久化、&lt;code&gt;/var/run/docker.sock&lt;/code&gt; 权限非常高、生产环境不要把管理页面毫无遮挡地暴露到公网。&lt;/p&gt;&#xA;&lt;p&gt;本文没有展示完整 IP 地址、真实主机名、内网域名、管理员密码、Token、Cookie、私有镜像地址或生产容器名称。截图里的实验资源使用专门的演示名称，容器地址已遮盖。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>我最后留下的自用 Web 剪贴板，居然只有一个文本框</title>
      <link>https://blog.margrop.net/post/minimalist-web-notepad-lightweight-clipboard/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/minimalist-web-notepad-lightweight-clipboard/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;我试过不少“跨设备剪贴板”“在线便签”“临时文本同步”工具，最后反而留下了一个看起来最寒酸的东西：&lt;code&gt;minimalist-web-notepad&lt;/code&gt;。它打开之后几乎什么都没有，只有一个文本编辑框，只支持纯文本，不支持登录用户、不支持富文本、不支持图片、不支持标签分类，甚至连“保存按钮”都不明显。&lt;/p&gt;&#xA;&lt;p&gt;但正是这种“功能少到没什么可炫耀”的设计，让它特别适合做自用轻量级 Web 剪贴板：临时从手机传一段命令到电脑、从电脑丢一段说明到平板、给自己留一段短文本、用 &lt;code&gt;curl&lt;/code&gt; 在脚本里读写一小段状态。它不像知识库，也不像团队协作文档，更像桌面旁边那张随手撕下来的便签纸。&lt;/p&gt;&#xA;&lt;p&gt;本文会用 &lt;code&gt;ahfeil/minimalist-web-notepad:latest&lt;/code&gt; 镜像演示 Docker Compose 部署；同时给出 Windows 11、Ubuntu 26.04、macOS 26 三套一键脚本，以及人工自动执行和 Agent 自动配置两种方法。全文不展示任何完整内网地址、内网域名、完整计算机名称或真实隐私数据。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>一个 operator.write 把网关干翻：OpenClaw fallback 模型为什么突然全体认证失败？</title>
      <link>https://blog.margrop.net/post/openclaw-missing-operator-write-scope/</link>
      <pubDate>Fri, 10 Jul 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-missing-operator-write-scope/</guid>
      <description>&lt;p&gt;这次问题表面上很像“模型供应商挂了”：OpenClaw 刚加完 NewAPI 的几个 fallback 模型，命令一跑，直接报 &lt;code&gt;Provider authentication failed&lt;/code&gt;；进一步看网关调用，真正的错误是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;missing scope: operator.write&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果只看第一层现象，很容易把锅甩给模型密钥、NewAPI 地址、模型名、网络连通性。但这次真正的问题不在模型，也不在 NewAPI，而在 OpenClaw 走网关调用 fallback 模型时，某个 model override 分支把“设备身份”省掉了。结果服务端虽然看到了一个被授权的请求，却没有把它绑定到那台已经配对、已经拥有 &lt;code&gt;operator.write&lt;/code&gt; 的设备上，最终在执行 agent RPC 时被权限系统拦下。&lt;/p&gt;&#xA;&lt;p&gt;先说结论：&lt;strong&gt;这是一个典型的“令牌有了，钥匙串没带上”的问题。&lt;/strong&gt; 模型直连能成功，网关调用失败；设备列表里明明能看到 &lt;code&gt;operator.write&lt;/code&gt;，但真正发起网关请求时没有使用那份已配对设备身份，于是权限检查按未绑定请求处理，报出 &lt;code&gt;missing scope: operator.write&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;AI 生成封面：一个网关前的双锁权限系统&#34; src=&#34;https://blog.margrop.net/post-images/openclaw-missing-operator-write-scope/cover.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>阿里云负载均衡别再乱买了：SLB、ALB、NLB、CLB 到底差在哪？</title>
      <link>https://blog.margrop.net/post/aliyun-slb-alb-nlb-clb-explained/</link>
      <pubDate>Thu, 09 Jul 2026 21:40:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/aliyun-slb-alb-nlb-clb-explained/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在看到阿里云负载均衡时，不要再把 &lt;code&gt;SLB&lt;/code&gt; 当成某一种具体实例。更准确的理解是：&lt;strong&gt;SLB 是阿里云负载均衡产品家族的总称，里面主要有 ALB、NLB、CLB 三类产品。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;ALB&lt;/strong&gt;：七层应用型负载均衡，重点处理 HTTP、HTTPS、QUIC、gRPC、SSE 这类应用层流量。你要按域名、路径、Header、Cookie、请求方法做转发，优先看它。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;NLB&lt;/strong&gt;：新一代四层网络型负载均衡，重点处理 TCP、UDP、TCPSSL 这类连接层流量。你要高并发、低时延、长连接、IoT、音视频、消息服务入口，优先看它。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CLB&lt;/strong&gt;：传统型负载均衡，支持 TCP、UDP、HTTP、HTTPS，四层能力不错，也有基础七层能力。存量系统还在用它可以继续稳住，但新系统通常应该先看 ALB 或 NLB。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;如果用一句特别土但好记的话讲：&lt;strong&gt;ALB 像懂业务规则的前台，NLB 像高速收费站，CLB 像老牌综合服务窗口，SLB 则是整栋办事大厅的名字。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别把青龙数据直接硬搬！我实测了一次青龙迁白虎，真正的坑在这 5 个地方</title>
      <link>https://blog.margrop.net/post/qinglong-to-baihu-safe-migration/</link>
      <pubDate>Thu, 09 Jul 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/qinglong-to-baihu-safe-migration/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;从青龙面板迁移到白虎面板，最危险的做法不是“不会迁”，而是“以为复制目录就等于迁移成功”。这次我在一台隔离 Docker 实验环境里实际跑了一遍：新建青龙容器，造了两条环境变量、两个定时任务和几份脚本；再把它们迁到一套全新白虎面板里，最后用 API 和白虎页面截图核对。&lt;/p&gt;&#xA;&lt;p&gt;最终可稳定迁移的是三类核心资产：&lt;code&gt;scripts&lt;/code&gt; 脚本文件、环境变量、定时任务。真正需要转换的是：青龙的数字 ID 要变成白虎的字符串 ID；青龙任务里的 &lt;code&gt;task xxx.py&lt;/code&gt; 要变成白虎能执行的命令；青龙的标签、启停状态、环境变量关系要写进白虎自己的表结构。迁移前必须备份白虎库，迁移时最好停掉白虎容器，迁移后必须做数量核对和页面验证。&lt;/p&gt;&#xA;&lt;p&gt;本文不展示任何真实内网地址、主机名、私有镜像仓库、真实 Cookie、真实 Token 或生产路径。截图来自实验环境，变量值也只使用脱敏样例。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别被“飞牛盘 / Btrfs盘”骗了：超低价硬盘背后的 SMR 坑</title>
      <link>https://blog.margrop.net/post/smr-cmr-btrfs-disk-trap/</link>
      <pubDate>Thu, 09 Jul 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/smr-cmr-btrfs-disk-trap/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;机械硬盘不是只看容量和价格。CMR 像正常车道，随机写入比较稳定；SMR 像屋顶瓦片，一层压着一层，容量更高，但改一小块数据时可能要重写一整片区域。更麻烦的是，SMR 还分 &lt;strong&gt;硬盘自己管理的 SMR&lt;/strong&gt; 和 &lt;strong&gt;主机必须配合管理的 SMR&lt;/strong&gt;。最近 PDD 上一些超低价大容量盘被包装成“飞牛盘”“Btrfs盘”，听起来像 NAS 神盘，实际很可能是 host-managed SMR 企业退役盘。它不是完全不能用，而是非常挑系统、挑文件系统、挑写入模式。普通 NAS、Windows 桌面、黑群晖、ZFS/RAID 混用场景，基本不推荐碰。&lt;/p&gt;&#xA;&lt;p&gt;我的购买建议很粗暴：&lt;strong&gt;看不到准确型号，不买；查不到厂商 datasheet，不买；Linux 下 &lt;code&gt;queue/zoned&lt;/code&gt; 显示 &lt;code&gt;host-managed&lt;/code&gt;，普通用户不买；卖家只强调 Btrfs/飞牛/低价，却不说 SMR 类型，不买。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>青龙面板还能公网裸奔吗？几个月前那次致命漏洞后，我更建议你看白虎面板</title>
      <link>https://blog.margrop.net/post/qinglong-baihu-panel-security/</link>
      <pubDate>Thu, 09 Jul 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/qinglong-baihu-panel-security/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;青龙面板曾经是很多人自托管定时任务的默认选择：跑脚本、管环境变量、看日志、定时同步仓库都很方便。但 2026 年初公开爆出的青龙面板致命漏洞，把一个老问题重新摆到台面上：&lt;strong&gt;定时任务面板不是普通网页，它往往握着脚本、变量、通知密钥和执行权限。一旦认证被绕过，攻击者看到的不是一个登录页，而是一台可以被调度的机器。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你只是新装一个轻量任务面板，我现在更建议优先评估白虎面板。白虎面板采用 Go + Vue3，主打轻量、高性能、低系统开销，并且官方 README 已经明确支持 Docker / Docker Compose 部署、Mise 运行时管理、仓库任务同步、执行日志和多渠道通知。它不是“青龙的一比一复制品”，但对很多个人脚本托管场景已经够用。&lt;/p&gt;&#xA;&lt;p&gt;如果你因为兼容旧脚本、历史任务或迁移成本，必须临时继续用青龙面板：&lt;strong&gt;不要把它直接暴露在公网。&lt;/strong&gt; 至少在前面加 VPN、零信任访问、反向代理二次认证、IP allowlist、WAF 或其它访问控制。本文给出 Windows 11、Ubuntu 26.04、macOS 26 三套一键脚本，默认部署白虎；只有显式指定时才部署青龙，并且都会把面板放到 Basic Auth 保护后面。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再到处找 YOLO 开关了：6 个 AI Agent 一键进入高自主模式</title>
      <link>https://blog.margrop.net/post/ai-agent-yolo-one-command/</link>
      <pubDate>Mon, 06 Jul 2026 09:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-agent-yolo-one-command/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AI Agent 工具里的 &lt;code&gt;yolo&lt;/code&gt;，本质不是“更聪明”，而是“少问你”。它会减少或跳过工具调用确认框，让 Agent 更像无人值守脚本一样连续执行。问题在于，不同工具的叫法完全不统一：Codex 是危险旁路 approval 和 sandbox；Claude Code 是跳过权限检查或使用 bypass 权限模式；Gemini CLI 和 Qwen Code 有 &lt;code&gt;--approval-mode=yolo&lt;/code&gt;；OpenCode 是 &lt;code&gt;--auto&lt;/code&gt; 加 permission 规则；Aider 是 &lt;code&gt;--yes-always&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章给出一个统一做法：不要偷偷覆盖原来的 &lt;code&gt;codex&lt;/code&gt;、&lt;code&gt;claude&lt;/code&gt;、&lt;code&gt;gemini&lt;/code&gt; 命令，而是安装一个显式的 &lt;code&gt;agent-yolo&lt;/code&gt; 启动器。你想高自主时才输入 &lt;code&gt;agent-yolo codex&lt;/code&gt;、&lt;code&gt;agent-yolo claude&lt;/code&gt;、&lt;code&gt;agent-yolo gemini&lt;/code&gt;。这样一次搞定常见 Agent 的 YOLO 命令，又不会把日常安全模式改坏。文中脚本覆盖 Windows 11、Ubuntu 26.04、macOS 26，不依赖第三方服务，不安装缺失工具，也不包含任何真实内网地址、完整计算机名、私有域名、令牌或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 新装机第一刀：不想被 Snap 绑架，就这样干净卸掉它</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-remove-snap-cleanly/</link>
      <pubDate>Mon, 06 Jul 2026 09:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-remove-snap-cleanly/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 新装系统后，如果你明确不想使用 Snap，可以卸载。正确姿势不是上来就 &lt;code&gt;rm -rf /snap&lt;/code&gt;，而是先确认系统里有哪些 Snap 应用，迁移重要数据，再按顺序 &lt;code&gt;snap remove --purge&lt;/code&gt;，最后 &lt;code&gt;apt purge snapd&lt;/code&gt; 并清理残留目录。&lt;/p&gt;&#xA;&lt;p&gt;本文给出完整背景、风险边界、人工执行方法、Agent 自动配置方法，以及 Windows 11 / Ubuntu 26.04 / macOS 26 三种一键脚本。脚本默认只预演，真正执行必须显式开启，不依赖第三方服务，也不包含任何真实内网地址、真实计算机名、私有域名或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再半夜抢遥控器了：用 DSM 计划任务给群晖儿童视频目录自动上锁</title>
      <link>https://blog.margrop.net/post/synology-kid-video-acl-curfew/</link>
      <pubDate>Sun, 05 Jul 2026 06:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-kid-video-acl-curfew/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次不是“禁用孩子账号”，而是只给群晖里的一个儿童视频目录定时上锁。做法是在 DSM 7.2.1 上准备一个 &lt;code&gt;kid_video_guard.sh&lt;/code&gt;，到点用 &lt;code&gt;synoacltool&lt;/code&gt; 给目标目录加一条临时 &lt;code&gt;deny&lt;/code&gt; ACL，开放时间再把这条 ACL 删除。账号、密码、家庭相册、作业目录都不动，只有“儿童视频”这个柜门到点关上。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;原创封面：NAS 上的儿童视频目录到点上锁&#34; src=&#34;https://blog.margrop.net/post-images/synology-kid-video-acl-curfew/00-ai-cover.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>跨境 VPS 慢到能睡着？一行内核参数，把国际链路吞吐拉起 20 倍</title>
      <link>https://blog.margrop.net/post/bbr-fix-china-us-vps-slow-network/</link>
      <pubDate>Thu, 02 Jul 2026 20:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/bbr-fix-china-us-vps-slow-network/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;你从国内访问自己的美国 VPS，明明 SSH 打字很流畅，但下载一个 2 MB 的文件要一分多钟？以为是&amp;quot;高峰期国际链路拥堵&amp;quot;？大概率不是——你只是被 Linux 默认的 CUBIC 拥塞控制&amp;quot;骗&amp;quot;了。CUBIC 把每次丢包都当成&amp;quot;前面堵车了&amp;quot;，立刻踩刹车退让；而国际链路本身就有稳定 5-10% 的丢包，于是你的 TCP 连接被永远压在爬行状态。换成 Google 的 &lt;strong&gt;BBR&lt;/strong&gt; 算法后，同样的物理链路、同一时刻、同样的丢包率，吞吐可以立刻涨 15-24 倍。&lt;/p&gt;&#xA;&lt;p&gt;本文记录了一次真实的 mesh 网络排查：家庭出口 → 美国 VPS 拉取 2.3 MB 的网页，实测从 &lt;strong&gt;30 KB/s 一路飙到 500-1000 KB/s&lt;/strong&gt;，用的方法总共 4 行 shell 命令。文章包含三套一键脚本（Windows 11 / Ubuntu 26.04 / macOS 26），既能人工执行，也能交给 AI Agent 自动配置。所有内网地址、主机名和公网 IP 均已脱敏。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker 容器无限重启？只因 v3.7.0 少了一个 serve —— 思源笔记 CLI 破坏性变更修复实录</title>
      <link>https://blog.margrop.net/post/siyuan-v370-docker-restart-loop-fix/</link>
      <pubDate>Thu, 02 Jul 2026 19:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/siyuan-v370-docker-restart-loop-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;把思源笔记从 v3.6.x 升级到 v3.7.0 后，Docker 容器陷入无限重启循环。&lt;code&gt;docker logs&lt;/code&gt; 显示 &lt;code&gt;Error: unknown flag: --accessAuthCode&lt;/code&gt;。根因是 v3.7.0 引入了 CLI 子命令架构，原来的顶级 flag 现在需要加一个 &lt;code&gt;serve&lt;/code&gt; 子命令。修复只需在 docker-compose.yml 的 &lt;code&gt;command&lt;/code&gt; 字段最前面加上 &lt;code&gt;&#39;serve&#39;&lt;/code&gt;，多 7 个字符，从无限重启到正常运行。&lt;/p&gt;&#xA;&lt;p&gt;本文给出完整排查过程、三种操作系统下的一键修复脚本（Windows 11 / Ubuntu 26.04 / macOS 26），以及人工执行和 AI Agent 自动配置两种方法。所有脚本只调用 Docker CLI 和 SSH，不依赖第三方服务。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别把手机通行密钥当 SSH 密码：SSH 免密登录与 Passkey 的正确姿势</title>
      <link>https://blog.margrop.net/post/ssh-passwordless-login-passkeys-correct-use/</link>
      <pubDate>Tue, 30 Jun 2026 09:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ssh-passwordless-login-passkeys-correct-use/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;SSH 免密登录和手机、Mac、Windows 上的通行密钥都在使用“公钥/私钥”这一类密码学思想，但它们不是同一个东西。SSH key 主要用来登录服务器、Git、跳板机和自动化任务；Passkey 主要用来登录网站、App 和账号体系。你可以把它们理解成两把都很先进的钥匙：一把开机房门，一把开网银和邮箱门，原理相似，但锁芯完全不同。&lt;/p&gt;&#xA;&lt;p&gt;正确姿势是：每台常用电脑生成独立 SSH key，私钥只留在本机或硬件安全钥匙中；服务器只保存公钥；确认免密登录成功后再考虑关闭密码登录。Passkey 则交给 iPhone、Android、macOS 26、Windows 11 的系统密码管理器或硬件安全钥匙保存，用于网站和 App 登录，不要试图把手机 passkey 直接塞进 &lt;code&gt;authorized_keys&lt;/code&gt;。本文给出三套一键脚本，覆盖 Windows 11、Ubuntu 26.04 和 macOS 26；同时给出人工自动执行和 Agent 自动配置两种方法，全部不依赖第三方服务，也不包含任何真实内网地址、完整计算机名、私有域名或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再一个个点更新了：让 Agent 一次管好 Windows 11、Ubuntu 26.04 和 macOS 26 的常用软件升级</title>
      <link>https://blog.margrop.net/post/agent-upgrade-common-software-windows11-ubuntu2604-macos26/</link>
      <pubDate>Sun, 28 Jun 2026 08:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/agent-upgrade-common-software-windows11-ubuntu2604-macos26/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;常用软件升级这件事，最痛苦的不是命令复杂，而是它分散在三个世界里：Windows 11 有 WinGet、Microsoft Store 和传统安装器；Ubuntu 26.04 有 apt、snap、flatpak 和服务重启；macOS 26 有系统更新、App Store、Homebrew 和一堆手动下载的应用。人手工做，很容易漏；让 AI Agent 做，如果不给边界，又可能太激进。&lt;/p&gt;&#xA;&lt;p&gt;我的建议是：把 Agent 当成“值班更新管理员”，让它先盘点、再预演、再执行、最后验收。本文给出三套不依赖第三方升级助手或云端服务的一键脚本，分别覆盖 Windows 11、Ubuntu 26.04 和 macOS 26；同时给出人工自动执行和 Agent 自动配置两种方法。脚本只调用系统已有的更新入口和已经配置好的包管理器，不包含任何真实内网地址、完整计算机名、私有域名或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>电脑越用越满？让 AI Agent 安全清掉 Windows 11、Ubuntu 26.04 和 macOS 26 的垃圾文件</title>
      <link>https://blog.margrop.net/post/ai-agent-cleanup-windows11-ubuntu2604-macos26/</link>
      <pubDate>Sun, 28 Jun 2026 07:15:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-agent-cleanup-windows11-ubuntu2604-macos26/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;清理垃圾文件这件事，最怕的不是“清不干净”，而是“清得太猛”。Windows 11、Ubuntu 26.04、macOS 26 上真正值得自动化清理的，通常是临时目录、包管理缓存、旧日志、回收站或废纸篓、可再生成的缓存文件；不应该让脚本随手碰用户文档、照片、浏览器 Profile、密钥、证书、虚拟机镜像和业务数据。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章给出两条路：&lt;strong&gt;人工自动执行&lt;/strong&gt;，也就是你自己复制脚本，先 dry-run 看清楚，再加执行开关；&lt;strong&gt;Agent 自动配置&lt;/strong&gt;，也就是把清理目标、边界、预演、确认和验收交给 Codex、Claude、OpenClaw、HermesAgent 等 Agent 执行。三套脚本分别覆盖 Windows 11、Ubuntu 26.04、macOS 26，不依赖第三方服务，不下载清理软件，也不包含任何真实内网地址、真实计算机名、私有域名或密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Chrome 偷吃 4GB 硬盘？把本地 AI 模型删干净并禁止它再下载</title>
      <link>https://blog.margrop.net/post/chrome-disable-local-ai-model-4gb/</link>
      <pubDate>Sat, 27 Jun 2026 23:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/chrome-disable-local-ai-model-4gb/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近有些机器上的 Google Chrome 会在用户没有明确感知的情况下，下载一份约 4GB 的本地生成式 AI 模型数据。它通常不是病毒，也不是缓存异常，而是 Chrome 为本地 AI 功能准备的模型文件。只删除目录只能临时释放空间，真正稳妥的做法是：&lt;strong&gt;先用 Chrome 企业策略禁用本地 GenAI 基础模型下载，再删除已经落地的模型目录&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;本文给出 Windows 11、Ubuntu 26.04、macOS 26 三个平台的一键脚本、人工操作步骤，以及可以直接交给 Codex / Claude / OpenClaw / Gemini CLI 这类 Agent 执行的提示词。脚本只使用系统自带能力和 Chrome 官方策略，不依赖第三方服务，不包含真实 IP、真实主机名、内网域名或任何密钥。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>macOS 26 后台守护进程开机自启：frp / EasyTier 应该放进 LaunchDaemon，而不是登录项</title>
      <link>https://blog.margrop.net/post/macos-26-launchdaemon-boot-service-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:12:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-26-launchdaemon-boot-service-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你要让 &lt;code&gt;frp&lt;/code&gt;、&lt;code&gt;EasyTier&lt;/code&gt;、同步器、采集器、机器人、代理程序这类后台服务在 macOS 26 上开机自动运行，核心不是“把命令藏在哪里”，而是“让系统的服务管理器负责它”。这篇文章只讨论后台常驻服务，不讨论普通桌面 App 的登录启动。&lt;/p&gt;&#xA;&lt;p&gt;macOS 26 上如果希望后台服务在用户登录前就启动，应该用 /Library/LaunchDaemons。登录项和 LaunchAgent 更像“人进门后打开的工具”，而 LaunchDaemon 才像“楼里的电梯和水泵”，机器起来就要工作。&lt;/p&gt;&#xA;&lt;p&gt;我会给出两条路：&lt;strong&gt;人工配置&lt;/strong&gt;，适合你想理解每一步；&lt;strong&gt;Agent/一键脚本自动配置&lt;/strong&gt;，适合你已经知道二进制和配置文件放在哪里，希望复制一段脚本直接落地。脚本不依赖第三方服务，不下载外部 wrapper，也不会写入任何真实 IP、真实主机名或私有域名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Windows 11/10 后台服务开机自启：把 frp、EasyTier 变成真正无人值守的后台任务</title>
      <link>https://blog.margrop.net/post/windows-11-10-background-service-autostart-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:11:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/windows-11-10-background-service-autostart-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你要让 &lt;code&gt;frp&lt;/code&gt;、&lt;code&gt;EasyTier&lt;/code&gt;、同步器、采集器、机器人、代理程序这类后台服务在 Windows 11/10 上开机自动运行，核心不是“把命令藏在哪里”，而是“让系统的服务管理器负责它”。这篇文章只讨论后台常驻服务，不讨论普通桌面 App 的登录启动。&lt;/p&gt;&#xA;&lt;p&gt;Windows 的关键判断是：程序是不是原生 Windows Service。frp、EasyTier 这类常见命令行守护进程通常更适合用计划任务在系统启动时运行，因为计划任务是系统内置能力，不需要 NSSM、WinSW 之类第三方 wrapper。&lt;/p&gt;&#xA;&lt;p&gt;我会给出两条路：&lt;strong&gt;人工配置&lt;/strong&gt;，适合你想理解每一步；&lt;strong&gt;Agent/一键脚本自动配置&lt;/strong&gt;，适合你已经知道二进制和配置文件放在哪里，希望复制一段脚本直接落地。脚本不依赖第三方服务，不下载外部 wrapper，也不会写入任何真实 IP、真实主机名或私有域名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 后台服务开机自启：把 frp / EasyTier 交给 systemd，别再手敲命令了</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-systemd-boot-service-frp-easytier/</link>
      <pubDate>Sat, 27 Jun 2026 17:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-systemd-boot-service-frp-easytier/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你要让 &lt;code&gt;frp&lt;/code&gt;、&lt;code&gt;EasyTier&lt;/code&gt;、同步器、采集器、机器人、代理程序这类后台服务在 Ubuntu 26.04 上开机自动运行，核心不是“把命令藏在哪里”，而是“让系统的服务管理器负责它”。这篇文章只讨论后台常驻服务，不讨论普通桌面 App 的登录启动。&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 上后台服务的标准答案不是把命令塞进 shell 启动脚本，而是写成 systemd unit。systemd 能在网络就绪后启动它，能记录日志，能失败重启，也能在关机时按顺序停止。&lt;/p&gt;&#xA;&lt;p&gt;我会给出两条路：&lt;strong&gt;人工配置&lt;/strong&gt;，适合你想理解每一步；&lt;strong&gt;Agent/一键脚本自动配置&lt;/strong&gt;，适合你已经知道二进制和配置文件放在哪里，希望复制一段脚本直接落地。脚本不依赖第三方服务，不下载外部 wrapper，也不会写入任何真实 IP、真实主机名或私有域名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Windows 终于有了原生 Linux 命令：微软 coreutils 让你告别 WSL、Cygwin 和 Git Bash</title>
      <link>https://blog.margrop.net/post/windows-native-linux-commands-microsoft-coreutils/</link>
      <pubDate>Sat, 27 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/windows-native-linux-commands-microsoft-coreutils/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先问一个问题：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;你有没有过这种体验——在 Windows 终端里想用 &lt;code&gt;grep&lt;/code&gt; 过滤一下日志，结果 PowerShell 告诉你 &lt;code&gt;grep&lt;/code&gt; 不是内部命令；想用 &lt;code&gt;find&lt;/code&gt; 批量查找文件，结果 Windows 的 &lt;code&gt;find&lt;/code&gt; 和 Linux 的 &lt;code&gt;find&lt;/code&gt; 完全是两个东西；写了个跨平台脚本，到了 Windows 上就得全部重写？&lt;/p&gt;&#xA;&lt;p&gt;这不是你的问题，这是 Windows 和 Linux 命令行之间那道&amp;quot;柏林墙&amp;quot;的问题。&lt;/p&gt;&#xA;&lt;p&gt;好消息是，微软自己动手拆墙了。2025 年底，微软在 GitHub 上开源了 &lt;strong&gt;coreutils&lt;/strong&gt; 项目——一个原生 Windows 版本的 Linux 核心命令集。不需要 WSL，不需要 Cygwin，不需要 Git Bash，一条 &lt;code&gt;winget install&lt;/code&gt; 就能让你的 Windows 终端直接听懂 &lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;sed&lt;/code&gt;、&lt;code&gt;awk&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker 镜像不求人:从 0 到 1 在自己家里搭一个 13GB 的私有仓库</title>
      <link>https://blog.margrop.net/post/build-private-docker-registry-without-hassle/</link>
      <pubDate>Fri, 26 Jun 2026 12:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/build-private-docker-registry-without-hassle/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;我家那台小服务器上跑着一个 &lt;code&gt;registry:2&lt;/code&gt; 镜像仓库,已经攒了 &lt;strong&gt;13 GB 缓存、95 个仓库&lt;/strong&gt;。它在局域网里给我所有的 NAS、PVE、Mac、Windows 提供 Docker Hub 镜像加速,&lt;strong&gt;冷启动一个 alpine 不到 1 秒,完全不走公网 Docker Hub&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章不讲&amp;quot;先装 Docker 然后跑个容器&amp;quot;这种一句废话教程。我会把&lt;strong&gt;真实在生产环境跑&lt;/strong&gt;的部署脚本、登录鉴权流程、反向代理最容易踩的 4 个坑、htpasswd 密码文件怎么管理、缓存怎么排错,一次性摊开。&lt;/p&gt;&#xA;&lt;p&gt;看完你应该能做的:① 在 10 分钟内起一个带登录的 registry;② 解释清楚 &lt;code&gt;WWW-Authenticate&lt;/code&gt; 头为啥不能丢;③ 给老板、给家人讲明白这个仓库到底在干什么。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再让 Agent 吞掉你的 Token：我把 Headroom 接到 NewAPI、OpenClaw 和 HermesAgent 的完整实战</title>
      <link>https://blog.margrop.net/post/headroom-newapi-openclaw-hermesagent-token-compression-guide/</link>
      <pubDate>Sat, 20 Jun 2026 12:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/headroom-newapi-openclaw-hermesagent-token-compression-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次我没有替换原来的 NewAPI，也没有让 OpenClaw / HermesAgent 直接改用一个不确定的新网关。真正做法是：在 NewAPI 前面加一层 Headroom 代理，把所有已经使用 OpenAI-compatible 协议的调用改到 &lt;code&gt;http://&amp;lt;headroom-host&amp;gt;:8787/v1&lt;/code&gt;，而原来的 NewAPI 入口继续保留。这样 Agent 发来的长上下文先经过 Headroom 压缩，再转发给 NewAPI，最后仍由 NewAPI 统一路由到后端模型。&lt;/p&gt;&#xA;&lt;p&gt;最关键的原则只有一句：&lt;strong&gt;先测试，后修改；只迁移测试通过的 OpenAI-compatible 项；非 OpenAI 协议的 fallback 不碰。&lt;/strong&gt; 这篇文章既是复盘，也是一份可以直接交给 Agent 或人工照着执行的操作指南。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Ubuntu 关机要等 90 秒?Python asyncio 服务不肯接 SIGTERM 的排查与修复</title>
      <link>https://blog.margrop.net/post/ubuntu-shutdown-stuck/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-shutdown-stuck/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这台升级到 24.04 的代理机,关机变成了一件折磨人的事:&lt;code&gt;systemctl reboot&lt;/code&gt; 之后,SSH 不掉、灯不灭,要干等 &lt;strong&gt;90 秒&lt;/strong&gt; 才进入真正的 shutdown 流程。journalctl 里很明确:&lt;code&gt;smart-proxy.service: State &#39;stop-sigterm&#39; timed out. Killing.&lt;/code&gt;——systemd 给了 SIGTERM,等 90 秒没人响应,只能 SIGKILL 强杀。&lt;/p&gt;&#xA;&lt;p&gt;根因不是 systemd 的错,也不是 Ubuntu 的错,是 &lt;strong&gt;Python 的 asyncio 服务在收到 SIGTERM 后,没有真正去结束它的子任务&lt;/strong&gt;——它正卡在某个 &lt;code&gt;socket.recv&lt;/code&gt; 上,Python 解释器根本不主动去看&amp;quot;有人叫我走&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;修复分两步,缺一不可:&lt;strong&gt;(1)&lt;/strong&gt; 给两个 Python unit 写 systemd drop-in,把 &lt;code&gt;TimeoutStopSec&lt;/code&gt; 从默认的 90s 缩到 20s;&lt;strong&gt;(2)&lt;/strong&gt; 在 Python 服务里主动遍历 &lt;code&gt;asyncio.all_tasks()&lt;/code&gt;,收到 SIGTERM 后把所有 in-flight 的 handler &lt;code&gt;cancel()&lt;/code&gt; 掉,再用 &lt;code&gt;asyncio.wait_for(self.stop(), timeout=10)&lt;/code&gt; 包一层做兜底。改完之后,同样一次 &lt;code&gt;reboot&lt;/code&gt;,从 90 秒掉到 1 秒。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>一句话让 Claude 把 Ubuntu 22.04 升级到 24.04:一次几乎不用盯屏幕的跨 LTS 实战</title>
      <link>https://blog.margrop.net/post/upgrade-ubuntu-via-agent/</link>
      <pubDate>Fri, 19 Jun 2026 10:58:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/upgrade-ubuntu-via-agent/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这台远端机器是家里那台 24 小时开机的代理机,系统一直停在 Ubuntu 22.04.4 LTS(jammy),内核 5.15。一句&amp;quot;帮我把 192.168.103.182 升级到 ubuntu24.04&amp;quot;,Claude 就替我拆开了旧柜子,在另一个房间装上了新柜子,过程中它自己开了 tmux 守夜、自己起了 fallback sshd 备胎、自己用 &lt;code&gt;do-release-upgrade -f DistUpgradeViewNonInteractive&lt;/code&gt; 跑完了整段流水线。25 分钟后主机回来,内核已经是 6.8.0-124,所有服务依旧在听。&lt;/p&gt;&#xA;&lt;p&gt;本文不是讲 do-release-upgrade 怎么用,那是 Ubuntu 官方文档的事;本文是讲&amp;quot;当 Agent 拿到 SSH 之后,它在做什么、为什么这么做、以及哪些坑你必须提前排&amp;quot;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>群晖把我的 root 锁在门外三道，我花了二十分钟把它教会</title>
      <link>https://blog.margrop.net/post/synology-root-and-ssh-key/</link>
      <pubDate>Thu, 18 Jun 2026 16:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-root-and-ssh-key/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR（先说结论）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;群晖（Synology DSM）为了安全，默认把 SSH 关掉、还禁止 root 直接登录——这是好事，别骂它。这篇文章就是带你&amp;quot;按规矩&amp;quot;把门打开：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;控制面板 → 终端机和 SNMP → 启用 SSH&lt;/strong&gt;（把大门打开）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;用普通账户登录 + &lt;code&gt;sudo -i&lt;/code&gt; 切到 root&lt;/strong&gt;（先去物业借钥匙）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;修改 &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; 里 &lt;code&gt;PermitRootLogin yes&lt;/code&gt;&lt;/strong&gt;（跟门卫说&amp;quot;root 是自己人&amp;quot;）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;synouser --setpw root xxx&lt;/code&gt; 设密码 + 把公钥写到 &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;&lt;/strong&gt;（换一把永远不会丢的钥匙）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;全程大约二十分钟，比想象简单。我会把每一步都用&amp;quot;钥匙和锁&amp;quot;的比喻讲清楚，再附上 vi 编辑器三秒钟入门、常见报错和 Q&amp;amp;A。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>我把 AnythingLLM 装进 Docker 之后，容器像一只上紧发条的小松鼠——反复重启直到我把那个 1000:1000 给它</title>
      <link>https://blog.margrop.net/post/anythingllm-docker-deploy/</link>
      <pubDate>Wed, 17 Jun 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/anythingllm-docker-deploy/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR（先说结论）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AnythingLLM 这只&amp;quot;啥都能塞进去的 LLM 口袋书&amp;quot;官方就有 Docker 镜像，正常情况下 &lt;code&gt;docker run&lt;/code&gt; 一行就能起；但它里面那位 &lt;code&gt;anythingllm&lt;/code&gt; 用户很挑剔——挂给它的宿主机目录必须属于 &lt;code&gt;1000:1000&lt;/code&gt;，否则它写不动自己的 SQLite 数据库，Prisma 启动迁移会直接挂掉，容器就会进入&amp;quot;重启—挂掉—再重启&amp;quot;的死循环。修起来不到一分钟：&lt;code&gt;chown -R 1000:1000 /你的数据目录&lt;/code&gt;，再 &lt;code&gt;docker compose up -d&lt;/code&gt; 一次，它就乖乖听 &lt;code&gt;3001&lt;/code&gt; 了。&lt;/p&gt;&#xA;&lt;p&gt;本文顺道把&amp;quot;Prisma 那个 &lt;code&gt;file:../storage/anythingllm.db&lt;/code&gt; 相对路径为什么能坑死人&amp;quot;讲清楚，最后附上 Portainer stack 写法、几条常见坑、以及中英两个 demo 地址。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>把「该睡觉了」搬出客厅：让 mac 的 launchd 每天 22:00 自动停用群晖孩子的账号，08:00 再悄悄启用</title>
      <link>https://blog.margrop.net/post/synology-mykid-curfew-launchd/</link>
      <pubDate>Sun, 14 Jun 2026 08:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-mykid-curfew-launchd/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;群晖 DSM 控制台里其实有一个&amp;quot;停用账号&amp;quot;按钮，但它不会自动按时执行。借助 mac 自带的 &lt;code&gt;launchd&lt;/code&gt; 加一段 50 行的 &lt;code&gt;bash&lt;/code&gt; 脚本，可以做到：每天 22:00 把孩子的两个本地账号 &lt;code&gt;expired&lt;/code&gt; 标志置位，08:00 再恢复。脚本自带&amp;quot;改前查询 → 改 → 改后查询&amp;quot;的三步校验，任何一步对不上号立刻 &lt;code&gt;exit 1&lt;/code&gt;，launchd 会把执行日志写进 &lt;code&gt;StandardOutPath/StandardErrorPath&lt;/code&gt;。整件事的特别之处是**&amp;ldquo;家长&amp;quot;两个字被从对话里拿掉了**——你不用每天喊&amp;quot;该睡了&amp;rdquo;，机器会准时替你做。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文不打算讲一个大而全的家庭 NAS 管理方案，只围绕一件具体的事：让一个原本靠&amp;quot;人记得点&amp;quot;的操作，变成&amp;quot;到了点就自动发生&amp;quot;的纯系统级动作。&lt;/p&gt;&#xA;&lt;p&gt;如果你只想先看图，第二节那张「晚 10 点断电 / 早 8 点复电」的总览图就够了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;晚 10 点准时&amp;quot;断网&amp;quot;，早 8 点自动&amp;quot;复电&amp;quot;&#34; src=&#34;https://blog.margrop.net/post-images/synology-mykid-curfew-launchd/05-curfew-overview.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PhotoPrism 启动 5 分钟还在装系统包？一次 PHOTOPRISM_INIT=intel 的踩坑与正确配置</title>
      <link>https://blog.margrop.net/post/photoprism-init-intel-stuck/</link>
      <pubDate>Sat, 13 Jun 2026 08:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/photoprism-init-intel-stuck/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR（先说结论）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;PhotoPrism Plus 镜像的 &lt;code&gt;docker-compose.yml&lt;/code&gt; 里有一行 &lt;code&gt;PHOTOPRISM_INIT: &amp;quot;intel&amp;quot;&lt;/code&gt;，看似只是给 Intel 核显开加速，实际上它在容器&lt;strong&gt;第一次启动&lt;/strong&gt;时会去 &lt;code&gt;archive.ubuntu.com&lt;/code&gt; 跑一次完整的 &lt;code&gt;apt-get dist-upgrade&lt;/code&gt;，再装 7 个 GPU / VA-API 包。这套流程 &lt;strong&gt;5–10 分钟起步&lt;/strong&gt;，整个期间容器内部没有任何进程在监听 &lt;code&gt;2342&lt;/code&gt; 端口。你的 &lt;code&gt;docker ps&lt;/code&gt; 显示 &lt;code&gt;Up&lt;/code&gt;、Portainer 一切绿、&lt;code&gt;ss -ltn&lt;/code&gt; 也看到 &lt;code&gt;0.0.0.0:2342&lt;/code&gt; 在 LISTEN——但浏览器一访问就是 &lt;strong&gt;ERR_CONNECTION_RESET / Connection reset by peer&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;解法非常简单：&lt;strong&gt;删掉或清空那一行&lt;/strong&gt;。你 &lt;code&gt;devices&lt;/code&gt; 里已经挂上 &lt;code&gt;/dev/dri/renderD128&lt;/code&gt; 直通，驱动和 VA-API 用户态工具由宿主机提供，容器里再装一遍是纯浪费。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Portainer 改个 stack 一直 500？我花了一晚上才明白，是 Docker 引擎里多了一个「重影」网络</title>
      <link>https://blog.margrop.net/post/portainer-500-duplicate-compose-network-enigma/</link>
      <pubDate>Sat, 13 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/portainer-500-duplicate-compose-network-enigma/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer 改一个 stack，浏览器上弹出 &lt;code&gt;500 Internal Server Error&lt;/code&gt;。你以为又是 YAML 写错了，回去检查 compose 语法、缩进、引号、镜像 tag，全部都对。但每次重试都是同一个 500。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;真正的问题藏在 HTTP response body 的 &lt;code&gt;message&lt;/code&gt; 字段最深处：&lt;code&gt;network librespeed_default is ambiguous (2 matches found on name)&lt;/code&gt;。&lt;/strong&gt; 也就是说，Docker 引擎里同时存在两个 &lt;code&gt;librespeed_default&lt;/code&gt; 网络——两个 ID、两个 &lt;code&gt;Created&lt;/code&gt; 时间、两个 &lt;code&gt;com.docker.compose.config-hash&lt;/code&gt;，但名字一模一样。Compose 启动时让引擎去 lookup 名字，引擎说「我选不出来」，compose up 失败，Portainer 把这条错误原样包成 500 退给浏览器。&lt;/p&gt;&#xA;&lt;p&gt;修复办法朴素到尴尬：在引擎上&lt;strong&gt;删掉其中一个孤儿网络&lt;/strong&gt;（&lt;code&gt;docker network rm &amp;lt;id&amp;gt;&lt;/code&gt; 或在 Portainer 的 Networks 里点 Remove），再原样点一次 Update the stack，就过了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章源于一次真实的 stack 改挂载路径的过程。全程我已经把所有内网地址、镜像仓库地址、卷挂载路径、容器名、用户名密码用 &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt; 替换，只保留公开信息、官方源码、错误文本这些可分享的内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一块希捷 IronWolf Pro 突然告警，我从 SMART 体检到 RMA 换新的全流程</title>
      <link>https://blog.margrop.net/post/seagate-ironwolf-pro-rma-rescue-flow/</link>
      <pubDate>Sat, 13 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/seagate-ironwolf-pro-rma-rescue-flow/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;群晖发来一条「硬盘 10 坏扇区数已增加」告警，看着吓人，但&lt;strong&gt;真正在坏的不是那块盘&lt;/strong&gt;，而是另一个槽位的希捷 IronWolf Pro 10TB；而那块故障盘恰好是台版，还在保，我把它从 SMART 体检、故障分类、台版转保、邮件文案到包装寄出，全部走通了一遍。这篇就把这条完整路径写下来，留给以后哪天再遇到同样告警的自己，也给同样用 NAS 的人一点参考。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;先交代一下背景：家里这台 NAS 是一台群晖（DS3617xs + DSM 10），常年 7×24 小时跑，里面装了 4 块 10TB 的机械盘，分别来自西部数据（两块白盘）、HGST（Ultrastar He10 氦气盘）和希捷（IronWolf Pro 10TB）。这次告警出现之前，整个系统已经稳定跑了快三年。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 容器跑得好好的，端口死活访问不了：一次 HostIp 绑定&#39;半残&#39;的完整复盘</title>
      <link>https://blog.margrop.net/post/docker-port-bind-half-silent/</link>
      <pubDate>Sat, 13 Jun 2026 07:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-port-bind-half-silent/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;一句话总结：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;docker ps&lt;/code&gt; 看着一切正常，&lt;code&gt;docker inspect&lt;/code&gt; 的 &lt;code&gt;HostConfig.PortBindings&lt;/code&gt; 也写好了 &lt;code&gt;203.0.113.14:3001:3000&lt;/code&gt;——但 host 上&lt;strong&gt;没有 docker-proxy 在监听&lt;/strong&gt;、iptables &lt;code&gt;nat/DOCKER&lt;/code&gt; 链里&lt;strong&gt;没有 DNAT 规则&lt;/strong&gt;、&lt;code&gt;NetworkSettings.Networks&lt;/code&gt; 和 &lt;code&gt;Ports&lt;/code&gt; &lt;strong&gt;两个字段都是空 &lt;code&gt;{}&lt;/code&gt;&lt;/strong&gt;。这种&amp;quot;容器活着、端口死了&amp;quot;的诡异状态，本质是 libnetwork 在 attach 网络时因为目标接口尚未就绪而&lt;strong&gt;静默回滚了 endpoint 创建&lt;/strong&gt;，但容器进程已经起好，docker 也没把&amp;quot;端口没生效&amp;quot;这件事主动告诉我们。&lt;strong&gt;30 秒一行命令就能让端口重新回来&lt;/strong&gt;：&lt;code&gt;docker network connect &amp;lt;net&amp;gt; &amp;lt;ctr&amp;gt;&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>把一台慢成蜗牛的 Docker 镜像代理从 5 分 14 秒干到 0.6 秒:我踩过的三个坑和一段 5 行的 cron</title>
      <link>https://blog.margrop.net/post/docker-registry-mirror-rebuild-2026/</link>
      <pubDate>Sat, 13 Jun 2026 07:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-registry-mirror-rebuild-2026/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;我在家里的自建小集群上跑着一个 &lt;code&gt;registry:2&lt;/code&gt; 的 pull-through 代理,平时给局域网里的几台机器和 NAS 当 Docker Hub 镜像源用,用了快两年一直挺稳。&lt;strong&gt;直到有一天,它拉一个 5MB 的 alpine 镜像要 5 分 14 秒。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这篇文章记录我&lt;strong&gt;怎么查到根因&lt;/strong&gt;、&lt;strong&gt;换了哪些方案&lt;/strong&gt;、&lt;strong&gt;为什么每一版都没让我满意&lt;/strong&gt;、&lt;strong&gt;最后怎么用一个 5 行的 bash 脚本 + 每天一次的 cron 把它彻底稳下来&lt;/strong&gt;。整个排查过程 100% 是我在自己的机器上跑出来的真实数据,不是我抄 README、不是我看博客道听途说。&lt;/p&gt;&#xA;&lt;p&gt;关键决策点都贴了实测数据。如果你也在自建 docker 镜像代理,或者你公司的 devops 团队在维护一个内部 registry 镜像,文末的 Q&amp;amp;A 段能帮你省掉至少 3 小时的踩坑。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Markdown 王座崩塌：当 AI Agent 走出聊天框，HTML 成为新答案</title>
      <link>https://blog.margrop.net/post/markdown-throne-falls-ai-agent-html-output/</link>
      <pubDate>Wed, 10 Jun 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/markdown-throne-falls-ai-agent-html-output/</guid>
      <description>如果说 2023 年是属于 ChatGPT 与 Markdown 的&amp;quot;聊天框时代&amp;quot;，那么 2026 年正在宣告一个新阶段的到来：AI 不再只是&amp;quot;回答&amp;quot;你，它要&amp;quot;接管&amp;quot;你的界面。当 Agent 开始直接控制浏览器、操作 SaaS、构建可交互的应用原型时，Markdown 曾经作为 LLM 输出的&amp;quot;事实标准&amp;quot;——那个简洁、可读、token 友好的优雅格式——正在迅速暴露出它作为&amp;quot;最后一公里&amp;quot;的致命短板。HTML，不是 Markdown，正在成为新一代 Agentic 输出的新答案。&#xA;一、导言：Markdown 的王座，是怎么建起来的？ 要理解这场变革的迫切性，我们得先回到 Markdown 当年&amp;quot;加冕&amp;quot;的历史现场。&#xA;2004 年，John Gruber 写下了一行看似不起眼的 Perl 脚本，目标极其朴素：让写网页的人能够用一种&amp;quot;读起来像写好的文章&amp;quot;的纯文本格式写作。Markdown 的设计哲学是&amp;quot;少即是多&amp;quot;——用 *斜体* 而不是 &amp;lt;em&amp;gt;斜体&amp;lt;/em&amp;gt;，用 # 标题 而不是 &amp;lt;h1&amp;gt;标题&amp;lt;/h1&amp;gt;。它的成功，本质上是一次&amp;quot;人类可读性&amp;ldquo;对&amp;rdquo;机器可表达性&amp;ldquo;的胜利。&#xA;二十年过去了。Markdown 早已不再只是博客圈的极客玩具，它渗透进了几乎所有数字写作场景：GitHub 的 README、Reddit 的评论、Notion 的文档、Discord 的消息、Slack 的频道、Jupyter Notebook 的单元格……它成了互联网&amp;rdquo;默认书写协议&amp;quot;。&#xA;而真正让 Markdown 登上 AI 王座的，是 2022 年末 ChatGPT 的横空出世。&#xA;OpenAI 在训练 GPT-3.5/4 时，让模型生成 Markdown 几乎是&amp;quot;母语级别的本能&amp;quot;——因为整个互联网的代码、文档、Stack Overflow 答案、技术博客，全是 Markdown 的海洋。当一个格式占据了 80% 的训练语料，它就不再是&amp;quot;一种格式&amp;quot;，而成了模型的&amp;quot;母语&amp;quot;。</description>
    </item>
    <item>
      <title>OpenClaw TUI 变复读机？thinking 和回复重复的临时止血手册</title>
      <link>https://blog.margrop.net/post/openclaw-tui-duplicate-thinking-stream-patch/</link>
      <pubDate>Tue, 02 Jun 2026 10:42:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-tui-duplicate-thinking-stream-patch/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你在 OpenClaw TUI 里看到同一段 thinking 重复出现、同一段回复正文连续出现两遍，先不要急着清空模型、删除 session 或者怀疑所有 provider 配置都坏了。这个问题很可能不是“历史消息太多”，也不一定是模型真的想复读，而是 OpenAI-compatible 流式响应里同时出现了增量 &lt;code&gt;delta&lt;/code&gt; 和额外的完整 &lt;code&gt;message&lt;/code&gt;，OpenClaw 某些版本在上层聚合时把两份内容都算进去了。&lt;/p&gt;&#xA;&lt;p&gt;临时解决思路很简单：备份本地安装文件，在 OpenClaw 的运行聚合层增加一个非常保守的去重保护；它只处理“同一轮、同一模型、完全重复的 text/thinking 块”，然后重启 gateway，用 marker 测试确认 TUI 和 session 落盘都只剩一份内容。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文是一份可复用的临时修复记录。所有路径、模型名、网关地址和 Token 都做了脱敏处理，真实环境请用自己的安装路径和模型名替换。不要把本文里的占位符当成真实配置直接复制。&lt;/p&gt;</description>
    </item>
    <item>
      <title>MiniMax M3 正式发布:稀疏注意力 MSA 是什么神仙架构?顺手深扒一下 Mavis 的沙箱</title>
      <link>https://blog.margrop.net/post/minimax-m3-launch-and-sandbox-architecture/</link>
      <pubDate>Mon, 01 Jun 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/minimax-m3-launch-and-sandbox-architecture/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;6 月 1 日,稀宇科技正式发布新一代通用模型 MiniMax M3。他在编程、超长上下文和原生多模态三条科技树上同时点满,而且&lt;strong&gt;全球唯一开源&lt;/strong&gt;。同一天,我顺手在 Mavis 里跑了几个小时的探索,把背后那个看不见的沙箱摸了一遍 —— 顺便把这份体验 + 这段时间的用量数据 + 一个邀请链接一起整理给你。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;特别声明&lt;/strong&gt;: &lt;strong&gt;本文 100% 全部由 MiniMax-M3 撰写生成&lt;/strong&gt;，包括全部代码段、图表设计与大纲架构，未经过任何人工修改或二次润色。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;更新说明(2026-06-01 22:00)&lt;/strong&gt;:本文发布后,官方针对 Token Plan 改版又发了一版补充公告,承认此前的迁移方案在沟通和老用户限额问题上考虑不周,并给出了补偿方案和退款通道。本文末尾新增了 &lt;strong&gt;第九节&amp;quot;Token Plan 改版最新公告&amp;quot;&lt;/strong&gt;,正在或打算订阅 Token Plan 的朋友务必读完再下单。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>VPN 连上了，内网域名却死活访问不了？一次 macOS 路由表排查完整复盘</title>
      <link>https://blog.margrop.net/post/macos-routing-table-vpn-troubleshooting/</link>
      <pubDate>Mon, 01 Jun 2026 18:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-routing-table-vpn-troubleshooting/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;一句话总结：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;macOS 上同时跑了两个 VPN（&lt;code&gt;utun0&lt;/code&gt;、&lt;code&gt;utun15&lt;/code&gt;），其中 &lt;code&gt;utun0&lt;/code&gt; 推送了一条 &lt;code&gt;10.0.0.0/8&lt;/code&gt; 的聚合路由，把目标 &lt;code&gt;10.x.x.x&lt;/code&gt; 全部&amp;quot;吃&amp;quot;掉了——而我真正想走的是 &lt;code&gt;utun15&lt;/code&gt; 对端的内网。DNS 能解析，TCP/ICMP 就是不通。&lt;strong&gt;&lt;code&gt;route -n get&lt;/code&gt; 是定位这类问题的第一把刀&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Mac 应用打不开？别急着删：可能只是 Gatekeeper 不认这个未签名工具</title>
      <link>https://blog.margrop.net/post/macos-gatekeeper-unsigned-app-fix/</link>
      <pubDate>Mon, 01 Jun 2026 07:35:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-gatekeeper-unsigned-app-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果一个 macOS 工具下载后双击打不开，提示“无法验证开发者”“已损坏，无法打开”或被系统直接拦住，不要第一时间把它理解成“程序坏了”。很多时候，真正的问题是两个条件叠在一起：这个 &lt;code&gt;.app&lt;/code&gt; 带着浏览器下载留下的 &lt;code&gt;com.apple.quarantine&lt;/code&gt; 隔离属性，同时它没有 Apple 能认可的可用签名。Gatekeeper 在首次打开时看到“来自网络 + 没有可信签名”，自然会把它拦下来。&lt;/p&gt;&#xA;&lt;p&gt;对明确知道来源、只在自己机器上使用的小工具，最小修复通常是：先验证隔离属性和签名状态，再对这个 app 做本地 ad-hoc 签名，最后移除它自己的 quarantine 属性。这里的关键不是“关闭 macOS 安全”，而是只处理一个具体 app，不动全局 Gatekeeper，也不把临时本地修复误认为正式分发签名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章来自一次真实的本地排障，但所有涉及个人机器、内网、下载来源、账号、路径细节的内容都已经脱敏。文中只使用 &lt;code&gt;/Applications/&amp;lt;App&amp;gt;.app&lt;/code&gt;、&lt;code&gt;&amp;lt;App&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;Vendor&amp;gt;&lt;/code&gt; 这类占位符。重点不是公开某个私有环境，而是把这类 macOS 启动失败的判断路径整理出来，方便以后遇到类似问题时少走弯路。&lt;/p&gt;</description>
    </item>
    <item>
      <title>后台进程一断开 Shell 就消失？别只靠 nohup 了，理解 setsid 和进程生命周期的真相</title>
      <link>https://blog.margrop.net/post/setsid-daemon-process-survival/</link>
      <pubDate>Mon, 01 Jun 2026 07:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/setsid-daemon-process-survival/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;你启动了一个后台服务，&lt;code&gt;nohup&lt;/code&gt; 用了，&lt;code&gt;&amp;amp;&lt;/code&gt; 也加了，日志也重定向了，一切看起来都很正常。但当你关闭终端、断开 SSH，或者——更隐蔽的情况——当自动化工具执行完脚本后，这个进程就悄无声息地消失了。你检查 &lt;code&gt;ps&lt;/code&gt;，找不到它；检查端口，也没有监听。如果你遇到过这种情况，你不是一个人。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;真正的根因不是 SIGHUP——至少不完全是。问题出在进程组和会话的归属关系上。&lt;/strong&gt; &lt;code&gt;nohup&lt;/code&gt; 只是让进程忽略 SIGHUP 信号，但如果进程所属的会话 leader 被销毁了，终端 IO 断裂了，或者父进程组被一起收割了，进程仍然可能死掉。真正彻底的解决方案是 &lt;code&gt;setsid&lt;/code&gt;：它创建一个全新的会话，让进程完全脱离原会话的控制终端，不再属于父 shell 的进程组——因此父 shell 退出时，SIGHUP 根本传播不到它那里去。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章源自一次真实的 CLIProxyAPI 服务排障。服务通过 &lt;code&gt;nohup&lt;/code&gt; 启动后，每次自动化脚本执行完毕就消失，管理界面一直报“网络连接失败”。排查后发现是一个隐蔽的 Unix 进程生命周期问题。这类问题在云原生开发机、CI runner、SSH jump host 和容器化工作流里非常常见，但往往因为对进程模型理解不深而被误判为“软件有 bug”。&lt;/p&gt;&#xA;&lt;p&gt;为了不泄露隐私，本文不会出现真实内网地址、真实 token 或路径。所有配置片段使用 &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt; 占位。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一次流式响应被重复消费：NewAPI v1.0.0-rc.10 MiniMax 转发 Bug 排查实录</title>
      <link>https://blog.margrop.net/post/newapi-streaming-duplicate-content-debugging/</link>
      <pubDate>Sun, 31 May 2026 18:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/newapi-streaming-duplicate-content-debugging/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;问题现象：AI Agent 在 DingTalk 通道中回复了重复的文本。消息不是发送了两次，而是一条消息里的内容被复制了一遍。排障最终定位到 NewAPI（QuantumNous 维护的 OneAPI 分支）v1.0.0-rc.10 版本的一个流式响应 Bug：当通过 OpenAI Chat Completions 协议转发 MiniMax 模型时，finish chunk 会&lt;strong&gt;同时包含 &lt;code&gt;delta.content&lt;/code&gt; 和 &lt;code&gt;message.content&lt;/code&gt;&lt;/strong&gt;，且两者内容完全一致。Agent 框架的流式处理器将两者都当作&amp;quot;可见文本&amp;quot;消费，导致最终文本被拼接两次。修复方案也很朴素：将 OpenClaw provider 协议从 &lt;code&gt;openai-completions&lt;/code&gt; 切换到 &lt;code&gt;anthropic-messages&lt;/code&gt;，OneAPI 原生支持该协议，且该路径下流式响应正常。&lt;/p&gt;&#xA;&lt;p&gt;本文不会出现任何真实内网地址、Token、模型 ID 或私有路径。所有配置片段都已脱敏。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>HermesAgent 为什么一直不回微信和企业微信？我最后排到的根因居然是本地 relay 的 3 秒超时</title>
      <link>https://blog.margrop.net/post/hermesagent-wechat-wecom-relay-timeout-debugging/</link>
      <pubDate>Sun, 31 May 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/hermesagent-wechat-wecom-relay-timeout-debugging/</guid>
      <description>先说结论 这次故障看起来像“模型不行”或者“微信通道坏了”，但真正把消息链路掐断的，是我本地那层 relay 的超时设置。它把整条上游请求的等待窗口限制成了 3 秒，而真实的 WeChat / WeCom 消息 turn 往往需要更久才能从新 API 网关拿到完整回复。结果就是：relay 先断开，HermesAgent 只能看到 Connection error、RemoteProtocolError，然后主模型和 fallback 一起被耗尽。&#xA;更准确地说，这不是 HermesAgent 核心代码的问题，也不是模型名的问题，而是一个本地外置组件的连接策略问题。把 connect timeout 和 response wait 混成同一个超时，等于给长请求做了一个错误的截止时间。修复方式也不复杂：连接阶段保留短超时，连接成功后把 socket 切回阻塞等待；同时把 relay 做成独立、可持续启动的服务，不再把它绑死在临时 shell 里。&#xA;问题背景 HermesAgent 这条链路不是单机脚本，而是一条完整的消息生产线。用户从微信或企业微信发出一句话，消息会先进入 Hermes 的通道层，再进入 Gateway，接着经过本地 relay 转发到自建的 NewAPI 网关，最后才到模型服务。模型回来的内容还要经过 Hermes 的消息整理、工具调用处理、最终拼接，再发回原始通道。&#xA;这种结构的好处是灵活，坏处也很现实：任何一层都可能制造“看起来像模型故障”的表象。你看到的是“没有回复”或者“Connection error”，但根因可能在更外层的 relay、socket、超时、代理或者会话路由里。&#xA;这次我一开始也走了老路，先怀疑模型配置。因为从表象看，主模型和 fallback 都失败了，日志里反复出现：&#xA;Primary model failed switching to fallback API failed after 1 retries Connection error Max retries exhausted 如果你只看这一段，很容易得出“模型端不稳定”的结论。但这类结论通常太早。因为同一批模型在别的入口上是能正常工作的，/v1/models 也能返回，简单的 health check 也没有异常。真正出问题的是“真实消息 turn”。</description>
    </item>
    <item>
      <title>诡异！Tmux 新 session 里凭空多出一个 http_proxy 环境变量</title>
      <link>https://blog.margrop.net/post/tmux-zsh-http-proxy-mystery/</link>
      <pubDate>Sat, 30 May 2026 16:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/tmux-zsh-http-proxy-mystery/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;今天遇到一个非常诡异的问题：新创建的 tmux session 里，&lt;code&gt;echo $http_proxy&lt;/code&gt; 竟然显示了一个有效的代理地址。但我明明记得自己在 &lt;code&gt;.zshrc&lt;/code&gt; 里只定义了两个 alias：&lt;code&gt;proxy_on&lt;/code&gt; 和 &lt;code&gt;proxy_off&lt;/code&gt;，它们都是手动触发的，不会自动执行。&lt;/p&gt;&#xA;&lt;p&gt;诡异的是，我的主 shell 里 &lt;code&gt;http_proxy&lt;/code&gt;明明是空的，但一进 tmux 就有了。这个问题排查了将近一个小时才找到根因，特此记录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>你能 SSH 出去，却 SSH 不回来：一次被 Fail2Ban 误伤的反向访问排障实录</title>
      <link>https://blog.margrop.net/post/reverse-ssh-fail2ban-vpn-gateway-investigation/</link>
      <pubDate>Sat, 30 May 2026 15:45:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/reverse-ssh-fail2ban-vpn-gateway-investigation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次问题的表象很简单：本机可以主动 SSH 到远端内网机器，但远端机器反过来 SSH 回本机时，连接直接被拒绝。&lt;code&gt;sshd&lt;/code&gt; 明明在监听，路由也没断，最后却卡在“反向访问”这一步。&lt;/p&gt;&#xA;&lt;p&gt;真正的根因不是 &lt;code&gt;sshd&lt;/code&gt; 挂了，而是 &lt;code&gt;Fail2Ban&lt;/code&gt; 把承载反向连接的 &lt;strong&gt;VPN 网关地址&lt;/strong&gt; 封掉了。对本机来说，来自远端的连接并不是以“远端机器本身”的地址出现，而是以网关地址出现。于是，错误的封禁对象把整条回程链路一并打断了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>macOS LaunchAgent 里的 Python 程序连不上外网？一文搞懂 httpx 代理陷阱的完整排查与修复</title>
      <link>https://blog.margrop.net/post/macos-launchagent-python-httpx-proxy-no-route-to-host/</link>
      <pubDate>Sat, 30 May 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-launchagent-python-httpx-proxy-no-route-to-host/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;macOS 的 LaunchAgent 环境下，Python httpx 库会自动读取系统代理设置（&lt;code&gt;scutil --proxy&lt;/code&gt;），但 LaunchAgent 进程可能根本无法访问该代理服务器——于是请求静默失败，报错 &lt;code&gt;All connection attempts failed&lt;/code&gt; 或 &lt;code&gt;No route to host&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;解决方案只需要一行：在 LaunchAgent 的 plist 文件中添加 &lt;code&gt;NO_PROXY=*&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章记录了我从发现 AI Agent 企业微信消息不回复、到逐步排查代理问题、最终定位到 macOS 系统代理与 LaunchAgent 网络隔离的完整过程。涉及 Python httpx 源码分析、macOS 代理机制深度解析、以及 LaunchAgent 运行环境的诸多坑点。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>家里网速明明很快，打游戏却卡成 PPT？一次 Bufferbloat 的完整排查与解决</title>
      <link>https://blog.margrop.net/post/bufferbloat-sqm-cake-home-network-fix/</link>
      <pubDate>Sat, 30 May 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/bufferbloat-sqm-cake-home-network-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先问一个问题：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;你有没有过这样的体验——家里宽带 500M、1000M，测速软件跑分漂亮极了，但晚上一边下载一边玩《王者荣耀》或者打视频会议时，画面却频繁卡顿、ping 值飘到几百毫秒？&lt;/p&gt;&#xA;&lt;p&gt;明明带宽够用，延迟却爆炸。这不是玄学，这就是 &lt;strong&gt;Bufferbloat&lt;/strong&gt;（缓冲区膨胀）。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章，我就记录一下上周在家里网络上遭遇 Bufferbloat、一步步排查、最后用 SQM + Cake 算法彻底解决的全过程。涉及运营商为保护视力的额外线路保护，设备信息已做脱敏处理。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>从零开始的 AI Agent 完整迁移实战：踩坑九九八十一难后的通关攻略</title>
      <link>https://blog.margrop.net/post/ai-agent-complete-migration-guide-from-scratch/</link>
      <pubDate>Sat, 30 May 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ai-agent-complete-migration-guide-from-scratch/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;从一个 AI Agent 平台迁移到另一个平台，听起来像是「复制粘贴」的事情，实际上却是一场涉及数据迁移、渠道对接、定时任务、自动启动、代理配置、模块兼容性的系统工程。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章记录了我从零开始完成一次 AI Agent 完整迁移的全过程：从安装新平台、迁移记忆和技能、配置消息渠道、排查各种诡异问题，到最终实现全自动运行。涉及 9 个踩坑点和对应的解决方案，希望能帮到有类似需求的朋友。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Claude Code 一升级就全模型 400：别急着换 Key，可能是网关没跟上新版协议</title>
      <link>https://blog.margrop.net/post/claude-code-invalid-message-role-system/</link>
      <pubDate>Fri, 29 May 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/claude-code-invalid-message-role-system/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次故障的表象非常吓人：Claude Code 更新之后，不管访问哪个模型，都会立刻报 &lt;code&gt;API Error: 400 invalid params, chat content has invalid message role: system (2013)&lt;/code&gt;。如果只看错误，很容易怀疑 API Key 失效、模型下线、余额不足、代理坏了、环境变量乱了，甚至怀疑所有模型同时挂掉。真正的根因不是这些，而是新版 Claude Code 发出的请求结构和某些 Anthropic-compatible 模型网关之间出现了兼容断层：网关把不该出现在 chat content 中的 &lt;code&gt;system&lt;/code&gt; role 当成非法消息拒绝了。&lt;/p&gt;&#xA;&lt;p&gt;最小可用修复也很朴素：先用最小 prompt 复现，再对相邻版本做二分式验证。最终确认 &lt;code&gt;2.1.150&lt;/code&gt; 能正常返回，&lt;code&gt;2.1.154&lt;/code&gt; 和 &lt;code&gt;2.1.156&lt;/code&gt; 会复现 400，于是把全局 Claude Code 固定回 &lt;code&gt;2.1.150&lt;/code&gt;。这不是“玄学回滚”，而是基于证据找到最后一个已知可用版本。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章记录一次 Claude Code 本地环境排障。它不是一个复杂到需要改源码的问题，但很有代表性：AI Agent 工具链越来越依赖模型网关、兼容协议、环境变量、版本更新和本地 provider 切换；当其中一层发生协议细节变化时，终端里看到的却往往只是一句抽象的 400。&lt;/p&gt;&#xA;&lt;p&gt;为了避免泄露任何隐私信息，本文不会出现真实内网地址、真实用户名、真实 token、真实私有 provider 名称、真实本机路径或私有服务域名。所有配置片段都使用 &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;MODEL_GATEWAY&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;MODEL_NAME&amp;gt;&lt;/code&gt; 等占位符表示。文章重点是分享排障方法，而不是公开某个具体环境。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI 助手为什么把一句话复读四遍：一次 OpenClaw 微信通道排障复盘</title>
      <link>https://blog.margrop.net/post/openclaw-wechat-duplicate-reply-debugging/</link>
      <pubDate>Fri, 29 May 2026 11:24:29 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-wechat-duplicate-reply-debugging/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次问题看起来像“微信通道把同一条回复发了四遍”，但真正的重复发生在更早的位置：消息还没有进入微信发送层之前，OpenClaw Agent 的最终可见文本就已经被模型执行链路重复拼接了。排障的关键不是一上来改微信插件，而是把链路拆成发送层、会话层、模型路由层三段，用最小 prompt 复现，再比较“兼容网关路径”和“原生 provider 路径”的输出差异。最后的修复也很朴素：让个人 IM 通道显式走原生 provider，移除容易被误选的故障候选模型路径，重启 Gateway 后复测主会话。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章不会出现任何真实内网地址、账号、token、会话 ID、个人微信标识或私有路径。所有配置片段都已经脱敏，并用 &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt; 形式表示。重点是分享一套可复用的排障方法，而不是公开某个具体环境的细节。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>OpenClaw 升级指南：从入门到精通的完整攻略</title>
      <link>https://blog.margrop.net/post/openclaw-hermesagent-upgrade-guide/</link>
      <pubDate>Fri, 29 May 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-hermesagent-upgrade-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;OpenClaw是一款强大的个人 AI 助手，支持多种消息渠道和 AI 模型。升级 OpenClaw 其实非常简单，最推荐的方式是使用 &lt;code&gt;openclaw update&lt;/code&gt; 命令。本文将详细介绍各种升级方式，包括从 npm 包安装到 git 源码安装的切换，以及升级后的验证和回滚策略。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文所有示例都使用公开项目、公开链接和占位符，不包含真实服务器地址、账号、Token、业务配置或任何内网信息。文中配图来自 OpenClaw 官方仓库和文档，内容按其 MIT 授权引用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从 OpenClaw 迁移到 HermesAgent：一次丝滑的 AI 智能体搬家实战</title>
      <link>https://blog.margrop.net/post/openclaw-to-hermesagent-migration/</link>
      <pubDate>Fri, 29 May 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-to-hermesagent-migration/</guid>
      <description>&lt;h2 id=&#34;前言为什么我要搬家&#34;&gt;前言：为什么我要&amp;quot;搬家&amp;quot;？&lt;/h2&gt;&#xA;&lt;p&gt;2026 年，AI 智能体（Agent）领域的发展速度简直可以用&amp;quot;日新月异&amp;quot;来形容。半年前还在用的工具，可能今天就被更强大的替代品超越了。作为一个深度依赖 AI 智能体来处理日常工作的人，我一直在关注这个领域的最新动态。&lt;/p&gt;&#xA;&lt;p&gt;最近，我完成了一次从 OpenClaw 到 HermesAgent 的完整迁移。这不是一时冲动的决定，而是在实际使用中感受到两个工具的差异后，做出的深思熟虑的选择。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章会详细分享：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;背景&lt;/strong&gt;：OpenClaw 和 HermesAgent 分别是什么&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;迁移原因&lt;/strong&gt;：为什么我要从 OpenClaw 迁移到 HermesAgent&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;迁移过程&lt;/strong&gt;：如何一步步完成迁移，保留所有数据&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;踩坑记录&lt;/strong&gt;：迁移过程中遇到的问题和解决方案&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;迁移后清理&lt;/strong&gt;：如何彻底移除 OpenClaw 残留文件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;迁移后体验&lt;/strong&gt;：HermesAgent 带来了哪些新能力&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Q&amp;amp;A&lt;/strong&gt;：常见问题解答&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>避坑指南：新装 Ubuntu 26.04 与 PVE 9.2 别急着用！Fail2Ban 无法启动与拦截失效的终极解决办法</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</link>
      <pubDate>Tue, 26 May 2026 22:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-pve-92-fail2ban-nftables-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;随着 Ubuntu 26.04 LTS 与 Proxmox VE (PVE) 9.2 的相继发布，许多运维工程师与 Host 玩家在第一时间完成了系统升级或新装。然而，在进行服务器安全加固时，你会发现一个令人抓狂的现象：&lt;strong&gt;直接沿用旧版本（如 Ubuntu 20.04/22.04 或 PVE 7.x/8.x）的 Fail2Ban 配置，不仅服务可能直接报错无法启动，甚至即使显示 Running，外部恶意扫描也根本无法被成功拦截！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这并不是 Fail2Ban 软件本身出了 Bug，而是因为新版系统在底层日志架构、服务激活机制和防火墙后端上默默丢下了三颗“隐形炸弹”。本文将深度剖析这三个底层变化，并提供一套完美的、基于 &lt;code&gt;systemd-journald&lt;/code&gt; + &lt;code&gt;nftables&lt;/code&gt; 的 Fail2Ban 现代配置方案。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再用那些臃肿的内网穿透了！手把手带你用 EasyTier 在 Ubuntu 26.04 搭建去中心化虚拟局域网</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-install-latest-easytier-guide/</link>
      <pubDate>Tue, 26 May 2026 21:40:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-install-latest-easytier-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在多设备互联的今天，异地组网（虚拟局域网）已经成为刚需。传统的 ZeroTier、Tailscale 虽然优秀，但往往受制于中心化控制器和服务器位于国外的问题，导致握手慢、打洞成功率低。而自建 frp / nps 又需要一台公网 IP 服务器，且流量全部经过服务器中转，带宽有限。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EasyTier&lt;/strong&gt; 是一款使用 Rust 语言编写的、完全去中心化的虚拟局域网组网工具。它最大的特点是：&lt;strong&gt;节点对等&lt;/strong&gt;。一旦节点通过握手互相认识，即使最初的中继/引导服务器挂了，节点间依然能保持稳定的 P2P 通信。更令人兴奋的是，它原生支持&lt;strong&gt;子网代理（网对网）&lt;strong&gt;和&lt;/strong&gt;内置 WireGuard 门户&lt;/strong&gt;。本文将手把手带你在最新的 &lt;strong&gt;Ubuntu 26.04 LTS&lt;/strong&gt; 上，从零开始安装、配置并以 Systemd 服务托管运行最新版的 EasyTier。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文所有配置、命令及拓扑结构均采用通用占位符，不包含任何真实内网敏感信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新装 Ubuntu 26.04 LTS 别急着用！一步到位换上国内镜像源（阿里源与华为源 DEB822 最新格式配置教程）</title>
      <link>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-setup-guide/</link>
      <pubDate>Tue, 26 May 2026 21:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-setup-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS (Resolute Raccoon) 已经正式发布。如果你刚刚安装完系统，第一件事绝对不是急着安装各种软件，而是应当立即更换国内的高速 APT 镜像源（如阿里云镜像、华为云镜像）。从 Ubuntu 24.04 开始，官方已经全面启用了全新的 &lt;strong&gt;DEB822&lt;/strong&gt; 格式配置（存放于 &lt;code&gt;/etc/apt/sources.list.d/ubuntu.sources&lt;/code&gt;），传统的 &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; 文件默认已经不再生效。&lt;/p&gt;&#xA;&lt;p&gt;本文将手把手教你如何在新版 Ubuntu 26.04 中，优雅、安全地更换为阿里云与华为云镜像源，并针对可能遇到的依赖冲突、版本代号错误等“大坑”进行深度解析。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>彻底打通内网！在 Ubuntu 26.04 上完美部署 Tailscale 实现无感异地组网</title>
      <link>https://blog.margrop.net/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</link>
      <pubDate>Tue, 26 May 2026 14:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/seamless-homelab-networking-deploy-tailscale-ubuntu-2604/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;跨运营商、无公网 IP、多端互联，一直都是 Homelab 玩家与企业运维的核心痛点。本文将详细演示如何在最新发布的 Ubuntu 26.04 (Resolute Raccoon) 系统上，利用最新的 APT 秘钥环（Keyring）标准，优雅地安装和配置最新版的 Tailscale。我们不仅会给出干净利落的命令行安装过程，还会深入剖析 Tailscale 的网络拓扑、子网路由（Subnet Router）以及出口节点（Exit Node）的高级配置，帮助你彻底打通家里的群晖 NAS、PVE 虚拟机以及随身携带的手机与笔记本电脑。&lt;/p&gt;&#xA;&lt;p&gt;本文所有操作均在 Ubuntu 26.04 (Resolute Raccoon) 干净的环境中测试通过，所有内部 IP、密钥、令牌和主机名均已进行脱敏处理，以保障网络安全。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别再用旧方法了！Ubuntu 26.04 LTS 一键搞定最新 Docker 社区版与极速镜像源配置</title>
      <link>https://blog.margrop.net/post/ubuntu-26-docker-install-guide/</link>
      <pubDate>Tue, 26 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-26-docker-install-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;随着 Ubuntu 26.04 LTS（Resolute Raccoon）的正式发布，许多开发者和系统管理员都开始将他们的开发与生产环境迁移至这个最新的长期支持版本。然而，作为容器化技术的基石，Docker 在新系统上的安装与配置却给不少人带来了困扰。&lt;/p&gt;&#xA;&lt;p&gt;如果你还在使用传统的 &lt;code&gt;apt-get install docker.io&lt;/code&gt; 或者套用几年前的 Ubuntu 20.04/22.04 旧教程来配置 APT 源与镜像加速，那么你可能会面临软件包版本陈旧、源格式冲突（DEB822 新格式带来的困惑）、或者因网络阻断导致镜像无法拉取的窘境。&lt;/p&gt;&#xA;&lt;p&gt;本文将手把手带你深度剖析 Ubuntu 26.04 下 Docker 社区版（Docker CE）的正确安装姿势，并结合最新的 DEB822 源规范、非 Root 用户安全权限划分、以及在当前复杂网络环境下的极速代理与私有镜像源配置，为你奉上一份真正结构化、高可用的实战指南。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>别等 Codex 额度归零才后悔：这个“重置雷达”能提前亮灯</title>
      <link>https://blog.margrop.net/post/codex-reset-radar-quota-reset-guide/</link>
      <pubDate>Sun, 24 May 2026 08:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/codex-reset-radar-quota-reset-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近 Codex 的额度重置变得比以前更值得关注：有时是常规周期，有时是服务故障后的补偿性重置，有时是限额消耗异常后的官方修复。对重度 Codex 用户来说，真正尴尬的不是“额度被重置”，而是“我明明还剩不少周额度，却在重置前没有及时用掉”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Codex 重置雷达&lt;/code&gt; 做的事情很简单：把官方状态页、官方/社区公开动态、历史重置窗口和当前预测信号聚合起来，判断是否出现“即将或正在重置”的窗口。它不是魔法预测器，也不是 OpenAI 官方服务；它更像一个面向 Codex 用户的早期预警看板：当信号足够强时，提醒你赶紧把当前周期剩余的 Codex 周额度用在真正需要的任务上。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文只讨论公开信息、公开网页和公开状态信号，不包含任何私有账号、Token、真实业务系统、内网地址或个人使用数据。文中提到的“额度”“重置”“速蹬窗口”都是面向普通 Codex 用户的体验分析，不构成对 OpenAI 官方计费、订阅或服务策略的承诺。&lt;/p&gt;</description>
    </item>
    <item>
      <title>别再迷信 Agent 框架：12-Factor Agents 才是 AI 时代的工程底线</title>
      <link>https://blog.margrop.net/post/12-factor-agents-agent-principles/</link>
      <pubDate>Sat, 23 May 2026 14:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/12-factor-agents-agent-principles/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;12-Factor Agents&lt;/code&gt; 不是一个让你安装后直接开箱即用的 Agent 框架，也不是某种 Codex / Claude / Cursor 里的 Skill。它更像 AI 时代写 Agent 的工程原则清单：当你发现“把大模型、工具列表和一个 while loop 拼起来”只能做到 70% 到 80% 可用，却迟迟过不了生产质量线时，这套原则会提醒你把提示词、上下文、工具调用、状态、人类审批、错误压缩和控制流重新收回到软件工程手里。&lt;/p&gt;&#xA;&lt;p&gt;我最喜欢它的一点，是它没有把 Agent 神化。相反，它反复强调：可靠的 Agent 并不是“让模型自由发挥”，而是把 LLM 放在一个可观察、可恢复、可审计、可中断、可复现的系统里。真正值得学习的不是某个框架 API，而是这背后的工程姿势。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文所有示例都使用公开项目、公开链接和占位符，不包含真实服务器地址、账号、Token、业务配置或任何内网信息。文中配图来自 HumanLayer 开源项目 &lt;code&gt;12-factor-agents&lt;/code&gt; 的官方仓库，内容按其 CC BY-SA 4.0 授权引用；代码授权信息以原仓库为准。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 9.2 正式发布：这次不只是换内核，集群终于会自己找平衡了</title>
      <link>https://blog.margrop.net/post/proxmox-ve-9-2-dynamic-load-balancer-release/</link>
      <pubDate>Sat, 23 May 2026 12:46:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-9-2-dynamic-load-balancer-release/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Proxmox VE 9.2 已经在 2026 年 5 月 21 日正式发布。表面看，它是 Debian 13.5 Trixie、Linux Kernel 7.0、QEMU 11.0、LXC 7.0、ZFS 2.4、Ceph Squid/Tentacle 的一次版本栈更新；但真正值得关注的，是它把“集群怎么自己变得更均衡”“维护窗口怎么避免 HA 误动作”“SDN 怎么从 VLAN/VXLAN 走向 Fabric 化”这些长期存在的运维问题，推进到了更可操作的层面。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;如果你只在单节点 Homelab 上跑几台虚拟机，9.2 未必会让你立刻觉得天翻地覆；但如果你已经有三节点以上集群、HA 资源、Ceph、复杂网络、跨节点迁移、Windows 安全启动或者自定义 CPU 兼容性需求，这个版本就不只是“可以升级”，而是值得认真读 release notes 的版本。&lt;/p&gt;&#xA;&lt;p&gt;本文整理 Proxmox VE 9.2 正式发布内容，并结合实际运维视角，把“发布了什么”“解决了什么痛点”“升级前要注意什么”“哪些场景可以先等一等”讲清楚。文中所有主机名、地址、集群名、账号和命令输出都使用占位符，不包含任何真实内网信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>MCP 明明没配错，为什么一启动就挂？一次 Codex MCP 故障的完整拆解</title>
      <link>https://blog.margrop.net/post/codex-mcp-startup-swift-runtime-troubleshooting/</link>
      <pubDate>Sat, 23 May 2026 06:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/codex-mcp-startup-swift-runtime-troubleshooting/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次故障最容易误判的地方，是表面错误写着 “MCP Client 启动失败”“MCP Server 握手失败”，于是人很自然会去怀疑 MCP 配置、插件开关、网络、Token、JSON 格式、stdio 协议，甚至怀疑 Codex 本身挂了。但真正的根因并不在 MCP 协议层：某个 MCP Server 对应的本地二进制在启动瞬间就被 macOS 动态链接器杀掉了，根本没有机会完成 &lt;code&gt;initialize&lt;/code&gt; 握手。Client 看到的只是连接提前关闭，Server 端真正留下的线索是 &lt;code&gt;dyld: Symbol not found&lt;/code&gt;，缺的是 Swift Concurrency runtime 里的一个符号。&lt;/p&gt;&#xA;&lt;p&gt;换句话说：MCP 没有来得及失败，Server 进程先死了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章记录一次很典型、也很容易绕远路的 Agent 工具链故障：Codex 里 MCP Client / MCP Server 启动异常。它不是一个“修改配置就好”的问题，而是一个从应用层错误一路追到本地二进制、动态链接器、Swift runtime 兼容性的排障过程。&lt;/p&gt;&#xA;&lt;p&gt;为了避免泄露任何隐私信息，本文不包含真实内网地址、真实用户名、真实会话 ID、真实本机绝对路径、Token、私有仓库地址或任何业务系统名称。文中路径都使用 &lt;code&gt;~&lt;/code&gt;、&lt;code&gt;&amp;lt;USER_HOME&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;PLUGIN_DIR&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;PROJECT&amp;gt;&lt;/code&gt; 等占位符表示；命令输出也只保留与判断根因有关的公开技术字段。&lt;/p&gt;</description>
    </item>
    <item>
      <title>别再让 Agent 瞎画界面：UI UX Pro Max 安装与正确使用指南</title>
      <link>https://blog.margrop.net/post/ui-ux-pro-max-agent-skill-guide/</link>
      <pubDate>Fri, 22 May 2026 22:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ui-ux-pro-max-agent-skill-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;UI UX Pro Max 不是一个“让 Agent 变会审美”的魔法提示词，而是一套可以被 Claude Code、Codex、Cursor、Windsurf、Gemini、OpenCode 等 Agent 调用的 UI/UX 设计知识库与搜索型 Skill。它把产品类型、行业、视觉风格、色彩、字体、落地页结构、图表、可访问性、前端技术栈建议等内容整理成可查询的数据和脚本，让 Agent 在动手写页面之前先生成一套设计系统，再按设计系统实现。&lt;/p&gt;&#xA;&lt;p&gt;正确姿势不是“装完以后继续一句话让它做个好看的页面”，而是让 Agent 先调用 &lt;code&gt;search.py --design-system&lt;/code&gt;，再补充 UX、图表、技术栈查询，最后把这些结果落到组件、布局、颜色、动效和验收清单里。这样做的价值很直接：减少 AI 紫色渐变、千篇一律 Hero、低对比度文字、移动端溢出、卡片套卡片、按钮没有 hover/focus 状态这些常见 Agent UI 问题。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文只使用公开资料、公开仓库和干净示例目录中的验证结果。文中的命令、路径、项目名均为通用示例，不包含任何真实内网地址、账号、密钥、业务项目名或个人配置。截图来自公开参考页面和一次隔离目录中的安装/使用验证，不包含隐私信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 装完别急着用：中文显示、中文输入法一次配好</title>
      <link>https://blog.margrop.net/post/ubuntu2604-desktop-chinese-language-input-method/</link>
      <pubDate>Fri, 22 May 2026 16:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu2604-desktop-chinese-language-input-method/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 26.04 Desktop 装好以后，中文环境不要只装一个输入法就结束。更稳的顺序是：先补齐中文语言支持和字体，再确认系统地区与格式，再添加输入源，最后决定使用 GNOME 默认集成更好的 IBus 智能拼音，还是功能更完整、可定制性更强的 Fcitx5。本文按这个顺序走一遍，尽量用图形界面完成；需要命令的地方，也只给可复现、可回滚的命令。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Ubuntu 26.04 LTS 发布后，很多人第一时间装的是 Desktop 版本。系统能启动、浏览器能打开、终端能跑命令，看起来已经可以用了，但中文用户很快会遇到三个小坑：菜单里中英文混杂，网页和文档里的中文字体发虚或缺字，输入法候选词不顺手甚至根本切不出来。&lt;/p&gt;&#xA;&lt;p&gt;这三个问题不要分开乱修。Ubuntu 桌面上的“语言支持”和“输入法”不是两个完全独立的东西：语言包负责菜单翻译、区域格式、字体、拼写词典等基础资源；输入法框架负责把键盘输入转换成中文候选词；GNOME 设置面板负责把这些组件接到桌面会话里。只装 &lt;code&gt;ibus-libpinyin&lt;/code&gt; 或只装 &lt;code&gt;fcitx5&lt;/code&gt;，经常会得到一个“能输入，但体验不完整”的系统。&lt;/p&gt;&#xA;&lt;p&gt;本文写给刚装完 Ubuntu 26.04 Desktop 的普通桌面用户，也写给经常替家人、同事或新机器做初始化的人。目标不是折腾出最复杂的输入法方案，而是把一台新系统整理到“中文显示正常、中文输入稳定、英文环境仍然可用”的状态。&lt;/p&gt;&#xA;&lt;p&gt;文中所有截图都来自公开资料中的真实操作截图，已本地化保存到本站；其中一张截图在入库前裁掉了远程桌面顶部栏，避免带入任何无关地址信息。不同 Ubuntu 26.04 每日镜像、正式镜像、OEM 镜像或后续小版本的界面文案可能略有变化，但设置路径和处理逻辑基本一致。&lt;/p&gt;</description>
    </item>
    <item>
      <title>域名买完别只会解析：用 Cloudflare Tunnel 把内网服务变成公网 HTTPS</title>
      <link>https://blog.margrop.net/post/cloudflare-tunnel-public-https-no-public-ip/</link>
      <pubDate>Thu, 21 May 2026 11:38:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/cloudflare-tunnel-public-https-no-public-ip/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;前两篇已经讲了两件事：先用低成本 &lt;code&gt;.xyz&lt;/code&gt; 域名把个人实验室的入口成本压下来，再把域名交给 Cloudflare 做 NS、DNS、DDNS、邮箱转发和基础自动化。本文继续往下走，讲“域名玩法 5”：用 Cloudflare Tunnel 把家里、NAS、虚拟机、Docker 容器里的 Web 服务发布成公网 &lt;code&gt;https://&lt;/code&gt; 地址。重点是：&lt;strong&gt;外部访问走 443 HTTPS，家里路由器不需要开 80/443 端口，也不需要把源站公网 IP 暴露出去&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;如果你前面已经买好了便宜域名，并且域名 NS 已经切到 Cloudflare，那么 Tunnel 就是非常值得继续折腾的一步。它能把 &lt;code&gt;http://localhost:8080&lt;/code&gt;、&lt;code&gt;http://192.0.2.10:5000&lt;/code&gt; 这类内网服务，变成 &lt;code&gt;https://nas.speedtest.example.xyz&lt;/code&gt; 这样的公网入口。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文是这两篇文章的后续：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;《80 块买十年：个人建站域名，为什么我会优先看 6 位数字 .xyz》&lt;br&gt;&#xA;原文地址：&lt;a href=&#34;https://mp.weixin.qq.com/s/tbefnWGFI0QBFlRVcYjVEw&#34;&gt;https://mp.weixin.qq.com/s/tbefnWGFI0QBFlRVcYjVEw&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;《80元十年域名别浪费：交给 Cloudflare 才算真正用起来》&lt;br&gt;&#xA;原文地址：&lt;a href=&#34;https://mp.weixin.qq.com/s/h0o-vtGB_zj1aptaumBztQ&#34;&gt;https://mp.weixin.qq.com/s/h0o-vtGB_zj1aptaumBztQ&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;前文已经讲了便宜 &lt;code&gt;.xyz&lt;/code&gt; 域名、Cloudflare NS、DNS、DDNS、企业邮箱这些基础配置。本文不再重复“怎么把域名接入 Cloudflare”，而是假设你已经有一个在 Cloudflare 托管的域名，然后继续讲：如何用 Cloudflare Tunnel 给内网服务开一个公网 HTTPS 入口。&lt;/p&gt;&#xA;&lt;p&gt;本文所有示例都使用 &lt;code&gt;example.xyz&lt;/code&gt;、&lt;code&gt;nas.speedtest.example.xyz&lt;/code&gt;、&lt;code&gt;192.0.2.10&lt;/code&gt;、&lt;code&gt;localhost&lt;/code&gt;、&lt;code&gt;&amp;lt;TUNNEL_TOKEN&amp;gt;&lt;/code&gt; 这类文档占位符，不包含真实域名、真实账号、真实 Token、真实 Zone ID、真实内网地址或任何私有信息。你照着做时，把占位符替换成自己的域名和服务地址即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gemini 3.5 不只是更快：Google I/O 把 AI 战场推向“会干活的代理”</title>
      <link>https://blog.margrop.net/post/google-io-2026-gemini-35-agent-era/</link>
      <pubDate>Wed, 20 May 2026 07:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/google-io-2026-gemini-35-agent-era/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Google I/O 2026 这次最值得关注的，不是又多了一个聊天模型，而是 Google 把 Gemini 3.5 明确推向了“行动层”：首发的 Gemini 3.5 Flash 已经进入 Gemini App、Search AI Mode、Google Antigravity、Gemini API、Android Studio、Gemini Enterprise Agent Platform 和 Gemini Enterprise。Google 官方给出的关键词是 &lt;strong&gt;frontier intelligence with action&lt;/strong&gt;，翻译成人话就是：模型不只是回答你，而是要在工具、代码、文件、搜索、企业流程里替你连续干活。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文只整理 Google 官方公开资料和公开大会信息，并在此基础上做行业影响分析。文中图片均来自 Google 官方博客公开配图，未包含任何个人账号、内部网络、密钥、私有系统截图或非公开信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>上海电信用户别错过：0元领 2500 万 Token，有效期 1 个月</title>
      <link>https://blog.margrop.net/post/shanghai-telecom-free-25m-ai-token/</link>
      <pubDate>Mon, 18 May 2026 15:08:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/shanghai-telecom-free-25m-ai-token/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你是上海电信用户，现在可以 0 元领取一份 &lt;strong&gt;2500 万 Token 的 AI STORE 天翼智能推理服务产品额度版&lt;/strong&gt;，有效期 31 天，约 1 个月。入口来自上海电信微信公众号文章，我自己已经实测领取成功，成功后会收到中国电信短信，提示订购的 &lt;code&gt;AI STORE天翼智能推理服务产品额度版（一次性）&lt;/code&gt; 已立即生效。&lt;/p&gt;&#xA;&lt;p&gt;领取地址：&lt;a href=&#34;https://emall.sh.189.cn/stock/#/weChat/junior/handle/113238?cx=YUELIN&#34;&gt;https://emall.sh.189.cn/stock/#/weChat/junior/handle/113238?cx=YUELIN&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文只整理公开领取入口、操作提醒和来源说明，不包含手机号、账号、短信完整个人信息、内网地址或任何私密配置。活动具有时效性，能不能领到以你打开页面时上海电信官方页面显示为准。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新电脑 Bitwarden 登不上，旧电脑却正常：一次 Vaultwarden 版本兼容坑的完整复盘</title>
      <link>https://blog.margrop.net/post/chrome-bitwarden-vaultwarden-login-failure-prelogin/</link>
      <pubDate>Mon, 18 May 2026 10:05:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/chrome-bitwarden-vaultwarden-login-failure-prelogin/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次问题表面上看是“新安装的 Chrome + Bitwarden 扩展登录失败”，但根因并不在 Chrome，也不是账号密码输错，而是 &lt;strong&gt;Bitwarden 2026.4.1 客户端登录流程调用了新的 prelogin 接口，而自建 Vaultwarden 服务端还停留在 &lt;code&gt;1.35.4-alpine&lt;/code&gt;，缺少 &lt;code&gt;/identity/accounts/prelogin/password&lt;/code&gt; 接口&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;旧电脑之所以还能用，是因为它大概率已有登录态和本地缓存，并没有重新触发完整的首次登录流程。真正的修复不是反复重装浏览器，而是先备份，再把 Vaultwarden 升级到 &lt;code&gt;1.36.0&lt;/code&gt; 或更新版本，然后用日志确认新接口不再 404。&lt;/p&gt;&#xA;&lt;p&gt;本文所有域名、路径、账号、部署目录均已脱敏，示例中统一使用 &lt;code&gt;vault.example.com&lt;/code&gt;、&lt;code&gt;/opt/vaultwarden&lt;/code&gt; 等占位值，不包含任何内网地址或私人信息。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>「标题党预警」换个国内镜像源，竟让我踩了这么大一个坑：Ubuntu 26.04 apt 依赖冲突全记录</title>
      <link>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-dependency-conflict-fix/</link>
      <pubDate>Sun, 17 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-26-apt-source-mirror-dependency-conflict-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;换了个国内镜像源，本以为 10 分钟搞定的事，结果折腾了两个小时。本文记录了从「镜像同步延迟导致版本撕裂」到「dpkg 强制降级」再到「apt 完全恢复正常」的全过程。核心教训：镜像源不是换上去就完事了，版本一致性才是关键。如果你的系统用了大半年突然换源，99% 会遇到依赖冲突。&lt;/p&gt;&#xA;&lt;p&gt;本文所有操作基于 Ubuntu 26.04 (Plucky)，所有 IP、主机名、路径均为脱敏示例，不包含任何内网地址或敏感信息。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>百度网盘别只会拖拽：BaiduPCS-Go CLI 和 Agent 自动化实战</title>
      <link>https://blog.margrop.net/post/baidupcs-go-cli-agent-guide/</link>
      <pubDate>Sat, 16 May 2026 10:06:01 +0800</pubDate>
      <guid>https://blog.margrop.net/post/baidupcs-go-cli-agent-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你只是偶尔从百度网盘下载一两个文件，网页和官方客户端当然够用。但只要你开始批量下载、服务器拉取、自动备份、远程归档、目录巡检，或者希望让 Codex、Claude、OpenClaw、HermesAgent 这类 Agent 帮你处理网盘任务，图形界面很快就会变成阻碍。&lt;code&gt;BaiduPCS-Go&lt;/code&gt; 的价值不是“神奇提速”，而是把百度网盘变成一个可以被脚本、终端和 Agent 调度的文件系统入口。本文会从安装核验、BDUSS/STOKEN 登录、常用命令、配置策略、安全边界，一直讲到怎样把它交给 Agent 使用。&lt;/p&gt;&#xA;&lt;p&gt;本文所有账号、Cookie、路径、任务描述和配置均为脱敏示例，不包含任何真实 BDUSS、STOKEN、Cookie、内网地址、私人目录或业务信息。请不要把自己的登录凭据写进公开仓库、博客、截图、聊天记录或 Agent 提示词正文。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>80元十年域名买完后，下一步就交给 Cloudflare</title>
      <link>https://blog.margrop.net/post/cloudflare-domain-dns-ddns-email-agent/</link>
      <pubDate>Wed, 13 May 2026 08:46:06 +0800</pubDate>
      <guid>https://blog.margrop.net/post/cloudflare-domain-dns-ddns-email-agent/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;便宜域名买完只是第一步。真正能把这个域名玩起来的地方，是把它接到 Cloudflare：DNS 解析、动态 DDNS、企业邮箱验证、邮件转发、证书自动化、甚至让 OpenClaw / HermesAgent 这类 Agent 通过受限 API Token 帮你维护复杂配置，都可以从这里开始。前文已经讲了如何购买最便宜的 &lt;code&gt;10 年 80 元&lt;/code&gt; 左右的 &lt;code&gt;.xyz&lt;/code&gt; 域名，本文就接着讲：买完以后，怎么把它交给 Cloudflare 这个“互联网大善人”，并且尽量少走弯路。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文所有截图和示例都使用 &lt;code&gt;example.xyz&lt;/code&gt;、&lt;code&gt;203.0.113.10&lt;/code&gt;、&lt;code&gt;2001:db8::10&lt;/code&gt; 这类公开文档占位符，不包含真实域名、真实 IP、Cloudflare 账号、Zone ID、API Token 或任何内网信息。你照着做时，把占位符替换成自己的域名和服务地址即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>别再远程桌面点点点：让 AI Agent 用 SSH 直接接管 Windows</title>
      <link>https://blog.margrop.net/post/agent-ssh-windows-openssh/</link>
      <pubDate>Wed, 13 May 2026 08:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/agent-ssh-windows-openssh/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;让 AI Agent 从 Linux 或 macOS 管理 Windows，并不一定要走远程桌面、VNC、商业远控软件，也不一定要额外装一套奇怪的 Agent Runtime。对大多数个人工作站、实验机、开发机和内网服务器来说，最简单、最干净、最容易被自动化工具理解的方案，就是在 Windows 上启用系统自带的 &lt;strong&gt;OpenSSH Server&lt;/strong&gt;，然后从 Linux/macOS 直接执行：&lt;code&gt;ssh &amp;lt;user&amp;gt;@&amp;lt;windows-host&amp;gt;&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;真正需要做好的只有三件事：第一，Win10 / Win11 正确安装并启动 OpenSSH Server；第二，在 Linux/macOS 生成 SSH key，把公钥放到 Windows 对应位置；第三，如果登录用户属于 Windows 管理员组，要把公钥写入 &lt;code&gt;C:\ProgramData\ssh\administrators_authorized_keys&lt;/code&gt;，并用 &lt;code&gt;icacls&lt;/code&gt; 收紧权限。完成以后，AI Agent 就可以像操作 Linux 一样，用 SSH 在 Windows 上执行 PowerShell、复制脚本、读取日志、安装工具和做自动化运维。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文所有命令、截图和主机信息都使用通用占位符，不包含真实内网地址、真实用户名、真实机器名、密钥、Token 或私人路径。你只需要把 &lt;code&gt;&amp;lt;user&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;windows-host&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;windows-ip&amp;gt;&lt;/code&gt; 这类占位符替换成自己的环境值即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>80 块买十年：个人建站域名，为什么我会优先看 6 位数字 .xyz</title>
      <link>https://blog.margrop.net/post/low-cost-xyz-domain-for-personal-labs/</link>
      <pubDate>Tue, 12 May 2026 19:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/low-cost-xyz-domain-for-personal-labs/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你的主要用途是家庭自用、个人测试、临时 Demo、本地服务外部回调、开发环境验证，而不是企业官网、正式品牌、长期公开产品，那么我会优先推荐低成本 &lt;code&gt;.xyz&lt;/code&gt; 域名，尤其是国内平台上经常能看到的 6 位数以上纯数字 &lt;code&gt;.xyz&lt;/code&gt;。以腾讯云域名注册页面实际结算价为准，某些 6 位数以上纯数字 &lt;code&gt;.xyz&lt;/code&gt; 组合可以做到首年和续费都很低，按 8 元/年理解，一次买 10 年也就是 80 元。这不是“最体面”的域名方案，但对个人实验室来说，它往往是最不折腾、最便宜、也最够用的方案。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章只讨论非正式建站和个人用途。公司品牌、商业项目、公开产品、需要长期传播的站点，不建议只因为便宜就选一串数字域名。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;很多人第一次折腾个人站点、家庭实验室、NAS 回调、Webhook、临时 API、测试面板时，都会卡在一个很不起眼的问题上：到底要不要买域名，买什么域名。&lt;/p&gt;&#xA;&lt;p&gt;我自己的建议很简单：如果这是一个严肃品牌，域名应该认真挑；如果只是个人自用和测试环境，别把太多钱和精力浪费在名字上。域名在这类场景里的价值不是“好听”，而是给服务一个稳定入口，让 DNS、HTTPS、反向代理、证书续期、第三方回调、远程访问这些事情变得顺手。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 8 升 9 别硬刚：一句话交给 Agent，或者按这份清单手工升级</title>
      <link>https://blog.margrop.net/post/pve8-to-pve9-agent-manual-upgrade-guide/</link>
      <pubDate>Tue, 12 May 2026 19:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve8-to-pve9-agent-manual-upgrade-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Proxmox VE 8 升级到 9 的本质不是“复制几条命令”，而是一次 Debian Bookworm 到 Trixie、PVE 8.4 到 PVE 9.x、内核与存储网络组件一起变化的系统升级。最省时间的方式，是把检查、备份核对、日志记录、命令执行和升级后验证交给 Codex、Claude、OpenClaw、HermesAgent 这类 Agent；但涉及重启、仓库切换、包删除提示、配置文件覆盖提示时，仍然必须由人确认。想完全手工做也没问题，本文后半部分给出一套可以逐步执行的人工升级清单。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章写给两类人：一类是已经习惯让 Agent 管理机器，想用一句话把 PVE 8 到 9 的升级流程交给工具跑完；另一类是更喜欢自己敲命令，希望有一份顺序清楚、风险点明确、可以照着核对的手工操作稿。&lt;/p&gt;&#xA;&lt;p&gt;文中所有主机名、地址、仓库、token、账号都使用占位符，不包含任何真实内网信息。请把 &lt;code&gt;&amp;lt;PVE_NODE&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;BACKUP_TARGET&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;ADMIN_CONSOLE&amp;gt;&lt;/code&gt; 这类内容替换成你自己的环境。生产环境升级前，请以 Proxmox 官方文档为准，并先确认备份可以恢复。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Codex 0.130 后 /approvals 没了？别慌，权限开关都搬到启动参数了</title>
      <link>https://blog.margrop.net/post/codex-130-approval-flags/</link>
      <pubDate>Tue, 12 May 2026 18:50:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/codex-130-approval-flags/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你升级到 Codex 0.130.0（很多人会口头叫 Codex 0.130）之后，发现以前习惯在会话里用的 &lt;code&gt;/approvals&lt;/code&gt; 不见了，不要急着回退版本。现在更稳定的做法，是在启动 Codex 时就把权限策略说清楚：用 &lt;code&gt;--ask-for-approval&lt;/code&gt; 控制什么时候询问，用 &lt;code&gt;--sandbox&lt;/code&gt; 控制命令能操作哪些文件，确实处在外部隔离环境里时，再使用 &lt;code&gt;--dangerously-bypass-approvals-and-sandbox&lt;/code&gt; 一次性跳过确认和沙箱。这个长参数也可以直接写成 &lt;code&gt;--yolo&lt;/code&gt;，更方便记忆和输入，也更接近 Gemini 等工具里常见的命名习惯。&lt;/p&gt;&#xA;&lt;p&gt;换句话说，思路从“进会话后再临时切权限”，变成“启动前就选择运行档位”。这篇文章会把常用参数、推荐组合、风险边界和 shell alias 写法一次讲清楚。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文只讨论公开的 Codex CLI 参数和通用工作流，不包含任何真实主机、内网地址、用户名、Token、私有路径或业务项目名。所有命令都用 &lt;code&gt;&amp;lt;PROJECT&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;TASK&amp;gt;&lt;/code&gt; 这类占位符表示，你可以按自己的环境替换。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 26.04 升级别乱按：Agent 一句话托管，人工路线也一次讲透</title>
      <link>https://blog.margrop.net/post/ubuntu-2604-upgrade-agent-manual-guide/</link>
      <pubDate>Tue, 12 May 2026 07:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2604-upgrade-agent-manual-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ubuntu 22.04 / 24.04 升级到 26.04，最重要的不是记住某一条命令，而是先搞清楚升级路径。22.04 LTS 不能直接跳到 26.04 LTS，必须先升级到 24.04 LTS，再从 24.04 LTS 进入 26.04 LTS。并且截至 2026-05-12，Ubuntu 26.04 LTS 虽然已经正式发布，但 24.04 LTS 到 26.04 LTS 的常规 LTS 升级提示通常要等 26.04.1 之后才会面向普通 LTS 用户开放；官方计划里的 26.04.1 Point Release 日期是 2026-07-09。生产机器建议等常规升级路径打开，测试机或评估机才考虑显式使用提前升级参数。&lt;/p&gt;&#xA;&lt;p&gt;如果你已经在使用 Code、Claude、OpenClaw、HermesAgent 这类 Agent，完全可以用一句话把升级任务交出去，让它先做检查、备份、升级和验证，节省大量重复操作时间。但这句话不能只写“帮我升级 Ubuntu”，而要把安全边界、升级路径、备份、业务验证和回滚要求说清楚。本文会给出可以直接复制的 Agent 提示词，也会给出完全人工执行的步骤。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文不会出现任何真实主机名、内网地址、账号、密钥、Token、业务系统名称或私人路径。所有命令都使用通用占位符，例如 &lt;code&gt;&amp;lt;HOST&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;SERVICE&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;BACKUP_DIR&amp;gt;&lt;/code&gt;。你可以把它们替换成自己的环境值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】ImmortalWrt 旁路由安装与配置</title>
      <link>https://blog.margrop.net/post/zhuan-immortalwrt-pang-lu-you-install-config/</link>
      <pubDate>Mon, 11 May 2026 21:10:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/zhuan-immortalwrt-pang-lu-you-install-config/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;这篇文章转载自 Egg Targaryen 的《ImmortalWrt旁路由安装与配置》，原文采用 &lt;code&gt;CC BY-NC-SA 4.0&lt;/code&gt; 许可发布。本文保留原文的操作顺序与截图，并按本站排版做了轻微格式调整。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>国产小模型不稳定？别急着换模型，先给你的 Agent 装上 Superpowers</title>
      <link>https://blog.margrop.net/post/agent-superpowers-stable-output/</link>
      <pubDate>Thu, 07 May 2026 16:43:10 +0800</pubDate>
      <guid>https://blog.margrop.net/post/agent-superpowers-stable-output/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;很多 Agent 工作流里所谓“国产模型不稳定”，表面看是模型一会儿聪明、一会儿犯糊涂，真正落到工程现场，常常是两个问题叠在一起：一是模型本身参数规模、训练数据和工具调用稳定性确实不如顶级闭源大模型；二是 Agent 没有稳定的方法论和检查点，导致每一次任务都靠即时发挥。前者短期内不一定能解决，后者可以马上解决：给 OpenClaw、HermesAgent、Codex、Claude、Gemini、OpenCode 这类 Agent 安装一套可复用的 Skill 工作流，例如 Superpowers。&lt;/p&gt;&#xA;&lt;p&gt;Superpowers 不能把小模型“魔改”成大模型，也不能保证所有国产模型突然拥有顶级推理能力。它真正有价值的地方，是把 Agent 的行为从“靠灵感输出”拉回“按流程工作”：先澄清目标，再写设计，再拆计划，再测试，再审查，再验证。对参数较少、上下文保持能力较弱、输出波动较大的模型来说，这种外置流程约束往往比继续堆提示词更有效。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章想聊一个很现实的问题：当我们把 OpenClaw、HermesAgent、Codex、Claude、Gemini、OpenCode 乃至更多 Agent 放进日常工作流之后，为什么某些模型看起来特别不稳定？又为什么我会建议先安装 Superpowers 这样的 Skill，而不是第一反应就去换模型、加提示词、调温度或者把系统提示写成一篇论文。&lt;/p&gt;&#xA;&lt;p&gt;为了避免泄露任何隐私信息，本文所有环境、路径、主机、账号、项目名都使用通用示例，不包含真实内网地址、密钥、业务系统名称或个人配置。文中的命令也以官方公开文档和通用安装方式为准，实际使用前请结合你自己的 Agent 版本确认。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ProxmoxVE 添加 local-lvm 使用率监控、网线速率监控到 Uptime Kuma</title>
      <link>https://blog.margrop.net/post/proxmoxve-lvm-link-speed-uptime-kuma/</link>
      <pubDate>Tue, 05 May 2026 17:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmoxve-lvm-link-speed-uptime-kuma/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;ProxmoxVE 的 &lt;code&gt;local-lvm&lt;/code&gt; 不是一个普通挂载目录，很多时候不能靠 &lt;code&gt;df -h&lt;/code&gt; 发现它快满了；网口协商速率也不会因为服务还在线就自动暴露出来。最稳的办法是把这两个“容易被忽略但一出事就很麻烦”的指标接入现有 Uptime Kuma：&lt;code&gt;local-lvm&lt;/code&gt; 用 HTTP 拉取监控，网口速率用 Push 主动上报。这样磁盘池接近阈值、网线或交换机端口掉到百兆时，统一在 Uptime Kuma 页面和通知链路里告警。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文会从需求背景、原始方案的问题核查、改进后的脚本、systemd 服务、Uptime Kuma 配置、验证方法和安全边界讲完整。文中所有地址、token、主机名都使用占位符，不出现真实内网信息。你可以把示例里的 &lt;code&gt;&amp;lt;PVE_HOST&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;KUMA_URL&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;PUSH_TOKEN&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;INTERFACE&amp;gt;&lt;/code&gt; 替换成自己的环境值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何写提示词，让 OpenClaw、HermesAgent、Codex、Claude、Gemini、OpenCode、Droid 自动写文章并发布到微信公众号草稿箱</title>
      <link>https://blog.margrop.net/post/agent-prompt-wechat-draft-automation/</link>
      <pubDate>Tue, 05 May 2026 16:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/agent-prompt-wechat-draft-automation/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;想让 OpenClaw、HermesAgent、Codex、Claude、Gemini、OpenCode、Droid 这类 Agent 自动写文章、生成博客、转换微信公众号 HTML、检查预览效果，并最终把内容发布到微信公众号草稿箱，提示词不能只写“帮我发一篇文章”。真正有用的提示词要把目标、素材、路径、账号约束、网络白名单、检查项、失败回退、隐私边界和最终验收写清楚。Agent 才能从“写一段内容”升级成“完成一次可验证的发布流程”。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;本文整理一套可以复用的写法：如何准备微信公众号草稿箱 API，为什么固定 IP Linux 机器很重要，怎样让 Agent 先直连再走中转，如何使用 Markdown 到公众号 HTML 的转换器，如何让 Agent 检查白字白底、奇怪缩进、图片可访问性，最后如何把整条流程写进一段高质量提示词里。&lt;/p&gt;&#xA;&lt;p&gt;为了避免泄露任何私人环境信息，本文只使用占位符和抽象示例，不出现真实 AppSecret、内网地址、跳板机地址、仓库地址、主机名、token、cookie 或任何可定位到具体环境的配置。你可以把文中的占位符替换成自己的值，但不要把真实密钥写进公开文章、公开仓库或聊天截图。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给 OpenClaw / HermesAgent 集成群晖操作 SKILL：从一句话到可审计的 NAS 自动化</title>
      <link>https://blog.margrop.net/post/openclaw-hermesagent-synology-skill/</link>
      <pubDate>Tue, 05 May 2026 12:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-hermesagent-synology-skill/</guid>
      <description>&lt;p&gt;我之前已经整理过两篇偏“命令手册”风格的群晖文章：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.margrop.net/post/synology-ssh-commands/&#34;&gt;Synology 群晖 SSH 命令详解&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.margrop.net/post/synology-diskstation-cli-administration-guide/&#34;&gt;群晖 NAS CLI 管理指南&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这两篇文章解决的是“人知道有哪些命令可以用”的问题。本文想解决另一个更实际的问题：如果我已经在使用 OpenClaw / HermesAgent 这类 Agent 工具，能不能把这些群晖命令沉淀成一个操作 SKILL，让我以后用一句话就能让 Agent 帮我检查 NAS、整理状态、生成操作计划，甚至在确认后执行一些维护命令？&lt;/p&gt;&#xA;&lt;p&gt;我的答案是：可以，但不应该把它做成“Agent 拿到 root 权限以后随便跑”。正确的集成方式应该是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;让群晖 SSH 访问可控、可验证、可撤销。&lt;/li&gt;&#xA;&lt;li&gt;把常用群晖 CLI 操作写进 SKILL，让 Agent 知道可用命令、风险分级和输出格式。&lt;/li&gt;&#xA;&lt;li&gt;默认只允许只读诊断命令自动执行。&lt;/li&gt;&#xA;&lt;li&gt;对重启服务、修改权限、改用户、改网络、删除文件、存储相关操作设置确认门禁。&lt;/li&gt;&#xA;&lt;li&gt;每次执行后保留命令、输出和结论，方便回看和追责。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;如果你只想快速理解整篇文章，看下面这张图就够了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;OpenClaw / HermesAgent 集成群晖操作 SKILL 总览&#34; src=&#34;https://blog.margrop.net/post-images/openclaw-hermesagent-synology-skill/01-overview-handdrawn.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】群晖NAS CLI管理指南</title>
      <link>https://blog.margrop.net/post/synology-diskstation-cli-administration-guide/</link>
      <pubDate>Thu, 30 Apr 2026 18:20:04 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-diskstation-cli-administration-guide/</guid>
      <description>&lt;p&gt;本文档包含命令行工具，使应用程序能够利用群晖DiskStation上的资源，同时包含群晖错误代码参考列表。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】Synology DiskStation Administration CLI Guide 官方文档导读与命令速查</title>
      <link>https://blog.margrop.net/post/zhuan-synology-diskstation-administration-cli-guide/</link>
      <pubDate>Thu, 30 Apr 2026 18:14:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/zhuan-synology-diskstation-administration-cli-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Synology 这份官方 CLI 管理指南并不是一本面向普通 DSM 图形界面用户的入门手册，而是一份给脚本、自动化和系统集成场景准备的命令参考。它覆盖了 DSM 中最常见的几类管理动作：本地用户、本地群组、共享文件夹、网络配置、服务控制、工作组或 ADS 域设置，以及错误码查询。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章是基于 Synology 官方 PDF《CLI Administrator Guide for Synology NAS》整理的中文导读和命令速查。由于原 PDF 属于 Synology 官方版权文档，本文不会全文复制或逐段翻译原文，而是按博客阅读习惯重新组织成一份便于检索、理解和日常运维使用的双语整理稿。需要逐字核对参数定义、版本差异或法律声明时，请直接阅读文末的官方 PDF 来源。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】Synology群晖ssh命令详解</title>
      <link>https://blog.margrop.net/post/synology-ssh-commands/</link>
      <pubDate>Thu, 30 Apr 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-ssh-commands/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;注意：SSH运行以下命令可能会损毁你的系统/硬盘，如不清楚具体含义请不要随意执行！！！&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>OpenClaw / HermesAgent 的最佳归宿：Proxmox VE</title>
      <link>https://blog.margrop.net/post/openclaw-hermesagent-best-home-proxmoxve/</link>
      <pubDate>Wed, 29 Apr 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-hermesagent-best-home-proxmoxve/</guid>
      <description>&lt;h1 id=&#34;openclaw--hermesagent-的最佳归宿proxmox-ve&#34;&gt;OpenClaw / HermesAgent 的最佳归宿：Proxmox VE&lt;/h1&gt;&#xA;&lt;p&gt;如果只把 OpenClaw 或 HermesAgent 看成一个“能聊天的机器人”，那它装在哪里似乎都无所谓：实体机可以，VPS 可以，Docker 也可以，甚至日常用的笔记本也能跑起来。&lt;/p&gt;&#xA;&lt;p&gt;但只要它开始接入消息渠道、执行命令、读写文件、调用浏览器、保存长期记忆、定时跑任务，这个问题就不再是“能不能安装”，而是“它应该被放进什么样的运行边界里”。&lt;/p&gt;&#xA;&lt;p&gt;我的结论很明确：&lt;strong&gt;OpenClaw / HermesAgent 这类长期运行的个人智能体，最稳妥的归宿不是直接装在实体机上，而是安装在 Proxmox VE 里的专用虚拟机中。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这里的重点不是 PVE 有多高级，而是它刚好解决了智能体运行时最难缠的三件事：数据隔离、计算资源隔离、备份与恢复。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一次 tmux &#43; opencode 中文变下划线的排障：不是字体坏了，而是 client_utf8=0</title>
      <link>https://blog.margrop.net/post/tmux-opencode-chinese-underscore-fix/</link>
      <pubDate>Tue, 28 Apr 2026 18:40:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/tmux-opencode-chinese-underscore-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次问题不是 opencode 不支持中文，也不是终端字体突然坏了，而是 tmux 当前 client 被判定为“不支持 UTF-8”。证据是 &lt;code&gt;tmux display-message -p &#39;client_utf8=#{client_utf8}&#39;&lt;/code&gt; 返回了 &lt;code&gt;client_utf8=0&lt;/code&gt;。在这种状态下，tmux 会把非 ASCII 字符替换成下划线，所以中文在 opencode 的 TUI 里看起来就像全部变成了 &lt;code&gt;_&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章记录一次很小、但很典型的终端排障：同一台 Mac 上，直接运行 &lt;code&gt;opencode&lt;/code&gt; 时中文显示正常；先进入 tmux，再运行 &lt;code&gt;opencode&lt;/code&gt;，中文就全部变成下划线。&lt;/p&gt;&#xA;&lt;p&gt;这种问题非常容易误判。第一反应通常是怀疑字体、终端模拟器、opencode 版本、主题、Nerd Font、宽字符宽度，甚至怀疑是不是某个 TUI 框架把 CJK 字符处理坏了。但这次真正的关键点只有一个：&lt;strong&gt;tmux 自己是否愿意把 UTF-8 字符写回外层终端。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;为了不泄露任何私人环境信息，下面的命令输出都做了抽象化处理，不包含真实主机名、内网地址、会话名、密钥、账号或项目路径。保留的只有与问题本身有关的技术事实。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 虚拟机创建与 Ubuntu 26.04 无人值守安装实战笔记</title>
      <link>https://blog.margrop.net/post/pve-vm-create-and-ubuntu-26-unattended-install/</link>
      <pubDate>Sat, 25 Apr 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-vm-create-and-ubuntu-26-unattended-install/</guid>
      <description>&lt;h1 id=&#34;proxmox-ve-虚拟机创建与-ubuntu-2604-无人值守安装实战笔记&#34;&gt;Proxmox VE 虚拟机创建与 Ubuntu 26.04 无人值守安装实战笔记&lt;/h1&gt;&#xA;&lt;p&gt;在日常的服务器运维工作中，虚拟机的创建与系统安装是最基础也是最频繁的操作之一。传统的通过 VNC 或 IPMI 进行交互式安装虽然直观，但效率低下，特别是在需要批量部署多台服务器时。本文将详细介绍如何利用 Proxmox VE（以下简称 PVE）平台，结合 Cloud-init 技术，实现 Ubuntu 26.04 Server 版本的无人值守自动化安装。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给 NAS 挂上 speedtest 子域名，为什么有时能快一大截？</title>
      <link>https://blog.margrop.net/post/nas-speedtest-subdomain-acceleration/</link>
      <pubDate>Fri, 24 Apr 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/nas-speedtest-subdomain-acceleration/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果你家里的 NAS 外网访问一直被限速，而你又恰好能控制自己的域名和反代入口，那么把入口子域名改成带 &lt;code&gt;speedtest&lt;/code&gt; 的形式，确实有机会明显改善体验。&lt;br&gt;&#xA;这不是魔法，也不是绝对规则，更像是命中了某些运营商对“测速相关流量”的放行或弱限制策略。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;我参考了飞牛私有云论坛上的一篇讨论，原帖的核心观点很直接：家庭宽带有时会对普通外网访问做比较明显的策略性限速，但如果访问目标在域名里带了 &lt;code&gt;speedtest&lt;/code&gt;，链路表现就可能突然变得宽松很多。本文不复述那篇帖子里的口吻，而是把这个思路整理成一篇更适合长期保存的博客笔记，重点回答三个问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;这个办法为什么可能有效&lt;/li&gt;&#xA;&lt;li&gt;具体应该怎么落地&lt;/li&gt;&#xA;&lt;li&gt;什么情况下它不会生效，或者不值得折腾&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>【转】谷歌云永久免费云服务器，2核1g内存30g硬盘，200g流量/月</title>
      <link>https://blog.margrop.net/post/google-cloud-free-vm-repost/</link>
      <pubDate>Mon, 20 Apr 2026 08:28:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/google-cloud-free-vm-repost/</guid>
      <description>&lt;h1 id=&#34;转谷歌云永久免费云服务器2核1g内存30g硬盘200g流量月&#34;&gt;【转】谷歌云永久免费云服务器，2核1g内存30g硬盘，200g流量/月&lt;/h1&gt;&#xA;&lt;section style=&#34;margin-bottom: 40px;line-height: 1.6em;&#34;&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;之前介绍了几个免费的云服务器，那其实海外三大云服务商（谷歌、亚马逊、微软）都是有自己的免费服务器，只是后面两个都是限时，不好玩，谷歌除了能试用三个月正价机器，还有个永久免费的小鸡，&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;2核1g内存30g硬盘，200g流量/月，玩一玩还是可以的。&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;section style=&#34;margin-bottom: 24px;line-height: 1.6em;&#34;&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;font-size: 20px;letter-spacing: 0.5px;color: rgb(0, 128, 255);font-weight: bold;&#34;&gt;一、谷歌云&amp;amp;试用&amp;amp;免费&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;section style=&#34;margin-bottom: 24px;line-height: 1.6em;&#34;&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;谷歌云，顾名思义就是谷歌做的云服务器。现在谷歌云的试用是只有三个月，好像是300美元额度，买正价机器一下子就用完了，所以，不如玩免费服务器。&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;section style=&#34;margin-bottom: 24px;line-height: 1.6em;&#34;&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;本篇不涉及谷歌云注册以及试用那些，这玩意有谷歌账号的都能注册，没啥难度，而且我好几年前就注册过了，具体细节早就不记得，不知道的自行谷歌，就算是新账户还在试用中也不影响本文试用免费实例。&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;&lt;section style=&#34;margin-bottom: 24px;line-height: 1.6em;&#34;&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;主要是谷歌云的免费服务器，谷歌云给了对应地区的免费配额，&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;俄勒冈、爱荷华、南卡罗来纳的&lt;/span&gt;&lt;/span&gt;&lt;span leaf=&#34;&#34;&gt;&lt;span textstyle=&#34;&#34; style=&#34;letter-spacing: 0.5px;&#34;&gt;e2-micro实例，2核cpu+1g内存+30g硬盘，带公网ipv4，每个月200g流量，这个流量是不限地区的，有人会说图片内不是写着“每月 1 GB出站流量吗”，是的，首先谷歌云是只计算出站流量，而非双向流量，其次图内的这个免费1g流量是“高级层级”，而非“标准层级”的流量，高级层级要比标准层级网络质量好一点，当然也仅限于好一点（虽然以前不是），而标准层级是全球200g流量。&lt;/span&gt;&lt;/span&gt;&lt;/section&gt;</description>
    </item>
    <item>
      <title>OpenClaw 备份失效排查与修复实录：从两个机器同时失效到自动备份彻底恢复</title>
      <link>https://blog.margrop.net/post/openclaw-backup-failure-investigation-and-fix/</link>
      <pubDate>Mon, 13 Apr 2026 09:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-backup-failure-investigation-and-fix/</guid>
      <description>&lt;p&gt;我把这次问题写成一篇完整的复盘，不是因为它足够戏剧化，而是因为它足够典型。&lt;/p&gt;&#xA;&lt;p&gt;这次出问题的不是一个单点，而是两台机器的自动备份同时失效：一台是本地的 macOS 机器，一台是远程的 VPS。两边手动执行都可以成功，备份文件也能写到 NAS，但只要放回定时任务，结果就会变得不稳定，甚至直接失败。表面看像是“定时器没触发”，实际上真正的问题分布在调度、权限、锁、日志、以及验证方式几个不同层面。&lt;/p&gt;&#xA;&lt;p&gt;对我来说，这类故障最麻烦的地方，不在于它有多难修，而在于它会制造一种很强的错觉：每一部分单独看都像没坏，拼到一起却就是不工作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker 容器太多导致网段冲突：把自动分配网络统一迁回 172 私有段的完整记录</title>
      <link>https://blog.margrop.net/post/docker-network-subnet-conflict-migration-record/</link>
      <pubDate>Mon, 13 Apr 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-network-subnet-conflict-migration-record/</guid>
      <description>&lt;p&gt;这篇文章记录的是一次很典型、也很容易被忽略的 Docker 网络故障：容器越来越多，Docker 自动分配出来的 user-defined bridge 网段，最后落进了 &lt;code&gt;192.168.x.x&lt;/code&gt;，并且和家里的真实局域网发生了冲突。问题本身不算复杂，但它有一个很讨厌的特点：它不是那种“容器起不来”或者“端口没映射”的显性错误，而是把整个家庭网络拖进一个很别扭的半瘫痪状态。&lt;/p&gt;&#xA;&lt;p&gt;当时在我的 NAS 上，家里部分设备开始出现访问异常。表面上看，像是某个设备离线，或者某个交换机、AP、路由器出了毛病；但我沿着 Docker 的网络一路排查下去后，最终确认，真正的根因不是单个容器坏了，而是 Docker 网络池的自动分配策略，已经把局域网挤到了一个危险的位置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 WoClaw 解决多智能体共享记忆：让 OpenClaw、Codex、Claude、Gemini 站在同一张桌子上</title>
      <link>https://blog.margrop.net/post/woclaw-shared-memory-for-openclaw-codex-claude-gemini/</link>
      <pubDate>Sun, 05 Apr 2026 20:10:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/woclaw-shared-memory-for-openclaw-codex-claude-gemini/</guid>
      <description>&lt;p&gt;我一直觉得，多智能体系统最难的不是“谁更聪明”，而是“谁还记得上一次已经讨论到哪里了”。&lt;/p&gt;&#xA;&lt;p&gt;当你把 OpenClaw、OpenAI Codex、Claude、Gemini 这些工具放进同一个工作流里，最容易出现的问题并不是回答质量不够，而是上下文开始分叉：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;OpenClaw 记住了调度顺序，Codex 记住了代码细节，Claude 记住了讨论结论，Gemini 记住了背景资料，但它们彼此并不知道对方知道什么。&lt;/li&gt;&#xA;&lt;li&gt;每个工具都有自己的会话生命周期，今天说过的话，明天可能就不在同一个上下文里了。&lt;/li&gt;&#xA;&lt;li&gt;一旦项目进入“多人、多轮、多工具”的阶段，重复解释背景会比真正解决问题更耗时。&lt;/li&gt;&#xA;&lt;li&gt;如果没有统一的记忆层，最后你得到的不是协作，而是几份彼此相似、又彼此不兼容的局部答案。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这篇文章想讲的就是：我怎么用 WoClaw 把这些工具拉到同一套共享记忆里，让它们从“各说各话”变成“围着同一份状态协作”。&lt;/p&gt;&#xA;&lt;p&gt;为了避免泄露任何隐私信息，下面所有例子都做了抽象处理，不包含真实机器名、账号、地址、密钥和内部项目代号。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clawd Code 架构速读版：用一页纸看懂 Python-first 重写工作区</title>
      <link>https://blog.margrop.net/post/clawd-code-architecture-quick-read/</link>
      <pubDate>Tue, 31 Mar 2026 21:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/clawd-code-architecture-quick-read/</guid>
      <description>&lt;p&gt;&lt;code&gt;margrop/clawd-code&lt;/code&gt; 的最新代码，已经不是“把泄露源码原样存起来”的那种仓库了。它现在是一个很明确的 &lt;strong&gt;Python-first porting workspace&lt;/strong&gt;：&lt;code&gt;src/&lt;/code&gt; 是活动实现，&lt;code&gt;tests/&lt;/code&gt; 负责验证，&lt;code&gt;archive/claude_code_ts_snapshot/&lt;/code&gt; 只是可选的本地归档，&lt;code&gt;src/reference_data/&lt;/code&gt; 才是命令和工具镜像的来源。&lt;/p&gt;&#xA;&lt;p&gt;如果上一版长文讲的是“怎么读源码”，这一版速读版只回答一个问题：&lt;strong&gt;这个工作区到底怎么分层？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/clawd-code-quick-overview.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Clawd Code 最新代码解析：一个 Python-first 的 Claude Code 重写工作区如何组织命令、工具、会话与审计</title>
      <link>https://blog.margrop.net/post/claude-code-daofa-tishu-source-code-analysis/</link>
      <pubDate>Tue, 31 Mar 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/claude-code-daofa-tishu-source-code-analysis/</guid>
      <description>&lt;p&gt;我重新看了 &lt;code&gt;margrop/clawd-code&lt;/code&gt; 的最新代码之后，得出的第一印象是：这仓库已经不再是“泄露源码镜像”的延续叙事了，而是一个明确的 &lt;strong&gt;Python-first porting workspace&lt;/strong&gt;。它的 tracked tree 里，&lt;code&gt;src/&lt;/code&gt; 是活动实现，&lt;code&gt;tests/&lt;/code&gt; 是验证层，&lt;code&gt;archive/claude_code_ts_snapshot/&lt;/code&gt; 是可选的本地归档，&lt;code&gt;src/reference_data/&lt;/code&gt; 则保存了命令、工具和表面覆盖率的镜像数据。&lt;/p&gt;&#xA;&lt;p&gt;这意味着项目关注点变了。它不再只问“原始 Claude Code 是怎么写的”，而是问：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;旧系统的结构能不能被重新组织成更清晰的 Python 工程；&lt;/li&gt;&#xA;&lt;li&gt;命令、工具、会话、权限和启动顺序能不能被显式建模；&lt;/li&gt;&#xA;&lt;li&gt;当前 porting workspace 到底覆盖到了旧体系的哪些边界；&lt;/li&gt;&#xA;&lt;li&gt;哪些部分只是镜像，哪些部分还只是骨架，哪些部分已经能跑出可读的 runtime 报告。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;从这个角度看，这个仓库更像一套“重建中的工程系统”，而不是“保存原样的源码档案”。这也是我把这篇文章重新更新的原因。上一版文章仍然围绕旧快照本体，这一版必须围绕最新的 Python porting 工作区本身来写。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/clawd-code-architecture-2026.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>给 macOS 上的 Antigravity 和 Claude 增加 Proxy：用 Wrapper App 安全接管 Electron 出网</title>
      <link>https://blog.margrop.net/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</link>
      <pubDate>Wed, 25 Mar 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-electron-app-proxy-wrapper-for-antigravity-and-claude/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&#xA;这篇文章记录一种我已经在本机验证过的办法：&lt;strong&gt;不要直接修改原始应用包，也不要把真实代理地址写死到公开文章里，而是给 Electron 应用外面再包一层极小的 wrapper app&lt;/strong&gt;。这样既能给 Antigravity、Claude 这类 macOS 桌面应用注入代理，又不会轻易破坏原始签名、升级链路和回滚路径。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;很多人第一次遇到这个问题时，第一反应都是去改 &lt;code&gt;/Applications/Claude.app&lt;/code&gt; 或 &lt;code&gt;/Applications/Antigravity.app&lt;/code&gt; 里面的内容。短期看似乎可行，但长期通常会带来三个问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;应用签名可能失效，后续启动、权限申请和升级都更脆弱。&lt;/li&gt;&#xA;&lt;li&gt;一旦原应用自动更新，你手工改过的内容很容易被覆盖。&lt;/li&gt;&#xA;&lt;li&gt;真实代理地址、内网 IP、鉴权信息如果直接写进应用包或公开文档，后果通常比“配置没生效”更严重。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;我最后采用的是一个更稳的方案：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;保留原始 &lt;code&gt;Claude.app&lt;/code&gt; 和 &lt;code&gt;Antigravity.app&lt;/code&gt; 不动。&lt;/li&gt;&#xA;&lt;li&gt;在 &lt;code&gt;~/Applications&lt;/code&gt; 下创建 &lt;code&gt;Claude (Proxy).app&lt;/code&gt; 和 &lt;code&gt;Antigravity (Proxy).app&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;wrapper app 只做三件事：加载本地 &lt;code&gt;proxy.env&lt;/code&gt;、导出大小写代理环境变量、用 &lt;code&gt;--proxy-server&lt;/code&gt; 启动原始 Electron 应用。&lt;/li&gt;&#xA;&lt;li&gt;如果应用内部还用了 Node/undici 的 &lt;code&gt;fetch&lt;/code&gt;，再通过 &lt;code&gt;NODE_OPTIONS=--require=...&lt;/code&gt; 注入一个极小的 bootstrap，把代理继续传到 Node 侧请求链路。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;本文中的所有代理地址都用占位符表示，例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http://127.0.0.1:PORT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请把它替换成你自己的本地代理入口，&lt;strong&gt;不要把真实代理地址、内网 IP、用户名、密码、Token 或公司域名发布到公开文章、仓库或截图里&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>把 OpenClaw 升级到 2026.3.23-2：一次真实的兼容性升级记录与排障手册</title>
      <link>https://blog.margrop.net/post/openclaw-upgrade-to-2026-3-23-compatibility-playbook/</link>
      <pubDate>Tue, 24 Mar 2026 21:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openclaw-upgrade-to-2026-3-23-compatibility-playbook/</guid>
      <description>&lt;p&gt;这篇文章记录一次真实的 OpenClaw 升级过程：目标不是“把版本号改上去”这么简单，而是在&lt;strong&gt;多节点、不同安装形态、外部插件较多&lt;/strong&gt;的情况下，把 OpenClaw 从 &lt;code&gt;2026.3.8 / 2026.3.13&lt;/code&gt; 这一代稳定升级到 &lt;code&gt;2026.3.23-2&lt;/code&gt;，同时尽量保证既有消息通道、插件、服务方式、回滚路径都可控。&lt;/p&gt;&#xA;&lt;p&gt;我最终采用的是“&lt;strong&gt;先评估，再金丝雀，再复制已验证产物&lt;/strong&gt;”的策略。升级过程里真正棘手的部分，不是 OpenClaw 核心包本身，而是&lt;strong&gt;插件 SDK 兼容性、JIT 缓存、混合安装路径、边缘节点出网失败、以及不同服务绑定策略对探测命令的影响&lt;/strong&gt;。这些问题如果不提前识别，线上升级很容易看起来“版本成功了”，实际上通道已经半瘫痪。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE 中给 Ubuntu 虚拟机扩容磁盘——从 Web 界面到系统内部的完整操作</title>
      <link>https://blog.margrop.net/post/pve-ubuntu-vm-disk-resize/</link>
      <pubDate>Mon, 23 Mar 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-ubuntu-vm-disk-resize/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&#xA;在使用 Proxmox VE 管理虚拟化环境时，磁盘空间不足是迟早会遇到的问题。也许是一台跑 Docker 的 Ubuntu 镜像越拉越多，也许是数据库日志把根分区撑满了——总之，扩容是 PVE 运维的必修课。本文从 PVE Web 界面的磁盘 Resize 开始，到 Ubuntu 虚拟机内部 LVM 扩容的每一步命令，手把手带你完成整个流程。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-为什么需要扩容&#34;&gt;1 为什么需要扩容？&lt;/h2&gt;&#xA;&lt;p&gt;PVE 创建虚拟机时通常会分配一个固定大小的虚拟磁盘（比如 32GB）。随着业务发展，这个空间可能不够用了。好在 PVE 支持在线扩容虚拟磁盘，而 Ubuntu 默认安装使用的 LVM 也天然支持动态扩展逻辑卷，两者配合非常方便。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenClaw 接入 MiniMax 一个月总结：稳定、够快，真正有价值的是可持续</title>
      <link>https://blog.margrop.net/post/minimax-openclaw-one-month-review/</link>
      <pubDate>Thu, 19 Mar 2026 10:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/minimax-openclaw-one-month-review/</guid>
      <description>&lt;p&gt;过去一个月，我持续用 MiniMax 作为 OpenClaw 的主模型，覆盖了日常巡检、连接排障、健康检查、安全加固、定时任务治理和博客辅助写作等一整套自动化流程。回头看，这次实践最大的收获并不是“AI 能替我做多少事”，而是我逐渐确认了一个更现实的判断：对于 OpenClaw 这类要长期运行、要和工具链打配合、还要处理大量中文上下文的系统来说，模型最重要的不是纸面能力，而是稳定性、响应速度、接入成本和长期可维护性之间的平衡。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个超实用技巧：无需会员，把语雀文档一键导出成 Markdown</title>
      <link>https://blog.margrop.net/post/yuque-url-export-markdown-without-member/</link>
      <pubDate>Fri, 06 Mar 2026 16:56:43 +0800</pubDate>
      <guid>https://blog.margrop.net/post/yuque-url-export-markdown-without-member/</guid>
      <description>&lt;p&gt;很多人会在语雀里写技术文档、产品说明或读书笔记，但真正要迁移到博客（Hugo、Hexo、Jekyll）或者同步到 Git 仓库时，最头疼的一步往往是“怎么拿到干净的 Markdown”。如果你也遇到过这个问题，这里分享一个我长期在用的小技巧：&lt;strong&gt;不需要开通会员，不需要安装插件，直接改 URL 就能拿到完整 Markdown 内容&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/yuque-markdown-url-trick.svg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenAI GPT-5.4 全面解读：定位、能力、成本与落地实践（截至 2026-03-06）</title>
      <link>https://blog.margrop.net/post/openai-gpt-5-4-introduction-2026/</link>
      <pubDate>Fri, 06 Mar 2026 08:20:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openai-gpt-5-4-introduction-2026/</guid>
      <description>&lt;p&gt;2026 年 3 月 5 日，OpenAI 正式发布 GPT-5.4。很多人第一反应是：这到底是一次“小版本升级”，还是一次会影响实际生产力结构的能力跃迁？&lt;/p&gt;&#xA;&lt;p&gt;如果只看命名，5.4 像是 5.2、5.3 之后的顺序迭代；但如果结合官方发布内容、模型文档、API 能力矩阵和 ChatGPT 侧的产品变化来看，GPT-5.4 的核心价值并不在“参数大了多少”，而在于它把三条线真正收敛到了一个更可用的中心点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;推理能力（reasoning）&lt;/li&gt;&#xA;&lt;li&gt;编程与工程落地能力（coding + agentic workflows）&lt;/li&gt;&#xA;&lt;li&gt;工具生态协同能力（tooling + computer use）&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>SSH 密钥算法 Ed25519 与 RSA 的前世今生，以及今天该怎么用</title>
      <link>https://blog.margrop.net/post/ssh-ed25519-and-rsa-history-and-best-practices/</link>
      <pubDate>Mon, 02 Mar 2026 09:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ssh-ed25519-and-rsa-history-and-best-practices/</guid>
      <description>&lt;p&gt;很多人第一次接触 SSH，都是从一行命令开始的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh-keygen -t rsa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这条命令并没有错，但它背后有一个经常被忽略的问题：&#xA;我们讨论的到底是“RSA 这种密钥类型”，还是 &lt;code&gt;ssh-rsa&lt;/code&gt; 这种“签名算法”？&lt;/p&gt;&#xA;&lt;p&gt;这两个概念在很多旧教程里被混用，导致不少人一边以为自己“还在用老旧不安全方案”，一边又不知道怎么迁移，甚至在新系统和老设备之间反复踩坑。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章就把这件事讲清楚：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RSA 和 Ed25519 在 SSH 世界里是怎么一路走来的。&lt;/li&gt;&#xA;&lt;li&gt;为什么今天大家都在推荐 Ed25519。&lt;/li&gt;&#xA;&lt;li&gt;如果你线上还有一堆老机器，应该怎么稳妥迁移。&lt;/li&gt;&#xA;&lt;li&gt;2026 年这个时间点，个人和团队应该采用什么默认策略。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Gitalk 从 Gridea 迁移到 Hugo 后失效：完整排查与修复记录</title>
      <link>https://blog.margrop.net/post/gitalk-migration-from-gridea-to-hugo-complete-fix/</link>
      <pubDate>Sun, 01 Mar 2026 09:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/gitalk-migration-from-gridea-to-hugo-complete-fix/</guid>
      <description>&lt;h1 id=&#34;背景&#34;&gt;背景&lt;/h1&gt;&#xA;&lt;p&gt;博客从 &lt;code&gt;Gridea&lt;/code&gt; 全量迁移到 &lt;code&gt;Hugo&lt;/code&gt; 之后，页面可以正常访问，但评论区 &lt;code&gt;Gitalk&lt;/code&gt; 看起来无法正常工作：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;页面不报明显错误，但评论区不加载或不显示历史评论。&lt;/li&gt;&#xA;&lt;li&gt;同一篇历史文章没有关联到旧的 issue。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这篇文章记录一次完整的排查与修复过程，方便后续迁移同类站点时复用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何把 Gridea 完整迁移到 Hugo（含踩坑与修复）</title>
      <link>https://blog.margrop.net/post/how-to-migrate-gridea-to-hugo-completely/</link>
      <pubDate>Sat, 28 Feb 2026 21:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-migrate-gridea-to-hugo-completely/</guid>
      <description>&lt;p&gt;最近把博客从 &lt;code&gt;Gridea&lt;/code&gt; 迁移到了 &lt;code&gt;Hugo&lt;/code&gt;，看起来是“静态博客换框架”这么简单，实际上坑不少。&lt;br&gt;&#xA;这篇把整个过程完整记录下来，尤其是那些“迁完才发现”的问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【2025-08-21紧急】微软KB5063878补丁在特定情况下可能导致固态硬盘（SSD）和机械硬盘（HDD）出现故障</title>
      <link>https://blog.margrop.net/post/2025-08-2-mircosoft-kb5063878-hotfix-problems-windows-update/</link>
      <pubDate>Thu, 21 Aug 2025 16:40:49 +0800</pubDate>
      <guid>https://blog.margrop.net/post/2025-08-2-mircosoft-kb5063878-hotfix-problems-windows-update/</guid>
      <description>&lt;h1 id=&#34;微软kb5063878补丁在特定情况下可能导致固态硬盘ssd和机械硬盘hdd出现故障&#34;&gt;微软KB5063878补丁在特定情况下可能导致固态硬盘（SSD）和机械硬盘（HDD）出现故障&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;操作系统&lt;/strong&gt;: &lt;code&gt;Microsoft Windows 11&lt;/code&gt;&#xA;网络上已经有很多关于微软KB5063878补丁在特定情况下可能导致固态硬盘（SSD）和机械硬盘（HDD）出现故障的新闻了，详细的信息可以参考最下下面的新闻链接，这里就不再多阐述了，重点是如果我们遇到该问题，应该如何解决呢？&lt;/p&gt;&#xA;&lt;hr&gt;</description>
    </item>
    <item>
      <title>ProxmoxVE Upgrade from 8 to 9 如何升级到PVE9</title>
      <link>https://blog.margrop.net/post/proxmoxve-upgrade-from-8-to-9/</link>
      <pubDate>Wed, 06 Aug 2025 13:28:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmoxve-upgrade-from-8-to-9/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-plaintext&#34; data-lang=&#34;plaintext&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;参考文档：https://pve.proxmox.com/wiki/Upgrade_from_8_to_9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;升级前准备&#34;&gt;升级前准备&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pve8to9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt dist-upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pveversion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#reboot 建议更新完毕后重启1次&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>PVE 磁盘巡检接入 Uptime Kuma——踩坑 404 的来龙去脉与最终脚本</title>
      <link>https://blog.margrop.net/post/pve-host-virtual-machine-disk-space-monitor-experience-step-two/</link>
      <pubDate>Wed, 14 May 2025 22:16:48 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-host-virtual-machine-disk-space-monitor-experience-step-two/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;写在前面&lt;/strong&gt;&#xA;前一篇文章教大家把 PVE 宿主机的 LVM‑Thin 用量推到 Uptime Kuma。&#xA;有同学照做后 &lt;code&gt;curl&lt;/code&gt; 推送却报 &lt;strong&gt;404&lt;/strong&gt;。本文完整复盘原因、修正脚本，并给出 &lt;strong&gt;可选升级方案&lt;/strong&gt;。零基础跟着做，保证一次成功。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1现象curl--404&#34;&gt;1 现象：&lt;code&gt;curl … 404&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;curl -fsS --retry &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;     &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt;PUSH_URL&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;?status=up&amp;amp;msg=OK&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;     -H &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Content-Type: application/json&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;     --data-raw &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$result&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ↳ curl: (22) The requested URL returned error: 404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>PVE 宿主机磁盘空间监控——从踩坑到接入 Uptime Kuma 的完整小白教程</title>
      <link>https://blog.margrop.net/post/pve-host-virtual-machine-lvm-disk-space-monitor-experience/</link>
      <pubDate>Wed, 14 May 2025 22:11:33 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-host-virtual-machine-lvm-disk-space-monitor-experience/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;目标读者&lt;/strong&gt;&#xA;这篇文章写给刚刚接触 Proxmox VE（简称 &lt;strong&gt;PVE&lt;/strong&gt;）且希望“按步骤照做就能跑”的同学。整篇内容力求：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;解释 &lt;em&gt;为什么&lt;/em&gt; 会遇到问题&lt;/li&gt;&#xA;&lt;li&gt;每一步都给出 &lt;strong&gt;完整命令&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;出错时给出 &lt;strong&gt;排查思路&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>在 Alpine Linux 上使用 LXC 容器搭建 V2Ray 和 Caddy 服务，提供基于 IPv6 的 SSL WebSocket 代理</title>
      <link>https://blog.margrop.net/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</link>
      <pubDate>Wed, 03 Jul 2024 15:32:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/setting-up-v2ray-and-caddy-on-alpine-linux-lxc-container/</guid>
      <description>&lt;h3 id=&#34;前言&#34;&gt;前言&lt;/h3&gt;&#xA;&lt;p&gt;在现代互联网环境中，代理服务变得越来越重要，特别是在需要突破地域限制和提升隐私保护的时候。本文将详细介绍如何在 Alpine Linux 3.19 操作系统的 LXC 容器上，使用 V2Ray 和 Caddy 来搭建一个通过 IPv6 和域名提供的 SSL WebSocket 代理服务。&lt;/p&gt;&#xA;&lt;h3 id=&#34;环境准备&#34;&gt;环境准备&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;确保你的 LXC 容器运行并已分配 IPv6 地址&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;确保你的域名已解析到你的 LXC 容器的 IPv6 地址&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>天翼云电脑永不休眠方法高科技版本（基于Python）</title>
      <link>https://blog.margrop.net/post/automating-connections-to-ctyun-desktop-using-python/</link>
      <pubDate>Tue, 18 Jun 2024 17:41:35 +0800</pubDate>
      <guid>https://blog.margrop.net/post/automating-connections-to-ctyun-desktop-using-python/</guid>
      <description>&lt;h4 id=&#34;原理定期连接天翼云桌面需小于1小时间隔&#34;&gt;原理：定期连接天翼云桌面（需小于1小时间隔）&lt;/h4&gt;&#xA;&lt;h5 id=&#34;步骤一获取请求数据&#34;&gt;步骤一：获取请求数据&lt;/h5&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;打开Chrome浏览器的开发者工具&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在Chrome浏览器中按&lt;code&gt;F12&lt;/code&gt;或右键选择&lt;code&gt;检查&lt;/code&gt;打开开发者工具。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;访问并登录天翼云桌面&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;访问&lt;code&gt;https://pc.ctyun.cn&lt;/code&gt;，并使用你的账号登录云电脑。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;复制connect请求的curl命令&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在开发者工具中，选择&lt;code&gt;Network&lt;/code&gt;标签，找到并点击名为&lt;code&gt;connect&lt;/code&gt;的请求。&lt;/li&gt;&#xA;&lt;li&gt;右键点击该请求，选择&lt;code&gt;Copy as cURL (cmd)&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;获取localStorage中的authData&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在开发者工具中，选择&lt;code&gt;Application&lt;/code&gt;标签。&lt;/li&gt;&#xA;&lt;li&gt;在左侧栏中找到&lt;code&gt;Local Storage&lt;/code&gt;并选择&lt;code&gt;https://pc.ctyun.cn&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;找到&lt;code&gt;authData&lt;/code&gt;键，复制其对应的值。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>在Proxmox VE中快速设置Fail2ban防止多次登录失败的有效方法</title>
      <link>https://blog.margrop.net/post/how-to-quickly-configure-fail2ban-in-proxmox-ve/</link>
      <pubDate>Tue, 18 Jun 2024 15:33:01 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-quickly-configure-fail2ban-in-proxmox-ve/</guid>
      <description>&lt;p&gt;这里简要介绍了如何在Proxmox VE中设置Fail2ban以暂时阻止多次错误登录尝试的IP地址。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装fail2ban&#34;&gt;安装Fail2ban&lt;/h3&gt;&#xA;&lt;p&gt;在Proxmox VE主机上作为root执行以下命令：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install fail2ban&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;配置基础设置&#34;&gt;配置基础设置&lt;/h3&gt;&#xA;&lt;p&gt;建议使用&lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;文件，其设置优先于&lt;code&gt;jail.conf&lt;/code&gt;。使用以下命令复制模板：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>iptv-sources 源收集（From Github）——2024/6/10更新</title>
      <link>https://blog.margrop.net/post/iptv-sources-from-github/</link>
      <pubDate>Mon, 10 Jun 2024 16:49:07 +0800</pubDate>
      <guid>https://blog.margrop.net/post/iptv-sources-from-github/</guid>
      <description>&lt;h1 id=&#34;iptv-sources&#34;&gt;iptv-sources&lt;/h1&gt;&#xA;&lt;p&gt;Sources are from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://epg.pw/test_channel_page.html&#34;&gt;https://epg.pw/test_channel_page.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/iptv-org/iptv&#34;&gt;iptv.org&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/YueChan/Live&#34;&gt;YueChan/Live&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/YanG-1989/m3u&#34;&gt;YanG-1989/m3u&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/fanmingming/live&#34;&gt;fanmingming/live&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/qwerttvv/Beijing-IPTV&#34;&gt;qwerttvv/Beijing-IPTV&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/joevess/IPTV&#34;&gt;joevess/IPTV&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://github.com/Meroser/IPTV&#34;&gt;Meroser/IPTV&lt;/a&gt;&lt;/del&gt; The project content has been removed by Author&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;EPG Sources are from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/fanmingming/live&#34;&gt;fanmingming/live&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://diyp1.112114.xyz&#34;&gt;112114.xyz&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://epg.51zmt.top:8000/&#34;&gt;epg.51zmt.top:8000&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://m3u.ibert.me&#34;&gt;https://m3u.ibert.me&lt;/a&gt; to get more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>利用cloudflare搭建gh-proxy加速github</title>
      <link>https://blog.margrop.net/post/cloudflare-accelerate-github-speed/</link>
      <pubDate>Mon, 10 Jun 2024 15:26:32 +0800</pubDate>
      <guid>https://blog.margrop.net/post/cloudflare-accelerate-github-speed/</guid>
      <description>&lt;p&gt;前面几期有玩过青龙面板，但是如果要拉GitHub库就会遇到网络不行拉取失败的情况，平时github下文件速度也是奇慢无比，就用免费的cloudflare搭建gh-proxy加速GitHub。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;一、前提准备&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;需要提前准备好cloudflare账号以及一个域名（可选），需要白嫖域名可以参考往期文章《&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzIxMjE1NDQxNA==&amp;mid=2247483945&amp;idx=1&amp;sn=abe651003c71d37c25b29cd6ea54a775&amp;chksm=974b2368a03caa7e8ccdab8d0d104076540990a643731bd60bb9c3bbb04dc81c83dba4eedad9&amp;scene=21#wechat_redirect&#34;&gt;免费申请注册eu.org二级域名&lt;/a&gt;》&lt;/p&gt;</description>
    </item>
    <item>
      <title>cloudflare workers 解决docker无法拉取镜像问题</title>
      <link>https://blog.margrop.net/post/cloudflare-workers-slove-docker-mirrors-blocked/</link>
      <pubDate>Mon, 10 Jun 2024 14:16:26 +0800</pubDate>
      <guid>https://blog.margrop.net/post/cloudflare-workers-slove-docker-mirrors-blocked/</guid>
      <description>&lt;p&gt;由于某些原因，目前国内无法正常拉取docker镜像，去年写的加速拉取镜像的办法也没法用，困难总比办法多（不是），干脆新写一篇教程，利用cloudflare workers 解决docker无法拉取镜像问题。&lt;/p&gt;&#xA;&lt;p&gt;本篇利用cloudflare workers来解决无法拉取镜像问题，关于cloudflare这里不再过多介绍，cloudflare workers服务也是免费，不懂的童鞋可以自行翻看往期文章《&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzIxMjE1NDQxNA==&amp;mid=2247484002&amp;idx=1&amp;sn=5cf3b8876df7d871774641c5f24261d7&amp;chksm=974b2323a03caa35e053659efda5e285635f83d011cadf54e7c05288f40a4df1811fcf0338ff&amp;scene=21#wechat_redirect&#34;&gt;cloudflare加快github下载&lt;/a&gt;》。&lt;strong&gt;如果看完本篇也不想动手，也可以在后台回复“jsdc”获取我搭建好的公共服务地址&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>天翼云电脑相关配置，及永不休眠方法</title>
      <link>https://blog.margrop.net/post/ctyun-windows-never-sleep/</link>
      <pubDate>Tue, 04 Jun 2024 12:27:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ctyun-windows-never-sleep/</guid>
      <description>&lt;p&gt;Windows软件下载地址：https://download.margrop.net/#/EXE&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;天翼云电脑：https://desk.ctyun.cn/html/download/&#xA;计划软件：http://www.everauto.net/&#xA;天翼云电脑exe默认路径：C:\Program Files (x86)\CtyunClouddeskUniversal\CtyunClouddeskUniversal.exe&#xA;宝塔面板：https://www.bt.cn/new/product_windows.html&#xA;宝塔面板旧版本：http://download.bt.cn/win/update/net/BtSoft-Win.zip&#xA;frp：https://github.com/fatedier/frp&#xA;NSSM：http://www.nssm.cc/download&#xA;Notepad++：https://download.margrop.net/d/oneindex/EXE/npp.8.6.7.Installer.x64.exe&#xA;RustDesk：https://download.margrop.net/d/oneindex/EXE/rustdesk-1.2.3-2-x86_64.exe&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>N5105 Proxmox VE 8.2版本，虚拟机频繁死机问题处理</title>
      <link>https://blog.margrop.net/post/n5105-in-promox-ve-frequently-dead/</link>
      <pubDate>Sat, 04 May 2024 07:55:22 +0800</pubDate>
      <guid>https://blog.margrop.net/post/n5105-in-promox-ve-frequently-dead/</guid>
      <description>&lt;h1 id=&#34;一问题背景&#34;&gt;一、问题背景&lt;/h1&gt;&#xA;&lt;p&gt;最近五一各大PT网站开发注册，于是乎注册了几家网站，然后为了做新手任务，疯狂下载上传，作为软路由的 N5105 、iKuai 在长时间高负载时，虚拟机会出现随机性的死机，CPU长期保持100%，只能杀掉再重启虚拟机，相当影响完成新手任务。死机了几次后终于受不了了，看网上各大同仁，发现同样问题不在少数。&lt;/p&gt;&#xA;&lt;p&gt;下面是CSDN其他同仁的问题描述：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;使用 N5105 作为 HomeLab 的服务器；之前安装的 ESXi，使用 Ubuntu 22 的时候经常会出现 Ubuntu CPU 占用达到100%，然后死机；但是其他的虚拟机都没有问题，因为对 Linux 并不熟，查看了 ESXi 和 Ubuntu 日志并没有异常；后面安装黑群晖一直失败，因此换到了 Proxmox VE&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;换到 PVE 后依然存在同样的问题，以为是服务的问题，于是给 Docker 容器添加了资源限制，无效后迁移到了 CentOS 部署，发现还是同样的问题；并且越来越频繁，从一天一次变成了几小时一次，几乎无法使用&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>IDEA激活服务器搜索方法</title>
      <link>https://blog.margrop.net/post/activate-jetbrains-intellij-idea/</link>
      <pubDate>Wed, 01 May 2024 13:34:09 +0800</pubDate>
      <guid>https://blog.margrop.net/post/activate-jetbrains-intellij-idea/</guid>
      <description>&lt;h1 id=&#34;请自行通过下面搜索引擎和关键字进行搜索&#34;&gt;请自行通过下面搜索引擎和关键字进行搜索&lt;/h1&gt;&#xA;&lt;h2 id=&#34;fofahttpsenfofainfo&#34;&gt;&lt;a href=&#34;https://en.fofa.info/&#34;&gt;Fofa&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;header=&amp;#34;https://account.jetbrains.com/fls-auth&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;shodanhttpswwwshodanio&#34;&gt;&lt;a href=&#34;https://www.shodan.io/&#34;&gt;Shodan&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;Location&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;https://account.jetbrains.com/fls-auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;censyshttpscensyscom&#34;&gt;&lt;a href=&#34;https://censys.com/&#34;&gt;Censys&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services.http.response.headers.location&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;account.jetbrains.com/fls-auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>【转】如何设置xiaoya的docker，及tvbox配置</title>
      <link>https://blog.margrop.net/post/deploy-xiaoya-docker-and-tvbox/</link>
      <pubDate>Tue, 30 Apr 2024 21:18:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/deploy-xiaoya-docker-and-tvbox/</guid>
      <description>&lt;p&gt;文章来源：&lt;a href=&#34;https://xiaoyaliu.notion.site/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f&#34;&gt;https://xiaoyaliu.notion.site/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;如何设置xiaoya的docker&#34;&gt;如何设置xiaoya的docker&lt;/h1&gt;&#xA;&lt;p&gt;要获得最新小雅的资讯请关注小雅的tg频道 &lt;a href=&#34;https://t.me/xiaoyaliu&#34;&gt;https://t.me/xiaoyaliu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;平时有什么使用上遇到的困难可以来这里找我或其他人帮助 &lt;a href=&#34;https://t.me/PlutoPlayer&#34;&gt;https://t.me/PlutoPlayer&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;你需要什么才能安装-xiaoya-的docker&#34;&gt;你需要什么才能安装 xiaoya 的docker&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;软路由盒子类似 n1 等，具有 openwrt环境 （可以终端上一键配置）&lt;/li&gt;&#xA;&lt;li&gt;NAS 等具有docker插件 （无法或很难登入终端，需要图形化自行配置）&lt;/li&gt;&#xA;&lt;li&gt;云服务器也就是俗称的 vps （可以终端上一键配置）&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Ubuntu 24.04 LTS Noble Numbat Upgrade Guide</title>
      <link>https://blog.margrop.net/post/ubuntu-2404-lts-noble-numbat-upgrade/</link>
      <pubDate>Tue, 30 Apr 2024 19:55:19 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-2404-lts-noble-numbat-upgrade/</guid>
      <description>&lt;p&gt;感谢ChatGPT从官网翻译，&lt;a href=&#34;https://help.ubuntu.com/community/NobleUpgrades&#34;&gt;原文入口&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;重要提示：&lt;strong&gt;&lt;a href=&#34;https://help.ubuntu.com/community/NobleUpgrades&#34;&gt;Ubuntu 22.04 LTS目前无法直接升级到 Ubuntu 24.04 LTS，请等到2024年8月再进行升级操作&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;ubuntu-2404-lts--noble-numbat-升级指南&#34;&gt;Ubuntu 24.04 LTS —— &amp;ldquo;Noble Numbat&amp;rdquo; 升级指南&lt;/h1&gt;&#xA;&lt;p&gt;Ubuntu 24.04 LTS 是2024年4月发布的Ubuntu操作系统的版本。该版本的开发代号为“Noble Numbat”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>安装 minikube-dashboard &#43; 自动启动和外网访问</title>
      <link>https://blog.margrop.net/post/install-minikube-dashboard-and-autorun-and-port-forward/</link>
      <pubDate>Tue, 30 Apr 2024 19:42:36 +0800</pubDate>
      <guid>https://blog.margrop.net/post/install-minikube-dashboard-and-autorun-and-port-forward/</guid>
      <description>&lt;h1 id=&#34;一安装-minikube-dashboard&#34;&gt;一、安装 minikube-dashboard&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;参考官网文档：&lt;a href=&#34;https://minikube.sigs.k8s.io/docs/start/&#34;&gt;https://minikube.sigs.k8s.io/docs/start/&lt;/a&gt;&#xA;执行命令 &lt;code&gt;minikube dashboard&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;二安装-minikube-后台服务&#34;&gt;二、安装 minikube 后台服务&lt;/h1&gt;&#xA;&lt;p&gt;如果你希望 &lt;code&gt;minikube&lt;/code&gt; 在 &lt;code&gt;systemctl&lt;/code&gt; 管理下只启动一次，并且在启动成功后自动退出，你可以调整 &lt;code&gt;systemctl&lt;/code&gt; 的服务文件，使其不会自动重启 &lt;code&gt;minikube&lt;/code&gt;。这可以通过设置 &lt;code&gt;Restart=no&lt;/code&gt; 来实现，并确保服务只在需要时手动启动。&lt;/p&gt;&#xA;&lt;p&gt;下面是一个基本的 &lt;code&gt;systemctl&lt;/code&gt; 服务文件示例，适用于这种情况：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Minikube 安装最小化k8s环境</title>
      <link>https://blog.margrop.net/post/install-min-k8s-using-minikube-on-pve/</link>
      <pubDate>Tue, 30 Apr 2024 19:37:29 +0800</pubDate>
      <guid>https://blog.margrop.net/post/install-min-k8s-using-minikube-on-pve/</guid>
      <description>&lt;p&gt;在 Proxmox VE（一种基于 Debian 的虚拟化环境）上部署 Minikube 需要考虑 Proxmox 的特性，它本质上是一个虚拟机和容器管理平台。您将需要在 Proxmox VE 上创建一个虚拟机（VM），然后在该 VM 中安装 Minikube。以下是详细的步骤：&lt;/p&gt;</description>
    </item>
    <item>
      <title>ProxmoxVE 7.4升级到8.0，详细步骤</title>
      <link>https://blog.margrop.net/post/pve-7-upgrade-to-8/</link>
      <pubDate>Sat, 08 Jul 2023 10:25:13 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-7-upgrade-to-8/</guid>
      <description>&lt;h1 id=&#34;第一步详细阅读官方文档&#34;&gt;第一步：详细阅读官方文档&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Upgrade_from_7_to_8&#34;&gt;https://pve.proxmox.com/wiki/Upgrade_from_7_to_8&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&#xA;如果远程使用ssh连接的话，建议先使用&lt;code&gt;screen&lt;/code&gt;命令，避免网络不稳定，操作中断导致的各种问题&lt;/p&gt;&#xA;&lt;h1 id=&#34;第二步升级到最新的-74-版本&#34;&gt;第二步：升级到最新的 7.4 版本&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt update -y &amp;amp;&amp;amp; apt dist-upgrade -y&#xA;&#xA;sed -i_orig &amp;#34;s/data.status === &amp;#39;Active&amp;#39;/true/g&amp;#34; /usr/share/pve-manager/js/pvemanagerlib.js&#xA;sed -i_orig &amp;#34;s/if (res === null || res === undefined || \!res || res/if(/g&amp;#34; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js&#xA;sed -i_orig &amp;#34;s/.data.status.toLowerCase() !== &amp;#39;active&amp;#39;/false/g&amp;#34; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js&#xA;systemctl restart pveproxy&#xA;&#xA;pveversion&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最新的版本是 7.4.15&lt;/p&gt;</description>
    </item>
    <item>
      <title>TVBOX 长期维护apk下载地址和接口</title>
      <link>https://blog.margrop.net/post/tvbox-apk-download-and-interface/</link>
      <pubDate>Mon, 03 Jul 2023 21:11:04 +0800</pubDate>
      <guid>https://blog.margrop.net/post/tvbox-apk-download-and-interface/</guid>
      <description>&lt;h1 id=&#34;tvbox下载地址&#34;&gt;TVBOX下载地址&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/o0HalfLife0o/TVBoxOSC/releases&#34;&gt;TVBoxOSC&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/o0HalfLife0o/TVBoxOSC/releases&#34;&gt;https://github.com/o0HalfLife0o/TVBoxOSC/releases&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.right.com.cn/forum/thread-8248608-1-1.html&#34;&gt;大佬TVBox&lt;/a&gt;&#xA;下载:&lt;a href=&#34;https://www.lanzoul.com/iANk409bj7fc&#34;&gt;https://www.lanzoul.com/iANk409bj7fc&lt;/a&gt; 密码:5q1m&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;以下接口来自肥猫收集肥猫官网&#34;&gt;以下接口来自肥猫收集（肥猫官网）&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://xn--z7x900a.love&#34;&gt;https://xn--z7x900a.love&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;肥猫&#34;&gt;肥猫​&lt;/h1&gt;&#xA;&lt;p&gt;http://我不是.肥猫.love:63/接口禁止贩卖&lt;/p&gt;</description>
    </item>
    <item>
      <title>电视盒子TVBox takagen99版，v20230307_2315 (附最新接口地址)</title>
      <link>https://blog.margrop.net/post/tvbox-takagen99-v20230307/</link>
      <pubDate>Mon, 03 Jul 2023 21:09:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/tvbox-takagen99-v20230307/</guid>
      <description>&lt;p&gt;开源，免费，自行配置接口，直播、点播两用，安卓设备。&lt;/p&gt;&#xA;&lt;p&gt;takagen99版拥有全新UI外观、功能更加丰富，支持挂载WebDav和本地盘，播放器显示分辨率、网速、时间屏显等功能。&#xA;二、TVbox使用教程&#xA;首页点击“设置”，选择“配置地址”，输入”数据源地址“，开启存储权限，“确定”后选择数据源，然后就可以使用了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用ffmpeg批量删除音视频的片头片尾</title>
      <link>https://blog.margrop.net/post/ffmpeg-cut-video/</link>
      <pubDate>Sun, 02 Apr 2023 11:51:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ffmpeg-cut-video/</guid>
      <description>&lt;h1 id=&#34;步骤&#34;&gt;步骤&lt;/h1&gt;&#xA;&lt;h2 id=&#34;1-下载ffmpeg&#34;&gt;1. 下载ffmpeg&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;步骤略&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2-编辑bat脚本&#34;&gt;2. 编辑Bat脚本&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bat&#34; data-lang=&#34;bat&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; off &amp;amp; &lt;span style=&#34;color:#66d9ef&#34;&gt;setlocal&lt;/span&gt; enabledelayedexpansion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;rem ===================需手动设置===================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;rem 设定片头片尾长度，格式为 HH:mm:ss.fff&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s1=00:01:07.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s2=00:01:30.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;rem ================================================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;/f&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tokens=1-4delims=:.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;a &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;%s2%&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;/a&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;t2=(1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;a &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 100 *3600 + 1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;b &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 100 * 60 + 1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;c &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 100) * 1000 + 1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;d &lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; 1000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;md&lt;/span&gt; myvideo &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&amp;gt;nul&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;i &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (*.avi *.mkv *.mp4 *.flv) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;/f&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tokens=2-5delims=:., &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;a &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ffmpeg -i &amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;i&amp;#34; 2^&amp;gt;^&amp;amp;1 ^| find &amp;#34;Duration:&amp;#34;&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;/a&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;t=(1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;100*3600+1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;b&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;100*60+1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;100)*1000+1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;d0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;1000,t-=t2,ms=t&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;1000,t/=1000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;/a&lt;/span&gt; h&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;t&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;,m&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;t&lt;span style=&#34;color:#f92672&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3600&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;,s&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;t&lt;span style=&#34;color:#f92672&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;,h&lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;,m&lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;,s&lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;,ms&lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;t=!h:~1!:!m:~1!:!s:~1!.!ms:~1!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ffmpeg -ss !s1! -to !t! -accurate_seek -i &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;i&amp;#34;&lt;/span&gt;  -c copy -avoid_negative_ts 1 &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;myvideo\&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;%%&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;i&amp;#34;&lt;/span&gt; -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;pause&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>gitlab-ci-yml配置说明（官方文档翻译）</title>
      <link>https://blog.margrop.net/post/gitlab-ci-variables/</link>
      <pubDate>Sun, 02 Apr 2023 09:02:29 +0800</pubDate>
      <guid>https://blog.margrop.net/post/gitlab-ci-variables/</guid>
      <description>&lt;h2 id=&#34;重要的内置变量&#34;&gt;重要的内置变量&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;CI_COMMIT_REF_NAME&lt;/code&gt;: The branch or tag name for which project is built.&#xA;&lt;code&gt;CI_CONFIG_PATH&lt;/code&gt;: The path to the CI/CD configuration file. Defaults to .gitlab-ci.yml. Read-only inside a running pipeline.&#xA;&lt;code&gt;CI_PROJECT_PATH&lt;/code&gt;: The project namespace with the project name included.&#xA;&lt;code&gt;CI_BUILDS_DIR&lt;/code&gt;: The top-level directory where builds are executed.&#xA;&lt;code&gt;CI_PROJECT_DIR&lt;/code&gt;: The full path the repository is cloned to, and where the job runs from. If the GitLab Runner builds_dir parameter is set, this variable is set relative to the value of builds_dir. For more information, see the Advanced GitLab Runner configuration.&lt;/p&gt;</description>
    </item>
    <item>
      <title>logback 自定义添加 logstash 字段</title>
      <link>https://blog.margrop.net/post/logback-zi-ding-yi-tian-jia-logstash-zi-duan/</link>
      <pubDate>Sun, 02 Apr 2023 08:57:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/logback-zi-ding-yi-tian-jia-logstash-zi-duan/</guid>
      <description>&lt;h1 id=&#34;步骤&#34;&gt;步骤&lt;/h1&gt;&#xA;&lt;h2 id=&#34;如果想在输出的json中加上自定义字段需要配置arguments参数&#34;&gt;如果想在输出的JSON中，加上自定义字段，需要配置arguments参数&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;encoder&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;providers&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;pattern&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;pattern&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;timestamp&amp;#34;: &amp;#34;%date{\&amp;#34;yyyy-MM-dd HH:mm:ss\&amp;#34;}&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;log_level&amp;#34;: &amp;#34;%level&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;class_name&amp;#34;: &amp;#34;%class&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;thread&amp;#34;: &amp;#34;%thread&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;message&amp;#34;: &amp;#34;%message&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &amp;#34;stack_trace&amp;#34;: &amp;#34;%exception{5}&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/pattern&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/pattern&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;arguments/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/providers&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/encoder&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mysql online DDL 线上无锁添加索引</title>
      <link>https://blog.margrop.net/post/mysql-online-ddl-create-index-without-lock/</link>
      <pubDate>Sun, 02 Apr 2023 08:51:17 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mysql-online-ddl-create-index-without-lock/</guid>
      <description>&lt;h1 id=&#34;步骤&#34;&gt;步骤&lt;/h1&gt;&#xA;&lt;p&gt;只能通过ALTER TABLE不能create index&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ALTER TABLE tbl_name ADD INDEX (column), ALGORITHM=INPLACE, LOCK=NONE;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>常用Github开源项目推荐</title>
      <link>https://blog.margrop.net/github-project-stars/</link>
      <pubDate>Sat, 25 Mar 2023 18:29:55 +0800</pubDate>
      <guid>https://blog.margrop.net/github-project-stars/</guid>
      <description>BBDown 一款命令行式哔哩哔哩下载器. Bilibili Downloader. https://github.com/nilaoda/BBDown&#xA;iOS日历增强——中国节假日补班日历 中国节假日补班日历 https://github.com/lanceliao/china-holiday-calender&#xA;CPU单核跑分天梯图 本图收集了常见CPU型号单核跑分图，包括英特尔 酷睿(Intel Core)桌面处理器系列， 英特尔 酷睿(Intel Core)移动处理器系列和AMD 锐龙(Ryzen)处理器系列。 https://github.com/mediv01/CPU-Single-Core-Benchmark&#xA;Homebrew国内快速安装 https://github.com/ineo6/homebrew-install&#xA;Win系列KMS激活工具 KMS Server https://github.com/Wind4/vlmcsd&#xA;Authy导出工具 This is a Go library that allows you to access your Authy TOTP tokens. https://github.com/alexzorin/authy&#xA;Home Assistant 的巴法云插件 将 Home Assistant 实体同步至巴法云，并使用小爱同学/天猫精灵/小度音箱控制。 https://github.com/larry-wong/bemfa&#xA;BT之家 BT之家入口页 https://github.com/sesezy/bthome/wiki</description>
    </item>
    <item>
      <title>常用Github开源项目推荐</title>
      <link>https://blog.margrop.net/post/github-project-stars/</link>
      <pubDate>Sat, 25 Mar 2023 18:29:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/github-project-stars/</guid>
      <description>&lt;h1 id=&#34;bbdown&#34;&gt;BBDown&lt;/h1&gt;&#xA;&lt;p&gt;一款命令行式哔哩哔哩下载器. Bilibili Downloader.&#xA;&lt;a href=&#34;https://github.com/nilaoda/BBDown&#34;&gt;https://github.com/nilaoda/BBDown&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;ios日历增强中国节假日补班日历&#34;&gt;iOS日历增强——中国节假日补班日历&lt;/h1&gt;&#xA;&lt;p&gt;中国节假日补班日历&#xA;&lt;a href=&#34;https://github.com/lanceliao/china-holiday-calender&#34;&gt;https://github.com/lanceliao/china-holiday-calender&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;cpu单核跑分天梯图&#34;&gt;CPU单核跑分天梯图&lt;/h1&gt;&#xA;&lt;p&gt;本图收集了常见CPU型号单核跑分图，包括英特尔 酷睿(Intel Core)桌面处理器系列， 英特尔 酷睿(Intel Core)移动处理器系列和AMD 锐龙(Ryzen)处理器系列。&#xA;&lt;a href=&#34;https://github.com/mediv01/CPU-Single-Core-Benchmark&#34;&gt;https://github.com/mediv01/CPU-Single-Core-Benchmark&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;homebrew国内快速安装&#34;&gt;Homebrew国内快速安装&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ineo6/homebrew-install&#34;&gt;https://github.com/ineo6/homebrew-install&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 v2ray 配置内网访问——基于公网IP</title>
      <link>https://blog.margrop.net/post/v2ray-visit-lan/</link>
      <pubDate>Sat, 25 Mar 2023 15:44:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/v2ray-visit-lan/</guid>
      <description>&lt;h1 id=&#34;前提条件&#34;&gt;前提条件：&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有公网IP&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;需求&#34;&gt;需求&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;需要进行安全的内网访问&lt;/li&gt;&#xA;&lt;li&gt;需要加密流量&lt;/li&gt;&#xA;&lt;li&gt;支持 TCP / UDP&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Ubuntu / CentOS 磁盘根目录在线扩容 &amp; 修改分区 inode 数量</title>
      <link>https://blog.margrop.net/post/ubuntu-lv-extend-and-resize-inode/</link>
      <pubDate>Sat, 25 Mar 2023 13:42:44 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-lv-extend-and-resize-inode/</guid>
      <description>&lt;p&gt;Ubuntu 作为服务器系统使用的时候，系统盘的空间可能并不是很充裕，apt apt 着，根目录就满了。诚然，增加磁盘 / 分区并挂载是一个方案，但并不能解决所有问题（例如 apt）。同时，一些跑在云平台上的服务器并没有很好的离线操作磁盘的手段，这时候在线扩容就显得极为必要了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;数据无价！对磁盘进行任何操作前，请务必做好备份！&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;0-简要操作步骤&#34;&gt;0. 简要操作步骤&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#系统分区扩容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;parted -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fdisk -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cfdisk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容块（sda3）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvresize /dev/sda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容lv和vg（Ubuntu）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#扩容lv和vg（CentOS）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lvextend -l +100%FREE /dev/mapper/centos-root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resize2fs /dev/mapper/centos-root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;1-磁盘根目录在线扩容&#34;&gt;1. 磁盘根目录在线扩容&lt;/h1&gt;&#xA;&lt;p&gt;操作环境：Proxmox VE 虚拟化 / Ubuntu 22.04.5 LTS / GPT 分区表 / ext4 分区&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE对特定容器定时重启</title>
      <link>https://blog.margrop.net/post/pve-corntab-restart-vm/</link>
      <pubDate>Sun, 12 Mar 2023 20:59:38 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-corntab-restart-vm/</guid>
      <description>&lt;h1 id=&#34;背景&#34;&gt;背景&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;由于观测到&lt;code&gt;HomeAssistant&lt;/code&gt;这台&lt;code&gt;VM&lt;/code&gt;的内存占用总是随着时间的推移而增加，然后最终会&lt;code&gt;OOM&lt;/code&gt;，且无论升级了多少个版本也是如此，推测&lt;code&gt;HomeAssistant&lt;/code&gt;有内存泄漏问题&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;解决方案&#34;&gt;解决方案&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在虚拟机层面，对该&lt;code&gt;VM&lt;/code&gt;进行定期重启（每天一次）&lt;/li&gt;&#xA;&lt;li&gt;登录到&lt;code&gt;PVE&lt;/code&gt;所在的服务器&lt;/li&gt;&#xA;&lt;li&gt;执行&lt;code&gt;crontab -e&lt;/code&gt;，并输入下面命令&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin&#xA;&#xA;0 12 * * * qm stop 2007 ; sleep 10 ; qm start 2007&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;注：命令中的&lt;code&gt;2007&lt;/code&gt;是vmid，即&lt;code&gt;VM&lt;/code&gt;的全局唯一ID&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>【转】iptables持久化方案</title>
      <link>https://blog.margrop.net/post/persistent-iptables/</link>
      <pubDate>Sun, 12 Mar 2023 20:43:10 +0800</pubDate>
      <guid>https://blog.margrop.net/post/persistent-iptables/</guid>
      <description>&lt;h1 id=&#34;debian若没有安装iptables使用以下命令安装&#34;&gt;debian若没有安装iptables，使用以下命令安装&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt-get install iptables&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;清除已有规则&#34;&gt;清除已有规则&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;iptables -F;iptables -X;iptables -Z&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;开放端口&#34;&gt;开放端口&lt;/h1&gt;&#xA;&lt;h3 id=&#34;允许本地回环接口即运行本机访问本机--允许已建立的或相关连的通行&#34;&gt;允许本地回环接口(即运行本机访问本机) &amp;amp;&amp;amp; 允许已建立的或相关连的通行&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;iptables -A INPUT -i lo -j ACCEPT;iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>WOW TrinityCore 安装教程（基于10.0.2.47657）</title>
      <link>https://blog.margrop.net/post/wow-trinitycore-install-document/</link>
      <pubDate>Sun, 12 Mar 2023 20:28:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/wow-trinitycore-install-document/</guid>
      <description>&lt;h1 id=&#34;wow-trinitycore-安装教程&#34;&gt;WOW TrinityCore 安装教程&lt;/h1&gt;&#xA;&lt;h2 id=&#34;相关参考资料&#34;&gt;相关参考资料&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/TrinityCore/TrinityCore&#34;&gt;https://github.com/TrinityCore/TrinityCore&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://trinitycore.info/en/home&#34;&gt;https://trinitycore.info/en/home&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://trinitycore.info/install/requirements/linux&#34;&gt;https://trinitycore.info/install/requirements/linux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://trinitycore.info/install/Core-Installation/linux-core-installation&#34;&gt;https://trinitycore.info/install/Core-Installation/linux-core-installation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://trinitycore.info/en/install/Server-Setup&#34;&gt;https://trinitycore.info/en/install/Server-Setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://trinitycore.info/en/install/Final-Server-Steps&#34;&gt;https://trinitycore.info/en/install/Final-Server-Steps&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>点读笔资源大全——百度云</title>
      <link>https://blog.margrop.net/post/kid-talking-pen-resources-in-baidupan/</link>
      <pubDate>Sun, 12 Mar 2023 20:26:01 +0800</pubDate>
      <guid>https://blog.margrop.net/post/kid-talking-pen-resources-in-baidupan/</guid>
      <description>&lt;p&gt;牛津所有资源&lt;/p&gt;&#xA;&lt;p&gt;链接: &lt;a href=&#34;https://pan.baidu.com/s/1LwytSBYw4ymiTeOchDw0aA&#34;&gt;https://pan.baidu.com/s/1LwytSBYw4ymiTeOchDw0aA&lt;/a&gt; 提取码: 4dm4&lt;/p&gt;</description>
    </item>
    <item>
      <title>修复 Spring 2.3.x 升级到更新版本出现的跨域问题</title>
      <link>https://blog.margrop.net/post/fix-spring2-allowed-origins-error/</link>
      <pubDate>Sun, 12 Mar 2023 20:20:01 +0800</pubDate>
      <guid>https://blog.margrop.net/post/fix-spring2-allowed-origins-error/</guid>
      <description>&lt;h1 id=&#34;异常提示&#34;&gt;异常提示：&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;When allowCredentials is true, allowedOrigins cannot contain the special value &amp;#34;*&amp;#34; since that cannot be set on the &amp;#34;Access-Control-Allow-Origin&amp;#34; response header. To allow credentials to a set of origins, list them explicitly or consider using &amp;#34;allowedOriginPatterns&amp;#34; instead.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;#解决办法：&#xA;跨域配置报错，将&lt;code&gt;.allowedOrigins&lt;/code&gt;替换成&lt;code&gt;.allowedOriginPatterns&lt;/code&gt;即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>修复 SpringFox 3.0.0 不兼容 SpringBoot 2.6.4 的问题</title>
      <link>https://blog.margrop.net/post/fix-springfox-documentation-plugins-bootstrapper-npe/</link>
      <pubDate>Sun, 12 Mar 2023 17:56:57 +0800</pubDate>
      <guid>https://blog.margrop.net/post/fix-springfox-documentation-plugins-bootstrapper-npe/</guid>
      <description>&lt;h1 id=&#34;异常提示&#34;&gt;异常提示：&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Failed to start bean &amp;#39;documentationPluginsBootstrapper&amp;#39;; nested exception is java.lang.NullPointerException&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;原因分析&#34;&gt;原因分析：&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;SpringFox&lt;/code&gt; 3.0.0 不兼容 &lt;code&gt;SpringBoot&lt;/code&gt; 2.6.4&lt;/p&gt;&#xA;&lt;h1 id=&#34;解决方案&#34;&gt;解决方案：&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;参考链接&#xA;&lt;a href=&#34;https://stackoverflow.com/questions/40241843/failed-to-start-bean-documentationpluginsbootstrapper-in-spring-data-rest&#34;&gt;https://stackoverflow.com/questions/40241843/failed-to-start-bean-documentationpluginsbootstrapper-in-spring-data-rest&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/springfox/springfox/issues/3462#issuecomment-1010721223&#34;&gt;https://github.com/springfox/springfox/issues/3462#issuecomment-1010721223&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>CentOS7 开机自动添加N2N的路由表</title>
      <link>https://blog.margrop.net/post/centos7-auto-add-route-table-for-n2n-edge/</link>
      <pubDate>Sun, 06 Feb 2022 19:50:38 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos7-auto-add-route-table-for-n2n-edge/</guid>
      <description>&lt;h1 id=&#34;1-编辑-systemctl-自启动文件&#34;&gt;1. 编辑 &lt;code&gt;systemctl&lt;/code&gt; 自启动文件&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;vim /etc/systemd/system/n2route.service&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>【转】Mybatis-Plus 通用枚举类型的使用</title>
      <link>https://blog.margrop.net/post/zhuan-mybatis-plus-tong-yong-mei-ju-lei-xing-de-shi-yong/</link>
      <pubDate>Wed, 02 Feb 2022 20:20:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/zhuan-mybatis-plus-tong-yong-mei-ju-lei-xing-de-shi-yong/</guid>
      <description>&lt;p&gt;有些字段，例如性别、婚姻状况、等标志性字段，在数据库中存放的形式往往是数字，0 或者 1，这样做的好处是存取的效率高节省空间，但是前端的在展示的时候不能直接展示，需要进行一个判断，但是判断逻辑放在前端不妥，所以后端应该提前将值转换好返回该前端。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2021年的MacOS BigSur系统外接2k显示屏及字体虚化锯齿的解决方案整理</title>
      <link>https://blog.margrop.net/post/2k-monitor-in-macos-hidpi-and-retina-display-menu/</link>
      <pubDate>Tue, 25 Jan 2022 21:45:33 +0800</pubDate>
      <guid>https://blog.margrop.net/post/2k-monitor-in-macos-hidpi-and-retina-display-menu/</guid>
      <description>&lt;h1 id=&#34;1-关闭系统-sip&#34;&gt;1. 关闭系统 SIP&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/343151907&#34;&gt;https://zhuanlan.zhihu.com/p/343151907&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;执行命令前需要关闭SIP（系统完整性保护），具体做法是：&#xA;进入恢复模式（开机时按住 command+R 键），在右上角打开系统终端，输入 csrutil disable（禁用）命令，在开启hidpi后可重新使用命令 csrutil enable （开启）。具体可参考，&amp;raquo;传送门&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brew一键安装swagger2markup并生成markdown文档</title>
      <link>https://blog.margrop.net/post/brew-install-swagger2markup-and-generate-markdown/</link>
      <pubDate>Tue, 25 Jan 2022 21:43:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/brew-install-swagger2markup-and-generate-markdown/</guid>
      <description>&lt;h1 id=&#34;1-一键安装&#34;&gt;1. 一键安装&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;brew install swagger2markup-cli&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>OpenCore 的 config.plist 文件，如何打印日志？</title>
      <link>https://blog.margrop.net/post/opencore-configplist-file-enable-debug-verbose/</link>
      <pubDate>Tue, 14 Dec 2021 20:37:35 +0800</pubDate>
      <guid>https://blog.margrop.net/post/opencore-configplist-file-enable-debug-verbose/</guid>
      <description>&lt;h1 id=&#34;准备工作&#34;&gt;准备工作&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PlistEdit Pro&lt;/li&gt;&#xA;&lt;li&gt;config.plist&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;开始&#34;&gt;开始&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;使用PlistEdit Pro 打开 &lt;code&gt;config.plist&lt;/code&gt;文件&lt;/li&gt;&#xA;&lt;li&gt;展开&lt;code&gt;NVRAM&lt;/code&gt; -&amp;gt; &lt;code&gt;ADD&lt;/code&gt; -&amp;gt; &lt;code&gt;7C436110-AB2A-4BBB-A880-FE41995C9F82&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;修改&lt;code&gt;boot-args&lt;/code&gt;参数，在最末尾添加&lt;code&gt; -v&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Linux启动时，如何编辑GRUB2的启动参数</title>
      <link>https://blog.margrop.net/post/edit-grub2-during-the-boot-process/</link>
      <pubDate>Wed, 08 Dec 2021 09:29:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/edit-grub2-during-the-boot-process/</guid>
      <description>&lt;h1 id=&#34;to-edit-grub2-during-the-boot-process-try-the-following&#34;&gt;To edit Grub2 during the boot process try the following:&lt;/h1&gt;&#xA;&lt;h1 id=&#34;为了在启动时编辑grub2可以尝试下面的步骤&#34;&gt;为了在启动时，编辑GRUB2，可以尝试下面的步骤&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Immediately after the BIOS splash screen during boot, press and hold the &lt;code&gt;SHIFT&lt;/code&gt; button. This will display you &lt;code&gt;grub&lt;/code&gt; containing a list of kernels and recovery options&#xA;在启动过程中出现 BIOS 启动画面后，立即按住&lt;code&gt;SHIFT&lt;/code&gt;按键。&#xA;这将显示包含内核和恢复选项列表的&lt;code&gt;grub&lt;/code&gt;。&#xA;&lt;img src=&#34;https://blog.margrop.net/post-images/ZlSUO.png&#34;&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Chrome扩展国内下载地址</title>
      <link>https://blog.margrop.net/post/chrome-kuo-zhan-guo-nei-xia-zai-di-zhi/</link>
      <pubDate>Sat, 04 Dec 2021 14:08:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/chrome-kuo-zhan-guo-nei-xia-zai-di-zhi/</guid>
      <description>&lt;p&gt;由于一些原因，Chrome 浏览器的官方拓展下载中心也是无法访问的，好在有一些镜像服务网站，只需要输入名称或者地址就可以代为下载了，比如：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://crxextractor.com&#34;&gt;https://crxextractor.com&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.crx4chrome.com&#34;&gt;https://www.crx4chrome.com&lt;/a&gt;&#xA;&lt;a href=&#34;https://yurl.sinaapp.com/crx.php&#34;&gt;https://yurl.sinaapp.com/crx.php&lt;/a&gt;&#xA;&lt;a href=&#34;https://yurl.sinaapp.com/crx2.php&#34;&gt;https://yurl.sinaapp.com/crx2.php&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maven单独的settings.xml配置文件，国内阿里云镜像</title>
      <link>https://blog.margrop.net/post/maven-setting-xml-config-file-in-china-using-aliyun-mirror/</link>
      <pubDate>Sat, 04 Dec 2021 14:06:23 +0800</pubDate>
      <guid>https://blog.margrop.net/post/maven-setting-xml-config-file-in-china-using-aliyun-mirror/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;settings xmlns=&amp;#34;http://maven.apache.org/SETTINGS/1.0.0&amp;#34;&#xA;      xmlns:xsi=&amp;#34;http://www.w3.org/2001/XMLSchema-instance&amp;#34;&#xA;      xsi:schemaLocation=&amp;#34;http://maven.apache.org/SETTINGS/1.0.0&#xA;                          https://maven.apache.org/xsd/settings-1.0.0.xsd&amp;#34;&amp;gt;&#xA;&#xA;      &amp;lt;mirrors&amp;gt;&#xA;        &amp;lt;mirror&amp;gt;  &#xA;            &amp;lt;id&amp;gt;alimaven&amp;lt;/id&amp;gt;  &#xA;            &amp;lt;name&amp;gt;aliyun maven&amp;lt;/name&amp;gt;  &#xA;            &amp;lt;url&amp;gt;https://maven.aliyun.com/repository/public&amp;lt;/url&amp;gt;&#xA;            &amp;lt;mirrorOf&amp;gt;central&amp;lt;/mirrorOf&amp;gt;          &#xA;        &amp;lt;/mirror&amp;gt;  &#xA;      &amp;lt;/mirrors&amp;gt;&#xA;&amp;lt;/settings&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>上海贝尔 E-140W-P，光猫配置</title>
      <link>https://blog.margrop.net/post/shanghai-e-140w-p-modem-password-and-config/</link>
      <pubDate>Sat, 04 Dec 2021 13:46:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/shanghai-e-140w-p-modem-password-and-config/</guid>
      <description>&lt;h1 id=&#34;telnet&#34;&gt;Telnet&lt;/h1&gt;&#xA;&lt;p&gt;telnet 命令：telnet 192.168.1.1&#xA;telnet 账号密码：telnetadmin / telnetadmin&lt;/p&gt;&#xA;&lt;h1 id=&#34;默认密码&#34;&gt;默认密码&lt;/h1&gt;&#xA;&lt;p&gt;telecomadmin&#xA;nE7jA%5m&#xA;telnet密码&#xA;telnetadmin / telnetadmin&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gridea同步github失败最终解决方案</title>
      <link>https://blog.margrop.net/post/gridea-sync-github-fail-solution/</link>
      <pubDate>Sat, 04 Dec 2021 11:36:32 +0800</pubDate>
      <guid>https://blog.margrop.net/post/gridea-sync-github-fail-solution/</guid>
      <description>&lt;h1 id=&#34;前言&#34;&gt;前言&lt;/h1&gt;&#xA;&lt;p&gt;废话不多说，解决这个问题的核心思路就是跑代理，如果你没有科学上网工具的话，那下面的也就用不着看了，建议你用&lt;code&gt;coding&lt;/code&gt;吧。&lt;/p&gt;&#xA;&lt;h1 id=&#34;重要提示&#34;&gt;重要提示&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Gridea&lt;/code&gt;官方置顶的&lt;code&gt;issue&lt;/code&gt;版本&lt;a href=&#34;https://github.com/getgridea/gridea/issues/890&#34;&gt;&lt;code&gt;2021.10.23更新，关于检测远程链接成功，但同步错误的案例收集与修复测试包&lt;/code&gt;&lt;/a&gt;，该版本的同步功能存在严重的&lt;code&gt;BUG&lt;/code&gt;，无法正常同步到&lt;code&gt;Github&lt;/code&gt;。下文基于&lt;code&gt;Gridea&lt;/code&gt;的正式&lt;code&gt;0.9.2&lt;/code&gt;版本测试通过。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenWRT / LEDE 设置跨网段访问方法</title>
      <link>https://blog.margrop.net/post/openwrt-or-lede-visit-different-network-via-route/</link>
      <pubDate>Sat, 04 Dec 2021 11:17:47 +0800</pubDate>
      <guid>https://blog.margrop.net/post/openwrt-or-lede-visit-different-network-via-route/</guid>
      <description>&lt;h1 id=&#34;1-静态ipv4路由增加路由表&#34;&gt;1. 静态IPv4路由，增加路由表&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;访问&lt;code&gt;网络&lt;/code&gt;-&amp;gt;&lt;code&gt;静态路由&lt;/code&gt;页面&#xA;需要填入&lt;code&gt;目标网段&lt;/code&gt;,&lt;code&gt;IPv4子网掩码&lt;/code&gt;,&lt;code&gt;IPv4网关&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;2-防火墙增加防火墙允许规则&#34;&gt;2. 防火墙，增加防火墙允许规则&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;访问&lt;code&gt;网络&lt;/code&gt;-&amp;gt;&lt;code&gt;防火墙&lt;/code&gt;-&amp;gt;&lt;code&gt;通讯规则&lt;/code&gt;页面&#xA;需要填入&lt;code&gt;名称&lt;/code&gt;,&lt;code&gt;匹配规则&lt;/code&gt;,&lt;code&gt;动作&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Mac编译N2N组件SuperNode和Edge</title>
      <link>https://blog.margrop.net/post/compile-n2n-supernode-and-edge-in-mac/</link>
      <pubDate>Tue, 09 Nov 2021 20:21:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/compile-n2n-supernode-and-edge-in-mac/</guid>
      <description>&lt;h1 id=&#34;参考httpswwwjianshucomp5021b70c3ff9&#34;&gt;参考：https://www.jianshu.com/p/5021b70c3ff9&lt;/h1&gt;&#xA;&lt;h1 id=&#34;使用brew安装必要软件&#34;&gt;使用Brew安装必要软件&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;brew install openssl&#xA;brew tap homebrew/cask&#xA;brew install --cask tuntap&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Mac编译N2N组件SuperNode和Edge</title>
      <link>https://blog.margrop.net/post/mac-bian-yi-n2n-zu-jian-supernode-he-edge/</link>
      <pubDate>Tue, 09 Nov 2021 20:21:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mac-bian-yi-n2n-zu-jian-supernode-he-edge/</guid>
      <description>参考：https://www.jianshu.com/p/5021b70c3ff9 使用Brew安装必要软件 brew install openssl brew tap homebrew/cask brew install --cask tuntap 提示：如果命令行提示安装 tuntap 失败，请进入系统设置中的Security &amp;amp; Privacy，选择Allow&#xA;从Github clone并且编译 cd ~ git clone https://github.com/ntop/n2n cd n2n git checkout 2.8-stable mkdir build cd build cmake .. make 将Edge复制到 /usr/local/bin/edge 并给予可执行权限 cp edge /usr/local/bin/ chmod +x /usr/local/bin/edge 测试是否能正常启动 ./edge -a 10.0.0.1 -c EfIvHDDSWEW3QM -k EfIvHDDSWEW3QM -l 127.0.0.1:2345 -v -f sudo edge -a 10.0.0.10 -c EfIvHDDSWEW3QM -k EfIvHDDSWEW3QM -l blog.margrop.net:2345 -v -f edgesh.sh #/bin/bash ps -e | grep &amp;#34;edge -a&amp;#34; | awk &amp;#39;{print $1}&amp;#39; | xargs sudo kill sudo edge -a 10.</description>
    </item>
    <item>
      <title>MacOS 自定义登录和注销脚本</title>
      <link>https://blog.margrop.net/post/macos-lign/</link>
      <pubDate>Thu, 04 Nov 2021 10:44:50 +0800</pubDate>
      <guid>https://blog.margrop.net/post/macos-lign/</guid>
      <description>&lt;h1 id=&#34;登录和注销脚本login-and-logout-scripts&#34;&gt;登录和注销脚本（Login and Logout Scripts）&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;重要提示&lt;/code&gt;：避免使用登录和注销脚本的原因有很多：&#xA;&lt;code&gt;Important&lt;/code&gt;: There are numerous reasons to avoid using login and logout scripts:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;登录和注销脚本是一种不推荐使用的技术。在大多数情况下，您应该改用launchd作业，如创建启动守护程序和代理中所述。&lt;/li&gt;&#xA;&lt;li&gt;Login and logout scripts are a deprecated technology. In most cases, you should use launchd jobs instead, as described inCreating Launch Daemons and Agents.&lt;/li&gt;&#xA;&lt;li&gt;登录和注销脚本以 root 身份运行，这存在安全风险。&lt;/li&gt;&#xA;&lt;li&gt;Login and logout scripts are run as root, which presents a security risk.&lt;/li&gt;&#xA;&lt;li&gt;一次只能安装每个脚本中的一个。它们适用于系统管理员；应用程序开发人员不应在已发布的软件中使用它们。&lt;/li&gt;&#xA;&lt;li&gt;Only one of each script can be installed at a time. They are intended for system administrators; application developers should not use them in released software.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker容器内如何连接宿主机的MySQL服务器</title>
      <link>https://blog.margrop.net/post/docker-connect-mysql-in-host-machine/</link>
      <pubDate>Thu, 30 Sep 2021 13:08:50 +0800</pubDate>
      <guid>https://blog.margrop.net/post/docker-connect-mysql-in-host-machine/</guid>
      <description>&lt;p&gt;博主最近遇到一种情况，从服务器拷贝了一份数据库在宿主机Mysql服务器上，想要用本地的数据库测试自己的代码正确性，但是项目程序都是靠docker一键部署的，于是必定要在docker容器里访问到本地的数据库。在探索中遇到了问题并得到了解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>论Mac电脑和TimeMachine的重要性</title>
      <link>https://blog.margrop.net/post/the-important-of-mac-and-timemachine/</link>
      <pubDate>Tue, 14 Sep 2021 16:55:10 +0800</pubDate>
      <guid>https://blog.margrop.net/post/the-important-of-mac-and-timemachine/</guid>
      <description>&lt;p&gt;今天是2021年9月14日。&lt;/p&gt;&#xA;&lt;p&gt;到今天为止，我已经使用 &lt;code&gt;MacOS&lt;/code&gt; 作为主力系统，已经有了2年左右的时间。&lt;/p&gt;&#xA;&lt;p&gt;不得不说，我现在已经深深的爱上了 &lt;code&gt;MacOS&lt;/code&gt;。如果我需要购买下一台笔记本，我一定会购买 &lt;code&gt;MacBookPro&lt;/code&gt;高配。&lt;/p&gt;</description>
    </item>
    <item>
      <title>黑苹果（Hackintosh）核显或非核显处理器，如何修改 OpenCore 配置文件</title>
      <link>https://blog.margrop.net/post/hei-ping-guo-hackintoshhe-xian-huo-fei-he-xian-chu-li-qi-ru-he-xiu-gai-opencore-pei-zhi-wen-jian/</link>
      <pubDate>Mon, 13 Sep 2021 16:48:17 +0800</pubDate>
      <guid>https://blog.margrop.net/post/hei-ping-guo-hackintoshhe-xian-huo-fei-he-xian-chu-li-qi-ru-he-xiu-gai-opencore-pei-zhi-wen-jian/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;注：以下仅针对类似配置机型，即9代&lt;code&gt;Intel&lt;/code&gt;的CPU，其他机型请绕道&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;重要说明&#34;&gt;重要说明&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;OpenCore&lt;/code&gt;里面配置&lt;font color=&#34;#dd0000&#34; size=&#34;6&#34;&gt;二进制均为倒序&lt;/font&gt;，例如下面的&lt;code&gt;platform-id&lt;/code&gt;，如果需要修改其他机型的，需要倒序后再填入&lt;code&gt;platform-id&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;这里是&lt;code&gt;黑果小兵&lt;/code&gt;大神整理的&lt;code&gt;Coffee Lake帧缓冲区补丁及UHD630 Coffee Lake ig-platform-id数据整理&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.daliansky.net/Coffee-Lake-frame-buffer-patch-and-UHD630-Coffee-Lake-ig-platform-id-data-finishing.html&#34;&gt;https://blog.daliansky.net/Coffee-Lake-frame-buffer-patch-and-UHD630-Coffee-Lake-ig-platform-id-data-finishing.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;这里是&lt;code&gt;黑果小兵&lt;/code&gt;大神整理的&lt;code&gt;黑苹果必备：Intel核显platform ID整理及smbios速查表&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.daliansky.net/Intel-core-display-platformID-finishing.html&#34;&gt;https://blog.daliansky.net/Intel-core-display-platformID-finishing.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h1 id=&#34;通用说明如何修改三码&#34;&gt;通用说明：如何修改三码&lt;/h1&gt;&#xA;&lt;p&gt;下载整包后，如果之前在 Clover 时就使用&lt;code&gt;iMac19,1&lt;/code&gt;机型，可直接使用之前的三码，或使用 &lt;a href=&#34;https://mackie100projects.altervista.org/download-clover-configurator/&#34;&gt;Clover Configurator&lt;/a&gt; （其他工具亦可）选择&lt;code&gt;iMac19,1&lt;/code&gt;机型生成新的三码 + ROM，用 ProperTree 打开&lt;code&gt;/EFI/OC/config.plist&lt;/code&gt;文件，填入到 PlatformInfo &amp;gt; Generic 位置中（如下图）。&#xA;&lt;img src=&#34;https://blog.margrop.net/post-images/external/26da82aabb30cd02.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>省运会的运动项目分析——运动项目分类</title>
      <link>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-xiang-mu-fen-lei/</link>
      <pubDate>Sat, 11 Sep 2021 15:30:06 +0800</pubDate>
      <guid>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-xiang-mu-fen-lei/</guid>
      <description>&lt;h1 id=&#34;0-通用要求&#34;&gt;0. 通用要求&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;提供 RESTful 接口和数据文件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;比赛项目具体数据（历史记录、历史成绩）、&lt;/li&gt;&#xA;&lt;li&gt;比赛项目场馆信息&lt;/li&gt;&#xA;&lt;li&gt;参赛代表团信息、运动员号码、秩序单&lt;/li&gt;&#xA;&lt;li&gt;成绩公告、秩序单（决赛）、奖牌公告、积分公告、破纪录文件&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>基于 PVE &#43; 软路由 &#43; NAS的家里网络架构梳理（面向技术人员）</title>
      <link>https://blog.margrop.net/post/home-network-architecture-based-pve-and-soft-route-and-nas/</link>
      <pubDate>Fri, 03 Sep 2021 09:50:49 +0800</pubDate>
      <guid>https://blog.margrop.net/post/home-network-architecture-based-pve-and-soft-route-and-nas/</guid>
      <description>&lt;h1 id=&#34;家庭网络概述&#34;&gt;家庭网络概述&lt;/h1&gt;&#xA;&lt;p&gt;家庭网络，不会像正规的虚拟化平台那样，搞『业务平面』『管理平面』『数据平面』三个平面分离。&#xA;家庭网络需要的是方便，那么上面说的三个平面，就需要融合在一起共用网络，才能管理方便。&#xA;家庭网络的安全也十分重要，谁也不希望家里的网络大门就一直对外敞开着。&lt;/p&gt;&#xA;&lt;h1 id=&#34;准备硬件设备&#34;&gt;准备硬件设备&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;电信光猫（目前只有电信宽带，才有可能要到公网IP）&lt;/li&gt;&#xA;&lt;li&gt;多网口工控机（软路由，性能不要太差）&lt;/li&gt;&#xA;&lt;li&gt;普通台式机或服务器（能保证7x24小时开机就行）&lt;/li&gt;&#xA;&lt;li&gt;AC + AP（AC 和 AP需要同一个品牌，考虑到 5G WIFI 穿墙性能极差，建议每个房间都配1个5G AP）&lt;/li&gt;&#xA;&lt;li&gt;NAS（建议白裙或黑裙）&lt;/li&gt;&#xA;&lt;li&gt;网线&lt;/li&gt;&#xA;&lt;li&gt;U盘&lt;/li&gt;&#xA;&lt;li&gt;可插网线的笔记本电脑（配置网络用）&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>电信光猫 HGU421N_V3使用</title>
      <link>https://blog.margrop.net/post/telecom-optical-modem-hgu421n_v3-usage/</link>
      <pubDate>Thu, 02 Sep 2021 10:59:03 +0800</pubDate>
      <guid>https://blog.margrop.net/post/telecom-optical-modem-hgu421n_v3-usage/</guid>
      <description>&lt;h1 id=&#34;note&#34;&gt;Note:&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Ethernet port 4: 1000Mb/s, others 10/100Mb/s&#xA;Password of TTY might NOT be 以用户名：admin，密码：v2mprt 登录&#xA;Any powerful Route compatible  with ChinaTelecom EPON and has  2 1000Mb/s ports at least?&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;e8-c终端用户使用手册&#34;&gt;e8-C终端用户使用手册:&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://js.189.cn/support/help_support/images/e8help/e8-cHelpHandbook.pdf&#34;&gt;http://js.189.cn/support/help_support/images/e8help/e8-cHelpHandbook.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;产品技术规范&#34;&gt;产品技术规范:&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.huaqinworld.com/productshow.aspx?id=409&#34;&gt;http://www.huaqinworld.com/productshow.aspx?id=409&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;华勤hgu421n-v30-宽带猫破解&#34;&gt;华勤HGU421N v3.0 宽带猫破解:&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://bbs.et8.net/bbs/showthread.php?t=1309600&#34;&gt;https://bbs.et8.net/bbs/showthread.php?t=1309600&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>NodeRed代码版本控制</title>
      <link>https://blog.margrop.net/post/node-red-enable-version-control/</link>
      <pubDate>Sat, 28 Aug 2021 14:40:50 +0800</pubDate>
      <guid>https://blog.margrop.net/post/node-red-enable-version-control/</guid>
      <description>&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;之前对于node-red代码的备份都是复制~/.node-red/flows_xxx.json文件并保存n个版本，很烦，即使使用Beyond Compare这种对比软件去对比未美化格式的json文件查看更改内容也是一团糟，&lt;/p&gt;&#xA;&lt;h1 id=&#34;解决问题json-格式美化&#34;&gt;解决问题：JSON 格式美化&lt;/h1&gt;&#xA;&lt;p&gt;搜索时发现可以通过更改&lt;code&gt;~/.node-red/settings.js&lt;/code&gt;中的设置使&lt;code&gt;flows_xxx.json&lt;/code&gt;文件保存时就美化格式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>git删除远程分支报错: remote ref does not exist</title>
      <link>https://blog.margrop.net/post/git-shan-chu-yuan-cheng-fen-zhi-bao-cuo-remote-ref-does-not-exist/</link>
      <pubDate>Fri, 27 Aug 2021 10:48:48 +0800</pubDate>
      <guid>https://blog.margrop.net/post/git-shan-chu-yuan-cheng-fen-zhi-bao-cuo-remote-ref-does-not-exist/</guid>
      <description>&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;在视图删除某个远程分支的时候显示：&lt;code&gt;remote ref does not exist&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;解决方案&#34;&gt;解决方案&lt;/h1&gt;&#xA;&lt;p&gt;解决方案是首先清除远程分支的本地缓存：&lt;code&gt;git fetch -p origin&lt;/code&gt;&#xA;可以看到，我们要删除的远程分支其实已经删除了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>省运会的运动项目分析——赛程和结果 Schedule and results</title>
      <link>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-yuan-athletes/</link>
      <pubDate>Tue, 24 Aug 2021 13:27:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-yuan-athletes/</guid>
      <description>01. 田径 Athletics 0111. 田径时间表 开始时间 地点 场次 状态 0112. 田径出场名单 阶段、分组和轮次|赛道或顺序|选手号码|姓名 &amp;mdash;|&amp;mdash;|&amp;mdash;</description>
    </item>
    <item>
      <title>省运会的运动项目分析——运动项目 sports</title>
      <link>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi/</link>
      <pubDate>Tue, 24 Aug 2021 13:27:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi/</guid>
      <description>通用时间表 开始时间 地点 场次 状态 | - | - | - 通用出场名单一 阶段、分组和轮次 赛道 或 顺序 选手号码 姓名 | - | - | - 通用出场名单二 通用成绩一 排名 最终成绩 | - 通用成绩二 比赛 | 第1局 | 第2局 | 第3局 | 第4局 |第5局 | 第6局 | 第7局&#xA;详细成绩 大项 小项 奥运会对应页面 详细成绩 01 田径 - https://olympics.com/tokyo-2020/zh/sports/athletics/ - | 短跑 | &amp;lt;&amp;gt; | - | 长跑 | &amp;lt;&amp;gt; | 距离/时间/排名 | 高度/远度 | &amp;lt;&amp;gt; | 试跳/成绩/最佳/排名 | 接力 | &amp;lt;&amp;gt; | 号码/姓名 02 游泳 | - | &amp;lt;&amp;gt; | - | 游泳 | https://olympics.</description>
    </item>
    <item>
      <title>省运会的运动项目分析——运动员和代表队 athletes &amp; nocs</title>
      <link>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-yuan-he-dai-biao-dui-athletes-and-nocs/</link>
      <pubDate>Tue, 24 Aug 2021 13:27:05 +0800</pubDate>
      <guid>https://blog.margrop.net/post/sheng-yun-hui-de-yun-dong-xiang-mu-fen-xi-yun-dong-yuan-he-dai-biao-dui-athletes-and-nocs/</guid>
      <description>运动员 姓名 头像 市 代表队 运动类型 代表队 队名 队标 </description>
    </item>
    <item>
      <title>解决 Gitlab 仓库数据恢复后，旧仓库无法提交的问题 error: unpack failed: unable to create temporary object directory</title>
      <link>https://blog.margrop.net/post/jie-jue-gitlab-cang-ku-shu-ju-hui-fu-hou-jiu-cang-ku-wu-fa-ti-jiao-de-wen-ti-error-unpack-failed-unable-to-create-temporary-object-directory/</link>
      <pubDate>Tue, 24 Aug 2021 10:05:20 +0800</pubDate>
      <guid>https://blog.margrop.net/post/jie-jue-gitlab-cang-ku-shu-ju-hui-fu-hou-jiu-cang-ku-wu-fa-ti-jiao-de-wen-ti-error-unpack-failed-unable-to-create-temporary-object-directory/</guid>
      <description>&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Gitlab&lt;/code&gt; 服务器刚进行完数据恢复&lt;/p&gt;&#xA;&lt;p&gt;所有的旧仓库无法进行&lt;code&gt;git push&lt;/code&gt;操作&lt;/p&gt;&#xA;&lt;p&gt;错误提示&lt;code&gt;error: unpack failed: unable to create temporary object directory&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;但是新增的仓库，可以正常进行&lt;code&gt;git push&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>群晖 Synology Docker Gitlab 套件更新</title>
      <link>https://blog.margrop.net/post/qun-hui-synology-docker-gitlab-tao-jian-geng-xin/</link>
      <pubDate>Mon, 23 Aug 2021 17:30:14 +0800</pubDate>
      <guid>https://blog.margrop.net/post/qun-hui-synology-docker-gitlab-tao-jian-geng-xin/</guid>
      <description>&lt;h1 id=&#34;警告&#34;&gt;警告&lt;/h1&gt;&#xA;&lt;p&gt;升级时会清空环境设置&#xA;这一点群晖有点。。。&lt;/p&gt;&#xA;&lt;h1 id=&#34;tips&#34;&gt;TIPS&lt;/h1&gt;&#xA;&lt;p&gt;基本上只要把&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;GITLAB_HTTPS=true&#xA;SSL_SELF_SIGNED=true&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;给加回来&lt;/p&gt;&#xA;&lt;p&gt;再把端口号从&lt;code&gt;80&lt;/code&gt;改为&lt;code&gt;443&lt;/code&gt;即可&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 PostgreSQL 10 升级至 11，Permissions should be u=rwx (0700)问题</title>
      <link>https://blog.margrop.net/post/jie-jue-postgresql-10-sheng-ji-zhi-11permissions-should-be-urwx-0700wen-ti/</link>
      <pubDate>Mon, 23 Aug 2021 16:45:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/jie-jue-postgresql-10-sheng-ji-zhi-11permissions-should-be-urwx-0700wen-ti/</guid>
      <description>&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;今天打算把 Gitlab 从 11 版本升级到 12 版本，按默认的步骤试了很多次都没成功。&lt;/p&gt;&#xA;&lt;p&gt;真不甘心，找了半天，终于在 PostgreSQL 日志里面，发现了错误&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;command: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/lib/postgresql/10/bin/pg_ctl&amp;#34;&lt;/span&gt; -w -l &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pg_upgrade_server.log&amp;#34;&lt;/span&gt; -D &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/var/lib/postgresql/10/main&amp;#34;&lt;/span&gt; -o &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-p 50432 -c autovacuum=off -c autovacuum_freeze_max_age=2000000000 -c config_file=/var/lib/postgresql/10/main/postgresql.conf --hba_file=/var/lib/postgresql/10/main/pg_hba.conf --ident_file=/var/lib/postgresql/10/main/pg_ident.conf -c listen_addresses=&amp;#39;&amp;#39; -c unix_socket_permissions=0700&amp;#34;&lt;/span&gt; start &amp;gt;&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pg_upgrade_server.log&amp;#34;&lt;/span&gt; 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pg_ctl: another server might be running; trying to start server anyway&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;waiting &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; server to start....2021-08-23 07:11:37.208 UTC &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1385&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; FATAL:  data directory &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/var/lib/postgresql/10/main&amp;#34;&lt;/span&gt; has group or world access&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021-08-23 07:11:37.208 UTC &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;1385&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; DETAIL:  Permissions should be u&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;rwx &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;0700&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; stopped waiting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pg_ctl: could not start server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Examine the log output.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关键的两行日志如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2021-08-23 07:11:37.208 UTC [1385] FATAL:  data directory &amp;#34;/var/lib/postgresql/10/main&amp;#34; has group or world access&#xA;2021-08-23 07:11:37.208 UTC [1385] DETAIL:  Permissions should be u=rwx (0700).&#xA; stopped waiting&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>论备份和 RAID 1 的重要性</title>
      <link>https://blog.margrop.net/post/lun-bei-fen-he-raid-1-de-chong-yao-xing/</link>
      <pubDate>Mon, 23 Aug 2021 10:47:13 +0800</pubDate>
      <guid>https://blog.margrop.net/post/lun-bei-fen-he-raid-1-de-chong-yao-xing/</guid>
      <description>第一次硬盘损毁 我第一次因为硬盘损毁，丢失数据，大约在2010年。&#xA;当时，BTC 价格大约在7-8刀，折合约 40-50 RMB&#xA;当时，许多网站在免费赠送小额 BTC，我当时也顺手领取了 0.02 BTC&#xA;当时，笔记本硬盘突然损毁，丢失了当时所有的数据，课设，作业，以及 BTC&#xA;第三次硬盘损毁 今天，历史又一次重演了&#xA;由于心存侥幸，家里有一台 NAS 并没有配置 RAID 1，家里今天突然跳闸，NAS 的存储空间直接损毁，全部应用和数据都毁于一旦&#xA;幸运的是，这并不是我第一次的硬盘损坏，这台 NAS 数据有每日的定时 BACKUP&#xA;幸运的是，我只需要按部就班的恢复数据即可&#xA;不幸的是，由于之前从来没恢复过备份数据，恢复过程异常坎坷&#xA;再次总结经验教训 所有的 NAS 都需要 RAID 1 重要数据要备份!!! 重要数据要备份!!! 重要数据要备份!!! </description>
    </item>
    <item>
      <title>如何从 Proxmox VE 6.4 升级到 Proxmox VE 7.0?</title>
      <link>https://blog.margrop.net/post/upgrade-from-pve-6.x-to-7.0/</link>
      <pubDate>Mon, 16 Aug 2021 14:52:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/upgrade-from-pve-6.x-to-7.0/</guid>
      <description>&lt;p&gt;好久没关注 Proxmox VE 的官网。&lt;/p&gt;&#xA;&lt;p&gt;直至前几天推荐 PVE  给同事使用时，才惊觉又升级大版本了。&lt;/p&gt;&#xA;&lt;p&gt;作为升级强迫症患者，当然会选择立即升级到最新版本。&lt;/p&gt;&#xA;&lt;p&gt;很早之前经历过从 PVE 5.x 升级到 6.0 的过程，现在又要开始 PVE 6.4 升级到 7.0。&lt;/p&gt;&#xA;&lt;p&gt;总之，老老实实看官方教程就对了。&lt;/p&gt;&#xA;&lt;h1 id=&#34;下面是各个-pve-大版本升级的官方教程&#34;&gt;下面是各个 PVE 大版本升级的官方教程：&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0&#34;&gt;Upgrade from Proxmox VE 6.x to 7.0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Upgrade_from_5.x_to_6.0&#34;&gt;Upgrade from Proxmox VE 5.x to 6.0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Upgrade_from_4.x_to_5.0&#34;&gt;Upgrade from Proxmox VE 4.x to 5.0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pve.proxmox.com/wiki/Upgrade_from_3.x_to_4.0&#34;&gt;Upgrade from Proxmox VE 3.x to 4.0&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>人生大事 - The Milestone</title>
      <link>https://blog.margrop.net/post/the-milestone/</link>
      <pubDate>Mon, 16 Aug 2021 14:40:52 +0800</pubDate>
      <guid>https://blog.margrop.net/post/the-milestone/</guid>
      <description>&lt;p&gt;前天终于到了一个时间节点，按规定，拿号，排队，交钱，领证。&lt;/p&gt;&#xA;&lt;p&gt;终于本本到手，虽然一直被埋怨，但没什么好后悔的。&lt;/p&gt;&#xA;&lt;p&gt;over&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】Android实现系统状态栏的隐藏和显示功能</title>
      <link>https://blog.margrop.net/post/zhuan-android-shi-xian-xi-tong-zhuang-tai-lan-de-yin-cang-he-xian-shi-gong-neng/</link>
      <pubDate>Fri, 09 Jul 2021 20:41:13 +0800</pubDate>
      <guid>https://blog.margrop.net/post/zhuan-android-shi-xian-xi-tong-zhuang-tai-lan-de-yin-cang-he-xian-shi-gong-neng/</guid>
      <description>&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;尤其视频类APP，需要实现切换到横屏后，隐藏系统状态栏，全屏显示，以实现看更大画面的视频。当切换回&#xA;竖屏后，又显示状态栏。那么如何实现呢？&lt;/p&gt;&#xA;&lt;h1 id=&#34;网上流传着很多种做法&#34;&gt;网上流传着很多种做法&lt;/h1&gt;&#xA;&lt;p&gt;比如&#xA;1、在&lt;code&gt;AndroidManifest.xml&lt;/code&gt;文件中修改&lt;code&gt;theme&lt;/code&gt;为&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;android:theme=&amp;#34;@android:style/Theme.NoTitleBar.Fullscreen&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2、在&lt;code&gt;setContentView&lt;/code&gt;方法前执行如下代码：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;requestWindowFeature(Window.FEATURE_NO_TITLE) &#xA; getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3、通过&lt;code&gt;View&lt;/code&gt;的&lt;code&gt;setSystemUiVisibility&lt;/code&gt;方法&lt;/p&gt;&#xA;&lt;p&gt;4、通过如下代码实现状态栏的隐藏和显示：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //隐藏状态栏 &#xA;getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //显示状态栏&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在我的项目中是要实现如下需求：在当前&lt;code&gt;Activity&lt;/code&gt;中，切换到横屏后，不能销毁&lt;code&gt;Activity&lt;/code&gt;再重新初始化，并且实现隐藏系统状态栏，全屏显示；当切换回竖屏后，又显示状态栏。另外，我不需要隐藏标题栏。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7下，pip install -upgrade pip 导致 pip 无法使用的问题 ImportError: No module named typing</title>
      <link>https://blog.margrop.net/post/centos-7-no-module-named-typing-after-upgrade-pip/</link>
      <pubDate>Wed, 16 Jun 2021 11:13:46 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-7-no-module-named-typing-after-upgrade-pip/</guid>
      <description>&lt;h1 id=&#34;问题现象&#34;&gt;问题现象&lt;/h1&gt;&#xA;&lt;p&gt;pip安装某第三方 SDK，提示升级 pip，按提示升级 pip 后报错&lt;/p&gt;&#xA;&lt;h2 id=&#34;导致报错的-pip-升级命令&#34;&gt;导致报错的 pip 升级命令&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install --upgrade pip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;pip-错误提示&#34;&gt;pip 错误提示&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Traceback &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;most recent call last&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/bin/pip&amp;#34;&lt;/span&gt;, line 9, in &amp;lt;module&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    load_entry_point&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pip==21.1.2&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;console_scripts&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;pip&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/lib/python2.7/site-packages/pkg_resources.py&amp;#34;&lt;/span&gt;, line 378, in load_entry_point&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; get_distribution&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;dist&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;.load_entry_point&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;group, name&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/lib/python2.7/site-packages/pkg_resources.py&amp;#34;&lt;/span&gt;, line 2566, in load_entry_point&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; ep.load&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/lib/python2.7/site-packages/pkg_resources.py&amp;#34;&lt;/span&gt;, line 2260, in load&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    entry &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; __import__&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;self.module_name, globals&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;,globals&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__name__&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  File &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/usr/lib/python2.7/site-packages/pip/__init__.py&amp;#34;&lt;/span&gt;, line 1, in &amp;lt;module&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    from typing import List, Optional&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ImportError: No module named typing&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>人生大事 - The Great Event</title>
      <link>https://blog.margrop.net/post/the-great-event/</link>
      <pubDate>Mon, 07 Jun 2021 08:57:06 +0800</pubDate>
      <guid>https://blog.margrop.net/post/the-great-event/</guid>
      <description>&lt;p&gt;人生一共也没几次机会干大事&lt;/p&gt;&#xA;&lt;p&gt;昨天就干了一件&lt;/p&gt;&#xA;&lt;p&gt;至于结果如何，还得等待时间来检验&lt;/p&gt;</description>
    </item>
    <item>
      <title>Synology Chat 下载安装地址</title>
      <link>https://blog.margrop.net/post/synology-chat-download-address/</link>
      <pubDate>Mon, 07 Jun 2021 08:31:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-chat-download-address/</guid>
      <description>&lt;p&gt;由于众所周知的原因，&lt;code&gt;Chat&lt;/code&gt; 目前已经被消失了&lt;/p&gt;&#xA;&lt;p&gt;但 &lt;code&gt;Synology&lt;/code&gt; 的国际版的站点仍然可以正常下载使用&lt;/p&gt;&#xA;&lt;p&gt;且用且珍惜&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;DS3617xs&lt;/code&gt;国际版下载中心&#xA;&lt;a href=&#34;https://www.synology.com/en-global/support/download/DS3617xs&#34;&gt;https://www.synology.com/en-global/support/download/DS3617xs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;Chat&lt;/code&gt; 套件下载地址&#xA;&lt;a href=&#34;https://global.download.synology.com/download/Package/spk/Chat/2.3.0-1738/Chat-x86_64-2.3.0-1738.spk?model=DS3617xs&amp;bays=12&amp;dsm_version=6.2.4&amp;build_number=25556&#34;&gt;https://global.download.synology.com/download/Package/spk/Chat/2.3.0-1738/Chat-x86_64-2.3.0-1738.spk?model=DS3617xs&amp;bays=12&amp;dsm_version=6.2.4&amp;build_number=25556&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;Chat&lt;/code&gt; 安卓版本下载地址&#xA;&lt;a href=&#34;https://global.download.synology.com/download/Mobile/Android-DSchat/2.7.0-499/Android-SynologyChat.2.7.0-499.ww.apk&#34;&gt;https://global.download.synology.com/download/Mobile/Android-DSchat/2.7.0-499/Android-SynologyChat.2.7.0-499.ww.apk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/chat_2_7_0_apk.png&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Chat 苹果用户得自行找个海外iCloud账号安装&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;上面的 &lt;code&gt;Chat&lt;/code&gt; 套件和 &lt;code&gt;APK&lt;/code&gt; 已备份到本站下载中心&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Mac OS X Lion 10 7 4 如何安装Homebrew</title>
      <link>https://blog.margrop.net/post/mac-os-x-lion-10-7-4-ru-he-an-zhuang-homebrew/</link>
      <pubDate>Sat, 29 May 2021 17:30:33 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mac-os-x-lion-10-7-4-ru-he-an-zhuang-homebrew/</guid>
      <description>&lt;p&gt;参考文章：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mac OS X Lion 10 7 4 如何安装Homebrew&#xA;&lt;a href=&#34;http://ocdman.github.io/2018/10/08/Mac-OS-X-Lion-10-7-4-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85Homebrew/&#34;&gt;http://ocdman.github.io/2018/10/08/Mac-OS-X-Lion-10-7-4-%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85Homebrew/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;【macOS】brew安装&#xA;&lt;a href=&#34;https://www.jianshu.com/p/1e5e72089a84&#34;&gt;https://www.jianshu.com/p/1e5e72089a84&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;准备工作&#34;&gt;准备工作&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;需要手工编译安装&lt;code&gt;OpenSSL 1.1.1k&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;需要手工编译安装&lt;code&gt;curl&lt;/code&gt;最新版，注意编译时需要&lt;code&gt;OpenSSL&lt;/code&gt;和&lt;code&gt;cacert.pem&lt;/code&gt;证书&lt;/li&gt;&#xA;&lt;li&gt;需要自行去 &lt;code&gt;http://git-scm.com/&lt;/code&gt; 下载并安装最新版本的&lt;code&gt;git&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;重要的特殊操作&#34;&gt;重要的特殊操作&lt;/h1&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mkdir -p /usr/local/opt/curl/bin&#xA;mkdir -p /usr/loca/opt/git/bin&#xA;ln -s /usr/local/bin/curl /usr/local/opt/curl/bin/curl&#xA;ln -s /usr/local/bin/git /usr/local/opt/git/bin/git&#xA;&#xA;mv /usr/bin/curl /usr/bin/curl_bak&#xA;cp /usr/local/bin/curl /usr/bin/curl&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AppDaemon （HADashboard）安装教程</title>
      <link>https://blog.margrop.net/post/how-to-install-appdaemon-hadashboard/</link>
      <pubDate>Sat, 29 May 2021 14:22:56 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-install-appdaemon-hadashboard/</guid>
      <description>&lt;h1 id=&#34;安装准备&#34;&gt;安装准备&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HomeAssistant 访问地址，以及永久 Token&lt;/li&gt;&#xA;&lt;li&gt;Linux 运行环境&lt;/li&gt;&#xA;&lt;li&gt;Python3 运行环境（下面是基于 CentOS 7 的）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install python3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pip install -U pip3 setuptools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Vim打开文件中文乱码</title>
      <link>https://blog.margrop.net/post/vim-open-files-messy-code-solution/</link>
      <pubDate>Sat, 15 May 2021 16:27:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/vim-open-files-messy-code-solution/</guid>
      <description>&lt;h1 id=&#34;解决办法&#34;&gt;解决办法&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;编辑 ~/.vimrc 文件（没有则手动创建） 添加如下几行&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set fileencodings&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf-8,ucs-bom,gb18030,gbk,gb2312,cp936&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set termencoding&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;set encoding&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf-8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>解决 HAVCS 在最新版本的 HomeAssistant 无法正常启动的问题，AttributeError: &#39;&#39;ApiConfig&#39;&#39; object has no attribute &#39;&#39;base_url</title>
      <link>https://blog.margrop.net/post/homeassistant-attributeerror-apiconfig-object-has-no-attribute-base_url/</link>
      <pubDate>Wed, 12 May 2021 18:12:02 +0800</pubDate>
      <guid>https://blog.margrop.net/post/homeassistant-attributeerror-apiconfig-object-has-no-attribute-base_url/</guid>
      <description>&lt;h1 id=&#34;不要频繁升级-ha2021年5月15日更新&#34;&gt;不要频繁升级 HA【2021年5月15日更新】&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;强烈不建议升级到 core-2021.3.1 以及之后的版本，包括 core-2021.5.3&lt;/code&gt;&#xA;&lt;code&gt;从 core-2021.3.1 以后的版本有一些莫名的 bug，目前博主稳定使用的版本还是 core-2021.2.3&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;问题描述&#34;&gt;问题描述&lt;/h1&gt;&#xA;&lt;p&gt;博主最近把 &lt;code&gt;HomeAssistant&lt;/code&gt; 升级到最新版本后，&lt;code&gt;HAVCS&lt;/code&gt; 就无法正常启动了&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;HomeAssistant&lt;/code&gt;正常运行&lt;code&gt;HAVCS&lt;/code&gt;的版本：core-2021.2.3&#xA;&lt;code&gt;HomeAssistant&lt;/code&gt;无法运行&lt;code&gt;HAVCS&lt;/code&gt;的版本：core-2021.5.3&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;查看 &lt;code&gt;HomeAssistant&lt;/code&gt; 的日志后发现，出现了一个错误&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;AttributeError: &amp;#39;ApiConfig&amp;#39; object has no attribute &amp;#39;base_url&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>HomeAssistant 添加自定义的红外遥控器，并支持天猫精灵和小度小度</title>
      <link>https://blog.margrop.net/post/homeassistant-tian-jia-zi-ding-yi-de-hong-wai-yao-kong-qi-ji-yu-mi-jia-wan-neng-yao-kong-qi/</link>
      <pubDate>Wed, 12 May 2021 16:09:09 +0800</pubDate>
      <guid>https://blog.margrop.net/post/homeassistant-tian-jia-zi-ding-yi-de-hong-wai-yao-kong-qi-ji-yu-mi-jia-wan-neng-yao-kong-qi/</guid>
      <description>&lt;h1 id=&#34;准备工作&#34;&gt;准备工作&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;已联网的&lt;code&gt;米家万能遥控器&lt;/code&gt;，且已添加到&lt;code&gt;HomeAssistant&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;米家万能遥控器&lt;/code&gt;的&lt;code&gt;IP 地址&lt;/code&gt;和&lt;code&gt;token&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;IP 地址&lt;/code&gt;如何获取？&#xA;在手机端打开&lt;code&gt;米家 APP&lt;/code&gt;，选择已绑定小米账号的设备&#xA;点击进入，然后点右上角的&lt;code&gt;...&lt;/code&gt;-&amp;gt;&lt;code&gt;更多设置&lt;/code&gt;-&amp;gt;&lt;code&gt;网络信息&lt;/code&gt;，即可查看设备的&lt;code&gt;IP 地址&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;token&lt;/code&gt;如何获取？&#xA;参考1：&lt;a href=&#34;https://github.com/PiotrMachowski/Xiaomi-cloud-tokens-extractor&#34;&gt;使用开源工具导出小米Token&lt;/a&gt;&#xA;参考2：&lt;a href=&#34;https://www.home-assistant.io/integrations/xiaomi_miio/#retrieving-the-access-token&#34;&gt;Retrieving the Access Token&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>HomeAssistant 接入天猫精灵，2021年版本</title>
      <link>https://blog.margrop.net/post/homeassistant-access-aligenie-aliyun/</link>
      <pubDate>Mon, 10 May 2021 22:19:34 +0800</pubDate>
      <guid>https://blog.margrop.net/post/homeassistant-access-aligenie-aliyun/</guid>
      <description>不要频繁升级 HA【2021年5月15日更新】 强烈不建议升级到 core-2021.3.1 以及之后的版本，包括 core-2021.5.3 从 core-2021.3.1 以后的版本有一些莫名的 bug，目前博主稳定使用的版本还是 core-2021.2.3&#xA;天猫精灵平台： https://iot.aligenie.com/skill/home&#xA;阿里生活物联网平台： https://living.aliyun.com/</description>
    </item>
    <item>
      <title>开发者必备Chrome插件</title>
      <link>https://blog.margrop.net/post/chrome-plugins-that-developers-must-install/</link>
      <pubDate>Mon, 10 May 2021 09:18:24 +0800</pubDate>
      <guid>https://blog.margrop.net/post/chrome-plugins-that-developers-must-install/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;注：请自行解决无法访问&lt;code&gt;chrome.google.com&lt;/code&gt;的问题&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>reboot 后 Docker服务及容器自动启动设置</title>
      <link>https://blog.margrop.net/post/reboot-docker-server-auto-start/</link>
      <pubDate>Tue, 06 Apr 2021 14:39:32 +0800</pubDate>
      <guid>https://blog.margrop.net/post/reboot-docker-server-auto-start/</guid>
      <description>&lt;p&gt;重启reboot操作系统后，发现docker 服务未启动，容器也未启动，天生反骨，怎么才能重启后自动启动呢？&lt;/p&gt;&#xA;&lt;h1 id=&#34;解决问题两个问题&#34;&gt;解决问题两个问题：&lt;/h1&gt;&#xA;&lt;p&gt;1、docker服务自动重启设置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl enable docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/external/cd1b1425e8c3d0f4.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>gperftools安装与使用分析java堆外内存</title>
      <link>https://blog.margrop.net/post/gperftools-install-analysis-memory-out-of-heap/</link>
      <pubDate>Tue, 30 Mar 2021 09:54:54 +0800</pubDate>
      <guid>https://blog.margrop.net/post/gperftools-install-analysis-memory-out-of-heap/</guid>
      <description>&lt;h1 id=&#34;centos&#34;&gt;CentOS&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用 yum 安装&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install gperftools libunwind&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;可选，PDF 支持&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install graphviz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;设置环境变量&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export LD_PRELOAD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/lib64/libtcmalloc.so&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export HEAPPROFILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/DATA1/admin_tmp/gzip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 6.4 日常升级命令</title>
      <link>https://blog.margrop.net/post/proxmox-ve-upgrade-software-command/</link>
      <pubDate>Mon, 29 Mar 2021 08:23:52 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-upgrade-software-command/</guid>
      <description>&lt;h1 id=&#34;移除未使用的linux内核&#34;&gt;移除未使用的Linux内核&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pvekclean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;更新软件&#34;&gt;更新软件：&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt update -y &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt dist-upgrade -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;去掉未订阅的提示支持--pve-63--64&#34;&gt;去掉未订阅的提示，支持  PVE 6.3 / 6.4&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i_orig &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s/data.status === &amp;#39;Active&amp;#39;/true/g&amp;#34;&lt;/span&gt; /usr/share/pve-manager/js/pvemanagerlib.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i_orig &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s/if (res === null || res === undefined || \!res || res/if(/g&amp;#34;&lt;/span&gt; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sed -i_orig &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;s/.data.status.toLowerCase() !== &amp;#39;active&amp;#39;/false/g&amp;#34;&lt;/span&gt; /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl restart pveproxy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Java基于 SpringBoot 的 JNI 本地方法库加载器</title>
      <link>https://blog.margrop.net/post/java-spring-boot-jni-java-native-interface-library-loader/</link>
      <pubDate>Sat, 27 Mar 2021 16:37:31 +0800</pubDate>
      <guid>https://blog.margrop.net/post/java-spring-boot-jni-java-native-interface-library-loader/</guid>
      <description>&lt;p&gt;由于Java跨平台需要，自行写了一个跨平台的 JNI 本地方法库加载器。&lt;/p&gt;&#xA;&lt;h1 id=&#34;简单实现逻辑&#34;&gt;简单实现逻辑&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;根据环境变量&lt;code&gt;os.name&lt;/code&gt;，判断当前系统属于&lt;code&gt;Windows&lt;/code&gt;,&lt;code&gt;Linux&lt;/code&gt;还是&lt;code&gt;MacOS&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;如果是&lt;code&gt;Linux&lt;/code&gt;，继续判断是&lt;code&gt;CentOS&lt;/code&gt;还是&lt;code&gt;Debian&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;读取 jar 包中的库文件&lt;/li&gt;&#xA;&lt;li&gt;根据文件名后缀&lt;code&gt;dll&lt;/code&gt;、&lt;code&gt;so&lt;/code&gt;、&lt;code&gt;jnilib&lt;/code&gt;和&lt;code&gt;dylib&lt;/code&gt;，过滤符合当前平台的库文件&lt;/li&gt;&#xA;&lt;li&gt;将当前平台的库文件复制到系统临时目录&lt;code&gt;java.io.tmpdir&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;使用&lt;code&gt;System.load&lt;/code&gt;加载库文件&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Spring Boot &#43; Undertow上传文件找不到临时目录</title>
      <link>https://blog.margrop.net/post/spring-boot-undertow-upload-file-not-found-temp-folder/</link>
      <pubDate>Sat, 27 Mar 2021 11:17:26 +0800</pubDate>
      <guid>https://blog.margrop.net/post/spring-boot-undertow-upload-file-not-found-temp-folder/</guid>
      <description>&lt;h1 id=&#34;问题出现&#34;&gt;问题出现&lt;/h1&gt;&#xA;&lt;p&gt;前2天，公司的 SpringBoot 项目突然出现了，无法上传 Excel 文件的问题。&lt;/p&gt;&#xA;&lt;p&gt;经过查看 Java 日志，发现出现了大量的异常：&lt;code&gt;java.nio.file.NoSuchFileException: /tmp/undertow.12020.9432679758080410942/undertow17157208698492118168upload&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>记一次家庭网络的网络风暴故障排查</title>
      <link>https://blog.margrop.net/post/a-network-broadcast-flooding-solution-record/</link>
      <pubDate>Fri, 26 Mar 2021 09:37:21 +0800</pubDate>
      <guid>https://blog.margrop.net/post/a-network-broadcast-flooding-solution-record/</guid>
      <description>&lt;p&gt;3月7日，周日，本来是一个应该好好休息放松的日子。&lt;/p&gt;&#xA;&lt;h1 id=&#34;上午10点左右&#34;&gt;上午10点左右&lt;/h1&gt;&#xA;&lt;p&gt;家里的小爱同学，突然罢工了，提示『网络连接失败』&lt;/p&gt;&#xA;&lt;p&gt;本来以为只是个小问题，没想到经过一番检查，发现家里所有联网的设备，网络都挂了？？？&lt;/p&gt;</description>
    </item>
    <item>
      <title>MySQL中Date，夏令时时间转换引发的错误HOUR_OF_DAY: 0 -&gt; 1，及解决办法</title>
      <link>https://blog.margrop.net/post/mysql-exception-hour-of-day-0-1-solution/</link>
      <pubDate>Thu, 25 Mar 2021 10:53:15 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mysql-exception-hour-of-day-0-1-solution/</guid>
      <description>&lt;h1 id=&#34;做用户导出的功能代码报错hour_of_day-0---1&#34;&gt;做用户导出的功能，代码报错HOUR_OF_DAY: 0 -&amp;gt; 1&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Exception in thread &amp;ldquo;main&amp;rdquo; java.lang.IllegalArgumentException: HOUR_OF_DAY: 0 -&amp;gt; 1&#xA;详细报错内容如下：&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>HomeAssistant：常用的 HACS，Github 第三方支持库 Repo</title>
      <link>https://blog.margrop.net/post/homeassistant-github-support-repo/</link>
      <pubDate>Mon, 15 Mar 2021 08:56:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/homeassistant-github-support-repo/</guid>
      <description>&lt;h1 id=&#34;hacs&#34;&gt;HACS&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HACS官方网站&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hacs/integration&#34;&gt;https://github.com/hacs/integration&lt;/a&gt;&#xA;&lt;a href=&#34;https://hacs.xyz/&#34;&gt;https://hacs.xyz/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;HACS安装文档&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://hacs.xyz/docs/installation/installation&#34;&gt;https://hacs.xyz/docs/installation/installation&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>HomeAssistant配置：长时间忘记关闭防盗门时，自动提醒</title>
      <link>https://blog.margrop.net/post/homeassistant-attation-master-when-door-is-open-too/</link>
      <pubDate>Tue, 09 Mar 2021 18:18:37 +0800</pubDate>
      <guid>https://blog.margrop.net/post/homeassistant-attation-master-when-door-is-open-too/</guid>
      <description>需要的设备： 小米门窗传感器，小米Aqara网关，小米触屏音箱&#xA;当门打开持续1分钟，和持续2分钟时，音箱会自动进行声音提醒关门&#xA;description: &amp;#39;&amp;#39; trigger: - type: opened platform: device device_id: 000000f29088665d7b820e7d4000000 entity_id: binary_sensor.door_window_sensor_158d0002000000 domain: binary_sensor for: hours: 0 minutes: 1 seconds: 0 milliseconds: 0 - type: opened platform: device device_id: 000000f29088665d7b820e7d4000000 entity_id: binary_sensor.door_window_sensor_158d0002000000 domain: binary_sensor for: hours: 0 minutes: 2 seconds: 0 milliseconds: 0 condition: [] action: - service: zhimsg.xiao_ai_hong_ping_yin_xiang data: message: 主人，你还在吗，大门忘记关啦，以后记得关门哦 mode: single </description>
    </item>
    <item>
      <title>feign 使用示例：@Body注解，http请求体</title>
      <link>https://blog.margrop.net/post/feign-demo/</link>
      <pubDate>Fri, 05 Mar 2021 18:25:23 +0800</pubDate>
      <guid>https://blog.margrop.net/post/feign-demo/</guid>
      <description>&lt;p&gt;出现接口使用http请求体来传递参数的情况，所以研究了一下feign，发现@Body注解大致可以实现。&#xA;虽然说是使用请求体来传递参数，但实质上请求体还是放了json格式的数据。当然，如果不想只局限于json格式，可以将其设置为通用的格式，详见文末。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信安装旧版本方法，版本过低，请升级最新版本</title>
      <link>https://blog.margrop.net/post/how-to-install-old-version-wechat/</link>
      <pubDate>Fri, 05 Mar 2021 11:22:11 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-install-old-version-wechat/</guid>
      <description>&lt;h1 id=&#34;先安装最新版本微信并登录&#34;&gt;先安装最新版本微信，并登录。&lt;/h1&gt;&#xA;&lt;h1 id=&#34;使用cmd命令行保存用户数据方式卸载应用&#34;&gt;使用cmd命令行保存用户数据方式卸载应用：&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adb shell pm uninstall -k com.tencent.mm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;重启手机&#34;&gt;重启手机&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adb root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;这一步非常重要，否则会出现错误提示&lt;code&gt;adb: failed to install xxxxxx Failure [INSTALL_FAILED_VERSION_DOWNGRADE]&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;使用cmd命令安装旧版本apk后面跟安装包路径&#34;&gt;使用cmd命令安装旧版本apk(后面跟安装包路径)：&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;adb install -r -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;在旧版本上登录微信账号&#34;&gt;在旧版本上登录微信账号。&lt;/h1&gt;</description>
    </item>
    <item>
      <title>Python3面向对象编程</title>
      <link>https://blog.margrop.net/post/python3-oop/</link>
      <pubDate>Thu, 04 Mar 2021 22:23:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-oop/</guid>
      <description>&lt;h1 id=&#34;面向对象编程&#34;&gt;面向对象编程&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Student&lt;/span&gt;(object):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; __init__(self, name, score):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;score &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; score&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;print_score&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; (self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name, self&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;score))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>SpringBoot DevTools的大坑，没有之一</title>
      <link>https://blog.margrop.net/post/springboot-devtools-terrible/</link>
      <pubDate>Wed, 03 Mar 2021 18:23:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/springboot-devtools-terrible/</guid>
      <description>&lt;p&gt;最近在SpringBoot的项目中新增了不少改动，然后就碰到了一个非常奇怪的问题。&lt;/p&gt;&#xA;&lt;h1 id=&#34;hibernate数据库查询报错&#34;&gt;&lt;code&gt;Hibernate&lt;/code&gt;数据库查询报错&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;03&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;03 17:08:28.&lt;span style=&#34;color:#a6e22e&#34;&gt;016&lt;/span&gt; ERROR 36216 &lt;span style=&#34;color:#f92672&#34;&gt;---&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;  XNIO&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;2 task&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; o.&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;access&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;spi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetterMethodImpl&lt;/span&gt;        : HHH000123: IllegalArgumentException in &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;margrop&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;racentity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Race&lt;/span&gt;, setter method of property: raceType&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;2021&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;03&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;03 17:08:28.&lt;span style=&#34;color:#a6e22e&#34;&gt;016&lt;/span&gt; ERROR 36216 &lt;span style=&#34;color:#f92672&#34;&gt;---&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;  XNIO&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;2 task&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;1&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; o.&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;access&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;spi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetterMethodImpl&lt;/span&gt;        : HHH000091: Expected type: net.&lt;span style=&#34;color:#a6e22e&#34;&gt;margrop&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;raceapi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;permanent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RaceType&lt;/span&gt;, actual value: net.&lt;span style=&#34;color:#a6e22e&#34;&gt;margrop&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;raceapi&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;entity&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;permanent&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RaceType&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这简直就是奇了怪了&#xA;&lt;code&gt;Expected type&lt;/code&gt;和&lt;code&gt;actual value&lt;/code&gt;完全是一模一样，可&lt;code&gt;Hibernate&lt;/code&gt;认为不一样，这可咋整。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3错误、调试和测试</title>
      <link>https://blog.margrop.net/post/python3-cuo-wu-diao-shi-he-ce-shi/</link>
      <pubDate>Mon, 01 Mar 2021 17:27:07 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-cuo-wu-diao-shi-he-ce-shi/</guid>
      <description>&lt;h1 id=&#34;错误处理&#34;&gt;错误处理&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;try&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;try...&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    r &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;result:&amp;#39;&lt;/span&gt;, r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ZeroDivisionError&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;except:&amp;#39;&lt;/span&gt;, e)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;finally&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;finally...&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;END&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Java / C开发人员应该知道的三个JavaScript怪癖</title>
      <link>https://blog.margrop.net/post/three-javascript-quirks-java-c-developers-should-know/</link>
      <pubDate>Sun, 28 Feb 2021 22:28:36 +0800</pubDate>
      <guid>https://blog.margrop.net/post/three-javascript-quirks-java-c-developers-should-know/</guid>
      <description>&lt;p&gt;JavaScript可能是一种欺骗性的语言，并且可能会造成极大的痛苦，因为它不是100％一致的。众所周知，它确实存在一些不好的，令人迷惑的或冗余的功能：臭名昭著的&lt;a href=&#34;https://blog.margrop.net/&#34;&gt;with语句&lt;/a&gt;，&lt;a href=&#34;http://yuiblog.com/blog/2006/06/01/global-domination/&#34;&gt;隐式全局变量&lt;/a&gt;和&lt;a href=&#34;http://dorey.github.io/JavaScript-Equality-Table/&#34;&gt;不稳定的比较&lt;/a&gt;可能是最著名的。&lt;/p&gt;&#xA;&lt;p&gt;JavaScript是历史上最成功的火焰生成器之一！除了它所存在的缺陷（在新的ECMAScript规范中部分解决了这些缺陷）之外，大多数程序员都讨厌JavaScript的原因有两个：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;他们错误地认为DOM等同于JavaScript语言，该语言具有相当糟糕的API。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;它们来自C和Java等语言的JavaScript。他们被JavaScript的语法迷住了，以为它的工作方式与那些命令式语言的工作方式相同。这种误解将导致混乱，沮丧和错误。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;因此，通常JavaScript的声誉比其应有的差。&lt;/p&gt;&#xA;&lt;p&gt;在我的职业生涯中，我注意到了几种模式：大多数具有Java或C / C ++背景的开发人员所使用的语言功能在JavaScript中都假定相同，而又完全不同。&lt;/p&gt;&#xA;&lt;p&gt;本文收集了最麻烦的文章，将Java方式与JavaScript方式进行比较以显示差异，并重点介绍JavaScript的最佳实践。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3 IO编程</title>
      <link>https://blog.margrop.net/post/python3-io-programming/</link>
      <pubDate>Fri, 26 Feb 2021 10:29:31 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-io-programming/</guid>
      <description>&lt;h1 id=&#34;文件读写&#34;&gt;文件读写&lt;/h1&gt;&#xA;&lt;h2 id=&#34;读文件read会一次性读取全部内容&#34;&gt;读文件：read()会一次性读取全部内容&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;with 和 try&amp;hellip;catch一样，更简介，自动调用close方法&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/path/to/file&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>如何在Mac上执行一行命令，同时运行多个Python脚本？</title>
      <link>https://blog.margrop.net/post/one-command-in-mac-execute-mulit-python-scripts/</link>
      <pubDate>Thu, 25 Feb 2021 15:52:15 +0800</pubDate>
      <guid>https://blog.margrop.net/post/one-command-in-mac-execute-mulit-python-scripts/</guid>
      <description>&lt;p&gt;目前有4个Python脚本，打算使用一条命令，同时执行这4个脚本，如何操作呢？&#xA;我目前采用的办法比较简陋，使用了5个shell脚本来实现，不知道还有没有更好的方法。&lt;/p&gt;&#xA;&lt;h1 id=&#34;shell脚本runallsh&#34;&gt;shell脚本runAll.sh&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;open -a Terminal.app run17688821.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;open -a Terminal.app run49763693.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;open -a Terminal.app run857413.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;open -a Terminal.app run856853.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Python3正则表达式</title>
      <link>https://blog.margrop.net/post/python3-zheng-ze-biao-da-shi/</link>
      <pubDate>Wed, 24 Feb 2021 08:38:22 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-zheng-ze-biao-da-shi/</guid>
      <description>&lt;h1 id=&#34;re模块&#34;&gt;re模块&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABC\-001&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Python的字符串&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 对应的正则表达式字符串不变：&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# &amp;#39;ABC\-001&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;判断正则表达式是否匹配&#34;&gt;判断正则表达式是否匹配&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; re&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; re&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^\d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{3}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\-\d{3,8}$&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;010-12345&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;_sre&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;SRE_Match object; span&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;), &lt;span style=&#34;color:#66d9ef&#34;&gt;match&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;010-12345&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; re&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;match&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;r&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;^\d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{3}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;\-\d{3,8}$&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;010 12345&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>如何在Home Assistant里面安装HACS</title>
      <link>https://blog.margrop.net/post/install-hacs-in-home-assistant/</link>
      <pubDate>Fri, 19 Feb 2021 10:53:04 +0800</pubDate>
      <guid>https://blog.margrop.net/post/install-hacs-in-home-assistant/</guid>
      <description>&lt;h1 id=&#34;如果是虚拟机环境home-assistant-os&#34;&gt;如果是虚拟机环境（Home Assistant OS）&lt;/h1&gt;&#xA;&lt;p&gt;1.转到&lt;code&gt;Supervisor&lt;/code&gt;面板&#xA;2.安装一个SSH附加组件（需要在用户个人资料中启用&lt;code&gt;高级模式&lt;/code&gt;）&#xA;3.配置所选的SSH加载项&#xA;4.启动SSH附加组件&#xA;5.连接到SSH附加组件&#xA;6.运行HACS安装脚本&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -q -O - https://hacs.xyz/install | bash -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Centos 7.4 NFS自动挂载</title>
      <link>https://blog.margrop.net/post/centos-nfs-mount-autofs/</link>
      <pubDate>Wed, 17 Feb 2021 21:15:19 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-nfs-mount-autofs/</guid>
      <description>&lt;h1 id=&#34;触发式自动挂载&#34;&gt;触发式自动挂载&lt;/h1&gt;&#xA;&lt;p&gt;用户登录时自动挂载NFS共享目录&lt;code&gt;/home/share&lt;/code&gt;到本机&lt;code&gt;/mnt/share&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y autofs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/auto.master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/mnt /etc/auto.conf（这个配置文件本身就没有要自己创建）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/auto.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;share  192.168.1.22:/etc/letsencrypt/live/margrop.net-0001/（nfs服务器上共享文件）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;service autofs restart &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>搭建自己的密码管理服务器 Bitwarden</title>
      <link>https://blog.margrop.net/post/deploy-open-source-password-manager-bitwarden/</link>
      <pubDate>Wed, 17 Feb 2021 20:20:06 +0800</pubDate>
      <guid>https://blog.margrop.net/post/deploy-open-source-password-manager-bitwarden/</guid>
      <description>&lt;p&gt;很多人对于把密码放在网上，比如 lastpass 虽然官方说是提供加密了，服务器上看不到用户密码，但是还是不太放心，那么就可以搭建开源的 Bitwarden 搭建一个自己的密码管理服务器。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;准备：一个 vps 服务器和一个域名且解析 IP 地址到服务器&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>【转】从 Authy 导出 TOTP token 的方法</title>
      <link>https://blog.margrop.net/post/export-topt-token-from-authy/</link>
      <pubDate>Wed, 17 Feb 2021 19:53:14 +0800</pubDate>
      <guid>https://blog.margrop.net/post/export-topt-token-from-authy/</guid>
      <description>&lt;p&gt;基于 Ubuntu 18.04（普通用户），其他 Linux 系统大同小异。&#xA;Golang 官网：&lt;a href=&#34;https://golang.org/&#34;&gt;https://golang.org/&lt;/a&gt;&#xA;Github 仓库：&lt;a href=&#34;https://github.com/alexzorin/authy&#34;&gt;https://github.com/alexzorin/authy&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;下载并安装-golangmac系统使用brew&#34;&gt;下载并安装 Golang（Mac系统，使用Brew）&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew install go&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Python3常用内建模块-HTMLParser</title>
      <link>https://blog.margrop.net/post/python3-htmlparser/</link>
      <pubDate>Mon, 15 Feb 2021 11:07:02 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-htmlparser/</guid>
      <description>&lt;h1 id=&#34;htmlparser&#34;&gt;HTMLParser&lt;/h1&gt;</description>
    </item>
    <item>
      <title>Python3常用字符串操作</title>
      <link>https://blog.margrop.net/post/python-string-opeation/</link>
      <pubDate>Sun, 14 Feb 2021 22:33:22 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python-string-opeation/</guid>
      <description>&lt;h1 id=&#34;python-print&#34;&gt;python print&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;不换行（在后面加上,end=&amp;rsquo;&amp;rsquo;）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;print(string,end=&amp;#39;&amp;#39;) &#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>更新 KoolProxyR 的规则地址，2021年2月12日更新</title>
      <link>https://blog.margrop.net/post/update-koolproxyr-rule-sh/</link>
      <pubDate>Fri, 12 Feb 2021 19:43:55 +0800</pubDate>
      <guid>https://blog.margrop.net/post/update-koolproxyr-rule-sh/</guid>
      <description>&lt;p&gt;KoolProxyR 的规则地址已经好久没更新了，好多广告都没法过滤&#xA;只能自己改下更新地址了&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3基础</title>
      <link>https://blog.margrop.net/post/python3-basic-learning/</link>
      <pubDate>Fri, 12 Feb 2021 14:28:13 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-basic-learning/</guid>
      <description>&lt;h1 id=&#34;python3教程&#34;&gt;Python3教程&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000&#34;&gt;http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;python下载&#34;&gt;Python下载&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.python.org/ftp/python/&#34;&gt;https://www.python.org/ftp/python/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;python3-内置函数&#34;&gt;Python3 内置函数&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.python.org/3/library/functions.html&#34;&gt;https://docs.python.org/3/library/functions.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>群晖6.17最新获取root权限，设置root密码和SSH免登录</title>
      <link>https://blog.margrop.net/post/dsm-grant-root-permission-and-set-password-and-ssh-login/</link>
      <pubDate>Wed, 10 Feb 2021 20:40:26 +0800</pubDate>
      <guid>https://blog.margrop.net/post/dsm-grant-root-permission-and-set-password-and-ssh-login/</guid>
      <description>&lt;h1 id=&#34;一开启ssh功能&#34;&gt;一、开启SSH功能&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;控制面板&lt;/code&gt;-&amp;gt;&lt;code&gt;终端机和SNMP&lt;/code&gt;里，开启&lt;code&gt;SSH&lt;/code&gt;功能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;二登陆群晖的ssh用系统默认用户登陆&#34;&gt;二、登陆群晖的SSH，用系统默认用户登陆&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;我这里是&lt;code&gt;admin&lt;/code&gt;，所以我输入以下命令，&lt;code&gt;admin&lt;/code&gt;和&lt;code&gt;IP地址&lt;/code&gt;修改为你的&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssh admin@192.168.1.5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>【转】Kodi IPTV直播源m3u8下载 2021年最新直播源</title>
      <link>https://blog.margrop.net/post/kodi-iptv-m3u8-live-source-url/</link>
      <pubDate>Mon, 08 Feb 2021 10:08:34 +0800</pubDate>
      <guid>https://blog.margrop.net/post/kodi-iptv-m3u8-live-source-url/</guid>
      <description>&lt;p&gt;由于版权原因很多电视直播软件播放时会卡顿、画面不清晰。现在各个宽带运营商都有IPTV业务了，不用安装有线电视就可以高清无卡顿的看电视。没有开通iptv的朋友也可以使用网友抓取的iptv直播源地址拷贝到电脑、电视网络盒子等设备上看,如果动手能力强也可以自己抓包获取直播源。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://blog.margrop.net/post-images/kodi-player-1.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Swagger-UI 增加项目依赖，修改index.html</title>
      <link>https://blog.margrop.net/post/swagger-ui-add-md5/</link>
      <pubDate>Sat, 06 Feb 2021 09:13:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/swagger-ui-add-md5/</guid>
      <description>&lt;h1 id=&#34;swagger-bundle-打包&#34;&gt;swagger-bundle 打包&lt;/h1&gt;&#xA;&lt;p&gt;首先进入&lt;code&gt;swagger-ui&lt;/code&gt;目录&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm run build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;如何修改&#34;&gt;如何修改&lt;/h1&gt;&#xA;&lt;p&gt;index.html中的url修改为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/v2/api-docs?group=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getUrlParam&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;group&amp;#34;&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Swagger-JS 如何增加MD5校验，和项目依赖</title>
      <link>https://blog.margrop.net/post/swagger-js-add-md5/</link>
      <pubDate>Sat, 06 Feb 2021 09:05:25 +0800</pubDate>
      <guid>https://blog.margrop.net/post/swagger-js-add-md5/</guid>
      <description>&lt;h1 id=&#34;swagger-bundle-打包&#34;&gt;swagger-bundle 打包&lt;/h1&gt;&#xA;&lt;p&gt;首先进入&lt;code&gt;swagger-js&lt;/code&gt;目录&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;npm run build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;如何修改&#34;&gt;如何修改&lt;/h1&gt;&#xA;&lt;p&gt;在&lt;code&gt;src/execute.js&lt;/code&gt;文件中增加代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;md5&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;md5&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 环境下，如何安装集客AC虚拟机？</title>
      <link>https://blog.margrop.net/post/how-to-install-jika-ac-in-pve/</link>
      <pubDate>Wed, 03 Feb 2021 16:18:33 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-install-jika-ac-in-pve/</guid>
      <description>&lt;p&gt;根据&lt;a href=&#34;https://www.right.com.cn/forum/thread-1501038-1-1.html&#34;&gt;恩山的集客AC AP扫盲贴&lt;/a&gt;介绍：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;问：可以不用&lt;code&gt;AC&lt;/code&gt;，直接两个&lt;code&gt;AP&lt;/code&gt;连接主路由漫游么？&#xA;答：可以的，但有&lt;code&gt;AC&lt;/code&gt;的漫游效果比没有好；有&lt;code&gt;ac&lt;/code&gt;在，漫游效果不会差的，集客的漫游不是简单的弱踢。有&lt;code&gt;ac&lt;/code&gt;在，不管集客&lt;code&gt;ap&lt;/code&gt;支持不支持&lt;code&gt;kvr&lt;/code&gt;，都有很好的效果，因为&lt;code&gt;ac+ap&lt;/code&gt;是主动漫游，主动漫游走的不是&lt;code&gt;kvr&lt;/code&gt;协议，对客户端要求也很低。微&lt;code&gt;ac&lt;/code&gt;只负责下发配置，不能主动漫游，漫游效果依赖客户端。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Let&#39;&#39;s Encrypt自动续期后自动同步Proxmox VE和DSM证书</title>
      <link>https://blog.margrop.net/post/lets-encrypt-sync-https-cert-to-pve-and-dsm/</link>
      <pubDate>Tue, 02 Feb 2021 19:19:38 +0800</pubDate>
      <guid>https://blog.margrop.net/post/lets-encrypt-sync-https-cert-to-pve-and-dsm/</guid>
      <description>&lt;p&gt;上次我们讲了&lt;a href=&#34;https://blog.margrop.net/post/lets-encrypt-use-dns-txt-acme-challenge-domain-available/&#34;&gt;Let&amp;rsquo;s Encrypt通过DNS TXT记录来验证域名有效性&lt;/a&gt;，其中文章最后写了，如何使用&lt;code&gt;certbot renew&lt;/code&gt;进行自动续期。那自动续期成功了，如何同步到&lt;code&gt;PVE&lt;/code&gt;和&lt;code&gt;DSM&lt;/code&gt;呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Proxmox VE 里面，如何导入第三方的虚拟机镜像？</title>
      <link>https://blog.margrop.net/post/pve-kvm-import-vm-format-qcow2/</link>
      <pubDate>Mon, 01 Feb 2021 15:12:47 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-kvm-import-vm-format-qcow2/</guid>
      <description>&lt;p&gt;下面的例子，&lt;code&gt;虚拟机ID&lt;/code&gt;均以&lt;code&gt;100&lt;/code&gt;为例，需自行修改。&lt;/p&gt;&#xA;&lt;h1 id=&#34;文件格式转换&#34;&gt;文件格式转换&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用qemu-img 文件将其他格式的虚拟机硬盘文件转出&lt;code&gt;qcow2&lt;/code&gt;格式&lt;/li&gt;&#xA;&lt;li&gt;例如，下面是将&lt;code&gt;vmdk&lt;/code&gt;格式转换为&lt;code&gt;qcow2&lt;/code&gt;格式&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>如何通过 NPM 安装 Node-RED</title>
      <link>https://blog.margrop.net/post/how-to-install-nodered-with-npm/</link>
      <pubDate>Mon, 01 Feb 2021 09:57:07 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-install-nodered-with-npm/</guid>
      <description>&lt;h1 id=&#34;node-red是什么&#34;&gt;&lt;code&gt;Node-RED&lt;/code&gt;是什么&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;Node-RED&lt;/code&gt;是一种低代码/无代码编程工具，用于以新颖有趣的方式将&lt;code&gt;硬件设备&lt;/code&gt;，&lt;code&gt;API&lt;/code&gt;和&lt;code&gt;在线服务&lt;/code&gt;连接在一起。特别适用于&lt;code&gt;智能家居&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Node-RED&lt;/code&gt;提供了一个基于浏览器的流编辑器，可轻松使用面板中的各种节点将流连接在一起。然后，单击即可将流部署到运行时。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何搭建开源的Web流程图工具 Diagrams.net（原draw.io）</title>
      <link>https://blog.margrop.net/post/how-to-install-docker-drawio/</link>
      <pubDate>Sat, 30 Jan 2021 17:59:08 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-install-docker-drawio/</guid>
      <description>&lt;p&gt;&lt;code&gt;ProcessOn&lt;/code&gt;目前已经是大家熟知的Web的&lt;code&gt;流程图&lt;/code&gt;，&lt;code&gt;UML&lt;/code&gt;等绘图工具了。但 &lt;code&gt;ProcessOn&lt;/code&gt; 是收费服务，免费的又限制太多，那还有免费的午餐吗？&lt;/p&gt;&#xA;&lt;p&gt;有，就是&lt;code&gt;Diagrams.net&lt;/code&gt;。&lt;strong&gt;完全免费，功能强大~&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>PVE下如何配置新安装的 ubuntu 20.04 server 虚拟机</title>
      <link>https://blog.margrop.net/post/pve-how-to-config-brand-new-ubuntu-20.04-vm/</link>
      <pubDate>Sat, 30 Jan 2021 15:33:44 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-how-to-config-brand-new-ubuntu-20.04-vm/</guid>
      <description>&lt;h1 id=&#34;下载安装镜像iso&#34;&gt;下载安装镜像ISO&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://mirrors.aliyun.com/ubuntu-releases/focal/ubuntu-20.04.2-live-server-amd64.iso&#34;&gt;阿里云ubuntu-20.04-live-server下载&lt;/a&gt;&#xA;&lt;a href=&#34;https://mirrors.aliyun.com/ubuntu-releases/bionic/ubuntu-18.04.5-live-server-amd64.iso&#34;&gt;阿里云ubuntu-18.04-live-server下载&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何使用通用的Hibernate类型映射JSON对象</title>
      <link>https://blog.margrop.net/post/how-to-map-json-collections-using-jpa-and-hibernate/</link>
      <pubDate>Fri, 29 Jan 2021 16:06:09 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-map-json-collections-using-jpa-and-hibernate/</guid>
      <description>&lt;h1 id=&#34;介绍&#34;&gt;介绍&lt;/h1&gt;&#xA;&lt;p&gt;在本文中，我们将看到如何使用&lt;a href=&#34;http://www.google.com/&#34; title=&#34;Hibernate Types&#34;&gt;Hibernate Types&lt;/a&gt;开源项目将JSON列映射到JPA实体属性。&lt;/p&gt;&#xA;&lt;p&gt;虽然您可以创建自己的自定义Hibernate类型，但可以在Oracle，SQL Server，PostgreSQL或MySQL上映射JSON列类型，但是由于&lt;a href=&#34;http://www.google.com/&#34; title=&#34;Hibernate Types&#34;&gt;Hibernate Types&lt;/a&gt;项目已经提供了此功能，因此您无需实现自己的Hibernate Type 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS 7 升级或新安装MariaDB 10.5，使用阿里云镜像</title>
      <link>https://blog.margrop.net/post/centos-7-upgrade-or-install-mariadb-10.x-aliyun-mirror/</link>
      <pubDate>Fri, 29 Jan 2021 15:42:20 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-7-upgrade-or-install-mariadb-10.x-aliyun-mirror/</guid>
      <description>&lt;h1 id=&#34;先进行系统更新&#34;&gt;先进行系统更新&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum update -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;编辑yum配置文件使用阿里云镜像&#34;&gt;编辑yum配置文件，使用阿里云镜像&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;这里以 MariaDB 10.5为例&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /etc/yum.repos.d/MariaDB10.repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#http://downloads.mariadb.org/mariadb/repositories/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;mariadb&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; MariaDB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;baseurl &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpgkey &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gpgcheck &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>如何使用Windows运行N2N-运行篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-windows-edge/</link>
      <pubDate>Fri, 29 Jan 2021 13:43:19 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-windows-edge/</guid>
      <description>&lt;p&gt;这里只讲如何运行N2N的客户端edge，其实运行supernode起来更加简单，这里不再重复。&lt;/p&gt;&#xA;&lt;h1 id=&#34;下载并解压n2n&#34;&gt;下载并解压N2N&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://download.margrop.net/d/oneindex/network/n2n_2.8_stable/Windows/n2n_20210129.zip&#34;&gt;一键打包下载&lt;/a&gt;&#xA;含&lt;code&gt;edge&lt;/code&gt;,&lt;code&gt;supernode&lt;/code&gt;,&lt;code&gt;openssl链接库&lt;/code&gt;(n2n运行必备),&lt;code&gt;tap-windows安装包&lt;/code&gt;(n2n运行必备，Win7&amp;amp;Win10)&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>CentOS 7 安装Docker并设置国内阿里源</title>
      <link>https://blog.margrop.net/post/centos-7-install-docker-ce-and-update-source/</link>
      <pubDate>Fri, 29 Jan 2021 11:40:18 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-7-install-docker-ce-and-update-source/</guid>
      <description>&lt;h1 id=&#34;docker版本&#34;&gt;docker版本&lt;/h1&gt;&#xA;&lt;p&gt;docker从1.13版本之后采用时间线的方式作为版本号，分为社区版CE和企业版EE。Docker CE即社区免费版，Docker EE即企业版,付费使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>iOS端如何安装证书，如何https抓包</title>
      <link>https://blog.margrop.net/post/ios-client-install-pem-for-https-packet-capture/</link>
      <pubDate>Thu, 28 Jan 2021 15:33:23 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ios-client-install-pem-for-https-packet-capture/</guid>
      <description>&lt;h1 id=&#34;ios下载证书&#34;&gt;iOS下载证书&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在Charles中导出pem证书，放置任意Web服务器中&lt;/li&gt;&#xA;&lt;li&gt;下面是我自己使用的pem证书，仅作为示例，请不要安装。&#xA;&lt;img src=&#34;https://blog.margrop.net/post-images/https_charles_1.png&#34;&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>CentOS 7 安装最新版本Node和NPM</title>
      <link>https://blog.margrop.net/post/centos-7-install-node-and-npm-latest/</link>
      <pubDate>Wed, 27 Jan 2021 11:28:59 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-7-install-node-and-npm-latest/</guid>
      <description>&lt;h1 id=&#34;下载node&#34;&gt;下载Node：&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;下载使用了阿里云镜像&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ~/nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ~/nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://npm.taobao.org/mirrors/node/latest-v15.x/node-v15.7.0-linux-x64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xvzf node-v15.7.0-linux-x64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>搭梯子或机场：V2RAY配置WebSocket &#43; TLS &#43; Web &#43; CDN</title>
      <link>https://blog.margrop.net/post/fuckgfw-v2ray-websocket-tls-web-cdn/</link>
      <pubDate>Tue, 26 Jan 2021 13:44:36 +0800</pubDate>
      <guid>https://blog.margrop.net/post/fuckgfw-v2ray-websocket-tls-web-cdn/</guid>
      <description>&lt;p&gt;&lt;code&gt;v2ray&lt;/code&gt;现在最安全的配置就是&lt;code&gt;WebSocket + TLS + Web + CDN&lt;/code&gt; 了，访问的是&lt;code&gt;443&lt;/code&gt;端口，直接访问是一个网站，通过客户端连接后他是个梯子(飞机)。外观上看是一个刮胡刀，原来呢，它是一个吹风机。&lt;/p&gt;</description>
    </item>
    <item>
      <title>中国电信，如何找客服申请公网IP</title>
      <link>https://blog.margrop.net/post/china-telecom-how-to-apply-a-public-ip-address/</link>
      <pubDate>Mon, 25 Jan 2021 22:12:32 +0800</pubDate>
      <guid>https://blog.margrop.net/post/china-telecom-how-to-apply-a-public-ip-address/</guid>
      <description>&lt;p&gt;目前国内的三大运营商中，也就中国电信的&lt;code&gt;公网IP&lt;/code&gt;最富裕了。&#xA;但是随着全球&lt;code&gt;IPv4&lt;/code&gt;资源彻底耗尽，地主家也没余粮了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows常用软件推荐和下载，无推荐</title>
      <link>https://blog.margrop.net/post/windows-software-recommend-and-download/</link>
      <pubDate>Sun, 24 Jan 2021 22:22:47 +0800</pubDate>
      <guid>https://blog.margrop.net/post/windows-software-recommend-and-download/</guid>
      <description>&lt;p&gt;这里推荐一些本站在&lt;code&gt;Windows&lt;/code&gt;环境常用的一些软件，无推荐，不喜欢的赶紧关掉页面。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3的Web环境，含第三方以及自建</title>
      <link>https://blog.margrop.net/post/python3-web-runtime-environment/</link>
      <pubDate>Sun, 24 Jan 2021 13:07:30 +0800</pubDate>
      <guid>https://blog.margrop.net/post/python3-web-runtime-environment/</guid>
      <description>&lt;p&gt;之前因为某件家事，需要使用&lt;code&gt;Python3&lt;/code&gt;的Web环境，于是收集了一下。&#xA;第三方网站的环境使用起来很简单，但缺点也很明显，不能保存上次的&lt;code&gt;Python&lt;/code&gt;代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS安装Frp客户端，可使用SSH</title>
      <link>https://blog.margrop.net/post/centos-install-frp-client-for-ssh/</link>
      <pubDate>Sat, 23 Jan 2021 17:22:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/centos-install-frp-client-for-ssh/</guid>
      <description>&lt;h1 id=&#34;下载并解压frp&#34;&gt;下载并解压Frp&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最新Frp下载地址：&lt;a href=&#34;https://github.com/fatedier/frp/releases/&#34;&gt;https://github.com/fatedier/frp/releases/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir ~/frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ~/frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/fatedier/frp/releases/download/v0.35.0/frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xvzf frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Ubuntu安装Frp服务端，非客户端</title>
      <link>https://blog.margrop.net/post/ubuntu-install-frp-server/</link>
      <pubDate>Sat, 23 Jan 2021 13:43:20 +0800</pubDate>
      <guid>https://blog.margrop.net/post/ubuntu-install-frp-server/</guid>
      <description>&lt;h1 id=&#34;下载并解压frp&#34;&gt;下载并解压Frp&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最新Frp下载地址：&lt;a href=&#34;https://github.com/fatedier/frp/releases/&#34;&gt;https://github.com/fatedier/frp/releases/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ~&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd frp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget https://github.com/fatedier/frp/releases/download/v0.35.0/frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xvzf frp_0.35.0_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd frp_0.35.0_linux_amd64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>【转】Proxmox VE开启显卡虚拟化intel GVT-g</title>
      <link>https://blog.margrop.net/post/proxmox-ve-graphics-card-enable-intel-gvt-g/</link>
      <pubDate>Sat, 23 Jan 2021 11:23:04 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-graphics-card-enable-intel-gvt-g/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;注意，intel gvt-g技术，PVE目前只支持第五代，第六代和第七代英特尔酷睿处理器以及E3 v4，E3 v5和E3 v6 Xeon处理器&#xA;8代和8代以上的CPU，博主亲测暂时不支持 -_-!&#xA;如果现在支持了，欢迎联系博主&#xA;参考：&lt;a href=&#34;https://pve.proxmox.com/wiki/PCI(e)_Passthrough&#34;&gt;https://pve.proxmox.com/wiki/PCI(e)_Passthrough&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 常用本地路径，以及如何修改hosts、主机名、IP地址和DNS配置</title>
      <link>https://blog.margrop.net/post/proxmox-ve-url-and-modify-hosts-ip-dns/</link>
      <pubDate>Fri, 22 Jan 2021 17:02:01 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-url-and-modify-hosts-ip-dns/</guid>
      <description>&lt;p&gt;PVE本地ISO文件目录：&lt;code&gt;/var/lib/vz/template/iso&lt;/code&gt;&#xA;PVE本地OVZ文件目录：&lt;code&gt;/var/lib/vz/template/cache&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox VE 安装完成后的初始化环境脚本</title>
      <link>https://blog.margrop.net/post/proxmox-ve-init-bash-script/</link>
      <pubDate>Fri, 22 Jan 2021 16:42:46 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmox-ve-init-bash-script/</guid>
      <description>&lt;p&gt;个人为了方便安装PVE，自己整理的相关命令，请根据自己的环境自行修改。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ProxmoxVE 6.3 使用命令备份群晖虚拟机</title>
      <link>https://blog.margrop.net/post/proxmoxve-use-bash-to-backup-dsm-vm/</link>
      <pubDate>Thu, 21 Jan 2021 18:16:22 +0800</pubDate>
      <guid>https://blog.margrop.net/post/proxmoxve-use-bash-to-backup-dsm-vm/</guid>
      <description>&lt;p&gt;由于我&lt;code&gt;ProxmoxVE&lt;/code&gt;里面的群晖虚拟机，是使用&lt;code&gt;LUN直通&lt;/code&gt;硬盘的方式运行的，所以没办法直接在&lt;code&gt;Web&lt;/code&gt;界面上直接点击备份。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;DSM虚拟机备份的流程：&#xA;停止虚拟机 -&amp;gt; 解除挂载硬盘 -&amp;gt; 备份虚拟机 -&amp;gt; 挂载硬盘 -&amp;gt; 启动虚拟机&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Q：群晖下有Qemu Guest Agent吗？</title>
      <link>https://blog.margrop.net/post/is-dsm-supported-qemu-agent/</link>
      <pubDate>Wed, 20 Jan 2021 13:19:28 +0800</pubDate>
      <guid>https://blog.margrop.net/post/is-dsm-supported-qemu-agent/</guid>
      <description>&lt;p&gt;A：群晖里安装&lt;code&gt;Power Button Package&lt;/code&gt;，关闭&lt;code&gt;PVE&lt;/code&gt;的&lt;code&gt;qemu&lt;/code&gt;代理选项。&lt;/p&gt;&#xA;&lt;h1 id=&#34;power-button-package在哪下载&#34;&gt;Power Button Package在哪下载&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;注意&lt;code&gt;DSM6.1&lt;/code&gt;和&lt;code&gt;DSM6.2&lt;/code&gt;使用的是不同的&lt;code&gt;spk&lt;/code&gt;包&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>img2KVM，将IMG格式转换为KVM格式，安装DSM群晖虚拟机</title>
      <link>https://blog.margrop.net/post/img2kvm-convert-img-format-file-to-kvm/</link>
      <pubDate>Wed, 20 Jan 2021 08:32:25 +0800</pubDate>
      <guid>https://blog.margrop.net/post/img2kvm-convert-img-format-file-to-kvm/</guid>
      <description>&lt;h1 id=&#34;安装img2kvm&#34;&gt;安装img2kvm&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;wget -c https://download.margrop.net/d/oneindex/network/PVE/img2kvm -O img2kvm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x img2kvm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>【转】黑群晖（Synology）半洗白最新方法</title>
      <link>https://blog.margrop.net/post/synology-half-crack-way-docker-ddsm/</link>
      <pubDate>Tue, 19 Jan 2021 18:10:53 +0800</pubDate>
      <guid>https://blog.margrop.net/post/synology-half-crack-way-docker-ddsm/</guid>
      <description>&lt;p&gt;最近新搭一个&lt;code&gt;NAS&lt;/code&gt;，安装好发现之前提供的半洗白方案已经不起作用了&#xA;之前的帖子&lt;a href=&#34;http://blog.lixx.vip/%E9%BB%91%E7%BE%A4%E6%99%96%EF%BC%88synology%EF%BC%89nas-6-22-%E6%8A%98%E8%85%BE%E8%AE%B0-%E5%8D%8A%E6%B4%97%E7%99%BD/&#34;&gt;http://blog.lixx.vip/黑群晖（synology）nas-6-22-折腾记-半洗白/&lt;/a&gt;&#xA;主要是群晖新版的&lt;code&gt;Docker 18.09.0-0506&lt;/code&gt;关闭了&lt;code&gt;DDSM&lt;/code&gt;安装&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;&#39;s Encrypt通过DNS TXT记录来验证域名有效性</title>
      <link>https://blog.margrop.net/post/lets-encrypt-use-dns-txt-acme-challenge-domain-available/</link>
      <pubDate>Tue, 19 Jan 2021 10:39:58 +0800</pubDate>
      <guid>https://blog.margrop.net/post/lets-encrypt-use-dns-txt-acme-challenge-domain-available/</guid>
      <description>&lt;p&gt;我们在使用&lt;code&gt;letsencrypt&lt;/code&gt;获取免费的&lt;code&gt;HTTPS&lt;/code&gt;证书的时候，&lt;code&gt;letsencrypt&lt;/code&gt;需要对域名进行验证。默认情况下它的验证方式是这样的：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;certbot&lt;/code&gt;程序在&lt;code&gt;web&lt;/code&gt;目录的根目录下放置一个文件。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;letsencrypt&lt;/code&gt;的服务器通过域名来访问这个文件，来验证你申请的域名是属于你的&#xA;但有时候我们想为内网的某台主机设置&lt;code&gt;HTTPS&lt;/code&gt;，因为内网的主机无法被&lt;code&gt;letsencrypt&lt;/code&gt;的服务器访问到，&lt;code&gt;certbot --nginx certonly&lt;/code&gt;就会出现&lt;code&gt;Connection refused&lt;/code&gt;的错误。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>使用KMS激活Win10，含第三方服务和自建服务</title>
      <link>https://blog.margrop.net/post/kms-activate-win10-slmgr/</link>
      <pubDate>Mon, 18 Jan 2021 22:12:43 +0800</pubDate>
      <guid>https://blog.margrop.net/post/kms-activate-win10-slmgr/</guid>
      <description>&lt;h1 id=&#34;第三方服务激活&#34;&gt;第三方服务激活&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用&lt;code&gt;管理员&lt;/code&gt;权限，运行两行命令即可（鸣谢：&lt;a href=&#34;https://03k.org/kms.html&#34;&gt;https://03k.org/kms.html&lt;/a&gt;）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;slmgr /skms kms.03k.org&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;slmgr /ato&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>使用SpringFox 3.0.0版本出现NumberFormatException的解决办法 </title>
      <link>https://blog.margrop.net/post/java-springfox-number-format-exception/</link>
      <pubDate>Mon, 18 Jan 2021 16:39:34 +0800</pubDate>
      <guid>https://blog.margrop.net/post/java-springfox-number-format-exception/</guid>
      <description>&lt;p&gt;最近升级了SpringFox至3.0.0版本，访问接口文档，出现了一堆异常&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Illegal DefaultValue null for parameter type integer&lt;/code&gt;&#xA;&lt;code&gt;java.lang.NumberFormatException: For input string: &amp;quot;&amp;quot;&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac安装Frp客户端，可使用远程桌面</title>
      <link>https://blog.margrop.net/post/mac-frpc-install-for-remote-desktop-problem/</link>
      <pubDate>Mon, 18 Jan 2021 13:28:26 +0800</pubDate>
      <guid>https://blog.margrop.net/post/mac-frpc-install-for-remote-desktop-problem/</guid>
      <description>&lt;p&gt;可以使用brew进行安装&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew install frpc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /usr/local/etc/frp/frpc.ini&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;brew services start frpc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Windows安装Frp客户端，可使用远程桌面</title>
      <link>https://blog.margrop.net/post/windows-frpc-install-for-remote-desktop/</link>
      <pubDate>Sun, 17 Jan 2021 19:36:38 +0800</pubDate>
      <guid>https://blog.margrop.net/post/windows-frpc-install-for-remote-desktop/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;由于 TeamViewer 的使用限制越来越严格，时不时就会被当成企业用户，天下终究没有免费的午餐，下面是使用Frp客户端进行内网穿透，并可远程控制的方法。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;请自行准备Frp服务器，以及考虑将3389端口暴露公网后的安全风险。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>PVE因boot空间不足而升级失败的解决办法</title>
      <link>https://blog.margrop.net/post/pve-boot-space-not-enough-fail-upgrade/</link>
      <pubDate>Sun, 17 Jan 2021 19:25:59 +0800</pubDate>
      <guid>https://blog.margrop.net/post/pve-boot-space-not-enough-fail-upgrade/</guid>
      <description>&lt;p&gt;默认安装时，&lt;code&gt;proxmox&lt;/code&gt;给&lt;code&gt;/boot&lt;/code&gt;分配的空间才不到300M。而&lt;code&gt;proxmox&lt;/code&gt;的迭代很快，&lt;code&gt;/boot&lt;/code&gt;很容易就被占满，稍不注意就导致升级失败，唯一的做法就是手工删除旧的kernel。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Git常用命令</title>
      <link>https://blog.margrop.net/post/git-normal-commands/</link>
      <pubDate>Sun, 17 Jan 2021 12:59:53 +0800</pubDate>
      <guid>https://blog.margrop.net/post/git-normal-commands/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;git reflog&lt;/code&gt; 显示git最近的一系列的操作记录&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;git reflog head@{0}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>仅对Github的git clone进行代理</title>
      <link>https://blog.margrop.net/post/github-git-clone-speed-up/</link>
      <pubDate>Sun, 17 Jan 2021 12:53:12 +0800</pubDate>
      <guid>https://blog.margrop.net/post/github-git-clone-speed-up/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global http.https://github.com.proxy socks5://127.0.0.1:1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git config --global https.https://github.com.proxy socks5://127.0.0.1:1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>如何使用CentOS 7运行N2N—edge篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-centos-edge/</link>
      <pubDate>Sat, 16 Jan 2021 14:00:18 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-centos-edge/</guid>
      <description>&lt;p&gt;&lt;code&gt;边缘节点（node）&lt;/code&gt;：将成为虚拟网络一部分的节点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>【转】解决Gridea客户端打不开/打开很慢以及同步不了的问题</title>
      <link>https://blog.margrop.net/post/slove-gridea-run-too-slow-problom/</link>
      <pubDate>Fri, 15 Jan 2021 16:48:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/slove-gridea-run-too-slow-problom/</guid>
      <description>&lt;p&gt;最近Gridea客户端打开很慢，而且同步也经常失败&lt;/p&gt;&#xA;&lt;p&gt;在左上角，编辑&amp;ndash;&amp;gt;开发者工具&amp;ndash;&amp;gt;console，可以看到widget.js加载不出，这是因为cdn.headwayapp.co被墙了，所以需要使用魔法或者把widget.js放到其它CDN&lt;/p&gt;</description>
    </item>
    <item>
      <title>自定义LEDE路由器KoolProxyR屏蔽广告规则，20200705</title>
      <link>https://blog.margrop.net/post/lede-router-koolproxyr-adblock-rules/</link>
      <pubDate>Fri, 15 Jan 2021 15:05:48 +0800</pubDate>
      <guid>https://blog.margrop.net/post/lede-router-koolproxyr-adblock-rules/</guid>
      <description>&lt;h1 id=&#34;如何安装koolproxyr&#34;&gt;如何安装KoolProxyR&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;参考&lt;a href=&#34;https://github.com/user1121114685/koolproxyR&#34;&gt;KoolProxyR项目官网&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在SSH中执行如下代码实现在线安装。（请全部复制）&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget -4 -O /tmp/KoolProxyR_install.sh https://shaoxia1991.coding.net/p/koolproxyr/d/koolproxyr/git/raw/master/KoolProxyR_install.sh &amp;amp;&amp;amp; chmod 777 /tmp/KoolProxyR_install.sh &amp;amp;&amp;amp; sh /tmp/KoolProxyR_install.sh&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;广告屏蔽规则&#34;&gt;广告屏蔽规则&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;下面是我自己使用的路由器广告屏蔽规则&#xA;基于软路由&lt;code&gt;LEDE&lt;/code&gt;，&lt;code&gt;KoolProxyR&lt;/code&gt;的自定义规则中使用。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>如何使用Windows运行N2N-编译篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-windows-compile/</link>
      <pubDate>Fri, 15 Jan 2021 14:26:49 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-windows-compile/</guid>
      <description>&lt;p&gt;按照&lt;a href=&#34;https://github.com/ntop/n2n&#34;&gt;N2N官方网站&lt;/a&gt;的&lt;a href=&#34;https://github.com/ntop/n2n/blob/dev/doc/Building.md&#34;&gt;Building说明&lt;/a&gt;，Windows编译需要的软件有&#xA;&lt;code&gt;Visual Studio&lt;/code&gt;,&lt;code&gt;Cmake&lt;/code&gt;,&lt;code&gt;OpenSSL&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;看到&lt;code&gt;Visual Studio&lt;/code&gt;我就头大，这个软件安装起来可不得了。&#xA;于是我选择了交叉编译，即使用Linux环境编译Windows的exe和dll文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何使用群晖（DSM）运行N2N-编译篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-dsm/</link>
      <pubDate>Fri, 15 Jan 2021 13:18:07 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-dsm/</guid>
      <description>&lt;p&gt;群晖（后面使用&lt;code&gt;DSM&lt;/code&gt;代替）是一个目前最著名的&lt;code&gt;NAS&lt;/code&gt;系统，没有之一。&#xA;如何在&lt;code&gt;DSM&lt;/code&gt;上直接运行&lt;code&gt;N2N&lt;/code&gt;呢，当然又需要交叉编译了😂。&#xA;下面的交叉编译操作，需要有&lt;code&gt;Linux&lt;/code&gt;的基本功，和&lt;code&gt;vim&lt;/code&gt;操作的基本功。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何使用CentOS 7运行N2N—supernode篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-centos-supernode/</link>
      <pubDate>Fri, 15 Jan 2021 09:15:03 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-centos-supernode/</guid>
      <description>&lt;p&gt;&lt;code&gt;超级节点（supernode）&lt;/code&gt;：它允许边缘节点宣布和发现其他节点。它必须具有可在Internet上公开访问的端口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>集客AP和AC固件下载地址</title>
      <link>https://blog.margrop.net/post/jike-ac-ap-download-url/</link>
      <pubDate>Thu, 14 Jan 2021 21:28:52 +0800</pubDate>
      <guid>https://blog.margrop.net/post/jike-ac-ap-download-url/</guid>
      <description>&lt;h1 id=&#34;常用下载地址&#34;&gt;常用下载地址&lt;/h1&gt;&#xA;&lt;p&gt;&lt;code&gt;AP230EP&lt;/code&gt;：&#xA;&lt;code&gt;AP245P&lt;/code&gt;：&#xA;&lt;code&gt;AP246ND&lt;/code&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>收藏夹、常用软件、常用国内镜像仓库、常用 Chrome 插件</title>
      <link>https://blog.margrop.net/favorites/</link>
      <pubDate>Thu, 14 Jan 2021 21:05:24 +0800</pubDate>
      <guid>https://blog.margrop.net/favorites/</guid>
      <description>常用 Windows 软件下载 https://download.margrop.net/d/oneindex/EXE/&#xA;一款遥遥领先的Microsoft激活脚本 https://massgrave.dev/&#xA;#进入PowerShell管理员权限，运行下面命令 irm https://massgrave.dev/get | iex 常用 Android 软件下载 https://download.margrop.net/d/oneindex/APK/&#xA;Google Play 市场链接转换为 apk 下载 https://apkcombo.com/zh/apk-downloader/&#xA;Markdown学习 https://xianbai.me/learn-md/index.html&#xA;字符串处理工具 https://regex101.com/ http://www.renrensousuo.com/quchuchongfu/ https://www.bejson.com/&#xA;开源的虚拟化平台 Proxmox VE https://www.proxmox.com/en/downloads/category/iso-images-pve&#xA;跨平台、开源且支持 Docker 的密码管理器 Bitwarden https://bitwarden.com/&#xA;在线绘制流程图 https://draw.io/ https://app.diagrams.net/&#xA;智能家居——低代码事件驱动平台 NodeRed https://nodered.org/&#xA;Win10 最新下载地址： https://msdn.sjjzm.com/win10.html http://msdn.itellyou.cn/ http://www.xitongku.com/&#xA;上海市空中课堂 https://basic.sh.smartedu.cn/airclassroom/airClassroom?gradeId=1554711046177124001&amp;sectionId=1554711046177124000&amp;sectionName=%E5%B0%8F%E5%AD%A6&amp;gradeName=%E4%B8%80%E5%B9%B4%E7%BA%A7&#xA;幼儿教育 https://www.starfall.com/h/ https://www.duckduckmoose.com/&#xA;Art of Problem Solving —— Alcumus Problem https://artofproblemsolving.com/alcumus/problem&#xA;Art of Problem Solving —— Videos https://artofproblemsolving.com/videos&#xA;诗词乐 https://www.shicile.com/&#xA;Beast Academy https://beastacademy.</description>
    </item>
    <item>
      <title>收藏夹、常用软件、常用国内镜像仓库、常用 Chrome 插件</title>
      <link>https://blog.margrop.net/post/favorites/</link>
      <pubDate>Thu, 14 Jan 2021 21:05:24 +0800</pubDate>
      <guid>https://blog.margrop.net/post/favorites/</guid>
      <description>常用 Windows 软件下载 https://download.margrop.net/d/oneindex/EXE/&#xA;一款遥遥领先的Microsoft激活脚本 https://massgrave.dev/&#xA;#进入PowerShell管理员权限，运行下面命令 irm https://massgrave.dev/get | iex 常用 Android 软件下载 https://download.margrop.net/d/oneindex/APK/&#xA;Google Play 市场链接转换为 apk 下载 https://apkcombo.com/zh/apk-downloader/&#xA;Markdown学习 https://xianbai.me/learn-md/index.html&#xA;字符串处理工具 https://regex101.com/ http://www.renrensousuo.com/quchuchongfu/ https://www.bejson.com/&#xA;开源的虚拟化平台 Proxmox VE https://www.proxmox.com/en/downloads/category/iso-images-pve&#xA;跨平台、开源且支持 Docker 的密码管理器 Bitwarden https://bitwarden.com/&#xA;在线绘制流程图 https://draw.io/ https://app.diagrams.net/&#xA;智能家居——低代码事件驱动平台 NodeRed https://nodered.org/&#xA;Win10 最新下载地址： https://msdn.sjjzm.com/win10.html http://msdn.itellyou.cn/ http://www.xitongku.com/&#xA;上海市空中课堂 https://basic.sh.smartedu.cn/airclassroom/airClassroom?gradeId=1554711046177124001&amp;sectionId=1554711046177124000&amp;sectionName=%E5%B0%8F%E5%AD%A6&amp;gradeName=%E4%B8%80%E5%B9%B4%E7%BA%A7&#xA;幼儿教育 https://www.starfall.com/h/ https://www.duckduckmoose.com/&#xA;Art of Problem Solving —— Alcumus Problem https://artofproblemsolving.com/alcumus/problem&#xA;Art of Problem Solving —— Videos https://artofproblemsolving.com/videos&#xA;诗词乐 https://www.shicile.com/&#xA;Beast Academy https://beastacademy.</description>
    </item>
    <item>
      <title>【转】Spring AOP 拦截指定注解标识的类或方法</title>
      <link>https://blog.margrop.net/post/spring-aop-annotation-and-within/</link>
      <pubDate>Thu, 14 Jan 2021 15:29:41 +0800</pubDate>
      <guid>https://blog.margrop.net/post/spring-aop-annotation-and-within/</guid>
      <description>&lt;p&gt;AOP中扫描指定注解相关说明&#xA;（1）@annotation：用来拦截所有被某个注解修饰的方法&#xA;（2）@within：用来拦截所有被某个注解修饰的类&#xA;（3）within：用来指定扫描的包的范围&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何使用CentOS 7运行N2N—编译篇</title>
      <link>https://blog.margrop.net/post/how-to-use-n2n-centos-compile/</link>
      <pubDate>Thu, 14 Jan 2021 14:26:49 +0800</pubDate>
      <guid>https://blog.margrop.net/post/how-to-use-n2n-centos-compile/</guid>
      <description>&lt;p&gt;若对完整编译过程有兴趣，可以慢慢浏览。&#xA;当然也可以直接下载下载已编译好的文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于</title>
      <link>https://blog.margrop.net/about/</link>
      <pubDate>Wed, 13 Jan 2021 17:34:15 +0800</pubDate>
      <guid>https://blog.margrop.net/about/</guid>
      <description>魔都水滴 AI Infrastructure Engineer 这里记录我在 AI Agent、Cloud Platform、Self-hosting 和 Engineering 方向上的长期实践。&#xA;我更关心一套系统能不能真正运行起来、稳定下来，并且在出现问题时能够被定位和修复。因此，博客内容主要来自真实环境中的部署、迁移、排障、自动化和复盘，而不是只整理一份“看起来能用”的教程。&#xA;我长期关注什么 AI Agent：Coding Agent、MCP、共享记忆、模型网关和 Agent 工作流 Self-hosting：Docker、NAS、Proxmox VE、家庭实验室和网络基础设施 Engineering：Linux、Java、Go、数据库、性能、可观测性和线上事故 Cloud Platform：服务部署、自动化、权限、Token 管理和生产环境实践 这些方向并不是彼此孤立的。我的兴趣是把 AI 能力放进真实的工程系统里：有数据、有权限、有监控，也有明确的失败边界和回滚方式。&#xA;文章会写什么 我通常会尽量保留：&#xA;起因和背景：问题在什么环境里出现，原本的目标是什么。 验证过程：实际执行了哪些命令、观察到什么现象，以及哪些尝试没有奏效。 根因和修复：为什么会出问题，最终改变了什么。 验收方式：如何证明服务恢复、配置生效或部署真的上线。 如果文章涉及线上环境、机器或内部系统，会对敏感信息做脱敏处理。&#xA;推荐阅读路径 第一次来：从 Start Here 了解完整主题地图。 想看最新实践：浏览归档。 想按技术检索：浏览标签。 想看代码和自动化：访问 GitHub。 其他入口 资源下载站 GitHub 关注微信公众号：ClawLoader 关注微信公众号 扫描下方二维码关注 ClawLoader，获取 AI Agent、Self-hosting 和工程实践更新。&#xA;这个博客会继续以中文为主，并在值得长期参考的文章上补充英文版本。欢迎通过文章底部的评论区交流，也欢迎指出实践中的遗漏和错误。</description>
    </item>
    <item>
      <title>关于</title>
      <link>https://blog.margrop.net/post/about/</link>
      <pubDate>Wed, 13 Jan 2021 17:34:15 +0800</pubDate>
      <guid>https://blog.margrop.net/post/about/</guid>
      <description>魔都水滴 AI Infrastructure Engineer 这里记录我在 AI Agent、Cloud Platform、Self-hosting 和 Engineering 方向上的长期实践。&#xA;我更关心一套系统能不能真正运行起来、稳定下来，并且在出现问题时能够被定位和修复。因此，博客内容主要来自真实环境中的部署、迁移、排障、自动化和复盘，而不是只整理一份“看起来能用”的教程。&#xA;我长期关注什么 AI Agent：Coding Agent、MCP、共享记忆、模型网关和 Agent 工作流 Self-hosting：Docker、NAS、Proxmox VE、家庭实验室和网络基础设施 Engineering：Linux、Java、Go、数据库、性能、可观测性和线上事故 Cloud Platform：服务部署、自动化、权限、Token 管理和生产环境实践 这些方向并不是彼此孤立的。我的兴趣是把 AI 能力放进真实的工程系统里：有数据、有权限、有监控，也有明确的失败边界和回滚方式。&#xA;文章会写什么 我通常会尽量保留：&#xA;起因和背景：问题在什么环境里出现，原本的目标是什么。 验证过程：实际执行了哪些命令、观察到什么现象，以及哪些尝试没有奏效。 根因和修复：为什么会出问题，最终改变了什么。 验收方式：如何证明服务恢复、配置生效或部署真的上线。 如果文章涉及线上环境、机器或内部系统，会对敏感信息做脱敏处理。&#xA;推荐阅读路径 第一次来：从 Start Here 了解完整主题地图。 想看最新实践：浏览归档。 想按技术检索：浏览标签。 想看代码和自动化：访问 GitHub。 想看每日 AI 动态和 Agent 工作记录：访问 AI Daily。 其他入口 资源下载站 AI Daily：AI Tech / AI Diary GitHub 关注微信公众号：ClawLoader 关注微信公众号 扫描下方二维码关注 ClawLoader，获取 AI Agent、Self-hosting 和工程实践更新。&#xA;这个博客会继续以中文为主，并在值得长期参考的文章上补充英文版本。欢迎通过文章底部的评论区交流，也欢迎指出实践中的遗漏和错误。</description>
    </item>
    <item>
      <title>N2N 是什么？</title>
      <link>https://blog.margrop.net/post/what-is-n2n/</link>
      <pubDate>Wed, 13 Jan 2021 16:27:39 +0800</pubDate>
      <guid>https://blog.margrop.net/post/what-is-n2n/</guid>
      <description>&lt;p&gt;&lt;code&gt;N2N&lt;/code&gt;是一个开源的P2P加密组网的工具&lt;/p&gt;&#xA;&lt;p&gt;开源项目地址为：&lt;a href=&#34;https://github.com/ntop/n2n&#34;&gt;https://github.com/ntop/n2n&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;目前最新版本为&lt;code&gt;2.8-stable&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么要使用Github Page?</title>
      <link>https://blog.margrop.net/post/why-github-page/</link>
      <pubDate>Wed, 13 Jan 2021 13:24:27 +0800</pubDate>
      <guid>https://blog.margrop.net/post/why-github-page/</guid>
      <description>&lt;p&gt;那是十几年前的事情，十几年前用的是 &lt;code&gt;163Blog&lt;/code&gt;，因为Blog转载的几篇搭建机场和飞机的文章，于是&lt;code&gt;163Blog&lt;/code&gt;被永久封禁。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello World</title>
      <link>https://blog.margrop.net/post/hello-world/</link>
      <pubDate>Wed, 13 Jan 2021 11:00:06 +0800</pubDate>
      <guid>https://blog.margrop.net/post/hello-world/</guid>
      <description>&lt;p&gt;经过各种思想和环境准备工作，我个人的博客终于正式开张营业了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hello Gridea</title>
      <link>https://blog.margrop.net/post/hello-gridea/</link>
      <pubDate>Wed, 12 Dec 2018 00:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/hello-gridea/</guid>
      <description>&lt;p&gt;👏  欢迎使用 &lt;strong&gt;Gridea&lt;/strong&gt; ！&lt;br&gt;&#xA;✍️  &lt;strong&gt;Gridea&lt;/strong&gt; 一个静态博客写作客户端。你可以用它来记录你的生活、心情、知识、笔记、创意&amp;hellip; &amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Start Here</title>
      <link>https://blog.margrop.net/en/start-here/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.margrop.net/en/start-here/</guid>
      <description>Start Here This blog is a map of personal AI infrastructure: practical work across AI agents, self-hosting, cloud platforms, and engineering operations.&#xA;01 · AI Agent Coding agents, OpenClaw, Claude Code, Hermes, MCP, and shared memory — with a focus on workflows that survive real usage.&#xA;Connect Proxmox VE to an AI Agent Shared memory for OpenClaw, Codex, Claude, and Gemini UI UX Pro Max for better agent-built interfaces 02 · Self-hosting Docker, NAS, Proxmox VE, homelab networking, and storage — the foundation for systems that remain useful after the demo.</description>
    </item>
    <item>
      <title>Start Here</title>
      <link>https://blog.margrop.net/start-here/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://blog.margrop.net/start-here/</guid>
      <description>Start Here 如果你第一次来到这里，可以把这个博客理解成一张个人 AI 基础设施地图：我会把 AI Agent、Self-hosting、云平台和工程排障放在同一个系统里，记录真实部署、失败原因和可复用的解决方案。&#xA;01 · AI Agent 从 Coding Agent、OpenClaw、Claude Code、Hermes、MCP 到共享记忆，关注 Agent 如何真正进入开发和运维工作流。&#xA;Proxmox VE 接入 AI Agent 多 Agent 共享记忆：OpenClaw、Codex、Claude 与 Gemini UI UX Pro Max：让 Agent 不再盲目猜界面 02 · Self-hosting Docker、NAS、Proxmox VE、家庭实验室、网络和存储，是把想法变成长期可用系统的基础。&#xA;Portainer：把 Docker 命令行装进驾驶舱 Proxmox VE 日常维护与国内源 群晖 CLI 管理指南导读 03 · Engineering 我更关心“为什么会坏”和“如何证明已经修好”：线上事故、性能、自动化、数据库和可观测性，都会用复盘的方式记录。&#xA;AI Agent 的 MySQL、Prometheus、Loki、Grafana 实战 Docker 容器无限重启的真实原因 后台进程为什么在 Shell 退出后消失 04 · AI Infrastructure 这是我正在持续建设的长期主题：模型网关、Token 管理、部署、监控、权限和成本控制，最终服务于可维护的 AI 系统，而不是一次性的 Demo。</description>
    </item>
  </channel>
</rss>
