martedì, gennaio 29, 2008

Buio illuminante

Buio illuminante


Luce diffusa, radente, coglie
ogne anfratto dell’anima pia,
occultando le ombre minacciose.
In agguato pazientano tenebre,
liberatrici di spettri antichi,
nulla può impedirne il ritorno.

Miope dell’antica identità,
non comprendo il profondo dolore;
erroneamente intendo segni
mostratimi con gesti inattesi.
Nel buio profondo ora brancolo
fiutando intesa per dar appoggio.

Giornate luminose rendon ciechi,
sovente di più svela oscurità,
chiarore perpetuo, s’apprezza poco.
Nell’ombra, un sol raggio di speranza
pare illuminar l’intera vita,
vien ben percepito con ogne senso.

Dovrebbe serenità
pervadere le menti
d’accecati dispersi:
vedranno più di prima.

Non capendo,
percepisco.


Gabriele Lombardi

venerdì, novembre 23, 2007

Goccia

Goccia


Goccia mi s'è posata
d'improvviso sul volto:
pioggia lieve, trasporta;
saran d'uno stolto,
ma l'antichi riporta
mente d'era passata.

Frenetico appare
seguirsi d'adulteri
giorni non penetranti:
son gl'intensi valori,
e non i fuorvianti,
cui voglio l'sapore!

Aspirandot'appieno
gusto l'vero valore
ch'amalgama serena
coscienza d'amore;
sublima l'anatema,
errar pare ameno.

Son gli alti e bassi
che compongono succo
di esistenza, piatto
appare il rintocco
d'esistere coatto:
sovente siam percossi!

Usma essenza densa
di quanto già possiedi;
aspira la fragranza
di antichi rimedi
qual vera sostanza:
palpito non pensa.


Gabriele Lombardi

sabato, novembre 03, 2007

Bella

Bella


Come un sorriso solare
che sorge al mattino
e non tramonta mai,
come un angelo sognatore
che dispiega le ali
in un leggero volo libero,
come un delicato fiore
apre i petali vellutati
sfiorato dalla rugiada,
come una dolce amante
trasmette inconsapevole
un amore profondo e intenso;

così tu sai rendermi felice,
così tu sai carezzarmi,
così tu sai essere la mia donna,
così tu sai appagarmi,
così tu sai sorridermi,
così tu sai capirmi,
così tu mi vuoi e ti dai,
così tu mi intrighi,
così tu diventi il mio centro,
così tu.. e nessun'altra..
nel mio profondo t'inerpichi
drogandomi d'amore vero.

Mia bella,
ora ti sento mia
e non posso più pensare
a una vita vissuta senza di te.


Gabriele Lombardi

mercoledì, ottobre 31, 2007

Diamo un occhio ai saponi fatti in casa

Eccovi un piccolo album fotografico dei saponi auto-prodotti:

Saponi

lunedì, ottobre 15, 2007

Saponi saponi e ancora saponi!


Ragazzi.. come mi capita ogni tanto (anzi ogni spesso!) mi salta per la testa qualcosa e parto per la tangente! A sto giro sono partito per la tangente dei saponi e mi son messo a fabbricarne in casa! Se date un occhio al sito ilmiosapone troverete una marea di consigli, strumenti e ricette pronte per essere sperimentate.. considerate fra l'altro che se utilizzate il metodo a freddo potete utilizzare degli strumenti dedicati per il sapone per una spesa complessiva di circa 20€, senza devastare per forza una pentola di casa (che poi familiari vari tipo mogli, mariti o genitori vengono a bussare alla mia porta incazzati neri!!!).

Siccome sul sito del link c'è già scritto tutto.. non vorrei ripetere le stesse informazioni.. a parte il fatto che la soda caustica in drogheria si trova con estrema facilità e costa pure poco (tipo 5€ un kg con cui potete fare circa 8 kg di sapone.. che mi sembrano abbastanza ;).. e che dovete assolutament elavorare con finestre spalancate.. meglio se direttamente in balcone o comunque all'aperto e con tutte le protezioni e precauzioni del caso perché la soda caustica non scherza!!!

A parte tutto questo.. voglio darvi una ricettucola che mi sono inventato io e che mi sembra essere venuta una figata esagerata! Non l'ho trovata da nessuna parte.. quindi è pubblicata qui in esclusiva per voi (oooh ;). ECCOLA!


Sapone orientale rinfrescante

Questa ricetta sembra molto complicata ma in realtà ha l'enorme vantaggio di non contenere ingredienti comlicati da cercare.. molti si possono trovare in qualunque erboristeria (olii essenziali, foglie di eucalipto, olio di mandorle dolci), altri al supermercato (tutti gli altri olii, il miele e la farina di cocco). Considerate che potete tranquillamente sostituire degli ingredienti.. se avete già in casa il miele e non è all'eucalipto va bene comunque (ovviamente meglio usare quello di eucalipto), se non avete la farina di cocco ma quella normale.. ok comunque!

Pesate i grassi nelle seguenti quantità:
100g olio di mandorle dolci
100g olio di soia
50g olio di ricino
400g olio di riso
350g olio di oliva (meglio extravergine)

Procuratevi anche:
5ml olio essenziale alle mandorle (circa 50 gocce)
5ml olio essenziale all'eucalipto (circa 50 gocce)
q.b. farina di cocco (un cucchiaio va bene)
q.b. miele all'eucalipto (un cucchiaio va bene)
20g foglie secche di eucalipto (frullatele per farne una polverina fine ma non troppo)

Per la soluzione caustica servono:
125g soda caustica
300cl acqua con amido di riso procurato come segue:


Facendovi un bel riso (meglio se in bianco).. che potrete mangiarvi aggiungendo zafferano o funghi trifolati.. come vi pare.. ma durante la cottura.. tenete l'acqua non troppo abbondante ma nemmeno troppo scarsa e di tanto in tanto con un mestolo recuperate l'amido.. che non sia troppo pastoso.. deve rimanere abbastanza liquido.. dovete raccoglierne 300cl in una brocca graduata. Fatelo raffreddare.

Indossate vestiti vecchi e mettetevi le protezioni (guanti di gomma, maschera anti gas (anche semplice), occhiali da saldatore).. pesate la soda caustica con precisione (al grammo.. non all'atomo!) e unitela lentamente con l'amido all'interno di uno stampo alto per torte abbastanza capiente da contenere almeno 2l d'acqua.. e che userete solo per il sapone. Non versate MAI l'acqua nella soda.. sempre il contrario e sempre lentamente mescolando con un cucchiaio che userete SOLO per fare il sapone. Mescolate bene fino a far sciogliere la soda.. state attenti ad essere in un posto all'aperto senza cose, persone o animali in giro perché la soluzione caustica è pericolosa (raggiungerà circa gli 80 gradi solo per la reazione chimica)!

Mentre la soda rafredda e raggruma l'amido (ogni tanto andate a dargli una girata altrimenti viene fuori la ricotta sopra e tutto liquido sotto), cominciate a scaldare su un fornello i grassi, a fuoco molto lento, ogni tanto ficcateci dentro un dito per controllare la temperatura.. devono essere 45 gradi, se avete un termometro meglio, altrimenti controllate che sia appena tiepido, 45 gradi sono poco più della temperatura corporea (37).. la temperatura è molto importante.. quindi se riuscite a procurarvi 2 termometri è molto meglio!

Quando la soda si è raffreddata fino a 45 gradi e l'olio è arrivato a 45 gradi.. uniteli (meglio la soda nell'olio.. però io di solito faccio il contrario per non rovinare una pentola da cucina!), mescolate bene con un cucchiaio, poi passate al frullatore a immersione (dovreste dedicare un frullatore intero al solo sapone.. se non volete farlo dato il costo della cosa potete prendere un frustino da dolci al costo di 3 euri e frullare a mano come facevano gli antichi con i rametti per fare il fuoco.. io faccio così.. è faticoso ma funziona e non devo spendere 70€ per un frullatore ad immersione). Smettete di frullare solamente quando raggiungete il nastro, ovvero quando il tutto è abbastanza cremoso da lasciare una piccola scia per un istante quando togliete il frullatore.

A questo punto il sapone è pronto.. non resta che profumarlo e arricchirlo: tirate via metà del composto versandolo attentamente in un altro stampo, lo userete dopo. Aggiungete al rimanente il miele, la farina di cocco e l'olio essenziale alle mandorle. Continuate a mescolare a mano un po' (tipo un paio di minuti) e date anche una leggera frullatina, dovrebbe diventare ancora più cremoso. Fatto questo mettete da parte lo stampo principale e prendete il secondario con il composto avanzato: mettete l'olio essenziale all'eucalipto e le foglie di eucalipto; mescolate e frullate.
Tococ d'arte: adesso versate il composto all'eucalipto dentro al composto al miele facendo una bella striscia centrale profonda. Versatelo tutto, poi procuratevi una bella assicella di legno.. o comunque qualcosa per isolare termicamente e mettete in un posto riparato il vostro stampo con tutto il sapone dentro, coperto in maniera che il calore duri di più aiutando la saponificazione. Lasciate maturare e indurire per 48 ore, poi sformate il sapone e lasciatelo stagionare almeno per un mese, meglio se due (diventa più delicato con la pelle).

HAPPY SOAPING ;)



mercoledì, ottobre 10, 2007

Cose semplici.. ma di effetto!!!

A volte penso: "come è possibile che nel nostro laboratorio si lavori così tanto senza pensare all'impatto emotivo che anche prodotti semplici hanno su chi li vede?" Ovviamente mi metto in prima persona: cerco di inventare algoritmi carini (e funzionanti) per svolgere i compiti più disparati nel ramo della computer visione e dell'elaborazione delle immagini.. e poi non mi rendo conto di quanto poco ci voglia per valorizzarli!

Ad esempio: con un proiettore, una webcam, un puntatore laser (ed ovviamente un computer) si può costruire in maniera molto semplice un sistema di puntamento (cioè di controllo del cursore) che funzioni con il puntatore laser puntato contro un muro dove è proiettato lo schermo del PC.. senza troppa fatica (l'algoritmo di localizzazione dello spot luminoso rosso è veramente una cavolata), ma con un risultato decisamente d'effetto! E' tanto semplice che mi è sembrato assurdo che non ci avesse ancora pensato nessuno.. infatti ci avevano già pensato [1].

Al che dico.. il giochino del puntatore laser me gusta e me lo implemento.. però d'ora in poi voglio cercare di stupirmi e stupirvi con effetti speciali.. alla mia portata! ;)

martedì, luglio 24, 2007

Factor-Graphs.. questi sconosciuti!

L'inferenza statistica è uno strumento veramente potentissimo in molti campi, permette di sfruttare al massimo le informazioni a disposizione, eventualmente corredate da prior distributions ecc ecc, per ricavare delle distribuzioni di probabilità che descrivono un determinato fenomeno. Ad esempio si può utilizzare una tecnica di inferenza come la belief-propagation nelle Bayesian-networks per sapere se in Cina il prezzo del sale aumenterà o diminuirà partendo dal fatto che in Italia piove ecc ecc.. eccessi a parte l'idea è che eventi fra loro apparentemente scorrelati possono influenzare tramite catene di dipendenza altri eventi, le Bayesian-networks hanno sostanzialmente lo scopo di consentire la gestione di queste dipendenze per determinare la distribuzione di probabilità di un evento a posteriori (ovvero date le informazioni disponibili).

Esistono una quantità smodata di tecniche di inferenza statistica, ma -udite udite- moltissime di esse sostanzialmente si pongono come scopo quello di marginalizzare una distribuzione di probabilità coniugata in molte variabili, spesso facilmente fattorizzabile (ad esempio utilizzando le regole relative alle distribuzioni di probabilità condizionata).

I factor-graphs sono uno strumento molto potente per la marginalizzazione di funzioni in molte variabili fattorizzabili in funzioni a poche variabili, del tipo:
data g(x1,x2,...,xn) = PRODi(f(Xi)

dove le xi sono le variabili e gli Xi sono dei sottoinsiemi (di cardinalità "bassa") delle variabili xi,

è possibile sfruttare la fattorizzazione per calcolare efficientemente:
g(xj) = SUMx1(SUMx2(...SUMxj-1(SUMxj+1(...SUMxn(g(x1,x2,...,xn))...))...))

I factor-graphs permettono di effettuare questo calcolo utilizzando un solo semplice algoritmo di nome Sum-Product-Algorithm. Tantissimi algoritmi sono rappresentabili come istanze dei factor-graphs, ad esempio l'algoritmo di Viterbi, il belief-propagation per le Bayesian-networks, forward-backward, Random Markov Fields ecc ecc Turbo-codes decoding.. e ovviamente molti altri algoritmi possono essere costruiti utilizzando lo stesso framework.

Quindi? Non state ancora leggendo l'articolo del link? Ok, allora se non avete voglia di leggere tutto il paper magari date un occhio qui per un tutorial/demo. ;)

mercoledì, luglio 04, 2007

Documenti antichi

Dalla Sonipaf rispuntano importantissimi documenti di 9 anni fa!!! Date un occhio a quali effetti collaterali producono gli esami di analisi nei poveri studenti che inconsapevoli del pericolo li affrontano!

Analisi1 Analisi2
GIURO.. prima di analisi ero normale! ;)

mercoledì, giugno 27, 2007

Da sempre, vicini

Da sempre, vicini


Interminabile la nostr'attesa,
obbligata distanza duratura
ha fermentato ancor più di prima
il desiderio e la certezza
d'un intreccio a maglie strette,
un ricco ricamo variopinto
che sulla tela della nostra vita
prende forma mostrando l'armonia
di ciò ch'assieme siamo e saremo.

Ritrovo, abbraccio, le pennellate
d'un rosso vivo or ci dipingono
su uno sfondo rosa permanente;
coricati in un campo di grano
ammirando l'orizzonte aperto:
scorgiamo serena retta linera
ch'immersi c'accompagnerà entrambe
fra carezze d'oro e alto cielo.


Gabriele Lombardi

lunedì, giugno 25, 2007

Side effects in Matlab

Come tutti i "matlabbisti" sanno, in Matlab l'assegnamento ed il passaggio dei parametri è virtualmente per copia, ovvero virtualmente ogni volta che si assegna una variabile ad un'altra o che si passa una variabile a una funzione questa viene copiata per intero in maniera tale da non avere side effects. In pratica ovviamente non viene sempre fatta la copia: viene utilizzata una politica di lazy-evaluation sulle copie in maniera da utilizzare la variabile originale fin tanto che non vengono fatte modifiche e di copiarla in una nuova variabile solamente a fronte di una richiesta di modifica della stessa (questo solamente per una questione di efficienza).

Ma è possibile ottenere in Matlab i side effects?

Ovviamente è possibile ottenerli utilizzando Java o creando MEX-files in C o in FORTRAN. E' però possibile ottenere i side effects anche in Matlab puro sfruttando i workspaces temporanei creati durante le chiamate a funzione. Nel post Programmare OOP in Matlab è stato spiegato come costruire una classe in Matlab utilizzando solamente le funzioni. Ora, si ipotizzi di istanziare la classe counter, descritta in quel precedente post, e crearne una copia come segue:
c1 = counter(1); % Istanziazione:
c2 = c1; % Copia:
Ora l'oggetto c1 e l'oggetto c2 sono esattamente lo stesso oggetto. Le modifiche su uno hanno side effects sull'altro, infatti:
c1.next()
ans = 1
c2.next()
ans = 2
c1.next()
ans = 3
c2.next()
ans = 4
Inoltre realizzando una funzione come la seguente:
function incrementa(c)
c.next();
E richiamandola come segue:
c =counter(1);
incrementa(c);
incrementa(c);
c.next()
ans = 3
E' possibile appurare che l'oggetto passato alla funzione può essere modificato dall'interno della stessa generando side-effects.

SPIEGAZIONE: Le classi realizzate come spiegato nel post precedente sfruttano la creazione di un workspace locale (WL) per ogni chiamata a funzione Matlab, quando una funzione Matlab viene richiamata un workspace temporaneo viene creato ex-novo in cui "vivono" le variabili locali della funzione, alla terminazione dell'esecuzione tale WL viene lasciato in pasto al garbage collector che normalmente lo rimuove, nel caso però in cui vengano restituiti i puntatori a funzioni innestate, che possono quindi accedervi, il WL non viene rimosso perchè esistono ancora delle variabili che vi possono accedere. Il WL viene eliminato quando anche l'oggetto istanziato diviene irraggiungibile. A differenza delle normali variabili però il WL è legato all'istanza dell'oggetto in maniera indiretta, non fa parte della variabile, questo significa che copiare la variabile non copia il WL. L'oggetto rappresenta in maniera indiretta un puntatore al WL, passare quindi questo "puntatore" a una funzione o copiarlo non provoca la replica del WL che rimane lo stesso e soffre quindi dei side-effects.

Questo comportamento non deve essere visto come un "baco" ma come una "feature": infatti è un modo efficace per ottenere i side-effects quando e se servono.

mercoledì, giugno 13, 2007

Ovunque

Ovunque


Stupendi luoghi, che ci circondano,
sanno attarr'attenzione per poco:
sbalordit'osserviamo, sentiamo
l'arte con ogne brandello d'anima.

Fra imponenti volte, capitelli,
dipinti e sculture, chiese, ponti,
vasti sentieri lungo freschi boschi,
scintillanti laghi, montagn'e mari;

in tutto questo, aprendo i sensi,
non possiamo che scorger noi stessi:
opera d'arte certo non umana,
che più ci scalda, tanto da sciogliere.

Distanti; ovunqu'io poss'andare,
ricordo fatti, medito sorprese,
vedo 'l tuo viso, cerco tuoi occhi:
ovunque, dentro me, ci sei sempre tu.


Gabriele Lombardi

Fluttuazioni

Fluttuazioni


L'onda,
piatta ma grintosa,
in vista delle rive,
si gonfiava maestosa
e troppo sicura di sé.

La spuma sorrideva,
correva veloce nel vento;
senza accorgersene
finalmente raggiungeva
l'agognata bianca meta.

Improvviso il crollo,
spariva l'acqua sotto i piedi:
parte di se veniva a mancare,
ciò che la componeva, mischiata,
l'abbandonava tradendo sicurezza.

Riflusso silenzioso
trasportava nuovamente,
nell'oceano tumultuoso,
disgregate parti
per restituire vigore pieno.

Altra meta, quella giusta,
sà meglio accogliere:
onda splendente, gioiosa;
scorgendoci, d'istinto,
ci siam corsi incontro.

Fluido, armonioso scontro
d'imponenti masse,
ch'impazienti son mischiate
in ogni minima goccia:
profondo abbraccio.


Gabriele Lombardi

martedì, giugno 12, 2007

C++: se lo conosci non ti uccide...

...e io stavo per rimanerci secco!!! ;)

Posto questo post (scusate la cacofonia) per gli "ignoranti" come me che ignorano.. o semplicemente dopo anni non si ricordano più.. della seguente "finezza" del C++.. che tanto fine non è in realtà: in C++ alla creazione di un oggetto i costruttori vengono richiamati dalle classi base alle classi derivate in catena secondo l'ordine con cui sono dichiarati nella sintassi del costruttore dopo l'operatore ':'. I distruttori invece vengono richiamati automaticamente in ordine inverso (notare, in ordine inverso anche rispetto a strani ordinamenti nel grafo aciclico ottenibile tramite l'ereditarietà multipla).
A parte il discorso del chaining, che ai più è noto, la finezza sta nelle operazioni che possono essere svolte all'interno dei costruttori e dei distruttori: chi di voi per caso volesse utilizzare il noto pattern "Abstract method" se lo scordi pure perchè all'interno di costruttori e distruttori non è possibile richiamare metodi virtuali puri relativi alla classe stessa, nemmeno se si ha a che fare con l'istanza di una classe derivata che li implementa concretamente. In sostanza niente "Abstract method" all'interno di costruttori e distruttori.. vi lascio un pezzettino piccolo piccolo di codice con cui giocare.


// The abstract superclass:
class A {
public:
// The constructor:
A() {
// Try to call but cannot dispatch:
virtualMethod();
}
// The virtual pure method:
virtual void virtualMethod()=0;
};

// My subclass
class B : public A {
public:
// The implementation:
virtual void virtualMethod() {};
};

// Using them:
int main(int argc, char *argv[]) {
// Instantiating:
B b;
b.virtualMethod();
return 0;
}

giovedì, maggio 31, 2007

C++: problemi con il polimorfismo

Questo post sarebbe da mettere come domanda in un newsgroup di programmazione in C++.
Non so se a qualcuno di voi è mai capitato, però a me è la seconda volta che succede di definire un metodo virtuale puro in una superclasse, convinto di poterlo implementare nella sottoclasse (simpatico e banale, anche se potente, design pattern "Abstract method").. e di vedere un bel messaggio di errore del linker che non trova l'implementazoine del metodo se si tenta di chiamarlo!

VOLETE IL CODICE? OK!

Allora di una cosa sono sicuro: con l'operatore di assegnamento ottengo il seguente risultato:

------------------------------------------------------------------------------------

#include
using namespace std;

// The abstract superclass:
class A {
public:
// The virtual pure methods:
virtual A& operator +=(A& a)=0;
virtual A& operator =(A& a)=0;
};

// My subclass
class B : public A {
public:
// The implementations:
virtual A& operator +=(A& a) {
cout << "Called the '+=' operator!" << endl;
return *this;
}
virtual A& operator =(A& a) {
cout << "Called the '=' operator!" << endl;
return *this;
}
};

// Using them:
int main(int argc, char *argv[]) {
// Instantiating:
B b1,b2;
b1 += b2; // This works:
b1 = b2; // This give a compile time error:
return 0;
}

------------------------------------------------------------------------------------

il che potrebbe essere QUASI accettabile.. se non fosse che non c'è modo di richiedere forzatamente l'implementazione nelle sottoclassi dell'operatore di assegnamento. Provate a sostituire i parametri dal tipo A& al tipo B&.. e vedete come s'incazza il compilatore!!!
Il codice che l'altra volta mi aveva dato lo stesso errore era su un metodo normalissimo.. fra l'altro con un altro compilatore (nemmeno da dire cambi compilatore perchè è un baco.. il baco è NEL MIO CERVELLO!).

Ok.. se trovate un modo per richiedere forzatamente (stile signature nell'interfaccia) l'implementazione dell'assegnamento nelle sottoclassi.. ditemelo perché la soluzione banale NON FUNZIONA :(

giovedì, maggio 24, 2007

C++.. RISOLTOOOOOO

Risolto il problema.. conclusioni e suggerimenti:
IN C++ NON MISCHIARE MAI IL SACRO (standard C libraries) E IL PROFANO (stl libraries) SENZA UNA OTTIMA CONSAPEVOLEZZA DEI PERICOLI CHE STAI AFFRONTANDO!!!

In sostanza se si gioca troppo con i namespaces una sola include di un header file C standard piazzata nel posto sbagliato può dichiarare nel namespace sbagliato (cioè non quello esterno) un casino di simpatiche cosucce che dovrebbero restare in ::!!!

Ok ok.. per molti di voi questa è una banalità.. a me però non era mai successo di sclerare così per una include.. e quindi valeva la pena di scrivere un po' di cazzate sul mio blog ;)

Aforisma su C++ e Ken Shiro

Programmare in C++ è come esegure il colpo della distruzione dell'univareso usato da Ken Shiro contro il Sacro Imperatore Souther: UN SOLO ERRORE D'ESECUZIONE PUO' PORTARE ALLA DISTRUZIONE DELL'INTERO UNIVERSO!!! :)

C++.. debugging?

Allora, voglio lasciare su questo blog una bella digressione sul C++: avete mai provato a realizzare in C++ una bella libreria tutta tempestata di template, in cui utilizzate pesantemente STL (stdc++), tipi (typedef), namespace, cicici e tututu?

PROVATE!!!

Allora.. cerca che ti cerco.. e mentre sviluppo in C++ (mannaggia a me) un pezzo piuttosto grosso e importante del mio lavoro di dottorato.. come libreria ultra astratta ultra pluggabile ultra sciacquate-gli-uocchie.. tiro su il mio bel ambientino di testing con il connubio CppUnit e Automake/Autoconf/AutoTuttoQuelloCheVuoiFaccioIoNonTiDeviPreoccupareDiNullaTantoIlTuoLavoroNonFunzionaràMai..
..et voilà.. dopo ore di debugging di un test set VUOTO (tutto astratto, template dappertutto.. si inizia con il debugging della sintassi/semantica senza codice reale!).. mi salta fuori il solito errore da C++.. che uno non capisce:

/usr/local/lib/gcc/i686-pc-linux-gnu/4.0.4/../../../../include/c++/4.0.4/cstddef:52: error: '::ptrdiff_t' has not been declared
[altre 1945 righe simili]

Ok, allora.. ci ho messo 3 ore per capire FORSE come risolvere il problema.. fra altre 50 ORE vi faccio sapere se la soluzione adottata riguarda l'utilizzo di un macete a doppio taglio oppure no!

P.S.: I newsgroup mi sono serviti moltissimo in questo caso.. infatti hanno occupato inutilmente 2 di queste 3 ore.. anche ricompilare gcc con una versione più nuova mi ha aiutato.. a inchiodare una macchina per altre 2 di quelle 3 ore.. fortuna che in lab di macchine ce ne sono e si può parallelizzare il tempo!!! Parallelizzare lo spazio no he? Sarebbe utile essere qui e contemporaneamente alle maldive.. ne ho proprio bisogno!!!

martedì, maggio 22, 2007

Aspetti ortogonali

Come tutti ben sanno, il paradigma di programmazione per aspetti (AOP) è stato inventato appositamente per superare (o tentare di superare) le problematiche di ortogonalità fra differenti aspetti all'interno di un progetto software.

Al di là della poca diffusione e della poca risonanza che ha avuto questo paradigma (se volete un flame sul perché AOP non ha preso piede.. fate pure.. partecipo volentieri ;)), sicuramente un commento è dovuto: il problema dell'ortogonalità è diffuso in ogni dove, e tende a devastare rapidamente il risultato di moltissimi sforzi fatti da programmatori, da progettisti esperti di SE, da DBA, da CTO.. cicici e tututu! Insomma gli aspetti ortogonali rompono e parecchio!

Esempi? Allora: considerate il problema di etichettatura di dati al fine della classificazione, ad esempio chi di noi non ha incontrato l'annoso problema di memorizzare all'interno di una struttura di cartelle sensata la CATERVA di articoli scientifici raccolta in anni di lavoro? Chi di noi non si è accorto che UN ALBERO NON VA BENE? Ovvio, un albero no va bene perché esistono aspetti ortogonali che possono essere descritti solamente tramite un grafo diretto aciclico connesso (DAG). Sigle a parte la struttura dati che in questo caso avrebbe più senso è un MULTIALBERO.. se mi concedete la licenza poetica per coniare questo vocabolo. Si perchè mentre un grafo non distingue l'appartenenza degli archi a una sottostruttura, in questo caso ESISTE!

Ok ok.. sembra che io stia DIVAGANDO un po' troppo deragliando dal fulcro della questione.. ma quello che penso è che queste strutture a multialbero dovrebbero essere adottate in:
- documenti XML, dove spesso vengono solo simulate con riferimenti ovunque;
- linguaggi di programmazione, dove l'ereditarietà consente di ottenere alberi, o al più DAG;
- database, dove spesso si tenta inconsapevolmente di emularli con tabelle e query fra di esse.. ma in molti casi si tende a confondere le query con le tabelle.. soprattutto i discepoli di Access ;), in realtà il problema è che siccome i dati da qualche parte devono finire realmente, li si infila nelle tabelle e gli aspetti ortogonali li si mostra con le query.. quindi aggiungendo l'elaborazione di una query per non costruire una struttura dati adeguata (un multialbero).

L'elenco potrebbe allungarsi.. ma prima vorrei sapere.. siete d'accordo? Volete anche voi un multitagged-XML? ;)

lunedì, maggio 21, 2007

Ritratto

Ritratto


Arduo m’è ‘l tracciar
bei lineamenti,
tuo viso imitar
sui fogl’impazienti.

Di certo non eccello
in pittur’e disegno,
ma volto tanto bello
sfid’artista nel segno.

Son note sfumature,
m’è impresso profondo
ogne particolare:
il sorriso giocondo.

La traccia di graffite,
al pari d’un insulto,
di guance vellutate
soave luc’ha tolto.

Seppure possa esser
sentito realmente,
artista non può nascer
ch’angelo abilmente

renda a paragone
di tua real’essenza.
Di tratt’imitazione
a bellezz’è violenza.

T’osservo, e sereno me ne cibo.


Lombardi Gabriele

mercoledì, maggio 16, 2007

La collina del pensatore

La collina del pensatore


Giunto qui mi sdraio su calda roccia,
occhi chiusi, ascolto altri sensi:
sole calante m'accarezza piano,
fruscio di foglie, vento sovrano,
cinguettio, odor di camp'immensi,
cielo infinito, di calma doccia.

Attendo il variopinto tramonto,
cibandomi famelico di verde,
color di ricercata mia vita:
ogn'essere, di mente non sopita,
ha un luogo caro a lui concorde,
ov'esternar di pensieri tormento.

Qui son consumati duri momenti
d'un vivere oltre piatto essere,
qui s'affrontan i sottili problemi
non pratici c'affliggon coi ricami:
d'un organo che non può comprendere
son doni costruttiv'e disfacenti.

Molteplici pene affliggon forte,
delicato, fragile, istintivo
pensatore; romantico artista,
crede all'amore a prima vista,
con te d'indugiare non v'è motivo;
lontano come 'l figlio di Laerte.

Ciò ch'or profondamente pens'e temo
è 'l tuo penar errando per esteri
stupendi luoghi, perdendon'essenza.
In cuor mio tristemente avanza
colpevole sensazione di nostri
sentimenti vivi per cui or fremo.

In te so d'aver trovato splendido
tesoro un dì sepolto profondo,
ma lucente ai miei occhi
si mostra sincero senza balocchi.
Per anni, te e me amor forgiando,
vivremo: godi d'un viaggio candido.


Lombardi Gabriele