some ideas & some codes