[Python] [OT] Braille. Era: Re: Gioco OldMaid, metodo StampaMani().
Da: Marco Beri marcob...@gmail.com 2013/3/30 Gabriel Batttaglia iz4...@libero.it Ciao Marco, domanda molto intelligente. No, purtroppo tutta la parte testuale va irrimediabilmente persa, e infatti non riesco a seguire al 100% la lezione. Devo accontentarmi dell'audio, che comunque, date le mie conoscenze scarse, è già parecchio. Purtroppo, non esiste un software così potente da poter rande rizzare ciò che compare in un video., o almeno, io non ne conosco nessuno. In effetti io stavo pensando a quei renderizzatori che trasformano un video in ascii ma non c'entrano nulla in questo caso. Non sapevo nemmeno esistessero... Se ci fosse un sistema che trasformasse ogni frame in bianco e nero, lo riducesse, che so, a una mappa di 50 x 50 pixel e, infine, per ogni pixel nero alzasse di un millimetro il corrispondente pirolino di una mappa braille dinamica 50 x 50, magari riducendo la frequenza a pochi frame al secondo, dici che col tatto riusciresti a interpretare in qualche modo il video? Oppure sarebbe troppo complesso e/o troppo veloce? L'idea è certamente affascinante ma andrebbe modificata. Partiamo col dire che una periferica del genere non credo esista, almeno io non ne ho mai vista una; poi, 50 * 50 sarebbe una risoluzione troppo bassa, riusciresti ad inquadrare porzioni troppo ridotte della videata e i caratteri avrebbero un effettosgranato, si dice così? Troppo elevato per essere riconosciuti. Penso servivrebbe una matrice di aghi, almeno di 320 * 200, con un refreshing molto basso e la possibilità di fermare l'immagine: l'esplorazione tattile risulta infatti estremamente lenta se paragonata a quella visiva, soprattutto quando è richiesto un parsing del contenuto, approfondito, come può essere la lettura tattile di una scritta o lo studio di un grafico. Nemmeno questa matrice esiste però, l'hanno progettata, ma i costi di produzione la situano fuori da ogni target di mercato, possibile. Quello che esiste invece, si chiama Braille display, più comunemente chiamato Barra braille. Sono dispositivi che costano dai 2500 ai 5500 euro circa, si connettono ai computer via COM ed LPT, un tempo, ora via USB e Bluetooth ed hanno una riga composta tipicamente da 40, anche 10, 20,30 o, raramente, 80, celle braille. Ogni cella braille è composta da 2 * 4 puntini braille sotto cui si trova un piezo elettrico che cambia il suo stato magnetico a seconda della corrente che lo attraversa; i puntini si alzano e si abbassano formando i 2 ** 8 caratteri, cioè tutti i 256 simboli della tabella ASCII. Le barre braille, traducendo dei sets di 40 caratteri alla volta su una singola riga, devono poi essere spostate in diverse parti del video, per focalizzare porzioni di testo che non sono vicine, o sotto, all'oggetto che riceve il focus del sistema, tipicamente il cursore. La barra, assieme al sintetizzatore vocale, viene poi pilotata da un super oggetto che è lo Screen Reader: Jaws il più famoso per Windows, VoiceOver su Mac e iOS. Sarai orgoglioso di sapere... io lo sono ed è stato uno dei motivi che mi ha spinto a scegliere Python quando ho deciso di provare me stesso nella programmazione, che il secondo screen reader più famoso e potente al mondo, si chiama NVDA, Non Visual Desktop Access, è totalmente freeware, a fronte dei 1300 euro e passa di Jaws, è Open Source ed è, direi interamente, scritto in Python da un gruppo di utenti, principalmente ciechi che, disgustati dal dover pagare cifre incredibilmente alte per ottenere un diritto che dovrebbe essere garantito a tutti, si sono messi lì e stanno sviluppando questa meraviglia. Ok, scusate il fuori tema ma ho colto l'occasione della domanda di Marco, per dare a tutti un assaggio di una realtà che probabilmente pochissimi conoscono e che, se al contrario fosse più conosciuta, eviterebbe moltissimi problemi di accessibilità di software e siti.. o servizi in genere. Un abbraccio a tutti e buon rientro postPasqua. G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Braille. Era: Re: Gioco OldMaid, metodo StampaMani().
2013/4/1 Gabriel Battaglia (Kriyaban) iz4...@libero.it GB: La barra, assieme al sintetizzatore vocale, viene poi pilotata da un super oggetto che è lo Screen Reader: Jaws il più famoso per Windows, VoiceOver su Mac e iOS. Sarai orgoglioso di sapere... io lo sono ed è stato uno dei motivi che mi ha spinto a scegliere Python quando ho deciso di provare me stesso nella programmazione, che il secondo screen reader più famoso e potente al mondo, si chiama NVDA, Non Visual Desktop Access, è totalmente freeware, a fronte dei 1300 euro e passa di Jaws, è Open Source ed è, direi interamente, scritto in Python da un gruppo di utenti, principalmente ciechi che, disgustati dal dover pagare cifre incredibilmente alte per ottenere un diritto che dovrebbe essere garantito a tutti, si sono messi lì e stanno sviluppando questa meraviglia. MB: Non lo conoscevo, come credo la maggior parte delle persone qui: http://www.nvda-project.org/ Si può finanziare lo sviluppo con donazioni Paypal. Il fatto che si possa usare anche da chiavetta, senza la barra ma col sintentizzatore vocale, è fenomenale... GB: Ok, scusate il fuori tema ma ho colto l'occasione della domanda di Marco, per dare a tutti un assaggio di una realtà che probabilmente pochissimi conoscono e che, se al contrario fosse più conosciuta, eviterebbe moltissimi problemi di accessibilità di software e siti.. o servizi in genere. MB Credo che di fuori tema ci sia veramente poco nella tua risposta :D Ancora una domanda: con una risposta come questa, il tuo lettore riesce a farti comprendere le mie risposte intercalate oppure devi fare fatica cercando di ricordarti cosa hai scritto tu e cosa io? Ho aggiunto comunque le iniziali dei nostri nomi per favorire la tua lettura, ma senza avresti fatto più fatica? GB: Un abbraccio a tutti e buon rientro postPasqua. MB: Grazie e anche a te. Ciao. Marco. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Braille. Era: Re: Gioco OldMaid, metodo StampaMani().
Marco Beri: Ancora una domanda: con una risposta come questa, il tuo lettore riesce a farti comprendere le mie risposte intercalate oppure devi fare fatica cercando di ricordarti cosa hai scritto tu e cosa io? Ho aggiunto comunque le iniziali dei nostri nomi per favorire la tua lettura, ma senza avresti fatto più fatica? GB: Ciao Marco e tutti. Grazie per la domanda. Le iniziali ad inizio blocco quotato, rendono la mia lettura più facile da seguire ma si tratta di una differenza lieve. Sebbene non sia in grado di programmare, il computer è da sempre stato una mia passione e, quando fai le cose per passione, ciò che altri trovano stressante o difficile, arriva quasi per magia; dal 1988, quando avevo 14 anni, bazzico su tastiere e ausilii di accessibilità. Durante tutte le scuole superiori, i miei altri studi e le mie lunghissime ore trascorse in letture di piacere, mi sono immerso talmente in profondità nell'uso dei sintetizzatori vocali che ormai li preferisco ai lettori umani. So che può sembrare assurdo ma è così: la sintesi vocale mi lascia libero di interpretare come voglio ciò che leggo, mentre un lettore umano mi costringe ad adattarmi alla sua, più o meno consapevole, interpretazione. Ne consegue che ho sviluppato una grande elasticità e capacità di ascolto, sono estremamente sensibile anche a variazioni infinitesimali nella prosodia della sintesi, magari causate dalla presenza di un ad inizio riga e questo mi permette di seguire bene lo svolgersi della conversazione, regolato dal quoting. Inoltre, sono fra quei pochi fortunati in possesso di ben 3 Barre Braille: questa su Windows, una qui accanto sotto al mio MacBookPro ed un'altra sul posto di lavoro, anch'essa sotto Windows. Quando ho dei dubbi perciò, oppure quando devo leggere linguaggi formali o lingue straniere, appoggio le dita e lavoro con barra e sintesi contemporaneamente. Per completezza d'informazione, riporto anche il sito della comunità italiana di NVDA: http://www.nvda.it/ Bene... ed ora torno a studiare Python :) G. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Il 31/03/2013 23:58, Aplemaser ha scritto: Il giorno 31 marzo 2013 22:02, Manlio Perillo manlio.peri...@gmail.com mailto:manlio.peri...@gmail.com ha scritto: Ok. Allora andiamo con ordine. Che database usi? Quanto tempo impiega il tuo codice, e quanto tempo vorresti impiegasse? [...] Attualmente il tempo di importazione è di 4 ore o poco meno. Voglio ridurre il tempo, ma non so fino a quanto posso arrivare. Con ottimizzazioni molto aggressive (sia sul tuo codice che sulla configurazione del database) non è impossibile scendere sotto i 30 minuti. Tutto è nato perchè ho notato che 3 core su 4 dormono i sonni dei giusti mentre l'altro corse lavora come un pazzo e quindi vorrei impegnare la CPU per ridurre questi tempi. L'alto utilizzo della CPU è solo del tuo programma, o di tutto il sistema (quindi incluso eventualmente il database) ? Se usi un sistema UNIX, puoi utilizzare il comando time per ottenere valori precisi dei tempi impiegati. Di preciso posso dirti che se i bytes totali dei file CSV sono dell'ordine dei 10GB, puoi ottenere un incremento di prestazioni da 5 a 8 volte *solo* ottimizzando il codice. Lo dico per esperienza personale con un parser che deve leggere riga per riga un file di 60G, e che l'implementazione ottimizzata scritta in C richiede 8 minuti, mentre quella Python e quella in C non ottimizzato richiedono più di un ora (ma non so di preciso quanto, perchè non avevo voglia di aspettare). Se poi devi inserire grosse moli di dati nel database, l'ottimizzazione della configurazione del database può portare ad incrementi di prestazioni notevoli. PostgreSQL permette *molte* ottimizzazioni, dal semplice e safe comando COPY a ottimizzazioni più agressive (e pericolose per l'integrità dei dati in caso di crash). Le ottimizzazioni che puoi fare dipendono da come processi i dati, e da come usi il database. Per questo dicevo che devi spiegare in modo chiaro e completo cosa devi fare, altrimenti chi legge può solo darti consigli generici che magari hanno il solo risultato di fare aumentare la tua confusione. Supponi che ciascun file CSV contenga i dati da inserire in una sola tabella. Invece di processare ciascun file CSV in seguenza, puoi farlo in parallelo usando un processo separato. [...] Non è la base di partenza che ho, cioè non ho CSV tutti uguali da importare in processi separati, ma ho capito esattamente il tuo suggerimento. Io non ho detto che devi avere files tutti uguali. L'importante che per processare ed inviare al database i dati di un file CSV, tu non abbia bisogno dei dati presenti in altri file CSV. Ancora grazie mille delle risposte e dell'attenzione. Ciao Manlio -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlFZj08ACgkQscQJ24LbaUSrGQCeNWQd1C4uwQCoKCVkgRndKDgn oLMAoI7rjrQfpGE4x4up9l6nEbYrTo35 =txpm -END PGP SIGNATURE- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
On 2013-03-31 22:58, Aplemaser wrote: Attualmente il tempo di importazione è di 4 ore o poco meno. Voglio ridurre il tempo, ma non so fino a quanto posso arrivare. Tutto è nato perchè ho notato che 3 core su 4 dormono i sonni dei giusti mentre l'altro corse lavora come un pazzo e quindi vorrei impegnare la CPU per ridurre questi tempi. Hai ragione: facendo andare in parallelo i core sfrutteresti meglio la macchina, e il tuo problema non è I/O bound altrimenti non vedresti neanche quel singolo core maxxato. Come farlo non è gratis e non c'è una ricetta generica. Se il tuo input è su tanti file, lancia 4 processi in parallelo e fai lavorare ognuno su 1/4 dell'input. Se il file di input è uno solo puoi spezzare il processo in due parti: uno che legge l'input, lo spezza e ne manda i pezzi in una coda; altri 3-4 processi che leggono dalla coda in round-robin e fanno il loro lavoro sul pezzetto. Per questo tipo di lavori ZeroMQ è perfetto: ha poco overhead e le primitive giuste per questo tipo di coordinazione. Come detto non esistono ricette generiche, ma esistono dei pattern generici, e 0MQ rende abbastanza semplice implementarli. Tieni conto che, dopo l'elaborazione, passare i dati a MySQL come stai probabilmente facendo (con delle INSERT) non è il modo più efficiente. Su PostgreSQL usare COPY è almeno 20 volte più efficiente di INSERT per il bulk-load dei dati. Se MySQL è opzionale come dici, abbandonalo e usa postgres: psycopg offre supporto a COPY da Python http://initd.org/psycopg/docs/usage.html#copy. Se resti in MySQL penso tu possa usare LOAD DATA INFILE per velocizzare il caricamento, ma è un po' più articolato (devi salvare i dati in un file temporaneo o creare una pipe). -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
Il giorno 01 aprile 2013 15:44, Manlio Perillo manlio.peri...@gmail.comha scritto: Con ottimizzazioni molto aggressive (sia sul tuo codice che sulla configurazione del database) non è impossibile scendere sotto i 30 minuti. Wow addirittura. Mi fai coraggio. Le ottimizzazioni che puoi fare dipendono da come processi i dati, e da come usi il database. Per questo dicevo che devi spiegare in modo chiaro e completo cosa devi fare, altrimenti chi legge può solo darti consigli generici che magari hanno il solo risultato di fare aumentare la tua confusione. Ho capito bene, solo che spiegare tutto quanto ho fatto in svariate settimane di lavoro non è per nulla facile. ho provato a farlo in maniera più esaustiva possibile, ma senza voler tediarvi oltremisura. Io non ho detto che devi avere files tutti uguali. L'importante che per processare ed inviare al database i dati di un file CSV, tu non abbia bisogno dei dati presenti in altri file CSV. Certo, sono io che ho sintetizzato sbagliando. Mi hai dato davvero un mucchio di materiale sul quale riflettere, grazie. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
Il giorno 01 aprile 2013 16:54, Daniele Varrazzo p...@develer.com ha scritto: Hai ragione: facendo andare in parallelo i core sfrutteresti meglio la macchina, e il tuo problema non è I/O bound altrimenti non vedresti neanche quel singolo core maxxato. Esatto, è il mio punto di partenza questo. Come farlo non è gratis e non c'è una ricetta generica. Se il tuo input è su tanti file, lancia 4 processi in parallelo e fai lavorare ognuno su 1/4 dell'input. Se il file di input è uno solo puoi spezzare il processo in due parti: uno che legge l'input, lo spezza e ne manda i pezzi in una coda; altri 3-4 processi che leggono dalla coda in round-robin e fanno il loro lavoro sul pezzetto. Per questo tipo di lavori ZeroMQ è perfetto: ha poco overhead e le primitive giuste per questo tipo di coordinazione. Come detto non esistono ricette generiche, ma esistono dei pattern generici, e 0MQ rende abbastanza semplice implementarli. Non conosco quanto citi e quindi approfondirò sicuramente. Sono consapevole che nulla ti è regalato e che devi sporcarti le mani per ottenere i migliori risultati. Tieni conto che, dopo l'elaborazione, passare i dati a MySQL come stai probabilmente facendo (con delle INSERT) non è il modo più efficiente. Su PostgreSQL usare COPY è almeno 20 volte più efficiente di INSERT per il bulk-load dei dati. Se MySQL è opzionale come dici, abbandonalo e usa postgres: psycopg offre supporto a COPY da Python http://initd.org/psycopg/**docs/usage.html#copyhttp://initd.org/psycopg/docs/usage.html#copy. Se resti in MySQL penso tu possa usare LOAD DATA INFILE per velocizzare il caricamento, ma è un po' più articolato (devi salvare i dati in un file temporaneo o creare una pipe). Bene, come dicevo è opzionale l'utilizzo di MySQL e quindi analizzerò volentieri il passaggio a PostgreSQL, almeno un test lo farò sicuramente. Grazie per le risposte. ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] [OT] Coordinate geografiche pdi e poligoni
Scusate l'ot, comunque poi risolvero' tutto in python :) Ho una anagrafica di indirizzi georeferenzati con latitudine e longitudine; ho l'intenzione di creare delle aree geografiche per suddividere i vari indirizzi. 1. definita un'area geografica come un poligono i cui vertici sono identificati da latitudine e longitudine, come verifico se un punto e' all'interno del poligono? 2. cosa caspita devo cercare su google per documentarmi sull'argomento senza impazzire (ho sprecato una pasquetta ;) ) ? Mi scuso di nuovo per l'OT, ma sicuramente qualcuno avra' avuto a che fare con un problema simile e non so veramente dove sbattere la testa. Ciao diego ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Coordinate geografiche pdi e poligoni
Il 01/04/2013 21:16, Diego Barrera ha scritto: Scusate l'ot, comunque poi risolvero' tutto in python :) Ho una anagrafica di indirizzi georeferenzati con latitudine e longitudine; ho l'intenzione di creare delle aree geografiche per suddividere i vari indirizzi. 1. definita un'area geografica come un poligono i cui vertici sono identificati da latitudine e longitudine, come verifico se un punto e' all'interno del poligono? 2. cosa caspita devo cercare su google per documentarmi sull'argomento senza impazzire (ho sprecato una pasquetta ;) ) ? Mi scuso di nuovo per l'OT, ma sicuramente qualcuno avra' avuto a che fare con un problema simile e non so veramente dove sbattere la testa. Ciao diego Ciao, io per le immagini ho usato: import matplotlib.nxutils as nx che fa parte della libreria matplotlib nx.points_inside_poly(points, verts) è il comando che ti serve (penso) Ciao Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Coordinate geografiche pdi e poligoni
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Il 01/04/2013 21:16, Diego Barrera ha scritto: [...] 1. definita un'area geografica come un poligono i cui vertici sono identificati da latitudine e longitudine, come verifico se un punto e' all'interno del poligono? 2. cosa caspita devo cercare su google per documentarmi sull'argomento senza impazzire (ho sprecato una pasquetta ;) ) ? Hai provato a cercare esattamente quello che hai chiesto ora? http://lmgtfy.com/?q=how+to+check+if+a+point+is+inside+a+polygon Ciao Manlio -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAlFZ5IoACgkQscQJ24LbaUQ7+ACdEIrBpjfMpvj3vZbaEuxoqTDP 284AnjsMYgyWBjmATBiZdomoQTyFiSRd =UfEH -END PGP SIGNATURE- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Coordinate geografiche pdi e poligoni
2013/4/1 Diego Barrera diegonebarr...@yahoo.it 2. cosa caspita devo cercare su google per documentarmi sull'argomento senza impazzire (ho sprecato una pasquetta ;) ) ? Points inside polygonal region python Forse questo ti aiuta: http://stackoverflow.com/questions/8833950/how-to-determine-which-points-are-inside-of-a-polygon-and-which-are-not-large-n -- Andrea Francia http://andreafrancia.it ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
Aplemaser wrote: Bene, come dicevo è opzionale l'utilizzo di MySQL La parola che cercavi è autolesionista. -- Nicola Larosa - http://www.tekNico.net/ My knowledge enables me to predict that if you choose a closed- source OS, you have dangerously underestimated the long-term harm to yourself from that choice. - Eric Raymond, July 2012 ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Migliorare le prestazioni usando i core?
On 04/01/2013 08:43 PM, Aplemaser wrote: Bene, come dicevo è opzionale l'utilizzo di MySQL e quindi analizzerò volentieri il passaggio a PostgreSQL, almeno un test lo farò sicuramente. Di solito MySQL e` parte del problema, non della soluzione (anche se prendendolo un po' a calci con scarpe antinfortunistica riesci a farlo andare come vuoi te) ;) Enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
[Python] multiprocessing e code per funzioni con più parametri...
Ciao a tutti, Sto utilizzando una funzione C su una grande matrice, questa operazione richiede parecchio tempo e vorrei dividere la matrice in sotto matrici e lanciare un processo per ogni sotto-matrice... la funzione che voglio utilizzare ha più di un parametro, l'approcio che sto seguento mi sembra più complesso del dovuto... e comunque non funziona! il codice incriminato è: https://gist.github.com/zarch/5288362#file-multiproc-py voi come fareste? consigli? Grazie Pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] [OT] Coordinate geografiche pdi e poligoni
Ciao Diego, 2013/4/1 Diego Barrera diegonebarr...@yahoo.it Scusate l'ot, comunque poi risolvero' tutto in python :) Ho una anagrafica di indirizzi georeferenzati con latitudine e longitudine; ho l'intenzione di creare delle aree geografiche per suddividere i vari indirizzi. 1. definita un'area geografica come un poligono i cui vertici sono identificati da latitudine e longitudine, come verifico se un punto e' all'interno del poligono? Io utilizzerei il modulo shapely[0], vedi questo breve esempio: http://streamhacker.com/2010/03/23/python-point-in-polygon-shapely/ ciao Pietro [0] https://pypi.python.org/pypi/Shapely ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python