Re: [Python] Richiesta chiarimento per calcoli con numeri decimali

2015-04-14 Per discussione Daniele Varrazzo

On 2015-04-14 00:26, Carpediem wrote:
Ho un problema su cui sicuramente qualcuno di voi saprà fornirmi una 
risposta.

Per quel che mi riguarda, ho perso tre giorni prima di scoprire un
comportamento sul modo di contare di python che mi porta a risultati
fuorvianti. Ecco il punto:
sb = 3287628061
mb = sb / 60 # con la calcolatrice ottengo 54793801.0167
m1 = int(mb) # ottengo 54793801
s = int ((mb-m1)*60 # Con la calcolatrice ottengo 1 ma python
restituisce alla variabile s il valore di 0,999403953552 e quindi
0

A questo punto, quindi, se chiedo di stampare s invece che ritrovarmi
il valore 1 ottengo 0
utilizzando una comune calcolatrice, o quella fornita dallo stesso
windows, ciò che ottengo effettuando 3287628061/60 è 54793801,0167
Se invece chiedo a Python di stamparmi il risultato, dopo la virgola
ottengo 01 e una serie di 6 senza che compaia il 7 finale.
Tale differenza, quando chiedo di determinare il valore intero di s,
comporta il mancato raggiungimento del valore di unità (che invece
dovrei ottenere) producendo tutta una serie di conseguenze errate a
catena sui risultati delle operazioni successive.
Qualcuno potrebbe avere la gentilezza di spiegarmi questo 
comportamento?

e soprattutto, c'è un modo per chiedere un arrotondamento in eccesso
per la n cifra decimale?


Ci sono corsi universitari interi sul comportamento dei numeri in 
virgola mobile. In breve: non sono precisi. In meno breve, una rapida 
googlata ti porta diversi esempi


https://www.google.co.uk/webhp?#q=floating+point+number+problems

Questo sembra divertente, poi me lo guardo: 
http://floating-point-gui.de/



So che potrei ottenere un numero intero utilizzando per la divisione
l'operatore // ma sono particolarmente interessato a capire e
risolvere il problema contemplando l'utilizzo dei numeri in virgola
mobile.


Usa round() invece di int() per convertire il numero all'intero più 
vicino.


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


Re: [Python] Sistema

2014-12-25 Per discussione Daniele Varrazzo

On 2014-12-20 12:06, Gabriele Battaglia wrote:
Il giorno 20/dic/2014, alle ore 12:51, Marco Ippolito 
ippolito.ma...@gmail.com ha scritto:


ciao Gabriele,
non so se è questo che cerchi:


import platform

platform.platform()

‘Linux-3.13.0-32-generic-x86_64-with-Ubuntu-14.04-trusty'
Grazie Marco, direi di sì…

Devo differenziare il comportamento dello script nella ricerca di un
modulo da importare, a seconda che venga eseguito sotto Windows o
sotto Mac OS X. Non è nulla di importante in realtà, più un esercizio
per imparare che una reale esigenza.


Allora sys.platform è meglio.

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


Re: [Python] [Python-Dev] Python 2.x and 3.x use survey, 2014 edition

2014-12-13 Per discussione Daniele Varrazzo

On 2014-12-13 15:57, Pietro wrote:

Ciao a tutti,
non mi sembra sia ancora passato qui in lista... segnalo il
questionario, riporto il link alla discussione originale e il testo
della mail.


Grazie!

Per qualche motivo, Votre réponse a bien été enregistrée

:)

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


Re: [Python] Python linguaggio di programmazione top

2014-12-09 Per discussione Daniele Varrazzo

On 2014-12-09 06:46, Vincenzo Campanella wrote:

Un cordiale saluto a tutta la lista, cui mi sono iscritto da poco, non
da sviluppatore Python, ma da wannabe sviluppatore Python. :-)

Ho pensato che questi due articoli potrebbero interessarvi:
http://blog.html.it/08/12/2014/i-linguaggi-di-programmazione-piu-pagati-negli-usa/
http://news.dice.com/2014/12/03/programming-language-pays-best/

In questi articoli, Python compare fra i 3 linguaggi di programmazione
top negli USA (insieme a Ruby on Rails e Objective C); questo fa
pensare, o sperare, che in un prossimo futuro anche in Europa lo possa
diventare... stay tuned. ;-)


In Inghilterra di sicuro lo e`. Penso che in media ci si facciano piu` 
soldi che con JS, PHP, Java, C# (principalmente perche' di lavoratori in 
queste altre tecnologie ce ne sono a palate). Ovviamente gli intervalli 
si sovrappongono e troverai sguatteri Python e superstar Java. Il 
linguaggio con la massima varianza probabilmente e` C++, piu` che altro 
perche' e` usato in High Frequency Trading, che e` uno degli ambienti 
che paga meglio.


In definitiva lo stipendio lo detta l'ambiente di lavoro, non tanto la 
tecnologia. Ma a Londra di lavori che rendono piu` dell'equivalente di 
100K$ all'anno ce ne sono gia`.


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


Re: [Python] Lancio di stampe con Python

2014-12-09 Per discussione Daniele Varrazzo

On 2014-12-09 13:40, Marco Fochesato wrote:

Ciao a tutti,
non riesco a capire dove sbaglio sinceramente.

import subprocess
subprocess.call([/usr/bin/lpr  -P+stampante, nomefile)

L'ambiente in cui lavoro è Linux.
Se lancio il comando da terminale, con ovviamente al posto delle 
variabili
il nome della stampante e il nome del file, riesco a lanciare la 
stampa.

Se lo lancio con il comando sopra descritto, mi esce un errore:

OSError: [Errno 2] File o directory non esistente

Se invece lancio il comando senza la stampante, la stampa mi riesce 
sulla

stampante predefinita di sistema.


Poi, se un domani volessi lanciare le stampe anche su windows, 
funzionerà?

Non credo...

Avete qualche suggerimento in merito?


Quello che hai scritto e` un errore: hai una lista aperta e non chiusa.

Probabilmente l'errore e` che se passi i comandi come una stringa devi 
anche usare shell=True. Questo ha degli svantaggi/pericoli ben spiegati 
nella documentazione. Il modo piu` sicuro e spesso piu` pratico e` di 
passare gli argomenti come una lista: in questo caso il primo elemento 
dev'essere l'eseguibile, quindi qualcosa tipo


subprocess.call([/usr/bin/lpr, -P + stampante, nomefile])

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


Re: [Python] Ereditarietà tra classi: un semplice esempio pratico da chiarire

2014-11-21 Per discussione Daniele Varrazzo

On 2014-11-21 17:19, Marco Ippolito wrote:


class Sub(Super):
def __init__(self, indirizzo,cosa_fa):
Super.__init__(self, nome, cognome, indirizzo)
self.cosa_fa = cosa_fa

...


ora...


No, anche prima...



se modifico la Sub class in questo modo:



class Sub(Super):
def __init__(self, cosa_fa):
Super.__init__(self, nome, cognome, citta)
self.cosa_fa = cosa_fa



Ne' questo ne' quello di sopra sono corretti. Forse hai delle variabili 
globali che accidentalmente si chiamano nome e cognome ma non ne hai una 
che si chiama citta.


nome e cognome sono variabili locali: le devi passare al costruttore di 
sub, che nel primo caso potrebbe essere ad esempio:


class Sub(Super):
def __init__(self, nome, cognome, indirizzo, cosa_fa):
Super.__init__(self, nome, cognome, indirizzo)
self.cosa_fa = cosa_fa

Il secondo caso funziona bene, ovvero ti da` un errore. Anche il primo 
dovrebbe.



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


Re: [Python] Ereditarietà tra classi: un semplice esempio pratico da chiarire

2014-11-21 Per discussione Daniele Varrazzo

On 2014-11-21 17:35, Daniele Varrazzo wrote:

On 2014-11-21 17:19, Marco Ippolito wrote:


class Sub(Super):
def __init__(self, indirizzo,cosa_fa):
Super.__init__(self, nome, cognome, indirizzo)
self.cosa_fa = cosa_fa

...


ora...


No, anche prima...



se modifico la Sub class in questo modo:



class Sub(Super):
def __init__(self, cosa_fa):
Super.__init__(self, nome, cognome, citta)
self.cosa_fa = cosa_fa



Ne' questo ne' quello di sopra sono corretti. Forse hai delle
variabili globali che accidentalmente si chiamano nome e cognome ma
non ne hai una che si chiama citta.


Ah si`, giusto: le variabili sono definite qui:


if __name__ == '__main__':

nome = 'Marco'
cognome = 'Ippolito'


Il costruttore accidentalmente pesca questi valori dal namespace 
globale. Questo e` un comportamento sbagliato. Chiamale in un altro modo 
e vedrai che avrai un'eccezione anche nel primo caso.


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


Re: [Python] Ereditarietà tra classi: un semplice esempio pratico da chiarire

2014-11-21 Per discussione Daniele Varrazzo

On 2014-11-21 17:53, Marco Ippolito wrote:

Ciao Daniele,
ti ringrazio per l'aiuto.

Ho modificato l'esempio, passando tutte le variabili locali (nome,
cognome, citta) al costruttore di sub. E così funziona (come vedi
sotto).

#!/usr/bin/python

class Super:
def __init__(self, nome, cognome, indirizzo):
self.nome = nome
self.cognome = cognome
self.indirizzo = indirizzo
self.nome_intero = '%s %s' % (self.nome, self.cognome)

def super_meth_1(self):
return '%s abita in %s' % (self.nome_intero, self.indirizzo)

def get_super_result(self):
return self.super_meth_1()

class Sub(Super):
def __init__(self, nome, cognome, indirizzo, cosa_fa):
Super.__init__(self, nome, cognome, indirizzo)
self.cosa_fa = cosa_fa

def sub_meth_1(self):
return '%s  %s' % (self.nome_intero, self.cosa_fa)

def get_sub_meth_1(self):
return self.sub_meth_1()


if __name__ == '__main__':

nome_f = 'Marco'
cognome_f = 'Ippolito'
abita_f = 'Milano'
super_class = Super(nome_f, cognome_f, abita_f)
ris_super = super_class.get_super_result()
print ris_super: , ris_super
cosa_f = 'suona'
sub = Sub(nome_f, cognome_f, abita_f, cosa_f)
ris_sub_1 = sub.get_sub_meth_1()
print ris_sub_1: , ris_sub_1
ris_sub_2 = sub.get_super_result()
print ris_sub_2: , ris_sub_2

./classInheritage.py
ris_super:  Marco Ippolito abita in Milano
ris_sub_1:  Marco Ippolito  suona
ris_sub_2:  Marco Ippolito abita in Milano

C'è un modo per passare far sì che nel main passi a Sub solo le
variabili che lo differenziano (specializzano) rispetto a Super?
Cioè c'è un modo per far sì che io possa passare in main solo la
variabile cosa_f?


Nel caso in esempio si fa male. Il pattern migliore e` quello di 
elencare gli argomenti.


La cosa comincia ad essere utile se stabilisci che i costruttori delle 
tue classi debbano essere chiamati solo con argomenti keyword, ovvero, 
se stabilisci che chiamerai


sub = Sub(nome=nome_f, cognome=cognome_f, abita=abita_f, 
cosa_fa=cosa_f)


allora puoi usare **kwargs e fare:

  class Super:
  def __init__(self, nome, cognome, indirizzo):
  self.nome = nome
  self.cognome = cognome
  self.indirizzo = indirizzo
  self.nome_intero = '%s %s' % (self.nome, self.cognome)

  class Sub(Super):
  def __init__(self, cosa_fa, **kwargs):
  Super.__init__(self, **kwargs)
  self.cosa_fa = cosa_fa

considerando che tipicamente definirai il costruttore solo in un punto 
ma lo chiamerai in diversi punti ti conviene essere piu` verboso nelle 
definizioni degli __init__ e risparmiare nell'invocazioe, quindi 
lasciare le cose come stanno.


Questa non e` l'unica cosa che si potrebbe tenere in considerazione 
pero`. Il tuo e` un esempio di studio, che non ha veri vincoli. In casi 
piu` reali potresti avere una gerarchia di oggetti dove pochi argomenti 
(tipo fino a 3, ma meno sono e meglio e`) andranno *sempre* specificati 
per ogni oggetto della gerarchia, mentre ci puo` essere un turbinare di 
argomenti che sono a) opzionali e b) specifici solo di certe 
sottoclassi. In questo caso il modo migliore (secondo me, YMMV) di 
organizzare il codice e` quello di passare gli argomenti fondamentali in 
maniera posizionale (potrebbero anche essere passati con keyword, 
l'importante e` mantenere la possibilita` di fare entrambe le cose) e 
usare **kwargs per tutti gli altri, in modo da ignorare quelli che non 
si conoscono ma di propagarli.


Per esempio (non testato, ovviamente):

class Persona(object):
def __init__(self, nome):
self.nome = nome

class Lavoratore(Persona):
def __init__(self, nome, ruolo, salario=None, **kwargs):
super(Lavoratore, self).__init__(nome, **kwargs)
self.ruolo = ruolo
self.salario = salario

class Studente(Persona):
def __init__(self, nome, scuola, classe=None, **kwargs):
super(Studente, self).__init__(nome, **kwargs)
self.scuola = ...

class StudenteUniversitario(Studente):
def __init__(self, nome, fuoricorso_dal=None, **kwargs):
super(StudenteUniversitario, self).__init__(nome, **kwargs)
...

Il nome puoi passarlo con keyword o meno, gli altri argomenti devono 
avere una keyword.


p1 = StudenteUniversitario(Tizio Caio, scuola=Anormale, 
fuoricorso_dal=1996)

p2 = Lavoratore(nome=Pinco Pallini, ruolo=...)


Avere classi che richiedono un gran numero di parametri posizionali da 
passare non e` una buona cosa: e` facile sbagliare nel passaggio. Se gli 
argomenti cominciano ad essere tanti e` meglio richiedere che vengano 
passati con keyword (ma e` ancora meglio chiedersi come mai ci siano 
tanti parametri e cambiare qualcosa nel codice).



-- Daniele

___
Python mailing list
Python@lists.python.it

Re: [Python] Automatizzare inserimento dati su pagina web

2014-11-20 Per discussione Daniele Varrazzo

On 2014-11-20 11:35, Gollum1 wrote:


il fattore è che la richiesta viene fatta attraverso un form, basta il
modo di autenticazione fatto con request, o devo in qualche modo
inserire i campi e fare un send?


Installa Tamper Data in Firefox e guarda che richieste vengono fatte dal 
browser: probabilmente e` solo una post con nome utente e password, poi 
replichi la stessa richiesta con requests o anche solo con urllib2.


https://addons.mozilla.org/en-US/firefox/addon/tamper-data/

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


Re: [Python] Gzip

2014-11-17 Per discussione Daniele Varrazzo

On 2014-11-17 09:38, Marco Ippolito wrote:

Grazie Carlo,
mi hai dato un ottimo spunto per indagare un altro aspetto (prima
nella descrizione del problema non ho riportato, mea culpa, che la
matrice vuota di grosse dimensioni, viene creata e poi viene fatta
serializzata con pickle). Successivamente la gzippo.


Sicuro che fare un pickle di una matrice di 2Gb sia efficiente? Hai 
considerato numpy.save/savez/savez_compressed? BLZ?


http://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html
http://blz.pydata.org/blz-manual/index.html

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


Re: [Python] Gzip

2014-11-17 Per discussione Daniele Varrazzo

On 2014-11-17 12:05, Marco Ippolito wrote:


Per ora grazie ai tutti i vostri input ho risolto temporaneamente la
cosa, usando numpy.save (1/4 della dimensione iniziale).


...e numpy.save non e' neanche compresso...

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


Re: [Python] Il pitone e la robotica

2014-11-11 Per discussione Daniele Varrazzo

On 2014-11-10 20:47, Perini Matteo wrote:
Ma ho scritto in ML perché mi pare molto positivo poter condividere 
idee e esperienze...per cui se qualcuno ha già usat questi o altri 
strumenti...si faccia sotto :-)



io sto valutando questa board:
http://micropython.org/
Comperata ma non testata a fondo...
il tempo è quello che è!


Bellino, non lo conoscevo questo progetto.

Ho giocato un po' con Arduino ma on-board solo col C++ (usando Python 
per interagire sulla seriale quando e` servito). Il codice e` qui, ma 
non so quanto Python ci sia: https://github.com/dvarrazzo/arduino


Penso che ora se dovessi consigliare un giocattolo a qualcuno suggerirei 
un raspberry pi. Probabilmente esce un po' fuori dalla definizione di 
embedded ma e` molto piu` facile da usare (piu` gratificante per chi non 
e` un uber-nerd e gode solo al vedere un led pulsare) e ci si puo` usare 
Python senza problemi.


Ho appena scoperto che l'ultima versione (A+) ha anche superato lo 
svantaggio piu` grave del Pi rispetto ad Arduino: entra in una 
scatoletta di caramelle Altoids.


http://makezine.com/2014/11/10/raspberry-pi-model-a-revealed-smaller-and-just-20/

Ora mi serve solo una scusa per giocarci...


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


Re: [Python] thread e subprocess

2014-10-29 Per discussione Daniele Varrazzo

On 2014-10-29 13:52, Antonio Conte wrote:

salve a tutti,

sto lavorando su uno script che lancia su piu' client un comando. per 
il
momento sto usando subprocess, ma volevo lanciare i processi in 
parallelo

e ricavare l'output mano a mano che i processi terminano.

tenete conto che lo script va lanciato da cron, e mi serve l'output del 
comando

per inviarlo via mail.

dopo varie prove sono arrivato a questo, ma mi chiedevo se fosse il 
modo giusto
(cioe' l'utilizzo del contatore _act) per aspettare che tutti i 
processi

terminino e per leggere dalla queue l'output.


Preparati, perche' ora si scatena la flame war che scatta 
automaticamente quando qualcuno pronuncia la parola thread.


Penso vada abbastanza bene, perche' non hai race condition: _act viene 
comunque gestito solo dal thread principale.


Un modo di coordinarsi piu` robusto sarebbe quello di usare Thread.join, 
ma come avrai gia` scoperto questo ti impedirebbe di avere un output 
graduale nel thread principale. Lo puoi usare se eviti la print nel loop 
principale: lanci prima tutti i processi nei thread separati, poi 
t.join() per ogni thread.


Nel tuo codice, qq.task_done() non credo ti serva a niente: quello serve 
se es. il thread principale chiamasse qq.put() e poi qq.join() ed avessi 
un pool di worker thread che chiamassero qq.get() e qq.task_done(): 
cosi' potresti avere es. un pool di workers a lavoro in round-robin 
sulla coda dei compiti (es. 10 processi a lavoro su 100 compiti). Tu 
invece hai un mapping 1-1 tra processi e compiti e solo una coda di 
risultati: la tua struttura e' piu' semplice ma probabilmente scala 
peggio: se avessi 1000 compiti da fare la tua macchina non sarebbe molto 
felice di lanciare 1000 thread + 1000 processi tutti insieme.



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


Re: [Python] thread e subprocess

2014-10-29 Per discussione Daniele Varrazzo

On 2014-10-29 15:47, Antonio Conte wrote:

* 29/10/2014, Daniele Varrazzo wrote :


Un modo di coordinarsi piu` robusto sarebbe quello di usare 
Thread.join,

ma come avrai gia` scoperto questo ti impedirebbe di avere un output
graduale nel thread principale. Lo puoi usare se eviti la print nel 
loop

principale: lanci prima tutti i processi nei thread separati, poi
t.join() per ogni thread.


questo posso provare a farlo. ma il join lo mettersti DOPO aver 
lanciato

i singoli thread ? cioe' qualcosa del genere:

[CODE]
_ths = []
for k, v in clients.items():
for scr in v['server']:
_cmd = [ 'ssh', '%s@%s' % (k, v['host'],),
'/Users/%s/bin/%s_%s.command' % (k, k, scr,) ] + 
_extra_params


_ths.append(thr.Thread(target=run_command, args=(qq, 
_cmd)))

_ths[-1].start()

for _th in _ths:
_th.join()
[/CODE]


Esatto: prima lanci tutti i thread, poi li joini tutti. Se li joinassi 
nel for otterresti un'esecuzione serializzata (lanci un thread e poi 
aspetti finisca). Se un thread termina prima del join non fa niente: in 
questo caso join() non blocca.



Nel tuo codice, qq.task_done() non credo ti serva a niente: quello 
serve
se es. il thread principale chiamasse qq.put() e poi qq.join() ed 
avessi

un pool di worker thread che chiamassero qq.get() e qq.task_done():


ah ok ! ho letto malissimo io :-|


cosi' potresti avere es. un pool di workers a lavoro in round-robin
sulla coda dei compiti (es. 10 processi a lavoro su 100 compiti). Tu
invece hai un mapping 1-1 tra processi e compiti e solo una coda di
risultati: la tua struttura e' piu' semplice ma probabilmente scala
peggio: se avessi 1000 compiti da fare la tua macchina non sarebbe 
molto

felice di lanciare 1000 thread + 1000 processi tutti insieme.


tieni conto che sono degli script da lanciare ogni 10/15 minuti su dei
Mac (con un lock in locale che impedisce di lanciare piu' volte lo
script) quindi niente di trascendentale.


Io ne posso pure tenere conto :) Ti spiego solo che finche' l'input e` 
contenuto il programma ancora ancora funziona, ma resta uno script che a 
fronte di un input di dimensioni impreviste avrebbe un'occupazione 
illimitata di risorse. Sta a te tenerne conto :) Se hai gli elementi 
per essere sicuro che non succedera` maimaimaimai puoi tenerlo com'e`, 
oppure puoi renderlo robusto a fronte di imprevisti (e imparare a 
coordinare un pool di workers con una queue, che e' un pattern molto 
utile).



cmq adesso ci provo a fare le correzioni che hai detto, e se ho altre
domande mi faccio risentire.

grazie mille per le spiegazioni !


Di niente, a presto

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


Re: [Python] Psycopg2 e serializzazione delle SELECT in JSON

2014-10-16 Per discussione Daniele Varrazzo

On 2014-10-16 15:08, Alberto Granzotto wrote:
Ciao Daniele, grazie per la esaustiva risposta, mi sembra tutto chiaro 
a

parte una cosa -

2014-10-16 15:47 GMT+02:00 Daniele Varrazzo p...@develer.com:


On 2014-10-16 13:59, Alberto Granzotto wrote:
[...]l as (id integer, email text);

e riscrivi la tua query in maniera da resitiuire un array di questi 
tipi:

test= select u.id, u.name, array_agg((e.id, e.email)::t_email) from
users u join emails e on u.id = e.user_id group by 1,2;



C'è modo di evitare il group by? O devo prima estrarmi tutti gli id 
delle
email associate allo specifico user e poi usarle nel group by? Cosa 
succede

se invece di estrarre un solo user volessi estrarre N user?


Il group by e' necessario per usare array_agg: se non lo usi hai i dati 
di ogni utente ripetuti se un utente ha piu' di una email (come nella 
tua query originale). Puoi usare una sottoquery che crea una mappa 
id_utente - array di t_email e fare il join di questa con gli utenti, 
ma un group by (sebbene piu' efficiente) ci vuole sempre, es. nella 
sottoquery.


In linea generale, psycopg ti restituira' un oggetto per ogni record che 
Postgres genera: i gradi di liberta' sono nel record generato da 
postgres (quindi e.g. usare group by, creare array, strutture, 
dizionari, ecc. usando i tipi di postgres in maniera un po' piu' 
avanzata) e nel configurare il mapping tra i record letti e gli oggetti 
python creati da psycopg (giocando con i typecaster). Se esci da questo 
framework (un record - un oggetto) allora devi fare qualcosa a valle di 
psycopg, quindi ti ritrovi con i tipi di algoritmi ripetitivi per cui 
hai scritto la mail in primo momento: iterare sugli utenti, controllare 
se li avevi gia' letti, metterli in un dict con una lista di email 
vuote, aggiungere una email...


Quindi, detto questo, come mai vuoi evitare il group by? Ti aspetti di 
leggere i dati da postgres in una maniera che non ho capito (nel qual 
caso fammi un esempio) oppure ti aspetti un comportamento di psycopg che 
esula dal restitiure un oggetto per ogni record?


Estrarre N utenti si fa esattamente come sopra: la query restituisce un 
record per utente, ognuno con la lista delle sue email, e puoi iterare 
sul cursore in tutti i modi che psycopg offre (fetchmany(), fetchall(), 
for record in cur:...)


test= insert into users (name) values ('daniele');
INSERT 0 1
test= insert into emails (user_id, email) values (2, 
'piro@officine');

INSERT 0 1
test= insert into emails (user_id, email) values (2, 
'piro@develer');

INSERT 0 1

In [20]: dcur.execute(select u.id, u.name, array_agg((e.id, 
e.email)::t_email) as emails from users u join emails e on u.id = 
e.user_id group by 1,2)


In [21]: dcur.fetchall()
Out[21]:
[{'emails': [
{'email': 'albe...@example.org', 'id': 1},
{'email': 'albe...@lemonparty.org', 'id': 2}],
  'id': 1,
  'name': 'alberto'},
 {'emails': [
{'email': 'piro@officine', 'id': 4},
{'email': 'piro@develer', 'id': 5}],
  'id': 2,
  'name': 'daniele'}]


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


Re: [Python] Psycopg2 e serializzazione delle SELECT in JSON

2014-10-16 Per discussione Daniele Varrazzo

On 2014-10-16 15:55, Alberto Granzotto wrote:

Chiedo venia, avrei potuto risparmiarti una mail, non avevo capito il
funzionamento del GROUP BY nella query, ci sono arrivato dopo che GROUP 
BY

1, 2 è equivalente a GROUP BY u.id, u.name :)

Grazie per tutte le indicazioni, ora che mi hai mostrato che a) si può 
fare

b) come si fa ho tutte le informazioni necessarie per divertirmi!


Buon divertimento, fammi sapere: mi incuriosisce sempre quando qualcuno 
usa psycopg in maniera un po' piu' spinta.


N.B. nella query che abbiamo discusso, se un utente non ha nessuna 
email, viene restituita una cosa un po' bruttina: una lista con un'email 
con tutti i campi a null, almeno giudicando il risultato:


test= insert into users (name) values ('foo');
INSERT 0 1
test= select u.id, u.name, array_agg((e.id, e.email)::t_email) from 
users u left join emails e on u.id = e.user_id group by 1,2;

 id |  name   |array_agg

+-+--
  1 | alberto | 
{(1,albe...@example.org),(2,albe...@lemonparty.org)}

  2 | daniele | {(4,piro@officine),(5,piro@develer)}
  3 | foo | {(,)}

Sei in grado di modificare la query in maniera da restituire un array 
vuoto se un utente non ha nessuna email (che psycopg convertirebbe in 
una lista vuota)?


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


Re: [Python] Postgresql json columns was: Psycopg2 e serializzazione delle SELECT in JSON

2014-10-16 Per discussione Daniele Varrazzo

On 2014-10-16 16:38, Carlos Catucci wrote:
Approfitto del thread su psycopg2 per formulare una domnada dborder 
line

all'OT.

Sto cercando ddi usre delle colonne JSON con Postgres 9.3/Django 1.6+.
Ovvio che devo usare (*) delle rwa query. Solo che fatico a ottenere un
risultato con una struttura di questo tipo:

data = '{ A: { B: [ { C: 1, D: 2 }, { C: 3, D: 4 }, { 
C:1,

D: 6, E: 3 } ] } }'

per fare una query dove mi deve tornare tutti i record, per dire che
abbianno

tabella.data-'A'-'B'-'C' == 1

ho provato a usare strutture funzioni built-in di Postgres ma senza
riuscire a cavare il ragno dal buco. Nella migliore delle query ottengo 
un

resultset vuoto, nelle altre (quasi sempre) dei simpaticissimi errori.

Qualcuno ha avuto problemi similari o una qualche idea su dove posso
trovare un esempio con una query tipo questa? Premetto che se invece 
che

una array di hash (dei dict in python)  avessi un array di valori (una
lista insomma) avrei la soluzione ma cosi' ci sto dando di matto.


Non ci ho ancora giocato troppo con le funzioni json di postgres. 
Guardando i doc, json_populate_recordset sembra promettente: converte 
una lista json in un recordset. Devi definire un tipo che contiene i 
dati che ti servono (e' sufficiente che contenga il campo su cui devi 
filtrare, gli altri vengono scaricati):


piro=# create type tmp as (C int, D int);
CREATE TYPE

piro=# select * from json_populate_recordset(null::tmp,
'{ A: { B: [ { C: 1, D: 2 }, { C: 3, D: 4 }, { 
C:1, D: 6, E: 3 } ] } }'::json - 'A' - 'B');

 C | D
---+---
 1 | 2
 3 | 4
 1 | 6
(3 rows)

A questo punto e' facile tirare un paio di sottoquery ed ottenere solo 
i record per cui esiste un valore di questo srotolato per cui C = 1.


piro=# create table mydata(id serial primary key, data json);
CREATE TABLE
piro=# insert into mydata (data) values ('{ A: { B: [ { C: 1, 
D: 2 }, { C: 3, D: 4 }, { C:1, D: 6, E: 3 } ] } }');

INSERT 0 1
piro=# insert into mydata (data) values ('{ A: { B: [ { C: 0, 
D: 2 }, { C: 3, D: 4 }, { C: 0, D: 6, E: 3 } ] } }');

INSERT 0 1

Il record 1 matcha, il 2 no. Puoi usare:

piro=# select d.* from mydata d
where exists (
select 1 from (
select id,
(json_populate_recordset(null::tmp, data - 'A' - 
'B')).C

from mydata) x
where C = 1
and x.id = d.id);
 id |   data

+---
  1 | { A: { B: [ { C: 1, D: 2 }, { C: 3, D: 4 }, { 
C:1, D: 6, .

|.E: 3 } ] } }
(1 row)

Non credo sia possibile ottimizzare questo tipo di query con un indice 
comunque. Ma quello neanche con un array sarebbe stato agevole.


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


Re: [Python] Postgresql json columns was: Psycopg2 e serializzazione delle SELECT in JSON

2014-10-16 Per discussione Daniele Varrazzo

On 2014-10-16 17:16, Daniele Varrazzo wrote:

On 2014-10-16 16:38, Carlos Catucci wrote:
Approfitto del thread su psycopg2 per formulare una domnada dborder 
line

all'OT.

Sto cercando ddi usre delle colonne JSON con Postgres 9.3/Django 1.6+.
Ovvio che devo usare (*) delle rwa query. Solo che fatico a ottenere 
un

risultato con una struttura di questo tipo:

data = '{ A: { B: [ { C: 1, D: 2 }, { C: 3, D: 4 }, { 
C:1,

D: 6, E: 3 } ] } }'

per fare una query dove mi deve tornare tutti i record, per dire che
abbianno

tabella.data-'A'-'B'-'C' == 1



Non ci ho ancora giocato troppo con le funzioni json di postgres.
Guardando i doc, json_populate_recordset sembra promettente: ...


Anche json_array_element puo' funzionare: srotola una lista json negli 
oggetti che contiene:


piro=# select id, json_array_elements(data- 'A' - 'B') from 
mydata; id

|json_array_elements
+
  1 | { C: 1, D: 2 }
  1 | { C: 3, D: 4 }
  1 | { C:1, D: 6, E: 3 }
  2 | { C: 0, D: 2 }
  2 | { C: 3, D: 4 }
  2 | { C: 0, D: 6, E: 3 }
(6 rows)

quindi puoi filtrare gli elementi che hannno C = 1

piro=# select id from (select id, json_array_elements(data- 'A' - 
'B') as data from mydata) x where (data - 'C')::text = '1';

 id

  1
  1
(2 rows)

e di nuovo puoi usare exists per prendere i record che ti servono:

piro=# select d.* from mydata d
where exists (
select 1 from (
select id, json_array_elements(data- 'A' - 'B') as data
from mydata) x
where (data - 'C')::text = '1'
and x.id = d.id);
 id |   data

+---
  1 | { A: { B: [ { C: 1, D: 2 }, { C: 3, D: 4 }, { 
C:1, D: 6, .

|.E: 3 } ] } }
(1 row)

Questo penso sia meglio perche' non richiede un CREATE TYPE.

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


Re: [Python] Django QuerySets order_by

2014-10-03 Per discussione Daniele Varrazzo

On 2014-10-02 19:04, Paolo Leggio wrote:


Applicando invece un ordinamento, sorgono i miei problemi:


Qual'e' l'sql generato? Guardandolo potresti capirci qualcosa in piu'.

Non mi ricordo (mai) come fare a visualizzarlo: puoi senz'altro mettere 
un paio di print nei sorgenti di django vicino al cursor.execute(). Ma 
l'ultima volta che l'ho fatto ho notato che c'era un logger apposito che 
si puo' abilitare, quindi in pratica puoi fare cosi': 
http://www.dabapps.com/blog/logging-sql-queries-django-13/ (ovvero, 
prova quello che dice questo tizio, che non l'ho verificato; se non 
funziona greppa i sorgenti e trova qual'e' il logger da abilitare).


Alternativamente puoi usare django-debug-toolbar.

Nota (che riprende il discorso orm buoni, orm cattivi dell'altra volta): 
tutte le volte che ho sviluppato un sito django ho sempre trovato 
*preziosissimo* guardare le query in fase di sviluppo: aiuta a capire se 
per caso si sta incocciando nel problema di prestazioni piu' serio che 
capita usando un ORM ingenuamente: il ripple loading 
(http://tinyurl.com/n4ag5gg). Guardando le query scorrere ci si accorge 
subito se un attributo (magari invocato nel template, neanche nella 
view) sta caricando tutti gli oggetti collegati ad un queryset in 
maniera lazy (si vedono scorrere 100 query tutte uguali). Con l'ORM di 
django si puo' risolvere con un paio di botte di select_related. Ma 
bisogna accorgersene prima.



-- Daniele

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


Re: [Python] [OT] Matematica dolce

2014-09-24 Per discussione Daniele Varrazzo

On 2014-09-24 11:09, Riccardo Magliocchetti wrote:


Nel makefile di entrambi riga 46 e 47 sono duplicate, è di proposito?


Si': per generare l'indice servono due passate.

-- Daniele

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


Re: [Python] Digest di Python, Volume 103, Numero 57

2014-09-24 Per discussione Daniele Varrazzo

On 2014-09-24 16:47, Simone Federici wrote:

Francesco:


Salve! Amici!
... qualcosa di interessante ma rispondendo a un digest e senza un
oggetto...



 che si fa di solito in questi casi?


Si da' un'occhiata al suo link se si e' interessati oppure lo si ignora 
se non lo si e'. Mentre invece odierei, oh quanto odierei, il flame che 
ti accingi a lanciare e al quale seguiranno ventinaia e ventinaia di 
messaggi di fuffa che mi daranno MOLTO PIU' FASTIDIO di questo.


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


Re: [Python] Digest di Python, Volume 103, Numero 57

2014-09-24 Per discussione Daniele Varrazzo

On 2014-09-24 16:54, Simone Federici wrote:

Daniele Varrazzo p...@develer.com:

Si da' un'occhiata al suo link se si e' interessati oppure lo si 
ignora se
non lo si e'. Mentre invece odierei, oh quanto odierei, il flame che 
ti
accingi a lanciare e al quale seguiranno ventinaia e ventinaia di 
messaggi

di fuffa che mi daranno MOLTO PIU' FASTIDIO di questo.



1) il fatto che sia PHP non cambia il mio giudizio
2) sono nel nulla della repubblica ceca con il brutto tempo e non ho 
nulla

da fare
3) metti simone federici nello spam e risolvi :-)


No, metto python@lists.python.it nello spam per risolvere il problema, 
appena parte un'altra fiammata di quelle come l'altro giorno da persone 
arroganti, saccenti e con un sacco di tempo da perdere.


Sono qui per aiutare neofiti, non per ricevere niente in cambio, e 
discutere di top posting non mi arricchisce. Te ne puoi andare su 4chan 
se hai da cazzeggiare.


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


Re: [Python] Algoritmo di ricerca per parole

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 12:07, Giuseppe Amato wrote:
Buongiorno, sto scrivendo un programmino che mi faccia le 
trasposizioni di
x semitoni sulle tablature per chitarra. In pratica se ho C (Do) ed 
alzo di

un tono devo ottenere D (Re).
Le tablature, anche se non standardizzate, le considero come formate 
da una

riga di accordi ed una di testo della canzone.

Es.: Input
C  A   D
testo testo testo testo

+1 tono

output
D  B   E
testo testo testo testo

Ora nel fare la trasposizione devo mantenere anche la spaziatura. Per 
farlo

ho utilizzato un for sui caratteri, ma credo che si possa fare più
velocemente analizzando le parole separate da spazi.
Qualcuno ha qualche riferimento ad algoritmo o letteratura da 
studiare?

Grazie e ciao


Puoi usare un'espressione regolare per trovare l'alternanza di spazi e 
accordi:


In [2]: s = C  A   D

In [3]: re.findall(r'( +)([^ ]+)', s)
Out[3]: [('', 'C'), ('  ', 'A'), ('   ', 'D')]

poi, una volta che hai trasposto gli accordi (che magari cambiano 
lunghezza perche' hai ad es. C - Bb) puoi regolare aggiungere o 
togliere spazi da quelli che hai trovato. Poi rimetti tutto insieme.


Per curiosita', avevo anche io provato a trasporre gli accordi [1] in 
quel programmino di cui parlavo qualche giorno fa. Non ho il problema 
della spaziatura perche' gli accordi non li definisco per posizione ma 
sono inseriti nel testo [C]cosi'. Ma il risultato non e' corretto 
perche' non gestisce le note enarmoniche (scrivo C#, ma a volte dovrebbe 
essere Db, a seconda della chiave della canzone). Tu sai come si fa?


[1] https://github.com/hammeruke/chordlab/blob/master/chordlib/xpose.py

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


Re: [Python] Algoritmo di ricerca per parole

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 13:53, Giuseppe Amato wrote:
Il giorno 23 settembre 2014 14:41, Daniele Varrazzo 
p...@develer.com ha

scritto:


Per curiosita', avevo anche io provato a trasporre gli accordi [1] 
in quel
programmino di cui parlavo qualche giorno fa. Non ho il problema 
della
spaziatura perche' gli accordi non li definisco per posizione ma 
sono
inseriti nel testo [C]cosi'. Ma il risultato non e' corretto perche' 
non
gestisce le note enarmoniche (scrivo C#, ma a volte dovrebbe essere 
Db, a

seconda della chiave della canzone). Tu sai come si fa?



Avevo visto :) . Bisognerebbe appunto conoscere la chiave della 
canzone, ma

con i soli accordi la vedo dura.


E se la conosci? (ad es. direi --xpose C -3 per dire al mio programma 
che la canzone e' in Do e la voglio tre semitoni piu' bassa) C'e' un 
algoritmo?


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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 15:36, Marco Fochesato wrote:

Ciao Lista,
avrei bisogno di un consiglio.
Ho il mio bel database Postgresql al quale mi interfaccio con 
Libreoffice e

con qualche piccola applicazione creata con Python.

Viste le varie esigenze, sto pensando di mettere in piedi un server 
web e
creare una o più applicazioni web che vadano ad interfacciarsi al 
database.

Sono a digiuno completo di linguaggi per la creazioni di siti web.
Adoro Python, e mi son avvicinato al framework Django. Ho acquistato 
il

libro di Marco Beri e sto completando tutto il tutorial.
E' la strada giusta?

Lo chiedo perchè vedo parlare in rete di WSGI...
poi così ad un primo approccio con Django, mi son trovato un po' 
stretto...

ho la sensazione di non poter lavorare su un database già costruito.


Si', sei sulla strada giusta. WSGI e' un passo sotto django: serve 
(grossomodo) a collegare un application server (quale e' django, o sono 
flask/bottle) con un web server (come apache o nginx). Tu tipicamente 
userai un app server e sarai un utente wsgi senza neanche accorgertene.


Per quanto riguarda il suo ORM, ci sono diverse cose che trovo *molto* 
opinabili. Comunque non e' un grosso problema ne' farlo lavorare su 
tabelle che hai costruito in precedenza (costruendo i modelli sulle 
tabelle gia' definite, senza che crei quelle stupidissime fkey 
deferrable initially deferred che ce li strozzerei) ne' evitare a pie' 
pari l'intero layer dell'orm, evitando di definire modelli e usando 
comandi sql (from django.db import connection, cur = 
connection.cursor(), ...). In questo modo sfrutti es. la sua 
configurazione, la gestione delle transazioni legata alle pagine ecc. ma 
usi il database al massimo della potenza.


...e quando dico non e' un grosso problema non usare le tabelle 
autogenerate oppure fare query a mano, intendo lo faccio sempre: mai 
scritto un programma che usasse la sua autogenerazione o le migrations 
(ogni volta che ne vedo l'sql inorridisco) e appena le cose diventano un 
pelo meno dirette trovo molto piu' semplice scrivere una query invece di 
ricordarmi di usare data__lte, come si fa l'eagerload... ma forse sono 
di parte.



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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 16:14, Marco Fochesato wrote:
Marco, si ho chiavi primarie che contengono campi multipli (e che 
belle che

sono...).


Puoi comunque definire i tuoi oggetti dichiarando i campi che hanno, 
usando primary_key=True per uno qualunque di loro (altrimenti Django 
assume che c'e' un campo id che fa da pkey) ed evitando di usare il suo 
sql per la generazione delle tabelle. Non testato (e' da un po' che non 
scrivo django):


class MiaCosa(models.Model):
key1 = models.IntegerField(primary_key=True)
key2 = models.IntegerField() # parte della pkey ma django non 
lo sa.


class AltraCosa(models.Model):
quellacosa = models.ForeignKey(MiaCosa, 
db_column=miacosa_key1)
key2 = models.IntegerField(db_column=miacosa_key2) # parte 
della fkey ma django non lo sa.


Ovviamente tu lo sai che la chiave e' (key1, key2) e userai 
MiaCosa.objects.get(key1=a, key2=b) per prendere un solo oggetto. Hai 
delle limitazioni perche' la fkey non e' definita bene, tipo non potrai 
usare AltraCosa.objects.filter(quellacosa=miacosa). Ma il resto di 
django funziona bene lo stesso. Lo devi solo prendere un po' per il culo 
:)



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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 16:29, Marco De Paoli wrote:
Il 23 settembre 2014 16:58, Daniele Varrazzo p...@develer.com ha 
scritto:

evitare a pie' pari l'intero layer dell'orm


però così ti perdi l'admin!
che a mio parere fa, di suo, un gran lavoro (e ne risparmia un sacco
al programmatore)


Infatti di solito prendo la strada di creare i models e perculare 
django tutte le volte che io e lui non la pensiamo allo stesso modo 
riguardo il design di un database.


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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 16:32, Marco Fochesato wrote:

Va bene!
Si infatti, per sentirmi stretto, parlavo di quello: perchè deve 
esserci

per forza na colonna id??


Basta usare primary_key=True in un campo per far capire a django che 
quella e' la chiave primaria.


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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 16:29, Marco De Paoli wrote:


Pippo.objects.exclude(Q(alias__isnull=True) | Q(alias__exact=''))

devo ammettere che a volte anche a me risulterebbe più immediato 
scrivere:


SELECT * FROM app_pippo WHERE alias IS NOT NULL AND alias != ''

(per non parlare dei casi di join!)


Esatto: appena la query diventa un po' meno sui binari l'autore 
dell'orm comincia a tirarti dietro tutte le feature del mondo per far 
vedere che puoi usare il suo programma in tutti i casi possibili, ma poi 
se devi a imparare quelle e a combinarle tra loro, non e' meglio 
direttamente scrivere l'SQL? Da questo punto di vista trovo comodissimo 
Manager.raw:


Pippo.object.raw(
select p.* from pippo
JOIN WHERE FILTER SET-RETURNING-FUNCTIONS 
RECURSIVE-COMMON-TABLE-EXPRESSION

limit 42)

che ti tira fuori i model a partire da qualunque cosa sei capace di 
tirare al database, in caso la tua query produca oggetti. Che resta un 
sottoinsieme limitato delle query possibili (select nome, count(*) from 
pippo group by 1 non produce pippi).


-- Daniele

P.S. SELECT * FROM app_pippo WHERE coalesce(alias, '') != '' - altra 
cosa che vagliela a spiegare, a django...


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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 17:01, Simone Federici wrote:

Daniele Varrazzo wrote:


... un sacco di cose fighe contro gli orm...



mi spieghi come puoi paginare le query usando solo SQL?

PS: mi serve su oracle, sql server, db2, maisql, pg, e sqllite.


Non lo so: so usare solo postgres e minimalmente sqlite, e tipicamente 
lo faccio *in due programmi diversi* (ovvero, quando il sito diventa 
troppo grande per sqlite, abbandono sqlite e passo a postgres - punto).


Se uno ha come obiettivo quello di scrivere un sito web puo' scegliere 
il suo maledetto database e tenerselo stretto: come vantaggio potra' 
usare tutte le feature che quel database gli offre nella maniera piu' 
nativa possibile e col minimo di astrazione tra te e lui.


L'indipendenza dal database e' un mito. Se tu sei l'autore di un 
framework generico (django, sqlalchemy...) puoi scegliere se perseguirlo 
in nome di aumentare la tua userbase, e questa e' una strategia piu' che 
accettabile (ovviamente diventa meno accettabile nell'istante in cui non 
implementi una feature che postgres sa offrire perche' mysql non e' in 
grado - li' la tua userbase ti deve abbandonare perche' sei un 
mentecatto).


Ma se tu sei l'autore di un sito e insisti che il tuo sito debba poter 
girare con qualunque database il framework ti ha promesso di farlo, 
allora come paginare con db2 e' un problema che non avevi, che ti sei 
creato da solo e ora te lo risolvi da solo. Il tuo programma e' piu' 
complesso, piu' lento e funziona peggio? Colpa tua che hai creduto di 
avere gli stessi problemi di Jacob Kaplan-Moss e di Michael Bayer mentre 
invece dovevi solo implementare un sito e scegliere uno qualunque dei db 
ti bastava.



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


Re: [Python] Applicazione WEB con Python e Postgresql

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 17:42, Simone Federici wrote:

Daniele Varrazzo:


Non lo so



si che lo sai :-)


Giuro che non conosco oracle, db2, sql server, firebird. Informix un 
pochino si' ma sto cercando di smettere. Quindi come si implementi la 
feature X sul database Y il mio programma di immissione di ore dei 
dipendenti per l'amico di mio padre che ha una ditta con 6 impiegati non 
lo sapra' fare. Probabilmente funzionera' bene solo su sqlite (postgres 
se i dipendenti diventano 8) e non mi metto a scaricare una copia pirata 
di sql server per testarlo li'.



Se uno ha come obiettivo quello di scrivere un sito web puo' 
scegliere il

suo maledetto database e tenerselo stretto



e una applicazione? un prodotto da vendere?


La mia applicazione come prerequisito ha (esempio) postgres. Se non hai 
i soldi per comprare una copia di postgres non la usi. *difficilmente* 
la tua applicazione sara' piu' economica di postgres, che e' gratuito, 
no?  Il mio prodotto da vendere ha come prerequisito (esempio) oracle: 
ce l'ha perche' da ogni licenza che oracle vende dal mio programma io ci 
becco un grasso 0.01% (che magari mi basta per comprare una Panda). 
Perche' mi dovrebbe interessare di supportare anche postgres? Me la 
compri tu la Panda?




L'indipendenza dal database e' un mito.



direi che è complessa, ma non c'è nulla di mitologico.
se è un requisito la devi implementare.


Si ma distingui quando e' un requisito da quando e' uno sfizio tuo. 
Come quell'altro dell'altro giorno che voleva Python 3.4 a girare su 
piattaforme degli anni 90: sfizio tuo? cazzi tuoi. Il cliente lo 
richiede? Paga e allora mi studio come si fa la paginazione in oracle e 
ti pagino anche mia zia. E se viene piu' facile farlo con un orm lo uso, 
ma l'utente paga anche quello, perche' fare le cose difficili con un orm 
e' piu' difficile che farle in altri modi. E magari nella Panda ci metto 
pure l'autoradio.



poi c'è il polorfismo, con SQL vai di flatlogic, oppure ti riscrivi 
in casa

un orm.

una query non è sempre lineare. ad esempio:
- filtri e ricerche web. componi la tua query a suon di if? alcuni 
devoni

mettere in join altri no


Si', lo faccio (e l'ho fatto davvero), perche' la sintassi di un join 
di un singolo database e' facile. Il problema di risolverlo con tutti i 
database e' molto piu' difficile ma, hey, non e' un problema mio: lo 
dovevo risolvere solo in postgres.



- profilazioni in base all'utente. scrivi tutte le sql query 2 volte? 
se

poi devi guardare anche i gruppi le scrivi 4 volte?


Non ho capito questo problema, ma direi che se non ci siamo capiti 
cosi' allora non ci vogliamo capire.




insomma, spesso SQL è meglio di ORM. ma spesso non vuol dire sempre.


Si', se devi risolvere certi problemi sono d'accordo. Poi sta a te la 
saggezza di valutare se quel problema ce l'hai davvero, nel qual caso 
devi limitarti al minimo comune denominatore di tutti i db sopportati, 
mentre gli altri usano writable common table expression e indici gist su 
json come se non ci fosse un domani, e sono a casa per cena. Credi che 
quelli che hanno scritto Instagram si siano preoccupati di farlo 
compatibile con MySql?



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


Re: [Python] Algoritmo di ricerca per parole

2014-09-23 Per discussione Daniele Varrazzo

On 2014-09-23 19:02, Manlio Perillo wrote:

2014-09-23 13:07 GMT+02:00 Giuseppe Amato giuam...@gmail.com:

Buongiorno, sto scrivendo un programmino che mi faccia le 
trasposizioni di
x semitoni sulle tablature per chitarra. In pratica se ho C (Do) ed 
alzo di

un tono devo ottenere D (Re).
Le tablature, anche se non standardizzate, le considero come formate 
da

una riga di accordi ed una di testo della canzone.


Io usarei una macchina a stati, che legge un carattere per carattere 
e
mantiene lo stato per distinguere tra riga di accordi e riga di 
testo.


Il tutto può sembrare complesso, ma in realtà visto che gli accordi 
sono di
una singola lettera (? lo sono ?) il tuo programma diventa un 
semplice

filtro che scrivi in poco tempo.


No, cambiano lunghezza, per cui deve correggere gli spazi prima (o 
quelli dopo, che forse e' meglio, anche se c'e' il caso speciale 
dell'ultimo accordo che non ha spazi dopo oppure sono ignorabili).


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


Re: [Python] Taglia e cuci di PDF

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 07:01, Simone Federici wrote:

Daniele Varrazzo p...@develer.com wrote:


e lo si trasforma in qualcosa di un po' meno peggio (parser separato 
dal
rendeder così poi magari ci facciamo l'html, fogli stile, 
soprattutto

un'opzione --ukulele):
https://github.com/hammeruke/chordlab



ciao, bell'idea.
visto che i pdf non sono la panacea, include pdf è un incubo solo a
pensarlo, e domani magari vorrai publicare il libro in formato epub o
altro, perche chordlab non  spara tutto direttamente in 
restructuredText?


Da come dici sembra che tu suggerisca che chordlab debba generare reST 
invece di PDF. Questo reST poi occorrerebbe parsarlo con delle direttive 
personalizzate. Ma secondo me intendevi che chordlab debba prendere reST 
in input, non come output (anche perche' questo riduce i problemi da due 
ad uno). Quindi ti dico perche' non l'abbiamo fatto. Il maggior blocker 
e' che il file di input sarebbe risultato piu' difficile da scrivere:


[D] [Gbm]I'm so [Bm]happy.
[G]Cause to[Bb]day I [C]found my [A]friends.
[C]They're in my [D]head. [Gbm]I'm so [Bm]ugly.
[G]But that's o[Bb]k. 'Cause [C]so are [A]you.

Ipotizzando di usare un role chord e che questo sia il default quindi 
di non dover scrivere :chord:`D` ma solo `D`, il problema e' che il role 
e' spesso attaccato alle parole prima e dopo, quindi quello di sopra 
come si sarebbe dovuto fare?


`D` `Gbm`\I'm so `Bm`\happy.
`G`\Cause to\ `Bb`\day I `C`\found my `A`\friends.
`C`\They're in my `D`\head. `Gbm`\I'm so `Bm`\ugly.
`G`\But that's o\ `Bb`\k. 'Cause `C`\so are `A`\you.

Questo lo trovo molto meno leggibile. Quindi per quanto mi piaccia il 
reST credo che questo sarebbe stato un uso sbagliato.


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


Re: [Python] Taglia e cuci di PDF

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 09:16, Lorenzo Sutton wrote:

Ciao Daniele,



Immagino che sia più interessante/intrigante per te/voi fare qualcosa
da semi-scratch, e in Python :) però...

Non so se avevate anche valutato Songs LaTeX [1]. La probabilità che
con LaTeX trovi di tutto di più per fare di tutto di più è altissima 
-

certo la sintassi non è semplice e pulita come rST...


No, questo mi mancava. Non e' nemmeno troppo terribile come input.



Chordii [2] pure sembra fico e molto semplice.


Questo l'avevamo visto, ma e' scritto in C: dovendo hackare su un 
programma (perche' neanche quello funzionava bene originariamente, ma 
non l'ho provato io e non mi ricordo in cosa era rotto) ho preferito 
partire da un centinaio di righe scritte in Python invece di capire come 
mai ho un segfault se la pagina si interrompe con un ritornello.




Piccolo semi-off topic:
--
Se, diciamo, un domani voleste magari aggiungere/maneggiare anche la
notazione musicale e avere un output bellissimo sarebbe almeno da 
dare

un'occhiata a Lilypond [3]. Chiaro, Lilypond è praticamente un LaTex
per la musica e quindi una bella bestiola (però esistono parecchi
front end/helper).


Scusa ma hai visto cosa produce?

http://www.lilypond.org/examples.html

Ti ringrazio per la fiducia ma non siamo a questo livello di necessita' 
;)



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


Re: [Python] Taglia e cuci di PDF

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 12:05, Manlio Perillo wrote:


Ti aspetta un altro bel fine settimana a leggere il PDF Reference :).


Uhm, forse questo e' troppo da chiedere ad una domenica :)

Io ho quella della versione 1.4, usata anni fa per scrivere un 
generatore

di PDF ottimizzato.


Ci daro' un'occhata per vedere se trovo quello che cerco e se ottenerlo 
non e' troppo difficile.




Comunque secondo me la via che stai seguendo è troppo complicata.
Ci deve essere un altra soluzione.


Cucire insieme i documenti PDF non e' stato difficile, ma se questo di 
cucire anche i reference lo e' penso mi serva una strategia alternativa, 
si'.


Proprio pochi minuti fa mi e' venuto in mente che sia chordlab che 
rst2pdf usano reportlab come motore di rendering. Anziche' usare 
chordlab come processo esterno potrei usarlo come libreria e scrivere 
nello stesso documento che sto generando.



Io proverei a scrivere il renderer del tuo formato chopro, che 
generi un
documento reST, usando delle direttive custom per la formattazione 
che ti

serve.


Scrivere quelle direttive potrebbe non essere proprio banale, in 
particolare riguardo lo spostare il cursore per scrivere gli accordi 
sopra al testo: chordlab lo fa parlando direttamente con reportlab; 
passare per docutils comporta che comunque quei programmi dovranno 
bypassare un po' di infrastruttura docutils e interagire col renderer. 
Quindi a questo punto il mio formato e' fortemente legato al formato di 
input. Comunque avrebbe altri vantaggi, per esempio quello di avere lo 
scorrimento del testo risolto (per ora ce lo dobbiamo fare a mano



Non è immediato come con LaTeX, visto che reST è document oriented, 
ma
dato che puoi definire come i vari elementi vanno renderizzati nel 
formato
di output dovrebbe essere possibile con il vantaggio di doverti 
integrare

*solo* con reST.


Ci si puo' pensare. Penso occorra combattere contro diverse assunzioni 
di docutils, ma lo terrei come possibile piano C se i piani A (unire i 
pdf) e B (usare entrambi reportlab in-process) falliscono.



-- Daniele

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


Re: [Python] Moduli xlrd e (xlwt non funzionante)

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 08:30, Marco Beri wrote:



Se si tratta di uno snippettino usa e getta puoi usare Pastebin.


Se e' uno snippettino ma non usa e getta e' meglio gist. Esiste 
qualcosa di simile a gist in bitbucket?



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


Re: [Python] Taglia e cuci di PDF

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 13:32, Manlio Perillo wrote:

2014-09-19 14:08 GMT+02:00 Daniele Varrazzo p...@develer.com:


[...]


Proprio pochi minuti fa mi e' venuto in mente che sia chordlab che 
rst2pdf
usano reportlab come motore di rendering. Anziche' usare chordlab 
come

processo esterno potrei usarlo come libreria e scrivere nello stesso
documento che sto generando.


Potrebbe essere una alternativa, ma significa fare a meno di reST ed 
usare

reportlab per la gestione del documento finale.


Perdendo reST per la gestione del documento finale non mi perdo molto: 
docutils e' debole in questo e Sphinx in effetti e' nato proprio per 
coprire questa mancanza (ed e' stato quello il momento in cui si e' 
potuto usare reST per generare la documentazione di roba grossa come 
Python). Gia' usare rst2pdf mi consente di avere di piu', e questo non 
lo perderei: la struttura del documento rimane quella che avevo in 
mente:


titolo
--

Qualche parola di circostanza

.. song:: the-man-who-sold-the-world.cho
.. song:: karma-police.cho
.. song:: personal-jesus.cho

Ringraziamenti finali

solo che la direttiva song, invece di generare un pdf in un file 
temporaneo da unire al documento in una fase successiva al rendering, 
consiste nel richiamare chordlib (la libreria di chordlab), passargli il 
canvas o quello che sia di reportlab, e fargli fare la sua cosa li'.



 Io proverei a scrivere il renderer del tuo formato chopro, che 
generi un
documento reST, usando delle direttive custom per la formattazione 
che ti

serve.



Scrivere quelle direttive potrebbe non essere proprio banale, in
particolare riguardo lo spostare il cursore per scrivere gli 
accordi

sopra al testo:



Si, non è banale perchè, come scrivevo, reST non è formatting 
oriented.



chordlab lo fa parlando direttamente con reportlab; passare per 
docutils

comporta che comunque quei programmi dovranno bypassare un po' di
infrastruttura docutils e interagire col renderer. Quindi a questo 
punto il

mio formato e' fortemente legato al formato di input.



Perchè?
Usi un elemento dell'AST di reST e poi definisci come renderizzarlo 
in PDF.
Al limite quindi il tuo formato diventa legato al formato di output, 
non di

input.

Tra l'altro in

https://github.com/hammeruke/hug-chords/blob/songbook/books/songbook.py

non stai già usando reportlab per definire come renderizzare il tuo
elemento SongSheet?


Si' ma e' roba facile: e' solo un segnaposto che consuma il numero di 
pagine giusto per ottenere l'indice corretto. E' molto piu' semplice che 
avere tutti i dettagli dell'AST.


Ti basta definire un elemento SongLine o SongFragment ed usare 
reportlab

per la formattazione, a meno che non mi stia perdendo qualche pezzo
importante...


Ci sono cose da fare tipo se la linea della canzone non contiene 
accordi allora lascia un interlinea minore e cosine del genere che sono 
(semi-)risolte in chordlab e sono esterne a quello che *normalmente* un 
renderer reST fa, quindi si tratta di scrivere tutte le direttive e 
patchare il renderer pesantemente. Avendo gia' chordlab 
(semi-)funzionante, se posso, provo a frustare quel cavallo anche poco 
dopo che e' morto. :)




Credo tu non abbia nemmeno bisogno di generare il documento reST
intermedio, ma puoi generare l'AST direttamente e renderizzarlo in 
PDF.
 Rispetto a reportlab almeno hai tutte le feature document oriented 
di

reST.

Tutto questo è solo ad intuito, non avendo mai utilizzato reST per 
fare
cose più complicate di un rst2html di un documento standard, ma mi 
stupirei

se non fosse possibile.


Diciamo che il mio compito e' semplificato dal fatto che il songsheet 
e' sempre una pagina a se', mai completamente integrato nel documento. 
La strada di avere un unico AST globale, comprendente sia le parti di 
documento che quelle dei songsheet, e' di sicuro elegante, ma se mi 
costringe a risolvere problemi specializzati tentando di usare una 
struttura e un renderer generico potrebbe non essere la piu' semplice. 
Su questo c'e' il fattore risparmio, per cui se ho gia' queste due 
toolchain funzionanti:


[documento .rst] - (rst2pdf+reportlab)  - [file PDF]
[documento .cho] - (chordlab+reportlab) - [file PDF]

uno dove prova ad integrarsi? Pigro 1: coi pdf. Pigro 2: con reportlab. 
L'alternativa:


[documento .cho] - [documento .rst+cho] - (chorst2pdf) - [file 
PDF]


costringe a scriversi uno o due pezzi che non esistono ancora: 
conversione cho - rst con direttive custom, rendering delle direttive 
custom in reportlab e probabilmente hackare il renderer stesso perche' 
e' facile che quelle direttive vadano di traverso a come il motore di 
rendering e' progettato.


-- Daniele

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


Re: [Python] Taglia e cuci di PDF

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 14:22, Manlio Perillo wrote:

2014-09-19 15:01 GMT+02:00 Daniele Varrazzo p...@develer.com:


On 2014-09-19 13:32, Manlio Perillo wrote:


2014-09-19 14:08 GMT+02:00 Daniele Varrazzo p...@develer.com:

 [...]




Proprio pochi minuti fa mi e' venuto in mente che sia chordlab che 
rst2pdf


usano reportlab come motore di rendering. Anziche' usare chordlab 
come
processo esterno potrei usarlo come libreria e scrivere nello 
stesso

documento che sto generando.



Piccola nota: il suggerimento che ti avevo dato era esattamente 
quanto hai
scritto sopra.  Usare chordlab come libreria che generi un flowable 
di

reportlab da includere nel tuo documento.


Allora si', siamo andati a convergere sulla stessa idea, (usando un 
elemento monolitico per rappresentare il songsheet all'interno del 
documento, e non sbriciolarlo in un albero che finisce ai singoli 
accordi).


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


Re: [Python] Moduli xlrd e (xlwt non funzionante)

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 14:24, Giovanni Porcari wrote:
Il giorno 19/set/2014, alle ore 09:30, Marco Beri 
marcob...@gmail.com ha scritto:


Io uso Bitbucket ma tutti usano Github.


Pure io ho deciso di andare su Bitbucket. Principalmente per
ragioni di ordine economico. Infatti su github i repository
privati costano troppo :)


Noi per questo usiamo gitlab (https://about.gitlab.com/): l'idea di 
mettere il nostro codice privato tra le nuvole non ci sembra 
accettabile. Non che gitlab abbia le stesse feature di github (e magari 
neanche di bitbucket, ma non so) ma non e' che poi con quel sito ci 
facciamo molto (non ci scambiamo merge request o cose del genere). 
Gia' avere tutti i repos visibili in un solo posto, un minimo di 
organizzazione per gruppi e permessi di accesso ci basta.


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


Re: [Python] Moduli xlrd e (xlwt non funzionante)

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 15:26, Marco Beri wrote:


Vero! Gist è molto bello. L'addon per Chrome poi è fantastico.


Quello non lo conoscevo io. A che serve?

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


Re: [Python] Moduli xlrd e (xlwt non funzionante)

2014-09-19 Per discussione Daniele Varrazzo

On 2014-09-19 16:48, Marco Beri wrote:

2014-09-19 17:25 GMT+02:00 Daniele Varrazzo p...@develer.com:


On 2014-09-19 15:26, Marco Beri wrote:

 Vero! Gist è molto bello. L'addon per Chrome poi è fantastico.




Quello non lo conoscevo io. A che serve?



Ma sai che non è un addon? Ce l'avevo tra i bookmark sulla taskbar ed 
ero

convinto che fosse un addon :-)

https://app.gistboxapp.com/


Lo stavo guardando dopo aver visto il tuo commento (+100) in fondo al 
lunghissimo thread fatto di gente che commenta +1 e gente che commenta 
non scrivete +1, spammate tutti e non serve a un cazzo. Mi ha 
ricordato tanto questa ML col top posting :)


-- Daniele

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


[Python] Taglia e cuci di PDF

2014-09-18 Per discussione Daniele Varrazzo

Ciao,

ho un problema veramente fico da risolvere: sto scrivendo un programma 
per scrivere un libro di canzoni con accordi per il mio gruppo di 
suonatori principianti di ukulele.


Scrivere una songsheet singolo è un problema che abbiamo già risolto: 
esiste un formato semi-serio che si chiama chopro con cui scrivere la 
canzone con gli accordi:


https://github.com/hammeruke/hug-chords/blob/master/chords/hug/valerie.cho

Poi si prende un parser scritto male, variabili globali e tutto il 
resto, tutto in un solo file:


https://github.com/kaj/chordlab/blob/master/chordlab

e lo si trasforma in qualcosa di un po' meno peggio (parser separato 
dal rendeder così poi magari ci facciamo l'html, fogli stile, 
soprattutto un'opzione --ukulele):


https://github.com/hammeruke/chordlab

in grado di generare un songsheet così:

http://hug.spacehobo.com/pdfs/hug/valerie.pdf

Fino a qui tutto facile. Solo che ora vorremmo mettere insieme diversi 
songsheet per fare un songbook, nell'ordine che vogliamo noi, 
tipicamente di difficoltà: dalle canzoni con tre accordi a quelle... con 
cinque? Beh, siamo principianti! Comunque, immagino che in un songbook 
uno ci voglia mettere anche qualche titolo e qualche parola qua e là, e 
soprattutto un indice. Ovviamente il punto di partenza è 
docutils/reStructuredText: è un formato che serve già a rappresentare un 
documento strutturato, ha una bella toolchain ed è estendibile. In 
particolare rst2pdf ottiene dei pdf bellini usando reportlab e anche lui 
lascia estendere bene: ha un'opzione di riga di comando apposta per 
caricare estensioni e lasciarsi monkeypatchare.


Per cui ho il mio documento che rappresenta un songbook, dove c'è una 
direttiva che permette di aggiungere delle canzoni al resto del 
documento:


https://raw.githubusercontent.com/hammeruke/hug-chords/songbook/books/sample.rst

O meglio, per ora questa direttiva non c'è: sto lavorando ad un livello 
più basso, che è una direttiva che permette di inserire un pdf qualunque 
in mezzo al documento; la direttiva songsheet deriverebbe da 
include-pdf e dietro le quinte lancerebbe chordlab per generare il pdf 
della canzone e poi includerebbe quello. Quindi si lancia rst2pdf con 
questa estensione:


https://github.com/hammeruke/hug-chords/blob/songbook/books/songbook.py

che genera un documento dove, in corrispondenza dei documenti esterni, 
inserisce una entry dell'indice e tante pagine vuote quante quelle del 
documento inserito. Quando il rendering è finito usa pyPdf per leggere 
il proprio output e per sostituire le pagine segnaposto con quelle dei 
documenti inseriti. Questo è stato un po' complicato da mettere insieme 
perché ci sono tre librerie che lavorano in maniera congiunta: docutils, 
rst2pdf, reportlab, e c'era da capire il loro modello interno e i 
passaggi da un modello all'altro, ma è stato un bel pomeriggio domenica 
scorsa.


Problema! Mi si rompe l'indice! Mannaggia. Se non sostituisco le pagine 
l'indice funziona. Ma se le rimpiazzo cliccando sull'indice il pdf non 
va da nessuna parte. Probabilmente nella pagina che rimuovo c'è l'àncora 
del punto di arrivo: l'indice punta a quella, non genericamente a 
pagina 3. La soluzione sarebbe, sempre con pyPdf, quella di ispezionare 
la pagina da rimuovere, trovare l'ancora e iniettarla nel pdf da 
inserire...


Beh, qualcuno ha una vaga idea di come si possa fare? :) Qualcuno sa 
come sono rappresentati i (credo siano) bookmark e outline entry in un 
pdf (questi sono gli elementi che rst2pdf chiede di generare a 
reportlab), come estrarli da un pdf esistente e come iniettarli in uno 
nuovo?


A chi mi sappia suggerire una soluzione, o informazioni utili per 
risolvere il caso, andrà il privilegio di non sentirmi suonare.



-- Daniele

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


[Python] SQL injection [era: Esclusione della query vuota]

2014-09-11 Per discussione Daniele Varrazzo

On 2014-09-11 10:19, Riccardo Brazzale wrote:

Scusate, conosco python ma non in maniera cosi' approfondita.

Ma :

import MySQLdb as my

stringa = Daniele'; DROP TABLE rubrica; --
stringa = my.escape_string(stringa)

sql = ... %s ...
c.execute(sql, (stringa))


... non risolve il problema?


No, non lo risolve: lo crea.

Se la strategia di passaggio dei parametri alle query e' quella di 
escapare a mano ogni singolo argomento di ogni singola query, stai 
sicuro che qualcuno te lo dimenticherai. Stai sicuro che in una funzione 
un po' strana del tuo programma i parametri dovranno passare prima in 
un'altra funzione e non sara' piu' chiaro chi deve applicare l'escape - 
alcuni saranno doppi, altri mancanti. Stai sicuro che qualcuno lo 
considererai sicuro perche' e' un intero quindi non serve l'escape - ma 
poi quell'intero, che era il numero di pagina del tuo blog, qualcuno si 
accorge che se lo cambia in a nella url la pagina si rompe... e li' 
comincia il divertimento. Di' ciao al russo. Non Victor, l'altro :)


Infatti, e qui so di infrangere il cuore di molti, la striscia little 
bobby tables e' fondamentalmente sbagliata. La conseguenza della mamma 
hacker (I hope you have learned to sanitize your database inputs) e' 
l'approccio sbagliato al problema. L'approccio giusto e' quello di *non* 
porsi il problema dell'escape nel proprio applicativo e delegarlo a 
qualcuno ad un livello sottostante (che puo' essere il driver del 
database o il server stesso). Questo e' un caso dove la pigrizia vince 
(a patto che uno si scelga i collaboratori giusti).



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


Re: [Python] Esclusione della query vuota

2014-09-10 Per discussione Daniele Varrazzo

On 2014-09-10 21:08, Juri Rudi wrote:


def cerca_def():
cliens = select cognome, nome, paese from rubrica where
(cognome = '%s' OR nome = '%s' OR paese = '%s') % (cognome.get(),
nome.get(), paese.get())


Che succede se uno ha un apostrofo nel cognome?

L'errore che stai facendo probabilmente (ma non conosco come si 
comporta mysql) e' che i campi vuoti vanno cercati con nome is null, 
non con nome = '' e ancora meno con nome = 'None'.



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


Re: [Python] Esclusione della query vuota

2014-09-10 Per discussione Daniele Varrazzo

On 2014-09-10 21:16, Juri Rudi wrote:

Il 10/09/2014 22:15, Daniele Varrazzo ha scritto:

On 2014-09-10 21:08, Juri Rudi wrote:


def cerca_def():
cliens = select cognome, nome, paese from rubrica where
(cognome = '%s' OR nome = '%s' OR paese = '%s') % (cognome.get(),
nome.get(), paese.get())


Che succede se uno ha un apostrofo nel cognome?


Al momento mi dà errore.
Ma sto convertendo le tabelle:

http://www.sergiorinaudo.com/come-risolvere-il-problema-dei-caratteri-accentati-e-caratteri-esteri-su-db-mysql-e-php-usanto-il-charset-utf8/


Non è esattamente la stessa cosa. Cosa succede se il mio nome è

Daniele'; DROP TABLE rubrica; --

Fammi sapere.

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


Re: [Python] datetime to sec since epoch

2014-09-08 Per discussione Daniele Varrazzo

On 2014-09-08 11:25, Dario Bertini wrote:


Alcuni suggeriscono di usare mxDateTime, che pare sia un po' meno
errorprone del builtin python, ma personalmente non l'ho mai usato:

https://pypi.python.org/pypi/egenix-mx-base/


Non ne vale la pena: è roba che aveva senso prima di Python 2.3, quando 
non c'erano gli oggetti datetime nella stdlib.


(Io sì, l'ho usato, ma con Python 2.2 :)


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


Re: [Python] distribuire programmi python

2014-09-07 Per discussione Daniele Varrazzo

On 2014-09-07 17:08, Marco Beri wrote:

On Sep 6, 2014 8:15 AM, Daniele Varrazzo p...@develer.com wrote:


Il programma e' gratis e open. A pagamento hanno dei servizi di
centralizzazione, inventari dinamici, cose che neanche ho capito cosa 
sono

onestamente.

Daniele,
un collega mi ha accennato a Saltstack.

Conosci? Qualcun'altro qui?


Io no. Da quanto ho letto implementa grossomodo lo stesso modello di 
ansible (ovvero senza server remoto, al contrario di chef/puppet). Di 
default una 0mq invece di ssh come trasporto, che lo rende un po' più 
veloce ma che ha causato problemi di sicurezza in passato (in ansible è 
opzionale). Entrambi stanno ricevendo interesse da gente che ha trovato 
chef/puppet difficili. Esperienza diretta non ne ho.


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


Re: [Python] distribuire programmi python

2014-09-06 Per discussione Daniele Varrazzo

On 2014-09-06 06:46, Balan Victor wrote:
il giorno 06 settembre 2014 04:30, Daniele Varrazzo 
p...@develer.com ha

scritto:



devi provare dell'oddio verso il tuo collega .. ahahah


Assolutamente no, è un bravissimo ragazzo e una delle persone più 
pazienti del mondo. Per lui risolvere un bug tipo cambiare l'anno di 
copyright a fondo pagina oppure stravolgere completamente il sistema 
sono la stessa cosa. Lo ammiro, io passo sempre per la strada più pigra 
:)




Su *nix compila python installandolo in /usr/local/py34 (./configure
--prefix=/usr/local/py34  make  sudo make install) e crea un 
virtualenv
che utilizzi quell'eseguibile. Puoi avere diverse versioni di Python 
e non
si danno minimamente fastidio (ho tutta la collezione dal 2.4 al 3.4 
sul

portatile e sulle macchine di test).


si effettivamente non c'ho minimamente pensato ...

mai avuto esperienze con python e z/os / mvs ?


Non credo ci trovi niente di più aggiornato di Python 2.4 per questa 
roba.


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


Re: [Python] distribuire programmi python

2014-09-06 Per discussione Daniele Varrazzo

On 2014-09-06 12:01, Giovanni Porcari wrote:

Il programma non gira su server dedicati quindi non posso pensare di 
usare roba tipo docker e non voglio nemmeno dipendere dal python 
installato di default sul sistema.


Uhm... poi ovviamente docker non e' che gira su tutta la roba che 
hai descritto.

Chef pero' potresti usarlo...



Dal momento che mi sono totalmente 'innamorato' di docker mi potreste 
dire

che tipo di controindicazioni ci vedete ?


Penso solo questo:

On 2014-09-04 13:51, Balan Victor wrote:

Ciao a tutti,
ho un programma scritto in python che devo far girare su server
linux/aix/hp-ux/unix/solaris e windows.


Docker gira solo su Linux moderni. Victor insiste che il suo programma 
scritto in Py 3.4 deve girare anche sul VIC20...


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


Re: [Python] distribuire programmi python

2014-09-06 Per discussione Daniele Varrazzo

On 2014-09-06 14:27, Balan Victor wrote:

Docker gira solo su Linux moderni. Victor insiste che il suo 
programma

scritto in Py 3.4 deve girare anche sul VIC20...


ahahah ... in realtà mi accontento solo di win e linux tutte le altre
piattaforme sono un 'di più' che non fa male ma che se c'è bene se 
non c'è

amen


Fa male.


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


Re: [Python] distribuire programmi python

2014-09-05 Per discussione Daniele Varrazzo

On 2014-09-05 18:14, Balan Victor wrote:


Uhm... poi ovviamente docker non e' che gira su tutta la roba che 
hai

descritto.
Chef pero' potresti usarlo...


si lo so. Chef non lo conoscevo, adesso mi sto guardano un po di
documentazione


Chef e' potente ma fossi in te userei Ansible. Ha questi vantaggi:

- non serve un server sulla macchina remota: basta ssh per usarlo
- non serve conoscere ruby per usarlo (non serve neanche conoscere 
Python per usarlo, basta yaml; per Chef invece devi scrivere roba Ruby)
- se ti serve hackarlo, e' scritto in Python, che si suppone tu 
conosca.


Io ci ho passato le ultime due settimane e sono state positive. Ci ho 
fatto in breve tempo cose piuttosto complesse, per risolvere alcuni 
problemi mi sono scritto un modulo di estensione mio (e un altro l'ho 
cherry-pickato dalla prossima versione ancora da rilasciare). Ho mandato 
patch upstream e mi sono gia' fatto mandare affanculo dagli 
sviluppatori, e tutto in pochi giorni!


Come detto sopra non serve essere uno sviluppatore per usarlo perche' 
hai solo da scrivere file umani con la descrizione dei passi da fare. 
Se poi dovesse essere necessario mettere le mani dentro al motore, 
meglio Python che Ruby (tra l'altro e' scritto in maniera abbastanza 
semplice).


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


Re: [Python] distribuire programmi python

2014-09-05 Per discussione Daniele Varrazzo

On 2014-09-05 19:04, Francesco Pischedda wrote:
Il giorno 05 settembre 2014 20:01, Daniele Varrazzo 
p...@develer.com ha

scritto:

Ho mandato patch upstream e mi sono gia' fatto mandare affanculo 
dagli

sviluppatori, e tutto in pochi giorni!



LOLissimo! :D

molto OT: a quanto sento non sei il primo che si lamenta 
dell'accoglienza

degli sviluppatori di ansible però il progetto è veramente valido


A mio avviso hanno fatto una cappellata con la priorita' delle 
variabili, ma ora e' troppo tardi per tornare indietro perche' ormai ci 
sono ettolitri di script che fanno affidamento sul comportamento 
attuale.


Il problema e' che loro non dicono si' abbiamo cappellato ma ormai e' 
cosi', che sarebbe giustificabilissimo. Loro dicono come vuoi fare tu 
non e' idiomatico. Insomma sbaglio io. Ok, ci puo' anche stare. Pero' 
googlando vedo che il problema ce l'hanno in molti. Quello che non puoi 
fare in ansible e' qualcosa tipo (scusate l'ansiblese per chi non lo 
mastica):


- un role webserver definisce un default, tipo http_port = 80
- un role firewall deve poter accedere alla variabile per aprire 
quella porta
- in un inventory vorrei avere la possibilita' di sovrascrivere questo 
default,

  ad esempio sull'installazione di test avere http_port=8080.

Questo non posso farlo: se usassi include_vars nel firewall la 
variabile diventa troppo potente e l'inventory non puo' sovrascriverla 
(un default puo' essere sovrascritto invece). Se introduco una 
dipendenza esplicita tra i ruoli il webserver mi viene installato anche 
sulla macchina del firewall, che puo' essere diversa.


La mia soluzione e' stata di aggiungere un comando include_defaults che 
funzioni come include_vars ma con le variabili overridabili. Il 
comportamento di ansible non cambia e se uno script non usa 
include_defaults tutto resta come prima.


La loro risposta e' che i default condivisi vanno scritti invece... in 
un file globale (tipo group_vars/all). E che la nuova regola 
sottoporrebbe gli utenti ad un carico cognitivo eccessivo.


Wat™?

Insomma nei doc scrivono le variabili di inventory sono potentissime 
ed e' falso, puoi solo overridarci i default, se una cosa la tiri dentro 
con include_vars diventa semi-immortale. Dicono i role sono un modo di 
rendere modulare un playbook e poi ti serve un file globale per passare 
un default tra due role... A me sembra il caso di invocare Upton 
Sinclair (it is difficult to get a man to understand something, when his 
salary depends upon his not understanding it) e tirare avanti.


Per fortuna tirare avanti si fa bene, perche' anche se non hanno 
accettato il nuovo comando upstream e' possibile metterlo nel proprio 
playbook e Ansible lo usa senza dar fastidio a nessuno. Il che mi sembra 
grandioso. A chi interessa include_defaults e' disponibile a 
https://gist.github.com/dvarrazzo/7418a89b7278ff69267c.


Quindi si', confermo l'impressione: gli sviluppatori di Ansible sono 
*molto* opinionati. Ma il progetto e' veramente ben fatto.


-- Daniele

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


Re: [Python] distribuire programmi python

2014-09-05 Per discussione Daniele Varrazzo

On 2014-09-06 01:37, Balan Victor wrote:


Chef e' potente ma fossi in te userei Ansible. Ha questi vantaggi:


mmm ... pricing... mmm free trial ... mmm  in ogni caso mi guardo 
anche

questo


Il programma e' gratis e open. A pagamento hanno dei servizi di 
centralizzazione, inventari dinamici, cose che neanche ho capito cosa 
sono onestamente.



- non serve un server sulla macchina remota: basta ssh per usarlo
- non serve conoscere ruby per usarlo (non serve neanche conoscere 
Python

per usarlo, basta yaml; per Chef invece devi scrivere roba Ruby)
- se ti serve hackarlo, e' scritto in Python, che si suppone tu 
conosca.


sembra un fabric un po più potente .. o sbaglio?


In un certo senso sì: come fabric si connette via ssh ed esegue 
comandi. Però non è imperativo, ma dichiarativo. Ovvero, tu hai un task 
che dice sulla macchina deve esserci un utente che si chiama 'pippo' e 
appartiene al gruppo 'devs'. Oppure deve esserci la directory 
/foo/bar/baz proprietario root e permessi 755. apache deve essere 
installato almeno versione 2.2 ecc. Tu dichiari cosa vuoi ed ansible fa 
la differenza. Ovvero: va sulla macchina, l'utente c'è? Stapposto. La 
directory c'è? Ha permessi 700? Cambio i permessi. Apache c'è? No? 
apt-get install... Eccetera. Tu descrivi lo stato finale e il programma 
si incarica di verificare che quello stato sia realizzato, oppure se non 
c'è fa in modo di raggiungerlo.


Fabric invece è puramente imperativo: tu gli dici di eseguire apt-get 
install apache, poi se questo fa qualcosa oppure niente perché apache 
c'è già non sono fatti di fabric. Ma se fai useradd e l'utente c'è già 
probabilmente il comando ti darà un errore che dovrai gestire, e se 
della directory vuoi cambiare i permessi devi gestire tipo due casi 
diversi: se non c'è la devi creare, se c'è devi fare chmod. Certo puoi 
provare a rendere idempotenti anche questi comandi (tipo usando mkdir -p 
che non dà errore se la dir c'è già). Ma in generale se il comando che 
esegui non è idempotente allora devi fare prima un controllo delle 
precondizioni.


E poi sopra questo c'è tutta la gestione delle variabili e la 
generazione di file di configurazione da template. In effetti ansible lo 
stiamo introducendo su un sistema web piuttosto complicato il cui deploy 
è evoluto con:


1) si fa tutto a mano (ssh mollybox, git checkout, ah, cazz, qui c'è 
una libreria vecchia, pip install sqlalchemy. No a-ri-cazz, il frontend 
e il backend vogliono due versioni diverse... - voce dall'altra parte 
dell'ufficio: ehi, come mai molly è giù?)


2) virtualenv, requirements.txt e fabric. Questo sistema almeno il 
mondo python. L'aggiornamento diventa tipo fab up, che fa il git pull, 
pip install -U -r requirements, stop, start.


Peccato che mentre facevamo questo al sistema si sono aggiunte un paio 
di istanze di redis, un rabbitmq e pure morbid perchè non ci facciamo 
mancare niente, e poi haproxy e dentro redis ci buttiamo roba fatta con 
capnproto. A coordinare questa roba virtualenv non basta. La macchina 
era piuttosto vecchia e lo sviluppatore che aggiungeva questa roba si 
doveva compilare anche il compilatore per compilare pycapnp e non so che 
versione di redis con dentro un interprete lua... Mi sono distratto un 
attimo (sono stato via dal lavoro qualche mese) e quando sono tornato si 
era anche scritto un sistema per


3) generare i file di configurazione da template (per qualche motivo 
gli era cresciuto mentre nel sistema ci buttava dentro anche 
supervisord). Per fortuna non gli è uscito benissimo e alcuni template 
hanno bisogno di un template di partenza, o qualcosa del genere di cui 
mi sono perso volentieri i dettagli.


Insomma, per fortuna la settimana scorsa è andato in ferie lui, 
altrimenti mi riscriveva ansible dentro molly :) Quando si è distratto 
un attimo ho ansibolato tutto, ovvero a) installazione dei package e 
preparazione del sistema, b) installazione del nostro codice e librerie 
python c) generazione dei file di configurazione. Quindi ora in quei 
playbook di ansible c'è già quasi tutta la conoscenza del sistema 
(quando ha migrato la macchina vecchia alla nuova dice che c'ha messo 
una settimana a sistemare tutto, a forza di tentativi ed errori, 
ovviamente. Io ho fatto gli stessi errori, ma almeno quello che ho fatto 
adesso è ripetibile e in 10 minuti parte da una VM vuota a un sistema 
funzionante). Il sistema di template è più completo, per cui riesce a 
gestire le varie casistiche che ci dobbiamo smazzare (per esempio che su 
una macchina girano 3 istanze piccole del sito su 3 ip diversi ma 
quell'altro sito è grande quindi è diviso su tre macchine, frontend, 
backend, database, con 8 nodi frontend, 2 backend...) che a coprirle 
tutte con scriptini fatti a mano un po' gli saranno tremate le vene e 
probabilmente qualche scorciatoia l'ha presa.


...dov'eravamo? Ah sì: fabric. Sì, ansible gli somiglia, ma ci devi 
aggiungere sopra la gestione delle variabili e la gestione dei template 
di 

Re: [Python] Info su pickle.

2014-09-03 Per discussione Daniele Varrazzo

On 2014-09-03 14:15, Gabriele Battaglia wrote:

Ciao a tutti e ben rientrati dalle ferie.


import pickle

HIGHEST_PROTOCOL

Traceback not defined.


 import pickle
 pickle.HIGHEST_PROTOCOL
2

forse?

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


Re: [Python] errore ?

2014-08-30 Per discussione Daniele Varrazzo

On 2014-08-29 21:02, Filippo Dal Bosco - wrote:

tentando questo con python 2.7 mi dice  file non trovato

hKey = _winreg.OpenKey (_winreg.HKEY_CLASSES_ROOT,
rC:\WINDOWS\system32\notepad.exe\CLSID)

sbaglio a scrivere  rC:\WINDOWS\system32\notepad.exe\CLSID ( il 
file

esiste !!)

o semplicemente cerco di fare una cosa  assurda?


Cerchi di fare una cosa assurda. Il secondo argomento è una chiave del 
registry, non un file.


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


Re: [Python] Python 2 o 3 per i metadati delle foto?

2014-08-26 Per discussione Daniele Varrazzo

On 2014-08-26 10:18, Enrico Bianchi wrote:

On 08/15/2014 01:12 PM, Daniele Varrazzo wrote:
Se all'op serve una libreria per un'applicazione web, dire che ce ne 
sono 50 non lo aiuta a scegliere.


Vero, ma la mia domanda era riferita ad altro (colpa mia che come al
solito mi spiego male) :)
Perche` per un progetto grande proponi un framework grande come
Django mentre per un progetto piccolo un microframework tipo Flask? 
:)


Un raggio di ovvio mi illumina il risveglio.

La risposta te la sei data da solo: completala un altro po'. Magari 
leggendoti quello che fanno quei due.



-- Daniele

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


Re: [Python] Python 2 o 3 per i metadati delle foto?

2014-08-15 Per discussione Daniele Varrazzo

On 2014-08-15 11:17, Enrico Bianchi wrote:

On 08/12/2014 06:09 PM, Daniele Varrazzo wrote:

In realta' questa scelta puo' essere limitata fortemente:


In baese alle tue valutazioni, mi viene da dire: perche`?


Un uomo entra in una cartoleria. La porta fa suonare un campanello, che 
desta il vecchietto al bancone dal suo torpore. Vorrei un foglio 
protocollo.


Il vecchietto dall'altro lato del bancone lo guarda per un momento, fa 
un cenno affermativo con la testa, si volta e raggiunge lo scaffale alle 
sue spalle. Guarda su e giu', a sinistra e a destra, poi torna indietro 
e chiede: ma lo vuole a righe o a quadretti?


Ah, giusto, pensa il cliente. A righe.

Il vecchietto ci mette una frazione di secondo in piu' per reagire, 
dicamo non scatta ma neanche resta li' imbambolato, solo, fuori tempo, 
annuisce lievemente, si volta, raggiunge di nuovo lo scaffale, guarda in 
lungo e in largo, ma non prende niente. Torna al bancone e chiede: 
vuole un foglio con il bordo largo o con il bordo stretto?


E' uguale, fa per chiedere il cliente. Ma il vecchietto e' uno 
preciso: no perche' per lavori protocollari e' d'obbligo quello 
stretto, ma se a lei serve per prendere appunti personali quello col 
bordo largo le permette un miglior uso...


Va bene, allora quello col bordo stretto lo interrompe il cliente, 
che non e' che debba fare chissa' cosa i fogli ma ha una certa fretta.


Il vecchietto di nuovo torna allo scaffale, prende una scala, si 
arrampica, fruga sui ripiani superiori, non prende niente. Scende dalla 
scala (lentamente, ha una certa eta'), torna al bancone e chiede le 
righe verticali: le vuole azzurre o beige?


Ma e' la stessa cosa, e' uguale! No, scusi, dipende, se lei usa una 
penna nera allora il contrasto con le righe beige potrebbe essere...


Il vecchietto viene interrotto dal campanello della porta che suona di 
nuovo. Entra un uomo in cannottiera, sudato. Porta una tazza di 
gabinetto sulle spalle. Si avvicina al vecchietto e sbatte la tazza sul 
bancone.


Il cesso e' questo. Il culo te l'ho fatto vedere ieri. Me la vuoi dare 
o no questa carta igienica?




Se all'op serve una libreria per un'applicazione web, dire che ce ne 
sono 50 non lo aiuta a scegliere. Le scelte che ho suggerito permettono 
di fare tutto nelle rispettive classi (framework minimale, stack 
completo), sono le piu' conosciute, sono ben documentate ecc. Poi puo' 
essere che esistano alternative che per una certa feature sono meglio di 
quello che ho suggerito: e' probabile. Ci sta che l'utente finisca per 
trovare l'ORM di Django limitativo e avrebbe preferito TurboGears con 
SQLAlchemy (solo un esempio random, non e' Django-bashing), ma porre 
tutte le scelte all'inizio, senza che l'utente ne abbia usata nessuna e 
quindi senza alcun termine di paragone, e' una cosa che disorienta e non 
aiuta.


Quando tornera' e dira' ho usato Flask ma e' troppo dispersivo e ha 
troppe dipendenze allora sara' il caso di suggerirgli Bottle; ma prima 
di allora dire che esiste una differenza di questo genere e' solo per 
voler parlare, non perche' sia un'informazione che all'utente serve. La 
liberta' di scelta e' bella ma fa comodo quando uno ha dimestichezza col 
campo, ha usato una libreria, ne conosce i punti di forza e le 
debolezze... per tutti gli altri (e per quasi tutti in generale) Django 
va piu' che bene. Restassi su un'isola deserta mi porterei Django, ci 
spaccherei anche le noci di cocco.


La mia valutazione e': li ho usati e funzionano. Ne ho usati altri e 
tendenzialmente hanno funzionato anche quelli. Django spacca bene le 
noci di cocco pero'.



-- Daniele

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


Re: [Python] sequenza di bytes

2014-08-05 Per discussione Daniele Varrazzo

On 2014-08-05 14:48, Filippo Dal Bosco - wrote:

Il giorno Mon, 4 Aug 2014 16:03:54 -0700
Dario Bertini berda...@gmail.com ha scritto:


Non ho macchine windows qui agevolmente accessibili, di che
differenza parli?


esempio  PROT_READ  diventa ACCESS_READ

  e non so se si comporta nello stesso modo

se guardi qui vedrai che  si parla  di mmap versione unix e windows


https://docs.python.org/3.4/library/mmap.html


per altro non capisco  perché   due implementazioni diverse.


Perché queste funzioni espongono chiamate al sistema operativo, non 
sono implementazioni in Python, e i due sistemi operativi le 
implementano in maniera diversa (probabilmente non solo come sintassi ma 
anche come semantica).


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


Re: [Python] Interessante anche se datato

2014-05-05 Per discussione Daniele Varrazzo

On 2014-05-05 08:14, Marco Beri wrote:

On Mon, May 5, 2014 at 2:28 AM, m m...@pavis.biodec.com wrote:

per rimanere sull'OT, ma nemmeno tanto: per chi c'era e chi non 
c'era,

come avreste votato oggi --- è evidente il mio risentimento di avere
perso nei confronti dell'accusa, e quindi le provo tutte, anche a 
pormi
innanzi ad una giuria di pitonieri --- anche alla luce di esperienze 
(che
immagino molti avranno fatto) di uso di database NoSQL (ricordo che 
il

processo al database, era in realtà il processo al database
_relazionale_)



Riesco a immaginare, anche se con molta fatica, una vita 
professionale

senza Python.

Ma credo che senza database non sarebbe stata possibile.

My 2 ¢ :-)

Ciao.
Marco.
P.S. Non ho scritto relazionali di proposito anche se, avendo 
cominciato,

seriamente, con DBIII e Clipper 87, avrei potuto farlo.


Perchè sei un vegliardo: tutto quello per cui i db relazionali sono 
stati inventati oggi non vale più e si può fare a meno delle loro 
proprietà.


Totalmente.

http://hackingdistributed.com/2014/04/06/another-one-bites-the-dust-flexcoin/

(n.b. si può saltare tranquillamente la conclusione e i suoi 
vaneggiamenti su cotale HyperDex e la sua distinzione di nosql di prima 
generazione: l'elefante nella stanza è che questo è un caso così da 
manuale di uso dei db relazionali che non credevo neanche fosse 
possibile trovarlo applicato nella realtà)


-- Daniele

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


Re: [Python] Ubuntu Server 13.10 + Python come Servizio

2014-04-17 Per discussione Daniele Varrazzo

On 2014-04-17 15:42, Dario Concilio wrote:

Ciao a tutti,sono alle prese con un progetto in python che, al suo
avvio, si occupa di aprire 2 seriali e un web socket, dopodiché 
rimane

in ascolto (su 3 thread paralleli).Riceverà diverse richieste che,
avranno come effetto, l'aggiornamento di dati su un database
postgresql.
Fin qui siamo nella norma, adesso vorrei automatizzare il tutto.Ho
preparato un piccolo server (Intel NUC) con Ubuntu Server 13.10,
vorrei fare in modo di avviare il mio python all'avvio e gestirlo 
come

servizio.Quindi gestire start, stop e restart, ma anche poter
consultare gli eventi generati dal python/servizio.Per gli eventi ho
usato la libreria logging, quindi traccio già info, warning ed error.
Adesso il mio dilemma è: qual'è la via migliore al momento? Non ho
mai fatto un servizio su linux/python, quindi mi trovo a corto di
nozioni in merito.
Ho questo post per le mani, secondo voi è la via

giusta?http://stackoverflow.com/questions/4705564/python-script-as-linux-service-daemon
Avevo già preparato il file miopython.conf sotto init, ma non mi è
chiaro il punto di contatto tra un eventuale comando di restart o 
stop

da terminal, e un paio di metodi in python che si occupano, a fronte
(ad esempio di service mypython stop), la chiusura delle seriali,
del socket e i relativi thread.
PS: Ricordate che sono junior in ambito python/linux (solo 2 anni di
esperienza), quindi abbiate pazienza, se commetto errori, magari 
nella

terminologia (sto cercando di uscire dallo schema mentale MS Windows)
A presto.Dario Concilio


Sì, creare uno script per upstart è la maniera più semplice di fare e 
quell'articolo menziona il minimo indispensabile per partire, che è già 
sufficiente.


Il tuo programma non deve fare niente di speciale: si deve limitare a 
morire quando gli viene chiesto :) Thread e socket vengono chiusi quando 
il processo termina. Upstart di default invia un TERM al processo: puoi 
simulare come si comporta il tuo processo usando kill (TERM è il segnale 
di default). Se morire e basta non è sufficiente puoi intercettare il 
segnale usando il modulo 'signal' di python 
(https://docs.python.org/2/library/signal.html) e facendo qualcosa di 
diverso o aggiuntivo. Questo però richiede una certa attenzione: se 
riesci ad evitare è meglio. Puoi anche configurare il tuo script upstart 
per mandare un segnale diverso al processo 
(http://upstart.ubuntu.com/cookbook/#kill-signal).


Il restart di upstart dovrebbe essere solo uno stop + uno start: se il 
tuo programma muore con grazia (e riparte!) dovresti essere a posto. Se 
vuoi anche implementare il reload devi intercettare SIGHUP (sempre 
usando 'signal') e scrivere il codice che riconfigura il programma senza 
riavviarlo (e anche questo puoi testarlo con kill -HUP).


Insomma, se il tuo programma deve fare qualcosa di diverso che non sia 
partire e fermarsi il punto di contatto dovrebbero essere i signal 
handler unix, e per gestirli dal tuo programma devi usare il modulo 
'signal'.


-- Daniele

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


Re: [Python] Ubuntu Server 13.10 + Python come Servizio

2014-04-17 Per discussione Daniele Varrazzo

On 2014-04-17 18:42, Manlio Perillo wrote:


Aggiungo solo che su Linux non c'è un servizio init standard.
Su archlinux usano systemd, che sembra sia la moda del momento.
Su Ubuntu usano upstart, ma in futuro passerà a systemd.

Quindi ti suggerisco di leggere la documentazione di systemd.


Sapevo che questo qualcuno l'avrebbe puntualizzato. Cambia poco: il suo 
programma deve ricevere gli stessi segnali. Sulla versione ubuntu che 
lui usa c'è ancora upstart: installare systemd da backport è rognoso, 
quindi non ne vale la pena sbattersi.


-- Daniele

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


Re: [Python] Test, test e ancora test, voi cosa usate?

2014-04-15 Per discussione Daniele Varrazzo

On 2014-04-15 11:39, Dario Bertini wrote:

Giusto l'altra sera mi sono visto questo talk:

https://www.youtube.com/watch?v=zi0rHwfiX1Q

(è stato ripreso all'ultima Clojure/West, ma non preoccupatevi... il
codice è in Erlang :P )

È di uno degli autori di QuickCheck, che già ho usato... ma che 
questa

presentazione mi ha fatto apprezzare ancora meglio

Il nocciolo dell'idea è: non scrivere i test, generali!

Ce ne sono diversi porting per Python, quello più attivo è forse
questo: https://bitbucket.org/t2y/pytest-quickcheck/

(non l'ho usato, quindi se avete una versione migliore di quickcheck
da consigliare fatevi avanti)


Un mio amico ne stava scrivendo uno, ma non ho seguito quanto è andato 
avanti


https://github.com/davidedelvento/qc

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


Re: [Python] Test, test e ancora test, voi cosa usate?

2014-04-15 Per discussione Daniele Varrazzo

On 2014-04-15 13:28, Carlo Miron wrote:
Il 15 aprile 2014 12:47, Daniele Varrazzo p...@develer.com ha 
scritto:



On 2014-04-15 11:39, Dario Bertini wrote:
(non l'ho usato, quindi se avete una versione migliore di 
quickcheck

da consigliare fatevi avanti)


Un mio amico ne stava scrivendo uno, ma non ho seguito quanto è 
andato

avanti
https://github.com/davidedelvento/qc


mancava, in effetti :P


As in ce ne sono almeno 347 implementazioni? :) Non ne so molto: QC è 
stato hip nel mondo erlang per un po' ma a noi non ha acchiappato 
molto...


-- Daniele



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


Re: [Python] Guide per niubbi

2014-04-15 Per discussione Daniele Varrazzo

Ciao Daniele,

On 2014-04-15 22:07, Daniele Olivieri wrote:

Il titolo dovrebbe dire tutto :D
Come scritto anche nell'altra mail, sono nuovo nel mondo della
programmazione. Sto imparando il python da una guida trovata sul play 
store
dato che non riesco ad usare il computer spesso quindi compilo gli 
script

su android e li testo su pc.


Quale guida hai provato?


Avevo due domande da farvi:
1 ho letto sul forum di guide utili ma voi personalmente che avete 
usato??
Cioé quando leggo i vostri messaggi, non sfiorano nemmeno di un 
capello il
mio livello, cioé nonostante mi trovi a tre quarti di questa guida e 
sia
riuscito a programmare una calcolatrice e uno script per le equazioni 
di

secondo grado (grande conquista per me xD)


Beh, complimenti intanto per aver deciso di affrontare un'attività che 
onestamente è una delle più difficili possibili. Penso che imparare a 
programmare bene sia difficile quanto imparare a suonare bene uno 
strumento e ci vuole anche una certa gradualità nell'impadronirsi di sia 
di certe tecniche che di certi modi di ragionare. Su quante ragazze si 
riesca a conquistare con la programmazione, purtroppo, non ho buone 
notizie. Ma divago: se qualche conversazione ti sembra interessante e 
non riesci ad aggrapparti, sentiti libero magari non di dirottare quel 
thread ma di aprirne uno in parallelo dove fare domande più di base.


I vostri discorsi per me sono ostrogoto, dove si apprendono queste 
cose? Ci

vogliono davvero volumi da 80 euro???


Il tutorial della documentazione, poi Thinking in Python e Dive into 
Python sono stati una buona partenza per me. Ma questo è stato nel 
2003: non so se nel frattempo sono uscite guide altrettanto o più buone 
e magari più aggiornate. Comunque, anche se le tecniche sono cambiate 
(tipo come si scrive un programma web è cambiato molto negli ultimi 10 
anni) i fondamenti di programmazione sono più universali. Il libro da 80 
euro difficilmente è una risorsa di apprendimento: è più facile sia una 
guida di riferimento.


Domanda 2: ho installato python su android, mi funziona l'idle ma 
quando
eseguo lo script, lo esegue in background diciamo se per esempio 
metto

input lui me lo salta e mi da eof error come se non ci avessi scritto
niente. In pratica mi visualizza un semplice log e non posso 
interagire col

programma.
Esiste un qualcosa per testare gli script direttamente su android? 
Avevo
trovato l'alternativa di mettere linux sul telefono ma rimane 
comunque un

pó scomodo.


Su questo passo: ho provato ad usare Python su Android ma non mi ha 
entusiasmato: mi ricordo ci si facevano cose limitate quindi non ho 
insistito. Ma è davvero possibile usare android per immettere codice o 
usi una tastiera esterna?


So che come seconda mail ho scritto un altro papiello ma perdonatemi 
sto
agli inizi e ho tentato comunque di scriverlo il piú italiano 
possibile

sensa parole da SMS o errori di battitura per facilitarne la lettura.
Grazie per l'attenzione.


Grazie a te per l'attenzione ai dettagli.

-- Daniele

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


Re: [Python] Captcha

2014-04-14 Per discussione Daniele Varrazzo

On 2014-04-14 07:53, Lorena Doria wrote:
Grazie...l'ho installato e...si sono una principiante in windows con 
un

retaggio Mac...per tanti, tantissi anni!!


Per curiosità, come l'hai installato? Con pip o con setup.py?

-- Daniele

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


Re: [Python] Captcha

2014-04-11 Per discussione Daniele Varrazzo

On 2014-04-11 08:54, Lorena Doria wrote:

Infatti, grazie l'ho trovato...ma non ho trovato alcuna guida per
installarlo, ho scaricato il pacchetto l'ho copiato nella mia 
cartella di
python al suo posto ma nel momento in cui ne faccio la 
import...questo non

funziona...mi dice che è inesistente...
Mi sembra di essere in un ginepraio...ma capisco che sono io ad 
essere

estremamente imbranata!


Non so quale pacchetto per reCAPTCHA stai provando ad installare, che 
versione di Python sia e non so neanche se stai usando Windows o Linux: 
darti una mano così è difficile. Assumo windows.


Il modo più attuale di installare pacchetti è di usare pip: ho visto 
che non è proprio semplice installarlo su windows ma usando google ce la 
dovresti fare.


Per installare il pacchetto senza usare pip dovresti scaricarlo, 
scompattarlo ed eseguire python setup.py install da quella directory.


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


Re: [Python] Captcha

2014-04-11 Per discussione Daniele Varrazzo

On 2014-04-11 17:32, Diego Barrera wrote:

Il 11/04/2014 10:56, Daniele Varrazzo ha scritto:

Assumo windows.

..sottile e tagliente :)


Non c'era nessun sarcasmo. Immagino la OP sia una principiante, dice 
cartella invece di directory quindi immagino si tratti di un utente 
windows.


-- Daniele

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


Re: [Python] Captcha

2014-04-10 Per discussione Daniele Varrazzo

On 2014-04-10 15:02, Lorena Doria wrote:
Ciao, ho guardato  reCAPTCHA, e mi sembra un'ottima soluzione, ma il 
primo

problema che riscontro è il dominio!!
Infatti per creare la chiave devo registrare il dominio, ma per 
testarlo in

locale, che dominio uso???


Il dominio dove devi mettere quel captcha?

Una rapida googlata suggerisce che qualunque chiave funziona anche su 
localhost.


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


Re: [Python] Captcha

2014-04-09 Per discussione Daniele Varrazzo

On 2014-04-09 17:07, Lorena Doria wrote:

Ciao a tutti,
sapete indicarmi una libreria (molto , ma molto semplice) per il 
captcha

tenendo presente che io uso python 2.5??


Puoi usare reCAPTCHA, che è un servizio web, in modo che:

- non scrivi un captcha banale che ti venga craccato subito
- non hai bug
- non ti serve una libreria per gestire le immagini
- contribuisci a digitalizzare libri.

Questa è la cosa più semplice che puoi fare, 100 volte che scrivere il 
proprio captcha. Puoi googlare python recaptcha per trovare come 
interagire col servizio.



-- Daniele

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


Re: [Python] Consiglio su DB da usare in un progetto django.

2014-04-06 Per discussione Daniele Varrazzo

On 2014-04-06 20:08, Gollum1 wrote:
Presumo che in un progetto django il database sia residente sul 
server,
anche se si usa SQLite? Visto che per il mio progetto non devo 
memorizzare

i dati che vado ad elaborare, per i singoli utenti, SQLite andrebbe
benissimo, se fosse locale al computer ancora meglio... La mia 
intenzione
sarebbe di creare il un DB all'apertura della sessione, solo per 
facilitare
i calcoli, e poi distruggerlo al termine... Mentre sarebbe opportuno 
avere
un DB SQLite in sola lettura per altri dati generici usati per i 
calcoli,

comuni a tutti gli utenti.

Pensavo ai DB, invece di semplici file su testo formattati, perché 
dovrebbe
essere più semplice l'estrazione del singolo dato dal file, voi che 
ne
dite? È un modello che ha senso o mi vado a ficcare in qualche 
casino?


Tutto è possibile, ma creare e distruggere un database per sessione non 
è la cosa più comune, per non parlare del fatto che django non ti 
consente di connetterti ad un numero arbitrario di database (uno per 
sessione) ma solo ad un numero prefissato in configurazione.


Secondo me o usi file temporanei o usi un database come si deve: per le 
mezze misure non hai infrastruttura di supporto.


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


[Python] Rimpiazzare Orbited

2014-04-01 Per discussione Daniele Varrazzo

Ciao,

un mio collega ha avuto la brillante idea di togliere Orbited da un 
sistema web push che abbiamo, perchè voleva passare ai websocket. Così 
dall'avere N web server python che pushavano messaggi ad un singolo 
orbited (che non ha mai fatto pio) e i client web che li ricevevano sui 
loro canali siamo passati ad avere ogni client collegato con una 
connessione websocket persistente al server. Coincidentalmente da quel 
giorno abbiamo cominciato a incontrare mille problemi e il programma non 
scala più bene, chissà come mai...


Sto provando a insistere a reintrodurre il message broker perché sono 
convinto che ci ha parato le chiap^W spalle per anni ma lui non vuole 
recedere dai websocket. Secondo me un broker ci vuole, anche per come 
immagino il futuro di quel sistema.


Fatico a trovare un rimpiazzo drop-in di orbited su websocket: qualcosa 
a cui i client web si connettono su un canale e altri processi possono 
mandare messaggi sui canali che decidono. Sapete se esiste qualcosa del 
genere o se è necessario passare ad un server AMQP (RabbitMQ etc.)? 
Conosceta Autobahn, sapete se è promettente? Vedo che usa l'ennesimo 
nuovo protocollo di message passing, WAMP invece di Stomp... oddio ma 
quanti ne servono? Altre alternative?


Scrivo qui perchè il mio collega ha letto del supporto uWSGI ai 
websocket ma io credo che si riferisca ad avere connessioni al server, 
non un message broker a sé stante. Giusto Roberto?


Insomma, Orbited è moribondo ma era stracomodo. Sapete come 
rimpiazzarlo?


Grazie mille,

-- Daniele

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


Re: [Python] Rimpiazzare Orbited

2014-04-01 Per discussione Daniele Varrazzo

On 2014-04-01 16:39, Walter Valenti wrote:


Insomma, Orbited è moribondo ma era stracomodo. Sapete come
rimpiazzarlo?




orbited2.

gameclosure / orbited2
Next generation Orbited (putting a WebSocket in every browser.)


È in beta da 4 anni, non è in produzione. Ma grazie :)


-- Daniele

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


Re: [Python] Rimpiazzare Orbited

2014-04-01 Per discussione Daniele Varrazzo

On 2014-04-01 16:30, Giovanni Porcari wrote:


Daniele mi spiace ma non ho una risposta seria.

Però puoi mostrare il video al tuo collega

https://www.youtube.com/watch?v=fmQFRrGggLA


Ma LOL :D

-- Daniele

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


Re: [Python] Rimpiazzare Orbited

2014-04-01 Per discussione Daniele Varrazzo

On 2014-04-01 16:38, Roberto De Ioris wrote:

Ciao,

un mio collega ha avuto la brillante idea di togliere Orbited da un
sistema web push che abbiamo, perchè voleva passare ai websocket. 
Così

dall'avere N web server python che pushavano messaggi ad un singolo
orbited (che non ha mai fatto pio) e i client web che li ricevevano 
sui

loro canali siamo passati ad avere ogni client collegato con una
connessione websocket persistente al server. Coincidentalmente da 
quel
giorno abbiamo cominciato a incontrare mille problemi e il programma 
non

scala più bene, chissà come mai...

Sto provando a insistere a reintrodurre il message broker perché 
sono
convinto che ci ha parato le chiap^W spalle per anni ma lui non 
vuole
recedere dai websocket. Secondo me un broker ci vuole, anche per 
come

immagino il futuro di quel sistema.

Fatico a trovare un rimpiazzo drop-in di orbited su websocket: 
qualcosa
a cui i client web si connettono su un canale e altri processi 
possono
mandare messaggi sui canali che decidono. Sapete se esiste qualcosa 
del

genere o se è necessario passare ad un server AMQP (RabbitMQ etc.)?
Conosceta Autobahn, sapete se è promettente? Vedo che usa l'ennesimo
nuovo protocollo di message passing, WAMP invece di Stomp... oddio 
ma

quanti ne servono? Altre alternative?

Scrivo qui perchè il mio collega ha letto del supporto uWSGI ai
websocket ma io credo che si riferisca ad avere connessioni al 
server,

non un message broker a sé stante. Giusto Roberto?



gia', pero' combinarlo con redis e una coda pub/sub e' relativamente
semplice (e soprattutto rapido). Fammi pure contattare dal tuo 
collega,

magari ne uscite senza un bagno di sangue...

La logica e' che l'app WSGI instaura la sessione websocket e resta in
ascolto anche su redis, ogni volta che c'e' un messaggio sul canale
websocket questo viene girato a redis, ogni volta che c'e' un 
messaggio su
redis viene passato al websocket. E' molto efficiente, noi lo usiamo 
per i

videogiochi dove la velocita' e' essenziale.


Capisco, grazie.

Il problema di scalabilità che stiamo avendo è che i nostri nodi 
frontend fanno *tante cose* diverse, con diversi pattern di concorrenza 
(alcune richieste web che nascono e muoiono, alcuni greenlet a lunga 
durata, uno molto assetato di cpu...) Secondo me stiamo mettendo in 
crisi lo scheduler di greenlet con troppi lavori troppo eterogenei. 
Nell'ottica di suddividere i processi in oggetti più indipendenti un 
message broker come era orbited mi ci stava troppo bene (per esempio per 
mettere in un processo esterno quel greenlet assetato: potrebbe mandare 
i messaggi che genera direttamente alle pagine web passando per il 
broker e saltando il web server).


Per la cronaca, ho fatto una prova con RabbitMQ e l'adapter stomper e 
funziona estremamente bene: i client ci si connettono via websocket, 
python attraverso stomp.py. Credo che mi orienterò per questa soluzione, 
che non è uno stravolgimento strutturale per la nostra applicazione 
(almeno è quella che proverò a spingere nelle prossime discussioni).


Grazie a tutti,

-- Daniele

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


Re: [Python] OS Saturday

2014-03-26 Per discussione Daniele Varrazzo

On 2014-03-26 10:36, Carlo Miron wrote:
Il 26 marzo 2014 08:10, Gabriele Lana gabriele.l...@gmail.com ha 
scritto::



Mi sono informato meglio, ho letto un po' di roba, devo dire che con
il senno del poi parlare di OS mi va benissimo


Perche` non tagliare la testa al topo, ed usare il piu` standard
acronimo FOSS_? ;)

.. _FOSS: http://it.wikipedia.org/wiki/FOSS



Anche. Oppure, perchè non parlare in italiano e dire Software Libero? 
(che comparo con Sorgenti Aperti per stabilire l'inferiorità semantica 
del secondo, a parte essere nell'ambiente da prima che la Apple lo 
inaridisse).



-- Daniele

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


Re: [Python] OS Saturday

2014-03-26 Per discussione Daniele Varrazzo

On 2014-03-26 13:00, Carlo Miron wrote:
Il 26 marzo 2014 13:01, Daniele Varrazzo p...@develer.com ha 
scritto::



On 2014-03-26 10:36, Carlo Miron wrote:


Il 26 marzo 2014 08:10, Gabriele Lana gabriele.l...@gmail.com ha
scritto::

Mi sono informato meglio, ho letto un po' di roba, devo dire che 
con

il senno del poi parlare di OS mi va benissimo


Perche` non tagliare la testa al topo, ed usare il piu` standard
acronimo FOSS_? ;)

.. _FOSS: http://it.wikipedia.org/wiki/FOSS


Anche. Oppure, perchè non parlare in italiano e dire Software 
Libero? (che
comparo con Sorgenti Aperti per stabilire l'inferiorità semantica 
del
secondo, a parte essere nell'ambiente da prima che la Apple lo 
inaridisse).


Perche` Software Libero, nell'accezione GNU, non rappresenta la
totalita` del software a sorgente aperto?


Open Source non garantisce la libertà di modifica e redistribuzione, 
per esempio.



-- Daniele

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


Re: [Python] OS Saturday

2014-03-26 Per discussione Daniele Varrazzo

On 2014-03-26 13:32, Carlo Miron wrote:
Il 26 marzo 2014 13:01, Daniele Varrazzo p...@develer.com ha 
scritto::



On 2014-03-26 10:36, Carlo Miron wrote:


Il 26 marzo 2014 08:10, Gabriele Lana gabriele.l...@gmail.com ha
scritto::

Mi sono informato meglio, ho letto un po' di roba, devo dire che 
con

il senno del poi parlare di OS mi va benissimo


Perche` non tagliare la testa al topo, ed usare il piu` standard
acronimo FOSS_? ;)

.. _FOSS: http://it.wikipedia.org/wiki/FOSS


Anche. Oppure, perchè non parlare in italiano e dire Software 
Libero? (che
comparo con Sorgenti Aperti per stabilire l'inferiorità semantica 
del
secondo, a parte essere nell'ambiente da prima che la Apple lo 
inaridisse).


Forse perche` Software Libero, nell'accezione GNU, non rappresenta la
totalita` del software a sorgente aperto?

(la prosa precedente era ambigua, mi fanno notare dalla regia)


Gabriele ha dichiarato di non interessarsi dell'aspetto politico della 
faccenda: la sfumatura ovviamente è politica. Come dichiarato da RMS 
[1], FOSS/FLOSS sono termini adatti per essere neutrali, se uno vuole 
essere neutrale invece che interessarsi alla libertà. Open source is a 
development methodology; free software is a social movement.


Poi non è che siano tutti d'accordo: Eric Raymond considera Open Source 
un termine superiore, ma soprattutto per l'ambiguità di Free che può 
essere interpretato come Gratis; ambiguità che in Software Libero non 
esiste [2]. Anche perché fa cacare sotto gli avvocati, ma questo 
personalmente non mi sembra un male.


Secondo me il Software Libero porta ad un'evoluzione sociale; i 
Sorgenti Aperti portano ad entità che attingono da una riserva gratuita 
di ricerca, sperimentazione ed evoluzione e rendono niente o poco in 
cambio. Questo ovviamente si intesse con i miei ideali politici e 
sociali che chiunque è libero di non condividere (come è di moda) come 
anche di non interessarsi minimamente alla faccenda. Mi suona solo 
strano il termine OS proprio perché chi ha deciso di non combattere 
questa battaglia oggi tende a scegliere FOSS.


[1] https://www.gnu.org/philosophy/open-source-misses-the-point.html
[2] http://www.catb.org/esr/open-source.html


-- Daniele

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


Re: [Python] python 3,3 e sqlite

2014-03-25 Per discussione Daniele Varrazzo

On 2014-03-25 15:13, Filippo Dal Bosco - wrote:

il campo  symbol è text

Perchè questo funziona

c.execute('insert into portfolio (symbol) values (?)', ('x'))

e questo NON funziona ( dice gli passo troppi valori)
c.execute('insert into portfolio (symbol) values (?)', ('xx'))


Probabilmente perchè il modulo sqlite si aspetta una sequenza come 
parametri. ('xx') non è una tupla, ma una stringa tra parentesi, che è 
una espressione uguale ad una stringa e basta. Una stringa *È* una 
sequenza: la tua è di due elementi (due caratteri). Quindi gli sembra 
che gli stai passando due parametri mentre la query ha solo un 
segnaposto. bum.


Puoi usare ('xx',) che è il modo di creare una tupla di un solo 
elemento, oppure ['xx'] che è una lista di un solo elemento.


Sei in buona compagnia: è l'errore più frequente commesso usando 
database da Python.



-- Daniele

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


Re: [Python] OS Saturday

2014-03-25 Per discussione Daniele Varrazzo

On 2014-03-25 17:29, Marco Beri wrote:
Vi giro con piacere la mail che Gabriele Lana (in cc) mi ha chiesto 
di

girare alla community italiana di Python.

Ciao.
Marco.

-- Forwarded message --
From: Gabriele Lana gabriele.l...@gmail.com
Date: 2014-03-25 11:20 GMT+01:00


Amici di Python ma anche dell'OS,


Parla di OS anziché di FS con un proposito politico o solo per farsi 
dare gli zerchinetti dietro le orecchie da RMS?


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


Re: [Python] Non blocking http server e integrazione con database relazionali

2014-03-15 Per discussione Daniele Varrazzo

On 2014-03-15 05:54, Nicola Larosa wrote:

Daniele Varrazzo wrote:
Purtroppo tulip non si integra bene con il supporto green di 
psycopg,

perché è basato su yield


Chissà come mai Guido ci tiene tanto a questa seccatura dello 
yield...




con tutti gli yeldini al posto loro.


E non solo lui, a quanto pare. Ecco ben spiegata la prospettiva di
noi comuni mortali che bizzarramente ci teniamo così tanto ad avere
tutti gli yeldini al posto loro.


Quello di essere espliciti è senz'altro un modello superiore. Il modo 
green è solo un truccazzo per avere interfacce bloccanti in un ambiente 
asincrono, il che ci ha permesso di arrivare al 2014. Ovvero: vuoi usare 
django in maniera asincrona? Prova a farlo con yield... Vuoi usare 
SQLAlchemy? Uhmm, ritenta, sarai più fortunato. Ho conosciuto comuni 
mortali che avevano bisogno di queste cose (twisted tendevano a usarlo 
i semidei e altri impiegati olimpici). Il futuro è quello? Non c'è 
problema per me. Ma `questo http://python.org/dev/peps/pep-0249/`__ va 
riscritto, come tutti i programmi che ci sono progettati ed implementati 
sopra, e non so se tu ci avevi pensato. La mia non era una nota polemica 
come hai letto tu: le interfacce sono state rotte: vanno riprogettate e 
i programmi dovranno essere riscritti; questo è un dato di fatto.




Unyielding - Deciphering Glyph
https://glyph.twistedmatrix.com/2014/02/unyielding.html

Che è poi il motivo per cui ho usato Twisted per anni, apprezzo
Tornado (e Go), e non mi vedrete tanto presto a usare gevent, 
eventlet

e compagnia, per non dire mai.


È fico essere duri e puri. Io invece mi sono trovato nella posizione di 
scrivere software che altri devono usare: a volte nella maniera in cui 
lo userei anche io, a volte no. Sono sicuro che il supporto a librerie 
di coroutine abbia aiutato più di qualche persona, e questo mi fa 
piacere nonostante ci siano sempre gli odiatori di professione 
(gironzolare su twitter per cercare feedback sul proprio lavoro è come 
andare sulle montagne russe).



-- Daniele

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


Re: [Python] Non blocking http server e integrazione con database relazionali

2014-03-15 Per discussione Daniele Varrazzo

On 2014-03-15 18:08, Roberto De Ioris wrote:


Oggi ho buttato giu' questo:


http://uwsgi-docs.readthedocs.org/en/latest/articles/OffloadingWebsocketsAndSSE.html


Grazie, me lo rileggo domani con un tasso di sangue nell'alcol più 
alto. Ma, domanda veloce:



This is the whole point of this article: do not use the Django ORM in 
your gevent apps
unless you know what you are doing !!! (read, you have a django 
database adapter that

supports gevent and does not sucks compared to the standard ones...)


Con questo dici:

1. impossibile usare django+gevent+psycopg2 in maniera realmente non 
blocking
2. gevent+psycopg2 funzionerebbe se avesse un wrapper django 
diverso/migliore

3. django+gevent+psycopg2 funzionano, altri driver/database no
4. vai a letto piro, non c'hai capito niente ed è tardi

Grazie ancora :)

-- Daniele

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


Re: [Python] Non blocking http server e integrazione con database relazionali

2014-03-14 Per discussione Daniele Varrazzo

On 2014-03-14 13:58, Roberto De Ioris wrote:
Il 14 marzo 2014 13:35, Balan Victor balan.vict...@gmail.com ha 
scritto:


Il giorno 14 marzo 2014 13:17, Giampaolo Rodola' 
g.rod...@gmail.com ha

scritto:

2014-03-14 8:26 GMT+01:00 Roberto De Ioris robe...@unbit.it:

Detto questo, ci sono comunque diversi moduli
async-friendly/tornado-friendly ma sono spesso progettini, a 
volte

sviluppati senza l'attenzione necessaria ad un modulo db-adapter
(vedere
il lavoro titanico che c'e' dietro a psycopg2, che per la cronaca 
puo'

essere adattato al non-blocking)


Mi interessa. In che modo?


penso si riferisse a https://github.com/FSX/momoko


Io invece credo parlasse di

http://initd.org/psycopg/docs/advanced.html#support-for-coroutine-libraries


esatto, proprio questo


Tra l'altro un mio collega mi ha portato all'attenzione un progetto di 
integrazione tra psycopg e tulip che però non è un gran che. Purtroppo 
tulip non si integra bene con il supporto green di psycopg, perché è 
basato su yield, quindi invece di una wait_callback come per 
eventlet/gevent/uWsgi ci vorrà un wrapper che utilizzi psycopg in 
maniera async (non green) ed offra un'interfaccia simil-dbapi ma non 
bloccante e con tutti gli yeldini al posto loro.


-- Daniele

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


Re: [Python] python su win8

2014-03-13 Per discussione Daniele Varrazzo

On 2014-03-13 08:40, Giorgio wrote:

Ciao a tutti,
ho cambiato laptop e su questo c'è, manco a
dirlo, win 8. Ho installato Python e tutte le applicazioni che avevo
sviluppato, purtroppo la console di Python si avvia ma nessuna
applicazione parte; il fatto è che non riesco a vedere nessun
messaggio di errore, si apre una console e  molto rapidamente si
chiude.


Lancia i programmi da linea di comando anziché da doppio click: 
dovresti poter vedere cosa dice.




Può essere win 8 oppure, molto facilmente, ho sbagliato qualcosa io?
Ho installato Python 2.6 perchè tutto quello che ho fatto era scritto
con questa versione. Può essere per questo?
Se passassi alla versione 3xx dovrei riscrivete tutto vero?


Sì: non ne vale la pena: il problema del portatile non c'entra niente 
con Py2/3: ti troveresti semplicemente con due problemi.



-- Daniele

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


Re: [Python] R: SQLITE Libri

2014-03-12 Per discussione Daniele Varrazzo

On 2014-03-12 11:59, Attilio Menegon wrote:


Ho capito come si definisce la chiave primaria di una tabella,
viceversa non mi è ben chiaro come funziona l'indice, io abitualmente
in access quando ho bisogno di  una chiave primaria univoca, la
dichiaro come contatore univoco senza duplicati possibili.


La chiave primaria è un dato obbligatorio e distinto per ogni record, 
che serve a rendere ogni record individuabile, quindi a dare un modo per 
referenziarlo (in una query o da un'altra tabella). Un contatore è un 
modo tipico di realizzare una chiave primaria: quando non è chiaro come 
individuare univocamente ogni record puoi aggiungere un contatore.


L'indice è solo una struttura per ottimizzare l'accesso: puoi avere 
indici su diversi campi. Grazie ad un indice puoi trovare un record in 
un tempo o(log(n)) invece che o(n) (la differenza tra cercare un numero 
di telefono in una rubrica che ha i nomi in ordine alfabetico comparata 
ad una rubrica che ha i nomi in ordine casuale). Se hai una tabella 
(nome, numero di telefono) puoi avere un indice sul nome, che ti 
permette di trovare velocemente il numero di telefono, ma se vuoi puoi 
creare anche un indice sul numero di telefono, che ti permetterebbe di 
rispondere velocemente alla domanda di chi è questo numero?, senza 
scorrere tutta la tabella.


Visto che la chiave primaria è un modo tipico di accedere ad un record 
nella tabella è tipico che ci venga definito un indice sopra: in questo 
modo cercare record per chiave primaria è efficiente. Access lo crea di 
default, come anche Postgres e penso molti altri database.


Quindi, in quello che access ti propone (contatore+chiave 
primaria+indice) ci sono tre concetti relativamente indipendenti ma che 
si aiutano a vicenZa: una chiave primaria ti permette di trovare un 
record in maniera univoca, un indice di trovarlo in maniera efficiente, 
un contatore di implementare una chiave primaria in mancanza di meglio. 
Puoi anche avere chiavi primarie che non siano dei contatori (per 
esempio in una tabella di valute il codice internazionale EUR, GBP ecc. 
è ottimo e non serve un contatore). Allo stesso modo, per velocizzare 
certe query, puoi avere indici su qualunque campo, anche uno che non sia 
univoco o completo (due vincoli che sono necessari perché un campo possa 
essere usato come chiave primaria).


-- Daniele

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


Re: [Python] Escape stringa con char speciali

2014-03-12 Per discussione Daniele Varrazzo

On 2014-03-12 15:23, Fabrizio Soppelsa wrote:

Ciao scusate la domanda idiota ma qualcosa non mi torna.
Il mio obiettivo e' eseguire un comando di sistema concatenandolo a 
una

stringa PASSWORD che in questo caso contiene caratteri strani ma il
comando, che esegue una query MySQL, per qualche motivo si spezza.
Non riesco a trovare un metodo di escape che mi consenta di eseguirlo
senza errori, ho provato anche con la stringa raw.

def statistics():
# ...
PASSWORD=r'passwo$rd'

try:
   #...
   s = commands.getoutput('mysql ' + DATABASE + ' -uroot 
-p'

+ PASSWORD + ' -e '+ QUERY + '')

Ogni suggerimento ben accetto :)


Usa il modulo subprocess, con shell=false e passando gli argomenti in 
una lista anziché concatenarli in una stringa.


Come hai fatto tu basta ci sia uno spazio nella password e hai un 
problema. Se invochi una shell un  metterebbe il processo in 
background, un # verrebbe preso per commento ecc.



-- Daniele

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


Re: [Python] OT: Corpo calloso

2014-03-07 Per discussione Daniele Varrazzo

On 2014-03-07 11:02, Marco Beri wrote:

2014-03-07 12:00 GMT+01:00 Marco De Paoli depao...@gmail.com:


Il 07 marzo 2014 11:57, Marco Beri marcob...@gmail.com ha scritto:

 Ne ho a casa di simili. Ho qualcosa anche su dropbox ma sono 
tentativi

 (oramai abortiti) di dipingere a olio:
 https://dl.dropboxusercontent.com/u/935402/quadri/Alessandro.jpg
 https://dl.dropboxusercontent.com/u/935402/quadri/Federico.jpg
 https://dl.dropboxusercontent.com/u/935402/quadri/Faro.jpg
 
https://dl.dropboxusercontent.com/u/935402/quadri/Faro-originale.jpg


molto belli!


Davvero, mica brutti!


Ti garantisco che ero un vero cane. Ma del tipo che facevo le facce 
tonde

con la riga sotto alla xkcd.
Quel libro, se uno vuole imparare a disegnare, è fantastico.


Risvegli http://www.imdb.com/title/tt0099077/

... anche se dopo aver letto il libro il film è stato una delusione



E quando mai non è così? :-)


In Shining :) (e solo in quello)


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


Re: [Python] OT: Corpo calloso

2014-03-07 Per discussione Daniele Varrazzo

On 2014-03-07 11:11, Marco Beri wrote:

2014-03-07 12:06 GMT+01:00 Daniele Varrazzo p...@develer.com:


On 2014-03-07 11:02, Marco Beri wrote:


E quando mai non è così? :-)



In Shining :) (e solo in quello)


Hai letto prima il libro?


Mi stai chiedendo archeologia, avrò avuto 14 anni quando li ho 
letti/visti. Forse ho visto prima il film per trovare il romanzo 
deludente, invece di aver letto prima il romanzo per trovare il film 
clamoroso. Di King i miei avevano parecchi libri, e me lo ricordo 
deludente anche rispetto a quelli (It, The Stand...)



Per esempio Non è un paese per vecchi, Il silenzio degli 
innocenti,

Odissea 2001 mi sono piaciuti moltissimo letti dopo aver visto i
rispettivi film. Ma sono sicuro che se li avessi letti prima, sarei 
rimasto

assai deluso al cinema.


Dei primi due non ho letto i libri. 2001 è così diverso che è difficile 
fare paragoni, ma aver letto il libro mi ha fatto capire meglio il film. 
Tra l'altro, tanto per continuare in OT serendipico, butto lì che 
2010-film non è un megaipercapolavoro, ma ha di bello che riprende la 
continuity del libro (tanto per dire che 2001-film è un lavoro più di 
Kubrik che di Clarke) e forse è l'esempio di fantascienza più 
piacevolmente realistico che conosca, dove anche la conservazione del 
momento di inerzia ha la sua parte nella storia. E 2010-libro non è un 
megaipercapolavoro, ma ha un finale che non ci si può credere (e non 
spoilero)



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


Re: [Python] programma serio Free per editare e compilare python

2014-03-07 Per discussione Daniele Varrazzo

On 2014-03-07 15:47, Luciano Trespidi wrote:


scusa ma cosa intendi dire con la parola buon senso se io non riesco
a capire in cosa sto sbagliando ora .

sai forse perché sbaglio perché io uso rispondi ad ogni messaggio e 
questo forse inserisce delle parole superflue , penso che sia questo 
il motivo non credi ?


Questo è come appare agli altri un messaggio scritto per bene: 
http://i.imgur.com/JpSMQpv.png

Questo è come appaiono i tuoi: http://i.imgur.com/WWNdNfa.png

Io onestamente non so neanche cosa hai scritto. Quindi non prendertela 
se la gente comincia a considerarti solo un rumore di fondo.


-- Daniele

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


Re: [Python] info su db

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 09:59, Marco Mariani wrote:

2014-03-06 10:45 GMT+01:00 Simone Federici s.feder...@gmail.com:

Ps. in telecom cerano anagrafiche intere con codice fiscale errato.

chiaramente era chiave primaria.



Ahahah, che cretini!



http://developers.slashdot.org/story/14/02/11/0015242/surrogate-database-key-not-bitcoin-protocol-flaw-to-blame-for-mt-gox-problems


Marco, sono tutti bravi col senno di poi. Uno punta a conoscere gli 
errori per evitarli, non per deridere chi li ha fatti.



-- Daniele

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


Re: [Python] info su db

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 11:17, enrico franchi wrote:

2014-03-05 18:46 GMT+00:00 Daniele Varrazzo p...@develer.com:


Questa guerra di religione è probabilmente più vecchia sia di Emacs 
che di

Vi :)



Ah, direi di no! I db relazionali sono relativamente recenti, almeno
rispetto a vi.


vi è del 76, I db relazionali sono fatti originare da un articolo di 
Codd del 1970 (fonte: wikipedia).



Ma il resto no: la tupla (id tag, id lettore, timestamp) non è 
pratica
come chiave di una Lettura. Hai già bisogno di 6 campi per linkare 
due
letture ad una Presenza, in più un timestamp è (praticamente) un 
valore

reale, non discreto, e si presta male come identificativo (magari in
postgres ha un numero di usec intero, poi passa attraverso python 
che lo

converte in virgola mobile, fai una seconda query e ci scappa un
arrotondamento di un milionesimo di secondo che te lo fa mancare).



Il timestamp da solo, si. E' ovviamente non univoco (posso ampiamente 
avere

due accessi allo stesso momento).
Comunque se hai un db decente, puoi usare i tipi di dato appropriati.


Postgres è un db decente: così tanto che potrebbe definire un timestamp 
con una precisione superiore a quella che può gestire un applicativo. 
Stai facendo un discorso da manuale (neanche tutti), io sto parlando in 
termini pratici. La tupla (lettore, tag, timestamp) è univoca, certo 
(nota: tag, non utente). È una buona chiave primaria? Tu hai letto dei 
libri che dicono di sì. Io ho letto dei libri che dicono di sì e dei 
libri che dicono di no. Ho scritto dei programmi ed ho la mia opinione, 
che è no, per la componente casuale della precisione con cui ogni 
sistema definisce i timestamp, perchè ogni url o form di ogni pagina web 
che devo generare sarà più complessa, e perchè ogni join è un dito al 
cubo (essendo tre i campi). E questo senza menzionare ORM non dico 
scritti coi piedi ma semplicemente non overingegnerizzati. Che magari 
non uso ora, ma in futuro chissà, e le basi di dati sono fatte per 
*sopravvivere* al codice: il tuo programma fra 5 anni magari non lo 
userà nessuno ma i dati che ha generato saranno un asset importante e 
altri programmi, che non sai con che tecnologia verranno scritti, li 
useranno.



E infatti io non parlavo di codice fiscale. Parlavo di employee ID, 
che per

una serie di cose e' qualcosa che e' semanticamente significativo nel
dominio applicativo.
Non e' solo un artefatto del database...


L'employee id è un mito che esiste solo negli esempi con cui si 
scrivono gli articoli di database su come si fanno i join, non esiste 
nella realtà. Non ho lavorato in nessuna azienda che avesse un 
identificativo decente per tutti gli impiegati. Anche gli irregolari che 
fanno pulizia di tanto in tanto, anche l'amante dell'amministratore 
delegato che passa alla fine della riunione del consiglio di 
amministrazione, hanno un badge. La cosa più simile all'employee id è 
l'id sequenziale che il database gli ha assegnato quando è stato immesso 
nel sistema la prima volta.



Il codice fiscale e' ovviamente una cattiva chiave (specie se non 
supponi

di avere a che fare solo con italiani o residenti in italia).


Com'è che è così evidente in una ML amatoriale ma non per gli ingegneri 
di Telecom? :)



Allo stesso modo sono favorevole alle chiavi multiple, ma quando 
siano
pratiche: in una tabella di unione molti-a-molti non ho problemi ad 
usare
la coppia di pkey come pkey, ma non butto il sangue a cercarne una 
quando

non è ovvia.



Ma in questo caso una chiave e' ovvia. In un singolo istante, per un
singolo lettore, puoi avere solo una lettura. Se pensi di non avere 
letture
abbastanza granulari, puoi avere al limite anche la persona che ha 
badgato.



Chiavi naturali/surrogate e chiavi singole/multiple sono battaglie 
già
combattute e di cui si sa che non c'è vincitore. Che ne dici di una 
bella

partita a scacchi? :)



Non e' questione di vincere.


(peccato, citazione mancata :)



E non ci siamo solo noi. Ci sono anche quelli
che iniziano: per queste persone e' forse una buona cosa sapere che 
se e'
vero che MySQL supporta(va) il modello relazionale in modo 
tragicomico,
questo non vuole dire che bisogna pensare il db con uno schema errato 
per

forza: si puo' usare una tecnologia che lavora bene.


Vabbè passiamo a bashare la cosa che tutti amano bashare (ancora, 
spesso comicamente senza sapere quello che dicono e pensando di essere 
depositari di chissà che conoscenza). Ora ci sarà anche il coretto di 
tutti gli iscritti che la sanno lunga e +1 e haha che cretini... 
MySql non l'ha nominato nessuno, non stiamo parlando di database buoni o 
cattivi qui. Io uso Postgres e una chiave primaria tripla con dentro un 
valore reale la considero un'idea abbastanza cattiva da meritare una 
chiave surrogata, sebbene il database sia perfettamente in grado di 
gestirla. Tu no? Ok, ma sono opinioni, non oro colato: quello che pensi 
non è giusto in assoluto. Per te ha dei vantaggi. Che peraltro non hai 
ancora elencato: hai solo

Re: [Python] info su db

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 12:28, Luciano Trespidi wrote:

scusate posso intervenire ?


Certo, ma ti prego, scrivi la tua risposta sotto, non sopra.

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


[Python] programma serio Free per editare e compilare python

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 12:35, Luciano Trespidi wrote:


sono un neofita e volevo sapere se esiste un programma serio Free
per editare e compilare python


Ah :)

Python non si compila, si esegue e basta. Come editor, immagino tu usi 
Windows: ci sono probabilmente degli ambienti integrati che fanno fare 
tutto, ma per iniziare, se non vuoi perderti in feature che non sai 
neanche cosa siano, parti da un qualunque editor di buon livello, tipo 
Edit Pad Pro, Notepad++. Io quando usavo Windows usavo Scintilla. Forse 
qualcun altro ha idee più aggiornate: sono passati anni da allora.


Sei il benvenuto in questa Mailing List, ma la prossima volta, se devi 
iniziare un nuovo argomento, scrivi un nuovo messaggio, non rispondere 
ad un messaggio che era su un tema diverso :)



-- Daniele

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


Re: [Python] programma serio Free per editare e compilare python

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 12:52, Carlos Catucci wrote:


Ok, dite forse e' il caso che prepariamo una FAQ per i neofiti?
Io mi posso prendere l'impegno ma poi vorrei che qualche guru la
correggesse prima di metterla online.
Poca roba, cos'e' il linguaggio, editor e simili, lista libri per 
iniziare
(rigorosamente basica, solo libri semplici per capire come muoversi, 
lista
che sarebbe carino fosse approvata all'unanimita' in lista) e poco 
altro.


Hai voglia, sarebbe bello. Senti anche Daniele Palmese che mi sembra 
quello più attivo col sito ultimamente (e lo ringrazio di Quore per 
Cuesto).



-- Daniele

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


Re: [Python] programma serio Free per editare e compilare python

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 21:07, Luciano Trespidi wrote:


scusa diego ma io ho letto il link ho capito qualcosa come il nome
del mittente il simbolo da anteporre  alla frase o il doppio
simbolo  quando ti riferisci alle due precedenti ed in fine
mettere in fondo la risposta bottom quote .
mi sembra di aver capito se sbaglio correggimi ma non riesco a capire
cosa intendi quando sbaglio .


Scusa, ma che programma usi per la posta elettronica?

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


Re: [Python] programma serio Free per editare e compilare python

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 21:20, Luciano Trespidi wrote:


Il giorno 06/mar/2014, alle ore 22:11, Daniele Varrazzo
p...@develer.com ha scritto:



Scusa, ma che programma usi per la posta elettronica?



sto utilizzando il programma di posta  dell'Iphone.
luciano


Forse qualcuno ti può aiutare a configurarlo meglio :) io no, non uso.


-- Daniele

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


Re: [Python] info su db

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 20:18, Diego Barrera wrote:



http://docmanhattan.blogspot.it/2013/04/20-cose-che-forse-non-sapevate-su-wargames-giochi-di-guerra.html


Bell'articolo, grazie :)

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


Re: [Python] programma serio Free per editare e compilare python

2014-03-06 Per discussione Daniele Varrazzo

On 2014-03-06 21:31, Luciano Trespidi wrote:

Il giorno 06/mar/2014, alle ore 22:21, Daniele Varrazzo
p...@develer.com ha scritto:

On 2014-03-06 21:20, Luciano Trespidi wrote:


Il giorno 06/mar/2014, alle ore 22:11, Daniele Varrazzo
p...@develer.com ha scritto:



Scusa, ma che programma usi per la posta elettronica?



sto utilizzando il programma di posta  dell'Iphone.
luciano


Forse qualcuno ti può aiutare a configurarlo meglio :) io no, non so

io ho solo inserito la firma poi per quello che concerne la posta
penso che ci sia la possibilità di configurare il server di posta e
quelli SECONDARI altri parametri  non li ho visti .
Ora sto sbagliando ancora ?


Beh, il client non aggiunge la quotazione di suo, aggiunge la tua 
intestazione con numero di tel. eccetera e lascia la firma della mailing 
list in fondo. Un buon client queste cose le fa per te. Ma ora ho già 
visto che non ci sono più header e footer di troppo, non c'è più 
l'attachment html... cerca di capire come fargli aggiungere i  al 
messaggio a cui rispondi e sei già meglio di molti che sono in questa ML 
da anni e non vogliono imparare :)


-- Daniele


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


Re: [Python] info su db

2014-03-05 Per discussione Daniele Varrazzo

On 2014-03-05 11:16, Perini Matteo wrote:

Ciao a tutti,
dopo un po' di stallo riprendo la questione db con nuove domande.
Prescindendo dal tipo di db scelto

Dovrei usare il db per immagazzinare tutte le info degli utenti, e
fin qui non ci sono problemi.
Ad ogni utente è assegnato un codice (ID) contenuto in una tessera
con chip RFID.
Ad ogni ingresso/uscita gli utenti devono passare la tessera su un
lettore e in quel momento la data e l'ora devono essere immagazzinate
da qualche parte nel db.

Forse è una domanda stupida ma come è meglio creare la struttura
della tabella per ottenere lo scopo?
Ad es:

ID | Nome | Cognome | Data e Ora | segni particolari | Ecc..

e ogni volta che viene strisciata la tessera vado a fare un append
al campo Data e Ora dell'utente?

Può essere corretto?

Meglio separare ingresso e uscita?
tipo cosi:

ID | Nome | Cognome | Data e Ora Ingresso | Data e Ora uscita | E'
dentro? | segni particolari | Ecc..


Dovresti studiare qualcosa di molto elementare sui database: non puoi 
replicare informazioni su nome e cognome ad ogni strisciata, altrimenti 
è un log non relazionale, tanto vale tu lo scriva in un file. Le 
informazioni sugli utenti e le strisciate devono essere in due tabelle 
diverse.


Separare nome è cognome è un'idea regolare, ma un po' limitata (ho 
sempre l'esempio del mio collega che non ha il cognome). Avere sia data 
ingresso che data uscita nello stesso record è giustissima: se un record 
rappresenta un periodo devono essere riportati sia inizio che fine, 
usare il record di prima come inizio porta a complicazioni terribili. 
L'informazione è dentro può essere dedotta dal fatto che una presenza 
abbia la data uscita nulla.


Peraltro un utente non è collegato ad una lettura: un tag lo è, quindi 
secondo me dovresti avere come minimo:


Utente: id, nome, cognome, indirizzo ecc..
Tag: id (del db, forse non necessario), identificativo (quello che il 
lettore legge), emesso il, ritirato il, motivo del ritiro ecc.
Utente per tag: quale utente, quale tag, da quando l'ha avuto, fino a 
quando l'ha avuto.

Lettura: id, quale tag, quale lettore, a che ora.
Presenza: id lettura in, id lettura out.
Lettore: id, ...tutte le informazioni che servono

Nota che una lettura è un evento imprescindibile: quella cosa è 
successa. Una presenza è una policy: mette in relazione due letture 
nel caso più normale ma potrebbero succedere cose strane: tipo uno che 
entra ed esce in modo imprevisto (in barella? o semplicemente il lettore 
era rotto?) per cui mi sembra giusto separare le Letture (da registrare) 
dalle Presenze (da ricostruire). Potresti anche avere quello che entra, 
passa il tag a quello dietro e quello entra anche lui: è vietato da una 
policy, non dalla fisica.



-- Daniele

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


Re: [Python] info su db

2014-03-05 Per discussione Daniele Varrazzo

On 2014-03-05 17:05, enrico franchi wrote:

2014-03-05 16:21 GMT+00:00 Daniele Varrazzo p...@develer.com:



Utente: id, nome, cognome, indirizzo ecc..
Tag: id (del db, forse non necessario), identificativo (quello che il
lettore legge), emesso il, ritirato il, motivo del ritiro ecc.
Utente per tag: quale utente, quale tag, da quando l'ha avuto, fino a
quando l'ha avuto.
Lettura: id, quale tag, quale lettore, a che ora.
Presenza: id lettura in, id lettura out.
Lettore: id, ...tutte le informazioni che servono

Io andrei piano con tutti questi id. Quando c'e' un ID naturale, 
niente da

dire (e.g., employee id).
Pero' mettere gli ID per non usare chiavi primarie vere, non mi 
piace
tanto. Tipicamente un evento di lettura e' verosimilmente 
identificato
univocamente da utente, ora, verosimilmente quale lettore lo ha 
fatto.


Questa guerra di religione è probabilmente più vecchia sia di Emacs che 
di Vi :)


La penso come te: se vedi nei miei esempi ho dato un forse a mettere 
l'id su un tag. Non conosco la tecnologia, ma probabilmente 
l'identificativo pubblico è sufficiente.


Ma il resto no: la tupla (id tag, id lettore, timestamp) non è pratica 
come chiave di una Lettura. Hai già bisogno di 6 campi per linkare due 
letture ad una Presenza, in più un timestamp è (praticamente) un valore 
reale, non discreto, e si presta male come identificativo (magari in 
postgres ha un numero di usec intero, poi passa attraverso python che lo 
converte in virgola mobile, fai una seconda query e ci scappa un 
arrotondamento di un milionesimo di secondo che te lo fa mancare).


Sono favorevoli alle chiavi naturali, ma quando siano *veramente* 
univoche. Il che è più raro di quello che sembra. Una targa non 
identifica abbastanza bene un'auto (come feci in uno dei primi programmi 
che scrissi, e i venditori si sovrascrivevano a vicenda le auto da 
rendere nei preventivi, perché quando il cliente non ricordava a memoria 
la targa scrivevano tutti NON...). Non sono neanche univoche, come 
sanno quelli con targa CD ... .. che beccano le multe al posto di 
quelli del Corpo Diplomatico (che sono uguali ma scritte in blu...). Un 
codice fiscale non identifica abbastanza bene una persona: puoi non 
conoscerlo, può non averlo... Allo stesso modo sono favorevole alle 
chiavi multiple, ma quando siano pratiche: in una tabella di unione 
molti-a-molti non ho problemi ad usare la coppia di pkey come pkey, ma 
non butto il sangue a cercarne una quando non è ovvia.


Chiavi naturali/surrogate e chiavi singole/multiple sono battaglie già 
combattute e di cui si sa che non c'è vincitore. Che ne dici di una 
bella partita a scacchi? :)



-- Daniele

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


Re: [Python] Formattare un file di stringhe in XML

2014-02-24 Per discussione Daniele Varrazzo

On 2014-02-24 12:25, Dante Loi wrote:
Salve devo scrivere un piccolo script che formati, dei file di 
risorse nel

formato XML android.

input file:

File = File
New = Nuovo disegno


[...]

Il problema e che il valore della stringa, può contenere degli 
spazzi,

quindi non posso semplicemente splitarla. Dovrei estrarre tutta la
sottostringa che segue  = .

Avete qualche consiglio sulle funzioni che potrei usare???


Per quello che hai chiesto puoi usare split con il secondo parametro, 
che dice quanti split vuoi al massimo. Splittando su = ti ritrovi con 
degli spazi prima e dopo i pezzi, che puoi eliminare con strip(). È più 
robusto che splittare sugli spazi bianchi, perché se per sbaglio ne 
metti di consecutivi le cose non ti torneranno.


In [1]: s = SaveName = Salva con = nome # funziona anche se c'è 
un = nel valore


In [2]: s.split(=, 1)
Out[2]: ['SaveName ', ' Salva con = nome']

In [3]: name, value = [ x.strip() for x in s.split(=, 1) ]

In [4]: name, value
Out[4]: ('SaveName', 'Salva con = nome')

La cosa brutta è come generi l'xml: se le stringhe contengono  '   
ottieni un file non valido. Dovresti usare qualcosa di più robusto per 
generare xml, come ElementTree 
(http://docs.python.org/2/library/xml.etree.elementtree.html).


-- Daniele

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


  1   2   3   4   5   6   >