Entra

View Full Version : Ripresa del progetto, primi passi


Pagine : 1 [2]

AnonimoVeneziano
24-01-2008, 18:46
Ok, grazie ragazzi, credo di aver capito il concetto.

AnonimoVeneziano
24-01-2008, 18:53
Ok, io e Anonimo, se vuole, stasera in pair programming introduciamo un NullAudio che gestisca la situazione.

Fico :stordita: :D

Una cosa non mi è perfettamente chiara. Questa NullAudio dove viene instanziata? Nel catch in gameloop postato poco sopra? Perchè nella environment non si può. Una volta lanciata la RuntimeException nella OpenALAudio la Environment.createAudio() propaga al livello superiore l'eccezione uscendo (e quindi lì non si può instanziare) . Instanziando in gameloop però poi non si può settare audio in Environment (che rimane null) .

Una soluzione potrebbe essere quella di spostare la gestione della RuntimeException in Environment.createAudio() e nella catch instanziare questa NullAudio.

E' fattibile come cosa? :stordita:

fek
24-01-2008, 19:04
E' fattibile come cosa? :stordita:

Vediamo quando abbiamo il codice davanti :)
KISS (Keep It Simple, Sweety)

Ci sei per le 22.30 ora italiana o e' troppo tardi?

jappilas
24-01-2008, 19:06
...
Una soluzione potrebbe essere quella di spostare la gestione della RuntimeException in Environment.createAudio() e nella catch instanziare questa NullAudio.

E' fattibile come cosa? :stordita:un' altra potrebbe essere spostare la gestione direttamente nella OpenALAudio.create()...

ispirata dal fatto che create() già ritorna un oggetto di tipo AudioInterface (generico) , e dalla considerazione che già l' inizializzazione dell' engine grafico produce un corposo printout in console ( per consistenza, troverei più logico mandare a console eventuali warning sull' assenza di sonoro - che tanto non inficiano l' avvio del gioco - piuttosto che a una dialog box modale...) :stordita:
public static AudioInterface create()
{
try
{
AL.create();
}
catch(LWJGLException e)
{
return new NullAudio();
}

return new OpenALAudio();
}

AnonimoVeneziano
24-01-2008, 19:07
Vediamo quando abbiamo il codice davanti :)
KISS (Keep It Simple, Sweety)

Ci sei per le 22.30 ora italiana o e' troppo tardi?

Io ci sono, ma le modalità quali sono? Il termine "pair programming" l'ho già sentito, ma non l'ho mai fatto :D

Ciao

fek
24-01-2008, 19:11
Jappi, perche' AudioInterface dovrebbe conoscere "AL.create()"?
Per quanto gli riguarda, tutto cio' che ha a che fare con OpenAL dovrebbe essere astratto da OpenALAudio, quindi "AL.create()" deve andare li' dentro. Se OpenAL fallisce (qui ci vuole un mock di OpenALAudio, tipo MockOpenALAudio), allora torna NullAudio e noi possiamo testarlo.

Edit: quel create() non fa parte di AudioInterface, ritorna solo un oggetto. Sto un attimo sul fuso da 12 ore di programmazione al giorno :|
La soluzione andrebbe bene, ma bisogna trovare un modo migliore per testarla, perche' cosi' non e' testabile.

fek
24-01-2008, 19:11
Io ci sono, ma le modalità quali sono? Il termine "pair programming" l'ho già sentito, ma non l'ho mai fatto :D

Ciao

Ok, dammi il tuo msn in PM e poi ti faccio vedere come funziona :)

AnonimoVeneziano
24-01-2008, 19:12
un' altra potrebbe essere spostare la gestione direttamente nella OpenALAudio.create()...

ispirata dal fatto che create() già ritorna un oggetto di tipo AudioInterface (generico) , e dalla considerazione che già l' inizializzazione dell' engine grafico produce un corposo printout in console ( per consistenza, troverei più logico mandare a console eventuali warning sull' assenza di sonoro - che tanto non inficiano l' avvio del gioco - piuttosto che a una dialog box modale...) :stordita:
public static AudioInterface create()
{
try
{
AL.create();
}
catch(LWJGLException e)
{
return new NullAudio();
}

return new OpenALAudio();
}

Direi che anche questo va bene. Inoltre sono molto pro riguardo alla rimozione della finestrella popup che è odiosa :D

jappilas
24-01-2008, 19:15
Io ci sono, ma le modalità quali sono? Il termine "pair programming" l'ho già sentito, ma non l'ho mai fatto :D

Ciaotu e Fran impegnati in un duello a colpi di commit, a scrivere alternativamente uno un test l' altro il codice, poi viceversa... :O

AnonimoVeneziano
24-01-2008, 19:16
Bona, l'aggiunta ha funzionato ho visto.

Mo vado a mangiare, a dopo :)

Credo che questa esperienza piuttosto professionale mi sarà utile nella vita :D

Ciao

thebol
24-01-2008, 19:50
La soluzione andrebbe bene, ma bisogna trovare un modo migliore per testarla, perche' cosi' non e' testabile.

Fare in maniera che Environament alla sua costruzione accetti delle classi factory per creare gli oggetti di "sistema" (audio, video, etc).

In questa manierà nei test si può passare una factory per l'audio che alla creazione spari un eccezione.

Come soluzione puzza di overenginering, però se rimane limitata a Environament può essere accettabile

fek
24-01-2008, 20:05
Fare in maniera che Environament alla sua costruzione accetti delle classi factory per creare gli oggetti di "sistema" (audio, video, etc).

In questa manierà nei test si può passare una factory per l'audio che alla creazione spari un eccezione.

Si', facciamo cosi' :)


Come soluzione puzza di overenginering, però se rimane limitata a Environament può essere accettabile

La soluzione di Jappi e' piu' semplice, ma non e' testabile. Purtroppo e' una di quelle situazione nelle quali una soluzione semplice va un po' complicata per poter essere testabile. L'idea non mi eccita, ma se devo scegliere preferisco comunque andare sul sicuro e testare.

AnonimoVeneziano
24-01-2008, 20:09
tu e Fran impegnati in un duello a colpi di commit, a scrivere alternativamente uno un test l' altro il codice, poi viceversa... :O

Ah, sei tu Marco :D

Mi chiedevo chi era

Ciao

jappilas
24-01-2008, 20:21
Ah, sei tu Marco :D

Mi chiedevo chi era

Ciaoebbene sì :D
oramai fai parte del Team Diamonds... :O

AnonimoVeneziano
24-01-2008, 20:35
ebbene sì :D
oramai fai parte del Team Diamonds... :O

Beh, allora ne sono onorato :D

Non vedo l'ora di perdere il primo dito da build rotta per confermare anche fisicamente la mia appartenza al gruppo (o meglio, al branco :D :asd:)

Ciao

jappilas
25-01-2008, 15:19
La soluzione di Jappi e' piu' semplice, ma non e' testabile.Purtroppo e' una di quelle situazione nelle quali una soluzione semplice va un po' complicata per poter essere testabile. L'idea non mi eccita, ma se devo scegliere preferisco comunque andare sul sicuro e testare.hai ragione
infatti non voleva essere una soluzione, ma al più un frammento di idea :O

thebol
25-01-2008, 21:06
ho raggruppato tutti i createForTesting che non ero riuscito a eliminare in una classe it.diamonds.tests.helper.ComponentHelperForTest. Inoltre ho eliminato AbstractDroppableForTesting è ho messo un metodo dentro ComponentHelperForTest che crea una abstractDroppable al volo (via anonymous inner class)


public static AbstractSingleDroppable createAbstractSingleDroppable()
{
return new AbstractSingleDroppable(MockEngine.create(0, 0), DroppableType.GEM,
DroppableColor.DIAMOND, 0)
{
};
}


se nessuno ha controindicazioni domani mattina committo

fek
25-01-2008, 23:23
Questo finesettimana sono via. Non ci sono fino a mercoledi'. Lascio la build machine accesa, ma se il server va giu' per qualche motivo non saro' qui a tirarlo su fino a mercoledi' mattina.

Quando torno finisco il lavoro sul server per renderlo piu' stabile.

AnonimoVeneziano
25-01-2008, 23:25
Questo finesettimana sono via. Non ci sono fino a mercoledi'. Lascio la build machine accesa, ma se il server va giu' per qualche motivo non saro' qui a tirarlo su fino a mercoledi' mattina.

Quando torno finisco il lavoro sul server per renderlo piu' stabile.


Buon viaggio :)

Spero che la lettera di balmer non c'entri nulla, altrimenti portati un Arbre Magique da appenderti al collo tipo collana :D

Ciao

jappilas
26-01-2008, 10:15
Buon viaggio :)

Spero che la lettera di balmer non c'entri nulla, altrimenti portati un Arbre Magique da appenderti al collo tipo collana :D

Ciaosì potrebbe essere la soluzione migliore :O

ma che t'importa de la guerre
ma che t'import de le canchér
ma che t'import se la morosa ti ha tradito
ma che t'import de l'aiddiés
o se si è intasato il ces
de le govern o de la politique
ma che t'import se le coglion
non vanno mai in estinzion
e nell'aria senti un grand odor de fogn
un grand odor... de fogn

Arbre Magìque
Arbre Magìque

In questo mond, in questo mond che ti fa schife
si tu te sniffe Arbre Magìque... le paradì... fra le tue dite…

Marco Carena - "Arbre Magique" :O

71104
27-01-2008, 14:20
Quando torno finisco il lavoro sul server per renderlo piu' stabile. SourceForge no eh? :fiufiu:
d'accordo che tanto la build machine rimane sempre sul tuo server, ma almeno con SF potremmo avere il repository perennemente in piedi

AnonimoVeneziano
27-01-2008, 15:56
SourceForge no eh? :fiufiu:
d'accordo che tanto la build machine rimane sempre sul tuo server, ma almeno con SF potremmo avere il repository perennemente in piedi

Tu dici? Su SF nei momenti di piena non si riesce a scaricare neanche un megabyte dai server CVS/SVN

Non so se adesso la situazione è migliorata :D

71104
27-01-2008, 17:18
Tu dici? Su SF nei momenti di piena non si riesce a scaricare neanche un megabyte dai server CVS/SVN

Non so se adesso la situazione è migliorata :D qualche anno fa era così, mi sa che sei rimasto indietro :D
o perlomeno io coi miei progettini non li ho visti tutti sti disservizi, negli ultimi tempi sempre tutto liscio e spedito.

AnonimoVeneziano
27-01-2008, 23:43
qualche anno fa era così, mi sa che sei rimasto indietro :D
o perlomeno io coi miei progettini non li ho visti tutti sti disservizi, negli ultimi tempi sempre tutto liscio e spedito.

Ottimo, in effetti era da un po' che non scaricavo via SVN da SF :D

Sennò come alternativa c'era googlecode

Ciao

VICIUS
28-01-2008, 00:20
[...]Sennò come alternativa c'era googlecode
Googlecode tutta la vita. Lo uso per dei piccoli progettini personali e mi ci trovo molto bene. Non offre le mille mila funzioni di sourceforge ma per quanto mi riguarda è un pregio e non un difetto. Oltretutto i server sono velocissimi.

VICIUS
28-01-2008, 09:00
È evidente che nessuno ha ancora provato a farci una partita a due a dc perché altrimenti ci saremmo accorti prima dei due bug da cui è afflitto.

1- Premendo il tasto destra o sinistra che controllano le gemme nella seconda griglia la gemspair viene catapultata nella prima griglia.

2- Se si premono i tasti destra e sinistra in rapidissima successione la gems pair diventa immune alla gravità. Di fatto le gemme smettono di cadere e rimangono sospese in aria finche non si smette di premere i tasti.

AnonimoVeneziano
28-01-2008, 10:50
A me non succede nessuno dei due con la versione di ieri.

La 2° griglia va bene e premendo destra e sinistra rapidamente in successione non succede nulla di strano .

Provo a fare un update.

Ciao

AnonimoVeneziano
28-01-2008, 10:51
Ok, i bugs adesso ci sono .

C'è stata una regressione. Mi sa che bisognerà dare un occhiata agli ultimi commit

VICIUS
28-01-2008, 11:00
3- Le gemme non sono più allineate alla griglia. Se le spostate verso sinistra è possibile uscire dai bordi.
http://img156.imageshack.us/my.php?image=immagine1on1.png

AnonimoVeneziano
28-01-2008, 11:10
Penso di aver isolato la causa del bug :

cambiamento alla revisione 2494:

--- src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2493)
+++ src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2494)
@@ -152,17 +152,12 @@
}


- // TODO: Method not tested!
public void moveToCell(int row, int column)
{
- int deltaX = column - region.getLeftColumn();
- int deltaY = row - region.getTopRow();
+ region.setColumn(column);
+ region.setRow(row);

- region.setColumn(region.getLeftColumn() + deltaX);
- region.setRow(region.getTopRow() + deltaY);
-
- sprite.translate(Cell.SIZE_IN_PIXELS * deltaX, Cell.SIZE_IN_PIXELS
- * deltaY);
+ sprite.setPosition(Cell.SIZE_IN_PIXELS * column, Cell.SIZE_IN_PIXELS * row);
}



Ciao

thebol
28-01-2008, 11:41
Penso di aver isolato la causa del bug :

cambiamento alla revisione 2494:

--- src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2493)
+++ src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2494)
@@ -152,17 +152,12 @@
}


- // TODO: Method not tested!
public void moveToCell(int row, int column)
{
- int deltaX = column - region.getLeftColumn();
- int deltaY = row - region.getTopRow();
+ region.setColumn(column);
+ region.setRow(row);

- region.setColumn(region.getLeftColumn() + deltaX);
- region.setRow(region.getTopRow() + deltaY);
-
- sprite.translate(Cell.SIZE_IN_PIXELS * deltaX, Cell.SIZE_IN_PIXELS
- * deltaY);
+ sprite.setPosition(Cell.SIZE_IN_PIXELS * column, Cell.SIZE_IN_PIXELS * row);
}



Ciao

prova a scrivere un test che dimostri il bug.

AnonimoVeneziano
28-01-2008, 11:43
Dopo aver un po' indagato sulla causa del malfunzionamento della nuova implementazione del metodo sono arrivato a conclusione che la cosa non funziona perchè i Droppable vedono solo la propria griglia ignorando del tutto l'esistenza di due grigle, quindi "row" e "column" partono da 0 fino a 7 sia se il droppable si trova nella prima o nella seconda griglia. Il metodo setPosition() di Sprite richiede invece la posizione assoluta nello schermo.

Ho a questo punto fatto tornare il metodo alla vecchia versione :


int deltaX = column - region.getLeftColumn();
int deltaY = row - region.getTopRow();

region.setColumn(column);
region.setRow(row);

sprite.translate(Cell.SIZE_IN_PIXELS * deltaX, Cell.SIZE_IN_PIXELS * deltaY);



Se si vogliono fare altre modifiche bisognerà tenere in conto il fatto esposto sopra.

Ciao

AnonimoVeneziano
28-01-2008, 11:44
prova a scrivere un test che dimostri il bug.

Oh douch' :doh:

Vuoi dire che bisogna farlo anche se è dipeso da una modifica "sbagliata" ?

Devo quindi fare il revert?

Ciao

thebol
28-01-2008, 11:57
Oh douch' :doh:

Vuoi dire che bisogna farlo anche se è dipeso da una modifica "sbagliata" ?

Devo quindi fare il revert?

Ciao

si perchè se no fra 6 mesi arriva uno (anche io) che rifa la modifca pensando di non far danni. Con il test invece ce ne accorgiamo subito.

ps. per il revert per me lo puoi lasciare, magari mettendo un TODO sul bug (descrivendo perchè e per come si verifica). Se poi (visto che hai capito il problema) riesci anche a fare il test è meglio.(Il test rimane cmq da fare)

AnonimoVeneziano
28-01-2008, 12:00
si perchè se no fra 6 mesi arriva uno (anche io) che rifa la modifca pensando di non far danni. Con il test invece ce ne accorgiamo subito.

ps. per il revert per me lo puoi lasciare, magari mettendo un TODO sul bug (descrivendo perchè e per come si verifica). Se poi (visto che hai capito il problema) riesci anche a fare il test è meglio.(Il test rimane cmq da fare)

Hai ragione , mo faccio il revert,poi stasera faccio tutti i tests visto che purtroppo questo pomeriggio non posso.

Ciao

fek
28-01-2008, 12:26
Oh douch' :doh:

Vuoi dire che bisogna farlo anche se è dipeso da una modifica "sbagliata" ?

Devo quindi fare il revert?

Ciao

Si', il test che dimostri un bug va scritto sempre per evitare che modifiche successive ricreino il bug. E' una misura di sicurezza.
Alla faccia di 71104 il mio server e' sempre su e va una bellezza anche se sono ad un passo dall Turchia :D

Vic, puoi mandare via mail una descrizione dei bug che hai trovato (e possibilmente un test) a Jocchan cosi' ne tiene traccia?
Vale per tutti, se trovate un bug, non dimenticatelo, mandatelo a Jocchan e poi li assegnamo per la correzione.

71104
28-01-2008, 12:42
Vale per tutti, se trovate un bug, non dimenticatelo, mandatelo a Jocchan e poi li assegnamo per la correzione. a questo punto allora Jocchan potrebbe aprire proprio un thread dedicato ai bug :read:
direi di organizzare un elenco numerato di bug nel primo post, il quale viene aggiornato man mano che gli sviluppatori comunicano di aver testato e risolto un bug.

AnonimoVeneziano
28-01-2008, 14:00
Ok, alla fine non ce l'ho fatta ad aspettare :D

Ho scritto il test e ho corretto il bug.

Ciauz

thebol
28-01-2008, 14:44
Ok, alla fine non ce l'ho fatta ad aspettare :D

Ho scritto il test e ho corretto il bug.

Ciauz

gg

Bonfo
28-01-2008, 17:34
Penso di aver isolato la causa del bug :

cambiamento alla revisione 2494:

--- src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2493)
+++ src/it/diamonds/droppable/AbstractSingleDroppable.java (revisione 2494)
@@ -152,17 +152,12 @@
}


- // TODO: Method not tested!
public void moveToCell(int row, int column)
{
- int deltaX = column - region.getLeftColumn();
- int deltaY = row - region.getTopRow();
+ region.setColumn(column);
+ region.setRow(row);

- region.setColumn(region.getLeftColumn() + deltaX);
- region.setRow(region.getTopRow() + deltaY);
-
- sprite.translate(Cell.SIZE_IN_PIXELS * deltaX, Cell.SIZE_IN_PIXELS
- * deltaY);
+ sprite.setPosition(Cell.SIZE_IN_PIXELS * column, Cell.SIZE_IN_PIXELS * row);
}



Ciao

Ehm... sono stato io, ma il fatto è che ho iniziato io a scrivere i test per questo metodo e forse non ho capito bene cosa faceva.
Ma il fatto che la build non si è rotta vuol dire che sono stato bravo, coglione, ma bravo :D :D

EDIT:
Nota sul commento al test testMoveToCellForDifferentGirds: se il test è fatto bene non ci sarebbe bisogno del commento... eliminalo pure ;)

Jocchan
28-01-2008, 18:13
Vic, puoi mandare via mail una descrizione dei bug che hai trovato (e possibilmente un test) a Jocchan cosi' ne tiene traccia?
Vale per tutti, se trovate un bug, non dimenticatelo, mandatelo a Jocchan e poi li assegnamo per la correzione.
L'indirizzo e-mail che uso di più è ilmionick cicciolina(:P) rc6.it.

a questo punto allora Jocchan potrebbe aprire proprio un thread dedicato ai bug :read:
direi di organizzare un elenco numerato di bug nel primo post, il quale viene aggiornato man mano che gli sviluppatori comunicano di aver testato e risolto un bug.
Non è una cattiva idea, in fondo l'abbiamo fatto prima della FP classificandoli per priorità.

blackknight
29-01-2008, 22:08
Ma il repository SVN è quello su SF ?
Qualche anima pia mi da il link?thx:D

^TiGeRShArK^
29-01-2008, 22:17
svn://fcarucci.homeip.net/diamonds/trunk

P.S. devi mandare a fek il tuo username, la tua password e la tua mail così ti crea l'account per committare.

blackknight
29-01-2008, 22:38
svn://fcarucci.homeip.net/diamonds/trunk

P.S. devi mandare a fek il tuo username, la tua password e la tua mail così ti crea l'account per committare.

Grazie...gia fatto:D