Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - RicPol

Pagine: [1] 2 3 ... 219
1
Database / Re:query su sql server
« il: Giugno 21, 2019, 20:02 »
ma che cosa non ti è chiaro della documentazione di pyodcb, di preciso?
O forse, più propriamente: su che libro stai studiando Python?

2
Database / Re:Problema ASSURDO con PyODBC
« il: Giugno 21, 2019, 09:55 »
Mah guarda, il codice che hai postato fa riferimento a un contesto che non conosciamo, oltre a essere un intrico di Cose Da Non Fare e Cose Incomprensibili, secondo tutti i manuali... ma anche lasciando perdere i problemi specifici, la cosa che devi prima di tutto capire è che il tuo assunto di base

> Come é mai possibile che abbia un indice duplicato!!! non sto facendo una "INSERT"... é una stupidissima "UPDATE".

è sbagliato.
E' anzi possibilissimo e molto frequente avere un indice duplicato facendo una UPDATE... se aggiorni un record in un campo indicizzato e per caso lo setti a un valore già presente in qualche altro record, ovviamente avrai un errore di indice duplicato, proprio come se facessi una INSERT. Non c'è niente da stupirsi per questo.

La mia impressione, da una lettura al volo del tuo codice (che peraltro è parecchio confuso) è che tu stia facendo un errore concettuale. Tu forse stai pensando questo: "prendo le righe della tabella a una a una, e aggiorno quel campo indicizzato semplicemente aggiungedo una stringa fissa al valore che già c'è. Che male c'è? Se i valori non erano duplicati prima, non è certo possibile che diventino duplicati adesso, aggiungendo una stringa fissa a ciascun valore del campo..."
L'errore è che NON stai prendendo TUTTE le righe della tabella, visto che la query di SELECT da cui peschi i dati ha un bel WHERE. Quindi probabilmete quello che succede è che a un certo punto capita che un valore aggiornato diventi uguale a un altro *che non avevi pescato* ma che comunque esiste già nella tabella...

Esempio per capire meglio. Metti che hai una tabella fatta così:

ID   col1   col2(indice!)
=========================
1    pera   "giallo verde"
2    pera   "nero blu"
3    pera   "bianco blu"
4    mela   "nero"
5    mela   "giallo"

Poi immagina di fare una query del tipo select * from table where col1="mela", e poi immagina di aggiornare i recordi che peschi (che sono il 4 e il 5) aggiungedo "verde" al testo di col2 (indicizzata). Adesso vedi bene che la tabella dovrebbe diventare

ID   col1   col2(indice!)
=========================
1    pera   "giallo verde"
2    pera   "nero blu"
3    pera   "bianco blu"
4    mela   "nero verde"
5    mela   "giallo verde"  -> OOOOOPSSSSSS!!!! indice duplicato!!!

Ed ecco svelato come una "stupidissima UPDATE" può causare un indice duplicato. Non c'è niente di magico, è davvero solo sql di base. Ed è anche un problema frequentissimo, si capisce: aggiornare un campo indicizzato può portare a errori di indici duplicati. Vedi un po'... è proprio quello a cui servono gli indici unique sui campi...

Poi a dire il vero c'è anche il caso un pochino più esotico in cui ANCHE se peschi TUTTI i record della tabella potresti trovarti comunque con un errore di indice duplicato. Basta che *in qualsiasi momento* un indice sia duplicato, e tutto si ferma anche se per te "alla fine" l'operazione dovrebbe comunque riuscire, da un punto di vista logico. Per esempio, se fosse

ID   col1   col2(indice!)
=========================
1    pera   "giallo"
2    pera   "nero"
3    pera   "bianco"
4    mela   "giallo verde"

e tu volessi aggiungere a ciascuna riga la stringa "verde", vedi bene che già al momento di aggiornare il record 1 avresti un duplicato con il 4... anche se alla fine il 4 dovrebbe poi diventare "giallo verde verde" e quindi non sarà duplicato, il problema è che *in quel momento* hai l'errore e tutto si ferma... Questo è più fastidioso perché ovviamente l'errore dipende dall'ordine in cui sono fatte le modifiche... Può darsi che la cosa migliore in questi casi sia cancellare momentaneamente l'indice, fare l'update e poi ripristinare l'indice... ma dipende dagli internals del database...


3
Base / Re:Installazione pip python 3.2.3
« il: Giugno 13, 2019, 12:27 »
> Magari chiedi anche al tuo IT department di aggiornare la built disponibile, a volte (quasi mai...) basta chiedere.
Concordo... e direi che i casi sono due... o python è un pacchetto "dimenticato" di cui nessuno si preoccupa, e allora se chiedi magari la risposta sarà "grazie per avercelo ricordato, adesso togliamo anche quello e non se ne parla più"... oppure il tuo IT dovrebbe essere ben felice di aggiornare la versione, visto che dopo tutto python 3.2 NON è più supportato neanche per gli aggiornamenti di sicurezza.

Detto questo... non è che sia proprio difficile farsi "a mano" una versione portatile di python... e se quello che devi fare è solo "produzione" (ovvero farci girare degli script che sviluppi altrove), allora perché no. Se invece intendi *sviluppare* con quella, allora potrebbe essere un po' un pasticcio... cioè, più che altro devi aprire una shell, impostare le variabili d'ambiente e le path giuste, poi invocare il tuo editor in modo che "veda" il python che vuoi tu... anche cose come pip, etc. potrebbero funzionare un po' a martellate.
In ogni caso, puoi prendere spunto da quello che avevo scritto qui (anche se lo scopo era un altro): https://pythoninwindows.blogspot.com/2019/03/distribuire-un-programma-il-modo-facile.html

Poi chiaramente ci sono distribuzioni portatili di python più "professionali" e complete, a partire da http://winpython.github.io/
Ovviamente per tutto ci sono pro e contro.

4
Altre tematiche / Re:[Crittografia] Known Plaintext Attack
« il: Giugno 09, 2019, 22:50 »
Se quello di cui stai parlando è la banale cifratura con xor, tieni conto però che xor è un'operazione bit-a-bit, che quindi si fa sui numeri (binari, almeno concettualmente). Ora, il tipo "str" o il tipo "bytes" con cui python può rappresentare le stringhe *non* sono certo dei tipi numerici (anche se ovviamente "bytes" rappresenta una sequenza di numeri... ma non è comunque un tipo numerico).
Puoi usare "ord" e "chr" per convertire tra carattere (stringhe unarie) e numero, e in questo modo fare poi un xor carattere-a-carattere, se vuoi.

5
wxPython / Libro italiano su wxPython disponibile!
« il: Maggio 19, 2019, 17:11 »
Come sa chi segue questo forum, da parecchi anni avevo una raccolta di "Appunti wxPython" online, che però aveva bisogno di una profonda revisione...

Adesso li ho rivisti, e ne è venuto fuori un libro: "Capire wxPython: strumenti e buone pratiche per progettare applicazioni GUI desktop complesse". Niente meno.

In poche parole, è la risorsa più completa su wxPython disponibile in Italiano. In qualche parola in più: https://pythoninwindows.blogspot.com/2019/05/capire-wxpython.html

Il libro si trova qui: https://leanpub.com/capirewxpython e c'è pure il campione omaggio, per chi non si fida.


6
Base / Re:Storage parametri applicazione : un consiglio
« il: Aprile 23, 2019, 23:06 »
> Leggersi il s.o., quindi, poi regolarsi.
Oppure usare una roba come questa https://github.com/ActiveState/appdirs ma bisogna leggere il codice per bene e capire se fidarsi.

7
Base / Re:Storage parametri applicazione : un consiglio
« il: Aprile 23, 2019, 14:26 »
Su Windows la policy è chiara (magari non seguita, ma...): in %ALLUSERSPROFILE%\\myapp i dati non user-dependent dell'applicazione (se ha senso), in %LOCALAPPDATA%\\myapp (o al massimo in %APPDATA%\\myapp) i dati dell'utente. E più in generale, https://docs.microsoft.com/it-it/windows/desktop/shell/knownfolderid.
Poi per fare questo sarebbe buona educazione fornire anche un installer/uninstaller che pulisce correttamente i vari pezzetti lasciati in giro...
Se però si trattta del solito programmino distribuito alla selvaggia, allora è di gran lunga preferibile usare una sub-directory "interna" all'applicazione e tenere tutto quanto il più vicino possibile senza spargere cose in giro.

In Linux in effetti.... la situazione è più sfumata. Eh.

La parola "nascosta" è ovviamente priva di significato in questo contesto, come è stato detto mille volte. Non puoi nascondere nulla sulla macchina di proprietà di un altro.

8
Database / Re:JSON o SQLite
« il: Aprile 14, 2019, 11:31 »
Troppe poche informazioni. Messa così, la risposta è: è assolutamente indifferente, non ci sono pro o contro per preferire nessuna delle due ipotesi. Se al momento non hai nessuna prospettiva più specifica per quello che effettivamente dovrà accadere nella tua applicazione, allora il mio consiglio è di tirare una monetina e usare indifferentemente uno dei due metodi di persistenza. Se poi in futuro capirai di aver pescato quello sbagliato, cambierai. L'importante è che il layer del tuo codice che si occupa della persistenza esponga un'API verso il resto del codice che maschera il meccanismo di persistenza, in modo tale che se in futuro dovessi cambiarlo, il resto del codice non ne sarebbe affetto.

9
Base / Re:lavorare con le immagini
« il: Febbraio 18, 2019, 13:37 »
Sì beh certo, "ragionando" puoi derivare daccapo la meccanica quantistica partendo dalla quattro operazioni. Però non è una cosa che lascerei fare come esercizio ai miei allievi, diciamo. Vabbè, rinuncio a esprimere ancora una volta la mia consueta opinione sulla qualità dell'insegnamento universitario in Italia. Fatti una googlata per "python flood fill", o cerca "flood fill" su wikipedia, e vedi cosa riesci a mettere insieme.

10
Base / Re:lavorare con le immagini
« il: Febbraio 18, 2019, 13:00 »
Mah sai non è che sia "banale" o "difficile"... quando vedo esercizi come questo, mi chiedo sempre quanto è progressiva la curva di apprendimento che ci sta dietro. Cioè, è un esercizio che hai pescato tirando a sorte da una raccolta di esercizi, o te lo hanno dato nell'ambito di un corso? Perché in questo caso non riesco a credere che non ti abbiano anche già dato qualche strumento intermedio per ragionarci su.
Per esempio, questo esercizio diventa "banale" (più o meno) se hai un'idea di come funziona un algoritmo "flood fill". E siccome questi algoritmi di solito usano strutture-dati come le Queue, ancora prima dovresti avere un'idea di che cosa è una Queue e come funziona... Certo se il tuo livello di conoscenza pregressa è ancora del tipo "liste e funzioni col print in fondo", questo esercizio diventa un monte Everest da scalare.

11
Base / Re:Ottimizzazione del codice
« il: Febbraio 13, 2019, 22:08 »
Avrei due suggerimenti.

Il primo è di rendere più ottimizzato e pythonico NON il tuo codice, ma per cominciare questo tuo post. "Mi permette di gestire la classe compress e uncompress e di implementare gli script" EEEHHH????? Scusa che cosa dovremmo sapere noi, che non ci stai dicendo? Tu dai per scontato che chi legge magia a colazione pane e src.converter, e beve acqua e src.Compress (con la lettera maiuscola... boh). Non so gli altri, ma io non ho la più pallida idea di che cosa si suppone che questo codice debba fare, con quali librerie deve lavorare, etc. Se non fornisci un (bel) po' di contesto, non è che abbiamo la sfera di cristallo.

Il secondo consiglio è questo: se vuoi ottimizzare e rendere più pythonico quel codice, aspetta sei mesi senza toccarlo, senza leggerlo, facendo altro. Altre cose, altro codice, altri pensieri, altri progetti. Poi, il 13 agosto sotto l'ombrellone prova a rileggerlo e vedi quello che riesci a capire. Lo shock di quello che scoprirai ti porterà sicuramente a ottimizzare il codice e renderlo più pythonico. A partire da un rispetto totale della Pep8, e da una documentazione ossessiva.

12
pyGTK / Re:Monitoraggio attività app
« il: Febbraio 12, 2019, 21:44 »
"Non ci sono attività in corso" è un'impressione soggettiva che puoi determinare solamente tu. Per esempio, se stai per 3 minuti fermo a guardare il soffitto, alla fine dei 3 minuti tu sei invecchiato di 3 minuti: fidati, ne sono successe di cose alle tue cellule.
Quindi:
1) determina che cosa intendi precisamente per "nessuna attività";
2) di conseguenza, determina quali sono gli eventi che, quando succedono, hanno il potenziale di essere "gli ultimi" che succedono;
3) a partire da ogni evento che potrebbe essere "l'ultimo", fai partire un timer;
4) resetta il timer (ovvero, fallo ripartire da zero) ogni volta che succede un nuovo evento di questo tipo;
5) se il timer arriva a 3 minuti, mostra la schermata di blocco.

E' da anni che non guardo più pyGTK (ma esiste ancora?...) ma sono sicuro che ha tutti gli strumenti (eventi, timer) per fare quello che vuoi.

13
Base / Re:[Win/py3] File aperti da diversi programmi
« il: Febbraio 08, 2019, 10:02 »
Mah, non sono sicuro di quali problemi di concorrenza dovresti avere. Se "il software di terze parti" apre il file lockandolo, al massimo hai IOError quando cerchi di copiarlo, e non ti resta che intercettare l'eccezione e provare più tardi... ma questo è by design. Se nessuno locka il file, meglio ancora: copia il file e vivi felice, il massimo che ti può succedere è che stai copiando una versione non aggiornata ma questo può succedere in ogni caso...

(uhm... ma non avevo già discusso con qualcuno una roba del genere.... Mah. Non sarà questo il caso, ma non è la prima volta... Certe volte ho la sensazione che periodicamente le stesse persone tornino alla carica con la stessa domanda sperando che nel frattempo me ne sia dimenticato, e magari sperando in una risposta diversa... E il bello è che in effetti me ne dimentico sempre!)

(ri-uhm... detto questo, non so se affiderei a python un'operazione di questo tipo. Il sistema operativo in genere ha delle soluzioni robuste, testate, funzionanti. Io schedulerei un bel backup della cartella a intervalli periodici, e mi dimenticherei del tutto del problema).

14
Non hai capito. Se non conosci l'encoding di un file, non è che python possa conoscerlo al posto tuo. Non è un problema di python. La dua domanda equivale a chiedere se nella libreria standard di python esiste un modulo per leggere il pensiero. Non esiste un modulo per leggere il pensiero nella libreria standard di python.
Aprire un file "in qualche modo" è sempre possibile: open di per sé funziona sempre, ci mancherebbe. E' poi leggerlo che può dare problemi. Poi certo, visto che *adesso* menzioni la possibilità di produrre "caratteri strani", credo che tu ti riferisca alla possibilità di settare il parametro "errors" di open https://docs.python.org/3/library/functions.html#open, cosa che è sempre un rifugio possibile... ma questo non è certamente "indovinare l'encoding". 
Detto questo, a me risulta che chardet sia invece *parecchio* funzionale, anche e soprattutto con file prodotti in ambiente windows. Dopo tutto, se va bene a Mozilla... Ma lo hai *davvero* provato?
Uhm, a proposito: se un file di testo non-utf8 viene prodotto in ambiente windows, è più probabile che qui da noi sia encodato in cp1252, che NON è la stessa cosa di iso-8859-1...

In ogni caso: https://docs.python.org/3.3/howto/unicode.html
e https://pythoninwindows.blogspot.com/2018/08/installare-e-usare-python-su-windows9.html

15
Sì ma al di là di questo non capisco dove risiede concretamente il problema. Csv è un file di testo puro, ed è noto che i file di testo puri non hanno metainformazioni sull'encoding. Se anche ci fosse uno standard che "prescrive" utf8, non ci sarebbe nessun modo per imporlo visto che appunto, un file di testo non ha modo di segnalare l'encoding in cui è scritto.
Quindi, hai in mano lo stesso problema che avresti con qualsiasi altro file di testo. Il fatto che sia un csv è una falsa pista che non c'entra niente.
Il problema è: quando apri un file di testo, O sai l'encoding (e allora sei a posto) OPPURE non lo sai (e allora sei nei pasticci). Se non lo sai, hai due strade: O cerchi di saperlo (informandoti bene presso il provider di quel file), OPPURE tiri a indovinare, per esempio con chardet https://github.com/chardet/chardet o librerie analoghe.

Pagine: [1] 2 3 ... 219