Hello, Fonnpo — A new chapter for an indie developer
A place to log everything about building products, writing code, and tinkering with life. Starting today, I turn scattered thoughts into writing worth revisiting.
GitHub Actions: A Practical Guide
Core concepts, events, and caching — CI/CD for a Nuxt project with auto-deploy via SSH.
The Complete Git Guide
Git is the most widely used version control system. This guide covers initial setup, basic workflow, branch management, merging and rebasing, remote repositories, stash, undoing changes, tags, .gitignore, Fork collaboration workflow, and common troubleshooting — everything you need for day-to-day development in one place.
The Complete Redis Guide
Redis is a high-performance in-memory key-value store with rich data structures including String, Hash, List, Set, and ZSet. This guide covers installation, all core data types, expiration, persistence (RDB/AOF/Hybrid), Pub/Sub, transactions, Pipeline, common use cases like distributed locks and leaderboards, and the three cache failure modes — everything you need to use Redis in production.
The Complete Spring Framework Guide
Spring is the most popular application framework in the Java ecosystem. This guide covers IoC and DI, Bean lifecycle and scopes, AOP, Spring MVC request handling, Spring Boot auto-configuration, transaction propagation and isolation, Spring Data JPA, and common pitfalls like circular dependencies.
The Complete Guide to SSH Key Generation
SSH keys use asymmetric encryption for passwordless login and identity verification. This guide covers algorithm selection, basic generation, managing multiple platforms and accounts, ssh-agent setup, server deployment, Windows environments, and common troubleshooting — all scenarios in one place.
Detailed Analysis of HashMap
HashMap is the most common key-value container in Java. Since JDK 8, its underlying structure became a combination of array, linked list, and red-black tree. The hash function determines which bucket an entry lands in, linked lists and red-black trees handle collisions, and the load factor controls when resizing occurs. Whenever you need fast key-value lookups, HashMap is often the default choice.
Detailed Analysis of ArrayList
ArrayList is one of the most common and practical collections in Java. Its core idea is not complicated: it uses an array to store data, and automatically expands when the space is insufficient. Because it is based on an array, random access is very fast; but because it needs to maintain continuity, inserting and deleting in the middle is relatively slow. In actual development, as long as your scenario is more inclined towards "reading, traversing, appending at the end", ArrayList is often the default priority choice.
Detailed Analysis of LinkedList
LinkedList is one of the commonly used data structures in Java. This article will provide a detailed analysis of the implementation principles, performance characteristics, and use cases of LinkedList to help you better understand and utilize it.
Make Your Favicon Move
While reading this article, you probably noticed something moving at the top of the tab. This is a dynamic favicon — Gmail uses it to show new email counts, Discord uses it to show notification dots, and the principle is the same. The possibilities are almost limitless, depending on what you can draw on the canvas.
My dev setup in 2026
Hardware, terminal, editor, extensions — a list built to last.
Why I still use SSR in 2026
RSC, Islands, Edge SSR — tech changes, but the essence stays.
Fonnpo