从网上copy及整理过的代码，包括自己写的。