Etichette

sabato 10 marzo 2012

Ancora info su Nhibernate

Sempre per la serie :
COLCAZZOCHEFUNZIONA 
mi trovo a scrivere un altro bel Post.
 Lavorando in ambienti  eterogenei e integrando procedure già in essere si trovano sempre mille eccezioni da gestire! Nel mio caso dopo aver scapocciato (Famoso termine informatico!!)  con entity frame  della Microsoft e dopo aver scelto  immediatamente Nhibernate, mi sono trovato di fronte ad altri mille piccoli problemi!!! (La povera esistenza dell'informatico)

Premessa:
ho voluto mappare un db esistente su sqlserver su Nhibernate, tale db ha svariate stored procedure e trigger, per esempio all'insert su una tabella scatta un trigger che fa insert su altre N tabelle...
Bella trovata no?
 Ma che succede?  che quando faccio insert su una tabella parte il count row di SQL che segna N insert e non 1 singolo insert, questo provoca una "famosa" eccezione su NHIBERBATE (Ovviamente per me famosa, visto che ripeto mi ha fatto scapocciare).

NHibernate.AdoNet.TooManyRowsAffectedException 

Cerchiamo di rimanere calmi e vediamo come  ragiona Nhibernate e perché da eccezione:
Nhibernate, segue questo processo: se io sto inserendo  una nuova riga in una tabella e sto inserendo in questa tabella una chiave primaria, si aspetta che ci sia solo una riga inserita,  perché la chiave primaria di solito è univoca e per cui non potrebbe essere altrimenti, se ci fossero piu righe con la stessa chiave primaria, ci sarebbe un bel errore, o di progettazione o del motore sql.

Nel mio caso, però c'è un trigger che fa insert su altre tabelle, per cui non c'è nessuna tipologia di malfunzionamento, anzi è stato progettato per funzionare cosi!!!! (in un altra sede insulteremo i progettisiti!)

Ovviamente chi mi legge è curioso, oppure potrebbe avere avuto  il mio stesso problema ed voler sapere conoscere come ho risolto il mio problema.

Io propongo tre vie:

  1. The attach this  practice
  2. The dirty practice
  3. The good pratice






La prima è  semplice, efficace, e consiste nell'attaccarsi a .... e cambiare progetto o cambiare lavoro!



[

La seconda è la pratica brutale, nel senso che grazie al costrutto, (che tutti conosciamo) try  catch
L'immagine associata alla soluzione è stata censurata
(costrutto applicabile all'intera nostra esistenza) possiamo esattamente catturare questa eccezione e far finta che non sia successo niente, con un unica attenzione: -> Nhibernate è transazionale, per cui se volgiamo che tutto funzioni, dobbiamo forzare il flush dei nostri oggetti, e ancora meglio dopo il flush chiudiamo la sessione con NHibernate, perche altrimenti avendo memorizzato quell'eccezione su quella sessione non vi farà più fare niente, se non delle semplici select.



Terza via  è quella di riscrivere i trigger, poichè ogni trigger puo essere riscritto in modo che dopo essere partito non alteri il row count di MS SQL server.
Come ? ecco il comando:

SET NOCOUNT { ON | OFF } 
ovviamente nel nostro caso è da mettere a OFF!


Vorrete sapere quale scelta è stata fatta per il mio progetto? 
Ovviamente deve rimanere una curiosità!


domenica 5 febbraio 2012

Entity Framework Vs NHibernate

Finalmente ritorno a scrivere qualcosa di informatica!!
Faccio una premessa d'obbligo,  io non voglio essere sempre contro i prodotti di microsoft, come un principio, io ce la metto tutta per essere a favore di prodotti fatti bene, è colpa di microsoft che non riesce proprio a fare alcune cose, a favore di questo vi dico che da tempo utilizzo la piattaforma .Net e ho sempre un buona opinione di C#, di alcune funzionalità all'interno di visual studio 2008 e 2010, certo potrei un innervosirmi se vado a vedere il costo di questi tool!!

Queste pillole informatiche non vogliono essere un manuale, ne la bibbia, ne il corano (sempre per parcondicio) ma vogliono aiutare tutti coloro che come me si trovano a progettare e implementare sistemi informativi software e quanto altro, insomma per evitare quella famosissima frase:
"COL CAZZO CHE FUNZIONA!!!!"
Questa volta mi ci ero messo proprio di impegno, volevo usare entity framework!
Ne avevo letto, pensavo di averlo capito, sembrava tutto facile, spingi un pulsante qua, scegli un DB poi una tabella e UALA, il gioco è fatto. Ho iniziato il progetto, ci ho lavorato e che scopro, che come al solito è una scatola chiusa ermeticamente, e se ci vuoi mettere le mani dentro non c'è modo. La grossa difficoltà è stata quella di voler implementerare delle entità sopra a delle viste, queste viste avevano tutti i campi Not Null, e questo produceva un entity in cui tutte le colonne erano chiavi!!!

Ho cercato per giorni, e giorni una soluzione software a questo problema, ma non ho trovato soluzioni valide ovviamente per il mio progetto.

E cosi ho dovuto dirottare il lavoro fatto su un altro ORM per .NET: NHIBERNATE

Fortunatamente lo avevo utilizzato già un un altro progetto, e ad ho potuto apprezzarlo ancora meglio.
La cosa più bella che trovo in Nhibernate e di conseguenza in Hibernate, è la possibilità di adattarsi a qualsiasi situazione, e questo con la massima trasparenza. Con dei "semplici" xml di mapping, Nhibernate riesce a mappare i nostri oggetti come vogliamo, non dobbiamo perseguire delle regole di programmazione restrittive sui nostri oggetti, non dobbiamo ereditare o rifarci a classi astratte per definire le nostre entity, e le nostre entità possono essere caratterizzate da funzioni e attributi a nostro piacimento. Questo ci permette di disegnare una bussiness logic come meglio è necessario per il nostro progetto.

Per cui:

  • Programmazione a Oggetti senza limitazioni
  • .Net nativo di codice
  • Infinità di tipologie di mapping XML
  • Non c'è da compilare niente altro che il nostro progetto
  • Diverse tipologie per interagire  tra i nostri oggetti i lo strato SQL
  • LGPL
Insomma un gran bel progetto, consiglio a tutti di provarlo.




giovedì 12 gennaio 2012

memories

Dalla serie da  "un vecchio diario"...


15-09-97
"Sono un anima quasi libera, che vaga nel mondo in cerca di risposte irraggiungibili, in cerca di una vita da distruggere, in cerca di una via di uscita che mi porti di nuovo a sognare...
PS: Scusa di aver occupato queste nobili righe ma ne avevo uno stupido bisogno! tvb

I più stupidi bisogni sono sempre i più necessari per i quali non bisogna mai chiedere scusa!!!"


Come vivere la vita

Proprio questa notte mi domandavo come vivere la vita, lo so non sono domande da farsi!!
Ma che vuoi fare, certe volte capita, e oltre tutto: scagli la prima pietra a chi non è venuto mai mente una domanda del genere.
Prima di tutto non penserete  di trovare qui  una risposta, mi sembra  alquanto arduo, e se pure vi è sfiorata l'idea, allora me ne sento lusingato, ma purtroppo non ne ho!

La Cosa piu difficile è trasformare le domande in risposte


E qui vi propongo alcuni pillole artistiche:

Letteratura
"Senza togliere la mano dalla manopola sinistra vedo dal mio orologio che sono le otto e mezza. Il vento, anche a cento all'ora, è caldo e umido. Chissà come sarà nel pomeriggio, se già alle otto e mezza c'è tanta afa."
Pirsig; da "Lo Zen e L'arte della manutenzione della motocicletta":

Se sapessimo che tempo fa nel pomeriggio, sapremo come comportarci di conseguenza e come vivere la vita...ma che tempo farà non ci è dato sapere.


"Mi ha detto che secondo lui la gente vive per anni e anni, ma in realtà è solo una piccola parte di quegli anni che vive davvero, e cioè negli anni in cui riesci a fare ciò per cui è nata. Allora, lì, è felice. Il resto del tempo è tempo che passa ad aspettare o a ricordare. Quando aspetti o ricordi, mi ha detto, non sei né triste né felice. Sembri triste, ma è solo che stai aspettando, o ricordando. Non è triste la gente che aspetta,T e nemmeno quella che ricorda. Semplicemente è lontana."t
Alessandro Baricco, da “Questa Storia”

aspettare è una condizione normale,  che fa parte della vita, ma il rischio è che si aspetti tutta la vita!!!??


Pittura
 Paul Gaugin scrive sulla sua opera:
« Dove andiamo? Accanto alla morte di una vecchia. Un uccello strano stupido conclude. Che siamo? Esistenza giornaliera. L'uomo d'istinto si chiede che significa tutto ciò. Da dove veniamo? Fonte. Bambino. La vita comune. L'uccello conclude il poema in comparazione dell'essere inferiore di fronte all'essere intelligente in questo grande tutto che è il problema annunciato dal titolo. Dietro a un albero due figure sinistre, avvolte in vesti di colore triste, pongono accanto all'albero della scienza la loro nota di dolore causata da questa scienza stessa in confronto con gli esseri semplici in una natura vergine che potrebbe essere un paradiso di concezione umana, abbandonatasi alla gioia di vivere »

Gustav Klimt Fregio per il Palazzo Stoclet - L'albero della vita
Ovviamen altri autori altre storie, se qualcuno volesse aggiugere altre opere puo commentare e scrivere cio che ha trovato, sarei lieto di integrarle. Ovviamente farò lo stesso anceh io!

venerdì 6 gennaio 2012

La Fotografia (Nadar)

Sfogliando le pagine del mio passato si trovano sempre belle cose:

"La fotografia è una scoperta meravigliosa, una scienza che evince le intelligenze più elette, un'arte che aguzza gli spiriti più sagaci e la cui applicazione è alla portata dell'ultimo degli imbecilli.... è la valutazione artistica degli effetti prodotti dalle luci diverse e combinate... quello che si impara ancor meno è l'intelligenza morale del tuo soggetto -  è quell'intuizione che ti mette in comunicazione con il tuo modello, te lo fa giudicare, ti guida verso le sue abitudini, le sue idee, il suo carattere, e ti permette di ottenere, non già banalmente e a caso una riproduzione plastica qualsiasi, alla portata dell'ultimo inserviente di laboratorio, bensì la somiglianza intima"

NADAR (1856)

mercoledì 4 gennaio 2012

IP MAN 2

In realtà non volevo scrivere una recensione di questo film, ma dopo averlo rivisto per la seconda volta, mi sono venute in mente alcune riflessioni da condividere.
Il film mi è piaciuto ma continua a paicermi di piu il primo.
Questo secondo film fa molto Rocky Balboa. Le sensazioni che suscita sono le stesse, e ovviamente le citazioni non mancano, specialmete  quelle modello Rocky IV in cui rocky combatte  contro il mitico "Ti Spiezzo in Due".

 Rocky era in difesa della cara america e del suo stile di vita, Ip Man qui difende la sua cultura cinese di fronte al sopravvento dell'impero inglese, che a quanto vedo ha lasciato un segno indelebile.

Il Fatto di ricalcare, nella seconda parte, fedelmente il plot Rockiano, mi ha lasciato perplesso e con una domanda: era proprio necessario?
Mentre nella prima parte ritrovo IP Man, l'insegnante, l'uomo, il maestro, che si scontra con la sua stessa cultura che si sta deteriorando con l'avvento degli occidentali, in cui il  dio denaro ha sporcato le antiche tradizioni,  gli antichi valori per i quali lui lotta e crede ancora.
Nella seconda si perde un po di smalto.
Anche se, effettivamente,   l'effetto funziona,  il sangue ribbolle,  e ti "fomenti" fino alla fine del combattimento, entrando in completa empatia!

Percui rimane sempre un film da vedere e gustare, che non puo mancare nell Cineteca!!

La scena piu belle: il Combattimento con Hung!
La scena piu fica per me: La ConGi Kuen sul Ring prima dell'incontro!
La scena che poteva evitare: Quella finale, dove  rispodne alle domande dell'intervistatore, se griva: "Adrianaaaaa!!" sarebbe stato uguale.
La scena piu comica: Quando Jin chiede i soldi alla moglie per pagare la cauzione anche dell'allievo!

Buona visione!