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
Base / Re:ricorsione e alberi
« il: Luglio 27, 2019, 17:52 »

2
Base / Re:Storage parametri applicazione : un consiglio
« il: Luglio 27, 2019, 13:24 »
Mah. Ripensandoci, il motivo alla base di questi tuoi dubbi potrebbe essere che ti manca il concetto di leaking abstraction. Siccome lo storico saggio originale di Joel è ancora online, tanto vale indirizzare direttamente alla fonte: https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/
Ecco. Queste cose di cui parli qui, e di cui non riesci a farti un quadro preciso, si chiamano leaky abstractions.

3
Base / Re:Storage parametri applicazione : un consiglio
« il: Luglio 26, 2019, 09:25 »
> ma si parlava di processi di installazione/disinstallazione

tranne che invece poi eri passato a lamentarti di pathlib che c'è solo negli ultimi python.

Forse dovresti focalizzare la tua attenzione su quello che decidi essere il tuo problema attuale.
In ogni caso, di base non fa differenza: che si parli di feature platform-dependent o di processi di installazione (che sono anch'essi platform-dependent), la morale è esattamente identica: non puoi pensare che Python (ma neppure Java, se è per questo) ti sollevi dalla responsabilità di conoscere ciò che sta intorno al tuo programma scritto in Python. Ovviamente un linguaggio di alto livello ti offre qualche astrazione in più, ed è anche per questo che si usa. Ma oltre a un certo punto, devi sapere quello che fai.
Se cerchi di accedere (per dire) al file system da un programma Python (o Java), non è che Python (o Java) crei per te un file system nuovo di zecca, sempre uguale su tutte le piattaforme: avrai diversità di comportamento ineliminabili... magari nove su dieci non ci sbatti contro e non te ne accorgi, ma devi sapere che ci sono. Allo stesso modo, se vuoi installare il tuo programma, non è che Python (o Java) crei per te un "protocollo universale" di installazione valido su tutte le piattaforme. Devi sapere dove vuoi atterrare, in linea di massima.

> mi dovrei limitare ad utilizzare, nella codifica, solo le disponibilità standard

assolutamente no, ci mancherebbe. Devi, e puoi, fare esattamente tutto quello che vuoi. L'importante è che tu capisca che cosa stai facendo, e sappia farti una bilancia dei pro e dei contro.
E' un po' come sviluppare un frontend web. Certamente tu puoi limitarti solo al minimo comun denominatore di css e javascript in modo che tutto funzioni anche su Internet Explorer 6, se vuoi. In pratica però tutti gli sviluppatori oggi targettizzano solo le versioni più recenti di Chrome/FF/Edge, e di IE6 se ne fregano. L'importante è capire e decidere.

>  un processo di installazione non dovrebbe forse prevedere la verifica della disponibilità, od anche l'istallazione, di tali librerie?

sì e infatti ci sono vari meccanismi per stabilire la catena dei requirements (e anche vari problemi legati a questi meccanismi... ma così è la vita)

> non dovrebbe prevederne la rimozione se non più utili?

no

>  cosa dovrebbe fare per un "qualcosa" destinato ad essere utilizzato in vari ambienti?

"leggere i dannati manuali", come si diceva una volta. Non c'è un sostituto valido per questo. Informati sulle specifiche dei vari shop, vedi come fanno gli altri, eccetera.

>  questo qualcosa, varrebbe lo sforzo necessario?

E che ne so? Ma perché, invece di stopparti a pensare in astratto, non provi concretamente a sviluppare un pacchetto e pubblicarlo su varie piattaforme? Così vedi quali sono le difficoltà pratiche, fai i tuoi errori, li correggi, valuti i pro e i contro su un caso concreto.

> È scritto nella introduzione di tutti i libri su java che ho acquistato

proprio così, giusto. E quindi? Quale sarebbe la differenza concreta che riscontri con Python? Perché non sono mica riuscito a capirla.

Prova così: fai un esempio concreto di una cosa che in Java sei riuscito a fare ma che in Python non riesci, posta il codice concreto che ti ha permesso di risolvere il problema, e vediamo qual è il problema concreto.

4
dovresti guardare qual è il tipo di quel campo, e controllare come cx_oracle gestisce quel tipo... ovvero, probabilmente male a giudicare dal risultato (sì, nel dettaglio potrebbe in effetti essere un problema di aritmetica float come ti è stato detto...). D'altra parte, ovviamente toad non avrà problemi essendo un tool specializzato per oracle.
Poi insomma, vedrei se esiste una soluzione più "istituzionale" prima di mettermi a fare arrotondamenti a mano: per esempio registrare un adapter per il tipo in questione, vedere se cx_oracle ha delle estensioni che coprono quel tipo, vedere se esistono altri driver di database per oracle che fanno la cosa giusta... Non ho mai usato oracle quindi non saprei consigliarti...

5
Base / Re:Storage parametri applicazione : un consiglio
« il: Luglio 25, 2019, 19:49 »
Guarda, abbi pazienza non sono sicuro di capire quello che dici...

Python è già "multi-sistema", e permette già di sviluppare in modo astratto dal sistema operativo. Ma ovviamente se usi una feature del linguaggio che è stata introdotta solo di recente, questo ti limita alle versioni più recenti del linguaggio. Oppure, se vuoi (attraverso il linguaggio) usare feature che sono disponibili solo su un certo sistema operativo, questo ti limita a quel sistema operativo.
Ma questo ce lo avresti in java, in haskell, in perl, ce l'avresti con qualsiasi linguaggio. Per dire, se scrivi un programma in java che usa l'http client interno di java, allora ti stai limitando solo alle versioni più recenti dell'sdk, perché prima l'http client interno non c'era. Se vuoi scrivere un software che fa uso di schermi a colori, non puoi sperare che funzioni bene su schermi in bianco e nero. Eh, già.

> essendoci il C alla base di python, tale speranza è "molto" campata in aria, essendo il linguaggio molto più legato al sistema su cui risiede di java.

Adesso questo forse ti sorprenderà, ma guarda che java è scritto in c.

6
Base / Re:Storage parametri applicazione : un consiglio
« il: Luglio 24, 2019, 21:44 »
> .... fallirebbe con la versione 3.5.2 ...

Eh beh sì, ma che c'entra. Se usi una feature presente solo dalla versione X, allora il tuo programma funziona solo con python X o superiore. Ma questo vale per qualsiasi cosa, è scontato.

> ...la domanda è un po' generica ...

La domanda è mostruosamente generica. Dipende dal sistema operativo, dal tipo di programma, dal tipo di utente finale che lo deve utilizzare, dalla modalità di distribuzione che hai in mente.
Per esempio, è standard su linux installare progammi con un packet manager: allora per esempio potresti cercarti le guidelines per pubblicare il tuo programma in modo che sia installabile con il packet manager che hai in mente. Se segui la guideline, in teoria stai già facendo la cosa giusta.
Ma in generale il consiglio è: cercati un programma simile al tuo, e vedi come si regola quello... poi copia con giudizio.

7
ma non ho capito, è un esercizio da risolvere? perché se invece è un problema reale, allora penso che per queste cose ci siano robe come Shapely...

8
Multimedia / Re:confrontare pixel in un'immagine.
« il: Luglio 14, 2019, 20:56 »
E quindi, il codice che finora hai fatto e che funziona è questo:

<qui codice> <qui codice> <qui codice>

Invece, il codice che finora non sei riuscito a far funzionare è questo:

<qui codice> <qui codice> <qui codice>


9
Multimedia / Re:confrontare pixel in un'immagine.
« il: Luglio 14, 2019, 19:05 »
> utilizzo la versione 2.7.14
Allora lascia perdere, davvero, Non ha senso andare avanti.

Per il resto, non riesco a capire... periodicamente spuntano fuori questi esercizi sulle """""""immagini"""""""", ma non capisco qual è il perverso manuale/professore che si accanisce con questa idea sballata...
Suppongo che la radice dell'idea qui è rappresentare un'immagine come una lista di liste (di liste... di liste...) annidate, e quindi tutti questi esercizi finiscono per essere un fastidioso conteggio di cicli for annidati, dove in effetti è facile perdere il conto del livello a cui si è.
Detto questo, prova a postare il codice che hai scritto... purché sia compatibile con python 3... e vediamo qual è il problema.

10
Base / Re:Come convalidare una "path" con Voluptuous
« il: Luglio 12, 2019, 21:54 »
Non conosco quella libreria ma non mi meraviglia affatto che non abbia un meccanismo per validare le path.
Validare le path (in modo crossplatform, magari) è tradizionalmente un Problema Difficile. Mi è rimasta nei bookmark questa risposta https://stackoverflow.com/questions/9532499/check-whether-a-path-is-valid-in-python-without-creating-a-file-at-the-paths-ta/34102855#34102855 che però ormai è di qualche anno fa e adesso non ho tempo di verificare se ha ancora senso... ma ti dà l'idea del problema.
Poi vedo per esempio questo https://pypi.org/project/pathvalidate/ che andrebbe provato... ma immagino che ci siano anche altre soluzioni....

11
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?

12
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...


13
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.

14
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.

15
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.


Pagine: [1] 2 3 ... 219