Una delle funzionalità più utilizzate di TeamworkPM è la possibilità di rispondere alle notifiche e-mail e aggiungere il tuo commento al tuo progetto. Anche gli allegati inviati tramite la risposta e-mail verranno aggiunti al commento e visualizzati nella scheda File del progetto. Una delle mie aree principali nel team di sviluppo è l'elaborazione della posta elettronica. Se l'email viene inviata a Teamwork, sono io la persona che fa funzionare tutto. Poiché l'e-mail è il metodo di comunicazione, ci sono molti "problemi" che devono essere affrontati da parte nostra. Questi includono la gestione delle e-mail di testo / HTML, l'analisi del bit di "risposta" e l'eliminazione del contenuto citato dalla notifica originale, la convalida dell'utente che invia la risposta, il salvataggio degli allegati e così via. In questo articolo ho pensato che sarebbe stato interessante concentrarci su una delle sfide che abbiamo dovuto affrontare durante la gestione degli allegati di posta elettronica e la soluzione che abbiamo implementato: le immagini della firma.

Qualche sfondo

Quando abbiamo lanciato per la prima volta Teamwork le notifiche e-mail erano unidirezionali. Potevi solo ricevere notifiche ma non abbiamo accettato risposte. Dovevi accedere a Teamwork per rispondere a un messaggio o un commento. Le persone sono abituate a inviare e-mail e si aspettano di poter rispondere alle e-mail. Abbiamo aggiunto la possibilità di rispondere alle notifiche e-mail e di aggiungere la risposta come commento o messaggio al tuo progetto. Allora potevi aggiungere un commento su Teamwork ma non potevi allegare file al commento. A causa di questa limitazione, saltavamo gli allegati durante l'elaborazione delle e-mail. Man mano che Teamwork avanzava, abbiamo aggiunto la possibilità di allegare file ai commenti in Teamwork. Ciò significava che ora potremmo anche elaborare eventuali allegati alle risposte e-mail. Fantastico! La gente lo adorava ... Ma è sorto un nuovo problema: le immagini delle firme delle persone venivano ora aggiunte al commento e, peggio ancora, venivano aggiunte alla sezione File ... a ogni risposta. Il feedback ha iniziato ad arrivare.

Il problema

Quando un'e-mail arriva a Teamwork, otteniamo un elenco di file allegati. Alcuni sono allegati autentici, altri sono immagini di firma. Non abbiamo assolutamente modo di sapere quali sono allegati legittimi e quali fanno parte di una firma. Abbiamo analizzato centinaia di e-mail e non siamo riusciti a trovare un modo standard per distinguere gli allegati. C'erano alcuni nomi di file che sembravano standard (come image001.png) che pensavamo di poter semplicemente ignorare, ma poi abbiamo scoperto che le immagini incollate in linea su un'e-mail potevano anche essere chiamate image001.png. Non potevamo ignorarli perché potrebbero essere uno screenshot importante!

La soluzione

Inizialmente, abbiamo pensato che non ci fosse nulla che possiamo fare al riguardo. Abbiamo calcolato che le persone ricevono e-mail ogni giorno con le stesse immagini della firma in Gmail, Thunderbird, Outlook e così via, quindi capiranno quando anche le immagini della firma vengono ricevute più volte in Teamwork. Ma Teamwork è diverso. La scheda File era ingombra di queste immagini della firma e lo spazio file veniva utilizzato da queste immagini. Il feedback è arrivato in maniera spessa e pesante. Bisognava fare qualcosa. Mi stavo stancando di rispondere più e più volte allo stesso feedback ... E poi ho avuto un'illuminazione. E se potessimo ottenere una "impronta digitale" di ogni file immagine, quindi, indipendentemente dal nome del file, sapremmo che è la stessa immagine. Potrei usare una funzione hash per ottenere l'impronta digitale! Una funzione hash è un algoritmo che accetta un blocco arbitrario di dati e restituisce una stringa di bit di dimensione fissa. Ad esempio, se si esegue l'hashing di un ebook trasferendo il contenuto alla funzione, si otterrebbe una stringa di 32 caratteri. Se hai eseguito l'hashing dello stesso ebook 10 volte, otterrai sempre la stessa stringa di 32 caratteri. Se modifichi anche una sola lettera nell'ebook e restituisci il contenuto alla funzione, otterrai una stringa di 32 caratteri completamente diversa. Quindi ho fatto un po 'di test…. Ho creato uno unit test per una nuova funzione che ho scritto che legge il contenuto del file binario, lo converte in una stringa e quindi ha hash il contenuto utilizzando un hash MD5. Ho preso 3 copie della stessa immagine, le ho rinominate in file1.jpg, file2.jpg e file3.jpg e ho eseguito ciascuna di esse attraverso la mia funzione e mi è stata restituita la stessa stringa di "impronta digitale". Ho quindi ampliato il mio test unitario in modo che si collegasse a una casella di posta POP, elaborasse gli allegati e generasse "l'impronta digitale" di ogni allegato. Ho inviato 3 e-mail a questa casella POP ciascuna con la stessa immagine allegata e ha funzionato! Tutte e 3 le impronte digitali degli allegati corrispondono. Ho trascorso alcune ore a perfezionare la mia funzione, espandere la base del codice Teamwork e implementare l'hashing degli allegati. Poiché le immagini di firma erano il problema, ho dovuto solo allenare l'impronta digitale per gli allegati che erano in realtà file di immagine (png, gif, bmp, jpeg, jpg, tiff ecc.) Anche le immagini di firma sono principalmente file di piccole dimensioni, quindi ho solo bisogno di elaborare l'immagine file inferiori a 100 kb. Quando elaboriamo un'e-mail e otteniamo l'elenco degli allegati, passiamo eventuali allegati di immagini tramite la mia nuova funzione che restituisce la stringa "impronta digitale". Elaboriamo tutti gli allegati normalmente e memorizziamo l '"impronta digitale" nel database insieme al riferimento al file. La prossima volta che un'e-mail viene elaborata, facciamo la stessa cosa per ogni immagine allegata, ma cerchiamo nel database per vedere se abbiamo già un'immagine con la stessa "impronta digitale". Se otteniamo una corrispondenza, la registriamo per l'analisi in un secondo momento, saltiamo l'allegato e passiamo a quella successiva, e così via. Abbiamo aggiunto un indice alla tabella File nel database per l '"impronta digitale", il che significa che anche se ci sono milioni di record nella tabella otterremo la nostra corrispondenza istantaneamente. Da quando lo abbiamo implementato ieri, i nostri file di registro hanno mostrato un enorme aumento della quantità di immagini della firma rilevate e rimosse dalla funzionalità di risposta tramite posta elettronica. La prima volta che viene elaborata una risposta tramite e-mail per un utente, le immagini della firma verranno aggiunte normalmente, ma da quel momento verranno ignorate. Se elimini i file dal tuo progetto Teamwork, continueremo comunque a far corrispondere le "impronte digitali" dell'immagine alla successiva elaborazione. Si spera di non rispondere mai più al feedback relativo alle immagini della firma! E.