## Latest post

I was about to be late for my condensed matter physics class, and suddenly the chain on my bike dropped. I cannot have worse luck today.

#university #college #universitylife #collegelife #badluck #life

follow me on Mastodon

## Articles

### Writing a DSL with commands split by space

DSL means domain-specific language. Ruby is a powerful script language in terms of building DSLs (as sublanguages of Ruby). In this article, I implemented my idea of a DSL with commands split by space. For example, you may just write

`a b c`

to run the commands`a`

,`b`

, and`c`

one after another! This trick is heavily applied in my project alda-rb. How do I achieve this?- Categories: programming
- Tags: ruby, meta programming

### Running Jekyll myself

I have got tired of letting GitHub Pages to run Jekyll for me. I cannot use custom plugins! I decide to run Jekyll myself and push the built result to GitHub repo. I wrote a script to do this.

- Categories: programming
- Tags: jekyll

### Algebraic structure of chemicals

Regarding balancing chemical equations, actually we are trying to find a non-trivial linear combination of some chemicals to get zero. The interesting thing is that the coefficients can only be integers ($\mathbb Z$), which is not a field, so the algebraic structure of chemicals is not linear space. They actually live in a free $\mathbb Z$-module. See how I formalize this idea in mathematical language.

- Categories: chemistry
- Tags: linear algebra

### The concentration change of gas in reversible reactions

A reversible elementary reaction takes place inside a closed, highly thermally conductive container of constant volume, whose reactants are all gases. Given the reaction equations and the reaction rate constants, a natural question to ask is how the concentration of each gas changes w.r.t. time. In this article, I will answer this question by proposing a general approach to solve it.

- Categories: chemistry
- Tags: calculus, ode, chemical reaction, long paper

### Snippet: O, ’tis too true!

O, ’tis too true!

- Categories: literature
- Tags: snippet, chinese

### The structure of a basic RM game

In this article, I present minimal examples of a RM game. They only illustrate the basic concepts of how a RM game is structured and what is the running logic of it.

- Categories: programming
- Tags: ruby, javascript, rgss

### The frequency assignment of musical notes

This article explores the concept which I call the frequency assignment, which is a mapping from $N$ (the set of notes) to $\mathbb R^+$ (the set of frequencies). Concepts such as octaves, intervals, and equal temperaments are introduced.

- Categories: music
- Tags: music theory, number sequence, long paper

### Normal vectors of a scalar field

This article gives the formula for the normal vectors of a surface defined by a scalar field on $\mathbb R^n$. The normal vector of the graph of the function $y=f\!\left(\mathbf x\right)$ at $\left(\mathbf x_0,f\!\left(\mathbf x_0\right)\right)$ is $\left(\nabla f\!\left(\mathbf x_0\right),-1\right)$. This also provides us a way to recover a scalar field from the normal vectors of its graph: normalizing the vectors so that the last component is $-1$, and then integrate the rest components.

### It is Feb 29 today!

It is Feb 29 today. The date appears once for as long as 4 years!

- Categories: update
- Tags: fooling around

### Monkey-patching graciously

Monkey-patching is a powerful tool in programming. In this article, I used techniques of Ruby metaprogramming to define a series of methods

`def_after`

,`def_before`

, etc. to help monkey-patching. They look graciously in that we can use it to shorten the codes for monkey-patching (avoiding aliasing and repeating codes).- Categories: programming
- Tags: ruby, meta programming, long paper

subscribe via RSS