Il Paradosso di Python

29 09 2009

Era già da un pò che provavo a fare esperienza di programmazione in Python. Quel poco che ho fatto/studiato/letto mi ha fatto capire quanto questo linguaggio sia (o almeno possa sembrare) semplice, ma allo stesso tempo potente e versatile.

Così gira che ti rigira per la rete, mi imbatto in una cosa veramente sfiziosa, di cui vi riporto uno stralcio.

[…] Con questo non voglio dire che i programmatori Java sono stupidi. Voglio dire che i programmatori Python sono furbi. Per imparare un nuovo linguaggio di programmazione ci vuole un sacco di lavoro, e le persone non imparano Python perchè questo permetterà loro di avere un lavoro, ma perchè amano genuinamente programmare e non sono soddisfatte con i linguaggi che già conoscono.

Ciò le rende esattamente il tipo di programmatori che le aziende dovrebbero desiderare di assumere. Da ciò scaturisce quello che per mancanza di un altro nome chiamerò il paradosso di Python: se un’azienda sceglie di scrivere software in un linguaggio relativamente esoterico, sarà in grado di assumere programmatori migliori, perchè attirerà solo quelli che si sono interessati abbastanza da imparare tale linguaggio. Per i programmatori il paradosso è ancora più pronunciato: il linguaggio da imparare, per ottenere un buon lavoro, è un linguaggio che la gente non impara soltanto per ottenere un lavoro.”


Direi che già questo basta a stuzzicare la voglia di mettersi a programmare …no?!

Per il resto andate qui






Eliminare il veccho spam …con uno script

3 08 2009

Premesse

Nelle ultime sperimentazioni fatte su sendmail-dovecot-spamassassin mi sono trovato con cartelle spam stracolme di schifezze ed un dubbio atroce nella testa: “ma adesso tutta sta monnezza come la levo di mezzo?”

o meglio: “e se voglio levarla di mezzo ogni N giorni?”.

Visto che procmail mi sembrava un tantino complicato ho pensato di farci uno scrippettino da mettere in cron

…e visto ke mi piace sperimentare cosa potevo mai scegliere?

Python e le sue librerie

Python risulta sicuramente un linguaggio di scripting versatile e potente e se vi viene in mente di fare qualcosa troverete sicuramente la libreria che fa al caso vostro. Nel mio si tratta di imaplib, un modulo che definisce tre classi, IMAP4, IMAP4_SSL e IMAP4_stream, che incapsulano una connessione ad un server IMAP4.

Mettendoci vicino un paio di righe sul confronto delle date, il gioco è fatto.

Lo script è abbastanza commentato e permette di eliminare i messaggi di posta di un dato utente, ovviamente quando ho un pò di tempo cerco di generalizzarlo per tutti gli utenti del sistema…

#!/usr/bin/python
# Filename: delmail.py
Leggi il seguito di questo post »





OpenCv e Ffmpeg

11 12 2008

Premesse

Con OpenCv è possibile, oltre che acquisire il video da una webcam, anche farlo a partire da un filmat, ad esempio un AVi. Tuttavia è necessario compilare OpenCv con il supporto per Ffmepg la nota e stra-usata librerie per l’elaborazione di media. Vediamo come riuscire a compilare e far funzionare il tutto

Ffmpeg

Per prima cosa installiamo i pacchetti gtk2 e SDL devel

ad es. da fedora

yum install gtk2-devel SDL-devel

mentre da ubuntu

apt-get install libgtk2.0-dev libsdl1.2-dev

Ora possiamo scaricare ed installare ffmpeg da svn

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-shared --enable-swscale --enable-gpl
make
make install
echo "/usr/local/lib" >/etc/ld.so.conf.d/ffmpeg.conf
ldconfig

Per testare il funzionamento provare
ffplay passandogli un qualunque file video (mpg, flv, avi, …).

OpenCv

Scarichiamo l’ultima versione da qui

Prima di passare alla compilazione bisogna aggiungere al classico path degli includes la cartella di ffmpeg

cd /usr/local/include/
mkdir ffmpeg
cd ffmpeg
find ../ -name "*.h" | xargs -n1 ln -s

Opa possiamo scompattare opencv e lanciare l’installazione:

tar -zxvf opencv-1.1pre1.tar.gz
./configure --enable-gpl --enable-apps --enable-shared --with-ffmpeg --with-gnu-ld --with-x --without-quicktime CXXFLAGS=-fno-strict-aliasing CFLAGS=-I/usr/local/include/ffmpeg CPPFLAGS=-I/usr/local/include/ffmpeg LDFLAGS=-L/usr/local/lib

Dopo il configure bisogna notare che sia posto a yes il supporto a ffmpeg

...
Use gtk+ 2.x: yes
Use gthread: yes
...
Use ffmpeg: yes
...

se tutto è a posto possiamo dare il classico make e …andare a prendere un bel caffè

make
make install

Alcuni errori di compilazione…

Durante la compilazione potrebbero presentarsi degli errori (anche se con le ultime versioni di ffmpeg dovrebbero essere stati corretti…)

Qualcosa del tipo integer constant is too large for ‘long’ type

Per ovviare al problema bisogna aggiungere in testa al file “otherlibs/highgui/cvcap_ffmpeg.cpp” le seguenti righe:

#define INT64_C
#define __STDC_CONSTANT_MACROS

Inoltre nelle versioni più recenti di ffmpeg si potrebbe presentare un problema su un puntatore, in questo caso sempre in “otherlibs/highgui/cvcap_ffmpeg.cpp” bisogna sostituire:

url_fclose(&mywriter->oc->pb);
con
url_fclose(mywriter->oc->pb);

Inoltre mi è capitato con ultime versioni di ffmpeg ed OpenCv 1.1pre di trovare alla compilazione di opencv i seguenti errori

error: invalid conversion from ‘int’ to ‘PixelFormat’

per risolverlo bisogna fare uin casting forzato dal tipo int in PixelFormat nel file cvcap_ffmpeg.cpp. Nello specifico sostituire:

tutte le occorrenze di pix_fmt con (PixelFormat)pix_fmt

Ancora sostiutire

int input_pix_fmt;

con

PixelFormat input_pix_fmt;

e modificare l’inizializzazione da

input_pix_fmt = 0;

con

input_pix_fmt = PIX_FMT_NONE;

ricompilando comparirà poi l’errore

error: ‘PIX_FMT_RGBA32’ was not declared in this scope

questo si risolve aprendo il solito file

vi otherlibs/highgui/cvcap_ffmpeg.cpp

e modificando

PIX_FMT_RGBA32

con

PIX_FMT_RGB32

Ultima cosa: è importante controllare le versioni di OpenCv ed Ffmpeg, in particolare io ho testato il tutto con una Fedora Core 8, OpenCv 1.1pre e Ffmpeg SVN-r16043 o superiore. Utilizzando una versione più vecchia di OpenCv (1.0) si presenta in compilazione un errore su “img_conver” che e’ una funzione obsoleta e non più presente nelle ultime versioni di Ffmpeg.





OpenCV e Kdevelop

4 10 2008

Premessa

In questo periodo mi sto dedicando ad un interessante ambito, la computer vision e, per quello che riguarda lo sviluppo in questo ambito, a quanto mi risulta, ad oggi uno degli strumenti migliori è senza dubbio OpenCv (Open Computer Vision). Questa è una libreria derivante dalla Intel Image Processing Library (IPL) sviluppata da Intel e completamente open source, infatti rilasciata sotto licenza BSD. Le OpenCv sono utilizzabili come una comune libreria C/C++ (anche se dovrebbe esistere anche un wrapper Python, ma non ne so molto) in ambito Win/Linux. In questo articolo tratterò l’installazione e l’utilizzo in Kdevelop su un sistema (K)ubuntu 8.04.

Mettiamoci a lavoro…

Preparazione sistema

Per prima cosa scarichiamo il tar.gz di OpenCv da SourceForge

Dopo aver scopattato il pacchetto, prima di compilare è necessario scaricare g++, e pkg-config, e consiglio di installare anche i seguenti pacchetti

apt-get install automake g++ pkg-config libgtk2.0-dev libjasper-dev libpng-dev zlib1g-dev python

Passiamo ora all’installazione

./configure
make
make install

Controllate la cartella in cui sono installate le librerie

updatedb
locate cv.h

Di solito questte sono in /usr/local/include/opencv; ora bisogna aggiungere /usr/local/lib e /usr/local/include/opencv in /etc/ld.so.conf o in vim /etc/ld.so.conf.d/libc.conf (a seconda dei casi il primo può semplicemente includere il secondo). Poi lanciare

ldconfig

Configurazione di Kdevelop

Se non è presente installare Kdevelop con il classico

apt-get install kdevelop

Create un nuovo progetto e chiamatelo come vi pare

Progetto ->Nuovo Progetto -> C++ -> Simple Hello World Program

andate in Gestion automake (sulla dx nel pannello principale)
cliccate con il tasto dx sul nome del progetto ed andate in “opzioni” ed entrare nel tab “Librerie”

Inserire le librerie

-lcv
-lcxcore
-lhighgui
-lcvaux

Ora il sistema dovrebbe funzionare a dovere!

Buon divertimento!





OpenCv Netbeans e Webcam (WinXP)

14 06 2008

OpenCv è la nota libreria OpenSource di Intel per lo sviluppo di applicazioni dedicate alla Computer Vision (un interessante articolo su http://www.matteolucarelli.net/opencv/opencv-dev142.pdf). Per lavoro mi sono imbattuto in questa tipologia di applicazioni e, visto ke per ora le ho momentaneamente abbandonate per dedicarmi ad altro, mi piaceva ricreare a casa un piccolo laboratorio di test sul mio portatile con webcam a seguito. Questi sono i passi per iniziare a lavorare sotto winXp.

Installazione IDE

Ho scelto di installare Netbeans come ambiente di sviluppo, in quanto è free, è multipiattaforma e seppur non velocissimo (necessita di un pò di ram x fungere bene) lo conosco abbastanza bene e mi sembra molto semplice. Per scaricare l’ultima versione http://download.netbeans.org/netbeans/6.0/final/ (qui potete trovare sia la versione completa x sviluppare sotto tutti i linguaggi supportati sia le versioni monche dedicate al C/C++ o al Java, ecc…).

Installazione Cygwin

Per compilare adeguatamente i progetti in C/C++ è necessario installare il compilatore gcc e il make. Questi sw necessitano, per funzionare sotto windozze, di Cygwin. Quindi al sito http://www.cygwin.com scaricate il setup.exe e lanciatelo da locale. Selezionate, come prima opzione Install from Internet , scegliete una root dir (di default C:\cygwin) e scegliete un mirror fra quelli proposti da cui iniziare a scaricare. Dopo aver atteso il tempo necessario alla connessione vi comparirà un elenco di pacchetti da scaricare. Andate sotto la voce Devel e selezionate tutti i pacchetti autoconf, automake, gcc, make. Poi cliccate su avanti ed attendete la fine dell’installazione.

Aggiunta delle variabili di ambiente

E’ importante ora, per usare gcc, far capire a windozze dove si trova il compilatore. Andate quindi su

Pannello di controllo -> Sistema -> Avanzate -> Variabili d’ambiente. Nel menu Variabili di Sistema selezionate path ed aggiungete alla riga “;C:\cygwin\bin” (dove ovviamente cygwin è la cartella in cui avete scelto di installare cygwin.

Configurazione di Netbeans

Ok, il lavoraccio è quasi finito. Da Netbeans create un nuovo progetto C/C++, facciamo ProvaOpenCv e vedrete che nella parte sx dello schermo comparirà una struttura ad albero del progetto proprio col nome che avete scelto. Cliccateci sopra con il tasto dx e selezionate Proprietà. Andate in Build -> C compiler e inserite in General->Include Directories

C:\Programmi\OpenCV\cxcore\include
C:\Programmi\OpenCV\cv\include
C:\Programmi\OpenCV\otherlibs\highgui
C:\Programmi\OpenCV\cvaux\include
C:\Programmi\OpenCV\otherlibs\cvcam\include

Rifate lo stesso in C++ compiler.

Rimane ora solo da aggiungere le librerie da linkare. Sempre cliccando con il tasto destro sul progetto e selezionando proprieties andate su Build->Linker ed inserite il path delle librerie di OpenCv (di default C:/Programmi/OpenCV/lib).

Testing

Rimane ora solo da testare il progetto. Io ho provato il tutto con una webcam logitech (una vecchia quickcam connect) e va abbastanza bene. Come codice di prova ho semplicamente copiato e incollato il codice di facedetect.c (dal path C:\Programmi\OpenCV\samples\c). In questo caso fate attenzione a copiare il file xml di haarcascade da C:\Programmi\OpenCV\data\haarcascades al path in cui avete salvato il progetto Netbeans.