Browsing the archives for the Java category.


Javaday Roma Terza Edizione: There is no day like Javaday

Java

Sarà sabato, 24 gennaio 2009, la Terza edizione del Javaday Roma http://roma.javaday.it.

L’evento è direttamente organizzato dai membri della Community Java italiana, con lo scopo di avere una manifestazione fortemente tecnica, focalizzata su: Java, i nuovi linguaggi e le tecnologie emergenti.
Il programma composto da 24 interventi, sarà suddiviso in 5 tracce principali: Core Java - What’s hot, Next generation Web, Java Enterprise, Open Source, New Languages.
I relatori degli interventi provengono sia dalla Community Java italiana sia internazionale.


Per favorire il coinvolgimento degli studenti la manifestazione sarà ospitata dall’Università Roma TRE.

Ci sarà una Campagna CV: i partecipanti potranno consegnare i loro Curriculum Vitae alle società sponsor. I rappresentati delle società saranno a disposizione per fornire informazioni sulle attività svolte dalle rispettive aziende.
Iona Progress, Red Hat, Ilog, SpringSource, Sun Microsystems, sono alcune delle società che hanno aderito all’iniziativa, la lista completa è disponibile sul sito del Javaday Roma.

La partecipazione è gratuita.

Informazioni logistiche:
Quando: sabato, 24 gennaio 2009
Dove: Roma, Facoltà di Ingegneria, Università Roma TRE
Sito: http://roma.javaday.it/

No Comments

JavaDay 2009

Java
Banner Javaday Roma III Edizione
2 Comments

NetBeans 6.5, per tutti voi

Java, Open Source

In quest’ultimo anno la Sun ha preso seriamente a cuore le necessità di noi poveri sviluppatori che ci barcameniamo senza un attimo di pace tra tanti IDE e altrettanti sistemi operativi, senza mai concederci quella tranquillità d’animo di sviluppare in un unico ambiente. Le versioni di NetBeans si sono succedute a ritmo davvero incalzante, regalandoci dapprima Matisse, ossia l’estensione di NetBeans per sviluppare applicazioni Java per i nostri Desktop, in grado, più o meno, di competere con gli editor di Microsoft e Borland. Poi hanno arricchito l’ambiente per supportare altri linguaggi: e così ora anche Ruby, Groovy, Javascript, Python, PHP, C/C++, oltre che Java, cosi come altri tool di gestione di Database, source control, Profiler e così via trovano tutti posto nell’unica applicazione che prende il nome di NetBeans.

Il merito di questa escalation è da attribuire alla Rich Client Platform su cui si basa NetBeans stesso: ossia un’infrastruttura di servizi e librerie, ottimamente bilanciate per consentirvi di scrivere le vostre applicazioni in modo organizzato e con moduli separati ma ben collegati tra di loro. E NetBeans ci viene incontro in questo sviluppo consentendo di creare lo scheletro di un’applicazione, ma anche di uno dei suoi moduli (eventualmente utilizzabili dentro NetBeans stesso) con dei facili wizard.

L’impareggiabile GeertJan Wielenga, sul suo ottimo blog, ci illustra molti dei segreti della NetBeans RCP e come essa possa essere sfruttata anche per integrare tool Java già esistenti all’interno di NetBeans o in uno dei suoi moduli. Inoltre su DZone, ha pubblicato una serie di video in cui spiega l’architettura RCP con dei facili esempi (vi consiglio, laddove disponibile, il link alla versione originale, con video di dimensioni maggiori e, quindi, più facili da seguire).

In conclusione, un’ottima opportunità di dare uno sguardo a questa validissima alternativa ad Eclipse. E poi è Open Source!

Zac

No Comments

Java ti presento Antlr, Antlr questo è Java

Java

Poche righe per descrivervi un’interessante progetto di cui vengo a conoscenza solo adesso. Per quanto Java sia ormai un prodotto Open Source, un gruppo di volenterosi ha implementato la grammatica del linguaggio Java (versione 1.5) per l’ormai arcinoto lexer Antlr (di cui abbiamo parlato qualche volta su KIT). Il tutto porta a crearsi, con questa piattaforma, il proprio compilatore Java.

Perché tutto questo spreco di tempo? Semplicemente perché Antlr è uno dei lexer più diffusi e semplici da utilizzare e, come tale, può essere comodo utilizzare la JavaC Grammar per testare nuove funzionalità da inserire in Java, senza mettere mani al codice sorgente di OpenJDK (per ora il codice compilato ha prestazioni inferiori a quelle di javac). Vedendo i tempi biblici con cui Java si aggiorna rispetto ai nuovi linguaggi, potrebbe essere davvero utile la diffusione di questa grammatica

Zac

No Comments

La programmazione prossima ventura…

.Net, Idee, Java

Non sono un estimatore della Microsoft, lo sapete, ma ho molta stima nel gruppo di lavoro che la Microsoft ha messo in piedi per realizzare l’architettura .Net. Per quanto inizialmente fosse la copia di tutte le idee sviluppate da Sun, negli ultimi due anni .Net è riuscita a far mangiare un pò di polvere a James Gosling e soci.

In un video presentato su Channel9 (purtroppo occore Silverlight per poterlo vedere), Anders Hejlsberg ci illumina su quelle che saranno le direttrici del C# 4:

  • più costrutti dichiarativi sullo stile di LINQ, raro esempio di innovazione targata Microsoft;
  • Dynamic vs Static, anzi Dynamic and Static (nel video queste due parole rappresentato circa l’80% dei termini pronunciati);
  • Parallel processing.

Queste direttrici saranno ampiamente svelate nella conferenza PDC 2008 ma per ora, il gruppo di lavoro, si è divertito a darci una anticipazione sui temi che vi verranno trattati in modo che noi, che di programmazione non ne capiamo niente, possiamo andare a cercarli e studiarli: ad esempio quanti di voi sanno cos’è la metaprogrammazione, cos’è la programmazione parallela, cos’è LINQ etc etc? Sicuramente tantissimi, ma quelli di M$ l’hanno scoperto ora e, a modo loro (abbastanza bene fino ad ora), cercheranno di rendere questi concetti accessibili alle masse.

Guardando il video, ma sapendo che alcuni dei cavalli di battaglia di Visual Studio sono i progetti open source IronPython e http://www.ironruby.net/, sembra strano vedere omini microsoft parlare bene di progetti che non appartengono alla loro casa madre: anche loro, come molti negli anni passati, sono rimasti folgorati dalle avanzate potenzialità di Python e dalle “evil features” di Ruby on Rails (tra cui l’alto grado di metaprogramming) e, facendo leva su questi mostri sacri dello scripting, annunciano che il “dinamismo” sarà alla base del prossimo .Net Framework.

Anche C#, mantenendo la sua natura di linguaggio “statico”, trarrà enormi vantaggi dai nuovi costrutti che, come LINQ, consentiranno di manifestare più facilmente i desideri dei programmatori. L’unica piccola parentesi, che i moschettieri si pigliano per parlare di J2EE, la aprono per denigrare quanto J2EE sia complesso, pesante e quanto invece Ruby e Python siano snelli e facili. Un pò hanno ragione ma comunque nessuno di questi tre prodotti è robba loro.

Tra i nuovi costrutti che verranno introdotti, PLINQ, la versione parallela di LINQ, di cui ne andiamo parlando da un bel pò, consentirà di sviluppare, facilmente, algoritmi che sfruttano la potenza dei processori multi-core. Ormai sappiamo già che questa tecnica non offrirà vantaggi rispetto alla gestione con i thread ma la semplicità di scrittura del codice ne risulterà notevolmente semplificata. E con essa anche l’adattamento di molti degli algoritmi già esistenti (in realtà non mi è sembrato che la scrittura di codice con un Parallel.For o con un .AsParallel() sarà poi così semplice come dicono). Il prossimo passo sarà quello di coinvolgere anche le GPU e le PPU nei calcoli dei nostri algoritmi paralleli.

Insomma mentre il java community process si arrabbatta per decidere se inserire o meno i closures nella prossima versione di Java, la Microsoft cerca di mantenere le distanze.

Vedremo se la comunità open source saprà, spero presto, prendersi la sua bella rivincita.

Zac

No Comments

Netbeans 6.5: con più Groovy e meno cacao

Groovy, Java

Netbeans sta dirigendosi rapidamente verso la release 6.5 ed ora include un supporto a Groovy degno di nota.

Groovy si è sviluppata molto in quest’ultimo anno fedele al suo motto imperativo “prima le funzionalità, poi la velocità“. Ed infatti, puntuale come un orologio svizzero, appena gli utenti avevano finito di assaporarne la sintassi “agiail” e cominciavano a lamentarsi delle sue prestazioni (fino a 60 volte più lente di java) ecco arrivare la versione 1.6 che risolveva anche i principali problemi di velocità. Groovy, ed il suo fratello Grails (una suite per lo sviluppo di web application), è un linguaggio dalle enorme potenzialità visto che già nella versione 1.0 aveva dimostrato di saper colmare il gap esistente tra java e c#, proponendo anche nuove idee come i builder. Inoltre la sua capacità di integrarsi con la standard library del Java, ne fa un linguaggio particolarmente performante, se confrontato con gli altri linguaggi che girano sulla JVM, come ad esempio JRuby.

Speriamo di vedere presto anche l’estensione Matisse, di Netbeans, supportare a pieno il linguaggio Groovy.

Zac

No Comments

IcedTea: 100% GPL Java

Java

Lo spirito di Richard Stallman ha segnato un’altra tappa importante nello sviluppo della conoscenza libera dai paletti dei grossi marchi commerciali. IcedTea, il progetto open source iniziato nel 2007 da RedHat per superare quella che Stallman definì la Java Trap, è stato completato. Le parti del classpath che Sun non poteva rendere open source, in quanto non di sua proprietà, sono state rimpiazzate da codice libero, proprio come RMS aveva invitato a fare.

Qualche giorno fa è stato dato l’annuncio che IcedTea ha superato il rigoroso Java Test Compatibility Kit (TCK), presentandosi quindi, a tutti gli effetti come una implementazione di Java 6. IcedTea è, e sarà, ovviamente, presente su tutte le piattaforme (Mac OS X compresa…)

Bella notizia…

Zac

2 Comments

Un logger come si deve…

Java

Stavolta non vi propongo nulla di nuovo se non un reportage delle scoperte che faccio cercando di imparare ad essere un buon programmatore Java.

Tra i vari dogmi da rispettare c’è, ad esempio quello di utilizzare un framework di Logging per segnalare costantemente l’utente con informazioni di stato sull’applicazione, errori e qualsiasi cosa pensiamo possa essere utile in fase di debugging. Per Java esistono molti framework per effettuare il logging in modo facile ed ho sempre pensato “quando Java incorporerà un framework di logging sarò saziato” ma poi questo è successo ed era lo stesso (op. cit.). Per quanto semplice, chissà per quale motivo, il logging di Java istigava in me la voglia di non utilizzarlo affatto.

Riprendo (e in parte traduco) un post letto su JavaSpecialist.

Per utilizzare un Logger in una nostra classe, dobbiamo dotarla per l’appunto di un Logger:

package com.cretesoft.tjsn;
import java.util.logging.Logger;
public class Application {
  private final static Logger logger =
      Logger.getLogger(Application.class.getName());
  public static void main(String[] args) {
    Application m = new Application();
    m.run();
  }
  public void run() {
    logger.info("Hello");
  }
}

La cosa che non mi scende giù di questo metodo è il fatto che ogni classe che scriviamo deve contenere questo Logger. Inoltre la riga di codice che lo dichiara non può essere semplicemente copiata ed incollata perché dovremmo, quantomeno, cambiare il nome della classe (oggi sono davvero troppo pigro). Inoltre non possiamo sostituire il nome della classe con “this.getClass()” perché perderemmo il vantaggio di avere un Logger statico che non viene istanziato per ogni istanza della classe.

Ed ecco perché io ero così restio ad usare i Logger. Ma ora qualcosa è cambiato :D

Il trucco sta nel ricorrere al (per me ancora incompreso) pattern Factory per creare un Logger. Per ottenere il nome della classe è possibile ricorrere ad uno stratagemma che consente di ricavarlo attraverso l’analisi dello stack trace:

package com.cretesoft.tjsn;
import java.util.logging.Logger;
public class LoggerFactory {
  public static Logger make() {
    Throwable t = new Throwable();
    StackTraceElement directCaller = t.getStackTrace()[1];
    return Logger.getLogger(directCaller.getClassName());
  }
}

A questo punto possiamo dotarci della riga da copiare ed incollare tra le nostre classi:

private final static Logger logger = LoggerFactory.make();

Volete mettere?

Zac

No Comments

Persistenza e Modelli in Groovy e Java

Groovy, Java

Continuo il diario della mia esperienza Java e Groovy parlando di una libreria per la persistenza dei dati e di una scappatoia per realizzare derivati di AbstractTableModel in modo rapido: ovviamente sfruttando la capacità di Groovy di essere compilato in byte code e quindi di integrarsi con il resto dell’applicazione sviluppato in Java.

Per la persistenza dei dati sto utilizzando la libreria JPersist (di cui ignoro ancora le performance) che consente di accedere ai dati secondo il paradigma Object Oriented. A differenza dei framework di persistenza classici (compresi quelli integrati di Java) JPersist non ha bisogno di troppi file xml (a parte uno in cui scriviamo i parametri di connessione al DB.

Per accedere ai dati abbiamo bisogno di una classe che abbia lo stesso nome della tabella (o quasi uguale) e (per la scrittura dei dati) sia derivata da jpersist.PersistentObject; impostiamo come attributi della classe, i campi della tabella relativa e, fatto questo, avremmo bisogno di sbobinarci la solita pippa sulle proprietà di una classe Java ossia scrivere i metodi getter e setter dei relativi attributi. Oggigiorno questo non è più un problema ma (chissà se mai lo capiranno alla Sun) si perde in leggibilità. Molto meglio rivolgersi a Groovy per la realizzazione di una classe persistente; al solito, non meravigliatevi della brevità del codice:

import jpersist.*
	
public class Customer extends PersistentObject{
    Integer id
    String firstName
    String lastName
	
}

Niente virgole, niente getter e setter…nient’altro. Mi aspetto che nel DB esista una tabella Customer o customer o customers o qualsiasi nome *customer* con i campi id, firstname e lastname.

Vi rimando alla documentazione di JPersist per ulteriori dettagli su come fare le query, gli update, etc.

Vi parlo invece di come visualizzare i dati: per farlo abbiamo bisogno di una JTable o, meglio, di una JXTable, e di un TableModel. Per fare un TableModel ci vuole il legn…ehm…i dati e un modo per accedervi. Dobbiamo definire le colonne ecc, ecc.
Preleviamo i dati. Io ho realizzato un metodo per prelevare un’arraylist di clienti:

public ArrayList getCustomers() {
 try {
       DatabaseManager dbm = DatabaseManager.getXmlDefinedDatabaseManager("mio_db_definito_nel_file_xml");
       ArrayList result = (ArrayList) dbm.loadObjects(new ArrayList(), Customer.class);
       dbm.close();
       return result;
 } catch (Exception ex) {  }
 return null;
}

Ora mi serve il TableModel che costruirò sulla base di questo ArrayList; siccome a me piace molto il codice generico e poco lungo, l’ho scritto in Groovy usando la reflection:

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import groovy.swing.SwingBuilder
import java.lang.reflect.Field;
	
class GModel{
    private static Class getFieldType(Object o, fieldName){
        Field f = o.getClass().getDeclaredField(fieldName);
        return f.getType();
    }
	
    public static AbstractTableModel getModel(ArrayList dataList,
                                        String[] fieldNames,
                                        String[] fieldLabels){
        def swing = new SwingBuilder()
        def i=0;
        def gModel
        if (dataList.size()>0){
          Object o = dataList[0];
          gModel = swing.tableModel(list:dataList) {
            fieldNames.each{
              propertyColumn(header:fieldLabels[i], propertyName:it, type:getFieldType(o,it))
              i++
            }
          }
        }
        else
        {
          gModel = swing.tableModel(list:dataList) {
            fieldNames.each{
              propertyColumn(header:fieldLabels[i], propertyName:it)
              i++
            }
          }  
	
        }
        return gModel
    }
}

Il metodo statico getModel consente di fornire una lista di oggetti, un elenco di campi da visualizzare e le label delle relative colonne (ok avrei potuto utilizzare anche una Map). Tale metodo usa il SwingBuilder di Groovy per creare il table model in modo davvere eccezionale: provate a confrontare la routine con i table model scritti in java; ve lo ripropongo per maggiore dettaglio:

def swing = new SwingBuilder()
def i=0;
def gModel = swing.tableModel(list:dataList) {
    fieldNames.each{
         propertyColumn(header:fieldLabels[i], propertyName:it, type:getFieldType(o,it))
         i++
    }
}

Quindi i dati li passo con l’attributo list di swing.tableModel ed al table model aggiungo (per ogni campo scelto) una propertycolumn che presenta una label, il nome dell’attributo (della classe Customer) ed il tipo del campo. A sua volta il tipo del campo lo recuperiamo genericamente usando la reflection.

private static Class getFieldType(Object o, fieldName){
    Field f = o.getClass().getDeclaredField(fieldName);
    return f.getType();
}

Penso che non serva passare un’istanza dell’oggetto ma sinceramente non ho avuto molto tempo per le ottimizzazione (volevo usare i generics ma non ci sono riuscito). Ad ogni modo il metodo recupera la classe ed il campo relativo al nome dell’attributo e ne restituisce il type.

Il table model così creato presenterà, una volta compilato, tutti i metodi, getter e setter di un table model classico. Stessa qualità, stesse performance meno codice!

Se avete suggerimenti e migliorie commentate pure

Zac

P.S.: In entrambi i metodi della classe lo statement “return” è superfluo dato che ogni metodo Groovy capisce dinamicamente quale delle sue variabili deve restituire.

No Comments

Il futuro non è più quello di una volta…

.Net, Gnu/Linux, Java, Mono, Windows

Fino a poco tempo fa pensavo che .Net (in quanto prodotto Microsoft) stava avanzando così tanto da buttare fuori di scena tutti gli altri modelli di sviluppo presenti sulla scena. In realtà per come la Microsoft sta giocando la sua partita .Net avrà senso solo finché Windows manterrà la sua quota di mercato. Ma forse bisogna guardare con più attenzione ai seguenti fatti:

  • sui desktop, Windows è ancora la scelta obbligata dato che le aziende che producono software e periferiche offrono quasi sempre soluzioni per Windows
  • il web, di contro, è permeato ancora di PHP, JSP di Apache e MySQL, per quanto, a livello enterprise ASP.NET, IIS e SQL Server, per via della loro stretta integrazione e user-friendliness (apparente), non sono certo una realtà minore
  • rispetto a qualche anno fa, esistono molte più piattaforme non-windows con cui fare i conti: lato mobile gli attori protagonisti sono Nokia, BlackBerry e iPhone; Microsoft dice che loro hanno un quota di mercato rilevante ma il dato, secondo la mia opinione, riguarda solo gli utenti di tipo aziendale (e tra questi manager e rappresentanti); mi sembra che tra i normali consumatori la piattaforma di riferimento sia Nokia
  • Java si è giocata la carta dell’open source e si contende, insieme a Mono, lo scettro di ambiente di sviluppo multipiattaforma per eccellenza: basta vedere la corsa ai nuovi ambienti di sviluppo per iPhone che, nonostante le limitazioni della licenza dell’SDK, è appena iniziata; guardate qui e qui
  • Java, dopo un periodo di sonnolenza, sembra aver ripreso la voglia di essere un competitor serio anche per le applicazioni desktop: ultimamente librerie come SwingX, Timing Framework o Jgoodies e ambienti di sviluppo maturi come NetBeans ed Eclipse dimostrano che lo sviluppo con Java non ha nulla da invidiare a .Net o Flash; inoltre il JCP, ovvero la comunità Java che decide come orientare le novità del linguaggio, è attiva più che mai per renderlo un linguaggio al passo coi tempi: sulla scena i linguaggi “minori” come Python, Ruby, Groovy e Javascript dimostrano giorno per giorno le loro indubbie qualità (type inference, definizione dinamica di metodi ed attributi, estensioni delle classi, presenza dei closures) e la capacità di Java di integrarli per ora lo sta salvando dal confronto diretto con il più giovane e performante C#; i grandi nomi dietro a Java dicono che non è possibile mantenere Java un linguaggio così semplice: è vero che le cose che fa C# si possono ottenere lo stesso ma la complessità necessaria per farlo scoraggia i più; Microsoft ha dimostrato che ha conoscenza ed esperienza da vendere nell’ambito dei linguaggi di sviluppo: LINQ, Parallel FX, e altri progetti dell’area Research stanno lì a dimostrarlo; di certo Java non può rimanere a guardare (e per fortuna non lo fa)
  • a proposito di Flash, va ribadito che ormai sono molti i progetti open source il cui output è un file Flash; la stessa Adobe inoltre ha da poco rilasciato la suite Air, che consente di portare le applicazioni flash sul desktop
  • Internet Explorer, sebbene sia il browser più diffuso, se la deve vedere con Firefox, Safari e all’orizzonte appaiono progetti come questo, molto interessante per le opportunità che presenta
  • non ultimo, il sistema operativo: Windows Vista ha avuto il grandissimo merito di dirottare molti utenti verso altri sistemi operativi ed ha convinto molti governi a scegliere alternative open source ai suoi prodotti; da questo punto di vista possiamo certamente dire che Microsoft è stata un grosso sponsor per il movimento del Software Libero; inoltre sulla scena, Apple si fa sempre più presente grazie alla riconosciuta qualità del suo sistema operativo e alla bellezza dei suoi prodotti: riuscendo inoltre ad attingere a piene mani da tutti i progressi del mondo Gnu/Linux e FreeBSD, Mac OS X sembra sempre più la piattaforma di sviluppo ideale per tutti i progetti non .Net (ricordo che da poco è stato rilasciato anche MonoDevelop per Mac OS X)

Insomma, sul palcoscenico ci sono molti attori e, forse, rispetto a qualche anno fa, la conoscenza diffusa delle alternative possibili rende i grossi nomi meno capaci di dirottare le scelte del mercato con semplici strategie di FUD (ossia instillare il dubbio che scegliere prodotti alternativi produca perdite, disastri e cataclismi di varia natura). Il modello di sviluppo open source risulta vincente a tal punto che grosse compagnie decidono di acquistarli in blocco piuttosto che derivarne lo sviluppo.

Vedremo cosa ci riserverà questo incerto futuro.

Qualche dettaglio: per chi non lo sapesse Lobo Browser è un browser web open source scritto interamente in Java. Nell’ultima release integra il rendering di applet JavaFX, ossia il nuovo concorrente di Flash nell’ambito Web.

Zac

2 Comments
« Older Posts


  • Google Adsense

  • MiniBlog

    Banner Javaday Roma III Edizione >>

    Adobe ha appena sfornato il Flash player nella versione 10, stavolta anche per Linux da subito! Incredibile >>

    When the source code to Quake was leaked and circulated among the Quake community underground in 1996, a programmer unaffiliated with id Software used it to port Quake to Linux, and subsequently sent the patches to Carmack. Instead of pursuing legal action, id Software, at Carmack’s behest, used the patches as the foundation for a company-sanctioned Linux port. id Software has since publicly released the source code to Quake, Quake 2 and most recently Quake 3, all under the GNU General Public License (GPL). >>

    Ganymede Donate, please ;) >>

    Download Day 2008 >>

    Scusa Ameri, Sun s’è comprata MySQL e Oracle s’è pappata BEA. >>

    Chi ha bisogno di un Mac quando con Linux abbiamo Compiz, Open Office, Inkscape, Scribus, Eclipse, Tracker, ed ora anche una Time Machine per recuperare al volo vecchi backup? Per ora manca lo sberluccichio di casa Apple ma il funzionamento è analogo: si chiama FlyBack! >>

    Giusto per ricordarvi che una delle distribuzioni Linux più diffuse sta per raggiungere le nostre scrivanie :D

    >>

    Anche se me ne vergogno come un ladro non posso esimermi dal pubblico ludibrio consentendovi di ritrovare tracce di me nella storia di Internet: era il 6 Ottobre 1995 ed il 4 Novembre 1995. E come non ricordare la mia prima Home Page>>

    Assegnati gli Ig Nobel per la ricerca improbabile qui e, appena possibile, qui. >>

  • Categories