Blog

Choosing Between HashRouter and BrowserRouter on the Web

A comparison of HashRouter and BrowserRouter in SPA apps, including URL forms, server configuration, anchor behavior, form submissions, and how SPA routing works.

Feb 5, 2021

Managing Compatibility with Browserslist

This article introduces managing compatibility with Browserslist, including its advantages, implementation details, and related resources to improve efficiency.

Feb 2, 2021

Contributing to GitHub Projects

A practical workflow for contributing to open-source repositories: fork, clone, submit PRs, and keep your fork in sync.

Jan 31, 2021

Improve Frontend Code Quality with Tools — SonarQube

Using SonarQube alongside ESLint to improve frontend code quality: differences, setup, and CI integration.

Jan 28, 2021

Apply for JetBrains License Using Open-Source Projects

Guide to obtaining a free JetBrains License for open source projects, covering eligibility, application process, and usage tips.

Jan 27, 2021

JavaScript Array Undefined Items

This article discusses undefined items in JavaScript arrays, explaining the differences between explicitly undefined values and uninitialized array elements, and how array iteration behaves differently in these cases.

Jan 27, 2021

Inline JavaScript Event Binding

How to bind events with inline JavaScript, how it differs from React’s model, and practical tips for native usage.

Jan 26, 2021

MySQL Left Join Query Record Count

Clarifying a common misunderstanding about MySQL LEFT JOIN: why the result count isn't always the same as the left table's count when there are multiple matching records in the right table.

Jan 26, 2021

Instant telegram notification if GitHub is Stared

Receive instant Telegram notifications when your GitHub project gets starred. Learn how to set up GitHub Actions for real-time alerts.

Jan 25, 2021

Share Surge Proxy Across the LAN

Two ways to let devices like smart TVs or Switch use your Surge proxy—manual Wi-Fi proxy and macOS DHCP gateway.

Jan 23, 2021

Nintendo Switch Game Purchase Strategy

This post summarizes my Nintendo Switch game purchase strategy and tips for saving money across regions.

Jan 22, 2021

Optimize Table Performance in Frontend

Using virtualized tables for large datasets (hundreds of rows), with notes on DOM complexity and profiling.

Jan 18, 2021

2020 Year-End Review

Reflecting on 2021: Systematic fitness habits, milestones in open-source development, professional CI/CD improvements, and the challenges of being 30. A year of self-reflection and preparation for the next chapter.

Jan 16, 2021

Difference Between yield and yield*

What yield and yield* do in generators, how they differ, and when to use each, with examples.

Jan 15, 2021

Extend AxiosRequestConfig in TypeScript

Use declaration merging to add custom properties (e.g., loading flags) to AxiosRequestConfig without sacrificing type safety.

Jan 11, 2021

Frontend Storage Options

Browser storage choices (cookie, sessionStorage, localStorage, IndexedDB), differences, and when to use which.

Jan 10, 2021

Implementing GIF Search with Alfred

This article introduces implementing GIF search with Alfred, including advantages of GIF search, implementation details, and related resources to improve GIF search efficiency.

Jan 9, 2021

Jenkins Continuous Integration - Publishing New NPM Packages

This article provides an introduction to Jenkins continuous integration for publishing new NPM packages, including the advantages, implementation details, and related resources. These steps can help improve efficiency in Jenkins continuous integration for NPM package publishing.

Jan 7, 2021

Tools of the Year: 2020 Gear Review

A review of the essential hardware and software tools I added to my toolkit in 2020, featuring AirPods 2, ASUS RT-AC1900P, Magic Keyboard, MarginNote 3, and more.

Jan 2, 2021

Third-Party Services Used by My Blog

An overview of third-party services powering my personal blog, with setup notes and brief impressions.

Jan 2, 2021

Applying for a Wildcard Certificate

Apply a wildcard cert (e.g., *.1991421.cn) to cover many subdomains; notes on limits and Certbot steps.

Jan 1, 2021

Decrypting HTTPS with Surge

How to enable HTTPS decryption (MitM) in Surge on macOS and iOS, why it’s useful, and caveats.

Dec 30, 2020

Frontend Basics — P2

Frontend fundamentals: MVC/MVP/MVVM, how browsers work, React Fiber, and how Redux triggers updates.

Dec 27, 2020

Frontend Basics — P1

Notes from frontend interview questions to reinforce fundamentals: TCP handshake, number precision, storage, hoisting, etc.

Dec 27, 2020

JSON vs XML Comparison

This article provides a comprehensive comparison between JSON and XML data formats, including their differences, use cases, and practical considerations for modern web development and API design.

Dec 20, 2020