Torna indietro   Hardware Upgrade Forum > Software > Programmazione

In Photoshop arriva l'IA di nuova generazione
In Photoshop arriva l'IA di nuova generazione
È disponibile in fase beta la funzione Genertive Fill avanzata di Photoshop, basata su Firefly 3. Più qualità e controllo, grazie soprattutto alle immagini di riferimento, e integrazione perfetta, ma l'utilizzo dell'IA non è più illimitato e gratuito.
Recensione realme 12+: sfida la fascia media con un design unico e un display luminosissimo
Recensione realme 12+: sfida la fascia media con un design unico e un display luminosissimo
Il nuovo dispositivo top della Serie 12 arriva dopo le varianti "Pro" e si configura come una proposta di gamma media ben equilibrata, capace di rivolgersi a un pubblico molto ampio formato sia di utenti esigenti, sia di persone attente al risparmio. Non adotta il SoC più potente del mercato, ma punta di catturare le attenzioni attraverso un display AMOLED da 120Hz e 2000 nit, una fotocamera principale di qualità e, soprattutto, un design particolare.
OnePlus Pad Go: un tablet economico perfetto per l'intrattenimento. La recensione
OnePlus Pad Go: un tablet economico perfetto per l'intrattenimento. La recensione
OnePlus Pad Go è un tablet Android di fascia media che offre un'esperienza di intrattenimento immersiva grazie al display 2.4K, all'audio Dolby Atmos, alla connettività LTE e a un design premium, il tutto a un prezzo molto competitivo. Ecco tutti i dettagli nella nostra recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-03-2006, 14:01   #1041
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da Jocchan
Ho notato che le flashing gem saltano fuori piuttosto spesso, nonostante il misero 2% di probabilità. Quindi, probabilmente dovremo introdurre un qualche artificio per limitarle, e che non le renda al contempo TROPPO rare.
Mi piace il calcolo delle probabilità..e quindi ho approfittato dell'occasione per dedicare un po' di tempo a Diamonds (che continuo a seguire ma era un sacco di tempo che non leggevo il codice).

Flashing Gems:
Innanzitutto le Flashing Gems hanno il 2% di probabilità di essere create singolarmente....e questo significa che si ha circa il 4% di possibilità di trovare almeno una Flashing Gem in una coppia di gemme. Significa che in media ogni 25 coppie di gemme una contiene una Flashing Gem....ecco perché sono molto meno rare del 2%!
Impostando il config ad 1% oppure modificando il codice affinché la percentuale del 2% sia intesa "per coppia di gemme", probabilmente otterremo il risultato voluto...a meno che anche 1 Flash su 50 coppie sia troppo!

Topazi rari:
Inoltre, nel leggere il codice delle probabilità ho notato delle strane condizioni che rendono il topazio meno probabile delle altre gemme, circa 13.6% di probabilità contro il 16.3% delle altre gemme su un totale di 800.000 gemme.
Il codice (in GemFactory) è il seguente:
Codice:
    public Gem createRandomGem()
    {
        int module = GEM_TYPES.length - 1;

        if(firstGemExtraction)
        {
            module = GEM_TYPES.length;
            firstGemExtraction = false;
        }

        int randomIndex = randomGenerator.extract(module);

        if(randomIndex >= nextToLastGemIndex)
        {
            randomIndex = (randomIndex + 1) % GEM_TYPES.length;
        }

        nextToLastGemIndex = lastGemIndex;
        lastGemIndex = randomIndex;

        resetChestExtraction();
        return create(GEM_TYPES[randomIndex]);
    }
Rimuovendo la parte in grassetto, si ottiene una perfetta distribuzione delle probabilità tra le gemme.
Non ho ancora analizzato se la sua rimozione rompe qualche test....

Memory Leak:
Nel fare i test sulle probabilità ho avuto occasione di creare parecchie gemme, ed ho quindi notato un consumo di circa 1 GB di RAM per creare 10.000 gemme....si tratta di ben 100kb a gemma
Creavo le gemme con un questo codice:
Codice:
            
for (int x= 0 ; x < 100000;x++)
            {
                Gem gemma = gemFactory.createRandomDroppable();
                gemma.cleanup();
            }
Chiamare .cleanup() non era sufficiente... Avevo provato anche a metterci un'invocazione al Garbage Collector ogni 1000 iterazioni ma non sembrava aver alcun effetto
Una volta raggiunto il limite della memoria RAM + swap su disco, Diamonds crashava con la finestrella di bugreport.. che appare 2 volte

Ultima modifica di BlueDragon : 18-03-2006 alle 14:34.
BlueDragon è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 14:04   #1042
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Grandissimo, BD
Il problema della frequenza non è tanto nella percentuale, dato che a ridurla ulteriormente sarebbero TROPPO rare, quanto nel fatto che la randomizzazione dovrebbe essere controllata verso il basso (ovvero, ci vorrebbe un limite minimo per l'intervallo tra una flashing gem e l'altra).
Diluire ulteriormente la sua occorrenza significa che in diverse partite potrebbe non saltare mai fuori, ed avremmo il problema opposto.
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 14:33   #1043
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Molto probabilmente ho scovato un altro paio di bug.

Giocando ho preparato una crush da 4-5x ammucchiando diverse gemme e bauli. Dopo averla innescata, però, il contatore è arrivato ad un assurdo 8x (Astounding).

Questo perchè molto probabilmente c'è un errore di fondo nell'implementazione del conteggio delle crush (e probabilmente è anche colpa di come abbiamo impostato storia e task): a rigor di logica, il contatore della lunghezza deve aumentare solo se l'evento scatenante di una cancellazione è stato un'altra cancellazione.

Allo stato attuale, invece, il gioco considera come crush anche quando, posizionando una coppia di bauli, vengono cancellate due gemme di colore diverso già ferme. Questo non ha senso, dato che la seconda cancellazione non è conseguenza della prima.

Quindi, bisogna vedere di sistemare il tutto in modo da considerare, per le crush, solo i pezzi che cadono per riempire i vuoti. Ne parlerò con Vicius, e probabilmente sarà uno dei task per il prossimo ciclo.

L'altro bug fondamentale riguarda il contatore mostrato sotto l'area di gioco dell'avversario: dopo la (lunga) combo di cui sopra, il contatore in questione segnava il valore di 5. Avevo già notato delle incoerenze, e questo evento ne è stato la conferma. Direi che bisogna dare un'occhiata al suo funzionamento
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 14:59   #1044
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Topazi Rari:
Ho provato ad eliminare il codice in bold evidenziato nel mio post precedente, e l'unico test che fallisce è il seguente:
Codice:
   public void testRandomGemSequence()
    {
        Gem gem = factory.createRandomGem();
        assertEquals("does not return Gem of type topaz", TOPAZ, gem.getType());

        gem = factory.createRandomGem();
        assertEquals("does not return Gem of type diamond", DIAMOND, gem
            .getType());

        gem = factory.createRandomGem();
        assertEquals("does not return Gem of type diamond", DIAMOND, gem
            .getType());

        gem = factory.createRandomGem();
        assertEquals("does not return Gem of type ruby", RUBY, gem.getType());

        gem = factory.createRandomGem();
        assertEquals("does not return Gem of type ruby", RUBY, gem.getType());

        gem = factory.createRandomGem();
        assertEquals("does not return Gem of type sapphire", SAPPHIRE, gem
            .getType());
    }*/
E' chiaro che fallisca visto che la factory è creata nel setup() con un MockRandomGenerator cui è stato fornito il seguente indice di valori:
Codice:
private final int randomIntArray[] = { 4, 0, 4, 0, 0, 1 };
Questi valori corrispondono alla creazione in sequenza di un topazio, un diamante, un topazio, un diamante, un diamante, un rubino...basta modificare i tipi di gemme nel test e passa nuovamente.


Direi quindi che lo strano codice (forse rimasto da una precedente gestione in cui nello stesso array vi erano sia tipi di gemme che chest) può essere eliminato

EDIT: Ho eliminato il codice in bold ed anche il metodo resetGemExtraction(), che in pratica non serviva più a nulla eliminato quell'if nel createRandomGem().
Committato.

Ultima modifica di BlueDragon : 18-03-2006 alle 15:34.
BlueDragon è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:48   #1045
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da BlueDragon
Memory Leak:
Nel fare i test sulle probabilità ho avuto occasione di creare parecchie gemme, ed ho quindi notato un consumo di circa 1 GB di RAM per creare 10.000 gemme....si tratta di ben 100kb a gemma
Creavo le gemme con un questo codice:
Codice:
            
for (int x= 0 ; x < 100000;x++)
            {
                Gem gemma = gemFactory.createRandomDroppable();
                gemma.cleanup();
            }
Ho fatto partire una micro test sul profiler con circa 20000 gemme. Ed in effetti il leak è presente e anche mooolto evidente. Questa è la situazione dopo circa 3000 gemme.

Non ho idea di dove sia il problema, anche perché sto profiler mi è totalmente nuovo, ma a naso penso sia dovuto dalle routine di log o qualcosa che ha a che fare con le stringhe. 142000 AbstractStringBuilder, 182000 String.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:49   #1046
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da Jocchan
Grandissimo, BD
Il problema della frequenza non è tanto nella percentuale, dato che a ridurla ulteriormente sarebbero TROPPO rare, quanto nel fatto che la randomizzazione dovrebbe essere controllata verso il basso (ovvero, ci vorrebbe un limite minimo per l'intervallo tra una flashing gem e l'altra).
Diluire ulteriormente la sua occorrenza significa che in diverse partite potrebbe non saltare mai fuori, ed avremmo il problema opposto.
è fattibile senza troppi problemi(basta mettere un contatore in gemFactory)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:52   #1047
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da VICIUS
Ho fatto partire una micro test sul profiler con circa 20000 gemme. Ed in effetti il leak è presente e anche mooolto evidente. Questa è la situazione dopo circa 3000 gemme.


Non ho idea di dove sia il problema, anche perché sto profiler mi è totalmente nuovo, ma a naso penso sia dovuto dalle routine di log o qualcosa che ha a che fare con le stringhe. 142000 AbstractStringBuilder, 182000 String.

ciao

le stringhe in java vengono passate per copia(l'ho scoperto meno di un mese fa, ed è da un anno che lavoro su java )
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:53   #1048
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da Jocchan

Allo stato attuale, invece, il gioco considera come crush anche quando, posizionando una coppia di bauli, vengono cancellate due gemme di colore diverso già ferme. Questo non ha senso, dato che la seconda cancellazione non è conseguenza della prima.
in teoria nn dovrebbe essere cosi, provo a scrivere un test(ma secondo me cè gia)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 17:58   #1049
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da thebol
in teoria nn dovrebbe essere cosi, provo a scrivere un test(ma secondo me cè gia)
Codice:
    public void testDoubleCrush()
    {
        //int delayCrush = config.getInteger("DelayBetweenCrushes");
        
        insertAndUpdate(createGem(DIAMOND), 13, 1);
        insertAndUpdate(createGem(EMERALD), 13, 2);
        insertAndUpdate(createGem(DIAMOND_CHEST), 12, 1);
        insertAndUpdate(createGem(EMERALD_CHEST), 12, 2);
        
        
        insertAndStopGemsPair();
        makeAllGemsFall();

        controller.update(timer);
        assertEquals(2, grid.getNumberOfGems());
        assertEquals(2, grid.getCrushedGemsCounter());
        assertEquals(1, grid.getChainCounter());
        
        
    }
fallisce sul getChainCounter, che infatti ritorna 2 :|
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 18:07   #1050
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Trovata la magagna. Texture.cleanup non funziona.
Codice:
    public void cleanup()
    {
        if(texID != 0)
        {
            final IntBuffer textures = BufferUtils.createIntBuffer(16);
            textures.put(texID);
            glDeleteTextures(textures);
            texID = 0;
            System.out.println("cancellata!");
        }
        else
        {
            System.out.println("mierda!");
        }

        loaded = false;
    }
Stampa sempre e solo l'imprecazione perchè texID è sempre 0.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 18:11   #1051
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12075
mmm..
e km mai si ritrova texid sempre a zero?
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2006, 18:26   #1052
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da ^TiGeRShArK^
mmm..
e km mai si ritrova texid sempre a zero?
Non ho mai scritto niente in opengl in vita mia. Dobbiamo aspettare qualche esperto. Anche perché questa parte del codice è stata scritta assolutamente non seguendo il TDD.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 10:04   #1053
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da BlueDragon
Topazi Rari:EDIT: Ho eliminato il codice in bold ed anche il metodo resetGemExtraction(), che in pratica non serviva più a nulla eliminato quell'if nel createRandomGem().
Committato.
Ottima analisi e ottimo lavoro

Mi piace che dopo molto tempo che non hai guardato il codice ti e' stato relativamente facile andare a scovare il problema delle probabilita' dei topazi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 10:05   #1054
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da thebol
fallisce sul getChainCounter, che infatti ritorna 2 :|
Bel test. Hai tempo di farlo passare entro oggi? Voglio prendere una tag del codice prima di partire.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 10:07   #1055
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da VICIUS
Non ho mai scritto niente in opengl in vita mia. Dobbiamo aspettare qualche esperto. Anche perché questa parte del codice è stata scritta assolutamente non seguendo il TDD.

ciao
Hmmm provo a dargli un'occhiata io a meno che Raffaele non si faccia avanti.

Ecco cosa accade a non scrivere i test, si perde piu' tempo dopo
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 12:04   #1056
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da fek
Bel test. Hai tempo di farlo passare entro oggi? Voglio prendere una tag del codice prima di partire.
entro oggi pome forse, entro sera sicuro.

Anche perche in quella zona ci starebbe bene un bel refactoring(fare una classe abstract Crush, e 2 implementazione, una per le crush da chest e una quelle da flash). Poi in grid si fa un metodo che itera sulla griglia, a cui si passa una di queste classi.

non penso sia complicato, il piu saranno i test da modificare e aggiungere.
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 12:20   #1057
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da VICIUS
Trovata la magagna. Texture.cleanup non funziona.
[...]
Stampa sempre e solo l'imprecazione perchè texID è sempre 0.

ciao
Ok. La situazione non è cosi drammatica. La cleanup non va solo nei test perché non c'è nessun Display reale istanziato e opengl non funziona senza. Probabilmente la grande occupazione di ram dei test che ha cercato di risolvere cionci era dovuta a questo problema.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 12:22   #1058
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da VICIUS
Trovata la magagna. Texture.cleanup non funziona.
Codice:
    public void cleanup()
    {
        if(texID != 0)
        {
            final IntBuffer textures = BufferUtils.createIntBuffer(16);
            textures.put(texID);
            glDeleteTextures(textures);
            texID = 0;
            System.out.println("cancellata!");
        }
        else
        {
            System.out.println("mierda!");
        }

        loaded = false;
    }
Stampa sempre e solo l'imprecazione perchè texID è sempre 0.

ciao
Dov'è la cleanup...non la trovo
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 19-03-2006 alle 12:26.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 15:27   #1059
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: California
Messaggi: 11781
Quote:
Originariamente inviato da VICIUS
Ok. La situazione non è cosi drammatica. La cleanup non va solo nei test perché non c'è nessun Display reale istanziato e opengl non funziona senza. Probabilmente la grande occupazione di ram dei test che ha cercato di risolvere cionci era dovuta a questo problema.

ciao
Si puo' fare un mock che non allochi fisicamente la texture nei test (tanto non serve).
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2006, 17:04   #1060
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da fek
Si puo' fare un mock che non allochi fisicamente la texture nei test (tanto non serve).
Si può fare. Chi ci pensa ?

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
OnePlus Pad Go: un tablet economico perfetto per l'intrattenimento. La recensione OnePlus Pad Go: un tablet economico perfetto per...
Per Huawei l’IA è una questione di storage. Presentate soluzioni dedicate e un SSD da 128 TB Per Huawei l’IA è una questione di storag...
Recensione Google Pixel Tablet: in ritardo ma un ottimo primo passo! Recensione Google Pixel Tablet: in ritardo ma un...
Jensen Huang: compenso aumentato del 60%...
Assassin's Creed Shadows è uffici...
Tomb Raider: ufficiale lo show TV di Ama...
Intel Thunderbolt Share: connettere e us...
Ghost of Tsushima per PC: il multiplayer...
OPPO Reno11 F 5G: i punti di forza di un...
Windows 11 su Nintendo Switch? Possibile...
Hisense conferma la sua ascesa nel merca...
Sony Xperia 1 VI ufficiale, con display ...
NAVEE porta in Italia i monopattini S40 ...
ROG Tessen: il controller pieghevole di ...
Google sta portando ChromeOS sui disposi...
Google I/O 2024: il protagonista è...
iOS: arriva l'emulatore dell'originale P...
OpenAI potrebbe consentire contenuti per...
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: 21:23.


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