Don't forget to mark (add-to-list 'auto-mode-alist ...) with ;;;###autoload when you write your major mode.

ErlangVM supports an incredible ecosystem. Here is my first impression of it: dead simple semantics, one of the best modern toolings, the best model for concurrent programming.

Have you seen the UNLIKELY annotation before? How does it work behind the scene?

Troubleshooting why my ftp docker container is dead after I exit a tmux session.

Being an intern manager is good way to exercise your skills for project management and get a taste of the management role. This post shares my experience as an intern manager on planning and managing software projects.

ThreadPoolExecutor introduces threads to run tasks. There are two important executors based on ThreadPoolExecutor: IOThreadPoolExecutor for IO bound tasks, and CPUThreadPoolExecutor for CPU bound tasks. They respond to loads differently.

How is folly::Promise implemented such that Promise::setValue can safely pass data to the associated future even if the promise is destroyed immediately after calling setValue?

There are times when we need to work with async C libraries in our C++ programs. we can follow a simple two-step conversion to build a thin async layer on top of the library to avoid callback hell in the program.

Executor is an important concept in folly that bridges many constructs. In this post, we explore what an Executor is, and many derivatives that extend the Executor family.

On Linux, we can give each thread a name so debugging multi-thread program is easier. pthread_setname_np is the call to name a thread. It's as easy as that. In this post, however, I want to write more details about the implementation.

The folly::fibers provides a set of constructs for cooperative context switch. In this post, we explains in detail how tasks are scheduled and executed in FiberManager.

Folly implements fibers using boost fcontext. To understand folly::fibers, we'll need to understand boost fcontext first. This post explores how boost implements non-preemptive control transfers.

It is easy to write language package in Atom. The lack of official document was the major blocker for me when I wrote the package for Pollen. In this post, I'll cover my process of creating the package for Pollen.

When writing C programs, I used to declare function prototypes without fully specifying their parameters. This is a bad engineering practice. Writting a code generator helps me realize how bad it could be from the perspective of compilers. Here are my notes on how a compiler may generate bizarre code from this practice.

Notes on I386 architecture and code generation.

Sometimes you want to create a minor mode that sticks across various major-mode changes in a buffer, and you don't want it to be global minor mode (after all, why should your minor mode globally affect other modes). Emacs already provides symbol properties for situations like this.

Given an nonjudgemental mind that focuses on present, with an attitude of enjoying and welcoming challenges, life must be as colorful as it is supposed to be.

How is caml thread implemented? We'll look at a memory leak bug in the thread implementation and learn about the internal of the OCaml thread.

I wanted to learn a bit about design concept, but ended up with an unexpected journey to drawing.

Now that we've gotten IR from the surface language, we're going to make it Canonical IR, and prepare for generating the program in assembly language.

Some notes on OCamllex and OCamlyacc.