Blog

Blog

Cover illustration for Integrating Dodo Payments Licensing in macOS Apps
macos

Integrating Dodo Payments Licensing in macOS Apps

A practical Dodo Payments licensing flow for Swift macOS apps, covering activation, validation, deactivation, Hardware UUID binding, and Keychain storage.

Read the article
View archive →
Cover illustration for Integrating Sparkle 2 for Auto-Updates in macOS Apps
macos

Integrating Sparkle 2 for Auto-Updates in macOS Apps

Adding auto-update functionality to a macOS application distributed outside the Mac App Store is essential. Sparkle has long been the gold standard...

Cover illustration for Deep Dive into DNS: Architecture, Hijacks, and Timeouts
infrastructure

Deep Dive into DNS: Architecture, Hijacks, and Timeouts

A practical deep dive into DNS resolution, local resolver behavior, DDNS hijacks, DNS amplification, and cloud DNS timeout troubleshooting.

Cover illustration for Trading Basics: Stocks, Options, and Technical Analysis
finance

Trading Basics: Stocks, Options, and Technical Analysis

Welcome to our beginner-friendly guide to understanding the stock market! If you’re looking to start your trading journey, it’s essential to unders...

Cover illustration for Some ML Basic Concepts: Attention, Parallelism, and Architecture
machine-learning

Some ML Basic Concepts: Attention, Parallelism, and Architecture

In this post, we’ll dive into some fundamental and advanced concepts in modern Machine Learning, particularly focusing on Large Language Models (LL...

Cover illustration for Construct the Rectangle
leetcode

Construct the Rectangle

This problem is a typical use case of double pointer in an array. Like in a sorted array, find two elements who sum to a target number. This proble...

Cover illustration for Pointer to pointer
leetcode

Pointer to pointer

For List related problem, we usually will not use the recursive way to solve it. For binary search tree, we might use it. In this blog, I just want...

Cover illustration for Integer overflow
leetcode

Integer overflow

In the world of data types, each type has its own range. Overflow can happen when you do math on them. For example if you add one to the largest po...

Cover illustration for CMake and Google benchmark
cpp

CMake and Google benchmark

In this blog, I will introduce how we can make vim work with a CMake Project.

Cover illustration for PyTorch slow inference
python

PyTorch slow inference

Our online systems support PyTorch inference. It is very slow recently. Previously there were not so many jobs running, so the CPU usage was low, b...

Looking for something specific? Browse every article by year, category, or topic.
Explore the archive

© chunyang. Some rights reserved.

Using the Chirpy theme for Jekyll.

stats counter unique visitors since April 2019