Notice: Constant ABSPATH already defined in /home/mcalamel/public_html/wp-config.php on line 23
Just another blog… » Python

Archive for the ‘Python’ Category

Dopo un lungo periodo di gestazione, finalmente e’ venuto alla luce questo post, che personalmente reputo molto interessante (ma va??).
Come introdotto dal titolo, espongo uno scenario di uso che mostra come poter integrare Subversion con lo sviluppo e il mantenimento della nostra web application. Nel dettaglio, con web application intendo un applicativo PHP installato in diversi server di produzione: quindi, un punto di sviluppo, tanti punti di utilizzo.
Bene, ipotizziamo ora il workflow per l’installazione per un nuovo cliente: connessione remota verso il server, quindi decompressione (se abbiamo una tarball o un archivio compresso) oppure copia (nel caso di singoli files), niente di trascendentale, quindi; il discorso si complica nel caso in cui ci accorgiamo che il nostro prodotto contiene un bug, oppure se abbiamo apportato modifiche interessanti allo stesso, e in questo caso dobbiamo operare a mano nelle n installazioni, con il rischio di sbagliare/dimenticarsi qualcosa.
E’ qui che Subversion viene in nostro aiuto per realizzare una specie di sistema di installazione/aggiornamento automatizzata di tipo “push” (spero che il termine sia giusto).

Read the rest of this entry »

Posted by mcalamelli in Linux, Opensource, PHP, Python | 2 Comments

Sep. 18, 2007

Dopo aver mosso i primi passi con Maya e 3D Studio, mi e’ tornata la voglia di perdere un po’ di tempo con la grafica 3D.
Essendo il mio tempo libero gia’ ridotto agli sgoccioli, ho preferito lasciare da parte affannose ricerche su Astalavista e eterni download con Emule per utilizzare qualche strumento piu’ open/free, e la mia scelta non poteva che cascare su Blender. Comunque questo non e’ un post su Blender, magari ne faro’ uno se i miei esperimenti porteranno a qualcosa di buono, percio’ passo a Python.
Ho scaricato l’ultima release di Blender, la 2.44, l’installer per Windows (per ora ci smanetto al lavoro nella pausa pranzo, e qui ho Xp), poi l’ho installato ed eseguito; il programma apre una finestra a console, dove finiscono i vari messaggi di esecuzione, e leggendo le varie righe mi accorgo di due cose: 0) e’ stato compilato per usare Python2.5, 1) non trova un interprete Python esterno da usare.
La prima non mi stupisce, indica che Blender e’ bello aggiornato, mentre la seconda mi stupisce un po’, visto che Python ce l’ho bello installato… poi ci penso un attimo e mi rendo conto che 2.5 != 2.4, quindi tutto ok. Il programma parte comunque, visto che ha il motore Python interno, ma potrei avere problemi con script che estendono il core, percio’ provvedo tosto tosto all’installazione della nuova versione.
Tutto procede liscio, alla fine mi ritrovo le due versioni installate, c:\Python2.4 e c:\python2.5, e Blender, ma va!, dice che ha trovato un Python engine. Bene, chiudo Blender e aspetto di trovare un buon tutorial per partire.
Visto che mi rimane un po’ di tempo prima delle 14, ne approfitto per vedere cosa e’ cambiato nel mio sistema, e quindi provo a lanciare un paio dei programmi che ho scritto… e qui’ la prima piacevole sorpresa: finalmente hanno sostituito quelle orrende icone con il serpentello sorridente con qualcosa di piu’ bello, wow! Io da parte mia avevo gia’ provveduto a cio’ con un po’ di lavoro grafico.

Qualche immagine per spiegarmi meglio.

Icone 2.4 (sorgente/binario)

Icona sorgente 2.4 Icona binario 2.4

Mie icone (sorgente/binario)

Mia icona sorgente Mia Icona binario

Icone 2.5 (sorgente/binario)

Icona sorgente 2.5 Icona binario 2.5

Direi che ora le icone sono guardabili, anche se le mie continuano a piacermi parecchio…
Comunque, venendo al sodo, ho provato ad eseguire alcuni miei script, quelli console-based hanno continuato a funzionare senza problemi, mentre quelli GUI-based (GTK e WX) hanno avuto bisogno della reinstallazione delle librerie per Python2.5
Per ora non ho ancora nessuna linea di codice che utilizzi le nuove features di Python, non appena effettuero’ qualche test anche su questo verrete prontamente aggiornati!

Python rulez!

Alla prox

Technorati Tags: , ,

Posted by mcalamelli in JavaScript, Python, Windows | No Comments

Jul. 26, 2007

On yesterday evening i played a little with Subversion, I was looking for a way to do a post in my blog after a commit.
I knew that there’s post-commit hooks, but only email-related. So i’ve taken my Python, and i wrote this script that connects to XML-RPC service built-in in Wordpress (using xmlrpclib), and provide to create a new post that contains the commit’s message, and a list of affected files (by a call to svnlook).
The script is very easy and customizable, I hope it will be a launch for everyone.

Ah, i talked about it also in Google Project hosting user group, I hope that someone listen to me…

Here’s the code
#!/usr/bin/python

import sys
import xmlrpclib
import os

xmlrpc_url = "http://localhost/wp/xmlrpc.php"
xmlrpc_username = "admin"
xmlrpc_password = "admin"
post_title = "Commit log"

repos = sys.argv[1]
rev = sys.argv[2]

log_message = os.popen(’svnlook log ‘ + repos).read()
affected_files = os.popen(’svnlook changed ‘ + repos).read()

server = xmlrpclib.Server(xmlrpc_url)
server.metaWeblog.newPost(1,xmlrpc_username,xmlrpc_password,{”title”:post_title, “description”:”Message: ” + log_message + “Affetcted files: \n” + affected_files},bool(1))

Stay tuned

Technorati Tags: , , , ,

Posted by mcalamelli in Blog, Linux, Opensource, Python | No Comments

… ovvero la mia esperienza con il modulo GSM/GPRS EZ10 Terminal QUAD-PY della Telit.
Il modulo e’ un bell’oggetto da un centinaio di Euro, con una porta RS232, 4 linee GPIO configurabili via software e, in questa versione, l’interprete Python (versione 1.5.2+) all’interno.
Il contesto di utilizzo e’ il seguente: una scheda elettronica, preposta all’attivazione o meno di uscite in base all’iterazione con l’utente, ha due ingressi di allarme, ai quali e’ possibile collegare degli attuatori che si attivano in caso di situazioni ritenute di emergenza. Il firmware di gestione della scheda controlla lo stato degli ingressi (ovviamente optoisolati) di allarme, e lo riporta su due delle quattro linee GPIO del modulo Telit.
All’interno del modulo gira il mio script Python, script che viene eseguito ad ogni avvio del modulo stesso. Lo scopo dello script e’ il controllo delle linee GPIO di allarme, in modo da notificare via SMS a due numeri di cellulare gli eventi su queste linee con i messaggi di testo relativi.
La comunicazione tra l’interprete Python e parser dei comandi AT avviene internamente tramite una linea seriale virtuale utilizzabile all’interno dello script tramite le funzioni del modulo MDM, quindi ,tempistiche a parte, e’ come se si parlasse direttamente sulla linea seriale fisica del modulo inviando direttamente i comandi AT. L’interprete mette a disponizione altri due moduli, oltre al builtin, e cioe’ SER per la gestione della seriale fisica e MOD con un paio di funzioni per la gestione dei tempi.
La procedura di inserimento dello script e’ piuttosto macchinosa: bisogna collegarsi via seriale al modulo (ho utilizzato Hyperterminal, e fa veramente pieta’…) impostando il baudrate a 115200, N81 per parita’ e stopbit, e controllo di flusso hardware, poi digitare AT#WSCRIPT=”[nomefile.py]“,[dimensioni in byte del file] , attendere il prompt “>>>”, selezionare il menu “Invia file di testo”, selezionare il file da inviare e attendere la risposta di “OK”, poi abilitare il file .py “uploadato” con il comando AT#ESCRIPT=”[nomefile.py]“, e attendere “OK” per la conferma. Per eseguire lo script sul modulo basta chiudere la comunicazione da Hyperterminal e spegnere e riaccendere il modulo.
E ora cominciano i problemi, almeno nel mio caso…
Ho provato il classico “Hello world!”, e cioe’ in questo caso la stampa della stringa sulla seriale fisica del modulo (ovviamente connessa al pc), ma non ho visto arrivare niente, e mi sono chiesto “Ma lo script e’ partito? Ma ho forse fatto qualche errore di digitazione? COME FACCIO IL DEBUG?”. E il punto e’ proprio questo, il debug dello script. Certo, errori di sintassi li posso escludere facendo leggere lo script da un qualche tool di controllo, ma se per caso (come mi e’ successo…) scrivo MDM.sleep(10), che non esiste, al posto di MOD.sleep(10), come me la sbrigo??
La soluzione che ho utilizzato e’ stata quella di collegare esternamente due led alle porte GPIO rimaste libere per avere un piccolo feedback dallo script, ma vi assicuro che e’ stata veramente dura arrivare alla fine, un minimo di informazioni le potevano mettere, almeno per i traceback generati dal Python!
Comunque alla fine ci sono arrivato, lo script si comporta bene, e i messaggi arrivano che e’ una meraviglia.
Nonostante cio’ pero’ non posso esprimere un parere positivo al 100%, ritengo che questo oggetto possa andare bene per un eventuale sistema di dimostrazione, ma la macchinosita’ di programmazione (del modulo, non del Python) non lo rende l’ideale in produzione: una scheda di gestione con una seriale libera e un microcontrollore adeguato avrebbe compiuto meglio il lavoro.

Alla prox

Posted by mcalamelli in Python | No Comments

Come da oggetto, ecco una nuova patch per Phasis relativa al (mio) modulo di configurazione.
Rispetto alle altre volte ho deciso di scrivere qualche cosa perche’, pur avendo un impatto minimo su una installazione gia’ funzionante, richiede comunque delle modifiche al file di configurazione default.cfg.
Modifiche che comunque si riassumo in una aggiunta di diverse linee di commenti opportunamente formattate, e da qui’ la scarsita’ dell’impatto sul sistema.
Piccola annotazione: la patch sovrascrivera’ il vecchio file di configurazione, percio’ consiglio un backup prima di applicarla.
Il sistema di creazione dei controlli relativi alle opzioni e’ intelligente e completamente realizzato a runtime, a meno dei controlli fondamentali come i panel, i sizer e la struttura base del notebook.
Di seguito un piccolo help per capire come e cosa ho modificato nel file di configurazione.

Vecchio file:

# ------ Impostazioni di rete
[Server]
#Address=0.0.0.0
Port = 0

# ------ Impostazioni di linguaggio
[Language]
# Italiano = IT  ; English = EN ; Spanish = SP
spk = IT

Nuovo file:

# ------ Impostazioni di rete
[Server]
#sectAlias@@Rete
#sectDesc@@Impostazioni relative alla rete
#opt__Port@@Porta@@int@@tc
#Address=0.0.0.0
Port = 0

# ------ Impostazioni di linguaggio
[Language]
#sectAlias@@Lingua
#sectDesc@@Impostazioni relative alla lingua
#opt__spk@@Lingua@@str@@cb@@Italiano:IT%Inglese:EN%Spagnolo:SP
# Italiano = IT  ; English = EN ; Spanish = SP
spk = IT

Le modifiche sono piuttosto chiare, ed effettivamente si limitano a dei commenti (particolari).
I miei commenti sono di due tipi, uno relativo alla sezione (Server e Language nell’esempio) e uno relativo alle opzioni (Port e spk).
I commenti di sezione cominciano con “sect”, e proseguono o con “Alias” per una stringa piu’ user-friendly rispetto al nome della sezione, oppure con “Desc” per una descrizione stringata di cio’ che riguarda la sezione. Il separatore, chiaramente, e’ una doppia @.
I commenti di opzione sono un po’ piu’ complessi, dovendo contenere informazioni differenti: vediamo un po’ di spiegare la formattazione.
Un template di struttura puo’ essere il seguente:

opt__nomeopzione@@alias@@dato@@controllo[@@key:val%key:val]

Il campo opt__nomeopzione si spiega da se, come del resto il campo alias, mentre un discorso a parte va fatto per gli altri campi.
Il campo “dato” indica il tipo di dato che l’opzione puo’ contenere e che viene validato in fase di modifica del campo stesso, e puo’ essere “int” per un intero, “str” per una stringa o “bool” per uno 0 o un 1.
Il campo “controllo” indica il tipo di controllo che rappresenta l’opzione, e puo’ essere “tc” per un TextControl, “ml” per un TextControl multilinea, “rb” per un RadioBox e “cb” per un ComboBox.
I campi indicati fino a qui (opt__nomeopzione, alias, dato, controllo) sono necessari, mentre l’ultimo campo, indicato tra parentesi quadre nell’esempio di struttura e’ richiesto solo se il tipo di controllo e’ “cb”, e contiene una serie di coppie chiave/valore separate da il carattere %, che andranno a riempire in ComboBox.

E questo e’ quanto, in caso di altre delucidazioni contattatemi pure. Per chiudere, ribadisco che il modulo, per funzionare, ha bisogno di un file di configurazione di nuovo tipo, e che applicando la patch il vecchio file verra’ sovrascritto, percio’ fate un backup del vecchio prima di applicare la patch, se avete apportato modifiche.

Alla prox

Posted by mcalamelli in Opensource, Python | No Comments