<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Shaowen Chen's Website</title><link>https://www.chenshaowen.com/en/</link><description>Recent content on Shaowen Chen's Website</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&amp;copy;2016 - {year}, All Rights Reserved.</copyright><lastBuildDate>Sun, 27 Sep 2026 00:00:00 +0000</lastBuildDate><sy:updatePeriod>weekly</sy:updatePeriod><atom:link href="https://www.chenshaowen.com/en/atom.xml" rel="self" type="application/rss+xml"/><item><title>AppLab - An Application Deployment Platform Better Suited to VibeCoding</title><link>https://www.chenshaowen.com/en/blog/applab.html</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 27 Sep 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/applab.html</guid><description>This is an open-source project: https://github.com/shaowenchen/applab 1. Building an Application with AppLab Clone the repository 1 git clone https://x:xxx@applab.chenshaowen.com/applab/git/app.git Let the Agent build it 1 claude Once you describe what you need, just sit back and wait — you will see output like this: 1 2 3 4 5 6</description><dc:creator>WeChat Official Account</dc:creator><category>AppLab</category><category>VibeCoding</category><category>AI Agent</category><category>Platform</category><category>Deployment</category><category>R&amp;D</category></item><item><title>llms.txt: Making AI Understand Your Website</title><link>https://www.chenshaowen.com/en/blog/llms-txt.html</link><pubDate>Sun, 20 Sep 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 20 Sep 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/llms-txt.html</guid><description>1. What llms.txt Is llms.txt is a convention: put a Markdown file at the root of your site, and use plain language to tell large language models and AI agents what the site is, which content is worth reading, and what each piece covers.
It was proposed by Jeremy Howard (Answer.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>llms.txt</category><category>GEO</category><category>R&amp;D</category></item><item><title>deepseek-harness-remote-node</title><link>https://www.chenshaowen.com/en/blog/deepseek-harness-remote-node.html</link><pubDate>Sat, 12 Sep 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 12 Sep 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deepseek-harness-remote-node.html</guid><description>1. Insufficient Context Is the Key Constraint on AI Agent Adoption The quality of an Agent&amp;rsquo;s work depends both on model capability and on the environmental context it can reach.
For development and operations, the harder part is that the environment is often fragmented: logs live on production, docs in a knowledge base, code in a Git repository.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>DeepSeek Harness</category><category>Agent</category><category>Remote Execution</category><category>R&amp;D</category></item><item><title>RDMA Operations</title><link>https://www.chenshaowen.com/en/blog/rdma-ops.html</link><pubDate>Sat, 22 Aug 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 22 Aug 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/rdma-ops.html</guid><description>1. RoCE 1.1 Connectivity Requirements RDMA requires the same class of network end to end, for example the same /16 subnet.
Single switch.
RoCE: host NIC ── Ethernet switch (PFC) ── peer NIC Multiple switches.
RoCE: host NIC ── Leaf ── Spine ── Leaf ── peer NIC When there are multiple hops, note:</description><dc:creator>WeChat Official Account</dc:creator><category>RDMA</category><category>RoCE</category><category>InfiniBand</category><category>Network</category><category>Operations</category><category>High Performance Computing</category></item><item><title>Will the Middle Platform Disappear Under AI Agents?</title><link>https://www.chenshaowen.com/en/blog/will-middle-platform-disappear-under-ai-agent.html</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Aug 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/will-middle-platform-disappear-under-ai-agent.html</guid><description>1. Business Bypasses the Middle Platform At the moment I work on Infra at a fairly large AI middle-platform team. After a department meeting early this year, I started wondering whether the middle platform would disappear.
OpenClaw was very popular at the time. Business colleagues using OpenClaw with a large model could already get a great many things done without cooperating with other teams — the division of labor disappeared.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Agent</category><category>Middle Platform</category><category>Platform</category><category>Thoughts</category><category>R&amp;D</category></item><item><title>Storage Knowledge Every Operations Engineer Should Know</title><link>https://www.chenshaowen.com/en/blog/ops-storage-knowledge.html</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 15 Aug 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ops-storage-knowledge.html</guid><description>1 Volatile Memory 1.1 REG REG (Register) is a storage unit inside the CPU, sitting right next to the arithmetic unit — the fastest and smallest level of the storage hierarchy. General-purpose registers (RAX/RBX/RDI on x86, and so on) take part directly in instruction execution, with access latency around 0.2–0.5 ns (roughly one clock cycle), lost on power loss, and typically only tens to hundreds of bytes.</description><dc:creator>WeChat Official Account</dc:creator><category>Operations</category><category>Storage</category><category>Systems</category><category>Architecture</category></item><item><title>OpenSpec: A Lightweight Spec Contract for AI Coding</title><link>https://www.chenshaowen.com/en/blog/openspec-spec-driven-development-for-ai.html</link><pubDate>Fri, 31 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Fri, 31 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/openspec-spec-driven-development-for-ai.html</guid><description>1. What OpenSpec Is OpenSpec is an open-source Spec-Driven Development framework maintained by Fission-AI. It does not try to teach AI new coding tricks. Instead it adds a lightweight &amp;ldquo;agreement layer&amp;rdquo; between you and the AI — before any code is written, both sides settle on what to do, in writing.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>OpenSpec</category><category>Claude Code</category><category>Cursor</category><category>R&amp;D</category></item><item><title>How to Add Huawei NPU Nodes to a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/add-huawei-npu-node-to-kubernetes-cluster.html</link><pubDate>Wed, 22 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 22 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/add-huawei-npu-node-to-kubernetes-cluster.html</guid><description>1. Disk Handling 1.1 Inspect Disks Inspect the new disk 1 fdisk -l Disk /dev/nvme1n1: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors 1.2 Build a RAID0 If you have several small disks, a better approach is to build a RAID0 — this gives you not only a larger storage directory but also higher speed.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>NPU</category><category>Ascend</category><category>Huawei</category><category>Hardware</category><category>Drivers</category><category>Kubernetes</category></item><item><title>Loop Device Lifecycle Management</title><link>https://www.chenshaowen.com/en/blog/loop-device-lifecycle-management.html</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Mon, 13 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/loop-device-lifecycle-management.html</guid><description>1. Creating the Image File 1.1 When Loop Storage Fits Treat an ordinary file as a /dev/loopN block device: reads and writes go through the block device interface, while the backing file is still just a file on the host. Mounting ISO and disk images Local practice and stress testing</description><dc:creator>WeChat Official Account</dc:creator><category>Linux</category><category>Storage</category><category>Operations</category><category>loop</category></item><item><title>Ubuntu Package Dependencies and Change Management</title><link>https://www.chenshaowen.com/en/blog/ubuntu-package-dependency-and-change-management.html</link><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Mon, 13 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ubuntu-package-dependency-and-change-management.html</guid><description>1. Viewing Package Dependencies 1.1 Forward Dependencies Which packages it depends on List dependencies 1 apt-cache depends apparmor 1 2 3 4 5 6 7 8 9 10 11 12 13 14 apparmor Depends: debconf # 必须 Depends: lsb-base # 必须 |Depends: debconf # 必须 Depends: &amp;lt;debconf-2.0&amp;gt;</description><dc:creator>WeChat Official Account</dc:creator><category>Ubuntu</category><category>Linux</category><category>apt</category><category>Operations</category><category>Package Management</category></item><item><title>Deploying Ceph in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-ceph.html</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-ceph.html</guid><description>This article covers single-node validation and three-node production deployment with cephadm. For architecture, operations, and functional testing, see Ceph Architecture and Operations. 1. Disk Preparation An OSD can only use a block device (/dev/sdX, a partition, /dev/loopN). 1.1 Inspecting Available Devices 1 2 3 4 5 6 7 lsblk -o</description><dc:creator>WeChat Official Account</dc:creator><category>Middleware</category><category>Containers</category><category>Ceph</category><category>Storage</category><category>Operations</category></item><item><title>Ceph Architecture and Operations</title><link>https://www.chenshaowen.com/en/blog/container-deploy-ceph-architecture-operations-and-testing.html</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-ceph-architecture-operations-and-testing.html</guid><description>Ceph is a unified distributed storage system that supports block storage (RBD), object storage (RGW), and file storage (CephFS). The official cephadm can orchestrate each daemon as a container (Docker, or Podman + Containerd); see Deploying Ceph in Containers for details.
1. Architecture 1.1 Topology and Data Paths The diagram below shows a common five-node topology (3 MON + 2 MGR + 5 OSD): MONs only need to come in odd numbers, and in a five-node deployment 3 is enough (tolerating one MON failure); 5 MONs tolerate 2 failures, but the metadata overhead is larger, so there is generally no need to run a MON on every machine.</description><dc:creator>WeChat Official Account</dc:creator><category>Middleware</category><category>Containers</category><category>Ceph</category><category>Storage</category><category>Operations</category><category>Architecture</category></item><item><title>Deploying VictoriaMetrics in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-victoriametrics.html</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-victoriametrics.html</guid><description>VictoriaMetrics (VM for short) is a time-series database compatible with the Prometheus ecosystem. It uses fewer resources than Prometheus and comes in both single-node and cluster editions. The single-node edition can directly replace Prometheus storage; the cluster edition splits reads, writes, and storage across vmstorage / vminsert / vmselect, giving it stronger horizontal scaling.</description><dc:creator>WeChat Official Account</dc:creator><category>Middleware</category><category>Containers</category><category>VictoriaMetrics</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category></item><item><title>Agent Skills: Getting AI Coding Assistants to Follow Engineering Conventions</title><link>https://www.chenshaowen.com/en/blog/agent-skills-engineering-workflows-for-ai-agents.html</link><pubDate>Sun, 05 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 05 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/agent-skills-engineering-workflows-for-ai-agents.html</guid><description>1. What Agent Skills Is Agent Skills is a production-grade engineering skill pack for AI coding assistants. It encodes the way senior engineers work — their working methods, quality gates, and best practices across the full Define → Plan → Build → Verify → Review → Ship lifecycle — into Markdown workflows (Skills) that an agent can execute.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Cursor</category><category>Claude</category><category>Agent Skills</category><category>R&amp;D</category></item><item><title>Headroom: Making AI Coding Assistants Save More Tokens</title><link>https://www.chenshaowen.com/en/blog/headroom-reduce-ai-agent-tokens.html</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Fri, 03 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/headroom-reduce-ai-agent-tokens.html</guid><description>1. What Headroom Is Headroom is a context compression layer for AI agents. Before the LLM receives a request, it performs content-aware compression on tool output, logs, RAG chunks, file contents, and conversation history, cutting token usage to 5%–40% of the original while keeping answer quality as unchanged as possible.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>MCP</category><category>Cursor</category><category>Headroom</category><category>R&amp;D</category></item><item><title>Claude Code Custom Model Configuration and Usage Tips</title><link>https://www.chenshaowen.com/en/blog/claude-code-custom-model-config-and-tips.html</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/claude-code-custom-model-config-and-tips.html</guid><description>References: Claude Code Configuration, Environment Variables, Connecting to an LLM Gateway
Claude Code talks to the Anthropic Messages API. When connecting to a custom gateway, use the env block of settings.json to override the endpoint and the model.
1. Where the Configuration File Lives The user configuration is at ~/.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Claude Code</category><category>Programming Assistant</category><category>R&amp;D</category></item><item><title>Codex Custom Model Configuration and Usage Tips</title><link>https://www.chenshaowen.com/en/blog/codex-custom-model-config-and-tips.html</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/codex-custom-model-config-and-tips.html</guid><description>References: Codex Configuration Basics, Codex Advanced Configuration Codex uses the OpenAI Responses API. When connecting to a custom gateway, define the endpoint with [model_providers.&amp;lt;id&amp;gt;], and the top-level model and model_provider determine the actual call. 1. Where the Configuration File Lives The user configuration is at ~/.codex/config.toml by default (on Windows,</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Codex</category><category>Programming Assistant</category><category>R&amp;D</category></item><item><title>OpenCode Custom Model Configuration and Usage Tips</title><link>https://www.chenshaowen.com/en/blog/opencode-custom-model-config-and-tips.html</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Jul 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/opencode-custom-model-config-and-tips.html</guid><description>References: OpenCode Config, Providers OpenCode uses the OpenAI Chat Completions API. When connecting to a custom gateway, declare the endpoint and the model list in the provider block of opencode.jsonc. 1. Installation and Configuration File 1 npm install -g opencode-ai The user configuration is at ~/.config/opencode/opencode.jsonc by default (opencode.json also</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>OpenCode</category><category>Programming Assistant</category><category>R&amp;D</category></item><item><title>How to Separate Events from Kubernetes to a Dedicated Etcd</title><link>https://www.chenshaowen.com/en/blog/separate-kubernetes-events-to-dedicated-etcd.html</link><pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate><atom:modified>Mon, 29 Jun 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/separate-kubernetes-events-to-dedicated-etcd.html</guid><description>The disk pressure on the original etcd is reduced to below 5%, the risk factor is very low, and the cluster shows no anomalies.
1. Deploying the Events Etcd Cluster Events have lower consistency requirements than the main Etcd. Deploying a 3-node cluster is recommended. SSD is recommended for the disk, and the data directory should be kept separate from the main Etcd.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Etcd</category><category>Events</category><category>Operations</category><category>Performance Optimization</category><category>blog</category></item><item><title>LiteLLM - Providing a Unified Model API Format</title><link>https://www.chenshaowen.com/en/blog/litellm-unified-model-api-format.html</link><pubDate>Wed, 24 Jun 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Jun 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/litellm-unified-model-api-format.html</guid><description>1. What LiteLLM Is LiteLLM is an open-source LLM adapter: call 100+ APIs (OpenAI, Anthropic, Gemini, Bedrock, Azure, Ollama, vLLM, Qwen, and more) using the standard OpenAI format. Two ways to use it: Python SDK — called directly from your code AI Gateway — a team-level proxy with authentication, billing,</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LiteLLM</category><category>LLM</category><category>Gateway</category><category>R&amp;D</category></item><item><title>CodeGraph: Helping AI Coding Assistants Understand the Codebase</title><link>https://www.chenshaowen.com/en/blog/codegraph-help-ai-understand-codebase.html</link><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 18 Jun 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/codegraph-help-ai-understand-codebase.html</guid><description>1. What CodeGraph Is CodeGraph is a local-first code intelligence tool. It parses a codebase with tree-sitter, stores symbols, relationships, and files in a local SQLite database, and exposes them as a queryable knowledge graph through MCP, a CLI, and a TypeScript API.
Put simply, it turns &amp;ldquo;grep, glob, and Read all over the code&amp;rdquo; into an index built ahead of time, so an AI assistant can answer structural questions with just a few queries.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>MCP</category><category>Cursor</category><category>CodeGraph</category><category>R&amp;D</category></item><item><title>Superpowers: A Complete Software Engineering Methodology for AI Coding Assistants</title><link>https://www.chenshaowen.com/en/blog/superpowers-software-engineering-methodology-for-ai.html</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><atom:modified>Mon, 01 Jun 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/superpowers-software-engineering-methodology-for-ai.html</guid><description>1. What Superpowers Is Superpowers is a plugin that bolts &amp;ldquo;engineering discipline&amp;rdquo; onto a coding agent, maintained by Prime Radiant. It is not a library of prompt templates but a complete software engineering methodology built on top of Skills — at session startup a bootstrap mechanism makes the AI automatically</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Superpowers</category><category>Cursor</category><category>Claude Code</category><category>R&amp;D</category></item><item><title>OpenSpec: Align Requirements Before the AI Writes Code</title><link>https://www.chenshaowen.com/en/blog/openspec-align-requirements-before-coding.html</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 19 May 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/openspec-align-requirements-before-coding.html</guid><description>1. What OpenSpec Is OpenSpec is an open-source, lightweight AI-assisted spec-driven development framework. It stores specs and changes in Markdown files, drives the AI assistant with slash commands (such as /opsx:propose and /opsx:apply), and uses a CLI to manage state, validate format, and archive changes.
In short, it turns &amp;ldquo;requirements talked out in a conversation&amp;rdquo; into a &amp;ldquo;traceable, iterable, archivable contract&amp;rdquo; — align before writing code, correct at any point during implementation, and when you are done, let the change settle into the source of truth for system behavior.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>OpenSpec</category><category>Cursor</category><category>R&amp;D</category></item><item><title>ComfyUI Wan2.2 Video Generation Examples</title><link>https://www.chenshaowen.com/en/blog/comfyui-wan2-2-video-generation-examples.html</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 05 May 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/comfyui-wan2-2-video-generation-examples.html</guid><description>Reference: ComfyUI official Wan2.2 tutorial
1. Download the Models Enter the ComfyUI models directory 1 cd models Download the repository 1 GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Comfy-Org/Wan_2.2_ComfyUI_Repackaged.git Download the models 1 2 cd Wan_2.2_ComfyUI_Repackaged git lfs pull&amp;amp; 2. 5B Hybrid Edition (Text-to-Video + Image-to-Video) 2.1 Download the Workflow 1 wget https://raw.githubusercontent.com/Comfy-Org/workflow_templates/refs/heads/main/templates/video_wan2_2_5B_ti2v.json Or click Workflow → Browse Templates → Video → Wan2.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>ComfyUI</category><category>Wan2.2</category><category>Video Generation</category></item><item><title>Inference Application Troubleshooting Checklist</title><link>https://www.chenshaowen.com/en/blog/inference-app-troubleshooting-checklist.html</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><atom:modified>Fri, 01 May 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/inference-app-troubleshooting-checklist.html</guid><description>Pod View the child processes of PID 1 1 ps --ppid 1 -f View TIME_WAIT connections 1 netstat -anp | grep TIME_WAIT Istio Ingress 1 kubectl -n istio-ingress logs -l app=istio-ingress |grep vlm-tag-v1 EastWestGateway 1 kubectl -n istio-ingress logs -l app=istio-eastwestgateway |grep vlm-tag-v1 Slow XDS Push 1 2 3 4 5 histogram_quantile(0.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Inference</category><category>Troubleshooting</category><category>Kubernetes</category><category>Istio</category><category>Operations</category></item><item><title>Elasticsearch troubleshooting</title><link>https://www.chenshaowen.com/en/blog/elasticsearch-troubleshooting.html</link><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 30 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/elasticsearch-troubleshooting.html</guid><description>Handling an Elasticsearch Index in the Red State GET _cat/shards?v=true&amp;amp;h=index,shard,prirep,state,node,unassigned.reason&amp;amp;s=state 1 2 ops-pod-loggie-2026.06.11 0 p UNASSIGNED NODE_LEFT ops-pod-loggie-2026.06.11 0 r UNASSIGNED ALLOCATION_FAILED Try to reallocate.
1 POST _cluster/reroute?retry_failed=true Or delete it outright.
1 DELETE ops-pod-loggie-2026.06.11 Scheduled Index Cleanup Keep all indexes for only 7 days.
Create an ILM policy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 PUT _ilm/policy/ops-delete-after-7d { &amp;#34;policy&amp;#34;: { &amp;#34;phases&amp;#34;: { &amp;#34;hot&amp;#34;: { &amp;#34;actions&amp;#34;: {} }, &amp;#34;delete&amp;#34;: { &amp;#34;min_age&amp;#34;: &amp;#34;7d&amp;#34;, &amp;#34;actions&amp;#34;: { &amp;#34;delete&amp;#34;: {} } } } } } Create an index template 1 2 3 4 5 6 7 8 9 10 PUT _index_template/ops-delete-after-7d { &amp;#34;index_patterns&amp;#34;: [&amp;#34;*&amp;#34;, &amp;#34;-.</description><dc:creator>WeChat Official Account</dc:creator><category>Elasticsearch</category><category>Operations</category><category>Troubleshooting</category></item><item><title>Deploying Hermes Agent in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-hermes-agent-under-containers.html</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 19 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-hermes-agent-under-containers.html</guid><description>1. Starting the Container Set the image 1 export IMAGE=nousresearch/hermes-agent:v2026.6.5 Set directory permissions 1 2 mkdir -p hermes-agent-home chmod -R 777 hermes-agent-home Set environment variables 1 2 3 cat &amp;lt;&amp;lt;EOF &amp;gt; hermes-agent-home/.env GATEWAY_ALLOW_ALL_USERS=true EOF Start hermes-agent 1 2 3 4 5 6 7 8 9 10 nerdctl run -d \</description><dc:creator>WeChat Official Account</dc:creator><category>Hermes</category><category>AI</category><category>Containers</category><category>Docker</category><category>Operations</category><category>Agent</category></item><item><title>Deploying the JuiceFS CSI Driver</title><link>https://www.chenshaowen.com/en/blog/deploy-juicefs-csi-driver.html</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 18 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-juicefs-csi-driver.html</guid><description>1. Installation and Deployment Download the deployment file 1 wget https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s.yaml Check kubelet&amp;rsquo;s install directory on any non-master node 1 ps -ef|grep kubelet |grep root-dir If there is a value, you need to perform the replacement; otherwise install directly. 1 sed &amp;#39;s@/var/lib/kubelet@{{KUBELET_DIR}}@g&amp;#39; k8s.yaml 1 kubectl apply -f k8s.yaml Check the</description><dc:creator>WeChat Official Account</dc:creator><category>JuiceFS</category><category>Storage</category></item><item><title>Using A2A Gateway to Connect Multiple OpenClaw</title><link>https://www.chenshaowen.com/en/blog/use-a2a-gateway-to-connect-multiple-openclaw.html</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 15 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-a2a-gateway-to-connect-multiple-openclaw.html</guid><description>1. Architecture 1 2 3 4 5 6 7 ┌──────────────────────┐ A2A/JSON-RPC ┌───────────────</description><dc:creator>WeChat Official Account</dc:creator><category>OpenClaw</category><category>A2A</category><category>AI</category><category>Agent</category></item><item><title>Loggie Deployment and Configuration</title><link>https://www.chenshaowen.com/en/blog/loggie-deployment-and-configuration.html</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 14 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/loggie-deployment-and-configuration.html</guid><description>1. Download the Chart Package 1 git clone https://github.com/loggie-io/installation 2. Install loggie 1 cd installation/helm-chart 1 helm install loggie ./ -nloggie --create-namespace 3. Global Configuration Changes Remove the timestamp in front of stdout 1 kubectl -n loggie edit cm loggie-config-loggie Set parseStdout to true to remove the timestamp in front of stdout.</description><dc:creator>WeChat Official Account</dc:creator><category>Loggie</category><category>Logging</category><category>Storage</category><category>Deployment</category><category>Kubernetes</category><category>Operations</category></item><item><title>OpenClaw Operations - Building the Flywheel</title><link>https://www.chenshaowen.com/en/blog/building-the-flywheel-for-openclaw-operation.html</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Apr 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/building-the-flywheel-for-openclaw-operation.html</guid><description>1. Production Cases Cleaning up a node Restarting a node Deleting an abnormal Pod Inspecting the cluster 2. Two Steps to Get Configured Step one: configure MCP.
Hand this configuration to OpenClaw and it will set it up for you.
1 2 3 4 5 6 7 8 { &amp;#34;mcpServers&amp;#34;: { &amp;#34;ops-mcp-server&amp;#34;: { &amp;#34;baseUrl&amp;#34;: &amp;#34;http://ops-mcp-server/mcp&amp;#34;, &amp;#34;headers&amp;#34;: { &amp;#34;Authorization&amp;#34;: &amp;#34;Bearer xxx&amp;#34; } } } } Step two: install skills.</description><dc:creator>WeChat Official Account</dc:creator><category>OpenClaw</category><category>Troubleshooting</category><category>Operations</category><category>Agent</category></item><item><title>You Can Also Implement AI Agents This Way - The SOPS Edition</title><link>https://www.chenshaowen.com/en/blog/how-to-land-ai-agent-sops.html</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 28 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-land-ai-agent-sops.html</guid><description>1. Establish a SOPS Baseline SOPS stands for Standard Operating Procedures. In the production activities we carry out, there are often some basic, repetitive operational flows, and these operations are the SOPS.
You need to build up a set of SOPS; by combining them you can finish tasks faster. In the past, establishing standard procedures required a senior engineer, but now with AI, producing SOPS is very easy.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AI Agent</category><category>MCP</category><category>LLM</category><category>R&amp;D</category></item><item><title>AGFS File System Performance Test</title><link>https://www.chenshaowen.com/en/blog/agfs-file-system-performance-test.html</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 26 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/agfs-file-system-performance-test.html</guid><description>1. Installing wrk 1 apt-get install -y wrk 2. localfs Performance Test 2.1 1KB Small File Test Write file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 cat &amp;gt; put-1k.lua &amp;lt;&amp;lt;&amp;#34;EOF&amp;#34; wrk.method = &amp;#34;PUT&amp;#34; wrk.body = string.rep(&amp;#34;a&amp;#34;, 1024) wrk.headers[&amp;#34;Content-Type&amp;#34;] = &amp;#34;text/plain&amp;#34; counter = 0 local WRAP = 500000 request = function() counter = counter + 1 local n = ((counter - 1) % WRAP) + 1 local filename = &amp;#34;/local/perf-1k/test_&amp;#34; .</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AGFS</category><category>Storage</category><category>Performance Testing</category></item><item><title>A File System for AI Agents - AGFS</title><link>https://www.chenshaowen.com/en/blog/agfs-file-system-for-ai-agent.html</link><pubDate>Wed, 25 Mar 2026 11:22:55 +0000</pubDate><atom:modified>Wed, 25 Mar 2026 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/agfs-file-system-for-ai-agent.html</guid><description>1. Introduction to AGFS Overview AGFS is a project that provides storage services through a RESTful API. It supports a variety of storage backends, including memory, files, databases, message queues, and more.
Because it does not need POSIX interface support, data can be stored through remote calls, which is very useful in AI Agents.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AGFS</category><category>Storage</category><category>Validation</category><category>Deployment</category></item><item><title>OpenViking Usage and OpenClaw Integration</title><link>https://www.chenshaowen.com/en/blog/openviking-usage-and-openclaw-integration.html</link><pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 24 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/openviking-usage-and-openclaw-integration.html</guid><description>1. Introduction to OpenViking 1.1 Use Cases Problem How OpenViking Handles It Fragmented context Unified management with a filesystem paradigm: memory, resources, and skills all map to a viking:// virtual directory, so context is managed the way files are High token consumption L0/L1/L2 tiering: the L0 summary (~100 tokens) is</description><dc:creator>WeChat Official Account</dc:creator><category>OpenViking</category><category>OpenClaw</category><category>AI Agent</category></item><item><title>How to Send Messages to OpenClaw Remotely</title><link>https://www.chenshaowen.com/en/blog/how-to-send-messages-to-openclaw-remotely.html</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 05 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-send-messages-to-openclaw-remotely.html</guid><description>1. Configure hooks Configure hooks in openclaw.json 1 2 3 4 5 6 7 &amp;#34;hooks&amp;#34;: { &amp;#34;enabled&amp;#34;: true, &amp;#34;token&amp;#34;: &amp;#34;xxx&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/openclaw/hooks&amp;#34;, &amp;#34;allowRequestSessionKey&amp;#34;: true, &amp;#34;allowedAgentIds&amp;#34;: [&amp;#34;*&amp;#34;] }, See https://docs.openclaw.ai/automation/webhook
The token here must not be the same as the gateway&amp;rsquo;s token.
2. Sending a message 1 2 3 4 5 6 7 8 9 10 11 12 curl --location &amp;#39;https://xxx.</description><dc:creator>WeChat Official Account</dc:creator><category>OpenClaw</category><category>Messaging</category><category>Automation</category><category>Operations</category><category>AI Agent</category></item><item><title>Deploying OpenClaw in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-openclaw-under-containers.html</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 04 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-openclaw-under-containers.html</guid><description>1. Start the Container Set the image 1 export IMAGE=ghcr.io/openclaw/openclaw:2026.3.2 Generate a random token 1 openssl rand -hex 32 Set the gateway token 1 export OPENCLAW_GATEWAY_TOKEN=xxx This token is used for authentication on both the remote web UI and the local TUI. Set directory permissions 1 2 mkdir -p openclaw-home</description><dc:creator>WeChat Official Account</dc:creator><category>OpenClaw</category><category>AI</category><category>Containers</category><category>Docker</category><category>Operations</category><category>Agent</category></item><item><title>Extending OpenClaw with Skills and MCP</title><link>https://www.chenshaowen.com/en/blog/using-skills-and-mcp-to-extend-openclaw.html</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 01 Mar 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-skills-and-mcp-to-extend-openclaw.html</guid><description>1. What Skills Are 1 2 3 openclaw skills list Skills (7/51 ready) OpenClaw ships with a number of built-in skills, which you can view with openclaw skills list. The concrete implementations of these Skills can be found at https://github.com/openclaw/openclaw/tree/main/skills. A Skills file mainly describes the Skill&amp;rsquo;s metadata, when it</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AI Agent</category><category>Skills</category><category>MCP</category><category>OpenClaw</category><category>Operations</category><category>Learning</category></item><item><title>OpenClaw Installation and Configuration</title><link>https://www.chenshaowen.com/en/blog/installation-and-configuration-of-openclaw.html</link><pubDate>Thu, 26 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 26 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/installation-and-configuration-of-openclaw.html</guid><description>1. Preparing the Node Environment Install nvm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash Set the nvm environment variables You need to edit Bash&amp;rsquo;s config file and add the following:
1 2 3 export NVM_DIR=&amp;#34;$HOME/.nvm&amp;#34; [ -s &amp;#34;$NVM_DIR/nvm.sh&amp;#34; ] &amp;amp;&amp;amp; \. &amp;#34;$NVM_DIR/nvm.sh&amp;#34; [ -s &amp;#34;$NVM_DIR/bash_completion&amp;#34; ] &amp;amp;&amp;amp; \. &amp;#34;$NVM_DIR/bash_completion&amp;#34; Install Node 1 nvm install 22 default 2.</description><dc:creator>WeChat Official Account</dc:creator><category>OpenClaw</category><category>AI</category><category>Agent</category><category>LLM</category><category>Tools</category><category>R&amp;D</category><category>Learning</category></item><item><title>LVM Daily Maintenance</title><link>https://www.chenshaowen.com/en/blog/lvm-daily-maintenance.html</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Fri, 20 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/lvm-daily-maintenance.html</guid><description>1. Basic Concepts Physical Volume A PV (Physical Volume) is made up of one or more physical hard disks, and can also be a RAID device.
Volume Group A VG (Volume Group) is made up of one or more PVs.
Logical Volume Space carved out of a VG as an LV (Logical Volume); after formatting, it is mounted to a directory for use.</description><dc:creator>WeChat Official Account</dc:creator><category>LVM</category><category>Storage</category><category>Operations</category></item><item><title>MinIO Infrastructure Selection and Optimization</title><link>https://www.chenshaowen.com/en/blog/minio-infrastructure-selection-and-optimization.html</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 19 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/minio-infrastructure-selection-and-optimization.html</guid><description>1. Hardware 1.1 CPU Support for AVX/AVX-512, used for erasure coding computation and SIMD operations Support for AES-NI, used for object encryption Total storage per node Recommended vCPU count Up to 1 TB 8 Up to 10 TB 16 Up to 100 TB 32 Up to 1 PB 64 More</description><dc:creator>WeChat Official Account</dc:creator><category>MinIO</category><category>Storage</category><category>Disk</category><category>CPU</category><category>Memory</category><category>Network</category><category>Tuning</category></item><item><title>Deploying ClickHouse in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-clickhouse.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-clickhouse.html</guid><description>1. ClickHouse Single Node 1.1 Configure Environment Variables 1 2 3 4 5 6 7 8 export CONTAINER_CLI=nerdctl export IMAGE=clickhouse/clickhouse-server:24 export CLICKHOUSE_INSTANCE_NAME=clickhouse export CH_DATA=/data/ops/clickhouse/$CLICKHOUSE_INSTANCE_NAME export CLICKHOUSE_PORT=9000 export CLICKHOUSE_PROMETHEUS_PORT=9363 export CLICKHOUSE_USER=default export CLICKHOUSE_PASSWORD=xxxxxx 1.2 Generate the Configuration Files 1 2 3 4 5 6 7 8 9 10 11 12 13</description><dc:creator>WeChat Official Account</dc:creator><category>Middleware</category><category>Containers</category><category>ClickHouse</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category></item><item><title>Deploying Redis in Containers</title><link>https://www.chenshaowen.com/en/blog/container-deploy-redis.html</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-redis.html</guid><description>1. Redis Single Instance Configure environment variables 1 2 3 4 5 6 7 8 9 export CONTAINER_CLI=nerdctl export IMAGE=redis:7 export REDIS_INSTANCE_NAME=redis-instance export REDIS_PASSWORD=xxxxxx export REDIS_PORT=6379 export REDIS_DATA=/data/ops/redis/$REDIS_INSTANCE_NAME mkdir -p $REDIS_DATA/data $REDIS_DATA/log Start the service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $CONTAINER_CLI run -d \ --name $REDIS_INSTANCE_NAME \ --restart always \ --security-opt apparmor=unconfined \ --security-opt seccomp=unconfined \ --network host \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --ulimit nofile=1048576:1048576 \ --memory-swappiness=0 \ -v $REDIS_DATA/data:/data \ -v $REDIS_DATA/log:/var/log/redis \ $IMAGE redis-server --port $REDIS_PORT --requirepass $REDIS_PASSWORD \ --maxmemory 64gb \ --maxmemory-policy noeviction \ --appendonly yes \ --appendfsync everysec Test the connection A PONG response means the connection succeeded</description><dc:creator>WeChat Official Account</dc:creator><category>Middleware</category><category>Containers</category><category>Redis</category><category>Operations</category></item><item><title>Containerized Deployment of a Multi-Node FoundationDB Cluster and Operations</title><link>https://www.chenshaowen.com/en/blog/container-deploy-multi-node-foundationdb-and-maintenance.html</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Tue, 10 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-deploy-multi-node-foundationdb-and-maintenance.html</guid><description>1. Generate a Cluster ID 1 cat /dev/urandom | tr -dc &amp;#39;a-zA-Z0-9&amp;#39; | fold -w 16 | head -n 1 The examples below use CLUSTER_ID=fKbIga9RHP79OIx1.
2. On the First Node Configure environment variables 1 2 3 4 5 6 7 8 9 10 export CONTAINER_CLI=nerdctl export IMAGE=foundationdb/foundationdb:7.1.26 export CLUSTER_ID=fKbIga9RHP79OIx1 export FDB_INSTANCE_NAME=fdb_server export FDB_CLUSTER_FIRST_IP=$(hostname -I | awk &amp;#39;{print $1}&amp;#39;) export FDB_PUBLIC_IP=$(hostname -I | awk &amp;#39;{print $1}&amp;#39;) export FDB_PORT=4500 export FDB_DIR=/data/ops/fdb/$FDB_INSTANCE_NAME Clean up old data 1 2 3 $CONTAINER_CLI rm -f $FDB_INSTANCE_NAME mv $FDB_DIR $FDB_DIR.</description><dc:creator>WeChat Official Account</dc:creator><category>FoundationDB</category><category>Database</category><category>Middleware</category><category>Storage</category><category>Containers</category><category>3FS</category><category>Operations</category></item><item><title>Multi-Node, Multi-Disk MinIO Cluster Performance Testing Under Different Erasure Code Configurations</title><link>https://www.chenshaowen.com/en/blog/multi-node-multi-disk-minio-cluster-performance-test-in-different-erasure-code-configurations.html</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 08 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/multi-node-multi-disk-minio-cluster-performance-test-in-different-erasure-code-configurations.html</guid><description>1. Erasure Code Configuration The default erasure parity configuration is as follows:
Erasure Set Size Default Parity (EC:M) 1 EC:0 2-3 EC:1 4-5 EC:2 6 - 7 EC:3 8 - 16 EC:4 The maximum parity is ERASURE_SET_SIZE/2, meaning the number of parity blocks cannot exceed the number of data blocks.</description><dc:creator>WeChat Official Account</dc:creator><category>MinIO</category><category>Storage</category><category>Operations</category><category>Performance</category><category>Testing</category><category>Benchmarking</category><category>Performance Testing</category></item><item><title>Multi-Node, Multi-Disk MinIO Cluster Performance Testing Under Different Erasure Code Configurations on IPoIB</title><link>https://www.chenshaowen.com/en/blog/multi-node-multi-disk-minio-cluster-performance-test-in-different-erasure-code-configurations-on-ipoib.html</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 08 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/multi-node-multi-disk-minio-cluster-performance-test-in-different-erasure-code-configurations-on-ipoib.html</guid><description>The earlier tests found the bottleneck in the NIC; this post adds supplementary testing under IPoIB.
1. MinIO Cluster Environment 1.1 Creating the MinIO Cluster 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 export CONTAINER_CLI=nerdctl export IMAGE=minio/minio:RELEASE.</description><dc:creator>WeChat Official Account</dc:creator><category>MinIO</category><category>Storage</category><category>Distributed Systems</category><category>Erasure Coding</category><category>IPoIB</category><category>Performance Testing</category><category>Benchmarking</category></item><item><title>Using HAProxy to Proxy MinIO and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-haproxy-to-proxy-minio-and-performance-testing.html</link><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Sun, 08 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-haproxy-to-proxy-minio-and-performance-testing.html</guid><description>1. Preparing the Configuration Files MinIO cluster 1 mc admin info local 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ● minio1:9000 Uptime: 55 minutes Version: 2025-04-22T22:12:26Z Network: 2/2 OK Drives: 4/4 OK Pool: 1 ● minio2:9000 Uptime: 55 minutes Version: 2025-04-22T22:12:26Z Network: 2/2 OK Drives: 4/4 OK Pool: 1 ┌──────┬───────────────────────┬─────────────────────┬──────────────┐ │ Pool │ Drives Usage │ Erasure stripe size │ Erasure sets │ │ 1st │ 0.</description><dc:creator>WeChat Official Account</dc:creator><category>MinIO</category><category>HAProxy</category><category>Storage</category><category>Proxy</category><category>Performance Testing</category><category>Benchmarking</category></item><item><title>MinIO Multi-Node, Multi-Disk Deployment and Operations</title><link>https://www.chenshaowen.com/en/blog/minio-multi-node-multi-disk-deployment-and-maintenance.html</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 07 Feb 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/minio-multi-node-multi-disk-deployment-and-maintenance.html</guid><description>1. Environment Preparation 1.1 Preparing Data Disks Inspect the data disks 1 lsblk -d -o NAME,SIZE,TYPE | grep nvme 1 2 3 4 nvme0n1 745.2G disk nvme1n1 745.2G disk nvme2n1 745.2G disk nvme3n1 745.2G disk Prepare the storage directories 1 2 3 for i in {0..3}; do mkdir -p /mnt/data${i} done Format the data disks 1 2 3 for i in {0.</description><dc:creator>WeChat Official Account</dc:creator><category>MinIO</category><category>Storage</category><category>Distributed Systems</category><category>Operations</category><category>Learning</category><category>Object Storage</category><category>S3</category><category>Deployment</category><category>High Availability</category></item><item><title>How to Survive in the Cursor World</title><link>https://www.chenshaowen.com/en/blog/how-to-survive-in-the-cursor-world.html</link><pubDate>Sun, 01 Feb 2026 10:00:00 +0000</pubDate><atom:modified>Sun, 01 Feb 2026 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-survive-in-the-cursor-world.html</guid><description>1. The Quantitative Change AI IDEs Have Brought AI generates a large amount of code that enters engineering work. AI IDEs are simply too good to use: from naming completion in the past, to generating function implementations, and now to delivering the code for an entire feature. You do not even need to know how to write code — through chatting you can complete many software iteration tasks.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>AI</category><category>AI Agent</category><category>Agent</category><category>Cursor</category></item><item><title>You Can Also Implement AI Agents This Way - The MCP Edition</title><link>https://www.chenshaowen.com/en/blog/using-mcp-to-power-ai-agent.html</link><pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate><atom:modified>Thu, 29 Jan 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-mcp-to-power-ai-agent.html</guid><description>1. What Is MCP MCP is short for Model Context Protocol, a protocol for passing context between models and applications.
The greatest value of MCP is that, as the model wars are winding down and AI applications are about to explode, it gives developers a unified standard for invoking capabilities beyond the model itself.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AI Agent</category><category>MCP</category><category>LLM</category><category>R&amp;D</category></item><item><title>Alibaba Cloud eRDMA Testing and PD Disaggregation Application Deployment</title><link>https://www.chenshaowen.com/en/blog/test-and-deploy-pd-disagg-app-with-erdma-on-aliyun.html</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><atom:modified>Sat, 17 Jan 2026 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/test-and-deploy-pd-disagg-app-with-erdma-on-aliyun.html</guid><description>In a PD disaggregated deployment, heterogeneous GPU models are often used to deploy the model across machines, which multiplies the cross-machine communication pressure. RDMA devices are usually brought in to accelerate kvcache transfer between nodes so as to achieve a lower FTTL. This post describes how to test eRDMA devices</description><dc:creator>WeChat Official Account</dc:creator><category>Alibaba Cloud</category><category>eRDMA</category><category>RDMA</category><category>PD</category><category>Disaggregation</category><category>AI</category><category>Application</category><category>Operations</category></item><item><title>You Can Also Land AI Agents This Way - The Operations Events Edition</title><link>https://www.chenshaowen.com/en/blog/using-ops-event-to-power-ai-agent.html</link><pubDate>Wed, 14 Jan 2026 10:00:00 +0000</pubDate><atom:modified>Wed, 14 Jan 2026 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-ops-event-to-power-ai-agent.html</guid><description>1. Why Operations Events Less invasive Operations teams usually already have observations accumulated in the Metrics and Log dimensions. Operations events can be a new entry point: introduce new operational capabilities without affecting the stability of existing systems.
Better suited to automation Metrics represent system state, Log represents specific code behavior, while Event represents changes in components.</description><dc:creator>WeChat Official Account</dc:creator><category>AI Agent</category><category>AI</category><category>Operations</category><category>LLM</category></item><item><title>Some Common LLM Agent Architectures</title><link>https://www.chenshaowen.com/en/blog/some-common-llm-agent-infrastructure.html</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 21 Dec 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-common-llm-agent-infrastructure.html</guid><description>1. Prompt Chaining Prompt chaining breaks a task down into a series of steps, where each LLM call processes the output of the previous step.
2. Routing Routing classifies the input and directs it to a specialized follow-up task.
3. Parallelization An LLM can sometimes work on a task concurrently and aggregate its outputs programmatically.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>Agent</category><category>R&amp;D</category><category>Architecture</category><category>Learning</category><category>Best Practices</category></item><item><title>You Can Also Implement AI Agents This Way - The Case Studies Edition</title><link>https://www.chenshaowen.com/en/blog/some-case-of-ai-agent.html</link><pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 29 Nov 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-case-of-ai-agent.html</guid><description>1. Handling Deterministic Faults For faults that have a specific handling procedure, just let the Agent handle them and send a notification to spread the word.
For similar automated handling, we have exception load deletion at the application layer, disk cleanup at the node layer, masking an offline GPU card, masking a node, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>AI Agent</category><category>LLM</category><category>Operations</category><category>Automation</category></item><item><title>Performance Test of ext4, xfs, zfs, and btrfs under RAID6</title><link>https://www.chenshaowen.com/en/blog/ext4-xfs-zfs-btrfs-performance-test-in-raid6.html</link><pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Mon, 06 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ext4-xfs-zfs-btrfs-performance-test-in-raid6.html</guid><description>1. Single Disk 1.1 Creating the File System Wipe the disk 1 wipefs -a /dev/nvme0n1 Format the disk 1 mkfs.xfs /dev/nvme0n1 Mount the disk 1 2 mkdir -p /mnt/nvme0n1-test mount /dev/nvme0n1 /mnt/nvme0n1-test 1.2 Performance Test 4k random write 1 2 3 4 echo 3 &amp;gt; /proc/sys/vm/drop_caches fio --name=4k_randwrite --rw=randwrite --bs=4k --ioengine=libaio --direct=1 \ --numjobs=8 --iodepth=32 --size=20G --time_based --runtime=120 --group_reporting \ --allow_mounted_write=1 --filename=/mnt/nvme0n1-test/fio-4k-randwrite.</description><dc:creator>WeChat Official Account</dc:creator><category>Filesystem</category><category>ext4</category><category>xfs</category><category>zfs</category><category>btrfs</category><category>RAID</category><category>Storage</category><category>Performance Testing</category><category>Operations</category></item><item><title>ZFS Operations Under RAID</title><link>https://www.chenshaowen.com/en/blog/raid-zfs-operations.html</link><pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 05 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/raid-zfs-operations.html</guid><description>ZFS does not support online shrinking; this post focuses on operational tasks such as creating pools, replacing disks, and expanding capacity.
1. ZFS vdev Types mirror: mirroring, multiple disks hold copies of each other, equivalent to RAID 1 raidz3: triple parity, tolerates 3 disk failures raidz2: double parity, tolerates 2 disk failures, equivalent to RAID 6 raidz1: single parity, tolerates 1 disk failure, equivalent to RAID 5 striped: striping, no redundancy, equivalent to RAID 0 They can also be combined:</description><dc:creator>WeChat Official Account</dc:creator><category>Filesystem</category><category>zfs</category><category>RAID</category><category>Storage</category><category>Operations</category></item><item><title>XFS Operations Under RAID</title><link>https://www.chenshaowen.com/en/blog/raid-xfs-operations.html</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 04 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/raid-xfs-operations.html</guid><description>The xfs filesystem does not support shrinking. This post is mainly about disk replacement and expansion under RAID 10.
1. RAID States and Disk States In mdadm, the RAID states are:
clean, normal degraded, still readable and writable, but with reduced fault tolerance reshaping, reorganization in progress, appears during expansion and shrinking resyncing, data synchronization in progress recovering, data recovery in progress, accompanied by degradation as a disk is rebuilt failed In mdadm, the disk states are:</description><dc:creator>WeChat Official Account</dc:creator><category>File System</category><category>xfs</category><category>RAID</category><category>mdadm</category><category>Storage</category><category>Operations</category></item><item><title>Btrfs Operations Under RAID</title><link>https://www.chenshaowen.com/en/blog/raid-btrfs-operations.html</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 03 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/raid-btrfs-operations.html</guid><description>Btrfs supports online expansion, shrinking, disk replacement, and RAID mode conversion; this post covers creating a filesystem under RAID 0/RAID 1/RAID 10/RAID 6 topologies, adding disks, replacing disks, shrinking, and common operational tasks.
1. Btrfs Profiles single: single copy, no redundancy, works with one disk or can aggregate multiple disks.</description><dc:creator>WeChat Official Account</dc:creator><category>Filesystem</category><category>btrfs</category><category>RAID</category><category>Storage</category><category>Operations</category></item><item><title>XFS Performance Testing Under Various RAID Levels</title><link>https://www.chenshaowen.com/en/blog/xfs-performance-test-in-various-raid.html</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 02 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/xfs-performance-test-in-various-raid.html</guid><description>1. Disk Baseline Testing 1.1 4k Random Write 1 2 3 4 5 6 7 8 9 10 11 12 13 14 fio \ --name=4k_randwrite \ --rw=randwrite \ --bs=4k \ --ioengine=libaio \ --direct=1 \ --numjobs=8 \ --iodepth=32 \ --size=20G \ --time_based \ --runtime=120 \ --group_reporting \ --allow_mounted_write=1 \ --filename=/data1/fio-4k-randwrite.dat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 Starting 8 processes 4k_randwrite: Laying out IO file (1 file / 20480MiB) Jobs: 8 (f=8): [w(8)][100.</description><dc:creator>WeChat Official Account</dc:creator><category>Filesystem</category><category>xfs</category><category>RAID</category><category>mdadm</category><category>Storage</category><category>Performance Testing</category></item><item><title>RAID Storage Technology</title><link>https://www.chenshaowen.com/en/blog/raid-storage-technology.html</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Oct 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/raid-storage-technology.html</guid><description>1. What Is RAID RAID technology combines multiple physical hard drives into a single logical hard drive, so the operating system sees it as one storage device.
There are two ways to implement RAID: hardware and software.
A hardware implementation is a RAID controller, a standalone hardware device responsible for RAID control and management.</description><dc:creator>WeChat Official Account</dc:creator><category>RAID</category><category>Storage</category><category>Hardware</category><category>Operations</category><category>Learning</category></item><item><title>Using LLaMA-Factory to Fine-Tune the Qwen3 Model</title><link>https://www.chenshaowen.com/en/blog/using-llama-factory-to-fine-tune-qwen3-model.html</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 21 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-llama-factory-to-fine-tune-qwen3-model.html</guid><description>1. Testing the Original Model Start the environment 1 2 3 4 5 6 7 8 9 10 11 12 nerdctl run -it \ --security-opt apparmor=unconfined \ --security-opt seccomp=unconfined \ --gpus all \ --ipc=host \ -p 8000:8000 \ --ulimit memlock=-1 \ --ulimit stack=67108864 \ --name vllm \ --volume /data/models:/data/models \</description><dc:creator>WeChat Official Account</dc:creator><category>LLaMA-Factory</category><category>Qwen3</category><category>Fine-Tuning</category><category>AI</category><category>LLM</category></item><item><title>Deploying PD-Disaggregated Applications with vLLM</title><link>https://www.chenshaowen.com/en/blog/using-vllm-to-deploy-pd-disagg-app.html</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 20 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-vllm-to-deploy-pd-disagg-app.html</guid><description>1. Why Deploy LLM Applications with PD Disaggregation In the process of LLM inference, there are two serial stages: Process the entire input context and generate the KV Cache (Prefill stage) Incrementally generate new tokens (Decode stage) These two stages have different resource requirements. The Prefill stage has to compute</description><dc:creator>WeChat Official Account</dc:creator><category>vLLM</category><category>Deployment</category><category>PD</category><category>Disaggregation</category><category>Application</category></item><item><title>Using lmcache Can Significantly Improve TTFT in Model Inference</title><link>https://www.chenshaowen.com/en/blog/use-lmcache-to-improve-ttft.html</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 17 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-lmcache-to-improve-ttft.html</guid><description>1. Introduction to LMCache TTFT is the time from when a request is issued until the model generates its first token. Because the Prefill phase has to encode the input context into a KV Cache before generation can begin, producing that first token requires a large amount of computation, which makes TTFT high.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>vLLM</category><category>Inference</category><category>lmcache</category><category>Operations</category></item><item><title>What Is Prefix Cache</title><link>https://www.chenshaowen.com/en/blog/what-is-prefix-cache.html</link><pubDate>Thu, 11 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 11 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-prefix-cache.html</guid><description>1. What Is Prefix Cache In model inference scenarios, caching mechanisms are often used to improve throughput and performance. There are two common caching mechanisms:
Key-Value Cache (KV Cache), which is oriented toward the internals of a single request, caching the intermediate computation results (Key and Value) of the Transformer model to avoid redundant computation.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>vLLM</category><category>LLM</category><category>Cache</category><category>Inference</category><category>Operations</category></item><item><title>NVIDIA RTX 5090 Inference Test</title><link>https://www.chenshaowen.com/en/blog/nvidia-rtx-5090-inference-test.html</link><pubDate>Tue, 09 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 09 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nvidia-rtx-5090-inference-test.html</guid><description>1. Installing the Driver Download the driver Go to https://www.nvidia.com/en-us/drivers/ and select the corresponding driver version to download. 1 wget https://us.download.nvidia.com/XFree86/Linux-x86_64/580.76.05/NVIDIA-Linux-x86_64-580.76.05.run Install the driver 1 bash NVIDIA-Linux-x86_64-580.76.05.run Check the GPUs 1 nvidia-smi 1 2 3 GPU 0: NVIDIA GeForce RTX 5090 (UUID: GPU-92fcdc58-4754-73c7-af6c-56740936817d) GPU 1: NVIDIA GeForce RTX 5090 (UUID:</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>GPU</category><category>NVIDIA</category><category>LLM</category><category>Inference</category><category>Performance Testing</category><category>Operations</category></item><item><title>What Is Model Quantization</title><link>https://www.chenshaowen.com/en/blog/what-is-model-quantization.html</link><pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 06 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-model-quantization.html</guid><description>1. What Is Model Quantization Model quantization is the process of converting the weights and activations of a high-precision model (usually 32-bit floating point FP32 or 16-bit floating point FP16) into a low-precision model (such as 8-bit integer INT8).
The value range of FP32 is -3.4*10^38 to 3.4*10^38, with 4 billion values.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>Model Quantization</category><category>Optimization</category><category>Operations</category></item><item><title>Kubernetes Base Environment Requirements</title><link>https://www.chenshaowen.com/en/blog/kubernetes-base-environment-requirements.html</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-base-environment-requirements.html</guid><description>1. Base Packages Kubernetes version ≥ 1.18 socat Required conntrack Required ebtables Optional, but recommended ipset Optional, but recommended ipvsadm Optional, but recommended 1 apt-get -y install socat conntrack ebtables ipset ipvsadm 2. Port Requirements 2.1 Base Node Services Service Protocol Action Start Port End Port Comment ssh TCP allow 22 22 Node remote management docker TCP allow 2375 2376 Docker remote communication etcd TCP allow 2379 2380 etcd cluster communication 2.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Cluster</category><category>Configuration</category><category>Security</category><category>Operations</category><category>Learning</category><category>Installation</category><category>Dependencies</category><category>Best Practices</category></item><item><title>How to Upgrade the cgroup Version of a Kubernetes Node</title><link>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-node-cgroup-version.html</link><pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 02 Sep 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-node-cgroup-version.html</guid><description>1. Interface Path Differences Between cgroup v1 and v2 v1 1 2 3 4 /sys/fs/cgroup/cpu/cpu.cfs_quota_us /sys/fs/cgroup/cpu/cpuacct.usage /sys/fs/cgroup/memory/memory.limit_in_bytes /sys/fs/cgroup/memory/memory.usage_in_bytes v2 1 2 3 4 /sys/fs/cgroup/cpu.max /sys/fs/cgroup/cpu.stat /sys/fs/cgroup/memory.max /sys/fs/cgroup/memory.current cgroup v2 is the upgraded version of v1, with advantages such as more unified resource hierarchy management and precise resource isolation. But it also means that when writing code, the paths for reading the relevant interface files are different, so compatibility handling is required.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Upgrade</category><category>Operations</category><category>cgroup</category><category>Learning</category><category>Nodes</category><category>Resource Isolation</category><category>Troubleshooting</category><category>Kubelet</category></item><item><title>Using claude-code on a Server</title><link>https://www.chenshaowen.com/en/blog/using-claude-code-on-server.html</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 29 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-claude-code-on-server.html</guid><description>The same applies to a desktop environment. 1. Prepare the node.js environment Install nvm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash 1 2 echo &amp;#39;export NVM_DIR=&amp;#34;$([ -z &amp;#34;${XDG_CONFIG_HOME-}&amp;#34; ] &amp;amp;&amp;amp; printf %s &amp;#34;${HOME}/.nvm&amp;#34; || printf %s &amp;#34;${XDG_CONFIG_HOME}/nvm&amp;#34;)&amp;#34;&amp;#39; &amp;gt;&amp;gt; ~/.bashrc echo &amp;#39;[ -s &amp;#34;$NVM_DIR/nvm.sh&amp;#34; ] &amp;amp;&amp;amp; \. &amp;#34;$NVM_DIR/nvm.sh&amp;#34;&amp;#39; &amp;gt;&amp;gt; ~/.bashrc 1 source</description><dc:creator>WeChat Official Account</dc:creator><category>Claude</category><category>CLI</category><category>AI</category><category>LLM</category><category>Tools</category><category>R&amp;D</category><category>Operations</category></item><item><title>Common NPU Operations and Fault Handling</title><link>https://www.chenshaowen.com/en/blog/common-npu-operation-and-fault-handling.html</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 20 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-npu-operation-and-fault-handling.html</guid><description>Content referenced or recorded while troubleshooting, continuously updated
1. Mounting Devices into a Container 1 export IMAGE=ascendai/pytorch:2.1.0 1 2 3 4 5 6 7 8 9 10 nerdctl run --security-opt apparmor=unconfined --security-opt seccomp=unconfined --rm -it --ipc=host \ --device=/dev/davinci7 \ --device=/dev/davinci_manager \ --device=/dev/devmm_svm \ --device=/dev/hisi_hdc \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \ -v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \ ${IMAGE} \ /bin/bash 2.</description><dc:creator>WeChat Official Account</dc:creator><category>NPU</category><category>AI</category><category>Hardware</category><category>Operations</category><category>Fault Handling</category></item><item><title>NVIDIA DCGM User Guide</title><link>https://www.chenshaowen.com/en/blog/the-use-guide-of-nvidia-dcgm.html</link><pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 13 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-use-guide-of-nvidia-dcgm.html</guid><description>1. What DCGM Is DCGM (Data Center GPU Manager) is a toolset NVIDIA provides for managing and monitoring GPUs in the data center. It offers the following capabilities: GPU behavior monitoring GPU configuration management GPU policy supervision GPU health and diagnostics GPU accounting and process statistics NVSwitch configuration and monitoring</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>NVIDIA</category><category>DCGM</category><category>GPU</category><category>Monitoring</category><category>Operations</category><category>Troubleshooting</category></item><item><title>How to Clean Up Zombie Processes</title><link>https://www.chenshaowen.com/en/blog/how-to-clean-zombie-processes.html</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 07 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-clean-zombie-processes.html</guid><description>1. What a Zombie Process Is How a process is created:
The parent process calls fork() to create a child process The child process calls exec() to load a new program The child process finishes executing and calls exit() or returns The parent process calls wait() or waitpid() If the parent process never calls wait() or waitpid(), the child stays in the system after it finishes, becoming a zombie process.</description><dc:creator>WeChat Official Account</dc:creator><category>Operations</category><category>Cleanup</category><category>GPU</category><category>NVIDIA</category><category>Linux</category></item><item><title>Using VLLM Benchmark for Model Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-vllm-benchmark-to-test-model-performance.html</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 05 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-vllm-benchmark-to-test-model-performance.html</guid><description>VLLM Benchmark is a tool provided by VLLM for testing model performance, supporting a variety of inference backends. This article mainly records some of the process of using VLLM Benchmark to test model performance.
1. Starting the Model Service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 python -m vllm.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>VLLM</category><category>Benchmarking</category><category>Model Performance</category><category>Testing</category></item><item><title>Watch Him Rise, Watch Him Turn to Mud - KubeSphere</title><link>https://www.chenshaowen.com/en/blog/a-journey-with-kubesphere.html</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 01 Aug 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-journey-with-kubesphere.html</guid><description>1. A Slap in the Face: Deleting the Repo, the Images, the Docs On Ray&amp;rsquo;s last day at QingCloud as the project&amp;rsquo;s initiator, the frontend, docs, and images of the open source project KubeSphere were deleted, and users received an [Announcement on the Adjustment of the KubeSphere Open Source Project] through various channels.</description><dc:creator>WeChat Official Account</dc:creator><category>KubeSphere</category><category>Kubernetes</category><category>Open Source</category><category>Thoughts</category></item><item><title>GB Standards Download</title><link>https://www.chenshaowen.com/en/blog/gb-standards.html</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 30 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/gb-standards.html</guid><description>GB/T 22239-2019 Information Security Technology — Baseline for Classified Protection of Cybersecurity - PDF Download
GB/T 43697-2024 Data Security Technology — Rules for Data Classification and Grading - PDF Download</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>Standards</category></item><item><title>Deploying Dragonfly on a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/deploy-dragonfly-on-kubernetes.html</link><pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Mon, 28 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-dragonfly-on-kubernetes.html</guid><description>1. Deploy NFS Storage 1.1 Configure the NFS Service on the Storage Node Install the NFS service on the storage node 1 apt-get install -y nfs-kernel-server Start the NFS service and enable it at boot 1 systemctl start nfs-server.service &amp;amp; systemctl enable nfs-server.service Configure the NFS shared directory 1 mkdir -p /data/nfs 1 vim /etc/exports /data/nfs *(rw,sync,no_root_squash,no_all_squash) Restart the NFS service 1 systemctl restart nfs-server.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Dragonfly</category><category>Images</category><category>Image Acceleration</category><category>AI</category><category>Operations</category></item><item><title>Using the history Command</title><link>https://www.chenshaowen.com/en/blog/the-use-of-history.html</link><pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 13 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-use-of-history.html</guid><description>1. The history Command The history command lets you view the command history of the current session. When you exit the shell, the command history is saved to the corresponding history file.
For bash, the command history is saved in the ~/.bash_history file; for zsh, it is saved in ~/.zsh_history. You can also use the HISTFILE environment variable to specify the location of the history file: export HISTFILE=/data/ops/bash_history.</description><dc:creator>WeChat Official Account</dc:creator><category>history</category><category>Command Line</category><category>Tools</category><category>Linux</category><category>Operations</category></item><item><title>AI-Related Papers</title><link>https://www.chenshaowen.com/en/blog/ai-related-papers.html</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 05 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-related-papers.html</guid><description>2025 Intrinsic Fingerprint of LLMs [Published: 07-04] View
The paper proposes a robust fingerprinting method based on the inter-layer standard-deviation distribution pattern of attention parameter matrices (Q/K/V/O), used to detect lineage relationships between large language models (LLMs) — for example, whether one model was derived from another through continued training, fine-tuning, or an upgrade.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Papers</category><category>Storage</category><category>LLM</category></item><item><title>Using Gemini CLI on a Server</title><link>https://www.chenshaowen.com/en/blog/using-gemini-cli-on-server.html</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Jul 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-gemini-cli-on-server.html</guid><description>1. Get the Project ID and API Key Visit https://aistudio.google.com/apikey Get the project ID and API key, and set them as environment variables 1 2 echo &amp;#34;export GOOGLE_CLOUD_PROJECT=&amp;#34; &amp;gt;&amp;gt; ~/.bashrc echo &amp;#34;export GEMINI_API_KEY=&amp;#34; &amp;gt;&amp;gt; ~/.bashrc 1 source ~/.bashrc 2. Prepare the Node.js Environment Install nvm 1 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh |</description><dc:creator>WeChat Official Account</dc:creator><category>Gemini</category><category>CLI</category><category>AI</category><category>LLM</category><category>Learning</category><category>Tools</category><category>Operations</category><category>Programming Assistant</category></item><item><title>Ascend DMI Tool Usage Guide</title><link>https://www.chenshaowen.com/en/blog/ascend-dmi-tool-usage-guide.html</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 17 Jun 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ascend-dmi-tool-usage-guide.html</guid><description>1. Installing Dependencies MindCluster ToolBox is a system-level toolset for cluster operations and hardware management, mainly used for operations such as device monitoring, performance testing, and log collection.
MindCluster ToolBox includes the Ascend DMI tool, the log collection tool, and the Ascend Cert tool.
MindCluster ToolBox works by calling low-level DCMI (Device Control Management Interface) and AscendCL (Ascend Computing Language) interfaces to perform the relevant detection functions; system-level information queries are implemented by calling the general-purpose libraries provided by the system.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>DMI</category><category>Ascend</category><category>Huawei</category><category>NPU</category><category>Troubleshooting</category><category>Performance Testing</category></item><item><title>Open-Source GPU Virtualization Projects on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/kubernetes-gpu-virtualization.html</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 14 Jun 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-gpu-virtualization.html</guid><description>1. k8s-device-plugin https://github.com/NVIDIA/k8s-device-plugin is the official Kubernetes device plugin from NVIDIA, used to manage and allocate NVIDIA GPU resources in a Kubernetes cluster.
By interacting with kubelet, k8s-device-plugin automatically discovers and registers GPU devices and exposes them to the Kubernetes scheduler as resources. It supports many GPU models and is able to handle GPU partitioning and sharing.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>GPU</category><category>AI</category><category>Virtualization</category></item><item><title>FoundationDB Data Backup and Restore</title><link>https://www.chenshaowen.com/en/blog/foundationdb-data-backup-and-restore.html</link><pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 10 Jun 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/foundationdb-data-backup-and-restore.html</guid><description>1. Set Environment Variables Set the foundationdb cluster name and version 1 2 3 4 5 export CLUSTER_NAME= export NAMESPACE= export DEPLOY_NAME=${CLUSTER_NAME}-deployment export SECRET_NAME=fdb-backup-secret export VERSION=7.1.26 Set the S3 backup bucket and credentials 1 2 3 4 5 export BUCKET= export HOST=s3.us-west-2.amazonaws.com export AK=x export SK=x export S3_BACKUP_URI=&amp;#34;blobstore://${AK}:${SK}@${HOST}/fdb-backup?bucket=${BUCKET}&amp;amp;sc=0&amp;#34; 2. Create the Credentials 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cat &amp;lt;&amp;lt;EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: ${SECRET_NAME} namespace: ${NAMESPACE} type: Opaque stringData: credentials: | { &amp;#34;accounts&amp;#34;: { &amp;#34;${BUCKET}@${HOST}&amp;#34;: { &amp;#34;access_key&amp;#34;: &amp;#34;${AK}&amp;#34;, &amp;#34;secret&amp;#34;: &amp;#34;${SK}&amp;#34;, &amp;#34;endpoint&amp;#34;: &amp;#34;${HOST}&amp;#34; } } } EOF 3.</description><dc:creator>WeChat Official Account</dc:creator><category>Database</category><category>FoundationDB</category><category>Kubernetes</category><category>Backup</category><category>Operations</category></item><item><title>The Cognitive Awakening</title><link>https://www.chenshaowen.com/en/blog/book/the-cognitive-awakening.html</link><pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 08 Jun 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-cognitive-awakening.html</guid><description>Subtitle: The Driving Force That Initiates Self-Change
Author: Zhou Ling
Publisher: Posts &amp;amp; Telecom Press
Publication Year: 2020-10
ISBN: 9787115543424
Notes:
The book is divided into two parts.
The first part is inward-looking: understanding yourself. Starting from the triune brain theory, it explains how the brain works. The instinctive brain maintains basic physiological needs, the emotional brain handles emotion and social interaction, and the rational brain processes logic and decision-making.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Cognition</category><category>Psychology</category><category>Growth</category></item><item><title>Adding Scrape Credentials to Node Exporter</title><link>https://www.chenshaowen.com/en/blog/how-to-add-basic-auth-for-node-exporter.html</link><pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 24 May 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-basic-auth-for-node-exporter.html</guid><description>1. Background Node Exporter is a common component in the Prometheus ecosystem for collecting host metrics, but by default it does not provide access authentication. This article describes how to add basic authentication to Node Exporter in a Kubernetes environment to improve security.
2. Configuring Credentials for Node Exporter 2.1 Generating an Encrypted Password Use the htpasswd tool to generate an encrypted password:</description><dc:creator>WeChat Official Account</dc:creator><category>exporter</category><category>Collector</category><category>Security</category><category>Kubernetes</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category><category>Learning</category><category>Node Exporter</category><category>Basic Auth</category><category>Authentication</category></item><item><title>Deploying smokeping-prober to Probe Network Quality</title><link>https://www.chenshaowen.com/en/blog/deploy-smokeping-prober.html</link><pubDate>Sun, 11 May 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 11 May 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-smokeping-prober.html</guid><description>1. What smokeping-prober Is smokeping-prober is a tool for probing network quality. It probes network quality by sending ICMP requests to target nodes.
2. Deploying smokeping-prober 2.1 Generating the smokeping-prober.yaml Configuration File 1 2 3 4 5 6 7 8 9 10 11 cat &amp;gt; smokeping_prober.yaml &amp;lt;&amp;lt;EOF --- targets: - hosts: - 1.</description><dc:creator>WeChat Official Account</dc:creator><category>smokeping</category><category>exporter</category><category>Network</category><category>Monitoring</category><category>Operations</category><category>Prometheus</category><category>Probing</category><category>Learning</category></item><item><title>Opscli Supports MCP to Provide Cline\Cursor Integration</title><link>https://www.chenshaowen.com/en/blog/opscli-support-mcp-provide-cline-cursor-integration.html</link><pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Apr 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/opscli-support-mcp-provide-cline-cursor-integration.html</guid><description>1. Using Ops from Cline Query which clusters exist Get the details of a node The case is very simple, but the data is real, which shows that Cline is already able to connect to Ops for operations tasks. More complex cases still need more testing. The specific approach might lie in: providing certain Workspaces as context information, setting custom instructions to reinforce certain characteristics, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Ops</category><category>Cline</category><category>Cursor</category><category>AI Agent</category><category>MCP</category><category>Operations</category></item><item><title>kube-proxy Failure Prevents Pods on a Node from Accessing a Service</title><link>https://www.chenshaowen.com/en/blog/kube-proxy-abnormal-causes-pod-on-node-unable-to-access-service.html</link><pubDate>Mon, 31 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Mon, 31 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kube-proxy-abnormal-causes-pod-on-node-unable-to-access-service.html</guid><description>1. Problem Description Related Pods 1 2 3 4 5 6 kubectl -n istio-system get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES istiod-647c7c9d95-7n7n6 1/1 Running 0 77m 10.244.173.51 docs-ai-a800-4 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt; istiod-647c7c9d95-k6l88 1/1 Running 0 30m 10.244.210.160 ai-a40-2 &amp;lt;none&amp;gt; &amp;lt;none&amp;gt; istiod-647c7c9d95-pj82r 1/1 Running 0 51m 10.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kube-proxy</category><category>Pod</category><category>Service</category><category>Operations</category></item><item><title>Why NFS Over RDMA Has Much Better FIO Large-Block Read Performance Than NFS</title><link>https://www.chenshaowen.com/en/blog/nfs-over-rdma-vs-nfs-fio-large-block-read-write-performance.html</link><pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 30 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nfs-over-rdma-vs-nfs-fio-large-block-read-write-performance.html</guid><description>1. Background While testing the performance of NFS Over RDMA, I found that reading a 4M file could actually reach 45GB/s.
1 2 3 fio -numjobs=128 -fallocate=none -iodepth=2 -ioengine=libaio -direct=1 -rw=read -bs=4M --group_reporting -size=100m -time_based -runtime=30 -name=fio-test -directory=/data1/nfs READ: bw=42.3GiB/s (45.4GB/s), 42.3GiB/s-42.3GiB/s (45.4GB/s-45.4GB/s), io=1269GiB (1363GB), run=30019-30019msec Yet the disk&amp;rsquo;s 4M multi-threaded read performance is only 6 GB/s.</description><dc:creator>WeChat Official Account</dc:creator><category>NFS</category><category>RDMA</category><category>FIO</category><category>Performance</category></item><item><title>3FS: Key Technologies and Design</title><link>https://www.chenshaowen.com/en/blog/3fs-key-technologies-and-design.html</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Mon, 24 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/3fs-key-technologies-and-design.html</guid><description>1. Direct IO Direct IO bypasses the operating system&amp;rsquo;s page cache and interacts with hardware devices directly.
Characteristics of Direct IO:
Lots of new data, so no caching is needed Low memory footprint Sequential reads and writes of large files For synchronous read operations above a threshold (1MB by default), the 3FS client converts them into AIO operations (opening the file in Direct IO mode) to improve read performance.</description><dc:creator>WeChat Official Account</dc:creator><category>3FS</category><category>Storage</category><category>AI</category><category>Operations</category></item><item><title>DeepSeek 3FS Operations Guide</title><link>https://www.chenshaowen.com/en/blog/deepseek-3fs-operations-guide.html</link><pubDate>Thu, 20 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deepseek-3fs-operations-guide.html</guid><description>Notes on some DeepSeek 3FS operations, continually updated.
1. Basic Concepts and Cautions Chain A Chain is made up of several Targets, and each Target is a replica of the storage. When all commits are ready, all Targets in a Chain are consistent.
Targets on the same Chain cannot be on the same node.</description><dc:creator>WeChat Official Account</dc:creator><category>DeepSeek</category><category>3FS</category><category>AI</category><category>Storage</category><category>Operations</category></item><item><title>Deploying the DeepSeek 3FS Storage System in Containers</title><link>https://www.chenshaowen.com/en/blog/deploy-deepseek-3fs-storage-system-under-containers.html</link><pubDate>Sat, 15 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 15 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-deepseek-3fs-storage-system-under-containers.html</guid><description>1. Deployment Plan Before starting the containerized deployment, a few requirements:
To simplify delivery, only one image is needed For reliability, deploy as many replicas as possible Start different services through different parameters Inject configuration through environment variables and render it into configuration files Below is the deployment plan for DeepSeek 3FS:</description><dc:creator>WeChat Official Account</dc:creator><category>Storage</category><category>AI</category><category>Containers</category><category>Kubernetes</category><category>Docker</category><category>Operations</category><category>LLM</category><category>3FS</category></item><item><title>3FS: Some Performance Tests</title><link>https://www.chenshaowen.com/en/blog/3fs-performance-test.html</link><pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Tue, 11 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/3fs-performance-test.html</guid><description>1. Hardware Tests There are two NVMe SSDs (SAMSUNG MZQL27T6HBLA-00A07) and a 3FS cluster made up of two nodes, each with 4 IB ports. 1.1 Single Thread Disk FIO 128 K, read 1 fio -numjobs=1 -fallocate=none -iodepth=2 -ioengine=libaio -direct=1 -rw=read -bs=128K --group_reporting -size=100M -time_based -runtime=30 -name=fio-test -directory=/data/fio 1 Jobs: 1</description><dc:creator>WeChat Official Account</dc:creator><category>3FS</category><category>Storage</category><category>AI</category><category>Performance Testing</category><category>Operations</category></item><item><title>Using Fluid to Mount 3FS Storage in Kubernetes and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/fluid-using-3fs-as-pvc.html</link><pubDate>Sun, 09 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-using-3fs-as-pvc.html</guid><description>1. Why Connect 3FS to Fluid 3FS is a distributed storage system open-sourced by DeepSeek. Its exceptionally impressive performance test results have made it a hot topic, and its star count has risen rapidly.
The team I work on has also been tracking 3FS technically, looking for suitable application scenarios to get the most value out of our AI hardware infrastructure.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>AI</category><category>Data</category></item><item><title>NFS Over RDMA</title><link>https://www.chenshaowen.com/en/blog/nfs-over-rdma.html</link><pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 06 Mar 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nfs-over-rdma.html</guid><description>1. Prerequisites The storage and the nodes that use it form an RDMA network
The RDMA devices are configured with IP addresses
If you are using Mellanox NICs, add the -with-nfsrdma parameter when installing the driver
1 ./mlnxofedinstall --with-nfsrdma 2. Starting the Server Install dependencies 1 apt install nfs-kernel-server rdma-core -y Load the kernel module 1 modprobe svcrdma Add the port to portlist 1 echo &amp;#39;rdma 20049&amp;#39; | tee /proc/fs/nfsd/portlist Export directory 1 mkdir /data1/nfs 1 2 3 vim /etc/exports /data1/nfs *(rw,sync,no_root_squash,no_all_squash) Start the NFS service 1 systemctl start nfs-server.</description><dc:creator>WeChat Official Account</dc:creator><category>NFS</category><category>RDMA</category><category>High Performance Storage</category><category>Storage</category><category>Network</category><category>Operations</category><category>Learning</category></item><item><title>kubectl logs Cannot View Pod Logs and Reports NotFound</title><link>https://www.chenshaowen.com/en/blog/kubectl-logs-not-found-error.html</link><pubDate>Sat, 22 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 22 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubectl-logs-not-found-error.html</guid><description>1. Symptoms Pod information can be viewed 1 2 3 4 kubectl -n my-testns get pod my-testpod NAME READY STATUS RESTARTS AGE my-testpod 1/1 Running 0 2d13h Pod logs cannot be viewed 1 2 3 kubectl -n my-testns logs my-testpod -f Error from server (NotFound): the server could not find the requested resource ( pods/log my-testpod) On the host where the Pod runs, the container logs can be viewed with docker logs.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kubectl</category><category>Pod</category><category>Troubleshooting</category><category>Operations</category><category>Logging</category><category>Learning</category><category>containerd</category></item><item><title>Providing SOCKS5 Forwarding with Dante</title><link>https://www.chenshaowen.com/en/blog/dante-socks5-proxy.html</link><pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/dante-socks5-proxy.html</guid><description>Because the servers in the data center are bound to a small bandwidth, this post is mainly about using Dante to provide SOCKS5 forwarding, using some high-bandwidth servers for traffic forwarding to speed up dependency package downloads.
1. Find a High-Bandwidth Server Install speedtest-cli 1 pip3 install speedtest-cli List peer test servers 1 2 3 4 5 6 7 8 9 10 11 12 13 speedtest-cli --secure --list Retrieving speedtest.</description><dc:creator>WeChat Official Account</dc:creator><category>Dante</category><category>Operations</category><category>Bandwidth</category><category>Proxy</category><category>Network</category></item><item><title>Using Calico to Limit Pod Bandwidth</title><link>https://www.chenshaowen.com/en/blog/using-calico-to-limit-pod-bandwidth.html</link><pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Wed, 12 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-calico-to-limit-pod-bandwidth.html</guid><description>1. Testing the Full Bandwidth Start the iperf3 server on the target host 1 2 3 4 5 iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Test from the client host 1 iperf3 -c x.x.x.x -p 5201 -t 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Connecting to host x.</description><dc:creator>WeChat Official Account</dc:creator><category>Calico</category><category>Pod</category><category>Bandwidth</category><category>Limiting</category><category>Kubernetes</category><category>Network</category><category>Operations</category><category>Learning</category><category>CNI</category><category>Traffic Control</category></item><item><title>Distributed Computing Framework Ray</title><link>https://www.chenshaowen.com/en/blog/what-is-ray.html</link><pubDate>Sun, 09 Feb 2025 10:00:00 +0000</pubDate><atom:modified>Sun, 09 Feb 2025 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-ray.html</guid><description>1. What Ray Is In 2016, UC Berkeley&amp;rsquo;s RISELab released a new distributed computing framework called Ray. In 2017, after the Ray paper was published, it drew broad attention across the industry; in China it was mainly Ant Group that adopted and contributed to Ray. In 2020, Ray released version</description><dc:creator>WeChat Official Account</dc:creator><category>Distributed Systems</category><category>Computing Framework</category><category>Ray</category><category>Training</category><category>Inference</category></item><item><title>Learning the Structure of Large Models Using Qwen as an Example</title><link>https://www.chenshaowen.com/en/blog/structure-of-large-models-with-qwen.html</link><pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Feb 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/structure-of-large-models-with-qwen.html</guid><description>1. Introduction to the Qwen Model In April 2023, Alibaba released the beta version of Qwen. In December 2023, Alibaba open-sourced the first version of Qwen. In September 2024, Alibaba released Qwen2.5. In January 2025, Alibaba released Qwen 2.5-Max. Qwen 2.5 is the latest series of the Qwen large language</description><dc:creator>WeChat Official Account</dc:creator><category>Qwen</category><category>LLM</category><category>AI</category><category>Learning</category><category>Architecture</category><category>Transformer</category><category>Open Source</category><category>R&amp;D</category></item><item><title>NVIDIA Environment Variable Configuration</title><link>https://www.chenshaowen.com/en/blog/nvidia-environment-variable-configuration.html</link><pubDate>Mon, 20 Jan 2025 01:00:00 +0000</pubDate><atom:modified>Mon, 20 Jan 2025 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nvidia-environment-variable-configuration.html</guid><description>NVIDIA_VISIBLE_DEVICES Specifies the GPU devices visible to the program
1 CUDA_VISIBLE_DEVICES=0,1 Available values:
1,2, a comma-separated list of GPU UUIDs or indices all, all GPUs none, load the driver but with no GPU access void, do not load the driver NVIDIA_DRIVER_CAPABILITIES Controls which driver libraries/binaries will be installed inside the container</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>NVIDIA</category><category>GPU</category><category>Environment Variables</category><category>Configuration</category></item><item><title>Ascend Environment Variable Configuration</title><link>https://www.chenshaowen.com/en/blog/ascend-environment-variable-configuration.html</link><pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Mon, 20 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ascend-environment-variable-configuration.html</guid><description>HCCL_IF_IP Configures the IP of the root communication NIC for HCCL initialization.
Priority: environment variable HCCL_IF_IP &amp;gt; environment variable HCCL_SOCKET_IFNAME &amp;gt; NICs other than docker/lo (in ascending lexicographic order of NIC name) &amp;gt; docker NIC &amp;gt; lo NIC.
1 export HCCL_IF_IP=10.0.0.1 HCCL_IF_BASE_PORT Specifies the starting port number of the Host NIC.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Ascend</category><category>Huawei</category><category>NPU</category><category>Environment Variables</category><category>Configuration</category></item><item><title>Maintaining JuiceFS Enterprise Edition under Fluid</title><link>https://www.chenshaowen.com/en/blog/fluid-juicefs-enterprise-maintenance.html</link><pubDate>Sat, 18 Jan 2025 01:00:00 +0000</pubDate><atom:modified>Sat, 18 Jan 2025 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-juicefs-enterprise-maintenance.html</guid><description>1. Setting Environment Variables 1 2 export NAMESPACE=xxx export PVC=xxx 2. The Dataset Will Not Become Ready 2.1 Fluid Component Problems 1 kubectl -n fluid-system get pod -o wide | grep -v &amp;#34;Running&amp;#34; There may be cases where something did not start up properly.
2.2 Abnormally Terminated Datasets Abnormal resources can cause Fluid resources to restart repeatedly, and manual intervention is required to delete them.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>Kubernetes</category><category>Storage</category><category>AI</category><category>Data</category><category>Operations</category></item><item><title>Using vLLM for Model Inference</title><link>https://www.chenshaowen.com/en/blog/use-vllm-for-inference.html</link><pubDate>Sat, 18 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Sat, 18 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-vllm-for-inference.html</guid><description>1. Environment Preparation Download Miniforge 1 wget &amp;#34;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh&amp;#34; Install Miniforge 1 bash Miniforge3-$(uname)-$(uname -m).sh 1 2 echo &amp;#34;export PATH=$HOME/miniforge3/bin:$PATH&amp;#34; &amp;gt;&amp;gt; ~/.bashrc source ~/.bashrc Create the environment 1 conda create -n vllm python=3.12 vLLM currently requires Python 3.9+. Activate the environment 1 conda activate vllm Install dependencies 1 conda install</description><dc:creator>WeChat Official Account</dc:creator><category>vLLM</category><category>AI</category><category>LLM</category><category>Inference</category><category>Operations</category></item><item><title>Building Multi-Arch Images with Nerdctl</title><link>https://www.chenshaowen.com/en/blog/use-nerdctl-to-build-multi-architecture-images.html</link><pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Fri, 17 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-nerdctl-to-build-multi-architecture-images.html</guid><description>1. Installing Nerdctl Install Opscli 1 curl -sfL https://raw.githubusercontent.com/shaowenchen/ops/main/getcli.sh |VERSION=latest sh - Install Nerdctl 1 opscli task -f install-nerdctl --arch amd64 2. BuildKit Download Buildkit 1 wget https://github.com/moby/buildkit/releases/download/v0.19.0-rc2/buildkit-v0.19.0-rc2.linux-amd64.tar.gz Install Buildkit 1 2 tar xvf buildkit-*.tar.gz mv bin/* /usr/local/bin/ Configure Buildkitd 1 mkdir -p /etc/buildkit /data/buildkit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat &amp;gt; /etc/buildkit/buildkitd.</description><dc:creator>WeChat Official Account</dc:creator><category>Multi-Arch</category><category>Images</category><category>CI</category><category>Nerdctl</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>CICD</category><category>containerd</category><category>Build</category></item><item><title>Using a vLLM Application to Verify an Inference Node</title><link>https://www.chenshaowen.com/en/blog/use-vllm-verify-inference-node.html</link><pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 16 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-vllm-verify-inference-node.html</guid><description>1. Building the Image To make testing convenient, the model files are packaged into the image here. Download the model 1 2 3 4 git clone https://huggingface.co/Qwen/Qwen1.5-1.8B-Chat cd Qwen1.5-1.8B-Chat &amp;amp;&amp;amp; git lfs pull rm -rf .git cd .. Write the Dockerfile 1 2 3 4 5 cat &amp;lt;&amp;lt;EOF &amp;gt; Dockerfile</description><dc:creator>WeChat Official Account</dc:creator><category>vLLM</category><category>Inference</category><category>AI</category><category>LLM</category><category>Operations</category></item><item><title>AI Application Development Tech Stack</title><link>https://www.chenshaowen.com/en/blog/ai-application-development-tech-stack.html</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-application-development-tech-stack.html</guid><description>Embedding Models Embedding models map high-dimensional data into a lower-dimensional space, which makes the data easier to process and analyze.
Text Models Here is a leaderboard, https://huggingface.co/spaces/mteb/leaderboard
The leaderboard above gives each model&amp;rsquo;s score, parameter count, memory usage, vector dimension, maximum tokens, and other information. Below are some commonly used open-source models:</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Application Development</category><category>Tech Stack</category><category>LLM</category><category>R&amp;D</category><category>Learning</category><category>RAG</category><category>Embedding</category><category>Best Practices</category></item><item><title>Deploying Jumpserver as a Bastion Host on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-deploy-jumpserver-on-kubernetes.html</link><pubDate>Thu, 09 Jan 2025 00:00:00 +0000</pubDate><atom:modified>Thu, 09 Jan 2025 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-deploy-jumpserver-on-kubernetes.html</guid><description>1. Deploying Jumpserver You need a StorageClass ready in advance to store Jumpserver&amp;rsquo;s data. Besides the database mentioned below, each component — jms-core, jms-web, jms-koko, jms-lion, jms-chen — also needs a PV for storage. 1.1 Deploying MySQL Refer to https://github.com/shaowenchen/ops-hub/blob/main/database/mysql8.yaml to deploy MySQL. You need to adjust the StorageClass field</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Jumpserver</category><category>Security</category><category>Operations</category><category>Bastion Host</category><category>Deployment</category><category>Learning</category></item><item><title>Using the Ops Project to View and Monitor Cluster Events</title><link>https://www.chenshaowen.com/en/blog/use-ops-to-view-and-monitor-cluster-events.html</link><pubDate>Wed, 11 Dec 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Dec 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-ops-to-view-and-monitor-cluster-events.html</guid><description>https://github.com/shaowenchen/ops
1. Alerting on Kubernetes Cluster Events Monitor specified keywords 1 2 3 4 5 6 7 8 9 10 11 apiVersion: crd.chenshaowen.com/v1 kind: EventHooks metadata: name: kube-pod-falid namespace: ops-system spec: type: xiezuo url: https://xxx.com/api/v1/webhook/send?key=xxx subject: &amp;#34;ops.clusters.*.namespaces.*.pods.*.event&amp;#34; keywords: - failed A simple configuration like this yields a large number of related alerts.</description><dc:creator>WeChat Official Account</dc:creator><category>Ops</category><category>Kubernetes</category><category>Operations</category><category>Events</category><category>Monitoring</category><category>Automation</category></item><item><title>Using Fluid and S3FS to Access S3 Storage and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-fluid-and-s3fs-to-access-s3-storage-and-performance-testing.html</link><pubDate>Thu, 05 Dec 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 05 Dec 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-fluid-and-s3fs-to-access-s3-storage-and-performance-testing.html</guid><description>This post uses Fluid 1.0. In later versions the configuration file paths changed, so adjust according to your actual situation.
1. Building the Image 1.1 fluid_config_init.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #!</description><dc:creator>WeChat Official Account</dc:creator><category>s3</category><category>Fluid</category><category>JuiceFS</category><category>AI</category><category>Data</category></item><item><title>Using Fluid to Access S3 Storage and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-fluid-to-access-s3-storage-and-performance-testing.html</link><pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 04 Dec 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-fluid-to-access-s3-storage-and-performance-testing.html</guid><description>1. Jindo Mounting S3 Set the environment variables 1 2 3 4 export ENDPOINT=obs.ap-southeast-3.myhuaweicloud.com export BUCKET= export AK= export SK= Create the credentials 1 2 3 4 5 6 7 8 9 10 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: v1 kind: Secret metadata: name: mys3secret type: Opaque stringData: fs.s3.accessKeyId: ${AK} fs.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Fluid</category><category>JuiceFS</category><category>S3</category><category>Storage</category><category>Data Management</category><category>Performance Testing</category><category>AI</category><category>Operations</category></item><item><title>Using TensorBoard to Visualize the PyTorch Training Process</title><link>https://www.chenshaowen.com/en/blog/using-tensorboard-to-visualize-pytorch-training-process.html</link><pubDate>Sun, 17 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 17 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-tensorboard-to-visualize-pytorch-training-process.html</guid><description>1. What TensorBoard Is TensorBoard is mainly used to monitor how a model&amp;rsquo;s various metrics change — accuracy, loss, the weight distributions of each layer, and so on.
TensorBoard is a visualization tool from TensorFlow that supports visualizing scalar, text, image, audio, video, and embedding data, among other types. But PyTorch can use TensorBoard too.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>PyTorch</category><category>TensorBoard</category><category>Training</category><category>R&amp;D</category></item><item><title>Training a Model on the MNIST Dataset with PyTorch</title><link>https://www.chenshaowen.com/en/blog/using-pytorch-to-train-model-on-mnist-dataset.html</link><pubDate>Sat, 16 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 16 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-pytorch-to-train-model-on-mnist-dataset.html</guid><description>1. Create the Training Script Create a training script mnist.py with the following contents: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>PyTorch</category><category>Training</category><category>Containers</category></item><item><title>Switch to a Specific Kernel Version on Ubuntu</title><link>https://www.chenshaowen.com/en/blog/set-specific-kernel-version-in-ubuntu/</link><pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 14 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/set-specific-kernel-version-in-ubuntu/</guid><description>1. Installing a New Kernel Version Installing from the apt repositories is recommended, so you avoid installing an incompatible kernel version.
1.1 Installing from the Repository List the available versions 1 2 3 4 apt list linux-headers-5.15.*-*-generic linux-image-5.15.*-*-generic linux-image-5.15.0-94-generic/focal-updates,focal-security 5.15.0-94.104~20.04.1 amd64 linux-image-5.15.0-97-generic/focal-updates,focal-security 5.15.0-97.107~20.04.1 amd64 Install the kernel 1 apt install linux-image-5.</description><dc:creator>WeChat Official Account</dc:creator><category>Ubuntu</category><category>Linux</category><category>Kernel</category><category>Operations</category></item><item><title>MPI Communication Primitives and Their Use in Python Programming</title><link>https://www.chenshaowen.com/en/blog/mpi-communication-primitives-and-python-programming.html</link><pubDate>Sun, 10 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 10 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/mpi-communication-primitives-and-python-programming.html</guid><description>1. What MPI Is MPI, the Message Passing Interface, is a communication protocol used for parallel computing. MPI provides a set of standardized interfaces for transferring data between different compute nodes, and is widely used in scientific computing, machine learning, deep learning, and other fields. MPI has multiple implementations; the</description><dc:creator>WeChat Official Account</dc:creator><category>MPI</category><category>AI</category><category>Distributed Systems</category><category>Communication</category></item><item><title>Ops v1.0.0 Released</title><link>https://www.chenshaowen.com/en/blog/ops-v1.0.0.html</link><pubDate>Thu, 07 Nov 2024 11:22:55 +0000</pubDate><atom:modified>Thu, 07 Nov 2024 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ops-v1.0.0.html</guid><description>Based on real production needs, I recently made several important updates to https://github.com/shaowenchen/ops and released version v1.0.0. Here I mainly introduce the key features of this release.
1. Support for Multi-Cluster Task Execution In practice, the recommendation is:
Create the hosts of the current cluster as Hosts You can create multiple Clusters, and the Cluster objects you own are the clusters under management Task and Pipeline objects are automatically synchronized to all Clusters under the cluster, with no manual trigger required.</description><dc:creator>WeChat Official Account</dc:creator><category>Ops</category><category>Operations</category><category>Kubernetes</category><category>Tools</category></item><item><title>Several Common Network Topology Structures</title><link>https://www.chenshaowen.com/en/blog/common-network-topology.html</link><pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 06 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-network-topology.html</guid><description>1. Fat-Tree In 1985, Charles E. Leiserson of MIT invented the Fat-Tree network. As shown in the figure below, a fat-tree network is a binary tree in which bandwidth gradually increases from the root nodes down to the leaf nodes.
In August 2008, a group of computer scientists at UC San Diego published a scalable network architecture design that adopted a topology inspired by the fat-tree topology, achieving better scalability than previous hierarchical networks.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Network</category><category>Topology</category><category>Operations</category><category>Learning</category><category>Data Center</category><category>Fat-Tree</category></item><item><title>RDMA Technology</title><link>https://www.chenshaowen.com/en/blog/rdma-technique.html</link><pubDate>Tue, 05 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 05 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/rdma-technique.html</guid><description>1. What RDMA Is RDMA (Remote Direct Memory Access) is a technology created to solve the delay of server-side data processing in network transmission.
With TCP/IP transmission, data passes through the network stack, then through the NIC to be sent; after the receiver receives it, the data is reassembled according to sequence numbers.</description><dc:creator>WeChat Official Account</dc:creator><category>RDMA</category><category>Network</category><category>High Performance Computing</category><category>Hardware</category><category>AI</category><category>Operations</category></item><item><title>SR-IOV Technology</title><link>https://www.chenshaowen.com/en/blog/sr-iov-technique.html</link><pubDate>Sun, 03 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 03 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/sr-iov-technique.html</guid><description>1. What SR-IOV Technology Is SR-IOV (Single Root I/O Virtualization) is a virtualization technology that lets virtual machines and containers access physical hardware resources directly, improving I/O performance and reducing host CPU consumption. As shown in the figure above, SR-IOV partitions a single physical device (for example a network interface</description><dc:creator>WeChat Official Account</dc:creator><category>Virtualization</category><category>SR-IOV</category><category>Network</category><category>Operations</category><category>GPU</category></item><item><title>InfiniBand Network and Common Commands</title><link>https://www.chenshaowen.com/en/blog/infiniband-network-and-useful-commands.html</link><pubDate>Sat, 02 Nov 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 02 Nov 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/infiniband-network-and-useful-commands.html</guid><description>1. InfiniBand Network InfiniBand (abbreviated IB) is a computer network communication standard for high-performance computing. It offers extremely high throughput and very low latency, and is used for data interconnection between computers. InfiniBand is also used as a direct or switched interconnect between servers and storage systems, as well as between storage systems themselves.</description><dc:creator>WeChat Official Account</dc:creator><category>InfiniBand</category><category>Network</category><category>High Performance Computing</category><category>Hardware</category><category>Operations</category></item><item><title>Using Fluid to Access OBS Storage and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-fluid-to-access-obs-storage-and-performance-testing.html</link><pubDate>Tue, 22 Oct 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Oct 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-fluid-to-access-obs-storage-and-performance-testing.html</guid><description>1. Jindo Mounting OBS Set the environment variables 1 2 3 4 export ENDPOINT=obs.cn-north-4.myhuaweicloud.com export BUCKET= export AK= export SK= Create the credentials 1 2 3 4 5 6 7 8 9 10 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: v1 kind: Secret metadata: name: myobssecret type: Opaque stringData: fs.obs.accessKeyId: ${AK} fs.</description><dc:creator>WeChat Official Account</dc:creator><category>OBS</category><category>Fluid</category><category>JuiceFS</category><category>Kubernetes</category><category>AI</category><category>Data</category><category>Operations</category></item><item><title>Processing Data on Kubernetes with Iceberg and Spark</title><link>https://www.chenshaowen.com/en/blog/use-iceberg-and-spark-on-kubernetes.html</link><pubDate>Thu, 12 Sep 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 12 Sep 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-iceberg-and-spark-on-kubernetes.html</guid><description>1. Data Processing Architecture It is mainly divided into four layers: Processing capability layer: Spark on Kubernetes provides streaming data processing capability Data management layer: Iceberg provides dataset access operations such as ACID and tables Storage layer: Hive MetaStore manages Iceberg table metadata, PostgreSQL serves as the storage backend for</description><dc:creator>WeChat Official Account</dc:creator><category>Spark</category><category>Iceberg</category><category>Kubernetes</category><category>Big Data</category><category>Data Lake</category><category>Operations</category><category>Data Processing</category><category>Learning</category></item><item><title>How to Enable GDS on a GPU Host</title><link>https://www.chenshaowen.com/en/blog/how-to-enable-gds-on-gpu-host.html</link><pubDate>Wed, 11 Sep 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Sep 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-enable-gds-on-gpu-host.html</guid><description>1. What GDS (GPUDirectStorage) Is GDS lets an RDMA NIC access GPU memory directly, which helps increase the IO bandwidth for GPU applications reading and writing files, reduces IO latency, and lowers their CPU load.
Once the client has GDS enabled, files are opened in O_DIRECT mode and the client no longer caches file data.</description><dc:creator>WeChat Official Account</dc:creator><category>GDS</category><category>GPU</category><category>AI</category><category>Operations</category><category>Storage</category></item><item><title>What Is a Token</title><link>https://www.chenshaowen.com/en/blog/what-is-token.html</link><pubDate>Tue, 10 Sep 2024 10:00:00 +0000</pubDate><atom:modified>Tue, 10 Sep 2024 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-token.html</guid><description>A token is a unit tightly bound to data. It can be used to measure how much corpus is needed to train a model, and also to measure the input and output length at inference time. 1. What a token is A token can be a whole word, a subword,</description><dc:creator>WeChat Official Account</dc:creator><category>Machine Learning</category><category>LLM</category><category>AI</category><category>Token</category><category>Learning</category><category>NLP</category><category>Inference</category></item><item><title>What Are FLOPs</title><link>https://www.chenshaowen.com/en/blog/what-is-flops.html</link><pubDate>Mon, 09 Sep 2024 10:00:00 +0000</pubDate><atom:modified>Mon, 09 Sep 2024 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-flops.html</guid><description>1. About FLOPs FLOPs (Floating Point Operations Per Second) refers to the number of floating-point operations performed per second.
Specifically:
A single floating-point addition, such as a + b, counts as one floating-point operation. A single floating-point multiplication, such as a * b, also counts as one floating-point operation. Other basic floating-point operations, such as division and square root, can also be counted as one floating-point operation.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Machine Learning</category><category>LLM</category><category>FLOPs</category><category>Learning</category><category>Compute</category><category>Performance</category><category>Metrics</category></item><item><title>What Is PD Separation</title><link>https://www.chenshaowen.com/en/blog/what-is-pd-separation.html</link><pubDate>Sun, 08 Sep 2024 10:00:00 +0000</pubDate><atom:modified>Sun, 08 Sep 2024 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-pd-separation.html</guid><description>1. Definition There are two completely different phases in LLM inference, and PD separation is
The compute-intensive Prefill phase, LLM processes all users&amp;rsquo; input and computes the corresponding KV Cache
The memory-intensive Decode phase, sequentially producing tokens one by one, computing only a single token per memory access
2. Metrics 2.</description><dc:creator>WeChat Official Account</dc:creator><category>Machine Learning</category><category>LLM</category><category>PD</category><category>What Is</category></item><item><title>DLRover Workflow Analysis on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/kubernetes-dlrover-workflow-analysis.html</link><pubDate>Tue, 27 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 27 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-dlrover-workflow-analysis.html</guid><description>The DLRover version used in this article is 0.3.7 1. DLRover Operator 1.1 Starting the ElasticJob and ScalePlan Controllers Implementation code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 创建 ElasticJob 的控制器 if err = controllers.NewElasticJobReconciler(mgr, masterImage).SetupWithManager(mgr); err</description><dc:creator>WeChat Official Account</dc:creator><category>DLRover</category><category>Kubernetes</category><category>AI</category><category>Training</category><category>Fault Self-Healing</category><category>Operations</category></item><item><title>The Evolution of NVIDIA GPU Cores and Architectures</title><link>https://www.chenshaowen.com/en/blog/nvidia-gpu-cores-and-architecture-evolution-history.html</link><pubDate>Sun, 25 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 25 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nvidia-gpu-cores-and-architecture-evolution-history.html</guid><description>1. Product Lines GeForce Aimed at gamers, offering powerful graphics processing capabilities and advanced gaming technologies.
Common ones include the NVIDIA GTX series, the high-end RTX series, and the Titan series.
Quadro Aimed at the professional market, such as designers, engineers, scientists, and content creators.
Common ones include the Quadro P series and the high-end Quadro RTX series.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>GPU</category><category>NVIDIA</category><category>Hardware</category><category>Architecture</category><category>History</category></item><item><title>Data Parallel Architecture in Distributed Training</title><link>https://www.chenshaowen.com/en/blog/data-parallel-architecture-in-distributed-train.html</link><pubDate>Wed, 21 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 21 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/data-parallel-architecture-in-distributed-train.html</guid><description>1. Parameter Server Architecture In the Parameter Server architecture, the nodes in the cluster are divided into two categories: parameter server nodes (Parameter Server) and worker server nodes (Worker).
1.1 Parameter Server The Parameter Server is used to store the model&amp;rsquo;s parameters.
Each parameter server node is responsible for managing and updating one part of the model&amp;rsquo;s parameters, while each worker node only processes the subset of data corresponding to it.</description><dc:creator>WeChat Official Account</dc:creator><category>Distributed Systems</category><category>Training</category><category>Data Parallelism</category><category>AI</category><category>Operations</category></item><item><title>Elastic, Fault-Tolerant Training with DLRover-Managed Jobs</title><link>https://www.chenshaowen.com/en/blog/use-dlrover-to-manage-training-job.html</link><pubDate>Sat, 17 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 17 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-dlrover-to-manage-training-job.html</guid><description>1. Problems Facing Distributed Training Estimating training resources is difficult and cannot be automated How much compute, how much time, how much bandwidth, how many CPUs, how much memory — without enough accumulated experience it is hard to estimate accurately. The result is over-requesting and over-allocation, causing enormous resource waste.</description><dc:creator>WeChat Official Account</dc:creator><category>DLRover</category><category>AI</category><category>Training</category><category>Kubernetes</category><category>Elastic Training</category><category>Fault-Tolerant Training</category><category>Operations</category></item><item><title>Building a Copilot to Handle Operations Failures</title><link>https://www.chenshaowen.com/en/blog/develop-a-copilot-to-handle-exceptions.html</link><pubDate>Wed, 14 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 14 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/develop-a-copilot-to-handle-exceptions.html</guid><description>This post comes mainly from an internal sharing session, and is also a summary of some recent work. 1. The Common Failure Handling Process The figure above shows a typical operations exception handling process. Along the timeline, there are the following key points in time: Failure occurs Failure detected Failure</description><dc:creator>WeChat Official Account</dc:creator><category>LLM</category><category>Operations</category><category>Exceptions</category><category>Failures</category><category>Sharing</category></item><item><title>Migrating JuiceFS Metadata from Redis to PGSQL</title><link>https://www.chenshaowen.com/en/blog/migrate-juicefs-metadata-from-redis-to-pgsql.html</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Mon, 12 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/migrate-juicefs-metadata-from-redis-to-pgsql.html</guid><description>1. Why Migrate Metadata Storage from Redis to PGSQL PGSQL is cheaper Redis stores metadata in memory, while PGSQL stores metadata on disk, so the cost difference is obvious.
PGSQL performance is tunable Different PGSQL services offer different performance IOPS. If you do not have a continuously high performance requirement, PGSQL is a good choice.</description><dc:creator>WeChat Official Account</dc:creator><category>JuiceFS</category><category>Redis</category><category>PGSQL</category><category>Operations</category><category>Storage</category><category>Learning</category><category>Migration</category><category>Metadata</category><category>Troubleshooting</category></item><item><title>Using Volcano to Run hccl-test</title><link>https://www.chenshaowen.com/en/blog/use-volcano-to-run-hccl-test.html</link><pubDate>Sun, 11 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 11 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-volcano-to-run-hccl-test.html</guid><description>1. Building the hccl-test Image Download the dependency packages Python-3.8.18.tgz
Ascend-cann-toolkit_8.0.RC2_linux-x86_64.run
Ascend-cann-kernels-910b_8.0.RC2_linux.run
mpich-3.2.1.tar.gz
If downloading is inconvenient, you can also copy them straight out of the image I built.
Write the Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 FROM ubuntu:22.</description><dc:creator>WeChat Official Account</dc:creator><category>Volcano</category><category>HCCL</category><category>Ascend</category><category>AI</category><category>Testing</category></item><item><title>Using Volcano to Run nccl-test</title><link>https://www.chenshaowen.com/en/blog/use-volcano-to-run-nccl-test.html</link><pubDate>Sun, 11 Aug 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 11 Aug 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/use-volcano-to-run-nccl-test.html</guid><description>1. Building the nccl-test Image Check the CUDA version 1 2 3 nvidia-smi | grep &amp;#34;CUDA Version&amp;#34; | awk &amp;#39;{print $9}&amp;#39; 12.2 Write the Dockerfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat &amp;gt; Dockerfile &amp;lt;&amp;lt; EOF FROM nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04 ENV DEBIAN_FRONTEND=noninteractive ARG CONDA_VERSION WORKDIR /workspace ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update &amp;amp;&amp;amp; apt install -y openmpi-bin libopenmpi-dev ssh openssh-server net-tools vim git iputils-ping nfs-common RUN git clone https://github.</description><dc:creator>WeChat Official Account</dc:creator><category>Volcano</category><category>NCCL</category><category>Nvidia</category><category>AI</category><category>Testing</category></item><item><title>Why top node, free, and Grafana Numbers Don't Line Up</title><link>https://www.chenshaowen.com/en/blog/why-top-node-free-grafana-data-not-match.html</link><pubDate>Fri, 26 Jul 2024 01:00:00 +0000</pubDate><atom:modified>Fri, 26 Jul 2024 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/why-top-node-free-grafana-data-not-match.html</guid><description>1. top Shows Node Resource Usage Above 100% 1 2 3 4 5 6 kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% master-1 995m 16% 13760Mi 118% master-2 827m 13% 10672Mi 92% master-3 889m 14% 10244Mi 88% This is because usage is computed against allocatable resources by default, which excludes the portion reserved by Kubelet.</description><dc:creator>WeChat Official Account</dc:creator><category>Monitoring</category><category>Memory</category><category>Kubernetes</category><category>Grafana</category><category>Operations</category><category>Troubleshooting</category></item><item><title>How to View Device Information on a Server</title><link>https://www.chenshaowen.com/en/blog/how-to-get-device-information-on-server.html</link><pubDate>Thu, 25 Jul 2024 00:08:00 +0000</pubDate><atom:modified>Thu, 25 Jul 2024 00:08:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-get-device-information-on-server.html</guid><description>1. Checking the CPU Check the CPU model 1 lscpu Check the instruction set 1 cat /proc/cpuinfo | grep -iE &amp;#34;flags|instruction set&amp;#34; 2. Checking Memory Memory usage and size 1 free -h Memory module model 1 dmidecode -t memory 3. Checking Disks Check disk mounts 1 lsblk -o NAME,TYPE,SIZE,MODEL,UUID,MOUNTPOINT Check disk usage 1 df -H | grep -vE &amp;#39;^Filesystem|tmpfs|cdrom|loop|udev&amp;#39; | awk &amp;#39;{ print $5 &amp;#34;/&amp;#34; $2 &amp;#34; &amp;#34; $1 }&amp;#39; |grep &amp;#34; &amp;#34;/ Check disk speed 1 hdparm -t /dev/sda3 Check disk temperature and more 1 apt install smartmontools 1 (for disk in /dev/sd?</description><dc:creator>WeChat Official Account</dc:creator><category>Server</category><category>Devices</category><category>Operations</category><category>Hardware</category><category>Troubleshooting</category><category>Learning</category><category>Linux</category></item><item><title>Thoughts on Building a Storage System During Model Development</title><link>https://www.chenshaowen.com/en/blog/some-things-about-storage-system-in-model-development-process.html</link><pubDate>Tue, 23 Jul 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Jul 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-things-about-storage-system-in-model-development-process.html</guid><description>This article is compiled from part of an internal sharing session I gave.
1. Core Elements of a Storage System 1.1 Security Credentials for object storage buckets, authorization when using storage PVCs, and control over access sources — these are all issues security needs to address.
But they are also very easy to overlook, and when something goes wrong it is a big problem.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Model Data</category><category>R&amp;D Process</category><category>Storage</category><category>LLM</category><category>Operations</category><category>Architecture</category><category>Thoughts</category></item><item><title>Some Ideas for a MemoryFS Storage System</title><link>https://www.chenshaowen.com/en/blog/something-about-memoryfs-storage-system.html</link><pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 12 Jun 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/something-about-memoryfs-storage-system.html</guid><description>1. Using Memory as a Storage Medium The image above is the storage pyramid, showing the relationship between the price of a storage medium and its speed.
Today, enterprises widely adopt tape and disks as storage media mainly because of their price advantage. Market prices are driven by supply and demand: even for an expensive storage medium, if the production cost is low, the market is large enough, and the yield rate in the production process is high, its market price will come down.</description><dc:creator>WeChat Official Account</dc:creator><category>Storage</category><category>Memory</category><category>MemoryFS</category><category>AI</category><category>Thoughts</category><category>Architecture</category><category>High Performance</category><category>Learning</category></item><item><title>Using Fluid to Access OSS Storage and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/using-fluid-to-access-oss-storage-and-performance-testing.html</link><pubDate>Tue, 11 Jun 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 11 Jun 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-fluid-to-access-oss-storage-and-performance-testing.html</guid><description>1. Jindo Directly Accelerating OSS Set the environment variables 1 2 3 4 5 6 7 export ENDPOINT=oss-cn-beijing-internal.aliyuncs.com export BUCKET= export AK= export SK= export NAMESPACE=default export PVC=myoss-jindo export URI=datacenter Create the credentials 1 2 3 4 5 6 7 8 9 10 11 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion:</description><dc:creator>WeChat Official Account</dc:creator><category>OSS</category><category>Fluid</category><category>JuiceFS</category><category>AI</category><category>Data</category></item><item><title>How to Warm Up JuiceFS Data</title><link>https://www.chenshaowen.com/en/blog/how-to-warmup-juicefs-data.html</link><pubDate>Sun, 09 Jun 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Jun 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-warmup-juicefs-data.html</guid><description>1. About JuiceFS Caching On a host, warmed cache is placed directly on the host.
In a cluster, there are two levels of cache:
Worker, which provides cache shared at the cluster level Fuse, which provides cache at the current node level only 2. Warming Data with the JuiceFS Client Note that warming at the Fuse layer is only effective for the current node; if you need to warm the whole cluster, you must warm at the Worker layer.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>AI</category><category>Data</category><category>Kubernetes</category><category>Storage</category><category>Operations</category><category>Learning</category><category>Cache</category><category>LLM</category></item><item><title>High-Frequency IO Pods Are Not Suited to Setting a Limit</title><link>https://www.chenshaowen.com/en/blog/high-frequency-io-pod-not-suitable-for-setting-limit.html</link><pubDate>Mon, 03 Jun 2024 21:00:16 +0000</pubDate><atom:modified>Mon, 03 Jun 2024 21:00:16 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/high-frequency-io-pod-not-suitable-for-setting-limit.html</guid><description>1. Symptoms Elasticsearch on Kubernetes was restarting frequently, leaving the service almost unusable.
During data import, the Pod&amp;rsquo;s memory usage kept growing Once the Pod&amp;rsquo;s memory usage approached the Limit, continued importing triggered an abnormal Pod exit, with the error log ERROR: Elasticsearch exited unexpectedly The Pod&amp;rsquo;s memory usage did not drop; it stayed near the Limit, and before long the Pod exited abnormally again The Elasticsearch Pod&amp;rsquo;s memory limit was 64GB, while the JVM memory limit was 32GB.</description><dc:creator>WeChat Official Account</dc:creator><category>IO</category><category>Kubernetes</category><category>Elasticsearch</category><category>Operations</category></item><item><title>Deploying Elasticsearch on Memory Storage - 100M+ Records, Full-Text Search in 100ms</title><link>https://www.chenshaowen.com/en/blog/deploy-elasticsearch-using-memory-storage.html</link><pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 29 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-elasticsearch-using-memory-storage.html</guid><description>1. Mount a Memory Storage Directory on the Host Create a directory to mount 1 mkdir /mnt/memory_storage Mount the tmpfs filesystem 1 mount -t tmpfs -o size=800G tmpfs /mnt/memory_storage Storage is allocated on demand, so using 100G of storage only consumes 100G of memory. The host node has 2T of memory, and here 800G is allocated to store Elasticsearch data.</description><dc:creator>WeChat Official Account</dc:creator><category>Elasticsearch</category><category>High Performance</category><category>Full-Text Search</category><category>Operations</category><category>Storage</category><category>Search</category></item><item><title>Ascend NPU Driver Installation</title><link>https://www.chenshaowen.com/en/blog/ascend-npu-driver-installation.html</link><pubDate>Tue, 28 May 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 28 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ascend-npu-driver-installation.html</guid><description>1. Install the Driver Create the HwHiAiUser user 1 2 groupadd -g 1000 HwHiAiUser useradd -g HwHiAiUser -u 1000 -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash Add directory permissions 1 2 chown -R HwHiAiUser /usr/local/Ascend chmod -R 755 /usr/local/Ascend Download the driver and firmware Go to https://www.hiascend.ru/hardware/firmware-drivers/community?product=1&amp;amp;model=30&amp;amp;cann=All&amp;amp;driver=1.0.26.alpha to find the matching driver and firmware.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>NPU</category><category>Ascend</category><category>Huawei</category><category>Hardware</category><category>Drivers</category><category>Operations</category></item><item><title>Data Storage in the Model R&amp;D Lifecycle</title><link>https://www.chenshaowen.com/en/blog/data-storage-in-model-development-cycle.html</link><pubDate>Sun, 26 May 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 26 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/data-storage-in-model-development-cycle.html</guid><description>1. Data Delivery Based on Object Storage As shown above, model R&amp;amp;D mainly involves three sub-platforms:
Data platform The data platform is mainly responsible for data-related management, such as data ingestion and data processing, ultimately producing the data needed for training.
The data platform stores raw data in object storage. During processing, it fetches data from object storage, processes it, and stores the result back in object storage.</description><dc:creator>WeChat Official Account</dc:creator><category>LLM</category><category>Model</category><category>JuiceFS</category><category>Data Storage</category></item><item><title>Storage Performance and Cost Comparison</title><link>https://www.chenshaowen.com/en/blog/comparison-of-storage.html</link><pubDate>Sat, 25 May 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 25 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/comparison-of-storage.html</guid><description>1. Storage Tiering and Interconnect 2. Various Storage Types Storage Type Bandwidth Capacity Response Latency Cost per Unit of Storage Storage Principle Use Case CPU L1 Cache 256-512GB/s 32-64KB/core &amp;lt;1ns ~$2000/MB SRAM Closest cache layer to CPU core CPU L2 Cache 64-256GB/s 256KB-2MB/core group 2-5ns ~$1000/MB Partly SRAM, partly embedded DRAM Next-level cache for the CPU CPU L3 Cache 32-128GB/s 4-16MB/CPU 5-15ns ~$100-200/MB Embedded DRAM Last-level cache for the CPU GPU L1 Cache 8-32TB/s 16-96KB/SM &amp;lt;1ns ~$2000/MB SRAM Closest cache layer to GPU core GPU L2 Cache 1-4TB/s 512KB-4MB/SMC 5-15ns ~$500-1000/MB Partly SRAM, partly embedded DRAM Next-level cache for the GPU Main memory (RAM) 10-80GB/s 4-128GB 30-60ns ~$2-7/GB DDR4/5 DRAM System main storage space GPU VRAM 768GB/s-4TB/s 4-24GB 25-75ns ~$7-20/GB GDDR6/6X SDRAM Dedicated high-speed buffer storage for the GPU SSD 500MB/s-7000MB/s 128GB-8TB 0.</description><dc:creator>WeChat Official Account</dc:creator><category>Storage</category><category>Storage Tiering</category><category>AI</category><category>Operations</category></item><item><title>Using JuiceFS to Store Elasticsearch Data</title><link>https://www.chenshaowen.com/en/blog/store-elasticsearch-data-in-juicefs.html</link><pubDate>Wed, 22 May 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 22 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/store-elasticsearch-data-in-juicefs.html</guid><description>1. Storage Options There are three storage approaches:
Isolate by directory and share a single JuiceFS Elasticsearch nodes share one JuiceFS instance, mounting different Elasticsearch nodes through subdirectories.
/0/ corresponds to node Node-0
/1/ corresponds to node Node-1
/2/ corresponds to node Node-2
The main advantage of this approach is that it is easy to scale and simple to configure.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>JuiceFS</category><category>Elasticsearch</category><category>Storage</category><category>Operations</category></item><item><title>Mounting S3 as a PVC with Fluid and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/fluid-using-s3-as-pvc.html</link><pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 19 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-using-s3-as-pvc.html</guid><description>1. Create the Dataset 1 2 3 4 5 6 7 8 9 10 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: v1 kind: Secret metadata: name: my-s3 type: Opaque stringData: aws.accessKeyId: xxx aws.secretKey: xxx EOF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: data.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>Kubernetes</category><category>Storage</category><category>AI</category><category>Data</category></item><item><title>Fluid Directly Mounting S3 and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/fluid-mount-s3-and-performance-testing.html</link><pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 16 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-mount-s3-and-performance-testing.html</guid><description>1. Packaging the Fluid Runtime Image Create the fluid_config_init.py script 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #!/usr/bin/env python import json rawStr = &amp;#34;&amp;#34; with open(&amp;#34;/etc/fluid/config.json&amp;#34;, &amp;#34;r&amp;#34;) as f: rawStr = f.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>Kubernetes</category><category>Storage</category><category>AI</category><category>Data</category></item><item><title>Fluid Using Lustre Runtime and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/fluid-using-lustre-runtime-and-performance-testing.html</link><pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 16 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-using-lustre-runtime-and-performance-testing.html</guid><description>1. Analyzing How Fluid Mounts NFS Storage Inspect the Fuse Pod 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 kubectl get pod nfs-demo-fuse-f9wg8 -oyaml apiVersion: v1 kind: Pod metadata: generateName: nfs-demo-fuse- spec: containers: - command: - /usr/local/bin/entrypoint.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>AI</category><category>Data</category><category>Lustre</category></item><item><title>Fluid Using NFS Runtime and Performance Testing</title><link>https://www.chenshaowen.com/en/blog/fluid-using-nfs-runtime-and-performance-testing.html</link><pubDate>Tue, 14 May 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 14 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fluid-using-nfs-runtime-and-performance-testing.html</guid><description>1. Creating a Dataset 1 2 3 4 5 6 7 8 9 10 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: nfs-demo spec: mounts: - mountPoint: x.x.x.x:/x-x/ name: nfs-demo EOF 2. Creating a Runtime 1 2 3 4 5 6 7 8 9 10 11 12 13 14 kubectl apply -f - &amp;lt;&amp;lt;EOF apiVersion: data.</description><dc:creator>WeChat Official Account</dc:creator><category>Fluid</category><category>JuiceFS</category><category>Kubernetes</category><category>Storage</category><category>AI</category><category>Data</category></item><item><title>Aligning with Ops: Rewriting Ops Copilot with a New Approach, Updated</title><link>https://www.chenshaowen.com/en/blog/ops-copilot-has-been-updated-using-pipeline-and-llm.html</link><pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 01 May 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ops-copilot-has-been-updated-using-pipeline-and-llm.html</guid><description>1. Making Ops Copilot an Ops Coilot In September 2023, I wrote a version of Ops Copilot, and published an article about it, I&amp;rsquo;m Writing a Copilot for My Ops Tool. The effect it achieved was like this: 1 2 3 4 5 6 7 8 9 10 Opscli&amp;gt; 打</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Copilot</category><category>Agent</category><category>LLM</category><category>Ops</category><category>Operations</category></item><item><title>What Is MLOps</title><link>https://www.chenshaowen.com/en/blog/what-is-mlops.html</link><pubDate>Sat, 27 Apr 2024 10:00:00 +0000</pubDate><atom:modified>Sat, 27 Apr 2024 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-mlops.html</guid><description>1. What Is MLOps MLOps is short for Machine Learning Operations, and it describes the standardization and engineering of the entire lifecycle around model development.
MLOps includes the following key steps:
Data management: storing, accessing, cleaning, and transforming data Model development: algorithm development and model construction Model training and tuning: training models on data, adjusting hyperparameters to optimize the model, and fine-tuning models Model evaluation: testing a model&amp;rsquo;s accuracy, generalization ability, and performance metrics Model deployment: deploying the model to the target environment and converting the model Model monitoring: monitoring the model&amp;rsquo;s behavior, performance degradation, data drift, and robustness Another similar concept is ModelOps.</description><dc:creator>WeChat Official Account</dc:creator><category>Machine Learning</category><category>MLOps</category><category>LLM</category><category>R&amp;D</category><category>What Is</category></item><item><title>Model Parallel Training Techniques</title><link>https://www.chenshaowen.com/en/blog/model-parallel-training-techniques.html</link><pubDate>Thu, 04 Apr 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Apr 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/model-parallel-training-techniques.html</guid><description>1. Data Parallelism Training steps:
The master device loads the model and copies the model parameters to every worker device The master device splits the training data along the batch dimension and passes each batch to every worker device Each worker device performs training The master device aggregates the gradients from each worker device and updates the model parameters The master device broadcasts the model parameters to every worker device, preparing for the next batch of training Core idea:</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Training</category><category>Model</category><category>LLM</category><category>Distributed Systems</category><category>Learning</category><category>GPU</category></item><item><title>Common AI Base Images and Startup Commands</title><link>https://www.chenshaowen.com/en/blog/common-ai-base-images-and-run-command.html</link><pubDate>Thu, 28 Mar 2024 00:01:00 +0000</pubDate><atom:modified>Thu, 28 Mar 2024 00:01:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-ai-base-images-and-run-command.html</guid><description>1. What the Image Tag Suffixes Mean base/cuda: includes the CUDA runtime
runtime: builds on base, adding the CUDA math libraries and the NCCL and cuDNN runtimes
devel: builds on runtime, adding headers and the development tools used to build CUDA images; particularly useful for multi-stage builds
cuddn: builds on the above, adding the cuDNN neural network acceleration library</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Images</category><category>Containers</category><category>Docker</category><category>GPU</category><category>LLM</category><category>Operations</category><category>R&amp;D</category></item><item><title>Conda Installation and Use</title><link>https://www.chenshaowen.com/en/blog/conda-install-and-use.html</link><pubDate>Thu, 28 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 28 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/conda-install-and-use.html</guid><description>1. Installing conda 1 2 3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh rm -rf Miniconda3-latest-Linux-x86_64.sh However, Miniconda cannot be used for free at large-scale commercial deployments, so you can use Miniforge as a drop-in alternative.
1 2 wget &amp;#34;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh&amp;#34; bash Miniforge3-$(uname)-$(uname -m).sh 2. Changing the default configuration 2.1 Initializing the Shell Without initialization, activating an environment reports CondaError: Run 'conda init' before 'conda activate'.</description><dc:creator>WeChat Official Account</dc:creator><category>Conda</category><category>Python</category><category>AI</category><category>Environment</category><category>Operations</category></item><item><title>Event-Driven Workflows with Argo Events</title><link>https://www.chenshaowen.com/en/blog/event-driven-workflow-using-argo-events.html</link><pubDate>Wed, 27 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 27 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/event-driven-workflow-using-argo-events.html</guid><description>1. How Argo Events Works The diagram above is from the official Argo Events website. An event processing system has three important parts:
Ingesting event sources, which corresponds to the Event Source Distributing events, which corresponds to the Event Sensor Consuming events, which corresponds to the Event Trigger The event messages are stored in the EventBus, which uses NATS by default.</description><dc:creator>WeChat Official Account</dc:creator><category>Argo</category><category>Argo Events</category><category>Kubernetes</category><category>CICD</category><category>Event-Driven</category><category>Operations</category></item><item><title>Volcano Basics</title><link>https://www.chenshaowen.com/en/blog/the-basic-of-volcano.html</link><pubDate>Sun, 24 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 24 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-basic-of-volcano.html</guid><description>1. Introduction to Volcano Volcano is a Kubernetes-based resource scheduling system open-sourced by Huawei. Compared with the native scheduler, its notable features are:
Supports gang scheduling Scheduling batch jobs easily runs into deadlock: for example, two jobs each need 10 Pods running simultaneously to start. When both jobs are submitted at the same time, it is possible that only part of the Pods of each are scheduled, so neither job can run properly and they wait on each other.</description><dc:creator>WeChat Official Account</dc:creator><category>Volcano</category><category>AI</category><category>Kubernetes</category><category>Scheduling</category><category>Operations</category></item><item><title>Basic Usage of npu-smi</title><link>https://www.chenshaowen.com/en/blog/basic-usage-of-npu-smi.html</link><pubDate>Wed, 20 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 20 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-usage-of-npu-smi.html</guid><description>1. What Is npu-smi npu-smi is a command-line tool provided by Huawei, purpose-built for managing and monitoring the status and performance of Huawei Ascend series Neural Processing Units (NPUs), similar to NVIDIA&amp;rsquo;s nvidia-smi.
2. Meaning of npu-smi Fields 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 npu-smi info +------------------------------------------------------------------------------------------------+ | npu-smi 23.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>NPU</category><category>Huawei</category><category>Ascend</category><category>Hardware</category><category>Monitoring Tools</category><category>Operations</category></item><item><title>AI Chip High-Speed Interconnect Solutions</title><link>https://www.chenshaowen.com/en/blog/ai-chip-high-speed-connection-solution.html</link><pubDate>Tue, 19 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 19 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-chip-high-speed-connection-solution.html</guid><description>I have been studying the infrastructure around model training lately, and I found that AI chip interconnect topology determines the scheduling and resource allocation of training cluster jobs. So I spent a little time putting together the common AI chip interconnect solutions.
1. Point-to-Point Interconnect In a traditional PCIe system, data transfer between AI chips goes over PCIe, which cannot meet the demands of large-scale data transfer.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Chip</category><category>Interconnect</category><category>Hardware</category><category>Operations</category></item><item><title>Common GPU Operations and Fault Handling</title><link>https://www.chenshaowen.com/en/blog/common-gpu-operation-and-fault-handling.html</link><pubDate>Mon, 18 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Mon, 18 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-gpu-operation-and-fault-handling.html</guid><description>Content referenced or recorded while handling faults, continuously updated.
1. XID Error Events XID is NVIDIA&amp;rsquo;s error code. You can retrieve it with the command:
1 dmesg -T | grep -i &amp;#34;NVRM: Xid&amp;#34; or
1 journalctl --since `date -d &amp;#34;10 days ago&amp;#34; &amp;#34;+%Y-%m-%d&amp;#34;`|grep Xid The XID lets you locate the fault.</description><dc:creator>WeChat Official Account</dc:creator><category>GPU</category><category>NVIDIA</category><category>AI</category><category>Hardware</category><category>Operations</category><category>Troubleshooting</category></item><item><title>After a Month, I Finally Found an Approach to Writing an AI Agent</title><link>https://www.chenshaowen.com/en/blog/provide-a-way-to-develop-ai-agent.html</link><pubDate>Sat, 16 Mar 2024 08:01:28 +0000</pubDate><atom:modified>Sat, 16 Mar 2024 08:01:28 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/provide-a-way-to-develop-ai-agent.html</guid><description>1. Keep Trying to Ship the AI Application Side Based on my understanding of operations, I developed an open-source operations tool, https://github.com/shaowenchen/ops . The Ops tool divides operations work into two categories — script execution and file distribution — and both operations targets, hosts and Kubernetes clusters, implement both of</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>AI</category><category>Agent</category><category>LLM</category><category>Ops</category><category>Operations</category></item><item><title>Creating a PVC Backed by JuiceFS (Enterprise Edition) in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-quickly-create-juicefs-enterprise-pvc-in-kubernetes.html</link><pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Fri, 08 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-quickly-create-juicefs-enterprise-pvc-in-kubernetes.html</guid><description>This post mainly records the script for creating an enterprise-edition JuiceFS PVC, to make configuration quick.
1. Set Environment Variables 1.1 Basic Configuration 1 2 3 export NAMESPACE= export PVC_NAME= export JUICEFS_VOLUME= 1.2 JuiceFS Credentials 1 2 3 export TOKEN= export ACCESS_KEY= export SECRET_KEY= 1.3 JuiceFS Service Configuration 1 2 export BASE_URL=http://x.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Storage</category><category>JuiceFS</category><category>Kubernetes</category><category>Fluid</category><category>Operations</category><category>PVC</category><category>Enterprise Edition</category></item><item><title>Creating a PVC Backed by JuiceFS (Community Edition) in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-quickly-create-juicefs-pvc-in-kubernetes.html</link><pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 07 Mar 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-quickly-create-juicefs-pvc-in-kubernetes.html</guid><description>This post mainly records the script for creating a community-edition JuiceFS PVC, to make configuration quick. For component deployment, see Managing Data in Kubernetes with Fluid and JuiceFS.
1. Set Environment Variables Bucket configuration 1 2 3 4 5 6 export ACCESS_KEY= export SECRET_KEY= export BUCKET= export ENDPOINT=ks3-cn-beijing-internal.ksyun.com export BUCKET_ENPOINT=$BUCKET.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Storage</category><category>JuiceFS</category><category>Kubernetes</category><category>Fluid</category><category>Operations</category><category>PVC</category></item><item><title>Introduction to Argo Core Components</title><link>https://www.chenshaowen.com/en/blog/introduction-to-argo-core-components.html</link><pubDate>Fri, 23 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Fri, 23 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/introduction-to-argo-core-components.html</guid><description>1. Introduction to Argo Argo is an open source project that provides a set of tools on Kubernetes for building and running applications. The core components of Argo mainly include the following:
Argo CD Argo CD is a GitOps-based continuous delivery tool that allows users to declaratively manage the deployment of applications in a Kubernetes cluster.</description><dc:creator>WeChat Official Account</dc:creator><category>Argo</category><category>Argo CD</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category><category>Operations</category></item><item><title>Ops Adds Server and UI Services</title><link>https://www.chenshaowen.com/en/blog/ops-added-server-and-ui-services.html</link><pubDate>Wed, 14 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 14 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ops-added-server-and-ui-services.html</guid><description>1. What the Ops Project Is I introduced a commonly used Ops tool in an earlier article.
The design philosophy behind Ops is that the core of an operations tool lies in text distribution and script execution; once these two capabilities are in place, they can satisfy operational requirements.
My main operational targets at the moment are Host machines and Kubernetes clusters, so at the OpsObject layer I implemented the Host and Cluster objects, corresponding to hosts and Kubernetes clusters respectively.</description><dc:creator>WeChat Official Account</dc:creator><category>Ops</category><category>Copilot</category><category>Kubernetes</category><category>Operations</category></item><item><title>Speeding Up Model Inference with TensorRT</title><link>https://www.chenshaowen.com/en/blog/speeding-up-model-inference-with-tensorrt.html</link><pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 06 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/speeding-up-model-inference-with-tensorrt.html</guid><description>1. What Is TensorRT TensorRT is a C++ library mainly used for high-performance inference acceleration on NVIDIA GPUs. It provides both a C++ API and a Python API for integration. The mainstream deep learning frameworks TensorRT supports are: Caffe, where TensorRT can read the prototxt format directly TensorFlow, where the</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>TensorRT</category><category>NVIDIA</category><category>GPU</category><category>Inference</category><category>LLM</category></item><item><title>A Practical Guide to kind</title><link>https://www.chenshaowen.com/en/blog/practice-guide-to-kind.html</link><pubDate>Mon, 05 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Mon, 05 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/practice-guide-to-kind.html</guid><description>1. Project Overview kind is a tool for managing Kubernetes clusters using containers. Project address https://github.com/kubernetes-sigs/kind .
It is mainly used for:
Local development environments Temporary environments for learning Automated testing 2. Installing kind macOS 1 brew install kind Linux 1 2 curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.21.0/kind-linux-amd64 chmod +x /usr/local/bin/kind 3. Creating a kind Cluster If you have a PROXY configured locally, it is recommended to reset the environment variables before creating:</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kind</category><category>Practice</category><category>Operations</category></item><item><title>AI-Related Exporters in a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/ai-related-exporters-in-kubernetes.html</link><pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Sun, 04 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-related-exporters-in-kubernetes.html</guid><description>1. dcgm-exporter dcgm-exporter is the GPU monitoring tool provided by the official NVIDIA community.
Project address https://github.com/NVIDIA/dcgm-exporter
1.1 Installation Add the Helm chart repository 1 helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts 1 helm repo update Install 1 2 3 4 5 helm install dcgm-exporter gpu-helm-charts/dcgm-exporter --namespace monitor --create-namespace \ --set serviceMonitor.enabled=false \ --set image.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>AI</category><category>Metrics</category><category>Collection</category></item><item><title>Large Model Inference with Triton Server and TensorRT-LLM in a Container</title><link>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</link><pubDate>Sat, 03 Feb 2024 08:05:48 +0000</pubDate><atom:modified>Sat, 03 Feb 2024 08:05:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-triton-server-and-tensorrt-llm-under-container.html</guid><description>1. Compiling Models with TensorRT-LLM 1.1 Introduction to TensorRT-LLM When using TensorRT, you usually need to convert the model to ONNX format, then convert the ONNX to TensorRT format, and finally run inference in TensorRT or Triton Server. But this conversion process is not simple, and you often run into</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Triton</category><category>TensorRT</category><category>LLM</category><category>Inference</category><category>GPU</category><category>Operations</category><category>Containers</category><category>Learning</category></item><item><title>Basic Usage of nvidia-smi</title><link>https://www.chenshaowen.com/en/blog/basic-usage-of-nvidia-smi.html</link><pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate><atom:modified>Thu, 01 Feb 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-usage-of-nvidia-smi.html</guid><description>1. What Is nvidia-smi nvidia-smi stands for NVIDIA System Management Interface, the interface NVIDIA provides for managing and monitoring GPUs.
nvidia-smi calls NVML. NVML stands for NVIDIA Management Library, a library that provides a set of C APIs for NVIDIA GPU monitoring and management.
1.1 Queryable State ECC error counts GPU utilization Active compute processes Clocks and PState Temperature and fan speed Power management Hardware identification 1.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>GPU</category><category>NVIDIA</category><category>Hardware</category><category>Monitoring Tools</category><category>Operations</category></item><item><title>Managing Data in Kubernetes with Fluid and JuiceFS</title><link>https://www.chenshaowen.com/en/blog/managing-data-in-kubernetes-using-fluid-and-juicefs.html</link><pubDate>Sat, 27 Jan 2024 00:00:00 +0000</pubDate><atom:modified>Sat, 27 Jan 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/managing-data-in-kubernetes-using-fluid-and-juicefs.html</guid><description>1. Introduction to Fluid Below is the Fluid architecture diagram from https://github.com/fluid-cloudnative/fluid:
Fluid abstracts two concepts:
Dataset, a collection of data, the abstraction from the user&amp;rsquo;s point of view Runtime, the abstraction of the real services such as data storage and acceleration Fluid mainly solves the problems of using traditional caching systems on Kubernetes:</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Fluid</category><category>JuiceFS</category><category>Storage</category><category>Data Management</category><category>AI</category><category>Operations</category></item><item><title>JuiceFS Community Edition, Enterprise Edition, and Dragonfly Integration: Performance Testing and Comparison</title><link>https://www.chenshaowen.com/en/blog/performance-testing-and-comparison-of-juicefs-ce-ee-and-dragonfly.html</link><pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Jan 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/performance-testing-and-comparison-of-juicefs-ce-ee-and-dragonfly.html</guid><description>Note that --block-size 4096 in this post means 4GB; using --block-size 4 would be more reasonable and would give better write performance.
1. Environment Preparation Enter a safe directory 1 mkdir -p /data/test &amp;amp;&amp;amp; cd /data/test All the test tasks are carried out in this directory.
Create a separate directory for Redis 1 mkdir redis-data It is recommended to create a new directory, because Redis will change the Owner of the files in the current directory to systemd-coredump.</description><dc:creator>WeChat Official Account</dc:creator><category>JuiceFS</category><category>Dragonfly</category><category>Storage</category><category>Performance Testing</category><category>Kubernetes</category><category>Operations</category></item><item><title>Pod Health Checks Drained /run Storage Space and Nearly Sent Me Packing</title><link>https://www.chenshaowen.com/en/blog/health-check-runs-out-of-root-run-storage.html</link><pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Jan 2024 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/health-check-runs-out-of-root-run-storage.html</guid><description>If you use nvidia-container-runtime, this is worth your attention — especially if JuiceFS is also in the picture. 1. An Alert Out of Nowhere, and I Panicked Over the weekend I was studying TensorRT LLM, and while I was at it I installed Dragonfly on the largest production cluster. Then</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>NVIDIA</category><category>JuiceFS</category><category>Experience</category><category>Troubleshooting</category><category>Operations</category></item><item><title>Distributing Cluster Images with Dragonfly V2</title><link>https://www.chenshaowen.com/en/blog/distributing-image-with-dragonfly-v2.html</link><pubDate>Sat, 13 Jan 2024 11:22:55 +0000</pubDate><atom:modified>Sat, 13 Jan 2024 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/distributing-image-with-dragonfly-v2.html</guid><description>1. Introduction to Dragonfly The Dragonfly documentation at https://d7y.io/zh/docs/ already covers things in detail. Here is just a brief introduction to the main components of V2:
Manager, which provides the UI, user management, cluster monitoring, task management, and other features Scheduler, which schedules traffic between Peers and provides preheating and other features Seed Peer, the back-to-source node used to download data from origin sites (Harbor, Docker.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Dragonfly</category><category>Kubernetes</category><category>Images</category><category>Image</category><category>Nydus</category><category>Configuration</category><category>Practice</category><category>Operations</category></item><item><title>Nydus Lazy-Loading Image Configuration and Practice</title><link>https://www.chenshaowen.com/en/blog/nydus-configuration-and-practice.html</link><pubDate>Sat, 06 Jan 2024 11:22:55 +0000</pubDate><atom:modified>Sat, 06 Jan 2024 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nydus-configuration-and-practice.html</guid><description>Statistics show that most files inside a container are never used. Based on this characteristic, Nydus defines a custom filesystem in the Rafs format, enabling on-demand loading of image files to solve the slow startup and storage consumption caused by large images. In AI scenarios, whether for inference or training, images often start at several GB, or even tens of GB, so Nydus is very well suited.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>Nydus</category><category>Docker</category><category>Images</category><category>Configuration</category><category>Practice</category><category>Operations</category></item><item><title>The Increment Is No More, Chaos Shall Stand</title><link>https://www.chenshaowen.com/en/blog/the-increment-is-no-longer-chaos-is-standing.html</link><pubDate>Mon, 01 Jan 2024 07:21:38 +0000</pubDate><atom:modified>Mon, 01 Jan 2024 07:21:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-increment-is-no-longer-chaos-is-standing.html</guid><description>1. Only a Wheel Turning at High Speed Stays Balanced 1.1 The Consumer-Side Boom Is Over As of June 2023, China had 1.079 billion internet users, up 11.09 million from December 2022, with an internet penetration rate of 76.4%. The consumer-side demographic dividend has passed, time spent online is also growing slowly, and there is little room left for growth in applications built on existing scenarios.</description><dc:creator>WeChat Official Account</dc:creator><category>Chaos</category><category>Thoughts</category><category>Industry</category><category>Operations</category></item><item><title>How to Add NVIDIA GPU Nodes to a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/nvidia-gpu-driver-installation.html</link><pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 28 Dec 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nvidia-gpu-driver-installation.html</guid><description>1. Disk Handling 1.1 Inspect Disks Inspect the new disk 1 fdisk -l Disk /dev/nvme1n1: 3.91 TiB, 4294967296000 bytes, 8388608000 sectors 1.2 Build a RAID0 If you have several small disks, a better approach is to build a RAID0 — this gives you not only a larger storage directory but also higher speed.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>GPU</category><category>NVIDIA</category><category>Hardware</category><category>Drivers</category></item><item><title>Integrating GPT Services into WeChat and Official Accounts</title><link>https://www.chenshaowen.com/en/blog/how-to-access-gpt-service-on-wechat.html</link><pubDate>Tue, 26 Dec 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 26 Dec 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-access-gpt-service-on-wechat.html</guid><description>Paid integration service available at 200 RMB/year; technical support is also available at 200 RMB per session, capped at 1 hour. Follow the official account to get contact details. 1. Information You Need to Provide Go to https://mp.weixin.qq.com/ and open 【Settings and</description><dc:creator>WeChat Official Account</dc:creator><category>LLM</category><category>GPT</category><category>Official Account</category><category>WeChat</category><category>AI</category><category>R&amp;D</category><category>Learning</category><category>Integration</category><category>OpenAI</category><category>Practice</category></item><item><title>A Guide to Designing and Implementing LLM Applications</title><link>https://www.chenshaowen.com/en/blog/large-model-application-design-and-implementation-guide.html</link><pubDate>Sat, 23 Dec 2023 11:22:55 +0000</pubDate><atom:modified>Sat, 23 Dec 2023 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/large-model-application-design-and-implementation-guide.html</guid><description>1. Problems with Using LLMs Directly Unstable output One characteristic of generative AI is the diversity of its output. Ask an LLM the same question several times and you may get different answers. This uncertainty in output is a pleasant surprise for users in conversation and creative scenarios. But in</description><dc:creator>WeChat Official Account</dc:creator><category>LLM</category><category>AI</category><category>Best Practices</category><category>R&amp;D</category><category>Architecture</category><category>Learning</category><category>RAG</category><category>Agent</category></item><item><title>Chaos Engineering and Putting It into Practice</title><link>https://www.chenshaowen.com/en/blog/chaos-engineering-and-practice.html</link><pubDate>Sat, 16 Dec 2023 11:15:11 +0000</pubDate><atom:modified>Sat, 16 Dec 2023 11:15:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/chaos-engineering-and-practice.html</guid><description>Two months ago, I gave a talk to a business team about chaos engineering in practice. This post mainly organizes the content of that talk.
Click to view the presentation
1. The Origin of Chaos 1.1 The Birth of the Discipline of Chaos Before discussing chaos, let us first think about the relationship between chaos, chaos engineering, and our production services.</description><dc:creator>WeChat Official Account</dc:creator><category>Chaos</category><category>Practice</category><category>Process</category><category>Conventions</category><category>Chaos Engineering</category><category>Operations</category><category>Reliability</category><category>Learning</category><category>Fault Drills</category></item><item><title>What It's Like to Be an SRE at a Small or Medium-Sized Company</title><link>https://www.chenshaowen.com/en/blog/how-experience-sre-in-small-and-medium-sized-companies.html</link><pubDate>Fri, 08 Dec 2023 11:33:41 +0000</pubDate><atom:modified>Fri, 08 Dec 2023 11:33:41 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-experience-sre-in-small-and-medium-sized-companies.html</guid><description>1. Two Years Ago I Took a Different Path Looking back now, 2021 should have been a golden year for internet workers in Wuhan to change jobs. The pandemic had passed, and we were full of hope for the future; monetary policy was loose, and companies were confident about market prospects.</description><dc:creator>WeChat Official Account</dc:creator><category>SRE</category><category>Thoughts</category><category>Value</category><category>Operations</category><category>Teams</category><category>Growth</category><category>Career</category></item><item><title>My Restful API Specification</title><link>https://www.chenshaowen.com/en/blog/my-restful-api-specification.html</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 07 Dec 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/my-restful-api-specification.html</guid><description>Mainly for standardizing the APIs I write myself, and also to help LLMs understand my APIs better.
1. Domain Use a dedicated domain whenever possible, for example api.example.com. 2. Path Always use lowercase letters. Do not include an /api prefix. Do not include file extensions. Do not put / at the end.</description><dc:creator>WeChat Official Account</dc:creator><category>Interface</category><category>API</category><category>R&amp;D</category><category>Specification</category><category>LLM</category></item><item><title>OpenAI Vs Azure OpenAI API</title><link>https://www.chenshaowen.com/en/blog/openai-vs-azure-openai-api.html</link><pubDate>Sun, 03 Dec 2023 11:22:55 +0000</pubDate><atom:modified>Sun, 03 Dec 2023 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/openai-vs-azure-openai-api.html</guid><description>Because pricing and limits change over time, this article is only a reference for the time it was written.
1. Terminology RPM (requests per minute) Requests per minute
RPD (requests per day) Requests per day
TPM (tokens per minute) Tokens per minute
TPD (tokens per day), Tokens per day</description><dc:creator>WeChat Official Account</dc:creator><category>OpenAI</category><category>Azure</category><category>API</category><category>AI</category><category>LLM</category><category>R&amp;D</category></item><item><title>EnvoyFilter Configuration in Istio</title><link>https://www.chenshaowen.com/en/blog/configurate-envoyfilter-in-istio.html</link><pubDate>Sun, 12 Nov 2023 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Nov 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/configurate-envoyfilter-in-istio.html</guid><description>1. What Is EnvoyFilter EnvoyFilter is a CRD resource in Istio that allows users to modify Envoy&amp;rsquo;s configuration to satisfy their customization needs for different scenarios.
1 2 3 4 5 6 7 8 9 kubectl get envoyfilter -A NAMESPACE NAME AGE istio-system add-request-id-into-ingressgateway 54d istio-system compression-gzip 18d istio-system custom-access-log 3d istio-system ingressgateway-settings 52d istio-system preserve-request-header-us-test-ingress-gateway 95d istio-system preserve-x-request-id 54d When using Istio, you will usually end up using at least a few EnvoyFilters.</description><dc:creator>WeChat Official Account</dc:creator><category>Istio</category><category>EnvoyFilter</category><category>Kubernetes</category><category>Service Mesh</category><category>Configuration</category><category>Operations</category></item><item><title>Optimizing Go Applications in Containers</title><link>https://www.chenshaowen.com/en/blog/optimization-go-applications-in-containers.html</link><pubDate>Sat, 11 Nov 2023 08:05:48 +0000</pubDate><atom:modified>Sat, 11 Nov 2023 08:05:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/optimization-go-applications-in-containers.html</guid><description>1. Memory Alignment Arrange the fields inside a struct from largest to smallest.
This reduces memory footprint.
Install the fieldalignment tool 1 go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest Analyze and fix memory alignment 1 2 3 4 5 6 7 8 9 fieldalignment -fix ./... /Users/shaowenchen/Code/app/config/config.go:136:14: struct with 32 pointer bytes could be 24 /Users/shaowenchen/Code/app/config/config.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Performance Optimization</category><category>Containers</category><category>Best Practices</category><category>R&amp;D</category><category>Learning</category><category>Docker</category><category>Kubernetes</category></item><item><title>Installing and Initializing a PCI SSD</title><link>https://www.chenshaowen.com/en/blog/how-to-intialize-pci-ssd.html</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 09 Nov 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-intialize-pci-ssd.html</guid><description>1. Check the PCI Interface Device Use lspci to check whether the device is already installed. 1 2 3 lspci |grep storage d8:00.0 Mass storage controller: Shannon Systems Device 2275 Here a Shannon Systems device shows up, which means the SSD is already installed. 1 2 3 4 5 6</description><dc:creator>WeChat Official Account</dc:creator><category>DSM</category><category>Disk</category><category>Storage</category><category>Operations</category></item><item><title>From CPU to Network: A Record of Troubleshooting Application Slowness</title><link>https://www.chenshaowen.com/en/blog/record-a-troubleshooting-process-for-application-slowness.html</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 08 Nov 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/record-a-troubleshooting-process-for-application-slowness.html</guid><description>1. Symptoms The business side reported that the API of application app-a was slow. Looking at the logs, one particular Pod was slow, and deleting that Pod so it moved to another node fixed it.
From the monitoring metrics you can see that the Pod&amp;rsquo;s CPU usage did indeed spike sharply.</description><dc:creator>WeChat Official Account</dc:creator><category>CPU</category><category>Network</category><category>Application</category><category>Troubleshooting</category><category>Kubernetes</category><category>Operations</category></item><item><title>Source Code Analysis of Kubernetes Pod IP Management</title><link>https://www.chenshaowen.com/en/blog/source-analysis-kubernetes-management-of-pod-ip.html</link><pubDate>Thu, 02 Nov 2023 19:45:31 +0000</pubDate><atom:modified>Thu, 02 Nov 2023 19:45:31 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/source-analysis-kubernetes-management-of-pod-ip.html</guid><description>1. Subnet Management by kube-controller-manager kube-controller-manager has many controllers; the one related to Pod IP is NodeIpamController. The NodeIpamController mainly manages the podcidr of nodes: when a new node joins the cluster, it allocates a subnet to that node; when a node is deleted, it reclaims the subnet. The subnets</description><dc:creator>WeChat Official Account</dc:creator><category>Source Code Analysis</category><category>Kubernetes</category><category>Pod</category><category>IP</category><category>Network</category><category>Learning</category><category>Operations</category></item><item><title>A Simple Tutorial on Using FFmpeg</title><link>https://www.chenshaowen.com/en/blog/simple-tutorial-on-using-ffmpeg.html</link><pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 11 Oct 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/simple-tutorial-on-using-ffmpeg.html</guid><description>1. Installing FFmpeg Run this command on macOS:
1 brew install ffmpeg 2. Using FFmpeg 1 ffmpeg {1} {2} -i {3} {4} {5} The five parts of the arguments are, in order:
Global arguments, such as -y, -loglevel, -preset, which control the overall behavior Input file arguments, such as -i, -ss, -t, -stream_loop, which control how the input file is read Input file, the path to the audio/video input file to process Output file arguments, such as -c:v, -c:a, -vf, -af, which control the encoding and filtering of the output Output file, the path to the processed output audio/video file Common output arguments:</description><dc:creator>WeChat Official Account</dc:creator><category>FFmpeg</category><category>Video</category><category>Tutorial</category><category>Tools</category><category>Learning</category><category>Multimedia</category></item><item><title>Some Tips for Optimizing Program Builds</title><link>https://www.chenshaowen.com/en/blog/some-tips-for-optimizing-program-building.html</link><pubDate>Thu, 28 Sep 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 28 Sep 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-tips-for-optimizing-program-building.html</guid><description>Continuously updated&amp;hellip;
1. Golang Use trimpath to remove the build path, avoiding exposure of build path information 1 go build -gcflags=&amp;#34;all=-trimpath=${PWD}&amp;#34; -asmflags=&amp;#34;all=-trimpath=${PWD}&amp;#34; -o ./bin/opscli ./cmd/cli/main.go Before adding it, a panic prints the path /Users/shaowenchen/Code/Github/ops/main.go; after adding it, a panic prints main.go.
-ldflags &amp;ldquo;-w -s&amp;rdquo; removes debug information and reduces the binary size 1 go build -ldflags &amp;#34;-w -s&amp;#34; -o .</description><dc:creator>WeChat Official Account</dc:creator><category>CICD</category><category>DevOps</category><category>Best Practices</category><category>R&amp;D</category><category>Build</category><category>Optimization</category><category>Go</category><category>Learning</category></item><item><title>I'm Writing a Copilot for My Ops Tool</title><link>https://www.chenshaowen.com/en/blog/writing-copilot-for-my-ops-tool.html</link><pubDate>Sat, 23 Sep 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 23 Sep 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/writing-copilot-for-my-ops-tool.html</guid><description>1. What Is an Ops Tool https://www.chenshaowen.com/ops/ is one of the tools I use most often in day-to-day operations.
To operate on machines, I can reuse my previous scripts and perform operations in bulk.
To operate on clusters, I can reuse my previous scripts and operate machines without logging into the nodes.</description><dc:creator>WeChat Official Account</dc:creator><category>LLM</category><category>AI</category><category>Thoughts</category><category>Ops</category><category>Copilot</category><category>Operations</category></item><item><title>Running llama-Architecture LLMs on CPU</title><link>https://www.chenshaowen.com/en/blog/how-to-run-llama-on-cpu.html</link><pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 16 Sep 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-run-llama-on-cpu.html</guid><description>1. Running Locally in Containers Start the LLM 1 docker run --security-opt apparmor=unconfined --security-opt seccomp=unconfined --rm -p 8000:8000 shaowenchen/chinese-alpaca-2-7b-gguf:Q2_K The API documentation is available at http://localhost:8000/docs, as shown below:
Deploy a simple Chat UI Note that the OPENAI_API_HOST parameter must be set to your host machine&amp;rsquo;s IP address rather than localhost or 127.</description><dc:creator>WeChat Official Account</dc:creator><category>CPU</category><category>LLM</category><category>AI</category><category>Inference</category><category>Operations</category></item><item><title>LLM Deployment Tool llama.cpp</title><link>https://www.chenshaowen.com/en/blog/llama-cpp-that-is-a-llm-deployment-tool.html</link><pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 05 Sep 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/llama-cpp-that-is-a-llm-deployment-tool.html</guid><description>1. LLM Deployment Tool llama.cpp Research on large models is split into two parts: training and inference. The training process is essentially the process of finding model parameters that minimize the model&amp;rsquo;s loss function and optimize the inference results. Once training is complete, the model&amp;rsquo;s parameters are fixed, and at</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>Tools</category><category>llama.cpp</category><category>Inference</category><category>Deployment</category></item><item><title>Some Free GPT-4-32K Quota — Fans, Come Try It While It Lasts</title><link>https://www.chenshaowen.com/en/blog/free-quota-gpt-4-32k-for-fans.html</link><pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate><atom:modified>Mon, 04 Sep 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/free-quota-gpt-4-32k-for-fans.html</guid><description>Taken offline on 2024.06.26
1. My GPT-4-32K API Application Was Approved I had previously submitted an application on Azure to use GPT-4, and a few days ago I received the email saying the review had passed.
The pricing is as follows:
Context Length Prompt per 1,000 tokens (8k) Completion per 1,000 tokens (32k) 8k $0.</description><dc:creator>WeChat Official Account</dc:creator><category>GPT-4</category><category>OpenAI</category><category>AI</category><category>LLM</category></item><item><title>Some Pitfalls When Using Cloud Infrastructure</title><link>https://www.chenshaowen.com/en/blog/some-potential-pitfalls-when-using-cloud-infrastructure.html</link><pubDate>Wed, 23 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 23 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-potential-pitfalls-when-using-cloud-infrastructure.html</guid><description>1. Quota Limits Every resource in the cloud has a cap on how much of it you can use.
This is how cloud vendors prevent resource abuse and reduce the mutual impact between tenants.
For example: the number of enterprise projects under one account, the number of elastic compute instances, the number of elastic public IPs, the bandwidth of an elastic public IP, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Cloud Vendor</category><category>Infrastructure</category><category>SRE</category><category>Operations</category></item><item><title>Usage of the transformers Library</title><link>https://www.chenshaowen.com/en/blog/usage-of-transformers-lib.html</link><pubDate>Tue, 22 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/usage-of-transformers-lib.html</guid><description>transformers is a Python library developed by Hugging Face for using and training pretrained Transformer models in natural language processing (NLP) tasks. It provides many powerful tools and features that make working with text data and building NLP models much easier. The library is widely used across a variety of</description><dc:creator>WeChat Official Account</dc:creator><category>Transformer</category><category>AI</category><category>LLM</category><category>NLP</category><category>Python</category></item><item><title>Model and Dataset Operations on HuggingFace</title><link>https://www.chenshaowen.com/en/blog/models-and-datasets-on-huggingface.html</link><pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Mon, 21 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/models-and-datasets-on-huggingface.html</guid><description>HuggingFace offers shared models, datasets, and hosted spaces, giving AI researchers and developers a complete ecosystem. This article explains how to work with HuggingFace models and datasets. 1. Model Operations and Usage 1.1 Custom Storage Directory 1 export HF_HOME=/Volumes/Data/HuggingFace Otherwise the default is the ~/.cache/huggingface directory. 1.2 Downloading Models The</description><dc:creator>WeChat Official Account</dc:creator><category>Transformer</category><category>AI</category><category>LLM</category><category>HuggingFace</category><category>Dataset</category><category>R&amp;D</category></item><item><title>Transformer Learning Notes</title><link>https://www.chenshaowen.com/en/blog/learning-notes-of-transformer.html</link><pubDate>Sun, 20 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Sun, 20 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/learning-notes-of-transformer.html</guid><description>1. Why Transformer Fully connected self-attention In earlier RNN models, each word could only relate to its neighboring words, whereas with the Attention mechanism in the Transformer model, a word can relate to a word at any position, so it can capture global context information.
No vanishing gradient problem An RNN applies repeatedly to the same weight matrix, so when its largest eigenvalue is less than 1 the vanishing gradient problem appears.</description><dc:creator>WeChat Official Account</dc:creator><category>Transformer</category><category>AI</category><category>LLM</category><category>Learning</category><category>Deep Learning</category><category>NLP</category></item><item><title>Technical Factors That Affect How You Use Large Models</title><link>https://www.chenshaowen.com/en/blog/the-key-factors-while-using-large-models.html</link><pubDate>Sat, 19 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 19 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-key-factors-while-using-large-models.html</guid><description>1. What a Large Model Actually Is First, let us ask two large models this question and see what they answer.
Claude says that a large model is essentially a probabilistic expression of linguistic knowledge: through statistical learning it models the regularities at every level of language and represents the prior distribution of language generation, thereby gaining the ability to predict and generate language.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>Thoughts</category><category>Learning</category><category>Technology Selection</category></item><item><title>AI Fundamentals</title><link>https://www.chenshaowen.com/en/blog/ai-basic-knowledge.html</link><pubDate>Fri, 18 Aug 2023 11:22:55 +0000</pubDate><atom:modified>Fri, 18 Aug 2023 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ai-basic-knowledge.html</guid><description>1. Keywords Machine Learning (ML)
The technology of automatically acquiring knowledge from data.
Neural Network (NN)
A model that imitates the structure and learning mechanism of biological neural networks; one of the branches of machine learning.
The structure of a neural network consists of an input layer, hidden layers, and an output layer.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>LLM</category><category>Machine Learning</category><category>Knowledge Points</category><category>Learning</category></item><item><title>Calling Functions Through Dialogue with OpenAI and Langchain</title><link>https://www.chenshaowen.com/en/blog/call-functions-through-dialogue-using-openai-and-langchain.html</link><pubDate>Wed, 16 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 16 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/call-functions-through-dialogue-using-openai-and-langchain.html</guid><description>1. LLMs and Langchain Many people may never get the chance to train, or even fine-tune, a large model, but using large models is the wave of the future. So how should we embrace this change? The answer is Langchain. A large model provides a broad, general-purpose foundation. So far</description><dc:creator>WeChat Official Account</dc:creator><category>OpenAI</category><category>Langchain</category><category>AI</category><category>LLM</category><category>R&amp;D</category><category>Learning</category><category>Function Calling</category><category>Application Development</category><category>Best Practices</category></item><item><title>Zero-Cost Service Availability Monitoring with Upptime</title><link>https://www.chenshaowen.com/en/blog/monitor-service-accessibility-with-upptime-for-free.html</link><pubDate>Sat, 12 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 12 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/monitor-service-accessibility-with-upptime-for-free.html</guid><description>1. What Needs Dial Testing GPT was all the rage this year, and I deployed and developed several applications and mini programs to learn from. Of course, following the principle of helping vendors test their features, right now only the GPT 3.5 API costs a little every day — the</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Actions</category><category>Monitoring</category><category>Dial Testing</category><category>Operations</category><category>Learning</category><category>Availability</category><category>Free</category><category>CICD</category><category>Best Practices</category></item><item><title>Common Problems When Using Alpine Images</title><link>https://www.chenshaowen.com/en/blog/common-problems-using-apline.html</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Aug 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-problems-using-apline.html</guid><description>1. DNS Request Timeout Cause: alpine uses the musl library, which has some limitations in DNS resolution [1]
Solution:
Do not use an apline image, and add the options single-request-reopen setting to the container&amp;rsquo;s resolv.conf file. This is because the single-request-reopen option only takes effect for the glibc library, while apline images use the musl library.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Alpine</category><category>Images</category><category>Troubleshooting</category><category>Operations</category></item><item><title>The Scope of Credentials During Pipeline Builds</title><link>https://www.chenshaowen.com/en/blog/the-scope-of-credential-in-building.html</link><pubDate>Thu, 06 Jul 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 06 Jul 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-scope-of-credential-in-building.html</guid><description>In the client, we have already seen the Docker CLI passing credentials to the Docker Daemon via X-Registry-Config when sending the build context. But recent build feedback still shows some phenomena that cannot be explained. This post mainly runs some basic tests to make troubleshooting easier.
1. Building under host Docker The Docker Daemon is started with root privileges.</description><dc:creator>WeChat Official Account</dc:creator><category>CICD</category><category>DevOps</category><category>Docker</category><category>Credentials</category><category>Kubernetes</category><category>Operations</category><category>Troubleshooting</category></item><item><title>Using GitHub Copilot Chat</title><link>https://www.chenshaowen.com/en/blog/the-practice-of-github-copilot-chat.html</link><pubDate>Tue, 04 Jul 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 04 Jul 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-practice-of-github-copilot-chat.html</guid><description>1. Applying to Use GitHub Copilot Chat Application link https://github.com/github-copilot/chat_waitlist_signup/join Once the application is approved, you will receive an email: 2. What Is VS Code Insiders What is VS Code insiders VS Code insiders is the preview version of VS Code, offering some of the latest features and improvements, with</description><dc:creator>WeChat Official Account</dc:creator><category>Copilot</category><category>GitHub</category><category>AI</category><category>R&amp;D</category><category>Programming Assistance</category><category>Learning</category><category>Efficiency</category><category>LLM</category></item><item><title>Using Node.js to Proxy HTTPS Requests to Dependent R&amp;D Services</title><link>https://www.chenshaowen.com/en/blog/how-to-set-proxy-to-server-using-nodejs.html</link><pubDate>Sat, 24 Jun 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Jun 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-proxy-to-server-using-nodejs.html</guid><description>1. Background Under a microservices architecture, the dependency relationships between services are complex. During development, multiple services often need joint debugging. There are two ways to do this:
Deploy services to the online development environment, the Kubernetes cluster Use telepresence to connect local and online cluster communication, so you get a relatively stable joint debugging environment.</description><dc:creator>WeChat Official Account</dc:creator><category>Nodejs</category><category>Proxy</category><category>Proxy</category><category>Microservices</category><category>R&amp;D</category><category>Tools</category></item><item><title>How to Set HPA for Kubernetes Applications and the Related Parameters</title><link>https://www.chenshaowen.com/en/blog/how-to-set-hpa-for-kubernetes-app.html</link><pubDate>Thu, 08 Jun 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 08 Jun 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-hpa-for-kubernetes-app.html</guid><description>1. Business Background Once an enterprise reaches a certain scale, relying entirely on public cloud infrastructure makes IT costs very high.
The cost of purchasing physical machines can be amortized over the next 3 to 5 years, and afterwards the machines are not scrapped; instead they continue to serve beyond their planned lifespan.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>HPA</category><category>Pod</category><category>Elastic Scaling</category><category>Operations</category><category>Hybrid Cloud</category><category>Learning</category></item><item><title>Autoscaling Kubernetes Applications with KEDA</title><link>https://www.chenshaowen.com/en/blog/autoscale-kubernetes-applications-with-keda.html</link><pubDate>Thu, 18 May 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 18 May 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/autoscale-kubernetes-applications-with-keda.html</guid><description>1. HPA VS KEDA HPA also provides:
Elasticity based on custom metrics Scale to Zero Compared with KEDA, these are no longer disadvantages.
The real difference is that HPA can only scale using monitoring data, whereas KEDA can scale using many more data sources — queue messages, databases, Redis, and so on, including monitoring data as well.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>KEDA</category><category>Autoscaling</category><category>Elastic Scaling</category><category>Operations</category><category>Learning</category><category>HPA</category><category>Event-Driven</category></item><item><title>Writing WebAssembly Programs in Go</title><link>https://www.chenshaowen.com/en/blog/get-webassembly-programs-using-go.html</link><pubDate>Sat, 13 May 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 13 May 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/get-webassembly-programs-using-go.html</guid><description>1. Introduction to WebAssembly Cross-platform: it can run on any platform that supports WebAssembly, including web browsers, servers, and mobile devices
High performance: it uses a compact binary format that can be loaded and parsed quickly in the browser, improving application performance
Security: it uses a sandbox model that isolates the code running inside it, protecting the system from malicious code</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>WebAssembly</category><category>Frontend</category><category>R&amp;D</category></item><item><title>WebAssembly Serverless Goes Mainstream</title><link>https://www.chenshaowen.com/en/blog/webassembly-serverless-will-be-a-common-arch-in-the-future.html</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 09 May 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/webassembly-serverless-will-be-a-common-arch-in-the-future.html</guid><description>1. Container-Based Serverless Cannot Support the Next Generation of Applications As the figure above shows, we are going through a change in runtime form.
From bare metal to virtual machines, applications are no longer limited by the number of local servers or the stability of the data center, and gain better elasticity and availability.</description><dc:creator>WeChat Official Account</dc:creator><category>WebAssembly</category><category>Serverless</category><category>Kubernetes</category><category>Applications</category></item><item><title>Tekton Optimization: A Custom Cluster Scheduler</title><link>https://www.chenshaowen.com/en/blog/custom-cluster-scheduler-to-optimize-tekton.html</link><pubDate>Wed, 26 Apr 2023 10:00:00 +0000</pubDate><atom:modified>Wed, 26 Apr 2023 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/custom-cluster-scheduler-to-optimize-tekton.html</guid><description>1. A Constrained Build Environment Cannot Meet Build Requirements Tekton is a CICD engine based on a Kubernetes cluster, and it is more cloud-native than Jenkins. In plain terms, that means it is easier to develop plugins for, easier to scale, easier to observe, and more fun.
Because code can only be stored on the company intranet, the build cluster can only be deployed on the office intranet.</description><dc:creator>WeChat Official Account</dc:creator><category>Optimization</category><category>Tekton</category><category>CICD</category><category>DevOps</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Scheduling</category><category>Build</category><category>Multi-Cluster</category></item><item><title>Tekton Optimization: Infinite IO Capability</title><link>https://www.chenshaowen.com/en/blog/infinite-io-capability-for-tekton.html</link><pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 26 Apr 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/infinite-io-capability-for-tekton.html</guid><description>1. After Turning Off affinity-assistant In an earlier post, by turning off affinity-assistant and using NFS storage, I saved nearly 30 seconds on average per pipeline execution.[1]
The impact of affinity-assistant Before turning it off, the sequence diagram for creating a Pod looked like this:
Because affinity-assistant was on, every pipeline was bound to a single node for execution.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>Kubernetes</category><category>Cloud Native</category><category>CICD</category><category>Operations</category></item><item><title>Integrating ChatGPT into WeChat Official Accounts with Cloudflare Workers</title><link>https://www.chenshaowen.com/en/blog/integrate-chatgpt-into-mp-by-cloudflare-workers.html.html</link><pubDate>Fri, 14 Apr 2023 00:00:00 +0000</pubDate><atom:modified>Fri, 14 Apr 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/integrate-chatgpt-into-mp-by-cloudflare-workers.html.html</guid><description>1. Create a ChatGPT Account Visit https://chat.openai.com/ to test your network If you see the following page, your network does not support ChatGPT Normally you should see this page The solution is to switch networks. Fortunately, the company network supports it, so I registered my account on the company network.</description><dc:creator>WeChat Official Account</dc:creator><category>Cloudflare</category><category>Workers</category><category>Official Account</category><category>WeChat</category><category>OpenAI</category><category>ChatGPT</category></item><item><title>Documentation as Tooling - The Ops Tool</title><link>https://www.chenshaowen.com/en/blog/a-open-source-ops-tool-project.html</link><pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 11 Apr 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-open-source-ops-tool-project.html</guid><description>1. What Documentation as Tooling Means &amp;ldquo;Documentation as tooling, tooling as a product&amp;rdquo; is a slogan I have repeated many times in my previous blog posts.
A good document is no match for a tool that is pleasant to use. A script or a single command is more direct than reading documentation and can solve the problem faster.</description><dc:creator>WeChat Official Account</dc:creator><category>Ops</category><category>Tools</category><category>Project</category><category>Open Source</category><category>Operations</category></item><item><title>Dynamic Proxy Envoy</title><link>https://www.chenshaowen.com/en/blog/a-dynamic-proxy-envoy.html</link><pubDate>Thu, 23 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 23 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-dynamic-proxy-envoy.html</guid><description>Envoy is the third project to graduate from the CNCF, and thanks to features like dynamic configuration and high performance it has become the de facto data plane standard in cloud native. Many projects rely on Envoy to handle data plane traffic while focusing their own efforts on adapting the control plane to their application scenarios, writing user input into Envoy over the xDS protocol.</description><dc:creator>WeChat Official Account</dc:creator><category>Envoy</category><category>Data Plane</category><category>Cloud Native</category><category>Proxy</category><category>Network</category><category>Operations</category><category>Service Mesh</category></item><item><title>Developing an Istio WasmPlugin with TinyGo</title><link>https://www.chenshaowen.com/en/blog/developing-istio-wasm-plugin-by-tinygo.html</link><pubDate>Wed, 22 Feb 2023 01:00:00 +0000</pubDate><atom:modified>Wed, 22 Feb 2023 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/developing-istio-wasm-plugin-by-tinygo.html</guid><description>wasme only supports up to Istio 1.9, while I am using Istio 1.14, so this post goes straight to tinygo for verification and learning.
1. Installing tinygo Requirements Go v1.18+
Install tinygo 1 2 brew tap tinygo-org/tools brew install tinygo Check the version 1 2 3 tinygo version tinygo version 0.</description><dc:creator>WeChat Official Account</dc:creator><category>tinygo</category><category>Istio</category><category>Wasm</category><category>Cloud Native</category><category>Service Mesh</category><category>R&amp;D</category><category>Go</category><category>Learning</category><category>Extension</category></item><item><title>Network Performance Testing Tool iperf</title><link>https://www.chenshaowen.com/en/blog/network-performance-testing-tool-iperf.html</link><pubDate>Wed, 22 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Wed, 22 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/network-performance-testing-tool-iperf.html</guid><description>1. Installation Ubuntu
1 apt-get install -y iperf3 CentOS
1 yum install -y iperf3 2. Parameters The principle behind iperf3 is that the client sends packets to the server so the network can be analyzed. It has two running modes: client and server.
The iperf3 parameters fall into three groups: common parameters, client parameters, and server parameters.</description><dc:creator>WeChat Official Account</dc:creator><category>Network</category><category>Performance</category><category>Testing</category><category>iperf</category><category>Operations</category><category>Tools</category></item><item><title>Several Ways to Inject a Sidecar in Istio</title><link>https://www.chenshaowen.com/en/blog/several-ways-to%20inject%20Sidecar.html</link><pubDate>Tue, 21 Feb 2023 00:01:00 +0000</pubDate><atom:modified>Tue, 21 Feb 2023 00:01:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/several-ways-to%20inject%20Sidecar.html</guid><description>The template Istio uses to inject a Sidecar lives in the istio-sidecar-injector ConfigMap. Annotations let you customize the Sidecar&amp;rsquo;s various parameters, such as CPU usage, proxyImage, and so on. What follows is mainly a summary of the Sidecar injection methods.
1. Add a label to a namespace -&amp;gt; takes effect for the whole namespace Inject the label 1 kubectl label namespace default istio-injection=enabled --overwrite After the application restarts, the Sidecar container will be injected automatically.</description><dc:creator>WeChat Official Account</dc:creator><category>Istio</category><category>Sidecar</category><category>Kubernetes</category><category>Service Mesh</category><category>Operations</category></item><item><title>Several Traffic Configuration Paths Under an Istio Gateway</title><link>https://www.chenshaowen.com/en/blog/several-traffic-paths-under-istio-gateway.html</link><pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 21 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/several-traffic-paths-under-istio-gateway.html</guid><description>1. Common Object Configuration 1.1 Gateway selector Selects the Envoy on which the rules take effect servers The domains to match Port Protocol TLS certificate 1.2 VirtualService gateways Specifies the gateway on which this takes effect; the default value mesh is for east-west traffic, while specifying a Gateway object makes it north-south traffic http Layer 7 routing Redirect Rewrite Retry Condition rules Timeout Fault injection CORS policy tcp Layer 7 routing tls Routing with certificates TLS certificate 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Istio</category><category>Gateway</category><category>Kubernetes</category><category>Service Mesh</category><category>Traffic</category><category>Operations</category></item><item><title>Transforming the Operations System with an Event Bus</title><link>https://www.chenshaowen.com/en/blog/transform-ops-system-using-event-bus.html</link><pubDate>Fri, 17 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Fri, 17 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/transform-ops-system-using-event-bus.html</guid><description>1. An Operations Service System That Has Piled Up Beyond Repair Developing a corresponding operations service for a clear operations need, so that operations and business users can use it, is entirely reasonable. But if you are satisfied with only that, the following situation easily appears:
Users constantly look for the entry point of each system, jumping back and forth between systems, busy hunting for buttons and copying parameters.</description><dc:creator>WeChat Official Account</dc:creator><category>Operations System</category><category>PaaS</category><category>Platform</category><category>Event</category><category>Architecture</category><category>Thoughts</category><category>Event-Driven</category><category>Learning</category><category>Automation</category></item><item><title>Optimizing Tekton's Slow Clone Task, Saving About 30 Seconds</title><link>https://www.chenshaowen.com/en/blog/optimizing-the-slow-of-tekton-clone-task.html</link><pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 16 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/optimizing-the-slow-of-tekton-clone-task.html</guid><description>1. Symptom - Tekton&amp;rsquo;s Clone Task Is Slow When running the clone task, Tekton is very time-consuming; with multiple repositories it generally takes around 2 minutes 30 seconds. As shown below:
A pipeline that only clones takes 2 minutes 16 seconds to run, while the clone script itself actually runs for only 1-3 seconds.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category><category>Operations</category><category>Performance Optimization</category></item><item><title>Using Falco to Monitor Runtime Security</title><link>https://www.chenshaowen.com/en/blog/listen-runtime-security-using-falco.html</link><pubDate>Sat, 11 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/listen-runtime-security-using-falco.html</guid><description>1. What Falco Is Falco is a cloud-native runtime security project contributed to the CNCF by Sysdig.
Falco implements an extensible event rule filtering engine. Through a series of operations — capturing events, matching security rules, and producing alert notifications — it can surface security problems in a system. The events come from system calls, and it also supports an ebpf probe; the rules are open source [1] and you can define your own extensions [2].</description><dc:creator>WeChat Official Account</dc:creator><category>Falco</category><category>Kubernetes</category><category>Security</category><category>Tools</category><category>Operations</category></item><item><title>How to Run Stable Diffusion on macOS Without a GPU</title><link>https://www.chenshaowen.com/en/blog/how-to-run-stable-diffusion-in-macos-without-gpu.html</link><pubDate>Fri, 10 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Fri, 10 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-run-stable-diffusion-in-macos-without-gpu.html</guid><description>1. Recommended Configuration for Running Stable Diffusion Memory: at least 16 GB DDR4 or DDR5 Storage: at least 10 GB of free space GPU: an NVIDIA card with at least 6 GB of VRAM If your hardware falls short, you can also use one of the various optimized forks that support lower-spec hardware, but generation time will increase.</description><dc:creator>WeChat Official Account</dc:creator><category>AI</category><category>macOS</category><category>GPU</category><category>Stable Diffusion</category><category>Image Generation</category><category>Learning</category></item><item><title>Using In-Cluster Prometheus to Collect Etcd Metrics</title><link>https://www.chenshaowen.com/en/blog/using-prometheus-in-the-cluster-to-collect-etcd-metrics.html</link><pubDate>Thu, 09 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 09 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-prometheus-in-the-cluster-to-collect-etcd-metrics.html</guid><description>1. Skipping Certificate Verification Prevents Scraping If you can skip TLS authentication when scraping metrics, that is the easiest path. The Prometheus ConfigMap configuration looks like this:
1 2 3 4 5 6 7 8 9 - job_name: etcd metrics_path: /metrics scheme: https tls_config: insecure_skip_verify: true static_configs: - targets: [&amp;#34;1.1.1.1:2379&amp;#34;] - targets: [&amp;#34;2.</description><dc:creator>WeChat Official Account</dc:creator><category>Etcd</category><category>Kubernetes</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category></item><item><title>How to Add Basic Authentication to a Kubernetes Service</title><link>https://www.chenshaowen.com/en/blog/how-to-add-basic-auth-to-kubernetes-service.html</link><pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Sun, 05 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-basic-auth-to-kubernetes-service.html</guid><description>1. Deploy the Ingress Controller Check the Kubernetes version 1 2 3 4 kubectl version --short Client Version: v1.21.4 Server Version: v1.21.4 Find a compatible Nginx Ingress version Helm Chart version Highest available Helm Chart version Compatible K8s version 3.x.x 3.36.0 1.16+ 4.x.x 4.4.2 1.19+ Reference: https://github.com/kubernetes/ingress-nginx
Install the Nginx Ingress Controller 1 2 3 helm upgrade --install ingress-nginx ingress-nginx \ --repo https://kubernetes.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Authentication</category><category>Ingress</category><category>Security</category><category>Operations</category></item><item><title>Troubleshooting Slow IO When Building Images</title><link>https://www.chenshaowen.com/en/blog/troubleshoot-slow-io-when-building-dockerfile.html</link><pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate><atom:modified>Thu, 02 Feb 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/troubleshoot-slow-io-when-building-dockerfile.html</guid><description>1. The Problem Project details:
File size 5.6 GB File count 529352 Dockerfile
1 2 3 FROM golang:1.13 COPY ./ /go/src/code The build command and its output are as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 time DOCKER_BUILDKIT=1 docker build --no-cache -t test:v3 -f Dockerfile .</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>CICD</category><category>Build</category><category>Troubleshooting</category><category>Operations</category></item><item><title>Run mv Is Slower Than cp in a Dockerfile</title><link>https://www.chenshaowen.com/en/blog/run-mv-is-slower-than-cp-in-dockerfile.html</link><pubDate>Mon, 30 Jan 2023 00:00:00 +0000</pubDate><atom:modified>Mon, 30 Jan 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/run-mv-is-slower-than-cp-in-dockerfile.html</guid><description>Unlike on CentOS or Ubuntu, where we feel that mv is faster than cp, when you build an image with a Dockerfile, using Run cp is faster than Run mv. This post presents the test and verification data behind that.
1. Test Setup Machine environment Ubuntu 20.04.1 LTS
32C</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Containers</category><category>CICD</category><category>Images</category><category>Operations</category></item><item><title>How to Repair a Kubernetes Master Node After Reinstalling the OS</title><link>https://www.chenshaowen.com/en/blog/how-to-repair-k8s-master-after-reinstalling-os.html</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate><atom:modified>Tue, 17 Jan 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-repair-k8s-master-after-reinstalling-os.html</guid><description>Recently I ran into this twice: a host had to be reinstalled because of a failure. In one case only a single Etcd node was left, and the whole cluster stayed down for half an hour before it recovered. This post mainly records the process of initializing a fresh Ubuntu</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Repair</category><category>Operations</category><category>Etcd</category><category>Troubleshooting</category><category>Cluster</category><category>Kubekey</category><category>Learning</category></item><item><title>Elastic Scaling of Cluster Nodes</title><link>https://www.chenshaowen.com/en/blog/auto-add-or-remove-nodes-incluster.html</link><pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate><atom:modified>Mon, 16 Jan 2023 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/auto-add-or-remove-nodes-incluster.html</guid><description>Elastic scaling mainly has three dimensions:
HPA, which automatically scales the number of Pods based on utilization VPA, which automatically sets a Pod&amp;rsquo;s Request and Limit based on historical data CA, which automatically scales the number of Nodes based on usage This post focuses on the node scaling part.
1. The autoscaler Autoscaling Component autoscaler is a project maintained by the Kubernetes community.</description><dc:creator>WeChat Official Account</dc:creator><category>Cluster</category><category>Elastic Scaling</category><category>Nodes</category><category>Kubernetes</category><category>Operations</category></item><item><title>Tekton Stress Testing and Build Cluster Parameter Optimization</title><link>https://www.chenshaowen.com/en/blog/tekton-stress-test-and-optimize-k8s-cluster.html</link><pubDate>Thu, 10 Nov 2022 00:00:00 +0000</pubDate><atom:modified>Thu, 10 Nov 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/tekton-stress-test-and-optimize-k8s-cluster.html</guid><description>1. Purpose of the Test Tune the parameters of the build cluster Probe the upper limit on the number of concurrent Tekton pipelines Give the optimal concurrency limit for a single cluster 2. Related Components and Machine Configuration Kubernetes version v1.21.4
Tekton version v0.24.1, kept consistent with production
OpenEBS version localpv version 3.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>Kubernetes</category><category>Stress Testing</category><category>Large Clusters</category><category>Optimization</category><category>CICD</category><category>Operations</category></item><item><title>How to Estimate Prometheus's Local Storage and Memory Consumption</title><link>https://www.chenshaowen.com/en/blog/how-to-estimate-the-local-and-memory-storage-consumption-of-prometheus.html</link><pubDate>Wed, 02 Nov 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 02 Nov 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-estimate-the-local-and-memory-storage-consumption-of-prometheus.html</guid><description>1. Local Storage Capacity Required disk size (GB) = data retention period _ samples fetched per second _ metric data size / 1024 / 1024 / 1024
Where
Samples fetched per second: rate(prometheus_tsdb_head_samples_appended_total[1d]) Average size of a sample within one hour: rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d])/rate(prometheus_tsdb_compaction_chunk_samples_sum[1d]) The disk consumption for one day (86400 seconds) can be queried directly in Prometheus:</description><dc:creator>WeChat Official Account</dc:creator><category>Prometheus</category><category>Monitoring</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Capacity Planning</category><category>Troubleshooting</category></item><item><title>Kubernetes Application Troubleshooting</title><link>https://www.chenshaowen.com/en/blog/kubernetes-app-troubleshooting.html</link><pubDate>Tue, 01 Nov 2022 03:00:00 +0000</pubDate><atom:modified>Tue, 01 Nov 2022 03:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-app-troubleshooting.html</guid><description>Setting Reasonable Req and Limit Without Req and Limit set, when an application&amp;rsquo;s CPU or MEM spikes, it harms other Pods on the same node, and can even cause cluster nodes to be crushed one after another.
Req and Limit have four values in total. If only some of them are set, then when node resource usage reaches the threshold preset by Kubelet, Kubelet evicts Pods in the order Guaranteed &amp;gt; Burstable &amp;gt; Best-Effort</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Troubleshooting</category><category>Operations</category><category>Pod</category><category>Resources</category><category>Learning</category><category>Best Practices</category></item><item><title>Kubernetes Cluster Troubleshooting</title><link>https://www.chenshaowen.com/en/blog/kubernetes-cluster-troubleshooting.html</link><pubDate>Tue, 01 Nov 2022 01:00:00 +0000</pubDate><atom:modified>Tue, 01 Nov 2022 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-cluster-troubleshooting.html</guid><description>FailedCreatePodSandBox Error Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:402: getting the final child's pid from pipe caused: EOF: unknown Resolution Clear the cache 1 echo 3 &amp;gt; /proc/sys/vm/drop_caches Cause Too much memory fragmentation calico-node Keeps Restarting increase max user Error runtime: failed to</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Cluster</category><category>Troubleshooting</category><category>Operations</category><category>Learning</category><category>Fault Diagnosis</category><category>Pod</category><category>Best Practices</category><category>Problem Localization</category></item><item><title>How to Repair a Kubernetes Cluster After Changing IPs</title><link>https://www.chenshaowen.com/en/blog/how-to-repair-the-kubernetes-cluster-after-changing-ip.html</link><pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 25 Oct 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-repair-the-kubernetes-cluster-after-changing-ip.html</guid><description>A record of repairing a cluster failure caused by an IP change. There are two clusters: one single-node (allinone) cluster, and one four-node cluster (3 masters, 1 node). 1. Update the Etcd Certificates [On every Etcd node] Back up the Etcd certificates 1 cp -R /etc/ssl/etcd/ssl /etc/ssl/etcd/ssl-bak View the domains</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Operations</category><category>Repair</category><category>Troubleshooting</category><category>Learning</category><category>Etcd</category><category>Certificates</category><category>Cluster</category><category>Network</category></item><item><title>A Deep Dive into Kubernetes Network Packet Forwarding</title><link>https://www.chenshaowen.com/en/blog/kubernetes-network-packets.html</link><pubDate>Sat, 17 Sep 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 17 Sep 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-network-packets.html</guid><description>This article is translated from https://learnk8s.io/kubernetes-network-packets, not word for word, with some of my own understanding worked in.
By reading this article, you can learn how packets are forwarded inside and outside Kubernetes, starting from the original web request all the way to the container hosting the application.
Kubernetes Network Requirements Before diving into the details of how packets flow through a Kubernetes cluster, let&amp;rsquo;s first clarify Kubernetes&amp;rsquo; requirements for networking.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>Kubernetes</category><category>Network</category><category>Operations</category><category>Learning</category><category>iptables</category><category>CNI</category></item><item><title>SRE Goes Left, DevOps Goes Right</title><link>https://www.chenshaowen.com/en/blog/sre-to-left-devops-to-right.html</link><pubDate>Sat, 10 Sep 2022 08:00:00 +0000</pubDate><atom:modified>Sat, 10 Sep 2022 08:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/sre-to-left-devops-to-right.html</guid><description>1. A Process Divorced from Responsibility Is Meaningless Software architecture matches organizational architecture, and this shows up not only in functional boundaries but even more in the division of responsibilities.
Only clear responsibility boundaries can build good team collaboration and growth. Every team and every person should understand their own goals — what they should take on and what they should stay out of — and invest their time and energy in things that benefit the primary goal, rather than sinking into trivia.</description><dc:creator>WeChat Official Account</dc:creator><category>SRE</category><category>DevOps</category><category>Thoughts</category><category>Operations</category><category>Teams</category><category>Management</category></item><item><title>Error Pulling a Large Image</title><link>https://www.chenshaowen.com/en/blog/pull-a-large-image-and-get-an-error.html</link><pubDate>Sat, 10 Sep 2022 02:00:00 +0000</pubDate><atom:modified>Sat, 10 Sep 2022 02:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/pull-a-large-image-and-get-an-error.html</guid><description>1. Picking Up from Last Time: Shared Storage Optimizes Pulling Images Overseas Building on An Image Management and Distribution Case Based on Harbor and Registry, I recently made another optimization.
The previous approach was to deploy a Mirror Cache in each region on a machine with low specs and a large disk to cache images.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Image Registry</category><category>Images</category><category>Operations</category><category>Troubleshooting</category><category>Harbor</category></item><item><title>Observing Kubernetes Network Connections with Kindling</title><link>https://www.chenshaowen.com/en/blog/insight-kubernetes-network-by-kindling.html</link><pubDate>Sat, 10 Sep 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 10 Sep 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/insight-kubernetes-network-by-kindling.html</guid><description>I recently had a requirement to collect Kubernetes&amp;rsquo; external network access. So I set up and tried out some related projects. This post is mainly about how to install Kindling and configure Grafana to view Kubernetes network connection data.
1. What Is Kindling Kindling solves the problem of how to observe the network without intruding on the application; its functionality is mainly achieved by exposing kernel events for observation.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Kindling</category><category>Network</category><category>Observability</category><category>Operations</category><category>eBPF</category><category>Monitoring</category></item><item><title>OpenEBS Certificate Expiration Causes Service Unavailability</title><link>https://www.chenshaowen.com/en/blog/expiration-of-the-openebs-cert.html</link><pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 09 Sep 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/expiration-of-the-openebs-cert.html</guid><description>1. Installation Method 1 2 kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml kubectl patch storageclass openebs-hostpath -p &amp;#39;{&amp;#34;metadata&amp;#34;: {&amp;#34;annotations&amp;#34;:{&amp;#34;storageclass.kubernetes.io/is-default-class&amp;#34;:&amp;#34;true&amp;#34;}}}&amp;#39; OpenEBS is mainly used as the default storage for Tekton pipelines. I had also tried Longhorn before, but it could not hold up during peak hours and the pipelines went Pending. And after uninstalling Longhorn there were leftovers, which caused kube-apiserver to keep reporting errors, and in the end it took a great deal of effort to remove.</description><dc:creator>WeChat Official Account</dc:creator><category>OpenEBS</category><category>Storage</category><category>Kubernetes</category><category>Certificates</category><category>Troubleshooting</category><category>Operations</category><category>Learning</category><category>TLS</category><category>StorageClass</category></item><item><title>Some Thoughts on Platform Construction</title><link>https://www.chenshaowen.com/en/blog/some-thoughts-on-the-construction-of-platform.html</link><pubDate>Wed, 31 Aug 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 31 Aug 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-thoughts-on-the-construction-of-platform.html</guid><description>1. Only Platformization Lets You Go Further As long as you respond to the market a little faster than your competitors and live a little longer, you can win more room to survive. A brilliant business model or market opportunity is more like magic: it can grow a company fast, but it is not something human effort can control.</description><dc:creator>WeChat Official Account</dc:creator><category>Platform</category><category>Thoughts</category><category>Construction</category><category>PaaS</category><category>R&amp;D</category><category>Operations</category></item><item><title>How to Estimate the Resource Consumption of Monitoring Components in a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/how-to-estimate-the-resource-request-at-monitoring-kubernetes.html</link><pubDate>Tue, 23 Aug 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Aug 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-estimate-the-resource-request-at-monitoring-kubernetes.html</guid><description>The monitoring metrics described in this article cover only the basic Kubernetes metrics, not business-related metrics. The components involved are prometheus-server, kube-state-metrics, and node-exporter, and the data retention period is 3 days.
1. Monitoring-related components in the cluster 1 2 3 4 helm -n monitor list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION prom-k8s monitor 1 2022-05-12 16:47:53.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Monitoring</category><category>Calculation</category><category>Estimation</category><category>Operations</category></item><item><title>Common Prometheus Alerting Queries for Various Resources</title><link>https://www.chenshaowen.com/en/blog/some-common-promql-for-alarming.html</link><pubDate>Sun, 21 Aug 2022 11:22:55 +0000</pubDate><atom:modified>Sun, 21 Aug 2022 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-common-promql-for-alarming.html</guid><description>Hosts Host memory usage exceeds threshold 1 - node_memory_MemAvailable_bytes{mode!=&amp;quot;idle&amp;quot;} / node_memory_MemTotal_bytes
Threshold: 0.9
Host CPU usage exceeds threshold 1 - avg(irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[5m])) by (host_name)
Threshold: 0.85
Host disk usage exceeds threshold 1 - avg without (fstype)(node_filesystem_free_bytes{fstype!='rootfs',mountpoint!~'/(run|var|snap).*'} / node_filesystem_size_bytes{fstype!='rootfs',mountpoint!~'/(run|var|snap).*'})
Threshold: 0.8
Windows Windows host memory usage exceeds threshold 1 - 1 * windows_os_physical_memory_free_bytes{job=&amp;quot;windows_exporter&amp;quot;,mode!</description><dc:creator>WeChat Official Account</dc:creator><category>Prometheus</category><category>Alerting</category><category>Monitoring</category><category>Operations</category><category>PromQL</category></item><item><title>How to Make a Port Accessible Only to a Specified IP</title><link>https://www.chenshaowen.com/en/blog/set-port-to-be-accessible-only-to-a-specified-ip.html</link><pubDate>Sat, 20 Aug 2022 08:00:00 +0000</pubDate><atom:modified>Sat, 20 Aug 2022 08:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/set-port-to-be-accessible-only-to-a-specified-ip.html</guid><description>1. Host Service Ports 1 2 iptables -I INPUT -p tcp --dport 80 -j DROP iptables -I INPUT -p tcp -s 1.2.3.4 --dport 80 -j ACCEPT This allows only 1.2.3.4 to access port 80 on the local host.
2. Docker Service Ports For services started like docker run -d -p 80:80 shaowenchen/demo:whoami, the method above does not work; the rule has to be added to the DOCKER-USER chain.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Linux</category><category>Security</category><category>Restriction</category><category>Operations</category><category>Learning</category><category>iptables</category><category>Firewall</category><category>Network</category></item><item><title>Traffic Restriction Using Linux TC</title><link>https://www.chenshaowen.com/en/blog/traffic-restriction-using-linux-tc.html</link><pubDate>Sat, 20 Aug 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 20 Aug 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/traffic-restriction-using-linux-tc.html</guid><description>1. Traffic Control Principles Under Linux By queuing packets, we can control how data packets are sent. This kind of control is called data shaping (shape the data), and it includes the following operations on data:
Adding latency Dropping packets Reordering Duplicating, corrupting Rate control Under the qdisc-class-filter structure, controlling traffic requires three steps:</description><dc:creator>WeChat Official Account</dc:creator><category>Linux</category><category>TC</category><category>Traffic Control</category><category>Operations</category><category>Network</category><category>Learning</category><category>Rate Limiting</category><category>Troubleshooting</category></item><item><title>A Kubernetes Job Created Nearly 30,000 Pods and Almost Caused a Serious Incident</title><link>https://www.chenshaowen.com/en/blog/kubernetes-job-create-3w-pod-attack-cluster.html</link><pubDate>Wed, 17 Aug 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 17 Aug 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-job-create-3w-pod-attack-cluster.html</guid><description>1. Background At 10:00 in the morning, a colleague asked me to run a task on the cluster, so I created a Kubernetes Job through a tool.
When the tool creates a Job, it first gets all the nodes on the cluster, then binds to each node one by one to create Jobs.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Job</category><category>Pod</category><category>Incident</category><category>Troubleshooting</category><category>Operations</category></item><item><title>How to Quickly Adopt a Unified Authentication and Authorization System</title><link>https://www.chenshaowen.com/en/blog/how-to-access-a-unified-auth-system-quickly.html</link><pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 26 Jul 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-access-a-unified-auth-system-quickly.html</guid><description>1. Authentication and Authorization Problems Brought by Heterogeneous Systems Enterprise systems can be divided into the following types:
Commercial software you purchase, such as JumpServer Open-source software, such as Kibana and Grafana Software developed in-house, such as an application management platform One thing worth clarifying here: authentication and authorization are two different functions:</description><dc:creator>WeChat Official Account</dc:creator><category>Authentication</category><category>Authorization</category><category>Security</category><category>Operations</category><category>Architecture</category><category>SSO</category></item><item><title>How to Hijack docker.io Image Traffic to a Private Repository</title><link>https://www.chenshaowen.com/en/blog/hijack-docker-io-req-to-private-repository.html</link><pubDate>Mon, 18 Jul 2022 00:00:00 +0000</pubDate><atom:modified>Mon, 18 Jul 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/hijack-docker-io-req-to-private-repository.html</guid><description>1. Self-signing a *.docker.io Domain Certificate 1.1 Creating a CA Certificate Generate the CA certificate private key 1 openssl genrsa -out ca.key 4096 Generate the CA certificate 1 2 3 4 openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj &amp;#34;/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=chenshaowen.com&amp;#34; \ -key ca.key \ -out ca.crt 1.2 Creating a *.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Kubernetes</category><category>Docker</category><category>Images</category><category>Operations</category><category>Security</category></item><item><title>An Image Management and Distribution Scheme Based on Harbor and Registry</title><link>https://www.chenshaowen.com/en/blog/a-image-management-and-distribution-case-based-on-harbor-and-registry.html</link><pubDate>Sat, 16 Jul 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 16 Jul 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-image-management-and-distribution-case-based-on-harbor-and-registry.html</guid><description>1. The Challenge of a Cross-Region Harbor If all you need is to store image data in a simple way, Registry is an excellent choice as an image repository. Registry not only supports multiple storage backends, but can also be configured with HTTPS certificates and access credentials. Worth noting: Harbor also uses Registry to store image data.</description><dc:creator>WeChat Official Account</dc:creator><category>Harbor</category><category>Registry</category><category>Images</category><category>Distribution</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Multi-Region</category><category>Acceleration</category><category>CICD</category></item><item><title>Deploying the Elasticsearch Stack on a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/how-to-deploy-the-elasticsearch-stack-on-kubernetes.html</link><pubDate>Wed, 06 Jul 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 06 Jul 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-deploy-the-elasticsearch-stack-on-kubernetes.html</guid><description>If you use Logstash to centrally receive the log input from Filebeat, it easily creates a single point of bottleneck; if you use Kafka to receive the log input from Filebeat, the timeliness of the logs is not guaranteed. Here we output the logs collected by Filebeat directly to Elasticsearch.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Elasticsearch</category><category>Logging</category><category>Operations</category><category>ELK</category><category>Monitoring</category></item><item><title>How to Run a Pod on a Specified Node</title><link>https://www.chenshaowen.com/en/blog/how-to-set-up-pod-to-run-to-a-specified-node.html</link><pubDate>Mon, 27 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Mon, 27 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-up-pod-to-run-to-a-specified-node.html</guid><description>1. Specify a Node via nodeSelector When Creating a Workload Add a label to the node 1 kubectl label node node2 project=A Create the workload with the specified nodeSelector 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cat &amp;lt;&amp;lt;EOF | kubectl apply -f - apiVersion: apps/v1 kind: Deployment metadata: name: nginx-nodeselector spec: replicas: 1 selector: matchLabels: app: nginx-nodeselector template: metadata: labels: app: nginx-nodeselector spec: nodeSelector: project: A containers: - name: nginx image: nginx EOF Check the workload 1 2 3 4 kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-nodeselector-7bb75b7687-7r5xk 1/1 Running 0 19s 10.</description><dc:creator>WeChat Official Account</dc:creator><category>Pod</category><category>Kubernetes</category><category>Scheduling</category><category>Operations</category><category>nodeSelector</category><category>Learning</category></item><item><title>Using Blackbox Exporter to Test Network Connectivity</title><link>https://www.chenshaowen.com/en/blog/using-blackbox-exporter-to-test-network.html</link><pubDate>Sat, 25 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 25 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-blackbox-exporter-to-test-network.html</guid><description>If you need to monitor the network status between two hosts, or between a host and an external service, then the Blackbox Exporter mentioned in this article is worth a try.
1. Installing Blackbox 1.1 Deploying on a Host Download the binary package 1 2 3 4 5 wget https://github.</description><dc:creator>WeChat Official Account</dc:creator><category>Prometheus</category><category>Monitoring</category><category>Probing</category><category>Operations</category><category>Learning</category><category>Network</category><category>Blackbox Exporter</category><category>Availability</category></item><item><title>Evolution of Kubernetes Under Multiple Locations</title><link>https://www.chenshaowen.com/en/blog/evolution-of-kubernetes-under-multipl-location.html</link><pubDate>Sat, 18 Jun 2022 12:09:53 +0000</pubDate><atom:modified>Sat, 18 Jun 2022 12:09:53 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/evolution-of-kubernetes-under-multipl-location.html</guid><description>1. Application Architecture Matches Business Growth and Operations Capability At industry conferences, in documents and blogs, we constantly see all kinds of excellent solutions — but if you copy them straight into your own business, you keep hitting walls. Because these technical solutions were incubated in specific business scenarios; different business forms, different business scales, and different stages of business development all affect how technology lands.</description><dc:creator>WeChat Official Account</dc:creator><category>Multi-Location</category><category>Kubernetes</category><category>Architecture</category><category>Topology</category><category>Operations</category></item><item><title>descheduler Secondary Scheduling Makes Kubernetes Load More Balanced</title><link>https://www.chenshaowen.com/en/blog/descheduler-makes-kubernetes-load-more-balanced.html</link><pubDate>Sat, 11 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/descheduler-makes-kubernetes-load-more-balanced.html</guid><description>1. Why Secondary Scheduling Is Needed The job of the Kubernetes scheduler is to bind a Pod to a single best node. To do this, the scheduler runs through a series of filtering and scoring steps.
Kubernetes scheduling is based on Requests, but the actual usage of each Pod changes dynamically.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>descheduler</category><category>Scheduling</category><category>Operations</category></item><item><title>How to Renew Kubernetes Certificates</title><link>https://www.chenshaowen.com/en/blog/how-to-renew-kubernetes-certs-manually.html</link><pubDate>Fri, 10 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 10 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-renew-kubernetes-certs-manually.html</guid><description>By default, Kubernetes certificates need to be renewed once a year. Below is a record of one certificate renewal process.
1. Check the Certificates Check the certificate expiration time on a master node:
1 kubeadm certs check-expiration On older cluster versions this command errors out; use: kubeadm alpha certs check-expiration</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Certificates</category><category>Operations</category><category>Security</category><category>kubeadm</category><category>Troubleshooting</category><category>Learning</category></item><item><title>How to Inspect Tekton Pipeline Metrics</title><link>https://www.chenshaowen.com/en/blog/how-to-insight-the-pipeline-of-tekton.html</link><pubDate>Tue, 07 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 07 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-insight-the-pipeline-of-tekton.html</guid><description>1. Scraping Tekton Metrics Add a ConfigMap configuration file 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 cat &amp;lt;&amp;lt;EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: config-observability namespace: tekton-pipelines labels: app.kubernetes.io/instance: default app.kubernetes.io/part-of: tekton-pipelines data: metrics.backend-destination: prometheus metrics.taskrun.level: &amp;#34;task&amp;#34; metrics.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Tekton</category><category>Monitoring</category><category>Metrics</category><category>CICD</category><category>Operations</category></item><item><title>How to collect labels and annotations of Kubernetes objects</title><link>https://www.chenshaowen.com/en/blog/how-to-collect-labels-and-annotations-of-kubernetes-objects.html</link><pubDate>Thu, 02 Jun 2022 01:00:00 +0000</pubDate><atom:modified>Thu, 02 Jun 2022 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-collect-labels-and-annotations-of-kubernetes-objects.html</guid><description>1. Why kube-status-metrics is needed Kubernetes monitoring mainly focuses on two kinds of metrics:
Basic performance metrics CPU, memory, disk, network, and so on. These can be collected by deploying node-exporter as a DaemonSet and having Prometheus scrape the relevant metrics.
Resource object metrics The replica count of a Deployment, the running state of a Pod, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Monitoring</category><category>Metrics</category><category>Collection</category><category>Prometheus</category><category>Operations</category><category>Learning</category><category>Observability</category><category>kube-status-metrics</category></item><item><title>Peer Domains</title><link>https://www.chenshaowen.com/en/blog/peer-domain.html</link><pubDate>Thu, 02 Jun 2022 00:00:00 +0000</pubDate><atom:modified>Thu, 02 Jun 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/peer-domain.html</guid><description>1. Meaning If a service has multiple domain entry points and accessing it through any of them yields the same content, those domains are called peer domains.
For example, through peer domains you can provide three identical file or API services.
https://server.chenshaowen.com/static/index.html https://server-peer-a.chenshaowen.com/static/index.html https://server-peer-b.chenshaowen.com/static/index.html 2. Uses 2.1 Raising the Browser Concurrency Limit Browsers usually cap the maximum number of concurrent requests to a single domain at no more than 6 per second.</description><dc:creator>WeChat Official Account</dc:creator><category>Domain Names</category><category>Architecture</category><category>Overseas</category><category>Routing</category><category>Operations</category><category>Network</category></item><item><title>Traffic Distribution Across Overseas Multi-Region</title><link>https://www.chenshaowen.com/en/blog/traffic-distribution-cross-multi-region.html</link><pubDate>Tue, 31 May 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 31 May 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/traffic-distribution-cross-multi-region.html</guid><description>1. About Traffic Distribution Traffic governance is divided into north-south and east-west. In the typical drawing convention for Network Diagrams, core network components are drawn at the top and clients at the bottom, with different service levels drawn in between — hence the names north-south and east-west traffic.
North-south traffic refers to traffic initiated by clients, while east-west traffic refers to traffic between services.</description><dc:creator>WeChat Official Account</dc:creator><category>Overseas</category><category>Traffic</category><category>Gateway</category><category>Operations</category><category>Network</category></item><item><title>Configure Scheduled Tasks with systemd timer</title><link>https://www.chenshaowen.com/en/blog/how-to-configure-scheduled-task-using-systemd-timer.html</link><pubDate>Thu, 26 May 2022 00:00:00 +0000</pubDate><atom:modified>Thu, 26 May 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-configure-scheduled-task-using-systemd-timer.html</guid><description>1. Preparing the Scheduled Script If it is a Bash script, the first line needs to specify the interpreter.
1 2 mkdir -p /root/scripts vim /root/scripts/quick-clear.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/bin/sh /usr/local/bin/kubectl --kubeconfig /root/.kube/config get pods --all-namespaces -o wide | grep Evicted | awk &amp;#39;{print $1,$2}&amp;#39; | xargs --no-run-if-empty -L1 /usr/local/bin/kubectl --kubeconfig /root/.</description><dc:creator>WeChat Official Account</dc:creator><category>Linux</category><category>systemd</category><category>Scheduled Tasks</category><category>Operations</category><category>Learning</category><category>cron</category><category>Automation</category><category>Best Practices</category></item><item><title>Monitoring System Across Overseas Multi-Region</title><link>https://www.chenshaowen.com/en/blog/the-monitor-system-cross-multi-region.html</link><pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 25 May 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-monitor-system-cross-multi-region.html</guid><description>1. Background When you are at a job, you always have to do something, and you want to do something new. But it is not the case that if you want to do it you get the chance, and can do it well.
Whether you do it alone or can do it together with everyone else, the final result is different.</description><dc:creator>WeChat Official Account</dc:creator><category>Monitoring</category><category>Overseas</category><category>Multi-Region</category><category>Operations</category><category>Multi-Datacenter</category><category>Observability</category></item><item><title>Installing Thanos from Binaries</title><link>https://www.chenshaowen.com/en/blog/install-thanos-using-binary.html</link><pubDate>Wed, 11 May 2022 19:51:48 +0000</pubDate><atom:modified>Wed, 11 May 2022 19:51:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-thanos-using-binary.html</guid><description>1. Download the Binaries 1 2 3 4 wget https://github.com/thanos-io/thanos/releases/download/v0.26.0/thanos-0.26.0.linux-amd64.tar.gz tar xvf thanos-0.26.0.linux-amd64.tar.gz mv thanos-0.26.0.linux-amd64/thanos /usr/bin/ rm -rf thanos-0.26.0.linux-amd64* 2. Install Thanos Query 1 vim /etc/systemd/system/thanos-query.service 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [Unit] Description=Thanos Query After=network-online.target [Service] Restart=on-failure ExecStart=/usr/bin/thanos query \ --log.</description><dc:creator>WeChat Official Account</dc:creator><category>Monitoring</category><category>Thanos</category><category>Protocol</category><category>Prometheus</category><category>Operations</category><category>Observability</category><category>Learning</category></item><item><title>Understanding the Geopolitical World in One Book</title><link>https://www.chenshaowen.com/en/blog/book/a-book-to-understand-the-geoworld.html</link><pubDate>Wed, 11 May 2022 00:00:00 +0000</pubDate><atom:modified>Wed, 11 May 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/a-book-to-understand-the-geoworld.html</guid><description>Author: Wang Wei
Publisher: CITIC Press
Publication Year: 2017-10-15
ISBN: 9787508667751
Notes:
Within ten thousand years, geography is an unchangeable fact and a field that strategists continue to study in depth. To China&amp;rsquo;s east, past Japan and across the North Pacific, lies the United States; to China&amp;rsquo;s southwest, through the Indian Ocean and the Atlantic, China is also connected to the United States.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Geopolitics</category><category>Politics</category><category>International</category></item><item><title>The System Design Differences Between Operations and Business</title><link>https://www.chenshaowen.com/en/blog/the-differences-between-ops-and-business-while-designing-the-system.html</link><pubDate>Mon, 25 Apr 2022 00:00:00 +0000</pubDate><atom:modified>Mon, 25 Apr 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-differences-between-ops-and-business-while-designing-the-system.html</guid><description>1. Choosing a Communication Protocol Ops systems are better suited to HTTP than to gRPC.
More ops and R&amp;amp;D engineers are familiar with HTTP than with other protocols. Once you know the HTTP protocol, learning a RESTful-style HTTP API is quick. Being familiar to more people and easier to learn means better communication and lower handover cost, because they share more common domain background.</description><dc:creator>WeChat Official Account</dc:creator><category>Design</category><category>Thoughts</category><category>Operations</category><category>Systems</category><category>Architecture</category><category>API</category><category>R&amp;D</category><category>Best Practices</category></item><item><title>Adding imagePullSecrets to Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-add-imagepullsecrets-for-kubernetes.html</link><pubDate>Fri, 15 Apr 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 15 Apr 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-imagepullsecrets-for-kubernetes.html</guid><description>1. Adding via kubectl create 1 kubectl create secret docker-registry mypullsecret --docker-server=harbor.chenshaowen.com --docker-username=robot-test --docker-password=xxxxxx With kubectl create you can add credentials for pulling images directly.
2. Adding via ~/.docker/config.json Log in to the image registry with an account and password 1 docker login harbor.chenshaowen.com:5000 1 docker login harbor.chenshaowen.com You can add more than one.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Images</category><category>Operations</category><category>Configuration</category></item><item><title>Problems Using the obsutil Command in Containers</title><link>https://www.chenshaowen.com/en/blog/some-problems-using-obsutil-commands-in-containers.html</link><pubDate>Fri, 15 Apr 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 15 Apr 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-problems-using-obsutil-commands-in-containers.html</guid><description>1. The container&amp;rsquo;s ulimit is set too low Error message:
1 2 3 4 5 6 7 CheckpointDir: /root/.obsutil_checkpoint OutputDir: /root/.obsutil_output runtime: mlock of signal stack failed: 12 runtime: increase the mlock limit (ulimit -l) or runtime: update your kernel to 5.3.15+, 5.4.2+, or 5.5+ fatal error: mlock failed Under Docker, you can add the ulimit parameter at startup 1 docker run -it --ulimit memlock=-1 .</description><dc:creator>WeChat Official Account</dc:creator><category>Object Storage</category><category>Containers</category><category>Docker</category><category>Operations</category><category>Troubleshooting</category></item><item><title>Symmetry and Asymmetry</title><link>https://www.chenshaowen.com/en/blog/book/symmetry-and-asymmetry.html</link><pubDate>Sun, 03 Apr 2022 00:00:00 +0000</pubDate><atom:modified>Sun, 03 Apr 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/symmetry-and-asymmetry.html</guid><description>Author: [US] T.D. Lee
Publisher: Tsinghua University Press
Published: 2000-05
ISBN: 9787302038665
Notes:
I used to enjoy reading about mathematics and physics. After starting work, I was consumed by solving all kinds of project and technical problems, and gradually lost my curiosity about what the world really is. Thanks to the author&amp;rsquo;s deep mastery, this book presents symmetry and asymmetry across many fields and scenarios with ease, giving the reader a fairly direct feel for the consistency that lies within this contradiction.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Physics</category><category>Science</category><category>Reading</category><category>General Knowledge</category></item><item><title>An Advanced User Guide to Thanos</title><link>https://www.chenshaowen.com/en/blog/an-advanced-user-guide-about-thanos.html</link><pubDate>Mon, 28 Mar 2022 19:51:48 +0000</pubDate><atom:modified>Mon, 28 Mar 2022 19:51:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/an-advanced-user-guide-about-thanos.html</guid><description>1. Aggregating Data with Query As shown above, the components that Thanos Query can connect to are:
Thanos Store Gateway Thanos Query Thanos Receive Prometheus, by way of Sidecar By cascading Thanos Queries, we can perform correlated queries across components and build an extremely large monitoring system. This also means that every connected component should provide a sufficiently fast Prometheus API.</description><dc:creator>WeChat Official Account</dc:creator><category>Thanos</category><category>Monitoring</category><category>Storage</category><category>Metrics</category><category>Prometheus</category><category>Operations</category><category>Learning</category><category>Observability</category><category>Long-term Storage</category></item><item><title>A Global Image Distribution Network</title><link>https://www.chenshaowen.com/en/blog/a-global-images-distribution-network.html</link><pubDate>Sun, 27 Mar 2022 14:00:00 +0000</pubDate><atom:modified>Sun, 27 Mar 2022 14:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-global-images-distribution-network.html</guid><description>1. Global Network Planning Many global, multi-region infrastructures do not put much thought into network planning at the outset. Once the business grows complex enough, they are forced into network adjustments and optimization. Yet any major network change has a huge impact on the business. In the end you are stuck in a dilemma, able to do nothing but invest more people, carry the baggage of history, and walk along the edge of a cliff again and again.</description><dc:creator>WeChat Official Account</dc:creator><category>Images</category><category>Harbor</category><category>Network</category><category>Kubernetes</category><category>Operations</category><category>Distribution</category><category>Multi-Region</category><category>Learning</category></item><item><title>Managing Data from Multiple Prometheus Instances Centrally with Thanos</title><link>https://www.chenshaowen.com/en/blog/manage-multiple-prometheus-using-thanos.html</link><pubDate>Tue, 22 Mar 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Mar 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/manage-multiple-prometheus-using-thanos.html</guid><description>1. Layering of Monitoring As shown above, when building a monitoring system, two strategies are used:
Layered monitoring. The benefit of separating IaaS, MySQL middleware, and App layer monitoring is that the systems have high availability and fault tolerance between them. When App layer monitoring stops working, IaaS layer monitoring will immediately make that visible.</description><dc:creator>WeChat Official Account</dc:creator><category>Thanos</category><category>Prometheus</category><category>Monitoring</category><category>Storage</category><category>Kubernetes</category><category>Operations</category></item><item><title>Adding SSH Key Login and Troubleshooting</title><link>https://www.chenshaowen.com/en/blog/add-ssh-key-login-os-and-troubleshooting.html</link><pubDate>Thu, 10 Mar 2022 00:00:00 +0000</pubDate><atom:modified>Thu, 10 Mar 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/add-ssh-key-login-os-and-troubleshooting.html</guid><description>1. Steps to Add a Key 1.1 Generate an SSH Key on the Client There are two key formats:
Old format, the private key begins with -----BEGIN RSA PRIVATE KEY----- 1 ssh-keygen -m PEM -t rsa -b 4096 -C &amp;#34;mail@chenshaowen.com&amp;#34; New format, the private key begins with -----BEGIN OPENSSH PRIVATE KEY----- 1 ssh-keygen -t rsa -b 4096 -C &amp;#34;mail@chenshaowen.</description><dc:creator>WeChat Official Account</dc:creator><category>SSH</category><category>Operations</category><category>Configuration</category><category>Security</category><category>Troubleshooting</category></item><item><title>How to Upgrade a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-cluster.html</link><pubDate>Mon, 07 Mar 2022 00:00:00 +0000</pubDate><atom:modified>Mon, 07 Mar 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-upgrade-kubernetes-cluster.html</guid><description>The idea of the upgrade is: drain the workloads and take the traffic off, then upgrade the control plane nodes first and the worker nodes afterwards.
1. Check the cluster version 1 2 3 4 kubectl version Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;20&amp;#34;, GitVersion:&amp;#34;v1.20.4&amp;#34;, GitCommit:&amp;#34;e87da0bd6e03ec3fea7933c4b5263d151aafd07c&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2021-02-18T16:12:00Z&amp;#34;, GoVersion:&amp;#34;go1.15.8&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} Server Version: version.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Upgrade</category><category>Operations</category><category>Cluster</category><category>kubeadm</category><category>Troubleshooting</category><category>Learning</category></item><item><title>How to Inject Environment Variables into a Kubernetes Pod and the Priority Issue</title><link>https://www.chenshaowen.com/en/blog/injecting-env-vars-to-kubernetes-pod-and-priority.html</link><pubDate>Fri, 04 Mar 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Mar 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/injecting-env-vars-to-kubernetes-pod-and-priority.html</guid><description>1. Several Ways for a Kubernetes Pod to Reference Environment Variables 1.1 Directly Key/Value You can set the Value directly, and you can also use the current Pod&amp;rsquo;s information as the Value.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 apiVersion: v1 kind: Pod metadata: name: envar-demo labels: purpose: demonstrate-envars spec: containers: - name: envar-demo-container image: gcr.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Environment Variables</category><category>Configuration</category><category>Operations</category></item><item><title>Add an External DNS Service to a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/add-outer-dns-server-to-kubernetes-cluster.html</link><pubDate>Thu, 24 Feb 2022 01:00:00 +0000</pubDate><atom:modified>Thu, 24 Feb 2022 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/add-outer-dns-server-to-kubernetes-cluster.html</guid><description>1. Add DNS to the Host 1.1 CentOS The first method: manage DNS with /etc/resolv.conf
Disable NetworkManager If you do not disable NetworkManager, the DNS records you add directly to /etc/resolv.conf are lost after you restart the NetworkManager component.
1 2 3 4 vim /etc/NetworkManager/NetworkManager.conf [main] dns=none Add dns=none to the [main] section.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>DNS</category><category>Network</category><category>Operations</category></item><item><title>Migrating Docker Storage to a New Disk</title><link>https://www.chenshaowen.com/en/blog/how-to-migrate-docker-storage-to-new-disk.html</link><pubDate>Thu, 24 Feb 2022 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Feb 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-migrate-docker-storage-to-new-disk.html</guid><description>1. Formatting the Disk Check the new disk 1 fdisk -l Usually, the second disk is named /dev/sdb.
Partition the disk 1 fdisk /dev/sdb You will be prompted to enter parameters:
command (m for help):n
Partition number(1-4):1
First cylinder (1-22800,default 1):Enter
command (m for help):w
Format the disk as ext4 1 mkfs.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Storage</category><category>Operations</category><category>Migration</category><category>Troubleshooting</category></item><item><title>How Staged Builds Cache Third-Party Dependencies</title><link>https://www.chenshaowen.com/en/blog/how-to-cache-third-party-package-whilie-building-in-stage.html</link><pubDate>Tue, 22 Feb 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Feb 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-cache-third-party-package-whilie-building-in-stage.html</guid><description>In a non-staged build scenario, when we use a container to build, we can mount the cache directory inside the container onto the build host, run the build task, and then copy the artifacts into the runtime image to produce the application image. But with a staged build, the build image and the runtime image live in the same Dockerfile, which makes it harder to optimize the caching of third-party dependencies.</description><dc:creator>WeChat Official Account</dc:creator><category>CICD</category><category>CI</category><category>DevOps</category><category>Cache</category><category>Optimization</category></item><item><title>Some Common MySQL Commands</title><link>https://www.chenshaowen.com/en/blog/some-common-scripts-while-using-mysql.html</link><pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate><atom:modified>Fri, 18 Feb 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-common-scripts-while-using-mysql.html</guid><description>1. Passwordless Login Edit /etc/my.cnf and add a line under [mysqld]: skip-grant-tables=1 Restart the mysqld service 1 systemctl restart mysqld Log in to MySQL as the root user 1 mysql -u root 2. Allow All Access Sources Log in to MySQL 1 mysql -u root -p At the MySQL interactive command line, enter:</description><dc:creator>WeChat Official Account</dc:creator><category>MySQL</category><category>Scripting</category><category>Database</category><category>Operations</category><category>R&amp;D</category><category>Learning</category></item><item><title>Monitoring and Alerting System Overview</title><link>https://www.chenshaowen.com/en/blog/monitor-and-alarm-system-101.html</link><pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 15 Feb 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/monitor-and-alarm-system-101.html</guid><description>The hard part of a monitoring system is storing large volumes of time-series data and providing high-performance query capability; the hard part of an alerting system is designing an efficient alert engine and implementing a flexible alert escalation mechanism. I have been tracking monitoring and alerting systems for a while now, and this post mainly organizes some of the concepts, components, and research options related to monitoring and alerting.</description><dc:creator>WeChat Official Account</dc:creator><category>Monitoring</category><category>Alerting</category><category>Operations</category><category>Prometheus</category><category>Architecture</category></item><item><title>Bloom's Taxonomy</title><link>https://www.chenshaowen.com/en/blog/taxonomy-of-educational-objectives.html</link><pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 08 Feb 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/taxonomy-of-educational-objectives.html</guid><description>1. Bloom&amp;rsquo;s Taxonomy Bloom&amp;rsquo;s taxonomy is a classification scheme proposed by the American educational psychologist Benjamin Bloom in 1956 at the University of Chicago. It classifies educators&amp;rsquo; teaching objectives so that each objective can be achieved more effectively. According to Bloom&amp;rsquo;s theory, knowledge can be divided into the following three</description><dc:creator>WeChat Official Account</dc:creator><category>General Knowledge</category><category>Education</category><category>Learning</category><category>Cognition</category><category>Methodology</category><category>Thoughts</category></item><item><title>Interviewer Training - Identifying the Right People</title><link>https://www.chenshaowen.com/en/blog/interviewer-training-about-how-to-choose-right-people.html</link><pubDate>Tue, 18 Jan 2022 00:00:00 +0000</pubDate><atom:modified>Tue, 18 Jan 2022 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/interviewer-training-about-how-to-choose-right-people.html</guid><description>1. Interview Process Establish hiring criteria Align on hiring criteria Resume analysis Opening small talk Competency assessment Values assessment Verifying authenticity Motivation assessment Attracting strong candidates Closing the interview Filling out the interview evaluation form Assisting with onboarding follow-up 2. Before the Interview 2.1 Establish Hiring Criteria why Evaluate candidates with a unified assessment standard</description><dc:creator>WeChat Official Account</dc:creator><category>Interview</category><category>Training</category><category>Management</category><category>Teams</category><category>Recruiting</category><category>Talent</category><category>Learning</category><category>Human Resources</category></item><item><title>Several Open-Source Kubernetes Web Management Tools</title><link>https://www.chenshaowen.com/en/blog/several-open-source-kubernetes-web-management-tools.html</link><pubDate>Mon, 27 Dec 2021 01:00:00 +0000</pubDate><atom:modified>Mon, 27 Dec 2021 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/several-open-source-kubernetes-web-management-tools.html</guid><description>I have recently been researching open-source Kubernetes management platforms. The requirement is to manage hundreds of clusters on an intranet. The functional positioning is to assist operations and provide capabilities to the application layer, rather than serving end users directly.
1. Kubernetes Dashboard Project address:
https://github.com/kubernetes/dashboard
Tech stack: Angular + Go</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Comparison</category><category>Management Tools</category><category>Operations</category></item><item><title>A Simple Tutorial for Installing the DSM System</title><link>https://www.chenshaowen.com/en/blog/a-easy-tutorial-of-installation-dsm-system.html</link><pubDate>Tue, 21 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 21 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-easy-tutorial-of-installation-dsm-system.html</guid><description>1. Installation Preparation A USB drive with PE installed On MacOS, you can use balenaEtcher to burn the wepe for mac image.
Download the synoboot file http://down.nas2x.com/synology/dsm/6.2/synoboot/
Download the DSM.pat file https://archive.synology.com/download/Os/DSM
2. Getting Started Boot through PE and enter the system
Write synoboot to the built-in SSD storage
If you boot from a USB drive, you may also need to modify the PID and VID values in grup.</description><dc:creator>WeChat Official Account</dc:creator><category>DSM</category><category>Synology</category><category>Disk</category><category>Operations</category></item><item><title>Granafa Host Monitoring Configuration</title><link>https://www.chenshaowen.com/en/blog/how-to-config-host-monitor-on-grafana.html</link><pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 20 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-config-host-monitor-on-grafana.html</guid><description>1. Install node exporter 1 2 3 wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/ If you cannot reach GitHub, refer to: Several ways to access GitHub from mainland China .
2. Configure and start the exporter Add a Systemd configuration 1 vim /etc/systemd/system/node_exporter.service Add the following content:
1 2 3 4 5 6 7 8 9 10 11 12 [Unit] Description=Node Exporter After=network.</description><dc:creator>WeChat Official Account</dc:creator><category>Grafana</category><category>Prometheus</category><category>Monitoring</category><category>Host</category><category>Operations</category></item><item><title>Reading Btrfs Partition Files on MacOS</title><link>https://www.chenshaowen.com/en/blog/how-to-reading-btrfs-partition-files-under-macos.html</link><pubDate>Sun, 19 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Sun, 19 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-reading-btrfs-partition-files-under-macos.html</guid><description>1. Background and Prerequisites Compared with Ext4, Btrfs is a younger file system with more features to play with — snapshots, subvolumes, checksum self-verification, software RAID, and even transparent compression.
That said, if you do not have the operations capability behind you, it is best not to use Btrfs. This article records the process of pulling a Btrfs disk out of a Synology DSM system and reading its data.</description><dc:creator>WeChat Official Account</dc:creator><category>MacOS</category><category>Btrfs</category><category>Files</category><category>File System</category><category>Operations</category></item><item><title>Problems Using Go mod</title><link>https://www.chenshaowen.com/en/blog/some-questions-of-using-go-mod.html</link><pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 10 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-questions-of-using-go-mod.html</guid><description>1. go.sum Version Mismatch After Upgrading Go Running the command go build reports an error.
Error message:
missing go.sum entry for module providing package golang.org/x/time/rate; to add Solution:
Update go.sum before go build by running the command go mod tidy.
2. TLS Error Running the command go mod download reports an error.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>R&amp;D</category><category>Dependency Management</category><category>Troubleshooting</category></item><item><title>Common Commands for Cleaning Up Kubernetes Cluster Resources</title><link>https://www.chenshaowen.com/en/blog/common-commands-for-cleaning-up-kubernetes-cluster-resources.html</link><pubDate>Wed, 08 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 08 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-commands-for-cleaning-up-kubernetes-cluster-resources.html</guid><description>Clusters that run for a long time often face various kinds of resource exhaustion. On top of that, when disk space runs low, Kubelet will proactively clean up images on its own, adding another source of uncertainty. This article provides some command snippets for cleanup work.
1. Cleaning Up Basic Kubernetes Objects Clean up Pods in Evicted state 1 sudo kubectl get pods --all-namespaces -o wide | grep Evicted | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up Pods in Error state 1 sudo kubectl get pods --all-namespaces -o wide | grep Error | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up Pods in Completed state 1 sudo kubectl get pods --all-namespaces -o wide | grep Completed | awk &amp;#39;{print $1,$2}&amp;#39; | sudo xargs -L1 kubectl delete pod -n Clean up unused PVs 1 sudo kubectl describe -A pvc | grep -E &amp;#34;^Name:.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Practice</category><category>Cleanup</category><category>Operations</category><category>Learning</category><category>kubectl</category><category>Troubleshooting</category><category>Resource Management</category></item><item><title>Logstash Configuration Basics</title><link>https://www.chenshaowen.com/en/blog/the-basic-configuration-of-logstash.html</link><pubDate>Tue, 07 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 07 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-basic-configuration-of-logstash.html</guid><description>1. How Logstash Works Logstash is a component for data transport and processing. Through combinations of plugins, Logstash can handle a wide variety of log collection scenarios: logstash-&amp;gt;elasticsearch filebeat-&amp;gt;logstash-&amp;gt;elasticsearch filebeat-&amp;gt;kafka-&amp;gt;logstash-&amp;gt;elasticsearch filebeat-&amp;gt;redis-&amp;gt;logstash-&amp;gt;elasticsearch 2. Basic Logstash Configuration Here is the format of a Logstash configuration: 1 2 3 4 5 6 7</description><dc:creator>WeChat Official Account</dc:creator><category>Logging</category><category>Configuration</category><category>Practice</category><category>ELK</category><category>Operations</category><category>Learning</category></item><item><title>Time and Time Zones in Go</title><link>https://www.chenshaowen.com/en/blog/the-tips-of-time-and-tz-in-go.html</link><pubDate>Tue, 07 Dec 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 07 Dec 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-tips-of-time-and-tz-in-go.html</guid><description>1. Time and Time Zones 1.1 Time Standards UTC, Coordinated Universal Time, is the current time standard, counted by atomic time.
GMT, Greenwich Mean Time, is the older time standard, which defines the moment the sun passes over the Royal Observatory in Greenwich, on the outskirts of London, as 12 noon.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>R&amp;D</category><category>Time</category><category>Time Zone</category></item><item><title>Pulling DockerHub images fails to connect to Cloudflare</title><link>https://www.chenshaowen.com/en/blog/cant-connect-cloudflare-while-pulling-docker-image.html</link><pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 12 Nov 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/cant-connect-cloudflare-while-pulling-docker-image.html</guid><description>1. Error message When pulling an image, you will occasionally run into the following error:
1 2 3 4 5 6 7 8 docker pull node:10.16-alpine 10.16-alpine: Pulling from library/node e7c96db7181b: Already exists 50958466d97a: Pulling fs layer 56174ae7ed1d: Pulling fs layer 284842a36c0d: Pulling fs layer error pulling image configuration: Get https://production.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>Troubleshooting</category><category>Network</category><category>Operations</category></item><item><title>Application Configuration Management: The Assembly Model and the Template Model</title><link>https://www.chenshaowen.com/en/blog/using-assembly-and-template-model-to-manage-app-config.html</link><pubDate>Wed, 10 Nov 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 10 Nov 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-assembly-and-template-model-to-manage-app-config.html</guid><description>Application configuration management is about the configuration that an application depends on at runtime, which is different from the static configuration of a project. This article is a summary drawn from real development work, offered for your reference; discussion is welcome too.
1. About Configuration Management 1.1 Terminology Configuration item A single key=value pair</description><dc:creator>WeChat Official Account</dc:creator><category>Configuration Management</category><category>PaaS</category><category>Platform</category><category>Configuration</category><category>R&amp;D</category></item><item><title>Kubernetes Cluster Planning: Scale and Node Size</title><link>https://www.chenshaowen.com/en/blog/the-scale-and-node-size-of-kubernetes-cluster.html</link><pubDate>Mon, 01 Nov 2021 10:00:00 +0000</pubDate><atom:modified>Mon, 01 Nov 2021 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-scale-and-node-size-of-kubernetes-cluster.html</guid><description>Judging from the survey data, more people lean toward choosing small clusters. Below is a comparison list from the perspective of node count and node configuration.
Below is a comparison of choosing a few large clusters versus many small clusters:
Feature A few large clusters Many small clusters Resource utilization High Low Node management overhead Low High Resource scaling range Large Small Resource scheduling range Large Small Efficiency of inter-application communication High Low Cluster operations difficulty High Low Cluster version diversity Low High Blast radius Large Small Below is a comparison of choosing a few high-spec nodes versus many low-spec nodes:</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Cluster</category><category>Planning</category><category>Operations</category><category>Node</category></item><item><title>Several Communication Methods for Jenkins Agent</title><link>https://www.chenshaowen.com/en/blog/a-few-communication-methods-of-jenkins-agent.html</link><pubDate>Mon, 01 Nov 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 01 Nov 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-few-communication-methods-of-jenkins-agent.html</guid><description>1. SSH Connection direction: Master actively connects to Agent
Requirements:
Master can connect directly to Agent over SSH The SSHD service is running on Agent Jenkins has the SSH Credentials Plugin and the SSH Build Agents plugin installed 2. JNLP Connection direction: Agent actively connects to Master
Requirements:
Agent can reach Master Agent needs a JVM environment to run Master needs to expose port 50000 (the default) for Agent communication Port 50000 is the service port of the Jenkins Master; no other service program needs to be run for it.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>CICD</category><category>DevOps</category><category>Operations</category></item><item><title>Measure What Matters</title><link>https://www.chenshaowen.com/en/blog/book/measure-what-matters.html</link><pubDate>Sat, 23 Oct 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 23 Oct 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/measure-what-matters.html</guid><description>Subtitle: The Working Method Behind the Explosive Growth of Google and Amazon
Author: John Doerr (US)
Publisher: CITIC Press
Publication Year: 2018-12
ISBN: 9787508696881
Notes:
OKR stands for Objectives and Key Results, a working method for managing goals and their completion invented by Intel founder Andy Grove. The O stands for Objective, which should be important and specific, action-oriented, and inspiring — for example, improving the stability of a system.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Work</category><category>Methods</category><category>Management</category><category>OKR</category><category>Goals</category></item><item><title>What Makes You Mediocre</title><link>https://www.chenshaowen.com/en/blog/what-makes-you-common.html</link><pubDate>Thu, 14 Oct 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 14 Oct 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-makes-you-common.html</guid><description>1. Lacking a Desire That Comes from Within Desire is what creates motivation. The desire to survive and the desire for something better are the wellspring that drives human progress. The stronger the desire, the stronger the motivation. An intense desire makes a person charge at the goal regardless of everything.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Growth</category><category>Life</category><category>Personal Growth</category><category>Methodology</category></item><item><title>Building Two Places and Three Centers Under Containers</title><link>https://www.chenshaowen.com/en/blog/the-construction-of-two-places-and-three-centers-under-the-container.html</link><pubDate>Sun, 10 Oct 2021 00:00:00 +0000</pubDate><atom:modified>Sun, 10 Oct 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-construction-of-two-places-and-three-centers-under-the-container.html</guid><description>1. About Two Places and Three Centers As shown above, the two-places-three-centers architecture exists to improve the fault tolerance and disaster recovery capability of a system. When one data center becomes unavailable, traffic for critical business can be switched to another data center, which makes the system resilient to city-level natural disasters.</description><dc:creator>WeChat Official Account</dc:creator><category>Two Places Three Centers</category><category>Containers</category><category>Kubernetes</category><category>Operations</category><category>Disaster Recovery</category></item><item><title>The Low-IQ Society</title><link>https://www.chenshaowen.com/en/blog/book/low-iq-society.html</link><pubDate>Tue, 05 Oct 2021 12:09:51 +0000</pubDate><atom:modified>Tue, 05 Oct 2021 12:09:51 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/low-iq-society.html</guid><description>Subtitle: How to Break Out of the Decline of IQ
Author: (Japan) Kenichi Ohmae
Publisher: CITIC Press
Publication Year: 2010-4
ISBN: 9787508619262
Notes:
What is worth noting is when this book was written. More than a decade later, reading it still conveys its weight.
The more developed the network, the lazier the brain.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Thoughts</category><category>Society</category><category>Development</category></item><item><title>The Definition of Application Runtime Under Multiple Environments</title><link>https://www.chenshaowen.com/en/blog/the-definition-of-application-runtime-under-multiple-env.html</link><pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 18 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-definition-of-application-runtime-under-multiple-env.html</guid><description>1. Why We Need to Define the Application Runtime There are more runtime choices. Traditional application runtimes include physical machines, virtual machines, and cloud hosts. In the container era, the common runtimes are Docker and Kubernetes. These runtimes no longer present us with a single runtime choice.
Application topologies are more complex.</description><dc:creator>WeChat Official Account</dc:creator><category>Labels</category><category>Development</category><category>Environment</category><category>Operations</category><category>R&amp;D</category></item><item><title>Multi-Cluster Applications Under Kubevela</title><link>https://www.chenshaowen.com/en/blog/multi-cluster-applications-under-kubevela.html</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 17 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/multi-cluster-applications-under-kubevela.html</guid><description>Kubevela is currently at version 1.1. We usually consider 1.x releases to be relatively stable and safe to try in production. Through continuous tracking and learning, I have also come to appreciate some of the things Kubevela does well. This is a summary document.
1. What Problem Kubevela Solves Aimed at platform developers Several roles need to be distinguished: development, operations, and operations development.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubevela</category><category>Kubernetes</category><category>Application</category><category>Operations</category><category>Multi-Cluster</category><category>OAM</category><category>Learning</category><category>Cloud Native</category></item><item><title>Replacing Calico with Cilium</title><link>https://www.chenshaowen.com/en/blog/how-to-use-cilium-to-replace-calico.html</link><pubDate>Thu, 16 Sep 2021 08:01:28 +0000</pubDate><atom:modified>Thu, 16 Sep 2021 08:01:28 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-cilium-to-replace-calico.html</guid><description>1. System Requirements Kubernetes, &amp;gt;= 1.16.0-0 Helm, &amp;gt;= 3.0 Linux kernel &amp;gt;= 4.9.17 For the process of upgrading the kernel on CentOS 7, see How to Switch the Data Plane to eBPF Under Calico.
2. Uninstalling Calico Delete the cluster resources 1 2 3 4 5 6 kubectl -n kube-system delete ds calico-node kubectl -n kube-system delete deploy calico-kube-controllers kubectl -n kube-system delete sa calico-node kubectl -n kube-system delete sa calico-kube-controllers kubectl -n kube-system delete cm calico-config kubectl -n kube-system delete secret calico-config 1 kubectl get crd | grep calico | awk &amp;#39;{print $1}&amp;#39; | xargs kubectl delete crd Bring down the Tunl0 interface 1 ifconfig tunl0 down Remove the Calico configuration files 1 rm -rf /etc/cni/net.</description><dc:creator>WeChat Official Account</dc:creator><category>Cilium</category><category>Calico</category><category>Kubernetes</category><category>Containers</category><category>Network</category></item><item><title>How to Switch the Data Plane to eBPF Under Calico</title><link>https://www.chenshaowen.com/en/blog/how-to-switch-data-plane-to-ebpf.html</link><pubDate>Wed, 15 Sep 2021 07:33:55 +0000</pubDate><atom:modified>Wed, 15 Sep 2021 07:33:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-switch-data-plane-to-ebpf.html</guid><description>1. Environment Preparation 1.1 Calico eBPF Requirements System requirements
Ubuntu 18.04.4+ Red Hat v8.2 Linux kernel v5.3+ If Calico does not detect a compatible kernel, it falls back to standard mode.
Every node needs a BPF filesystem mounted at /sys/fs/bpf
Calico version no lower than 3.13
1.2 Upgrading the Kernel This uses CentOS 7:</description><dc:creator>WeChat Official Account</dc:creator><category>Network</category><category>Calico</category><category>eBPF</category><category>Kubernetes</category><category>Operations</category></item><item><title>Kubernetes Installation Q&amp;A</title><link>https://www.chenshaowen.com/en/blog/the-question-and-answer-of-kubernetes-installation.html</link><pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 10 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-question-and-answer-of-kubernetes-installation.html</guid><description>1. Calico 1.1 BIRD is not ready 1 kubectl -n kube-system get pod calico-node-xxx stays at 0/1 and never comes up, reporting calico/node is not ready: BIRD is not ready: BGP not established with
Solution:
Calico uses first-found by default, meaning it takes the NodeIP from the first NIC it finds.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Installation</category><category>Troubleshooting</category><category>Calico</category><category>Operations</category></item><item><title>Linux Network Traffic Monitoring Terminal Tool - nload</title><link>https://www.chenshaowen.com/en/blog/the-nload-is-a-the-terminal-tool-of-linux-network-traffic-monitor.html</link><pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 10 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-nload-is-a-the-terminal-tool-of-linux-network-traffic-monitor.html</guid><description>nload is a terminal tool for traffic monitoring. It reads the /proc/net/dev file and draws traffic graphs. Below is a brief introduction to using it. 1. Installation CentOS 1 yum install -y nload If your system&amp;rsquo;s repositories cannot find the nload package, run the following command to add a new</description><dc:creator>WeChat Official Account</dc:creator><category>Linux</category><category>Tools</category><category>nload</category><category>Monitoring</category><category>Operations</category></item><item><title>How to Add a New Access Entry Point to the Kubernetes Apiserver</title><link>https://www.chenshaowen.com/en/blog/how-to-add-entrance-to-kubernetes-apiserver.html</link><pubDate>Wed, 08 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 08 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-entrance-to-kubernetes-apiserver.html</guid><description>1. How to Access a Remote Cluster Locally During development, you often need to connect directly to a remote Kubernetes cluster. The usual approach is to copy /etc/kubernetes/admin.conf to your local ~/.kube/kubeconfig.
But the kubeconfig&amp;rsquo;s server address is kubernetes.default.svc. So we need to configure a hosts entry:
1 1.1.1.1 kubernetes.default.svc If you need to switch between different clusters, you not only have to swap the kubeconfig but also modify hosts.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>R&amp;D</category><category>Certificates</category><category>Operations</category><category>Security</category><category>Configuration</category></item><item><title>Prometheus and Grafana: Building Kubernetes Monitoring</title><link>https://www.chenshaowen.com/en/blog/the-monitor-of-kubernetes-using-prometheus-grafana.html</link><pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 03 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-monitor-of-kubernetes-using-prometheus-grafana.html</guid><description>The Prometheus community moves so fast that some of the documents I wrote earlier have become outdated. I&amp;rsquo;ve recently started paying attention to observability again, filling in some of the gaps in my operations knowledge.
1. Terminology Grafana A visualization tool that provides a variety of visualization panels and supports many data sources, including Prometheus, OpenTSDB, MySQL, and others.</description><dc:creator>WeChat Official Account</dc:creator><category>Prometheus</category><category>Grafana</category><category>Kubernetes</category><category>Monitoring</category><category>Operations</category><category>Observability</category></item><item><title>Why Does Jenkins Always Schedule to the Same Node</title><link>https://www.chenshaowen.com/en/blog/why-does-jenkins-agent-like-going-to-the-same-node.html</link><pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 02 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/why-does-jenkins-agent-like-going-to-the-same-node.html</guid><description>1. Background Many build nodes were added to Jenkins using the same Label for pipelines to use, but Jenkins tends to run builds on the same node every time.
This leads to concurrency problems: a single node is overloaded while other nodes sit idle, so the load is extremely unbalanced.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>CICD</category><category>DevOps</category><category>Kubernetes</category><category>Scheduling</category><category>Operations</category><category>Troubleshooting</category></item><item><title>Gateway Service on Kubernetes: APISIX</title><link>https://www.chenshaowen.com/en/blog/a-gateway-under-kubernetes-named-apisix.html</link><pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Sep 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-gateway-under-kubernetes-named-apisix.html</guid><description>1. Comparing a Few Common Gateways Nginx, a reverse proxy with a modular design, written in C OpenResty, a web development platform built around Nginx that can parse and execute Lua scripts Kong, an application on top of OpenResty, an API gateway with API management and request proxying, using PostgreSQL for storage APISIX, which replaces Kong&amp;rsquo;s PostgreSQL with Etcd and is built on Nginx&amp;rsquo;s core libraries APISIX&amp;rsquo;s advantage lies in the API management and extensibility it provides, so the gateway no longer merely forwards traffic to services but can be configured and customized.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>APISIX</category><category>Microservices</category><category>Gateway</category><category>Operations</category><category>Proxy</category><category>Learning</category><category>Cloud Native</category></item><item><title>Developing a WeChat Official Account Backend with Tencent Cloud Serverless</title><link>https://www.chenshaowen.com/en/blog/develop-a-wechat-backend-using-tencent-serverless.html</link><pubDate>Sat, 28 Aug 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 28 Aug 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/develop-a-wechat-backend-using-tencent-serverless.html</guid><description>1. Where Serverless Fits If cloud computing is meant to make resources flow like tap water — turn it on and use it, turn it off and it stops — then Serverless is one of the future directions of cloud computing. Compared with runtimes such as IaaS and Kubernetes, Serverless</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>CICD</category><category>Serverless</category><category>WeChat</category><category>R&amp;D</category><category>Operations</category></item><item><title>A CICD Platform Based on Tekton</title><link>https://www.chenshaowen.com/en/blog/a-cicd-system-based-on-tekton.html</link><pubDate>Wed, 25 Aug 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Aug 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-cicd-system-based-on-tekton.html</guid><description>1. Background 1.1 Problems with the Current Use of Jenkins The orchestration engine is unstable Jenkins is an orchestration engine written in Java, and it stops the world (STW) during a full GC. Under large-scale builds, STW can prevent Jenkins from handling new requests.
Heavy builds stall Jenkins stores data in disk files; every pipeline and every build occupies a file directory, producing a huge number of files.</description><dc:creator>WeChat Official Account</dc:creator><category>CICD</category><category>DevOps</category><category>Tekton</category><category>Kubernetes</category><category>Operations</category><category>Pipeline</category><category>Learning</category></item><item><title>How to Trigger GitHub Actions Remotely</title><link>https://www.chenshaowen.com/en/blog/how-to-trigger-github-action-remotely.html</link><pubDate>Wed, 25 Aug 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Aug 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-trigger-github-action-remotely.html</guid><description>Usually, we need to perform some operation on GitHub in order to trigger a GitHub Action. This post introduces a way to trigger a GitHub Action remotely through an API call.
1. Common Ways to Trigger a GitHub Action Here is an example GitHub Action:
1 2 3 4 5 6 7 name: GitHub Actions Demo on: [push, pull_request] jobs: Explore-GitHub-Actions: runs-on: ubuntu-latest steps: - run: echo &amp;#34;Hello World!</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>GitHub Actions</category><category>CICD</category><category>DevOps</category><category>Tools</category><category>R&amp;D</category></item><item><title>Tekton Pipelines Across Multiple Clusters</title><link>https://www.chenshaowen.com/en/blog/using-kubefed-to-distribute-tekton-resource-cross-cluster.html</link><pubDate>Sat, 26 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 26 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-kubefed-to-distribute-tekton-resource-cross-cluster.html</guid><description>1. The Advantages of Multi-Cluster Tekton Builds Thanks to Kubernetes, Tekton already has good elasticity and can support large-scale builds. At the same time, developing Tasks mainly uses Yaml and Shell, which widens the range of scenarios Tekton can adapt to.
The figure above is a sketch of Tekton across multiple clusters.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>KubeFed</category><category>Kubernetes</category><category>Multi-Cluster</category><category>CICD</category><category>Operations</category><category>Learning</category><category>Pipeline</category><category>Build</category><category>Distributed Systems</category></item><item><title>Building and Using Go Private Packages</title><link>https://www.chenshaowen.com/en/blog/building-and-using-go-private-packages.html</link><pubDate>Thu, 24 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/building-and-using-go-private-packages.html</guid><description>1. Create a Go Modules Project Create the directory 1 2 mkdir go-test cd go-test Initialize the package 1 2 3 4 5 go mod init gitlab.private.com/shaowenchen/go-test go: creating new go.mod: module gitlab.private.com/shaowenchen/go-test go: to add module requirements and sums: go mod tidy Add the business code main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package main import ( &amp;#34;github.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Getting Started</category><category>Build</category><category>R&amp;D</category></item><item><title>How to Implement an Approval Feature in Tekton</title><link>https://www.chenshaowen.com/en/blog/how-to-implement-approval-function-in-tekton.html</link><pubDate>Thu, 24 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-implement-approval-function-in-tekton.html</guid><description>1. Basic Features of a CICD Platform A common CICD engine is not suitable to hand directly to the business side. The main reasons are the high learning cost for users, the lack of necessary authentication, and the difficulty of maintenance and upgrades.
We usually build on top of a process engine, adapting it to the business to improve usability and encapsulating it for specific scenarios to reduce complexity.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category><category>Operations</category></item><item><title>How to Change Kubelet Startup Parameters</title><link>https://www.chenshaowen.com/en/blog/how-to-change-kubelet-config.html</link><pubDate>Wed, 23 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 23 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-change-kubelet-config.html</guid><description>1. Edit the Kubelet Configuration File 1 vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf Modify the relevant Kubelet parameters
ExecStart=/usr/local/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS You can list the available parameters with the following command:
1 kubelet --help For example, if you need to change --sync-frequency in KUBELET_KUBECONFIG_ARGS, the period for syncing container configuration, the default value is 1 min.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Kubelet</category><category>Configuration</category><category>Operations</category><category>Learning</category><category>Node</category><category>systemd</category><category>Troubleshooting</category></item><item><title>How to Configure NetworkPolicy for NodePort in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-configure-networkpolicy-for-nodeport.html</link><pubDate>Wed, 23 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 23 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-configure-networkpolicy-for-nodeport.html</guid><description>1. Background As shown above, the business team needs to isolate the services in a namespace, forbidding access from workloads in the bar namespace while allowing users to reach the service through a Load Balancer (LB) via NodePort. It is easy to write a network policy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apiVersion: networking.</description><dc:creator>WeChat Official Account</dc:creator><category>NetworkPolicy</category><category>Network</category><category>Kubernetes</category><category>Operations</category><category>Security</category><category>Learning</category><category>NodePort</category><category>Network Isolation</category></item><item><title>Can /var/lib/docker Be Mounted on Remote Storage?</title><link>https://www.chenshaowen.com/en/blog/can-we-mount-var-lib-docker-to-remote-storage.html</link><pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 22 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/can-we-mount-var-lib-docker-to-remote-storage.html</guid><description>No.
1. Background When building a reliable, stable operations system on top of Kubernetes, destroying and creating virtual machines (VMs) is the norm. VMs provide compute and memory resources, while external storage is exposed to PVCs in the cluster through a StorageClass.
Against this backdrop, how to initialize a VM quickly becomes a new challenge.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Containers</category><category>Storage</category><category>Kubernetes</category><category>Can We</category></item><item><title>How to Customize Your Own Jenkins Image</title><link>https://www.chenshaowen.com/en/blog/how-to-customize-your-jenkins.html</link><pubDate>Sat, 05 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 05 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-customize-your-jenkins.html</guid><description>1. How to Deploy Jenkins To make the tests below easier, let me first introduce two ways to deploy Jenkins. Here I use the shaowenchen/jenkins:2.277.4 image. In a production environment, you should replace it with the official jenkins/jenkins image or your own custom image.
1.1 Running with docker-compose The docker-compose.yaml file</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>CICD</category><category>Jenkins</category><category>Docker</category><category>Operations</category></item><item><title>Best Practices for Jenkins on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/best-practices-for-jenkins-on-kubernetes.html</link><pubDate>Fri, 04 Jun 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Jun 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/best-practices-for-jenkins-on-kubernetes.html</guid><description>1. Configure Larger -Xms -Xmx Parameters Jenkins is an orchestration engine written in Java, and it stops the world (STW) during a Full GC. At large build scale, STW can prevent Jenkins from handling new requests.
To avoid frequent STW while also increasing concurrency, it is recommended to set a larger heap, -Xms3g -Xmx6g -XX:MaxRAM=6g.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>CICD</category><category>Jenkins</category><category>Kubernetes</category><category>Operations</category></item><item><title>A Universal Pipeline Design</title><link>https://www.chenshaowen.com/en/blog/a-universal-design-for-pipeline.html</link><pubDate>Wed, 19 May 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 19 May 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-universal-design-for-pipeline.html</guid><description>1. Decoupling the Engine to Unlock Pipeline Capabilities When designing a system, we often face a dilemma. Do we contain the complexity and offer a single, easy-to-use capability to the outside; or do we release the complexity and return flexibility to the user? This is a real test of product</description><dc:creator>WeChat Official Account</dc:creator><category>Cloud Native</category><category>DevOps</category><category>CICD</category><category>Thoughts</category><category>R&amp;D</category></item><item><title>Kubernetes Network Isolation (with a Dozen-Plus Use Cases)</title><link>https://www.chenshaowen.com/en/blog/network-policy-of-kubernetes.html</link><pubDate>Tue, 18 May 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 18 May 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/network-policy-of-kubernetes.html</guid><description>1. Network Isolation in Kubernetes Kubernetes introduced Network Policy in 1.3. It defines entities through ipBlock, podSelector, and namespaceSelector, and controls their From (Ingress) and To (Egress) traffic behavior.
But Kubernetes only defines the network policy; the actual implementation depends on the network plugin. Today, network plugins such as Calico, Cilium, and Weave Net all support network isolation.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Network Isolation</category><category>NetworkPolicy</category><category>Operations</category></item><item><title>Cherish the BlueKing You Encounter</title><link>https://www.chenshaowen.com/en/blog/blueking-is-a-platform-worth-having.html</link><pubDate>Sat, 15 May 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 15 May 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/blueking-is-a-platform-worth-having.html</guid><description>1. My Experience Building Platforms After graduation I joined Tencent BlueKing, mainly working on SaaS development. After nearly three years there, I went back to my hometown of Wuhan and joined QingCloud, where I was responsible for DevOps R&amp;amp;D. After nearly two years, I joined a new company, took part in building a business support platform, and thought about how the business side puts Kubernetes into practice.</description><dc:creator>WeChat Official Account</dc:creator><category>PaaS</category><category>BlueKing</category><category>Thoughts</category><category>Platform</category><category>DevOps</category><category>Operations</category></item><item><title>Several Ways to Access GitHub from China</title><link>https://www.chenshaowen.com/en/blog/some-tips-to-access-github.html</link><pubDate>Fri, 14 May 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 14 May 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-tips-to-access-github.html</guid><description>For well-known reasons, accessing Github from a network environment in China is either blocked or very slow. This article provides several ways to get around it. 1. Download Using a Github Mirror Just prepend a Proxy address to the GitHub repository; the way different Mirrors are concatenated may vary. The</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>R&amp;D</category><category>Operations</category><category>Network</category><category>Proxy</category></item><item><title>Jenkins vs. Tekton</title><link>https://www.chenshaowen.com/en/blog/jenkins-vs-tekton.html</link><pubDate>Sat, 01 May 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 01 May 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jenkins-vs-tekton.html</guid><description>Below is a list comparing Jenkins and Tekton:
Feature Jenkins Tekton Programming language Java Golang Language for developing plugins Java Shell, Yaml Pipeline description language Groovy, Shell Yaml, Shell Plugin ecosystem Many plugins, LDAP, GitLab Lacking Number of plugins 1500+ 100+ Compatibility between plugins May conflict, cannot be upgraded freely Fully compatible Secondary development Wrapping the API Composing Tasks High availability Integrates Gearman, master-slave mode Relies on Kubernetes&amp;rsquo; high availability Concurrent build scale per instance A few hundred concurrent builds Relies on Kubernetes&amp;rsquo; Pod management capability, so it can be very large Data storage Local disk Etcd Supports automatic triggering Yes Yes Has commercial support No No</description><dc:creator>WeChat Official Account</dc:creator><category>CICD</category><category>Jenkins</category><category>Tekton</category><category>Kubernetes</category><category>DevOps</category><category>Comparison</category></item><item><title>Docker 20.10.6 fails to pull certain images with an unlinkat error</title><link>https://www.chenshaowen.com/en/blog/pull-images-unlinkat.html</link><pubDate>Thu, 29 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 29 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/pull-images-unlinkat.html</guid><description>This is on CentOS 7, kernel version 3.10.0-327.
1. Check the current Docker version 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 docker version Client: Docker Engine - Community Version: 20.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>Troubleshooting</category><category>Operations</category><category>Learning</category><category>Storage Driver</category><category>overlay2</category></item><item><title>How to Set Up a Private Registry Mirror</title><link>https://www.chenshaowen.com/en/blog/how-to-run-a-private-registry-mirror.html</link><pubDate>Thu, 29 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 29 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-run-a-private-registry-mirror.html</guid><description>A Docker mirror can only accelerate images from docker.io, not images from private registries.
1. Why You Need a Private Registry Mirror Rate limiting on the public network Docker Hub pull rate limits Reduce image pull time 2. Create a Registry Image Acceleration Service Generate a configuration file version: 0.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Containers</category><category>Images</category><category>Operations</category><category>Registry</category><category>Acceleration</category></item><item><title>How Tekton Connects to Physical Machines for Builds</title><link>https://www.chenshaowen.com/en/blog/how-to-add-physical-machines-to-tekton.html</link><pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 28 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-physical-machines-to-tekton.html</guid><description>1. Why Physical Build Machines Are Needed In the article How to Add a Remote macOS Physical Machine for Jenkins Pipeline Builds, I described how to add a physical build machine in Jenkins. This was not a requirement I made up on a whim — at the time, real ToB commercial customers were actually asking for a solution.</description><dc:creator>WeChat Official Account</dc:creator><category>Tekton</category><category>Cloud Native</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category><category>Operations</category></item><item><title>Installing macOS on a Dell OptiPlex 7080MT</title><link>https://www.chenshaowen.com/en/blog/how-to-install-macos-on-dell-optiplex-7080.html</link><pubDate>Mon, 26 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 26 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-install-macos-on-dell-optiplex-7080.html</guid><description>About ten years ago, I installed macOS on a laptop. The biggest headache back then was that only specific hardware could succeed, and drivers for all sorts of things were missing. Later I bought my own Mac laptop and stopped paying attention to how to install macOS on generic machines for a long time.</description><dc:creator>WeChat Official Account</dc:creator><category>Hackintosh</category><category>macOS</category><category>Hardware</category><category>Operations</category></item><item><title>Some Common Computer Interview Questions</title><link>https://www.chenshaowen.com/en/blog/some-common-computer-interview-questions.html</link><pubDate>Mon, 26 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 26 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-common-computer-interview-questions.html</guid><description>Computer Fundamentals Heap and Stack When do you use the heap? When do you use the stack? What is the stack for? Are Go variables on the stack or the heap? Do the heap and stack have limits? If so, what are they related to?
Data Structures How is space allocated for a slice?</description><dc:creator>WeChat Official Account</dc:creator><category>R&amp;D</category><category>Interview</category><category>Learning</category><category>Computer Fundamentals</category></item><item><title>Distributing Files and Running Scripts on VM Nodes in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-distribute-files-and-scripts-to-vm-under-kubernetes.html</link><pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-distribute-files-and-scripts-to-vm-under-kubernetes.html</guid><description>1. What This Article Mainly Discusses Never build a high tower on shifting sand. Business growth and the evolution of business forms both need solid, powerful IT systems to support them. Business content is transparent to the market, but IT systems cannot be built to perfection overnight. In the future, competition between companies will mainly come from competition between their IT systems, and the ability to respond quickly to business requirements will be the key to winning.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Docker</category><category>PaaS</category><category>Operations</category><category>Configuration Management</category><category>Virtual Machines</category><category>Learning</category><category>Cloud Native</category></item><item><title>How to Build the istio Project on CentOS 8</title><link>https://www.chenshaowen.com/en/blog/how-to-build-istio-under-centos.html</link><pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 08 Apr 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-istio-under-centos.html</guid><description>This article mainly describes how to build the https://github.com/istio/istio project on CentOS 8.2 using local tools. Another approach is to use the BUILD_WITH_CONTAINER parameter to build inside a container, which depends only on make and docker.
1. Install and Upgrade Ruby &amp;gt;= 2.6 Install Ruby 1 yum install -y ruby Check the Ruby version 1 2 3 ruby -v ruby 2.</description><dc:creator>WeChat Official Account</dc:creator><category>CentOS</category><category>Istio</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Service Mesh</category><category>Compilation</category><category>Open Source</category></item><item><title>The Road to Open Source for a ToB Startup - KubeSphere</title><link>https://www.chenshaowen.com/en/blog/the-road-to-open-source-for-tob.html</link><pubDate>Tue, 30 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 30 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-road-to-open-source-for-tob.html</guid><description>1. An Open-Source-Centric Business Model One of the charms of open source is its inclusiveness. It accepts people with all kinds of intentions — the engineer obsessed with technology, the merchant with ulterior motives, the volunteer passionate about public welfare, even the casual bystander — all of them can collide and mingle here, forming a force.</description><dc:creator>WeChat Official Account</dc:creator><category>Open Source</category><category>ToB</category><category>Thoughts</category><category>KubeSphere</category><category>Kubernetes</category></item><item><title>Installing and Configuring Zsh on CentOS 7</title><link>https://www.chenshaowen.com/en/blog/install-zsh-in-centos-7.html</link><pubDate>Mon, 29 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 29 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-zsh-in-centos-7.html</guid><description>1. Install zsh 1 sudo yum install -y zsh 2. Install oh-my-zsh 1 sh -c &amp;#34;$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&amp;#34; It is recommended to set Zsh as the default shell.
3. Install Plugins 3.1 Install autojump 1 sudo yum install -y epel-release 1 sudo yum install -y autojump-zsh 3.2 Install zsh-autosuggestions 1 git clone git://github.</description><dc:creator>WeChat Official Account</dc:creator><category>CentOS</category><category>Linux</category><category>Environment</category><category>Zsh</category><category>Operations</category></item><item><title>Installing and Configuring Homebrew on CentOS 7</title><link>https://www.chenshaowen.com/en/blog/install-homebrew-in-centos-7.html</link><pubDate>Sun, 28 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Sun, 28 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-homebrew-in-centos-7.html</guid><description>When installing packages on CentOS you usually have to hunt down all sorts of repositories; with Homebrew that hassle goes away. This article uses CentOS 7.6 — other system versions may differ.
1. Create a Non-root User Homebrew refuses to run as root, so a new user has to be created.</description><dc:creator>WeChat Official Account</dc:creator><category>CentOS</category><category>Environment</category><category>Homebrew</category><category>Operations</category><category>Package Management</category><category>Learning</category></item><item><title>DevOps Platform under Cloud Native</title><link>https://www.chenshaowen.com/en/blog/devops-platform-under-cloud-native.html.html</link><pubDate>Wed, 24 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/devops-platform-under-cloud-native.html.html</guid><description>1. What Is Cloud Native Cloud native is a rapidly evolving field.
In 2013, Pivotal proposed the concept of cloud native and has continued to interpret it. Below is Pivotal&amp;rsquo;s description of the characteristics of cloud-native architecture:
2015: 12-Factor, microservices-oriented, anti-fragile 2017: Observability, modularity, replaceability, disposability 2019: DevOps, continuous delivery, microservices, containers Many people&amp;rsquo;s first encounter with cloud native may have been through the CNCF.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>Thoughts</category><category>Cloud Native</category><category>Operations</category><category>Platform</category><category>CICD</category><category>Kubernetes</category></item><item><title>The Cathedral and the Bazaar</title><link>https://www.chenshaowen.com/en/blog/book/musings-on-linux-and-open-source.html</link><pubDate>Tue, 16 Mar 2021 10:00:00 +0000</pubDate><atom:modified>Tue, 16 Mar 2021 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/musings-on-linux-and-open-source.html</guid><description>Author: Eric S. Raymond (US)
Publisher: China Machine Press
Original title: The Cathedral &amp;amp; the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary
Translator: Wei Jianfan
Publication Year: 2014-5
ISBN: 9787111452478
PDF: View
Notes:
The cathedral metaphor stands for a closed development model in which a handful of experts create the work and do not release it until it is finished; the bazaar metaphor stands for an agile development model of collective effort and small, rapid steps.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Open Source</category><category>Community</category><category>Thoughts</category></item><item><title>Top-Down VS Bottom-Up</title><link>https://www.chenshaowen.com/en/blog/top-to-bottom-vs-bottom-to-top.html</link><pubDate>Tue, 16 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 16 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/top-to-bottom-vs-bottom-to-top.html</guid><description>In ToB Thinking at Large and Small Companies, I analyzed the ToB strategy of large companies in some detail; this post supplements the thinking on small companies&amp;rsquo; ToB strategy from another angle.
1. What Is a ToB Service A commercial company usually maintains at least one value chain and makes its profit from it.</description><dc:creator>WeChat Official Account</dc:creator><category>ToB</category><category>Thoughts</category><category>Business Model</category><category>Management</category><category>Teams</category></item><item><title>DevOps Toolchain: Lighthouse</title><link>https://www.chenshaowen.com/en/blog/lighthouse-of-devops-tool-chain.html</link><pubDate>Fri, 05 Mar 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 05 Mar 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/lighthouse-of-devops-tool-chain.html</guid><description>This post introduces Lighthouse, a ChatOps tool; the content comes mainly from the official documentation. The Kubernetes community uses Prow to drive its collaboration on GitHub, but Prow does not work for other repositories. Lighthouse is broadly applicable to more types of Git repositories.
1. What Is Lighthouse Lighthouse is a lightweight ChatOps tool built on webhooks.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>DevOps</category><category>Prow</category><category>Kubernetes</category><category>CICD</category><category>Lighthouse</category></item><item><title>Jenkins Services on Kubernetes Can Drop Docker Now</title><link>https://www.chenshaowen.com/en/blog/using-podman-to-build-images-under-kubernetes-and-jenkins.html</link><pubDate>Thu, 25 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 25 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-podman-to-build-images-under-kubernetes-and-jenkins.html</guid><description>In principle, Jenkins can use Podman to build images in any Kubernetes cluster; this article uses Containerd as the example.
1. Dropping Docker Brings New Challenges to CICD In CICD scenarios, we often need to build and push images within a pipeline.
In an earlier document, Creating Jenkins Slaves Dynamically on Kubernetes, I described how mounting the /var/run/docker.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>DevOps</category><category>CICD</category><category>Docker</category><category>Kubernetes</category><category>Podman</category></item><item><title>Tekton Hub Is Live - https://hub.tekton.dev/</title><link>https://www.chenshaowen.com/en/blog/tekton-hub-is-live.html</link><pubDate>Wed, 24 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/tekton-hub-is-live.html</guid><description>The original was written by Puneet Punamiya from Red Hat (a CDF member).
Tekton is an open source project under the Continuous Delivery Foundation (CDF). It provides a framework for building CI/CD systems in a cloud native way. Put simply, people can define an entire CI/CD pipeline as Kubernetes resources.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>Tekton</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category></item><item><title>An Old Tree Blooms Anew - Cloud Native Buildpacks</title><link>https://www.chenshaowen.com/en/blog/a-sample-intro-to-cloud-native-buildpacks.html</link><pubDate>Fri, 05 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 05 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-sample-intro-to-cloud-native-buildpacks.html</guid><description>1. Buildpacks, an Old Tree Blooms Anew The Buildpacks project was first started by Heroku in 2011 and was widely adopted by PaaS platforms such as Cloud Foundry. In an earlier document, Buildpack for PaaS Deployment, I demonstrated how to deploy a Django application to Heroku.
The shortcoming of Buildpacks was that the artifact it produced was in Droplet format, which could not be adapted directly to container platforms.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>Buildpack</category><category>Containers</category><category>Images</category></item><item><title>DevOps Toolchain: Argo CD</title><link>https://www.chenshaowen.com/en/blog/argocd-of-devops-tool-chain.html</link><pubDate>Thu, 04 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/argocd-of-devops-tool-chain.html</guid><description>1. What Problem Argo CD Solves 1.1 Starting from GitOps GitOps originated from a blog post published by Weaveworks in 2017: GitOps - Operations by Pull Request. In it, Alexis introduced a deployment approach that treats Git as the single source of truth.
In GitOps practice, we need to define software infrastructure in a Git repository for management.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>ArgoCD</category><category>Kubernetes</category><category>CICD</category><category>GitOps</category><category>Operations</category><category>Learning</category><category>Deployment</category><category>Best Practices</category></item><item><title>Command-Line Banner Generation Tool - pyfiglet</title><link>https://www.chenshaowen.com/en/blog/cli-banner-tool-pyfiglet.html</link><pubDate>Wed, 03 Feb 2021 22:00:00 +0000</pubDate><atom:modified>Wed, 03 Feb 2021 22:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/cli-banner-tool-pyfiglet.html</guid><description>1. What Is pyfiglet pyfiglet is an ASCII art text generation tool implemented in Python. It can generate graphics like the following from a string:
1 2 3 4 5 6 _ _ _ _ _ _ | |__ ___| | | ___ __ _____ _ __| | __| | | | &amp;#39;_ \ / _ \ | |/ _ \ \ \ /\ / / _ \| &amp;#39;__| |/ _` | | | | | | __/ | | (_) | \ V V / (_) | | | | (_| |_| |_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_) |/ When writing CLI tools, you can use pyfiglet to generate a Banner to display on the command line.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Command</category><category>Tools</category><category>R&amp;D</category></item><item><title>It Runs Fine Locally, but GitHub Actions Keeps Failing</title><link>https://www.chenshaowen.com/en/blog/local-is-fine-but-error-in-github-actions.html</link><pubDate>Tue, 02 Feb 2021 00:00:00 +0000</pubDate><atom:modified>Tue, 02 Feb 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/local-is-fine-but-error-in-github-actions.html</guid><description>1. A Confusing Problem 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 name: Go on: [push, pull_request] jobs: build: name: CI runs-on: ubuntu-latest steps: - name: Set up Go 1.13 uses: actions/setup-go@v1 with: go-version: 1.13 - name: Check out code into the Go module directory uses: actions/checkout@v2 - name: Check pr is properly formatted run: diff -u &amp;lt;(echo -n) &amp;lt;(gofmt -d .</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Actions</category><category>CICD</category><category>Troubleshooting</category><category>Operations</category><category>Go</category><category>Learning</category></item><item><title>10 Advanced GitHub Actions Tips You Should Know</title><link>https://www.chenshaowen.com/en/blog/10-tips-of-github-action.html</link><pubDate>Sun, 31 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Sun, 31 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/10-tips-of-github-action.html</guid><description>If you already use GitHub Actions, this article will show you more interesting and useful ways to use it. By the time I finished writing, I had added several more workflows to my repositories.
1. Passing Parameters When a Workflow Runs When a workflow runs, you can allow parameters to be entered on the GitHub Actions page to control the execution logic.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>GitHub Actions</category><category>CICD</category><category>DevOps</category><category>R&amp;D</category></item><item><title>Run `rm -rf /` Under Kubernetes and You Can Just Run Away</title><link>https://www.chenshaowen.com/en/blog/attack-vectors-under-kubernetes.html</link><pubDate>Fri, 22 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 22 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/attack-vectors-under-kubernetes.html</guid><description>This document is mainly meant to demonstrate the dangers of Docker privileged mode, so please proceed with caution. Users without CLI access can copy the example YAML and directly create cluster workloads such as Pod, Job, and DaemonSet to carry out the operations.
1. Directly Deleting All Resources If you can log in to the machine, pack your things, and run the command:</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Security</category><category>Attack Vectors</category><category>Operations</category><category>Docker</category><category>Troubleshooting</category></item><item><title>Unlimited Uses, Up to 6 Hours Per Session: Free Online Kubernetes Experience</title><link>https://www.chenshaowen.com/en/blog/free-kubernetes-env-using-github-actions.html</link><pubDate>Wed, 20 Jan 2021 01:00:00 +0000</pubDate><atom:modified>Wed, 20 Jan 2021 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/free-kubernetes-env-using-github-actions.html</guid><description>1. Log in to Ngrok and get an Authtoken 1.1 Log in to the Ngrok website and get an Authtoken Visit the Ngrok website, https://dashboard.ngrok.com/ , and log in with a GitHub or Google account.
Go to the Authentication page and find your Authtoken, as shown below:
1.2 Configure Secrets under the GitHub project On the project&amp;rsquo;s Settings page, add a new Secret, as shown below:</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Actions</category><category>DevOps</category><category>CICD</category><category>demo</category></item><item><title>debugger-action Updated to v2 with ngrok Support</title><link>https://www.chenshaowen.com/en/blog/a-debugger-for-actions-v2.html</link><pubDate>Wed, 20 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 20 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-debugger-for-actions-v2.html</guid><description>1. What Is Ngrok Ngrok is an intranet penetration tool that can publish services on the internal network to the public internet. The figure below illustrates its function well: Compared with a similar tool like Frp (which requires running both a Server and a Client), Ngrok turns intranet penetration into</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>GitHub Actions</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category></item><item><title>GitHub Actions Online Debugging Tool: debugger-action</title><link>https://www.chenshaowen.com/en/blog/a-debugger-for-actions.html</link><pubDate>Mon, 18 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 18 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-debugger-for-actions.html</guid><description>1. Debugging Until You Want to Quit GitHub Actions is the continuous integration service GitHub launched in October 2018. For open-source projects it offers unlimited free build time, and it supports Linux, MacOs, and Windows systems, which makes it very appealing.
But a recent experience changed my view. I submitted a commit, improvement: build and ci, to a colleague&amp;rsquo;s repository, to improve its continuous build setup.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Actions</category><category>DevOps</category><category>CICD</category><category>demo</category></item><item><title>How to Debug a Container on the Host and Operate the Host from Inside a Container</title><link>https://www.chenshaowen.com/en/blog/operate-host-in-container-and-debug-container-on-host.html</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Mon, 11 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/operate-host-in-container-and-debug-container-on-host.html</guid><description>1. A Strange Requirement My boss had a strange requirement: use a single kubeconfig file to fetch all kinds of host status information, such as the process list and process states.
My first reaction was that he must not understand containers — how could anyone use them that way, and if you were going to use them that way, why use containers at all?</description><dc:creator>WeChat Official Account</dc:creator><category>Containers</category><category>Security</category><category>Kubernetes</category><category>Docker</category><category>Operations</category></item><item><title>Write Technical Articles the Way You Write Code</title><link>https://www.chenshaowen.com/en/blog/writing-and-coding-follow-the-same-pattern.html</link><pubDate>Sat, 09 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Sat, 09 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/writing-and-coding-follow-the-same-pattern.html</guid><description>1. Writing Matters as Much as Writing Code From a behavioral standpoint, writing and coding are both typing; the only difference is that writing addresses people while coding addresses machines. Coding exists to control the state of a machine and make it transition according to preset instructions; writing exists to</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Teams</category><category>Writing</category><category>R&amp;D</category><category>Growth</category><category>Sharing</category></item><item><title>GitHub Actions: Build a ChatOps System in Three Steps</title><link>https://www.chenshaowen.com/en/blog/using-github-actions-to-build-a-chatops-in-three-steps.html</link><pubDate>Wed, 06 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 06 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-github-actions-to-build-a-chatops-in-three-steps.html</guid><description>In the previous post, Using ChatOps to Improve the R&amp;amp;D Process, providing preview links for Pull Requests through ChatOps improved our agility. This post describes how to implement this feature quickly.
1. Step One: Configure a Trigger 1.1 Choose a Trigger GitHub has three kinds of Workflow triggers: scheduled, manual, and automatic.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>GitHub Actions</category><category>R&amp;D</category><category>DevOps</category><category>ChatOps</category></item><item><title>Using ChatOps to Improve the R&amp;D Process</title><link>https://www.chenshaowen.com/en/blog/using-chatops-to-improve-the-r-and-d-process.html</link><pubDate>Wed, 06 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Wed, 06 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-chatops-to-improve-the-r-and-d-process.html</guid><description>1. What Is ChatOps GitOps, ChatOps, AIOps, and the like (hereafter NewOps) are emerging operations philosophies that have appeared in recent years. NewOps separates Ops out of its chaotic state into two parts: one facing users, trending toward being more human, auditable, and traceable; the other facing infrastructure, trending toward being more programmatic, automated, and intelligent.</description><dc:creator>WeChat Official Account</dc:creator><category>R&amp;D</category><category>DevOps</category><category>ChatOps</category><category>Operations</category><category>Automation</category><category>Learning</category><category>Collaboration</category><category>Process</category></item><item><title>List of Security Response Centers at Major Companies (ALL SRC LIST)</title><link>https://www.chenshaowen.com/en/blog/all-src-list.html</link><pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate><atom:modified>Fri, 01 Jan 2021 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/all-src-list.html</guid><description>1. Industry Standards [TPSA19-22] SRC Industry Security Testing Standard: https://security.tencent.com/announcement/msg/180
2. SRC List No. Launch Time SRC Name 01 2012 TSRC (Tencent) 02 2013 ZSRC (Zhubajie) 03 2013 NSRC (NetEase) 04 2013 KSRC (Kingsoft) 05 2013 JSRC (JD) 06 2013 BSRC (Baidu) 07 2013 ASRC (Alibaba) 08 2013 360SRC (360) 09 2014 YSCR (EZVIZ) 10 2014 CSRC (Ctrip) 11 2014 MISRC (Xiaomi) 12 2014 SSRC (Sina) 13 2014 YSRC (JOYY) 14 2014 SGSRC (Sogou) 15 2014 QSRC (Qunar) 16 2015 VSRC (Vipshop) 17 2015 SNSRC (Suning) 18 2015 PSRC (Ping An) 19 2015 LYSRC (Tongcheng-Elong) 20 2016 SNSRC (Tuniu) 21 2016 JJSRC (Jingji World) 22 2016 DSRC (DiDi) 23 2016 100TALSRC (TAL Education) 24 2016 ESRC (Ele.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>SRC</category><category>Incident Response</category><category>Vulnerability</category></item><item><title>Using S3 to Store Terraform State</title><link>https://www.chenshaowen.com/en/blog/using-s3-to-store-terraform-state.html</link><pubDate>Sun, 27 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 27 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-s3-to-store-terraform-state.html</guid><description>1. How Terraform Manages Resource State After running terraform init, Terraform downloads the dependent plugins into a local plugins directory.
1 2 3 4 5 6 7 8 9 10 11 12 13 tree -aL 5 . |-- myresource.tf |-- .terraform | `-- plugins | |-- registry.terraform.io | | |-- hashicorp | | | `-- null | | `-- shaowenchen | | `-- qingcloud | `-- selections.</description><dc:creator>WeChat Official Account</dc:creator><category>S3</category><category>Terraform</category><category>Operations</category><category>IaC</category><category>Storage</category></item><item><title>DevOps Workshop Retrospective Summary</title><link>https://www.chenshaowen.com/en/blog/the-summary-of-devops-workshop.html</link><pubDate>Thu, 24 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-summary-of-devops-workshop.html</guid><description>1. What Is a Workshop A Workshop is a learning format centered on an experienced speaker in the field, guiding members to discuss a topic together through activities, discussion, talks, and other means.
Compared with traditional formats, a Workshop has the following characteristics:
More targeted A bit like a seminar, it can concentrate and fully discuss one class of problem.</description><dc:creator>WeChat Official Account</dc:creator><category>Summary</category><category>Thoughts</category><category>DevOps</category><category>Workshop</category><category>Operations</category></item><item><title>Operations Is No Longer Guesswork</title><link>https://www.chenshaowen.com/en/blog/make-decisions-through-data.html</link><pubDate>Fri, 18 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 18 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/make-decisions-through-data.html</guid><description>For more techniques, keep an eye on the updates to this post.
1. Operations Is No Longer Guesswork Everything is interconnected, and the internet&amp;rsquo;s model of the physical world is becoming more and more accurate. Our geographic location, our movement trajectories, and our operations on electronic devices are all being recorded.</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Datafication</category><category>Thoughts</category><category>Strategy</category><category>Business</category><category>Operations</category><category>Decision Making</category><category>Data Analysis</category></item><item><title>Using Terraform and GitHub Actions to Automate Infrastructure Install Testing</title><link>https://www.chenshaowen.com/en/blog/using-terraform-and-github-actions-to-test-iac.html</link><pubDate>Sun, 13 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 13 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-terraform-and-github-actions-to-test-iac.html</guid><description>1. Testing Is a Beacon at Sea The more complex and larger a project is, the more it demonstrates the value and importance of testing.
Testing guarantees that the direction is right. Like a beacon appearing at sea while sailing, it can be used to check and correct the course, so the helmsman can stay aware of the situation at any moment and make adjustments.</description><dc:creator>WeChat Official Account</dc:creator><category>Terraform</category><category>GitHub</category><category>GitHub Actions</category><category>CICD</category><category>Kubernetes</category><category>Operations</category></item><item><title>Tekton Concepts - A Big Game of Chess</title><link>https://www.chenshaowen.com/en/blog/the-concept-of-tekton-a-big-game.html</link><pubDate>Sat, 12 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 12 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-concept-of-tekton-a-big-game.html</guid><description>1. On the Aesthetics of CICD Tools In the document A Software Product Is the Output of a Team&amp;rsquo;s Capability, I mentioned that a software product is the delivery vehicle for a solution, and that its quality depends on the team&amp;rsquo;s understanding of the core problem. Only with a deep understanding of the domain can the delivered product have a chance of being good.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>Tekton</category><category>Kubernetes</category><category>CICD</category><category>Thoughts</category></item><item><title>Daemon-less Image Build Tool: Kaniko</title><link>https://www.chenshaowen.com/en/blog/the-daemon-less-tools-of-kaniko.html</link><pubDate>Fri, 11 Dec 2020 08:00:00 +0000</pubDate><atom:modified>Fri, 11 Dec 2020 08:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-daemon-less-tools-of-kaniko.html</guid><description>1. daemon-less Image Build Tools 1.1 What Is a daemon-less Image Build Tool In a CICD pipeline, image builds come up often, and the conventional approach is to build with Docker in Docker or Docker out of Docker. For details, see: How to Use Docker in Docker
In fact, to avoid monopolies and advance the industry, a unified OCI image format specification based on the Docker image format was defined long ago.</description><dc:creator>WeChat Official Account</dc:creator><category>Kaniko</category><category>DevOps</category><category>Images</category><category>CICD</category><category>Kubernetes</category><category>Operations</category></item><item><title>How to Bypass DockerHub Image Pull Limits</title><link>https://www.chenshaowen.com/en/blog/how-to-cross-the-limit-of-dockerhub.html</link><pubDate>Wed, 09 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 09 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-cross-the-limit-of-dockerhub.html</guid><description>1. DockerHub Limits In the end, there is no getting around this error:
1 Error response from daemon: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit Starting November 2, 2020, DockerHub officially began limiting the pull rate for non-paying users:</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>DockerHub</category><category>Operations</category><category>Troubleshooting</category><category>Rate Limiting</category><category>Proxy</category></item><item><title>One Canvas Covers DevOps, ServiceMesh, Serverless</title><link>https://www.chenshaowen.com/en/blog/a-canvas-cover-devops-servicemesh-serverless.html</link><pubDate>Sat, 05 Dec 2020 00:01:00 +0000</pubDate><atom:modified>Sat, 05 Dec 2020 00:01:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-canvas-cover-devops-servicemesh-serverless.html</guid><description>Many cloud native open source components start with the service and add visualization later. Today I had a brainstorm and went the opposite way: first the visual interaction, then the underlying design.
1. One Canvas Covers Half of Cloud Native Users only need one canvas. Define the Workflow, and they can roam freely across all kinds of fancy Cloud Native applications.</description><dc:creator>WeChat Official Account</dc:creator><category>Cloud Native</category><category>DevOps</category><category>ServiceMesh</category><category>Serverless</category><category>Thoughts</category></item><item><title>Building a Scalable Team</title><link>https://www.chenshaowen.com/en/blog/build-a-scalable-team.html</link><pubDate>Sat, 05 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 05 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/build-a-scalable-team.html</guid><description>For engineers in the internet industry, what comes to mind most often is the Scalability of systems — for example, how to improve a system as traffic, compute, and storage grow, with all kinds of horizontal and vertical scaling options. Besides services, the Scalability of a team is also critical.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>R&amp;D</category><category>Teams</category><category>DevOps</category><category>Management</category><category>Organization</category><category>Growth</category><category>Scaling</category><category>Best Practices</category></item><item><title>How to Add Your Own Runner Hosts to GitHub Actions</title><link>https://www.chenshaowen.com/en/blog/how-to-add-self-hosted-runners-to-github-action.html</link><pubDate>Fri, 04 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-add-self-hosted-runners-to-github-action.html</guid><description>1. What GitHub Actions Is In an earlier post I put the CI capabilities GitLab provides into practice — click here to see. The advantages of using GitLab are that it can be deployed privately, it allows an unlimited number of private repositories, its CI configuration is simple, and it can connect to self-hosted Runners.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>GitHub Actions</category><category>CICD</category><category>DevOps</category><category>Tools</category><category>R&amp;D</category><category>Operations</category></item><item><title>A Practical Algorithm: Bloom Filter</title><link>https://www.chenshaowen.com/en/blog/practical-algorithm-of-bloom-filter.html</link><pubDate>Tue, 01 Dec 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 01 Dec 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/practical-algorithm-of-bloom-filter.html</guid><description>1. What Is Bloom Filter A Bloom Filter is a data structure proposed by Bloom in 1970.
It maps elements (x, y, z) through a series of functions into a binary vector (a 0101 sequence), and is used to quickly determine whether an element w is in a set. As shown below (from Wikipedia):</description><dc:creator>WeChat Official Account</dc:creator><category>Algorithms</category><category>R&amp;D</category><category>Go</category><category>Optimization</category><category>Bloom Filter</category></item><item><title>Download: Capability Maturity Model of DevOps</title><link>https://www.chenshaowen.com/en/blog/capability-maturity-model-of-devops.html</link><pubDate>Fri, 27 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 27 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/capability-maturity-model-of-devops.html</guid><description>Unveiling the Capability Maturity Model of DevOps
R&amp;amp;D Operations (DevOps) Solution Capability Rating Requirements - PDF Download
Part 1: Overall Architecture - PDF Download
Part 2: Agile Development Management Process - PDF Download
Part 3: Continuous Delivery Process - PDF Download
Part 4: Technical Operations - PDF Download
Part 5: Application Design - PDF Download</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>CICD</category><category>Standards</category><category>Models</category></item><item><title>How to Connect a Remote macOS Physical Machine for Jenkins Pipeline Builds</title><link>https://www.chenshaowen.com/en/blog/how-to-run-the-pipeline-on-remote-osx.html</link><pubDate>Sun, 22 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 22 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-run-the-pipeline-on-remote-osx.html</guid><description>This article also applies to connecting physical machines with ARM or MIPS architectures and FreeBSD or Windows systems. If Jenkins can reach the build machine, you can skip the Frp part.
1. The Problem In scenarios where Kubernetes is the infrastructure, when Jenkins runs a build pipeline it creates a separate Pod for each pipeline for building.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>macOS</category><category>CICD</category><category>CI</category><category>DevOps</category></item><item><title>How to Use Docker in Docker</title><link>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</link><pubDate>Sat, 21 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 21 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-docker-in-docker.html</guid><description>1. Typical Use Cases In CI, there is usually a CI Engine responsible for parsing the pipeline and controlling the whole build process, while the actual build is delegated to an Agent. Jenkins and GitLab both work this way.
As shown below, there are many kinds of Agents that connect to the CI Engine.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Kubernetes</category><category>Containers</category><category>CI</category><category>CICD</category><category>Operations</category><category>Learning</category><category>DinD</category><category>Build</category><category>Jenkins</category></item><item><title>How to Get the Real Client IP in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-get-the-real-ip-of-client-in-kubernetes.html</link><pubDate>Fri, 20 Nov 2020 17:22:45 +0000</pubDate><atom:modified>Fri, 20 Nov 2020 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-get-the-real-ip-of-client-in-kubernetes.html</guid><description>Kubernetes relies on the kube-proxy component to implement Service communication and load balancing. In this process, because SNAT is used to translate the source address, a service in a Pod cannot obtain the real client IP address. This article mainly answers the question of how a workload in a Kubernetes cluster can obtain the real IP address of the client.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>IP</category><category>Network</category><category>Operations</category></item><item><title>At the Core of Open Source Is Managing and Operating a Community</title><link>https://www.chenshaowen.com/en/blog/the-core-of-open-source-is-community.html</link><pubDate>Mon, 09 Nov 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 09 Nov 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-core-of-open-source-is-community.html</guid><description>1. Open Source Is Growing More and More Popular The 2019 IDC North America Open Source Software Usage Survey showed that 71% of enterprises are using open source software, and 54% plan to expand their usage. The 2020 Red Hat Enterprise Open Source Survey showed that 95% of IT leaders consider enterprise open source critical to their enterprise infrastructure software strategy.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Open Source</category><category>Community</category><category>Operations</category><category>Cloud Native</category></item><item><title>Whiteboard Sharing - Jenkins on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/whiteboard-jenkins-on-kubernetes.html</link><pubDate>Mon, 19 Oct 2020 00:08:00 +0000</pubDate><atom:modified>Mon, 19 Oct 2020 00:08:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/whiteboard-jenkins-on-kubernetes.html</guid><description/><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Kubernetes</category><category>Whiteboard Sharing</category><category>DevOps</category><category>Operations</category></item><item><title>The 38 Letters from Rockefeller to His Son</title><link>https://www.chenshaowen.com/en/blog/book/the-38-letters-of-rockefeller-to-children.html</link><pubDate>Mon, 19 Oct 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 19 Oct 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-38-letters-of-rockefeller-to-children.html</guid><description>Author: John D. Rockefeller (USA)
Publisher: Jilin Publishing Group Co., Ltd.
Published: 2012-1-1
ISBN: 9787546369785
Notes:
The road to success is direct and bright, while the roads to failure are each different.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Life</category><category>Work</category><category>Choice</category><category>Attitude</category></item><item><title>What Is Whiteboard Sharing</title><link>https://www.chenshaowen.com/en/blog/what-is-whiteboard-sharing.html</link><pubDate>Sat, 17 Oct 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 17 Oct 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-whiteboard-sharing.html</guid><description>1. Past Attempts In the post Without Tags, No One Can Recall You, I argued that in a homogeneous group the individual becomes background noise, while tags become effective information.
In the image below, it is hard for us to remember any particular person, yet very easy to find someone through the A, B, C, D, E tags.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Teams</category><category>R&amp;D</category><category>Whiteboard Sharing</category><category>What Is</category></item><item><title>The Definitive Guide to Kubernetes Networking: Fundamentals, Principles, and Practice</title><link>https://www.chenshaowen.com/en/blog/book/the-guide-to-kubernetes-network.html</link><pubDate>Fri, 16 Oct 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 16 Oct 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-guide-to-kubernetes-network.html</guid><description>Author: Du Jun
Publisher: Publishing House of Electronics Industry
Published: 2019-10
ISBN: 9787121373398
Notes:
Networking is one of the harder parts of Kubernetes to master. Network failures directly affect the running workloads, and they are usually very urgent problems. Networking knowledge is also lower-level than application development, with many details that require long-term accumulation.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Kubernetes</category><category>Network</category><category>Learning</category><category>Operations</category></item><item><title>KubeSphere DevOps 3.0 Pipeline Operations Guide</title><link>https://www.chenshaowen.com/en/blog/the-operation-guide-of-kubesphere-devops-3-0-pipeline.html</link><pubDate>Wed, 14 Oct 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 14 Oct 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-operation-guide-of-kubesphere-devops-3-0-pipeline.html</guid><description>This post mainly covers how to operate and maintain a DevOps pipeline, and how to solve some common problems. The problems fall mainly into two categories: one is Kubernetes-related and fairly general in nature; the other is business-related and requires some understanding of the domain before you can solve problems</description><dc:creator>WeChat Official Account</dc:creator><category>KubeSphere</category><category>Kubernetes</category><category>DevOps</category><category>Jenkins</category><category>Operations</category><category>CICD</category></item><item><title>KubeSphere DevOps 3.0 Pipeline Development Guide</title><link>https://www.chenshaowen.com/en/blog/the-development-guide-of-kubesphere-devops-3-0-pipeline.html</link><pubDate>Tue, 13 Oct 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 13 Oct 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-development-guide-of-kubesphere-devops-3-0-pipeline.html</guid><description>KubeSphere DevOps consists of two parts: S2I and Pipeline. In the community, OpenShift provides an application packaging tool called S2I; for details, see Building Cloud-Native Applications with S2I
. KubeSphere turned it into a service, using a CRD managed by a separate Operator, and its functionality is fairly self-contained. In 3.</description><dc:creator>WeChat Official Account</dc:creator><category>KubeSphere</category><category>Kubernetes</category><category>DevOps</category><category>Jenkins</category><category>Development Environment</category><category>R&amp;D</category><category>Operations</category></item><item><title>Great Changes and Opportunities in the Next Decade</title><link>https://www.chenshaowen.com/en/blog/great-changes-and-opportunities-in-the-next-decade.html</link><pubDate>Fri, 18 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 18 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/great-changes-and-opportunities-in-the-next-decade.html</guid><description>1. Drawing the Heavy Sword, Challenging the World Since 1840, China endured more than a century of humiliation; yet starting in 1978, it took only a little over forty years to turn from a poor and weak great power into a wealthy and strong one.
This is a manifestation of a nation&amp;rsquo;s resilience and wisdom.</description><dc:creator>WeChat Official Account</dc:creator><category>Change</category><category>Economy</category><category>Thoughts</category><category>Industry</category><category>Growth</category><category>Macro</category></item><item><title>Kubernetes Platform Management Software Stress Testing Plan</title><link>https://www.chenshaowen.com/en/blog/stress-testing-plan-of-kubernetes-platform-management-software.html</link><pubDate>Thu, 17 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 17 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/stress-testing-plan-of-kubernetes-platform-management-software.html</guid><description>Kubernetes platform management software runs on Kubernetes and is used to manage the resource objects running on Kubernetes.
1. Testing Approach Test the management capability of the platform software under a given load and a given cluster scale, not the management capability of Kubernetes. The platform software&amp;rsquo;s management capability is mainly reflected in the ability to create, read, update, and delete workloads and PVs through the UI, and to view the monitoring and logs of workloads directly in the UI.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Stress Testing</category><category>Plan</category><category>Etcd</category><category>Load</category></item><item><title>About</title><link>https://www.chenshaowen.com/en/about.html</link><pubDate>Wed, 16 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 16 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/about.html</guid><description>Contact Email: mail(at)chenshaowen.com
WeChat Follow my WeChat Official Account to get my WeChat ID.
Free Consultation Please send an email, or leave a message after adding me on WeChat. Skip the small talk and describe your question directly. I generally reply to everything, but not always right away.
Paid Consultation 200 RMB / 0.</description><dc:creator>WeChat Official Account</dc:creator></item><item><title>Deploying a Hexo Static Site with a Container Image</title><link>https://www.chenshaowen.com/en/blog/deploy-static-server-by-docker-image.html</link><pubDate>Wed, 16 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 16 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/deploy-static-server-by-docker-image.html</guid><description>1. Why Deploy Independently with an Image Better SEO With GitHub Pages, deploying a static site is very convenient. Configure it once, and every commit deploys and updates automatically. Add jsDelivr and Cloudflare acceleration on top, and among free options it is already production-ready.
Unfortunately, Baidu&amp;rsquo;s search engine indexes GitHub Pages sites very slowly, or not at all.</description><dc:creator>WeChat Official Account</dc:creator><category>Hexo</category><category>Docker</category><category>Images</category><category>Blog</category><category>Operations</category></item><item><title>Finally Here - GitHub Container Registry (ghcr.io)</title><link>https://www.chenshaowen.com/en/blog/github-container-registry.html</link><pubDate>Sat, 05 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 05 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/github-container-registry.html</guid><description>1. Github Container Registry On September 1, GitHub announced that Github Container Registry had entered public beta, offering a free, unlimited-capacity Docker image registry service during the testing period.
No more worrying about docker.io wiping images out of the blue. How nice, how sweet!
GitHub is using hosted code repositories as its entry point and gradually covering the entire R&amp;amp;D toolchain to build a one-stop DevOps platform.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Docker</category><category>Images</category><category>Services</category><category>Containers</category><category>Operations</category></item><item><title>Let's Learn Go -- (6) Interface</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-6.html</link><pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 04 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-6.html</guid><description>1. Interface-Oriented Programming 1.1 Characteristics Interface-oriented programming emphasizes interaction between modules through interfaces. First, the caller specifies a set of method signatures; then, the callee implements that set of methods.
What sets interface programming apart from other programming styles is that it focuses on methods, not attributes. In many programming scenarios, methods are defined around attributes.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Let's Learn Go</category><category>Interface</category><category>Learning</category></item><item><title>Let's Learn Go -- (5) Goroutine and Channel</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-5.html</link><pubDate>Thu, 03 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 03 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-5.html</guid><description>1. The Concurrency Model in Go 1.1 The Communication Model: CSP CSP stands for Communicating Sequential Process, a model for concurrent communication. A Process can use many Channels, and a Channel does not care who is using it — it is only responsible for sending and receiving data.
In the Go community there is a very famous maxim: do not communicate by sharing memory; instead, share memory by communicating.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Concurrency</category><category>Parallelism</category><category>Goroutine</category><category>Channel</category><category>Learning</category><category>Let's Learn Go</category></item><item><title>What Is Functional Programming</title><link>https://www.chenshaowen.com/en/blog/what-is-functional-programming.html</link><pubDate>Wed, 02 Sep 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 02 Sep 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-functional-programming.html</guid><description>1. What a Programming Paradigm Is A programming paradigm is a class of typical programming conventions. On one hand, it provides engineers with a way to model entities, linking the physical world to code; on the other hand, it provides engineers with a way of thinking about code and programs.</description><dc:creator>WeChat Official Account</dc:creator><category>Functional Programming</category><category>Go</category><category>Programming Paradigm</category><category>Python</category><category>What Is</category></item><item><title>How to Integrate Kata into a Kubernetes Cluster</title><link>https://www.chenshaowen.com/en/blog/how-to-integrate-kata-in-kubernetes-cluster.html</link><pubDate>Sun, 30 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 30 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-integrate-kata-in-kubernetes-cluster.html</guid><description>1. What Problem Kata Solves Security and isolation are what make Kata Container stand out from Docker Container.
Kata Container comes from the merger of the Intel Clear Containers and Hyper runV projects. Intel Clear Containers used Intel VT-x technology to provide containers through lightweight virtual machines, solving the security problem while delivering excellent performance.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Kata</category><category>Containers</category><category>Security</category><category>Operations</category><category>Virtualization</category></item><item><title>Currying and Partial Functions</title><link>https://www.chenshaowen.com/en/blog/curry-and-partial-function.html</link><pubDate>Sat, 29 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 29 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/curry-and-partial-function.html</guid><description>1. What Currying Is According to the Wikipedia entry, in computer science currying is the technique of converting a function that takes multiple arguments into a function that takes a single argument (the first argument of the original function), and returns a new function that accepts the remaining arguments and returns a result.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Python</category><category>Currying</category><category>Functional Programming</category><category>Partial Functions</category><category>R&amp;D</category></item><item><title>How to Use a Terraform Provider to Deliver Iac-Level Applications</title><link>https://www.chenshaowen.com/en/blog/how-to-use-terraform-to-provide-iac-platform.html</link><pubDate>Sat, 22 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 22 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-terraform-to-provide-iac-platform.html</guid><description>1. Terraform Vs Kubernetes Infrastructure as Code (Iac) is built on immutable infrastructure: it uses orchestration tools to turn infrastructure into text, so you can manage infrastructure the way you manage code.
In 2018 I was working on SaaS development, deploying on the Kubernetes platform, and that was the year Terraform was very hot.</description><dc:creator>WeChat Official Account</dc:creator><category>Terraform</category><category>Iac</category><category>Kubernetes</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category></item><item><title>Now Is the Best Era of Cloud Native</title><link>https://www.chenshaowen.com/en/blog/the-best-era-of-cloud-native.html</link><pubDate>Wed, 19 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 19 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-best-era-of-cloud-native.html</guid><description>1. Little Money, Lots of Work, and Everyone Pushes You Around The operations department is a cost center. There is a phrase for it: cost optimization. When a CXO sees how low machine utilization is, they think about cutting machines — spend as little as possible — and that means more work for operations.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Cloud Native</category><category>Operations</category><category>Kubernetes</category></item><item><title>Jenkins X Is Not Jenkins, but a Tech Stack</title><link>https://www.chenshaowen.com/en/blog/jenkins-x-is-not-jenkins-but-stack.html</link><pubDate>Sun, 16 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 16 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jenkins-x-is-not-jenkins-but-stack.html</guid><description>1. Introduction to Jenkins X Relying on its massive plugin ecosystem, Jenkins currently holds most of the enterprise CICD engine market share. But in the cloud native era, Jenkins has also exposed many problems: a single point of service, disk storage, memory usage, and so on.
Around Kubernetes, Jenkins X offers a DevOps approach better suited to the cloud native era.</description><dc:creator>WeChat Official Account</dc:creator><category>Tech Stack</category><category>Jenkins</category><category>Jenkins-X</category><category>Kubernetes</category><category>DevOps</category><category>CICD</category><category>Operations</category></item><item><title>Etcd and Etcdctl in Practice</title><link>https://www.chenshaowen.com/en/blog/the-use-of-etcd-and-etcdctl.html</link><pubDate>Tue, 11 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 11 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-use-of-etcd-and-etcdctl.html</guid><description>1. Basic Introduction to Etcd Etcd is a distributed Key/Value storage system. Through distributed locks, leader election, and write barriers it achieves distributed coordination, offering highly available, persistent data storage and retrieval services. How it works Every Etcd node stores a complete copy of the data, and at any moment</description><dc:creator>WeChat Official Account</dc:creator><category>Etcd</category><category>Etcdctl</category><category>Kubernetes</category><category>Operations</category><category>Learning</category><category>Distributed Storage</category><category>Configuration</category><category>Cluster</category></item><item><title>Stress Test: Dynamically Creating Jenkins Agents on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/the-stress-test-about-kubernetes-dynamically-creates-jenkins-agent.html</link><pubDate>Sun, 02 Aug 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 02 Aug 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-stress-test-about-kubernetes-dynamically-creates-jenkins-agent.html</guid><description>In the previous document, we took advantage of the elasticity Kubernetes provides to dynamically create Jenkins Slaves on Kubernetes. This document is mainly a stress test of Jenkins under large-scale builds.
1. Cluster Configuration 1.1 Kubernetes Version The version used here is v1.16.7
1 2 3 4 kubectl version Client Version: version.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Kubernetes</category><category>DevOps</category><category>CICD</category><category>Testing</category><category>Operations</category></item><item><title>First-Round Interviewer Summary</title><link>https://www.chenshaowen.com/en/blog/some-summaries-of-the-interviewer.html</link><pubDate>Sun, 26 Jul 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 26 Jul 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-summaries-of-the-interviewer.html</guid><description>Recently quite a few teammates have left, and we are fairly short-staffed. I have interviewed nearly ten candidates one after another; the first-round pass rate is around 50%, and there is still no confirmed HC. 1. Preparation Collecting resumes. Posts, email announcements, WeChat Moments, and job boards are all sources</description><dc:creator>WeChat Official Account</dc:creator><category>R&amp;D</category><category>Interview</category><category>Teams</category><category>Management</category><category>Thoughts</category></item><item><title>Multi-Arch Docker Images</title><link>https://www.chenshaowen.com/en/blog/docker-image-under-multi-arch.html</link><pubDate>Sun, 05 Jul 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 05 Jul 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/docker-image-under-multi-arch.html</guid><description>1. Enabling Docker&amp;rsquo;s experimental Feature First, enable Docker&amp;rsquo;s experimental feature, so the commands below are available.
Edit vim ~/.docker/config.json and add the following:
1 2 3 4 { &amp;#34;experimental&amp;#34;: &amp;#34;enabled&amp;#34;, &amp;#34;debug&amp;#34;: true } Note that this is not the /etc/docker/daemon.json file, and Docker does not need to be restarted.
2. Docker Images Starting with Docker 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>Multi-Arch</category><category>manifest</category><category>Operations</category></item><item><title>Installing a Java Development Environment on CentOS 7</title><link>https://www.chenshaowen.com/en/blog/install-jdk-in-centos-7.html</link><pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 01 Jul 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-jdk-in-centos-7.html</guid><description>1. Compilation Error: java.nio.file.NoSuchFileException When compiling a Jenkins plugin, the following error is reported:
1 2 3 4 mvn package Compilation failure [ERROR] java.nio.file.NoSuchFileException: /root/java/target/classes/META-INF/annotations/hudson.Extension It turns out that Maven uses JAVA_HOME rather than PATH, so it cannot find a Java runtime. Java 11 does not work either — only Java 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Java</category><category>Environment</category><category>CentOS</category><category>R&amp;D</category></item><item><title>DevOps Essentials: A Business Perspective</title><link>https://www.chenshaowen.com/en/blog/book/the-essentials-of-devops.html</link><pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-essentials-of-devops.html</guid><description>Author: (Russia) Oleg Skrynnik
Publisher: Tsinghua University Press
Publication year: 2020-05-01
ISBN: 9787302547143
Notes:
As the title suggests, the book focuses on DevOps from a business perspective. From its origins to its foundations, from principles to practice, you can take something away at every level. DevOps rests on lean production (the Toyota production line) and agile development, with the value chain at its core.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category></item><item><title>Analyzing the Lightweight Checkout Problem in Jenkins</title><link>https://www.chenshaowen.com/en/blog/the-question-of-lightweight-checkout-in-jenkins.html</link><pubDate>Mon, 22 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 22 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-question-of-lightweight-checkout-in-jenkins.html</guid><description>1. What Problem We Hit A Jenkins build log threw an error:
1 2 3 4 5 6 Started by user admin Lightweight checkout support not available, falling back to full checkout. Checking out git https://github.com/shaowenchen/pipeline-test.git into /var/jenkins_home/workspace/abc@script to read Jenkinsfile ... ... Unable to access &amp;#39;.git/index.lock&amp;#39;: File exists. Cause analysis:</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Git</category><category>DevOps</category><category>Troubleshooting</category></item><item><title>Build Artifacts and Cache in Jenkins</title><link>https://www.chenshaowen.com/en/blog/artifacts-and-cache-in-jenkins.html</link><pubDate>Sun, 21 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 21 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/artifacts-and-cache-in-jenkins.html</guid><description>In a CICD flow, there are two main kinds of things that need to be saved: build artifacts and caches. Build artifacts are the final execution result, and caches exist to speed up the next build. This post mainly describes how to archive build artifacts and caches in Jenkins, along with a hands-on example backed by object storage.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>S3</category><category>DevOps</category><category>Cache</category></item><item><title>Jenkins Plugin Development</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-the-plugin-of-jenkins.html</link><pubDate>Sat, 20 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 20 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-the-plugin-of-jenkins.html</guid><description>Using Jenkins always means dealing with all kinds of plugins. To practice DevOps better, we should also be capable of developing plugins ourselves, so the whole process can converge inside Jenkins.
1. Jenkins Plugins 1.1 The Plugin Ecosystem Jenkins&amp;rsquo; predecessor Hudson started in 2004, and 16 years on it is still a mainstream CI/CD engine.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category><category>Plugin</category><category>Java</category><category>Learning</category></item><item><title>Kubernetes Windows Nodes Dynamically Provide Jenkins Agents</title><link>https://www.chenshaowen.com/en/blog/windows-node-to-dynamicly-provide-jenkins-agent-on-k8s.html</link><pubDate>Sun, 14 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 14 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/windows-node-to-dynamicly-provide-jenkins-agent-on-k8s.html</guid><description>Building on the previous two documents, Creating Jenkins Slaves Dynamically on Kubernetes and Adding Windows Nodes to Kubernetes to Provide Dynamic Jenkins Build Agents, this document mainly attempts to dynamically provide Windows build agents on Kubernetes.
1. Adding Pipelines For the Kubernetes and Jenkins integration part, refer to the two documents above; here we simply create two pipelines to test with.</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Kubernetes</category><category>Windows</category><category>DevOps</category></item><item><title>R&amp;D Is Like Training Troops, Operations Is Like Deploying Them</title><link>https://www.chenshaowen.com/en/blog/the-strategy-for-rd-and-ops.html</link><pubDate>Sun, 14 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 14 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-strategy-for-rd-and-ops.html</guid><description>1. Thought Drives Behavior Thought drives behavior, and behavior produces results. How we treat people, handle things, and approach affairs all come from culture, and they do not leap forward just because technology advances rapidly. The Chinese nation, with its long history, has accumulated remarkably resilient intellectual wisdom. Dynasties rose and fell, regimes changed, and none of it could bring her down.</description><dc:creator>WeChat Official Account</dc:creator><category>R&amp;D</category><category>Thoughts</category><category>Teams</category><category>Management</category><category>Operations</category><category>Culture</category></item><item><title>Adding a Windows Node to Kubernetes</title><link>https://www.chenshaowen.com/en/blog/add-windows-node-for-k8s.html</link><pubDate>Sat, 13 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 13 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/add-windows-node-for-k8s.html</guid><description>Here a Windows node is used mainly as a Worker, while the Master control plane stays on Linux.
1. System Configuration 1.1 Kubernetes Control Plane Since version 1.14, Kubernetes has added production-grade support for Windows nodes. Because Microsoft&amp;rsquo;s official documentation mainly covers installing the flannel network plugin, it is recommended here that Kubernetes also use the flannel plugin.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Windows</category><category>Nodes</category><category>Installation</category><category>Operations</category></item><item><title>Incomplete Data When Using Base64 to Decode JWT Playload</title><link>https://www.chenshaowen.com/en/blog/incomplete-data-using-base64-decoding-jwt-playload.html</link><pubDate>Mon, 08 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 08 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/incomplete-data-using-base64-decoding-jwt-playload.html</guid><description>When Base64-decoding a JWT, I found that the JSON data was incomplete. This article mainly introduces the relevant knowledge and solves this problem. 1. Introduction to JWT JWT passes authentication by setting Authorization: Bearer &amp;lt;token&amp;gt; in the Header. A JWT Token is a Base64-encoded string joined by dots, something like</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>JWT</category><category>Encoding</category><category>Base64</category><category>Security</category><category>R&amp;D</category></item><item><title>Kubernetes Batch Operation Commands</title><link>https://www.chenshaowen.com/en/blog/batch-command-of-kubernetes.html</link><pubDate>Sun, 07 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 07 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/batch-command-of-kubernetes.html</guid><description>1. Delete Pods in the Evicted State in Bulk 1 kubectl get pods --all-namespaces -o wide | grep Evicted | awk &amp;#39;{print $1,$2}&amp;#39; | xargs -L1 kubectl delete pod -n 2. Delete Pods in a Given State in a Given Namespace in Bulk Using field-selectors, you can delete Pods in a given state in a given namespace.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kubectl</category><category>Operations</category><category>Tips</category></item><item><title>Why Use Remote Builds</title><link>https://www.chenshaowen.com/en/blog/why-should-we-use-remote-build.html</link><pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 04 Jun 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/why-should-we-use-remote-build.html</guid><description>1. Raise the Level of Automation Remote builds usually need the help of some CI tool, such as GitHub Actions, Travis CI, and so on. In an intranet environment, you can use GitLab CI and add a CI node for automated builds — see my GitLab documentation.
The benefits of automation go without saying: it standardizes processes, saves a great deal of time, and delivers clear returns.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>R&amp;D</category><category>Build</category><category>CICD</category><category>DevOps</category><category>GitHub Actions</category><category>Best Practices</category></item><item><title>Affinity in the Kubernetes Scheduler</title><link>https://www.chenshaowen.com/en/blog/affinity-of-kubernetes-scheduler.html</link><pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 30 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/affinity-of-kubernetes-scheduler.html</guid><description>1. The Scheduler in Kubernetes kube-scheduler is the component in Kubernetes that decides which Node a Pending Pod runs on; it is called the scheduler. Kubernetes ships with a large number of built-in scheduling policies and also provides some advanced scheduling policies (nodeAffinity, podAffinity, and so on) for users, which</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Scheduling</category><category>Affinity</category><category>Learning</category><category>Operations</category></item><item><title>A Complete Git Submission Process</title><link>https://www.chenshaowen.com/en/blog/a-complete-git-submission-process.html</link><pubDate>Tue, 19 May 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 19 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-complete-git-submission-process.html</guid><description>This is also a complete Git process for submitting a PR to an open source project.
1. Local Configuration Set the commit user information 1 2 git config --global user.name &amp;#34;username&amp;#34; git config --global user.email &amp;#34;user@email.com&amp;#34; GPG configuration Reference: GPG Verified Commits
2. Cloning the Code First fork the original repository</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>R&amp;D</category><category>Open Source</category><category>Learning</category></item><item><title>The Difference Between GitHub's Three Code Merge Methods</title><link>https://www.chenshaowen.com/en/blog/the-difference-of-tree-ways-of-merging-code-in-github.html</link><pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 18 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-difference-of-tree-ways-of-merging-code-in-github.html</guid><description>1. Create a merge commit PR commit log:
1 2 commit c1 commit c2 Integration branch commit log:
1 2 3 commit PR #NUM commit c2 commit c1 Create a merge commit carries every commit in the PR over to the integration branch intact, and adds one PR commit entry on top.</description><dc:creator>WeChat Official Account</dc:creator><category>R&amp;D</category><category>GitHub</category><category>Git</category><category>DevOps</category><category>CICD</category></item><item><title>When We're on Ticket Duty, What Are We On Duty For?</title><link>https://www.chenshaowen.com/en/blog/how-to-process-work-order.html</link><pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 18 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-process-work-order.html</guid><description>1. When We&amp;rsquo;re on Ticket Duty, What Are We On Duty For? Most people have probably only ever filed a ticket, never worked one. And people who have worked tickets generally don&amp;rsquo;t file them lightly.
A ticket is a service bundled free with the product a customer paid for, dedicated to solving every kind of usage problem.</description><dc:creator>WeChat Official Account</dc:creator><category>Tickets</category><category>R&amp;D</category><category>Thoughts</category><category>Teams</category><category>Operations</category><category>Customer Support</category><category>Product</category><category>Growth</category></item><item><title>Analyzing the "not a tree" Git Operation in Jenkins</title><link>https://www.chenshaowen.com/en/blog/git-reference-not-a-tree-in-jenkins.html</link><pubDate>Sun, 17 May 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 17 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/git-reference-not-a-tree-in-jenkins.html</guid><description>1. Problem Description When a Webhook was configured to automatically trigger a Jenkins pipeline, the following error occurred:
1 2 3 hudson.plugins.git.GitException: Command &amp;#34;git checkout -f 23b446ea&amp;#34; returned status code 128: stdout: stderr: fatal: reference is not a tree: 23b446ea 2. How Git Manages Versions Git is a content-addressable filesystem. Git maintains a sha tree, and any historical node can be traced back to via its sha value.</description><dc:creator>WeChat Official Account</dc:creator><category>Troubleshooting</category><category>Jenkins</category><category>DevOps</category><category>Git</category></item><item><title>How to Configure an Efficient Kubernetes Command-Line Terminal</title><link>https://www.chenshaowen.com/en/blog/how-to-configure-efficient-k8s-terminal.html</link><pubDate>Sat, 16 May 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 16 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-configure-efficient-k8s-terminal.html</guid><description>Sharpening the axe never delays the woodcutting. No matter when, the time you spend on your toolchain is always worth it.
1. Autocompletion - kubectl OS X install command:
1 brew install bash-complete@2 It is not just for kubectl — it provides completion prompts for other command lines too.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Command Line</category><category>Tools</category><category>kubectl</category><category>Operations</category><category>Efficiency</category><category>Learning</category></item><item><title>Using Homebrew</title><link>https://www.chenshaowen.com/en/blog/the-use-of-homebrew.html</link><pubDate>Fri, 15 May 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 15 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-use-of-homebrew.html</guid><description>Homebrew is the package manager for OS X, similar to yum on CentOS or apt-get on Ubuntu. From the OS X command line you can install applications with the brew and brew cask commands.
1. Install brew cask 1 brew install brew-cask-completion 2. The Difference Between brew and brew cask The difference between brew and brew cask lies in the type of application they favor.</description><dc:creator>WeChat Official Account</dc:creator><category>Homebrew</category><category>MacOS</category><category>Command Line</category><category>Tools</category><category>Operations</category></item><item><title>Advanced curl Usage</title><link>https://www.chenshaowen.com/en/blog/the-advanced-usage-of-curl.html</link><pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 14 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-advanced-usage-of-curl.html</guid><description>1. RESTful Requests 1 curl -X POST --data &amp;#39;keyword=value&amp;#39; http://domain.com/mypath/ After -X you can also use DELETE, PUT, and so on.
2. Adding Headers 1 curl -H &amp;#39;Content-Type:application/json&amp;#39; -H &amp;#39;Authorization: bearer MyToken&amp;#39; http://domain.com/mypath/ 3. Basic Authentication 1 curl -u username:password http://domain.com/mypath/ 4. Download and Execute 1 curl -sSL http://domain.com/my.sh | bash 5.</description><dc:creator>WeChat Official Account</dc:creator><category>curl</category><category>Command Line</category><category>Tips</category><category>Operations</category><category>Learning</category><category>HTTP</category><category>API</category><category>Debugging</category><category>Network</category></item><item><title>Surface Pen Not Responding</title><link>https://www.chenshaowen.com/en/blog/surface-pen-lose-feeling.html</link><pubDate>Mon, 11 May 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 11 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/surface-pen-lose-feeling.html</guid><description>Recently, while using my Surface, I dug out the stylus and found it was out of battery. I swapped in a new AAAA battery, and then discovered the pen tip had stopped responding to touch.
Many documents online recommend uninstalling Marvell AVASTAR Bluetooth and rebooting for this to take effect. But that method did not work for me; uninstalling Precise Touch Device is what actually worked.</description><dc:creator>WeChat Official Account</dc:creator><category>Tips</category><category>Surface</category><category>Hardware</category><category>Troubleshooting</category><category>Windows</category><category>Operations</category><category>Learning</category></item><item><title>Ten Common Software Architecture Patterns in a Nutshell</title><link>https://www.chenshaowen.com/en/blog/10-common-software-architectural-patterns-in-a-nutshell.html</link><pubDate>Mon, 04 May 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 04 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/10-common-software-architectural-patterns-in-a-nutshell.html</guid><description>Have you ever thought about how to design a large enterprise system? Before starting any major software development, we first have to pick a suitable architecture. That architecture has to give us the functionality and the quality guarantees we need. So before applying these architectures to our design, we should understand the different architectural systems.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>Design Patterns</category><category>Architecture</category><category>Software</category><category>R&amp;D</category></item><item><title>Configuring a Proxy for Kubernetes</title><link>https://www.chenshaowen.com/en/blog/how-to-set-proxy-for-kubernetes.html</link><pubDate>Sun, 03 May 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 03 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-set-proxy-for-kubernetes.html</guid><description>Usually, running a command of the form export http_proxy/https_proxy on the host is enough to set a Proxy. However, settings on the host do not take effect inside containers. Below are several configuration approaches.
1. Configure Docker&amp;rsquo;s proxy - Node level Configure this on the node that needs the Proxy.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Kubernetes</category><category>Proxy</category><category>Operations</category><category>Configuration</category><category>Network</category><category>Learning</category></item><item><title>Using PyGithub to Create Labels Automatically</title><link>https://www.chenshaowen.com/en/blog/how-to-create-labels-by-pygithub.html</link><pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 01 May 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-create-labels-by-pygithub.html</guid><description>1. About Labels In an earlier document, How to Create GitLab Labels Automatically with python-gitlab, I already explained that Labels can be used for simple project management.
A team usually has more than one code repository. To reduce the cost of communication and learning, besides using a consistent toolchain, it should also reach a certain basic consensus.</description><dc:creator>WeChat Official Account</dc:creator><category>GitHub</category><category>Process</category><category>R&amp;D</category><category>Python</category><category>Automation</category><category>Project Management</category><category>Learning</category></item><item><title>The Software Product Is the Output of Team Capability</title><link>https://www.chenshaowen.com/en/blog/the-product-is-the-output-of-teams-ability.html</link><pubDate>Sun, 26 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 26 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/the-product-is-the-output-of-teams-ability.html</guid><description>1. People Matter More and More Why is the valuation of the internet industry significantly higher than that of manufacturing? Among equally excellent companies in their respective industries, Tencent&amp;rsquo;s PE is as high as 30+, while Gree&amp;rsquo;s PE is only 10+.
The internet industry is characterized by being asset-light: no expensive complex equipment, no need for large production plants.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Software</category><category>Product</category><category>Teams</category><category>Management</category><category>R&amp;D</category><category>Organization</category><category>Capability</category></item><item><title>Comparing Helm 2 and Helm 3</title><link>https://www.chenshaowen.com/en/blog/helm-2-vs-helm-3.html</link><pubDate>Sat, 25 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 25 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/helm-2-vs-helm-3.html</guid><description>Helm 3 is finally released. We can say goodbye to Tiller, but Helm 3&amp;rsquo;s changes do not stop there. Let&amp;rsquo;s continue exploring the other changes.
1. Saying Goodbye to Tiller Removing Tiller in Helm 3 was a good decision. But to understand why it is good, we first need to understand the background that produced Tiller.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>Helm</category><category>Kubernetes</category><category>Comparison</category><category>Operations</category></item><item><title>The IoT Land</title><link>https://www.chenshaowen.com/en/blog/book/the-iot-land.html</link><pubDate>Sat, 25 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 25 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-iot-land.html</guid><description>Subtitle: IoT Profit-Making Models and All-New Practices
Author: (Japan) Kenichi Ohmae
Translator: Zhu Yuewei
Publisher: Beijing Times Chinese Press Co., Ltd.
Publication Year: 2019-2-1
ISBN: 9787569932171
Notes:
The author is a very famous management scholar; I have previously read another book of his, The Art of Thinking.
This book mainly explains the importance of IoT and how to put IoT into practice to generate benefits.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>IoT</category><category>Technology</category><category>Business</category></item><item><title>The DNS Service in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/dns-server-in-kubernetes.html</link><pubDate>Fri, 24 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Fri, 24 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/dns-server-in-kubernetes.html</guid><description>1. About DNS 1.1 What the DNS Service Is For DNS provides a mapping service from domain names to IPs. For example, you type https://www.chenshaowen.com into a browser to open a page, but the data link communicates over IP and cannot recognize www.chenshaowen.com. This is where a DNS lookup comes in: the input is www.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>DNS</category><category>Domain Names</category><category>Network</category><category>Service Discovery</category></item><item><title>Helm Mirror Sources in China</title><link>https://www.chenshaowen.com/en/blog/configure-helm-mirror-in-china.html</link><pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 21 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/configure-helm-mirror-in-china.html</guid><description>The official Helm repo https://charts.helm.sh/stable is unreachable from some machines in China, so you need to configure a mirror.
1. Official Repo 1 helm repo add stable https://charts.helm.sh/stable 2. Git Pages Mirror 1 helm repo add stable https://burdenbear.github.io/kube-charts-mirror/ See kube-charts-mirror for a reference on building a self-hosted, self-controlled mirror.</description><dc:creator>WeChat Official Account</dc:creator><category>Helm</category><category>Kubernetes</category><category>China</category><category>Operations</category><category>Mirrors</category><category>Network</category><category>Configuration</category></item><item><title>Harbor Using a Self-Signed Certificate for HTTPS Access</title><link>https://www.chenshaowen.com/en/blog/support-https-access-harbor-using-self-signed-cert.html</link><pubDate>Sat, 18 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 18 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/support-https-access-harbor-using-self-signed-cert.html</guid><description>In an earlier post, Installing Harbor with Helm, I described in detail how to install Ingress and Harbor and finally push an image successfully. There the domain was publicly reachable and the certificate was issued by a certificate authority. In an intranet environment, however, we need to use an internal domain name for access.</description><dc:creator>WeChat Official Account</dc:creator><category>Harbor</category><category>Kubernetes</category><category>Https</category><category>Images</category><category>Certificates</category><category>Operations</category></item><item><title>DevOps Toolchain: Prow</title><link>https://www.chenshaowen.com/en/blog/prow-of-devops-tool-chain.html</link><pubDate>Fri, 17 Apr 2020 13:17:44 +0000</pubDate><atom:modified>Fri, 17 Apr 2020 13:17:44 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/prow-of-devops-tool-chain.html</guid><description>1. About Prow In the GitHub repositories of well-known projects such as Kubernetes and Istio, we often see an xxx-bot user adding labels to issues and merging PRs. That bot account is driven by Prow.
Prow is a project of the Kubernetes Testing Special Interest Group and is currently part of kubernetes/test-infra.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>Prow</category><category>Kubernetes</category><category>CICD</category></item><item><title>How to Install Kubeflow Using kfctl</title><link>https://www.chenshaowen.com/en/blog/how-to-install-kubeflow-using-kfctl.html</link><pubDate>Sun, 12 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-install-kubeflow-using-kfctl.html</guid><description>1. Installing the Base Environment Install Kubernetes Reference link: Install a Kubernetes Cluster Using Kubeadm
. It is worth noting that Kubeflow is not compatible with every version of Kubernetes, see system-requirements.
1 2 3 4 kubectl version Client Version: version.Info{Major:&amp;#34;1&amp;#34;, Minor:&amp;#34;15&amp;#34;, GitVersion:&amp;#34;v1.15.12&amp;#34;, GitCommit:&amp;#34;e2a822d9f3c2fdb5c9bfbe64313cf9f657f0a725&amp;#34;, GitTreeState:&amp;#34;clean&amp;#34;, BuildDate:&amp;#34;2020-05-06T05:17:59Z&amp;#34;, GoVersion:&amp;#34;go1.12.17&amp;#34;, Compiler:&amp;#34;gc&amp;#34;, Platform:&amp;#34;linux/amd64&amp;#34;} Server Version: version.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubeflow</category><category>Kubernetes</category><category>Machine Learning</category><category>AI</category><category>Operations</category><category>Deployment</category><category>Learning</category></item><item><title>VS Code Cannot Download the Go Plugin Toolchain</title><link>https://www.chenshaowen.com/en/blog/can-not-download-packages-in-vs-code.html</link><pubDate>Sat, 11 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 11 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/can-not-download-packages-in-vs-code.html</guid><description>After installing the Go plugin in VS Code, when you open a Go project the editor prompts you to install the toolchain.
But golang.org is not directly accessible, so we need to download the packages manually into the GOPATH directory and install them there.
Create the package directory 1 2 cd $GOPATH mkdir -p src/golang.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>VSCode</category><category>Plugin</category><category>R&amp;D</category><category>Environment</category></item><item><title>Engineers Need More Sense of Service</title><link>https://www.chenshaowen.com/en/blog/engineers-need-more-sense-of-service.html</link><pubDate>Mon, 06 Apr 2020 00:00:00 +0000</pubDate><atom:modified>Mon, 06 Apr 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/engineers-need-more-sense-of-service.html</guid><description>1. About the Service Industry The primary sector, represented by agriculture, solves the problem of survival; the secondary sector, represented by industry, solves the problem of efficiency; the tertiary sector, represented by services, solves other people&amp;rsquo;s problems.
Unless some factor puts people&amp;rsquo;s physical existence under threat, the service industry has extremely broad room to grow.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Culture</category><category>Teams</category><category>Growth</category></item><item><title>Docker Tips You Didn't Know</title><link>https://www.chenshaowen.com/en/blog/docker-skills-you-do-not-notice.html</link><pubDate>Wed, 18 Mar 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 18 Mar 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/docker-skills-you-do-not-notice.html</guid><description>1. Multi-Stage Builds Compiling a project requires a set of specific tools, but those tools are not needed at runtime. To reduce the image size, you can build in stages. Build in the first stage, then carry the compiled output into the next stage to produce a smaller image.
1 2 3 4 5 6 7 8 9 10 11 FROM golang:1.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Tips</category><category>Operations</category><category>R&amp;D</category><category>Images</category><category>Learning</category><category>Best Practices</category></item><item><title>Running TensorFlow on Docker</title><link>https://www.chenshaowen.com/en/blog/run-tensorflow-on-docker.html</link><pubDate>Thu, 05 Mar 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 05 Mar 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/run-tensorflow-on-docker.html</guid><description>I wrote about this in an earlier post, How to Install a GPU Driver on CentOS. This one looks at how to run TensorFlow with Docker.
1. Check Which TensorFlow Version the Current CPU Supports On a CPU that does not support AVX instructions, running TensorFlow &amp;gt; 1.15 fails with Illegal instruction (core dumped).</description><dc:creator>WeChat Official Account</dc:creator><category>GPU</category><category>Tensorflow</category><category>Docker</category><category>AI</category><category>Machine Learning</category><category>Operations</category><category>Learning</category></item><item><title>On China</title><link>https://www.chenshaowen.com/en/blog/book/on-china.html</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 25 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/on-china.html</guid><description>Original title: On China
Author: Henry Kissinger (USA)
Translators: Hu Liping / Lin Hua / Yang Yunqin / Zhu Jingwen
Publisher: CITIC Press
Published: 2012-10
ISBN: 9787508635583
Notes:
The author is a renowned American scholar and statesman, and he offers a different perspective on the book, documenting China&amp;rsquo;s modern, contemporary, and present-day foreign policy and decision-making mechanisms.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>History</category><category>Policy</category></item><item><title>What Is Left Shift</title><link>https://www.chenshaowen.com/en/blog/what-is-left-shift.html</link><pubDate>Sun, 23 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Sun, 23 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-left-shift.html</guid><description>1. What Left Shift Is It should be noted that &amp;ldquo;left&amp;rdquo; here is not the political left, standing for conservatism or radicalism, but the left that describes a process — moving things earlier in time.
I first came across &amp;ldquo;left shift&amp;rdquo; while researching automated testing. The idea is appealing, and putting it into practice is simple.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Testing</category><category>Agile</category><category>R&amp;D</category><category>DevOps</category><category>Learning</category><category>Process</category><category>Quality</category></item><item><title>A Little Monk in One Zen</title><link>https://www.chenshaowen.com/en/blog/book/a-little-monk-in-one-zen.html</link><pubDate>Thu, 20 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/a-little-monk-in-one-zen.html</guid><description>Author: Yi Chan Xiao He Shang
Publisher: Jiangsu Phoenix Literature and Art Publishing House
Publication Year: 2017-09
ISBN: 9787559411013
Notes:
With its clean, simple art style, A Little Monk in One Zen leads readers into a world full of goodwill and wisdom.
If you feel trapped or troubled by life&amp;rsquo;s trivialities, this book is sure to give you inspiration.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Comics</category><category>Life</category><category>Reading</category><category>Healing</category></item><item><title>How to Clear All Commit History from a Git Repository</title><link>https://www.chenshaowen.com/en/blog/how-to-clear-commit-history-of-git.html</link><pubDate>Thu, 20 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-clear-commit-history-of-git.html</guid><description> Here we take clearing the entire commit history of the main branch as the example.
Switch to the main branch 1 git checkout main Create a clean branch 1 git checkout --orphan new_main Commit all files 1 2 git add -A git commit -m &amp;#34;msg&amp;#34; Delete the main branch 1 git branch -D main Rename the new branch to main 1 git branch -m main Force push to the remote repository 1 git push -f origin main</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>Tips</category><category>Operations</category><category>R&amp;D</category></item><item><title>The Wind Through the Kitchen</title><link>https://www.chenshaowen.com/en/blog/book/the-wind-through-kitchen.html</link><pubDate>Wed, 19 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Wed, 19 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-wind-through-kitchen.html</guid><description>Author: Shi Jia Fan
Publisher: Beijing United Publishing Company
Publication Year: 2017-3-2
ISBN: 9787550294509
Notes:
In the kitchen where the wind blows through, there is a breath of the human world. Dish after delicious dish, enough to make your mouth water as you read. The author must surely be full of love for life.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Kitchen</category><category>Life</category><category>Food</category></item><item><title>The Rose of Time</title><link>https://www.chenshaowen.com/en/blog/book/roses-of-time.html</link><pubDate>Tue, 18 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Tue, 18 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/roses-of-time.html</guid><description>Author: Dan Bin
Subtitle: Dan Bin&amp;rsquo;s Investment Notes
Publisher: CITIC Press
Publication Year: 2018-06
ISBN: 9787508688640
Notes:
This book mainly collects the author&amp;rsquo;s thoughts and analyses on investment from the 200X years. Bei Dao&amp;rsquo;s The Rose of Time accompanied the author through his hardest times, so he borrowed the same name.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Investment</category><category>Reading</category><category>Value Investing</category></item><item><title>How to Install GPU Drivers on CentOS</title><link>https://www.chenshaowen.com/en/blog/how-to-install-gpu-driver-in-centos.html</link><pubDate>Sat, 15 Feb 2020 00:00:00 +0000</pubDate><atom:modified>Sat, 15 Feb 2020 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-install-gpu-driver-in-centos.html</guid><description>Using CentOS 7.7 and a Tesla P100 GPU as an example.
1. Preparing the Base Environment Install the lspci command 1 yum install -y pciutils Check whether the GPU supports CUDA 1 2 3 lspci | grep -i nvidia 00:09.0 3D controller: NVIDIA Corporation GP100GL [Tesla P100 PCIe 12GB] (rev a1) List of CUDA-capable GPUs: https://developer.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>GPU</category><category>CentOS</category><category>Operations</category><category>Drivers</category></item><item><title>Backing Up a Kubernetes Cluster with Velero</title><link>https://www.chenshaowen.com/en/blog/backup-kubernetes-cluster-using-velero.html</link><pubDate>Wed, 25 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/backup-kubernetes-cluster-using-velero.html</guid><description>1. Introduction to Velero Velero is an open-source Kubernetes cluster backup and migration tool from the heptio team (acquired by VMWare).
Velero stores cluster resources in object storage. It supports AWS, Azure, and GCP object storage by default, is compatible with the S3 protocol, and can be extended to other platforms such as Aliyun OSS through plugins.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Velero</category><category>Backup</category><category>Operations</category><category>Learning</category><category>Disaster Recovery</category><category>Migration</category><category>Cluster</category></item><item><title>Kubernetes Cheat Sheet</title><link>https://www.chenshaowen.com/en/blog/kubernetes-cheat-sheet.html</link><pubDate>Tue, 24 Dec 2019 01:00:00 +0000</pubDate><atom:modified>Tue, 24 Dec 2019 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-cheat-sheet.html</guid><description/><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kubectl</category><category>Cheat Sheet</category><category>Operations</category></item><item><title>How to Build a Java Project</title><link>https://www.chenshaowen.com/en/blog/how-to-compile-a-java-project.html</link><pubDate>Fri, 20 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 20 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-compile-a-java-project.html</guid><description>First, the compiler needs to compile .java text files into .class bytecode, and then the JVM executes the .class bytecode files. The process is not complicated; this article mainly records some of the related steps during compilation and runtime. 1. A Single Source File Create a text file Hello.java 1</description><dc:creator>WeChat Official Account</dc:creator><category>Java</category><category>Maven</category><category>Build</category><category>Tips</category><category>R&amp;D</category></item><item><title>KubeSpray Kubernetes install error: ip in ansible_all_ipv4_addresses</title><link>https://www.chenshaowen.com/en/blog/ip-not-in-ansible-all-ipv4-addresses-while-using-kubespray.html</link><pubDate>Wed, 18 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 18 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ip-not-in-ansible-all-ipv4-addresses-while-using-kubespray.html</guid><description>When installing Kubernetes with KubeSpray, the following error occurs 1 2 3 4 5 6 fatal: [node0]: FAILED! =&amp;gt; { &amp;#34;assertion&amp;#34;: &amp;#34;ip in ansible_all_ipv4_addresses&amp;#34;, &amp;#34;changed&amp;#34;: false, &amp;#34;evaluated_to&amp;#34;: false, &amp;#34;failed&amp;#34;: true } Check the inventory.ini configuration 1 2 3 4 5 6 7 cat inventory.ini # ## Configure &amp;#39;ip&amp;#39; variable to bind kubernetes services on a # ## different ip than the default iface # ## We should set etcd_member_name for etcd cluster.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>KubeSpray</category><category>Error</category><category>Installation</category><category>Troubleshooting</category><category>Operations</category></item><item><title>Building an Automated Test System with Kubernetes and Jenkins</title><link>https://www.chenshaowen.com/en/blog/build-an-automated-test-system-using-kubernetes-and-jenkins.html</link><pubDate>Thu, 12 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 12 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/build-an-automated-test-system-using-kubernetes-and-jenkins.html</guid><description>1. Test Layering The purpose of testing is to verify expected behavior and uncover latent defects. Testing strengthens confidence that a qualified product can be delivered, and it is what makes agile iteration possible. You could say that testing determines the development pace of a product.
The network model has the seven-layer OSI and the four-layer TCP, while development patterns include MTV, MVC, MVP, MVVM, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Testing</category><category>Automation</category><category>Kubernetes</category><category>Jenkins</category><category>DevOps</category><category>CICD</category><category>Operations</category></item><item><title>Dynamically Creating a Jenkins Slave on Kubernetes</title><link>https://www.chenshaowen.com/en/blog/creating-jenkins-slave-dynamically-on-kubernetes.html</link><pubDate>Fri, 06 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 06 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/creating-jenkins-slave-dynamically-on-kubernetes.html</guid><description>1. Jenkins Working Modes Jenkins has a single-Master, multi-Slave architecture. The Master assigns tasks and manages services. Slaves execute the actual tasks. Even when multiple Masters are deployed, they remain independent of one another and cannot coordinate scheduling. A high-availability Jenkins solution requires an external task distribution framework, such as</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Kubernetes</category><category>CICD</category><category>DevOps</category><category>Operations</category></item><item><title>Dial Testing Services with Jenkins</title><link>https://www.chenshaowen.com/en/blog/how-to-dial-up-testing-using-jenkins.html</link><pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 04 Dec 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-dial-up-testing-using-jenkins.html</guid><description>1. Why Dial Testing For some of the critical services in a system, we usually set up monitoring. When a failure occurs, it can be detected as quickly as possible and a notification sent to the people who care. Once a failure has occurred, the failure process can be traced</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Dial Testing</category><category>Monitoring</category><category>DevOps</category><category>Operations</category></item><item><title>Issuing Ingress Certificates in Kubernetes and Day-to-Day Troubleshooting</title><link>https://www.chenshaowen.com/en/blog/kubernetes-ingress-certificates-and-ops.html</link><pubDate>Thu, 10 Oct 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 10 Oct 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-ingress-certificates-and-ops.html</guid><description>1. Automatically Issuing Ingress Certificates Install cert-manager 1 2 3 4 5 6 7 8 9 10 kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.10/deploy/manifests/00-crds.yaml kubectl create namespace cert-manager kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true helm repo add jetstack https://charts.jetstack.io helm repo update helm install \ --name cert-manager \ --namespace cert-manager \ --version v0.10.0 \ jetstack/cert-manager Create a global issuer Create the file issuer.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Certificates</category><category>Failures</category><category>Ingress</category><category>Troubleshooting</category><category>Operations</category></item><item><title>Basic Operations for Deployments in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/basic-operation-of-deployment-in-kubernetes.html</link><pubDate>Fri, 27 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 27 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-operation-of-deployment-in-kubernetes.html</guid><description>A Deployment controls the number and state of Pods by creating ReplicaSets. This post mainly introduces some common Deployment operations.
1. Deployment yaml Format Passing the --dry-run flag means the command is not actually executed, only YAML output is generated:
1 kubectl create deployment nginx --image=nginx --dry-run -o yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: {} template: metadata: creationTimestamp: null labels: app: nginx spec: containers: - image: nginx name: nginx resources: {} status: {} 2.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Deployment</category><category>Deployment</category><category>Learning</category><category>Operations</category></item><item><title>Certificates in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/certificates-in-kubernetes.html</link><pubDate>Thu, 26 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 26 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/certificates-in-kubernetes.html</guid><description>I am using Kubernetes 1.15.3; the way different versions handle this may vary.
1. About Certificates A root certificate is self-signed A root certificate is issued by itself. Browsers have the CA certificates of common certificate vendors built in. That is why browsers trust the next-level certificates issued by those vendors.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Certificates</category><category>Security</category><category>Operations</category><category>TLS</category><category>Configuration</category></item><item><title>How to Develop an Operator Using KubeBuilder</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-a-operator-using-kubebuilder.html</link><pubDate>Wed, 25 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 25 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-a-operator-using-kubebuilder.html</guid><description>With the Operator approach, Kubernetes functionality can be extended in a friendly way. Operator = CRD + Controller. First you generate the CRD from a yaml definition, then the Controller continuously watches the data in etcd and performs the corresponding actions. There is a lot of tedious and repetitive work involved in developing an Operator.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Go</category><category>Operator</category><category>R&amp;D</category><category>Operations</category><category>CRD</category><category>Learning</category></item><item><title>Summary of Kubernetes 1.6.0 Installation Problems</title><link>https://www.chenshaowen.com/en/blog/summary-of-installation-problems-for-kubernetes-1.6.0.html</link><pubDate>Fri, 20 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 20 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/summary-of-installation-problems-for-kubernetes-1.6.0.html</guid><description>1. CNI Problems Error log
1 2 journalctl -u kubelet ...Unable to update cni config: No networks found in /etc/cni/net.d Because no CNI is installed, you need to remove --network-plugin=cni from the parameters in /var/lib/kubelet/kubeadm-flags.env.
1 2 cat /var/lib/kubelet/kubeadm-flags.env KUBELET_KUBEADM_ARGS=&amp;#34;--cgroup-driver=systemd --pod-infra-container-image=k8s.gcr.io/pause:3.1&amp;#34; 2. Node NotReady There can be many reasons for a node being NotReady.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Installation</category><category>Troubleshooting</category><category>Operations</category><category>CNI</category><category>Learning</category><category>kubeadm</category></item><item><title>Image Management Tool -- Harbor</title><link>https://www.chenshaowen.com/en/blog/an-enterprise-class-registry-of-harbor.html</link><pubDate>Thu, 12 Sep 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 12 Sep 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/an-enterprise-class-registry-of-harbor.html</guid><description>1. Requirements for Building Harbor Harbor hardware requirements:
CPU, at least 2 cores, 4 cores is better Mem, at least 4 GB, 8 GB is better Disk, at least 40 GB, 160 GB is better Docker version requirements:
17.06.0 or later To build Harbor on Kubernetes, you can refer to the documentation, Building Harbor with Helm.</description><dc:creator>WeChat Official Account</dc:creator><category>Harbor</category><category>Images</category><category>Containers</category><category>Kubernetes</category><category>Operations</category></item><item><title>How Docker Pulls Images</title><link>https://www.chenshaowen.com/en/blog/how-docker-pull-images.html</link><pubDate>Fri, 06 Sep 2019 08:00:00 +0000</pubDate><atom:modified>Fri, 06 Sep 2019 08:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-docker-pull-images.html</guid><description>1. Pulling images with docker pull When you pull an image with docker pull {IMAGE_NAME}, there are two cases:
The IMAGE_NAME prefix points to a registry Docker recognizes IMAGE_NAME as an image provided by the specified repository. For example, for myregistry.io/space1/image1:latest, Docker requests the image data from the server that myregistry.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Images</category><category>Learning</category><category>Operations</category></item><item><title>Installing Harbor with Helm</title><link>https://www.chenshaowen.com/en/blog/install-harbor-using-helm.html</link><pubDate>Fri, 30 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 30 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-harbor-using-helm.html</guid><description>Prerequisites: (1) Helm is already installed, see Installing Helm; (2) the cluster has default dynamic storage available, see Providing PV Dynamic Storage with StorageClass
1. Installing Ingress with Helm Ingress consists of two parts: Ingress and the Ingress Controller.
In Kubernetes, the Ingress object describes routing rules; the Ingress Controller interacts with the Apiserver and writes the Ingress rules into the Nginx Pod.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Harbor</category><category>Ingress</category><category>Helm</category><category>Image Registry</category><category>Images</category><category>Operations</category></item><item><title>Using S2I to Build Cloud Native Applications</title><link>https://www.chenshaowen.com/en/blog/using-s2i-to-build-cloud-native-applications.html</link><pubDate>Mon, 26 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Mon, 26 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-s2i-to-build-cloud-native-applications.html</guid><description>1. What Problem S2I Solves It is foreseeable that a large number of applications will be deployed as containers in the future.
Container platforms care about images and containers, while application development cares about business code, and ultimately the code needs to be deployed as an image. From code to image — that is Source To Image, or S2I.</description><dc:creator>WeChat Official Account</dc:creator><category>S2I</category><category>Docker</category><category>Cloud Native</category><category>Images</category><category>Operations</category><category>R&amp;D</category></item><item><title>Using emptyDir, hostPath, and localVolume in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/using-emptydir-hostpath-localvolume-in-kubernetes.html</link><pubDate>Sat, 24 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-emptydir-hostpath-localvolume-in-kubernetes.html</guid><description>Earlier, in Kubernetes Volumes, we got some understanding of Volumes. This post focuses on practice, learning how to use the three local storage options: emptydir, hostpath, and localvolume.
1. Basic Properties of a PV 1.1 PV Lifecycle PV states:
Available: available, not yet bound by any PVC Bound: already bound to a PVC Released: the PVC was deleted, but the resource has not yet been reclaimed Failed: automatic reclamation failed 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Volume</category><category>Storage</category><category>Operations</category><category>PVC</category><category>Learning</category></item><item><title>Kubernetes Cluster Operations in Practice</title><link>https://www.chenshaowen.com/en/blog/kubernetes-cluster-operations-practices.html</link><pubDate>Thu, 22 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 22 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/kubernetes-cluster-operations-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, gathering the common problems and solutions from day-to-day Kubernetes cluster operations.
1. Configuring Multiple Clusters with Kubectl When doing Kubernetes-related development you usually end up managing several clusters. Kubectl provides multi-cluster context management.
Kubectl&amp;rsquo;s configuration usually lives in $HOME/.kube/config or /etc/kubernetes/admin.conf. Log into the machine, look at the cluster configuration, and edit it using the format below.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Operations</category><category>R&amp;D</category><category>kubectl</category><category>Helm</category></item><item><title>Code Quality Analysis Tool SonarQube</title><link>https://www.chenshaowen.com/en/blog/sonarqube-of-code-quality-analysis-tool.html</link><pubDate>Wed, 21 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 21 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/sonarqube-of-code-quality-analysis-tool.html</guid><description>1. Who Needs SonarQube Code review is an indispensable part of high-quality software development. It helps developers spot bugs in the code in time and improves code quality and maintainability. The dimensions of code review include language conventions, code style, and soundness of design. Checking these things by hand consumes</description><dc:creator>WeChat Official Account</dc:creator><category>SonarQube</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category><category>Code Quality</category></item><item><title>Installing a Kubernetes Cluster with Kubeadm</title><link>https://www.chenshaowen.com/en/blog/using-kubeadm-to-install-the-kubernetes-cluster.html</link><pubDate>Thu, 15 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 15 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-kubeadm-to-install-the-kubernetes-cluster.html</guid><description>1. Cluster Planning Prepare three hosts: one Master and two Nodes. Operating system: CentOS 7 Specs: 2 Core 4 GB Docker version: 18.06.3 Kubernetes version: 1.15.3 If you are using a purchased cloud host, open the following ports: 1 2 3 4 5 6 7 8 9 10 11 12</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Kubeadm</category><category>Installation</category><category>Operations</category><category>Cluster</category><category>Learning</category></item><item><title>Let's Learn Go -- (4) Common Functions</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-4.html</link><pubDate>Sat, 10 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 10 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-4.html</guid><description>1. The main and init Functions A package can contain multiple init functions, but it must contain exactly one main function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package main import ( &amp;#34;fmt&amp;#34; ) func init() { fmt.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Let's Learn Go</category><category>Functions</category><category>Learning</category></item><item><title>Ceph in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/ceph-in-kubernetes.html</link><pubDate>Wed, 07 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 07 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ceph-in-kubernetes.html</guid><description>1. Different Kinds of Storage 1.1 File Storage File storage is storage based on files. When accessing data, you need to provide the corresponding lookup path.
It is suitable for services such as FTP and NFS.
1.2 Block Storage Block storage splits data into blocks and stores each part separately. When accessing data, the underlying storage software reassembles these scattered pieces.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Ceph</category><category>Storage</category><category>Operations</category><category>RBD</category><category>Learning</category><category>Distributed Storage</category></item><item><title>Kubernetes Volumes</title><link>https://www.chenshaowen.com/en/blog/volumes-of-kubernetes.html</link><pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Mon, 05 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/volumes-of-kubernetes.html</guid><description>1. Docker Storage Volumes 1.2 Volumes in Docker A Docker volume mounts a host directory into a container. Files modified inside the container are persisted to the host. Even if the container is deleted, the files on the host are retained.
Docker uses /var/lib/docker/volumes/ to store container volumes.
List local volumes:</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Storage</category><category>Learning</category><category>Operations</category><category>PVC</category><category>Storage Volume</category><category>Architecture</category><category>Docker</category></item><item><title>Labels and Selectors in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/labels-and-selectors-of-kubernetes.html</link><pubDate>Sun, 04 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Sun, 04 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/labels-and-selectors-of-kubernetes.html</guid><description>1. Labels 1.1 What Labels Are Labels are key-value pairs attached to an object. You can add labels directly when the object is created, or modify them dynamically afterwards.
Label format:
1 2 3 4 &amp;#34;labels&amp;#34;: { &amp;#34;key1&amp;#34; : &amp;#34;value1&amp;#34;, &amp;#34;key2&amp;#34; : &amp;#34;value2&amp;#34; } Format requirements:
Key: must be unique Value: must start with a letter or a digit, may contain letters, digits, hyphens, dots, and underscores, and is at most 63 characters long 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Learning</category><category>Operations</category><category>Labels</category><category>Selectors</category></item><item><title>Open Source Is Refactoring the Business Model</title><link>https://www.chenshaowen.com/en/blog/open-source-is-refactoring-the-business-model.html</link><pubDate>Thu, 01 Aug 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 01 Aug 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/open-source-is-refactoring-the-business-model.html</guid><description>Adobe acquired Magento for $1.67 billion, Microsoft acquired GitHub for $7.5 billion, IBM acquired Red Hat for $34 billion — open source turns out to be a good business too. This article is mainly a record of, and some thoughts about, open source.
1. What Open Source Is 1.1 History In 1969, Bell Labs shared the Unix source code with the community, laying an important foundation for open source.</description><dc:creator>WeChat Official Account</dc:creator><category>Open Source</category><category>Thoughts</category><category>Business Model</category><category>Industry</category><category>Business</category><category>ToB</category></item><item><title>Kubernetes Networking</title><link>https://www.chenshaowen.com/en/blog/networks-of-kubernetes.html</link><pubDate>Sun, 28 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Sun, 28 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/networks-of-kubernetes.html</guid><description>1. Docker&amp;rsquo;s Network Model 1.1 bridge Mode bridge mode is used by default, and you can also specify it with --net=bridge.
In bridge mode, containers connect to the same virtual bridge, docker0. docker0 usually occupies the 172.17.0.1/16 subnet. Containers on the same bridge can communicate directly over IP.
1.2 host Mode Use --net=host to specify host mode.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Network</category><category>Learning</category><category>Operations</category><category>Docker</category><category>CNI</category><category>Architecture</category></item><item><title>Quickly Deploy Prometheus with Helm and Operator</title><link>https://www.chenshaowen.com/en/blog/quickly-deploy-prometheus-using-helm-and-operator.html</link><pubDate>Fri, 26 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 26 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/quickly-deploy-prometheus-using-helm-and-operator.html</guid><description>Helm is the package manager for Kubernetes; Operator is used to manage stateful distributed applications on Kubernetes. This article mainly describes how to use Helm and Operator to quickly deploy Prometheus on a Minikube cluster and use Grafana to view monitoring data. For Minikube installation, see Building a Remote Kubernetes Development Environment; for Helm configuration, see The Package Manager for Kubernetes &amp;ndash; Helm; for Operator, see Kubernetes Complex Stateful Application Management Framework &amp;ndash; Operator.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Helm</category><category>Operator</category><category>Prometheus</category><category>Monitoring</category><category>Operations</category><category>Learning</category></item><item><title>The Kubernetes API</title><link>https://www.chenshaowen.com/en/blog/api-of-kubernetes.html</link><pubDate>Fri, 26 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 26 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/api-of-kubernetes.html</guid><description>1. Objects in Kubernetes Kubernetes objects are persistent entities in the system, used to represent the state of the cluster. Users interact with Kubernetes by operating on objects, telling the system the workload they expect.
Objects are manipulated through the Kubernetes API. Every Kubernetes object contains two nested object fields, Spec and Status.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>API</category><category>Objects</category><category>Operations</category><category>Learning</category><category>Architecture</category><category>Apiserver</category></item><item><title>Kubernetes Complex Stateful Application Management Framework -- Operator</title><link>https://www.chenshaowen.com/en/blog/complex-application-management-framework-operator-for-kubernetes.html</link><pubDate>Thu, 25 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 25 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/complex-application-management-framework-operator-for-kubernetes.html</guid><description>1. Origins Originally, two CoreOS employees, in order to make deploying etcd clusters easier, bound corresponding logical operations to the create, delete, and update events of the etcdCluster object, using Kubernetes to automate etcd cluster management.
A few months later, at a KubeCon conference, they shared this approach, which they called Operator, and it received a strong response from the community.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Helm</category><category>Practice</category><category>Operator</category><category>Operations</category><category>Stateful Applications</category><category>Learning</category></item><item><title>Kubernetes' Package Manager -- Helm</title><link>https://www.chenshaowen.com/en/blog/package-manager-helm-of-kubernetes.html</link><pubDate>Wed, 24 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/package-manager-helm-of-kubernetes.html</guid><description>1. Why Helm Is Needed One important design philosophy in Kubernetes is declarative operation. Users change the system by setting the system&amp;rsquo;s expected state. For example, the current replica count is 2 and it needs to be adjusted to 3. The declarative way is to modify the replica count in</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Helm</category><category>Practice</category><category>Operations</category><category>Package Management</category><category>Learning</category><category>Chart</category><category>Deployment</category></item><item><title>Let's Learn Go -- (3) Go Modules</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-3.html</link><pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 23 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-3.html</guid><description>1. Go&amp;rsquo;s Package Management Mechanisms 1.1 GOPATH GOPATH pulls code with the go get command and places it in the GOPATH directory. The problems with GOPATH are: It cannot manage package versions It uses a global repository, so it cannot isolate projects effectively 1.2 Vendor Starting with version 1.5, Go</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>GoModules</category><category>Let's Learn Go</category><category>Learning</category><category>R&amp;D</category><category>Package Management</category></item><item><title>How to Optimize a Blog Solution Step by Step</title><link>https://www.chenshaowen.com/en/blog/how-to-optimize-the-blog-solution-step-by-step.html</link><pubDate>Sun, 21 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Sun, 21 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-optimize-the-blog-solution-step-by-step.html</guid><description>Four or five years have passed since I first started blogging. My original intent was to record, think, and organize — a little more for my own benefit, and if it could help others too, so much the better. I went from csdn at the very beginning, to deploying Ghost on Linode, to Pages hosting, and finally to settling on a CDN.</description><dc:creator>WeChat Official Account</dc:creator><category>Blog</category><category>Plan</category><category>Operations</category><category>CDN</category><category>Learning</category></item><item><title>A Practical Guide to kubectl</title><link>https://www.chenshaowen.com/en/blog/practice-guide-to-kubectl.html</link><pubDate>Fri, 19 Jul 2019 01:00:00 +0000</pubDate><atom:modified>Fri, 19 Jul 2019 01:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/practice-guide-to-kubectl.html</guid><description>1. What Is kubectl kubectl is the command-line tool for Kubernetes. It interacts with the cluster through the API server.
2. Configuring kubectl kubectl can be configured through ~/.kube/config to connect to one or more clusters.
For details on how to configure it, see: Configure Access to Multiple Clusters. If you need to configure a remote cluster, see: Building a Remote Kubernetes Development Environment.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>kubectl</category><category>Practice</category><category>Learning</category><category>Operations</category></item><item><title>Basic Concepts in Kubernetes</title><link>https://www.chenshaowen.com/en/blog/basic-concepts-in-kubernetes.html</link><pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 19 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-concepts-in-kubernetes.html</guid><description>1. Cluster 1.1 Master The Master is responsible for managing and maintaining Kubernetes cluster information, dispatching tasks to Nodes, and receiving feedback.
The components running on the Master include kube-apiserver, kube-scheduler, kube-controller-manager, cloud-controller-manager, and so on.
1.2 Node A Node carries the cluster workload; it can be a physical machine or a virtual machine.</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Concepts</category><category>Learning</category><category>Operations</category></item><item><title>Building a Remote Kubernetes Development Environment</title><link>https://www.chenshaowen.com/en/blog/building-a-remote-kubernetes-development-environment.html</link><pubDate>Thu, 18 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 18 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/building-a-remote-kubernetes-development-environment.html</guid><description>Minikube is a single-node distribution of Kubernetes, suited to product evaluation and day-to-day development. Here we use Minikube to build a development environment: Kubernetes runs on a CentOS cloud server, and development happens remotely from a local OS X machine. 1. Install Minikube on the Cloud Server On the Minikube</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>R&amp;D</category><category>Environment</category><category>Practice</category><category>MiniKube</category><category>Learning</category><category>Operations</category><category>Development Environment</category></item><item><title>ToB Thinking at Large and Small Companies</title><link>https://www.chenshaowen.com/en/blog/tob-thinking-of-large-and-small-companies.html</link><pubDate>Tue, 16 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 16 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/tob-thinking-of-large-and-small-companies.html</guid><description>1. Understanding ToB It is only because money has become harder and harder to make from ToC that ToB has flourished.
The era in which a single idea could be turned into a good product and ultimately accepted by everyone has been crushed beneath the wheels. In the early days of the internet, a single portal directory made Sohu, a single chat tool made Tencent, and even hao123 — nothing more than a handful of jump pages — sold for tens of millions.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>ToB</category><category>Business Model</category><category>Product</category><category>Management</category><category>Teams</category></item><item><title>NFS Deployment and Mounting</title><link>https://www.chenshaowen.com/en/blog/nfs-deployment-and-mount.html</link><pubDate>Fri, 12 Jul 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 12 Jul 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nfs-deployment-and-mount.html</guid><description>NFS (Network File System) is used to share directories over the network; once the client mounts them, they can be read and written like a local disk. This post covers deploying an NFS service on CentOS and Ubuntu, and how to mount a remote NFS directory on each system. 1.</description><dc:creator>WeChat Official Account</dc:creator><category>NFS</category><category>CentOS</category><category>Ubuntu</category><category>macOS</category><category>Linux</category><category>Operations</category><category>Storage</category></item><item><title>Getting Started with Go</title><link>https://www.chenshaowen.com/en/blog/book/the-way-to-go.html</link><pubDate>Thu, 06 Jun 2019 07:16:21 +0000</pubDate><atom:modified>Thu, 06 Jun 2019 07:16:21 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-way-to-go.html</guid><description>English title: The Way To Go
Subtitle: A Thorough Introduction To The Go Programming Language
Author: Ivo Balbaert
Publisher: iUniverse
Publication year: 2012-3-8
ISBN: 9781469769165
Notes:
This is a Go primer I would personally recommend. Because Go has evolved rapidly in recent years, parts of the original text are already out of date.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Go</category><category>Getting Started</category><category>Learning</category></item><item><title>Let's Learn Go -- (2) Data and Logic Structures</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-2.html</link><pubDate>Wed, 05 Jun 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 05 Jun 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-2.html</guid><description>1. Go&amp;rsquo;s Data Structures Basic types
Boolean: bool Integer: byte, int, int8, int16, uint, uintptr Floating point: float32, float64 Complex: complex64, complex128 String: string Character: rune Error: error Composite types
Pointer: pointer Array: array Slice: slice Dictionary: map Channel: chan Struct: struct Interface: interface A Go variable identifier is made up of letters, digits, and underscores, and its first character cannot be a digit.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Let's Learn Go</category><category>Types</category><category>Data Structures</category></item><item><title>How to Prevent XSS in Web Rich Text</title><link>https://www.chenshaowen.com/en/blog/how-to-prevent-xss-in-web-rich-text.html</link><pubDate>Tue, 04 Jun 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 04 Jun 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-prevent-xss-in-web-rich-text.html</guid><description>1. How XSS Works and Several Common Attack Types An XSS attack is an attack that executes malicious scripts to steal a user&amp;rsquo;s login state, hijack a session, and so on. The input sources for malicious scripts include Cookies, Post forms, Get requests, HTTP header content, and more. We usually call a code fragment used for an XSS attack an XSS vector.</description><dc:creator>WeChat Official Account</dc:creator><category>XSS</category><category>Rich Text</category><category>Security</category><category>Web</category><category>R&amp;D</category></item><item><title>django-xss-cleaner</title><link>https://www.chenshaowen.com/en/blog/django-xss-cleaner.html</link><pubDate>Mon, 03 Jun 2019 00:00:00 +0000</pubDate><atom:modified>Mon, 03 Jun 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-xss-cleaner.html</guid><description>django-xss-cleaner is a bleach-based Django XSSFilter toolkit that implements whitelist XSS filtering for GET and POST request parameters. The package ships with a set of built-in whitelisted HTML tags and attribute settings, and also supports custom extensions. Project address, https://github.com/shaowenchen/django-xss-cleaner 1. Installing and Configuring settings.py Add the middleware xss_cleaner.middlewares.CleanXssMiddleware to</description><dc:creator>WeChat Official Account</dc:creator><category>XSS</category><category>Django</category><category>Python</category><category>Security</category><category>R&amp;D</category></item><item><title>The Era of Cloud Work</title><link>https://www.chenshaowen.com/en/blog/book/cloud-work-era.html</link><pubDate>Sat, 01 Jun 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 01 Jun 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/cloud-work-era.html</guid><description>Author: Wang Jianguo / Wu Bin
Publication year: 2016-11-1
ISBN: 9787508668024
Notes:
The book&amp;rsquo;s main point is that in the internet era, working from home and collaborating remotely is a better fit. From there it goes on to discuss how business owners and workers can harness this way of working, and the author offers some of his own thoughts.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Form</category><category>Cloud</category><category>Work</category></item><item><title>Let's Learn Go -- (1) Background and Characteristics</title><link>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-1.html</link><pubDate>Tue, 28 May 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 28 May 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/let-us-start-learning-go-1.html</guid><description>1. The Background of the Go Language The development of C/C++ did not keep pace with the advance of computing, and for over a decade no mainstream systems programming language suited to the era appeared. To solve this problem, Google developed a new programming language &amp;ndash; Go.
Google&amp;rsquo;s situation at the time:</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Let's Learn Go</category><category>Background</category><category>Learning</category></item><item><title>Different Stages of a SaaS Development Team</title><link>https://www.chenshaowen.com/en/blog/different-stages-of-the-saas-development-team.html</link><pubDate>Fri, 24 May 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 24 May 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/different-stages-of-the-saas-development-team.html</guid><description>The team I am on is responsible for SaaS development. We have a few flagship SaaS products and also some supporting ones. The flagship SaaS products have complex architectures, large technical challenges, and heavy staffing, and they are the focus of our KPIs. But a flagship project cannot stay the flagship forever — projects have life cycles and phases.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Teams</category><category>SaaS</category><category>Management</category><category>R&amp;D</category></item><item><title>Git Tips You Didn't Know</title><link>https://www.chenshaowen.com/en/blog/git-skills-you-do-not-notice.html</link><pubDate>Fri, 17 May 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 17 May 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/git-skills-you-do-not-notice.html</guid><description>1. Pages GitHub, GitLab, Bitbucket and others all offer a free static page hosting service called Pages. With the Pages service you can publish documentation, blogs, and more. Taking GitHub as an example, using Pages usually takes just a few simple steps: Create a new project: [username].github.io Commit static html</description><dc:creator>WeChat Official Account</dc:creator><category>Tips</category><category>Git</category><category>Processes</category><category>Development</category><category>R&amp;D</category></item><item><title>Output as a Service</title><link>https://www.chenshaowen.com/en/blog/output-as-a-service.html</link><pubDate>Fri, 03 May 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 03 May 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/output-as-a-service.html</guid><description>1. IT Infrastructure Is Undergoing Drastic Change Traditional enterprises are building more efficient business models on top of internet technology to strengthen their competitiveness in their industries. Lower R&amp;amp;D costs, faster product iteration, closer proximity to customers, better service quality&amp;hellip; This whole set of changes will push the productivity and living standards of society as a whole onto a new level.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Cloud Services</category><category>Operations</category><category>Industry</category><category>ToB</category></item><item><title>Building Microservices</title><link>https://www.chenshaowen.com/en/blog/book/microservice-design.html</link><pubDate>Tue, 16 Apr 2019 08:47:38 +0000</pubDate><atom:modified>Tue, 16 Apr 2019 08:47:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/microservice-design.html</guid><description>Author: [UK] Sam Newman
Publication year: 2016-5
ISBN: 9787115420268
Notes:
It mainly answers a series of questions about microservices. What microservices are, what characteristics they have, how systems evolve, how to divide services, and integration, deployment, and testing strategies.
It gives a fairly comprehensive introduction to microservices, and many of its views resonate with me.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Services</category><category>Architecture</category></item><item><title>Keep Running</title><link>https://www.chenshaowen.com/en/blog/continue-to-run.html</link><pubDate>Fri, 05 Apr 2019 00:00:00 +0000</pubDate><atom:modified>Fri, 05 Apr 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/continue-to-run.html</guid><description>1. On Running When you talk about running, it is easy to think of Haruki Murakami&amp;rsquo;s What I Talk About When I Talk About Running. The sentence pattern &amp;ldquo;What I talk about when I talk about XX&amp;rdquo; has been widely quoted, which says something about the influence of the book.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Running</category><category>Life</category><category>Growth</category></item><item><title>From Account Security to Two-Factor Authentication</title><link>https://www.chenshaowen.com/en/blog/from-account-security-to-secondary-verification.html</link><pubDate>Thu, 21 Mar 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 21 Mar 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/from-account-security-to-secondary-verification.html</guid><description>1. Security Problems Are Getting Worse As the internet permeates every layer of life, we depend more and more on various online IDs. These IDs make up our digital selves and are extremely important account assets.
On the other hand, account information leaks and security incidents happen from time to time: CSDN, 12306, Huazhu Hotels, Facebook, Twitter, Uber&amp;hellip; the list goes on.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>Verification</category><category>Two-Factor Authentication</category><category>Account Security</category><category>Learning</category><category>Best Practices</category></item><item><title>Django Performance: Database Query Optimization</title><link>https://www.chenshaowen.com/en/blog/database-query-optimization-of-django-performance.html</link><pubDate>Wed, 20 Mar 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 20 Mar 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/database-query-optimization-of-django-performance.html</guid><description>This article mainly offers optimization advice on Django fields and queries, and also introduces a performance analysis tool called Django-silk. I hope it helps you develop high-performance Django projects.
1. DBA&amp;rsquo;s Advice 1.1 Table Field Design Avoid null values; null values are hard to optimize queries around and take up extra index space Prefer INT over BIGINT, and describe fields as accurately as possible Use enums or integers instead of string types Use TIMESTAMP instead of DATETIME Do not put more than 20 fields in a single table Store IPs as integers 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Database</category><category>Optimization</category><category>Performance</category><category>Django</category><category>Python</category><category>R&amp;D</category></item><item><title>Django Performance: Sharding Databases and Tables</title><link>https://www.chenshaowen.com/en/blog/sub-db-and-table-of-django-performance.html</link><pubDate>Tue, 19 Mar 2019 00:00:00 +0000</pubDate><atom:modified>Tue, 19 Mar 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/sub-db-and-table-of-django-performance.html</guid><description>1. The Problem We Hit The frontend requests are heavy, concurrency is high, and access is slow. The bottlenecks show up mainly as:
Large single tables Large single databases Slow network IO Slow disk IO Optimizing network and disk IO mainly relies on hardware upgrades. In theory, a database imposes no limit on the size of a single database or a single table, but an oversized single database or table means more requests land on a single machine, putting pressure on IO.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Database</category><category>Sharding</category><category>Performance</category><category>Database Sharding</category><category>Table Sharding</category></item><item><title>The R&amp;D Process of Agile Development</title><link>https://www.chenshaowen.com/en/blog/r-and-d-process-of-agile-development.html</link><pubDate>Thu, 14 Mar 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 14 Mar 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/r-and-d-process-of-agile-development.html</guid><description>1. What Agile Development Is In the traditional software development model, the cycle from raising a requirement to final delivery is long. The waterfall model proceeds through six steps: requirements analysis, design, coding, integration, testing, and maintenance. Once a requirement changes, the work invested earlier is not only wasted but also hard to adjust.</description><dc:creator>WeChat Official Account</dc:creator><category>Branching</category><category>Agile</category><category>Process</category><category>Testing</category><category>R&amp;D</category><category>Learning</category><category>Management</category><category>Teams</category><category>Iteration</category><category>Best Practices</category></item><item><title>Building a Team with Consistency</title><link>https://www.chenshaowen.com/en/blog/build-an-overall-team.html</link><pubDate>Sat, 02 Mar 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 02 Mar 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/build-an-overall-team.html</guid><description>1. Consistent Understanding In a large organization, we can think of a small team as a microservice.
As early as 1967, Conway proposed the concept of the microservice. Conway argued that any organization designing a system will deliver a design whose structure is consistent with that organization&amp;rsquo;s communication structure.
When developing complex systems, we usually split the system into modules.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Teams</category><category>R&amp;D</category><category>Management</category><category>Culture</category></item><item><title>Advanced Pytest: Mock</title><link>https://www.chenshaowen.com/en/blog/mock-of-pytest.html</link><pubDate>Sun, 27 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Sun, 27 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/mock-of-pytest.html</guid><description>1. Why We Need Mock When writing unit tests, the function under test is sometimes not a self-contained executable unit. It depends on external resources, such as the return value of another function or a value in a row of a database. To shield the test from interference from external</description><dc:creator>WeChat Official Account</dc:creator><category>Testing</category><category>Python</category><category>Pytest</category><category>Learning</category></item><item><title>PaaS Deployment with Buildpack</title><link>https://www.chenshaowen.com/en/blog/buildpack-for-paas-deployment.html</link><pubDate>Thu, 24 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Thu, 24 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/buildpack-for-paas-deployment.html</guid><description>I have been learning Go recently, and the internal PaaS platform we commonly use happens to support Go as well as related Web frameworks. A PaaS system that supports multiple languages cannot do without the buildpack mechanism. Although PaaS platforms keep being upgraded, the buildpack mechanism has always been retained.</description><dc:creator>WeChat Official Account</dc:creator><category>PaaS</category><category>Buildpack</category><category>Operations</category><category>R&amp;D</category><category>Deployment</category><category>Learning</category><category>Cloud Native</category><category>Multi-language</category></item><item><title>Go Development Configuration</title><link>https://www.chenshaowen.com/en/blog/configuration-of-developing-go.html</link><pubDate>Wed, 23 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Wed, 23 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/configuration-of-developing-go.html</guid><description>1. Common Environment Variables 1.1 GOROOT $GOROOT is the local directory where the Go package is installed.
1 2 3 4 cd /c/Go ls AUTHORS CONTRIBUTORS PATENTS VERSION bin favicon.ico misc robots.txt test CONTRIBUTING.md LICENSE README.md api doc lib pkg src 1.2 GOPATH $GOPATH is the Go workspace directory, used to hold code, third-party libraries, compiled intermediate files, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Getting Started</category><category>Environment Variables</category><category>Development Environment</category><category>R&amp;D</category></item><item><title>Domain Output Is the Core Competitiveness of PaaS</title><link>https://www.chenshaowen.com/en/blog/domain-knowledge-is-the-key-of-paas.html</link><pubDate>Sat, 12 Jan 2019 00:00:00 +0000</pubDate><atom:modified>Sat, 12 Jan 2019 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/domain-knowledge-is-the-key-of-paas.html</guid><description>1. What I Am Thinking About At a big company, you get more opportunities to learn about industry trends and take part in industry change.
A large platform does not run on the strength of one person or a few people. If it really could, it would not deserve to be called a large platform.</description><dc:creator>WeChat Official Account</dc:creator><category>PaaS</category><category>Thoughts</category><category>Operations</category><category>Platform</category><category>Management</category></item><item><title>Getting Started with Pytest</title><link>https://www.chenshaowen.com/en/blog/101-of-pytest.html</link><pubDate>Sat, 29 Dec 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 29 Dec 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-of-pytest.html</guid><description>The Pytest framework is simple to use, rich in plugins, and powerful, and it is widely used for Python automated testing. This article introduces some basic concepts and usage of Pytest. 1. How It Runs Step one, Pytest reads its configuration from the command line or a file. Step two,</description><dc:creator>WeChat Official Account</dc:creator><category>Testing</category><category>Python</category><category>Pytest</category><category>R&amp;D</category><category>Learning</category><category>Automated Testing</category><category>Unit Testing</category><category>Best Practices</category></item><item><title>How to Build an Automated Deployment Pipeline for Django with Jenkins, Docker, and GitLab</title><link>https://www.chenshaowen.com/en/blog/how-to-use-jenkins-docker-gitlab-to-build-django-automated-deployment-process.html</link><pubDate>Sun, 25 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 25 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-jenkins-docker-gitlab-to-build-django-automated-deployment-process.html</guid><description>One of the illusions that programmers at big companies easily fall into is mistaking platform capabilities for their own abilities. In a large team, we should not focus only on our own little patch of ground; we need to understand every part of the platform. On one hand, this helps us make better use of the platform&amp;rsquo;s features; on the other, it helps our own technical growth.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>GitLab</category><category>Jenkins</category><category>Docker</category><category>DevOps</category><category>CICD</category><category>R&amp;D</category><category>Operations</category></item><item><title>Docker Operations Practices</title><link>https://www.chenshaowen.com/en/blog/docker-operations-practices.html</link><pubDate>Sat, 24 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 24 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/docker-operations-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, a roundup of common problems and solutions in Docker usage and operations. 1. Basic Docker Machine Commands Create the my-vm-name virtual machine 1 docker-machine create --driver virtualbox my-vm-name List all docker-machine instances 1 2 3 4 docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Operations</category><category>R&amp;D</category><category>Containers</category></item><item><title>API of Serializer and ViewSet in restframework</title><link>https://www.chenshaowen.com/en/blog/api-of-viewset-and-serializer-in-rest-framework.html</link><pubDate>Tue, 20 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 20 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/api-of-viewset-and-serializer-in-rest-framework.html</guid><description>1. Serializer 1.1 Data Validation When deserializing data, the validity of the data needs to be checked. At this point you can call is_valid() for validation, and if a validation error occurs, you can get the error message from the .errors attribute. For example:
1 2 3 4 serializer.is_valid() # False serializer.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>API</category><category>Interface</category><category>R&amp;D</category></item><item><title>ViewSet and Serializer in restframework</title><link>https://www.chenshaowen.com/en/blog/viewset-and-serializer-in-rest-framework.html</link><pubDate>Sun, 18 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 18 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/viewset-and-serializer-in-rest-framework.html</guid><description>1. View Class in Django First, recall how Django handles a request. After receiving a request, Django creates a handler of type WSGIHandler, and the handler controls the entire processing flow.
So how are the request URL and the View associated with each other?
Django first loads the URLconf according to the ROOT_URLCONF setting, then matches the URLpatterns in the URLconf one by one in order, stopping as soon as a match is found.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>API</category><category>Framework</category><category>Interface</category><category>R&amp;D</category></item><item><title>Django Full-Stack Optimization Guide</title><link>https://www.chenshaowen.com/en/blog/django-full-stack-optimization-guide.html</link><pubDate>Thu, 15 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 15 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-full-stack-optimization-guide.html</guid><description>As the data volume exploded, the system responded very slowly. We carried out a series of optimizations on the application, and the system&amp;rsquo;s response time improved by an order of magnitude. Overall, optimizations in file compression and faster network access gave a noticeable boost to frontend performance, while optimizations in stored procedures, caching, and logic code gave a noticeable boost to backend performance.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Optimization</category><category>Frontend</category><category>Backend</category><category>Guide</category><category>R&amp;D</category></item><item><title>How Enterprises Build ToB Products</title><link>https://www.chenshaowen.com/en/blog/how-to-build-tob-products.html</link><pubDate>Wed, 14 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 14 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-tob-products.html</guid><description>The team I work with is building a ToB product that has considerable influence in its vertical. This article is a review of key events for the team, and also contains some personal reflections.
1. Be the Best in a Familiar Setting On the internet there is far too much shoddy content, and products that win broad attention and influence are few and far between.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Community</category><category>ToB</category><category>Product</category><category>Teams</category><category>Management</category></item><item><title>CentOS Server Operations Practices</title><link>https://www.chenshaowen.com/en/blog/centos-server-operations-practices.html</link><pubDate>Sun, 11 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 11 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/centos-server-operations-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, collecting common problems and solutions in CentOS server operations.
1. Upgrading the Docker Version Uninstall the old version of Docker 1 2 3 4 5 6 $yum remove docker \ docker-common \ container-selinux \ docker-selinux \ docker-engine \ docker-engine-selinux Images, containers, data, and networks stored in /var/lib/docker/ are all preserved.</description><dc:creator>WeChat Official Account</dc:creator><category>CentOS</category><category>Linux</category><category>Operations</category><category>R&amp;D</category><category>Docker</category></item><item><title>Publishing Local Services to the Public Network with frp</title><link>https://www.chenshaowen.com/en/blog/using-frp-to-publish-local-service-to-public-network.html</link><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 07 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-frp-to-publish-local-service-to-public-network.html</guid><description>1. What frp Is frp is a high-performance reverse proxy application. It provides: Using a machine behind a private network or firewall to expose http or https services to the external network For http and https services, it supports domain-based virtual hosts and custom domain binding, so multiple domains can</description><dc:creator>WeChat Official Account</dc:creator><category>frp</category><category>FRP</category><category>NAT Traversal</category><category>Tools</category><category>Operations</category></item><item><title>Development Tools and Productivity Tips</title><link>https://www.chenshaowen.com/en/blog/development-tools-and-productivity-tips.html</link><pubDate>Fri, 02 Nov 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 02 Nov 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/development-tools-and-productivity-tips.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, collecting common development tools and productivity-related techniques. 1. The Babel Transpiler ES6 provides many new features, but not every browser supports them perfectly, while ES5 support is far better. Babel is an ES6 transpiler that converts ES6 code into ES5 code. This means you</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>R&amp;D</category><category>Productivity</category><category>VSCode</category><category>Learning</category></item><item><title>Troubleshooting and Resolving Celery Failures on Large Files</title><link>https://www.chenshaowen.com/en/blog/solving-the-problem-of-celery-processe-large-file-failure.html</link><pubDate>Wed, 24 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 24 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/solving-the-problem-of-celery-processe-large-file-failure.html</guid><description>1. A Small Requirement We run into small requirements all the time, but they are not always simple to implement. Here is a simple file upload requirement, broken into the following steps: The user uploads a large file on the page The large file is temporarily stored in the internal</description><dc:creator>WeChat Official Account</dc:creator><category>Celery</category><category>Python</category><category>Django</category><category>Failure</category><category>Troubleshooting</category><category>Large Files</category><category>R&amp;D</category></item><item><title>A Few Things to Do After Installing CentOS</title><link>https://www.chenshaowen.com/en/blog/after-install-centos.html</link><pubDate>Sun, 21 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 21 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/after-install-centos.html</guid><description>1. Replacing the Repository Mirror First, back up the official repository.
1 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup Download the new repository to /etc/yum.repos.d/
CentOS 5
1 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo CentOS 6
1 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo CentOS 7
1 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo Generate the metadata cache.
1 yum makecache 2. Accessing NTFS File Systems The Linux kernel currently only supports reading Microsoft&amp;rsquo;s NTFS file system.</description><dc:creator>WeChat Official Account</dc:creator><category>Tips</category><category>CentOS</category><category>Linux</category><category>Operations</category><category>Learning</category><category>Initialization</category><category>Configuration</category></item><item><title>Writing Python2 and Python3 Compatible Code</title><link>https://www.chenshaowen.com/en/blog/writing-python2-python3-compatible-code.html</link><pubDate>Sat, 20 Oct 2018 14:51:47 +0000</pubDate><atom:modified>Sat, 20 Oct 2018 14:51:47 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/writing-python2-python3-compatible-code.html</guid><description>Python2 to Python3 is a major version update. Today, a large number of projects in production still run on Python2. But that does not mean those projects will stay on Python2 forever — developers also need to consider the project&amp;rsquo;s compatibility with Python3, both to make migration easier and as</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Compatibility</category><category>R&amp;D</category><category>Learning</category><category>Migration</category></item><item><title>Git and Development Environment Setup</title><link>https://www.chenshaowen.com/en/blog/git-and-development-environment-setup.html</link><pubDate>Fri, 19 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 19 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/git-and-development-environment-setup.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, gathering practices around Git collaboration and development environment setup. 1. warning: LF will be replaced by CRLF Windows, Linux, and Mac are inconsistent in how they mark line endings in files. Windows uses CRLF as the terminator, while Linux and Mac use LF. Git</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>Python</category><category>Windows</category><category>R&amp;D</category><category>Environment</category></item><item><title>Python and Django Development Practices</title><link>https://www.chenshaowen.com/en/blog/python-and-django-development-practices.html</link><pubDate>Fri, 19 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 19 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python-and-django-development-practices.html</guid><description>Compiled from the &amp;ldquo;Development Tips&amp;rdquo; series, collecting common problems and solutions in Python and Django development. 1. Sorting Python Iterables Iterable objects fall into 3 main categories: All sequence types, such as list, str, and tuple Some non-sequence types, such as dict and file Objects that contain an __iter__() or</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Django</category><category>R&amp;D</category><category>Learning</category><category>Backend</category></item><item><title>How to Decouple Modules with Django Signal</title><link>https://www.chenshaowen.com/en/blog/how-to-use-django-signal-decoupling-module.html</link><pubDate>Fri, 12 Oct 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 12 Oct 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-django-signal-decoupling-module.html</guid><description>Recently I was responsible for developing a backend-heavy application. The data flow in this application is complex, and the processing logic has piled up in a redundant mess. The project&amp;rsquo;s tech stack is Django + Vuejs. The frontend is bundled with Webpack, managed in modules, and mainly displays data. The backend involves many modules, many processing rules, and many data tables, so every time I had to modify an earlier feature I spent a lot of time reviewing the code.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Design</category><category>Decoupling</category><category>R&amp;D</category></item><item><title>Enabling Kubernetes Monitoring and Stress Testing</title><link>https://www.chenshaowen.com/en/blog/open-k8s-monitoring-and-stress-testing..html</link><pubDate>Mon, 24 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 24 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/open-k8s-monitoring-and-stress-testing..html</guid><description>1. Kubectl Basic Commands 1.1 Creating Objects 1 2 3 4 5 6 7 8 # Create resources; a remote URL also works kubectl create -f ./my.yaml # Create resources from multiple files kubectl create -f ./my1.yaml -f ./my2.yaml # Create resources using all manifest files in a directory kubectl create -f .</description><dc:creator>WeChat Official Account</dc:creator><category>Kubernetes</category><category>Testing</category><category>Monitoring</category><category>Operations</category><category>Learning</category><category>kubectl</category><category>Stress Testing</category><category>Observability</category></item><item><title>Learning Kubernetes with MiniKube on Windows 7</title><link>https://www.chenshaowen.com/en/blog/how-to-use-minikube-under-windows7.html</link><pubDate>Sun, 23 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 23 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-minikube-under-windows7.html</guid><description>1. Basic Concepts 1.1 Kubernetes Kubernetes (K8s for short), the successor to Google&amp;rsquo;s Borg, is an open-source system for automatically deploying, scaling, and managing containerized applications.
The features it provides:
Automated deployment of containers Automated scaling up and down Automated application/service upgrades Grouping containers to serve traffic externally, with load balancing support Health checks for services, with automatic restarts 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Kubernetes</category><category>Windows</category><category>MiniKube</category><category>Learning</category><category>Operations</category></item><item><title>Problems Using Docker on Windows 7</title><link>https://www.chenshaowen.com/en/blog/some-tips-under-windows7-using-docker.html</link><pubDate>Fri, 21 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 21 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-tips-under-windows7-using-docker.html</guid><description>1. Customizing the docker-machine Location When using Docker on Windows 7, docker-machine is stored by default in the C:\users\your name\.docker\machine\machines directory.
To avoid taking up storage space on the system drive, you can change this as follows.
If you have not created a virtual machine yet, you can specify the location by setting the MACHINE_STORAGE_PATH environment variable.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Windows</category><category>Troubleshooting</category><category>Operations</category></item><item><title>SELinux and iptables</title><link>https://www.chenshaowen.com/en/blog/selinux-and-iptables-on-linux.html</link><pubDate>Fri, 21 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 21 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/selinux-and-iptables-on-linux.html</guid><description>While working on servers recently, I ran into a few concepts I wasn&amp;rsquo;t clear about, so I looked up some references and organized them as follows. 1. The BLP Security Model The model divides the entities in an information system into two parts: Subject: the entity performing the operations, such</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>Linux</category><category>iptables</category><category>SELinux</category><category>Operations</category></item><item><title>Flask Learning (1) - Introduction</title><link>https://www.chenshaowen.com/en/blog/learning-flask-1.html</link><pubDate>Thu, 20 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 20 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/learning-flask-1.html</guid><description>1. Introduction Flask was born in 2010 and is a lightweight Web application framework written in Python.
Flask depends on two libraries.
Jinja2, a template engine similar to mako Werkzeug, a Python library that follows the WSGI protocol and implements much of what sits underneath a Web framework, such as the request and response objects.</description><dc:creator>WeChat Official Account</dc:creator><category>Flask</category><category>Web</category><category>Python</category><category>Backend</category><category>Learning</category></item><item><title>How to Package a Robot Framework Docker Image</title><link>https://www.chenshaowen.com/en/blog/how-to-package-a-docker-image-of-robot-framework.html</link><pubDate>Tue, 18 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 18 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-a-docker-image-of-robot-framework.html</guid><description>To make it easier for CI to integrate UI automation tests, the Robot Framework runtime needs to be packaged as a Docker image. This post covers the configuration and scripts involved in the packaging process. 1. Packaging Directory Structure 1 2 3 4 5 6 tree . ├──</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>RobotFramework</category><category>Python</category><category>Testing</category><category>CICD</category><category>Operations</category></item><item><title>How to Use a CDN for Further Frontend/Backend Separation - CI Scripts</title><link>https://www.chenshaowen.com/en/blog/ci-script-of-how-to-use-cdn-to-separate-frontend-and-backend-more.html</link><pubDate>Sat, 15 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 15 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ci-script-of-how-to-use-cdn-to-separate-frontend-and-backend-more.html</guid><description>In a team, any change to the development workflow must be paired with the corresponding automation tooling. Without a low enough cost of use, the change is meaningless, because nobody will actually use it. In the previous post we covered how to use a CDN for further frontend/backend separation; this</description><dc:creator>WeChat Official Account</dc:creator><category>CI</category><category>CDN</category><category>Optimization</category><category>Deployment</category><category>PaaS</category><category>Scripting</category><category>DevOps</category><category>R&amp;D</category></item><item><title>How to Use a CDN to Further Separate Frontend and Backend</title><link>https://www.chenshaowen.com/en/blog/how-to-use-cdn-to-separate-frontend-and-backend-more.html</link><pubDate>Thu, 13 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 13 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-cdn-to-separate-frontend-and-backend-more.html</guid><description>I have been optimizing a project recently. After mapping out the whole chain, I started improving it step by step and found many points that could be improved. What follows are some thoughts on the development model and the deployment approach. I hope they give you some inspiration.
1. Development Background 1.</description><dc:creator>WeChat Official Account</dc:creator><category>CI</category><category>CDN</category><category>Optimization</category><category>Deployment</category><category>PaaS</category><category>Frontend</category><category>Backend</category><category>R&amp;D</category></item><item><title>Some Installation Problems with Node.js</title><link>https://www.chenshaowen.com/en/blog/some-installation-problems-about-nodejs.html</link><pubDate>Mon, 10 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 10 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-installation-problems-about-nodejs.html</guid><description>1. Installing node-sass When installing node-sass, the node scripts/install stage downloads a .node file from github.com, and network problems often cause this to fail.
You can add an .npmrc file inside the project to configure a proxy for the installation:
1 2 sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ registry=https://registry.npm.taobao.org Or install with cnpm:
1 2 npm install -g cnpm --registry=https://registry.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Webpack</category><category>Nodejs</category><category>R&amp;D</category><category>Environment</category></item><item><title>Installing the Python3 and Go Kernels in Jupyter</title><link>https://www.chenshaowen.com/en/blog/install-python3-and-go-kernel-in-jupyter.html</link><pubDate>Sun, 09 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 09 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/install-python3-and-go-kernel-in-jupyter.html</guid><description>Earlier we mentioned that Jupyter Notebook is an interactive notebook that supports running more than 40 programming languages and is very well suited to teaching. Recently, while learning the Go language, I thought of Jupyter. This article mainly describes how to install the Python3 and Go kernels inside Jupyter. 1.</description><dc:creator>WeChat Official Account</dc:creator><category>Jupyter</category><category>Go</category><category>Python3</category><category>Learning</category><category>R&amp;D</category></item><item><title>Interesting Games</title><link>https://www.chenshaowen.com/en/blog/interesting-games.html</link><pubDate>Tue, 04 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 04 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/interesting-games.html</guid><description>Fruit Ninja Newton&amp;rsquo;s Cradle Talking Tom</description><dc:creator>WeChat Official Account</dc:creator><category>Demo</category><category>Games</category><category>Frontend</category><category>JavaScript</category><category>Entertainment</category></item><item><title>Monthly Share, Issue 1</title><link>https://www.chenshaowen.com/en/blog/month-share-1.html</link><pubDate>Sat, 01 Sep 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 01 Sep 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/month-share-1.html</guid><description>Sharing with you some of the tech news I have been following over the past month. There is also some interesting content here too: tools, learning resources, tips, and more. Frontend Webpack Back in February this year, Webpack had already released version 4.0.0. Webpack 4 no longer supports Node.js 4,</description><dc:creator>WeChat Official Account</dc:creator><category>Monthly Share</category><category>Tech News</category><category>Sharing</category><category>R&amp;D</category></item><item><title>Hacking Growth</title><link>https://www.chenshaowen.com/en/blog/book/growth-hacker.html</link><pubDate>Tue, 21 Aug 2018 08:47:38 +0000</pubDate><atom:modified>Tue, 21 Aug 2018 08:47:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/growth-hacker.html</guid><description>Author: Fan Bing
Subtitle: A Secret Playbook for User and Revenue Growth in Startups
Publication year: 2015-7
ISBN: 9787121263606
Notes:
This is a fairly marketing-oriented book aimed at ToC internet products.
Through all kinds of real cases, it shows you the playbook of internet products: how to create a product, acquire users, spark activity, improve retention, increase revenue, and spread virally.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Users</category><category>Growth</category></item><item><title>Using CloudReady to Make a Chrome OS Installation Boot Disk</title><link>https://www.chenshaowen.com/en/blog/how-to-use-cloudready-make-chrome-os-boot-disk.html</link><pubDate>Sat, 18 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 18 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-cloudready-make-chrome-os-boot-disk.html</guid><description>1. Download the Image File Click here, and from the CloudReady website download the DOWNLOAD 64-BIT or DOWNLOAD 32-BIT image. After extracting it, you get a cloudready-free-xxx-bit.bin file.
2. Install the Chromebook Recovery Utility First install the Chrome browser, then open this page and install the Chromebook Recovery Utility.
3. Create the Image Step one, open the Chromebook Recovery Utility.</description><dc:creator>WeChat Official Account</dc:creator><category>ChromeOS</category><category>CloudReady</category><category>Systems</category><category>Operations</category><category>Learning</category><category>Hardware</category><category>Boot Disk</category></item><item><title>Robot Framework Advanced (2)</title><link>https://www.chenshaowen.com/en/blog/senior-of-robot-framework-2.html</link><pubDate>Thu, 16 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 16 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/senior-of-robot-framework-2.html</guid><description>Settings Table The settings table in Robot Framework mainly serves two purposes. For a detailed explanation, see here. Import test, resource, and variable files. Define metadata. In the Setting table: 1 2 3 4 5 Library 引入库 Resource 引入资源文件 Variables 引入变</description><dc:creator>WeChat Official Account</dc:creator><category>RobotFramework</category><category>Python</category><category>Testing</category><category>Automation</category><category>DevOps</category></item><item><title>Robot Framework Common Libraries</title><link>https://www.chenshaowen.com/en/blog/robot-framework-common-library.html</link><pubDate>Thu, 16 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 16 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/robot-framework-common-library.html</guid><description>1. Standard Libraries The libraries that Robot Framework can import and use directly, found in the directory python\Lib\site-packages\robot\libraries. For details, see the documentation.
Builtin, contains the keywords that are needed most often. It is imported automatically without an import, so it is always available.
Dialogs, provides ways to pause test execution and to take input from the user.</description><dc:creator>WeChat Official Account</dc:creator><category>Testing</category><category>Automation</category><category>DevOps</category><category>RobotFramework</category><category>R&amp;D</category><category>Learning</category></item><item><title>Robot Framework Advanced (1)</title><link>https://www.chenshaowen.com/en/blog/senior-of-robot-framework-1.html</link><pubDate>Wed, 15 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 15 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/senior-of-robot-framework-1.html</guid><description>pybot Command Run all test cases 1 pybot . Run a certain test suite 1 pybot testsuite.txt Run a test case in a certain test suite 1 pybot --test case_name testsuit.txt Output the test results to a fixed path 1 pybot --ouputdir your_ouput_dir testsuit.txt Run test cases that contain a</description><dc:creator>WeChat Official Account</dc:creator><category>RobotFramework</category><category>Python</category><category>Testing</category><category>Automation</category><category>DevOps</category></item><item><title>The Right Way to Use Vim on Windows</title><link>https://www.chenshaowen.com/en/blog/correct-way-to-use-vim-on-windows.html</link><pubDate>Sun, 12 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 12 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/correct-way-to-use-vim-on-windows.html</guid><description>I had used Cygwin before, and Git Bash too. But neither of them works well with Vim, so I finally settled on MSYS2 as my console. 1. Comparing Cygwin, MinGW, and MSYS2 On Windows, the key to using Vim is finding a suitable console. When installing Vim plugins, a suitable</description><dc:creator>WeChat Official Account</dc:creator><category>Vim</category><category>Tools</category><category>Windows</category><category>Development</category></item><item><title>Essential Vim Plugins</title><link>https://www.chenshaowen.com/en/blog/vim-necessary-plugin.html</link><pubDate>Tue, 07 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 07 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/vim-necessary-plugin.html</guid><description>1. nerdtree — Generate a File Tree 1 2 &amp;#34; 文件目录树 Plugin &amp;#39;scrooloose/nerdtree&amp;#39; 1 2 3 4 5 6 7 8 9 10 11 12 13 &amp;#34;===================================================== &amp;#34;&amp;#34; NERDTree 配置 &amp;#34;===================================================== let NERDTreeChDirMode=1 &amp;#34;显示书签&amp;#3</description><dc:creator>WeChat Official Account</dc:creator><category>Vim</category><category>Plugin</category><category>Tools</category><category>Development</category><category>R&amp;D</category><category>Learning</category><category>Editor</category><category>Efficiency</category></item><item><title>Installing and Configuring Vim on Windows</title><link>https://www.chenshaowen.com/en/blog/vim-installation-and-configuration-on-windows-os.html</link><pubDate>Mon, 06 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 06 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/vim-installation-and-configuration-on-windows-os.html</guid><description>1. Introduction to Vim Vim is an editor that evolved from vi; its first version was released by Bram Moolenaar in 1991. The original name was Vi IMitation, and as features accumulated it was officially renamed Vi IMproved. The image above shows the learning curves of common editors. For most</description><dc:creator>WeChat Official Account</dc:creator><category>Vim</category><category>Tools</category><category>Windows</category><category>R&amp;D</category></item><item><title>How to Create GitLab Labels Automatically with python-gitlab</title><link>https://www.chenshaowen.com/en/blog/how-to-create-gitlab-label-using-python-gitlab.html</link><pubDate>Sun, 05 Aug 2018 10:00:00 +0000</pubDate><atom:modified>Sun, 05 Aug 2018 10:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-create-gitlab-label-using-python-gitlab.html</guid><description>Using GitLab issues for project management is a very Dev-friendly thing. Entering issues, opening Merge Requests, creating milestones — these all advance dynamically during development. But creating a pile of Labels for every new project is a headache. This article is mainly about solving that problem. 1. GitLab Label Before</description><dc:creator>WeChat Official Account</dc:creator><category>GitLab</category><category>Python</category><category>Project Management</category><category>DevOps</category><category>R&amp;D</category></item><item><title>Jenkins Integrated Robot Framework Automated Testing</title><link>https://www.chenshaowen.com/en/blog/jenkins-integrated-robot-framework-testing.html</link><pubDate>Sun, 05 Aug 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 05 Aug 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jenkins-integrated-robot-framework-testing.html</guid><description>1. Installing a Headless Browser 1.1 Installing PhantomJS on CentOS Download and extract Visit Phantomjs, find the download link for Download phantomjs-2.1.1-linux-x86_64.tar.bz2, and copy it. Run the following commands on CentOS: 1 2 3 4 5 wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 # 如果没有安装 bzip2 可能会报</description><dc:creator>WeChat Official Account</dc:creator><category>RobotFramework</category><category>Automation</category><category>Continuous Integration</category><category>Testing</category><category>DevOps</category><category>Jenkins</category><category>R&amp;D</category></item><item><title>How to Configure an HHKB Keyboard</title><link>https://www.chenshaowen.com/en/blog/how-to-configure-the-hhkb-keyboard.html</link><pubDate>Sat, 28 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 28 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-configure-the-hhkb-keyboard.html</guid><description>1. About Keyboard Types There are mainly three types of keyboards:
Mechanical keyboard Every key on a mechanical keyboard has its own separate switch, also called a &amp;ldquo;switch&amp;rdquo; (axis). Classified by the micro switch type, mechanical keyboards are divided into brown, blue, white, black, and red switches. Mechanical keyboards feel comfortable to type on, but they are on the expensive side.</description><dc:creator>WeChat Official Account</dc:creator><category>Peripherals</category><category>Keyboard</category><category>Tools</category><category>Life</category></item><item><title>Without a Tag, No One Can Recall You</title><link>https://www.chenshaowen.com/en/blog/no-tag-no-chance.html</link><pubDate>Thu, 26 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 26 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/no-tag-no-chance.html</guid><description>1. Everyone Is Equal Before the Machine Every day we take in a huge amount of digital information, but very little of it actually helps us. Most of it is like junk food: it provides no nourishment, yet it takes up capacity, leaving you unable to dig into the truth and form your own thinking and judgment.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Influence</category><category>Growth</category><category>Personal Brand</category></item><item><title>Robot Framework Basics</title><link>https://www.chenshaowen.com/en/blog/basic-of-robot-framework.html</link><pubDate>Tue, 24 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 24 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basic-of-robot-framework.html</guid><description>This post mainly introduces some basic concepts of Robot Framework and how to write a test case. 1. Basic Elements 1.1 Keywords Robot Framework keywords are similar to functions. They are divided into system keywords and user-defined keywords. System keywords, imported by loading a Library User keywords, imported by loading</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Testing</category><category>RobotFramework</category><category>DevOps</category><category>Learning</category><category>Automated Testing</category><category>R&amp;D</category><category>CICD</category></item><item><title>Installing Robot Framework IDE (RIDE)</title><link>https://www.chenshaowen.com/en/blog/how-to-install-robot-framework-ide-on-windows.html</link><pubDate>Sat, 21 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 21 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-install-robot-framework-ide-on-windows.html</guid><description>1. Introduction 1.1 Robot Framework Robot Framework is an automated functional testing framework written in Python. It is highly extensible and supports keyword-driven testing It can test several types of clients or interfaces at the same time It can run distributed tests It is mainly used for acceptance testing with</description><dc:creator>WeChat Official Account</dc:creator><category>RobotFramework</category><category>Testing</category><category>Python</category><category>RIDE</category><category>Automation</category><category>R&amp;D</category></item><item><title>Some Common CI Scripts</title><link>https://www.chenshaowen.com/en/blog/some-common-scripts-in-ci.html</link><pubDate>Tue, 17 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 17 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/some-common-scripts-in-ci.html</guid><description>Because I am responsible for the team&amp;rsquo;s shared CI matters, I often need to configure CI pipelines or help others solve problems, so I put together the CI scripts I use most often for easy reference. 1. Structure of .gitlab-ci.yml Below is the structure of a GitLab CI configuration file.</description><dc:creator>WeChat Official Account</dc:creator><category>GitLab</category><category>GitLab-CI</category><category>CI</category><category>DevOps</category><category>Continuous Integration</category><category>R&amp;D</category></item><item><title>Love and Math</title><link>https://www.chenshaowen.com/en/blog/book/love-and-math.html</link><pubDate>Sun, 15 Jul 2018 08:47:38 +0000</pubDate><atom:modified>Sun, 15 Jul 2018 08:47:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/love-and-math.html</guid><description>Author: Edward Frenkel (USA)
Original title: Love and Math: The Heart of Hidden Reality
Publication year: 2016-3
ISBN: 9787508658070
Notes:
I finished this book on the high-speed train during a round trip. It is a fairly light, autobiographical kind of mathematics book. It mainly follows the timeline of the author&amp;rsquo;s schooling, and tells the story of how a boy interested in physics, step by step and through unremitting effort, became a world-class mathematician.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Math</category></item><item><title>The h Function in Vue</title><link>https://www.chenshaowen.com/en/blog/h-function-in-vue.html</link><pubDate>Sun, 08 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 08 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/h-function-in-vue.html</guid><description>1. The createElement Method The common DOM operations in HTML are modifying DOM nodes and accessing DOM nodes. Beyond those, the W3C has also published technical standards for creating and deleting DOM nodes. The createElement method is used to create a DOM node. createElement() usually needs to be used together</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Vue</category><category>Functions</category><category>R&amp;D</category></item><item><title>How to Ask a Good Question</title><link>https://www.chenshaowen.com/en/blog/how-to-raise-a-good-question.html</link><pubDate>Sat, 07 Jul 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 07 Jul 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-raise-a-good-question.html</guid><description>1. Motivation for Asking Questions There are two kinds of motivation for asking questions: passive and active.
2 Passive Passive questioning is the forced action you take when you run into a problem, search for a solution, and come up empty.
2.1 Try to Solve It Yourself When you hit a problem, do not rush to ask others.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Questions</category><category>Communication</category><category>Learning</category><category>Growth</category></item><item><title>How to Safely Access request from Anywhere in Django</title><link>https://www.chenshaowen.com/en/blog/how-to-secure-get-request-in-django.html</link><pubDate>Tue, 26 Jun 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 26 Jun 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-secure-get-request-in-django.html</guid><description>In Django, request holds all the information for a single request. Backend processing logic frequently needs information from request. For example, the DRF framework may want to be able to obtain request at any time, or pass some parameters globally. There are third-party Django apps with tools that can satisfy</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>R&amp;D</category><category>Tips</category><category>Learning</category><category>DRF</category><category>Thread Safety</category></item><item><title>Using axios in Vue</title><link>https://www.chenshaowen.com/en/blog/using-axios-in-vue.html</link><pubDate>Mon, 25 Jun 2018 15:00:00 +0000</pubDate><atom:modified>Mon, 25 Jun 2018 15:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-axios-in-vue.html</guid><description>1. Installing axios Install with npm 1 npm install axios --save There are two ways to register it globally: Bind it to the prototype 1 2 import axios from &amp;#34;axios&amp;#34;; Vue.prototype.axios = axios; With this approach, every Vue object gets a new axios object. 1 2 3 this.axios.post(apiUrl).then((res) =&amp;gt; {</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Interface</category><category>API</category><category>Vuejs</category><category>Axios</category><category>R&amp;D</category></item><item><title>How to Ensure Concurrent Data Consistency in Django</title><link>https://www.chenshaowen.com/en/blog/how-to-ensure-concurrence-of-data-in-django.html</link><pubDate>Mon, 25 Jun 2018 12:00:00 +0000</pubDate><atom:modified>Mon, 25 Jun 2018 12:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-ensure-concurrence-of-data-in-django.html</guid><description>The first part mainly covers optimistic and pessimistic locking. Locking guarantees data consistency under concurrency at the database level. Understanding locks helps you understand concurrency solutions. The second part mainly covers how to guarantee data consistency in concurrent scenarios within Django. 1. About Locks 1.1 Optimistic Locking The starting point</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Concurrency</category><category>Database</category><category>R&amp;D</category></item><item><title>Using utf8mb4 in Django to Support Emoji</title><link>https://www.chenshaowen.com/en/blog/using-utf8mb4-in-django-to-support-emoji-expression.html</link><pubDate>Mon, 25 Jun 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 25 Jun 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-utf8mb4-in-django-to-support-emoji-expression.html</guid><description>1. What Is utf8 In theory, utf8 uses 1-6 characters,
In practice, the latest utf8 specification uses only one to four bytes, and can encode at most 21 bits, which is exactly enough to represent all 17 Unicode planes.
2. What Is utf8mb4 utf8mb4 is a superset of utf8. In theory, if you were using utf8 before and then change the charset to utf8mb4, it will not cause any problem when reading the existing utf8-encoded data.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Database</category><category>Charset</category><category>Encoding</category><category>R&amp;D</category></item><item><title>Common NPM Commands</title><link>https://www.chenshaowen.com/en/blog/common-commands-list-of-npm.html</link><pubDate>Sun, 24 Jun 2018 22:00:00 +0000</pubDate><atom:modified>Sun, 24 Jun 2018 22:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-commands-list-of-npm.html</guid><description>** By default, a command operates on the current directory environment. Adding the -g flag makes it apply globally instead.**
Upgrade npm 1 npm install npm -g Show the current version 1 npm -v Show the npm registry configuration 1 npm config get registry Change the npm registry 1 2 npm config set registry http://registry.</description><dc:creator>WeChat Official Account</dc:creator><category>Commands</category><category>Frontend</category><category>NPM</category><category>Node.js</category><category>R&amp;D</category><category>Learning</category></item><item><title>Strategic Thinking and Expression Study Notes</title><link>https://www.chenshaowen.com/en/blog/note-of-strategic-thinking-and-expression.html</link><pubDate>Sun, 24 Jun 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 24 Jun 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/note-of-strategic-thinking-and-expression.html</guid><description>This mainly records analysis methods.
1. Strategic Analysis McKinsey&amp;rsquo;s Seven-Step Problem-Solving Method
State the problem Analyze the problem Prioritize Lay out a detailed work plan Perform key analyses Synthesize results and build a structured conclusion Tell the story 2. Recognizing the Problem Most problems are a failure to recognize the problem — unknown unknowns.</description><dc:creator>WeChat Official Account</dc:creator><category>Notes</category><category>Expression</category><category>Thoughts</category><category>Learning</category><category>Management</category><category>Methods</category></item><item><title>Configuring the GitLab CI Runner</title><link>https://www.chenshaowen.com/en/blog/gitlab-ci-configuring-runner.html</link><pubDate>Tue, 08 May 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 08 May 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/gitlab-ci-configuring-runner.html</guid><description>1. Downloading and Configuring the Runner 1.1 Downloading the Runner The GitLab CI Runner is a program package written in Go; you can download it from the official site to your local machine.
1 2 yum install -y wget wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 Add execute permission
1 chmod +x /usr/local/bin/gitlab-runner 1.</description><dc:creator>WeChat Official Account</dc:creator><category>GitLab</category><category>GitLab-CI</category><category>CI</category><category>Runner</category><category>DevOps</category><category>Operations</category></item><item><title>How to Synchronize and Back Up a Git Repository</title><link>https://www.chenshaowen.com/en/blog/how-to-synchronize-the-backup-of-git-repository.html</link><pubDate>Thu, 19 Apr 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 19 Apr 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-synchronize-the-backup-of-git-repository.html</guid><description>Because the Git repository currently in use is about to become unavailable, the repository code needs to be migrated to a new Git repository. The specific procedure is as follows:
Log in to the new repository and create a repository. After creation, the new repository address is: http://gitlab.your-new-domain.com/project.git
Clone the old repository as a mirror locally: 1 2 3 git clone --mirror http://gitlab.</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>Backup</category><category>Migration</category><category>R&amp;D</category><category>Operations</category></item><item><title>Nginx Configuration Problem Record</title><link>https://www.chenshaowen.com/en/blog/nginx-configuration-problem-record.html</link><pubDate>Wed, 18 Apr 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 18 Apr 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nginx-configuration-problem-record.html</guid><description>1. server_name Has No Effect Symptom: Nginx reverse-proxies two applications, and the configuration details are as follows. It turned out that requests to b.chenshaowen.com and a.chenshaowen.com both returned responses from service A. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 server</description><dc:creator>WeChat Official Account</dc:creator><category>Nginx</category><category>Configuration</category><category>Troubleshooting</category><category>Operations</category><category>Learning</category><category>Reverse Proxy</category><category>Best Practices</category><category>Web</category></item><item><title>An Introduction to Various Python Environment Isolation Tools</title><link>https://www.chenshaowen.com/en/blog/introduction-of-various-environmental-isolating-tools-under-python.html</link><pubDate>Tue, 17 Apr 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 17 Apr 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/introduction-of-various-environmental-isolating-tools-under-python.html</guid><description>1. Non-standard Library 1.1 virtualenv virtualenv is a very popular tool for creating isolated python libraries environments. I strongly recommend you learn about it, because it is very practical and widely used; many people use it to set up python development environments. The other tools below are mainly compared against virtualenv to illustrate the differences.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Tools</category><category>Environment</category><category>virtualenv</category><category>R&amp;D</category><category>Learning</category><category>pyenv</category><category>Conda</category></item><item><title>How to Use Docker to Develop Personal Projects</title><link>https://www.chenshaowen.com/en/blog/how-to-use-docker-to-help-individual-projects.html</link><pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate><atom:modified>Mon, 16 Apr 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-use-docker-to-help-individual-projects.html</guid><description>1. About Personal Projects Why emphasize that they are personal projects? Commercial projects have lengthy processes around code hosting, development, operations, and deployment. For an individual developer, such processes are too expensive and work against rapid project iteration. A personal project might be a Demo for learning. Building a Demo</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Git</category><category>R&amp;D</category><category>Operations</category><category>Learning</category><category>Best Practices</category><category>Personal Projects</category></item><item><title>A Git-Based Frontend and Backend Development Workflow</title><link>https://www.chenshaowen.com/en/blog/based-on-git-development-workflow-of-front-and-back.html</link><pubDate>Sat, 31 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 31 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/based-on-git-development-workflow-of-front-and-back.html</guid><description>Recently I took part in a project developed collaboratively by several people, and ran into quite a few problems along the way. For example: a frontend commit overwrote backend code, conflicts were left unresolved and turned into rework, someone committed to branch B, or committed straight to the Master branch.</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>Efficiency</category><category>Collaboration</category><category>CI</category><category>DevOps</category><category>R&amp;D</category></item><item><title>Common Commands in Django Development</title><link>https://www.chenshaowen.com/en/blog/common-commands-in-django-development.html</link><pubDate>Thu, 22 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 22 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-commands-in-django-development.html</guid><description>Creating a Django Project 1 django-admin startproject your_project_name Creating an App 1 2 3 django-admin.py startapp your_app_name # 或者 python manage.py startapp your_app_name python manage.py and django-admin do essentially the same thing. The difference is that python manage.py also sets the DJANGO_SETTINGS_MODULE environment variable and adds the project&amp;rsquo;s path</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Django</category><category>Commands</category><category>R&amp;D</category></item><item><title>Python2 Source Code Study: Dictionary and List Implementation</title><link>https://www.chenshaowen.com/en/blog/dictionary-and-list-structure-in-python2.html</link><pubDate>Mon, 12 Mar 2018 11:22:55 +0000</pubDate><atom:modified>Mon, 12 Mar 2018 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/dictionary-and-list-structure-in-python2.html</guid><description>1. Why Dictionary Lookups Are Faster Than List Lookups First, take a look at the following piece of code. 1 2 3 4 5 6 7 8 9 10 11 12 13 from time import time t = time() data = [chr(i) for i in range(97, 123)] # data =</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Source Code</category><category>Learning</category><category>R&amp;D</category></item><item><title>Python2 VS Python3</title><link>https://www.chenshaowen.com/en/blog/python2-vs-python3.html</link><pubDate>Fri, 09 Mar 2018 17:22:45 +0000</pubDate><atom:modified>Fri, 09 Mar 2018 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python2-vs-python3.html</guid><description>1. Differences Between Python 2 and 3 Feature \ Version Python 2 Python 3 print as a function print&amp;quot;abc&amp;quot; print(&amp;ldquo;abc&amp;rdquo;) Unified class Old-style and new-style classes New-style classes only Floating-point division 1/2=0 1/2=0.5 String formatting %, Format Format,% xrange replaces range xrange range long renamed to int Long,int Int Package imports Relative imports Absolute imports Source file encoding Ascii utf8 The official Python recommendation is strongly in favor of learning Python 3 directly, since Python 2 is only maintained through 2020.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Comparison</category><category>R&amp;D</category><category>Learning</category><category>Migration</category></item><item><title>Python 2 Source Code Study: Windows Compilation</title><link>https://www.chenshaowen.com/en/blog/compiling-python2-source-code-under-windows.html</link><pubDate>Fri, 09 Mar 2018 11:22:55 +0000</pubDate><atom:modified>Fri, 09 Mar 2018 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/compiling-python2-source-code-under-windows.html</guid><description>1. Compiler Preparation Prepare the Python source code From the official Python website, download the source code for the Python version you need to compile. The one chosen here is the latest Python 2 release, Python-2.7.14.tar.xz, click here to go there. Prepare a compiler On Windows, the project files built</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Source Code</category><category>Windows</category><category>Learning</category><category>Compilation</category><category>R&amp;D</category></item><item><title>Python2 Source Code Study: pyc</title><link>https://www.chenshaowen.com/en/blog/python2-source-of-pyc.html</link><pubDate>Fri, 09 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 09 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python2-source-of-pyc.html</guid><description>This article uses the Python 2.7.8 source code as an example.
1. Common File Formats in Python py file A Python source code file, which can be modified with a text editor.
pyc file The bytecode file generated after Python source code is compiled.
pyw file When a pyc file is executed, a console window appears; when a pyw file is executed, it does not.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Source Code</category><category>Compilation</category><category>Learning</category><category>R&amp;D</category></item><item><title>Notes on The Art of Readable Code</title><link>https://www.chenshaowen.com/en/blog/notes-on-the-art-of-writing-readable-code.html</link><pubDate>Thu, 08 Mar 2018 17:22:45 +0000</pubDate><atom:modified>Thu, 08 Mar 2018 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/notes-on-the-art-of-writing-readable-code.html</guid><description>1. About Names Choose professional words Avoid overly generic names Use concrete names instead of abstract ones Use prefixes or suffixes to attach more information to a name Decide how long a name should be Use the formatting of a name to express meaning 2. Packing Information into Names Generally speaking, adding words like is, has, can, or should makes a boolean value more explicit.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Conventions</category><category>R&amp;D</category><category>Code</category><category>Learning</category></item><item><title>PPT Making Guide: Course Notes on the Presentation Part</title><link>https://www.chenshaowen.com/en/blog/notes-on-making-strategy-of-the-presentation.html</link><pubDate>Tue, 06 Mar 2018 20:55:29 +0000</pubDate><atom:modified>Tue, 06 Mar 2018 20:55:29 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/notes-on-making-strategy-of-the-presentation.html</guid><description>1. Overview Course prerequisite: the logical structure and content of the PowerPoint have already been worked out and written. The course enhances the expressiveness of PowerPoint mainly through the following six parts: Color Text Shapes Charts Slide Master Animation 2. Color 2.1 Understanding Color Hue Chromatic colors, such as purple,</description><dc:creator>WeChat Official Account</dc:creator><category>PPT</category><category>Tools</category><category>Learning</category><category>Sharing</category></item><item><title>How to Build a PyPI Server with devpi</title><link>https://www.chenshaowen.com/en/blog/how-to-build-a-pypi-server-using-devpi.html</link><pubDate>Sun, 04 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 04 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-a-pypi-server-using-devpi.html</guid><description>When you install Python packages with pip, it looks up the corresponding package on the https://pypi.python.org/simple/ index by default, then downloads and installs it. But in an intranet environment, or when you need to publish some private packages to designated users, you have to build your own PyPI Server. This post mainly records the process of building a PyPI Server index with the devpi tool, along with some commonly used commands.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>devpi</category><category>Tools</category><category>Operations</category><category>Learning</category><category>PyPI</category><category>Private Index</category><category>Package Management</category><category>Intranet</category></item><item><title>Django Model and E-R Diagram</title><link>https://www.chenshaowen.com/en/blog/django-model-and-er-diagram.html</link><pubDate>Fri, 02 Mar 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 02 Mar 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-model-and-er-diagram.html</guid><description>As requirements are gradually confirmed, the system&amp;rsquo;s DB model is gradually confirmed as well. Sometimes you use a tool like MySQL Workbench to draw an E-R diagram and then generate MySQL database tables, and at that point you need to reverse-generate Django Models; other times you write the Django Models directly, but then you need to look at the E-R diagram.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Database</category><category>Design</category><category>Model</category><category>R&amp;D</category></item><item><title>Etcd, Confd, and Nginx Service Discovery</title><link>https://www.chenshaowen.com/en/blog/service-discovery-etcd-confd-nginx.html</link><pubDate>Thu, 08 Feb 2018 14:51:16 +0000</pubDate><atom:modified>Thu, 08 Feb 2018 14:51:16 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/service-discovery-etcd-confd-nginx.html</guid><description>This post mainly explains why the service discovery feature is needed and compares several service discovery tools. It also puts service discovery with Etcd, Confd, and Nginx into practice on CentOS. 1. Service Registration and Discovery 1.1 Why Service Registration and Discovery Are Needed With the rise of microservices, a</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Microservices</category><category>Etcd</category><category>Confd</category><category>Nginx</category><category>Service Discovery</category></item><item><title>Prometheus</title><link>https://www.chenshaowen.com/en/blog/monitor-about-prometheus.html</link><pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate><atom:modified>Wed, 07 Feb 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/monitor-about-prometheus.html</guid><description>Internet services often depend on tens of thousands of hosts, and those hosts are deployed all over the world, on top of a tangled mess of user environments. To keep a service stable and reliable, you need to monitor it. The goals of monitoring can be considered from several angles: from the system dimension, understand CPU, memory, and disk usage; from the network monitoring dimension, understand upstream and downstream rates; from the service monitoring dimension, understand the health and availability of the application.</description><dc:creator>WeChat Official Account</dc:creator><category>Prometheus</category><category>Grafana</category><category>Docker</category><category>Monitoring</category><category>Operations</category></item><item><title>ELK Log Search Practice</title><link>https://www.chenshaowen.com/en/blog/elk-log-search-practice.html</link><pubDate>Sat, 03 Feb 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 03 Feb 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/elk-log-search-practice.html</guid><description>This article gives a brief introduction to the ELK stack and provides a Docker compose orchestration configuration. After reading it, you can get ELK running locally with Docker. A later article will cover deploying ELK on servers and adding the related configuration.
1. Introduction to the ELK Stack ELK is not actually a single piece of software but a whole solution — an acronym formed from the initials of three software products: Elasticsearch, Logstash, and Kibana.</description><dc:creator>WeChat Official Account</dc:creator><category>ELK</category><category>Tools</category><category>Logging</category><category>Search</category><category>Elasticsearch</category><category>Operations</category></item><item><title>How to Do Code Review Better</title><link>https://www.chenshaowen.com/en/blog/how-to-do-codereview-better.html</link><pubDate>Tue, 30 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 30 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-do-codereview-better.html</guid><description>1. How to Do Code Review Better Requirement Items Requirements for the committer Small granularity
Atomicity
With comments
Tool checks Requirements for the reviewer First conventions
Second logic &amp;amp; performance
Third design Requirements for the team Reviewing the old to learn the new 2. Define a Code Review Checklist Requirement Items Naming Variable names</description><dc:creator>WeChat Official Account</dc:creator><category>Quality</category><category>Notes</category><category>R&amp;D</category><category>Teams</category><category>CodeReview</category><category>Learning</category><category>Best Practices</category></item><item><title>Django Development Conventions (Part 1)</title><link>https://www.chenshaowen.com/en/blog/development-specification-1-of-django.html</link><pubDate>Sat, 27 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Sat, 27 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/development-specification-1-of-django.html</guid><description>This article mainly lays out a few things to watch out for during Django development. A consistent coding style and sound design principles help a project&amp;rsquo;s development and maintenance, and are worth developers studying and discussing continuously. 1. Encoding Declaration When the Python interpreter executes code, it needs to be</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Conventions</category><category>R&amp;D</category><category>Learning</category><category>Best Practices</category><category>Code Style</category><category>Architecture</category></item><item><title>Common Frontend Component List</title><link>https://www.chenshaowen.com/en/blog/component-list-of-front-library.html</link><pubDate>Fri, 19 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Fri, 19 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/component-list-of-front-library.html</guid><description>toastr
Toast notification popups
artDialog
Dialog component
DataTables
A jQuery-based table plugin
KendoUI
A very complete UI framework, with many components
wangEditor
Web rich text editor
jstree
Web tree structure component
highcharts
echarts
D3js
Data charts
select2
Dropdown select
validate
jQuery-based form validation
Vuejs
Can be used for two-way data binding, and also for building single-page applications</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>JavaScript</category><category>Components</category><category>R&amp;D</category><category>Learning</category><category>Libraries</category></item><item><title>My Toolbox</title><link>https://www.chenshaowen.com/en/blog/toolbox.html</link><pubDate>Tue, 16 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Tue, 16 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/toolbox.html</guid><description>1. Documentation Pandoc Pandoc is a text conversion tool written in Haskell. It is fast and supports a wide range of formats, converting Markdown, LaTeX, and others into HTML, Docs, PDF, and more. All it takes is a simple command: 1 pandoc mypaper.md -o mypaper.docx Graphviz An open-source toolkit developed</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Efficiency</category><category>R&amp;D</category><category>Learning</category><category>Sharing</category></item><item><title>API Rate Limiting for Backend Services</title><link>https://www.chenshaowen.com/en/blog/rate-limiting-of-api.html</link><pubDate>Thu, 11 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Thu, 11 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/rate-limiting-of-api.html</guid><description>1. Flow Control Caching, degradation, and rate limiting are common methods for protecting high-concurrency systems. Caching trades space for time and cuts the time spent on CPU and network calls; degradation protects the high availability of core services by delaying or refusing to handle non-core requests during peak periods; rate</description><dc:creator>WeChat Official Account</dc:creator><category>API</category><category>Microservices</category><category>R&amp;D</category><category>Architecture</category><category>Rate Limiting</category></item><item><title>Getting Started with Go</title><link>https://www.chenshaowen.com/en/blog/101-of-go-language.html</link><pubDate>Sun, 07 Jan 2018 00:00:00 +0000</pubDate><atom:modified>Sun, 07 Jan 2018 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-of-go-language.html</guid><description>1. Background For the past decade or so, C/C++ has not developed well in the computing field and has not kept pace with the advance of computers.
With existing programming languages, development speed and system efficiency often cannot be had at the same time. Either execution is fast but development and compilation are inefficient, or execution is slow but compilation is efficient.</description><dc:creator>WeChat Official Account</dc:creator><category>Go</category><category>Programming</category><category>Getting Started</category><category>Learning</category></item><item><title>Processes, Threads, and Coroutines in Python</title><link>https://www.chenshaowen.com/en/blog/process-and-thread-in-python.html</link><pubDate>Sat, 06 Jan 2018 11:22:55 +0000</pubDate><atom:modified>Sat, 06 Jan 2018 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/process-and-thread-in-python.html</guid><description>1. Processes A process is an instance of a running program, and it is the most basic unit by which the kernel allocates resources. A process has its own independent heap and stack, its own address space, and its own resource handles. Processes are scheduled by the OS, the scheduling</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Concurrency</category><category>Processes</category><category>Threads</category><category>Coroutines</category><category>R&amp;D</category><category>Learning</category></item><item><title>Stateless Services</title><link>https://www.chenshaowen.com/en/blog/stateless-service.html</link><pubDate>Wed, 03 Jan 2018 17:22:45 +0000</pubDate><atom:modified>Wed, 03 Jan 2018 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/stateless-service.html</guid><description>1. Problem Description Background: a SaaS application developed with Django, offering document services externally. Its search feature is implemented through Django Haystack. Problem: the search feature is sometimes available and sometimes not. After repeated testing, the available and unavailable states were found to alternate, each occurring with a probability of</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Services</category><category>PaaS</category><category>SaaS</category></item><item><title>Content-Type in the HTTP Header</title><link>https://www.chenshaowen.com/en/blog/content-type-http-header.html</link><pubDate>Sat, 30 Dec 2017 00:00:00 +0000</pubDate><atom:modified>Sat, 30 Dec 2017 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/content-type-http-header.html</guid><description>1. HTTP Header The HTTP protocol is an application-layer specification built on top of TCP/IP, transmitted as ASCII text. The HTTP specification divides an HTTP request into three parts: the status line, the request headers, and the message body. Something like this:
1 2 3 4 5 &amp;lt;method&amp;gt;&amp;lt;request-URL&amp;gt;&amp;lt;version&amp;gt; &amp;lt;headers&amp;gt; &amp;lt;entity-body&amp;gt; An HTTP header falls into four categories: general headers, request headers, response headers, and entity headers.</description><dc:creator>WeChat Official Account</dc:creator><category>HTTP</category><category>Interface</category><category>Backend</category><category>Protocol</category><category>R&amp;D</category></item><item><title>Python's Class Function Methods</title><link>https://www.chenshaowen.com/en/blog/class-function-method-of-python.html</link><pubDate>Fri, 29 Dec 2017 00:00:00 +0000</pubDate><atom:modified>Fri, 29 Dec 2017 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/class-function-method-of-python.html</guid><description>1. Function Methods A function is an organized, reusable snippet of code used to implement a single or related piece of functionality. Functions improve an application&amp;rsquo;s modularity and the reuse rate of code. Python provides many built-in functions, such as print() and str(). At the same time, Python also allows</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Conventions</category><category>Functions</category><category>R&amp;D</category></item><item><title>Interactive Notebook - Jupyter</title><link>https://www.chenshaowen.com/en/blog/interactive-notebook-jupyter.html</link><pubDate>Mon, 25 Dec 2017 17:22:45 +0000</pubDate><atom:modified>Mon, 25 Dec 2017 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/interactive-notebook-jupyter.html</guid><description>1. Introduction Jupyter Notebook (formerly IPython notebook) is an interactive notebook that supports running more than 40 programming languages. Jupyter Notebook is in fact a web application that lets you create and share program documents, with support for live code, mathematical equations, visualizations, and Markdown. Its uses include data cleaning</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Python</category><category>Notes</category><category>Jupyter</category><category>Learning</category><category>R&amp;D</category><category>Data Analysis</category><category>Machine Learning</category><category>Visualization</category></item><item><title>RabbitMQ Message Queue</title><link>https://www.chenshaowen.com/en/blog/message-queue-about-rabbitmq.html</link><pubDate>Sat, 23 Dec 2017 20:51:22 +0000</pubDate><atom:modified>Sat, 23 Dec 2017 20:51:22 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/message-queue-about-rabbitmq.html</guid><description>1. Where a Message Queue Fits 1.1 Asynchronous Processing Use case: after a user registers, a registration email and a registration SMS must be sent. With the synchronous approach, system performance (concurrency, throughput, response time) hits a bottleneck. 1.2 Application Decoupling Use case: after a user places an order, the</description><dc:creator>WeChat Official Account</dc:creator><category>RabbitMQ</category><category>Middleware</category><category>Celery</category><category>Python</category><category>Message</category><category>Queue</category></item><item><title>Common Git Commands</title><link>https://www.chenshaowen.com/en/blog/common-git-commands.html</link><pubDate>Mon, 18 Dec 2017 11:22:55 +0000</pubDate><atom:modified>Mon, 18 Dec 2017 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/common-git-commands.html</guid><description>1. Basic Concepts Workspace: the working area, the project files Index: the staging area, also called the pending-commit area; before a commit enters the repo, all updates are placed in the staging area Local Repository: the local repo, the version repository kept locally; HEAD points at the current development branch</description><dc:creator>WeChat Official Account</dc:creator><category>Git</category><category>Tools</category><category>Version Control</category><category>Command Line</category><category>R&amp;D</category></item><item><title>Presentations</title><link>https://www.chenshaowen.com/en/presentation/</link><pubDate>Sat, 16 Dec 2017 17:42:04 +0000</pubDate><atom:modified>Sat, 16 Dec 2017 17:42:04 +0000</atom:modified><guid>https://www.chenshaowen.com/en/presentation/</guid><description>Chaos Engineering and Practice
University Training Week 2 | DevOps
University Training Week 1 | Containers and Cloud Native
China DevOps Community | A CICD Platform Based on Tekton
KubeSphere Open Source: Thoughts on R&amp;amp;D Process
DevOps Platform Under Cloud Native
2020 Cloud Native Industry Conference | Building an Enterprise DevOps Platform Across Clusters</description><dc:creator>WeChat Official Account</dc:creator></item><item><title>How to Migrate a Blog from Ghost to Hexo</title><link>https://www.chenshaowen.com/en/blog/how-to-migrating-blogs-to-hexo.html</link><pubDate>Sun, 10 Dec 2017 11:22:55 +0000</pubDate><atom:modified>Sun, 10 Dec 2017 11:22:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-migrating-blogs-to-hexo.html</guid><description>1. Introduction to Hexo Hexo is a concise, efficient, open-source static blog generator built with Node.js. Hexo can render Markdown into static HTML files extremely quickly. Like Jekyll, Ghost, and Octopress, it can be used to create a blog.
Hexo has the following advantages:
It uses Node.js, so setting up the environment is simple.</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Hexo</category><category>Blog</category><category>Ghost</category><category>Operations</category><category>Migration</category></item><item><title>API Interface Specification</title><link>https://www.chenshaowen.com/en/blog/api-interface-specification.html</link><pubDate>Fri, 01 Dec 2017 00:00:00 +0000</pubDate><atom:modified>Fri, 01 Dec 2017 00:00:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/api-interface-specification.html</guid><description>In the process of Web application development, backend developers need to deliver API interfaces frequently, and frontend developers need to call API interfaces frequently. To lower communication costs and prevent possible security risks, and following the principle of convention over configuration, it is necessary to standardize the API specification. Restful</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Interface</category><category>API</category><category>R&amp;D</category><category>Specification</category></item><item><title>Frontend Webpack Practice of GitLab CI</title><link>https://www.chenshaowen.com/en/blog/front-webpack-practice-of-gitlab-ci.html</link><pubDate>Wed, 08 Nov 2017 09:15:56 +0000</pubDate><atom:modified>Wed, 08 Nov 2017 09:15:56 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/front-webpack-practice-of-gitlab-ci.html</guid><description>Starting with GitLab 8.0, GitLab began integrating CI (Continuous Integration) functionality. You only need to add a Runner on the server and a .gitlab-ci.yml file in the project, and you can run CI. In GitLab Setup and Configuration I recorded the whole process of setting up a GitLab service from</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Continuous Integration</category><category>Tools</category><category>DevOps</category><category>GitLab</category><category>CICD</category></item><item><title>Error Code Design and Unified Exception Handling in Django</title><link>https://www.chenshaowen.com/en/blog/error-code-design-and-unified-processing-in-django.html</link><pubDate>Mon, 30 Oct 2017 21:50:33 +0000</pubDate><atom:modified>Mon, 30 Oct 2017 21:50:33 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/error-code-design-and-unified-processing-in-django.html</guid><description>I currently use Django for SaaS development, and I develop and maintain several SaaS applications at the same time. Many SaaS applications have agreed-upon error codes, some used to handle login state, others to mark business logic status. For a feature that is so strongly shared across projects, it is</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Error Codes</category><category>Middleware</category><category>R&amp;D</category><category>Learning</category><category>API</category><category>Best Practices</category></item><item><title>How to Learn a New Programming Language: Taking Python as an Example</title><link>https://www.chenshaowen.com/en/blog/how-to-learn-a-new-programming-language-taking-python-as-an-example.html</link><pubDate>Fri, 13 Oct 2017 23:00:06 +0000</pubDate><atom:modified>Fri, 13 Oct 2017 23:00:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-learn-a-new-programming-language-taking-python-as-an-example.html</guid><description>1. Understand the Background of the New Language ABC was a teaching language designed specifically for non-professional programmers, but because it was closed, it did not succeed. During Christmas 1989, Guido van Rossum developed a new script interpreter and named it Python, as a kind of successor to the ABC</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Learning</category><category>Programming</category><category>R&amp;D</category></item><item><title>How to Package a Python Package and Upload It to PyPI</title><link>https://www.chenshaowen.com/en/blog/how-to-pack-a-python-package-and-upload-it-to-pypi.html</link><pubDate>Fri, 06 Oct 2017 20:50:41 +0000</pubDate><atom:modified>Fri, 06 Oct 2017 20:50:41 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-pack-a-python-package-and-upload-it-to-pypi.html</guid><description>Recently I have been thinking about how to improve development efficiency. From web crawlers to data processing, and then to artificial intelligence, Python&amp;rsquo;s strength lies in having a large set of out-of-the-box toolkits, so you do not have to reinvent the wheel, which greatly improves development efficiency. So why not modularize the functional pieces of a project and package them as reusable Python packages?</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Django</category><category>Deployment</category><category>PyPI</category><category>R&amp;D</category><category>Open Source</category><category>Learning</category></item><item><title>Django Debugging Tool django-debug-toolbar</title><link>https://www.chenshaowen.com/en/blog/django-debug-toolbar.html</link><pubDate>Fri, 06 Oct 2017 10:45:58 +0000</pubDate><atom:modified>Fri, 06 Oct 2017 10:45:58 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-debug-toolbar.html</guid><description>1. About Django&amp;rsquo;s Performance Django is a web application framework written in Python. With Django you can develop complex, data-driven websites very simply and efficiently. At the same time, Django pays close attention to component reusability, pluggability, agile development, and DRY (Don&amp;rsquo;t Repeat Yourself). To a certain extent, Django is an application framework very well suited to implementing business logic.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Tools</category><category>Testing</category><category>Performance</category><category>Debugging</category><category>R&amp;D</category></item><item><title>Controlling Static File Versions in Django</title><link>https://www.chenshaowen.com/en/blog/control-of-static-file-version-in-django.html</link><pubDate>Fri, 06 Oct 2017 09:58:43 +0000</pubDate><atom:modified>Fri, 06 Oct 2017 09:58:43 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/control-of-static-file-version-in-django.html</guid><description>To respond quickly to user needs and meet the requirements of marketing campaigns, internet products usually have a very high release frequency. Adopting agile development shortens the delivery cycle and speeds up product iteration, but it also brings challenges to a project&amp;rsquo;s file management. Frontend engineering faces users directly, bears</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Frontend</category><category>JavaScript</category><category>Files</category><category>R&amp;D</category><category>Version</category></item><item><title>Django Static File Handling</title><link>https://www.chenshaowen.com/en/blog/django-static-file-processing.html</link><pubDate>Thu, 05 Oct 2017 15:42:27 +0000</pubDate><atom:modified>Thu, 05 Oct 2017 15:42:27 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-static-file-processing.html</guid><description>1. Categories of Django Static Files Django static files fall into two categories: static and media.
static: files referenced by pages, such as JS, CSS, and images media: files uploaded by users 2. Production Environment Configuration In production, you usually configure Nginx to forward static file requests while Django handles dynamic requests.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Frontend</category><category>Files</category><category>Python</category><category>R&amp;D</category></item><item><title>Large File Transfer in Django</title><link>https://www.chenshaowen.com/en/blog/django-big-file-transfer.html</link><pubDate>Tue, 26 Sep 2017 18:28:56 +0000</pubDate><atom:modified>Tue, 26 Sep 2017 18:28:56 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-big-file-transfer.html</guid><description>1. Returning the File Directly If the static file is at media/test.zip in the project root, you first have to read the file into memory and then transfer it. The code looks like this:
settings.py configuration
1 2 PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) MEDIA_ROOT = os.path.join(PROJECT_ROOT, &amp;#39;media/&amp;#39;) yourapp/views.py
1 2 3 4 5 6 7 8 9 10 11 12 from django.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Django</category><category>Large Files</category><category>Network</category><category>R&amp;D</category></item><item><title>Building a Django Development Environment with Vagrant</title><link>https://www.chenshaowen.com/en/blog/build-django-development-environment-using-vagrant.html</link><pubDate>Mon, 25 Sep 2017 21:56:05 +0000</pubDate><atom:modified>Mon, 25 Sep 2017 21:56:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/build-django-development-environment-using-vagrant.html</guid><description>Docker solves the problem of environment isolation on the same machine and improves the efficiency of operations and deployment. Vagrant gives developers a unified, near-fully-isolated environment for development and testing. This article mainly discusses how to build a Django development environment with Vagrant. Versions: VirtualBox 5.0, Vagrant 1.8. 1. Basic</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Vagrant</category><category>Tools</category><category>Development</category><category>R&amp;D</category><category>Operations</category></item><item><title>Building a Django Development Environment with Docker from Scratch (6) uWSGI, Django</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-6.html</link><pubDate>Sun, 24 Sep 2017 18:03:22 +0000</pubDate><atom:modified>Sun, 24 Sep 2017 18:03:22 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-6.html</guid><description>1. Directory Structure The django-devops-uwsgi directory holds the image build files that package uWSGI and Django. It installs the necessary packages such as uWSGI, pip, and virtualenv into the image.
When a container is created from the image, the start.sh script runs: it creates the Python virtual runtime environment, installs the dependency packages from Django&amp;rsquo;s requirements.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Django</category><category>Python</category><category>Services</category><category>Tools</category><category>R&amp;D</category><category>Operations</category></item><item><title>Packaging a Django Development Environment with Docker from Scratch (5) Nginx</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-5.html</link><pubDate>Sun, 24 Sep 2017 14:34:35 +0000</pubDate><atom:modified>Sun, 24 Sep 2017 14:34:35 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-5.html</guid><description>1. Directory Structure 1 2 3 4 5 6 7 8 9 10 11 12 ├── django-devops-nginx │ ├── Dockerfile │ └── nginx.repo ├── django-devops-compose │ ├── docker-compose.yml │ ├── www │ ├── conf │ │ ├── nginx.conf │ ├── log │ │ ├── nginx │ │ │ ├── access.log │ │ │ ├── error.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Services</category><category>Tools</category><category>Django</category><category>Nginx</category><category>Python</category><category>R&amp;D</category><category>Operations</category></item><item><title>Packaging a Django Development Environment with Docker from Scratch (4) Project Organization</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-4.html</link><pubDate>Sun, 24 Sep 2017 13:32:40 +0000</pubDate><atom:modified>Sun, 24 Sep 2017 13:32:40 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-4.html</guid><description>1. Deployment Architecture The program processing flow when a browser visits a page:
(1) The browser sends a request to Nginx. If it matches a static URL on the Nginx side, for example files such as js, css, or 404.html under the /static directory, Nginx returns the file directly. Other request URLs are forwarded to uWSGI for processing via the uwsgi_pass configuration.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Services</category><category>Tools</category><category>Django</category><category>Python</category><category>R&amp;D</category><category>Operations</category></item><item><title>Packaging a Django Development Environment with Docker from Scratch (3) Docker Compose</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-3.html</link><pubDate>Sat, 23 Sep 2017 19:56:03 +0000</pubDate><atom:modified>Sat, 23 Sep 2017 19:56:03 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-3.html</guid><description>1. Basic Concepts Docker Compose is a Docker tool for defining and running complex applications. With Docker Compose, you can define a multi-container application in a single file, then use a single command to start your application and finish all the preparation work.
Docker Compose positions itself as &amp;lsquo;defining and running complex applications with Docker&amp;rsquo;.</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Services</category><category>Tools</category><category>Django</category><category>Python</category><category>R&amp;D</category><category>Operations</category></item><item><title>Packaging a Django Development Environment with Docker from Scratch (2) Dockerfile</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-2.html</link><pubDate>Fri, 22 Sep 2017 19:52:27 +0000</pubDate><atom:modified>Fri, 22 Sep 2017 19:52:27 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-2.html</guid><description>1. Basic Concepts A Dockerfile is a collection of instructions for building a Docker image. Docker reads Dockerfile instructions to build an image automatically. A Dockerfile is similar to a Makefile: both are text files that organize all the instructions in the order the image is built.
The command to build a Docker image:</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Django</category><category>Python</category><category>Services</category><category>Tools</category><category>R&amp;D</category><category>Operations</category></item><item><title>Packaging a Django Development Environment with Docker from Scratch (1) Setting Up the Environment</title><link>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-1.html</link><pubDate>Thu, 21 Sep 2017 09:38:47 +0000</pubDate><atom:modified>Thu, 21 Sep 2017 09:38:47 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-package-django-development-environments-using-docker-1.html</guid><description>Vagrant is suited to managing virtual machines, while Docker is suited to managing application environments. To better simulate a real runtime environment, this series of articles uses Docker and Docker Compose to build a development environment of Nginx + uWSGI + Django + MySQL + Redis + Rabbit. 1. Basic</description><dc:creator>WeChat Official Account</dc:creator><category>Docker</category><category>Services</category><category>Tools</category><category>Django</category><category>Python</category><category>R&amp;D</category><category>Operations</category></item><item><title>Django Application Performance Testing Based on Docker</title><link>https://www.chenshaowen.com/en/blog/django-application-performance-test-based-on-docker.html</link><pubDate>Thu, 07 Sep 2017 19:08:09 +0000</pubDate><atom:modified>Thu, 07 Sep 2017 19:08:09 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-application-performance-test-based-on-docker.html</guid><description>1. Basic Website Performance Metrics Concurrency: the number of sessions the server handles per unit of time Throughput: the number of requests the server handles per unit of time Response time: the total elapsed time from when the user sends a request to when the response is fully received, made up of network transmission time, service processing time, and other parts Average response time: the average of the response times of all requests 2.</description><dc:creator>WeChat Official Account</dc:creator><category>Testing</category><category>Demo</category><category>Docker</category><category>Django</category></item><item><title>Free APP Domain Name Service Provided by the PaaS Platform</title><link>https://www.chenshaowen.com/en/blog/free-app-domain-name-service-of-paas-platform.html</link><pubDate>Tue, 05 Sep 2017 19:00:58 +0000</pubDate><atom:modified>Tue, 05 Sep 2017 19:00:58 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/free-app-domain-name-service-of-paas-platform.html</guid><description> Provider Domain Google App Engine appspot.com second-level domain Sina App Engine sinaapp.com second-level domain Baidu App Engine duapp.com second-level domain Heroku herokuapp.com second-level domain AWS Elastic Beanstalk elasticbeanstalk.com second-level domain OpenShift rhcloud.com second-level domain DaoCloud daocloud.io second-level domain TenxCloud tenxapp.com second-level domain Alauda myalauda.cn second-level domain</description><dc:creator>WeChat Official Account</dc:creator><category>Domain Names</category><category>Services</category><category>PaaS</category><category>Platform</category><category>Operations</category></item><item><title>Containers and AI Are the Future Direction of PaaS</title><link>https://www.chenshaowen.com/en/blog/container-and-ai-are-the-future-directions-in-the-development-of-paas.html</link><pubDate>Sun, 03 Sep 2017 15:57:50 +0000</pubDate><atom:modified>Sun, 03 Sep 2017 15:57:50 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/container-and-ai-are-the-future-directions-in-the-development-of-paas.html</guid><description>1. About PaaS 1.1 What Is PaaS PaaS is short for Platform as a Service, a type of cloud computing service that provides a computing platform along with solution services. The emergence of PaaS accelerated the growth of SaaS, and in particular sped up the development of SaaS applications. For example, when developing SaaS, using the login, database, cache, and other services uniformly provided by a PaaS platform greatly reduces the manpower and cost of building those services.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Cloud Services</category><category>PaaS</category><category>Containers</category><category>AI</category></item><item><title>Hybrid Cloud in Cloud Deployment</title><link>https://www.chenshaowen.com/en/blog/hybrid-cloud-of-cloud-deployment.html</link><pubDate>Sun, 03 Sep 2017 13:18:17 +0000</pubDate><atom:modified>Sun, 03 Sep 2017 13:18:17 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/hybrid-cloud-of-cloud-deployment.html</guid><description>1. User Scenarios for Hybrid Cloud 1.1 Handling Explosive Business Growth Internet businesses grow exponentially, and it is hard to predict how much infrastructure capacity to reserve. Usually, for a long stretch in the early days of a business, a small colocation footprint of physical machines is enough to meet demand.</description><dc:creator>WeChat Official Account</dc:creator><category>Cloud</category><category>PaaS</category><category>Cloud Services</category><category>Hybrid Cloud</category></item><item><title>Jenkins Pipeline Usage and Debugging</title><link>https://www.chenshaowen.com/en/blog/jenkins-pipeline-usging-and-debug.html</link><pubDate>Mon, 14 Aug 2017 13:13:55 +0000</pubDate><atom:modified>Mon, 14 Aug 2017 13:13:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jenkins-pipeline-usging-and-debug.html</guid><description>1. Basic Concepts master master is where Jenkins is installed and runs; it is responsible for parsing job scripts, handling tasks, and scheduling compute resources. agent agent is responsible for handling tasks dispatched from master; the actual operations are executed through an executor. executor An executor is the compute resource</description><dc:creator>WeChat Official Account</dc:creator><category>Jenkins</category><category>Pipeline</category><category>Continuous Integration</category><category>DevOps</category><category>CICD</category><category>Debugging</category><category>R&amp;D</category></item><item><title>GitLab CI Continuous Integration</title><link>https://www.chenshaowen.com/en/blog/ci-practice-of-using-gitlab.html</link><pubDate>Sun, 13 Aug 2017 08:03:17 +0000</pubDate><atom:modified>Sun, 13 Aug 2017 08:03:17 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ci-practice-of-using-gitlab.html</guid><description>1. Basic Concepts GitLab-CI: the continuous integration system provided by GitLab. It manages the build status of a project and runs build tasks through GitLab Runner. GitLab-Runner: used to execute build tasks. The script portion of .gitlab-ci.yml is run by GitLab-Runner. .gitlab-ci.yml: a file in the root directory of a git project that records a series of stages and execution rules.</description><dc:creator>WeChat Official Account</dc:creator><category>DevOps</category><category>GitLab</category><category>GitLab-CI</category><category>CI</category><category>Tools</category><category>Continuous Integration</category><category>R&amp;D</category></item><item><title>Setting Up and Configuring GitLab</title><link>https://www.chenshaowen.com/en/blog/build-and-configure-of-gitlab.html</link><pubDate>Sat, 12 Aug 2017 00:51:07 +0000</pubDate><atom:modified>Sat, 12 Aug 2017 00:51:07 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/build-and-configure-of-gitlab.html</guid><description>1. Introduction GitLab is an open-source application developed with Ruby on Rails. It implements self-hosted Git project repositories, and public or private projects can be accessed through a web interface. It has features similar to GitHub, and can browse source code, manage defects and comments. It can manage team access</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Management</category><category>Continuous Integration</category><category>GitLab</category><category>DevOps</category><category>Operations</category></item><item><title>GrowingIO Data Collection Field Analysis</title><link>https://www.chenshaowen.com/en/blog/growingio-collect-js-field-analysis.html</link><pubDate>Tue, 08 Aug 2017 22:01:35 +0000</pubDate><atom:modified>Tue, 08 Aug 2017 22:01:35 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/growingio-collect-js-field-analysis.html</guid><description>1. Field Meanings 1.1 u, User ID 1 2 3 4 5 6 if cookie.has(gr_user_id){ //使用 cookie 中的 gr_user_id 有效期十年 } else { //按照 &amp;#34;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&amp;#34; 格式，随机生成一个 gr_user_id } 1.2 s, Session</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Frontend</category><category>Analysis</category><category>Tracking</category><category>Operations</category><category>R&amp;D</category><category>Learning</category><category>Data Collection</category></item><item><title>Django Initial Data with Fixtures</title><link>https://www.chenshaowen.com/en/blog/django-initializes-fixture-of-data.html</link><pubDate>Mon, 07 Aug 2017 21:57:43 +0000</pubDate><atom:modified>Mon, 07 Aug 2017 21:57:43 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-initializes-fixture-of-data.html</guid><description>1. Characteristics of Fixtures Fixtures are a new way to provide initial data, and they are used by Django&amp;rsquo;s test framework to handle test data for unit tests. Unlike SQL files, a fixture can provide a serialized file that Django&amp;rsquo;s serialization system understands; it is read, automatically converted into the corresponding model, and then saved into the database.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Data</category><category>Initialization</category><category>R&amp;D</category></item><item><title>Atom as a Lightweight Python Full-Stack IDE</title><link>https://www.chenshaowen.com/en/blog/atom-create-lightweight-python-full-stack-ide.html</link><pubDate>Sun, 06 Aug 2017 14:51:16 +0000</pubDate><atom:modified>Sun, 06 Aug 2017 14:51:16 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/atom-create-lightweight-python-full-stack-ide.html</guid><description>At the moment I use PyCharm as my integrated development tool for both front end and back end. My main stack is JavaScript, CSS, ECMAScript 6, Vue, Python, Django, Mako, and Markdown. Front-end work has been growing steadily lately, and PyCharm seems to be struggling. Atom, Sublime Text, and Visual Studio Code became the candidates; Atom is maintained by GitHub, has better community support, and is more configurable and more fun to play with.</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Python</category><category>R&amp;D</category><category>IDE</category><category>Atom</category><category>Full-Stack</category></item><item><title>Programmer's Editor - Atom</title><link>https://www.chenshaowen.com/en/blog/programming-editor-atom.html</link><pubDate>Fri, 04 Aug 2017 23:46:56 +0000</pubDate><atom:modified>Fri, 04 Aug 2017 23:46:56 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/programming-editor-atom.html</guid><description>1. Introduction to Atom Atom is a code editor that supports the three major desktop platforms Windows, Mac, and Linux, is completely free, and is open source on GitHub. Go now 1.1 Pros and Cons Main advantages A strong development and maintenance team, an open source project, fast Bug fixes,</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Development</category><category>R&amp;D</category><category>Editor</category><category>Learning</category></item><item><title>Axios ajax</title><link>https://www.chenshaowen.com/en/blog/axios-ajax.html</link><pubDate>Fri, 04 Aug 2017 07:07:11 +0000</pubDate><atom:modified>Fri, 04 Aug 2017 07:07:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/axios-ajax.html</guid><description>1. Basic Concepts 1.1 Ajax Ajax stands for &amp;ldquo;Asynchronous JavaScript and XML&amp;rdquo;. At its core it is made up of the JavaScript, XmlHttpRequest, and DOM objects: through the XmlHttpRequest object it sends an asynchronous request to the server, gets data back from the server, and then uses JavaScript to manipulate</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Tools</category><category>Axios</category><category>Ajax</category><category>API</category></item><item><title>Vue.js Component Library</title><link>https://www.chenshaowen.com/en/blog/vuejs-component-library.html</link><pubDate>Thu, 03 Aug 2017 21:53:02 +0000</pubDate><atom:modified>Thu, 03 Aug 2017 21:53:02 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/vuejs-component-library.html</guid><description>1. UI Components element - A Vue 2 web UI toolkit from Ele.me Vux - A component library based on Vue and WeUI iview - An open-source UI component library based on Vuejs mint-ui - Mobile UI elements for Vue 2 muse-ui - A responsive UI library with consistent styling across all three platforms vue-material - Build beautiful apps with Vue Material and Vue 2 vuetify - A Vue JS 2 component framework built for mobile Keen-UI - A lightweight collection of basic UI components vonic - Quickly build mobile single-page applications vue-multiselect - A Vue.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Tools</category><category>Components</category><category>Vuejs</category><category>Reposted</category></item><item><title>Base64 Encoding</title><link>https://www.chenshaowen.com/en/blog/base64-code.html</link><pubDate>Wed, 02 Aug 2017 17:00:31 +0000</pubDate><atom:modified>Wed, 02 Aug 2017 17:00:31 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/base64-code.html</guid><description>1. Application Scenarios 1.1 Mail RFC821 requires that email content be ASCII. When a message contains other non-ASCII characters or binary data, Content-Transfer-Encoding is needed, and Base64 is one such method. 1.2 URL Some applications need to put binary data into a URL, but URLs only allow a specific set</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Encoding</category><category>Data</category><category>Base64</category><category>R&amp;D</category></item><item><title>Using Custom Fonts on a Page</title><link>https://www.chenshaowen.com/en/blog/page-uses-a-custom-font.html</link><pubDate>Tue, 01 Aug 2017 19:30:47 +0000</pubDate><atom:modified>Tue, 01 Aug 2017 19:30:47 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/page-uses-a-custom-font.html</guid><description>1. Font-family The fonts you can use on a web page are limited to the handful of fonts already installed on the PC the browser is running on. Windows operating system, Chinese fonts: SimHei (Hei) SimSun (Song) NSimSun (New Song) FangSong (FangSong) KaiTi (Kai) FangSongGB2312 (FangSong GB2312) KaiTiGB2312 (Kai GB2312)</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>CSS</category><category>R&amp;D</category><category>Fonts</category><category>Learning</category></item><item><title>Docker Basics</title><link>https://www.chenshaowen.com/en/blog/basis-of-docker.html</link><pubDate>Fri, 28 Jul 2017 15:30:00 +0000</pubDate><atom:modified>Fri, 28 Jul 2017 15:30:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/basis-of-docker.html</guid><description>1. What Docker Is Docker was born in early 2013 as a side project inside dotCloud (the former name of Docker Inc.). Its source code is hosted on GitHub, it is written in Go, and it follows the Apache 2.0 open-source license.
The goal of the Docker project is to provide a lightweight operating system virtualization solution.</description><dc:creator>WeChat Official Account</dc:creator><category>PaaS</category><category>DevOps</category><category>Docker</category><category>Containers</category><category>Learning</category></item><item><title>Frontend-Backend Symmetric Encrypted Transmission - AES</title><link>https://www.chenshaowen.com/en/blog/symmetric-encrypted-transmission-of-aes.html</link><pubDate>Wed, 26 Jul 2017 18:52:18 +0000</pubDate><atom:modified>Wed, 26 Jul 2017 18:52:18 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/symmetric-encrypted-transmission-of-aes.html</guid><description>1. Basic Concepts Symmetric encryption: Symmetric encryption is an encryption method that uses a single-key cryptosystem, in which the same key is used both to encrypt and to decrypt the information. Because it is fast, it is often used to encrypt the transmission of large amounts of data. DES (Data</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>Frontend</category><category>Backend</category><category>Encryption</category><category>R&amp;D</category></item><item><title>Make Your Report Look Great in a Day</title><link>https://www.chenshaowen.com/en/blog/one-day-make-report-great.html</link><pubDate>Sat, 22 Jul 2017 20:27:55 +0000</pubDate><atom:modified>Sat, 22 Jul 2017 20:27:55 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/one-day-make-report-great.html</guid><description/><dc:creator>WeChat Official Account</dc:creator><category>Repost</category><category>Research Report</category><category>Methods</category></item><item><title>How to Quickly Understand an Industry</title><link>https://www.chenshaowen.com/en/blog/how-to-quickly-understand-an-industry.html</link><pubDate>Sat, 22 Jul 2017 20:18:50 +0000</pubDate><atom:modified>Sat, 22 Jul 2017 20:18:50 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-quickly-understand-an-industry.html</guid><description>1. Methods 2. In Practice</description><dc:creator>WeChat Official Account</dc:creator><category>Repost</category><category>Research Report</category><category>Methods</category><category>Learning</category><category>Thoughts</category></item><item><title>Automated Testing Tool - Selenium</title><link>https://www.chenshaowen.com/en/blog/automated-testing-tool-about-selenium.html</link><pubDate>Sat, 22 Jul 2017 15:19:42 +0000</pubDate><atom:modified>Sat, 22 Jul 2017 15:19:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/automated-testing-tool-about-selenium.html</guid><description>1. Introduction to Selenium Selenium is an integration testing tool from Thoughtworks. At its core, Selenium Core is based on
JSUnit, written entirely in JavaScript, and can run in any browser that supports JavaScript.
1.1 Main Features and Characteristics Open source and free. Multi-browser support: Firefox, Chrome, IE, Opera — usable for compatibility testing.</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Testing</category><category>Automation</category><category>R&amp;D</category><category>Selenium</category><category>Learning</category></item><item><title>Cloud Industry Observations - 2017</title><link>https://www.chenshaowen.com/en/blog/cloud-industry-research-report-of-2017.html</link><pubDate>Sat, 22 Jul 2017 15:00:49 +0000</pubDate><atom:modified>Sat, 22 Jul 2017 15:00:49 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/cloud-industry-research-report-of-2017.html</guid><description>1. Classification of Cloud Services IaaS, which provides computing and storage services. PaaS, which provides the platform environment in which software runs. SaaS, which delivers software services directly. 2. Application Scenarios for Cloud Services Adopting cloud services can significantly reduce IT spending.
Among IaaS services, cloud hosts and storage are the products with the highest adoption rates, followed by databases and network acceleration.</description><dc:creator>WeChat Official Account</dc:creator><category>Research Report</category><category>PaaS</category><category>Opinions</category><category>Cloud Services</category></item><item><title>Django Forms Functionality</title><link>https://www.chenshaowen.com/en/blog/django-forms-function.html</link><pubDate>Fri, 21 Jul 2017 21:29:40 +0000</pubDate><atom:modified>Fri, 21 Jul 2017 21:29:40 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-forms-function.html</guid><description>1. Automatically Generating HTML Form Elements A Widget is the tool used to render an HTML element. Specifying a widget 1 2 3 4 5 6 from django import forms class CommentForm(forms.Form): name = forms.CharField() url = forms.URLField() comment = forms.CharField(widget=forms.Textarea) Output of CommentForm().as_table() 1 2 3 4 5 6</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Security</category><category>R&amp;D</category></item><item><title>Operations Tracking and Solution Design</title><link>https://www.chenshaowen.com/en/blog/operation-buried-point-and-design.html</link><pubDate>Fri, 21 Jul 2017 13:34:15 +0000</pubDate><atom:modified>Fri, 21 Jul 2017 13:34:15 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/operation-buried-point-and-design.html</guid><description>1. Terminology xpath: There are two approaches, the exact path and the approximate path. Exact path: body&amp;gt;div[0]&amp;gt;div[3]&amp;gt;ul&amp;gt;li[5]&amp;gt;a[0], walking up from the clicked element all the way to the root node and recording every node along the way. Approximate path: body&amp;gt;div.header&amp;gt;div.nav&amp;gt;a[23], which on top of the former omits from the upward path any node that is not on the whitelist.</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Design</category><category>Plan</category><category>R&amp;D</category><category>Tracking</category><category>Operations</category><category>Learning</category><category>Data Analysis</category></item><item><title>Django ORM and SQL</title><link>https://www.chenshaowen.com/en/blog/sql-code-about-django-orm.html</link><pubDate>Fri, 21 Jul 2017 13:21:08 +0000</pubDate><atom:modified>Fri, 21 Jul 2017 13:21:08 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/sql-code-about-django-orm.html</guid><description>1. Basic Concepts ORM: Object Relational Mapping. Its job is to map between a relational database and objects. No complex SQL statements are needed — operating on data is as simple as operating on objects. QuerySet: the list of objects for a given model. A QuerySet lets you read data</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Data</category><category>SQL</category><category>R&amp;D</category></item><item><title>Haystack Full-Text Search</title><link>https://www.chenshaowen.com/en/blog/haystack-full-text-search.html</link><pubDate>Fri, 21 Jul 2017 13:00:03 +0000</pubDate><atom:modified>Fri, 21 Jul 2017 13:00:03 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/haystack-full-text-search.html</guid><description>A quick word on the project requirements: the team needed to publish documentation externally. The documents are written in Markdown and need to be published as HTML. At first we used an Nginx + Jekyll solution. As the documentation grew, the document system developed a strong need for search. I</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Data</category><category>Design</category><category>Search</category><category>R&amp;D</category></item><item><title>Jenkins Integrated GitHub Development</title><link>https://www.chenshaowen.com/en/blog/jenkins-integrated-github-development.html</link><pubDate>Tue, 18 Jul 2017 21:29:41 +0000</pubDate><atom:modified>Tue, 18 Jul 2017 21:29:41 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jenkins-integrated-github-development.html</guid><description>1. Basic Concepts Continuous Integration Continuous integration emphasizes that once developers commit new code, a build and (unit) test run immediately. From the test results we can determine whether the new code and the existing code integrate correctly. Continuous Delivery Building on continuous integration, continuous delivery deploys the integrated code</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Development</category><category>Jenkins</category><category>GitHub</category><category>CI</category><category>DevOps</category><category>R&amp;D</category></item><item><title>Cross-Departmental Collaboration Course Notes</title><link>https://www.chenshaowen.com/en/blog/cross-departmental-collaborative-curriculum-notes.html</link><pubDate>Fri, 14 Jul 2017 20:55:29 +0000</pubDate><atom:modified>Fri, 14 Jul 2017 20:55:29 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/cross-departmental-collaborative-curriculum-notes.html</guid><description>Collaboration is a journey.
1. Obstacles to Cross-Departmental Collaboration Resistance to collaborating on new business Gray areas in responsibilities Employees&amp;rsquo; ability to collaborate Information asymmetry The management mechanisms for cross-departmental collaboration Misaligned goals and interests Limited resources 2. The Core Philosophy of Collaboration Win-win thinking An open mindset The three aspects at the heart of collaboration</description><dc:creator>WeChat Official Account</dc:creator><category>Management</category><category>Collaboration</category><category>Teams</category><category>R&amp;D</category></item><item><title>Graphviz Toolkit: Drawing with DOT</title><link>https://www.chenshaowen.com/en/blog/drawing-toolkit-of-dot-using-graphviz.html</link><pubDate>Fri, 14 Jul 2017 12:32:44 +0000</pubDate><atom:modified>Fri, 14 Jul 2017 12:32:44 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/drawing-toolkit-of-dot-using-graphviz.html</guid><description>1. Introduction Graphviz is an open-source drawing toolkit developed at Bell Labs. It uses a specific DSL (domain-specific language), DOT, as its scripting language. It uses layout engines to parse DOT scripts and complete automatic layout. It supports a rich set of export formats, such as PNG, JPG, PostScript, SVG,</description><dc:creator>WeChat Official Account</dc:creator><category>Diagram</category><category>Tools</category><category>Graphviz</category><category>Drawing</category><category>R&amp;D</category></item><item><title>Jekyll Search Options</title><link>https://www.chenshaowen.com/en/blog/jekyll-search-option.html</link><pubDate>Thu, 13 Jul 2017 19:24:52 +0000</pubDate><atom:modified>Thu, 13 Jul 2017 19:24:52 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/jekyll-search-option.html</guid><description>Introduction: Jekyll is a static HTML generation tool. Our documentation system is deployed with Jekyll, which ultimately converts Markdown into HTML files for output.
The search requirement is: given a keyword, match it against a document&amp;rsquo;s title or content and list the matching documents.
1. Option One: Simple-Jekyll-Search Reference: https://github.com/christian-fei/Simple-Jekyll-Search</description><dc:creator>WeChat Official Account</dc:creator><category>Jekyll</category><category>Blog</category><category>Solutions</category><category>Data</category><category>Search</category><category>Frontend</category></item><item><title>Django Signals</title><link>https://www.chenshaowen.com/en/blog/signal-of-django.html</link><pubDate>Thu, 13 Jul 2017 13:06:10 +0000</pubDate><atom:modified>Thu, 13 Jul 2017 13:06:10 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/signal-of-django.html</guid><description>1. Basic Concepts Django ships with a signal dispatcher built in. Signals help decouple program modules. When an event occurs elsewhere in the application, a designated function is notified. Signals let certain senders notify a group of receivers that some action has taken place. 2. Using Signals 2.1 Declaring a</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Backend</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Decoupling</category><category>Events</category></item><item><title>Vue + Webpack Development</title><link>https://www.chenshaowen.com/en/blog/101-of-vue-and-webpack-project.html</link><pubDate>Wed, 12 Jul 2017 17:26:29 +0000</pubDate><atom:modified>Wed, 12 Jul 2017 17:26:29 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-of-vue-and-webpack-project.html</guid><description>1, Initializing the Project vue-cli is the official project scaffold released by Vue; using vue-cli, you can quickly create a Vue + Webpack project.
1 2 3 4 5 6 7 8 9 10 npm install -g vue-cli # Install vue-cli globally vue init webpack myproject # Create a vue project; when it runs, it prompts for information about the project cd myproject # Enter the project npm install # Install the dependency packages; a new node_modules folder is created and the packages are installed there npm run dev # Run locally, by default at http://localhost:8080, starting the service 2, Directory Structure 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |--build //folder for webpack-related code | |--build.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Tools</category><category>Vue</category><category>Webpack</category><category>R&amp;D</category></item><item><title>Django Class-Based Views</title><link>https://www.chenshaowen.com/en/blog/class-based-view-of-django.html</link><pubDate>Tue, 11 Jul 2017 16:36:56 +0000</pubDate><atom:modified>Tue, 11 Jul 2017 16:36:56 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/class-based-view-of-django.html</guid><description>Django has two kinds of views: function-based views and class-based views. The role of a view is mainly to fill in logic and return a response body. Function-based views are hard to extend and have a low rate of code reuse. Class-based views, on the other hand, can use inheritance</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Backend</category><category>Python</category><category>Class-Based Views</category><category>R&amp;D</category></item><item><title>Automated Testing in Django</title><link>https://www.chenshaowen.com/en/blog/auto-testing-of-django.html</link><pubDate>Mon, 10 Jul 2017 21:39:27 +0000</pubDate><atom:modified>Mon, 10 Jul 2017 21:39:27 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/auto-testing-of-django.html</guid><description>Automated testing in Django can be done with doctests or unit tests. The logic of automated testing is to pass test data into the function under test, then use whether the output matches the expected result as the criterion for whether the test passes. There are a few key points</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Testing</category><category>Demo</category><category>DevOps</category><category>CICD</category></item><item><title>Permission Management in Django REST Framework</title><link>https://www.chenshaowen.com/en/blog/permissions-of-django-rest-framework.html</link><pubDate>Fri, 07 Jul 2017 06:47:19 +0000</pubDate><atom:modified>Fri, 07 Jul 2017 06:47:19 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/permissions-of-django-rest-framework.html</guid><description>1. Permission Management in DRF Permission management in Django REST Framework consists of two parts.
One is Authentication. It specifies how the user is authenticated, obtaining request.user. The other is Permissions. It performs permission control over Django resources and user categories. 1.1 Authentication Methods The relevant source is in the rest_framework/authentication.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Backend</category><category>Security</category><category>API</category><category>Permissions</category><category>R&amp;D</category></item><item><title>Django Third-Party Component List</title><link>https://www.chenshaowen.com/en/blog/third-party-component-list-of-django.html</link><pubDate>Thu, 06 Jul 2017 09:27:50 +0000</pubDate><atom:modified>Thu, 06 Jul 2017 09:27:50 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/third-party-component-list-of-django.html</guid><description>Awesome-Django
A collection of Django apps, projects, and resources.
Django-Packages
A large number of Django third-party components.
Django-Mptt
Store hierarchical data structures in the database.
Django-Rest-Framework
Automatically generate RESTful APIs.
Django-Rest-Framework-Jwt
Provides token authentication for Django-Rest-Framework.
Django-Tastypie
Automatically generate RESTful APIs.
Django-Cors-Headers
Solves the problem of cross-origin access.
Django-Ckeditor
Rich text support for Django.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Backend</category><category>Components</category><category>R&amp;D</category></item><item><title>Django Template Inheritance</title><link>https://www.chenshaowen.com/en/blog/django-template-inherit.html</link><pubDate>Mon, 03 Jul 2017 19:17:11 +0000</pubDate><atom:modified>Mon, 03 Jul 2017 19:17:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-template-inherit.html</guid><description>1. The Scenario In a project, elements such as the header and footer are often reused. To avoid rewriting these elements on every page, and so that a change does not require editing each page individually, the common parts need to be extracted — that is Django template inheritance. 2.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Templates</category><category>R&amp;D</category></item><item><title>ECMAScript 6 Primer</title><link>https://www.chenshaowen.com/en/blog/book/the-101-of-ecma-script.html</link><pubDate>Tue, 27 Jun 2017 20:05:01 +0000</pubDate><atom:modified>Tue, 27 Jun 2017 20:05:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-101-of-ecma-script.html</guid><description>Author: Ruan Yifeng
Publisher: Publishing House of Electronics Industry
Publication year: 2014-8-1
ISBN: 9787121238369
E-book</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>JavaScript</category><category>Frontend</category><category>Learning</category></item><item><title>Django Decorators</title><link>https://www.chenshaowen.com/en/blog/django-decorator.html</link><pubDate>Thu, 22 Jun 2017 23:55:59 +0000</pubDate><atom:modified>Thu, 22 Jun 2017 23:55:59 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-decorator.html</guid><description>When developing with a separated front end and back end, some of the API endpoints provided to the front end use GET requests and some use POST requests. To keep the back end from throwing an error while reading values from request in views.py, you had to check the request</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Demo</category><category>Decorators</category><category>Python</category></item><item><title>Django Snippets</title><link>https://www.chenshaowen.com/en/blog/snippets-of-django.html</link><pubDate>Thu, 22 Jun 2017 23:52:06 +0000</pubDate><atom:modified>Thu, 22 Jun 2017 23:52:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/snippets-of-django.html</guid><description>1. Auto-Register All Models in Admin admin.py
1 2 3 4 5 6 7 8 9 10 # -*- coding: utf-8 -*- import inspect from django.contrib import admin from . import models for name, obj in inspect.getmembers(models): try: if inspect.isclass(obj): admin.site.register(getattr(models, name)) except Exception as e: pass 2. Get All View Names Get all view names of the project</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Tips</category></item><item><title>Getting Started with Django REST Framework</title><link>https://www.chenshaowen.com/en/blog/101-of-django-rest-framework.html</link><pubDate>Thu, 22 Jun 2017 23:50:15 +0000</pubDate><atom:modified>Thu, 22 Jun 2017 23:50:15 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-of-django-rest-framework.html</guid><description>In the SaaS development I work on, there is a fairly high demand for development efficiency. From project initiation, prototype design and evaluation, requirements confirmation, frontend design, and backend development through to final acceptance, we complete one iteration in just a few weeks. Guided by agile development, we began rolling</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Backend</category><category>Interface</category><category>Django</category><category>Python</category><category>API</category><category>R&amp;D</category></item><item><title>What Capabilities Should the Backend Improve in a Front-End/Back-End Separation Development Model</title><link>https://www.chenshaowen.com/en/blog/how-to-reflect-backend-value-in-front-and-backend-separation-mode.html</link><pubDate>Thu, 22 Jun 2017 11:14:21 +0000</pubDate><atom:modified>Thu, 22 Jun 2017 11:14:21 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-reflect-backend-value-in-front-and-backend-separation-mode.html</guid><description>In recent years, with the rise of single-page web applications, all kinds of frameworks have kept emerging.
The front end has begun to enter a stage of engineering and componentization.
Single-page web technology has expanded the boundaries of the front end, which can now also route and render pages without depending on the back end.</description><dc:creator>WeChat Official Account</dc:creator><category>Management</category><category>Backend</category><category>Value</category><category>R&amp;D</category><category>Architecture</category><category>Thoughts</category><category>Teams</category></item><item><title>Building a Documentation System with Jekyll</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-document-system-using-jekyll.html</link><pubDate>Sat, 17 Jun 2017 00:02:01 +0000</pubDate><atom:modified>Sat, 17 Jun 2017 00:02:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-document-system-using-jekyll.html</guid><description>For a company that produces technical output, an excellent documentation management and publishing system is indispensable. A documentation system is a kind of content management system; it has high accessibility requirements, a low update frequency per document, and a high publishing frequency. In my opinion, publishing documentation as pure static</description><dc:creator>WeChat Official Account</dc:creator><category>Jekyll</category><category>Documentation</category><category>Design</category><category>Operations</category><category>R&amp;D</category></item><item><title>Frontend-Backend Separation - Mock Data</title><link>https://www.chenshaowen.com/en/blog/mock-server.html</link><pubDate>Fri, 16 Jun 2017 21:10:54 +0000</pubDate><atom:modified>Fri, 16 Jun 2017 21:10:54 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/mock-server.html</guid><description>In frontend-backend separated development, when the backend API is not finished, the frontend cannot continue debugging. So that frontend and backend can develop in parallel, the frontend needs a set of API interface environments — this is the Mock API. The diagram below lays out the development flow nicely. Without a Mock data step, frontend-backend integration takes up a great deal of time.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Backend</category><category>Mock</category><category>R&amp;D</category></item><item><title>Arachni Security Scanner Source Code Analysis (Part 1)</title><link>https://www.chenshaowen.com/en/blog/source-code-analysis-of-arachni-1.html</link><pubDate>Fri, 16 Jun 2017 21:02:22 +0000</pubDate><atom:modified>Fri, 16 Jun 2017 21:02:22 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/source-code-analysis-of-arachni-1.html</guid><description>Arachni is a web security vulnerability scanner built on the Ruby on Rails framework.
1. Ruby on Rails Ruby on Rails, abbreviated ROR, is a web framework that consists of two parts: the Ruby language and the Rails framework. Ruby had always been popular in Japan, until 2004, when a 26-year-old Dane, David Heinemeier Hansson, proposed the web framework Rails.</description><dc:creator>WeChat Official Account</dc:creator><category>Tools</category><category>Security</category><category>Source Code</category><category>R&amp;D</category><category>Ruby</category></item><item><title>Apidoc: Practice and Automated Generation</title><link>https://www.chenshaowen.com/en/blog/practice-and-automation-generation-of-apidoc.html</link><pubDate>Wed, 14 Jun 2017 17:22:45 +0000</pubDate><atom:modified>Wed, 14 Jun 2017 17:22:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/practice-and-automation-generation-of-apidoc.html</guid><description>In a frontend/backend separated architecture, API documentation changes hands frequently. When third-party interfaces are involved, API and documentation changes can be even faster in multi-party collaboration scenarios. To make maintaining the API and handing over documentation easier, here is a documentation generation tool worth recommending — apidoc. 1. Introduction to</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Interface</category><category>API</category><category>Documentation</category><category>R&amp;D</category></item><item><title>Django Restful APIs with Tastypie</title><link>https://www.chenshaowen.com/en/blog/restful-api-of-using-django-tastypie.html</link><pubDate>Tue, 13 Jun 2017 21:31:13 +0000</pubDate><atom:modified>Tue, 13 Jun 2017 21:31:13 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/restful-api-of-using-django-tastypie.html</guid><description>1. Restful REST is short for Representational State Transfer, meaning &amp;ldquo;representation state transfer&amp;rdquo;. Restful is a development philosophy and a software architecture style for the World Wide Web. 1.1 Features of Restful Abstract resources Images, text, songs, and videos are all resource entities; on the network they are abstracted as</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Interface</category><category>API</category><category>Tastypie</category><category>R&amp;D</category></item><item><title>Same-Origin Policy and Cross-Origin Access</title><link>https://www.chenshaowen.com/en/blog/same-origin-policy.html</link><pubDate>Tue, 13 Jun 2017 17:19:03 +0000</pubDate><atom:modified>Tue, 13 Jun 2017 17:19:03 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/same-origin-policy.html</guid><description>1. Same-Origin Policy The same-origin policy is the cornerstone of browser security.
The definition of same-origin covers three aspects:
Same protocol Same domain Same port Scope of the restrictions:
Cookie, LocalStorage, and IndexDB cannot be read The DOM cannot be obtained AJAX requests cannot be sent Simply put, two URLs whose protocol, domain, and port differ in any way are not allowed to communicate with each other, and the scope covers reading each other&amp;rsquo;s cookies and DOM and sending AJAX requests.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Network</category><category>Security</category><category>R&amp;D</category><category>CORS</category><category>Learning</category><category>Browser</category></item><item><title>Linux Performance Command Tools</title><link>https://www.chenshaowen.com/en/blog/linux-performance-command-tools.html</link><pubDate>Sun, 28 May 2017 15:47:41 +0000</pubDate><atom:modified>Sun, 28 May 2017 15:47:41 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/linux-performance-command-tools.html</guid><description>There are many performance tools on the Linux platform, enough to make your head spin, but long-term exploration and experience have shown that the most useful ones are still those time-tested, simple little utilities. Below are the command-line tools collected from system performance expert Brendan D. Gregg&amp;rsquo;s talk on Linux performance (Linux Performance Tools).</description><dc:creator>WeChat Official Account</dc:creator><category>Linux</category><category>Performance</category><category>Operations</category><category>Monitoring</category><category>Learning</category><category>Troubleshooting</category><category>Tuning</category><category>Commands</category><category>Observability</category></item><item><title>Interactive Data Visualization for the Web</title><link>https://www.chenshaowen.com/en/blog/book/interactive-data-visualization-for-the-web.html</link><pubDate>Fri, 26 May 2017 19:06:09 +0000</pubDate><atom:modified>Fri, 26 May 2017 19:06:09 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/interactive-data-visualization-for-the-web.html</guid><description>Subtitle: Using D3 to Build Interactive Charts
Original title: Interactive Data Visualization for the Web
Author: [US] Scott Murray
Translator: Li Songfeng
Publisher: Posts &amp;amp; Telecom Press
Publication year: 2013-6
ISBN: 9787115320117</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Data</category><category>Frontend</category><category>Visualization</category><category>D3</category><category>R&amp;D</category></item><item><title>Qiniu Storage Batch Operations - qshell</title><link>https://www.chenshaowen.com/en/blog/qiniu-storage-batch-operation-using-qshell.html</link><pubDate>Sun, 21 May 2017 21:47:49 +0000</pubDate><atom:modified>Sun, 21 May 2017 21:47:49 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/qiniu-storage-batch-operation-using-qshell.html</guid><description>1. Download the Tool - qshell qshell is a command-line tool built on the public APIs documented by Qiniu to make it easy for developers to test and use Qiniu API services, written in the Go language. The tool currently bundles convenient commands for Qiniu Storage, CDN, and other methods commonly used in Qiniu services.</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Demo</category><category>CDN</category><category>Qiniu</category><category>Batch</category></item><item><title>XSS Cheat Sheet</title><link>https://www.chenshaowen.com/en/blog/xss-cheat-sheet.html</link><pubDate>Sat, 20 May 2017 09:12:31 +0000</pubDate><atom:modified>Sat, 20 May 2017 09:12:31 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/xss-cheat-sheet.html</guid><description>If you use the Chrome browser to test XSS vectors, disable the browser&amp;rsquo;s XSS interception first. First, close all Chrome browser processes, then run:
1 chrome.exe -args --disable-xss-auditor --args --disable-web-security Enter non-web-safe mode.
1. Injecting HTML/JavaScript with the &amp;lt;&amp;gt; tags 1 &amp;lt;script&amp;gt;alert(&amp;#39;XSS&amp;#39;)&amp;lt;/script&amp;gt; 1 &amp;#39;&amp;#39;;!--&amp;#34;&amp;lt;XSS&amp;gt;=&amp;amp;{()} 1 2 //The quotes around SRC can be omitted &amp;lt;SCRIPT SRC=http://ha.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>XSS</category><category>R&amp;D</category><category>Vulnerability</category><category>Frontend</category></item><item><title>Quickly Export Excel Files in Web Development (with Code)</title><link>https://www.chenshaowen.com/en/blog/how-to-export-excel-quickly-in-web-development.html</link><pubDate>Thu, 18 May 2017 17:51:05 +0000</pubDate><atom:modified>Thu, 18 May 2017 17:51:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-export-excel-quickly-in-web-development.html</guid><description>In web development you often run into the need to export data. This post mainly covers how to quickly export data and save it as an Excel file. 1. Frontend In web development, formatted data is usually displayed as a table. Below is an employee salary table; we will use</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Frontend</category><category>Data</category><category>Demo</category></item><item><title>XSS Principles and Construction</title><link>https://www.chenshaowen.com/en/blog/principle-and-construction-of-xss.html</link><pubDate>Tue, 16 May 2017 20:04:53 +0000</pubDate><atom:modified>Tue, 16 May 2017 20:04:53 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/principle-and-construction-of-xss.html</guid><description>XSS is an attack technique that executes JavaScript in the frontend. With the popularity of UGC sites, the data generated by users has surged, and the ever-denser network of data blocks makes it easier to carry out and spread XSS. The damage XSS causes includes: stealing user cookies and personal information; hijacking sessions and manipulating users&amp;rsquo; network data; launching DDoS attacks; tampering with pages, popping up ads, and so on.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>JavaScript</category><category>XSS</category><category>R&amp;D</category></item><item><title>The manage Command in Django</title><link>https://www.chenshaowen.com/en/blog/manage-command-in-django.html</link><pubDate>Mon, 15 May 2017 21:14:48 +0000</pubDate><atom:modified>Mon, 15 May 2017 21:14:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/manage-command-in-django.html</guid><description>Every Django project automatically generates a manage.py file. manage.py is a simple wrapper around django-admin; its job is to put the Django Project into the sys.path directory and set the DJANGO_SETTINGS_MODULE environment variable to the current Project&amp;rsquo;s settings.py file. In other words, the difference between django-admin and manage is that</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Tools</category><category>Command</category><category>R&amp;D</category></item><item><title>Meta Options in Django Models</title><link>https://www.chenshaowen.com/en/blog/django-model-meta.html</link><pubDate>Thu, 11 May 2017 15:48:41 +0000</pubDate><atom:modified>Thu, 11 May 2017 15:48:41 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-model-meta.html</guid><description>Define metadata for a model through an inner class &amp;ldquo;class Meta&amp;rdquo;, like this:
1 2 3 4 class Foo(models.Model): bar = models.CharField(max_length=30) class Meta: #...... Model metadata means: any data that is not a field
such as ordering options, admin options, and so on.
Below are all the Meta options you might use.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Database</category><category>Model</category><category>R&amp;D</category></item><item><title>Django Middleware</title><link>https://www.chenshaowen.com/en/blog/django-middleware.html</link><pubDate>Wed, 10 May 2017 19:39:12 +0000</pubDate><atom:modified>Wed, 10 May 2017 19:39:12 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-middleware.html</guid><description>1. __init__(self) In a middleware class, the __init__() method is used to perform system-wide initialization settings.
For performance reasons, each enabled middleware is initialized only once per server process. That is, __init__() is called only when the server process starts, and is not executed while handling an individual request.
For a middleware, the usual reason to define an __init__() method is to check whether it is needed at all.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Middleware</category><category>R&amp;D</category><category>Learning</category><category>Request Handling</category><category>Architecture</category></item><item><title>Introduction to the Django Standard Library</title><link>https://www.chenshaowen.com/en/blog/introduction-of-django-standard-library.html</link><pubDate>Wed, 10 May 2017 19:22:23 +0000</pubDate><atom:modified>Wed, 10 May 2017 19:22:23 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/introduction-of-django-standard-library.html</guid><description>Django&amp;rsquo;s standard library lives in the django.contrib package. Each subpackage is a standalone add-on feature package. These subpackages are generally independent of one another, though some django.contrib subpackages depend on other subpackages.
There is no hard requirement on the kinds of functions in django.contrib. Some of these packages ship with models (and therefore require you to install the corresponding database tables), while others consist of standalone middleware and template tags.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Compilation</category><category>Learning</category><category>R&amp;D</category></item><item><title>Building a Reusable Django App</title><link>https://www.chenshaowen.com/en/blog/how-to-build-reusable-django-app.html</link><pubDate>Fri, 05 May 2017 21:43:47 +0000</pubDate><atom:modified>Fri, 05 May 2017 21:43:47 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-build-reusable-django-app.html</guid><description>The team I work on is responsible for SaaS development and carries almost all of the center&amp;rsquo;s SaaS needs. Among these there are long-term maintenance projects and short-term crunch demo projects, and everyone wears several hats. Of course, the development platform is also open to other people to use, and the whole platform has hundreds if not thousands of SaaS applications.</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Management</category><category>R&amp;D</category><category>Architecture</category></item><item><title>Large-Scale Website Technical Architecture</title><link>https://www.chenshaowen.com/en/blog/book/large-web-technology-architecture.html</link><pubDate>Thu, 04 May 2017 21:39:11 +0000</pubDate><atom:modified>Thu, 04 May 2017 21:39:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/large-web-technology-architecture.html</guid><description>Subtitle: Core Principles and Case Studies
Author: Li Zhihui
Publisher: Publishing House of Electronics Industry
Year: 2013-9-1
ISBN: 9787121212000
Notes:
Without business demand for technology, you cannot cultivate an outstanding architect.
The author grew up alongside Taobao&amp;rsquo;s business growth.
The book explains the key technical points of website architecture mainly from several aspects: system performance, availability, scalability, extensibility, and security.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Architecture</category><category>Design</category></item><item><title>Introduction to Third-Party Login and Single Sign-On</title><link>https://www.chenshaowen.com/en/blog/third-party-login-and-single-sign-on.html</link><pubDate>Thu, 04 May 2017 20:41:35 +0000</pubDate><atom:modified>Thu, 04 May 2017 20:41:35 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/third-party-login-and-single-sign-on.html</guid><description>The session mechanism for login: HTTP is a stateless protocol, and every request a browser makes is independent of the others. But not every HTTP request is unrelated to state, so the browser and the server have to jointly maintain a state — this is the session mechanism. One approach: the first time the browser sends a request to the server, the server returns a sessionID to the browser, and every subsequent request from the browser carries that sessionID to verify the same user.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>DevOps</category><category>Authentication</category><category>SSO</category><category>R&amp;D</category><category>Architecture</category></item><item><title>Big Data</title><link>https://www.chenshaowen.com/en/blog/book/the-big-data.html</link><pubDate>Sun, 23 Apr 2017 21:10:24 +0000</pubDate><atom:modified>Sun, 23 Apr 2017 21:10:24 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-big-data.html</guid><description>Subtitle: A Revolution That Will Transform How We Live, Work, and Think
Author: [UK] Viktor Mayer-Schönberger
Publisher: Zhejiang People&amp;rsquo;s Publishing House
Publication Year: 2012-12
ISBN: 9787213052545</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Data</category><category>Big Data</category><category>Thinking</category></item><item><title>Reading and Writing Excel with Python</title><link>https://www.chenshaowen.com/en/blog/using-python-read-and-write-excel-data.html</link><pubDate>Sun, 16 Apr 2017 01:35:32 +0000</pubDate><atom:modified>Sun, 16 Apr 2017 01:35:32 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-python-read-and-write-excel-data.html</guid><description>Python and Excel are both commonly used for data processing, so passing data back and forth and handling computations between them is unavoidable. This article mainly introduces the Python-Excel family of libraries, and how to use the xlrd and xlwt libraries. 1. Common Libraries xlwings, openpyxl, pandas, win32com, xlsxwriter, DataNitro,</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Data</category><category>R&amp;D</category><category>Excel</category><category>Learning</category><category>Data Processing</category><category>pandas</category></item><item><title>Free Open Data Sources</title><link>https://www.chenshaowen.com/en/blog/collect-free-open-data-source.html</link><pubDate>Sat, 15 Apr 2017 11:06:28 +0000</pubDate><atom:modified>Sat, 15 Apr 2017 11:06:28 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/collect-free-open-data-source.html</guid><description>1. Economy World Bank
Gapminder
Economic, health, and social statistics covered by the World Health Organization and the World Bank
CIA, The World Factbook
Contains information on history, population, economy, government, infrastructure, and military affairs for 267 countries
National Bureau of Statistics of China latest macroeconomic data
Ministry of Industry and Information Technology A good deal of data is published here, especially data related to industrial operations and informatization</description><dc:creator>WeChat Official Account</dc:creator><category>Data</category><category>Data Source</category><category>Compilation</category><category>R&amp;D</category></item><item><title>The Moon and Sixpence</title><link>https://www.chenshaowen.com/en/blog/book/the-moon-and-sixpence.html</link><pubDate>Sun, 09 Apr 2017 12:57:38 +0000</pubDate><atom:modified>Sun, 09 Apr 2017 12:57:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-moon-and-sixpence.html</guid><description>Author: W. Somerset Maugham
Publisher: Tianjin People&amp;rsquo;s Publishing House
Publication year: 2016-1-20
ISBN: 9787201100159</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Life</category><category>Literature</category><category>Reading</category><category>Maugham</category></item><item><title>A Maverick Pig</title><link>https://www.chenshaowen.com/en/blog/book/a-maverick-pig.html</link><pubDate>Sat, 08 Apr 2017 00:03:08 +0000</pubDate><atom:modified>Sat, 08 Apr 2017 00:03:08 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/a-maverick-pig.html</guid><description>Author: Wang Xiaobo
Publisher: Northern Literature and Art Publishing House
Publication Year: 2006-4
ISBN: 9787531719199</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Life</category><category>Literature</category><category>Thoughts</category></item><item><title>You Just Look Like You're Working Hard</title><link>https://www.chenshaowen.com/en/blog/book/you-just-look-very-hard.html</link><pubDate>Tue, 04 Apr 2017 20:26:10 +0000</pubDate><atom:modified>Tue, 04 Apr 2017 20:26:10 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/you-just-look-very-hard.html</guid><description>Author: Li Shanglong
Publisher: China Friendship Publishing Company
Publication Year: 2015-7
ISBN: 9787505735361
Notes:
Better suited to college students who feel lost. The author dropped out of a military academy, became an English teacher at New Oriental, and eventually wrote screenplays and made films, living the life he chose through his own effort.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Life</category><category>Growth</category><category>Thoughts</category></item><item><title>Introducing the PaaS Platform App Engine 2.0</title><link>https://www.chenshaowen.com/en/blog/app-engine-2-0.html</link><pubDate>Tue, 04 Apr 2017 15:14:40 +0000</pubDate><atom:modified>Tue, 04 Apr 2017 15:14:40 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/app-engine-2-0.html</guid><description>Note:
A few brief words on a sharing session by a teammate. App Engine frees development from the tedious deployment and configuration process and provides full-fledged automated support services. Its Controller is the brain of App Engine, coordinating and controlling the operation of the whole engine. The slides mainly cover App Engine&amp;rsquo;s design approach and evolution, and also give thought to resource scheduling and failure disaster recovery.</description><dc:creator>WeChat Official Account</dc:creator><category>PaaS</category><category>Architecture</category><category>Platform</category><category>Introduction</category></item><item><title>Unified Login Service</title><link>https://www.chenshaowen.com/en/blog/unified-login-service.html</link><pubDate>Tue, 04 Apr 2017 10:20:45 +0000</pubDate><atom:modified>Tue, 04 Apr 2017 10:20:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/unified-login-service.html</guid><description>The platform currently includes multiple subsystems and multiple versions, and all versions use the same operations system. To make it easy for users to use multiple versions, we need to bind their QQ and WeChat accounts. In addition, to minimize the chance that a failure in some login system leaves</description><dc:creator>WeChat Official Account</dc:creator><category>Repost</category><category>Services</category><category>Authentication</category><category>Security</category><category>Architecture</category><category>R&amp;D</category></item><item><title>Marketing Research</title><link>https://www.chenshaowen.com/en/blog/book/marketing-research.html</link><pubDate>Mon, 03 Apr 2017 21:15:45 +0000</pubDate><atom:modified>Mon, 03 Apr 2017 21:15:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/marketing-research.html</guid><description>Author: Ronald F. Bush / Alvin C. Burns
Publisher: Renmin University of China Press
Publication year: 2011-3-1
ISBN: 9787300133362</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Marketing</category><category>Management</category><category>Reading</category><category>Research</category></item><item><title>The Next Twenty Years: Economic Megatrends — The Reality Volume</title><link>https://www.chenshaowen.com/en/blog/book/the-economic-trend-reality.html</link><pubDate>Sat, 25 Mar 2017 12:15:01 +0000</pubDate><atom:modified>Sat, 25 Mar 2017 12:15:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-economic-trend-reality.html</guid><description>Author: Shi Hanbing
Publisher: Shanghai University of Finance and Economics Press
Publication Year: 2014-7-1
ISBN: 9787564219239</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Economics</category><category>Thoughts</category></item><item><title>The Next Twenty Years: Economic Megatrends — The Future Volume</title><link>https://www.chenshaowen.com/en/blog/book/the-economic-trend-future.html</link><pubDate>Sat, 25 Mar 2017 12:09:51 +0000</pubDate><atom:modified>Sat, 25 Mar 2017 12:09:51 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-economic-trend-future.html</guid><description>Author: Shi Hanbing
Publisher: Shanghai University of Finance and Economics Press
Publication Year: 2014-7-1
ISBN: 9787564219352
Notes:
The author applies a fractal analysis to China&amp;rsquo;s debt, real estate, demographics, and food supply, and is deeply anxious about the current situation. He applies the same fractal analysis to the economic and political circumstances of geopolitical nations, explaining the reach of the US dollar, the unrivaled supremacy of financial warfare, and the contests between China and its neighbors such as Russia, India, Vietnam, and Japan.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Economics</category><category>Thoughts</category></item><item><title>jQuery Plugin Development</title><link>https://www.chenshaowen.com/en/blog/plugin-development-of-jquery.html</link><pubDate>Sun, 05 Mar 2017 17:16:43 +0000</pubDate><atom:modified>Sun, 05 Mar 2017 17:16:43 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/plugin-development-of-jquery.html</guid><description>1. Features of jQuery jQuery eliminates browser compatibility issues Traversing the DOM tree and selecting elements A large plugin library A utility function library, such as $.type(), $.extent(), and so on The core function of jQuery usually refers to a factory object, that is, the jQuery() function, or its more commonly used alias, the $() function.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>JavaScript</category><category>jQuery</category><category>R&amp;D</category><category>Plugin</category><category>Learning</category></item><item><title>Professional jQuery</title><link>https://www.chenshaowen.com/en/blog/book/professional-jquery.html</link><pubDate>Sun, 05 Mar 2017 15:39:16 +0000</pubDate><atom:modified>Sun, 05 Mar 2017 15:39:16 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/professional-jquery.html</guid><description>English title: Professional jQuery
Author: [US] Otero, [US] Lawrence
Publisher: Tsinghua University Press
Translator: Shi Hongbin
Publication year: 2013-04
ISBN: 9787302317845</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>JavaScript</category><category>Frontend</category><category>Learning</category></item><item><title>How to Measure Anything</title><link>https://www.chenshaowen.com/en/blog/book/data-decision-making.html</link><pubDate>Tue, 28 Feb 2017 21:07:03 +0000</pubDate><atom:modified>Tue, 28 Feb 2017 21:07:03 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/data-decision-making.html</guid><description>Author: Douglas W. Hubbard
Subtitle: The Big Data Era — the quantitative decision-making method used by Fortune 500 companies
Publisher: World Publishing Corporation
Translator: Deng Hongtao
Publication Year: 2013-09-01
ISBN: 9787510067327
Notes:
Measurement is used to reduce uncertainty, not to eliminate it.
The key to measurement is figuring out what to measure, and why the thing being measured matters.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Data</category><category>Decision Making</category><category>Management</category><category>Big Data</category></item><item><title>Antifragile</title><link>https://www.chenshaowen.com/en/blog/book/antifragile-things-that-gain-from-disorder.html</link><pubDate>Sat, 25 Feb 2017 12:53:20 +0000</pubDate><atom:modified>Sat, 25 Feb 2017 12:53:20 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/antifragile-things-that-gain-from-disorder.html</guid><description>Author: Nassim Nicholas Taleb (US)
Subtitle: Gaining from Uncertainty
Original title: Antifragile: Things That Gain from Disorder
Publisher: CITIC Press
Publication Year: 2014-01-01
ISBN: 9787508643335</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Game Theory</category><category>Thoughts</category><category>Risk</category></item><item><title>Dive Into Python</title><link>https://www.chenshaowen.com/en/blog/book/dive-into-python.html</link><pubDate>Fri, 24 Feb 2017 13:11:11 +0000</pubDate><atom:modified>Fri, 24 Feb 2017 13:11:11 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/dive-into-python.html</guid><description>Author: Mark Pilgrim
Publisher: Apress
Published: 2004-07-19
ISBN: 9781590593561</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Python</category><category>Learning</category><category>Programming</category><category>Reading</category></item><item><title>Getting Started with DDoS Attacks</title><link>https://www.chenshaowen.com/en/blog/ddos-101.html</link><pubDate>Thu, 23 Feb 2017 20:17:24 +0000</pubDate><atom:modified>Thu, 23 Feb 2017 20:17:24 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ddos-101.html</guid><description>1. What Is DDoS Take the Spring Festival ticket rush: the moment high-speed rail tickets go on sale, people all over the country send connection requests to the 12306 servers. The 12306 servers then either stop responding or respond slowly to web requests. That constitutes a DDoS attack — through a large number of concurrent requests, the target service is forced to become degraded, or even to shut down.</description><dc:creator>WeChat Official Account</dc:creator><category>Network</category><category>Security</category><category>DDoS</category><category>Getting Started</category></item><item><title>Reflection in Python: getattr</title><link>https://www.chenshaowen.com/en/blog/reflection-of-python.html</link><pubDate>Fri, 17 Feb 2017 20:46:34 +0000</pubDate><atom:modified>Fri, 17 Feb 2017 20:46:34 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/reflection-of-python.html</guid><description>1. Application Scenarios Control the program&amp;rsquo;s runtime flow through a configuration file. What a configuration file usually holds is a string, not an object. When debugging a program, inspect all the attribute values of an object. Dynamic module import. For the first scenario, reflection is the widely adopted approach. Many</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Reflection</category><category>R&amp;D</category><category>Learning</category></item><item><title>Telling Ain't Training</title><link>https://www.chenshaowen.com/en/blog/book/the-interactive-training.html</link><pubDate>Fri, 17 Feb 2017 09:29:44 +0000</pubDate><atom:modified>Fri, 17 Feb 2017 09:29:44 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-interactive-training.html</guid><description>Subtitle: New adult-training methods that make the learning process active and enjoyable
Author: Harold D. Stolovitch, Erica J. Keeps (US)
Publisher: Enterprise Management Publishing House
Publication year: 2012-1
ISBN: 9787802558861
Note:
It mainly discusses how interactive training can achieve very good training results, analyzes the training and learning process and psychology, and proposes four training methods along with some suggestions.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Training</category><category>Thoughts</category></item><item><title>Blockchain: An Innovation Triggered by Lower Credit Costs</title><link>https://www.chenshaowen.com/en/blog/block-chain-an-innovation-triggered-by-credit-cost-reduction.html</link><pubDate>Tue, 14 Feb 2017 09:19:48 +0000</pubDate><atom:modified>Tue, 14 Feb 2017 09:19:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/block-chain-an-innovation-triggered-by-credit-cost-reduction.html</guid><description>1. How Society Runs on Credit First, let&amp;rsquo;s do a Q&amp;amp;A:
@ask:Why can you ride the bus with just a card?
@answer:Because I topped it up.
@ask:Money? Then where did your money come from?
@answer:My monthly salary.
@ask:Why does the company pay you a salary every month?
@answer:We signed a contract.</description><dc:creator>WeChat Official Account</dc:creator><category>Thoughts</category><category>Data</category><category>Blockchain</category><category>Finance</category></item><item><title>The Black-Scholes Option Pricing Model</title><link>https://www.chenshaowen.com/en/blog/black-scholes-option-pricing-model.html</link><pubDate>Sun, 12 Feb 2017 10:23:51 +0000</pubDate><atom:modified>Sun, 12 Feb 2017 10:23:51 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/black-scholes-option-pricing-model.html</guid><description>1. The Significance of the Black-Scholes Option Pricing Model The Black-Scholes model and some of its variants have been widely used by option traders, investment banks, financial managers, insurers, and others. The expansion of derivative instruments has made international financial markets more efficient, but it has also made global markets more volatile.</description><dc:creator>WeChat Official Account</dc:creator><category>Finance</category><category>Trading</category><category>Options</category><category>Pricing</category></item><item><title>The Black Swan</title><link>https://www.chenshaowen.com/en/blog/book/the-black-swan.html</link><pubDate>Sat, 11 Feb 2017 17:09:35 +0000</pubDate><atom:modified>Sat, 11 Feb 2017 17:09:35 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-black-swan.html</guid><description>English title: The Black Swan
Subtitle: How to Deal with an Unpredictable Future
Author: Nassim Nicholas Taleb
Translator: Wan Dan
Publisher: CITIC Press
Publication Year: 2009-8
ISBN: 9787508616018
Notes:
The author uses his own experiences — the Lebanese war, a journalist&amp;rsquo;s war diary, a stock market crash, Yevgenia&amp;rsquo;s book — as his entry points, describing from personal experience this world that lives in uncertainty.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Life</category><category>Thoughts</category><category>Risk</category></item><item><title>Common Built-in Functions in Python</title><link>https://www.chenshaowen.com/en/blog/built-in-functions-in-python.html</link><pubDate>Sat, 11 Feb 2017 13:48:34 +0000</pubDate><atom:modified>Sat, 11 Feb 2017 13:48:34 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/built-in-functions-in-python.html</guid><description>Function Description abs(number) Returns the absolute value of a number apply(function[, args[, kwds]]) Calls the given function, optionally providing arguments all(iterable) Returns True if all elements of the iterable are true, otherwise False any(iterable) Returns True if any element of the iterable is true, otherwise False basestring() Abstract superclass of str and unicode, used for type checking bool(object) Returns True or False depending on the boolean value of object callable(object) Checks whether an object is callable chr(number) Returns the character whose ASCII code is the given number classmethod(func) Creates a class method from an instance method cmp(x, y) Compares x and y — returns a positive number if x&amp;gt;y; returns 0 if x==y complex(real[, imag]) Returns the complex number with the given real part (and optional imaginary part) delattr(object, name) Deletes the given attribute from the given object dict([mapping-or-sequence]) Constructs a dictionary, optionally from a mapping or a list of (key, value) pairs.</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>API</category><category>Functions</category><category>Learning</category><category>R&amp;D</category></item><item><title>What Is a Quant</title><link>https://www.chenshaowen.com/en/blog/what-is-the-quant.html</link><pubDate>Fri, 10 Feb 2017 19:23:05 +0000</pubDate><atom:modified>Fri, 10 Feb 2017 19:23:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-the-quant.html</guid><description>1. What a Quant Does A quant&amp;rsquo;s job is to design and implement mathematical models for finance, including derivative pricing, risk valuation, and predicting market behavior.
2. Types of Quants Desk quant, who develops pricing models used directly by traders. The advantage is being close to the money and the opportunities encountered in trading.</description><dc:creator>WeChat Official Account</dc:creator><category>Finance</category><category>Quant</category><category>Quantitative</category><category>Learning</category></item><item><title>Drawing Fractals with Python: Koch Curves, Julia Sets, and Mandelbrot Sets</title><link>https://www.chenshaowen.com/en/blog/drawing-2d-fractal-graph-using-python.html</link><pubDate>Wed, 25 Jan 2017 23:28:00 +0000</pubDate><atom:modified>Wed, 25 Jan 2017 23:28:00 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/drawing-2d-fractal-graph-using-python.html</guid><description>1. Koch Curve The Swedish mathematician Helge von Koch proposed the Koch curve in his 1904 paper &amp;ldquo;On a continuous curve without tangents, constructible from elementary geometry.&amp;rdquo; It is described as follows: Specify the length of a line segment \(l\) (this can be thought of as iteration 0) Divide this</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Math</category><category>R&amp;D</category><category>Fractal</category><category>Learning</category><category>Visualization</category><category>Drawing</category></item><item><title>Fractal Theory</title><link>https://www.chenshaowen.com/en/blog/fractal-theory.html</link><pubDate>Mon, 23 Jan 2017 17:53:31 +0000</pubDate><atom:modified>Mon, 23 Jan 2017 17:53:31 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/fractal-theory.html</guid><description>1. Fractal Theory 1.1 The Definition of a Fractal A fractal usually refers to a geometric shape that can be divided into several parts, each of which is approximately a reduced-scale copy of the whole — that is, it has the property of self-similarity.
1.2 The History of Fractal Research In the 17th century, Leibniz already pondered the problem of self-similarity.</description><dc:creator>WeChat Official Account</dc:creator><category>Diagram</category><category>Math</category><category>Learning</category><category>Fractal</category><category>General Knowledge</category></item><item><title>Permission Control in Django</title><link>https://www.chenshaowen.com/en/blog/django-permissions-control.html</link><pubDate>Sun, 22 Jan 2017 09:23:45 +0000</pubDate><atom:modified>Sun, 22 Jan 2017 09:23:45 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/django-permissions-control.html</guid><description>1. Django Built-in Permission Management 1.1 Permission Categories Permission Used to define User A&amp;rsquo;s permission on Task. User If User A has permission on Model B, then User A has the corresponding permission on all instances in Model B. The user_permission field of the User object is used to manage</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Development</category><category>Permissions</category><category>Python</category><category>R&amp;D</category><category>Learning</category><category>Security</category><category>RBAC</category><category>Authentication</category></item><item><title>Several Methods of Django Data Migration (with Code)</title><link>https://www.chenshaowen.com/en/blog/several-methods-of-django-data-migration.html</link><pubDate>Tue, 17 Jan 2017 23:29:15 +0000</pubDate><atom:modified>Tue, 17 Jan 2017 23:29:15 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/several-methods-of-django-data-migration.html</guid><description>1. Background In the course of Web development, migrating data between multiple environments (local, testing, and production) comes up often. This article mainly discusses the possible data migration paths involved in Django development, and seeks feasible methods for them. 2. Scenarios There are four data migration targets in total: the</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Data</category><category>Migration</category><category>R&amp;D</category></item><item><title>Thinking on the Cooperative Way Between PaaSer and SaaSer</title><link>https://www.chenshaowen.com/en/blog/thinking-on-the-cooperative-way-between-paas-and-saas-team.html</link><pubDate>Tue, 10 Jan 2017 22:13:42 +0000</pubDate><atom:modified>Tue, 10 Jan 2017 22:13:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/thinking-on-the-cooperative-way-between-paas-and-saas-team.html</guid><description>1. Work Scenario The team I am on has 20+ people and carries the responsibilities of both PaaS and SaaS development.
The people who develop PaaS, the PaaSer, are mainly responsible for developing and maintaining the PaaS platform, with the goal of providing the SaaS developers with the APIs and documentation they need.</description><dc:creator>WeChat Official Account</dc:creator><category>Cloud Services</category><category>Thoughts</category><category>PaaS</category><category>SaaS</category><category>R&amp;D</category></item><item><title>Vuejs Getting Started Practice</title><link>https://www.chenshaowen.com/en/blog/101-about-vuejs.html</link><pubDate>Mon, 02 Jan 2017 19:55:16 +0000</pubDate><atom:modified>Mon, 02 Jan 2017 19:55:16 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/101-about-vuejs.html</guid><description>1. What Problem We Ran Into If the features you implement are simple and both development and maintenance are easy, there would be no research into design patterns, frameworks, and related topics. It is precisely because Web systems are complex, requirements change quickly, there is a lot of reuse, there are many developers, and personnel handovers are frequent.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>Vue</category><category>Vuejs</category><category>Learning</category><category>R&amp;D</category></item><item><title>Automation Operations with Python</title><link>https://www.chenshaowen.com/en/blog/automation-operations-with-python-technique-and-best-practices.html</link><pubDate>Mon, 02 Jan 2017 18:12:29 +0000</pubDate><atom:modified>Mon, 02 Jan 2017 18:12:29 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/automation-operations-with-python-technique-and-best-practices.html</guid><description>Subtitle: Technique and Best Practices
English title: Automation Operations With Python Technique And Best Practices
Author: Liu Tiansi
Publisher: China Machine Press
Published: 2014-11-1
ISBN: 9787111483069
Notes:
Drawing on his own operations experience, the author describes in detail the use and configuration of a wide range of Python-based tools. It is a reference book well suited to Python operations personnel.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Python</category><category>Operations</category><category>Automation</category><category>Reading</category><category>Learning</category><category>Best Practices</category></item><item><title>A Look at Django and Directory Structure Practice</title><link>https://www.chenshaowen.com/en/blog/best-file-structure-of-django.html</link><pubDate>Sun, 01 Jan 2017 15:07:01 +0000</pubDate><atom:modified>Sun, 01 Jan 2017 15:07:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/best-file-structure-of-django.html</guid><description>1. What Django Is Django is a web development framework written in Python. It was initially used by its developers to manage news-content-focused websites, was open-sourced under the BSD license in July 2005, and formally established its foundation on June 17, 2008. Other Python web frameworks alongside Django include Tornado</description><dc:creator>WeChat Official Account</dc:creator><category>Django</category><category>Python</category><category>Architecture</category><category>R&amp;D</category></item><item><title>What Is DevOps</title><link>https://www.chenshaowen.com/en/blog/what-is-devops.html</link><pubDate>Sat, 31 Dec 2016 13:01:05 +0000</pubDate><atom:modified>Sat, 31 Dec 2016 13:01:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/what-is-devops.html</guid><description>1. Overview DevOps (a portmanteau of Development and Operations) is a culture and a movement that values communication and collaboration between software developers (Dev) and IT operations staff (Ops). By automating the processes of &amp;ldquo;software delivery&amp;rdquo; and &amp;ldquo;architecture change,&amp;rdquo; it makes building, testing, and releasing software faster, more frequent, and more reliable.</description><dc:creator>WeChat Official Account</dc:creator><category>Development</category><category>Thoughts</category><category>DevOps</category><category>Learning</category><category>Culture</category><category>Automation</category><category>Operations</category><category>R&amp;D</category></item><item><title>Case Study: Interaction Optimization for a Tool-Type Product</title><link>https://www.chenshaowen.com/en/blog/how-to-create-excellent-product-interaction.html</link><pubDate>Wed, 28 Dec 2016 20:05:13 +0000</pubDate><atom:modified>Wed, 28 Dec 2016 20:05:13 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-create-excellent-product-interaction.html</guid><description>My role covers full-stack development: I not only write backend logic in Python, but also build the frontend pages and interactions myself. The programs we develop are deployed on a PaaS platform, and since the developers are not professional frontend engineers, a Dreamweaver-like tool is provided to lower the barrier to entry.</description><dc:creator>WeChat Official Account</dc:creator><category>Sharing</category><category>Frontend</category><category>Product</category><category>R&amp;D</category><category>Interaction</category><category>UX</category></item><item><title>Learning and Using BWAPP</title><link>https://www.chenshaowen.com/en/blog/study-of-bwapp.html</link><pubDate>Sun, 25 Dec 2016 15:38:42 +0000</pubDate><atom:modified>Sun, 25 Dec 2016 15:38:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/study-of-bwapp.html</guid><description>1. Introduction to BWAPP buggy web Application, abbreviated BWAPP, is an open-source web application that packs in all kinds of common and recent vulnerabilities, with the goal of helping security enthusiasts, developers, and students find and prevent web vulnerabilities. It contains more than 100 vulnerabilities, covering every major known web vulnerability, including the OWASP Top 10 security risks, and most importantly it already includes the OpenSSL and ShellShock vulnerabilities.</description><dc:creator>WeChat Official Account</dc:creator><category>Security</category><category>Network</category><category>Learning</category><category>BWAPP</category></item><item><title>Microservices Architecture</title><link>https://www.chenshaowen.com/en/blog/micro-service.html</link><pubDate>Sun, 25 Dec 2016 00:19:01 +0000</pubDate><atom:modified>Sun, 25 Dec 2016 00:19:01 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/micro-service.html</guid><description>1. SOA Service-Oriented Architecture (SOA) holds that a complex enterprise IT system should be divided along different, reusable granularities, organizing a group of functionally related service providers together to serve consumers. Its purpose is to solve the information silo problem caused by different IT resources within an enterprise being unable to interconnect.</description><dc:creator>WeChat Official Account</dc:creator><category>Microservices</category><category>Services</category><category>Architecture</category><category>SOA</category><category>R&amp;D</category></item><item><title>Strategy for Building a Corporate Domain Portfolio</title><link>https://www.chenshaowen.com/en/blog/strategy-of-company-domains.html</link><pubDate>Sat, 24 Dec 2016 21:14:05 +0000</pubDate><atom:modified>Sat, 24 Dec 2016 21:14:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/strategy-of-company-domains.html</guid><description>Today&amp;rsquo;s enterprises run many lines of business and often need a large number of domains to support their growth. This article looks at four aspects — choosing enterprise domains, domains and brand building, site SEO, and site security — and asks how an enterprise should plan and build its own domain system.</description><dc:creator>WeChat Official Account</dc:creator><category>Domain Names</category><category>Operations</category><category>Security</category><category>SEO</category><category>Management</category></item><item><title>Convict Conditioning</title><link>https://www.chenshaowen.com/en/blog/book/convict-conditioning.html</link><pubDate>Wed, 21 Dec 2016 19:38:05 +0000</pubDate><atom:modified>Wed, 21 Dec 2016 19:38:05 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/convict-conditioning.html</guid><description>Subtitle: How to Build Superhuman Strength and Survival Power Using Lost Techniques
Original title: Convict Conditioning
Author: Paul Wade (USA)
Publisher: Beijing Science and Technology Press
Published: 2013-10-1
ISBN: 9787530467558</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Fitness</category><category>Exercise</category><category>Reading</category><category>Health</category></item><item><title>Burpsuite in Practice and Web Unauthorized Access Attacks</title><link>https://www.chenshaowen.com/en/blog/burpsuite-web-attack-detection.html</link><pubDate>Fri, 16 Dec 2016 16:15:54 +0000</pubDate><atom:modified>Fri, 16 Dec 2016 16:15:54 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/burpsuite-web-attack-detection.html</guid><description>1. Introduction to Burpsuite Burp Suite is an integrated platform for attacking web applications. It contains many tools and designs many interfaces for those tools, in order to speed up the process of attacking an application. All the tools share one powerful, extensible framework that can handle and display HTTP</description><dc:creator>WeChat Official Account</dc:creator><category>Network</category><category>Security</category><category>Attack</category><category>Web</category><category>Burpsuite</category></item><item><title>A Successful Git Branching Model</title><link>https://www.chenshaowen.com/en/blog/a-successful-git-branching-model.html</link><pubDate>Sun, 04 Dec 2016 20:34:03 +0000</pubDate><atom:modified>Sun, 04 Dec 2016 20:34:03 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/a-successful-git-branching-model.html</guid><description>This article is built around Git, the tool that controls all of our source code.
1. Why Git? For an in-depth discussion of the pros and cons of git versus centralized source control systems, see here. There has been far too much heated argument on this subject. As a developer, I currently prefer Git over other tools.</description><dc:creator>WeChat Official Account</dc:creator><category>Translation</category><category>Tools</category><category>Git</category><category>R&amp;D</category><category>Branching Model</category></item><item><title>Chrome Extension Development</title><link>https://www.chenshaowen.com/en/blog/how-to-develop-chrome-plugin.html</link><pubDate>Sun, 04 Dec 2016 15:19:06 +0000</pubDate><atom:modified>Sun, 04 Dec 2016 15:19:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/how-to-develop-chrome-plugin.html</guid><description>1. Ways to Extend Chrome: Extensions, Plugins, Apps Google Chrome has come a long way. It is no longer just a browser but more like a platform, where you can install the services you need in a personalized way, and through which you can also publish services of your own. Today there are three main ways to extend the browser&amp;rsquo;s functionality:</description><dc:creator>WeChat Official Account</dc:creator><category>Development</category><category>Frontend</category><category>Chrome</category><category>Extension</category></item><item><title>Professional JavaScript for Web Developers (3rd Edition)</title><link>https://www.chenshaowen.com/en/blog/book/professional-javascript-for-web.html</link><pubDate>Sat, 03 Dec 2016 11:44:19 +0000</pubDate><atom:modified>Sat, 03 Dec 2016 11:44:19 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/professional-javascript-for-web.html</guid><description>English title: Professional JavaScript for Web
Author: [US] Nicholas C. Zakas
Publisher: Turing Programming Series
Publication year: 2012-3-29
ISBN: 9787115275790</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Frontend</category><category>JavaScript</category><category>Learning</category></item><item><title>JavaScript Event Handling Mechanism</title><link>https://www.chenshaowen.com/en/blog/js-event-handle-mechanism.html</link><pubDate>Tue, 29 Nov 2016 21:45:06 +0000</pubDate><atom:modified>Tue, 29 Nov 2016 21:45:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/js-event-handle-mechanism.html</guid><description>1. Event Handling Models: Bubbling and Capturing 1 2 3 &amp;lt;div id=&amp;#34;outer&amp;#34;&amp;gt; &amp;lt;p id=&amp;#34;inner&amp;#34;&amp;gt;Click!&amp;lt;/p&amp;gt; &amp;lt;/div&amp;gt; In the code above, a div element contains a p child element. If both elements have a click handler, how do we know which one will be triggered first?
To solve this problem, Microsoft and Netscape proposed two almost completely opposite concepts.</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>JavaScript</category><category>Events</category><category>R&amp;D</category></item><item><title>Getting Started with Character Encoding in Python</title><link>https://www.chenshaowen.com/en/blog/python-coding.html</link><pubDate>Tue, 08 Nov 2016 20:21:42 +0000</pubDate><atom:modified>Tue, 08 Nov 2016 20:21:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/python-coding.html</guid><description>Background: I had just finished a Django data-query web project. The data came from internal API queries, and every query had to call several APIs to fetch the data and render it on the front-end page. Since the relevant data does not change often, I designed a cache to improve</description><dc:creator>WeChat Official Account</dc:creator><category>Python</category><category>Encoding</category><category>R&amp;D</category><category>Learning</category></item><item><title>Using Celery in Django</title><link>https://www.chenshaowen.com/en/blog/using-celery-in-django.html</link><pubDate>Tue, 25 Oct 2016 07:57:59 +0000</pubDate><atom:modified>Tue, 25 Oct 2016 07:57:59 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/using-celery-in-django.html</guid><description>Scenario one: the company is preparing to push an email announcement to all employees. Using a wrapped mail library API and looping over every employee to push the emails will leave the main program stuck in the loop and unable to respond, which is not what we want — we want to be able to carry on with other operations normally after clicking execute.</description><dc:creator>WeChat Official Account</dc:creator><category>Celery</category><category>Django</category><category>Python</category><category>Asynchronous</category><category>R&amp;D</category></item><item><title>Bond Terminology</title><link>https://www.chenshaowen.com/en/blog/bond-term.html</link><pubDate>Fri, 26 Aug 2016 16:23:14 +0000</pubDate><atom:modified>Fri, 26 Aug 2016 16:23:14 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/bond-term.html</guid><description>1. Class C Accounts Settlement members of the interbank bond market are divided into Class A members, Class B members, and Class C members. Class A accounts are mainly commercial banks; Class B accounts are rural credit institutions, securities firms, funds, and insurers; Class C accounts are mainly non-financial institutional legal entities, whose trading settlement must be entrusted to a Class A member to handle on their behalf.</description><dc:creator>WeChat Official Account</dc:creator><category>Bonds</category><category>Finance</category><category>Learning</category><category>Terminology</category><category>Personal Finance</category></item><item><title>Liar's Poker</title><link>https://www.chenshaowen.com/en/blog/book/liars-poker.html</link><pubDate>Wed, 24 Aug 2016 17:17:23 +0000</pubDate><atom:modified>Wed, 24 Aug 2016 17:17:23 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/liars-poker.html</guid><description>Subtitle: Wall Street&amp;rsquo;s Investment Game
English title: Liar&amp;rsquo;s Poker
Author: [US] Michael Lewis
Publisher: CITIC Press
Publication year: 2007-1
ISBN: 9787508607559</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Game Theory</category><category>Finance</category><category>Wall Street</category></item><item><title>Merrill Lynch Investment Clock</title><link>https://www.chenshaowen.com/en/blog/investment-clock.html</link><pubDate>Wed, 24 Aug 2016 11:06:59 +0000</pubDate><atom:modified>Wed, 24 Aug 2016 11:06:59 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/investment-clock.html</guid><description>The Merrill Lynch Investment Clock theory is a method that links assets, industry rotation, the bond yield curve, and the four stages of the economic cycle. It is a very practical tool for guiding investment cycles.
The analytical framework of the Merrill Lynch Investment Clock can help investors identify the important turning points of the economic cycle.</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Investing</category><category>Finance</category><category>Economics</category></item><item><title>Core Python Programming (2nd Edition)</title><link>https://www.chenshaowen.com/en/blog/book/core-python-programming-2nd.html</link><pubDate>Tue, 23 Aug 2016 09:55:49 +0000</pubDate><atom:modified>Tue, 23 Aug 2016 09:55:49 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/core-python-programming-2nd.html</guid><description>Chinese Title: Python核心编程（第二版 English Title: Core Python Programming, 2nd Edition Author: [US] Wesley J. Chun Publication Year: 2008-06 ISBN: 9787115178503</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Python</category><category>Learning</category><category>Programming</category><category>Reading</category></item><item><title>The Impact of New Domain Suffixes on the Internet</title><link>https://www.chenshaowen.com/en/blog/influence-of-new-gtld-on-the-internet.html</link><pubDate>Thu, 18 Aug 2016 09:00:48 +0000</pubDate><atom:modified>Thu, 18 Aug 2016 09:00:48 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/influence-of-new-gtld-on-the-internet.html</guid><description>1. The Past and Present of ICANN ICANN, The International Corporation for Assigned Names and Numbers, was founded in 1998 and is responsible for allocating Internet resources such as domain names and IP addresses. ICANN&amp;rsquo;s predecessor was IANA (Internet Assigned number Authority), which for a long time was funded directly by the U.</description><dc:creator>WeChat Official Account</dc:creator><category>Domain Names</category><category>Internet</category><category>Operations</category><category>Thoughts</category></item><item><title>The Troubled Wall Street</title><link>https://www.chenshaowen.com/en/blog/book/the-troubled-wall-street.html</link><pubDate>Thu, 18 Aug 2016 08:47:38 +0000</pubDate><atom:modified>Thu, 18 Aug 2016 08:47:38 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-troubled-wall-street.html</guid><description>Author: Yu Yang Subtitle: The Experience of a Chinese Trader Publication Year: 2011-3-2 ISBN: 9787300132440 Notes: ROE = 净利润／股东权益(Net Profit / Equity) =（净利润/销售收入）*（销售收入</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Trading</category></item><item><title>Domain Name Registration and Value Analysis</title><link>https://www.chenshaowen.com/en/blog/value-of-domain.html</link><pubDate>Thu, 11 Aug 2016 09:05:06 +0000</pubDate><atom:modified>Thu, 11 Aug 2016 09:05:06 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/value-of-domain.html</guid><description>1. What Is a Domain Name 1.1 The Composition of a Domain Name The complete domain name of this site should look like this: www.chenshaowen.com.
Note the dot at the very end, which can usually be omitted. Reading a domain name from back to front, .com is the top-level domain, chenshaowen is the second-level domain, and www is the communication protocol.</description><dc:creator>WeChat Official Account</dc:creator><category>Domain Names</category><category>Value</category><category>Operations</category><category>Learning</category></item><item><title>The Story of the Unicorn</title><link>https://www.chenshaowen.com/en/blog/story-unicorn.html</link><pubDate>Wed, 10 Aug 2016 14:07:30 +0000</pubDate><atom:modified>Wed, 10 Aug 2016 14:07:30 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/story-unicorn.html</guid><description>Long, long ago, there was a unicorn forest with many, many great trees. In the forest lived a mother unicorn and a little unicorn, along with lots and lots of small animals.
The mother unicorn had a very beautiful horn growing on her head, and it looked lovely there. Her horn was magical: when a little rabbit got hurt, the mother unicorn touched it with her horn, and the sparkles that fell from the horn landed on the rabbit&amp;rsquo;s wound, and the rabbit&amp;rsquo;s injury healed right away.</description><dc:creator>WeChat Official Account</dc:creator><category>Unicorn</category><category>Story</category><category>Life</category><category>Literature</category><category>Parenting</category></item><item><title>The Ascent of Money</title><link>https://www.chenshaowen.com/en/blog/book/the-ascent-of-money.html</link><pubDate>Tue, 26 Jul 2016 10:43:50 +0000</pubDate><atom:modified>Tue, 26 Jul 2016 10:43:50 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/the-ascent-of-money.html</guid><description>Chinese title: 货币崛起 - How Finance Affects World History English title: The Ascent of Money: A Financial History of the World Author: Niall Ferguson (UK) Publication Year: 2009-6 ISBN: 9787508615073 Notes: Money is in fact a matter of trust, even a kind of faith: trust is embodied</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Currency</category><category>Finance</category><category>History</category></item><item><title>Program Trading - CTP</title><link>https://www.chenshaowen.com/en/blog/ctp-101.html</link><pubDate>Wed, 20 Jul 2016 08:55:13 +0000</pubDate><atom:modified>Wed, 20 Jul 2016 08:55:13 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/ctp-101.html</guid><description>1. Introduction to the Comprehensive Trading Platform (CTP) The Comprehensive Trading Platform is a futures brokerage business management system developed by Shanghai Futures Information Technology Co., Ltd. for futures brokerage firms, based on the trading system of the Shanghai Futures Exchange. The whole system consists of three major subsystems: trading, risk control (abbreviated as risk control) and settlement.</description><dc:creator>WeChat Official Account</dc:creator><category>Program Trading</category><category>Trading Platform</category><category>Compilation</category><category>Finance</category><category>Futures</category><category>Learning</category></item><item><title>The Nature of Finance</title><link>https://www.chenshaowen.com/en/blog/book/reserve-crisis.html</link><pubDate>Tue, 19 Jul 2016 08:34:34 +0000</pubDate><atom:modified>Tue, 19 Jul 2016 08:34:34 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/reserve-crisis.html</guid><description>Chinese title: 金融的本质 - Bernanke&amp;rsquo;s Four Lectures on the Federal Reserve English title: The Federal Reserve and the Financial Crisis Author: Ben S. Bernanke (US) Publication Year: 2014-4 ISBN: 9787508644097 Notes: The main cause of the 2008 financial crisis was this: financial institutions were overconfident in</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Finance</category><category>Economics</category><category>Federal Reserve</category></item><item><title>Positioning</title><link>https://www.chenshaowen.com/en/blog/book/positioning.html</link><pubDate>Thu, 07 Jul 2016 08:21:53 +0000</pubDate><atom:modified>Thu, 07 Jul 2016 08:21:53 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/positioning.html</guid><description>Chinese title: 定位 - The Most Influential Marketing Concept in American History English title: Positioning - The Battle for Your Mind Author: Jack Trout / Al Ries Notes: For a new industry or product, the first company finds it easy to make a deep impression in the customer&amp;rsquo;s mind;</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Market</category><category>Marketing</category><category>Reading</category><category>Branding</category></item><item><title>Ghost Source Code Analysis (Part 1): Directory Structure</title><link>https://www.chenshaowen.com/en/blog/source-analysis-of-ghost-1.html</link><pubDate>Thu, 30 Jun 2016 08:53:53 +0000</pubDate><atom:modified>Thu, 30 Jun 2016 08:53:53 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/source-analysis-of-ghost-1.html</guid><description>Ghost version:&amp;ldquo;version&amp;rdquo;: &amp;ldquo;0.9.0-beta.2&amp;rdquo;
|&amp;mdash; content Content directory
| |&amp;mdash; apps directory, currently empty; apps may be deployed directly on Ghost in the future
| |&amp;mdash; data Database folder
| |&amp;mdash; images Image folder
| |&amp;mdash; themes Ghost theme folder
|&amp;mdash; core Core module directory
| |&amp;mdash; client Client-side code folder</description><dc:creator>WeChat Official Account</dc:creator><category>Ghost</category><category>Source Code</category><category>Node.js</category><category>Blog</category><category>Learning</category><category>R&amp;D</category></item><item><title>Frontend Automated Build Tool gulpjs</title><link>https://www.chenshaowen.com/en/blog/front-auto-build-tools-gulp.html</link><pubDate>Tue, 28 Jun 2016 21:59:04 +0000</pubDate><atom:modified>Tue, 28 Jun 2016 21:59:04 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/front-auto-build-tools-gulp.html</guid><description>1. Frontend Automated Build Tools When dealing with frontend scenarios, you write CSS with Less, HTML with Jade, modularize with Browserify, and add MD5 hashes to resources for non-overwriting deployments. If all this work were done purely by hand, the efficiency would be extremely low. A frontend automated build tool</description><dc:creator>WeChat Official Account</dc:creator><category>Frontend</category><category>gulp</category><category>Tools</category><category>R&amp;D</category><category>Build</category><category>Learning</category><category>Automation</category></item><item><title>Generating and Using Let's Encrypt Certificates</title><link>https://www.chenshaowen.com/en/blog/generate-letsencrypt-ssl.html</link><pubDate>Tue, 28 Jun 2016 10:28:53 +0000</pubDate><atom:modified>Tue, 28 Jun 2016 10:28:53 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/generate-letsencrypt-ssl.html</guid><description>1. SSL Certificates Let&amp;rsquo;s start with a few concepts.
1.1 Digital Certificates A digital certificate contains the public or private key used for encryption, along with some additional identity information. Anyone can use the relevant tools to generate their own digital certificate, for encrypting files and email, or for securing communications.</description><dc:creator>WeChat Official Account</dc:creator><category>HTTPS</category><category>Security</category><category>Security Certificates</category><category>Certificates</category><category>Operations</category></item><item><title>Telnet and SSH Principles</title><link>https://www.chenshaowen.com/en/blog/telnet-ssh-key.html</link><pubDate>Mon, 27 Jun 2016 17:58:19 +0000</pubDate><atom:modified>Mon, 27 Jun 2016 17:58:19 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/telnet-ssh-key.html</guid><description>This article mainly introduces the communication principles of Telnet and SSH, and analyzes their working flow during communication.
1. Telnet No matter what type of terminal a Telnet protocol connection uses, communication is converted to NVT (Net Virtual Terminal) format. The Network Virtual Terminal, NVT, is the foundation of Telnet&amp;rsquo;s heterogeneous, cross-platform nature.</description><dc:creator>WeChat Official Account</dc:creator><category>SSH</category><category>Telnet</category><category>Protocols</category><category>Network</category><category>Operations</category></item><item><title>An Overview of Anonymous Networks</title><link>https://www.chenshaowen.com/en/blog/anonymous-network.html</link><pubDate>Mon, 27 Jun 2016 11:24:44 +0000</pubDate><atom:modified>Mon, 27 Jun 2016 11:24:44 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/anonymous-network.html</guid><description>Anonymous communication was proposed by Chaum, who put forward an anonymous communication algorithm based on Mix nodes. A Mix node receives messages from multiple senders, mixes and processes these messages, and then transmits them to the receivers, thereby concealing the identity information of the senders and receivers and achieving anonymity.</description><dc:creator>WeChat Official Account</dc:creator><category>Anonymous Network</category><category>Tor</category><category>Security</category><category>Network</category><category>Learning</category></item><item><title>Peers Inc</title><link>https://www.chenshaowen.com/en/blog/book/peersinc.html</link><pubDate>Mon, 27 Jun 2016 08:24:42 +0000</pubDate><atom:modified>Mon, 27 Jun 2016 08:24:42 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/book/peersinc.html</guid><description>Chinese title: 共享经济 - Rebuilding the Future Business Model English title: Peers Inc: How People and Platforms Are Inventing the Collaborative Economy and Reinventing Capitalism Author: Robin Chase (US) Publication Year: 2015-9-25 ISBN: 9787213067853 Notes: Taking Zipcar, the company she founded, as her entry point, and by</description><dc:creator>WeChat Official Account</dc:creator><category>Books</category><category>Sharing</category><category>Market</category></item><item><title>Enabling HTTP/2 in Nginx</title><link>https://www.chenshaowen.com/en/blog/nginx-open-http2.html</link><pubDate>Thu, 23 Jun 2016 21:20:17 +0000</pubDate><atom:modified>Thu, 23 Jun 2016 21:20:17 +0000</atom:modified><guid>https://www.chenshaowen.com/en/blog/nginx-open-http2.html</guid><description>This article mainly covers how to install Nginx from source on Linux and enable HTTP/2, and it also compares the speed of accessing this site over HTTP/1.1 versus HTTP/2.0.
1. Building and Installing Nginx First you need to download Nginx and a few of its dependencies. Zlib compresses data when a web request is transferred, saving bandwidth; PCRE matches URLs with regular expressions for routing and dispatch; OpenSSL or LibreSSL, the secure sockets algorithm library, provides HTTPS support.</description><dc:creator>WeChat Official Account</dc:creator><category>Nginx</category><category>HTTP/2</category><category>Operations</category><category>Network</category><category>Performance</category></item></channel></rss>