Category: programming

  • Come aggirare i captcha tramite OCR

    Segnalo questa serie di articoli scritti da Silvio che spiegano come aggirare i captcha, ovvero i fastidiosi test somministrati da una macchina ad un umano per sapere se il “testato” è una macchina o un umano (un test di Turing al contrario?).

    In sintesi, il processo è diviso in più attività:

    • la riduzione del rumore di fondo;
    • l’identificazione del contorno dei caratteri, la loro segmentazione (sono rimasto affascinato dall’algoritmo di flood filling) e la normalizzazione;
    • ed infine la parte più interessante: il riconoscimento dei caratteri tramite algoritmi OCR basati sulle reti neurali.

    La spiegazione di Silvio è molto accurata e semplice, e indica numerosi ed interessanti riferimenti per l’approfondimento, oltre ai link dei programmi utilizzati (rigorosamente opensource). Da leggere!

  • UML Distilled, guida rapida al linguaggio di modellazione standard (terza edizione): la mia recensione

    Per rispolverare la mia preparazione in ingegneria del software, ho deciso di leggere la terza edizione di UML Distilled, scritta dall’autorevole Martin Fowler; in passato ho letto la seconda edizione, ma i libri di Fowler sono una lettura sempre piacevole e sopratutto utile. Il libro è condensato (solo 155 pagine) ma pregno di argomenti e tecniche utili. Innanzitutto, specifico subito che il libro si basa sulla specifica UML2 e in particolare presenta una descrizione chiara e concisa sulle tecniche fondamentali e utili a chi si occupa di progettazione del software. Le tecniche sono presentate in modo semplice e descrittivo, corredati da un paio di esempi per ogni tecnica. Inoltre, si illustrano i punti di forza e debolezza di ogni tecnica. Oltretutto, per ogni tecnica è presente una sezione che spiega quando è utile utilizzare una determinata tecnica piuttosto che un’altra. Ad esempio, i diagrammi di package sono utili nella progettazione di sistemi di grande scala per documentare le dipendenze tra i componenti più importanti. Al termine di ogni capitolo, Fowler introduce un repertorio di esercizi corredati di soluzione. A mio avviso, le tecniche più utili tra quelle presentate sono:

    • Diagrammi delle classi: consentono di descrivere le classi che compongono il progetto e le relazioni tra di esse;
    • Diagrammi dei package: descrive le relazioni tra i package che compongono il model;
    • Diagrammi di deployment: permette di definire come le componenti software saranno distribuite fra i vari nodi hardware a disposizione per il progetto;
    • Casi d’uso (use case): descrivono le funzioni e i servizi offerti dal progetto dal punto di vista di un attore esterno;
    • Diagrammi di attività: definisce una serie di attività per svolgere una determinata funzionalità. È simile ad un diagramma di flusso;
    • Diagrammi dei componenti: complementa i diagrammi di deployment ed indica i componenti software che compongono il sistema e le relazioni tra di essi;
    • Diagrammi di sequenza: esplora il comportamento dei componenti dal punto di vista temporale, e spiega l’evoluzione e la relazione dei componenti in relazione ai messaggi inviati e ricevuti agli altri componenti.

    Nel libro vengono anche presentate tecniche non strettamente UML, ma sicuramente utili come le schede CRC ed i design pattern. Il testo è pensato per un pubblico che già possiede conoscenze di OOP e che conosce qualche altra metodologia di progettazione standard. In definitiva, quindi, un libro da avere assolutamente nella propria collezione personale. Costo: 25€