https://pcchen.github.io/teaching/11220PHYS114403.html