Si, l'argomento è già stato trattato, almeno per quanto mi riguarda.
Trovi due ottime soluzioni qui e qui