sabato 22 dicembre 2012

Concorso coadiutore tecnico Banca d'Italia

A breve (24.01.2013) si svolgerà la prova scritta del concorso indetto dalla Banca d'Italia per l'assunzione a tempo indeterminato di 5 coadiutori tecnici per l'ICT. La prova avrà luogo presso i locali dell’Hotel “Ergife” di via Aurelia, 619 - Roma.

Sul sito sono disponibili le tracce della precedente edizione.

E' interessante notare come, in questa edizione del concorso, la Banca abbia ristretto la rosa dei candidabili ai soli laureati nelle seguenti classi:
  • ingegneria delle telecomunicazioni (30S/M27); 
  • ingegneria elettronica (32S/M29); 
  • ingegneria elettrica (31S/M28); 
  • ingegneria informatica (35S/M32); 
  • ingegneria dell’automazione (29S/M25); 
  • informatica (23S/M18); 
  • sicurezza informatica (M66); 
  • altra laurea equiparata ad uno dei suddetti titoli ai sensi del Decreto Interministeriale 9 luglio 2009;
ovvero, per i laureati con il vecchio ordinamento:
  • ingegneria delle telecomunicazioni;
  • ingegneria elettronica;
  • ingegneria informatica;
  • informatica;
  • altro diploma di laurea ad esso equiparato o equipollente per legge. 
 Spero che non sia un caso isolato e soprattutto che questa linea sia presa ad esempio dalle altre organizzazioni pubbliche e private.

venerdì 21 dicembre 2012

Sono stato assente per qualche mese...

...ho avuto la possibilità (unica nella vita! troppo importante per rinunciarvi!) di prestare qualche mese di consulenza per una delle più prestigiose aziende ICT del mondo... che ovviamente non posso rivelare per vincoli di riservatezza...

Durante qusto periodo sono stato nel cuore della Silicon Valley... Beh la trasferta mi è costata un botto (la consulenza era a titolo gratuito!) però ho avuto modo di presentare la mia visione sui dispositivi di memorizzazione a sola scrittura che si rivelano utilissimi per la storicizzazione dei Big&LargeData, permettendo una compressione elevatissima dell'informazione.

Ora non posso dilungarmi, però conto di fare un articolo e delle slide dedicate al tema.

lunedì 8 ottobre 2012

Debriefing inglese o italiano? C'è differenza!

La scorsa settimana ho partecipato a un meeting internazionale a New York su XPDL. Al ritorno da New York, il volo ha subito un ritardo di 4 ore.
Rientrato in ufficio, il giorno successivo, ero stanichssimo e ancora non avevo smaltito la differenza di fuso orario.
Il Capo mi ha subito convocato nel suo ufficio per un veloce Debriefing (inglese) di sole 4 ore! Immediatamente dopo il primo ho sentito l'esigenza di un secondo e totalmente diverso Debriefing (italiano)!

lunedì 17 settembre 2012

La Turing-SOA permette un migliore allineamento Business-IT

La Service Oriented Architecture è molto di più di una semplice tecnologia: è un'architettura che utilizza una logica orientata ai servizi per supportare le esigenze degli utenti scomponendo le applicazioni in funzioni riutilizzabili. In questo modo, consente di allineare business e IT rendendo i processi più flessibili, economici ed efficienti. (IBM)

Uno dei paradigmi più noti delle composizioni di servizi è l’orchestrazione, in base al quale un processo centralizzato interagisce con un insieme di servizi componenti. Il linguaggio utilizzato per la definizione di un’orchestrazione è il BPEL (Business Process Execution Language for Web Service).

Un processo BPEL racchiude le attività necessarie a comporre diversi servizi sviluppati da terze parti. I passi di elaborazione di un processo può essere rappresentato con un automa a stati finiti. Ad un certo punto dell’esecuzione del processo BPEL questi servizi potrebbero essere soggetti a un cambiamento radicale o potrebbero non essere più disponibili. Questo è uno dei limiti della staticità di un sistema basato sulla SOA.
Orchestrazione di servizi tramite un processo BPEL
Per superare questa staticità è possibile prendere ispirazione dalla Macchina di Turing (MdT). Una MdT è un'astrazione che permette di elaborare un qualunque algoritmo. Si compone di un'unità di controllo, che può assumere una serie finita di diversi stati e una unità di memoria, esemplificata con una successione di caselle lungo un nastro di dimensioni infinite. Una elaborazione comincia da una casella di memoria iniziale; il passaggio da uno stato all'altro nell'unita di controllo è regolato da una tabella di istruzioni, in cui lo stato attuale, e la lettura dalla casella di memoria corrente, stabiliscono il nuovo stato. In pratica anche l'unità di controllo di una MdT implementa un automa a stati finiti. Ad ogni passo la TM può fare soltanto le seguenti mosse:
  1. leggere il dato nella casella di memoria corrente
  2. scrivere un nuovo dato nella casella di memoria corrente
  3. spostarsi in avanti nel nastro
  4. spostarsi indietro nel nastro
  5. cambiare il suo stato interno

Macchina di Turing

Un'architettura SOA basata su un Process Server (che esegue processi BPEL) può essere facilmente assimilata a una MdT. Se si suddivide opportunamente l'elaborazione in passi elementari è possibile ridurre la complessità delle elaborazioni effettuate dai servizi orchestrati. Spingendosi oltre è possibile concentrare tutta la logica elaborativa nel processo BPEL, demandando ai servizi la sola scrittura e lettura di un dato elementare in una "casella di memoria". In questo modo l'elaborazione sarebbe definita solamente attraverso il processo. Per ogni tipo di elaborazione è possibile implementare uno specifico processo e riutilizzare completamente i servizi. In questo modo si rende molto più flessibile l'infrastruttura IT, permettendo un più veloce allinemanto Business-IT. Inoltre i servizi non dovrebbero mai essere cambiati e si eliminerebbe definitivamente il problema sopra evidenziato della staticità della SOA. I servizi inoltre sarebbero completamente sostituibili in modo da semplificare la scalabilità e l'alta disponibilità del sistema.

lunedì 16 luglio 2012

Come il mio boss ha fatto carriera?!?!

Ve lo siete mai chiesto? Io davvero molto spesso...

"Una preparazione e un'intelligenza entrambe leggendarie. Dopo pochi mesi dall'assunzione gli è stata proposta la direzione della divisione. Ha gestito con enorme successo progetti internazionali con le più importanti società della finanza. Una crescita annua del ricavo sempre a due cifre..." mi ha rivelato un collega. 
 
Anche lui non era presente ma lo ha saputo da un amico ora in pensione che a sua volta lo aveva sentito dire dal collega... Nessuno che conosco può testimoniare direttamente...
 

Se quanto mi è stato riferito corrisponde a verità, l'unica opzione compatibile con la situazione che io conosco (direttamente) è la fuga dei cervelli all'estero
 
Il suo deve essere fuggito prima della mia assunzione!
 
 
 

lunedì 2 luglio 2012

Perché i manager lo ignorano?

Sometimes, what you do not know can surprise you, and certainly for those [...] building an elaborate or very critical application, understanding exactly how a platform behaves can avoid nasty misunderstandings - Birman


giovedì 28 giugno 2012

Retribuzioni nel settore ICT

Dr. Dobb's, storica rivista del settore, ha realizzato e pubbliato un'indagine sulla retribuzione di 3500 lavoratori del mondo ICT (dallo sviluppatore al manager).
 
I Software Engineer contattati dichiarano compensi di circa 100 mila dollari! Voi come siete posizionati? :-)

L'accesso all'articolo è libero (questo il link).

mercoledì 13 giugno 2012

Usare JAXB con StAX+XPath per prestazioni e comodità d'uso (2)

Come visto nella prima parte, JAXB permette di implementare velocemente l'accesso a documenti XML, tuttavia l'approccio presenta lo svantaggio di non scalare rispetto alla dimensione dei documenti. Infatti il framework di binding cercherà di creare in memoria un insieme di oggetti Java che rappresenta interamente il documento XML e, al crescere della dimensione di questo, si scontrerà con il limite di memoria della JVM.

In molti casi i documenti XML di grandi dimensioni presentano una struttura con elementi ripetuti. E' il caso, ad esempio, di documenti XML che rappresentano dati statistici: la struttura XML che rappresenta le osservazioni è ripetuta all'interno di un tag contenitore. In questi caso è (spesso) possibile procedere a una elaborazione in streaming aggirando il problema dell'esaurimento della memoria.

Abbiamo già visto in un precedente post come utilizzare un parser StAX per accedere agli elementi di un documento XML effettuando opzionalmente anche la validazione. Ora vediamo come effettuare con JAXB l'unmarshalling dei soli elementi ripetuti, uno per volta.
In prossimi articoli analizzeremo una tecnologia alternativa per il trattamento di XML e faremo un'analisi comparativa anche in termini di prestazioni.

Supponiamo di avere il seguente documento, in cui la struttura corrispondente al tag mrSneerObj è ripetuta diverse volte.

<root xmlns="http://ict-tic.blogspot.com">
  <elements
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>  
   <!--other mrSneerObj tags-->    
  </elements>
</root>

L'idea per limitare l'uso della memoria è di scorrere il documento XML con il parser StAX fino al tag relativo al primo degli elementi ripetuti (nell'esempio <mrSneerObj>). Raggiunto questo tag è possibile usare JAXB per effettuare l'unmarshalling solo della porzione di XML corrispondente a uno degli elementi ripetuti. Al termine dell'unmarshalling è possibile pilotare nuovamente il parser StAX in modo da posizionarsi al successivo elemento ripetuto, preparandosi per un nuovo unmarshalling. E così in ciclo finché tutti gli elementi ripetuti sono elaborati.

Un primo approccio per navigare con StAX tra gli elementi XML fino a raggiungere il punto di interesse (gli elementi ripetuti) è quello di guidare il parser con un automa a stati finiti. Tuttavia questo approccio è abbastanza laborioso in quanto è necessario specificare esplicitamente tutti gli stati e le transizioni in funzione degli eventi StAX. E' anche poco leggibile e manutenibile.

Una tecnologia che permette di accedere comodamente a porzioni di XML è XPath. Purtroppo le implementazioni delle specifiche XPath non sono compatibili con un parser di tipo streaming, ma richiedono un parser DOM. Questo sembra escludere la possibilità di usare implementazioni standard di XPath che, usando DOM, amplificherebbero il problema della saturazione di memoria della JVM.

Esistono tuttavia implementazioni parziali delle specifiche XPath che sono compatbili con parser di tipo streaming. Uno di questi è Simple XML Compiler (SXC). SXC è un tool che permette di creare parser XML ottimizzati. Dispone, in particolare, di un modulo XPath che è capace di pilotare un parser StAX per navigare il documento XML, individuando gli elementi XML che soddisfano una o più espressioni XPath. In corrispondenza dei punti in cui si ha il "match" dei nodi con le espressioni XPath, SXC invoca un Hanlder fornito dal chiamante.

Di seguito è mostrato come utilizzare SXC per accedere ai nodi /root/elements/mrSneerObject del documento di esempio invocando l'handler matchHandler.

XMLStreamReader streamReader = ...

XPathBuilder builder = new XPathBuilder();
builder.addPrefix("c", "http://ict-tic.blogspot.com");
builder.listen("/c:root/c:elements/c:mrSneerObj", matchHandler);
XPathEvaluator evaluator = builder.compile();      
evaluator.evaluate(
streamReader);

Ad ogni "match" l'handler di seguito riportato permette di effettutare l'unmarshalling con JAXB. A parte le porzioni di codice utilizzate per gestire gli errori di validazione (che è opzionale - l'integrazione tra StAX e MSV è descritta in questo articolo), il pattern d'uso di JAXB resta quello standard. L'unica differenza è che il riferimento al parser è recuperato dall'evento SXC e non tramite Factory.

JAXBContext jc = JAXBContext.newInstance("it.mrsneer");
final Unmarshaller u = jc.createUnmarshaller();

XPathEventHandler matchHandler = new XPathEventHandler() {
  public void onMatch(XPathEvent event) throws XMLStreamException {
    try {
      if (!listOfProblems.isEmpty()) {
        // gestisce problemi nel parsing 
        // tra due istanze di MrSneerClass
        // ...
        listOfProblems.clear();
      }

      XMLStreamReader streamReader = event.getReader();
      JAXBElement<MrSneerClass> obj;
      obj = (JAXBElement<MrSneerClass>) u.unmarshal(streamReader,  
                                                 MrSneerClass.class);
      if (listOfProblems.isEmpty()) {
           // usa obj.getValue();
      } else {
        
        // gestisce problemi durante l'unmarshalling 
        // di una istanza di MrSneerClass
        // ...
        listOfProblems.clear();      
      }
    } catch (Exception e) {
        
        // gestisce Exception
        // ...
    }
  }
}; 


martedì 12 giugno 2012

Concorso funzionario informatica Agenzia Italiana del Farmaco

E' indetto un concorso pubblico per esami per il conferimento di due posti a tempo indeterminato e pieno nel profilo di Funzionario informatico Area III posizione economica F1 nei ruoli dell'Agenzia Italiana del Farmaco.

Per l'ammissione al concorso i candidati devono essere in possesso dei seguenti requisiti di sutdio:
  1. laurea in scienze e tecnologie informatiche ovvero
  2. diploma di laurea in informatica ovvero
  3. una qualunque delle classi di lauree specialistiche o magistrali  di possibile equiparazione ai sensi del D.M. 9 luglio 2009 nonché altro titolo agli stessi equipollente per disposizione di legge anche ottenuti all'estero. 
Il link al bando.

Il periodo più favorevole ai dirigenti Italiani?

Quanti di voi hanno la sventura di aver assistito (o subìto) una discussione tra un dirigente (D) e un suo sottoposto (S) che, più o meno, ricalca i ritmi indicati di seguito?

D : "Se tu mi avessi informato prima dei problemi con l'altra area, io sarei intervenuto in modo decisivo per risolverli"
S : "In verità l'ho fatto, ti ho inviato due email a riguardo diversi mesi fa"
D : "Sì, vero, ma se tu fossi stato più chiaro nell'email, io avrei capito la criticità e sarei intervenuto"
S : "Pensavo che, durante la riunione che hai indetto a seguito della seconda email, il problema fosse stato ben analizzato e compreso da tutti noi"
D : "Se fosse stato ben analizzato e compreso da tutti noi, come sostieni tu, io l'avrei gestito!"

...e così la colpa ricade sul sottoposto oppure, se il Dirigente ha un minimo di dignità, il problema viene ridefinito come "di comunicazione", attribuendolo quindi a una entità impersonale.

Dopo aver assistito a molte conversazioni simili, sono giunto alla conclusione che il periodo più favorevole ai dirigenti italiani è quello "ipotetico del terzo tipo o dell'immpossibilità"!

Cosa è un periodo ipotetico del terzo tipo? E perché è quello più favorevole ai dirigenti italiani?

Il periodo ipotetico (da Wikipedia) è una struttura sintattica composta da una proposizione subordinata condizionale (detta anche protasi) e dalla sua reggente (detta anche apodosi). La subordinata è introdotta dalla congiunzione se ed esprime la premessa, cioè la condizione da cui dipende quanto predicato nella reggente; la reggente indica la conseguenza che deriva o deriverebbe dal realizzarsi della condizione espressa dalla proposizione subordinata.

Il periodo ipotetico viene tradizionalmente distinto in tre tipi, a seconda del grado di probabilità dei fatti indicati nella condizionale. Si parla allora di periodo ipotetico
  1. di primo tipo o della realtà quando l'ipotesi è presentata come un fatto reale o sicuro; 
  2. di secondo tipo o della possibilità quando l'ipotesi è presentata come un fatto non sicuro ma probabile;
  3. di terzo tipo o della impossibilità quando l'ipotesi è presentata come un fatto impossibile;

In particolare nel periodo ipotetico di terzo tipo la protasi è al congiuntivo trapassato e l'apodosi è al condizionale passato.

L'uso del congiuntivo trapassato fa ben capire che l'azione indicata nella premessa non è più realizzabile. Ma proprio essendo oramai irrealizzabile, questo costrutto linguistico presenta un vantaggio per il dirigente non da poco: è difficile da confutare!

venerdì 8 giugno 2012

Usare JAXB con StAX+XPath per prestazioni e comodità d'uso (1)

Una delle tecnologie Oracle per l'elaborazione di documenti XML è Java Architecture for XML Binding (JAXB).

Questo framework permette di effettuare il collegamento tra Java e XML; in particolare JAXB fornisce la possibilità di serializzare oggetti Java in XML (marshalling) e di effettuare l'operazione inversa (unmarshalling).

Immagine dal sito Oracle
Il collegamento Java-XML può essere effettuato a partire dallo Schema Xml che rappresenta il modello di documento da elaborare. Il compilatore JAXB produce le classi Java da utilizzare nell'applicazione per effettuare il marshalling e l'unmarshalling dei documenti istanza.

Supponiamo di avere il seguente documento e il relativo Schema Xml.

<root xmlns="http://ict-tic.blogspot.com">
  <elements
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>
   <mrSneerObj><!--other xml content--></mrSneerObj>  
  </elements>  
</root>

L'approccio classico di JAXB prevede, dopo la generazione delle classi a partire dallo Schema, la creazione di un contesto JAXB relativo al package prodotto dal compilatore JAXB e del relativo Unmarshaller.

L'Unmarshaller può quindi essere usato per produrre gli oggetti Java che rappresentano il documento XML. L'invocazione del metodo unmarshal accetta diverse rappresentazioni del documento XML di input. Di seguito è mostrata l'invocazione usando un reader StAX come parametro.

JAXBContext jc = JAXBContext.newInstance("it.mrsneer");
final Unmarshaller u = jc.createUnmarshaller();
JAXBElement<Root> obj = (JAXBElement<Root>) u.unmarshal(streamReader, Root.class);

L'oggetto restituito corrisponde al tag <root> e può essere navigato tramite i metodi getter come un normale POJO. Ovviamente in memoria, nella JVM, ci sarà un albero di oggetti Java collegati tra loro in modo da rappresentare tutti i nodi del documento XML di partenza.

giovedì 7 giugno 2012

E' possibile sostituire i dirigenti con un algoritmo? (1)

Osservando attentamente, per anni, il lavoro di diversi dirigenti (nel settore ICT in Italia, ma credo si possa generalizzare ben oltre questo contesto) ho riscontrato un modo di lavorare abbastanza omogeneo tra le diverse persone. Quasi come se tutti i dirigenti che ho incontrato avessero seguito lo stesso corso di "management"! Forse, semplicemente, i comportamenti da me notati sono quelli che più facilmente permettono di ottenere un avanzamento nella carriera. Credo che il modo con cui le organizzazioni selezionano il personale da promuovere alla carriera direttiva sia una delle maggiori cause della loro inefficienza.

Già dopo poco tempo di osservazione si è insinuato in me il dubbio... E' possibile sostituire questo tipo di dirigenti con un algoritmo? 

Lasciando l'analisi degli effetti di questo approccio a un prossimo post, di seguito provo a riportare i lineamenti dell'algoritmo che vorrei provare. In futuro penso di creare un progetto open source per implementare l'algoritmo (si cercano collaboratori). Il software si potrebbe validare in azienda utilizzando qualche dirigente reale come oracolo.

Il dirigente è modellato come un agent: reagisce a richieste che gli vengono sottoposte dall'esterno.

Request è la richiesta che perviene al dirigente. Una richiesta è caratterizzata da un mittente (from), una domanda a cui rispondere (question) e una data di scadenza opzionale (due_date).
 L'elaborazione delle richieste avviene nel metodo onRequest dove si innesca un ciclo in cui ciascuna iterazione si compone di due fasi (round). Durante la prima fase sono raccolte le opinioni dai propri collaboratori; mentre durante la seconda il dirigente cerca di raggiungere un consenso.

Il ciclo termina quando viene raggiunto il consenso ovvero quando il tempo a disposizione si esaurisce.

In grassetto le funzioni che saranno analizzate in un prossimo articolo.


Request : {
  from : senderDomain
  question : string;
  due_date : date;
}

onRequest(initial_req :
Request) { 
  try { 
    due_date = due_date != null ? 
             initial_req.due_date : determine_due_date(initial_req);

    priority = prioritize_request(initial_req.from, due_date);
 
    first_iteration = true;
     
    repeat {
      // first round : ask for candidate solutions
      if (first_iteration) {
        interpreted_req1 = new Request();

        interpreted_question = randomized_summarization(initial_req);
        interpreted_req1.question = ask_for_candidate_solution();
        interpreted_req1.priority = priority;
        interpreted_req1.due_date = calculate_due_date(priority, due_date);
      } else {
        interpreted_req1 = new Request();
        interpreted_req1.question = ask_for_new_candidate_solutions(response, most_frequent_res1);
        interpreted_req1.priority = priority;
        interpreted_req1.due_date = calculate_due_date(priority, due_date);
      }
         
      responses1 = send_request_and_collect_responses(team, interpreted_req1);
      most_frequent_res1 = randomized_mode_scoring(responses1);
         
      // second round : ask to to vote for the most common solution
      interpreted_req2 = new Request();
      interpreted_req2.question = proposal_with_default_on_due_date(most_frequent_res1);
      interpreted_req2.priority = priority;
      interpreted_req2.due_date = calculate_due_date(priority, due_date);
         
      responses2 = send_request_and_collect_responses(team, interpreted_req2);
      most_frequent_res2 = randomized_mode_scoring(responses2);
         
      // loop until convergence
      has_converged = most_frequent_res2 == YES;
    } until (has_converged);
     
   solution = most_frequent_res1;
  } catch (timeout) {
    // no convergence in allowed time-frame
    solution = randomized_select(most_frequent_res1, responses1);
  }
 
  reply(initial_req.from, team, solution); 

}

giovedì 31 maggio 2012

Toglietemi tutto ma non il mio... calcio!

Accettiamo senza battere ciglio una pressione fiscale unica a livello europero. Accettiamo che i giovani possano restare senza lavoro e quindi senza futuro. Oppure che un Renzo Bossi guadagni (sic!) cifre spropositate senza che sappia neppure perché. Che i politici derubino il Paese. Che la meritocrazia sia una parola utilizzata solo come propaganda. Che i reati restino impuniti.

Ma il calcio no! non lo si tocchi! Non lo si pensi neppure di sospendere il calcio per 2/3 anni!
Come faremmo senza? E' una delle cose senza cui non si può vivere!

Questa è l'Italia...decisamente una società dell'informazione!

martedì 29 maggio 2012

Il "buon senso"... di restare in silenzio

Si prega tutti coloro che ritengono di essere gli unici dotati "buon senso" di non usarlo per impartire lezioni su materie in merito alle quali non si ha alcuna competenza tecnica, quanto per capire che in dette circostanze è più dignitoso (e onesto) restare in silenzio - Mr Sneer

lunedì 28 maggio 2012

Quando si parla di formazione, lo Stato sa bene su cosa investire...

Nel periodo 2009/2010 la spesa pubblica per gli stipendi degli insegnanti è calata, ad eccezione di dirigenti scolastici e professori di Religione. A certificarlo la Corte di Conti nella Relazione 2012 Sul Costo Del Lavoro Pubblico.

Senza parole!

Giovani: ecco i lavori in tempi di crisi

La CGIA di Mestre ha effettuato uno studio (su dati ISTAT) per calcolare il tasso di crescita degli ambiti professionali che, nel 2011, hanno offerto il maggior numero di assunzioni tra gli under 35.

Da questo emerge che "Tra i colletti bianchi spiccano gli ingegneri, gli addetti alla segreteria e i cassieri di banche ed assicurazioni. Tra i colletti blu, invece, gli addetti alla pulizia, i facchini e gli autisti". Anche i tecnici informatici, telematici e delle comunicazionisi sono posizionati bene nella classifica.

sabato 26 maggio 2012

Altro che investimento in formazione... il mattone è una certezza...


Beh questi hanno guadagnato un botto!!!... dicono di essere in crisi perché nessuno compra più... Uno di loro dice anche di aver perso 24 milioni di euro in borsa!!!

Certo acquistare una casa di 400-800 mila, con un reddito da neolaureato... la vedo proprio dura, molto dura...


venerdì 25 maggio 2012

Meritocrazia, competenza e formazione

Uno dei più grandi problemi italiani (secondo me) è che il "sistema Italia" non è meritocratico.

Il merito ha come condizione necessaria la competenza e la formazione continua. L'acquisizione delle competenze è un processo attivo che richiede un impegno non indifferente. Tuttavia lo sforzo è ben ripagato: la differenza di prestazioni tra lavoratori con livelli di competenza diversi è davvero significativa (in particolare per le attività intellettuali e per la produzione di innovazione).

Purtroppo la quasi totale mancanza di meritocrazia rende il ritorno sull'investimento in formazione tanto basso da scoraggiarlo a tutti i livelli. Mi riferisco non solo al percorso di formazioni iniziale (laurea e dottorato), ma anche alla successiva formazione richiesta continuamente durante tutta la vita lavorativa (e non).

L'esperienza (diretta e indiretta) mi porta a ritenere che le competenze (nel settore ICT ma non solo), ai fini della carriera e, quindi, della retribuzione nelle organizzazioni (pubbliche e private) contano ben poco... L'anzianità è il più usato strumento per "approssimare" il livello di competenza del personale. Ovviamente molto poco preciso (infatti non è stata rilevata correlazione tra anzianità nel ruolo e competenza).

Purtroppo, se l'investimento in formazione non è economicamente vantaggioso, si innesca un circolo vizioso per cui le aziende sono meno efficienti e possono permettersi meno formazione per i propri dipendenti e retribuzioni basse che disincentivano l'acquisizione di personale qualificato.

Il Sole 24 Ore riporta i risultati del rapporto AlmaLaurea in cui è evidenziato un fenomeno molto preoccupante (finalmente! ma c'era bisogno di uno studio per rilevare questo fenomeno e gli effetti negativi che si innescano?!?!) .

Forse è ora che i politici e il personale direttivo di organizzazioni pubbliche e private comincino a pensare un po' di più al reale interesse delle organizzazioni e dell'intera nazione, invece di guardare ai loro interessi personali di breve periodo!

giovedì 24 maggio 2012

Requisiti colpevoli!

Il progetto ha un ritardo di sei mesi perché, nella fase di analisi, i requisiti utente non si sono materializzati (qui la responsabilità è inequivocabilmente dei requisiti) - un Business Analyst, collega di Mr Sneer

mercoledì 23 maggio 2012

Parser STAX e validazione XSD con Woodstox e MSV

Woodstox è un parser particolarmente efficiente che implementa l'interfaccia StAX... un candidato ideale quindi per l'elaborazione di documenti XML di dimensioni considerevoli.

Una caratteristica interessante di questo parser è la sua capacità di interfacciare il Sun Multi-Schema Validator (di seguito MSV) per la validazione dell'XML tramite diverse tipologie di Schema, ad esempio DTD, XML Schema e RELAX NG.

Per la validazione è necessario ricorrere a una estensione specifica di Woodstox che è al di fuori dell'interfaccia StAX. Tuttavia l'utilizzo di questa estensione è abbastanza limitata e non compromette in modo eccessivo la migrazione a altri parser StAX (eliminando la validazione ove questi non la supportino).

Di seguito è descritto un esempio di utilizzo di Woodstox con MSV per effettuare la validazione con XML Schema.

Dopo la creazione dell'istanza del parser tramite la factory XMLInputFactory, si effettua il cast dell'oggetto XMLStreamReader ottenuto (che fa parte dello standard StAX) all'interfaccia XMLStreamReader2 (che è invece specifica di Woodstox) e si associa tramite il metodo validateAgainst() l'istanza dello XMLValidationSchema (ottenuto da un factory XMLValidationSchemaFactory definita in MSV).

Per catturare gli errori di validazione è possibile definire uno specifico ValidationProblemHandler invocando il metodo setter opportuno sull'istanza di XMLStreamReader2. L'handler potrà gestire i problemi di validazione registrandoli in una collection oppure potrà lanciare una eccezione di tipo XMLValidationProblem che sarà restituito al client del parser durante l'elaborazione degli eventi.

Il parser e le librerie MSV possono essere scaricate a partire da questo link.

File inFile = ... // documento
File xsdFile = ... // XML schema 


XMLInputFactory staxFactory = XMLInputFactory.newInstance();       
XMLStreamReader streamReader = staxFactory.createXMLStreamReader(new FileInputStream(inFile));
       
XMLValidationSchemaFactory schemaFactory = XMLValidationSchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
       
XMLValidationSchema schemaGrammar = schemaFactory.createSchema(xsdFile);
 
XMLStreamReader2 sr2 = ((XMLStreamReader2)streamReader);
       
final List<XMLValidationProblem> listOfProblems = new ArrayList<XMLValidationProblem>();
       
if (schemaGrammar!=null) {
  sr2.validateAgainst(schemaGrammar);
  sr2.setValidationProblemHandler(new ValidationProblemHandler(){
     public void reportProblem(XMLValidationProblem problem) throws XMLValidationException {
       listOfProblems.add(problem);
     }
  });
}


// usa lo stream Reader
// streamReader.next();

martedì 22 maggio 2012

Parsing di XML: DOM, SAX, StAX

L'interfaccia di un componente può vincolare pesantemente le sue caratteristiche prestazionali e di usabilità. Un esempio abbastanza significativo è rappresentato dalle tre diverse API che sono state disegnate per il parsing dei documenti XML.

Per l'elaborazione dei documenti XML esistono infatti tre interfacce standard, ciascuna con particolari caratteristiche di prestazione e di usabilità.

fornisce una modalità di navigazione all'interno del documento XML di tipo "ad albero"; il parser, a partire dal documento XML, memorizzato come stream di byte, crea una struttura in memoria (appunto modello a oggetti del documento) che rappresenta il documento in tutti i suoi aspetti. Il programmatore può navigare la struttura ad albero ed accedere in modo diretto (anche usando XPath) ai suoi elementi e attributi.

contrariamente al parser DOM, il parser SAX elabora i documenti in una modalità "a eventi" (streaming parser) senza caricare in memoria l'interno documento. Il parser scorre il documento XML dall'inizio alla fine e, per ciascun elemento XML incontrato e che può essere significativo per l'elaborazione, produce un evento. L'evento è passato a una funzione di callback che il programmatore ha definito prima dell'attivazione del parser.  Questo tipo di parser è detto parser di tipo "push" in quanto gli eventi vengono inviati all'utilizzatore del parser senza che questo possa decidere quando ricevere il successivo evento.
L'elaborazione di documenti XML con un parser SAX richiede la creazione di uno specifico  automa a stati finiti (dipendente sia dalla struttura dell'XML sia dalla logica applicativa) ed è pertanto abbastanza laboriosa da implementare.
Gli unici vantaggi dei parser SAX sono: l'elevato livello di prestazioni e la ridotta quantità di memoria utilizzata, indipendentemente dalla dimensione del documento da elaborare.

è un parser di tipo "a eventi" (streaming parser) che quindi fornisce le prestazioni e la ridotta occupazione di memoria tipiche dei parser a eventi, ma che punta a offrire una maggiore comodità di programmazione.
Il parser, infatti, una volta invocato su un documento XML, resituisce al suo utilizzatore un "cursore" che rappresenta la posizione corrente nel documento XML durante l'elaborazione.
L'applicazione, quando vuole ottenere ed elaborare il successivo evento (che rappresenta un elemento XML, nodo o attributo presente nel documento), può pilotare il parser facendo avanzare il cursore.
Per questa particolare modalità di interazione con il client, il parser viene detto di tipo "pull"

In sintesi:
XML Parser API Feature Summary (adattata da Oracle)

Feature

StAX

SAX

DOM

API Type

Pull, streaming

Push, streaming

In memory tree

Ease of Use

High

High

Medium

XPath Capability

No

No

Yes

CPU and Memory Efficiency

Good

Good

Varies

Forward Only

Yes

Yes

No

Read XML

Yes

Yes

Yes

Write XML

Yes

No

Yes

Create, Read, Update, Delete

No

No

Yes

domenica 20 maggio 2012

Per la BSA: Italia al secondo posto in Europa nel settore ICT...


Secondo il rapporto "Shadow Market" della Business Software Agency siamo al secondo posto in Europa, a pari merito con Cipro e Islanda, per l'illegalità informatica: il 48% dei software istallati sui PC è illegale.

Il valore commerciale del software illegale in circolazione nel nostro Paese ammonta a 1.398 milioni di euro. Valore che colloca quello italiano all'ottavo al mondo nella classifica dei mercati che perdono maggiori volumi d'affari a causa della pirateria.

Certo sono dati riportati da una fonte non certo "neutrale"... ma forse fornisce un'idea della seria considerazione attribuita al software nel nostro Paese!

sabato 19 maggio 2012

Dirigente Ingegnere Informatico - AUSL Modena

Azienda USL di Modena riapertura termini per presentare la domanda per concorso
Dirigente Ingegnere Informatico

Requisiti:
  1. Laurea vecchio ordinamento in: 
    • Informatica ed equipollenti
    • Ingegneria biomedica
    • Ingegneria delle telecomunicazioni - Ingegneria elettronica
    • Ingegneria gestionale - Ingegneria informatica
    • corrispondenti Lauree specialistiche o Lauree Magistrali;
  2. abilitazione all’esercizio professionale; 
  3. Cinque anni di servizio effettivo corrispondente alla professionalità a concorso;
  4. Iscrizione all’Albo dell’Ordine degli Ingegneri
Questo il link.

Dirigente Servizio "Informatica" in Alto Adige

Al Comune di Rovereto è indetto un concorso per Dirigente del Servizio "Informatica".

Richiesti:
  1. diploma di laurea Informatica o in Ingegneria Informatica o in Ingegneria Elettronica o in Matematica o in Statistica o in Statistica e informatica per l’azienda o in Fisica ovvero diplomi di laurea a questi equipollenti;
  2. esperienza di servizio, adeguatamente documentata, di almeno cinque anni.
Questo il link.

Un CTO con laurea in Scienze politiche

...non voglio ascoltare altre technicalities... Che il sistema implementi le funzionalità necessarie a supportare tutti i requisiti entro la fine di questo mese! - un collega di Mr Sneer

giovedì 17 maggio 2012

Eseguire un Cabbage

Oggi ho imparato a eseguire un CABG (si pronuncia Cabbage). 

Nel seguito descrvo il significato dell'acronimo e le motivazioni per cui è utile tale intervento, illustrando anche la corretta procedura per effettuarlo. Chi è interessato a un approfondimento può accedere (vi prego senza diffonderlo in quanto raccoglie dettagliate informazioni, aggiornate allo stato dell'arte, sui più importanti argomenti tecnici - non a caso i principali utilizzatori sono alcuni miei conoscenti esperti del settore ICT) al seguente link.

Il CABG è un intervento di bypass aorto-coronarico (Coronary Artery Bypass Graft surgery) che serve per superare un condotto vascolare parzialmente o totalmente ostruito al fine di ridurre il rischio di infarto miocardico, eliminando anche l'eventuale dolore retrosternale dovuto a insufficienza del flusso sanguigno attraverso le arterie coronarie.

Per effettuare l'intervento è sufficiente effettuare un'incisione longitudinale sul torace, attraverso lo sterno in modo da accedere al cuore e all'aorta. Si deve quindi suturare a valle del restringimento un tratto di vena safena o di arteria mammaria prelevata dal paziente stesso. Successivamente si collega l'altra estremità a monte del restringimento o dell'occlusione. In questo modo il sangue avrà un passaggio per aggirare l'ostacolo.

E' possibile evitare l'approccio tradizionale che prevede il collegamento a una macchina cuore-polmone in favore di un più recente intervento a cuore pulsante che in genere comporta minori rischi per il paziente.

Dopo l'intervento è importante monitorare le condizioni generali del paziente e in particolare che non vi siano sanguinamento postoperatorio o infezioni.

mercoledì 16 maggio 2012

martedì 15 maggio 2012

Esportare le dipendenze di un progetto maven

Per il build dei progetti Java, in particolare per progetti open source con un'ampia comunità di sviluppatori, ci si ritrova spesso a lavorare con il tool Maven.

Maven è un tool di build che utilizza file XML (pom.xml) per la descrizione sia dei passi richiesti per le diverse fasi di build, sia della struttura del progetto in termini di moduli e relative dipendenze (anche verso componenti esterni).

Così un progetto che dipenda, ad esempio, dalla libreria Hibernate, può semplicemente dichiarare tale dipendenza e Maven provvederà in fase di build a recuperare (eventualmente da Internet) il jar di Hibernate e tutte le librerie richieste da Hibernate stesso (effettuando il download quindi di tutte le librerie che costituiscono la chiusura transitiva del grafo delle dipendenze del progetto). Le librerie scaricate da Internet, sono memorizzate in una cache locale dell'utente in modo da essere utilizzate nelle successive fasi di build.

In alcuni casi (ad esempio per importare il progetto in un tool che non supporta Maven) è utile ottenere tutte le librerie necessarie per la build del progetto. Poichè Maven è basato su un sistema a plugin, ed è disponibile uno specifico plugin che effettua proprio questo compito, per ottenere il risultato desiderato è sufficiente una piccola modifica al file pom..xml del progetto.

Nella sezione project/build/plugins si può aggiungere il seguente plug-in di Maven:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
      <execution>
        <id>copy-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>copy-dependencies</goal>
        </goals>
        <configuration>
         <outputDirectory>${project.build.directory}/depLibs</outputDirectory>
         <overWriteReleases>false</overWriteReleases>
         <overWriteSnapshots>true</overWriteSnapshots>
         <excludeTransitive>true</excludeTransitive>
       </configuration>
     </execution>
    </executions>
  </plugin>


La configurazione del plugin descritta sopra è tale eseguire la copia delle librerie durante la fase di pacakge. In questo modo, durante l'esecuzione del comando mvn package oltre al build, Maven provvederà a esportare tutte le librerie da cui il progetto dipende (direttamente e non) nella cartella depList (posizionata nello stesso folder in cui sono prodotti gli artefatti derivanti dal processo di build).

venerdì 11 maggio 2012

IBM Italia licenzia 26 dirigenti Global Business Services

Il Sole 24 Ore comunica che, fonte ANSA, Ibm Italia licenzia, senza preavviso, 26 dirigenti della controllata Global Business Services che fornisce servizi interni di consulenza. I dirigenti hanno un'età media tra i 40 e i 50 anni e sembra rientrino nella fascia di stipendi più alta.

Hostageware: poveri utenti

Hostageware: apps that you have to use because there is no valid or realistic alternative but which are so buggy and such crap that they drive you insane - Kevin Burton

giovedì 10 maggio 2012

Legge del know-how, delle responsabilità e della retribuzione

Internamente alle organizzazioni italiane che operano nel settore ICT, valgono le seguenti proposizioni:

1) la somma del know-how e del livello gerarchico (responsabilità dell'unità organizzativa, del processo ecc) è costante al variare del lavoratore (per quasi tutti i lavoratori);

2) la retribuzione è proporzionale al livello gerarchico.

In formule:

KH + LG = K
R  ~  LG

dove:
  • K è una costante che dipende dalla specifica organizzazione O considerata; il dominio di O è l'insieme delle organizzazioni italiane che operano nel settore ICT;
  • KH, LG e R rappresentano rispettivamente il Know-how,  il Livello Gerarchico e la  retribuzione di L, con L che varia nell'insieme dei lavoratori appartenenti a O.
L'uguaglianza va interpretata come valida quasi ovunque. Sia rispetto a L, sia rispetto a O.

mercoledì 9 maggio 2012

Vuoi trovare lavoro? Diventa ingegnere informatico

"Prima d’iscriversi all’università sarebbe il caso di fermarsi a riflettere un attimo. E guardare al futuro. ... un ingegnere informatico che progetta, sviluppa e gestisce software e hardware è la migliore professione possibile. Lo stipendio medio annuo supera gli 88 mila dollari (oltre 67 mila euro), la domanda di lavoro è in costante crescita e sono poche probabilità di rimanere a spasso... I maghi del computer sono al top delle professioni".

Questo il tono di diversi articoli che si leggono nelle ultime settimane su Internet.

Tutti prendono spunto da una ststistica di CareerCast.com, sito diricerca di lavoro USA.

Com'è la situazione in Italia? Beh a mio avviso abbastanza diversa... un neolaureato in Ingegneria che comincia a lavorare nel settore dello svilupo software non guadagna (a Roma) più di 1200 Euro al mese ed è assunto con contratto a progetto. Certo è meglio che nulla... però tale importo va confrontato con il costo per l'affitto di un appartamento: ci si rende immediatamente conto che è abbastanza difficile viverci decentemente (a meno di non avere casa di proprietà).

La domanda è: con l'esperienza e (l'ampliarsi delle competenze) quanto aumenta lo stipendio? Purtroppo non molto...

Qual'è la vostra esperienza?