gennaio 8th, 2010
No Comments
Sun Microsystems Inc. ha annunciato la disponibilità di Java™ Platform Enterprise Edition 6 (Java EE 6).
Java EE – la principale piattaforma per lo sviluppo e il deployment di applicazioni web ed enterprise – possiede ora nuove caratteristiche che ne incrementano la flessibilità e permettono alle aziende di adottare, in alternativa alla piattaforma enterprise completa, specifici scenari applicativi per meglio rispondere ai requisiti dei singoli progetti . Java EE SDK è già stato scaricato più di 18 milioni di volte e le specifiche sono supportate da 28 licenziatari che commercializzano prodotti compatibili con Java EE. Gli sviluppatori possono scaricare Java EE SDK dall’indirizzo http://java.sun.com/javaee/downloads/index.jsp.
Java EE 6 offre una solida base per la continua crescita della tecnologia Java sia dal punto di vista degli sviluppatori che da quello dei solution provider. Le specifiche Java EE 6 introducono i Profile, un sistema che permette di adeguare la piattaforma ai singoli scenari applicativi. I Profile offrono un maggior grado di flessibilità a clienti, ISV e vendor di piattaforma, aiutandoli ad affrontare meglio mercati specifici.
Web Profile, per esempio, è un profilo “compatto” realizzato appositamente per gli scenari basati su applicazioni Web che non richiedono tutto il set di funzionalità della piattaforma Java EE completa. Abbinato a importanti miglioramenti delle specifiche esistenti e all’introduzione della tecnologia Enterprise JavaBeans™ (EJB) 3.1 Lite, Web Profile consente agli sviluppatori Web di realizzare applicazioni in maniera rapida e semplice senza doversi costruire e gestire uno “stack custom”. Inoltre, gli sviluppatori che dovessero necessitare della potenza della piattaforma tradizionale possono passare agevolmente dall’ambiente Web Profile alla piattaforma Java EE 6 completa. Ulteriori profili saranno definiti in futuro attraverso il Java Community Process per affrontare differenti scenari applicativi.
ottobre 9th, 2009
1 Comment
Guava è una collezione di librerie Java non presenti in Google Collection Library anche se quest’ultima presto sarà incluso nel progetto. Al momento sono solo tre i namespace inclusi in tale progetto: com.google.common.primitives, com.google.common.io e com.google.common.util.concurrent. Queste librerie arricchiscono quelle Java con molte classi e API create dal gruppo di sviluppatori Google e utilizzate in molti dei loro progetti realizzati con tale linguaggio.
Spulciando un’overview vediamo un po’ di feature, che possono tornare utili ai nostri progetti. Un esempio è l’introduzione della classe CharMatcher per manipolare caratteri all’interno di una stringa come la funzione CharMatcher.is(‘-’). Le stringhe sono sempre manipolabili con la classe Joiner, che può legare una sequenza di numeri separati da uno o più caratteri scelti con la seguente riga di codice:
-
String s = Joiner.on(", ").join(numbers);
Per la separazione di stringe troviamo la classe Splitter in grado di separare parti di stringa da un testo complesso molto meglio di quanto faccia la funzione split() di Java:
-
Iterable<String> pieces =
-
Splitter.on(',').split("trivial,example")
Per ciò che riguarda l’I/O, le classi ByteStreams, CharSequence e Files promettono di leggere le righe di un file in modo molto stringato. Sotto infatti vediamo un esempio di routine in grado di contare le righe di un file:
-
int count = Files.readLines(
-
new File("/path/to/file"),
-
Charsets.UTF_8,
-
new LineProcessor<Integer>() {
-
int count = 0;
-
public boolean processLine(String line) {
-
count++;
-
}
-
public Integer getResult() { return count; }
-
});
Anche le primitive non sono esenti da novità con l’introduzione di classi come Ints, Longs o Bytes
.
-
int[] nums = ...;
-
List<Integer> list = Ints.asList(nums);
In attesa della versione 1.0, il rimando è ai javadoc ufficiali.
Guava, una collezione di librerie Java da Google
ottobre 8th, 2009
1 Comment
CodeRun è un IDE per sviluppare applicazioni ASP.NET, C#, PHP, JavaScript, HTML, CSS, Silverlight e WPF. Non è la classica applicazione da installare sulla propria macchina e da avviare all’occorrenza ma un servizio online che permette di scrivere applicazioni utilizzando il proprio browser internet. Sì, stiamo parlando proprio di un IDE online, con tanto di editor, di gestione della solution, di debug e di Error List. Si chiama CodeRun ed è un servizio totalmente gratuito. Trovate tutte le sue caratteristiche più salienti su questa pagina, mentre qui potete avviare direttamente l’IDE. Davvero interessante!
CodeRun, per programmare online
giugno 26th, 2009
1 Comment
Ajax è una tecnica di programmazione che consente lo sviluppo di RIA (Rich Internet Application).
Le RIA sono applicazioni web caratterizzate da grande interattività e velocità di esecuzione.
L’elaborazione dei dati avviene a livello client (browser) e le chiamate al server avvengono in “background” in modo asincrono (Ajax sta per Asynchronous JavaScript and XML).
Cosa significa in parole povere che lo scambio dati tra client e server avviene in background?
Vuol dire che lo scambio dati tra client e server permette l’aggiornamento dinamico della pagina web senza che quest’ultima venga ricaricata e senza dover richiamare una nuova pagina ma, soprattutto, è da sottolineare che non bisogna attendere che sia stata ultimata la richiesta per poterne effettuare altre.
Ajax non è un linguaggio di programmazione ma un insieme di tecnologie, vediamo quali sono:
- HTML/XHTML/CSS per il markup;
- DOM (Document Object Model) manipolato attraverso un linguaggio ECMAScript come JavaScript;
- XMLHttpRequest per lo scambio asincrono dei dati tra client e server;
- XML come formato per lo scambio dati. Non è obbligatorio e al suo posto si può scegliere un altro formato come JSON o anche semplice testo.
Le applicazioni web che fanno uso di Ajax necessitano di browser di ultima generazione che supportino tale tecnologia.
Tutti i principali browser come FireFox, Internet Explorer, Google Chrome, Opera e Safari supportano Ajax ma è buona norma testare i propri applicativi per verificare la compatibilità.
giugno 25th, 2009
1 Comment
Matt Snider ha scritto sul suo blog un interessante articolo in cui espone alcuni consigli utili ad ottimizzare la compressione dei file Javascript. Quello di comprimere i file Javascript è un compito comune, ma occorre eseguirlo nel migliore dei modi. Ecco dunque i consigli di Matt.
Usare meno “var”
Come sappiamo, per dichiarare una variabile occorre usare la keyword var, ma per gruppi di variabili, è consigliabile usarla una sola volta e raggruppare una lista di nomi:
view plaincopy to clipboardprint?
1. // tante var
2. var v1 = 1;
3. var v2 = {};
4. var v3 = function() {
5. // function code
6. };
7.
8. // una var
9. var v1 = 1,
10. v2 = {},
11. v3 = function() {
12. // function code
13. };
// tante var
var v1 = 1;
var v2 = {};
var v3 = function() {
// function code
};
// una var
var v1 = 1,
v2 = {},
v3 = function() {
// function code
};
Usare shortuct pointers per i namespace prolissi
giugno 25th, 2009
1 Comment
Che i form siano un elemento di criticità nel contesto di un sito non lo scopriamo oggi e non mancano approfondite analisi svolte con il metodo dell’eyetracking che hanno messo in risalto i fattori più problematici.
Sempre basato sul tracciamento oculare è lo studio recentemente svolto da CXPartners. Sotto esame il comportamento di un gruppo di utenti alle prese con i moduli di registrazione di eBay, Yahoo Mail, GMail e Hotmail.
La sintesi dei risultati consiste in 10 linee guida. Le label? L’ideale è posizionarle verticalmente rispetto al campo corrispondente e quando ciò non sia possibile è consigliabile piazzarle, ben evidenziate in grassetto, sul lato sinistro. Evitare poi di distribuire i campi su più di una colonna; per situazioni in cui si inseriscano due input di testo sulla stessa riga (classico il caso della coppia nome/cognome) è opportuno fare in modo che siano ben ravvicinati e che siano raggruppati sotto una sola label.
Interessante poi l’osservazione sui campi obbligatori. Il consiglio, in base alle osservazioni svolte, è di non usare l’asterisco come indicazione di una compilazione obbligatoria, ma di rendere esplicito il fatto che un campo è opzionale attraverso un’indicazione testuale.
Fonte: Uno studio sull’usabilità dei form
giugno 25th, 2009
4 Comments
In questo articolo esamineremo e utilizzaremo la libreria open source Skype4Java, per interagire con Skype, uno dei programmi VoIP più diffusi al mondo. Questa libreria può essere concettualmente suddivisa in due parti: la prima, contenente le classi e le interfacce Java utilizzabili dal programmatore, e la seconda che comprende le librerie native, richiamate tramite tecnologia JNI (Java Native Interface), per la comunicazione a basso livello con il client Skype.
È possibile scarircare la libreria e la documentazione del progetto dal sito ufficiale (https://developer.skype.com/wiki/Java_API).
Skype4Java ci permette è possibile effettuare moltissime operazioni, tra cui:
- Visualizzare e modificare le impostazioni del client (lingua, sfondi, proprietà)
- Visualizzare, aggiungere, modificare ed eliminare i contatti ed i gruppi
- Gestire il proprio profilo
- Avviare una sessione voce
- Avviare una sessione di chat
- Inviare SMS
La classe principale della libreria è com.skype.Skype. Questa classe ci fornisce numerosi metodi statici che ci permettono di recuperare moltissime informazioni: versione installata del client, lista dei gruppi, lista dei contatti, informazioni relative ai profili dei nostri contatti, e molte altre informazioni.
giugno 24th, 2009
3 Comments
A volte nasce l’esigenza di utilizzare una funzione che ritorna un cursore. Basti pensare ad un package centralizzato che gestisce funzionalita’ comuni. Il problema nasce nel momento in cui si voglia fare manutenzione al package comune senza dover modificare chi lo utilizza. Come dobbiamo comportarci con i tipi? Come definiamo la variabile che contiene il cursore di ritorno dalla funzione se tale cursore e’ una join di piu’ tabelle (quindi non possimo fare nome_tabella%rowtype), puo’ variare (per evoluzioni/correzioni) ed e’ dentro una funzione (quindi non possimo fare nome_cursore%rowtype)?
La risposta in breve e’: basta definire un tipo che sara’ il tipo della variabile che conterra’ il cursore e lo stesso tipo sara’ il tipo di ritorno della funzione. Nello specifico:
nell’header del PACKAGE comune definiamo un tipo record:
- TYPE ty_tipo_ritorno_rec IS RECORD (
- nome varchar2(100),
- cognome varchar2(100),
- dt_nasc date,
- dt_ult_mod date
- );
giugno 23rd, 2009
1 Comment
Un piccolo tutorial che spiega come realizzare un motore di ricerca in ASP, da integrare nel proprio sito web. La funzione di questo motore è quella di ricercare il contenuto di ogni singolo file presente sul sito. Andiamo ad analizzare il codice:
<title>Risultato della ricerca per </title>
<p align="center">
Risultato della ricerca per: <b></b>
</p>
<%
Const fsoForReading = 1
'Dimensioniamo il FileSytemObject
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
'Impostiamo la directory in cui cercare usando MapPath
'nel nostro caso impostiamo la root del sito
Dim objFolder
Set objFolder = objFSO.GetFolder(Server.MapPath("/"))
Dim objFile, objTextStream, ContenutoDelFile, FileTrovato
FileTrovato = False
'Leggiamo il contenuto di ogni file trovato nella directory
For Each objFile in objFolder.Files
If Response.IsClientConnected then
Set objTextStream = objFSO.OpenTextFile(objFile.Path,fsoForReading)
ContenutoDelFile = objTextStream.ReadAll
'Se nel contenuto del file è presente la stringa cercata...
'Stampo a video il link ed in nome del file
If InStr(1,ContenutoDelFile,CosaCercare,1) then
Response.Write "<a>" & objFile.Name & "</a><br>"
FileTrovato = True
End If
'Chiudo il file e proseguo nella ricerca
objTextStream.Close
End If
Next
'Se nessun file contiene il termine cercato...
if Not FileTrovato then Response.Write "Nessun risultato trovato..."
'Chiudo tutto...
Set objTextStream = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
%>
ASP: Motore di ricerca nel sito
giugno 14th, 2009
2 Comments
Java offre metodi nativi per poter supportare lo scheduling dei processi e delle azioni. Le classi deputate a tali compiti sono Timer e TimerTask. La classe TimerTask dovrà contenere il codice che vogliamo sia eseguito. Per far ciò, occorrerà sviluppare una nuova classe che estenda TimerTask, condizione fondamentale è la ridefinizione del metodo run() con le operazioni da schedulare, tale classe per chi ha dimestichezza con la gestione della concorrenza in Java somiglia ad una classe thread, ed infatti altro non è.
TimeTask implementa Runnable, e per poterla utilizzare occorre importare il package java.util.TimerTask. Implementata la nostra classe erede di TimerTask, occorrerà schedulare i nostri job all’interno del main principale, per far ciò ricorreremo all’oggetto Timer.
Ma vediamo un esempio per capire meglio. Supponiamo di voler stampare ogni 5 secondi una stringa di saluto:
import java.util.Timer;
import java.util.TimerTask;
public class ttask extends TimerTask{
String stringa;
public ttask(){
stringa=”Ciao a tutti”;
}
public void run(){
System.out.println(stringa);
}
}
E la nostra classe main sarà:
public static void main(String[] args) {
Timer t=new Timer();
ttask tt= new ttask();
t.schedule(tt, 5000);
}
Fonte: Scheduling con Java