Re: [Python] Richiesta chiarimento per calcoli con numeri decimali
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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)
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)
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)
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
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]
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
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
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
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
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
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
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
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
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
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
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.
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 ?
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?
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?
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
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
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
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
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?
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?
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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