Buon Natale a tutti!

E’ vero sono un pò in anticipo ma visto che il 25 avrò da fare vi faccio ora gli auguri! E cosa c’è di meglio di un bello scriptino?

ciao!

Alfredo

#

#BUON NATALE A TUTTI!

#

import string

class buonNatale:

def stampa_albero():

tree_base = 20

albero = "*"

print albero.center(tree_base*2)

for x in reversed(xrange(1,tree_base)):

albero+="**"

print albero.center(tree_base*2)

print "BUON NATALE A TUTTO PYTHON-IT.ORG!".center(tree_base*2)

if __name__ ==  "__main__":

stampa_albero()

C vs Python vs Java

Buongiorno a tutti.

Oggi ho fatto un esperimento. Ho implementato l’algoritmo di ordinamento più lento della storia, cioè il Selection Sort (complessità computazionale O(n^2)) , in tre diversi linguaggi: C,Python e Java. Poi ho creato un programma in Python che usando il modulo timeit cronometrasse i tempi di esecuzione dei tre diversi programmi. Il risultato? Eccolo:

C version: 0.484

Java version: 17.008

Python version: 6.657

Che il C battesse Python era scontato, ma Python batte Java alla grande: Python è il doppio più veloce del Java. Da questa prima superficiale analisi sembra che Java sia più lento del Python. Possiamo davvero ritenerci soddfisfatti? La risposta è no! Ringrazio Riovandaino del forum di Python.it.org per aver segnalato un caso in cui è Java a battare alla grande Python. Il codice lo trovate in questo post, con i relativi tempi di esecuzione. Tuttavia, come sapete, Python può, ed ecco in arrivo la scorciatoia (di scorciatoia si tratta, in effetti). La risposta è Psyco, un modulo che promette di abbattere i tempi di esecuzione degli script Python. Ma funziona davvero? Riscrivendo il codice ecco cosa otteniamo:

Pre – Psyco:

alfredo$ time python prime2.py

9592

real 0m24.237s

user 0m23.927s

sys 0m0.065s

Post – Psyco:

alfredo$ time python prime2.py

9592

real 0m1.938s

user 0m1.814s

sys 0m0.027s

Il guadagno è notevole, e il prezzo pagato? Due linee di codice all’ inizio del nostro programma.

Mica male vero?

Ringrazio tutti gli utenti di python-it.org!

Allego il codice per i più smaliziati (devo ancora riuscire a gestire bene il codice quando scrivo, la gestione di un codice in un linguaggio di programmazione in WP.com è pessima).

Alla prossima!

SpeedTest.zip

 

Alfredo

PyPills : Lezione 1 – os.system()

Buongiorno a tutti 🙂

In questo articolo inauguro un altra sezione, chiamata PyPills, cioè “Python in pillole”. Il mio obiettivo non è tanto quello di insegnare le cose base, in quanto la rete abbonda di materiale elettronico per imparare il Python, che già di per se è molto semplice. Quello che mi propongo di fare è fare luce sulle parti un pò nebulose. Una delle cose che ho più odiato nel Java era l’impossiblità di eseguire istruzioni di basso livello con un comando. Il C lo permette ma è un pò complicato lavorare sulle stringhe in quanto, come vi ricordo, per C una stringa è un array di caratteri, e come tale bisogna lavorare coi puntatori e non con gli operatori di concatenazione come il + (in C non esite per concatenare stringhe). Il python può. Questa è una frase chiave. Volete realizzare un missile per andare su marte? Python sicuramente potrà, ma potete realizzarci sicuramente un dispositivo usb per il lancio di missili (l’hanno fatto veramente). Come direbbe lo spot della Playstation 3 “Possibilità infinite” 😀 .

Tornando a noi, un comando veramente magico in Python è:

os.system(string command)

(notate che il tipo string l’ho inventato in quanto, vi ricordo, in python i tipi non vanno dichiarati esplicitamente). Cosa fa questo comando? La semplicità è potenza e viceversa, infatti questo comando esegue un comando di sistema. Quale comando? Un qualsiasi comando Unix o Dos (ma noi siamo in Unix, tant’è parleremo di questo 😛 ). Alcuni tra i più smaliziati diranno “vabbè ma non fa nulla che non si possa fare facendo uno script in bash” e ciò è sacrosanto, ma possiamo ad esempio creare il nostro bello scriptino e lanciarlo embedded all’ interno del nostro programma Python così:

import os

os.system(“./myscript.sh”)

Potente no?  Ve l’avevo detto io 😛 

Nella prossima lezione metteremo un pò da parte Python e vedremo un pò di comandi Unix molto utili, parleremo dei filtri e del pipelining.

Alla prossima!

Alfredo

Mac OS X 10.5 e Record Extension

In questo articolo parlerò della Record Extension. Drizzate bene le antenne perchè questa cosa probabilmente non la sanno in molti. Innanzitutto bisogna chiedersi “Cos’è la Record Extension?”

La record extension è la libreria responsabile della cattura degli eventi di tastiera e mouse su server X. E’ molto importante in quanto entra in gioco in diverse applicazioni per svolgere delle funzioni che non possono essere eseguite altrimenti, si pensi alla cattura di una schermata del desktop tramite snapshot. Come molti di voi sapranno Mac OS non ha un supporto nativo per il server X, o meglio ce l’ha ma bisogna installare l’ X11 o dal dvd di apple o scaricando l’ultima versione da XQuartz. Tuttavia chiunque abbia provato a lanciare un qualsiasi programma che facesse uso di queste librerie si è trovato davanti il laconico messaggio “Record Extension Not Found”.

Dopo diversi giorni di sbattimenti vari ho trovato la risposta a questo problema direttamente sulla mailing list di X11:  La record e la test extension sono state rimosse per motivi di sicurezza (per evitare ad esempio che tramite un keylogger si potesse registrare il workflow di un utente). Questa scelta implementativa però non è stata apprezzata e mi è stato assicurato che nelle prossime versioni di X11 questo problema sarà risolto inserendo un comando per abilitare/disabilitare le estensioni. Allo stato attuale è quasi pronta la rc_3 di X11 dal sito XQuartz, dove è già possibile abilitare la test extension!

Quindi non temete, tra poco rientrerete in possesso della vostra record!

Alla prossima!

Alfredo

Laboratorio di Programmazione – Me-Dia v.0.1

Questi articoli, questi che cominciano con “Laboratorio di Programmazione” conterranno tutti dei progetti in

via di sviluppo da me programmati. Il primo che presento è Me-Dia (Dia = Dipartimento di Informatica e Automazione della mia Università) che serve per gestire la media degli esami. E’ scritto in Python con le librerie wx, ed è in fase moolto beta. Commenti sono ben accetti. Come tutti i programmi sarà buggato 🙂

Ciao!

Me-Dia

Me-Dia v.0.1

Segnalatemi i bug a:

alfredo.dinapoli@alice.it

Happy media!

Alfredo

CHANGELOG:

-Fixato l’errore di creazione del file “esami.txt” su sistemi Win32 (Grazie a Giuseppe Costanzi per la segnalazione)

Perchè usare Python

In questo articolo decanterò le lodi di Python. L’ho da poco (ri)scoperto in seguito alla necessità (o voglia?) di usare questo linguaggio per la mia tesi di laurea.

Python è:

Potente: Permette di scrivere istruzione di basso livello al pari del C

Flessibile: E’ facilmente estendibile, supporta una marea di paradigmi (a oggetti, funzionale, procedurale e scripting)

Veloce: L’ho trovato più veloce del Java, sopratutto quando si maneggiano le GUI

Espandibile: Un esempio? PyObjC è una libreria ponte che permette di sviluppare applicazioni in Cocoa scrivendone il codice in python anzichè in Objective – C. Per voi Mac User non costituisce già da solo un valido motivo per passare a Python? Quale altro linguaggio permette una cooperazione così stretta?

Facile: Per chi come me ha studiato Java per due anni, il passaggio è assolutamente morbido e indolore. Quello che all’ inizio spaventa è la libertà che questo linguaggio offre.. Ma poi ci si chiede “Da quando la libertà è stata un male?”. Sviluppare GUI con Python è facilissimo e non richiede l’uso di nessun GUI builder, di cui però vi raccomando l’utilizzo perchè si risparmia un sacco di tempo. Ci sono diverse librerie tra cui scegliere, io vi consiglio wxPython poi scegliete voi quella che preferite. Come IDE vi consiglio l’ottimo SPE (esiste un .dmg per Mac ).

Ovviamente dipende da come lo si usa, avrà anche lui i suoi difettucci, ma la mia impressione è assolutamente positiva. Provatelo, perchè no?

Alfredo

First Article

Benvenuti su questo blog. L’ennesimo? Sicuramente.

Che scopo ha? Solo uno scopo divulgativo.

Qui dentro troverete delle nerd stuff (in inglese più o meno “roba da nerd”).

Cosa è un nerd lo sa chi è dell’ ambiente, ma in realtà c’è un pò di nerd in ogni informatico 😀

Tornando seri, in questo blog troverete soluzioni scriptate a dei problemi. Fine.

Alfredo