I’ve used ssh2-sftp-client to implement terminal-side upload/download. Because it supports streams, I implemented chunked uploads/downloads with progress bars. But networks are unreliable and transfers can be interrupted, so resumable transfer is needed. Looking into the implementation, I found that ssh2-sftp-client can support resuming.
Mar 21, 2025
Recently worked on a project using Next.js, the entire build and release time consumption was 12min, or longer. Looking at the entire build process, found there were optimization points, marking this here.
Mar 20, 2025
A guide on connecting and configuring an Xbox controller with OpenEmu on Mac for a better gaming experience.
Mar 20, 2025
Implementing JSON Schema-based code suggestions in Monaco Editor for better JSON editing.
Mar 19, 2025
I recently picked up a MacBook Air M4. After a few days of use, I’m quite happy with it, so here are some quick notes on my experience.
Mar 19, 2025
EventEmitter Initial Version class EventEmitter{ constructor(){ this.events={} } on(type,listener){ if(!this.events[type]){ this.events[type]=[] } this.events[type].push(listener) } emit(type,...args){ this.events[type].forEach(listener=>{ listener.call(this,...args) }) } off(type,listener){ if(this.events[type]){ const index=this.events[type].indexOf(listener) if(index!==-1){ this.events[type].splice(index,1) } } } once(type,listener){ const onceListener=(...args)=>{ listener.call(this,...args) this.off(type,onceListener) } this.on(type,onceListener) } }
Mar 18, 2025
A guide on properly loading and configuring node_modules resources in VSCode WebView extensions, including setup and best practices.
Mar 17, 2025
A comprehensive guide on implementing internationalization in VSCode extensions, covering both menu and extension content localization.
Mar 14, 2025
Recently came across a frontend question: “Is the Host field necessary when sending HTTP request headers?” I hadn’t paid much attention to this before, so I did some research and here’s a summary.
Mar 13, 2025
Medium’s MPP and GitHub Sponsors both use Stripe for payouts and payments. Here are a few Stripe notes and fixes I’ve run into. Common Questions Change the dashboard display language Press ⌘ K to open the search bar, type language, and jump to the language settings page.
Mar 12, 2025
A comprehensive review of Screen Studio, a powerful screen recording tool for macOS and Windows, highlighting its key features, advantages, and limitations.
Mar 12, 2025
Recently while looking at dependency package upgrades for an old project, I noticed that node-sass has been discontinued from maintenance, so I’m documenting this specifically. Main Reasons 1. Insufficient Maintenance Manpower The recent maintenance team no longer has enough bandwidth (energy and time) to continue updating the project node-sass hasn’t had a new release version for a year and a half 2. Technical Evolution Process node-sass was the first official Sass compiler available in the JavaScript ecosystem It’s essentially a Node.js wrapper for LibSass Now the official recommendation is to use Dart Sass as the primary implementation 3. Current Status The npm package has been marked as deprecated The GitHub repository has been archived to avoid confusion with active Sass repositories The underlying LibSass implementation: Although deprecated, it hasn’t completely reached end-of-life Maintainer Marcel Greter still occasionally makes fixes There’s no officially supported way to use this implementation from Node.js Migration Recommendation If you’re currently still using node-sass, the official strongly recommends migrating to the primary implementation Dart Sass.
Mar 10, 2025
Recently, a friend in our group chat encountered an error while filling out a waitlist form on manus and thought it was a site issue. After investigating, I found it was actually a Cloudflare issue. Once the problem was identified, it was easy to solve. I used my proxy node to help fill out the form. This small issue highlights how many people are unaware of Cloudflare’s security checks, so I’ll briefly summarize it here.
Mar 10, 2025
A comprehensive guide on integrating and using Firecrawl MCP within Cursor IDE, covering its features, configuration, and practical usage examples.
Mar 9, 2025
I’ve always used CNCB’s app to book mortgage prepayments. The rule there is: no pending prepayment and a 30‑day advance reservation. I saw talk that offline prepayment might bypass the 30‑day wait, so I tried it — and it worked. Here’s what I did.
Mar 7, 2025
Today a friend asked me what the gray bar chart in Apple’s Screen Time statistics means. I actually wasn’t too sure either, so I looked it up and here I’ll record what I found.
Mar 7, 2025
I frequently use the GitLink plugin in JetBrains IDEs to copy Git web URLs for files with one click, which significantly streamlines code collaboration. Increased VSCode usage at work recently revealed a lack of comparable extensions. To improve efficiency, I developed Beautiful GitLink, a VSCode extension that replicates and enhances this functionality.
Mar 2, 2025
A quick look at the APNG format and how it compares to WebP for animated images.
Feb 28, 2025
Cursor is an AI-powered code editor. This guide covers subscription options, settings synchronization, tool calling, upgrade methods, and completion features to help developers use this IDE more efficiently.
Feb 27, 2025
I recently picked up a Mac mini M4. After using it for a few weeks, I’m really happy with it, so I’m jotting down my impressions here. Why I Bought It My only non-work computer was a 2019 MacBook Pro with 32 GB of RAM, but it’s sluggish and runs hot. To make tinkering more enjoyable, I decided to get a Mac mini.
Feb 24, 2025
Recently, I had a requirement to monitor the ranking situation of a certain entry in a competition. Unfortunately, the event itself doesn’t have a ranking page, and the event data is paginated and unordered. Therefore, I thought of using GitHub Action to build a real-time web page ranking monitoring tool.
Feb 20, 2025
How to display a Search action on the software keyboard across iOS and Android and handle the resulting events.
Feb 20, 2025
Common Plugins "eslint-config-tencent" "plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended"
Feb 19, 2025
I’ve been looking into frontend animation jank, which is related to refresh rate. I looked up some basics about refresh rate and took notes here. What is refresh rate Refresh rate refers to how many images a display shows per second, measured in hertz (Hz). For example, my MBP is connected to a Dell monitor, and in the OS I can see the monitor’s current refresh rate.
Feb 14, 2025
I previously built a webpack loader called domain-replace-loader to replace domains in frontend JS, e.g., swapping to a new domain or a global window property, avoiding manual edits across repos. Sometimes the requirement isn’t about domains. A colleague recently asked to rename variables in code automatically. For example, rename T_PROJECT to P_PROJECT. I updated the plugin to support automatic variable renaming.
Feb 14, 2025