Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione ASUS ROG Cetra TWS SpeedNova: le migliori nella loro fascia, ma lo stelo va accorciato
Recensione ASUS ROG Cetra TWS SpeedNova: le migliori nella loro fascia, ma lo stelo va accorciato
Nelle ultime settimane abbiamo avuto l'opportunità di mettere sotto torchio le ASUS ROG Cetra TWS SpeedNova. Seppur classificati come "da gaming", gli auricolari vanno ben oltre quelle che sono le esigenze dei videogiocatori proponendosi come una soluzione polifunzionale capace di fornire un suono eccezionale in ogni circostanza, dalla musica ai contenuti multimediali, passando ovviamente per i videogiochi con i quali è possibile ottenere una latenza praticamente assente.
Google Pixel 8a: può diventare un vero best buy? La recensione
Google Pixel 8a: può diventare un vero best buy? La recensione
Google ha capito che la serie "a" dei suoi Pixel piace agli utenti per vari motivi e per questo ha deciso di proporre sul mercato questo nuovo Pixel 8a che ha il sapore di uno smartphone migliorato rispetto alla passata generazione, con processore top di gamma ma ad un prezzo forse un po’ esagerato al momento.  
MSI Vector 16 HX A13V è un notebook gaming che fa sentire la sua potenza (e non solo)
MSI Vector 16 HX A13V è un notebook gaming che fa sentire la sua potenza (e non solo)
Abbiamo provato il notebook Vector 16 HX A13V di MSI, un sistema che coniuga hardware di fascia desktop con un buon insieme di porte. Il display Full HD+ permette alla RTX 4080 Laptop di garantire prestazioni top per diversi anni, ma proprio il display e la rumorosità massima rappresentano due nei per un portatile altrimenti convincente.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-02-2008, 01:15   #41
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
Scusate, ma perche' invece di andare per riga e per colonna non andiamo con l'iteratore sull'elenco di droppabales??

Codice:
            for(Droppable droppabel : grid.getDroppableList()) {
            }
e se poi abbiamo problemi di iterazione doppia basta fare:
Codice:
            for(Iterator iterator = grid.getDroppableList().iterator(); iterator.hasNext();)
            {
                Droppable droppable = (Droppable)iterator.next();
                
            }
Quel metodo in Grid non c'è , bisognerà aggiungerlo

Comunque non so quanto riduce la complessità . In pratica invece di fare il ciclo su due livelli lo fai su uno solo, però hai il vantaggio di togliere dall'iterazione di tutti gli elementi "null" della griglia ...
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 01:46   #42
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
E in piu' non ti devi tenere una lista di supporto per sapere se quell'oggetto l'hai gia' visitato o no.

Mi ricordo che subito dopo la FirstPlayable abbiamo trasformato grid da array di celle a lista di droppable proprio per poter itereare solo sugli oggetti dentro la grid.

Il problema che avevo incontrato era l'iterazione mutlipla perche' usavo il foreach (":") , ma con l'iterator il problema si risolve ( o almeno cosi' dovrebbe essere)
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 05-02-2008 alle 01:54.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 02:20   #43
Baol
Member
 
L'Avatar di Baol
 
Iscritto dal: Apr 2006
Città: Gazzaniga (BG)
Messaggi: 67
Era esattamente quello che stavo per proporre io, infatti per il refactoring di prima ho risolto così (alle Actions viene già passata la droppableList).
Tuttavia provando a modificarlo in AbstractGridIteration ottengo un bel java.util.ConcurrentModificationException in un test fra l'altro che c'entra poco, ma che richiama la createNewBigGemsAction...
Sto provando a modificare ma sono un attimo in difficoltà.
Intanto committo il refactoring del REFACTOR THIS.

EDIT: cosa intendi per iterazione multipla?
__________________
"Non esiste l'impossibile. L'impossibile non esiste." Baolian, Libro V



Ultima modifica di Baol : 05-02-2008 alle 02:25.
Baol è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 05:35   #44
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da Baol Guarda i messaggi

EDIT: cosa intendi per iterazione multipla?
java.util.ConcurrentModificationException

Ovvero stai cercando di modifcare un lista sulla quale qualcun'altro sta iterando.
Quello che fa scoppiare tutto è (ad esempio)
Codice:
for(Object obj : objects) {
    for(Object obj1 : objects) {
         objects.remove(obj1);
    }
Però ho detto una cavolata
Non è sufficente farsi dare due iteratori diverisi, il problema si pone lo stesso, ovvero e un po' più complicato da risolvere
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 05-02-2008 alle 07:16.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 07:26   #45
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Prima
Codice:
public void testPositions()
    {
        // TODO: REFACTOR THIS
        // Test positions of what? clarify this test and simplify it
        
        int row1 = 4;
        int column1 = 2;

        Point spritePosition1 = gem.getAnimatedSprite().getPosition();

        grid.insertDroppable(gem, row1, column1);
        
        assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column1, spritePosition1.getX());
        assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row1, spritePosition1.getY());

        int row2 = 3;
        int column2 = 5;
        
        Droppable anotherGem = createGem(DroppableColor.DIAMOND);

        Point spritePosition2 = anotherGem.getAnimatedSprite().getPosition();

        grid.insertDroppable(anotherGem, row2, column2);
        
        assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column2, spritePosition2.getX());
        assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row2, spritePosition2.getY());
    }
Dopo
Codice:
    public void testGemSpritePositions()
    {
        grid.insertDroppable(gem, 4, 2);
        checkSpritePosition(gem.getAnimatedSprite().getPosition(), 4, 2);

        Droppable anotherGem = createGem(DroppableColor.DIAMOND);
        grid.insertDroppable(anotherGem, 3, 5);
        checkSpritePosition(anotherGem.getAnimatedSprite().getPosition(), 3, 5);
    }


    private void checkSpritePosition(Point spritePosition, int row, int column)
    {
        assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column,
            spritePosition.getX());
        assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row,
            spritePosition.getY());
    }
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 07:46   #46
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Prima
Codice:
public void testGemIsDrawnCorrectly()
    {
        // TODO: REFACTOR THIS

        MockEngine engine = MockEngine.create(800, 600);

        Droppable gem = createGem(DroppableColor.DIAMOND);

        final Sprite sprite = gem.getAnimatedSprite().getSprite();

        sprite.draw(engine);

        assertEquals("gem must be drawn with unbrightened texture(bad left)",
            engine.getImageRect().getLeft(), 0);

        assertEquals("gem must be drawn with unbrightened texture(bad right)",
            engine.getImageRect().getRight(), 31);
    }


    public void testGemViewSize()
    {
        // TODO: REFACTOR THIS

        MockEngine engine = MockEngine.create(800, 600);

        Droppable gem = createGem(DroppableColor.DIAMOND);
        gem.getAnimatedSprite().getSprite().draw(engine);
        assertEquals(
            "Height of the texture engine differente of height of gem(init)",
            engine.getImageRect().getHeight(),
            (int)gem.getAnimatedSprite().getSprite().getTextureArea().getHeight());
        assertEquals(
            "Width of the texture engine differente of width of gem(init)",
            engine.getImageRect().getWidth(),
            (int)gem.getAnimatedSprite().getSprite().getTextureArea().getWidth());

        gem.getAnimatedSprite().getSprite().draw(engine);
        assertEquals(
            "Height of the texture engine differente of height of gem(bright false)",
            engine.getImageRect().getHeight(),
            (int)gem.getAnimatedSprite().getSprite().getTextureArea().getHeight());
        assertEquals(
            "Width of the texture engine differente of width of gem(bright false)",
            engine.getImageRect().getWidth(),
            (int)gem.getAnimatedSprite().getSprite().getTextureArea().getWidth());
    }
Dopo
Codice:
    private Gem gem;

    private MockEngine engine;


    @Override
    public void setUp()
    {
        super.setUp();
        engine = (MockEngine)environment.getEngine();
        gem = createGem(DroppableColor.DIAMOND);
    }
    
    public void testGemIsDrawnCorrectly()
    {
        gem.getAnimatedSprite().getSprite().draw(engine);
        
        assertEquals("Wrong left texture position", engine.getImageRect().getLeft(), 0);
        assertEquals("Wrong right texture position", engine.getImageRect().getRight(), 31);
    }


    public void testGemViewSize()
    {
        Sprite sprite = gem.getAnimatedSprite().getSprite();
        sprite.draw(engine);

        assertEquals("Wrong textureArea height", engine.getImageRect().getHeight(), sprite.getTextureArea().getHeight());
        assertEquals("Wrong textureArea Width", engine.getImageRect().getWidth(), sprite.getTextureArea().getWidth());
    }
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 07:48   #47
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Questo è più difficile....
Prima
Codice:
    //TODO: REFACTOR THIS
    public void testUpdateWithThreeFrames()
    {
        AnimatedSprite animatedSprite = createAnimatedSprite(3, 100);
        
        timer.advance(ANIMATION_DELAY);

        animatedSprite.updateAnimation(timer.getTime());

        timer.advance(1);
        animatedSprite.updateAnimation(timer.getTime());

        assertEquals("current frame must be 1", 1,
            animatedSprite.getCurrentFrame());

        timer.advance(99);
        animatedSprite.updateAnimation(timer.getTime());

        assertEquals("current frame must be 2", 2,
            animatedSprite.getCurrentFrame());

    }
Dopo:
Codice:
    public void testUpdateWithThreeFrames()
    {
        AnimatedSprite animatedSprite = createAnimatedSprite(3, 100);
        
        timer.advance(ANIMATION_DELAY + 1);
        animatedSprite.updateAnimation(timer.getTime());

        assertEquals("current frame must be 1", 1,
            animatedSprite.getCurrentFrame());

        timer.advance(99);
        animatedSprite.updateAnimation(timer.getTime());

        assertEquals("current frame must be 2", 2,
            animatedSprite.getCurrentFrame());

    }
Di più non mi è venuto in mente...
... questo però non lo committo
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 09:24   #48
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
E in piu' non ti devi tenere una lista di supporto per sapere se quell'oggetto l'hai gia' visitato o no.

Mi ricordo che subito dopo la FirstPlayable abbiamo trasformato grid da array di celle a lista di droppable proprio per poter itereare solo sugli oggetti dentro la grid.

Il problema che avevo incontrato era l'iterazione mutlipla perche' usavo il foreach (":") , ma con l'iterator il problema si risolve ( o almeno cosi' dovrebbe essere)
Buona idea, fai pure.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 09:27   #49
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
Dopo
Codice:
    public void testGemSpritePositions()
    {
        grid.insertDroppable(gem, 4, 2);
        checkSpritePosition(gem.getAnimatedSprite().getPosition(), 4, 2);

        Droppable anotherGem = createGem(DroppableColor.DIAMOND);
        grid.insertDroppable(anotherGem, 3, 5);
        checkSpritePosition(anotherGem.getAnimatedSprite().getPosition(), 3, 5);
    }


    private void checkSpritePosition(Point spritePosition, int row, int column)
    {
        assertEquals(gridPosition.getX() + Cell.SIZE_IN_PIXELS * column,
            spritePosition.getX());
        assertEquals(gridPosition.getY() + Cell.SIZE_IN_PIXELS * row,
            spritePosition.getY());
    }
Mi piace. Rinomina solo checkSpritePosition() in assertSpritePosition() e poi spezza il test in due test separati, eventualmente nel loro TestCase.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 09:58   #50
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1536
Bonfo per l'eccezione su Cell usa un factory method magari che ritorna null se la cell non e` valida...

Per quant origuarda la lista di droppable: per me dovrebbe essere privata ed inerente all'implementazione interna di Grid. Per questo volevo creare un command per iterare le celle..
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:02   #51
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
i due "refactor this" che stanno in CrushByFlashAction sono una goduria
me ne occupo io

PS: dite addio a CrushByFlashAction perché temo che stia per scomparire
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:20   #52
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
Bonfo per l'eccezione su Cell usa un factory method magari che ritorna null se la cell non e` valida...

Per quant origuarda la lista di droppable: per me dovrebbe essere privata ed inerente all'implementazione interna di Grid. Per questo volevo creare un command per iterare le celle..
Hmmm... sono combattuto. Ci penso su e vi dico. Perche' Iterator e' un Pattern che e' comunque slegato dall'implementazione interna di una classe ma serve a iterare qualunque struttura dati. Ed ha molto senso iterare una griglia, piu' semplice che creare un Command Pattern solo per questo.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:42   #53
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1536
Quote:
Originariamente inviato da fek Guarda i messaggi
Hmmm... sono combattuto. Ci penso su e vi dico. Perche' Iterator e' un Pattern che e' comunque slegato dall'implementazione interna di una classe ma serve a iterare qualunque struttura dati. Ed ha molto senso iterare una griglia, piu' semplice che creare un Command Pattern solo per questo.
un metodo pubblico come getDroppableList() rompe completamente l'incapsulazione di Grid. A questo punto potrei implementarmi qualunque metodo di grid tipo getDroppableAt() al di fuori di essa. Un iterator preserverebbe l'incapsulazione e sarebbe facile cambiare l'implementazione interna di Grid senza dover cambiare 300 file
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:42   #54
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Quote:
Originariamente inviato da 71104 Guarda i messaggi
i due "refactor this" che stanno in CrushByFlashAction sono una goduria
me ne occupo io

PS: dite addio a CrushByFlashAction perché temo che stia per scomparire
Tutto sto sistema degli action è da eliminare .

Cioè, è assurdo che ogni volta che deve essere fatta una iterazione di una Action parte un ciclo che si fa tutta la griglia e poi all'esecuzione dell'azione stessa su un solo droppable parte un altro ciclo che si rifà tutta la griglia (come nel caso di FlashAction).

Ma un sistema ad eventi? Con dei listener ad esempio (come in Swing) . Quando una gemma smette di cadere si può fare che lancia un evento che ad esempio fa il controllo se ci sono gemme da crushare o che la fanno crushare attorno a se e cose del genere. Era già stato pensato?

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:45   #55
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
un metodo pubblico come getDroppableList() rompe completamente l'incapsulazione di Grid. A questo punto potrei implementarmi qualunque metodo di grid tipo getDroppableAt() al di fuori di essa. Un iterator preserverebbe l'incapsulazione e sarebbe facile cambiare l'implementazione interna di Grid senza dover cambiare 300 file
Infatti getDroppableList() deve sparire in favore di un iterator.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:46   #56
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Ma un sistema ad eventi? Con dei listener ad esempio (come in Swing) . Quando una gemma smette di cadere si può fare che lancia un evento che ad esempio fa il controllo se ci sono gemme da crushare o che la fanno crushare attorno a se e cose del genere. Era già stato pensato?

Ciao
No, ma pian piano ci stiamo muovendo verso qualcosa di simile attraverso il refactoring. Le Action devono sparire. Stiamo facendo un gran lavoro per semplificare Droppable e disaccoppiarla da tutto cio' che non le compete (animazioni e sprite ad esempio). Ma esistono non chiare dipendente con le Action e questo si sta rivelando un piccolo scoglio prima della rimozione completa delle Action. Comunque siamo a discreto punto: AnimatedSprite e' gia' quasi del tutto sparito ed e' stata creata una classe DroppableRenderer per gestire animazioni e sprite. Ora la si deve solo tirare fuori da li' definitivamente (e non e' facile). E' il mio compito del prossimo finesettimana.

Ultima modifica di fek : 05-02-2008 alle 10:48.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:48   #57
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Quote:
Originariamente inviato da fek Guarda i messaggi
Le Action devono sparire.
Questo mi compiace assai
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 10:59   #58
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1536
Quote:
Originariamente inviato da fek Guarda i messaggi
Infatti getDroppableList() deve sparire in favore di un iterator.
Faccio io stasera, ho gia` in mente tutti i test

Porca trota mentre postavo qui e` crashato visual studio :o

Tutta colpa del mio uber shader subsurface scattering + raytraced reflections da 10 istruzioni!!111
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 11:31   #59
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Ahaha gli uber shader di subsurface scattering sono sempre i migliori: flip della normale, NdotL rovesciato con triplo carpiato e passa la paura del subsurface scattering
E nessuno se ne accorge mai.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 05-02-2008, 11:32   #60
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
è normale che per il refactor this di CrushByFlashAction io debba aggiungere miliardi di test?

il fatto è che sto spostando CrushByFlashAction.updateCrushesOnFlash in un nuovo metodo FlashingGem.makeCrush, e con esso se ne stanno andando anche tutti i metodi privati "di servizio" che c'erano nella action; alcuni di questi metodi sono andati in FlashingGem, altri in Grid, e siccome quelli finiti in Grid sono pubblici li ho dovuti riscrivere test-driven
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione ASUS ROG Cetra TWS SpeedNova: le migliori nella loro fascia, ma lo stelo va accorciato Recensione ASUS ROG Cetra TWS SpeedNova: le migl...
Google Pixel 8a: può diventare un vero best buy? La recensione Google Pixel 8a: può diventare un vero be...
MSI Vector 16 HX A13V è un notebook gaming che fa sentire la sua potenza (e non solo) MSI Vector 16 HX A13V è un notebook gamin...
In Photoshop arriva l'IA di nuova generazione In Photoshop arriva l'IA di nuova generazione
Recensione realme 12+: sfida la fascia media con un design unico e un display luminosissimo Recensione realme 12+: sfida la fascia media con...
MSI, alimentatori con certificazione PPL...
AI PC Lunar Lake, Intel è sicura:...
Questa chiavetta USB può memorizz...
Kyndryl e NVIDIA: una partnership per ac...
Thermal Grizzly: il raffreddamento direc...
Fujifilm X-T50: tutte le differenze con ...
La serie Razr 50 di Motorola non ha pi&u...
Il Passaporto si può richiedere a...
Microchip cerebrale contro il Parkinson ...
Fujifilm GFX100S II: tutte le differenze...
Missioni suborbitali: Blue Origin torna ...
iPhone 16 Pro Max, il top di gamma integ...
Come ottenere un Samsung Galaxy Watch6 i...
Slack, algoritmi IA allenati con i dati ...
Problemi su iPad Pro OLED: segnalati dis...
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: 23:19.


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