[Python] mod_python ed il giusto handler

Valentino Volonghi aka Dialtone dialtone a divmod.com
Ven 18 Ago 2006 19:33:02 CEST


On Fri, 18 Aug 2006 19:09:26 +0200, Andrea Giammarchi <andrea a 3site.it> wrote:
>usato male anche JSON è pericoloso, tanto quanto qualunque chiamata via HTTP 
>...

Chiaro ma e` piu` difficile usare male qualcosa che usarlo e basta.

>già definito dal PHP, formato serialize / unserialize di php

Trovo questo modo di introdurre una roba di php in python piuttosto discutibile, ad ogni modo: come funziona questo formato?

>bisogna avere un Q.I. molto basso per pensare di trasportare un oggetto che 
>lavora su filesystem in javascript.

Allora non capisco... Se il tuo 'oggetto' e` un contenitore di tipi builtin tutto quello che stai facendo e` assolutamente inutile. I metodi non li puoi trasferire da javascript a python, puoi semplicemente trasferire lo stato. In python pero` gli oggetti non sono altro che dizionari, allora perche` complicarsi la vita per scrivere tutto sto popo` di roba quando basta saper trasmettere dizionari?

>Detto questo, dite di apprezzare tanto l'astrazione e vi castrate con questa 
>possibilità ?

Castrare? Bisognerebbe conoscerlo python prima di avanzare ipotesi :).

>Inviare un oggetto User, manipolarlo su ogni client, aggiornarlo e salvarlo 
>sul db o su un cookie, ad esempio, credi sia così inutile sul web ?

Prima mi spieghi cosa significa quello che hai scritto. Mi riferisco a 'manipolarlo su ogni client'. Senza contare la totale inutilita` del serializzare oggetti arbitrari quando quello che vuoi e` semplicemente inviare un dizionario. Che una volta chiamato user come variabile sul client puo` essere usato attraverso user.nomeutente come se fosse un oggetto.

Io questo non lo chiamerei castrare, lo chiamerei evitare di lavorare il doppio.

>Non parlo di new User().name e basta, parlo anche di metodi ben definiti 
>anche sul client come un me.login() che se da un true autentica l'utente, 
>programmazione ad oggetti client tanto quanto sul server, facile, sicuro, 
>cos'altro dire ?

Che io faccio gia` cosi` senza dover trasmettere oggetti. Pazienza eh :).

>no, non puoi, se vuoi avere anche la possibilità di manipolare oggetti a 
>polimorfismo variabile client / server (non so cosa abbia appena detto ma è 
>l'unica cosa che mi veniva da dire).

Ma che dici? polimorfismo variabile client / server? 

>Le classi e la OOP la conoscete molto bene e non capisco questo accanimento 
>contro il trasporto di oggetti.
>>Che significa numeri veri senza encoding diverso?

>utf8 ... in php serializzare 'à' può produrre, in charset non UTF-8, 
>s:1:"à"; .... in un charset UTF8 o con dati salvati in UTF8 produce invece 
>s:2:"à"; .... il 2 non è la length della stringa, è il numero di bytes usati 
>per essa. Questa caratteristica rallenta la riconversione in UTF8 ma solo 
>col PHP, se JS è usato con Python o C# questa "features" non è necessaria, 
>quindi nessun rallentamento.

Decisamente non sai cosa siano gli encoding... E non ti biasimo venendo da php. Nel mondo esistono due tipi di stringhe. stringhe di bytes e stringhe di testo. Le stringhe di byte sono tali perche` codificate in un certo modo, la funzione len() su di esse ritorna appunto la lunghezza di tale stringa.
Le stringhe di testo invece sono in unicode e la funzione len() ritorna il numero di caratteri.
Perche` e` assurdo che la stringa di byte (ovvero una stringa di testo codificata in utf-8) debba ritornare i caratteri e non la lunghezza? Perche` se non gli dici che encoding usa non c'e` alcun modo per differenziare i caratteri che la compongono.

Noto tanta confusione riguardo alle stringhe dagli utenti php. Per quanto si puo` capire per PHP unicode e UTF-8 sono la stessa cosa, non mi stupisce dunque che il comportamento della len sia fuori dalla comprensione umana.

Per maggiori informazioni:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
http://www.joelonsoftware.com/articles/Unicode.html

>facciamo a capirci ... la classe Pear per "serializzare" e "deserializzare" 
>JSON, per quanto ottimizzata, è un mostro di lentezza perchè deve fare un 
>char by char con non so quante regexp per ogni stringa che incontra. La 
>versione compilata non è quasi mai presente negli hosts e quindi usare 
>quella classe è un suicidio per prestazioni e risorse.

Ma stiamo usando python per cui mi sfugge il nesso.

>Stando a questo, usare serialize invece di JSON premette veramente di creare 
>applicativi enormenente complessi capaci di gestire una "enorme" utenza.

Io lo faccio gia` usando json, e lo fanno tantissimi altri developer python. Che ne dici di evitare di pensare a python come a quel accrocchio di php?

>si, lo so, ma la PHP_Serializer ha tutti i tricks possibili per far si che 
>non si noti la differenza tra le due versioni e delega comunque il compito 
>al client, nel caso di PHP.

Come fa a delegare il compito al client? Inoltre PHP_serializer si chiama PHP_serializer, prima di implementarla, anche se utilissima, sarebbe bene imparare cio` che esiste gia` in python.

>non ho approfondito ma pare pseudo compilino e mettano in cache e siano più 
>veloci di almeno un 20% rispetto le precedenti.

E le precedenti sono?

>La facilità di un eval non mi interessa affatto quando il problema dei siti 
>è sempre il server e raramente i calcoli sul client.

Questo lo dici tu pero`. Il mio browser con gmail la pensa diversamente quando apre un popup dicendomi che lo script e` non responsivo.

>Un modulo in C sicuramente più veloce del solo Python per fare una 
>PHP_Serializer per quest ultimo che non sprechi troppe risorse .... cosa che 
>ho già scritto, ma che non va per via di un.NET framework ...

Sforzo inutile.

>Parlavo di UTF-8, errore mio.

A giudicare da quello che hai scritto sopra direi che il problema e` piu` che un errore semplice.


Maggiori informazioni sulla lista Python