Re: [Python] Ottimizzazione codice

2008-04-27 Per discussione Daniele Zambelli
Alle domenica 27 aprile 2008, Leonardo ha scritto:
> Salve a tutti.
> Sono agli inizi con Python, sto imparando grazie a varie guide trovate
> online, e sto iniziando ad addentrarmi nell'ottimizzazione del codice.

Benvenuto

> Ora, ho scritto questo piccolo programmino (con GUI in pyGTK) che
> accetta dei numeri come input, ne calcola la media, e restituisce la
> media, il numero maggiore immesso, il numero minore, il numero più
> vicino alla media.

Sei partito da un problema classico che dà diversi spunti di riflessione. È 
interessante la combinazione tra l'interfaccia grafica e gli algoritmi di 
elaborazione dati.

> Ora, vorrei dei consigli su come ottimizzare il codice, magari
> sostituendo qualche ciclo if con qualcosa di più performante o simili =D
> posto il codice: (non insultatemi perchè non c'è nemmeno un commento o
> una doc string xD)

Qualche commento ci sta bene, di solito, ma hai usato nomi delle funzioni 
sufficientemente esplicativi e quindi il tuo codice è chiaro.

Non ho le gtk e non ho il tempo di provare il codice che posto, per cui prendi 
le cose che scrivo come degli spunti per approfondire.
Altro avvertimento, in lista ci sono molti programmatori più competenti di 
me... fa la tara a quello che scrivo.

1. ottimizzazione: Di solito è buona norma preoccuparsi delle performances di 
un programa più avanti... comunque ridurre le righe di codice va nella 
direzione di rendere il programma più semplice e di solito più efficiente.

>
>
> import pygtk
> pygtk.require('2.0')
> import gtk
>
> def Media(numeri):
>   divisore = len(numeri)
>   a = 0
>   for num in numeri:
>   a = a + float(num)
>   try:
>   media = float(a) / float(divisore)
>   return media
>   except:
>   return None

2. "a" lo chiamerei somma, numeri contiene già dei numeri, non c'è motivo per 
cui la divisione non possa funzionare a ameno che la lista sia vuota.
Quindi la funzione potrebbe diventare:

> def Media(numeri):
>   if not numeri:
>   return None
>   somma = 0
>   for num in numeri:
>   somma += num
>   return float(somma) / len(numeri)

tenendo presente che Python è in grado di sommare gli elementi di una lista la 
funzione si può semplificare ulteriormente usando la funzione sum(lista).

> def DistanzaDallaMedia(numero, media):
>   numero = float(numero)
>   distanzamedia = abs(numero - media)
>   return distanzamedia

3. Anche qui le cose si possono semplificare:

> def DistanzaDallaMedia(numero, media):
>   return abs(numero - media)

> class Finestra:
>   def __init__(self):
>   self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
>   self.win.set_title("Calcolo media aritmetica")
>   self.win.connect("destroy", self.esci)
>   self.win.connect("delete_event", self.delete_event)
>   self.win.set_default_size(400,300)
>   self.vbox = gtk.VBox(0,0)
>   self.label = gtk.Label("Inserisci qui sotto i numeri 
> dei quali
> vuoi fare la media, separati da spazi.")
>   self.entry = gtk.Entry(100)
>   self.button = gtk.Button("Esegui", gtk.STOCK_EXECUTE)
>   self.button.connect("clicked", self.CalcolaMedia)
>   self.risultato = gtk.Label("Clicca su esegui, qui 
> comparira'
> il risultato")
>   self.statistiche = gtk.Label("Clicca su esegui, qui
> compariranno alcune statistiche")
>   self.vbox.pack_start(self.label)
>   self.vbox.pack_start(self.entry)
>   self.vbox.pack_start(self.button)
>   self.vbox.pack_start(self.risultato)
>   self.vbox.pack_end(self.statistiche)
>   self.win.add(self.vbox)
>   self.win.show_all()
>
>   def GetUserInput(self, widget):
>   UserInput = widget.get_text()
>   return UserInput
>
>   def OttieniNumeri(self):
>   UserInput = self.GetUserInput(self.entry)
>   import string
>   Numeri = string.split(UserInput)
>   Numeri = map(int, Numeri)
>   return Numeri

4. Per la maggior parte dei compiti non è necessario importare string, 
utilizzando le funzioni in cascata si possono evitare le variabili:

>   def OttieniNumeri(self):
>   return map(int, self.GetUserInput(self.entry).split())


>   def CalcolaMedia(self, widget):
>   Nu

Re: [Python] Programmazione web

2008-04-27 Per discussione Manlio Perillo
Lawrence Oluyede ha scritto:
> 2008/4/27 Manlio Perillo <[EMAIL PROTECTED]>:
>>  No, mi riferivo alla tua ipotesi che "qualsiasi patch di un qualsiasi
>>
>> browser non ti tolga il terreno da sotto i piedi".
> 
> Mi era venuto in mente che IE5 aveva problemi con HTTP Digest
> 

Dal codice sorgente di Apache mod_auth_digest:

/* MSIE compatibility hack.  MSIE has some RFC issues - doesn't
  * include the query string in the uri Authorization component
  * or when computing the response component.  the second part
  * works out ok, since we can hash the header and get the same
  * result.  however, the uri from the request line won't match
  * the uri Authorization component since the header lacks the
  * query string, leaving us incompatable with a (broken) MSIE.
  *
  * the workaround is to fake a query string match if in the proper
  * environment - BrowserMatch MSIE, for example.  the cool thing
  * is that if MSIE ever fixes itself the simple match ought to
  * work and this code won't be reached anyway, even if the
  * environment is set.
  */


In effetti nella mia implementazione non uso il campo 'uri' nell'header 
Authorization ma il path nella request (e senza la query string): 
funziona su IE ma su Firefox no... devo correggerlo ;-).


> [...]
>>  Credimi, non avere di mezzo i cookie ed essere comunque garantiti per la
>>  sicurezza è un bel sollievo ;-).
> 
> Sicuramente, magari provo questa soluzione, anche se rimangono almeno
> due problemi:
> 
> - non è possibile dare uno stile alla finestraccia di username e
> password del browser

Già, è così.
Inoltre la finestra riporta sempre "username" anche se, magari, tu vuoi 
usare qualche altra cosa (come l'indirizzo email) per autenticare l'utente.

> - l'overhead del fatto che il client continua a mandare il nonce anche
> quando non serve
> 

Non c'è nessun overhead.
Devi comunque controllare l'header Authorization per sapere se l'utente 
è autenticato oppure se è anonimo.

L'overhead (rispetto al metodo che usi ora) è che devi "rifare" il login 
ad ogni request, ad esempio se usi un database devi fare una query ad 
ogni request per verificare che l'utente ha le credenziali corrette.

Ma questo direi che è normale, dato che HTTP è stateless.


>>  Peccato che l'utente debba "subire" la finestra del dialogo del browser
>>  per autenticarsi (ci sono anche altri problemi minori come la minore
>>  flessibilità rispetto ai cookie nella gestione dei domini, ed il fatto
>>  che è supportato solo md5 per l'hash).
> 
> Ecco
> 
> Thanks per l'input!
> 


Di nulla, di queste cose dovrei parlarne anche al talk che presento al 
Pycon, anche se la discussione su HTTP Digest meriterebbe un talk tutto suo.




Ciao  Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Y3s

Il giorno 27/apr/08, alle ore 17:36, Lawrence Oluyede ha scritto:

> 2008/4/27 Manlio Perillo <[EMAIL PROTECTED]>:
>>  No, mi riferivo alla tua ipotesi che "qualsiasi patch di un  
>> qualsiasi
>>
>> browser non ti tolga il terreno da sotto i piedi".
>
> Mi era venuto in mente che IE5 aveva problemi con HTTP Digest


Forse vuoi dire "IE5 aveva problemi con .*" ;-)

--
Antonio Valente


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Lawrence Oluyede
2008/4/27 Manlio Perillo <[EMAIL PROTECTED]>:
>  No, mi riferivo alla tua ipotesi che "qualsiasi patch di un qualsiasi
>
> browser non ti tolga il terreno da sotto i piedi".

Mi era venuto in mente che IE5 aveva problemi con HTTP Digest

>  Il metodo è semplice: quando visiti una url speciale per il logout,
>  generi una risposta 401 marcata come "stale" e con un nuovo nonce che
>  contiene, all'inizio (ad esempio), la stringa "logout".
>
>  Quando il client vede che la risposta è stale, computa di nuovo l'hash
>  con il nuovo nonce (però senza richiedere la password all'utente) e
>  rimanda indietro il nuovo nonce e gli altri campi.
>
>  Quindi lato server quando vedi un nonce che comincia con "logout" sai
>  che devi considerare l'utente come non autenticato.
>
>  Come detto è un piccolo trucco, il browser ti sta comunque mandando le
>  credenziali corrette.
>
>  Comunque l'ho testata con tutti i browser possibili (escluso Safari) e
>  sembra funzionare.
>
>  Credimi, non avere di mezzo i cookie ed essere comunque garantiti per la
>  sicurezza è un bel sollievo ;-).

Sicuramente, magari provo questa soluzione, anche se rimangono almeno
due problemi:

- non è possibile dare uno stile alla finestraccia di username e
password del browser
- l'overhead del fatto che il client continua a mandare il nonce anche
quando non serve

>  Peccato che l'utente debba "subire" la finestra del dialogo del browser
>  per autenticarsi (ci sono anche altri problemi minori come la minore
>  flessibilità rispetto ai cookie nella gestione dei domini, ed il fatto
>  che è supportato solo md5 per l'hash).

Ecco

Thanks per l'input!

-- 
Lawrence, stacktrace.it - oluyede.org - neropercaso.it
"It is difficult to get a man to understand
something when his salary depends on not
understanding it" - Upton Sinclair
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Manlio Perillo
Lawrence Oluyede ha scritto:
> On Sun, Apr 27, 2008 at 9:50 AM, Manlio Perillo
> <[EMAIL PROTECTED]> wrote:
>>  > Non che l'approccio non sia interessante ma non puoi seriamente
>>  > pensare di mettere in produzione una cosa così sperimentale senza la
>>  > la sicurezza che una qualsiasi patch di un qualsiasi browser non ti
>>  > tolga il terreno da sotto i piedi.
>>
>>
>>  Scherzi vero?
> 
> Non ho detto che Digest è sperimentale, ho detto che la tua idea mi
> sembrava tale. Ok forse sperimentale è sbagliato, "onerosa" forse è
> più corretto
> 

No, mi riferivo alla tua ipotesi che "qualsiasi patch di un qualsiasi 
browser non ti tolga il terreno da sotto i piedi".

Non è così: il fatto che il client di rimandi indietro il "nonce" 
invariato si può dire che è alla base di HTTP Digest.

>>  > HTTP Digest è utile per
>>  > l'autenticazione ma così com'è non mi fiderei a dargli come incarico
>>  > il concetto di stato persistente. Per questo esistono i cookie, anche
>>  > se c'è chi li aborre. Io li uso solo per questo genere di
>>  > autenticazione
>>  >
>>
>>  No, si vede che non conosci come funziona HTTP Digest.
> 
> - client accede a risorsa protetta
> - server manda 401, realm e nonce
> - client risponde con nonce, username e il resto degli hash
> 
> Dettagli a parte il meccanismo è questo.
> 

Esatto.

> E per design non comprende il concetto di logout. Certo, come dici tu
> puoi ignorare gli header, ma mi sembra un hack senza un reale
> benefinicio, anzi.
> 
> Però se mi spieghi nel dettaglio cosa intendevi sono felice di sbagliarmi :)
> 

Il metodo è semplice: quando visiti una url speciale per il logout, 
generi una risposta 401 marcata come "stale" e con un nuovo nonce che 
contiene, all'inizio (ad esempio), la stringa "logout".

Quando il client vede che la risposta è stale, computa di nuovo l'hash 
con il nuovo nonce (però senza richiedere la password all'utente) e 
rimanda indietro il nuovo nonce e gli altri campi.

Quindi lato server quando vedi un nonce che comincia con "logout" sai 
che devi considerare l'utente come non autenticato.

Come detto è un piccolo trucco, il browser ti sta comunque mandando le 
credenziali corrette.

Comunque l'ho testata con tutti i browser possibili (escluso Safari) e 
sembra funzionare.

Credimi, non avere di mezzo i cookie ed essere comunque garantiti per la 
sicurezza è un bel sollievo ;-).

HTTP Digest ha il supporto lato client, e ti evita lo sbattimento di 
doverti tu preoccupare di tutto con i cookie.

Peccato che l'utente debba "subire" la finestra del dialogo del browser 
per autenticarsi (ci sono anche altri problemi minori come la minore 
flessibilità rispetto ai cookie nella gestione dei domini, ed il fatto 
che è supportato solo md5 per l'hash).






Ciao  Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Ottimizzazione codice

2008-04-27 Per discussione Leonardo
Salve a tutti.
Sono agli inizi con Python, sto imparando grazie a varie guide trovate
online, e sto iniziando ad addentrarmi nell'ottimizzazione del codice.
Ora, ho scritto questo piccolo programmino (con GUI in pyGTK) che
accetta dei numeri come input, ne calcola la media, e restituisce la
media, il numero maggiore immesso, il numero minore, il numero più
vicino alla media.
Ora, vorrei dei consigli su come ottimizzare il codice, magari
sostituendo qualche ciclo if con qualcosa di più performante o simili =D
posto il codice: (non insultatemi perchè non c'è nemmeno un commento o
una doc string xD)


import pygtk
pygtk.require('2.0')
import gtk

def Media(numeri):
divisore = len(numeri)
a = 0
for num in numeri:
a = a + float(num)
try:
media = float(a) / float(divisore)
return media
except:
return None

def DistanzaDallaMedia(numero, media):
numero = float(numero)
distanzamedia = abs(numero - media)
return distanzamedia

class Finestra:
def __init__(self):
self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.win.set_title("Calcolo media aritmetica")
self.win.connect("destroy", self.esci)
self.win.connect("delete_event", self.delete_event)
self.win.set_default_size(400,300)
self.vbox = gtk.VBox(0,0)
self.label = gtk.Label("Inserisci qui sotto i numeri 
dei quali
vuoi fare la media, separati da spazi.")
self.entry = gtk.Entry(100)
self.button = gtk.Button("Esegui", gtk.STOCK_EXECUTE)
self.button.connect("clicked", self.CalcolaMedia)
self.risultato = gtk.Label("Clicca su esegui, qui 
comparira'
il risultato")
self.statistiche = gtk.Label("Clicca su esegui, qui
compariranno alcune statistiche")
self.vbox.pack_start(self.label)
self.vbox.pack_start(self.entry)
self.vbox.pack_start(self.button)
self.vbox.pack_start(self.risultato)
self.vbox.pack_end(self.statistiche)
self.win.add(self.vbox)
self.win.show_all()

def GetUserInput(self, widget):
UserInput = widget.get_text()
return UserInput

def OttieniNumeri(self):
UserInput = self.GetUserInput(self.entry)
import string
Numeri = string.split(UserInput)
Numeri = map(int, Numeri)
return Numeri

def CalcolaMedia(self, widget):
Numeri = self.OttieniNumeri()
MediaCalcolata = Media(Numeri)
if MediaCalcolata: 
self.risultato.set_text("La media calcolata 
equivale a  " +
str(MediaCalcolata))
Statistiche = {}
for num in Numeri:
if 'maggiore' not in Statistiche.keys():
Statistiche['maggiore'] = num
Statistiche['minore'] = num
Statistiche['vicino_media'] = 
num
else:
if DistanzaDallaMedia(num, 
MediaCalcolata) <
DistanzaDallaMedia(Statistiche['vicino_media'], MediaCalcolata):

Statistiche['vicino_media'] = num
if num > 
Statistiche['maggiore']:
Statistiche['maggiore'] 
= num
elif num < 
Statistiche['minore']:
Statistiche['minore'] = 
num
self.StampaStatistiche(Statistiche)
else:
self.risultato.set_text("Devi inserire almeno 
un numero!")

def StampaStatistiche(self, Statistiche):
self.statistiche.set_text("Il numero maggiore inseirto 
e' " +
str(Statistiche['maggiore']) + "\nIl numero minore inserito e' "
+ str(Statistiche['minore']) + "\nIl numero ins

Re: [Python] Programmazione web

2008-04-27 Per discussione Lawrence Oluyede
On Sun, Apr 27, 2008 at 9:50 AM, Manlio Perillo
<[EMAIL PROTECTED]> wrote:
>  > Non che l'approccio non sia interessante ma non puoi seriamente
>  > pensare di mettere in produzione una cosa così sperimentale senza la
>  > la sicurezza che una qualsiasi patch di un qualsiasi browser non ti
>  > tolga il terreno da sotto i piedi.
>
>
>  Scherzi vero?

Non ho detto che Digest è sperimentale, ho detto che la tua idea mi
sembrava tale. Ok forse sperimentale è sbagliato, "onerosa" forse è
più corretto

>  > HTTP Digest è utile per
>  > l'autenticazione ma così com'è non mi fiderei a dargli come incarico
>  > il concetto di stato persistente. Per questo esistono i cookie, anche
>  > se c'è chi li aborre. Io li uso solo per questo genere di
>  > autenticazione
>  >
>
>  No, si vede che non conosci come funziona HTTP Digest.

- client accede a risorsa protetta
- server manda 401, realm e nonce
- client risponde con nonce, username e il resto degli hash

Dettagli a parte il meccanismo è questo.

E per design non comprende il concetto di logout. Certo, come dici tu
puoi ignorare gli header, ma mi sembra un hack senza un reale
benefinicio, anzi.

Però se mi spieghi nel dettaglio cosa intendevi sono felice di sbagliarmi :)

-- 
Lawrence, stacktrace.it - oluyede.org - neropercaso.it
"It is difficult to get a man to understand
something when his salary depends on not
understanding it" - Upton Sinclair
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Manlio Perillo
Nicola Larosa ha scritto:
> Manlio Perillo wrote:
>> Per il resto, come detto io ho dato una occhiata a Django un 10 mesi fa,
>> e non ho seguito lo sviluppo (sono iscritto alla mailing list ma è
>> troppo trafficata).
> 
> Wow, *la* mailing list? B-D Non c'è una mailing list. :-)
> 
> Ci sono *due* Google Groups: django-users e django-developers.
> 

Vero, sono iscritto ad entrambi e vi accedo tramite email.

> Il primo è effettivamente molto trafficata, non tengo il passo neanch'io; ma
> il secondo non granché, siamo sui 15-20 messaggi al giorno, e alcuni thread
> si possono skippare tranquillamente.
> 

Al momento django-users è su 5566 messaggi non letti, e 
django-developers su 1141 messaggi non letti :-).




Ciao  Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Nicola Larosa
Manlio Perillo wrote:
> Per il resto, come detto io ho dato una occhiata a Django un 10 mesi fa,
> e non ho seguito lo sviluppo (sono iscritto alla mailing list ma è
> troppo trafficata).

Wow, *la* mailing list? B-D Non c'è una mailing list. :-)

Ci sono *due* Google Groups: django-users e django-developers.

Il primo è effettivamente molto trafficata, non tengo il passo neanch'io; ma
il secondo non granché, siamo sui 15-20 messaggi al giorno, e alcuni thread
si possono skippare tranquillamente.

-- 
Nicola Larosa - http://www.tekNico.net/

Is there an [IT] talent shortage? Only because employers have created it.
The real shortage is in good management. Without proper seeding, feeding
and cultivating, the IT community withers like any other garden.
 - Nick Corcodilos, June 2007


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Manlio Perillo
Lawrence Oluyede ha scritto:
> 2008/4/26 Manlio Perillo <[EMAIL PROTECTED]>:
>>  In parole povere: sono io a non capire perchè Django debba
>>  (re)implementare quello che fa già WSGI, invece che costruire sopra WSGI
>>  stesso.
> 
> Django prima release pubblica: 2005
> WSGI: 2003 (e non ricordo molti framework che lo usavano 5 anni fa)
> Primo supporto WSGI per Apache (il target di Django): 2007
> 
> IMHO è semplicemente andata così. 

Ma è quello che io sto ripetendo :).
E' andata così e un pò me ne dispiace.


> Senza contare il fatto che secondo
> me dai per scontato che WSGI sia il modo giusto per forza di
> sviluppare applicazioni web 

Non applicazioni web, ma "librerie" o framework web.

 >
> e che WSGI piaccia a tutta la comunità.
> 

Ed infatti ora WSGI lo usano praticamente tutti.
Come i software di Ian Bicking, del resto... ;-).



Ciao   Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Alessandro Dentella
> A questo aggiungi la recente aggiunta del declarative layer:
> http://www.sqlalchemy.org/docs/04/plugins.html#plugins_declarative

Leggo con molto piacere di questo layer che mi era sfuggito. Mi pare che
introduca un livello di semplificazione e leggibilità


Credo che a Django faccia bene essere un team, ragionano molto sulla
sintassi che in genere risulta semplice e facile da apprendere. Sqlalchemy
per contro è sicuramente più completa e potente (per questo l'ho scelta per
un mio editor di db) ma è anche piuttosto difficile da apprendere.

Magari la natura dichiarativa dell'ORM di Django ha positivamente
influenzato sa?

sandro
*:-)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Manlio Perillo
Lawrence Oluyede ha scritto:
> [...]
>>  Con HTTP Digest hai a disposizione due campi, nonce ed opaque che puoi
>>  gestire come stato lato client.
>>
>>  Basta gestirli al meglio per riuscire a gestire il logout (ovviamente il
>>  client ti continua a mandare le credenziali, ma lato server puoi
>>  verificare se è stato richiesto il logout ed agire di conseguenza -
>>  questa tecnica non l'ho vista da nessun altra parte, quindi non sono
>>  sicuro che non sia esente da problemi).
> 
> Non che l'approccio non sia interessante ma non puoi seriamente
> pensare di mettere in produzione una cosa così sperimentale senza la
> la sicurezza che una qualsiasi patch di un qualsiasi browser non ti
> tolga il terreno da sotto i piedi. 


Scherzi vero?

> HTTP Digest è utile per
> l'autenticazione ma così com'è non mi fiderei a dargli come incarico
> il concetto di stato persistente. Per questo esistono i cookie, anche
> se c'è chi li aborre. Io li uso solo per questo genere di
> autenticazione
> 

No, si vede che non conosci come funziona HTTP Digest.

>>  Mi riferivo al fatto che, ad esempio TextField nel Model indica *sia*
>>  che il tipo di dato da usare nel database è di tipo testo, *sia* che il
>>  controllo nel form è una textarea.
> 
> Ma anche no: http://www.djangoproject.com/documentation/newforms/#charfield
> 

Per il resto, come detto io ho dato una occhiata a Django un 10 mesi fa, 
e non ho seguito lo sviluppo (sono iscritto alla mailing list ma è 
troppo trafficata).

Certo 1 anno è molto in informatica, ma nemmeno tanto.

Comunque si, stavo in effetti facendo FUD, ma riportavo le impressioni 
avute 10 mesi fa ;-).

Che sia ingiusto è vero, e me ne scuso, ma comunque rispecchia delle 
scelte di sviluppo che erano state fatte (il fatto che comunque siano 
state corrette ed in modo quasi indolore è indice di come Django valido).

 > [...]



Ciao  Manlio Perillo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Programmazione web

2008-04-27 Per discussione Valentino Volonghi
On Sat, Apr 26, 2008 at 8:25 PM, Lawrence Oluyede <[EMAIL PROTECTED]> wrote:

>  È una modifica che è appena stata inserita nel trunk:
>  

Talk about API change ;)

-- 
Valentino Volonghi aka Dialtone
Now running MacOS X 10.5
Home Page: http://www.twisted.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python