Pagine

martedì 22 giugno 2010

Windows API

API e Windows

API è un acronimo che sta per "applications programming interface" ovvero "interfaccia alla programmazione di applicazioni".
Le Windows Api chiamate anche WinAPI o Win32API sono quindi delle librerie che forniscono, al programmatore, un'interfaccia verso il sistema operativo.
In questo modo sarà facile copiare un file, aprire una finestra di dialogo o spegnere il computer perchè basterà connettersi alla funzione della giusta libreria per ottenere il risultato voluto.

Le Windows API

Le funzionalità offerte dalle API di Windows possono essere racchiuse in otto categorie:
  • Servizi di base: sono gestiti dal kernel.exe o librerie affini nelle varie versioni di windows (come kernel32.dll). Sono le funzionalità di base come la gestione degli errori, l'accesso ai dischi o al file system, la gestione dei processi e/o dei thread.
  • Servizi avanzati: sono gestiti da advapi32.dll. Sono funzionalità avanzate come la gestione degli utenti, l'accensione o spegnimento del PC, l'accesso al registro del sistema.
  • Interfaccia al device grafico: è gestita da gdi32.dll. Funzionalità su monitor, stampanti e affini.
  • Interfaccia utente: è gestita da user32.dll. Gestisce funzionalità di interazione con l'utente come l'input da tastiera o mouse, interazione con la interfaccia grafica
  • Libreria delle finestre di dialogo: gestita da commdlg32.dll. Gestisce le finestre di dialogo di comune utilizzo come quella di salvataggio o apertura di un file, scelta di un colore o di un font.
  • Libreria dei controlli: gestita da comctl32.dll. Fornisce l'accesso a controlli avanzati da parte del sistema operativo come la barra di stato, le schede nelle finestre di dialogo, le progress bar...
  • Windows shell: gestita da shell32.dll. Fornisce l'accesso a funzionalità offerte dalla shell di windows.
  • Servizi di rete: fornisce l'accesso a diversi controlli di rete.

Oltre a queste otto categorie esistono altre librerie che corrispondono ad altrettante API.
Esistono funzionalità legate al web o per il multimediale ed ognuna di esse è gestita da una libreria specifica.
Le windows API, quindi, rappresentano un ottimo strumento per ottenere il massimo dalle proprie applicazioni senza dover "reinventare" di continuo la ruota.
Si pensi, infatti, al salvataggio di un file.
Se si crea una applicazione e si vuole salvare il file prodotto da essa non sarà necessario "creare" la finestra di salvataggio del file ma basterà interfacciarsi alla libreria apposita con notevole risparmio di tempo.

Le API di windows sono fornite dal Platform SDK ovvero una serie di strumenti per lo sviluppo del software e di documentazione molto corposo.

Termino questo articolo dicendo che innumerevoli linguaggi di programmazione hanno la possibilità di interfacciarsi alle API di windows.
Oltre, ovviamente, ai linguaggi proprietari come Visual Basic e .NET anche linguaggi open source come perl, e python hanno questa possibilità.
E' mia intenzione, nel prossimo futuro, approfondire questo tema.

lunedì 21 giugno 2010

feed parser e leggere gmail in python

Feed RSS

Questa tecnologia raccontata in breve, permette di avere un elenco cronologico dei post o articoli pubblicati su un determinato sito (ad esempio il feed rss di questo blog) o delle mail mandate ad un determinato account sottoforma di lista.
Il vantaggio di questa tecnologia è che se si "da in pasto" il feed rss ad un programma specifico come Thunderbird o Outlook, questi articoli appaiono come se fossero mail.
Questo comporta che l'utente non è più costretto a consultare il sito per vedere se ci sono stati aggiornamenti ma riceve un messaggio simile ad una mail.
La filosofia che governa questa tecnologia, dunque, è che sono gli aggiornamenti ad arrivare dall'utente e non il viceversa.
Tempo fa ho già parlato della tecnologia denominata feed RSS e se qualcuno fosse interessato ad approfondire può leggere questo articolo.
Molti sono i software che riescono a leggere agevolmente i feed: tra questi ho già citato Thunderbird ma esistono anche molti linguaggi di programmazioni che hanno dei moduli o delle librerie atte a questo scopo.
Oggi vi propongo feedparser, una libreria per python che serve proprio a leggere agilmente un feed rss.

Feedparser per python

Feedparser è un modulo python che può essere scaricato da questa pagina.
L'installazione non avviene tramite binari ma con il classico setup.py install.
La home page del progetto è piena di esempi pratici e vale la pena seguirli per comprendere la potenza di questo modulo in pochissimo tempo...
In questo esempio vi propongo una soluzione per vedere se sono arrivate nuove mail nel nostro account di posta elettronica gmail.
Il programma di seguito, dunque, una volta specificato il nome utente e password del nostro account gmail, è capace di leggere la lista delle ultime 20 mail e stampare a video il mittente e l'oggetto.
Ovviamente questo codice può essere la base per lo sviluppo di ulteriori funzionalità.

import feedparser

username="username@gmail.com" # modifica username con tuo user
password="password" # modifica la password con quella gmail
protocol="https://"
server="mail.google.com"

path="/gmail/feed/atom"
feedmail = feedparser.parse(protocol + username + ":" + password + "@" + server + path)


for i in xrange(len(feedmail.entries)):
print ""
print feedmail.entries[i].author_detail.email
print feedmail.entries[i].title

giovedì 17 giugno 2010

Python: inserire numeri formattati

Premessa

Ho deciso che alcuni "algoritmi" utilizzati in fase di programmazione per risolvere singoli problemi sono da salvare....
E quale miglior posto se non il proprio blog?

Problema e soluzione

  • Input: numero con decimali segnati con un punto es 1333.434
  • Output: numero in cui il punto indica il separatore delle migliaia e senza decimali
  • Codice:

#Il codice commentato seguente serve nel momento in cui si trova
# un numero con un punto.
#In questo momento prende il numero, lo divide in tre cifre per volta,
# mette un punto e cancella i decimali.
# Quindi: 1333444.22 ==> 1.333.444
# Si suppone il numero sia nella variabile "stringa" sottoforma,
#appunto di stringa.

s=string.find(stringa,'.')
if s >= 0:
j=len(stringa)
stringa=stringa[0:s]
b=''
k=0
for k in range(len(stringa)-3,0,-3):
b='.'+stringa[k:j]+b
j=k
b=stringa[:k]+b
stringa=b

martedì 15 giugno 2010

Tabelle LaTeX su più pagine

Premessa

Lavorando con LaTeX, può capitare di dover trattare tabelle molto lunghe.
Queste tabelle, se gestite come visto in un mio precedente articolo, non possono essere ripartite su più pagine e questo porta dei problemi di impaginazione:
  • LaTeX porterà la tabella sempre su una pagina nuova nella speranza che, avendo maggiore spazio, la tabella sia interamente visualizzabile.
  • La tabella, se eccede la lunghezza fisica della pagina, non riuscirà ad essere comunque visualizzata.
Il risultato con tabelle molto lunghe e frequenti (si pensi ad esempio ad un report sulla produzione regione per regione di una azienda) è quindi molto scadente.
A fronte di questa premessa, oggi vi parlerò del modulo LaTeX denominato longtable.

Longtable

Questo modulo serve per inserire tabelle molto lunghe nei propri documenti generati con LaTeX. Queste tabelle verranno ripartizionate su più pagine in maniera molto pratica e funzionale.
La caratteristica che ho gradito maggiormente è che in questo modo l'oggetto rimane li dove tu lo vuoi e non risulta flottante.
Se desideri una tabella sotto un titolo o un determinato paragrafo, dopo la compilazione la ritrovi proprio li... Questo è un lusso che se si trattano le tabelle in maniera tradizionale, raramente si può gustare.
Il documento di riferimento, in inglese di questo modulo è questo.
Personalmente, però, ho trovato estremamente utile un pdf in italiano di Lorenzo Pantieri: L'Arte di ripartire una tabella su più pagine con LaTeX.
Questo documento, oltre ad essere nella nostra lingua ci dona alcuni esempi pratici dai quali prendere spunto e, a parer mio, è da tenere sempre presente se si lavora con LaTeX.
Un ringraziamento quindi a Lorenzo per i suoi contributi su questo tema sempre preziosi.

Doxygen, sistema di documentazione codice


Premessa

Finalmente ci siamo... dopo settimane se non mesi passati a programmare ecco che il software che avevi pensato tempo fa e al quale hai dato forma nel tempo pronto per il suo debutto...
Lo fai girare, lo osservi mentre legge la configurazione e... tutto sembra funzionare.
A quel punto, dopo la soddisfazione iniziale arriva l'incubo del programmatore: documentare il proprio codice per fare in modo che se qualcun altro o tu stesso fra due anni devi modificare il programma, sappia cosa faceva quella specifica funzione...
A questo scopo sono a presentarvi Doxygen, un sistema di documentazione del codice molto semplice e potente.

Doxygen

Doxygen è un software che legge uno o più file contenenti del codice di programmazione.
Analizza i commenti presenti e, se formattati adeguatamente, genera della documentazione fruibile.
Detto in altre parole, basta inserire commenti nel proprio codice che spieghino in modo dettagliato le funzioni, le variabili, le classi (pratica di solito sempre auspicabile) e Doxygen farà il resto...
Questo software multipiattaforma (gira su Linux, Windows e Mac) è nato per la documentazione del codice in C ma oggi riconosce codice in Java, python, perl, php e molti altri.
La cosa più interessante di questo software è la semplicità d'uso: dopo aver aperto una utility grafica che aiuta nella creazione di un file di configurazione, basta lanciare l'eseguibile doxygen e, come per magia, vedrete apparire la documentazione nella cartella specificata.
Una caratteristica affasciante sono gli output disponibili in questo software: la documentazione, infatti, può essere generata in un gradevole formato HTML (estremamente configurabile con CSS) pronto da pubblicare su un sito web o una intranet, in formato RTF o LaTeX (e quindi PDF).
Insomma, per chi sta cercando un modo semplice e veloce per documentare il proprio codice, Doxygen è un ottimo punto di partenza, semplice, veloce, estremamente configurabile, multipiattaforma e multilinguaggio. In poche parole è solo da provare!

lunedì 14 giugno 2010

Graphviz, grafi automatici professionali

Premessa

In alcuni ambiti lavorativi, i grafi possono essere estremamente utili.
Si pensi al mondo della programmazione, quando si vuole visualizzare la relazione tra gli oggetti creati in un programma.
Un altro esempio è rappresentato da un organigramma aziendale quando si desidera vedere la gerarchia organizzativa che parte dal consiglio di amministrazione e scende diramandosi fra direzioni, servizi e così via.
Copiando la definizione da wikipedia del termine Grafo: "I grafi sono strutture matematiche discrete che rivestono interesse sia per la matematica che per un'ampia gamma di campi applicativi. In ambito matematico il loro studio, la teoria dei grafi, costituisce un'importante parte della combinatoria; i grafi inoltre sono utilizzati in aree come topologia, teoria degli automi, funzioni speciali, geometria dei poliedri, algebre di Lie. I grafi si incontrano in vari capitoli dell'informatica (ad esempio per schematizzare programmi, circuiti, reti di computer, mappe di siti). Essi inoltre sono alla base di modelli di sistemi e processi studiati nell'ingegneria, nella chimica, nella biologia molecolare, nella ricerca operativa, nella organizzazione aziendale, nella geografia (sistemi fluviali, reti stradali, trasporti), nella linguistica strutturale, nella storia (alberi genealogici, filologia dei testi)."
Esistono decine se non centinaia di software che permettono di creare grafi. Alcuni semplici, altri complessi; alcuni automatici e a riga di comando, altri visuali.
Oggi vorrei presentarvi un software che mi ha rapito per la flessibilità e la capacità di generare grafi di ottima qualità. Sto parlando di Graphviz.

Graphviz

Graphviz è un software coperto dalla Common Public License Ver 1.0.
Questo significa che è possibile scaricarlo ed installarlo liberamente.
Come quasi tutti i software da me trattati è multipiattaforma: esso, infatti, gira su Linux, Windows e Mac.
Il software è utilizzabile a riga di comando e usufruisce di un semplice linguaggio di programmazione che "spiega" le relazioni fra i blocchi all'interprete: basta scrivere un semplice file di testo con le relazioni, darlo in pasto all'interprete e questo genererà il grafo.
Questa è la parte più interessante perchè il grafo creato con Graphviz è estremamente personalizzabile; si può infatti definire la forma di ciascun blocco, il colore di sfondo, il tipo di freccia e la sua consistenza.
Il sito web è pieno di molti esempi e la documentazione specifica non manca.
I formati di output del grafo sono molteplici: Graphviz, infatti, può generare immagini jpg, gif, png utili per presentazioni o documenti in generale ma anche il prezioso formato eps per essere importato in LaTeX.
Diversi sono i linguaggi di programmazione che si interfacciano nativamente a questo software. Personalmente ho utilizzato con soddisfazione pydot, l'interfaccia python a graphviz ma la risorse collegate a questo programma sono molteplici.
In definitiva, per tutti coloro che hanno bisogno di generare grafi in modo più o meno automatico, consiglio vivamente l'utilizzo di Graphviz. I risultati saranno sicuramente all'altezza delle aspettative!