Ricerca personalizzata

domenica 31 ottobre 2010

Le ultime novita targate Canonical: Ubuntu font, nuovo set di icone e spot video.

L’Ubuntu Font presente nei repository ufficiali.

L’ottimo “carattere” di casa Canonical è ufficialmente sbarcato nei repository delle versioni precedenti all’ultima 10.10, che lo utilizza in maniera predefinita. A giorni sarà nei “Backports”.

All’Ubuntu Developer Conference, Mark Shuttleworth e i suoi stanno veramente sorprendendo.

Dopo Unity, il set di icone e lo spot video, gli utenti della celebre distribuzione basata su Debian oggi saranno felici di sapere che l’Ubuntu Font è stato ufficialmente inserito nei repository ufficiali delle versioni 10.04, 9.10 e 8.04 della distribuzione.

Attualmente però pare che il pacchetto sia stato inserito nel repository “Proposed” ma presto arriverà in quello “Backports” per la gioia degli utenti.

Ricordiamo che tutti coloro che utilizzano Ubuntu 10.10 possono installarlo tramite un semplice “sudo apt-get install ttf-ubuntu-font-family“.

Chi invece non vuole fare tutto da solo, scaricando il pacchetto dalla pagina del changelog, può affidarsi al PPA dei ragazzi di Webupd8 per l’installazione del font su Ubuntu 9.10 Karmic Koala e 10.04 Lucid Lynx.

Ubuntu avrà anche un nuovo set di icone.

All’Ubuntu Developer Summit non si è parlato soltanto di Unity, l’interfaccia leggera che prenderà il posto di GNOME Shell all’interno del prossimo rilascio della distribuzione basata su Debian.

A compimento di un restyling grafico partito ormai da qualche mese, Mark Shuttleworth e i suoi hanno anche fatto sapere di essere in procinto di dare il via ai lavori di sviluppo di un nuovo set di icone per GNOME.

Dopo l’Ubuntu Font, quindi, la distribuzione di casa Canonical continua a distinguersi dai diretti avversari con lavori “fatti in casa”.

Il nuovo set di icone per GNOME, che contribuirà sicuramente a rafforzare l’immagine e il marchio di Ubuntu all’interno del panorama GNU/Linux e non solo, dovrebbe fare la sua comparsa inizialmente solo all’interno di Ubuntu 12.04 LTS, anche se i primi assaggi potrebbero arrivare già con Ubuntu 11.04.

Ubuntu ha anche uno spot video, pubblicità in arrivo?

Potete essere dei fanatici di altre distribuzioni o odiare Ubuntu per mille motivi ma non potete di certo negare l’ottimo lavoro che sta compiendo Canonical sulla sua distribuzione a livello di immagine e marketing.

Forse è quello di cui il pinguino ha sempre avuto bisogno da qualche decennio a questa parte. Anche grazie al lavoro di Mark Shuttleworth & C., GNU/Linux è diventato un sistema operativo più “simpatico” agli occhi del grande pubblico che finalmente ora lo considera come una valida alternativa ad altri sistemi operativi.

Magari non lo utilizza ancora come sistema predefinito ma quantomeno sa che esiste, o meglio ancora è in grado di elencarne pregi e difetti.

All’Ubuntu Developer Summit, dopo aver annunciato l’utilizzo di Unity nella prossima release della distribuzione e il nuovo set di icone, i ragazzi Canonical hanno stupito il grande pubblico con quello che è stato definito dalla stessa azienda come il video promozionale ufficiale di Ubuntu. Chissà, magari presto lo vedremo anche in TV? Nel frattempo ve lo proponiamo qui in basso.

fonte: TuxJournal



Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

venerdì 29 ottobre 2010

Ambientarsi in Linux, questione di shell.

Per utilizzare al meglio Linux bisogna saper scegliere l'interfaccia giusta.

In un sistema Unix la prima cosa che normalmente ci si presenta davanti quando accediamo al nostro account, dopo aver inserito il nome di login e la password, è uno schermo nero con a sinistra un prompt in attesa di nostri comandi.

Questo è il momento in cui il sistema è pronto a "dialogare" con noi, a ricevere e inviare informazioni, il tutto mediato da un programma apposito che funge da interfaccia fra l'utente e il cuore del nostro computer, il kernel. Questa è in poche parole la shell, una presenza imprescindibile per chiunque utilizzi Linux, in qualunque modo fruisca di questo sistema operativo; essa può essere usata sia in modalità interattiva, come nei login su console testuale o negli xterm, sia in maniera non interattiva, eseguendo gli script, l'equivalente, anche se molto più evoluto, dei file batch di MS-DOS. Gli script, in particolare, richiamano dalla shell (interattiva) in cui vengono lanciati un'altra sessione non interattiva nella quale vengono eseguiti i comandi che vi sono stati immessi.

E' bene evitare di generalizzare pensando che vi sia un unico modo attraverso il quale il sistema possa dialogare con l'utente. Esistono diversi tipi di shell, e storicamente si distinguono tre categorie: le Bourne shell, le C shell e le Korn shell.

Linux riprende questa suddivisione dai sistemi Unix suoi predecessori, e addirittura aumenta il numero di interfacce a disposizione presentandone delle evoluzioni sia per quanto riguarda l'interazione con l'utente che le possibilità di scripting. Gli utenti di Linux di default hanno a disposizione, come in tutti i sistemi GNU, la bash (Bourne Again Shell, uno dei soliti giochi di parole tipici dei programmatori) una versione modificata della Bourne, che incorpora alcune delle caratteristiche più utili di C e Korn shell.

In questo articolo esamineremo, oltre la bash, altre due interfacce di tipo avanzato: la tcsh (Tenex C Shell), ovviamente della categoria delle C shell, e la zsh, di tipo Korn, che sebbene meno conosciute hanno a loro vantaggio una buona versatilità e la possibilità di creare script evoluti grazie al loro linguaggio di programmazione interno.

Oltre ad esse, Linux presenta una serie molto ricca di altre shell: ne abbiamo di dimensioni ridotte, come ad esempio ash o kiss, che proprio per la loro minima occupazione di risorse e la loro semplicità, vengono utilizzate in casi particolari come per i dischetti di installazione delle varie distribuzioni di Linux; ci sono poi interfacce speciali, come ad esempio lsh che fornisce comandi compatibili con quelli del DOS, utile per i principianti, oppure tclsh che è un vero e proprio interprete tcl. Insomma, vi è quasi una soluzione per ogni esigenza.

La lettura della linea di comando.

Quando viene attivata interattivamente, la shell legge i comandi inseriti dall'utente sotto forma di blocchi, separati da spazi o tabulazioni, e termina quando incontra un carattere di newline, corrispondente alla pressione del tasto "Invio". Il primo blocco di caratteri viene paragonato ai comandi interni alla shell e agli eseguibili presenti su disco: nel primo caso il comando viene lanciato all'interno shell stessa, altrimenti viene creato un nuovo processo che esegue il programma, attende che porti a compimento la propria azione, ne presenta il suo stato di uscita (se necessario) e infine restituisce il prompt all'utente. Una particolarità delle shell Unix, rispetto all'interprete di comando stile DOS, consiste nell'essere case sensitive, cioè le lettere maiuscole e quelle minuscole sono trattate in maniera diversa: CAT, cat e Cat sono tre comandi diversi; in genere non esistono istruzioni con nomi simili e compiti diversi, ma va fatta attenzione a come vengono scritte. I processi che entrano a fare parte della gestione della linea di comando sono i seguenti:

1. Sostituzione dello storico dei comandi (history) - se applicabile
2. Scomposizione della linea di comando in blocchi
3. Aggiornamento dello storico - se applicabile
4. Gestione del quoting
5. Sostituzione degli alias e delle funzioni - se applicabile
6. Redirezione, pipe e posizionamento del programma in background
7. Sostituzione delle variabili ($name, $user eccetera)
8. Sostituzione dei comandi
9. Sostituzione dei meta caratteri per l'espansione dei nomi dei file
10. Esecuzione del programma

Prendiamo ora in esame più da vicino ogni singolo aspetto di questa sequenza per comprenderne meglio le singole funzioni:

Lo storico (history).

Per storico si intende la possibilità di richiamare i comandi che sono stati memorizzati dall'interfaccia, senza dovere riscriverli tutte le volte. Questa comoda opzione consente di introdurre anche all'interno di linee di comando successive tutto ciò che è stato inviato precedentemente alla shell e che questa ha provveduto a memorizzare in sequenza.

Il quoting.

Tutte le shell hanno un set di caratteri che assumono dei significati speciali e consentono di effettuare alcune operazioni che influenzano l'interpretazione della linea di comando: i meta caratteri che consentono l'espansione dei nomi dei file (* ?), i caratteri per la reindirizzo e le pipe (<, > e |), gli spazi, le virgolette e gli apici, l'ampersand (&), il punto e virgola, il dollaro ($); questi ed altri sono considerati speciali, riservati, e non possono essere inseriti all'interno di una linea di comando senza le opportune precauzioni.

Per evitare che questi caratteri vengano interpretati è necessario farli precedere da un backslash (\), che è anch'esso un carattere speciale e quindi va raddoppiato, se lo si vuole inserire in una linea di comando senza che venga a sua volta interpretato (\\).

Un altro modo per evitare l'interpretazione dei caratteri consiste nel racchiuderli all'interno delle virgolette (") o degli apici (' - attenzione, non gli apici inversi); il modo in cui essi operano è leggermente differente a seconda della shell utilizzata, ma indicativamente il loro utilizzo è questo:

* le virgolette (") proteggono i caratteri speciali in esse inclusi dall'interpretazione consentendo la sostituzione delle variabili
* < nome="valore" nome="valore" ls="'ls">. Ad esempio

ls /etc > file.txt

crea il file file.txt che visualizza l'elenco dei file presenti nella directory /etc. Come abbiamo già detto, non solo è possibile salvare su disco le informazioni che andrebbero normalmente a schermo, ma è anche fattibile l'operazione inversa, leggendo da file gli argomenti che normalmente andrebbero scritti sulla linea di comando. In questo caso il carattere da utilizzare è <: cat < /etc/passwd In questo caso cat ci consente di visualizzare sullo schermo il contenuto del file /etc/passwd: in questo modo redirigiamo lo stdin del programma su file. Non tutti i comandi accettano però l'input dallo stdin: per scoprire è possibile utilizzare questo metodo è bene consultare la pagina di man relativa, dato che in essa è sempre presente questo tipo di informazione. Complicando ancora un po' le cose, vediamo come è possibile redirigere l'output di un comando come input di un altro, utilizzando le pipe. In questo caso il carattere che ci consente questa operazione è |: ls /usr/bin | more Intercalando i due programmi (ls e more) con il carattere di pipe inviamo il flusso di informazioni proveniente dal primo (lo stdout di ls) in input al secondo (more), ottenendo in questo caso una migliore visualizzazione del contenuto della directory /usr/bin, dato che la lista ottenuta non scorrerà senza controllo sullo schermo ma verrà fermata quando lo avrà riempito e ripartirà con la pressione di un tasto. Quando si utilizza la redirezione dell'output va fatta attenzione, perché se viene specificato un file già esistente, questo viene sovrascritto, perdendo le informazioni che vi erano state immesse in precedenza. Per avere una scrittura "incrementale" è meglio utilizzare la modalità append che consente di scrivere l'output di un comando in un file, aggiungendolo alla fine dello stesso: ls /usr/bin >>lista

o, addirittura, è possibile prendere più linee di input da linea di comando, fino ad una determinata parola, come nell'esempio seguente:

piccinino:~$cat <<>Questa è una mail sperimentale
>C'è anche una seconda linea
>EOF

In questo caso possiamo inviare via mail più di una riga senza uscire dalla linea di comando. La shell manda al comando cat tutte le linee inserite finché non trova una riga in cui sia contenuta solo la parola EOF; l'output del comando cat viene poi mandato in pipe a mail. Il tutto con poche righe in bash!

La gestione dei processi (job control).

Una shell Unix è in grado di gestire più processi contemporaneamente consentendo, fra l'altro, di manipolare la loro esecuzione fornendo delle priorità di interazione con l'utente. Un programma può, in poche parole, essere posto in background, sullo sfondo, o in foreground, ovvero in primo piano: basti pensare ai processi come a degli strati che si sovrappongono, di cui solo ciò che sta più in alto (in primo piano, appunto) è visibile.

Quando si dà un comando, il programma corrispondente viene eseguito in primo piano, e ci preclude l'uso della shell. Il comando in esecuzione può essere però sospeso (con un segnale di stop, di solito Crtl-Z) e mandato in background con bg; in questo modo è possibile continuare a lavorare, riportando in seguito in primo piano il programma con fg.

Per avviare un processo direttamente in background si può fare seguire il comando dal segno "&": in questo modo l'elaborazione passa direttamente in background lasciando all'utente il controllo della shell. Attenzione, pero': nella zsh il controllo dei job può essere disattivato.

In questo caso un comando seguito da & ha l'output inviato direttamente in /dev/null, e quindi viene perso.

Si può avere un elenco dei processi attivi tramite il comando jobs; per indicare il processo cui ci riferisce bisogna anteporre un % al numero di job (che si vede utilizzando il comando jobs).

Quindi, per fare un esempio, volendo mandare in background il primo processo della shell dobbiamo usare il comando

bg %1

Le variabili.

Spesso è possibile influenzare il comportamento di alcuni programmi e della shell stessa configurando opportunamente alcune variabili, definite locali o d'ambiente a seconda del loro utilizzo. Brevemente, le variabili locali sono proprie della shell in cui sono state definite, e non vengono usate da nessun processo da essa creato, mentre le variabili d'ambiente vengono passate dai processi stessi ai loro figli. Alcune variabili d'ambiente, a loro volta, sono ereditate dal processo che crea la shell, in genere login, mentre altre vengono definite nei suoi file di inizializzazione o dall'utente, direttamente dalla linea di comando. Una variabile d'ambiente molto importante è PATH che, analogamente a quanto succede in DOS, indica le directory in cui vengono ricercati i file da eseguire; in questo modo è possibile lanciare un programma senza doverne indicare il percorso, se questo è presente nel path.

Una istanza tipica di PATH potrebbe essere questa:

PATH=$PATH:~/bin

Notate che con PATH viene indicata la variabile, mentre con $PATH il suo valore, che nell'esempio è stato istanziato con ~/bin. In questo esempio, al valore già esistente di PATH, $PATH, viene aggiunta la directory ~/bin.

Riferendoci ancora alle variabili va detto che normalmente esse vengono considerate locali; per renderle d'ambiente vanno "esportate", cioè va fatto in modo che siano valide anche per i processi figli del processo della shell. In bash ed in zsh la procedura da seguire è la seguente:


* si definisce la variabile
PATH=$PATH:~/bin
* la si esporta
export PATH

oppure, in una sola linea:
export PATH=$PATH:~bin

Nella tcsh si usa invece il comando set per le variabili normali, e setenv per quelle di ambiente. Ad esempio:

setenv PAGER less


imposta il pager di default a less (al posto di more, il pager predefinito, less permette anche di tornare indietro utilizzando le frecce).
Sostituzione dei comandi.

A volte è comodo poter sostituire i comandi, ovvero assegnare ad una variabile l'output di un comando, o sostituire l'output ad una stringa contenente il comando stesso. In questo caso il carattere utilizzato per operare la sostituzione, in tutte le shell esaminate, è l'apice inverso (`).

Facciamo un esempio:

locate `which bash`

è equivalente a

locate /bin/bash

dato che

which bash

rende

/bin/bash

Un altro metodo per sostituire i comandi usato da alcune shell è $(comando); questo metodo permette di inserire la stessa operazione vista in precedenza in modo più semplice e con minori rischi di errore, ma può essere applicato solo in bash e zsh, non in tcsh.

Un ambiente user friendly.

Spesso capita di voler cancellare un'intera serie di file i cui nomi contengono una sequenza tipica, di volerli copiare, oppure di volerci compiere una qualsiasi operazione. Specificare su linea di comando ogni nome può diventare lungo e noioso, specialmente se sono coinvolti parecchi file; meglio allora utilizzare dei caratteri speciali per l'espansione dei nomi dei file, o "caratteri jolly", che consentono di indicare contemporaneamente su una stessa linea i nomi di più file.

I meta caratteri usati da tutte le shell esaminate sono:


* espande zero o più caratteri
? espande un solo carattere
[abc] espande un carattere dell'insieme (a, b o c)
[a-z] espande un carattere nell'intervallo a-z
^ nega la corrispondenza successiva (es. [^abc])
~ espande la home directory dell'utente

Anche in questo caso anteponendo un \ al meta carattere ne disabilita la funzione.

Altre shell utilizzano anche dei meta caratteri aggiuntivi: la zsh, ad esempio, consente di indicare un intervallo di interi con o di selezionare solo i file di un certo tipo (si usa (/) per indicare le directory, (@) per i link e così via). Dato che differenti shell possono avere diversi caratteri speciali, è bene consultare i documenti relativi all'interfaccia utilizzata per avere informazioni più dettagliate che qui non possiamo approfondire per motivi di spazio.

Maggiore interesse forse riveste la possibilità offerta dalle shell esaminate di completare automaticamente i nomi dei comandi ed i nomi dei file. Se si hanno dei nomi molto lunghi, è possibile inserirne solo una parte significativa e premere "tab" per vedere magicamente completarsi sotto i nostri occhi tutta la scritta; se invece viene fornita una parte non significativa, premendo due volte "tab", in bash, verrà fornito un elenco di file o comandi che iniziano con le lettere da noi inserite.

Oltre alla possibilità di completare i nomi dei file e dei comandi, le shell permettono anche di modificare la linea di comando stessa usando le combinazioni di tasti proprie degli editor. Le associazioni dei tasti sono in genere quelle che un utente di emacs o di vi si aspetterebbe; ad esempio in bash per cancellare il carattere sul cursore si usa Ctrl-D, per andare in fondo alla linea si usa Ctrl-E e così via, sempre che sia impostata la modalità emacs, che è quella di default.

Alcune shell permettono anche di correggere gli errori di battitura, ovvero caratteri invertiti, mancanti o in eccesso, automaticamente o dando un comando: digitando in maniera non corretta il nome di una directory è possibile vedere corretto il nostro errore e passare comunque alla directory desiderata.

Per rendere meno pesante il lavoro su Linux è bene imparare la lista dei comandi interni della shell da utilizzare, comandi che possono essere usati sia interattivamente che all'interno di script. Ci sono, come noto a tutti, comandi abbastanza semplici come cd, ma accanto a questi vi sono strumenti più complessi come quelli relativi alla gestione dei loop, che possono semplificare notevolmente la vita dell'utente medio. Pensiamo, ad esempio, alla situazione tipica in cui bisogna decomprimere un certo numero di archivi tar.gz e in seguito cancellarli. Usando una semplice linea di comando di bash, ad esempio, è possibile automatizzare il tutto:

for i in `ls *.tar.gz`; do tar xzf $i ; rm $i ; done

Questa riga può essere letta in questo modo: a ciascun elemento dell'output del comando ls applicare il comando tar, poi cancellare il file. Semplice e molto efficace. Da notare che utilizzando i punto e virgola è possibile concatenare più comandi su una stessa linea.

I file di configurazione della shell

I file di configurazione sono uno degli aspetti più importanti della shell: qui vanno definite le variabili d'ambiente, gli alias e le funzioni che influenzeranno il modo in cui l'utente si interfaccia con il sistema operativo. Non solo, qui possono essere indicati inoltre i processi da eseguire all'avvio della stessa, siano essi programmi o comandi interni.

Normalmente i file di configurazione sono tre: uno, valido globalmente, risiede nella directory /etc, mentre gli altri due, uno per le shell di login e uno per quelle interattive, si trovano nelle home directory degli utenti e sono liberamente modificabili.

Qui di seguito riportiamo i nomi dei file di inizializzazione delle varie shell, con il loro uso.

Bash
/etc/profile contiene i comandi da eseguire all'avvio di una shell di login, ed è comune a tutti gli utenti
~/.bash_profile contiene i comandi da eseguire all'avvio di una shell di login per ciascun utente.
~/.bash.login usati se ~/.bash_profile non esiste, per compatibilità
~/.profile
~/.bashrc contiene i comandi da eseguire all'avvio di una qualsiasi shell interattiva non di login
~/.bash_logout contiene i comandi da eseguire al momento del logout.

All'avvio di una shell non interattiva bash legge la variabile ENV, la espande e carica il file che indica come .$ENV. Se bash è richiamata come sh, cerca di imitarne il comportamento il più fedelmente possibile, e quindi legge solo i file /etc/profile e ~/.profile per le shell di login, e nessun altro.

Tcsh
/etc/csh.cshrc file di sistema per shell interattive
/etc/csh.login file di sistema per shell di login
~/.tcshrc file per le shell interattive
~/.cshrc usato in sostituzione di ~/.tcshrc se questo non esiste
~/.login file per le shell di login
/etc/csh.logout file di sistema usato al logout
~/.logout file personalizzabile dall'utente usato al logout

Zsh
/etc/zshenv file di sistema per tutte le invocazioni della shell
$ZDOTDIR/.zshenv per tutte le invocazioni della shell
$ZDOTDIR/.zprofile simile a zlogin ma usato prima di .zshrc
$ZDOTDIR/.zshrc per le shell interattive
$ZDOTDIR/.zlogin per le shell di login
$ZDOTDIR/.zlogout al logout

Se la variabile $ZDOTDIR non viene indicata specificamente, il suo valore è pari a $HOME, cioè è la home directory dell'utente.
Crearsi l'ambiente di lavoro.

Se non siete soddisfatti della shell di sistema potete sempre scegliere quello che fa per voi ed indicare a Linux la vostra scelta modificando il file /etc/passwd. Dando un'occhiata a questo file si può notare che alcuni utenti "di sistema" hanno come shell un programma particolare: ad esempio sync ha la shell /bin/sync, e quindi al suo collegamento viene eseguito il programma sync. La stessa cosa si potrebbe fare per rendere disponibili ad utenti non di root alcuni servizi senza che questi implichino particolari privilegi. Ad esempio, creando un utente shutdown con una shell /sbin/shutdown si consente a chiunque di effettuare una procedura di arresto di sistema semplicemente collegandosi con lo username e la password adeguati. Gli esempi potrebbero continuare citando, per esempio, la possibilità di creare utenti senza diritto di login, sostituendo ad una shell reale una /bin/false o una /bin/passwd, nel caso si volesse lasciare la possibilità di cambiare la password.

Ciò che conta, e che spesso sfugge all'utente alle prime armi, è che non sempre una shell è quell'ambiente ostico che appare alla prima installazione. Conoscere la shell che si sta utilizzando è il primo passo verso la creazione di un'interfaccia realmente amichevole, user friendly non perché presenti icone e finestre ma perché realmente consente di lavorare meglio e più efficacemente.

fonte: Pluto



Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:


martedì 26 ottobre 2010

Il progetto GNOME fornisce un desktop intuitivo e invitante per gli utenti e un framework per creare applicazioni integrate all'interno del desktop.

GNOME (GNU Network Object Model Environment) è un desktop environment creato inizialmente da Miguel de Icaza e Federico Mena nell'agosto del 1997, con l'obiettivo di fornire un ambiente di sviluppo e desktop libero per il sistema operativo GNU/Linux. Grazie a questo e ai risultati raggiunti, è presto stato riconosciuto come il desktop environment ufficiale del progetto GNU.

Al tempo l'unica alternativa sufficientemente completa era KDE, il quale raccoglieva diverse critiche riguardanti il non essere un ambiente aperto (KDE forniva le api per i soli linguaggi C e C++) e non completamente libero, in quanto le librerie grafiche su cui si basa, le Qt, non erano ancora state rilasciate con una licenza libera (in seguito sono state rilasciate sotto licenza GNU GPL e LGPL).


Attualmente GNOME è l'ambiente grafico predefinito di molte distribuzioni Linux, tra le quali Debian, Fedora e Ubuntu.


Il cuore di GNOME è programmato principalmente in C e interamente basato sulle librerie grafiche GTK+; è libero fin dalla sua nascita, essendo pubblicato sotto le licenze GNU General Public License e GNU Lesser General Public License (a seconda dei componenti). GNOME è stato progettato con un alto livello di astrazione, e proprio questa sua caratteristica ha permesso di poterlo compilare e includere in un gran numero di sistemi operativi unix-like; sono disponibili api e documentazione per lo sviluppo di applicazioni Gnome in diversi linguaggi, tra i quali Ruby, Java, C++, Perl, Scheme, C#, Python e, naturalmente, C. Attualmente il progetto cyGNOME[5] sta tentando di effettuare il porting sul sistema operativo Microsoft Windows appoggiandosi sul sistema cygwin.


GNOME è costituito da un grande numero di progetti diversi. Alcuni sono elencati qui sotto:

  • Bonobo — una tecnologia per gestire documenti;
  • GConf — sistema di gestione della configurazione delle applicazioni;
  • GVFS — file system virtuale;
  • GNOME Keyring — gestione di chiavi per la crittografia;
  • GNOME Print — sistema di stampa;
  • GNOME Translation Project — per la traduzione della documentazione e delle applicazioni in varie lingue;
  • GTK+ — una libreria complessa che comprende:
    • ATK — per l'accessibilità;
    • GLib — funzioni per la programmazione in C;
    • GObject — un framework per la programmazione orientata agli oggetti in C;
    • Pango — per disegnare il testo sullo schermo in diverse lingue;
  • Human Interface Guidelines — linee guida per la creazione di applicazioni GNOME facili da usare;
  • LibXML — libreria XML;
  • Metacity — un window manager.

L'uso di GTK+ permette a GNOME di sfruttare alcune sue caratteristiche: gestione dei temi (possibilità di cambiare look and feel al volo), grafica anti-aliased (grazie a Cairo) e la possibilità di portare le applicazioni su diverse piattaforme, quali Windows e Mac OSX (come The Gimp ed Inkscape).


Applicazioni Gnome.

La seguente lista include applicazioni che utilizzano tecnologie del progetto GNOME e che sono spesso incluse in un desktop GNOME:

  • AbiWord — un word processor;
  • Alexandria — programma per la gestione di biblioteche;
  • Brasero — un programma per masterizzare su CD e DVD;
  • Cheese — un programma per scattare foto e riprendere video usando la webcam
  • Epiphany — un web browser;
  • Ekiga — un programma per la telefonia e il voice over IP;
  • Evolution — un gestore avanzato della posta elettronica, rubrica e impegni;
  • File Roller — un front-end per la gestione di file compressi;
  • Gedit — un editor di testo;
  • Gnumeric — un foglio elettronico;
  • Glom — un front end database RAD, basato su PostgreSQL, per la creazione di database in un unico file, come FileMaker Pro;
  • Inkscape — una applicazione per il disegno vettoriale;
  • Mono — un ambiente di sviluppo basato su Microsoft .NET Framework;
  • Pidgin — un instant messenger;
  • PiTiVi — editor video;
  • Nautilus — un file manager utilizzabile anche come client FTP;
  • Rhythmbox — un gestore di musica simile a iTunes;
  • Totem — un lettore multimediale;
  • Tomboy — uno strumento per appunti per il Desktop;
  • GDM — un sistema di login grafico per accedere al sistema;
  • Orca — una suite assistiva ai non vedenti/ipovedenti comprendente ingranditori schermo, sintesi vocale, barra Braille...
  • Glade — un designer di interfacce GTK+ (GUI Builder);
  • Screem — un editor HTML/CSS/PHP;
  • GIMP — un avanzato software di fotoritocco;
  • gnome-utils — Una serie di programmi di utilità che comprende: gnome-screenshot, per catturare screenshot, Baobab, un analizzatore grafico di uso del disco, gnome-system-log, gnome-search-tool, gnome-dictionary e gfloppy

Versioni
.

Versioni Stabili.

Ogni parte che compone il progetto GNOME ha la propria versione. Ogni sviluppatore dei moduli coordina il proprio lavoro per rilasciare una versione completa e stabile ogni sei mesi. La seguente tabella mostra i principali rilasci del progetto GNOME. Le versioni instabili per i tester e i bugfix non sono elencati.

Versione Data Informazioni

Agosto 1997 Annuncio dello sviluppo di GNOME
1.0 Marzo 1999 Prima major release di GNOME
1.0.53 Ottobre 1999 "October"
1.2 Maggio 2000 "Bongo"
1.4 Aprile 2001 "Tranquility"
2.0 Giugno 2002 Major upgrade basato sulla versione 2.0 di GTK+. Introdotta la Human Interface Guidelines
2.2 Febbraio 2003 Introdotte funzionalità multimediali e file manager
2.4 Settembre 2003 Introdotto Epiphany
2.6 Marzo 2004 Nuovo spatial file manager e stile dei file dialog
2.8 Settembre 2004 Introdotto il supporto alle periferiche rimovibili, aggiunto Evolution
2.10 Marzo 2005 Ottimizzazioni generali, nuove applets (drive mounter e cestino), aggiunti Totem e Sound Juicer
2.12 Settembre 2005 Nuovo tema grafico, miglioramenti al file manager, nuova gestione della clipboard, supporto per i pannelli verticali, aggiunto Evince
2.14 Marzo 2006 Ricerca integrata nel file manager, nuovo screensaver, aggiunti Ekiga, Deskbar, Pessulus e Sabayon, migliore gestione della memoria
2.16 Settembre 2006

Ottimizzazione delle prestazioni, effetti 3D, pulizia codice. Tomboy, applicazione per la gestione dei post-it; Baobab: monitoraggio dell'uso del disco; Orca: lettore dello schermo per i non vedenti; Alacarte: editor di menu; miglioramenti per Totem, Nautilus e GNOME Power Manager; Metacity con il supporto composite; nuovo tema di icone. Basato sul GTK+ 2.10 con la nuova finestra di stampa

2.18 marzo 2007

Ottimizzazione delle prestazioni; miglioramenti al software di analisi dell'occupazione del disco; Orca screen reader; miglioramenti a Evince, Epiphany e GNOME Power Manager, Volume control; due nuovi giochi, GNOME Sudoku and glchess

2.20 Settembre 2007

Rilascio per il decimo anniversario; Funzionalità di backup per Evolution; miglioramenti per Epiphany, Eye of GNOME, GNOME Power Manager; gestione delle password per i portachiavi di Seahorse. Aggiunti: Possibilità di modificare i forms in Evince, funzione di ricerca integrata nelle finestre del filemanager, installazione automatica dei codec multimediali

2.22 Marzo 2008

Supporto elementare per le finestre composite per Metacity; introdotto il nuovo GVFS; migliorato il supporto per la riproduzione di DVDs, filmati di Youtube, MythTV per Totem; internazionalizzazione dell'applet dell'orologio; Supporto dell'uso dei tag di Google Calendar dei messaggi di posta Evolution; miglioramenti per Evince, Tomboy, Sound Juicer e Calculator. Aggiunti: Cheese, un'applicazione per acquisire immagini dalla webcam, e Vinagre, un visualizzatore di desktop remoti

2.24 Settembre 2008

Navigazione a schede e modalità compatta per la visualizzazione dei file in Nautilus; introduzione del client di messaggistica Empathy; nuovi strumenti per la Deskbar; miglioramenti alla gestione della risoluzione dello schermo e ai temi sonori; preparativi per le librerie GTK+ e GLib 3.0; basato sulle librerie GTK+ 2.14; rilasciata per la prima volta la piattaforma di sviluppo GNOME Mobile

2.26 Marzo 2009

Brasero è il nuovo strumento di masterizzazione ufficiale; migliorata la condivisione dei file in rete attraverso diversi protocolli; Epiphany presenta una nuova barra degli indirizzi disegnata riprendendo quella di Firefox; Deskbar permette di utilizzare i motori di ricerca OpenSearch; ridisegnato lo strumento per la gestione dell'audio con PulseAudio; basato sul toolkit grafico GTK+ 2.16

2.28 settembre 2009

Aggiunto GNOME Bluetooth, programma per la gestione di dispositivi Bluetooth; migliorati il browser Epiphany, che ha cambiato motore di rendering, passando da Gecko a WebKit, il programma Conteggio tempo (Time tracker), che consente di tenere traccia del proprio tempo e delle proprie attività, l'instant messenger Empathy; apportati miglioramenti all'accessibilità; basato sul toolkit grafico GTK+ 2.18

2.30[8] marzo 2010

Miglioramenti al file manager Nautilus, al client IM Empathy, a Tomboy, a Evince, a Time Tracker, al browser Epiphany e a Vinagre. I dispositivi iPod e iPod Touch sono ora parzialmente supportati tramite GNOME VFS attraverso libimobiledevice. basato sul toolkit grafico GTK+ 2.20

2.32 settembre 2010 Aggiunti GNOME Color Manager e Rygel. Miglioramenti ad Empathy, Evince, al file manager Nautilus e ad altri programmi. Il rilascio di GNOME 3.0 era previsto per settembre 2010, quindi gran parte degli sforzi per lo sviluppo della versione 2.30 sono stati rivolti alla versione 3.0
3.0 marzo 2011 Annunciata per aprile 2011


Aggiornamenti:

GNOME 2.32 è l'ultima versione dello GNOME Desktop: un ambiente grafico molto diffuso e multi-piattaforma. L'obiettivo di GNOME è essere di facile utilizzo, stabile e avere un eccezionale supporto per accessibilità e internazionalizzazione. GNOME è composto da software libero e open source e offre tutti i tipici strumenti che ci si aspetta da un moderno ambiente informatico, come client email, groupware, navigazione del web, gestione dei file, multimedia e ovviamente giochi. Inoltre, GNOME offre una piattaforma flessibile ed efficace per gli sviluppatori di software, per applicazioni dedicate a sistemi desktop e mobili.

L'attenzione del progetto GNOME agli utenti e alla semplicità d'uso continua anche in GNOME 2.32: moltissimi sono i problemi che sono stati corretti e molte sono state inoltre le proposte di miglioramenti degli utenti che sono state accolte. È impossibile riassumere in breve la totalità dei miglioramenti apportati, ma nelle presenti note di rilascio cercheremo di evidenziare alcune delle caratteristiche presenti in questa nuova versione di GNOME che potranno risultare più interessanti per gli utenti.

GNOME 2.32 è l'ultimo rilascio major pianificato per le serie 2.x di GNOME. D'ora in poi sono previste solo dei rilasci di manutenzione per GNOME 2.x e già in questa 2.32 le novità presente sono limitate ad alcune applicazioni, poiché gli sviluppatori stanno concentrando i loro sforzi sul prossimo GNOME 3.0, previsto per aprile 2011.


Il visualizzatore di documenti Evince offre finalmente supporto all'accessibilità. Sfruttando l'interfaccia AtkText si consente a Orca, il lettore di schermo di GNOME, di leggere i documenti aperti in Evince. È inoltre stato incrementato il massimo livello di ingrandimento consentito.


Risulta migliorato anche il supporto alle annotazioni: è ora possibile direttamente nel riquadro laterale aggiungere annotazioni e cambiarne le proprietà, come autore, colore, trasparenza e molto altro.


È anche stato aggiunto in supporto a SyncTeX, un metodo che abilita la sincronizzazione tra un file sorgente TeX e il relativo output PDF (o DVI). Il supporto a SynckTeX è disponibile sia in Evince che in gedit, sotto forma di plugin. Sono supportate sia la ricerca all'indietro, da Evince a gedit, che quella in avanti, da gedit a Evince.


In GNOME 2.32 sono stati apportati diversi aggiornamenti a Nautilus, il file manager di GNOME. Ora è presente un dialogo che consente di gestire con facilità i conflitti tra file durante le operazioni di copia o spostamento; inoltre quando si tagliano i file per incollarli in un'altra directory, le icone di questi file appaiono semitrasparenti.


Oltre ai grandi cambiamenti, come per ogni rilascio di GNOME, ci sono molte piccole aggiunte e correzioni.

  • Eye of GNOME, il visualizzatore di immagini di GNOME, consente di selezionare manualmente un colore di sfondo per migliorare il contrasto dell'immagine.
  • Totem, il riproduttore multimediale di GNOME, esegue automaticamente il deinterlacciamento di filmati e stream che siano stato registrati interlacciati, migliorando la qualità dell'immagine. Inoltre fornisce un migliorato supporto alle scalette, risultando più veloce e reattivo nel caricarle.
  • Gli strumenti di sistema di GNOME permettono ora agli utenti di cambiare il proprietario di un file che si sta spostando nella propria directory home, qualora questo sia già presente



Screenshots.

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Crea le tue foto ed immagini come Slideshow per eBay, Netlog, MySpace, Facebook o la tua Homepage!Mostrare tutte le immagini di questo Slideshow



S
e ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

lunedì 25 ottobre 2010

Flex (Fast Lexical Analyzer) potente strumento utilizzato per la costruzione di analizzatori lessicali.

Flex è un potente strumento utilizzato per la costruzione di analizzatori lessicali o, come si può leggere sul manuale, per la generazione di scanner.

Attraverso questi oggetti è possibile suddividere un flusso di ingresso in token, elementi base a cui sono associate specifiche operazioni predeterminate.

L'uso in combinazione con altri strumenti come bison permette di operare nel campo della generazione di compilatori o interpreti di linguaggio.


La fase di analisi lessicale, in qualunque processo essa sia inquadrata, consiste nel raggruppare insiemi di caratteri e simboli all'interno di unità lessicali dette token che sottostanno a specifiche espressioni regolari.

Lo scanner, strumento attraverso il quale questo processo viene attuato, lo si può immaginare per adesso come una scatola nera che prende come ingresso un flusso di dati e restituisce in uscita un flusso di token generati a partire dagli elementi forniti, associando o meno ad ognuno di essi una operazione specifica.

In un primo momento la cosa può sembrare piuttosto astratta ma nel seguito sarà definito in modo chiaro il ruolo dello scanner e sarà possibile comprendere meglio il lavoro svolto da esso.


Per adesso basta pensare ad uno scanner come ad uno strumento in grado di riconoscere ed estrapolare da un flusso di dati determinati elementi noti, che è capace di riconoscere e sa come trattare correttamente.

Lo Scanner.

Lo scanner è l'elemento chiave di un analizzatore sintattico. Ad esso è demandato tutto il lavoro sopra brevemente descritto e con esso si interfacceranno eventuali oggetti esterni che intendono usare questo strumento per i loro scopi. A titolo informativo e come esempio di quanto detto, si noti che flex è spesso usato in combinazione con altri software, primo fra tutti bison, proprio per la generazione di analizzatori sintattico/lessicali.

Per quanto riguarda le modalità operative di uno scanner, questo dovrà distinguere fra diversi tipi di token ognuno descritto dalla propria espressione regolare, ma di contro potrà disinteressarsi completamente dell'ordine di comparsa dei token come anche della loro reale appartenenza ad uno specifico linguaggio.

Allo scanner, del resto, è affidato l'arduo compito di prendere una decisione laddove esistano più modi per suddividere un dato ingresso in elementi validi. Qualsiasi altro tipo di elaborazione risulta a carico delle procedure a valle, le quali potranno giovare del lavoro svolto dallo scanner risultando più semplici, snelle ed efficienti.

Non è facile chiarire le idee sul come uno scanner sia in grado di individuare specifici elementi all'interno di un flusso dati e tentando di farlo si è obbligatoriamente costretti a percorrere l'affascinante quanto (a volte) complicato mondo delle espressioni regolari.

Una buona padronanza di questo argomento non è assolutamente necessaria, ma senz'altro aiuta in modo notevole tanto la comprensione quanto la futura realizzazione di scanner per l'uso nei propri progetti. In ogni caso, le espressioni regolari sono un argomento che ogni studente di informatica oggi dovrebbe quantomeno conoscere e di seguito sarà data solo una brevissima introduzione, consigliando caldamente a chiunque di approfondire.
Espressioni Regolari

Le espressioni regolari sono un argomento molto vasto e complesso che non sarà discusso in questa sede. Ciò nonostante, è necessaria una breve introduzione che permetta di farsi un'idea sul modo in cui è possibile definire le modalità di suddivisione del flusso di ingresso in token.

Si prenda in considerazione la stringa hal9000. Questa, intuitivamente, può essere suddivisa in svariati modi, come ad esempio:

* un unico token, ovvero hal9000
* due token come ad esempio hal e 9000, ma anche hal9 e 000
* tanti token quante sono le lettere che compongono la scritta, quindi h, a, l e tutti gli altri

Quelli sopra sono solo alcuni esempi, ma in pratica si hanno svariate suddivisioni possibili fra cui scegliere. La domanda è quale scegliere. La risposta consiste nella più lunga stringa che trova corrispondenza con una delle scelte possibili. Ma quali e quante sono queste scelte possibili?
Supponiamo di voler dividere un flusso di ingresso in token rappresentanti rispettivamente stringhe di caratteri e stringhe di numeri: hal rappresenta la più lunga stringa di dati in ingresso che corrisponde ad una delle scelte possibili, così come anche 9000.

Se la suddivisione fosse invece in singoli caratteri e stringhe numeriche otterremmo quattro token, ovvero: h, a, l, 9000.

In pratica le espressioni regolari descrivono le caratteristiche di una delle possibili scelte, evidenziando la struttura dei dati che uno specifico token deve presentare per essere classificato come tale. Ovvero, esse definiscono una sintassi in grado di rappresentare un determinato insieme di stringhe a partire da un flusso di caratteri alfanumerici. Questo permette di estrapolare specifici elementi in base alle loro caratteristiche.
Espressioni Regolari e flex

flex usa un insieme esteso e abbastanza articolato di espressioni regolari e, per approfondimenti, si consiglia di fare riferimento alla documentazione ufficiale.
Alcuni esempi che saranno utili anche nel prosieguo sono riportati di seguito:

* 'x' : senza apici, corrisponde al carattere x
* '.' : senza apici, indica un qualsiasi carattere ad eccezione del carattere di nuova linea
* [abc], [^abc] e [b-o] : indicano rispettivamente uno fra i caratteri a, b e c, ogni carattere ad eccezione di a, b e c e uno dei caratteri compresi fra b e o
* [a|b] : corrisponde ad un carattere a oppure ad un carattere b, indipendentemente
* r*, r+ e r? : indicano rispettivamente un numero nullo o illimitato di caratteri r, uno o più caratteri r e infine uno o nessun carattere

Come detto, questa è solo una parte delle possibili strutture utilizzabili per la costruzione di proprie espressioni in grado di catturare elementi di testo specifici. Attraverso questi elementi di base si possono costruire espressioni più complesse e potenti, in grado di estrapolare dal flusso di dati i diversi token.

Vediamo qualche esempio:

* [a-zA-Z] : indica un qualsiasi carattere alfabetico, maiuscolo o minuscolo
* [a-z]+ : definisce una stringa di uno o più caratteri alfabetici minuscoli
* [0-9] : specifica un carattere numerico compreso fra 0 e 9
* [+|-]?[0-9]+ : rappresenta la classe dei numeri interi con o senza segno, senza limiti di cifre decimali a patto che esse siano in numero maggiore o uguale a una
* [+|-]?[0-9]*"."[0-9]+[[e|E][0-9]+]? : è una espressione più complessa ma che esprime bene le potenzialità delle espressioni regolari, la quale permette di esprimere numeri in virgola mobile con o senza segno in forma esponenziale e non

La potenza di classificazione delle espressioni regolari, a questo punto, dovrebbe essere chiara a tutti. È arrivato il momento di inquadrare quanto detto all'interno di flex e capire come questo possa servire ai nostri scopi. Ovviamente, per approfondimenti sulle espressioni regolari si consiglia di fare riferimento alla letteratura dove queste sono ampiamente discusse e trattate.


Purtroppo l'argomento è talmente vasto da richiedere non una sezione di un semplice articolo ma piuttosto una serie di articoli intera, ciò nonostante per una infarinatura di base bastano poche ricerche e tanta volontà.
flex

Dal manuale ufficiale si legge:

flex is a tool for generating scanners: programs which recognized lexical patterns in text. flex reads the given input files, or its standard input if no file names are given, for a description of a scanner to generate. The description is in the form of pairs of regular expressions and C code, called rules. flex generates as output a C source file, `lex.yy.c', which defines a routine `yylex()'. This file is compiled and linked with the `-lfl' library to produce an executable. When the executable is run, it analyzes its input for occurrences of the regular expressions. Whenever it finds one, it executes the corresponding C code.

flex è uno strumento per la generazione di scanner: programmi che riconoscono modelli lessicali nel testo. flex legge i file forniti in ingresso o lo standard input se nessun file viene indicato, per avere una descrizione dello scanner da generare. La descrizione è nella forma di coppie comprendenti una espressione regolare e codice C, chiamate regole. flex genera in uscita un file di codice sorgente C, `lex.yy.c', che definisce una funzione `yylex()'. Questo file è compilato e collegato con la libreria `-lfl' per produrre un eseguibile. Quando l'eseguibile viene lanciato, analizza il proprio ingresso in cerca di occorrenza delle espressioni regolari. Ogni volta che ne individua una, viene eseguito il corrispondente codice C.

flex è uno degli strumenti più diffusi e utilizzati per la creazione di scanner (o analizzatori lessicali) e rappresenta una soluzione open-source alternativa al più datato lex. Questo software legge un file di ingresso che definisce rigorosamente gli elementi che devono essere riconosciuti nel flusso di dati e produce un file C chiamato lex.yy.c che presenta una funzione denominata yylex(). La funzione citata può essere utilizzata da codice di contorno o direttamente da una ipotetica funzione main per il recupero dei token.

Certo, la descrizione stringata data sopra non rende fede allo strumento in analisi. Ciò nonostante, è più utile (come avviene anche nel manuale ufficiale) dirigere l'attenzione velocemente sul lato tecnico piuttosto che perdersi nei meandri della teoria, in questo caso piuttosto articolati e complessi. Questa sarà anche la linea guida di questo documento, che descriverà in maniera pratica l'uso di flex senza approfondire sulla teoria che vi sta dietro.
File e Sezioni

Il file di ingresso da dare in pasto a flex si divide in tre sezioni separate fra loro con una linea contenente solamente la coppia di caratteri %%. Le tre sezioni rappresentano rispettivamente:

* definizioni, ovvero nomi utili a semplificare le descrizioni seguenti ma anche, in realtà, opzioni e porzioni di codice utente
* regole, ovvero le leggi a cui la suddivisione del flusso in token deve sottostare
* codice utente, ovvero una sezione opzionale che riporta funzioni di supporto sviluppate dall'utente

Le sezioni sopra indicate saranno descritte più dettagliatamente in seguito. Bisogna osservare che nelle sezioni definizioni e regole tutto ciò che viene a trovarsi racchiuso fra %{ e }% è copiato direttamente nel file risultante, come sarà spiegato meglio in seguito con un esempio pratico.

Nella descrizione passo passo delle sezioni sopra citate sarà sviluppato un esempio che, alla fine, potrà essere utilizzato come scanner giocattolo per prendere maggiore familiarità con flex. In particolare, sarà sviluppato uno scanner in grado di classificare i dati in ingresso fra le classi di interi, numeri reali e stringhe di caratteri. Ovviamente una cosa molto semplice ma che possa dare al lettore un'idea di come si opera con questo strumento.

Definizioni.

Questa sezione contiene scorciatoie definite per rendere più semplice il lavoro che segue. Ogni definizione è del tipo: nome definizione.

Il nome sarà lo stesso che, in seguito, potrà essere utilizzato per riferirsi alla specifica definizione attraverso la dicitura {nome}, la quale a sua volta sarà espansa in (definizione).

Alcuni esempi di definizione sono:

* ID [a-zA-Z]+
* SIGN [-|+]
* DIGIT [0-9]
* EXP [e|E][0-9]+

In particolare, vengono definite scorciatoie per identificatori contenenti lettere maiuscole/minuscole (ovvero, in definitiva stringhe), per segni positivo e negativo, per cifre ed esponenti (questi ultimi intesi come notazione esponenziale per numeri reali).

Si memorizzi quanto sopra perché sarà ripreso a breve per implementare ed ampliare lo scanner d'esempio.

Una nota importante in merito a questa sezione che risulterà utile in seguito: tutto ciò che si trova all'interno della coppia di identificatori %{ e %} viene copiato direttamente nel file risultante senza alcuna modifica. Nell'esempio in questione, questa particolarità sarà sfruttata per includere alcuni file utili, ovvero includendo in testa alla prima sezione la linea:

%{
#include
%}

Infine questa sezione, che all'apparenza dovrebbe essere la più semplice e snella, permette fra le altre cose anche il passaggio a flex di opzioni che altrimenti sarebbero dovute essere passate attraverso la riga di comando. Questo lo si può fare attraverso la direttiva %option e le possibilità sono svariate, anche se non c'è modo e spazio di discuterle tutte.
Il fatto per cui, in realtà, l'argomento è stato introdotto è che risulta necessaria, per l'esempio proposto, la direttiva seguente:

%option noyywrap

Questa direttiva comporta che non venga chiamata la funzione yywrap() dopo che è stato raggiunto un carattere di end-of-file (fine file), ma piuttosto sia assunto che non esistano più file da analizzare. La funzione sopra citata dovrebbe, teoricamente, impostare correttamente la variabile globale yyin e ritornare il valore zero se esistono altri file da analizzare, oppure ritornare un valore non zero nel caso in cui il lavoro da compiere sia giunto al termine (e, quindi, ottenere anche la terminazione nell'esecuzione dello scanner). L'opzione di cui sopra porta al non essere obbligati nel definire la funzione yywrap che, quindi, non verrà chiamata come richiesto con le conseguenze descritte.
Regole.

La sezione in esame contiene una lista di regole nella forma: modello azione.

Nello specifico, il modello non è altro che una espressione regolare che permette di avere un riscontro con determinate stringhe di caratteri; il punto di forza di questi modelli è che possono essere resi più compatti (e a volte anche più comprensibili) richiamando in essi i nomi associati alle diverse definizioni come descritto nella sezione precedente.

Per quanto riguarda le azioni, invece, queste rappresentano molto semplicemente porzioni di codice C. In particolare, ogni porzione è associata ad uno specifico modello e solo in presenza di esso sarà eseguita integralmente. Ad esempio volendo creare uno strumento che rende maiuscole tutte le lettere che incontra, potrebbe essere definito come modello l'insieme delle lettere minuscole e come azione quella che restituisce in uscita la corrispondente lettera maiuscola, ovvero poche stringhe in codice C che convertono il codice relativo alla lettera individuata così da renderla maiuscola.

Nell'ottica di costruzione dell'esempio proposto, si possono definire alcune coppie di modello-azione come quelle che seguono, descritte singolarmente.

La prima coppia permette di estrapolare identificatori (sotto forma di stringhe contenenti caratteri maiuscoli e/o minuscoli) dal flusso in ingresso e consiste nelle righe seguenti:

{ID} { printf("IDENTIFICATORE\n"); }

La seconda coppia, invece, aiuta a riconoscere numeri interi con o senza segno:

{SIGN}?{DIGIT}+ { printf("INTERO\n"); }

Come si può notare, il segno è reso opzionale dal punto esclamativo mentre l'insieme di cifre deve contenere uno o più elementi per essere considerato tale (questo lo si indica attraverso il simbolo +). In questa forma compatta si riesce a catturare un insieme teoricamente infinito di elementi come quello dei numeri interi positivi e negativi. Potenza delle espressioni regolari!
L'ultima coppia è la più complessa e rende bene l'idea di quello che si riesce ad ottenere combinando le espressioni regolari con le definizioni come descritte nella sezione precedente:

{SIGN}?{DIGIT}*"."{DIGIT}+{EXP}? { printf("REALE\n"); }

In quest'ultimo esempio si hanno elementi opzionali, altri che possono presentarsi un numero indefinito di volte ma anche nessuna volta e infine è presente una cosa che fino ad ora non aveva fatto la sua comparsa: l'elemento di testo. Infatti, tutto ciò che è compreso fra virgolette sarà ricercato nel flusso di ingresso così come definito, in questo caso un punto rappresentante la virgola del valore reale. L'espressione sopra è in grado di catturare elementi come ad esempio:

* +1.035
* .6
* -3.9e3
* 2.576834353622E-10

Come sopra, la fantasia non ha limiti e l'insieme delle stringhe riscontrate attraverso questa espressione regolare è teoricamente infinito. Ad ogni modo, la sua compattezza la rende chiara e facilmente comprensibile permettendo a chiunque di capirne molto velocemente il ruolo svolto.
In realtà, ci sarebbe una quarta coppia che svolge più che altro un lavoro di ripulitura dai caratteri di spazio e nuova riga. La forma è la seguente:

[ \t\r\n]+

In questo caso l'azione non è riportata volontariamente e non è un errore. Questa forma è equivalente ad aprire e chiudere parentesi graffe, ovvero associare un'azione nulla al modello. In pratica le stringhe corrispondenti all'espressione regolare sopra vengono ignorate e nessuna azione è intrapresa; nel caso specifico, eventuali spazi o caratteri di nuova riga vengono, come detto, saltati a piedi pari.
Sezione Codice utente

Quest'ultima sezione contiene semplicemente codice utente che sarà copiato così com'è nel file ottenuto. Questa sezione è opzionale e viene spesso usata per contenere funzioni richiamate dallo scanner come supporto all'elaborazione. Di fatto, qua possono essere riportate tutte quelle funzioni utili che sono richiamate all'interno di qualche azione nella sezione delle regole sopra descritta.

Nell'esempio discusso, in particolare, non esiste la necessità di alcuna funzione di supporto e pertanto questa sezione può essere eliminata come già accennato. In realtà, però, volendo generare uno scanner che possa vivere di vita propria, bisogna fornirlo di una funziona main o il compilatore si lamenterà del nostro operato, alla fine.

A questo punto, però, è necessaria una piccola parentesi: all'atto della generazione del file .c viene prodotta la funzione yylex(), la quale analizza il flusso di dati in ingresso estrapolando i vari token secondo le regole imposte. Questa funzione, salvo diversa indicazione, non ritorna al chiamante fino a quando non ha esaurito i suoi dati in lettura. A dire la verità, la cosa può (e spesso lo fa) diventare più complessa e i dati in ingresso vengono analizzati solo in parte, un pezzo alla volta: questo è il caso di uso concomitante con strumenti come bison per la generazione di un analizzatore sintattico/lessicale. Nell'esempio proposto, ad ogni modo, tale funzione sarà chiamata all'interno della procedura principale e scorrerà sull'intero insieme di dati fino ad esaurimento scorte per poi tornare alla funzione chiamante.

Ricollegandosi a quanto detto sopra, nella sezione di codice utente sarà riportato ciò che segue:

int
main (int argc, char** argv)
{
++argc; --argv;
if(argc > 0)
yyin = fopen(argv[0], "r");
else yyin = stdin;
yylex();
return 0;
}

Nello specifico, si associa il flusso di ingresso dello scanner ad un file passato come argomento da riga di comando oppure direttamente allo standard input se il primo non è presente. Questo lo si fa semplicemente assegnando alla variabile globale yyin il corretto flusso di ingresso dal quale lo scanner estrapolerà un elemento alla volta fino al carattere di end-of-file (fine file), a seguito del quale ritornerà il valore 0.
Una volta definito il flusso di ingresso, non resta altro che attivare lo scanner e lasciare che compia il suo lavoro.
Il file flex.l

Raccogliendo i pezzi del nostro esempio, il file risultante dovrebbe avere più o meno la forma che segue:

%{
#include
%}

ID [a-zA-Z]+
SIGN [-|+]
DIGIT [0-9]
EXP [e|E][0-9]+

%option noyywrap

%%

{ID} { printf("IDENTIFICATORE\n"); }

{SIGN}?{DIGIT}+ { printf("INTERO\n"); }

{SIGN}?{DIGIT}*"."{DIGIT}+{EXP}? { printf("REALE\n"); }

[ \t\r\n]+

%%

int
main (int argc, char** argv)
{
++argc; --argv;
if(argc > 0)
yyin = fopen(argv[0], "r");
else yyin = stdin;
yylex();
return 0;
}

Il risultato finale sono poche righe e sembra impossibile che il lavoro svolto possa essere tanto, eppure ciò che da queste righe sarà generato sarà uno scanner in grado (come detto) di discriminare fra stringhe di caratteri, interi positivi o negativi e valori reali. A questo punto, non resta che provare per credere!

Per compilare il file flex.l ed ottenere quindi il file lex.yy.c basta passare il primo dei due come argomento al programma flex:

flex flex.l

Dal secondo si può invece ricavare un file eseguibile semplicemente fornendolo in ingresso ad un compilatore come ad esempio gcc. Più in pratica, basterà digitare il comando (il quale produrrà un eseguibile dal nome scanner):

gcc -o scanner lex.yy.c

L'eseguibile ottenuto è un programma a tutti gli effetti che una volta lanciato analizzerà il file fornito in ingresso oppure i dati passati sullo standard input se non sono presenti argomenti. Questo è ciò a cui si aspirava e con poche righe molto semplici è stato possibile ottenere un prodotto efficiente ed efficace in brevi, semplici passi. Per lanciarlo, basterà digitare:

./scanner

Se lanciato senza argomenti in ingresso, si potranno inserire caratteri di ogni tipo e ad ogni pressione del tasto invio questi verranno suddivisi e valutati correttamente. Per terminare l'esecuzione, basterà semplicemente digitare la magica combinazione ctrl+d, oppure la più drastica ma sempre funzionante ctrl+c.
Conclusioni

Com'è stato possibile descrivere brevemente e in modo molto elementare in queste poche righe, flex rappresenta un potente strumento per l'analisi di un flusso di dati e la sua suddivisione in token più facilmente trattabili a valle del processo di elaborazione. Le potenzialità di questo strumento vanno in realtà ben oltre la piccola panoramica di cui sopra e si consiglia di fare riferimento alla documentazione ufficiale per quanto riguarda ogni dubbio o domanda sul funzionamento o anche solo per approfondimenti.

Nella realtà l'esempio di cui sopra è estremamente semplice e di dubbia utilità, ma introduce in modo chiaro le diverse sezioni attribuendo ad ognuna di loro il ruolo che ricopre all'interno di un progetto basato su flex. A partire da questo esempio banale è possibile costruire oggetti di gran lunga più complessi e utili anche in casi reali, ma bisogna dire che spesso flex è usato in combinazione con altri software piuttosto che da solo, anche se quest'ultima alternativa non è sempre da escludere.

Un altro strumento molto utile nel campo dell'analisi sintattica è bison, di cui si consiglia uno studio o approfondimento quasi obbligatorio. Risulta allo stesso tempo semplice ed estremamente utile combinare insieme questi due oggetti per ottenere efficienti ed efficaci analizzatori sintattico/lessicali da introdurre nei propri progetti, così da poter descrivere e gestire grammatiche di ogni tipo e creare parser di qualità in poco tempo





fonte: Pluto


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

sabato 23 ottobre 2010

Storia di UNIX: Ma che cosa è UNIX esattamente?

Esiste una certa confusione su cosa sia UNIX. Poiché Linux è in qualche modo legato a UNIX, in questo scritto desidero fare una brevissima storia di UNIX.

La storia di UNIX inizia nei laboratori Bell della AT&T nel 1969, dove alcuni programmatori iniziarono a scrivere un sistema operativo per il PDP-7, uno dei primi calcolatori a transistor.

Nel '73 questo sistema venne scritto in C e da qui inizia la sua fortuna. Nel '75 viene scritta la Versione 6 di UNIX, che divenne largamente utilizzata anche fuori dai laboratori Bell.

Essendo allora UNIX libero, ogni venditore di macchine si faceva una versione proprietaria esclusiva, un po' diversa ed spesso incompatibile con le versioni degli altri venditori.

Questa situazione creava un certo imbarazzo per i produttori di applicazioni, che erano costrette a scrivere una versione per ogni venditore. Anche per gli amministratori di sistemi la vita non era facile, passare da una macchina ad un'altra era spesso molto faticoso.


Nel 1984 si forma la X/Open, una società cha ha lo scopo di definire gli standard di sistemi aperti.
Nel 1987 AT&, tuttora titolare del marchio UNIX, assieme a Sun costituirono UNIX International, proprio per dar vita a degli standard unici per UNIX. Ma come sempre succede, i tentativi di unificazione possono essere visti come tentative di sopraffazione e cosi' gli altri venditori di UNIX crearono un organismo con le stesse finalità, ma diverso, chiamato Open Software Foundation.

Nel 1993 AT&T, che aveva trasferito tutte le attività UNIX ad una apposita società (la UNIX System Laboratories), vende questa stessa a Novell.

Novell suddivide le attività UNIX in due: vende il marchio e l'utilizzo del marchio a X/Open e nel 1995 vende l'attività ( i laboratori ), battezzati per l'occasione UnixWare, a SCO.

L'anno dopo X/Open e l'Open Software Foundation si fondono nel "The Open Group".
Nel frattempo X/Open aveva fatto un importante lavoro di standardizzazione della API (Application Program Interface), producendo prima lo standard 1170, successivamente UNIX 95, poi Single UNIX Specification, Version 2, poi ancora (1998) UNIX 98.

The Open Group non solo concede il marchio, ma attraverso appositi programmi, permette ai programmatori di verificare la corrispondenza alle specifiche. Inoltre protegge l'uso del marchio (ovvero fa azioni legali contro chi lo usa impropriamente). Utilizzare il marchio UNIX costa cifre molto elevate.
Linux quindi non può fregiarsi del nome UNIX, ne tantomeno nasce da dialetti Unix esistenti. È un codice nato del tutto al di fuori della storia Unix, ma ne mima le funzioni portandole a processori di classe inferiore di quelli che usano tradizionalmente UNIX, ovvero i PC. (Intel 386, 486 ecc, Alpha, Mac..).

La causa di SCO contro Linux.

Inizialmente la SCO supportò Linux con una propria distribuzione e collaborò attivamente nell'intento di rendere più appetibile il suo Unix schiacciato dalla concorrenza Microsoft; accadde, però, che mentre la SCO perdeva le vendite a causa di un inadeguato supporto commerciale, le piccole ditte di Linux crescevano incredibilmente.

La crescita di Linux causò non pochi problemi a SCO, che venne schiacciata dalla forte crescita di Linux da un lato e dalla forza commerciale di Microsoft dall'altro. Decise allora di ricorrere per vie legali contro IBM e altre società che utilizzavano fortemente Linux al centro del proprio business. Le accuse riguardano presunte violazioni di copyright nel kernel di Linux; ciò significa che alcune parti di Linux, secondo SCO, sarebbero state copiate dal kernel di Unix, di cui SCO afferma di detenere i diritti.

All'inizio del 2007 SCO fornì i dettagli specifici della presunta violazione di copyright. Diversamente dalle precedenti affermazioni che vedevano SCO proprietaria di 1 milione di righe di codice, specificarono soltanto 326 linee di codice, la maggior parte del quale non era coperto da copyright. Ad Agosto 2007, la corte nel caso Novell stabilì, per cominciare, che SCO non possedeva neanche i diritti di copyright su Unix.

Curiosamente anche BSD soffrì di un attacco legale simile (relativamente alla neo-distribuzione BSD/386), ad opera della AT&T. La disputa si concluse nel 1994, largamente a favore di BSD, dove, tra 18000 file, soltanto 3 dovettero essere rimossi dal sistema e 70 modificati in termini di licenza.

Segue una cronologia copiata dal sito UNIX-systems e tradotta per l'occasione:

  • 1969 Il principio della storia di UNIX ha inizio nel 1969, quando Ken Thompsom, Dennis Ritchie ed altri cominciano a lavorare su di un "PDP- 7 poco usato e messo in un angolo" nei Bell Labs a quello che sarebbe diven uto UNIX.
  • 1971 La Prima edizione aveva un assembler per un PDP-11/20, un fi le system, il fork(), roff e ed. Veniva usato per la elaborazione di testi dei d ocumenti di brevetto.
  • 1973 La Quarta Edizione fu riscritta in C. Questo la rese portabi le e cambiò la storia dei Sistemi Operativi.
  • 1975 La Sesta Edizione viene rilasciata. Chiamata comunemente anch e Version 6, questa è la prima largamente disponibile fuori dai Bell Labs . La prima versione BSD (1.x) fu derivata dalla V6.
  • 1979 La Settima Edizione fu "un miglioramento sia per i prec edenti che per gli Unices successivi" [Bourne]. Aveva il C, UUCP e l a Bourne Shell. Fu effettuato il porting per il VAX ed il kernel era più di 40 Kilobytes (K).
  • 1980 Xenix: Microsoft presenta Xenix. 32V e 4BSD sono introdotti.
  • 1982 System III: UNIX System Group (USG) di AT&T rilascia System III, la prima versione pubblica esterna ai Bell Laboratories.
  • 1983 System V: Computer Research Group (CRG), UNIX System Group ( USG) ed un terzo gruppo si fondono per divenire UNIX System Development Lab. AT& T annuncia System V, la prima versione supportata.
  • 1984 4.2BSD: L'Università della California a Berkeley rila scia il 4.2BSD.
  • 1984 SVR2: Viene presentato System V versione 2. In questo anno c i sono 100.000 UNIX installati in tutto il mondo.
  • 1987 SVR3: System V versione 3 che comprende STREAMS, TLI, RFS. A questo punto ci sono 750.000 UNIX installati in tutto il mondo.
  • 1988 Viene pubblicato POSIX.1. Vengono create la Open Software F oundation (OSF) e UNIX International (UI).
  • 1989 AT&T forma UNIX Software Operation in preparazione del dis tacco di USL.
  • 1989 SVR4: unificando System V, BSD e Xenix viene rilasciato UNI X System V versione 4.
  • 1990 XPG3: X/Open lancia il marchio XPG3.
  • 1991 UNIX System Laboratories (USL) diventa una società con maggioranza controllata da AT&T.
  • 1992 SVR4.2: USL rilascia UNIX System V versione 4.2 (Destiny). A ottobre X/Open lancia il marchio XPG4. Il 22 dicembre Novell annuncia la sua in tenzione di acquisire USL.
  • 1993 4.4BSD:la versione finale di BSD 4.4BSD viene rilasciata da Berkeley. Il 16 giugno Novell acquisisce USL
  • Ultimi mesi del 1993 SVR4.2MP: Novell trasferisce i diritti del ma rchio registrato "UNIX" e la Single UNIX Specification a X/Open. A dic embre Novell rilascia SVR4.2MP, la versione finale USL OEM di System V.
  • 1995 UNIX 95: X/Open presenta il branding programme di UNIX 95. N ovell vende UnixWare business a SCO.
  • 1996 The Open Group si forma dalla fusione di OSF e X/Open.
  • 1997 Single UNIX Specification, versione 2, The Open Group pres enta la versione 2 della Single UNIX Specification, questa include il supporto p er il realtime, i threads e per i processori a 64-bit e superiori.
  • 1998 UNIX 98: The Open Group presenta la famiglia di marchi UNIX 98, che comprende Base, Workstation and Server

Unix e software libero.
Nel 1983 Richard Stallman lancia un progetto per creare GNU, un clone di Unix che fosse software libero, ovvero garantisse completa libertà di utilizzo e modifica da parte di utenti e sviluppatori, sottraendo Unix ai produttori di software proprietario. Nel 1991 il sistema fu completato con la creazione del kernel Linux da parte di Linus Torvalds. Il mondo Unix conobbe così una seconda giovinezza.


Attualmente i sistemi basati su GNU/Linux sono i più utilizzati nella grande famiglia dei sistemi Unix, soprattutto in ambito server, ma con una crescente diffusione anche sui netbook e i personal computer. Tra il 2007 e il 2008 diversi costruttori, tra cui Dell, Asus, Lenovo, HP hanno proposto computer con GNU/Linux preinstallato al grande pubblico aprendo a tale sistema le porte dell'informatica personale. Dal 2009 si stanno diffondendo telefoni cellulari e palmari basati su Android, una versione di GNU/Linux modificata da Google per essere estremamente leggera.
La più importante famiglia di sistemi derivate da Unix, ma non certificate come UNIX, è quella di BSD, di cui fanno parte FreeBSD, NetBSD, OpenBSD, DragonflyBSD e molti altri.
Da ricordare anche che nella famiglia Unix è presente il sistema operativo Minix.
C'è grande differenza tra le diciture UNIX, Unix-like e Unix:
  • UNIX è un marchio registrato ed indica un sistema operativo certificato da The Open Group, consorzio di aziende tra cui IBM, HP e Sun Microsystems. Per essere certificato, il sistema operativo deve essere conforme a specifiche determinate da The Open Group stessa;
  • Unix-like (spesso abbreviato con *nix, anche se nell'uso comune quest'ultimo termine designa prevalentemente i sistemi operativi BSD, quali FreeBSD, che possono usare questa indicazione per motivi storici) indica quei sistemi operativi che sono progettati seguendo le specifiche dei sistemi Unix, descritte nella Single UNIX Specification, ma che per questioni legali non possono usare il marchio UNIX;
  • Con Unix vengono indicati generalmente tutti i sistemi derivati dallo UNIX della AT&T.


Ricerca personalizzata
S
e ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

giovedì 21 ottobre 2010

Prey sparatutto in prima persona con ambienti dotati di gravità variabile e piccole navette sferiche.

Prey ("Preda") è un videogioco sparatutto in prima persona uscito nel 2006, sviluppato da Human Head e prodotto da 3D Realms. Inizialmente uscito per PC dotati di sistema operativo Windows XP, in seguito è stato convertito per XBOX 360, Mac OS X, Linux e iPhone.

Il seguito, Prey 2, è stato annunciato ufficialmente il 18 marzo 2008.

Lo stile di gioco di Prey è simile a quello di altri titoli dello stesso genere: attraverso gli occhi del protagonista esploreremo ambienti interagibili, uccidendo i nemici e risolvendo enigmi. Particolarità di questo titolo è l'uso estensivo di portali dinamici, spesso utilizzati dai nemici per attacchi a sorpresa; inoltre, dopo un certo punto del gioco, Tommy ha l'abilità di andare in trance e utilizzare, per un periodo limitato dalla quantità di mana posseduto, la sua forma spirituale.

Con questa si possono raggiungere zone altrimenti impossibili, oppure attivare interruttori che, a loro volta, permettono alla forma solida di Tommy di avanzare nel gioco. Altre caratteristiche degne di nota comprendono ambienti dotati di gravità variabile, piccole navette sferiche guidabili alla stregua di Descent, e passerelle magnetiche che permettono di camminare (e combattere) su muri e soffitti. Inoltre, a differenza della maggioranza degli altri FPS, quando si muore non occorre caricare un ultimo salvataggio o ripartire da un checkpoint, ma si viene portati in una sorta di limbo, dove uccidendo degli spiriti grazie a un arco Tommy può ridare vita al proprio corpo e tornare nel mondo materiale.

Una civiltà aliena, gli Oscuri, a bordo di un enorme essere vivente, la Sfera, viaggia per eoni nell’universo, seminando forme di vita organica sui pianeti, per poi rapire gli esseri viventi una volta che la vita è sbocciata su quei mondi. Gli esseri rapiti vengono processati nella Sfera: trasformati in cibo, soldati, operai, mostri ecc. Una di queste razze “seminate”, gli esseri umani, sviluppa nel corso dei secoli un contatto con il mondo spirituale, in particolare lo spirito dei nativi americani alla loro morte va nella terra degli antichi, dove riposano tutti gli antenati.

La colonna sonora, composta da circa tre ore di musiche, è stata composta da Jeremy Soule e dal fratello Julian. È stata rilasciata, non in forma completa, in due volumi. La canzone dei titoli di coda è Take me home del gruppo After Midnight Project. Inoltre, nel livello iniziale, è presente un jukebox dove è possibile selezionare e ascoltare alcune canzoni:

* Free Ride dei The Edgar Winter Group;
* Barracuda degli Heart;
* You've Got Another Thing Comin' dei Judas Priest;
* Cat Scratch Fever di Ted Nugent;
* If We Could Be dei Railer;
* Deaf Girlfriend di Scotch Greens;
* Settle Up dei Seven Mary Three;
* Machine Sex dei Sheep on Drugs;
* Anthem for Tonight degli Halifax;
* Human Resources dei The Countdown;
* Forever Dead dei SOiL;
* 10001110101 dei Clutch;
* "The Setting Sun degli MxPx (scritta appositamente per il gioco)
* (Don't Fear) The Reaper dei Blue Öyster Cult. Questa canzone si puà ascoltare solamente durante l'invasione aliena.

Screenshots.

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Imagehosting at Imageloop

Crea le tue foto ed immagini come Slideshow per eBay, Netlog, MySpace, Facebook o la tua Homepage!Mostrare tutte le immagini di questo Slideshow


fonte: Super Tux Giochi


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:


Ultimi post pubblicati

RSVP (Raccomandati Se Vi Piacciono)

Mutui & Finanze on Line

Finaziamenti Image Banner 468 x 60_f

Flickr Photostream

Antipixels & Counters

iFeed WebShake – tecnologia Blogstreet - dove il blog è di casaVero Geek iwinuxfeed.altervista.org Add to Technorati Favorites ElencoSiti tutto blog Aggregatore Directory dei blog italiani Blog360gradi - L’aggregatore di notizie a 360°

 provenienti dal mondo dei blog! BlogItalia.it - La directory italiana dei blog Feed XML offerto da BlogItalia.it Sito preferito Il Bloggatore Italian Bloggers visitor stats Programming Blogs - Blog Catalog Blog Directory AddThis Social Bookmark Button Aggregato su SocialBlog Feedelissimo Yourpage live news aggregator Paperblog : le migliori informazioni in diretta dai blog Notizie Informatiche