Autore Topic: gestione memoria e moduli  (Letto 1117 volte)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
gestione memoria e moduli
« il: 20 Agosto 2013, 01:23:06 »
 Giorni scorsi avevo pubblicato correlazione fra programmi-2, ma non ho avuto risposte, domani lo elimino.
In realtà il problema che volevo sollevare era:
E' possibile con gambas utilizzare un qlalcosa simile ad include del c permettendo di smembrare un prog. lungo in moduli meglio gestibili e riutilizzabili?
Può sembrare una osservazione banale viste le dimensioni degli attuali blocchi di memoria, ma se il vostro prog è molto lungo e per di più utilizza dei database che restituiscono molti record, un oculato uso della memoria disponibile non guasta.
grazie giorgio 

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #1 il: 20 Agosto 2013, 10:00:08 »
Mi spiace che abbia interpretato il mio dire come una lamentela,non lo è, di certo sono un curioso indagatore che difficilmente  si appassiona a cose che non capisce poi per quanto riguarda gambas  mi piacerebbe trovare una sessione  ove confrontarci  con osservazioni buone e cattive; forse ci aiuterebbe a crescere.

Scomodare la mailing list internazionale non la ritengo una buona idea........................... mi considero un  semplice manovale.
Mandami un altra bella ragazza
giorgio.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #2 il: 20 Agosto 2013, 11:19:25 »
A dire la verità non ho letto il post che hai nominato, se mi metti il link vado a vedere.
Purtroppo, ogni tanto giro per il forum, e può capitare che qualche discussione sfugga al mio serio controllo...  :D
Come hai notato, però vuott è sempre sul chi vive...  ;D

Scherzi a parte, per non farla troppo specifica, dobbiamo tener conto che Gambas è un linguaggio orientato agli oggetti, per cui se viene creato un programma  non tenendo ben conto di questo, la scrittuar del codice diventa alquanto pesante se si tratta di grossi programmi, tenedo poi conto che diventa anche poco manutenibile.

Un buon studio della logica da applicare, e la scrittura di appositi moduli e classi, creati con la logica della programmazione ad oggetti, evita di costruire quei casermoni di programmi di difficile lettura.

Io provengo dal C/C++, ma di tantissimi anni fà. Sò bene l'utilità degli include, ma è da tener presente che il C trattasi di linguaggio un pelino sopra l'assembler, per cui molto a basso livello, ma con un eccezionale e profondo controllo anche sulla compilazione. Gli include erano appunto utilizzati come repository per rendere comuni alcune definizioni o parti di codice tra i vari pezzi di programma.
In gambas puoi fare lo stesso, ma in modo un pò diverso, in quanto quello che scrivi è codice diretto, e le definizioni sono appunto locazioni di memoria attive. La definizione di una costante è possibile, e la puoi definire all'interno di un modulo o una classe.
La pubblicazione di queste costanti viene definita in fase di dichiarazione, per cui la puoi rendere privata (visibile solo all'interno del modulo o classe), o pubblica. Ad oggi non è possibile dichiarare variabili e costanti in modo diverso, ad eccezione di STATIC che la rende viva per tutta la durata del programma.

Se vuoi degli esempi fammelo sapere, ma cerca di fare delle richieste mirate, in quanto altrimenti diventa complicato scrivere trattati qui sul forum...  :D

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #3 il: 20 Agosto 2013, 13:01:21 »
Il mio non è un lamento, ritengo però che gambas è un ottima relise che gli oggetti   rendono veloce e moderna poi è particolarmente semplice usarla.
Ritengo però che sia non consono adagiarsi su risultati raggiunti e fare un ulteriore passo avanti.
Mi spiego:
La discussione sul forum "correlazione fra programmi" per es affronta il problema d'un prog che ne chiama un altro (interessantissimo); per es dal prog in gambas "somma " richiamo "relazione totale" scrivo quanto devo poi ritorno a somma.
Se somma contiene  Fmain ed un modulo AA che a sua volta contiene variabili e routine e/o funzioni  pubbliche
"reazione totale" non è in grado di avere il supporto del modulo AA; "somma " e "relazione totale"  sono due cose completamente distinte a meno di qualche arg. passato in standard input.

Tutto il discorso nasce dal modo in cui gambas  implementa process,ma se non erro ogni routine crea un nuovo pid in tal caso perchè non può far in modo che legga  anche AA?

Il discorso è particolarmente complesso ed io scrivo come un asino  ma sono qui per ogni ulteriore approfondimento.
giorgio

 mio vecchio post :correlazione fra programmi-2 « inserito:: 17 Agosto 2013, 23:37:33 »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #4 il: 20 Agosto 2013, 13:50:49 »
Qui non si tratta di "asini", anche se ne abbiamo uno qui nel forum...  ;D

In verità ho un pò di difficoltà a seguire i tuoi discorsi ma, ad ogni modo, parlando di Process, il problema credo sia un'altro, o da prendere in tutt'altro verso.
Probabilmente non hai ancora un'idea chiara di cosa faccia Process, e il suo compito come funzionalità Gambas.
Process non è altro che una specie di shell, da cui lanciare eseguibili o script esterni al linguaggio, o anche procedure che fanno parte del linguaggio stesso (es. scrittura/lettura di un file). Come nella shell (es. in ambiente Linux), questo oggetto può catturare gli eventi scaturiti dal processo avviato, e ritornarli al programma chiamante. I dati che transitano dipendono ovviamente dall'eseguibile o dallo script lanciato e, ad eccezione del codice di ritorno (intendo quello che ritorna al sistema operativo) che è numerico, tutto il resto sono sottoforma di stringhe e/o caratteri.
I programmi o gli script avviati non possono ritornare oggetti, in quanto non compatibili e interpretabili solo dallo stesso programma, anche se chi ha avviato il processo è creato con lo stesso linguaggio. Questo perchè il passaggio avviene a livello di sistema operativo, che non sà cosa farci di questi dati, ma è pur vero che deve poterli rappresentare in qualche modo in output (ad es. su terminale).

Cosa inversa sarebbe invece la messa in piedi di un protocollo di comunicazione ad-hoc, che permetta di scambiare informazioni che altri programmi possano interpretare, saltando il sistema operativo. E' infatti questo il motivo per cui ci sono tanti protocolli in giro (vedi http, ftp, ldap, e via dicendo).

Cosa ancora più specializzata, sarebbe quella di usare locazioni specifiche di memoria, con cui i due programmi possono comunicarsi tra loro dati e oggetti. Questo potrebbe essere possibile in quanto la gestione avverrebbe in runtime, e i dati sarebbero trattati come codice puro.

Gambas, da quanto ne sò, non ha modalità o strumenti già pronti per istituire questi ultimi due tipi di comunicazione, ma con la versione 3 ha reso accessibili alcune funzioni a basso livello, che permettono l'accesso a basso livello della memoria (vedi Pointer e allocazione della memoria).

Comunque, gli approcci possono essere svariati e più o meno complessi, dipendemente da quello che si vuol fare.
Se il discorso viene basato solo su dati di base (es. stringhe o numeri), allora la gestione può divenire molto semplice.
Il passaggio dei dati può avvenire semplicemente passando stringhe, opportunamente formattate, che il programma chiamato/chiamante deve solo convertire. Questo ovviamente implica un più o meno semplice protocollo (vedi sopra), che ogni funzione deve rispettare per poter colloquiare.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #5 il: 20 Agosto 2013, 16:14:50 »
Gradisco stare in compagnia e chiarito che non sono il solo asino (almeno spero) vorrei puntualizzare il problema.

-E' evidente che avendo un programma enorme-(per es che ne contiene altri)  diventa molto più manegevole se posso smembrarlo in moduli da utilizzare poi alla bisogna, eventualmente con un modulo gestore di tutti i prog contenuti.
Ciò, come tu ricordi,  è possibile con relise come php....................
Se ben ricordo php fonda questa sua peculiarità  non su un particolare protocollo ma sfrutta un qualcosa molto simile al process di linux  e mi chiedevo se esisiste un qualcosa di simile in gambas o vale la pena imbarcarsi (al momento non vedo altre soluzioni)  nei creare un componente per es gb.process?
Al momento non vedo altra soluzione ed era questo il problema che stavo affrontando.
giorgio

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #6 il: 21 Agosto 2013, 11:55:24 »
Una cosa da precisare, ovvero gambas fà parte dei linguaggi ad alto livello "interpretati", per cui l'occupazione di memoria è relativa non al programma in sè, ma all'interprete.
Fai conto come se il programma sia un file di testo, occupa spazio su disco è vero, ma quello che poi occupa la memoria di sistema è l'editor che usi per leggere il contenuto del file.
Seguendo questo stesso esempio, se l'editor è fatto bene e predisposto alla lettura di file di grosse dimensioni, gestirà la memoria in modo da non caricare tutto il file, ma solo la porzione interessata. Se mettiamo il caso che il file di testo sia di 30/40Gbyte, sarebbe impossibile caricarlo tutto in memoria, a meno che tu non abbia un sistema megagalattico...  :D
Per i programmi binari, il discorso è infatti molto diverso, in quanto sono direttamente tradotti in linguaggio macchina, per cui non hanno la necessità di essere interpretati da programmi esterni. In questo caso una buona gestione della memoria è essenziale.
Anticamente si usava la tecnica degli overlay, ovvero pezzi di programma contenuti in appositivi file separati, caricati solo quando vengono richiamati, e rilasciati quando finisce la loro utilità. In alcuni casi gli overlay erano direttamente dentro lo stesso eseguibile, e il compilatore stesso si occupava, dietro apposite istruzioni, di caricare moduli presi all'interno del file. In questo caso il file veniva caricato in memoria solo in parte...
Dopo si è passati alle librerie esterne, vedi ad esempio le *so* in unix, oppure le dll in windoz.
Alla necessità di avere programmi meno voluminosi in partenza, si è però aggiunto lo scopo di renderli anche riciclabili, e quindi utilizzabili per altre funzioni.
Una chiave può essere utilizzata per prire un lucchetto, una porta, oppure avviare un motore... A questo punto si è reso opportuno creare appositi moduli specializzati, da utilizzare nelle diverse situazioni e soluzioni.

Per finire, quindi, lo scopo di ottimizzare la memoria deve partire, o da un semplice studio allo scopo di capire il funzionamento del linguaggio, oppure credo sia inutile in questa logica. L'unica cosa che credo sia il caso di intraprendere, è lo studio dell'utilizzo delle variabili e delle classi usate nei programmi, nel senso di ottimizzare l'uso che se ne fà, come lo si fà e perchè lo si fà, capire se è possibile velocizzare certe operazioni, segundo logiche e algoritmi diversi, e via dicendo. Insomma, quello che si fà in ambiente di programmazione al giorno d'oggi, in particolare se si tratta di creare applicazioni ad alto livello, con requisiti non eccessivamente stringenti (per stringenti intendo applicazioni ad esempio in real-time).

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #7 il: 21 Agosto 2013, 15:02:19 »
Grazie per la bella ed interessantissima intervento; dici però cose risapute degne più d'un trattato "storia del computer" e mal si prestano a rispondere alla mia domanda.
Non a caso mi riferivo alla tecnica dei processi che permette di passare da un prog ad un altro e viceversa.
Il sistema è di per se abbastanza semplice  e mi chiedevo se potrebbe valer la pena di trasformarla in un programma unico come se fosse composto da  due moduli  e chiedevo :

C'è qualcuno che ha provato tale soluzione?
Dove guardare per avere un esaustivo  rif sull'uso della memoria in gambas?
Le implementazioni per file interpretato sono possibili o crea dei problemi?

Non ritengo che ciò sia valido solo per programmi megagalattici.
Um prog  può essere anche un prog di più  moduli creati e riutilizzati alla bisogna e non capisco perché ciò non venga preso in considerazione per prog interpretati  e non si possa fare in run time con una  realise come gambas
grazie giorgio.

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 265
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #8 il: 23 Agosto 2013, 10:48:20 »
Dove guardare per avere un esaustivo  rif sull'uso della memoria in gambas?

Io forse non ho ben capito cosa intendi: i problemi di memoria, come dice il bravo md9327, non dipendono tanto dal tuo programma, a meno che non lo scrivessi da ubriaco inserendoci cento bottoni con immagini da 3 giga l'uno, quanto dalla memoria per i dati, e per  questo ci sono 1000 tecniche.
Per esempio, devi caricare 100000 record in memoria? Fai in modo di usare solo un indice, e tieni il minimo indispensabile attivo per quello che ti serve. Immagina tu voglia visualizzare, sempre per esempio, questi 100k record in una listview: questa in realta' ne mostrera' 20 o 30, tu allora tieni il conto di dove sei, e carichi solo quei 20 o 30 record. E in certi casi, con i db, estrai prima subset invece di lavorare con tutto l'archivio.
Se mi sono spiegato  :)

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #9 il: 23 Agosto 2013, 12:31:16 »
Mi scuso se non riesco ad esprimere quello che penso; ci riprovo.
Supponiamo d'aver scrito  dieci moduli t  A,B,C................. e di avere una serie di prog che li utilizzano,  è
probabile che avremmo un prog menù che gestisce il tutto per es:
prog menù ->  prog uno+ mod A, B,C+database
                      prog due + mod C,F+database
                      prog tre   + mod B, H, A+database
                      prog quattro +mod H,I,B,C+database
è probabile che lavorando in mono utenza tutto funziona pur con prog lunghi e complessi raggruppati in un unico prog e la ram è più che sufficiente usando show e hide,  ben diverso se il prog è su un server con numerosi accessi ove la memoria va centellinata (vero è che che ci sono molti modi per risolvere il problema  ma gambas non è tra questi.
La mia domanda era semplicemente accertare se vi erano stati tentativi per superare  quanto detto o se ci sono motivi ostativi per farlo.
C'è qualcuno che ha provato a risolverlo usando i pid di process?
grazie giorgio

                     

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #10 il: 23 Agosto 2013, 14:52:07 »
Se entriamo nel discorso client-server, allora la cosa si fà un bel pò più complessa, tenendoconto che gambas non ha tutte le caratteristiche e le funzionalità per poter gestire in modo semplice questa logica.
Tanto per fare un esempio, non gestisce i thread...

Detto questo, se necessario, la logica da implementare diventa un pò diversa dal classico modo di approciare il discorso, avendo a disposizione linguaggi più evoluti.
Anche se non dovrei, possiamo considerare gambas più alla stregua di visual-basic, e non possiamo compararlo con un java (per esempio).
Di solito questi linguaggi (vb e gambas) sono indicati più per applicazioni stand-alone, o in modalità client-server ma solo se il "server" fornisce il database, o la logica business. In questo caso il linguaggio serve mediamente per creare la parte interfaccia utente (es. un web server).

Ora, questa è una parte del discorso, poi ne viene un'altra.

In che ambiente andiamo ad operare? Quando si parla di client-server, il discorso è alquanto generalizzato, ma mettiamo il caso di voler creare un applicazione web. In questo caso possiamo anche prendere in considerazione gambas, per quanto riguarda la parte server (per il client ovviamente abbiamo il solo browser...). Costruire un'application server è relativamente semplice, e lo si può anche vedere negli esempi a corredo.

La gestione della memoria... Per questo discorso prendiamo in considerazione un linguaggio come il PHP. Anche questo linguaggio è interpretato, anzi è completamente interpretato, perchè gambas esegue invece una mezza compilazione, preparando appositamente un para-eseguibile che l'interprete può eseguire un pò più velocemente. Quindi, ritornando al php, il discorso memoria diventa uguale a quello di gambas. mediamente in un programma web, il motore del server non fà altro che elaborare le richieste provenienti dalla rete, e creare più o meno dinamicamente delle pagine html. La dimensione di queste pagine, dato che sono testo puro, possono influire sull'utilizzo della memoria, ma questo dipende esclusivamente da come uno ha sviluppato la funzionalità di creazione. Se non per puro sudio, non possiamo andare ad analizzare cosa fà php e come lo fà riferito alla memoria, a meno che questo non influisca sulle performance. In ogni caso il problema è mediamente un errore di programmazione, in quanto php fornisce funzioni di base, che tra l'altro sono state scritte in C. Sempre per studio possiamo andare ad analizzare cosa fanno queste routine a basso livello, ma siamo sempre sul discorso teorico, in quanto queste routine sono state testate e ottimizzate nel tempo, e quindi poco correggibili (bug a parte).
In gambas siamo allo stesso livello. Gambas è costruito su un substrato scritto in C, e in gran parte si appoggia a librerie esterne che, mediamente, sono già ottimizzate di loro. In questo caso mi pare superfluo andare a capire cosa gambas fà e come lo fà nei confronti della memoria, perchè in gran parte non dipende da questo linguaggio.

Ritornando alla logica web client-server, l'ottimizzazione si fà eseguendo uno studio approfondito di cosa deve fare un'applicativo, e dalle risorse a disposizione. E' ovvio che non possiamo pensare di costruire un applicazione per 1 milione di utenze contemporanee con un pc portatile... Le risorse di solito si implementano in base alle esigenze applicative e, se non è possibile, allora si cerca di gestire l'applicativo in modo da farlo girare con quelle a disposizione.

Per rispondere alla tua ultima domanda, penso che nessuno o pochissimi hanno avuto a che fare con la costruzione di applicazioni client-server, o
perlomeno che abbiano avuto a che fare un applicazioni seriamente client-server, se non per sudio o per piccoli ambienti di lavoro.

Per il discorso se gambas può essere utilizzato per la costruzione di questo tipo di ambienti, direi che ci può stare, ma sarei più dell'opinione di cercare linguaggi più indicati a questo tipo di approccio, in quanto grandemente sviluppati e testati proprio e quasi esclusivamente queste applicazioni.

Ora ritorniamo al semplice discorso sullo spacchettamento di un programma gambas. Come credo di avere accennato in precedenza, la cosa credo sia alquanto inutile, in quanto l'interprete gestisce da solo le operazioni di caricamento e scaricamento oggetti e moduli, similarmente a quanto fà java. Un'applicazione è un'applicazione, che deve fare un determinato compito. Diversamente è invece il discorso alla riutilizzazione del codice, ovvero alla creazione di librerie che possono essere utilizzate anche in altri programmi (come poi sono gli oggetti grafici che vedi nell'ide di gambas, e che ti copy nelle tue form). In questo caso la cosa è altamente auspicabile, in quanto ti rende più semplice lo sviluppo, e ti evita di affrontare sempre le stesse cose trite e ritrite. Le librerie possono essere i sorgenti stessi di funzioni e classi create ad-hoc, oppure proprio librerie create con gambas (puoi leggere molto anche qui nel forum a riguardo). Inoltre, puoi agganciarti anche a librerie esterne, da cui attingere a attue o ad alcune delle loro funzioni (anche qui di studi ed esempi ne trovi a iosa).

Per riassumere, la tua ricerca la vedo inutile o quasi se indirizzata all'operatività vera e propria, ma la potrei vedere interessante a livello di studio. In ogni caso ogni approfondimento deve essere fatto a livello subatomico, nel senso che dovresti andarti a leggere i sorgenti di gambas, per capire il suo funzionamento (cosa che può essere alquanto interessante, e che dà spunti e suggerimenti interessanti).

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #11 il: 23 Agosto 2013, 15:51:06 »
La tu risposta è coerente e convincente  ed io ne prendo umilmente atto.
Ti rammento però:
1-Se fosse possibile utilizzare il costrutto da me riportato anche in un prog come gambas sarebbe una gran cosa.
2-Se ben ricordo il kernel  di linux  crea un process per ogni daemon .............e/o subroutine e mi sembra strano che forti di tale potenzialità del kernel, tutto ciò non si possa utilizzare per collegare in run time o no vari moduli
di gambas.
3-Anche se a prima vista sembra un discorso inutile e forse solo teorico con grossi problemi inerenti  all'impostazione dello stesso prog gambas, forse gli farebbe fare un salto di qualità avvicinandolo al C.
4- Ne tentare di provarci a realizzarlo trovo difficoltà a capire come gambas tratta la memoria ed implementa il suo ide.l
giorgio.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #12 il: 25 Agosto 2013, 17:30:20 »
Forse stiamo facendo un pò di confusione...

Con gambas, e dato che gira sotto linux, si possono creare processi separati. Dopotutto sono comunque applicazioni a sè stanti, e che il sistema associo il pid che tu hai menzionato, come identificativo di un processo attivo in memoria.
Il problema, ma forse ho compreso non molto bene, è che tu vorresti far parlare tra loro processi diversi. Questo è fattibile usando le accortezze e logiche applicate anche in altri linguaggi (te ne ho descritte alcune).
Quello che non è possibile fare, e che nessun linguaggio ha di suo di base, è quello di trasferire ad altri processi, i propri componenti di runtime. Per spiegarmi, non puoi direttamente trasferire classi e oggetti tra applicazioni diverse. Questo non lo fà nessun linguaggio, almeno di base.
Un esempio: tu puoi creare un programma master che ne avvia un'altro, un child. Il componente child è in parte controllabile dal master, ma solo a livello di sistema, ovvero passando per il sistema operativo. Puoi, per esempio, avviare una sessione di firefox, ma non puoi interagire direttamente con esso. Questo è solo possibile farlo inviando comandi specifici al sistema operativo, indicandogli il processo di destinazione. Ad esempio potresti simulare la pressione di un tasto, che magari firefox associa al caricamento di una pagina web, ma il master poi non sà nulla se il processo ha completato l'operazione o meno, a meno che firefox non ritorni al sistema un codice di errore o di stato.
Ecco, il discorso è proprio il passaggio, tramite sistema operativo, di uno stato, relativamente alla chiamata del child con passaggio eventuale di parametri.

Tanto per fare un'altro esempio, prendendo come spunto la logica di base di apache. Questo è un server che avvia un certo numero di processi a sè stanti (gambas al momento non può farlo perchè non gestisce i thread), ognuno risponde ad una determinata sessione, aperta verso un client che ne ha fatto richiesta. Il passaggio di dati avviene tramite una porta specifica (es. 80), e comunica attraverso un determinato protocollo (http). Apache non ha modo di passare i suoi oggetti interni, nè può riceverne perchè capisce solo il protocollo http, che poi non è altro che un formato ascii, con tag specifici.

In definitiva, il sistema operativo è il manager che gestisce i processi, ma non interviene nel modo con cui questi comunicano tra loro. Se un processo non accetta input esterni, rimane un processo funzionante ma a sè stante, altrimenti dispone delle funzioni specifiche per poter effettuare una comunicazione, il cui tipo è definito da un protocollo.

Offline giob1642

  • Grande Gambero
  • ***
  • Post: 159
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #13 il: 25 Agosto 2013, 19:53:58 »
condivido quanto dici ma m'intriga l'idea di avere due processi (prog) ed una zona di swap punto di riferimento delle varie operazioni dello stack
giorgio

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: gestione memoria e moduli
« Risposta #14 il: 26 Agosto 2013, 10:40:40 »
Ehehehhe, questa è una cosa buona, la curiosità!  :ok: