The official Fatica Labs Blog! RSS 2.0
# 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

# Monday, July 26, 2010

José F. Romaniello started an addin project to allow HQL editing with intellisense and sintax Highligting from inside Visual Studio 2010. I’m very interested in it, expecially to see how he solve ( or he will solve ) the problem of providing code completion facilities.

Monday, July 26, 2010 11:16:03 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback


# Tuesday, July 20, 2010

After a bug report, I solved an issue on db2hbm in command line parsing. The binary with the fixed issue are  located here.

no-bugs

here is the thread about the bug report.

Tuesday, July 20, 2010 9:14:37 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback


# Wednesday, July 14, 2010

Apprendo da questo post di Fabio Maulo una interessante feature di NHibernate 3 implementata nel nuovo subset di API: QueryOver. Il post di Fabio approfondisce il pattern Query Object, e quello che salta all’occhio è la pulizia con cui si riesca finalmemte a farte un paging “ad arte”. Per fare l’accesso paginato in generale occorre avere il count delle righe che il sistema vorrebbe tornarci, e questo constringeva in passato a fare delle implementazioni un po’ sporche in cui si era costretti a specificare la query di selezione e quella di count. QueryOver propone la funzione query.ToRowCountQuery(); – dove query è appunto una query di QueryOver, e la funzione ci restituisce la query di conteggio in modo pulito e trasparente. Assolutamente molto utile. Io non sono uno da trunk, ma una funzione del genere mi fa venire voglia di passare subito a NH3, ancor prima che venga rilasciata la GA.

Wednesday, July 14, 2010 8:50:20 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
NHibernate

# Monday, July 05, 2010

A volte si vuole ottenere l amedesima configurazione di logging per log con diverso nome, accomunati da una radice: xEs se usiamo NHibernate avremo NHibernate.Cfg.XmlHbmBinding,NHibernate.Cfg.Configuration, NHibernate.Cfg.SettingsFactory, NHibernate.Dialect.Dialect … e via discorrendo. E’ bello sapere che log4net supporta una gerarchia tra logger, e che questa è implicata dal nome: se voglio, per esempio, per tutti i logger di NH loggare solo i messaggi di fatal error posso scrivere:

<logger name="NHibernate" >
    <level value="FATAL" />
  </logger>

 

Ed tutti i logger NHibernate.* cadranno in questo caso. Ovviamente lo stesso lo posso fare con una sotto gerarchia, per esempio con name=”NHibernate.Cfg” riferirò tutti i log di configurazione.

Buono a sapersi, anche per quando si decidono i nomi dei logger nelle proprie applicazioni.

Monday, July 05, 2010 10:56:00 AM (GMT Daylight Time, UTC+01:00)  #    Comments [0] - Trackback
log4net

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