Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Nano: la piccola fotocamera alla prova sul campo
DJI Osmo Nano: la piccola fotocamera alla prova sul campo
La nuova fotocamera compatta DJI spicca per l'abbinamento ideale tra le dimensioni ridotte e la qualità d'immagine. Può essere installata in punti di ripresa difficilmente utilizzabili con le tipiche action camera, grazie ad una struttura modulare con modulo ripresa e base con schermo che possono essere scollegati tra di loro. Un prodotto ideale per chi fa riprese sportive, da avere sempre tra le mani
FUJIFILM X-T30 III, la nuova mirrorless compatta
FUJIFILM X-T30 III, la nuova mirrorless compatta
FUJIFILM X-T30 III è la nuvoa fotocamera mirrorless pensata per chi si avvicina alla fotografia e ricerca una soluzione leggera e compatta, da avere sempre a disposizione ma che non porti a rinunce quanto a controllo dell'immagine.
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati
Da Las Vegas, la visione di Larry Ellison e la concretezza di Clay Magouyrk definiscono la nuova traiettoria di Oracle: portare l’intelligenza artificiale ai dati, non i dati all’intelligenza, costruendo un’infrastruttura cloud e applicativa in cui gli agenti IA diventano parte integrante dei processi aziendali, fino al cuore delle imprese europee
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-02-2008, 22:33   #81
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Bonfo, i metodi isStoneTransforming e isStoneTransformed in realtà agiscono solamente sulla stone, non sulla action; io li sposterei in Stone rinominandoli rispettivamente isTransforming e isTransformed.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 22:52   #82
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
C'ho pensato pure io, ma, non so se l'hai notato, c'e' un cast di mezzo.
Io aspetteri di vedere come risolviamo il problema del getType e isXXX.

Se valutate che conviene farlo subito...
... cambialo subito, ma poi devi aggiungere i test
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 23:55   #83
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
spianato il primo TODO: REFACTOR THIS di TestGameRestartOnGameOver

ho rinominato la classe di test in TestGameOnGameOver (visto che il metodo testava il gameOver a partire da loop).

Da:
Codice:
   public void testPassToGameOverState() throws IOException
    {
        // TODO: REFACTOR THIS

        LayerManager oldLayerManager = loop.getLayerManager();

        fillFourthColumn();

        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();

        // verifico che il restart nn sia ancora stato fatto
        assertEquals(oldLayerManager, loop.getLayerManager());
        assertEquals(field1, loop.getPlayFieldOne());
        assertEquals(field2, loop.getPlayFieldTwo());

        environment.getTimer().advance(restartGameDelay - 2);
        loop.doOneStep();

        // verifico che il restart nn sia ancora stato fatto
        assertEquals(oldLayerManager, loop.getLayerManager());
        assertEquals(field1, loop.getPlayFieldOne());
        assertEquals(field2, loop.getPlayFieldTwo());

        environment.getTimer().advance(1);
        loop.doOneStep();

        assertNotSame("The layer must be different from the old one",
            oldLayerManager, loop.getLayerManager());
        // TODO manca test che � stato settato il background(come si fa?)
        assertNotSame("field1 must be different from the old one", field1,
            loop.getPlayFieldOne());
        assertNotSame("field2 must be different from the old one", field2,
            loop.getPlayFieldTwo());
    }
A:
Codice:
    public void testPassToGameOverOnColumnFull() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        assertTrue(loop.getPlayFieldOne().getGridController().isGameOver());
    }

    
    public void testPassToGameOverNotRestartGame() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        
        assertEquals(layerManager, loop.getLayerManager());
        assertEquals(field1, loop.getPlayFieldOne());
        assertEquals(field2, loop.getPlayFieldTwo());
    }
    
    
    public void testDelayBeforeRestart() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        
        environment.getTimer().advance(restartGameDelay - 2);
        loop.doOneStep();

        assertEquals(layerManager, loop.getLayerManager());
        assertEquals(field1, loop.getPlayFieldOne());
        assertEquals(field2, loop.getPlayFieldTwo());
    }
    
    
    public void testRestartAfterDelay() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        
        environment.getTimer().advance(restartGameDelay-1);
        loop.doOneStep();

        assertNotSame("The layer must be different from the old one",
            layerManager, loop.getLayerManager());
        assertNotSame("field1 must be different from the old one", field1,
            loop.getPlayFieldOne());
        assertNotSame("field2 must be different from the old one", field2,
            loop.getPlayFieldTwo());
    }
non chiedetemi perchè basta far avanzare il timer di restartGameDelay(preso dal config) -1 per far scattare il gameOver, su questo non ho indagato, ma ricordo che "era così".

ho anche eliminato il todo che diceva che si doveva testare l'apparizione dell'immagine del game over, ma nn si sapeva come(ho la strana sensazione di averlo scritto io..fra l'altro....

Codice:
    public void testNotShowGameOverImageBeforeGameOver() throws IOException
    {
        Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath);
        assertFalse(mockEngine.wasImageDrawn(gameOverImage));
    }
    
    
    public void testShowGameOverImageOnGameOver() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        
        Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath);
        assertTrue(mockEngine.wasImageDrawn(gameOverImage));
    }
    
    public void testNotShowGameOverAfterRestart() throws IOException
    {
        fillFourthColumn();
        environment.getTimer().advance(newGemDelay);
        loop.doOneStep();
        
        environment.getTimer().advance(restartGameDelay-1);
        loop.doOneStep();
        
        Image gameOverImage = environment.getEngine().createImage(GameOverBox.texturePath);
        assertFalse(mockEngine.wasImageDrawn(gameOverImage));
    }
unici accorgimenti per questo test, è stato cambiare il metodo di MockEngine clearDisplay in
Codice:
    public void clearDisplay()
    {
        drawInfoList = new ArrayList<DrawInfo>();
        numberOfQuadsDrawn = 0;
    }
prima non veniva pulita la drawInfoList, per cui mi ritrovavo il gameover anche dopo il restart...

In piu ho messo public static final GameOverBox.texturePath, per avere accesso all'nome texture/immagine.

C'è un altro test che usa la tecnica environment.getEngine().createImage(NOME_TEXTURE) e che hanno il nome texture hardcoded nel test(come nel mio caso il nome texture era private static). Non so quale modo sia migliore...(anche se io voto mettere i nomi texture public static final)

Ultima modifica di thebol : 06-02-2008 alle 00:01.
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 00:11   #84
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da thebol Guarda i messaggi
ho anche eliminato il todo che diceva che si doveva testare l'apparizione dell'immagine del game over, ma nn si sapeva come(ho la strana sensazione di averlo scritto io..fra l'altro....
Sei sicuro che non ci sia gia' qualcos'altro di simile in giro??
Mi ricordo che avevamo trovato un doppione... controlla, altrimenti signifca che cosi' va benissimo
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 00:27   #85
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
Prima:
Dopo:
Codice:
    protected void applyOn(Droppable gem)
    {
        if(!gem.getGridObject().getType().isStone() || !isStoneTransforming(gem))
        {
            return;
        }

        turningStonesCounter++;

        if(isStoneTransformed(gem))
        {
            turningStonesCounter--;
            turnStoneInToGem(gem);
        }

        gem.update(timer.getTime());
    }


    private void turnStoneInToGem(Droppable stone)
    {
        getGridElements().remove(stone);

        Droppable gem = gemFactory.create(GEM, stone.getGridObject().getColor());
        gem.getFallingObject().drop();

        int row = stone.getRegion().getTopRow();
        int column = stone.getRegion().getLeftColumn();
        getGrid().insertDroppable(gem, row, column);
    }


    private boolean isStoneTransforming(Droppable stone)
    {
        int frame = stone.getAnimatedSprite().getCurrentFrame();
        return frame >= 5 && frame < 7;
    }


    private boolean isStoneTransformed(Droppable stone)
    {
        int frame = stone.getAnimatedSprite().getCurrentFrame();
        return frame >= 7;
    }
ho trovato un bug(vedi allegato)

non ne sono sicuro, ma potrebbe essere questa modifica a farlo saltare fuori.

ps.si lo so c'è un volontario per il test del bug...però se va bene domani
mattina..

pps.mancava l'allegato
Immagini allegate
File Type: jpg BUGGONE.JPG (20.1 KB, 19 visite)

Ultima modifica di thebol : 06-02-2008 alle 00:31.
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 05:47   #86
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Il bug penso di aver capito dov'è.
Prima con frame = 7 riusciva comunque a passare il primo if, ovvero
Codice:
if(frame < 5 ) {
return;
}
mentre invece adesso ci casca dentro in pieno.

Codice:
if(frame < 5 || frame >= 7) {
return;
}
Dovrei scrivere il test, ma vorrei mazzare un po' bigGem.

Spostiamo la discussione di questo nel thread dei Bug
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 06-02-2008 alle 05:55.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 05:56   #87
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Perchè AbstractDroppable non si tiene una reference al DroppableDescription invece di usarlo solo per inizzializzare i membri??
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 10:28   #88
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
Perchè AbstractDroppable non si tiene una reference al DroppableDescription invece di usarlo solo per inizzializzare i membri??
Perche' l'ho dimenticato
Se vedi una cosa cosi' semplice, fallo senza problemi. Ieri ho rifattorizzato 20 classi a mezzanotte, qualcosa puo' scappare.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 06-02-2008, 23:18   #89
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Prima:
Codice:
    protected boolean canMoveButNotWithFullGravity(Grid grid)
    {
        // TODO: REFACTOR THIS

        float gridBottom = grid.getRowUpperBound(grid.getNumberOfRows() - 1);

        int numberOfRowsOverOne = region.getBottomRow() - region.getTopRow();

        if (getSprite().getPosition().getY() + numberOfRowsOverOne
            * Cell.SIZE_IN_PIXELS + ((float)grid.getActualGravity()) / 2 > gridBottom)
        {
            return true;
        }

        if (getSprite().getPosition().getY() + ((float)grid.getActualGravity())
            / 2 <= grid.getRowUpperBound(getRegion().getTopRow()))
        {
            return false;
        }

        Cell cell = new Cell(getRegion().getBottomRow() + 1, getRegion().getLeftColumn());

        return grid.isDroppableAt(cell);
    }
Dopo:
Codice:
      protected boolean canMoveButNotWithFullGravity(Grid grid)
    {
        float nextPositionY = getSprite().getPosition().getY() + grid.getActualGravity() * 0.5f;
        float limit = grid.getRowUpperBound(grid.getNumberOfRows() - getRegion().getHeight());

        if (nextPositionY > limit)
        {
            return true;
        }

        float currentRowLimit = grid.getRowUpperBound(getRegion().getTopRow());

        if (nextPositionY <= currentRowLimit)
        {
            return false;
        }

        Cell cell = new Cell(getRegion().getBottomRow() + 1, getRegion().getLeftColumn());

        return grid.isDroppableAt(cell);
    }
Ricordo i due problemi, entrambi da testare.
- il supporto a gravita' che producano step solo <= 1 cella ( visibile nella costruzione della cella)
- il fatto che si controlli solo la 1 column, probabilemnte causa del bug 6.
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 06-02-2008 alle 23:26.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 00:08   #90
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da fek Guarda i messaggi
La code base sta pian piano migliorando, soprattutto Droppable, a seguito di un po' di colpi di refactoring. Ma durante il refactoring giornaliero ho avuto molti problemi sia con BigGem sia con vari test.

Visto che affidarsi al vostro bon cuore non sta sortendo effetti troppo visibile, la soluzione e' il programma "Refactor This!"


cazz.. avevo in cameretta proprio quel poster...
ma la scritta non me la ricordavo..

__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 01:10   #91
Baol
Member
 
L'Avatar di Baol
 
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
Comincio a lavorare sul refactoring della CrushByChestAction

EDIT: ho committato, anche se ho lasciato il REFACTOR THIS perchè c'è ancora lavoro da fare.
In particolare pensavo di mettere in Droppable un metodo getAdjacentDroppable che restituisse una DroppableList con le droppable adiacenti (e un flag se sono richieste le droppable dello stesso colore, oppure un altro metodo apposito). Con un metodo simile il codice della CrushByChestAction si dimezzerebbe e saremmo più vicini alla sua eliminazione. Si può andare in questa direzione?
__________________
"Non esiste l'impossibile. L'impossibile non esiste." Baolian, Libro V


Baol è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 09:32   #92
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Mi sono preso la libertà di aggiungere un paio di Refactor this

Poi ho aggiunto il metodo create() a MockSingleDroppable, che vedo sostiuirsi benissimo al createGem() di GridTestCase, poi, con il refactoring che ho fatto su BigGem, anche la loro creazione dovrebbe essere molto più semplice, facendo si che si possano eliminare tutti qui metodi strani da GridTestCase... che secondo me dimagrisce un bel po'.

Inoltre stavo pensando di valutare bene cosa stanno a fare li in nostri TestCase custom.
Ovvero a parte il GridTestCase che fa tutto, gli altri li vedo un po' "inutili", il che vuol dire 2 cose:
- o li stiamo usando male,
- o non servono a un granchè.

In ogni caso bisogna "omogeneizzare" i test

Io un po' alla volta sto cercando di eliminare le dipendenze. Ad esempio è inutile usare GridTestCase se l'unica cosa che mi serve è un MockEngine.
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 07-02-2008 alle 09:36.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 10:51   #93
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Giusto, togli le dipendenze dai TestCase che non servono e aggiungi i Refactor This che reputi opportuni.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 13:10   #94
Baol
Member
 
L'Avatar di Baol
 
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
Uhmmm, ieri sera il forum è andato in palla e non mi ha più modificato il post...

Dunque: ho committato il lavoro sulla CrushByChestAction ma si può fare ancora qualcosa: pensavo di aggiungere un metodo getAdjacentDroppables ai vari Droppables (implementato magari in AbstractDroppable e in BigGem) che restituisca tutte le gemme adiacenti (ovvero con un lato in comune) di qualsiasi colore (pensavo con un flag che indichi se devono o meno essere dello stesso colore, oppure creare un altro metodo apposito). Questo semplificherebbe notevolmente la Action e ci metterebbe più vicini alla sua eliminazione.
Posso procedere in quella direzione?
__________________
"Non esiste l'impossibile. L'impossibile non esiste." Baolian, Libro V



Ultima modifica di Baol : 07-02-2008 alle 13:18.
Baol è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 13:41   #95
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Baol Guarda i messaggi
Uhmmm, ieri sera il forum è andato in palla e non mi ha più modificato il post...

Dunque: ho committato il lavoro sulla CrushByChestAction ma si può fare ancora qualcosa: pensavo di aggiungere un metodo getAdjacentDroppables ai vari Droppables (implementato magari in AbstractDroppable e in BigGem) che restituisca tutte le gemme adiacenti (ovvero con un lato in comune) di qualsiasi colore (pensavo con un flag che indichi se devono o meno essere dello stesso colore, oppure creare un altro metodo apposito). Questo semplificherebbe notevolmente la Action e ci metterebbe più vicini alla sua eliminazione.
Posso procedere in quella direzione?
Flag?! Flag che modifica il comportamento di un metodo?!?!?! FLAG?!?!?!
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 13:43   #96
Baol
Member
 
L'Avatar di Baol
 
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
Chiedo scusa, volevo dire due metodi separati
__________________
"Non esiste l'impossibile. L'impossibile non esiste." Baolian, Libro V


Baol è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:27   #97
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ho una domanda circa la regola 1 commit ==> 1 refactor this che se ne va: è possibile committare aggiungendo dei refactor this nel codice ma senza risolverne nessuno? oppure per committare qualunque cosa (anche l'aggiunta di nuovi refactor this) bisogna per forza risolverne almeno uno?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 16:43   #98
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da 71104 Guarda i messaggi
ho una domanda circa la regola 1 commit ==> 1 refactor this che se ne va: è possibile committare aggiungendo dei refactor this nel codice ma senza risolverne nessuno? oppure per committare qualunque cosa (anche l'aggiunta di nuovi refactor this) bisogna per forza risolverne almeno uno?
La seconda che hai detto.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 17:17   #99
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ok.

ora sto lavorando sul refactor this in it.diamonds.grid.action.CrushByChestAction:11
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2008, 17:18   #100
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ot: ho notato solo oggi l'immagine di ken shiro in prima pagina
credo che abbiamo trovato un'ispirazione per il codename della prossima release
(il codename precedente era YAGNI )
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Oracle AI World 2025: l'IA cambia tutto, a partire dai dati Oracle AI World 2025: l'IA cambia tutto, a parti...
Micron e millisecondi: la piattaforma ServiceNow guida l'infrastruttura IT di Aston Martin F1 Micron e millisecondi: la piattaforma ServiceNow...
ASUS GeForce RTX 5080 Noctua OC Edition: una custom fenomenale, ma anche enorme ASUS GeForce RTX 5080 Noctua OC Edition: una cus...
Brembo Solutions e Microsoft danno vita ...
Migliaia di pacchi Amazon rubati ai legi...
Ex CEO di Stellantis: Musk lascerà...
Record storico per i giochi Windows su L...
GPU introvabili: Microsoft accusa i mine...
RedTiger prende di mira i gamer: furto d...
Microsoft sotto accusa: avrebbe nascosto...
Il computer quantistico senza errori di ...
Cybersecurity, intelligenza artificiale ...
Xiaomi avvia la distribuzione globale di...
Addio cavi in auto: 3 adattatori per Car...
OPPO e Google sempre più vicini s...
Sorpresa! Non è Tesla il marchio ...
Microsoft corre ai ripari: scoperta fall...
Xiaomi 15T e 15T Pro da 549€ su Amazon: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v