Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Programma java che "sfasa"

    Salve a tutti.
    Premetto che sono alle prime armi con la programmazione java(fin ora ho solo implementato algoritmi "scolastici").
    Sono alle prese con un programmino che dato un Database,di circa 4000 voci, deve reperire informazioni su di un sito.
    Dato che le pagine del sito sono"statiche" ho pensato di:
    1) scaricare per ogni voce la sorgente per prelevarvi le informazioni.
    2)salvare le informazioni su un file txt
    3) creare pure un file html per poter visualizzare pure le immagini.
    Mi sussistono 2 problemi.

    1) tempo eccessivo. praticamente (per ogni voce) impiega 8 secondi, di cui 6 solo per collegarsi all'url
    2) Per renderlo "leggibile" ho pensato di aggiungere una nuova riga ogni 50 caratteri.
    Tutto ok per le primi voci, ma col passare del tempo mi "sfasa", mi trovo righe con molto più di 50 caratteri.

    La parte dell' impaginazione è dovuta a questo pezzo di codice

    bw.write("Commenti :");
    bw.newLine();
    sem=0;
    for(int i=0;i<commenti.length();i++)
    {
    c=commenti.charAt(i);
    sem++;
    if((c==' ')&&(sem>50))
    {bw.newLine();sem=0;}
    bw.write(c);
    }

    Ho messo pure una chiamata al Garbage collector ogni 50 voci.
    Come posso risolvere?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Ci vuole la sfera di cristallo per capirci qualcosa.
    Non mi dilungo sul fatto che quel codice è pesante per sua natura... sono certo che, qualunque cosa tu voglia fare (boh!), la si potrebbe fare con meno codice e/o molto meglio di ciò che stai facendo.

    Ad ogni modo:

    codice:
    if((c==' ')&&(sem>50)){
       bw.newLine();sem=0;
    }
    Cosa succede se il carattere "c" non è uno spazio? Risposta... non entrerà mai nel corpo dell'if... qualunque sia il valore di "sem": 51, 500, 5000, 10000....

    Ecco spiegata la "sfasatura".


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Se non è uno spazio deve saltare l'if.
    Siccome è un articolo, non mi sembrava il caso di troncare una parola, cosi ho pensato di farlo andare a capo solo se trova un carattere vuoto.
    Capisco che è molto disordinato.
    Spiego indicando un link dal quale devo prendere le info(spero non ci siano problemi).
    Praticamente le pagine sono tutte così.
    http://mirtarbase.mbc.nctu.edu.tw/ph...tid=MIRT005470
    Nel DataBase che ho ho i 4000 codici "MIRT005470" che variano in base all'articolo.
    Di tale pagina devo prendere informazioni presenti nelle schede
    miRNa, target gene, evidences.
    Dato che non ho mai programmato cercando di prelevare informazioni da un sito, ho pensato tramite il codice:

    bw=new BufferedWriter(new FileWriter("supporto.txt"));
    url= new URL(indirizzo);
    urlConn= url.openConnection();
    dis= new BufferedReader(new InputStreamReader((url.openStream())));

    di prelevare la sorgente html, per poi renderla "leggibile" andando a capo ogni '>'.
    La parte che impiega più tempo è quella scritta sopra, quelle 4 righe fanno perdere più di 6 secondi.
    I restanti secondi vengono impiegati per:
    1) salvare la pagina prelevata su di un file.
    2) elaborare le informazioni di questo file, prelevando solo le voci che mi interessano(non sono tutte quelle presenti nell'articolo).
    3) Creare una sorta di Database in txt in cui vengono indicate le informazioni e l'url dell'immagine "miRNA-target interaction network"
    4) Creare un Html per poter visualizzare tutte le voci, comprensive di immagini.
    Se vi è un metodo più veloce sono tutt'orecchi.

  4. #4
    scusa la banalità, ma prendere direttamente i dati dal database?
    facendo come dici te non penso che il codice sarà mai granchè veloce.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da salvo19881
    Se non è uno spazio deve saltare l'if.
    Siccome è un articolo, non mi sembrava il caso di troncare una parola, cosi ho pensato di farlo andare a capo solo se trova un carattere vuoto.
    Capisco che è molto disordinato.
    Spiego indicando un link dal quale devo prendere le info(spero non ci siano problemi).
    Praticamente le pagine sono tutte così.
    http://mirtarbase.mbc.nctu.edu.tw/ph...tid=MIRT005470
    Nel DataBase che ho ho i 4000 codici "MIRT005470" che variano in base all'articolo.
    Di tale pagina devo prendere informazioni presenti nelle schede
    miRNa, target gene, evidences.
    Dato che non ho mai programmato cercando di prelevare informazioni da un sito, ho pensato tramite il codice:

    bw=new BufferedWriter(new FileWriter("supporto.txt"));
    url= new URL(indirizzo);
    urlConn= url.openConnection();
    dis= new BufferedReader(new InputStreamReader((url.openStream())));

    di prelevare la sorgente html, per poi renderla "leggibile" andando a capo ogni '>'.
    La parte che impiega più tempo è quella scritta sopra, quelle 4 righe fanno perdere più di 6 secondi.
    Guarda... il mio browser per aprire quella pagina ci ha impiegato circa 8 secondi (e qui in azienda abbiamo una linea HDSL), quindi non è tanto questione di quel codice, quanto del server dall'altra parte che ci mette davvero tanto a restituire una risposta.

    I restanti secondi vengono impiegati per:
    1) salvare la pagina prelevata su di un file.
    2) elaborare le informazioni di questo file, prelevando solo le voci che mi interessano(non sono tutte quelle presenti nell'articolo).
    3) Creare una sorta di Database in txt in cui vengono indicate le informazioni e l'url dell'immagine "miRNA-target interaction network"
    4) Creare un Html per poter visualizzare tutte le voci, comprensive di immagini.
    Se vi è un metodo più veloce sono tutt'orecchi.
    Non ho capito ancora perchè devi stare lì ad elaborare il risultato della pagina, carattere per carattere, per cercare di renderlo "più leggibile". Salvalo così com'è ed, eventualmente, la rielaborazione falla dopo.


    codice:
    FileWriter fw = new FileWriter("supporto.txt");
    BufferedWriter br = new BufferedWriter( fw );
    PrintWriter pw = new PrintWriter( br );
    BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream() );
    String linea = null;
    while((linea = br.readLine()) != null) {
       pw.println( linea );
    }
    pw.flush();
    
    // Gestire poi la chiusura del file e dell'InputStream
    Questo metodo legge delle intere righe e le scrive così come sono su un file (ho sbirciato il sorgente di quella pagina e mi pare che sia più che leggibile così com'è, senza intervenire a contare i 50 caratteri).

    Ripeto: la maggior parte del tempo è dovuta all'attesa della risposta dal server.

    Ho effettuato un test con questo codice:

    codice:
    import java.io.*;
    import java.net.*;
    import java.text.*;
    import java.util.*;
    
    public class LeggiPagina {
       private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    
       public static void main(String[] args) {
          FileWriter fw = null;
          BufferedWriter bw = null;
          PrintWriter pw = null;
          try {
             System.out.println(getOra() + " Creo l'oggetto URL");
             URL url = new URL("http://mirtarbase.mbc.nctu.edu.tw/php/detail.php?mirtid=MIRT005470");
             fw = new FileWriter("controlli.txt");
             bw = new BufferedWriter( fw );
             pw = new PrintWriter( bw );
             System.out.println(getOra() + " Apro la connessione");
             BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream()) );
             String linea = null;
             System.out.println(getOra() + " Inizio la lettura della risposta dal server");
             while((linea = br.readLine()) != null) {
                pw.println( linea );
             }
             System.out.println(getOra() + " Ho finito");
             pw.flush();
             br.close();
          } catch (Exception e) {
          } finally {
             if (pw != null) {
                try { fw.close(); } catch (Exception e) { }
             } else {
                if (bw != null) {
                   try { bw.close(); } catch (Exception e) { }
                } else {
                   if (fw != null) {
                      try { fw.close(); } catch (Exception e) { }
                   }
                }
             }
          }
       }
    
       private static String getOra() {
          return sdf.format( new Date() );
       }
    }
    Questo è il mio output:

    codice:
    17:51:18 Creo l'oggetto URL
    17:51:18 Apro la connessione
    17:51:26 Inizio la lettura della risposta dal server
    17:51:26 Ho finito
    8 secondi solo per ricevere risposta... lettura, scrittura e chiusura sono istantanee.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Purtroppo nel Database sono presenti solo gli ID e il nome del gene in questione.
    Le altre informazioni( commenti, articolo, interazione con altri pezzi di microRna ecc) non sono presenti.
    Per quanto riguarda la velocità anche io penso possa fare ben poco, dato che i tempi di connessione non dipendono dal programma( se però è possibile reperire la sorgente di una pagina html con altri metodi, magari più veloci ne sarei felicissimo).
    Quello che invece, penso, si possa risolvere, è il discorso che dopo un tot di ricerche comincia a sfasare.
    Penso sia un problema dovuto alla memoria, ma con l'istruzione System.gc(); che sto usando, "suggerisco" al Garbace collector di agire(correggetemi se sbaglio).
    Ci sono metodi per poter liberare la memoria?

    Leleft
    Il discorso della leggibilità con i 50 caratteri non è voluta sulla pagina html salvata(in quella vado a capo ogni volta che trovo il carattere '<' in modo che , in fase di elaborazione, posso andare a lavorare per righe)ma, sui contenuti lunghi(commenti, articoli, descrizione).
    Inoltre fosse solo 8 secondi sarebbe buono ma 8 secondi a voce su 4000 voci diventa esoso, per questo speravo in soluzioni più prestanti.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Il problema della sfasatura non dipende dalla memoria, non dipende dal richiamo del GC... dipenderà da qualcos'altro... se c'è (variabili sporche? Boh).

    Non ho ben capito cosa dovrebbe contenere la stringa "commenti" del codice che hai postato per cui non ti saprei dire.

    Poi... fra una lettura e l'altra non effettui un newLine() quindi l'ultima parte della lettura precedente viene attaccata alla prima della lettura successiva.

    E non è possibile risalire al sorgente HTML di una pagina in altro modo che non quello, a meno che non sia il sito a mettere a disposizione modi diversi (protocollo FTP?)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Per quanto riguarda le variabili sporche non credo.
    Praticamente vado a creare 4000 oggetti , ogni 50 si dovrebbe fare un pò di pulizia(se il GC accetta il suggerimento).

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da salvo19881
    Per quanto riguarda le variabili sporche non credo.
    Praticamente vado a creare 4000 oggetti , ogni 50 si dovrebbe fare un pò di pulizia(se il GC accetta il suggerimento).
    La GC di Java lavora benissimo anche senza suggerimenti, fidati. Non che faccia male la chiamata al GC, solo non la vedo necessaria in queste circostanze.

    Ad ogni modo non mi è chiaro quanti file crei, che informazioni ci sono dentro la variabile "commenti" che tu vai a salvare sul file 50 caratteri per riga; nel caso di un unico file, se effettui una newLine() alla fine di ciascuna connessione in modo da ricominciare sempre su una riga nuova...

    Prova a postare un po' più di codice (usando i tag CODE).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Praticamente creo 3 File
    supporto.txt
    Database.txt
    Database.html

    Il primo è quello in cui vado a salvare le varie pagine html(una alla volta e sovrascrivo ogni nuova pagina).
    il secondo è dove salvo tutte le informazioni e sarà del tipo(posto la prima voce)

    ID :
    ath-MIR156a

    specie :
    Arabidopsis thaliana

    gene cercato :
    SPL3

    descrizione :
    Arabidopsis thaliana miR156a stem-loop

    Commenti :
    MIR156a is found on chromosome 2 in Arabidopsis thaliana
    .

    nome del gene :
    SPL3

    UTR :
    TAAAGACGGTGAAACGTGTGAGATCCCGGTTTGAAGGTTAATGAAACAGG
    CTTTGCTTACTCTCTTCTGTCAGTCTCTTTTAGCTCCTTGTAATCCTCTG T
    GTCTCTGTCTGTTTCTCCATATTACCTGTAATCAAAGCTATCTGCTAAAC C
    TACGACATGGTTAAATAAATGCATTGAGACTTAGTAAATGCTTGAAGAAA T
    TATGTGTAATAACTCTTTAAACTTGTCAAATGTTATTTCAAGCC

    Target Interaction network :
    http://mirtarbase.mbc.nctu.edu.tw/tm...4629075798.png

    target dell'autore:
    GCTTTGCTTACTCTCTTCTGTCAGTC

    con posizione
    50

    Articolo :
    miRNAs are a class of versatile small RNAs that control
    gene expression post-transcriptionally, governing many
    facets of plant cell functions. They interact with
    their target mRNA at a site of sequence complementarity
    and modulate their expression levels. Here, we provide
    evidence, based on transient assays and stable transgenic
    lines, that the 3' UTR of the Arabidopsis SBP box gene
    SPL3 contains a functional miRNA-responsive element
    (MRE) that is complementary to miR156 and miRNA157.
    Seedlings of transgenic lines constitutively over-expressing
    an SPL3 transgene either carrying an unaltered or a
    disrupted MRE accumulate considerable levels of SPL3
    transcripts. However, while the unaltered MRE UTR does
    not allow the expression of detectable levels of SPL3
    protein, the altered MRE does. Translational inhibition
    thus provides an important mechanism for miRNA-mediated
    post-transcriptional repression of SPL3. As a consequence
    of precocious translation of the constitutively expressed
    SPL3 transgene, due to the absence of a functional
    MRE, plants exhibit very early flowering in addition
    to frequent morphological changes.

    Interazione
    miRNA 3' caCGAGUGAGAGAAGACAGu 5'
    |||:|||||||||||||
    Target 5' uuGCUUACUCUCUUCUGUCa 3'

    metodi usati :
    GFP reporter assay
    Il mio problema è che dopo tot , mi trovo articoli simili

    ID :hsa-mir-17
    specie :Homo sapiens
    gene cercato :SELE
    descrizione :Homo sapiens miR-17 stem-loop
    Commenti :Two groups independently reported miRs derived from the same precursor. Lagos-Quintana et al. .
    nome del gene :SELE
    UTR :TAAGTTCAAAAGAATCAGAAACAGGTGCATCTGGGGAACTAGAGGGATA CACTGAAGTTAACAGAGACAGATAACTCTCCTCGGGTCTCTGGCCCTTCT TGCCTACTATGCCAGATGCCTTTATGGCTGAAACCGCAACACCCATCACC ACTTCAATAGATCAAAGTCCAGCAGGCAAGGACGGCCTTCAACTGAAAAG ACTCAGTGTTCCCTTTCCTACTCTCAGGATCAAGAAAGTGTTGGCTAATG AAGGGAAAGGATATTTTCTTCCAAGCAAAGGTGAAGAGACCAAGACTCTG AAATCTCAGAATTCCTTTTCTAACTCTCCCTTGCTCGCTGTAAAATCTTG GCACAGAAACACAATATTTTGTGGCTTTCTTTCTTTTGCCCTTCACAGTG TTTCGACAGCTGATTACACAGTTGCTGTCATAAGAATGAATAATAATTAT CCAGAGTTTAGAGGAAAAAAATGACTAAAAATATTATAACTTAAAAAAAT GACAGATGTTGAATGCCCACAGGCAAATGCATGGAGGGTTGTTAATGGTG CAAATCCTACTGAATGCTCTGTGCGAGGGTTACTATGCACAATTTAATCA CTTTCATCCCTATGGGATTCAGTGCTTCTTAAAGAGTTCTTAAGGATTGT GATATTTTTACTTGCATTGAATATATTATAATCTTCCATACTTCTTCATT CAATACAAGTGTGGTAGGGACTTAAAAAACTTGTAAATGCTGTCAACTAT GATATGGTAAAAGTTACTTATTCTAGATTACCCCCTCATTGTTTATTAAC AAATTATGTTACATCTGTTTTAAATTTATTTCAAAAAGGGAAACTATTGT CCCCTAGCAAGGCATGATGTTAACCAGAATAAAGTTCTGAGTGTTTTTAC TACAGTTGTTTTTTGAAAACATGGTAGAATTGGAGAGTAAAAACTGAATG GAAGGTTTGTATATTGTCAGATATTTTTTCAGAAATATGTGGTTTCCACG ATGAAAAACTTCCATGAGGCCAAACGTTTTGAACTAATAAAAGCATAAAT GCAAACACACAAAGGTATAATTTTATGAATGTCTTTGTTGGAAAAGAATA CAGAAAGATGGATGTGCTTTGCATTCCTACAAAGATGTTTGTCAGATATG ATATGTAAACATAATTCTTGTATATTATGGAAGATTTTAAATTCACAATA GAAACTCACCATGTAAAAGAGTCATCTGGTAGATTTTTAACGAATGAAGA TGTCTAATAGTTATTCCCTATTTGTTTTCTTCTGTATGTTAGGGTGCTCT GGAAGAGAGGAATGCCTGTGTGAGCAAGCATTTATGTTTATTTATAAGCA GATTTAACAATTCCAAAGGAATCTCCAGTTTTCAGTTGATCACTGGCAAT GAAAAATTCTCAGTCAGTAATTGCCAAAGCTGCTCTAGCCTTGAGGAGTG TGAGAATCAAAACTCTCCTACACTTCCATTAACTTAGCATGTGTTGAAAA AAAAGTTTCAGAGAAGTTCTGGCTGAACACTGGCAACAACAAAGCCAACA GTCAAAACAGAGATGTGATAAGGATCAGAACAGCAGAGGTTCTTTTAAAG GGGCAGAAAAACTCTGGGAAATAAGAGAGAACAACTACTGTGATCAGGCT ATGTATGGAATACAGTGTTATTTTCTTTGAAATTGTTTAAGTGTTGTAAA TATTTATGTAAACTGCATTAGAAATTAGCTGTGTGAAATACCAGTGTGGT TTGTGTTTGAGTTTTATTGAGAATTTTAAATTATAACTTAAAATATTTTA TAATTTTTAAAGTATATATTTATTTAAGCTTATGTCAGACCTATTTGACA TAACACTATAAAGGTTGACAATAAATGTGCTTATGTTTA





































    Target Interaction network :

    Articolo : MicroRNAs (miRNAs) pair with target sequences in the 3' untranslated region of mRNAs to posttranscriptionally repress gene expression. In this study, we report that TNF-mediated induction of endothelial adhesion molecules can be regulated by miRNAs that are induced by TNF. Specifically, E-selectin and ICAM-1 are targets of TNF-induced miRNAs miR-31 and miR-17-3p, respectively. Specific antagonism of these TNF-induced miRNAs increased neutrophil adhesion to cultured endothelial cells. Conversely, transfections with mimics of these miRNAs decreased neutrophil adhesion to endothelial cells. These data suggest that miRNAs provide negative feedback control of inflammation.












    metodi usati :Luciferase reporter assay
    Per quanto riguarda il codice posso anche postarlo ma è veramente lungo.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.