The official Fatica Labs Blog! RSS 2.0
# Monday, August 30, 2010

Fabio Maulo ha fatto uscire Conform 1.0 In Alfa 2. Come tutti sanno ConfORM è una strategia di scrittura mapping per NHibernate alternativa ai file HBM. Alternativa nel senso che bypassa lo strato hbm dall’ interno ( cosa che non fa per esempio Fluent NHIbernate, e tanto meno LLBGen che usa la stessa solfa ) e questo consente, su prohetti complessi di ridurre i tempi di startup dell’applicazione ( in pratica se ne va lo strato lento che valida sintatticamente i mapping hbm ).

Ciò detto, Fabio asserisce di avere ConfORM in produzione, per quel che lo conosco ciò singnifica che questa più che un alfa è una prima release con cui iniziare a provare seriamente l’utilizzo di ConfORM.

Monday, August 30, 2010 10:31:59 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback


# Saturday, August 28, 2010
Vai alla parte 2: Creare un progetto

Mi è ventuta l’idea di produrre una serie di post che consentano a chi vuole iniziare a lavorare con NHibernate, o almeno a provare per vedere se questo OR/M è la scelta giusta, di creare in modo ordinato un ambiente di test pulito, sapendo bene cosa serve, evitando il percorso “pasticciato” che spesso si fa all’inizio.

Bene, come partenza bisogna scaricare NHibernate. Il posto giusto dove farlo è il progetto su sourceforge, e il modo giusto di farlo è procurare i file binary necessari. Scaricare i sorgenti per il momento può essere tranquillamente tralasciato. Puntando al link di download, vi trovate qualcosa del genere:

s1

Come vedete ci sono più versioni, ed anche una ultima release, che in questo caso è la 3.0.0 Alpha2. Io ho cerchiato la versione 2.1.2 GA che è quella che useremo per questa serie di articoli, ma ho anche cerchiato GA: “general availability”. Dunque, perchè non ho scaricato l’ultima versione ? Cosa significa GA ? NHibernate ha una politica di rilascio ben consolidata, e marca con GA le versioni “da produzione”. Quindi, se non siete a conoscenza di qualche funzionalità particolare che c’è solo nella alpha di turno, se non siete dell’idea di vedervi cambiate sotto il naso funzioni e comportamenti, scaricate le versioni GA più recenti che trovate. Non esistono al momento “Setup” di NHibernate, mi risulta che ci fosse qualcosa in passato, comunque anche se trovaste qualcosa, vi suggerisco di evitarlo: NH consente di fare un private deploy, e avere traccia di quello che serve ci sarà utile in fase di consegna dell’applicativo sulle macchine di produzione. Scarichiamo quindi il file NHIbernate-2.1.2.GA-bin.zip. Scaricato il file il layout del contenuto è quello schematizzato qui sotto:

s2

Nella root, oltre ad un po’ di paccottiglia varia, troviamo due folder importanti che sono quelli che ci servono per mettere NHibernate all’opera: Required_Bins, and Required_For_LazyLoading.Tutte le dll contenute nel file required bin devono essere rilasciate insieme all’applicazione ( oltre a servire ovviamente  in fase di sviluppo :) ), mentre dalla cartella Required_For_LazyLoading si può scegliere quale folder distribuire in base a quale proxy generator si sceglie. Questo è un tema che si vedrà più avanti, per adesso basta sapere che NHibernate può derivare internamente alcune delle nostre classi quando decidiamo di avere delle entità “Lazy”, e questo è ottenuto tramite delle librerie esterne di generazione di classi “proxy”. Quale proxy generator usare dipende dalla configurazione, e quindi dalla stessa configurazione dipende quale folder distribuire. Negli esempi useremo LinFu. Diciamo che questa scelta è di scarso impatto sulla vita del vostro progetto, salvo in situazioni particolari, per cui per il momento possiamo andare avanti.

Importantissimi in fase di sviluppo sono i file nhibernate-mapping.xsd e nhibernate-configuration.xsd. Questi due file vi consentono di avere l’intellisense abilitato per i file di mapping e per la configurazione, e quindi sono assolutamente indispensabili. Malgrado siano finiti nella cartella required_bin, sono invece praticamente inutili in fase di distribuzione. Per attivare l’intellisense occorre copiare i due file suddetti nella cartella apposita di visual studio:

s3

Attenzione: può succedere che imporvvisamente Visual Studio smetta di fornire l'intellisense: tipicamente questo accade perchè ci sono più versioni dello stesso schema XML associate. Date un occhiata a questo post che spiega come risolvere il problema.

Inoltre, per sviluppare e per seguire gli esempi in questo tutorial occorrerà NUnit. Se ce lo avete già usate quello, altrimenti recuperate l’ultima versione dal sito ufficiale. Io di solito scarico il binario, non il setup, e lo scompatto sotto il folder programmi. Anche NUnit funziona con il semplice deploy Xcopy.

Ultima cosa prima di partire, lavorando con NHibernate ci sono alcune attività ripetitive che sarebbe bello evitare: consiglio di scaricare anche il tool hbm2net che ci consentirà di generare automaticamente le classi per nel corso del tutorial. Il tool si trova nel progetto NHContrib. Scaricate e scompattate lo zip in un folder, per esempio in C:\hbm2net. Il tool è un compilatore linea di comando, e sarà lanciato automaticamente da Visual Studio, ma perchè ciò avvenga occorre aggiungere la cartella in cui avete messo hbm2net nella variabile di ambiente PATH. per fare questo raggiungete le “proprietà del Sistema”:

s5

e poi aggiungere il path suddetto alla variabile PATH:

s6

 

Nella Parte2 vediamo come organizzare un progetto con NH.

Saturday, August 28, 2010 12:57:29 PM (GMT Daylight Time, UTC+01:00)  #    Comments [7] - Trackback
NHibernate | NHibernate Tutorial

# Saturday, August 14, 2010

Fine delle vacanze, e fine del “giochino” passatempo fatto con Microsoft XNA Game Studio. In pratica ho aggiunto la possibilità di avere un modo match o un modo “training”, e finalmete c’è un sistema di punteggi ed una certa “Game logic” in termini di palle da giocare, punti moltiplicati per sponda, penalità se si tocca il computer o la sedia, etc. Il gioco è giocabile.

point

Saturday, August 14, 2010 8:47:49 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
Games | XNA

# Wednesday, August 11, 2010

For maintenance reasons sometime the original NHForge location is not available. In such a case you can download the file containing the binary release of the tools in the original NHContrib project download location:

nhcontribdownload

Wednesday, August 11, 2010 9:10:41 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
db2hbm | hbm2net | NHibernate

# Saturday, July 31, 2010

 José Romaniello is doing progress in hql intellisense for Visual Studio 2010. He manage to integrate some NHWorkbench codebase into it, to have some intellisense working. Even if the project is still in alpha, I suggest you to download and install to give it a try.

Here below a screenshot of the tool at work:

 

image

Nice, isn’t it ?

As an addition I was added to the project by Josè, and I would be happy to add some contribution to this important project for the NHibernate ecosystem.

Saturday, July 31, 2010 3:27:17 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
HQL language Service | NHibernate

# Thursday, July 29, 2010

La cosa bella di saper programmare è che la vastità di cose che si possono fare non ha praticamente limiti. Uno dei task più divertenti è sicuramente la scrittura di un videogioco: si spazia dalla conoscenza pura di un linguaggio, alla matematica 3d, all’arte e, ovviamente l’idea. La parte matematica, per chi si interessa dell’argomento, è ben definita, basta leggere uno o più classici, tra i quali segnalerei, per averne usato ed abusato OpenGL SuperBible, Mathematics for 3D Game Programming & Computer Graphics, ed altri che per legami con qualche particolare framework sono oggi anacronistici. Dal punto di vista artistico, un gioco ha texture, modelli suoni, musiche… tutte risorse facilmente reperibili, anche in Open Source, anche gratuitamente – se non si vuole fare un gioco da vendere – in rete. Il problema di quasi tutti i framework era che nessuno forniva metodi per caricare diversi tipi di “asset”. Fortunatamente questo gap è stato colmato da XNA Game Studio. Basato su DirectX – Direct3d è facile ed intuitivo da usare per chiunque abbia visto un po’ di grafica 3d, ma offre veramente dei grandi vantaggi in termini di import di risorse  (texture, suoni, modelli 3d in svariati formati, etc ). In pratica basta “compilare” l’asset e poi chiamare Load<tipodellasset>(“Nome”) ed il gioco è fatto.

Ciò detto, per fare un gioco ( che per il programmatore è più divertente che giocarlo ), serve un idea: o si fa il solito clone, o si trae ispirazione da qualcosa… nel mio caso, negli uffici di una delle ditte in cui ho lavorato, c’erano delle putrelle a vista: a qualcuno venne l’idea di lanciare una pallina da tennis e di bloccarla con bello stile nello spazio che la putrella crea con la sua doppia “T”. Al dil à dell’idiozia della cosa, e di quanto ancor più idiota sia pensare di creare un videogame con quell’argomento, ecco nascere “Putrella ! ( The Game)”. La stanza è un po’ claustrofobica, il monitor è anch’esso allietato dallo stesso videogame, quasi a citare una più famosa scena che compariva su un disco del 1969… 

Difficile da spiegare… ma vediamo qualche screenshot:

s1

Un bel freccione verde fosforescente per scegliere dove tirare la pallina. Per inciso la pallina è una mesh sferica disegnata con Milkshape, e la texture invece è gentilmente offerta da google maps. La strana scriita in greco sulla pallina invece…

Ovviamente si può modificare la posizione di lancio e anche lo “Ziembolo” che è un piemontesismo per dire “Spin”

 

 

 

 

s2

Beh, con lo spazio si decide la forza, e in altro a destra compare un decanewtonmetro un po’ old fashion: si tratta in realtà di una immagine di un milliamperometro corretta, la lancetta invece è una texture di una linea che viene fatta ruotare per simulare uno strumento analogico. Con due stupidaggini l’effetto è alquanto realistico.

 

 

 

 

s2a

Non sempre si fa putrella, anzi per la verità non lo si fa quasi mai: di solito la pallina cade, fa qualche rimbalzo e la storia finisce li… Già, ma come rimbalza una pallina ? Per questo ci viene in aiuto quello che si chiama engine fisico, ovvero uno strumento software che ci permette di simulare un mondo di corpi rigidi, data una descrizione del suo stato iniziale e delle forze applicate ai vari elementi. Io ho scelto OOPS. In realtà è ancora un progetto giovane, ha qualche problemino, ma è fully managed, facilissimo da usare, e per quello che dovevo fare bastava. Come è modellato il mondo ? Niente di speciale, la pallina è, nella “lingua” di OOPS una CollisionSphere, I muri sono dei CollisionPlane, e tutto il resto, putrella compresa, delle CollisionMesh. Ah, dimenticavo, la putrella l’ho disegnata con MilkShape, mentre le altre paccottiglie ( sedia, scrivania, computer ) sono modelli free presi in rete.

 

s4

 

E’ difficile fare putrella, un po’ più facile è fare il cesto ( bin ). Anche questo è fatto con MilkShape. Visto che Milkshape non supporta la CSG ( Constructive Solid Geometry, ammazza che parolone ) bisogna ingegnarsi , facciamo due tronchi di cono, li infiliamo uno dentro l’altro, e a quello + interno cambiamo l’ordine dei vertici, semplice e banale, nonchè funzionante.

 

 

 

s3

Ancorchè difficile, prima o poi ci si riesce. Ma chi cambia l’inquadratura ? Molto semplicemente, quando la pallina rallenta, la Camera ( anche qui un concetto 3D, la camera è l’unione della ViewMatrix e della ProjectionMatrix ) da fissa si trasforma in una chasing camera. Per evitare movimenti troppo bruschi, I vettori sono interpolati in modo da avere una prospettiva che gradualmente si avvicina alla palla.

 

 

 

 

Bene in pratica cosa ho dovuto scrivere per fare questo gioco ? Molto, molto poco. Sempre di più nella programmazione bisogna saper scegliere e fare leva sulle cose buone già costruite, ed aggiungere un piccolo contributo di qualità, che altri possano usare. In questo caso la cosa che ho aggiunto penso possa essere questa.

Thursday, July 29, 2010 10:24:17 PM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
Games | XNA

My Stack Overflow
Contacts

Send mail to the author(s) E-mail

Tags
profile for Felice Pollano at Stack Overflow, Q&A for professional and enthusiast programmers
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2012
Felice Pollano
Sign In
Statistics
Total Posts: 143
This Year: 3
This Month: 0
This Week: 0
Comments: 105
This blog visits
All Content © 2012, Felice Pollano
DasBlog theme 'Business' created by Christoph De Baene (delarou) and modified by Felice Pollano