Archive for febbraio 2011

Cos’è JavaFX?

JavaFX è una famiglia di software applicativi, basati sulla Piattaforma Java, per la creazione di rich Internet applicationsapplicazioni web che hanno tutte le caratteristiche e funzionalità delle comuni applicazioni per computer. Con JavaFX è possibile realizzare delle applicazioni per computer, cellulari, dispositivi portatili di vario genere, televisori e altri tipi di piattaforme.

JavaFX include, oltre ad una crescente libreria di funzionalità grafiche, un vero e proprio linguaggio di programmazione indipendente da Java, chiamato “JavaFX script”, un linguaggio di scripting dichiarativo e staticamente tipizzato fortemente orientato alla programmazione grafica; questo rende la programmazione di rich Internet application, e di applicazioni grafiche in genere, particolarmente agevolata.

In aggiunta al pacchetto JavaFX SDK, che include compilatore, utilità per l'esecuzione, e tutta la libreria JavaFX necessaria per lo sviluppo, sono stati rilasciati alcuni strumenti che rendono lo sviluppo in JavaFX molto più agile:

  • Un componente aggiuntivo per NetBeans che integra tutte le fasi di sviluppo JavaFX in un unico IDE
  • JavaFX Production Suite: Utilità varie per facilitare il passaggio da programmi di grafica (Adobe Photoshop e Adobe Illustrator) e da formati come SVG, a codice JavaFX.

A Partire da Java 7, la libreria di JavaFX è distribuita con il Java Runtime Environment.

Rilevanza commerciale

JavaFX è uno dei principali attori nel mercato delle rich Internet application, in gara con Adobe Flex e Microsoft Silverlight, anche se attualmente il suo utilizzo è marginale rispetto ai concorrenti.

Sun sostiene che il 90% dei PC abbia Java installato e che sui cellulari Java sia la piattaforma dominante; per queste ragioni JavaFX sarebbe l'ambiente di sviluppo per rich Internet application più permeante nel mercato.

Caratteristiche peculiari

  • Multi piattaforma: Soprattutto grazie all'ultima versione 1.2, JavaFX rende abbastanza trasparente il passaggio da un dispositivo all'altro: con alcune accortezze (e limitazioni) si può realmente eseguire lo stesso codice JavaFX sia come applicazione desktop, sia come Applet all'interno di un browser, sia come applicazione per cellulare.
  • Trascina e installa: una funzione innovativa, ereditata dalle ultime versioni di Java, permette di creare un Applet JavaFX da eseguire all'interno di una pagina web, che può essere letteralmente trascinata sulla scrivania di lavoro del PC; così è possibile lanciare l'applicazione web anche al di fuori del browser, direttamente dal Desktop.

Il linguaggio

JavaFX introduce un linguaggio di scripting dichiarativo ad oggetti, con molti riferimenti alla programmazione funzionale, estremamente pratico per lo sviluppo di applicazioni grafiche, con una sintassi simile a JavaScript e, per certi aspetti, ad ActionScript, che permette di gestire in modo semplice ed efficace le interazioni tra i controlli grafici, e rende del tutto banale la gestione delle animazioni più comuni (dissolvenze, ingrandimenti, spostamenti ecc.). JavaFX elimina quindi tutta la ridondanza tipica di Java, e rappresenta un naturale passaggio per i programmatori tradizionali dello storico linguaggio di Sun.

JavaFX permette anche di interagire senza alcuno sforzo con classi Java preesistenti. È inoltre possibile fare l'opposto: si può includere una applicazione JavaFX all'interno di un normale programma scritto in Java e Swing.

Lo spazio grafico di lavoro di JavaFX è un oggetto Stage, radice di ogni applicazione JavaFX, che può intercambiare oggetti Scene, dei contenitori (oggetti che estendono la classeContainer) di generici componenti grafici (Node). A tutti gli effetti un oggetto Scene è un albero di nodi, in cui ogni nodo può essere sia un contenitore (che ad esempio specifica la disposizione bidimensionale dei suoi sotto componenti), sia un nodo grafico, cioè un Lightweight Component con una opportuna rappresentazione ed una serie di attributi che ne descrivono le proprietà (posizione, dimensioni, colorazione ecc.): il concetto ricorda molto quello di DOM di una pagina HTML, in cui possono essere disposti opportuni tag con alcuni attributi.

Funzionalità degna di nota è il “binding” (letteralmente "legare"): la possibilità di associare ad una variabile A (in questo caso un numero) una espressione ESPR

        var A : Number = bind ESRP

ogni qualvolta ESPR cambia valore, anche il valore di A (ovunque sia utilizzato) varia: questo introduce grossi problemi di prestazioni, soprattutto nel caso di abuso di binding, ma semplifica estremamente la comune interazione tra componenti grafiche: per esempio si può facilmente associare il valore di un qualunque controllo, ad esempio una barra di scorrimento, all'attributo di un altro componente (situazione molto comune), come la dimensione di una immagine, o la velocità di una animazione.

Esempio: Hello World

Questo è un esempio di piccolo programma JavaFX che mostra in una finestra 250×80 un messaggio di "Hello World!".

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
 
Stage {
    title: "Titolo dell'applicazione"
    width: 250
    height: 80
    scene: Scene {
        content: [
            Text {
                font : Font {
                    size : 16
                }
                x: 10
                y: 30
                content: "Hello World!"
            }
        ]
    }
}

Il nome di una classe, ad esempio Font, seguito da parentesi graffe, come avviene nella notazione JSON, serve per creare un oggetto: all'interno delle parentesi si possono specificare gli attributi dell'oggetto; per es. size: 16, indica la dimensione dell'etichetta di testo e x: 10 indica la posizione orizzontale del testo rispetto alla finestra. Per capire la corrispondenza, in Java avremmo scritto:

Font mioFont = new Font();
mioFont.setSize(16);
Text mioText = new Text();
mioText.setFont(mioFont);
mioText.setX(10);
mioText.setY(30);
mioText.setContent("Hello World!");


Le parentesi quadre denotano invece l'inizio di una "Sequenza" (Sequence), una specie di lista di oggetti alla quale si possono aggiungere/rimuove elementi. Ad Esempio

var miaSequenza : Number = [10, 20, 40];
insert 30 into miaSequenza;
remove 40 from miaSequenza;

crea una sequenza di 3 numeri, e successivamente rimuove l'elemento "40" e aggiunge "30".

Date di rilascio

Il linguaggio di scripting di JavaFX era originariamente un progetto di Chris Oliver, chiamato F3, ed è stato annunciato per la prima volta da Sun Microsystem alla conferenza JavaOne del Maggio 2007. Soltanto un anno dopo, nel Maggio 2008, Sun ha annunciato il piano di distribuire JavaFX per desktop entro la fine del 2008, e per i cellulari a metà del 2009, ed ha reso ufficiale la collaborazione con On2 Technologies per incorporare in JavaFX la possibilità di riprodurre alcuni formati video (componente fondamentale per concorrere con Adobe Flash).

A partire dal Luglio 2008 è stato possibile scaricare una anteprima di JavaFX per Windows e Macintosh.

  • La prima versione ufficiale, JavaFX 1.0, è stata rilasciata il 4 dicembre 2008.
  • JavaFX 1.1, annunciato nel Febbraio 2009, è la prima versione di JavaFX ad includere le componenti per lo sviluppo su piattaforme mobili.
  • JavaFX 1.2 è stato reso pubblico nel Giugno 2009 ed ha introdotto molte novità fondamentali, oltre ad un notevole aumento delle prestazioni:
    • Supporto per Linux e Solaris
    • Controlli e Layout grafico integrati
    • CSS come strumento per definire l'aspetto grafico dei controlli
    • Grafici e data charts di vario tipo
  • JavaFX 1.3 è stato rilasciato nell'Aprile 2010 con l'introduzione di diverse novità tra cui:
    • Nuovi controlli UI e ampliato supporto a CSS
    • Miglioramenti nelle prestazioni, grazie anche all'introduzione di un nuovo motore grafico denominato Prism
    • Editor visuale chiamato Composer, disponibile in NetBeans 6.9
    • Supporto per le applicazioni su TV
    • Un più ampio spettro di emulatori per cellulari e TV

Licenze

C'è ancora un po' di confusione in merito alle licenze con cui è distribuito JavaFX: sembra che Sun abbia intenzione di rilasciare in futuro il codice di JavaFX ma

  • JavaFX Runtime è tuttora un software proprietario, ed il sorgente non è ancora stato rilasciato,
  • Il compilatore JavaFX, il componente aggiuntivo per NetBeans e alcune parti del codice delle classi JavaFX sono state rilasciate sotto la GNU Public License versione 2.

 

Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso modo

Cos’è un design pattern?

Nell'ingegneria del software, un design pattern (schema di progettazione) può essere definito "una soluzione progettuale generale a un problema ricorrente". Esso non è una libreria o un componente di software riusabile, quanto piuttosto una descrizione o un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software.

I design pattern orientati agli oggetti tipicamente mostrano relazioni ed interazioni tra classi o oggetti, senza specificare le classi applicative finali coinvolte. Tali pattern risiedono quindi nel dominio dei moduli e delle interconnessioni. Ad un livello più alto sono invece i Pattern architetturali che hanno un ambito ben più ampio, descrivendo un pattern complessivo adottato dall'intero sistema.

La differenza tra un algoritmo e un design pattern è che il primo risolve problemi computazionali, mentre il secondo è legato agli aspetti progettuali del software.

Storia

Il termine fu inizialmente introdotto in architettura in un celebre saggio di Christopher Alexander; in seguito, proprio l'opera di Alexander ispirò la nascita di un settore dell'ingegneria del software dedicato all'applicazione del concetto di design pattern alle architetture software, soprattutto object-oriented. Oggi, l'espressione design pattern viene usata principalmente con riferimento a questo particolare contesto.

Il tema dei pattern viene oggi considerato una delle linee principali di sviluppo dell'ingegneria del software object-oriented. Esso trova applicazioni in tutta una serie di contesti di grande interesse per l'industria del software, dallo sviluppo di software basato su componenti, ai sistemi aperti, ai framework e così via. La maggior parte dei linguaggi di programmazionemoderni, e di tecnologie correlate, sono stati progettati (o modificati) tenendo conto anche dell'obiettivo di essere coerenti con questo approccio emergente allo sviluppo del software.

La nascita del "movimento" dei pattern in informatica si deve al celebre libro Design Patterns: Elementi per il riuso di software ad oggetti di Erich GammaRichard HelmRalph Johnson eJohn Vlissides (1995). Grazie al successo di quest'opera, i suoi quattro autori divennero nomi talmente citati che la comunità scientifica iniziò, per brevità, a identificarli collettivamente con un nomignolo: la "banda dei quattro" (Gang of Four o Gof).

Struttura di un pattern

Un design pattern è costituito da:

  • il nome, costituito da una o due parole che siano il più possibile rappresentative del pattern stesso;
  • il problema, ovvero la descrizione della situazione alla quale si può applicare il pattern. Può comprendere la descrizione di classi o di problemi di progettazione specifici, come anche una lista di condizioni perché sia necessario l'utilizzo del pattern;
  • la soluzione, che descrive gli elementi costitutivi del progetto con le relazioni e relative implicazioni, senza però addentrarsi in una specifica implementazione. Il concetto è di presentare un problema astratto e la relativa configurazione di elementi adatta a risolverlo;
  • le conseguenze, i risultati e i vincoli che derivano dall'applicazione del pattern. Sono fondamentali in quanto possono essere l'ago della bilancia nella scelta dei pattern: le conseguenze comprendono considerazioni di tempo e di spazio, possono descrivere implicazioni del pattern con alcuni linguaggi di programmazione e l'impatto con il resto del progetto.

L'uso di pattern nella descrizione di altri pattern dà origine ai cosiddetti linguaggi di pattern.

Classificazione dei design pattern

I design pattern possono essere classificati con diversi criteri, i più comuni dei quali sono quelli che evidenziano il tipo di problema che si cerca di risolvere. Il tipo di problema può essere legato ad uno specifico dominio progettuale (telecomunicazioni, reti, software…) oppure, più comunemente, al problema progettuale in senso più ampio (nell'ingegneria del software, ad esempio, si può parlare di creazione, comportamento, navigazione di oggetti o strutture dati).

Nel loro libro la "banda dei quattro" identificò 23 tipi di design pattern, suddivisi in 3 categorie: strutturali, creazionali e comportamentali.

Pattern creazionali

I pattern creazionali nascondono i costruttori delle classi e mettono dei metodi al loro posto creando un'interfaccia. In questo modo si possono utilizzare oggetti senza sapere come sono implementati.

  • L'Abstract factory (letteralmente, "fabbrica astratta") fornisce un'interfaccia per creare famiglie di oggetti connessi o dipendenti tra loro, in modo che non ci sia necessità da parte degli utilizzatori di specificare i nomi delle classi concrete all'interno del proprio codice.
  • Il Builder ("costruttore") separa la costruzione di un oggetto complesso dalla sua rappresentazione, in modo che il processo di costruzione stesso possa creare diverse rappresentazioni.
  • Il Factory method ("metodo fabbrica") fornisce un'interfaccia per creare un oggetto, ma lascia che le sottoclassi decidano quale oggetto istanziare.
  • La Lazy initialization ("inizializzazione pigra") è la tattica di instanziare un oggetto solo nel momento in cui deve essere usato per la prima volta. È utilizzato spesso insieme al patternfactory method.
  • Il Prototype pattern ("prototipo") permette di creare nuovi oggetti clonando un oggetto iniziale, o prototipo.
  • Il Singleton ("singoletto") ha lo scopo di assicurare che di una classe possa essere creata una sola istanza.

Pattern strutturali

I pattern strutturali consentono di riutilizzare degli oggetti esistenti fornendo agli utilizzatori un'interfaccia più adatta alle loro esigenze.

  • L'Adapter ("adattatore") converte l'interfaccia di una classe in una interfaccia diversa
  • Bridge ("ponte") permette di separare l'astrazione di una classe dalla sua implementazione, per permettere loro di variare indipendentemente.
  • Il Composite ("composto"), utilizzato per dare la possibilità all'utilizzatore di manipolare gli oggetti in modo uniforme, organizza gli oggetti in una struttura ad albero.
  • Il Container ("contenitore") offre una soluzione alla rottura dell'incapsulamento per via dell'uso dell'ereditarietà.
  • Il Decorator ("decoratore") consente di aggiungere metodi a classi esistenti durante il run-time (cioè durante lo svolgimento del programma), permettendo una maggior flessibilità nell'aggiungere delle funzionalità agli oggetti.
  • Extensibility ("estendibilità")
  • Il Façade ("facciata") permette, attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfacce complesse e diverse tra loro.
  • Flyweight ("peso piuma"), che permette di separare la parte variabile di una classe dalla parte che può essere riutilizzata.
  • Proxy fornisce una rappresentazione di un oggetto di accesso difficile o che richiede un tempo importante per l’accesso o creazione. Il Proxy consente di posticipare l’accesso o creazione al momento in cui sia davvero richiesto.
  • Pipes and filters ("condotti e filtri")
  • Private class data ("dati di classe privati")

Pattern comportamentali

I pattern comportamentali forniscono soluzione alle più comuni tipologie di interazione tra gli oggetti.

  • Chain of Responsibility ("catena di responsabilità") diminuisce l'accoppiamento fra l'oggetto che effettua una richiesta e quello che la soddisfa, dando a più oggetti la possibilità di soddisfarla
  • Il Command ("comando") permette di isolare la porzione di codice che effettua un'azione dal codice che ne richiede l'esecuzione.
  • Event Listener ("ascoltatore di eventi")
  • Hierarchical Visitor ("visitatore di gerarchia")
  • Interpreter ("interprete") dato un linguaggio, definisce una rappresentazione della sua grammatica insieme ad un interprete che utilizza questa rappresentazione per l'interpretazione delle espressioni in quel determinato linguaggio.
  • L'Iterator ("iteratore") risolve diversi problemi connessi all'accesso e alla navigazione attraverso gli elementi di una struttura dati, senza esporre i dettagli dell'implementazione e della struttura interna del contenitore.
  • Il Mediator ("mediatore") si interpone nelle comunicazioni tra oggetti, allo scopo di aggiornare lo stato del sistema quando uno qualunque di essi comunica un cambiamento del proprio stato.
  • Il design pattern Memento ("promemoria") è l'operazione di estrarre lo stato interno di un oggetto, senza violarne l'incapsulazione, e memorizzarlo per poterlo ripristinare in un momento successivo.
  • L'Observer ("osservatore") definisce una dipendenza uno a molti fra oggetti diversi, in maniera tale che se un oggetto cambia il suo stato, tutti gli oggetti dipendenti vengono notificati del cambiamento avvenuto e possono aggiornarsi.
  • Single-serving Visitor
  • State ("stato") permette ad un oggetto di cambiare il suo comportamento al cambiare di un suo stato interno.
  • Lo Strategy ("strategia") è utile in quelle situazioni dove è necessario modificare dinamicamente gli algoritmi utilizzati da un'applicazione.
  • Il Template method ("metodo schema") permette di definire la struttura di un algoritmo lasciando alle sottoclassi il compito di implementarne alcuni passi come preferiscono.
  • Il Visitor ("visitatore") permette di separare un algoritmo dalla struttura di oggetti composti a cui è applicato, in modo da poter aggiungere nuovi comportamenti senza dover modificare la struttura stessa.


Altri tipi di pattern

Alcuni pattern definiti nella letteratura non operano a livello di design del sistema, non possono quindi essere definiti propriamente design pattern. Alcuni esempi sono:

Pattern architetturali

I pattern architetturali operano ad un livello diverso (e più ampio) rispetto ai design pattern, ed esprimono schemi di base per impostare l'organizzazione strutturale di un sistema software. In questi schemi si descrivono sottosistemi predefiniti insieme con i ruoli che essi assumono e le relazioni reciproche.

Pattern di metodologia

Pattern di concorrenza

Nel caso di processi che eseguono contemporaneamente delle attività su dati condivisi si parla di concorrenza. Alcuni design pattern sono stati sviluppati per mantenere sincronizzato lo stato dei dati in tali situazioni:


Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso modo

Cosa sono i Portlet?

Da Wikipedia, l'enciclopedia libera.

portlet sono moduli web riusabili all'interno di un portale Web. Tipicamente, una pagina di un portale è suddivisa in una collezione di finestre, il contenuto di ciascuna delle quali viene definito da un diverso portlet. Ciascun portlet è destinato ad una semplice applicazione, ad esempio servizi di news, previsioni meteo, o funzionalità legate a forum o email. In quanto finestre, i portlet possono essere chiusi o ridotti o spostati. L'utente che accede al portale può così personalizzare la sua pagina personale, adattando i contenuti della stessa alle proprie esigenze.

La tecnologia dei portlet e dei portali utilizza un insieme di standard allo scopo di consentire lo sviluppo di portlet portabili, ovvero che possano essere usati nel contesto di portali sviluppati con tecnologie differenti.

Standard

Lo standard WSRP (Web Services for Remote Portlets) definisce un protocollo standard per il dialogo fra il portale e i portlet. La Java Portlet Specification (JSR168) definisce un insieme di interfacce applicative (API) per l'interazione fra un portlet containe re i portlet; una implementazione molto diffusa della specifica JSR168 è Apache Pluto; altre implementazioni sono state sviluppate da IBMOracle e BEA Systems. Fra le implementazioni open source di portali conformi allo standard ci sono anche Jetspeed 2 Portal Server (ancora sviluppato da Apache), JBoss PortalLiferay Portal e Stringbeans Portal.

Portlet e Servlet

I portlet sono un tipo speciale di servlet, progettati per essere inseriti facilmente in un portal server ed essere eseguiti. A differenza dei servlet, i portlet non hanno comunicazione diretta con il browser, non possono dunque inviare redirect o errori, inoltrare richieste o scrivere markup al flusso in uscita.

I portlet sono componenti più semplici e quindi più leggeri. Ciò consente una maggior facilità di gestione: possono essere impostati, installati o rimossi, creati o cancellati e impostati direttamente dall'amministratore usando l'interfaccia del portale.

A differenza dei servlet, che possono rappresentare pagine web complete, i portlet rappresentano singoli componenti, aggregati dal portale che svolge la funzione di Web container. Ne consegue che il portlet container del portale ha un ruolo più determinante del servlet container, poiché attraverso di esso i portlet comunicano tra loro, accedono a contenuti remoti e a dati persistenti. Inoltre i portlet non possono essere raggiunte da un URL specifico, in quanto è il portale intero ad avere associato l'indirizzo.


Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso modo; possono applicarsi condizioni ulteriori. Vedi le condizioni d'uso per i dettagli. Wikipedia® è un marchio registrato della Wikimedia Foundation, Inc. 

Rilasciato Wine 1.3.11

Wine (Wine Is Not an Emulator, un acronimo ricorsivo, Wine non è un emulatore) è un software scritto in C nato originariamente per GNU/Linux, poi esteso ad altri sistemi operativi, con lo scopo di permettere il funzionamento dei programmi sviluppati per il sistema operativo Microsoft Windows. Da notare è il fatto che il nome Wine assomiglia a WINdows Emulator, anche se come citato in precedenza esso non lo è affatto.

 
Da poche ore Wine è stato ufficialmente rilasciato nella sua ultima versione stabile, ovvero la 1.3.14.
 
Le novità più importanti di questa nuova release sono:
 
- Many cleanups to address Valgrind and Clang warnings.
- Support for creating compressed cabinet files.
- Translation updates.
- Various bug fixes.
 
Questo tool on può assolutamente mancare sulla nostra distribuzione Linux.
 
A seguire le istruzioni per farlo funzionare su Ubuntu 10.10 Meverick affidandosi ai repository ufficiali PPA.
 
Aprite un terminale e digitate:
 
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
 
ed installate wine:
 
sudo apt-get install wine1.3
 
Troverete Wine nel menu Applicazioni.

Wget per scaricare interi siti web

Ecco uno dei comandi base e fondamentali che ogni utente dovrebbe conoscere:  wget.

Wget non è altro che una piccola utility a riga di comando in grado di recuperare file tramite i più famosi protocolli internet come HTTP, HTTPS, FTP!

Inoltre questo tool è non interattivo, può quindi funzionare in background senza che l’utente sia sempre presente.
 

Con wget potrete scaricare un’intera pagina web e leggerla offline o addirittura l’intera struttura e l’intero sito che verranno salvati sul vostro HD grazie ad un processo ricorsivo. Viene rispettato il Robot Exclusion Standard (robots.txt), e la cosa bella di wget è che insisterà nello scaricare un file anche se questo è momentaneamente non disponibile a causa di qualche problema di rete fino a quando non sarà disponibile nuovamente; addirittura se il server lo supporta, si può continuare il download da dove era stato interrotto.

Wget è stato realizzato in modo robusto per supportare connessioni lente o instabili.

 

Vediamo ora come utilizzare wget. Se possedete Ubuntu non dovrete installarlo essendo già presente di default nel sistema ma questo vale anche per molte distro linux.

Da dire che wget è un tool stracolmo di opzioni,che permette di fare davvero tantissime cose. Oggi vi mostro come scaricare un intero sito web, in background, dando soltanto una linea di comando. La sintassi esatta è:

wget -k -r -p -D dominio.org --restrict-file-names=sistema http://www.sitoweb.org

E, adesso, capiamo cosa significano tutti gli argomenti che abbiamo dato in pasto a wget.

  • -k (o --convert-links): questo argomento fa si che, alla fine del processo di download, tutti i links alle pagine siano convertiti a links relativi, in modo da permettere la navigazione offline;
  • -r (o --recursive): questo argomento permette il download – in gergo – di tipo ricorsivo, così da scaricare sicuramente l’intero sito web;
  • -p (o --page-requisites): questo argomento permette di scaricare anche ciò di cui si ha bisogno per visualizzare correttamente la pagina (fogli di stile,immagini, javascripts eccetera eccetera);
  • -D (o --domains): questo è un argomento importantissimo, per non ritrovarvi la macchina piena di pagine web inutili: scarica soltanto i links interni al dominio (o ai domini, separati l’un l’altro da una virgola) da voi specificati, in genere si usa quello del sito stesso;
  • --restrict-file-names: altro argomento importante, permette di modificare i nomi dei files così da non andare in contrasto con il sistema operativo che state usando. I possibili parametri sono unix (se dovrete visualizzare il sito su un sistema Unix) o windows (se dovrete visualizzarlo su Windows).
  • L’ultimo parametro, come avrete capito, è l’url del sito web che andrete a scaricare.

Se, quindi, io volessi scaricare l’intero sito http://www.chimerarevo.com, andrei a scrivere a terminale

wget -k -r -p -D chimerarevo.com --restrict-file-names=unix http://www.chimerarevo.com

Alla fine del processo, avrete bello e pronto il vostro sito web in una cartellache si chiamerà esattamente www.vostrosito.org. Qualora dovreste avere problemi con il download (se, per caso, dovesse cadervi la connessione ad esempio) potrete utilizzare il comando precedente per continuare il download, aggiungendo però anche il parametro -nc (o --no-clobber)che permette di non sovrascrivere i files già scaricati.

Semplice, veloce e indipendente: cosa c’è di meglio? :)
 

Fonte: http://www.chimerarevo.com/2010/06/16/wget-un-comodo-comando-da-terminale-per-scaricare-interi-siti-web/

This opera is licensed under a Creative Commons Attribuzione 2.5 Italia License.

Cos’è Spring?

Da Wikipedia, l'enciclopedia libera.
 

Spring è un framework open source per lo sviluppo di applicazioni su piattaforma Java.

La prima versione venne scritta da Rod Johnson e rilasciata con la pubblicazione del proprio libro "Expert One-on-One Java EE Design and Development" (Wrox PressOttobre 2002).

All'inizio il framework venne rilasciato sotto Licenza Apache nel giugno 2003.
Il primo rilascio importante è stato l'1.0 del marzo 2004, seguito da due successivi rilasci importanti nel settembre 2004 e nel marzo 2005.

Spring è stato largamente riconosciuto all'interno della comunità Java quale valida alternativa al modello basato su Enterprise JavaBeans (EJB). Rispetto a quest'ultimo, il framework Spring lascia una maggiore libertà al programmatore fornendo allo stesso tempo un'ampia e ben documentata gamma di soluzioni semplici adatte alle problematiche più comuni.

Sebbene le peculiarità basilari di Spring possano essere adottate in qualsiasi applicazione Java, esistono numerose estensioni per la costruzione di applicazioni web-based costruite sul modello della piattaforma Java EE. Questo ha permesso a Spring di raccogliere numerosi consensi e di essere riconosciuto anche da importanti vendor commerciali quale framework di importanza strategica.

Storia [modifica]

Nel 2000 Rod Johnson inizia lo sviluppo di Spring mentre lavora a Londra come consulente libero professionista, ma è durante la scrittura di "Expert One-on-One Java EE Design and Development" che espande il proprio codice al fine di esprimere la sua visione di semplificare e rendere più consistente il modo di interoperare delle varie parti che compongono una applicazione Java EE.

Prima del 2001 i modelli di programmazione dominanti per le applicazioni web erano basati sulle Java Servlet API e gli Enterprise JavaBeans. Entrambe le specifiche furono create da Sun Microsystems in collaborazione con altri vendor e godevano di grande popolarità all'interno della comunità Java. Le applicazioni che non erano basate sul web si appoggiavano ad altri strumenti e paradigmi di programmazione. Rod Johnson ha avuto il merito di creare un framework basato su principi "ottimali" largamente accettate e le ha rese disponibili per tutti i tipi di applicazione, non solo web.

Nel febbraio 2003 un piccolo gruppo di sviluppatori ha creato un progetto su Sourceforge al fine di estendere il framework e dopo circa un anno ha rilasciato la prima versione 1.0. Sebbene sia stato largamente adottato, Spring venne pesantemente criticato per il fatto che il progetto si poneva come obiettivo la semplice integrazione con gli standard Java EE senza un documento di specifica controllato da un comitato ufficiale.

Spring tuttavia rese popolari alcune tecniche prima d'allora poco note come l'Inversion of Control il paradigma di Programmazione orientata agli aspetti. Il 2005 ha visto un enorme aumento di consensi in concomitanza di un nuovo importante rilascio. Inoltre ilforum ufficiale ha notevolmente aiutato ad accrescere la popolarità del framework e si è imposto quale fonte primaria di informazione e di supporto agli utenti.