Logo Ricky
  • Home
  • About
  • More
    Skills Experiences Education Projects
  • Posts
  • Notes
  • Activities
  • Transform
  • English
    English Chinese
  • Dark Theme
    Light Theme Dark Theme System Theme
Logo Inverted Logo
  • Posts
  • 2017
  • 2018
  • 2019
  • 2020
  • 2021
  • 2022
  • 2023
  • 2024
  • 2025
  • 2026
  • /etc/shadow and Creating yescrypt, MD5, SHA-256, and SHA-512 Password Hashes
  • 15 Rules of Channels and Their Implementation
  • 5 DevSecOps open source projects to know
  • 6 YAML Features most programmers don't know
  • 6首國際最強公認催眠曲
  • [Community] Cisco UCS CIMC series
  • [Golang] Use build tags for different build configs
  • [Juniper Firewall] command
  • [Kubernetes] Service Overview
  • [Notes] Build an Ubuntu remote desktop environment on GCP
  • [Share] Keychain - Pendant from a Type 57 rifle bayonet scabbard
  • [Translated] Go inline strategy and limitations
  • A Brief Look at Go Iterators
  • A Concise Go embed Tutorial
  • A fast and powerful log viewer and processor that converts JSON logs or logfmt logs into a clear human-readable format.
  • A python script that allows your terminal to snow.
  • A10
  • Abount Ansible Hosts
  • Add SFTP user and share directory
  • Advanced macOS Command-Line Tools
  • Advanced Shell Scripting Techniques: Automating Complex Tasks with Bash
  • Aliyun CDN Cache Rules
  • An easy way to identify virtualization technology
  • An introduction to hacker tools: the tip of the iceberg
  • Ancient Time Units
  • Ansible Introduction
  • ansible.builtin.slurp - read file content
  • Applying HTTPS Certificates for CDN
  • Argo CD ApplicationSet Controller: The World Turns for Me!
  • Arp notes
  • Avalon (The Resistance: Avalon)
  • Avoiding the Top 10 NGINX Configuration Mistakes - NGINX
  • Back up databases with mydumper
  • Backup FortiOS config with Ansible - with RestAPI
  • Bash Bitwise Operators
  • Basic kubeadm usage notes (by request)
  • Best Practices for Writing Bash Scripts
  • Best V2Ray One-Click Install & Management Script
  • Bind JSON with jsoniter in Gin
  • BIRD and BGP: a beginner's kickoff
  • Black Hat Go
  • Build a Lightweight Docker Image for Your Go App? | IT Man
  • Build a Private Object Storage with Traefik v3 and MinIO in Docker
  • Bypass X-Frame-Options with Nginx
  • Cannot set command timeout per task with network_cli
  • Cloudflare Traffic sequence
  • Cloudflare Tunnel
  • Cloudflare Zero Trust
  • Common GitBook plugins
  • Common shell scripting tips
  • Configuring SSH Keys for Multiple GitHub Accounts
  • Container security fundamentals
  • Containers from scratch
  • Containers From Scratch by Golang (feat. Liz Rice)
  • Convert a List to a List of Dicts
  • Convert Cloudflare WARP to an HTTP Proxy
  • Convert Command Output to an Image
  • Convert your codebase into a single LLM prompt.
  • Create macOS DMG and Bootable ISO
  • CS Visualized: Useful Git Commands
  • Data Center Notes
  • Database Fundamentals
  • datavizproject
  • Day 19 BGP Protocol (1)
  • Day 28 - Introduction to Useful Third-Party Kubernetes Tools
  • Dedicated Server CPU Frequency Maximization Guide
  • Deploying OpenVPN with AD domain authentication
  • Do you understand the Nginx request processing flow?
  • Docker Containers Can't Access the Internet? NAT Configuration Guide for nftables
  • Docker Introduction
  • Docker Security Best Practices: Cheat Sheet
  • Docker Tips: Using Docker Config
  • docker-compose yaml problem
  • Dockertest: A Fast Way to Set Up Integration Test Environments
  • Draw Diagrams With Markdown
  • Elasticsearch Study Notes
  • Emoji Regular expression
  • Enable GitLab project integration: Mattermost slash commands
  • Everyone Needs an HTTP Proxy to Debug
  • Everything About MTU and MSS
  • Excessive Errors from `sentry.lang.javascript.processor: SoftTimeLimitExceeded()`
  • Expose your local web server to the internet with a public URL.
  • Faster Multi-Platform Builds: Dockerfile Cross-Compilation Guide
  • Fetch GraphQL schema information
  • Fighting DDoS: nginx, iptables, and fail2ban
  • Fighting ISP Cache Hijacking Again with iptables
  • Firewall Update
  • Fix Nginx 500 errors (too many open files, connection)
  • Fixing Disk Space Not Freed on Linux
  • Force file download with Nginx
  • Fortigate Management Interface in HA Mode
  • Getting Started with GitHub Actions
  • Gin documentation (Chinese)
  • Git force push
  • GitLab CI Can Automatically Check Code Quality! How to Use SonarQube for Code Quality Checks?
  • Gitlab-CI Introduction
  • Gluetun: Route Docker Containers Through a VPN, Disconnect on No Network
  • Go 1.21 GA PGO Optimization You Can't Grasp in One Read — A Try on WebP Server Go
  • Go AES Encryption and Decryption in Three Modes (CBC/ECB/CFB)
  • Go Articles
  • Go code refactoring : the 23x performance hunt
  • Go Generics Beginner Notes
  • Go High-Performance Programming Handbook (Long Read)
  • Go leetcode
  • Go Modules workflow for private Git repositories
  • Go Patterns
  • Go pprof in Practice
  • Go Practical Guide: Execute Lua Scripts with go-redis
  • Go Protobuf: The New Opaque API
  • Go string format
  • Go Style Decisions - Pass values
  • Go Tool Trace
  • go-mysql-elasticsearch-benchmarking
  • go-synctest
  • Golang benchmarks
  • Golang os/exec usage (notes)
  • Golang Service Exceeded File Handle Limit (too many open files)
  • Golang Tips
  • Google Cloud Platform(GCP): Access Linux Server using GUI running in GCP instance using Windows Remote Desktop Connection.
  • Google Infra
  • Google Search Operators: The Complete List (44 Advanced Operators)
  • GraphQL Introspection Query
  • HA command
  • Harden a Server with Fail2Ban + nftables
  • Hide Within Cloudflare's Global Network
  • High Performance Go Workshop
  • How Core Git Developers Configure Git
  • How Does Nginx Defend Against DDoS?
  • How Go Reads a 16GB File in 25 Seconds
  • How I configure my Git identities
  • How Nginx Hides Upstream Errors
  • How Terminals Work
  • How to automatically resize virtual box disk with vagrant
  • How to capture web pages and long screenshots with Chrome DevTools?
  • How to Choose a Go File Reading Approach
  • How to configure time zone and NTP on RHEL7/CentOS7
  • How to Create Temporary Files in Bash: mktemp and trap
  • How to deal with a 50GB large csv file in r language?
  • How to Delete Files With Names That Contain Non-printable Characters
  • How to deploy on remote Docker hosts with docker-compose
  • How to Detect RAID Information in Linux
  • How to Enable SNMP on a Switch
  • How to Install Fedora Linux on Surface Go 2 to Boost Entry-Level Tablet Performance
  • How to Make an iPhone Ringtone: Turn an MP3 into a Ringtone or Alarm
  • How to Make Output Overwrite the Same Line in a Terminal
  • How to use a here documents to write data to a file in bash script
  • How to Use which on an Aliased Command
  • htop explained
  • I can feel the speed — optimize zsh and oh my zsh cold start
  • I Replaced Redis with PostgreSQL (And It's Faster)
  • I use Zip Bombs to Protect my Server
  • Illustrating How Data Alignment Affects Memory Usage in Go
  • In 2020, use the latest NGINX ngx_http_geoip2 module to block IPs by country or region
  • Inspecting Web Views in macOS
  • Install Chrome OS
  • Install Font Libraries and Chinese Fonts on Linux CentOS 7
  • Install PowerDNS and PowerDNS-Admin on Ubuntu 22.04|20.04|18.04
  • Introduction to Git internals
  • Is there a regular expression to detect a valid regular expression?
  • iTerm2 features I find useful
  • Jinja docx template, avoiding new line in nested for
  • Juniper notes
  • Kubernetes Runtime Explained in Plain Language
  • Kubernetes Without kube-proxy
  • Let Zsh read macOS system proxy settings and set env vars
  • Lightweight Linux Distributions For Older PCs
  • Linkerd 2.8 - Build a Simple and Secure Multi-Cluster Kubernetes Architecture
  • Little Git Tricks: Use .mailmap to Merge Different Authors
  • llamafile - Distribute and run LLMs with a single file.
  • LLM Visualization
  • LLMs Hackmd Docs
  • Load Balancing with iptables and ip rule
  • LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite
  • LVM - lvg and lvol
  • Mac Niche App Recommendations and Workflow Share (2024)
  • macOS Tips & Tricks
  • Makefiles for Web Projects: Manage Your Environment Workflow
  • Marp教學:Markdown搭配VS Code做簡報,快速輸出為PPTX或PDF,提昇做簡報效率
  • Misspelling, missing collection, or incorrect module path for fortios_system_config_backup_restore
  • Monitoring HTTP Requests on a Network Interface in Real Time
  • More Powerful Go Execution Tracing
  • Mosdns-X
  • Mount a Synology NAS folder on CentOS 7
  • Mount AWS S3 Bucket On Amazon EC2
  • My Productivity Mac Settings and Apps
  • Netcat (Linux nc) Practical Examples for Network Admins
  • New LibSSH Connection Plugin for Ansible Network Replaces Paramiko, Adds FIPS Mode Enablement
  • Nginx HTTPS with Basic Auth reverse proxy for VMware ESXi 6.5 fixed VMRC /screen
  • Nginx if 避坑指南
  • NGINX Native ACME Support: Rethinking TLS Automation from the Ground Up
  • Nginx notes
  • Nginx request_time and upstream_response_time explained
  • Nginx SSL/TLS configuration with TLSv1.2 and TLSv1.3 - ECDHE and strong ciphers suite (Openssl 1.1.1)
  • nginx 添加第三方nginx_upstream_check_module 模块实现健康状态检测
  • Objective-See: An Open Source Project Org for Apple Privacy and Security
  • OIDC(OpenID Connect) 简介
  • On High Availability Systems
  • onion-mirror
  • OpenResty + Redis: Block High-Frequency IPs
  • parqeye
  • Parse Command Line Arguments in Bash
  • Percona config
  • Pitfalls When Parsing Binary Data in Go
  • Pokemon Legends: Arceus - Two Playthroughs Completed
  • Printing ASCII Art in the Shell
  • Privacy Badger: A Free EFF Browser Extension to Block Online Tracking
  • Prometheus relabeling and linux metrics
  • Provisioning a Windows Server Vagrant box with IIS, .NET 4.5 and Octopus Deploy
  • Python install module issues
  • Python Numbers Every Programmer Should Know
  • Python Telegram Bot
  • Python's many command-line utilities
  • Quagga Routing - Install, Configure and setup BGP
  • RAID10 Total Failure: Mirror Drives in the Same Group Failed Together
  • Rainman Engineering Culture: Eight Interview Questions to Spot Excellence
  • Record Millisecond Precision in Nginx Access Logs
  • Reduce the Chance of Home Web Services Being Reported
  • Regex for Markdown Syntax
  • Relay V2Ray Traffic via Cloudflare
  • Replace Watchtower with WUD: Build a Controlled Docker Auto-Update Plan
  • Representative HTTP Status Codes
  • Route notes
  • Rules that terminal programs follow
  • Run llama3
  • Running GitHub Actions for Certain Commit Messages
  • Rust Easy! Modern Cross-platform Command Line Tools to Supercharge Your Terminal
  • Selectively Disabling HTTP/1.0 and HTTP/1.1
  • Sentry Source Code Development Notes
  • Set interface IP with netplan on Ubuntu 18.04
  • Set SSLKEYLOGFILE on MacBook to decrypt HTTPS traffic
  • Setting up JWT Authentication
  • Sharpen the Axe Before Cutting Wood: My Home Network Setup
  • Shell Script Best Practices
  • Shell Script Study Notes
  • Sign git commits with GPG
  • Simple A/B Testing with Nginx split_clients
  • Simulate Network Anomalies with TC and Netem
  • Smarter than 'Ctrl+F': Linking Directly to Web Page Content
  • Some Jenkinsfile examples
  • Some Software Design Principles
  • Speeding up the Rust edit-build-run cycle
  • SQL Join types explained visually
  • SQL queries don't start with SELECT
  • SSH certificate login guide
  • SSH failing with Error : fatal: daemon() failed: No such device
  • string field was converted to True (type string)
  • Struct Tricks Every Gopher Should Know
  • Style PowerShell with oh-my-posh
  • Super easy! Build a beautiful and handy zsh terminal
  • Supply chain attack
  • Surprisingly, you can view images in the Linux CLI?
  • Switch Firmware Update
  • Switch notes
  • Synology: Your NAS RAM Details at a Glance
  • Systemd Tutorial: Practical Part
  • Taide - training data
  • TaigiTube - Taiwanese Hokkien YouTube
  • Taiwanese Minnan Input Method App Launched: Mobile Devices Can Now Type Taiwanese
  • Take Screenshots with Selenium in Go
  • Tcpdump Usage Summary
  • Terraform Getting Started Notes
  • Terraform Provider Development Notes
  • Test Whether a Server Is Vulnerable to Shellshock Bug
  • The Art of Command Line
  • The One Billion Row Challenge in Go: from 1m45s to 3.4s in nine solutions
  • TIL: timeout in Bash scripts
  • Top 25 Nginx Tips and Tricks From Practical Experience
  • Tracking SQLite Database Changes in Git
  • Trellis Ansible Bad Interpreter Error
  • Tuning EMQX to Scale to One Million Concurrent Connection on Kubernetes
  • Tuning EMQX to Scale to One Million Concurrent Connection on Kubernetes
  • Uncle Joe teaches Elastic - 30 - Elasticsearch optimization tips (4/4) - Shard optimization management
  • Understand the crypto trio: Encode, Encrypt, and Hash
  • Understanding Cilium Series (1): Introduction to Cilium
  • Upgrade database failed after ugrade to Zabbix 5...
  • Use Go Fuzzing to Write More Complete Unit Tests
  • Use LinuxServer.io Docker Images to Turn Desktop Apps into Web Apps
  • Use Nginx and mod_pagespeed to Convert Images to WebP on the Fly
  • Use terminal and SSH to remote host
  • Using Python for multimedia: video, audio, and images
  • Using Vagrant to Deploy Multiple VMs on vSphere
  • Using Vim as a Diff Tool
  • Vagrantfile and Provider
  • vagrant筆記
  • Vim Tips - Edit Remote Files With Vim On Linux
  • vimrc Configuration Guide
  • VSCode Integration with DevSpace for Debugging!
  • WebP Cloud uses Cloudflare Workers to fetch content from the origin server in order to protect the origin server and start providing origin fetch time information.
  • What does `< <(command args)` mean in the shell?
  • What Happened To WebAssembly
  • What happens after you type a URL in the browser and press Enter?
  • What is the SHA256 that comes on the sshd entry in auth.log?
  • What the f*ck Python! 🐍
  • What to Do With Long Strings in YAML?
  • Why are QR Codes with capital letters smaller than QR codes with lower-case letters?
  • Why do browser user-agent strings always include Mozilla/5.0?
  • Why is this running?
  • Windows SSH Setup
  • WSL 2 .wslconfig configuration explained
  • Yongling Foundation AI Forum: How AI Shapes the Future of Humanity
  • Zsh Config Files and Priority
  • Zsh tab-completion not working
  • 一張圖學會【拼音輸入法】
  • 朋友旅行防止絕交檢查表
  • 設定 Haproxy 以防止 DDOS 攻擊
Hero Image
Selectively Disabling HTTP/1.0 and HTTP/1.1

Selectively Disabling HTTP/1.0 and HTTP/1.1 http { ... # Check for text-based browsers map $http_user_agent $is_text_browser { default 0; # Text-Based Browsers (not exhaustive) "~*^w3m" 1; "~*^Links" 1; "~*^ELinks" 1; "~*^lynx" 1; # Bots (not exhaustive) "~*Googlebot" 1; "~*bingbot" 1; "~*Yahoo! Slurp" 1; "~*DuckDuckBot" 1; "~*YandexBot" 1; "~*Kagibot" 1; } # Check if request is HTTP/1.X map $server_protocol $is_http1 { default 0; "HTTP/1.0" 1; "HTTP/1.1" 1; } # If Request is not text-based browser, # and is HTTP/1.X, set the http1_and_unknown variable # to 1, which is equivalent to "true" map "$is_http1:$is_text_browser" $http1_and_unknown { default 0; "1:0" 1; } ... }

Tuesday, February 3, 2026 Read
Hero Image
Go Tool Trace

淺談 Go Tool Trace - 1 淺談 Go Tool Trace - 2 Go Trace 與使用者自訂追蹤分析 淺談 Go Tool Trace - 3 實際分析 Goroutine Analysis Go Tool Trace - 4 從 分析到實戰:最佳化 Goroutine 數量 trace Trace is an “event timeline”, not “sampling statistics” go tool trace: used to inspect runtime traces. Its essence is a time-ordered event stream, including: goroutine lifecycle/states: create / runnable / running / waiting / syscall scheduler (G/M/P) related events, scheduling latency blocking time distribution (net / sync / syscall) GC events, STW, heap changes (visible in the trace viewer) Use pprof to find hot spots: who burns CPU, who allocates a lot Use trace to find latency causes: why it’s stuck (scheduling? locks? network? syscalls? GC?) Quick intuition:

Tuesday, January 27, 2026 Read
Hero Image
I Replaced Redis with PostgreSQL (And It's Faster)

I Replaced Redis with PostgreSQL (And It’s Faster) Before the change, Redis handled three things: Caching (70% of usage) Pub/Sub (20% of usage) Background Job Queue (10% of usage) The pain points: Two databases to backup Redis uses RAM (expensive at scale) Redis persistence is… complicated Network hop between Postgres and Redis PostgreSQL Feature 1: Caching with UNLOGGED Tables Redis await redis.set("session:abc123", JSON.stringify(sessionData), "EX", 3600); PostgreSQL CREATE UNLOGGED TABLE cache ( key TEXT PRIMARY KEY, value JSONB NOT NULL, expires_at TIMESTAMPTZ NOT NULL ); CREATE INDEX idx_cache_expires ON cache(expires_at); Insert

Monday, January 19, 2026 Read
Hero Image
Taiwanese Minnan Input Method App Launched: Mobile Devices Can Now Type Taiwanese

Taiwanese Minnan Input Method App Launched: Mobile Devices Can Now Type Taiwanese MOE Taiwanese Minnan Input Method - iOS MOE Taiwanese Minnan Input Method - Android The “Taiwanese Minnan Input Method” supports both phonetic input and voice input, allowing users to convert speech into text.

Thursday, January 15, 2026 Read
Hero Image
Replace Watchtower with WUD: Build a Controlled Docker Auto-Update Plan

Replace Watchtower with WUD: Build a Controlled Docker Auto-Update Plan WUD (What’s Up Docker) services: wud: image: getwud/wud:latest container_name: wud restart: unless-stopped ports: - "3000:3000" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./store:/store environment: - TZ=Asia/Shanghai # Local Docker watcher - WUD_WATCHER_LOCAL_SOCKET=/var/run/docker.sock # Key: do not watch any containers by default - WUD_WATCHER_LOCAL_WATCHBYDEFAULT=false # Scan every 12 hours - WUD_WATCHER_LOCAL_CRON=0 */12 * * * # Auto update + prune old images after update - WUD_TRIGGER_DOCKER_AUTO_PRUNE=true # Equivalent to `watchtower --cleanup` Monitor only (no auto update) labels: - "wud.watch=true" Appears in the WUD UI Shows update hints Does not auto-restart Monitor + auto update (Watchtower equivalent) labels: - "wud.watch=true" - "wud.trigger.include=docker.auto"

Sunday, January 11, 2026 Read
Hero Image
What Happened To WebAssembly

What Happened To WebAssembly Watlings

Sunday, January 11, 2026 Read
Hero Image
How Terminals Work

How Terminals Work

Friday, January 9, 2026 Read
Hero Image
Python Numbers Every Programmer Should Know

Python Numbers Every Programmer Should Know

Sunday, January 4, 2026 Read
Navigation
  • About
  • Skills
  • Experiences
  • Education
  • Projects
Contact me:
  • zeyanlin@outlook.com
  • linzeyan
  • Ricky
  • Ricky