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 - md9327

Pagine: 1 ... 3 4 [5] 6 7 ... 190
61
Programmazione / Re: Idea su una libreria comune e condivisa
« il: 26 Agosto 2013, 12:42:34 »
 :ok:

62
Programmazione / Re: gestione memoria e moduli
« il: 26 Agosto 2013, 10:40:40 »
Ehehehhe, questa è una cosa buona, la curiosità!  :ok:

63
Debian, Ubuntu e derivate / Re: file.txt
« il: 25 Agosto 2013, 17:32:58 »
Ma forse sono file in formato html?

64
Programmazione / Re: gestione memoria e moduli
« 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.

65
Debian, Ubuntu e derivate / Re: file.txt
« il: 23 Agosto 2013, 14:56:30 »
Guardando dentro le varie distribuzioni si trovano file.txt con codici non asci che probabilmente indicano dadi d'input dell'utente; qualcuno sa spiegami come viene usato gedit in tali occasioni?
Grazie giorgio
File.txt? Distribuzioni?

A cosa ti riferisci?

67
Programmazione / Re: gestione memoria e moduli
« 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).

68
Programmazione / Re: Idea su una libreria comune e condivisa
« il: 22 Agosto 2013, 22:28:08 »
Si, infatti, altrimenti si perde il filo.

Ad ogni modo ho spostato questa discussione in testa, così da evidenziarla.

Inoltre, sul repository su sourceforge, oltre a creare le tre cartelle di cui avevo parlato nella discussione, ho aggiunto una branch, identificata dal nome "1.0", che conterrà i sorgenti dello sviluppo per le tutte le versioni dalla 1.0.0 fino alla 1.0.999 e via dicendo. Quando si deciderà di passare ad una release superiore, ad esempio la 1.1.0, si creerà un'altra branch targata "1.1", e così via.

In parole povere, l'idea è questa:

1) la cartella branches, conterrà i sorgenti dello sviluppo continuo di un range di sotto versioni
2) una volta deciso che si è raggiunto l'ok dei sorgenti, si decide di crearne una release definitiva pubblicabile (es. 1.0.0, 1.0.1 e così via). Lo stesso vale sulle versioni successive (es. 1.1.0, 1.1.1, ...) (es. 2.0.0, 2.0.1, ...).
3) la release definitiva viene congelata, facendo una copia nella cartella trunk, e soto un'ulteriore cartella nominata come la versione (es. trunk/1.0.0).
4) per utilizzare una release specifica, quindi facendo un download per i nostri programmi, basta accedere al repository, posizionandosi nella cartella trunk/<release> che ci serve. Questo permette a chiunque di usare la release desiderata, cosa auspicabile se si dispone di versioni di gambas diverse, che potrebbero portare ad alcune incompatibilità.
5) lo sviluppo comunque continua sempre, tocca solo stare attenti su quale branch andiamo ad operare.
6) per il momento la cartella trunk non verrà usata.
7) nella rispettiva cartella branch andremo a creare un'ulteriore cartella, che identificherà la singola libreria. In questo modo, chi opera su quella libreria non và ad interferire sulle altre. Oltre a questo, la logica ci permette di separare in gruppi le varie librerie in base alle loro funzionalità (es. clib.network, clib.xml, clib.database, clib.desktop, ...)

Se vai sul repository, vedrai che per ogni cartella viene riportato il comando utile per crearsi la propria copia locale:
Codice: [Seleziona]
svn checkout --username=<utente> svn+ssh://<utente>@svn.code.sf.net/p/the-big-clib/code-0/ the-big-clib-code-0
E' ovvio che il comando indicato serve solo a chi è registrato al repository della libreria clib, e perchè deve scaricarsi i sorgenti per poterli modificare e aggiornare a sua volta il repository.

Tanto per spiegare cosa significa la riga di comando:
svn: il comando per gestire subversion
checkout: il parametro che indorma svn di fare lo scaricamento dei sorgenti in una cartella locale (nel proprio pc)
--username: identifica l'utente che accede al repository. In questo caso è necessario solo perchè come amministratore, o utente registrato alla libreria clib, ho i diritti di lettura/scrittura.
protocollo://utente@url: accede alla cartella virtuale del repository (così come la vedi su sf.net. E' sottinteso che il comando è impostato per scaricare completamente tutta la struttura della libreria clib. Nel caso non sia necessario, si può delimitare il download solo a una certa branch/versione, magari perchè si vuole lavorare esclusivamente su quella. La cosa non è auspicabile, in quanto è possibile che il nostro codice vada ad agganciarsi ad altre funzioni contenute in altre librerie.
ultimo parametro: in realtà questo è facoltativo, e indica a svn di creare la copia locale nella cartella indicata (the-big-clib-code-0), che verrà creata automaticamente sotto la directory cui si correntemente posizionati (es. se si è in /home/utente, la nuova cartella verrà creata sotto questa: /home/utente/the-big-clib-code-0).

Una volta scaricata la nostra copia locale, possiamo aprire il nostro gambas e andare ad operare sul codice. Terminate le modifiche, o anche fatte solo in parte, si può decidere di aggiornare il repository con le nostre modifiche. In pratica, da ora in poi, i comandi che verranno utilizzati sono pochissimi:
Codice: [Seleziona]
svn update
verifica le differenze tra la nostra copia e il repository e, nel caso, aggiorna la nostra copia con le nuove modifiche effettuate da altri programmatori.

Codice: [Seleziona]
svn status
visualizza lo stato dei file, se aggiunti, modificati, o altro

Codice: [Seleziona]
svn commit -m "sommario delle modifiche"
il parametro -m è facoltativo, ma è utilissimo per commentare gli aggiornamenti effettuati, e quindi facilità il compito anche agli altri programmatori.

Per chi, invece, vorrà scaricarsi una delle versioni pubblicate e congelate, potrà accedere direttamente nella cartella trunk/<release>, scaricandosi i sorgenti (che nessuno poi toccherà in quanto congelati).

Un'altra possibilità è quella di fornire le versioni in pacchetti, anche solo contenuti in file compressi. In questo caso è necessario che un amministratore costruisca il pacchetto e lo scarichi sempre su sf.net (ci sono apposite procedure per farlo, anche piuttosto semplici). Questo ci permette di pubblicare direttamente i sorgenti in un unico file (può anche essere un rpm, ad esempio). Questo file verrà visualizzato nel sommario di sourceforge, e chiunque potrà scaricarlo direttamente dal sito con un semplice click.


Spero che quello che ho scritto sia esauriente, ad ogni modo se qualcuno ha dei dubbi o quesiti da porgere, sono qui, nel limite delle mie possibilità e conoscenze.

69
Programmazione / Re: gestione memoria e moduli
« 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).

70
Programmazione / Re: gestione memoria e moduli
« 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.

71
Programmazione / Re: cerco documentazione e/o tutorial
« il: 20 Agosto 2013, 11:20:05 »
Ma, gli hai detto che sono a pagamento?  ...  ;D

72
Programmazione / Re: gestione memoria e moduli
« 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

73
OpenBar / Re: Un saluto da un vecchio amico
« il: 19 Agosto 2013, 11:29:00 »
...sogni, sogni... è solo un'immagine, che compare a tempo...  ;D

74
Linux / Re: esportare programma gambas in visual basic
« il: 16 Agosto 2013, 16:32:28 »
...ricordate la "ceskhonite" ? ...  ;D

75
Domande tecniche / Re: creare un database
« il: 15 Agosto 2013, 18:41:10 »
Bè, le risposte non vengono da sole, e nessuno nasce "imparato"...  ;D

Scherzi a parte, la gestione di file (immagini, fogli office, o altro) dipende dal tipo di database. Alcuni hanno la possibilità di gestirli, altri no, come per esempio sqlite.
Nel qual caso, la soluzione di memorizzare il solo nome del file nel db, e di depositare il file vero in un'apposita cartella è la soluzione ottimale, ed è utilizzata in parecchi ambienti.

Pagine: 1 ... 3 4 [5] 6 7 ... 190