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

giovedì, maggio 10, 2007

Calendula

La Calendula officinalis è una pianta da fiore ornamentale e medicamentosa dalle mille proprietà benefiche.. oltre che artistiche. Ho aggiunto un pochino di dettagli sulle sue proprietà e sui metodi di coltivazione all'indirizzo:

http://it.wikipedia.org/wiki/Calendula_officinalis

chi è interessato e ci da un occhio.. se mi manda qualche commento/consiglio/critica.. sarà ben accettatissimo!!! :)

Appena le piantine mi crescono un po' farò mille foto e le aggiungerò.. per ora ho quelle dei semi e dei germogli.. appena le porto in uni le inserisco in wikipedia :D

lunedì, maggio 07, 2007

Lontana, qui con me

Lontana, qui con me


Spossato da stanca inattività,
pesante, mi corico affondando:
visione di tua voce, ascoltando
di tuo viso lineamenti, che già
a fuoco son tatuati dentro me.

Par breve, ma faticosa l'attesa
d'anime fresche lontan'intrecciate;
possono, tempo e distanza subite,
districar nodi ch'uniscon rosa?
Può condizion'allontanarmi da te?

Attendersi, non vedersi, pensare,
sentirsi poco, cercarsi, volersi:
amar'ingredienti d'una catarsi
che stringe laccio soffice d'amore.
Nulla par impossibile per noi.

Musica, sussurrata nella notte
da autori lontani, ma vicini;
ogni canzone di versi violini,
inspiegabilmente riport'a vette
di vita, momenti con te vissuti.

Distanti, continent'e oceano
separano corpi di carn'e ossa;
son sicuro ch'anime nulla possa
sbrogliare ché mischiate or vivono:
viva in me, vivo in te, noi siamo.


Gabriele Lombardi

giovedì, maggio 03, 2007

Viaggiando

Viaggiando

Corsa,
verso tranquilli istanti
vissuti di fretta,
ma serenamente,
incontrando decine di persone,
e profonde solitudini
in sintonia con la natura,
con me stesso,
con la vita
degna di questo nome.

In treno,
nei boschi,
sulla montagna,
tra piante e rocce,
di fronte a imponenti cascate,
sotto cieli stellati,
tramonti incantati,
ovunque,
nella magia del momento,
mancava un ingrediente
ormai fondamentale:
il tuo calore,
il tuo sguardo
posato su di me,
le tue carezze,
il tuo sorriso..
tu!

Tu,
parte di me,
non sei qui,
ma ti sento sempre vicina,
dentro i miei pensieri,
nei miei sogni,
nel mio cuore:
son sereno
perchè posso aspettarti;
sono felice
perchè ti amo.

Gabriele Lombardi