&lt;?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jermineの博客</title><link>https://Jermine.vdo.pub/feed.xml</link><description>RISC-V、AI-IoT、Golang、Rust、Zig、LLM、Docker、Kubernetes、WebAssembly</description><lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><generator>Hugo</generator><atom:link href="https://Jermine.vdo.pub/tags/%E6%B1%BD%E8%BD%A6/" rel="self" type="application/rss+xml"/><item><title>2026 跨平台开发选型指南：KMP、Flutter、React Native 与鸿蒙适配怎么选？</title><link>https://Jermine.vdo.pub/posts/cross-platform-development-selection-guide-2026/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/cross-platform-development-selection-guide-2026/</guid><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><description>跨平台开发大致有两条路线：
共享业务逻辑，UI 各写各的：以 Kotlin Multiplatform（KMP）为代表。网络、数据、状态管理和业务规则只实现一次，Android 使用 Compose，iOS 使用 SwiftUI，保留原生 UI 控制力。 共享 UI，一套代码跑多端：以 Flutter、Compose Multiplatform、React Native、uni-app 为代表。页面、组件和交互逻辑尽量复用，再通过自绘、原生组件桥接或编译适配不同平台。 理解这一点，后续的框架对比才有意义。跨平台方案真正的差别，不只是“支持多少平台”，还包括 UI 由谁渲染、平台能力如何调用，以及代码最终运行或编译到哪里。</description></item><item><title>Herdr：为 AI Coding Agent 构建一个真正的运行时</title><link>https://Jermine.vdo.pub/tools/herdr-ai-agent-runtime-and-terminal-workspace/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/herdr-ai-agent-runtime-and-terminal-workspace/</guid><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><description>AI Coding Agent 已经能够编写代码、运行测试、修改配置，甚至调用另一个 Agent 做代码审查。但当 Agent 数量增加后，新的问题很快出现：哪个任务已经完成？哪个 Agent 正在等待授权？哪个终端已经卡住？如果合上笔记本，后台任务还能继续吗？
传统做法通常是打开多个终端标签页，或者使用 tmux、screen 一类终端复用器。它们能解决“进程不要因为终端关闭而退出”，却不知道终端里运行的是哪一个 Agent，也无法理解 Agent 当前是在工作、等待输入还是已经完成。
Herdr 的定位正是补上这一层：它不是新的 AI Agent，而是一个面向 Coding Agent 的终端工作空间与运行时。它负责托管 Agent 所在的真实终端，保持会话持久化，识别 Agent 状态，并为 Agent 之间的协作提供 CLI 与 Socket API。</description></item><item><title>Moli vs. Obscura：如何为 AI Agent 选择无头浏览器</title><link>https://Jermine.vdo.pub/tools/moli-vs-obscura-headless-browser-for-ai-agents/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/moli-vs-obscura-headless-browser-for-ai-agents/</guid><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><description>Chromium 几乎是浏览器自动化的默认答案：兼容性最好、工具链最成熟，遇到复杂网页时也最省心。但它的代价同样明显——进程多、内存占用高、冷启动慢。对需要同时运行大量会话的 AI Agent、网页检索系统和爬虫来说，这些成本会被迅速放大。
Moli 和 Obscura 都试图解决这个问题。它们都使用 Rust 构建，也都不依赖 Chromium，却走出了两条不同的路线：Moli 优先保证任务成功率与复杂页面兼容性，Obscura 则把轻量、并发抓取和隐身能力放在更靠前的位置。</description></item><item><title>告别复杂 VPN：Tailscale 极简组网与安全配置实战指南</title><link>https://Jermine.vdo.pub/posts/tailscale-simple-networking-security-guide/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/tailscale-simple-networking-security-guide/</guid><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><description>如果你配置过传统 VPN（OpenVPN、手动 WireGuard），大概率经历过证书管理、防火墙规则、端口转发和静态 IP 配置的痛苦。而当你的设备不止一台——Mac、Windows、Linux、手机、NAS 都需要互相访问时，这种痛苦会被成倍放大。
Tailscale 就是为终结这些痛苦而生的。这篇文章从快速组网讲到 ACL 安全策略，帮你用最短时间搭起一个既好用又安全的私有网络。</description></item><item><title>Kubernetes 跨 Namespace 服务访问与 gRPC 负载均衡实践指南</title><link>https://Jermine.vdo.pub/cloud-native/kubernetes-cross-namespace-grpc-load-balancing/</link><guid isPermaLink="true">https://Jermine.vdo.pub/cloud-native/kubernetes-cross-namespace-grpc-load-balancing/</guid><pubDate>Wed, 02 Sep 2026 10:00:00 +0800</pubDate><description>在 Kubernetes 中，服务发现和负载均衡是微服务架构的核心能力。然而，当服务分布在不同的 Namespace 中，或者使用 gRPC 协议时，一些&amp;quot;默认&amp;quot;机制并不能完全满足需求。本文将首先介绍跨 Namespace 访问服务的标准方法，然后深入剖析 gRPC 在 Kubernetes 中遇到的负载不均衡问题，并给出多种解决方案，帮助你在生产环境中构建稳定、高效的服务通信。</description></item><item><title>Buildbarn + Kubernetes 分布式编译：识别弹性节点并调整 Worker 行为</title><link>https://Jermine.vdo.pub/cloud-native/buildbarn-kubernetes-spot-node-aware-worker/</link><guid isPermaLink="true">https://Jermine.vdo.pub/cloud-native/buildbarn-kubernetes-spot-node-aware-worker/</guid><pubDate>Wed, 02 Sep 2026 08:10:09 +0800</pubDate><description>在 Buildbarn + Kubernetes 的分布式编译场景中，识别弹性节点并据此调整 Worker 行为，是构建弹性编译集群的关键一环。以下结合 Buildbarn 架构，给出完整的技术方案。
Buildbarn 架构速览 Buildbarn 分布式编译集群通常包含以下核心组件：</description></item><item><title>Buildbarn on Kubernetes：根据编译负载自动伸缩 Worker 的四种方案</title><link>https://Jermine.vdo.pub/devops/buildbarn-k8s-worker-autoscaling/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/buildbarn-k8s-worker-autoscaling/</guid><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><description> 把 Buildbarn 自身的负载指标，转化为 Kubernetes 的行动指令。
在 Kubernetes 上运行 Buildbarn 作为远端执行（Remote Execution）/ 远程缓存后端时，一个常见诉求是：根据 CI 编译任务的规模，动态调整 Worker 的数量，从而既扛得住编译高峰，又不在低谷期浪费资源。本文梳理了四种主流方案，并给出选型建议。</description></item><item><title>Bifrost 深度拆解：用 Go 构建高性能、统一的 AI API 网关</title><link>https://Jermine.vdo.pub/posts/bifrost-ai-api-gateway/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/bifrost-ai-api-gateway/</guid><pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate><description> 当一个项目同时接入 OpenAI、Anthropic、Google、Mistral、DeepSeek 等模型提供商时，真正麻烦的往往不是调用某个模型，而是维护一堆不同的认证方式、请求格式、模型名称和错误处理逻辑。Bifrost 试图把这层复杂度收敛成一个统一的、高性能 API。</description></item><item><title>从 gRPC 到 LLM：API 网关技术选型实战指南</title><link>https://Jermine.vdo.pub/posts/grpc-to-llm-api-gateway-selection/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/grpc-to-llm-api-gateway-selection/</guid><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><description>当你的系统需要同时处理微服务间通信、跨语言调用和大模型请求时，API 网关就不再是一个简单的路由工具，而是整个基础设施的流量枢纽。本文记录了我在进行 gRPC 一致性哈希负载均衡方案选型时，逐步深入对比 APISIX、Kong 和 Envoy 的全过程，希望能为同样面临复杂网关选型的你提供参考。</description></item><item><title>人间八苦与五毒：认清根源，才能真正离苦</title><link>https://Jermine.vdo.pub/posts/eight-sufferings-and-five-poisons/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/eight-sufferings-and-five-poisons/</guid><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><description>佛经中说，人生有八种根本的苦。这不是悲观的论调，而是一种清醒的认知——就像医生先诊断病情，才能对症下药。理解了苦，才知道如何离苦。</description></item><item><title>终端三件套：Zellij + Herdr + cmux 打造 AI 编码终极工作流</title><link>https://Jermine.vdo.pub/posts/terminal-ai-coding-workflow-zellij-herdr-cmux/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/terminal-ai-coding-workflow-zellij-herdr-cmux/</guid><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><description> 当现代化终端复用器遇上 AI 智能体多路复用器，再叠加上 macOS 原生终端的可视化能力。</description></item><item><title>现代终端效率工具全家桶：Yazi、Zellij、Starship 与 Ghostty 深度指南</title><link>https://Jermine.vdo.pub/posts/modern-terminal-efficiency-toolkit/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/modern-terminal-efficiency-toolkit/</guid><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><description>如果你是一个经常与终端打交道的人——无论是开发者、运维工程师，还是数据科学家——你一定感受过这样的痛点：文件管理全靠 cd 和 ls 来回切换、打开多个终端窗口后乱成一团、命令行提示符单调乏味缺乏信息、终端在处理大量输出时卡顿不堪……这些问题看似微小，却日复一日地消耗着我们的注意力与时间。
好在，开源社区近年来涌现了一批用 Rust 和 Zig 等现代语言编写的终端效率工具，它们以极致的性能和优雅的设计，正在重新定义&amp;quot;终端工作流&amp;quot;的体验。本文将从文件管理、终端复用、提示符美化、终端模拟器四个维度，为你深度介绍四款明星工具：Yazi、Zellij、Starship 和 Ghostty。</description></item><item><title>Zellij vs rmux：终端复用工具的远程控制与自动化能力深度对比</title><link>https://Jermine.vdo.pub/posts/zellij-vs-rmux-remote-control-automation/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/zellij-vs-rmux-remote-control-automation/</guid><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><description> 同为现代终端复用工具，它们在远程访问、可编程性和自动化能力上有何不同？一文读懂如何选择。</description></item><item><title>Herdr 完全指南：让 AI 编程助手真正活起来</title><link>https://Jermine.vdo.pub/posts/herdr-complete-guide-ai-agent-runtime/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/herdr-complete-guide-ai-agent-runtime/</guid><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><description> 一个让 AI 智能体永不掉线的终端工作区管理器。</description></item><item><title>从 Loop 到 Graph：AI Agent 架构的下一站</title><link>https://Jermine.vdo.pub/posts/from-loop-to-graph-ai-agent-architecture/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/from-loop-to-graph-ai-agent-architecture/</guid><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><description> 2026 年 7 月，OpenClaw 创始人 Peter Steinberger 在 X 上发了一条不到十个字的帖子：「我们还在讨论 Loop，还是已经转向 Graph 了？」短短三天，这条推文被浏览了超过 270 万次。</description></item><item><title>从窗口管理到 AI 交互：平铺窗口管理器（TWM）完全指南</title><link>https://Jermine.vdo.pub/posts/twm-complete-guide-from-window-management-to-ai/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/twm-complete-guide-from-window-management-to-ai/</guid><pubDate>Mon, 13 Jul 2026 10:00:00 +0800</pubDate><description> 全面了解 TWM 的世界——从 i3wm 基础入门、主流 TWM 对比选型、跨平台方案，到 TWM 在 AI Agent 时代的新潜力。
在图形界面的演进历程中，窗口管理器一直扮演着举足轻重的角色。近年来，随着键盘流开发者和 AI Agent 技术的兴起，**平铺窗口管理器（Tiling Window Manager，简称 TWM）**正从一个小众工具走向更广阔的舞台。</description></item><item><title>RAG 核心知识十讲：从入门到企业级实践</title><link>https://Jermine.vdo.pub/posts/rag-core-knowledge-ten-lectures/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/rag-core-knowledge-ten-lectures/</guid><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><description> 建议阅读人群： AI 应用开发者 / 大模型面试备战者 / 对 RAG 技术感兴趣的同学
原文作者： 陈宇锋（飞行社），本文是对其飞书社区分享的整理
原文链接： 飞书社区 - RAG 核心知识十讲</description></item><item><title>弥勒佛为什么总在笑？看懂这5层深意，你也会心一笑</title><link>https://Jermine.vdo.pub/posts/why-maitreya-always-smiles-5-meanings/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/why-maitreya-always-smiles-5-meanings/</guid><pubDate>Sun, 12 Jul 2026 10:00:00 +0800</pubDate><description> 深入解读弥勒佛笑容的5层含义——从悲悯世人到自我接纳，越读越通透。
每次走进寺庙，第一眼看到的就是那尊敞着大肚、咧着嘴笑的弥勒佛。不管你心里装着多少烦心事，只要盯着他那张笑脸看一会儿，嘴角就忍不住跟着上扬。可你有没有认真想过——弥勒佛，到底在笑什么？</description></item><item><title>从柴油车尿素到终极车库：一位车迷的燃料革命与进化论</title><link>https://Jermine.vdo.pub/cars/from-diesel-urea-to-ultimate-garage/</link><guid isPermaLink="true">https://Jermine.vdo.pub/cars/from-diesel-urea-to-ultimate-garage/</guid><pubDate>Sun, 12 Jul 2026 10:00:00 +0800</pubDate><description> 从柴油车尿素系统聊到生物燃料、混动技术，最终升华到&amp;quot;如果只能买一辆车&amp;quot;的终极命题——一位车迷在能源变革时代的完整思考轨迹。</description></item><item><title>用 Docker Compose 部署 RustFS：高性能 S3 兼容对象存储实战</title><link>https://Jermine.vdo.pub/docker/rustfs-docker-compose-deployment/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/rustfs-docker-compose-deployment/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><description>在云原生和 AI 训练场景里，对象存储几乎是基础设施的&amp;quot;水电煤&amp;quot;——从镜像分发、模型权重到训练数据集，都离不开一个兼容 S3 协议、又能扛住高吞吐的存储服务。MinIO 一直是这个领域的明星，但如果你想要一个用 Rust 重写、内存占用更低、启动更快、原生支持多盘纠删码的替代品，RustFS 是一个值得重点关注的新选择。
本文基于一份可直接落地的 docker-compose.yml，完整演示 RustFS 单节点 4 盘部署：从快速启动、访问验证，到存储持久化、配置项解读、S3 客户端对接，再到生产环境加固，一次讲清楚。</description></item><item><title>bazel-remote 两级存储实战：本地磁盘 + S3 分层缓存配置详解</title><link>https://Jermine.vdo.pub/devops/bazel-remote-two-tier-storage-l1-l2/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/bazel-remote-two-tier-storage-l1-l2/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><description>在前两篇 bazel-remote 系列文章里，我们对比了 S3 后端与一致性哈希两种横向扩展方案，也给出过&amp;quot;分层缓存（L1 + L2）是最佳实践&amp;quot;的结论。但那个结论停留在架构层面——具体怎么配？数据到底怎么流动？性能如何保障？
本文就把这个&amp;quot;最佳实践&amp;quot;落到地面：剖析 bazel-remote 原生两级存储的工作原理，并给出可直接套用的命令行与 YAML 配置。</description></item><item><title>Bazel 远程缓存高可用部署：S3（RustFS）vs 一致性哈希延迟实测对比</title><link>https://Jermine.vdo.pub/devops/bazel-remote-rustfs-vs-consistent-hash/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/bazel-remote-rustfs-vs-consistent-hash/</guid><pubDate>Tue, 07 Jul 2026 00:00:00 +0000</pubDate><description>在上一篇《bazel-remote 多实例部署：两种横向扩展方案与性能对比》中，我们梳理了共享云存储与负载均衡+一致性哈希两种横向扩展思路。但留下了一个关键问题：当 S3 后端（这里用 RustFS）与 bazel-remote 部署在同一高速网络时，两种方案的延迟差距还大吗？
本文就聚焦这个真实场景，给出量化的延迟对比与选型建议。</description></item><item><title>使用 RustFS 构建高性能 S3 兼容存储集群</title><link>https://Jermine.vdo.pub/devops/use-rustfs-build-high-availability-storage-cluster/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/use-rustfs-build-high-availability-storage-cluster/</guid><pubDate>Fri, 03 Jul 2026 10:00:00 +0800</pubDate><description> 从零开始部署 RustFS 高可用对象存储集群的全流程指南，涵盖架构设计、JBOD 磁盘配置、负载均衡、扩缩容操作及性能规划。
引言：为什么选择 RustFS？ 在分布式对象存储领域，MinIO 曾是许多团队的首选，但其 AGPL 协议对商业应用不太友好，且官方仓库已于 2026 年 2 月进入维护模式。在此背景下，RustFS 凭借 Apache-2.0 协议和卓越的性能表现，成为备受关注的新选择。</description></item><item><title>从 Gitea 到 Forgejo：开源代码托管与 CI/CD 的选型、对比与实践</title><link>https://Jermine.vdo.pub/devops/gitea-forgejo-comparison-ci-cd-practice/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/gitea-forgejo-comparison-ci-cd-practice/</guid><pubDate>Thu, 25 Jun 2026 00:00:00 +0000</pubDate><description>在开源代码托管平台的选择上，Gitea 凭借轻量、易部署的特性，一直是很多开发团队的首选。但近两年来，Forgejo 的出现和崛起，给这个领域带来了新的变量。
Gitea 和 Forgejo 到底是什么关系？它们的 CI/CD 能力有何差异？如何基于它们搭建现代化的 DevOps 流水线？又能否将 Kubernetes 作为 CI/CD 的执行环境？
这篇文章将基于我们团队的调研和实践，一次性讲清楚这些问题。</description></item><item><title>在 Debian 12 上编译安装最新版 Buildah 1.44.0</title><link>https://Jermine.vdo.pub/devops/buildah-debian-12-compile-install-1-44-0/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/buildah-debian-12-compile-install-1-44-0/</guid><pubDate>Wed, 17 Jun 2026 10:00:00 +0800</pubDate><description> 解决 libsubid.so.5 缺失错误，并升级到最新版本的全过程记录。
问题背景 在 Debian 12 (bookworm) 上执行 buildah -v 时遇到以下错误：
buildah: error while loading shared libraries: libsubid.so.5: cannot open shared object file: No such file or directory 用 ldd 检查依赖后发现三个缺失项：</description></item><item><title>Jenkins 中使用 Buildah Push 推送镜像的三种认证方式</title><link>https://Jermine.vdo.pub/docker/buildah-push-auth-in-jenkins/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/buildah-push-auth-in-jenkins/</guid><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><description>在 Jenkins 容器中使用 buildah push 推送镜像时，设置登录认证主要有三种方式。将凭证硬编码在命令里会带来严重的安全风险，因此在实际的 CI/CD 实践中，更推荐采用&amp;quot;登录 (Login) + 配置文件 (Authfile)&amp;ldquo;的方式。</description></item><item><title>Gatus：主动健康检查 + 可视化状态页 + 多通道告警</title><link>https://Jermine.vdo.pub/posts/gatus-active-health-monitoring/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/gatus-active-health-monitoring/</guid><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><description>你有没有遇到过这种情况——凌晨 3 点，用户在群里反馈服务挂了，而你这边一个告警都没有？Prometheus 的 Alertmanager 安静如鸡，因为&amp;quot;没有流量就没有错误&amp;quot;。等客户把电话打到老板那里，你才知道负载均衡器早就挂了。</description></item><item><title>飞书 CLI 使用指南：打通飞书与 Obsidian 的双向流动</title><link>https://Jermine.vdo.pub/posts/lark-cli-guide/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/lark-cli-guide/</guid><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><description> 飞书文档和本地笔记能否打通？数据散落在飞书、Obsidian 各个平台，每个都是孤岛——想找一篇半年前写的东西，得在四个后台翻十分钟。
本文介绍 feishu-cli（riba2534/feishu-cli），一个把飞书开放平台封装为命令行工具的开源项目，让内容在飞书和 Obsidian 之间双向流动。</description></item><item><title>用心若镜，不将不迎，应而不藏，故能胜物而不伤</title><link>https://Jermine.vdo.pub/posts/heart-as-mirror/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/heart-as-mirror/</guid><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><description> 「用心若镜，不将不迎，应而不藏，故能胜物而不伤。」 ——《庄子·应帝王》
心若能如明镜止水，物来则照，物去则空，不执着于过往，不期盼于未来，便可在纷繁世事中游刃有余而不被其所伤。</description></item><item><title>ArtifactFS：Cloudflare 用 Go 写了个 FUSE 文件系统，Git 大仓库秒挂载</title><link>https://Jermine.vdo.pub/posts/artifactfs-git-fuse-filesystem/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/artifactfs-git-fuse-filesystem/</guid><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><description> 你有没有等过 git clone 一个大仓库？Chrome 的源码 30GB+，Linux 内核 4GB+，clone 一次可能要等十几分钟。对人类来说这只是一杯咖啡的时间，但对 AI Agent 沙箱、CI/CD 容器、预览环境来说，这些等待时间是无法接受的——容器启动后需要立刻访问代码，而不是等 10 分钟 clone 完成再开始工作。
Cloudflare 的 ArtifactFS 就是来解决这个问题。它用 Go 写了一个 FUSE 文件系统，把 Git 仓库&amp;quot;秒挂载&amp;quot;为本地目录——先暴露完整的文件树，文件内容按需从远程拉取。操作系统看到的和一个正常的 git clone 一模一样，但你不需要等待 clone 完成。</description></item><item><title>从零到一：一个写作 Agent 的 Harness 工程迭代</title><link>https://Jermine.vdo.pub/posts/prompt-engineering-layered-iteration/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/prompt-engineering-layered-iteration/</guid><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><description> 建议阅读人群： 产品经理 / 对 Agent Harness 感兴趣的非纯技术人员
原文作者： 张佳（字节跳动），本文是对其飞书社区分享的整理和解读
Demo 场景： 开发一个「写作 Agent」—— 用户提供写作主题和风格参考文章，Agent 联网调研后在指定路径下输出文稿
核心思路 以写作 Agent 为例，演示如何从一个「出厂配置」的基本 Agent 描述，逐层叠加 Harness 策略，最终形成一份可靠的开发规格。
每一层都解决上一层暴露的问题，循序渐进。</description></item><item><title>把 AI 编程账单砍掉 80%！技术大神分享省钱秘籍</title><link>https://Jermine.vdo.pub/posts/ai-coding-cost-optimization/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/ai-coding-cost-optimization/</guid><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><description> 你花在 AI 编程上的费用，90% 都浪费在了没必要上传的上下文里！
最近，X 上的一位技术博主 Ronin 分享了一篇干货满满的博客《如何把 AI 编程账单砍掉 80%》。他的切身案例令人震惊：每月 AI 编程开销从 4200 美元降到了 312 美元——没有换新工具、没有减少项目交付产出，也没有换成便宜的&amp;quot;平替&amp;quot;。
得出了一个反常识的结论：想要控制好 AI 编程成本，先管好上下文，再选对模型。</description></item><item><title>Zsh 历史命令自动补全配置：提升终端操作效率</title><link>https://Jermine.vdo.pub/posts/zsh-history-autocomplete-setup/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/zsh-history-autocomplete-setup/</guid><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><description>背景 最近在 WSL2 环境下使用 zsh，发现终端的历史记录功能几乎不可用：
按 Ctrl+R 只能逐条翻看历史，效率低下 上下键只能按顺序浏览，不支持按输入的前缀匹配 历史记录只保存了寥寥几条，换个终端窗口就找不到之前敲过的命令 作为一个重度终端用户，每天要敲大量命令。如果能像搜索引擎一样，输入几个关键字就快速匹配到之前执行过的命令，可以显著降低记忆负担，提高操作效率。
本文将记录如何配置 zsh 实现智能的历史命令补全。</description></item><item><title>解决 SSH 端口转发错误：administratively prohibited</title><link>https://Jermine.vdo.pub/posts/ssh-port-forwarding-administratively-prohibited/</link><guid isPermaLink="true">https://Jermine.vdo.pub/posts/ssh-port-forwarding-administratively-prohibited/</guid><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><description>当你使用 SSH 的 -L、-R 或 -D 进行端口转发时，如果遇到如下错误：
channel 2: open failed: administratively prohibited: open failed 这意味着：你尝试建立的隧道被远程 SSH 服务器（sshd）的安全策略拒绝了。 本文将详细解释错误原因，并提供一步步的解决方案。</description></item><item><title>Kubernetes 部署 SSH 跳板机：用 autossh 打通内网访问</title><link>https://Jermine.vdo.pub/docker/k8s-ssh-tunnel-autossh/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/k8s-ssh-tunnel-autossh/</guid><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><description>背景 在 Kubernetes 集群中，很多时候服务没有对外暴露的网络入口，排查问题或日常运维都需要进入集群内部。通常的做法是：
在集群内部署一个 SSH 服务作为跳板机 通过 SSH 反向隧道将跳板机暴露到外部可访问的服务器上 开发者通过隧道连接跳板机，再访问集群内部服务 本文介绍如何在 K8s 中用一个 Pod 两个容器实现 SSH 跳板机 + autossh 自动隧道，实现稳定的内网穿透。</description></item><item><title>Alpine Linux 中为 doas 设置无密码权限</title><link>https://Jermine.vdo.pub/linux/alpine-doas-nopass/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/alpine-doas-nopass/</guid><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><description>在 Alpine Linux 中使用 doas 提升权限时，默认需要输入密码。如果你希望特定用户或用户组在执行 doas 命令时无需输入密码（例如用于自动化脚本或简化日常操作），可以通过修改 doas.conf 配置文件来实现。
本文将详细介绍几种常见的无密码配置方式，并强调规则匹配顺序的重要性。</description></item><item><title>autossh SSH 反向隧道：从 Docker 到 Kubernetes 部署</title><link>https://Jermine.vdo.pub/docker/autossh-tunnel-docker-k8s/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/autossh-tunnel-docker-k8s/</guid><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><description>背景 在内网环境中，经常需要将本地服务暴露到远程服务器上，常见场景如：
本地开发环境需要被外部访问 内网服务需要通过跳板机访问 Kubernetes 集群服务需要临时暴露到外部网络 使用 SSH 反向隧道（-R 参数）可以将本地端口映射到远程服务器端口，而 autossh 则能自动保持 SSH 连接稳定，在断线时自动重连。</description></item><item><title>26个PPT生成Skill，我做了一次系统梳理</title><link>https://Jermine.vdo.pub/tools/26-ppt-skills-review/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/26-ppt-skills-review/</guid><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><description>写在前面 做 PPT 这件事正在被 AI Agent 重新定义。不是那种&amp;quot;输入标题，输出一堆丑模板&amp;quot;的传统工具——而是在 Claude Code、Codex、Cursor 这些 AI 编程环境里，用自然语言告诉 AI 你要什么，它就在你的电脑上生成一份完整的演示文稿。 Agent Skill Agent Skill——一套结构化的指令和脚本包，装进 AI 代理后，它就获得了某个专业领域的操作能力。2026 年以来，这个赛道经历了爆炸式增长。Agent Skills Hub 上 PPT &amp;amp; Presentation 分类收录了 25 个项目，总 Star 数超过 7 万。而我在梳理过程中还发现至少 2 个同样重量级的项目未被收录。 如果你今天就要做一份 PPT，应该用哪一个？ 如果你今天就要做一份 PPT，应该用哪一个？</description></item><item><title>Claude HUD：在终端里常驻显示 Claude Code 会话信息</title><link>https://Jermine.vdo.pub/tools/claude-hud-install-guide/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/claude-hud-install-guide/</guid><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><description>背景 Claude Code 是 Anthropic 的终端 AI 编程助手，但它默认不显示任何会话状态信息——当前在处理什么任务、调用了哪些工具、用了什么模型、会话跑了多久，这些信息你只能在滚动历史里翻。</description></item><item><title>在 Proot-Distro Ubuntu 容器中集成 zsh 与 cc 命令的几种方式</title><link>https://Jermine.vdo.pub/linux/%E5%9C%A8-proot-distro-ubuntu-%E5%AE%B9%E5%99%A8%E4%B8%AD%E9%9B%86%E6%88%90-zsh-%E4%B8%8E-cc-%E5%91%BD%E4%BB%A4%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/%E5%9C%A8-proot-distro-ubuntu-%E5%AE%B9%E5%99%A8%E4%B8%AD%E9%9B%86%E6%88%90-zsh-%E4%B8%8E-cc-%E5%91%BD%E4%BB%A4%E7%9A%84%E5%87%A0%E7%A7%8D%E6%96%B9%E5%BC%8F/</guid><pubDate>Fri, 15 May 2026 12:00:00 +0000</pubDate><description>在使用 Termux 配合 proot-distro 运行 Ubuntu 发行版时，我们经常需要快速登录到特定用户、切换工作目录，并启动一个交互式的 zsh。更进一步，有时希望在进入 zsh 之前或之后自动执行一条命令——例如启动 cc（即 Claude Code 的缩写，一个 AI 编程助手）。本文将详细介绍如何优雅地实现这一需求。</description></item><item><title>Cursor + Claude Code + Codex 三层栈：AI 编程工具的可组合生态</title><link>https://Jermine.vdo.pub/tools/cursor-claude-code-codex-%E4%B8%89%E5%B1%82%E6%A0%88/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/cursor-claude-code-codex-%E4%B8%89%E5%B1%82%E6%A0%88/</guid><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><description>背景 OpenAI 给 Anthropic 的产品做了官方插件。这事儿在科技圈挺罕见的。
3 月 30 日，OpenAI 在 GitHub 发布了 codex-plugin-cc ，一个让 Codex 直接在 Claude Code 里运行的官方集成。Apache 2.0 许可，文档齐全，维护积极。</description></item><item><title>CC Switch：统一管理 Claude Code、Codex、Gemini CLI 等 AI 工具的 Swiss Army Knife</title><link>https://Jermine.vdo.pub/tools/cc-switch-unified-ai-cli-manager/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/cc-switch-unified-ai-cli-manager/</guid><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><description>背景 随着 AI 编程工具的爆发式增长，我们终端里跑的 CLI 工具越来越多：Claude Code、Codex、Gemini CLI、OpenCode、OpenClaw，以及即将支持的 Hermes Agent。每个工具都有自己独立的配置格式——JSON、TOML、.env 文件散落在不同的隐藏目录里。</description></item><item><title>使用buildah在容器中构建镜像</title><link>https://Jermine.vdo.pub/cloud-native/k8s-build-images-by-buildah/</link><guid isPermaLink="true">https://Jermine.vdo.pub/cloud-native/k8s-build-images-by-buildah/</guid><pubDate>Sun, 15 Mar 2026 09:12:34 +0800</pubDate><description>背景 多年来， Kaniko一直是构建镜像的首选方案，它是谷歌专为在非特权容器内构建镜像而开发的工具，无需 Docker 守护进程。然而在 2025 年 6 月，谷歌将该代码库归档，现在它已变为只读。GitLab 也已移除 Kaniko 的相关文档，并推荐使用 Buildah 或 Podman 等替代工具。</description></item><item><title>跨平台音乐播放器</title><link>https://Jermine.vdo.pub/tools/%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE%E5%99%A8/</guid><pubDate>Sun, 11 May 2025 11:02:31 +0800</pubDate><description>MusicFree下载安装 项目地址： 手机端：https://github.com/maotoumao/MusicFree 桌面端：https://github.com/maotoumao/MusicFreeDesktop 插件地址： https://musicfreepluginshub.2020818.xyz/plugins.json 相关文章 处理git无法显示中文的问题 git通过https协议使用仓库时如何记住token? Vs Code Hotkeys - vscode: Visual Studio Code 常用快捷键 如何在手机终端上使用claude-code？ Cursor + Claude Code + Codex 三层栈：AI 编程工具的可组合生态 代理客户端最好用的几个工具</description></item><item><title>如何通过RDP连接到WSL的Ubuntu24.04</title><link>https://Jermine.vdo.pub/wsl/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87rdp%E8%BF%9E%E6%8E%A5%E5%88%B0wsl%E7%9A%84ubuntu24.04/</link><guid isPermaLink="true">https://Jermine.vdo.pub/wsl/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87rdp%E8%BF%9E%E6%8E%A5%E5%88%B0wsl%E7%9A%84ubuntu24.04/</guid><pubDate>Wed, 01 Jan 2025 12:00:00 +0000</pubDate><description>要通过 RDP（远程桌面协议）连接到 WSL 中的 Ubuntu 24.04，核心思路是在 Ubuntu 中安装一个 RDP 服务器（通常是 xrdp），然后使用 Windows 自带的“远程桌面连接”（mstsc.exe）工具进行连接。</description></item><item><title>如何在手机终端上使用claude-code？</title><link>https://Jermine.vdo.pub/tools/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%89%8B%E6%9C%BA%E7%BB%88%E7%AB%AF%E4%B8%8A%E4%BD%BF%E7%94%A8claude-code/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%89%8B%E6%9C%BA%E7%BB%88%E7%AB%AF%E4%B8%8A%E4%BD%BF%E7%94%A8claude-code/</guid><pubDate>Thu, 18 Feb 2021 11:02:31 +0800</pubDate><description>在Termux中使用proot-distro运行ubuntu 直接在termux中安装claude code会遇到下面错误：
bun -version error: &amp;#34;/data/data/com.termux/files/home/.bun/bin/bun&amp;#34; has unexpected e_type: 2 这个错误是因为bun是为标准Linux环境（依赖glibc库）编译的,和Termux的Android环境（bionic libc）不兼容。</description></item><item><title>git通过https协议使用仓库时如何记住token?</title><link>https://Jermine.vdo.pub/tools/git%E9%80%9A%E8%BF%87https%E5%8D%8F%E8%AE%AE%E4%BD%BF%E7%94%A8%E4%BB%93%E5%BA%93%E6%97%B6%E5%A6%82%E4%BD%95%E8%AE%B0%E4%BD%8Ftoken/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/git%E9%80%9A%E8%BF%87https%E5%8D%8F%E8%AE%AE%E4%BD%BF%E7%94%A8%E4%BB%93%E5%BA%93%E6%97%B6%E5%A6%82%E4%BD%95%E8%AE%B0%E4%BD%8Ftoken/</guid><pubDate>Thu, 18 Feb 2021 11:02:31 +0800</pubDate><description>git通过https协议使用仓库时如何记住token? 通过配置 Git 的凭据助手（credential helper），可以记住 HTTPS 访问时需要的用户名和 Token（作为密码），避免重复输入。
常用方法（按安全性/便捷性排序） 1. 临时缓存（适合短期使用） 1git config --global credential.helper cache 2# 默认缓存 15 分钟，可修改超时（秒）： 3git config --global credential.helper &amp;#39;cache --timeout=3600&amp;#39; 2. 永久存储到文件（明文，安全性低） 1git config --global credential.helper store 2# 凭据会保存在 ~/.git-credentials，首次输入后永久生效 3. 使用操作系统安全存储（推荐） Windows（Git for Windows 自带） 1git config --global credential.helper manager-core 2# 或旧版：git config --global credential.helper wincred macOS（钥匙串） 1git config --global credential.helper osxkeychain Linux（需要安装 libsecret） 1sudo apt-get install libsecret-1-0 libsecret-1-dev 2sudo make -C /usr/share/doc/git/contrib/credential/libsecret 3git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret 或者使用 gnome-keyring 等。 4. 直接在远程 URL 中嵌入 Token（一次性配置，URL 变更） 1git remote set-url origin https://你的用户名:你的token@github.com/用户名/仓库.git ⚠️ Token 会明文存储在 .git/config 中，且 git remote -v 会暴露 Token。</description></item><item><title>处理git无法显示中文的问题</title><link>https://Jermine.vdo.pub/tools/%E5%A4%84%E7%90%86git%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA%E4%B8%AD%E6%96%87%E7%9A%84%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/%E5%A4%84%E7%90%86git%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA%E4%B8%AD%E6%96%87%E7%9A%84%E9%97%AE%E9%A2%98/</guid><pubDate>Mon, 18 Jan 2021 11:02:31 +0800</pubDate><description>git pull 遇到乱码 执行git pull 输出好多编码非中文的字符：
1remote: Enumerating objects: 42, done. 2remote: Counting objects: 100% (42/42), done. 3remote: Compressing objects: 100% (18/18), done. 4remote: Total 32 (delta 9), reused 32 (delta 9), pack-reused 0 (from 0) 5Unpacking objects: 100% (32/32), 4.17 KiB | 8.00 KiB/s, done. 6From github.com:JermineHu/jerminehu.github.io 7 08d9ec6..9c5c1ec master -&amp;gt; origin/master 8Updating 08d9ec6..9c5c1ec 9Fast-forward 10 .../29\346\227\245/\345\205\263\344\272\216claude code\344\275\277\347\224\250.md&amp;#34; | 39 +++++++++++++++++++++++++++++++++++++++ 11 .../30\346\227\245/\346\210\220\344\270\272\350\207\252\345\267\261.md&amp;#34; | 1 + 12 .../03\346\227\245/\345\205\263\344\272\216\347\235\241\347\234\240.md&amp;#34; | 21 +++++++++++++++++++++ 13 ...203\345\271\263\350\203\275\346\204\210\344\270\211\345\215\203\347\226\276.md&amp;#34; | 15 +++++++++++++++ 14 ...214\345\222\214\346\203\263\346\210\220\344\270\272\347\232\204\344\272\272.md&amp;#34; | 14 ++++++++++++++ 15 .../05\346\227\245/\346\234\235\350\212\261\345\244\225\346\213\276.md&amp;#34; | 6 ++++++ 16 6 files changed, 96 insertions(+) 17 create mode 100644 &amp;#34;6. \350\241\250\350\276\276/\345\215\241\347\211\207/2026\345\271\264/2\345\255\243\345\272\246/05\346\234\210/03\346\227\245/\345\205\263\344\272\216\347\235\241\347\234\240.md&amp;#34; 18 create mode 100644 &amp;#34;6. \350\241\250\350\276\276/\345\215\241\347\211\207/2026\345\271\264/2\345\255\243\345\272\246/05\346\234\210/05\346\227\245/\345\277\203\345\271\263\350\203\275\346\204\210\344\270\211\345\215\203\347\226\276.md&amp;#34; 19 create mode 100644 &amp;#34;6. \350\241\250\350\276\276/\345\215\241\347\211\207/2026\345\271\264/2\345\255\243\345\272\246/05\346\234\210/05\346\227\245/\346\210\221\344\273\254\347\273\210\345\205\266\344\270\200\347\224\237\345\257\273\346\211\276\347\232\204\357\274\214\345\272\224\350\257\245\346\230\257\350\207\252\345\267\261\345\226\234\346\254\242\347\232\204\347\224\237\346\264\273\346\226\271\345\274\217\357\274\214\345\222\214\346\203\263\346\210\220\344\270\272\347\232\204\344\272\272.md&amp;#34; 20 create mode 100644 &amp;#34;6. \350\241\250\350\276\276/\345\215\241\347\211\207/2026\345\271\264/2\345\255\243\345\272\246/05\346\234\210/05\346\227\245/\346\234\235\350\212\261\345\244\225\346\213\276.md&amp;#34; 解决方案： 遇到的问题是 Git 默认将非 ASCII 路径名（如中文）转义为 \nnn 形式的八进制编码，这是为了确保在老旧或非 UTF-8 环境中输出不会乱码。解决办法很简单：关闭路径转义。</description></item><item><title>解决GPU显存未释放问题</title><link>https://Jermine.vdo.pub/python/%E8%A7%A3%E5%86%B3gpu%E6%98%BE%E5%AD%98%E6%9C%AA%E9%87%8A%E6%94%BE%E9%97%AE%E9%A2%98/</link><guid isPermaLink="true">https://Jermine.vdo.pub/python/%E8%A7%A3%E5%86%B3gpu%E6%98%BE%E5%AD%98%E6%9C%AA%E9%87%8A%E6%94%BE%E9%97%AE%E9%A2%98/</guid><pubDate>Thu, 21 Mar 2019 15:53:29 +0800</pubDate><description>定位问题 我们在使用tensorflow+pycharm或者PyTorch写程序的时候,　有时候会在控制台终止掉正在运行的程序，但是有时候程序已经结束了，nvidia-smi也看到没有程序了，但是GPU的内存并没有释放，这是怎么回事呢？</description></item><item><title>Openshift Setup</title><link>https://Jermine.vdo.pub/cloud-native/openshift-setup/</link><guid isPermaLink="true">https://Jermine.vdo.pub/cloud-native/openshift-setup/</guid><pubDate>Fri, 15 Mar 2019 09:12:34 +0800</pubDate><description>介绍： OpenShift是红帽的云开发平台即服务（PaaS）。自由和开放源码的云计算平台使开发人员能够创建、测试和运行他们的应用程序，并且可以把它们部署到云中。Openshift广泛支持多种编程语言和框架，如Java，Ruby和PHP等。另外它还提供了多种集成开发工具如Eclipse integration，JBoss Developer Studio和 Jenkins等。OpenShift 基于一个开源生态系统为移动应用，数据库服务等，提供支持。 OpenShift Online服务构建在Red Hat Enterprise Linux上。Red Hat Enterprise Linux提供集成应用程序，运行库和一个配置可伸缩的多用户单实例的操作系统，以满足企业级应用的各种需求。</description></item><item><title>基于Docker部署ceph分布式文件系统[MImic13.2</title><link>https://Jermine.vdo.pub/ceph/%E5%9F%BA%E4%BA%8Edocker%E9%83%A8%E7%BD%B2ceph%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9Fmimic13.2.4%E7%89%88%E6%9C%AC/</link><guid isPermaLink="true">https://Jermine.vdo.pub/ceph/%E5%9F%BA%E4%BA%8Edocker%E9%83%A8%E7%BD%B2ceph%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9Fmimic13.2.4%E7%89%88%E6%9C%AC/</guid><pubDate>Thu, 24 Jan 2019 15:32:11 +0800</pubDate><description> 本文记录了基于docker部署最新ceph版本的多节点高可用测试详尽过程，切身体会比ceph-deploy方便得多，希望能给初次接触ceph的同学提供些许参考。</description></item><item><title>Linux安装Nvidia Docker</title><link>https://Jermine.vdo.pub/linux/linux%E5%AE%89%E8%A3%85nvidia-docker/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/linux%E5%AE%89%E8%A3%85nvidia-docker/</guid><pubDate>Wed, 26 Dec 2018 18:14:00 +0800</pubDate><description>注意： 由于程序运行于容器之中，所以镜像中一般都是带有CUDA、CUDNN库的，因此只需要在docker所在的主机上安装显卡驱动即可，无需费太大力气去安装cuda、cuddn之类的东西。</description></item><item><title>2018-12-24、2018-12-24武汉大学课程大纲</title><link>https://Jermine.vdo.pub/train/whdx/</link><guid isPermaLink="true">https://Jermine.vdo.pub/train/whdx/</guid><pubDate>Mon, 24 Dec 2018 18:57:10 +0800</pubDate><description>关于武汉大学的课程 2018年12月24-12月25第一次登上武汉大学讲台，讲了两天课，一共12个课时，分4部分，涵盖了DevOps的大多数内容（课程内容见: http://t.cn/EMAjtPw 提取码: iigw ），总体来说效果很好，做了这么久技术，出来讲讲课真的很过瘾!现在我有60名左右的学生，手下还带了几批实习生，有些实习生很优秀，实习之前申请了国外的学校准备去国外深造前途不可限量。</description></item><item><title>本地服务器搭建Harbor</title><link>https://Jermine.vdo.pub/docker/%E6%9C%AC%E5%9C%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BAharbor/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/%E6%9C%AC%E5%9C%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BAharbor/</guid><pubDate>Mon, 10 Dec 2018 17:38:45 +0800</pubDate><description>Unix下安装Harbor镜像仓库 harbor的官方安装指南 介绍了harbor有三种安装方式，分别是在线安装、离线安装和OVA安装，本文主要采用离线安装的方式。
官方文档上面说明需要依赖Python 2.7或以上版本，Docker引擎1.10以上，还有Docker Compose 1.6.0或以上版本，openssl。</description></item><item><title>LDAP集成多个系统配置截图</title><link>https://Jermine.vdo.pub/devops/ldap%E9%9B%86%E6%88%90%E5%A4%9A%E4%B8%AA%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E6%88%AA%E5%9B%BE/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/ldap%E9%9B%86%E6%88%90%E5%A4%9A%E4%B8%AA%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE%E6%88%AA%E5%9B%BE/</guid><pubDate>Fri, 07 Dec 2018 09:47:45 +0800</pubDate><description>多个系统基于LDAP用户认证 OpenLDAP是一个集中的用户账号管理系统。使用轻量级目录访问协议（LDAP）构建集中的身份验证系统可以减少管理成本，增强安全性，避免数据复制的问题，并提高数据的一致性。</description></item><item><title>关于Docker远程连接</title><link>https://Jermine.vdo.pub/docker/%E5%85%B3%E4%BA%8Edocker_%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/%E5%85%B3%E4%BA%8Edocker_%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5/</guid><pubDate>Thu, 29 Nov 2018 11:24:37 +0800</pubDate><description>非安全的连接方式 先介绍 非安全 的连接方式。
服务端配置 CoreOS 请使用第二种方法，其他 Linux 系统配置时选择以下两种方法之一
通常的配置方法 docker.service 中 dockerd 的 -H 参数不能与 daemon.json 中的 hosts 键值对冲突。(其他参数同理)
新建 /etc/systemd/system/docker.service.d/docker.conf 文件。</description></item><item><title>使用dotnet core通过docker部署一个基于微服务的demo应用</title><link>https://Jermine.vdo.pub/microservice/%E4%BD%BF%E7%94%A8dotnet-core%E9%80%9A%E8%BF%87docker%E9%83%A8%E7%BD%B2%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8E%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%9A%84demo%E5%BA%94%E7%94%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/microservice/%E4%BD%BF%E7%94%A8dotnet-core%E9%80%9A%E8%BF%87docker%E9%83%A8%E7%BD%B2%E4%B8%80%E4%B8%AA%E5%9F%BA%E4%BA%8E%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%9A%84demo%E5%BA%94%E7%94%A8/</guid><pubDate>Tue, 27 Nov 2018 13:25:20 +0800</pubDate><description>使用dotcore通过docker部署一个基于微服务的demo应用 架构概述 这个参考应用程序在服务器和客户端是跨平台的，这要归功于.NET Core服务能够在Linux或Windows容器上运行，具体取决于您的Docker主机，以及Xamarin用于在Android，iOS或Windows / UWP plus上运行的移动应用程序客户端Web应用程序的任何浏览器。该体系结构提出了一种面向微服务的体系结构实现，具有多个自治微服务（每个都拥有自己的数据库/ db），并在每个微服务中实现不同的方法（简单的CRUD与DDD / CQRS模式），使用Http作为客户端应用程序之间的通信协议。微服务和支持异步通信，用于基于集成事件和事件总线（轻量级消息代理，在RabbitMQ或Azure Service Bus之间进行选择，跨多个服务）进行数据更新传播。</description></item><item><title>Nvidia Docker可以指定GPU以及数量</title><link>https://Jermine.vdo.pub/docker/nvidia-docker/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/nvidia-docker/</guid><pubDate>Fri, 23 Nov 2018 18:17:44 +0800</pubDate><description>docker可以指定GPU以及数量操作如下： docker调用GPU时可以明确指定用哪一张显卡，同时也可以指定数量
相关文章 Linux安装Nvidia Docker Certificate Signed by Unknown Authority Error 关于Docker远程连接 Linux reinstall CUDA - Linux 安装和使用 CUDA Docker中使用深度学习框架并支持GPU加速 基于Docker部署ceph分布式文件系统MImic13.2</description></item><item><title>Ubuntu18.04修改DNS</title><link>https://Jermine.vdo.pub/linux/ubuntu18.04%E4%BF%AE%E6%94%B9dns/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/ubuntu18.04%E4%BF%AE%E6%94%B9dns/</guid><pubDate>Thu, 22 Nov 2018 14:56:29 +0800</pubDate><description>Ubuntu18.04修改DNS 问题描述 最近使用了最新版的ubuntu 18.04运行一些服务，然后发现服务器经常出现网络不通的情况，主要是一些域名无法解析。
检查/etc/resolv.conf，发现之前修改的nameserver总是会被修改为127.0.0.53，无论是改成啥，过段时间，总会变回来。</description></item><item><title>OpenStack下利用passthrough对GPU实现虚拟化</title><link>https://Jermine.vdo.pub/openstack/openstack%E4%B8%8B%E5%88%A9%E7%94%A8passthrough%E5%AF%B9gpu%E5%AE%9E%E7%8E%B0%E8%99%9A%E6%8B%9F%E5%8C%96/</link><guid isPermaLink="true">https://Jermine.vdo.pub/openstack/openstack%E4%B8%8B%E5%88%A9%E7%94%A8passthrough%E5%AF%B9gpu%E5%AE%9E%E7%8E%B0%E8%99%9A%E6%8B%9F%E5%8C%96/</guid><pubDate>Sat, 27 Oct 2018 17:51:33 +0800</pubDate><description>Tips：默认已安装好OpenStack相关必要组件并可以正常运行的情况下，本文只涉及GPU 虚拟化的相关配置说明。
配置GPU Passthrough的系统相关设置 在BIOS中enable VT-x, VT-d, Onboard VGA. Onboard VGA 的enable可以避免一些错误的出现，具体参考Not only for miners GPU integration in Nova environment. https://www.youtube.com/watch?v=1tdvz3ejokM</description></item><item><title>如何在虚拟机上配置PCI直通</title><link>https://Jermine.vdo.pub/server/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%8A%E9%85%8D%E7%BD%AEpci%E7%9B%B4%E9%80%9A/</link><guid isPermaLink="true">https://Jermine.vdo.pub/server/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%8A%E9%85%8D%E7%BD%AEpci%E7%9B%B4%E9%80%9A/</guid><pubDate>Sat, 27 Oct 2018 17:26:14 +0800</pubDate><description>问题描述 我想要分配一块物理网卡到用KVM创建的虚拟机上。我打算为这台虚拟机启用网卡的PCI直通。请问，我如何才能在virt-manager里面通过PCI直通方式来增加一个PCI设备到虚拟机上？_</description></item><item><title>Surf the Net on Linux Host by Notebook－把笔记本的无线网络通过网线共享给台式机</title><link>https://Jermine.vdo.pub/win10/surf-the-net-on-linux-host-by-notebook/</link><guid isPermaLink="true">https://Jermine.vdo.pub/win10/surf-the-net-on-linux-host-by-notebook/</guid><pubDate>Sat, 27 Oct 2018 16:45:22 +0800</pubDate><description>如何把笔记本的无线网络通过网线共享给台式机 问题描述 之前有去XX所,由于内网限制，不能上外网，然而安装软件又需要从网上下载，Linux的软件大多又有很多依赖库,离线安装太麻烦了，于是就想能否让电脑在安装软件的时候连上外网呢？答案是肯定的。操作详情如下：</description></item><item><title>如何为Debian系统打deb包</title><link>https://Jermine.vdo.pub/linux/%E5%A6%82%E4%BD%95%E4%B8%BAdebian%E7%B3%BB%E7%BB%9F%E6%89%93.deb%E5%8C%85/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/%E5%A6%82%E4%BD%95%E4%B8%BAdebian%E7%B3%BB%E7%BB%9F%E6%89%93.deb%E5%8C%85/</guid><pubDate>Thu, 27 Sep 2018 18:23:38 +0800</pubDate><description>源码编译安装 以dropwatch为例子，将其打成deb包。源码地址 ：https://github.com/pavel-odintsov/drop_watch</description></item><item><title>Linux服务器丢包故障的解决</title><link>https://Jermine.vdo.pub/linux/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%A2%E5%8C%85%E6%95%85%E9%9A%9C%E7%9A%84%E8%A7%A3%E5%86%B3/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%A2%E5%8C%85%E6%95%85%E9%9A%9C%E7%9A%84%E8%A7%A3%E5%86%B3/</guid><pubDate>Thu, 27 Sep 2018 17:27:23 +0800</pubDate><description>我们使用Linux作为服务器操作系统时，为了达到高并发处理能力，充分利用机器性能，经常会进行一些内核参数的调整优化，但不合理的调整常常也会引起意想不到的其他问题，本文就一次Linux服务器丢包故障的处理过程，结合Linux内核参数说明和TCP/IP协议栈相关的理论，介绍一些常见的丢包故障定位方法和解决思路。</description></item><item><title>KVM基本使用介绍</title><link>https://Jermine.vdo.pub/server/kvm%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D/</link><guid isPermaLink="true">https://Jermine.vdo.pub/server/kvm%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D/</guid><pubDate>Wed, 26 Sep 2018 11:27:37 +0800</pubDate><description>KVM是什么？ KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine)，它是一个 Linux 的一个内核模块，该内核模块使得 Linux 变成了一个 Hypervisor：
它由 Quramnet 开发，该公司于 2008年被 Red Hat 收购。 它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。 它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。 它需要支持虚拟化扩展的 CPU。 它是完全开源的。 KVM架构 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中，虚拟机被实现为常规的 Linux 进程，由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。</description></item><item><title>管理kvm常用命令总结</title><link>https://Jermine.vdo.pub/server/%E7%AE%A1%E7%90%86kvm%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/</link><guid isPermaLink="true">https://Jermine.vdo.pub/server/%E7%AE%A1%E7%90%86kvm%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%80%BB%E7%BB%93/</guid><pubDate>Wed, 26 Sep 2018 10:18:25 +0800</pubDate><description>查看虚拟机列表及状态 [root@kvm01 ~]# virsh list --all Id Name State ---------------------------------------------------- - vm1 shut off 启动虚拟机系统 [root@kvm01 ~]# virsh start vm1 Domain vm1 started 停止虚拟机系统 [root@kvm01 ~]# virsh shutdown vm1 停止虚拟机要求虚拟机开启acpid服务
重启虚拟机系统 [root@kvm01 ~]# virsh reboot vm1 强制关机虚拟机系统 [root@kvm01 ~]# virsh destroy vm1 设置虚拟机随宿主机开机自启 [root@kvm01 ~]# virsh autostart vm1 取消虚拟机随宿主机开机自启 [root@kvm01 ~]# virsh autostart --disable vm1 挂起及恢复虚拟机 挂起：
[root@kvm01 ~]# virsh suspend vm1 恢复：</description></item><item><title>设置kvm中的虚拟机随宿主机自启动</title><link>https://Jermine.vdo.pub/server/%E8%AE%BE%E7%BD%AEkvm%E4%B8%AD%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E9%9A%8F%E5%AE%BF%E4%B8%BB%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/server/%E8%AE%BE%E7%BD%AEkvm%E4%B8%AD%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E9%9A%8F%E5%AE%BF%E4%B8%BB%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8/</guid><pubDate>Wed, 26 Sep 2018 10:10:50 +0800</pubDate><description>图形化方式 在kvm图形化管理工具里面可以设置，让kvm虚拟机随着宿主虚拟机一起启动。（必须在关机状态下做）
设置好以后会像Windows一样创建一个快捷方式</description></item><item><title>设置服务器通电自启动</title><link>https://Jermine.vdo.pub/server/%E8%AE%BE%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E7%94%B5%E8%87%AA%E5%90%AF%E5%8A%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/server/%E8%AE%BE%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E7%94%B5%E8%87%AA%E5%90%AF%E5%8A%A8/</guid><pubDate>Thu, 20 Sep 2018 11:09:18 +0800</pubDate><description> 进入bios，一般是在开机后出现主板画面是按Delete这个键，部分品牌机可能按F2，F1 选择IntegratedPeripharals（外围设备设置）中的`SuperIO Device Integrated [ˈɪntɪgreɪtɪd] 集成 ； Peripharals [pəˈrɪfərəl]` 外围</description></item><item><title>LDAP与Harbor集成</title><link>https://Jermine.vdo.pub/devops/ldap%E4%B8%8Eharbor%E9%9B%86%E6%88%90/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/ldap%E4%B8%8Eharbor%E9%9B%86%E6%88%90/</guid><pubDate>Wed, 19 Sep 2018 13:56:48 +0800</pubDate><description>LDAP与Harbor集成 OpenLDAP是一个集中的用户账号管理系统；使用轻量级目录访问协议（LDAP）构建集中的身份验证系统可以减少管理成本，增强安全性，避免数据复制的问题，并提高数据的一致性。 修改harbor.cfg Harbor默认是使用mysql数据库进行用户管理，那么我们需要修改Harbor的配置文件。
在harbor目录下，执行：
vi harbor.cfg auth_mode = ldap_auth ：验证模式 ldap_url = ldap://192.168.16.196：openldap server ldap_basedn = ou=dev,dc=xinktech,dc=com：同上 ldap_filter = (objectClass=person)：默认 ldap_group_basedn = ou=dev,dc=xinktech,dc=com ldap_group_filter = objectclass=posixGroup 生成自签名证书 首先，把自己的IP地址(192.168.16.85)域名设置为: test.harbor.com:</description></item><item><title>Gerrit使用介绍</title><link>https://Jermine.vdo.pub/devops/gerrit%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/gerrit%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D/</guid><pubDate>Wed, 19 Sep 2018 13:56:48 +0800</pubDate><description>参照网址 http://gerrit.rockbox.org/r/Documentation/config-gerrit.html#addreviewer https://blog.csdn.net/ujm7418529631/article/details/79226621 http://www.cnblogs.com/kevingrace/p/5651447.html Gerrit 权限设置 Gerrit Tag上传权限 选择要编辑的项目 选择Access选项卡，编辑项目权限 添加Reference</description></item><item><title>启用或关闭图形化</title><link>https://Jermine.vdo.pub/linux/%E5%90%AF%E7%94%A8%E6%88%96%E5%85%B3%E9%97%AD%E5%9B%BE%E5%BD%A2%E5%8C%96/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/%E5%90%AF%E7%94%A8%E6%88%96%E5%85%B3%E9%97%AD%E5%9B%BE%E5%BD%A2%E5%8C%96/</guid><pubDate>Tue, 18 Sep 2018 13:47:58 +0800</pubDate><description>Centos 或者 RHEL 开启关闭图形化设置 CentOS 7 关闭图形界面 查看/etc/inittab如下：
# systemd uses &amp;#39;targets&amp;#39; instead of runlevels. # by default, there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To view current default target, run: # systemctl get-default # # To set a default target, run: # systemctl set-default TARGET.target 新版本的CentOS 系统里使用’targets’ 取代了运行级别的概念。系统有两种默认的’targets’: multi-user.target.target 对应之前版本的3 运行级别； 而graphical.target对应之前的5运行级别。</description></item><item><title>关于DevOps落地方案的个人观点</title><link>https://Jermine.vdo.pub/devops/%E5%85%B3%E4%BA%8Edevops%E8%90%BD%E5%9C%B0%E6%96%B9%E6%A1%88%E7%9A%84%E4%B8%AA%E4%BA%BA%E8%A7%82%E7%82%B9/</link><guid isPermaLink="true">https://Jermine.vdo.pub/devops/%E5%85%B3%E4%BA%8Edevops%E8%90%BD%E5%9C%B0%E6%96%B9%E6%A1%88%E7%9A%84%E4%B8%AA%E4%BA%BA%E8%A7%82%E7%82%B9/</guid><pubDate>Thu, 13 Sep 2018 18:14:57 +0800</pubDate><description>引言： DevOps（Development和Operations的组合词）是一组过程、方法与系统的统称，用于促进开发（应用程序/软件工程）、技术运营和质量保障（QA）部门之间的沟通、协作与整合。</description></item><item><title>为什么Sed命令在自动化运维中如此重要</title><link>https://Jermine.vdo.pub/linux/sed%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/sed%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/</guid><pubDate>Tue, 11 Sep 2018 12:56:04 +0800</pubDate><description>介绍 sed：Stream Editor文本流编辑，sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容，可以不对原文件改动，把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动，但是不会再屏幕上返回结果。</description></item><item><title>Linux 常用命令收集</title><link>https://Jermine.vdo.pub/linux/linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%94%B6%E9%9B%86/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/linux-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%94%B6%E9%9B%86/</guid><pubDate>Tue, 11 Sep 2018 09:43:59 +0800</pubDate><description>查找指定目录下符合条件的文件 ls -lh $(find /home -type f -size +100M) #查找指定目录下文件的大小 ls -lh $(find /home -type f -size +10M -a -size -100M）# 查找大于10M且小于100M的文件 find / -name &amp;#34;*.mp3&amp;#34; -type f -size +100M |xargs rm -rf #删除单个文件超过100M的MP3文件 获取指定目录信息 获取指定目录的绝对地址</description></item><item><title>实时数据库InfluxDB的使用</title><link>https://Jermine.vdo.pub/database/%E5%AE%9E%E6%97%B6%E6%95%B0%E6%8D%AE%E5%BA%93influxdb%E7%9A%84%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/database/%E5%AE%9E%E6%97%B6%E6%95%B0%E6%8D%AE%E5%BA%93influxdb%E7%9A%84%E4%BD%BF%E7%94%A8/</guid><pubDate>Fri, 07 Sep 2018 14:00:54 +0800</pubDate><description>InfluxDB介绍： InfluxDB是一个开源的时序数据库，使用GO语言开发，特别适合用于处理和分析资源监控数据这种时序相关数据。而InfluxDB自带的各种特殊函数如求标准差，随机取样数据，统计数据变化比等，使数据统计和实时分析变得十分方便。在我们的容器资源监控系统中，就采用了InfluxDB存储cadvisor的监控数据。本文对InfluxDB的基本概念和一些特色功能做一个详细介绍，内容主要是翻译整理自官网文档，如有错漏，请指正。</description></item><item><title>Htop的安装和使用</title><link>https://Jermine.vdo.pub/linux/htop%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/htop%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8/</guid><pubDate>Fri, 07 Sep 2018 13:19:47 +0800</pubDate><description>一．Htop的使用简介 大家可能对top监控软件比较熟悉，今天我为大家介绍另外一个监控软件Htop，姑且称之为top的增强版，相比top其有着很多自身的优势。如下：</description></item><item><title>解决TensorFlow：ImportError: libcudnn.so.*: cannot open shared object file: No such file or dictionary</title><link>https://Jermine.vdo.pub/deeplearn/tensorflow/%E8%A7%A3%E5%86%B3importerror_libcudnn.so.-cannot-open-shared-object-file/</link><guid isPermaLink="true">https://Jermine.vdo.pub/deeplearn/tensorflow/%E8%A7%A3%E5%86%B3importerror_libcudnn.so.-cannot-open-shared-object-file/</guid><pubDate>Wed, 05 Sep 2018 15:18:21 +0800</pubDate><description>环境 Ubuntu16.04 Nvidia 384 CUDA 8.0 cuDNN 5 错误 TensorFlow、CUDA、cuDNN的版本关系我时常懵懵的，经常出现各种不支持的情况，比如今天安装了TensorFlow1.10.1，报错:ImportError: libcudnn.so.7: cannot open shared object file: No such file or dictionary</description></item><item><title>Redhat7解决This system is not registered to Red Hat Subscription Management.</title><link>https://Jermine.vdo.pub/linux/redhat7%E8%A7%A3%E5%86%B3this-system-is-not-registered-to-redhat-subscription-management/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/redhat7%E8%A7%A3%E5%86%B3this-system-is-not-registered-to-redhat-subscription-management/</guid><pubDate>Wed, 05 Sep 2018 14:38:41 +0800</pubDate><description>错误描述： This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. 解决步骤: 删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps 下载yum安装文件 到这个网站去下载如下RPM包 ：http://mirrors.163.com/centos/7/os/x86_64/Packages/</description></item><item><title>基于JIRA的Scrum敏捷开发的项目管理</title><link>https://Jermine.vdo.pub/jira/%E5%9F%BA%E4%BA%8Ejira%E7%9A%84scrum%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/</link><guid isPermaLink="true">https://Jermine.vdo.pub/jira/%E5%9F%BA%E4%BA%8Ejira%E7%9A%84scrum%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91%E7%9A%84%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/</guid><pubDate>Tue, 28 Aug 2018 15:44:21 +0800</pubDate><description>Scrum开发的步骤及准备 Scrum敏捷开发的关键字就是增量、迭代，他更重视项目团队之间的现场沟通，不向传统瀑布式开发那样需要万事具备，才开始开发，Scrum在大方向和小故事点确认好了后，团队就可以开动了。</description></item><item><title>How engineers learn efficiently? - 工程师如何高效学习？</title><link>https://Jermine.vdo.pub/efficiency/how-can-engineers-improve-efficiency/</link><guid isPermaLink="true">https://Jermine.vdo.pub/efficiency/how-can-engineers-improve-efficiency/</guid><pubDate>Mon, 27 Aug 2018 13:06:58 +0800</pubDate><description>介绍 最近团队内经常有工程师(尤其是工作经验浅的)会问我同一个问题：如何快速高效学习？大家似乎都很焦虑，渴望通过高效学习来提升自己，快速成长。基于自己的实践和思考，我总结了这篇文章，在周会上给团队分享，希望对大家有所启发。</description></item><item><title>Linux [re]install CUDA - Linux 安装和使用 CUDA</title><link>https://Jermine.vdo.pub/linux/linux-reinstall-cuda/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/linux-reinstall-cuda/</guid><pubDate>Fri, 24 Aug 2018 13:48:25 +0800</pubDate><description>简便安装方法 此文档来源于Jermine的个人blog ： https://jermine.vdo.pub/linux/ubuntu-16.04-reinstall-cuda/ 推荐两种玩法： 注意 ： 由于tensorflow的GPU版本依赖nvidia的cuda、cudnn库，因此一般需要包含cuda和cudnn的链接库文件，普遍做法是通过主机安装cudnn、cuda的方式。这里还有另外两种方式可以选择：</description></item><item><title>Vscode Markdown Shortcut Keys</title><link>https://Jermine.vdo.pub/tools/vscode-markdown-shortcut-keys/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/vscode-markdown-shortcut-keys/</guid><pubDate>Wed, 22 Aug 2018 14:38:19 +0800</pubDate><description>使用VS Code的Markdown Shortcut插件，可以方便快捷的编辑Markdown文档，并且已经与上下文的菜单集成，右键即可使用。下面将介绍安装和使用。</description></item><item><title>Windows下python3.7安装tensorflow1</title><link>https://Jermine.vdo.pub/python/windows%E4%B8%8Bpython3.7%E5%AE%89%E8%A3%85tensorflow1.9/</link><guid isPermaLink="true">https://Jermine.vdo.pub/python/windows%E4%B8%8Bpython3.7%E5%AE%89%E8%A3%85tensorflow1.9/</guid><pubDate>Sun, 29 Jul 2018 17:49:08 +0800</pubDate><description>准备文件： 从这里下载windows的python3.7的tensorflow1.9安装包。 *注: 这个网站 的whl文件是非python官方的windows二进制扩展包。
执行安装命令 PS C:\Users\Husee\Desktop&amp;gt; pip install .\tensorflow-1.9.0-cp37-cp37m-win_amd64.whl Looking in indexes: http://mirrors.aliyun.com/pypi/simple Processing c:\users\husee\desktop\tensorflow-1.9.0-cp37-cp37m-win_amd64.whl Collecting termcolor&amp;gt;=1.1.0 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz Requirement already satisfied: setuptools&amp;lt;=39.1.0 in c:\users\husee\appdata\local\programs\python\python37\lib\site-packages (from tensorflow==1.9.0) (39.0.1) Collecting astor&amp;gt;=0.6.0 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/35/6b/11530768cac581a12952a2aad00e1526b89d242d0b9f59534ef6e6a1752f/astor-0.7.1-py2.py3-none-any.whl Collecting protobuf&amp;gt;=3.4.0 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/77/78/a7f1ce761e2c738e209857175cd4f90a8562d1bde32868a8cd5290d58926/protobuf-3.6.1-py2.py3-none-any.whl (390kB) 100% |████████████████████████████████| 399kB 12.8MB/s Collecting grpcio&amp;gt;=1.8.6 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/b1/0b/f46b579e65e11a1ddb0d2a19f458cac91ed71841fed39322e980fd58be44/grpcio-1.14.1-cp37-cp37m-win_amd64.whl (1.5MB) 100% |████████████████████████████████| 1.5MB 13.7MB/s Collecting absl-py&amp;gt;=0.1.6 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/cc/e6/6cc5c834023685dd83a28bdb5c1826d9340111493a447e9a9230269defa8/absl-py-0.4.0.tar.gz (88kB) 100% |████████████████████████████████| 92kB 13.1MB/s Collecting tensorboard&amp;lt;1.10.0,&amp;gt;=1.9.0 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/9e/1f/3da43860db614e294a034e42d4be5c8f7f0d2c75dc1c428c541116d8cdab/tensorboard-1.9.0-py3-none-any.whl (3.3MB) 100% |████████████████████████████████| 3.3MB 25.7MB/s Requirement already satisfied: wheel&amp;gt;=0.26 in c:\users\husee\appdata\local\programs\python\python37\lib\site-packages (from tensorflow==1.9.0) (0.31.1) Collecting numpy&amp;gt;=1.13.3 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/90/ca/fac7871a7c7d78beb78d7d9562b8d5bfce9ff316dc6c2a7ac34927895609/numpy-1.15.1-cp37-none-win_amd64.whl (13.5MB) 100% |████████████████████████████████| 13.5MB 12.6MB/s Requirement already satisfied: six&amp;gt;=1.10.0 in c:\users\husee\appdata\local\programs\python\python37\lib\site-packages (from tensorflow==1.9.0) (1.11.0) Collecting gast&amp;gt;=0.2.0 (from tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/5c/78/ff794fcae2ce8aa6323e789d1f8b3b7765f601e7702726f430e814822b96/gast-0.2.0.tar.gz Collecting werkzeug&amp;gt;=0.11.10 (from tensorboard&amp;lt;1.10.0,&amp;gt;=1.9.0-&amp;gt;tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl (322kB) 100% |████████████████████████████████| 327kB 34.2MB/s Collecting markdown&amp;gt;=2.6.8 (from tensorboard&amp;lt;1.10.0,&amp;gt;=1.9.0-&amp;gt;tensorflow==1.9.0) Downloading http://mirrors.aliyun.com/pypi/packages/6d/7d/488b90f470b96531a3f5788cf12a93332f543dbab13c423a5e7ce96a0493/Markdown-2.6.11-py2.py3-none-any.whl (78kB) 100% |████████████████████████████████| 81kB 4.8MB/s Building wheels for collected packages: termcolor, absl-py, gast Running setup.py bdist_wheel for termcolor ... done Stored in directory: C:\Users\Husee\AppData\Local\pip\Cache\wheels\65\c8\98\8361afe9bafba434b7acf14c08627560d63018272226ff3e10 Running setup.py bdist_wheel for absl-py ... done Stored in directory: C:\Users\Husee\AppData\Local\pip\Cache\wheels\50\6f\41\ae7dbb65f38f6e607b399117e4cb959977e016d12b6166a67f Running setup.py bdist_wheel for gast ... done Stored in directory: C:\Users\Husee\AppData\Local\pip\Cache\wheels\17\0a\dc\bb6d7b129029482a8d55901d66b65e756a681f6a1da7297a9b Successfully built termcolor absl-py gast Installing collected packages: termcolor, astor, protobuf, grpcio, absl-py, numpy, werkzeug, markdown, tensorboard, gast, tensorflow Successfully installed absl-py-0.4.0 astor-0.7.1 gast-0.2.0 grpcio-1.14.1 markdown-2.6.11 numpy-1.15.1 protobuf-3.6.1 tensorboard-1.9.0 tensorflow-1.9.0 termcolor-1.1.0 werkzeug-0.14.1 查看安装列表 PS C:\Users\Husee\Desktop&amp;gt; pip list Package Version ----------------- ------- absl-py 0.4.0 astor 0.7.1 astroid 1.6.5 colorama 0.3.9 gast 0.2.0 grpcio 1.14.1 isort 4.3.4 lazy-object-proxy 1.3.1 Markdown 2.6.11 mccabe 0.6.1 numpy 1.15.1 pip 18.0 protobuf 3.6.1 pylint 1.9.2 setuptools 39.0.1 six 1.11.0 tensorboard 1.9.0 tensorflow 1.9.0 termcolor 1.1.0 torch 0.4.1 Werkzeug 0.14.1 wheel 0.31.1 wrapt 1.10.11 PS C:\Users\Husee\Desktop&amp;gt; pip -V pip 18.0 from c:\users\husee\appdata\local\programs\python\python37\lib\site-packages\pip (python 3.7) PS C:\Users\Husee\Desktop&amp;gt; 通过python调用tensorflow查看版本 python Python 3.7.0b5 (v3.7.0b5:abb8802389, May 31 2018, 01:54:01) [MSC v.1913 64 bit (AMD64)] on win32 Type &amp;#34;help&amp;#34;, &amp;#34;copyright&amp;#34;, &amp;#34;credits&amp;#34; or &amp;#34;license&amp;#34; for more information. &amp;gt;&amp;gt;&amp;gt; import tensorflow as tf Traceback (most recent call last): File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow.py&amp;#34;, line 58, in &amp;lt;module&amp;gt; from tensorflow.python.pywrap_tensorflow_internal import * File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py&amp;#34;, line 35, in &amp;lt;module&amp;gt; _pywrap_tensorflow_internal = swig_import_helper() File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py&amp;#34;, line 30, in swig_import_helper _mod = imp.load_module(&amp;#39;_pywrap_tensorflow_internal&amp;#39;, fp, pathname, description) File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\imp.py&amp;#34;, line 243, in load_module return load_dynamic(name, filename, file) File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\imp.py&amp;#34;, line 343, in load_dynamic return _load(spec) ImportError: DLL load failed: 找不到指定的模块。 During handling of the above exception, another exception occurred: Traceback (most recent call last): File &amp;#34;&amp;lt;stdin&amp;gt;&amp;#34;, line 1, in &amp;lt;module&amp;gt; File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\__init__.py&amp;#34;, line 22, in &amp;lt;module&amp;gt; from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\__init__.py&amp;#34;, line 49, in &amp;lt;module&amp;gt; from tensorflow.python import pywrap_tensorflow File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow.py&amp;#34;, line 74, in &amp;lt;module&amp;gt; raise ImportError(msg) ImportError: Traceback (most recent call last): File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow.py&amp;#34;, line 58, in &amp;lt;module&amp;gt; from tensorflow.python.pywrap_tensorflow_internal import * File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py&amp;#34;, line 35, in &amp;lt;module&amp;gt; _pywrap_tensorflow_internal = swig_import_helper() File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py&amp;#34;, line 30, in swig_import_helper _mod = imp.load_module(&amp;#39;_pywrap_tensorflow_internal&amp;#39;, fp, pathname, description) File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\imp.py&amp;#34;, line 243, in load_module return load_dynamic(name, filename, file) File &amp;#34;C:\Users\Husee\AppData\Local\Programs\Python\Python37\lib\imp.py&amp;#34;, line 343, in load_dynamic return _load(spec) ImportError: DLL load failed: 找不到指定的模块。 Failed to load the native TensorFlow runtime. See https://www.tensorflow.org/install/install_sources#common_installation_problems for some common reasons and solutions. Include the entire stack trace above this error message when asking for help. ImportError： DLL load failed：找不到指定的模块 解决方案（Python）： 首先检查numpy、scipy、matplotlib、scikit-learn的版本是否更新到最新且符合当前Python版本： 如果出现不是最新的版本，先卸载该版本：（windows+&amp;quot;.&amp;quot;）pip uninstall numpy 再去http://www.lfd.uci.edu/~gohlke/pythonlibs/ 安装最新版本：（windows+&amp;quot;.&amp;quot;）pip install numpy</description></item><item><title>通过Git规范和脚本自动生成release Notes</title><link>https://Jermine.vdo.pub/git/%E9%80%9A%E8%BF%87git%E8%A7%84%E8%8C%83%E5%92%8C%E8%84%9A%E6%9C%AC%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90release-notes/</link><guid isPermaLink="true">https://Jermine.vdo.pub/git/%E9%80%9A%E8%BF%87git%E8%A7%84%E8%8C%83%E5%92%8C%E8%84%9A%E6%9C%AC%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90release-notes/</guid><pubDate>Sat, 30 Jun 2018 10:23:46 +0800</pubDate><description>通过Git规范和脚本自动生成release Notes 第一性原理告诉我们，我们不但要用工具，还要能自己创造工具，这样才能提升生产力！ 创造的工具可以开源，让社区强大和优秀的人一起完善，很多牛X的工具就是这么来的，好的工具总得有人先把概念和第一行代码写出来牵个头，linux 、docker 、Kubernetes、tensorflow 、Git 等等 都是从概念和第一个demo 开始的，然后在社区引起共鸣才发展起来的！从问题本身出发，抛开常理逻辑，不落入俗套（套路），就是第一性原理要表达的意思，其实创新也是这样来的，Elon Mask 那种从0 到 1 的创造力就是来源于第一性原理。</description></item><item><title>Build Opencv3.4 by docker in Raspberry pi - 在树莓派上通过docker编译opencv3.4.1</title><link>https://Jermine.vdo.pub/raspberry-pi/build-opencv3.4.1-by-docker-in-pi/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/build-opencv3.4.1-by-docker-in-pi/</guid><pubDate>Thu, 21 Jun 2018 15:31:01 +0800</pubDate><description>采用docker编译如下： 为了能在docker执行的时候加速，采用了--build-arg参数，设定了代理地址
在X86上编译如下： docker build &amp;ndash;build-arg HTTP_PROXY=http://192.168.16.254:1080 &amp;ndash;build-arg HTTPS_PROXY=http://192.168.16.254:1080 -t jermine/opencv:alpine -f Dockerfile.alpine .
在ARM64上编译操作如下 docker build -t jermine/opencv:alpine-arm64-3.4.1 -f Dockerfile.alpine &amp;ndash;build-arg HTTP_PROXY=http://192.168.16.254:1080 &amp;ndash;build-arg HTTPS_PROXY=http://192.168.16.254:1080 .
环境变量配置如下： export OPENCV_DIR=/opt/opencv export LIBGPUARRAY_DIR=/opt/libgpuarray export NUM_CORES=8 export NB_UID=1000 export CLONE_TAG=1.0 export OPENCV_VERSION=3.4.1 export OPENCL_ENABLED=OFF 需要的库如下： apt install g++ python3 python3-dev build-essential cmake pkg-config libprotobuf-dev protobuf-compiler libopencv-dev wget https://bootstrap.pypa.io/get-pip.py python3 get-pip.py Cmake的配置如下： -D BUILD_opencv_xfeatures2d=OFF \ -D BUILD_opencv_world=OFF \ cmake \ -D PYTHON_EXECUTABLE=$(which python3) \ -D WITH_CUDA=OFF \ -D CMAKE_BUILD_TYPE=RELEASE \ -D BUILD_PYTHON_SUPPORT=ON \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D BUILD_PYTHON_SUPPORT=ON \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D PYTHON_DEFAULT_EXECUTABLE=$(which python3) \ -D PYTHON_INCLUDE_DIR=/usr/include/python3.5m \ -D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ -D OPENCV_EXTRA_MODULES_PATH=$OPENCV_DIR/opencv_contrib-$OPENCV_VERSION/modules \ -D WITH_TBB=ON \ -D WITH_PTHREADS_PF=ON \ -D WITH_OPENNI=OFF \ -D WITH_OPENNI2=ON \ -D WITH_EIGEN=ON \ -D BUILD_DOCS=ON \ -D BUILD_TESTS=ON \ -D BUILD_PERF_TESTS=ON \ -D BUILD_EXAMPLES=ON \ -D WITH_OPENCL=$OPENCL_ENABLED \ -D USE_GStreamer=ON \ -D WITH_GDAL=ON \ -D WITH_CSTRIPES=ON \ -D ENABLE_FAST_MATH=1 \ -D WITH_OPENGL=ON \ -D WITH_QT=OFF \ -D WITH_IPP=ON \ -D WITH_FFMPEG=ON \ -D WITH_V4L=ON .. &amp;amp;&amp;amp; \ make -j4 &amp;amp;&amp;amp; \ make install &amp;amp;&amp;amp; \ ldconfig &amp;amp;&amp;amp; \ 具体参照我的Github源码 地址为： https://github.com/JermineHu/docker-opencv</description></item><item><title>记defer中的一些坑</title><link>https://Jermine.vdo.pub/go/%E8%AE%B0defer%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E5%9D%91/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/%E8%AE%B0defer%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E5%9D%91/</guid><pubDate>Wed, 29 Nov 2017 13:51:36 +0800</pubDate><description>什么是 defer？如何理解 defer 关键字？Go 中使用 defer 的一些坑。
defer 意为延迟，在 golang 中用于延迟执行一个函数。它可以帮助我们处理容易忽略的问题，如资源释放、连接关闭等。但在实际使用过程中，有一些需要注意的地方（坑），下面我们一一道来。</description></item><item><title>K8s on Raspberry Pi</title><link>https://Jermine.vdo.pub/raspberry-pi/k8s-on-raspberry-pi/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/k8s-on-raspberry-pi/</guid><pubDate>Sat, 21 Oct 2017 16:20:55 +0800</pubDate><description>配置环境步骤如下： 安装kubeadm必要的软件 apt install socat ebtables ethtool 安装相关的软件 主要软件有：
kubeadm_1.10.2-00_arm64 、kubectl_1.10.2-00_arm64 、kubelet_1.10.2-00_arm64 、kubernetes-cni_0.6.0-00_arm64</description></item><item><title>Sub System Linux for Win10 - Win10设置Linux子系统</title><link>https://Jermine.vdo.pub/win10/sub-system-linux-for-win10/</link><guid isPermaLink="true">https://Jermine.vdo.pub/win10/sub-system-linux-for-win10/</guid><pubDate>Thu, 07 Sep 2017 10:29:47 +0800</pubDate><description>按如下步骤进行安装：
设置win10开启Linux 系统升级到一周年正式版及以上(1607)
依次在 设置 - 更新与安全 - 针对开发人员 选项中，启用&amp;quot;开发人员模式&amp;quot;</description></item><item><title>远程桌面协议对比</title><link>https://Jermine.vdo.pub/linux/%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E5%8D%8F%E8%AE%AE%E5%AF%B9%E6%AF%94/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E5%8D%8F%E8%AE%AE%E5%AF%B9%E6%AF%94/</guid><pubDate>Thu, 31 Aug 2017 11:01:13 +0800</pubDate><description>远程桌面协议对比 最近在学习虚拟化相关的知识，遇到远程桌面协议，就简单整理了下找到的资料，目前常用的协议有VNC/SPICE/RDP三种，就在这里做一个简单的介绍。</description></item><item><title>Docker中使用深度学习框架并支持GPU加速</title><link>https://Jermine.vdo.pub/docker/docker%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6%E5%B9%B6%E6%94%AF%E6%8C%81gpu%E5%8A%A0%E9%80%9F/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/docker%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%A1%86%E6%9E%B6%E5%B9%B6%E6%94%AF%E6%8C%81gpu%E5%8A%A0%E9%80%9F/</guid><pubDate>Wed, 23 Aug 2017 15:40:16 +0800</pubDate><description>Docker中使用深度学习框架并支持GPU加速 启动一个支持gpu的容器 docker run --runtime=nvidia --restart=always --name tensorflow -dit -v `pwd`:/app -w /app nvidia/cuda:9.0-cudnn7-runtime-ubuntu16.04 进入容器 docker exec -it tensorflow bash 设置源 Jermine@ubuntu:~$ cat &amp;gt; /etc/apt/sources.list deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##测试版源 deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse 更新源 sudo apt-get update 安装相关依赖 # 导入环境变量 TENSORFLOW_VERSION=1.7.0 apt-get update -y &amp;amp;&amp;amp; apt-get install -y --no-install-recommends python3 python3-pip protobuf-compiler;\ pip3 install --upgrade pip ;\ python3 -V &amp;amp;&amp;amp; pip3 -V ;\ pip3 --no-cache-dir install setuptools ;\ pip3 --no-cache-dir install \ https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-${TENSORFLOW_VERSION}-cp35-cp35m-linux_x86_64.whl ;\ apt-get autoremove &amp;amp;&amp;amp; apt-get autoclean ;\ rm -rf /var/lib/apt/lists/* 测试程序 import numpy as np np.random.seed(0) import tensorflow as tf import time N,D = 6000,8000 with tf.device(&amp;#39;/cpu:0&amp;#39;): x = tf.placeholder(tf.float32) y = tf.placeholder(tf.float32) z = tf.placeholder(tf.float32) a = x * y b = a + z c = tf.reduce_sum(b) grad_x, grad_y, grad_z = tf.gradients(c, [x,y,z]) start_time = time.time() with tf.Session() as sess: values = { x: np.random.randn(N, D), y: np.random.randn(N, D), z: np.random.randn(N, D), } out = sess.run([c, grad_x, grad_y, grad_z], feed_dict=values) c_val, grad_x_val, grad_y_val, grad_z_val = out elapsed = time.time() - start_time print(time.strftime(&amp;#34;%H:%M:%S&amp;#34;, time.gmtime(elapsed))) print(&amp;#34;exit 0&amp;#34;) 将其存为 test_gpu_for_tensorflow.py ， 使用 python3 test_gpu_for_tensorflow.py 执行结果如下：</description></item><item><title>Set Mirrors for Pi - 树莓派配置加速镜像</title><link>https://Jermine.vdo.pub/raspberry-pi/set-mirrors-for-pi/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/set-mirrors-for-pi/</guid><pubDate>Mon, 21 Aug 2017 16:09:28 +0800</pubDate><description>执行如下命令完成配置 root@raspi:/home/pi# cat &amp;gt; /etc/apt/sources.list deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi #deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi 然后执行
sudo apt update 相关文章 Setup Docker for Pi - 树莓派安装docker Make an Alpine Docker Image 解决树莓派交换空间的问题 Call Opencv Used Python3 - 通过docker在python3.6下调用opencv3.4.1 K8s on Raspberry Pi Build Opencv3.4 by docker in Raspberry pi - 在树莓派上通过docker编译opencv3.4.1</description></item><item><title>Remmina一个Linux下功能丰富的远程桌面共享工具</title><link>https://Jermine.vdo.pub/linux/remmina%E4%B8%80%E4%B8%AAlinux%E4%B8%8B%E5%8A%9F%E8%83%BD%E4%B8%B0%E5%AF%8C%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E5%85%B1%E4%BA%AB%E5%B7%A5%E5%85%B7/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/remmina%E4%B8%80%E4%B8%AAlinux%E4%B8%8B%E5%8A%9F%E8%83%BD%E4%B8%B0%E5%AF%8C%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E5%85%B1%E4%BA%AB%E5%B7%A5%E5%85%B7/</guid><pubDate>Mon, 31 Jul 2017 12:26:34 +0800</pubDate><description>Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源、功能丰富、强大的远程桌面客户端，它用 GTK+ 3 编写而成。它适用于那些需要远程访问及使用许多计算机的系统管理员和在外出行人员。</description></item><item><title>Setup Docker for Pi - 树莓派安装docker</title><link>https://Jermine.vdo.pub/raspberry-pi/setup-docker-for-pi/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/setup-docker-for-pi/</guid><pubDate>Tue, 11 Jul 2017 16:05:54 +0800</pubDate><description>安装步骤 先下载对应的deb包： wget https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/arm64/docker-ce_18.06.0~ce~3-0~ubuntu_arm64.deb 通过dpkg进行安装 直接 dpkg -i *.deb 进行安装
然后设置开机启动 systemctl enable docker 配置镜像加速： cat &amp;gt; /etc/docker/daemon.json { &amp;#34;registry-mirrors&amp;#34;: [ &amp;#34;https://2nmcv9vp.mirror.aliyuncs.com&amp;#34; ], &amp;#34;insecure-registries&amp;#34;: [] } 重启服务
systemctl restart docker 相关文章 Make an Alpine Docker Image Call Opencv Used Python3 - 通过docker在python3.6下调用opencv3.4.1 Build Opencv3.4 by docker in Raspberry pi - 在树莓派上通过docker编译opencv3.4.1 K8s on Raspberry Pi 解决树莓派交换空间的问题 Set Mirrors for Pi - 树莓派配置加速镜像</description></item><item><title>Call Opencv Used Python3 - 通过docker在python3.6下调用opencv3.4.1</title><link>https://Jermine.vdo.pub/raspberry-pi/call-opencv-used-python3.6-in-docker/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/call-opencv-used-python3.6-in-docker/</guid><pubDate>Wed, 21 Jun 2017 15:46:06 +0800</pubDate><description>根据之前build好的镜像，启动容器 启动一个带有python3.6 和 opencv3.4.1的环境
docker run -itd --name cv -v `pwd`/app:/app --net host -w /app jermine/opencv:alpine-arm64 进入容器 docker exec -it cv sh 相关文章 Build Opencv3.4 by docker in Raspberry pi - 在树莓派上通过docker编译opencv3.4.1 Make an Alpine Docker Image Setup Docker for Pi - 树莓派安装docker K8s on Raspberry Pi 解决树莓派交换空间的问题 Set Mirrors for Pi - 树莓派配置加速镜像</description></item><item><title>Certificate Signed by Unknown Authority Error</title><link>https://Jermine.vdo.pub/docker/certificate-signed-by-unknown-authority-error/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/certificate-signed-by-unknown-authority-error/</guid><pubDate>Sat, 13 May 2017 16:21:51 +0800</pubDate><description>Certificate signed by unknown authority error x509: certificate signed by unknown authority This error message means that you do not have a trusted certificate. You need to trust the default certificates generated during your Docker Trusted Registry (DTR) installation.
You can do so by running these commands on the nodes from where you want to access your DTR (be sure to replace with your DTR Domain name.):
CentOS/RHEL
export DOMAIN_NAME=hub.fi.vdo.pub export TCP_PORT=443 openssl s_client -connect $DOMAIN_NAME:$TCP_PORT -showcerts &amp;lt;/dev/null 2&amp;gt;/dev/null | openssl x509 -outform PEM | sudo tee /etc/pki/ca-trust/source/anchors/$DOMAIN_NAME.crt update-ca-trust systemctl restart docker.service Ubuntu</description></item><item><title>Git设置和取消代理</title><link>https://Jermine.vdo.pub/git/git%E8%AE%BE%E7%BD%AE%E5%92%8C%E5%8F%96%E6%B6%88%E4%BB%A3%E7%90%86/</link><guid isPermaLink="true">https://Jermine.vdo.pub/git/git%E8%AE%BE%E7%BD%AE%E5%92%8C%E5%8F%96%E6%B6%88%E4%BB%A3%E7%90%86/</guid><pubDate>Thu, 30 Mar 2017 10:16:38 +0800</pubDate><description>git 设置和取消代理 本地开启VPN后，GIt也需要设置代理，才能正常略过GFW，访问goole code等网站
代理设置如下（可复制）： 注：git 设置 socks5 代理 加速。只对http，https生效，对ssh仍然无效</description></item><item><title>Golang生成C/C++可调用的动态库.so和静态库</title><link>https://Jermine.vdo.pub/go/golang%E7%94%9F%E6%88%90c%E5%8F%AF%E8%B0%83%E7%94%A8%E7%9A%84%E5%8A%A8%E6%80%81%E5%BA%93.so%E5%92%8C%E9%9D%99%E6%80%81%E5%BA%93.a/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/golang%E7%94%9F%E6%88%90c%E5%8F%AF%E8%B0%83%E7%94%A8%E7%9A%84%E5%8A%A8%E6%80%81%E5%BA%93.so%E5%92%8C%E9%9D%99%E6%80%81%E5%BA%93.a/</guid><pubDate>Wed, 29 Mar 2017 16:06:08 +0800</pubDate><description>Golang类似于C的静态语言，效率也接近于C，如果Golang也可以导出可供C调用的库，那可以和很多高级语言say goodbye了，goodbye似乎又有点武断，但至少说，Golang可以做很多事，而且效率优于很多高级语言，这样说应该没有问题。 接下来，就从三个方面分别来介绍Golang中关于库的使用。</description></item><item><title>Linux保存依赖安装包到指定目录(用于离线安装)</title><link>https://Jermine.vdo.pub/linux/linux%E4%BF%9D%E5%AD%98%E4%BE%9D%E8%B5%96%E5%AE%89%E8%A3%85%E5%8C%85%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/linux%E4%BF%9D%E5%AD%98%E4%BE%9D%E8%B5%96%E5%AE%89%E8%A3%85%E5%8C%85%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95/</guid><pubDate>Tue, 21 Mar 2017 16:00:00 +0800</pubDate><description>经常与一些保密级别较高的企业打交道，他们使用的网络都是内部网络，根本无法访问到公网，但是部署一些项目时难免会有依赖包需要离线安装。遇到这种问题通常都是手动去下载依赖的库，然后离线安装，但是你无法判断下载的这个依赖库是否还依赖其他库，如果是手动去下载安装将耗费很长时间（他们导入任何文件都要走流程，一次就需要4h左右），为了改善这种情况，就需要将所有依赖都离线下载到本，本文将介绍如何将Centos和Ubuntu的依赖包保存到本地。</description></item><item><title>GDB in Docker for Debug - 如何在Docker容器内部使用gdb进行debug</title><link>https://Jermine.vdo.pub/docker/gdb-in-docker-for-debug/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/gdb-in-docker-for-debug/</guid><pubDate>Wed, 08 Mar 2017 10:02:33 +0800</pubDate><description>安全计算模式（secure computing mode，seccomp）是 Linux 内核功能，可以使用它来限制容器内可用的操作。
Docker 的默认 seccomp 配置文件是一个白名单，它指定了允许的调用。</description></item><item><title>Golang与C互用以及调用C的so动态库和a静态库</title><link>https://Jermine.vdo.pub/go/golang%E4%B8%8Ec%E4%BA%92%E7%9B%B8%E8%B0%83%E7%94%A8%E4%BB%A5%E5%8F%8A%E8%B0%83%E7%94%A8c%E7%9A%84so%E5%8A%A8%E6%80%81%E5%BA%93%E5%92%8Ca%E9%9D%99%E6%80%81%E5%BA%93/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/golang%E4%B8%8Ec%E4%BA%92%E7%9B%B8%E8%B0%83%E7%94%A8%E4%BB%A5%E5%8F%8A%E8%B0%83%E7%94%A8c%E7%9A%84so%E5%8A%A8%E6%80%81%E5%BA%93%E5%92%8Ca%E9%9D%99%E6%80%81%E5%BA%93/</guid><pubDate>Thu, 23 Feb 2017 16:48:24 +0800</pubDate><description>Golang与C的关系非常密切，下面主要介绍在Golang中使用C。
Golang中嵌入C代码 1 package main 2 //#include &amp;lt;stdio.h&amp;gt; 3 //#include &amp;lt;stdlib.h&amp;gt; 4 /* 5 void Hello(char *str) { 6 printf(&amp;#34;%s\n&amp;#34;, str); 7 } 8 */ 9 import &amp;#34;C&amp;#34; //假设把C当成包，其实有点类似C++的名字空间 10 import &amp;#34;unsafe&amp;#34; //C指针的使用，在C代码中申请的空间，GC垃圾回收机制不会管理，所以需要自己手动free申请的空间 11 func main() { 12 s := &amp;#34;Hello Cgo&amp;#34; 13 cs := C.CString(s) 14 C.Hello(cs) 15 C.free(unsafe.Pointer(cs)) 16 } 3,4行的注释也可以写/* */形式 第4行与第5行之间不能有空行，同样第9行与第10行之间也不 能有行，否则编译时cgo会报错：</description></item><item><title>终端利器tmux不止完美替换nohup-&amp;-screen等进程守护命令</title><link>https://Jermine.vdo.pub/linux/%E7%BB%88%E7%AB%AF%E5%88%A9%E5%99%A8tmux%E4%B8%8D%E6%AD%A2%E5%AE%8C%E7%BE%8E%E6%9B%BF%E6%8D%A2nohup--screen%E7%AD%89%E8%BF%9B%E7%A8%8B%E5%AE%88%E6%8A%A4%E5%91%BD%E4%BB%A4/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/%E7%BB%88%E7%AB%AF%E5%88%A9%E5%99%A8tmux%E4%B8%8D%E6%AD%A2%E5%AE%8C%E7%BE%8E%E6%9B%BF%E6%8D%A2nohup--screen%E7%AD%89%E8%BF%9B%E7%A8%8B%E5%AE%88%E6%8A%A4%E5%91%BD%E4%BB%A4/</guid><pubDate>Tue, 31 Jan 2017 12:49:08 +0800</pubDate><description> “君子生非异也，善假于物也” 。–语出《荀子·劝学》
如果记得没错的话，《荀子·劝学》我们这一代高中的时候应该都读过这篇文章。原意大概是君子的资质与一般人没有什么区别，君子之所以高于一般人，是因为他能善于利用外物。对于技术人来说，好工具的选择和使用往往可以省去很多不必要的麻烦，好的开源工具很多，看你如何去使用。对于终端复用工具这里推荐使用tmux，当然此类工具比较好的还有screen，不过相对screen 这里我更倾向于推荐tmux[强悍的分屏等]。</description></item><item><title>Vs Code Hotkeys - vscode: Visual Studio Code 常用快捷键</title><link>https://Jermine.vdo.pub/tools/vs-code-hotkeys/</link><guid isPermaLink="true">https://Jermine.vdo.pub/tools/vs-code-hotkeys/</guid><pubDate>Wed, 18 Jan 2017 11:02:31 +0800</pubDate><description>灵活使用快捷键可以提高编程效率，在此特意记录，快捷键的整理参照了VS Code官网。
主命令框 F1 或 Ctrl+Shift+P: 打开命令面板。在打开的输入框内，可以输入任何命令，例如：</description></item><item><title>Centos7.4升级内核到4</title><link>https://Jermine.vdo.pub/linux/centos7.4%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8%E5%88%B04.x/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/centos7.4%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8%E5%88%B04.x/</guid><pubDate>Mon, 12 Dec 2016 18:08:28 +0800</pubDate><description>查看内核版本：uname -r [root@k8s-node02 ~]# uname -r 3.10.0-862.9.1.el7.x86_64 [root@k8s-node02 ~]# 内核版本为3.10.0
导入elrepo的key，然后安装elrepo的yum源 rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm 使用以下命令列出可用的内核相关包
yum --disablerepo=&amp;#34;*&amp;#34; --enablerepo=&amp;#34;elrepo-kernel&amp;#34; list available [root@localhost ~]# yum --disablerepo=&amp;#34;*&amp;#34; --enablerepo=&amp;#34;elrepo-kernel&amp;#34; list available Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * elrepo-kernel: hkg.mirror.rackspace.com Available Packages kernel-lt.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-devel.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-doc.noarch 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-headers.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-tools.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs-devel.x86_64 4.4.166-1.el7.elrepo elrepo-kernel kernel-ml-doc.noarch 4.19.8-1.el7.elrepo elrepo-kernel kernel-ml-headers.x86_64 4.19.8-1.el7.elrepo elrepo-kernel kernel-ml-tools.x86_64 4.19.8-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs.x86_64 4.19.8-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs-devel.x86_64 4.19.8-1.el7.elrepo elrepo-kernel perf.x86_64 4.19.8-1.el7.elrepo elrepo-kernel python-perf.x86_64 4.19.8-1.el7.elrepo elrepo-kernel [root@localhost ~]# 可以看出，长期维护版本lt为4.4，最新主线稳定版ml为4.19，我们需要安装最新的主线稳定内核，使用如下命令：</description></item><item><title>SSE技术详解 使用http将服务端数据推送到客户端 [可作为Websocket的轻量化替换]</title><link>https://Jermine.vdo.pub/web/sse%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3-%E4%BD%BF%E7%94%A8http%E5%B0%86%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%95%B0%E6%8D%AE%E6%8E%A8%E9%80%81%E5%88%B0%E5%AE%A2%E6%88%B7%E7%AB%AF--%E5%8F%AF%E4%BD%9C%E4%B8%BAwebsocket%E7%9A%84%E8%BD%BB%E9%87%8F%E5%8C%96%E6%9B%BF%E6%8D%A2/</link><guid isPermaLink="true">https://Jermine.vdo.pub/web/sse%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3-%E4%BD%BF%E7%94%A8http%E5%B0%86%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%95%B0%E6%8D%AE%E6%8E%A8%E9%80%81%E5%88%B0%E5%AE%A2%E6%88%B7%E7%AB%AF--%E5%8F%AF%E4%BD%9C%E4%B8%BAwebsocket%E7%9A%84%E8%BD%BB%E9%87%8F%E5%8C%96%E6%9B%BF%E6%8D%A2/</guid><pubDate>Mon, 21 Nov 2016 14:20:46 +0800</pubDate><description>SSE技术详解-使用http将服务端数据推送到客户端 SSE （ Server-sent Events ）是 WebSocket 的一种轻量代替方案，使用 HTTP 协议。
严格地说，HTTP 协议是没有办法做服务器推送的，但是当服务器向客户端声明接下来要发送流信息时，客户端就会保持连接打开，SSE 使用的就是这种原理。</description></item><item><title>Git clone直接提交用户名和密码</title><link>https://Jermine.vdo.pub/git/git_clone%E7%9B%B4%E6%8E%A5%E6%8F%90%E4%BA%A4%E7%94%A8%E6%88%B7%E5%90%8D%E5%92%8C%E5%AF%86%E7%A0%81/</link><guid isPermaLink="true">https://Jermine.vdo.pub/git/git_clone%E7%9B%B4%E6%8E%A5%E6%8F%90%E4%BA%A4%E7%94%A8%E6%88%B7%E5%90%8D%E5%92%8C%E5%AF%86%E7%A0%81/</guid><pubDate>Tue, 30 Aug 2016 10:20:07 +0800</pubDate><description>git使用用户名密码clone的方式： git clone http://username:password@remote 例如：我的用户名是abc@qq.com,密码是abc123456,git地址为git@xxx.com/www.git
git clone http://abc@qq.com:abc123456@git.xxx.com/www.git 执行报错：
fatal: unable to access &amp;#39;http://abc@qq.com:abc123456@git.xxx.com/www.git/&amp;#39;: Couldn&amp;#39;t resolve host &amp;#39;qq.com:abc123456@git.xxx.com&amp;#39; 报错原因是因为用户名包含了@符号，所以需求要把@转码一下</description></item><item><title>Go语言静态库的编译和使用</title><link>https://Jermine.vdo.pub/go/go%E8%AF%AD%E8%A8%80%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E4%BD%BF%E7%94%A8/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/go%E8%AF%AD%E8%A8%80%E9%9D%99%E6%80%81%E5%BA%93%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E4%BD%BF%E7%94%A8/</guid><pubDate>Mon, 29 Aug 2016 16:37:16 +0800</pubDate><description>本文主要介绍go语言静态库的编译和使用方法，以windows平台为例，linux平台步骤一样，具体环境如下：
&amp;gt;echo %GOPATH% E:\share\git\go_practice\ &amp;gt;echo %GOROOT% C:\Go\ &amp;gt;tree /F %GOPATH%\src 卷 work 的文件夹 PATH 列表 卷序列号为 0009-D8C8 E:\SHARE\GIT\GO_PRACTICE\SRC │ main.go │ └─demo demo.go 在%GOPATH%\src目录，有demo包和使用demo包的应用程序main.go，main.go代码如下：</description></item><item><title>解决树莓派交换空间的问题</title><link>https://Jermine.vdo.pub/raspberry-pi/raspberry-pi-set-swap/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/raspberry-pi-set-swap/</guid><pubDate>Sun, 21 Aug 2016 15:19:10 +0800</pubDate><description>今天在树莓派编译一个较大的C项目时发现每次编译到43之后速度会特别慢并且死机，百度之后发现可能是交换空间不足，增加1G交换空间后才解决死机问题。</description></item><item><title>浅谈Golang sync</title><link>https://Jermine.vdo.pub/go/%E6%B5%85%E8%B0%88_golang_sync_/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/%E6%B5%85%E8%B0%88_golang_sync_/</guid><pubDate>Sat, 23 Jul 2016 16:37:16 +0800</pubDate><description>尽管 Golang 推荐通过 channel 进行通信和同步，但在实际开发中 sync 包用得也非常的多。另外 sync 下还有一个 atomic 包，提供了一些底层的原子操作（这里不做介绍）。本篇文章主要介绍该包下的锁的一些概念及使用方法。</description></item><item><title>Make an Alpine Docker Image</title><link>https://Jermine.vdo.pub/raspberry-pi/make-an-alpine-docker-image/</link><guid isPermaLink="true">https://Jermine.vdo.pub/raspberry-pi/make-an-alpine-docker-image/</guid><pubDate>Sat, 21 May 2016 16:14:53 +0800</pubDate><description>步骤： 运行如下代码获取基础镜像 docker pull jermine/alpine Dockerfile 源码参考：https://github.com/JermineHu/docker-alpine-armhf
基于基础镜像可以安装alpine是所有软件，然后构建一个运行环境，比如</description></item><item><title>SSH Config for Alive - 解决ssh经常断开的问题</title><link>https://Jermine.vdo.pub/linux/sshd-config-for-alive/</link><guid isPermaLink="true">https://Jermine.vdo.pub/linux/sshd-config-for-alive/</guid><pubDate>Thu, 12 May 2016 09:54:32 +0800</pubDate><description>SSH连接总是隔一段时间没有输入时就断开，解决办法如下：
服务端配置 sudo vi /etc/ssh/sshd_config ClientAliveInterval 60 #服务端主动向客户端请求响应的间隔 ClientAliveCountMax 10 #服务器发出请求后客户端没有响应的次数达到一定值就自动断开 sudo restart ssh 客户端配置 sudo vi /etc/ssh/ssh_config #或~/.ssh/config</description></item><item><title>Golang Cross Compiled Config - go语言跨平台交叉编译</title><link>https://Jermine.vdo.pub/go/go-cross-compiled-config/</link><guid isPermaLink="true">https://Jermine.vdo.pub/go/go-cross-compiled-config/</guid><pubDate>Wed, 23 Mar 2016 14:14:13 +0800</pubDate><description>go在各个平台交叉编译的介绍 Golang 支持交叉编译，在一个平台上生成另一个平台的可执行程序，最近使用了一下，非常好用，这里备忘一下。
Mac 下的交叉编译 Mac 下编译 Linux 和 Windows 64 位可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下的交叉编译 Linux 下编译 Mac 和 Windows 64位可执行程序</description></item><item><title>在docker中搭建Samba服务器</title><link>https://Jermine.vdo.pub/docker/docker-samba/</link><guid isPermaLink="true">https://Jermine.vdo.pub/docker/docker-samba/</guid><pubDate>Sun, 20 Mar 2016 12:13:19 +0800</pubDate><description>在docker中搭建Samba服务器 要是想把容器的权限与宿主主机的用户权限一致的话，则只需要把用户和组文件映射到容器里面即可：
docker run --restart=always -d --name samba -p 139:139 -p 445:445 -v /data/samba_server:/share -v /etc/passwd:/etc/passwd:ro -v /etc/group:/etc/group:ro dperson/samba -s &amp;#34;lnh;/share/;yes;no;no;all;none&amp;#34; 如果只是设置账户直接访问可以直接run：</description></item><item><title>关于我-Jermine</title><link>https://Jermine.vdo.pub/about/</link><guid isPermaLink="true">https://Jermine.vdo.pub/about/</guid><pubDate>Sat, 21 Mar 2015 12:13:19 +0800</pubDate><description>关于我 自报家门： 英文名 : Jermine，中文叫法应该为杰明，被人听成了“煎饼”，从此被人喊“煎饼”、“贱饼”！好好一个英文名，终究还是被玩坏了！
姓名： 胡旭 ，生于1990年农历九月九日九点，刚好是太阳刚升起的时候，所以取名“旭”，从生辰到名字，命里含“九”量很高，个人也很喜欢9这个数字，9也是个位数最大的数字。</description></item></channel></rss>