mercoledì 20 aprile 2011

What editor do you use?

A real developer uses Emacs....and I am an Emacs user too!

Da Eclipse a KDevelop

Ultimamente ho iniziato ad usare KDevelop, un po' per esigenza e un po' per variare la mia inossidabile affezzione ad Eclipse, che con opportune configurazioni puo' essere usato come IDE universale.
La prima cosa che mi e' saltata agli occhi e' che KDevelop non ha di default una configurazione "smart": le parentesi non vengono chiuse in automatico e l'indentazione non funziona come ci si aspetterebbe (ossia le tabulazioni sono scorrelate). Fortunatamente e' possibile impostare la configurazione per avere un ambiente un po' piu' intelligente.



Purtroppo le opzioni di configurazione sono veramente scarse rispetto ad Eclipse, che sicuramente ne ha di contro fin troppe.

KDE < 5

Ultimamente sono comparsi alcuni post su planetKDE che citano KDE5 come un progetto sul quale si sta realmente iniziando a progettare. Il problema e' che KDE5 non esiste, nemmeno nei pensieri degli sviluppatori. KDE4 e' la release corrente e lo sara' ancora a lungo, anche perche' gli sviluppatori sono attualmente impegnati nella progettazione e realizzazione di un progetto denominato "Plasma Quick" che portera' la piattaforma desktop ad un livello superiore. Un esempio e' il lavoro che viene svolto per Plasma Active, un nuovo desktop per dispositivi mobili.

Inoltre sono ufficialmente smentite le voci che vogliono KWin e Plasma fusi in un unico layer. Se apparentemente la cosa puo' sembrare sensata (unire i due framework permetterebbe di risparmiare un livello di astrazione), una simile fusione comprometterebbe la portabilita' di Plasma, che oggi puo' essere adattato a diversi window managers, escludendolo ad esempio dal mercato dei telefonini.

Eclipse RCP e il suo utilizzo da parte di IBM...

Nell'epoca delle applicazioni Web puo' sembrare strano che si continui ad investire su applicazioni Rich Client. Come sviluppatore Java per me il top delle tecnologie RCP e' Eclipse RCP, e IBM ha attualmente utilizzato la sua ben collaudata piattaforma di sviluppo RCP per la realizzazione della applicazione per la gestione del reparto vendite di IBM stessa. Quando si dice "eat your dog food"!

domenica 10 aprile 2011

WhiteCat @ CTS 2011

I'm proud to announce that WhiteCat has been accepted as regular paper work at CTS 2011. The paper that will be presented at the conference shows improvements since the past versions of the framework. Moreover the paper presents a bird's eye view of the framework itself demonstrating its integrability with other role and agent systems.

Gnome 3 and KDE 4.6.2

On April 6th 2011 Gnome released a very important "software compilation": the Gnome 3 desktop. I've tested it during the development time and I see it has been a really good work, very innovative, maybe too much, and for this reason I believe this new version of Gnome will suffer about all the problems the KDE 4 release had. Both these releases deeply changes the approach to the computing, not only to the desktop, and therefore users will take time to get used to the new interface. I'm sure Gnome 3 will get rid of all problems quickly, and users will start loving this new desktop.
An interesting blog post from one of the founders of the Gnome Project briefly shows the history of the Gnome desktop; I'm quite surprised the globally-known leader of the first release of Gnome, Miguel De Icaza did not blog about this important release and did not put an "I am Gnome" icon on his blog neither.

On April 6th 2011 something else happened: KDE 4.6.2 was released! While this is a minor release, especially if compared to the Gnome 3 one, it is another important piece of history for my favourite desktop. And someone is already talking about KDE 5, even if I believe this will happen when Qt 5 will be released.

Well, just to joke around the "I am Gnome" image that many bloggers are using, I have produced a small "I am KDE" version of it. This is clearly a joke, there is no need to start a figth!


venerdì 1 aprile 2011

Utilizzo pratico di regexp_split_to_table

Mi sono trovato nella condizione di dover fare la "traduzione" fra due sistemi di gestione permessi basati su tabelle PostgreSQL, ed ho trovato realmente utile la funzione interna regexp_split_to_table() embedded nel sistema.
La gestione di partenza prevedeva una tabella dove ogni entry conteneva l'utente alla quale si riferiva oltre ad una stringa CSV con i contesti ai quali l'utente aveva accesso, ossia qualcosa del tipo

SELECT id_utenti, cognome, nome, categorie_accessibili FROM utenti;
 id_utenti | cognome | nome |        categorie_accessibili        
-----------+---------+------+--------------------------------------
         1 | Ferrari | Luca | ambientazioni,bozzetti,pezzispeciali

In questo caso la colonna "categorie_accessibili" rappresenta il contesto al quale l'utente ha accesso. Ebbene mi e' stata richiesta la conversione di questo sistema di gestione dei permessi con uno piu' elaborato, dove oltre al contesto veniva specificato un sub-contesto e le relative azioni di lettura/scrittura con una tabella come la seguente

SELECT * FROM permessi;
 id_utenti | id_permessi |   categoria   |     tab      | lettura | scrittura
-----------+-------------+---------------+--------------+---------+-----------
         1 |           2 | ambientazioni | stato        |       0 |         0
         1 |           3 | ambientazioni | varie        |       0 |         0
         1 |           4 | ambientazioni | collegamenti |       0 |         0
         1 |           5 | presentazioni | generale     |       0 |         0
         1 |           6 | presentazioni | stato        |       0 |         0
         1 |           7 | presentazioni | varie        |       0 |         0
         1 |           8 | presentazioni | collegamenti |       0 |         0
         1 |          10 | pezzispeciali | stato        |       0 |         0
         1 |          11 | pezzispeciali | varie        |       0 |         0
         1 |          12 | pezzispeciali | collegamenti |       0 |         0
         1 |           1 | ambientazioni | generale     |       1 |         0
         1 |           9 | pezzispeciali | generale     |       1 |         0

In questo caso il contesto primario e' dato dalla colonna "categoria" mentre quello secondario dalla colonna "tab"; le colonne "lettura" e "scrittura" rappresentano invece i permessi di lettura e scrittura (come ovvio) in formato C-like (0 implica che non si ha il permesso, 1 che lo si ha).
Riassumendo quindi occorre convertire la colonna "utenti.categorie_accessibili" in una serie di entry nella tabella "permessi" splittando ogni valore contenuto in "categorie_accessibili" e mettendolo in "permessi.categoria". La logica vuole che ogni contesto/categoria presente in "categorie_accessibili" forzi un valore di "categoria"+"tab=generale"+"lettura" pari ad 1, lasciando gli altri valori immutati.

Ci sono delle precondizioni che hanno semplificato di molto il mio lavoro: tutti gli utenti presenti nella tabella "utenti" sono inseriti anche nella tabella "permessi", e per ciascuno di essi la lista dei permessi e' completa (ossia non ci sono nuove tuple da inserire, ma solo tuple da aggiornare). Inoltre la stringa "categorie_accessibili" e' ben formattata e non contiene spazi o altri caratteri che possano richiedere l'uso di espressioni regolari complicate.

Essendo troppo pigro per scrivere un programma di utilita' e non avendo voglia di scrivere una stored procedure per eseguire la trasformazione ho cominciato a riflettere su quale query mi avrebbe potuto aiutare. Inizialmente avevo pensato di costruire una query con un CASE che valutasse con la funzione position(..) la presenza di una "categoria" dentro alla stringa "categorie_accessibili" e producesse in uscita il valore 0/1 di conseguenza, ossia qualcosa come

SELECT u.id_utenti,u.cognome,u.nome, p.categoria,
       CASE WHEN position( p.categoria IN u.categorie_accessibili ) > 0
            THEN 1
            ELSE 0 END AS permesso
FROM utenti u JOIN permessi p ON u.id_utenti = p.id_utenti WHERE p.tab = 'generale';

che produce in uscita un risultato come segue

 id_utenti | cognome | nome |   categoria   | permesso
-----------+---------+------+---------------+----------
         1 | Ferrari | Luca | pezzispeciali |        1
         1 | Ferrari | Luca | ambientazioni |        1
         1 | Ferrari | Luca | presentazioni |        0

e quindi inserendo una simile query di selezione dentro ad uno statement di UPDATE si potrebbe ottenere il risultato voluto. Questa soluzione implica la lettura della tabella "permessi" per fare match su quella "utenti", e alla fine ho deciso di operare in modo leggermente differente. Grazie alla funzione regexp_split_to_table(..) e' possibile spezzare la stringa "categorie_accessibili" in una tabella da usare come subquery per la query di UPDATE, che quindi risulta:

UPDATE permessi p SET lettura = 1
WHERE tab = 'generale'
AND categoria IN
 ( SELECT regexp_split_to_table( u.categorie_accessibili, ',')
   FROM utenti u WHERE u.id_utenti = p.id_utenti
 );

L'idea e' quindi quella di procedere attraverso la tabella "permessi" aggiornado solo le tuple con sub-contesto "generale" che siano pero' presenti nella stringa "categorie_accessibili" della tabella "utenti".

Joining the IJATS ERB

I'm proud to announce that the Editor in Chief has officially asked me to become a member of the Editorial Review Board of the International Journal of Agent Technologies and Systems. And I'm happy to say I accepted this opportunity, so now I'm officially on the Editorial Review Board of IJAS.
This means that I will be selected to do paper reviews and to evaluated scientific works submitted to this journal. I see this as an opportunity to improve my scientific skills and I'll do my best to peer review every work I will be ask to review.

Gnome 3 posticipato? Niente panico, è un pesce d'Aprile!

Questa mattina la mia attenzione e' stata catturata da un post con uno strano titolo su planet Gnome che indicava che Gnome 3 (in uscita il 6 Aprile) sarebbe stato posticipato a Settembre 2011. Qualche secondo dopo ho realizzato che si trattava di un non tanto riuscito pesce d'Aprile (infatti il post ha la data 1 Aprile). Dico non tanto riuscito perche' francamente il messaggio non faceva ridere per niente, solitamente si cercano messaggi scherzosi sull'argomento tecnico che si sta trattando. Addirittura il post in questione ha scatenato il panico in qualche utente/lettore/blogger non attento che si e' lanciato in campagne disperate di sostegno del release team (qui e anche qui). Ora, qualsiasi release team di qualunque progetto OpenSource ha tutto il mio sostegno indiscriminato, ma era sufficiente leggere la mail circolata in mailing list development  come suggerito dal post-pesce-d'Aprile per rendersi conto che Gnome 3.0.0 verra' regolarmente rilasciato il 6 Aprile 2011.

Ai piu' sembrera' che anche in questo caso io stia pendendo per KDE rispetto a Gnome, ma effettivamente questo post e' sicuramente piu' esilarante del suo rivale Gnome...