Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 30 su 30
  1. #21
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,191
    Quote Originariamente inviata da Alfoxx Visualizza il messaggio
    Io infatti nel primo post, volevo proprio chiedere di capire come bisogna ragionare riga di codice per riga di codice per poter programmare con una certa filosofia ("dividi et impera") e non perdermi in ragionamenti che non portano a nulla
    questo però porta il discorso su un piano diverso, non solo allo sviluppo del codice ma alla progettazione
    io ti dico come mi approccio io ad un problema, considera che sono un appassionato autodidatta:
    - guardo attentamente all'obiettivo che si vuole ottenere
    - verifico quali sono i dati in input al problema e alla loro struttura (il file di testo nel tuo caso)
    - disegno mentalmente il flusso di lavoro
    - scompongo il flusso di lavoro in parti definite
    - progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
    - sviluppo le parti di codice in ordine di esecuzione (nel tuo caso, apertura del file, recupero dei dati, inserimento dei dati in una struttura più flessibile di quella originale, ecc)
    - testo il codice parte per parte e lo risistemo per correggere i bug o efficientarlo

    Ovviamente, ognuno ha il suo percorso di "produzione" ed esistono varie tecniche e processi strutturati da applicare (mi vengono in mente lo sviluppo AGILE, le tecniche MVC, il paradigma Test Driven Development e tanti altri)

  2. #22
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    112
    Quote Originariamente inviata da clasku Visualizza il messaggio
    questo però porta il discorso su un piano diverso, non solo allo sviluppo del codice ma alla progettazione
    io ti dico come mi approccio io ad un problema, considera che sono un appassionato autodidatta:
    - guardo attentamente all'obiettivo che si vuole ottenere
    - verifico quali sono i dati in input al problema e alla loro struttura (il file di testo nel tuo caso)
    - disegno mentalmente il flusso di lavoro
    - scompongo il flusso di lavoro in parti definite
    - progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
    - sviluppo le parti di codice in ordine di esecuzione (nel tuo caso, apertura del file, recupero dei dati, inserimento dei dati in una struttura più flessibile di quella originale, ecc)
    - testo il codice parte per parte e lo risistemo per correggere i bug o efficientarlo

    Ovviamente, ognuno ha il suo percorso di "produzione" ed esistono varie tecniche e processi strutturati da applicare (mi vengono in mente lo sviluppo AGILE, le tecniche MVC, il paradigma Test Driven Development e tanti altri)
    Bravissimo. Permettimi di aggiungere l'ultimo tassello a quanto hai detto ovvero ricercare gli effetti collaterali. Ovvero prevenire "input" indesiderati che possono compromettere il normale funzionamento del codice. In altre parole validare opportunamente l'input implementando una adeguata gestione degli errori.

  3. #23
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    grazie ragazzi per i vostri interventi.
    Penso che questa parte del ragionamento è da affinare, per riuscire bene a fare cose e non perdersi
    - disegno mentalmente il flusso di lavoro
    - scompongo il flusso di lavoro in parti definite
    - progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
    Con questo problema io ho pensato inizialmente che il programma apre il file ed esegue il ciclo while, ad ogni ciclo si chiama la funzione che apre anche'essa lo stesso file.
    all'inizio non ragionando immaginavo che sia il programma che la funzione leggessero lo stesso indirizzo e quindi dovevo fare in modo da memorizzare i vecchi indirizzi per poterli confrontare. Poi ho ragionato sul fatto che la funzione con il suo ciclo while non leggeva lo stesso indirizzo, mi sono inventato dei contatori per memorrizzare tre indirizzi diversi....insomma un sacco di cose che non hanno portato a nulla.

    Fra alcuni giorni cmq mi metto a ragionare sull'ultimo codice che mi è stato proposto e lo studio ben bene, in modo da ricavare anche un modo di ragionare per questa fase della progettazione del codice.

    Intanto vi auguro buon fine settima e buon ferragosto a tutti.
    Da ieri mi sono fermato con lo studio, ripartirò fra alcuni gg. Non faccio vacanze, ma sto studiando da tanto tempo e vorrei fermarmi un pochino.
    ciaociao

  4. #24
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Anche se mi reputo ancora in vacanza, perchè non sto tutto il giorno a studiare, sono riuscito ad avere qualche oretta e ragionare sul problerma.



    Considerando l'ultimo codice di Alhazred ed in particolare questo pezzo di codice

    codice:
    array_key_exists($ip, ${'pulsante_'.$cliccato}) ?
        ${'pulsante_'.$cliccato}[$ip] += 1 :
        ${'pulsante_'.$cliccato}[$ip] = 1;
    
    
    l'ho tradotto così:


    codice:
    if(array_key_exists($indirizzo, ${'sul_pulsante_'.$click})){
        
    
        
        ${'sul_pulsante_'.$click}[$indirizzo] = ${'sul_pulsante_'.$click}[$indirizzo]+1 ;
            
            }else{
                ${'sul_pulsante_'.$click}[$indirizzo] = 1;
                
        }



    quindi prima di ? è come se ci fosse una domanda, ciò che viene dopo è la risposta
    affermativa e poi la risposta negativa separata da :


    quindi se esiste l'indirizzo nell'array un indice pari all'indirizzo, aggiungici 1 a quel
    particolare elemento dell'array


    se non esiste, mettilo nell'array e dacci valore 1


    Corretto?


    Nel primissimo ciclo, quando non ci sono elementi negli array
    con questo assegnamento
    codice:
    ${'sul_pulsante_'.$click}[$indirizzo] = 1
    quindi vado ad inserire
    nell'array sia la chiave ($indirizzo]) che il valore (1)?


    giusto?





    come si può usare la variabile variabile nelle espressioni echo ?
    così


    codice:
    echo" se è presente allora aggiunge 1 all'elemento nell'array $sul_pulsante_.$click ";
    


    non funziona


    se è così nemmeno


    codice:
    echo" se è presente allora aggiunge 1 all'elemento nell'array ${'sul_pulsante_'.$click} ";
    Ultima modifica di Alfoxx; 17-08-2016 a 16:02

  5. #25
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    mi sono reso conto solo adesso che poichè ho rifatto il programma può sembrare che quelle variabili che ho scritto nel messaggio precedente non dipendono da nulla.

    Il codice che ho scritto io è

    codice:
    $sul_pulsante_p1=array(); //definisco due array
    $sul_pulsante_p2=array();
    $clicktotali=0;  //contatore dei click totali ricevuti dai due indirizzi
    
    
    $textfile = fopen("test.txt", "r"); //apro il file da contare
    
    
    
    
    while ( $rigafile=fgets($textfile,1024) ) {
        $campiriga = explode("|", $rigafile); //estraggo tutti i campi di riga
        $click=$campiriga[0]; //prelevo da ogni riga il campo relativo al click
        $indirizzo=$campiriga[2]; //prelevo da ogni riga il campo relativo all'indirizzo
        $clicktotali++;
    Quindi il codice di Alhazred

    codice:
    array_key_exists($ip, ${'pulsante_'.$cliccato}) ?
        ${'pulsante_'.$cliccato}[$ip] += 1 :
        ${'pulsante_'.$cliccato}[$ip] = 1;
    l'ho trasformato così
    codice:
    if(array_key_exists($indirizzo, ${'sul_pulsante_'.$click})){    
                    
        ${'sul_pulsante_'.$click}[$indirizzo] = ${'sul_pulsante_'.$click}[$indirizzo]+1 ;
    
            }else{
                ${'sul_pulsante_'.$click}[$indirizzo] = 1;
                  }
    ovviamente rimangono le domande di prima

  6. #26
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Terminate le vacanze mentali, ora voglio rimettermi per finire capire quanto si può.

    Perciò vorrei iniziare a chiedervi il metodo di ragionamento


    1)- guardo attentamente all'obiettivo che si vuole ottenere

    2)- verifico quali sono i dati in input al problema e alla loro struttura (il file di testo nel tuo caso)
    3)- disegno mentalmente il flusso di lavoro
    4)- scompongo il flusso di lavoro in parti definite
    5)- progetto cosa deve fare ogni singola parte del codice guardando anche ai sistemi da utilizzare (DB, file di output, uso di dati in memoria, ecc) ed al riutilizzo del codice (creazione di oggetti o di funzioni)
    6)- sviluppo le parti di codice in ordine di esecuzione (nel tuo caso, apertura del file, recupero dei dati, inserimento dei dati in una struttura più flessibile di quella originale, ecc)
    7)- testo il codice parte per parte e lo risistemo per correggere i bug o efficientarlo


    Considerando questo schema di Clasku


    Per il 1) vorrei ottenere un elenco dei diversi indirizzi ip che hanno cliccato sui due miei link p1 e p2, indicando per ognuno quanti click sono stati fatti su l'uno e sull'altro.

    2)i dati di input sono appunto il primo campo della riga (il tasto p1 o p2) ed il terzo campo della riga (indirizzo ip)

    e qui penso il modo di dover aprire il file di testo di ingresso e prelevare appunto il campo riga con indice 0 e quello con indice 2

    3) e 4) sono il vero problema come si fa a ragionare partendo da zero su questi punti, che poi vengono ad essere alla base di ciò che viene dopo.

    Grazie all'ultima soluzione postatami da Alhazred (quella a cui posso arrivare, ma che comq mi ha creato problemi visto che non ci sono arrivato da solo) posso immaginare che mi servono due array, ma partendo da zero (quando ho davanti ciò che voglio fare, ma non l'ho realizzato) come ci arrivo?
    quali sono i passaggi logici/mentali che ti fai?

    il 6) mi sembra fattibile una volta definiti i punti precedenti

  7. #27
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,191
    No, nel 2, nel tuo caso, controlli come è fatto il file, se contiene tutti i dati che ti servono e nel caso come integrare/modificare/elaborare le informazioni, ad aprire il file ci pensi nei passaggi successivi (direi dal 5 in poi)

    Nei passaggi 3 e 4 si tratta di studiare il percorso logico del tuo programma e come suddividerlo in azioni omogenee: in quel momento non devi per forza pensare agli array o alle funzioni che vuoi usare. Potresti, nel caso, immaginare di fare a mano quello che dovrebbe fare il tuo programma per ottenere quel risultato

  8. #28
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    Quote Originariamente inviata da clasku Visualizza il messaggio
    No, nel 2, nel tuo caso, controlli come � fatto il file, se contiene tutti i dati che ti servono e nel caso come integrare/modificare/elaborare le informazioni, ad aprire il file ci pensi nei passaggi successivi (direi dal 5 in poi)
    Nel caso non avessi qualche dato come si va a modificare o ad integrare?
    per esempio se non avessi l'indirizzo o per esempio manca il pulsante p1 o p2?

    insomma mi potresti indicare, per favore, un esempio?
    Quote Originariamente inviata da clasku Visualizza il messaggio
    Nei passaggi 3 e 4 si tratta di studiare il percorso logico del tuo programma e come suddividerlo in azioni omogenee: in quel momento non devi per forza pensare agli array o alle funzioni che vuoi usare. Potresti, nel caso, immaginare di fare a mano quello che dovrebbe fare il tuo programma per ottenere quel risultato
    Mi sono stampato il file testuale: l'ho davanti agli occhi e dico :

    -devo scorrere il file riga per riga.
    -devo prelevare da ogni riga queste info (il tasto cliccato e l'indirizzo)

    -al primo rigo devo memorizzare sia l'indirizzo che il tasto cliccato

    -al secondo rigo devo memorizzare di nuovo il tasto cliccato e l'indirizzo e vedere :


    • se il tasto cliccato e' uguale al precedente incremento di uno il contatore, se no, incremento un altro contatore
    • se e' lo stesso indirizzo non lo devo memorizzare , se e' diverso, lo devo memorizzare in un altro spazio e, legato a questo, devo memorizzare un contatore per il tasto cliccato.


    -al terzo rigo, lo stesso di prima, devo memorizzare di nuovo il tasto cliccato e l'indirizzo e vedere :


    • se e' lo stesso indirizzo del precedente non lo devo memorizzare , ma incrementare uno dei due contatori dei link cliccati



    • se e' l'indirizzo e' pari al primo, non lo devo memorizzare , ma incrementare uno dei due contatori dei link cliccati ,



    • se e' diverso, lo devo memorizzare in un altro spazio e, legato a questo, devo memorizzare un contatore per il tasto cliccato



    -cosi' via fino alla fine delle righe

    a me qui vengono subito di scrivere una serie di controlli che poi rendono difficile la realizzazione.
    Cosa c'e' di sbagliato nel mio modo di ragionare?

  9. #29
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,191
    non è mica sbagliato a prescindere, anche perché nei percorsi mentali non esiste un giusto o sbagliato ben definito

    provo a schematizzare, molto in breve, i passaggi che seguirei io (i numeri sono quelli del mio elenco di prima):
    1. devo fare analisi sui dati di un file di testo
    2. il file contiene una serie di righe, tutte con lo stesso tracciato e i dati sono sufficienti per le mie analisi
    3. il mio programma deve aprire il file di testo, leggerlo riga per riga, per ogni riga recuperare i dati, tenere memoria dei dati recuperati ed preparare un report leggibile in modo che possano essere analizzati
    4. il flusso di lavoro è composto da apertura file, recupero del dato, salvataggio e generazione report analitico
    5. progettazione:
      1. apertura del file e scorrimento righe: scelgo la modalità migliore messa a disposizione dal linguaggio di programmazione che ho scelto
      2. recupero dei dati: scelgo se usare funzioni per dividere la riga sulla base di separatori o tramite posizioni fisse
      3. salvataggio dei dati: scelgo se tenere tutto in memoria o se appoggiarmi ad un database (SQL, noSQL, file?)
      4. reporting: funzioni specifiche per ottenere in output il dato richiesto

    6. sviluppo il codice (in questa fase mi posso anche rendere conto che qualcosa potrebbe essere fatta diversamente)
    7. testo il codice e se serve faccio refactoring (a volte testando di rendi conto che si poteva fare meglio di quello che hai fatto)


    Questa è la sintesi, per ogni parte del codice poi c'è da pensare a gestione errori, logging, controlli sui dati in input, formattazione dei dati, ecc

  10. #30
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    306
    @Alhazred
    puoi dirmi anche la tua in merito all'ultima versione del codice??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.