Re: [Python] [OT] pgBadger

2014-02-13 Per discussione Carlos Catucci
2014-02-13 9:31 GMT+01:00 Giovanni Porcari giovanni.porc...@softwell.it:

 Che dire... grazie Perl ?


Non chiederti cosa il tuo linguaggio preferito possa fare per te ma
piuttosto cosa tu puoi fare per il tuo linguaggio preferito. Riscrivi
pgbadger in python ;)

Carlos
-- 
Je suis marxiste, de tendance Groucho.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Manlio Perillo

On 13/02/2014 12:12, Stefano Bossi wrote:

[...]
Ma qualcuno di voi ha in produzione qualcosa di scritto in go?
Se sì, posso sapere perchè l'avete preferito al python?
Ci sono altri vantaggi grossi oltre ai quelli che riguardano la concorrenza?



Che è più efficiente di Python, restando però molto usabile (non a 
livello di Python, ma nemmeno a basso livello come C).


Con Python se vuoi ottimizzare puoi solo farlo riscrivendo alcune 
funzioni in C, guidato da un profiler.
Per programmi più complessi, Go si posiziona bene come linguaggio 
unico (intendendo che puoi scrivere tutto in un solo linguaggio con un 
buon bilanciamento di prestazioni e facilità di scrittura/manutenzione 
codice).


La concorrenza direi che è la classica ciliegina sulla torta (a 
differenza, ad esempio, di Erlang, dove la concorrenza è forse l'*unica* 
ragione per sceglierlo).


Tutto questo ad intuito, non avendo mai usato sul serio Go (non mi 
piacciono alcune decisioni prese a livello di design).




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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Marco De Paoli
Il giorno 13 febbraio 2014 12:20, Manlio Perillo
manlio.peri...@gmail.comha scritto:

 (non mi piacciono alcune decisioni prese a livello di design).


esempio?

...scusa ma mi (ci?) hai incuriosito

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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Carlos Catucci
2014-02-13 12:20 GMT+01:00 Manlio Perillo manlio.peri...@gmail.com:

 Che è più efficiente di Python, restando però molto usabile (non a livello
 di Python, ma nemmeno a basso livello come C).

 Con Python se vuoi ottimizzare puoi solo farlo riscrivendo alcune funzioni
 in C, guidato da un profiler.
 Per programmi più complessi, Go si posiziona bene come linguaggio unico
 (intendendo che puoi scrivere tutto in un solo linguaggio con un buon
 bilanciamento di prestazioni e facilità di scrittura/manutenzione codice).

 La concorrenza direi che è la classica ciliegina sulla torta (a
 differenza, ad esempio, di Erlang, dove la concorrenza è forse l'*unica*
 ragione per sceglierlo).

 Tutto questo ad intuito, non avendo mai usato sul serio Go (non mi
 piacciono alcune decisioni prese a livello di design).


Io non lo conosco e sto approcciandomi ora a studiacchiarlo.
Non mi fa impazzire, non ha la pulizia stilistica del Python ne
l'immediatezza del C. Pero' il mio e' un parere per avere letto una
introduzione qui

http://okpanico.wordpress.com/2011/03/13/go-specifiche-del-linguaggio-prima-parte/

Sara' il redattore dell'articolo che ha espresso le cose in maniera da
apparirmi particolarmente confusa pero':

1. Il tipo *string* si comporta come un *array di byte*, una volta settati
sono immutabili. Cioè è illegale assegnare un valore a *s[i]*.

A me sembra una cosa complicata, in C posso cambiare un carattere di un
array di caratteri (una stringa in pratica), e qui mi sembra sia vietato.

2. Come nel C gli indici sono compresi in [0 .. len(a)-1]. I tipi sono
sempre monodimensionali ma possono essere composti per creare tipi
multidimensionali.

Esempi:

[32]byte
[2*N] struct { x, y int32 }
[1000]*float64
[3][5]int
[2][2][2]float64  // equivalente a [2]([2]([2]float64))

Non ci ho capito una cippa. Ribadisco che e' stata solo una letta veloce,
ma mi ha davvero confuso i pochi neuroni superstiti.

3. Come per gli array le slice sono sempre monodimensionali ma possono
essere composte per creare oggetti di più dimensioni. Per gli array di
array gli array costituenti sono sempre della stessa lunghezza per
costruzione; diversamente per le slice di slice (o array di slice) le
lunghezza possono cambiare dinamicamente. Inoltre le slice costituenti
devono essere allocate individualmente, con *make()*.

Per finire di far fondere il mio cervello che col giu' dalle orecchie (per
questo devo sbrigrami a concludere questo post)

Carl...
-- 
Je suis marxiste, de tendance Groucho.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione enrico franchi
2014-02-13 11:12 GMT+00:00 Stefano Bossi ste.bo...@gmail.com:


 Ma qualcuno di voi ha in produzione qualcosa di scritto in go?


Ho visto di tutto. Stiamo facendo una certa pressione per provare ad
introdurre piu' massicciamente Go.
Ma non ha un monte di trazione.

Per certe cose sarebbe proprio perfetto...


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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione enrico franchi
2014-02-13 13:01 GMT+00:00 Carlos Catucci carlos.catu...@gmail.com:


 2014-02-13 12:20 GMT+01:00 Manlio Perillo manlio.peri...@gmail.com:

 Che è più efficiente di Python, restando però molto usabile (non a livello
 di Python, ma nemmeno a basso livello come C).

 Con Python se vuoi ottimizzare puoi solo farlo riscrivendo alcune
 funzioni in C, guidato da un profiler.
 Per programmi più complessi, Go si posiziona bene come linguaggio unico
 (intendendo che puoi scrivere tutto in un solo linguaggio con un buon
 bilanciamento di prestazioni e facilità di scrittura/manutenzione codice).

 La concorrenza direi che è la classica ciliegina sulla torta (a
 differenza, ad esempio, di Erlang, dove la concorrenza è forse l'*unica*
 ragione per sceglierlo).

 Tutto questo ad intuito, non avendo mai usato sul serio Go (non mi
 piacciono alcune decisioni prese a livello di design).


 Io non lo conosco e sto approcciandomi ora a studiacchiarlo.
  Non mi fa impazzire, non ha la pulizia stilistica del Python ne
 l'immediatezza del C.


Frase ad effetto, ma non vuole dire moltissimo... Come immediatezza io lo
trovo piuttosto buono.
Se vuoi ha meno cose sorprendenti rispetto al C. Parliamo di un
linguaggio che ti accetta 5[p], voglio dire... non e' tutto rose e fiori.



  Pero' il mio e' un parere per avere letto una introduzione qui


 http://okpanico.wordpress.com/2011/03/13/go-specifiche-del-linguaggio-prima-parte/


Ora io l'articolo non lo ho letto, ma magari prima di formarti un parere
leggi le introduzioni top ranked... no?





 1. Il tipo *string* si comporta come un *array di byte*, una volta
 settati sono immutabili. Cioè è illegale assegnare un valore a *s[i]*.

 A me sembra una cosa complicata, in C posso cambiare un carattere di un
 array di caratteri (una stringa in pratica), e qui mi sembra sia vietato.


Le stringhe immutabili sono una gran cosa, davvero. Se vuoi un array
mutabile fai un array di bytes.


 2. Come nel C gli indici sono compresi in [0 .. len(a)-1]. I tipi sono
 sempre monodimensionali ma possono essere composti per creare tipi
 multidimensionali.


Si, non e' molto chiaro. Credo che voglia dire che in Go, come in C, una
matrice fatta alla naive (per dire) non e' una cosa a se stante, ma e'
realmente un array di array.


 3. Come per gli array le slice sono sempre monodimensionali ma possono
 essere composte per creare oggetti di più dimensioni. Per gli array di
 array gli array costituenti sono sempre della stessa lunghezza per
 costruzione; diversamente per le slice di slice (o array di slice) le
 lunghezza possono cambiare dinamicamente. Inoltre le slice costituenti
 devono essere allocate individualmente, con *make()*.

 Per finire di far fondere il mio cervello che col giu' dalle orecchie (per
 questo devo sbrigrami a concludere questo post)

 So come funzionano le slice, e non capisco cosa vuole dire. ;)



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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Carlo Miron
Il 13 febbraio 2014 15:35, enrico franchi enrico.fran...@gmail.com
ha scritto::

 Le stringhe immutabili sono una gran cosa, davvero. Se vuoi un array
 mutabile fai un array di bytes.

di rune (sinonimo di int32). le stringhe go sono utf8.

-- 
©
::

R
 K-M-S
L
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Carlos Catucci
2014-02-13 15:24 GMT+01:00 enrico franchi enrico.fran...@gmail.com:

 Per certe cose sarebbe proprio perfetto...


Per quali? SOlo per sapere, vista la mia ignoranza sull'oGgettO


-- 
Je suis marxiste, de tendance Groucho.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Leggere tag RFID con PySerial

2014-02-13 Per discussione Perini Matteo

Ciao a tutti,
ho questo lettore RFID:
http://www.apromix.it/product.asp?IdProdotto=999

Da linux mi viene creato il dev ttyUSB0

Ho scritto il seguente codice:

import serial

if __name__ == '__main__':

buff = ''

ser=serial.Serial('/dev/ttyUSB0',125000,timeout=0)

while True:

a=ser.read(ser.inWaiting())

buff = buff + a

print a

print len(buff)

if '\n' in buff:

lines = buff.split('\n')

last_received = lines[-2]

print last_received

Il tutto sembra funzionare nel senso che qualcosa arriva tramite la seriale.
len(buff) aumenta ogni volta che avvicino la carta ma con print a non mi 
viene mostrato alcun numero/carattere.

Sapete dirmi come decodificare quello che arriva?
Sembra non arrivare mai un /n.
Grazie per ogni aiuto.
Ciao
Matteo
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Daniele Varrazzo

On 2014-02-13 13:01, Carlos Catucci wrote:

1. Il tipo *string* si comporta come un *array di byte*, una volta 
settati

sono immutabili. Cioè è illegale assegnare un valore a *s[i]*.

A me sembra una cosa complicata, in C posso cambiare un carattere di 
un
array di caratteri (una stringa in pratica), e qui mi sembra sia 
vietato.


In C non esistono stringe. Quello che tu credi di fare ad una stringa 
lo stai facendo ad un array di caratteri. Considerare una stringa un 
array di cose comporta una serie di svantaggi, a cui forse siamo 
abituati, ma svantaggi restano:


- sei legato all'implementazione del carattere (char, utf16, utf32)
- un tipo mutabile non può essere hashato (per rispondere alla tua 
domanda nell'altra mail)


Ha anche il vantaggio di poter accedere con efficienza o(1) al 
carattere N. Questo vantaggio è largamente sopravvalutato (anche da me, 
per molto tempo: c'ho avuto le migliori discussioni con un amico). 
Quanti casi di uso richiedono di accedere al carattere 100 di una 
stringa? Soprattutto quando potresti non sapere se quella stringa è di 
byte in encoding utf8, quindi il byte 100 potrebbe non rappresentare 
neanche un carattere?


un array di caratteri (una stringa in pratica) è un'abitudine dura a 
morire, ma dalla sua morte si può guadagnare parecchia igiene mentale.


-- Daniele

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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Carlos Catucci
2014-02-13 16:07 GMT+01:00 Daniele Varrazzo p...@develer.com:

 In C non esistono stringe. Quello che tu credi di fare ad una stringa lo
 stai facendo ad un array di caratteri.


Certo che si. Infatti in C io considero un array di caratteri. In Python ho
un oggetto. Qui non ho capito ancora. Ribadisco, non ho ANCORA capito, devo
leggermi tutto, provarlo e poi posso dire qualcosa.

Volevo solo far notare che le frasi del tipo erano alquanto ambigue e
difficili da interpretare.

Carlos
-- 
Je suis marxiste, de tendance Groucho.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Manlio Perillo

On 13/02/2014 16:07, Daniele Varrazzo wrote:

On 2014-02-13 13:01, Carlos Catucci wrote:


1. Il tipo *string* si comporta come un *array di byte*, una volta
settati
sono immutabili. Cioè è illegale assegnare un valore a *s[i]*.

A me sembra una cosa complicata, in C posso cambiare un carattere di un
array di caratteri (una stringa in pratica), e qui mi sembra sia vietato.


In C non esistono stringe. Quello che tu credi di fare ad una stringa lo
stai facendo ad un array di caratteri. Considerare una stringa un array
di cose comporta una serie di svantaggi, a cui forse siamo abituati, ma
svantaggi restano:

- sei legato all'implementazione del carattere (char, utf16, utf32)


Direi che lo stesso problema è presente, in parte, con Go:
http://golang.org/ref/spec#String_types

String types

A string type represents the set of string values. A string value is a 
(possibly empty) sequence of bytes. Strings are immutable: once created, 
it is impossible to change the contents of a string. The predeclared 
string type is string.


The length of a string s (its size in bytes) can be discovered using the 
built-in function len. The length is a compile-time constant if the 
string is a constant. A string's bytes can be accessed by integer 
indices 0 through len(s)-1. It is illegal to take the address of such an 
element; if s[i] is the i'th byte of a string, s[i] is invalid.



Quindi direi che le stringhe in Go non sono vere stringhe, come in Python:
http://play.golang.org/p/6Q7KoyuEA1

Il programma stampa 6, non 2 come mi sarei aspettato da un linguaggio 
che supporta un tipo builtin per le stringhe.




Ciao  Manlio

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


[Python] Vi è mai capitato? (Select su SQL)

2014-02-13 Per discussione piergiorgio pancino
Ciao a tutti,
mi è capitata una cosa strana:
faccio un select su una tabella, semplicissimo select *,
la tabella ha 92 campi, ma il fetchall mi restituisce 93 valori di cui l'ultimo 
in più è una data ed è uguale al penultimo e terz'ultimo campo

[omissis]
0.0
1799-12-31 00:00:00
1799-12-31 00:00:00
66650112
                              (ultimo campo della tabella correttamente nullo)
1799-12-31 00:00:00 (campo in più)


La query è semplicissima ovvero:
self.query = SELECT *  \
                     FROM dbo.IM_JobsSummary  \
                     WHERE ((dbo.IM_JobsSummary.Job)= ? );
self.values = (Job,)
self.cur.execute(self.query,self.values)
result= self.cur.fetchall()

A voi è mai capitata? Idee?

Ciao e grazie
Piergiorgio___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Dario Bertini
On February 13, 2014 4:22:45 PM CET, Manlio Perillo manlio.peri...@gmail.com 
wrote:


Quindi direi che le stringhe in Go non sono vere stringhe, come in
Python:
http://play.golang.org/p/6Q7KoyuEA1

Il programma stampa 6, non 2 come mi sarei aspettato da un linguaggio 
che supporta un tipo builtin per le stringhe.



Import unicode/utf8
utf8.RuneCountInString

Concordo con te però sul fatto che non fa certo ciò che ci si aspetterebbe da 
una stringa di testo

-- 
Sent from mobile. Please excuse my brevity.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Vi è mai capitato? (Select su SQL)

2014-02-13 Per discussione Carlos Catucci
2014-02-13 16:43 GMT+01:00 piergiorgio pancino piert...@yahoo.it:

 A voi è mai capitata? Idee?


Dovresti dirci almeno su che database su cui la esegui, sistema operativo,
meglio se anche versione degli stessi.

Carlos
-- 
Je suis marxiste, de tendance Groucho.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Daniele Varrazzo

On 2014-02-13 15:22, Manlio Perillo wrote:

On 13/02/2014 16:07, Daniele Varrazzo wrote:



- sei legato all'implementazione del carattere (char, utf16, utf32)


Direi che lo stesso problema è presente, in parte, con Go:
http://golang.org/ref/spec#String_types


Il problema è risolto dal fatto che hanno dichiarato che le stringhe 
sono solo 8 bit e sono solo codificate in utf8, mentre l'accesso ai 
codepoint unicode ha un'interfaccia separata. Questo porta alle 
conseguenze che:


- sono più efficienti in memoria di utf16/32
- sai che a[n] non è un carattere ma è un byte. La bugia dei widechar 
non regge. Neanche quella di unicode in python che però si rompe al di 
fuori del BMP (a meno che non lo compili 4 byte per carattere blah blah)

- tipicamente l'i/o non richiede encoding/decoding
- accedere ai codepoint lo fai con interfaccia sequenziale, non con un 
array. Se mi ricordo bene (non tocco Go da un anno) ci sono interfacce 
che streamano rune partendo da stringhe.



Quindi direi che le stringhe in Go non sono vere stringhe, come in 
Python:

http://play.golang.org/p/6Q7KoyuEA1

Il programma stampa 6, non 2 come mi sarei aspettato da un linguaggio
che supporta un tipo builtin per le stringhe.


utf8.RuneCountInString(s) restituisce 2.

Cosa devi sapere più spesso: quanti caratteri contiene una stringa o 
quanti byte ne occupa il buffer? Conoscere il numero di caratteri di una 
stringa è un'altra operazione largamente sopravvalutata (non scrivi 
tutti i giorni un algoritmo per centrare una stringa di caratteri non 
proporzionali in uno schermo). Molti algoritmi possono essere espressi 
con un'iterazione sull'input che dura fino al verificarsi di una certa 
condizione (fine dell'input, o altro): per questi non ti serve la 
lunghezza.


Quanti caratteri è lungo:

html世界/html

dipende dal contesto, no? Molte volte 2 è la risposta giusta. In 
termini di occupazione 19 è la risposta giusta. 15 è una risposta 
interessante? Forse si, ma non mi viente in mente dove. Sia 2 che 15 
richiedono una certa quantità di parsing per essere ottenute. Con Python 
paghi sempre l'overhead necessario per avere la risposta 15 in o(1), che 
ti serva o meno. Se ti serviva 19 dovevi aprire il file in binario ed 
usare un'interfaccia radicalmente diversa (str[n] - str, bytes[n] - 
int). Con Go paghi l'overhead del decoding solo quando serve.


È un linguaggio opinionato: quando incontra gente opinionata può 
piacere o non piacere :) Trovo la scelta di avere stringhe solo utf8 
molto razionale nel 201x, anche se richiede aggiustamenti mentali 
rispetto ad abitudini prese nel 197x. Ma allora non esistevano i cinesi, 
né le lettere accentate, né l'€, quindi è comprensibile...


-- Daniele

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


Re: [Python] Leggere tag RFID con PySerial

2014-02-13 Per discussione Kbyte
 ser=serial.Serial('/dev/ttyUSB0',125000,timeout=0)

Sei sicuro che quel lettore sia impostato a 125000 baud? Non conosco
quel modello, ma quelli che mi sono capitati a tiro usavano velocità
inferiori.

 Sapete dirmi come decodificare quello che arriva?
 Sembra non arrivare mai un /n.

Non è detto che il lettore trasmetta un /n come se fosse un lettore
di codice a barre. Controlla se il numero di bytes ricevuti è sempre
lo stesso e verifica i dati letti il codice nell'rfid come verifica.
Cmq nella documentazione tecnica non c'è nulla di utile?

-- 
| /
| \Byte - Andrea Briganti
Blog: http://kbyte.snowpenguin.org
Museo archeologia informatica: http://www.verdebinario.org
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Dario Bertini
On 02/13/2014 05:03 PM, Daniele Varrazzo wrote:
 - sai che a[n] non è un carattere ma è un byte. La bugia dei widechar
 non regge. Neanche quella di unicode in python che però si rompe al di
 fuori del BMP (a meno che non lo compili 4 byte per carattere blah blah)

Forse sono pignolo, ma la bugia dei widechar non regge non vuol dire
quasi nulla visto che:
- non specifichi cos'è un widechar (è un codeunit a 16 bit, o un
codepoint memorizzato in 32?)
- non chiarisci in che modo non regge

Python da questo punto di vista non ha nessun problema, con Py3.3
l'astrazione unicode non mi sembra sia leaky e comunque mi risulta che
tutte le distro linux fornissero da diversi anni solo le wide build di
python di default

insomma: di default le cose funzionano bene da anni... anche se sono
d'accordo che il fardello cognitivo del ricordarsi di fallire
graziosamente sulle narrow build fosse un deal breaker

 - tipicamente l'i/o non richiede encoding/decoding

Questo vuol dire che se i dati che leggi non sono codificati
correttamente te ne accorgi proprio nel mezzo dell'elaborazione

essere lazy spesso è una cosa positiva... ma ha i suoi tradeoff

 Cosa devi sapere più spesso: quanti caratteri contiene una stringa o
 quanti byte ne occupa il buffer? Conoscere il numero di caratteri di una
 stringa è un'altra operazione largamente sopravvalutata (non scrivi
 tutti i giorni un algoritmo per centrare una stringa di caratteri non
 proporzionali in uno schermo). Molti algoritmi possono essere espressi
 con un'iterazione sull'input che dura fino al verificarsi di una certa
 condizione (fine dell'input, o altro): per questi non ti serve la
 lunghezza.
 

D'accordo, spero chi programma in Go non parta dalle assunzioni sbagliate

penso sarebbe stato meglio fare di len(whatever) un compile error in
Go, e fornire una funzione size() allo scopo... size si presta di meno
ad essere fraintesa come lunghezza di un testo

 Sia 2 che 15 richiedono una
 certa quantità di parsing per essere ottenute. Con Python paghi sempre
 l'overhead necessario per avere la risposta 15 in o(1), che ti serva o
 meno. Se ti serviva 19 dovevi aprire il file in binario ed usare
 un'interfaccia radicalmente diversa (str[n] - str, bytes[n] - int).
 Con Go paghi l'overhead del decoding solo quando serve.
 
 È un linguaggio opinionato

Anche Python è un linguaggio opinionato: solo perchè a te non piacciono
i bytes literals (così mi sembra), non vuol dire che paghi sempre
l'overhead necessario :P


-- 
xmpp: berda...@gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Manlio Perillo

On 13/02/2014 17:03, Daniele Varrazzo wrote:

On 2014-02-13 15:22, Manlio Perillo wrote:

On 13/02/2014 16:07, Daniele Varrazzo wrote:



- sei legato all'implementazione del carattere (char, utf16, utf32)


Direi che lo stesso problema è presente, in parte, con Go:
http://golang.org/ref/spec#String_types


Il problema è risolto dal fatto che hanno dichiarato che le stringhe
sono solo 8 bit e sono solo codificate in utf8, mentre l'accesso ai
codepoint unicode ha un'interfaccia separata.


Che è quello che puoi ottenere anche in C.


Questo porta alle
conseguenze che:

- sono più efficienti in memoria di utf16/32


Sicuramente, ma che succede se io non ho problemi di memoria e mi 
interessa invece l'efficienza di esecuzione dei vari algoritmi che 
operano sulle stringhe?  Come scritto tempo fa, questo è proprio uno dei 
problemi di Go: ha delle regole imposte dal creatore del linguaggio, 
mentre io preferisco la filosofia del C in cui il programmatore sa 
quello che fa ed il linguaggio deve lasciarglielo fare permettendo anche 
di farlo in modo efficiente.



- sai che a[n] non è un carattere ma è un byte. La bugia dei widechar
non regge. Neanche quella di unicode in python che però si rompe al di
fuori del BMP (a meno che non lo compili 4 byte per carattere blah blah)


Per quello che ne so, puoi usare la rappresentazione che vuoi per una 
stringa (1 byte UTF-8, 2 byte UTF-16, 4 byte UTF-32), e se l'API è 
corretta non dovrebbe rompersi in nessun caso.
Al momento non ricordo il problema specifico di Python; mi confermi che 
dipende interamente dal fatto di aver scelto 2 bytes, oppure se è un bug 
o problema di API esposta?



- tipicamente l'i/o non richiede encoding/decoding


L'I/O di stringhe direi che *richiede* encoding, almeno fino a quando 
UTF-8 non sarà disponibile ovunque.  E' da molto che non uso Windows, ma 
in XP mi sembra che UTF-8 non lo potevi impostare come encoding di sistema.



[...]



Conoscere il numero di caratteri di una
stringa è un'altra operazione largamente sopravvalutata (non scrivi
tutti i giorni un algoritmo per centrare una stringa di caratteri non
proporzionali in uno schermo).


Vero, ma non vedo perchè quei pochi casi non possano essere ottimizzati 
scegliendo una rappresentazione alternativa, se uno lo ritiene necessario.



Molti algoritmi possono essere espressi
con un'iterazione sull'input che dura fino al verificarsi di una certa
condizione (fine dell'input, o altro): per questi non ti serve la
lunghezza.

Quanti caratteri è lungo:

 html世界/html

dipende dal contesto, no?


Dipende anche da che intendi per carattere.
Sono 2 caratteri, ed N bytes con N che dipende dalla rappresentazione 
interna della stringa.



[...]
È un linguaggio opinionato: quando incontra gente opinionata può piacere
o non piacere :) Trovo la scelta di avere stringhe solo utf8 molto
razionale nel 201x, anche se richiede aggiustamenti mentali rispetto ad
abitudini prese nel 197x. Ma allora non esistevano i cinesi, né le
lettere accentate, né l'€, quindi è comprensibile...



Io non ho nulla contro la scelta di avere le stringhe UTF-8 (che, come 
dici, è perfettamente condivisibile), ho qualche dubbio sul fatto di 
offrire *solo* quella.  Ovviamente non parlo della babele che abbiamo 
adesso ad esempio con la gestione delle stringhe in Ruby o PostgreSQL, 
ma almeno avrei seguito la strada di D ed offerto tipi diversi di 
stringhe in base alle rappresentazioni Unicode standard.



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


Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Daniele Varrazzo

On 2014-02-13 18:50, Dario Bertini wrote:

On 02/13/2014 05:03 PM, Daniele Varrazzo wrote:
- sai che a[n] non è un carattere ma è un byte. La bugia dei 
widechar
non regge. Neanche quella di unicode in python che però si rompe al 
di
fuori del BMP (a meno che non lo compili 4 byte per carattere blah 
blah)


Forse sono pignolo, ma la bugia dei widechar non regge non vuol 
dire

quasi nulla visto che:
- non specifichi cos'è un widechar (è un codeunit a 16 bit, o un
codepoint memorizzato in 32?)
- non chiarisci in che modo non regge


wchar_t è compiler dependent: potrebbe essere anche 8 bit. Tanto per 
essere utile.


Se fosse 16 bit, comunque ti servono 2 unità per esprimere un carattere 
fuori BMP (surrogate pairs)


Se fosse 32 bit, comunque ci sono i caratteri combinanti. Non ne esci.

Cosa non regge è l'idea che se hai widechar, non mi interessa quanto 
wide, comunque né accesso casuale né lunghezza siano operazioni 
genericamente utili. Anche in utf32:


In [3]: s = u'\u0075\u0301'

In [4]: len(s)
Out[4]: 2

In [5]: print s
ú



Python da questo punto di vista non ha nessun problema, con Py3.3
l'astrazione unicode non mi sembra sia leaky e comunque mi risulta 
che
tutte le distro linux fornissero da diversi anni solo le wide build 
di

python di default


Non lo sapevo. Che spreco. Nessuno usa i caratteri fuori dal BMP grin 
Non so come verificarlo ma sembra sia così:



sys.getsizeof(u'aa') - sys.getsizeof(u'a')

4



insomma: di default le cose funzionano bene da anni... anche se sono
d'accordo che il fardello cognitivo del ricordarsi di fallire
graziosamente sulle narrow build fosse un deal breaker


- tipicamente l'i/o non richiede encoding/decoding


Questo vuol dire che se i dati che leggi non sono codificati
correttamente te ne accorgi proprio nel mezzo dell'elaborazione


Anche in python. Tutto funziona finché non arriva un accento e le cose 
si rompono. Magari si rompono in I/O, mentre tutto quello che occorreva 
era leggere una stringa da un database e scriverla su una pagina web: 
per un programma scritto negli ultimi 10 anni ci sono buone chance che 
entrambi siano utf8 e la codifica/decodifica non era necessaria: un 
accento sarebbe arrivato indenne a destinazione, anche se Python non 
l'avrebbe visto come codepoint singolo.


Il problema sono i dati legacy. Go credo non ne voglia avere a che 
fare, e ne approfitta per fare pulizia. Se scrivi un programma oggi da 
zero sarà bene che faccia tutto con unicode/utf8. Il problema delle 
codifiche 8 bit è un problema che hanno i linguaggi colla, e Go ha 
deciso di semplificare su questo punto e guardare al presente/futuro 
invece che al passato. Anche ora, con tutte le interfacce che gestisco 
(database, web, email, file...) non uso praticamente nessun encoding che 
non sia utf8. Se proprio c'è un input latin1 ok, ci sarà un decoder 
sull'interfaccia che lo converte: non cambia rispetto a Python.



penso sarebbe stato meglio fare di len(whatever) un compile error 
in
Go, e fornire una funzione size() allo scopo... size si presta di 
meno

ad essere fraintesa come lunghezza di un testo


se uno non sa che cosa sta facendo, a livello di usare una stringa 
senza sapere se sono codepoint o una codifica, non vedo la necessità di 
venirgli incontro. Meglio faccia un altro lavoro. Altrimenti rischia di 
centrare male la stringa in cinese nello schermo.


Se per questo vorrei una macchina del tempo per dare una martellata 
sulle dita di chi ha implementato str.encode() e unicode.decode(), 
perpretando sempre di più l'idea che str e unicode siano 
intercambiabili. Ho bestemmiato i miei santi migliori dietro alle 
librerie che chiamano x.decode() qualunque cosa sia x, e siccome va bene 
agli americani va bene a tutti. O meglio magari funziona nella shell ma 
si rompe in crontab perchè una variabile d'ambiente è diversa [1]. Dare 
ad unicode l'interfaccia non di una lista ma di un iterabile avrebbe 
fatto notare che len(unicode) non è un'operazione poi così utile - e se 
proprio ti serve fai len(list(u)). Invece che ha fatto in python3? Ha 
azzoppato bytes rimuovendo l'operatore %, quindi tutto *deve* essere 
[de]codificato. A questo punto ecco il bastone, lì ci sono i cuccioli di 
foca... Ok fine rant :)




È un linguaggio opinionato


Anche Python è un linguaggio opinionato: solo perchè a te non 
piacciono

i bytes literals (così mi sembra), non vuol dire che paghi sempre
l'overhead necessario :P


Perché non mi dovrebbero piacere i byte literal? :)

E sì, paghi overhead in codifica (input), elaborazione (4 volte la 
memoria e quindi il tempo per processarla) e decodifica (output) anche 
dove non sarebbe stato necessario: è un fatto che non vedo come si possa 
negare. Usare unicode ovunque mi va benissimo: è giusto ed è il presente 
e il futuro. È la scelta di rappresentarlo internamente come array di 
codepoint che crea delle strozzature. Go non ha queste chicane, il che 
lo rende più efficiente sull'I/O di qualunque magia 

Re: [Python] It's 1999 all over again

2014-02-13 Per discussione Dario Bertini
Uhm, hai scritto troppo e troppe cose con le quali io sono in disaccordo
per poterti rispondere puntualmente, quindi prendo solo l'aspetto
filosofico che secondo me differisce in modo più eclatante

On 02/14/2014 12:34 AM, Daniele Varrazzo wrote:
 un risultato indeterminato va bene. Ma ti prego, non crashare alle 3 di
 mattina per un print.


ecco, questo è l'esatto opposto di quello che voglio


-- 
xmpp: berda...@gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Vi è mai capitato? (Select su SQL)

2014-02-13 Per discussione Nicola Gramola
Beh! potrebbe essere sybase


Il giorno 13 febbraio 2014 21:58, Carlos Catucci
carlos.catu...@gmail.comha scritto:


 2014-02-13 21:55 GMT+01:00 Carlo Miron mi...@python.it:

 Dallo schema ``dbo``, scommetterei su M$ $QL $erver. E, di concerto, M$
 Window$.
 Inoltre, se ricordo bene, ``1799-12-31`` e` il curiosissimo valore
 minimo accettato dal campo DATE del medesimo.


 A te Sherlock Holmes ti fa un baffo ;)

 Carlos, o meglio Dr. Watson
 --
 Je suis marxiste, de tendance Groucho.

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




-- 
 * Nicola Gramola (°
 - linux addicted - keep calm and clear cache - keep it simple
 - Linux Counter: 324870 http://linuxcounter.net
 - AViLUG: http://www.avilug.it/ - Calendario attività:
http://www.avilug.it/doku.php/calendario
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python