Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 01-05-2006, 01:31   #1
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
[CICLO 15] Storia 2

Storia 2: Bugfix e refactoring. Introduzione di un sistema di playback dei log.



Punti cardine da tenere a mente durante i lavori:

* Mai fare a gara a chi finisce il task per primo, meglio procedere con calma, altrimenti perderemo molto più tempo in seguito
* Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare
* MAI aggiungere elementi non richiesti esplicitamente dai task: se mai serviranno, se ne parlerà nelle prossime storie
* Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante
* Postare sempre la test list PRIMA di mettere mano al codice




Refactoring:
- Environment (cdimauro)
- Grid e trasformazione di BigGem in Droppable
- Omogenizazzione degli update degli State
- Action: definire meglio le responsabilità rispetto a Grid
- SoundBank
- TextureBank
-va finito il refactoring di Droppable ed AbstractDroppable creando le ultime interfacce ed eliminando alcune duplicazioni.
-sono presenti metodi non testati...
-Tutti i TODO del codice dovrebbero sparire in fretta perchè poi si finisce a portarseli dietro a lungo (addirittura c'è un test commentato con scritta una cosa tipo "qualcuno lo faccia passare" )
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.

Ultima modifica di Jocchan : 08-05-2006 alle 12:32.
Jocchan è offline  
Old 02-05-2006, 00:35   #2
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Io proporrei un bel refactoring e conseguente controllo delle Action.

Secondo me, molti metodi di Grid dovrebbero migrare in queste classi: si semplificherebbe grid e le Action diventerebbero molto più chiare, leggibili e probabilmente più semplici.

Primo esempio: in UpdateFallsAction sembra che grid.updateAlsoDroppedGem() venga richiamata 2 volte sulle gemme di una BigGem

Insomma...grid deve proprio dimagrire
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 10:00   #3
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Procedi pure al refactoring.
fek è offline  
Old 02-05-2006, 12:47   #4
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Io l'ho proposto
..ma mica ho il tempo per farlo

Ieri ho dato un occhiata....è un matassa mica facile da sbrogliare
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 12:49   #5
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Visto che le parti di codice da toccare in questa storia sono completamente diverse da quelle della prima storia potete cominciare anche subito a fare refactoring e a modificare.
Non avendo una idea precisa di quello che c'è da fare ho preferito non scrivere task però fate come bonfo. Prima di partire a fare qualcosa provate a scrivere due righe e a proporle sul forum.

ciao
VICIUS è offline  
Old 02-05-2006, 12:57   #6
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
mi offro per il playbak del log
direi 5 giorni(sempre che nn lo dividiate in vari task )
thebol è offline  
Old 02-05-2006, 13:13   #7
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da thebol
mi offro per il playbak del log
direi 5 giorni(sempre che nn lo dividiate in vari task )
Se ci scrivi qualche piccolo task giusto per capire come intendi procedere ti possiamo dare una mano tutti quanti.

ciao
VICIUS è offline  
Old 02-05-2006, 13:18   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Per il playback del log bisogna sincronizzare strettamente i vari timer del gioco...

Nel senso che bisogna fare 1 reactToInput ogni K update...inoltre anche tutti gli altri timeStamp ottenuti nel gioco devono essere sincronizzati con quelli del timer di update... Questo comporta un refactoring di timer che secondo me potrebbe essere di questo tipo:


timer.setTimeStamp(); <---da richiamare una sola volta per ogni ciclo di update
timer.getTimeStamp(); <---che dovrà essere richiamata da TUTTI i metodi che ora hanno bisogno di un timestamp

In questo modo la sinconizzazione dovrebbe essere perfetta...
cionci è offline  
Old 02-05-2006, 13:27   #9
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da VICIUS
Se ci scrivi qualche piccolo task giusto per capire come intendi procedere ti possiamo dare una mano tutti quanti.

ciao
devo pensarci, cmq un idea preliminare potrebbe essere:

precaricare il file di log, con gli eventi key da generare
lavorare a livello di input o inputReactor(devo vedere bene) per assegnare gli eventi al tick giusto

il resto dovrebbe funzionare come ora.

Forse non importa neanche disabilitare i tasti del secondPlayer.

Le uniche perplessita possono essere sul precaricamento del log, potrei leggerlo mano a mano e poi usarlo, per evitare problemi di log molto lunghi, ma preferirei il caricamento manuale. Cmq si puo fare una classe che getta l'evento da assegnare, e poi si cambia l'implementazione.
thebol è offline  
Old 02-05-2006, 13:33   #10
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
altra cosa da valutare è l'inserimento della pair, ma mi sembra che nel log venga scritto il seed, percui bisogna settare nel caso della demo il seed a mano.
thebol è offline  
Old 02-05-2006, 13:40   #11
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da thebol
devo pensarci, cmq un idea preliminare potrebbe essere:

precaricare il file di log, con gli eventi key da generare
lavorare a livello di input o inputReactor(devo vedere bene) per assegnare gli eventi al tick giusto

il resto dovrebbe funzionare come ora.

Forse non importa neanche disabilitare i tasti del secondPlayer.

Le uniche perplessita possono essere sul precaricamento del log, potrei leggerlo mano a mano e poi usarlo, per evitare problemi di log molto lunghi, ma preferirei il caricamento manuale. Cmq si puo fare una classe che getta l'evento da assegnare, e poi si cambia l'implementazione.
Sarebbe bello che il log fosse incapsulato da una classe "Player" che, costruito con un timer, al momento giusto genera la pressione del tasto
Praticamente un generatore di evanti basato su file
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 13:47   #12
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Problema che richiede consiglio.
Vi faccio notare una piccola differenza:
Codice:
bigGem.canMoveDown(grid)

grid.gemCanMoveDown(gem)
I due metodi sono esattamente opposti come impostazione. Qui salta all'occhio il problema che la BigGem non è un droppable. Bisogna riuscire in questa impresa...se qualcuno sa già che è impossibile parli adesso o taccia per sempre

Ed ora guardando bene è uscito pure questo:
Codice:
    public void draw(EngineInterface engine)
    {
        background.draw(engine);

        forEachGem(new DrawGemsAction(this, engine));

        for(BigGem bigGem : bigGems)
        {
            bigGem.draw(engine);
        }
    }
e questo
Codice:
gem.getSprite().draw(engine);
Perchè solo BigGem implementa Drawable e i Droppable no??
Anche questo è da fare
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 13:59   #13
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Bonfo, BigGem può sicuramente essere resa più omogenea... Io proprio finirei di gestirla dome aggregato di Gem ma bisogna prima terminare il refactoring di Droppable che avevamo iniziato e che mi pare sia in sospeso :P
Ufo13 è offline  
Old 02-05-2006, 14:11   #14
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da Ufo13
Bonfo, BigGem può sicuramente essere resa più omogenea... Io proprio finirei di gestirla dome aggregato di Gem ma bisogna prima terminare il refactoring di Droppable che avevamo iniziato e che mi pare sia in sospeso :P
Sospeso
E che manca...???

Io stavo guardando ora se è lecito far si che i Droppable implemntino anche Drawable...infatti mentre BigGem gestisce internamente la Sprite, le gemme non fanno nulla, facciamo tutto noi a mano.

Questa differenza non mi piace molto.
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 14:21   #15
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da Bonfo
Sarebbe bello che il log fosse incapsulato da una classe "Player" che, costruito con un timer, al momento giusto genera la pressione del tasto
Praticamente un generatore di evanti basato su file
la mia idea è circa questa. Bisogna solo capire per bene a quale livello conviene inserirsi.
thebol è offline  
Old 02-05-2006, 14:34   #16
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Il playback non deve essere legato strettamente al timer del gioco e agli update dell'engine.

Quello che mi interessa (e lo spirito del task) e' arrivare a poter scrivere un test di questo tipo:

Codice:
LogPlayback playback = new LogPlayback("log.txt");

int gameTurn = 100;

playback.Run(gameTurn);

Grid playerOne = playback.getPlayerOneGrid();
Grid playerTwo = playback.getPlayerOneGrid();
E da qui in poi mi interessa poter fare operazioni sulle due griglie e poter fare delle assert. Questo ci permettera', dato un log di un bug, di ricreare il bug in un test e poter testare il relativo fix.

Ovviamente l'esecuzione del singolo test non deve impiegare dei minuti, e per questo non voglio che il playback sia legato ad un timer "reale", ma solo al concetto di game turn. Se il concetto non esiste, va aggiunto.
fek è offline  
Old 02-05-2006, 14:35   #17
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Altra cosa che non mi piace. Ovvero che è meglio rendere molto più chiara:
in grid c'è:
move(float,float);
moveTo(float,float);


Se mi dite che la differenza è chiara sto zitto...altrimenti
__________________
Software engineer
Bonfo's Blog
Bonfo è offline  
Old 02-05-2006, 14:38   #18
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Bonfo
Problema che richiede consiglio.
Vi faccio notare una piccola differenza:
Codice:
bigGem.canMoveDown(grid)

grid.gemCanMoveDown(gem)
I due metodi sono esattamente opposti come impostazione. Qui salta all'occhio il problema che la BigGem non è un droppable. Bisogna riuscire in questa impresa...se qualcuno sa già che è impossibile parli adesso o taccia per sempre

Ed ora guardando bene è uscito pure questo:
Codice:
    public void draw(EngineInterface engine)
    {
        background.draw(engine);

        forEachGem(new DrawGemsAction(this, engine));

        for(BigGem bigGem : bigGems)
        {
            bigGem.draw(engine);
        }
    }
e questo
Codice:
gem.getSprite().draw(engine);
Perchè solo BigGem implementa Drawable e i Droppable no??
Anche questo è da fare
Non è male come idea. Se riusciamo ad implementare Droppables in bigGem oltre a usare uno stile comune per entrambi possiamo unire i due foreach. Magari rinominado GemAction forEachGem in DroppableAction forEachDroppable.

ciao
VICIUS è offline  
Old 02-05-2006, 14:49   #19
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Grid è pieno di metodi che riguardano solo le BigGem e questo mi puzza.
Ci sono funzioni come "public boolean gemCanMoveDown(Droppable gem)" che hanno nel nome Gem e poi richiedono un Droppable. Anche questa confusione non mi piace
VICIUS è offline  
Old 02-05-2006, 15:04   #20
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da fek
Il playback non deve essere legato strettamente al timer del gioco e agli update dell'engine.

Quello che mi interessa (e lo spirito del task) e' arrivare a poter scrivere un test di questo tipo:

Codice:
LogPlayback playback = new LogPlayback("log.txt");

int gameTurn = 100;

playback.Run(gameTurn);

Grid playerOne = playback.getPlayerOneGrid();
Grid playerTwo = playback.getPlayerOneGrid();
E da qui in poi mi interessa poter fare operazioni sulle due griglie e poter fare delle assert. Questo ci permettera', dato un log di un bug, di ricreare il bug in un test e poter testare il relativo fix.

Ovviamente l'esecuzione del singolo test non deve impiegare dei minuti, e per questo non voglio che il playback sia legato ad un timer "reale", ma solo al concetto di game turn. Se il concetto non esiste, va aggiunto.
il gameTurn pensavo ci fosse, ma non cè...

in teoria è facile ricavarselo dal log(cè il timeStamp per ogni azione e sapendo il rate degli update si ricava in fretta), ma in effetti sarebbe piu carino introdurlo(anche nella scrittura dei log), in modo da avere una cosa piu uniforme. E cmq perdere il timeStamp dal log in favore del gameTurn non penso sia un problema
thebol è offline  
 Discussione Chiusa


Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Obbligati ad acquistare una scheda madre...
GTA VI su PC? La data non c'è, ma...
Monopattini elettrici, a un anno dal dec...
Tesla Robotaxi, autista di sicurezza si ...
Samsung Galaxy S26: svelate le combinazi...
Microsoft Ignite: arriva Edge for Busine...
OPPO e Lamine Yamal uniscono sport e tec...
Microsoft, NVIDIA e Anthropic siglano un...
SpaceX potrebbe comunicare alla NASA rit...
Scoperte cavità sotterranee scava...
OnePlus anticipa l'arrivo di due nuovi p...
DJI lancia Osmo Action 6: la prima actio...
NASA: conferenza stampa sulla cometa int...
Ex CEO di TSMC passa a Intel: aperta un'...
Gigabyte X870E Aorus Elite X3D, una moth...
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: 02:24.


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