"Null" altro che un blog

at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source)

giovedì 18 febbraio 2010

Ingegnere? Lo dici a tua sorella.

Ecco cosa ne pensa un informatico di un ingegnere.

L'origine dell'odio feroce tra ingegneri del cazzo e noi informatici
risale alla seconda metà degli anni sessanta quando a Pisa il rettore,
il matematico Faedo (pace all'anima sua che anubi lo strabenedica)
ebbe l'intuizione di creare un corso di laurea per questa nuova
scienza sulla base delle esperienze del primo calcolatore elettronico
creato in Italia, il CEP, Calcolatore Elettronico Pisano.
Il rettore Faedo voleva creare un corso "ibrido" dove per le materie
"hardware" fosse coinvolta la facoltà di ingegneria e per le materie
matematiche legate al software venisse coinvolta la facoltà di scienze
matematiche, fisiche e naturali.
Il preside della facoltà di ingegneria gli rispose che non erano
interessati perché quella "nuova scienza" chiamata informatica secondo
lui non aveva futuro.
Quindi il corso di laurea in "Scienze dell'Informazione" fu istituito
a Pisa nel 1969 nella sola facoltà di Matematica e Fisica, dove è
ancora oggi col nome mutuato da qualche anno in "Informatica".
E negli anni successivi si diffuse oltre che a Pisa anche in altri
atenei a partire da Torino, Udine, Bari, Salerno e nel 1985 anche a
Milano.
Orbene nei primi anni novanta (il periodo dei primi browser mosaic,
l'HTTP etc.) le facoltà di ingegneria italiane si "risvegliarono" e
si accorsero che la "nuova scienza" non era poi così tanto da
sottovalutare.
E quindi istituirono il corso di Informatica anche nelle facoltà di
ingegneria, col nomignolo di "Ingegneria Informatica".
Praticamente la copia di qualcosa che esisteva già nelle facoltà di
matematica e fisica di vari atenei italiani.
Era in pratica lo stesso corso con poche variazioni del cazzo che solo
gli ingegneri potevano inventare.
Non contenti di ciò gli ingegneri cosa fanno?
Pochi anni dopo istituiscono l'albo degli informatici, riservato ai
laureati in ingegneria informatica e impedendovi l'accesso agli
informatici laureati nella facoltà dove era nata questa scienza.
E tentano a livello politico di legittimare questa estromissione
cercando di creare una situazione nella quale solo gli iscritti
all'albo possono firmare progetti per le pubbliche amministrazioni,
partecipare a concorsi per informatici etc.
Una lobby del cazzo fatta di teste di cazzo immani.
Che però alla fine ebbero partita persa dopo che più volte è stato
riconosciuto l'accesso a questo albo del cazzo anche ai laureati in
"informatica vera", cioè quelli del corso di laurea in Informatica e
non solo a quelli di Ingegneria Informatica che ne è una copia-
surrogato.
A livello politico (in parlamento e nelle varie commissioni) gli
ingegneri del cazzo erano ammanicatissimi soprattutto nei partiti del
cazzo (Forza Italia, Lega e AN) mentre gli informatici non avevano
referenti se non quei politici che presero a cuore la faccenda
trattandola per quello che era, e cioè un clamoroso abuso di una lobby
di potere. Ricordo uno splendido intervento di Tonino Di Pietro al
Parlamento Europeo che ebbe degli effetti concreti ed immediati.

Ecco.
Questa è la spiegazione dell'odio cieco che hanno gli informatici
verso gli ingegneri.
E questo è il motivo che la mia risposta anche sul lavoro a chi mi
chiama anche per sbaglio "ingegnere" è sempre e solo "Ingegnere lo vai
a dire a tua sorella".
(Giuro che rispondo sempre così). 


fabmind

mercoledì 17 febbraio 2010

Da Java a XML e ritorno: un problema frequente

Il linguaggio XML, con l'affermarsi del web orientato ai servizi ed un uso sempre più massiccio del cosiddetto Web semantico, è diventato oramai uno standard imprescindibile all'interno della programmazione web, specialmente lato server.
Questa presenza sempre più costante nelle applicazioni web ha reso necessario uno sviluppo di appositi framework per la gestione dei file XML e le relative lettura e scrittura.
Risultano anzitutto necessari i cosiddetti parser XML, utilizzati esclusivamente nella fase di analisi (parserizzazione) del flusso di byte costituenti il file XML. Tra questi si distinguono due famiglie distinte, da un lato SAX(Simple API for XML), un'interfaccia che permette di interpretare dei file XML mediante una lettura basata su eventi, dall'altro la DOM(Document Object Model), che implementa le stesse funzionalità di SAX, ma lo fa costruendo un albero in cui ogni nodo rappresenta un elemento del file analizzato.
Per una applicazione web scritta in un linguaggio orientato ad oggetti, come ad esempio Java, una procedura molto utile risulta essere quella di mappare il contenuto del file XML in corrispondenti oggetti, in modo da manipolare i dati in maniera agile, come appunto dei veri e propri oggetti.
Per mappare la struttura dei documenti XML all'interno di apposite classi Java risulta molto comodo l'utilizzo del framework Castor, sviluppato del gruppo Exolab.
Questo framework è in grado di generare automaticamente, a partire da un XML Schema Definition, delle classi Java complete di costruttori e metodi per associare ad ogni elemento previsto dall'XSD un determinato valore.
Le classi generate, oltre alle property get/set, presentano caratteristiche molto interessanti. Ogni classe rappresenta un diverso tag descritto nell'XSD, e tale classe prevede un metodo marshall ed un metodo unmarshall che effettuano le operazioni di traduzione da XSD a codice Java e viceversa.
Il marshalling del documento, ovvero la traduzione del codice Java in linguaggio XML viene eseguito su un OutputStream, il quale corrisponderà al flusso mediante il quale si vuole trasportare il file XML generato.
Per quanto riguarda l'unmarshalling vengono generati metodi che permettono di popolare l'oggetto a partire da un InputStream, ovvero il flusso di dati in ingresso corrispondenti al file XML da mappare all'interno delle classi Java.
Ogni classe generata contiene inoltre un ulteriore metodo validate, che esegue un controllo su tutti gli attributi della classe in base ai vincoli definiti nello schema, ed un metodo booleano isValid che ritorna True se l'oggetto presenta una struttura corretta rispetto all'XSD.
Nel caso in cui un oggetto non è stato costruito correttamente, ad esempio un tag non è stato riempito, il metodo marshall lancerà una MarshallException e non costruirà l'elemento XML.

Mostriamo di seguito un esempio di codice Java generato dal framework Castor, tale esempio è relativo ai metodi isValid, validate e marshall della classe che mappa il tag , radice di un file XML descritto da un opportuno XSD.
 
public boolean isValid(){
try {
validate();
}
catch (org.exolab.castor.xml.ValidationException vex) {
return false;
}
return true;
}
public void marshal(java.io.Writer out) throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException{
Marshaller.marshal(this, out);
}

public void setPage(Page page)
{
this._page = page;
}
public void setPage(Page page) {
this._page = page;
}
public static Pages unmarshal(java.io.Reader reader) throws org.exolab.castor.xml.MarshalException,org.exolab.castor.xml.ValidationException
{
return (Pages) Unmarshaller.unmarshal(Pages.class, reader);
}

public void validate()throws org.exolab.castor.xml.ValidationException {
org.exolab.castor.xml.Validator validator = new
org.exolab.castor.xml.Validator();
validator.validate(this);
     }
 }