Per cercare all'interno di un file PDF, possiamo tranquillamente usare grep.

Ma esiste un programma più specifico, che per certi versi possiamo considerare un'estensione di grep stesso: pdfgrep!

Per installarlo su Debian:

# aptitude installa pdfgrep

Su Archlinux:

# pacman -Sy pdfgrep

La programmazione multi-threading in Python è abbastanza semplice usando il modulo threading!

Oggi vediamo qualche esempio in Python 3; ma dovrebbe essere abbastanza simile anche per la versione 2.

Nel primo esempio, i threads non sono sincronizzati, ed infatti l'output sarà una cosa del genere:

Inizio Thread 1
Inizio Thread 2
Thread 1: Mon Apr 24 14:04:58 2017
Thread 2: Mon Apr 24 14:04:59 2017
Thread 1: Mon Apr 24 14:04:59 2017
Thread 1: Mon Apr 24 14:05:00 2017
Thread 2: Mon Apr 24 14:05:01 2017
Thread 1: Mon Apr 24 14:05:01 2017
Thread 1: Mon Apr 24 14:05:02 2017
Fine Thread 1
Thread 2: Mon Apr 24 14:05:03 2017
Thread 2: Mon Apr 24 14:05:05 2017
Thread 2: Mon Apr 24 14:05:07 2017
Fine Thread 2
Fine del main thread

Unirest è un libreria per creare richieste HTTP in maniera molto semplice e veloce.

E' disponibile per diversi linguaggi, ed oggi vedremo un esempio con PHP.

Per installare la libreria possiamo usare composer:

$ composer require mashape/unirest-php

Verrà scaricato tutto dentro una directory vendor.

Se vogliamo impostare l'autocomplete di un form a off, in modo che non visualizzi eventuali dati salvati, ci basta fare questo:

<form method="post" action="" autocomplete="off">
    <div>
        <label>Email:</label>
        <input type="email" name="email" value="" placeholder="Email">
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password" value="">
    </div>
    <button type="submit" name="btn">Salva</button>
</form> 

Oppure possiamo impostarlo un campo specifico:

 <form method="post" action="">
    <div>
        <label>Email:</label>
        <input type="email" name="email" value="" placeholder="Email" autocomplete="off">
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password" value="">
    </div>
    <button type="submit" name="btn">Salva</button>
</form> 

Il problema è che su Chrome (e Chromium) questo non funziona benissimo.

Ho trovato un plugin per jQuery che permette di creare pannelli dentro una pagina web in maniera veramente easy: jsPanel!

Se guardate gli esempi e la documentazione, potete notare che le possibilità sono veramente tante.

C'è anche l'integrazione con la prossima versione di Bootstrap, ed è possibile creare pannelli espandibili, finestre modali, toolbar, menu contestuali, ecc.

Insomma tanta roba.

Non parleremo dei tab intesi come QTabWidget, ma l'ordine di quando usiamo il tab per navigare tra i componenti della gui.

In sostanza, come suppongo già sappiate, quando state in una gui, potete usare il tasto tab per navigare tra i componenti.

L'ordine in cui si naviga viene scelto dal Qt Designer man mano che si aggiungo i componenti nella finestra.

Quando scegliamo una password, dovremmo essere certi che sia abbastanza sicura.

Se usiamo Linux possiamo usare una libreria apposita: cracklib!

Ovviamente il nome può cambiare tra le distro, ma se siete su Archlinux:

# pacman -Sy cracklib

Su una macchina Linux ho installato l'Oracle client e tutto il necessario, ed ho provato a connettermi tramite ODBC (unixODBC per la precisione).

Con le credenziali giuste, ottenevo sempre questo errore:

ERROR:
ORA-21561: OID generation failed

Alla fine ho scoperto di dover modificare il file /etc/hosts.

Di programmi per eseguire lo sniffing di rete su Linux ne abbiamo visti tanti.

Ma oggi ve ne propongo uno nuovo: sniffit!

Viene descritto come packet sniffer and monitoring tool, e il suo utilizzo è un pò diverso da quello a cui siamo abituati.

Ma prima di tutto installiamolo; su Archlinux:

# pacman -Sy sniffit

Supponiamo di avere un file di testo con righe vuote, tipo questo:

$ cat test.txt
roma

lazio
milan

bologna

Vogliamo eliminare le righe vuote, ma non manualmente riga per riga.