Sample from my friend, we can learn some design and code from the previous project