Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-04-2006, 10:39   #1
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
Refactoring delle gemme e controllo ad eventi degli effetti della caduta

Principalmente questo refactoring si dovrà occupare di:

- creare una gerarchia di classi che includerà tutte quelle che possiamo definire Droppable (Stone, Gem, Flashing Gem, Chest, BigGem).

Secondo me a questo punto ci dovremmo fermare e verificare che tutto funzioni e tutti i test passino...

Il refactoring da effettuare successivamente sarà:

- creare un'interfaccia DroppableController, da cui deriveranno tutti i Controller delle rispettive classi della gerarchia sopra

- implementare un meccanismo in ogni classe della gerararchia che allochi e restituisca il controller che si dovrà occupare di gestire gli eventi da applicare ai Droppable

- implementare gli eventi ed un gestore di eventi (che potrebbe essere il controller)
Ad esempio questa dovrebbe essere la gestione dell'evento "una gemme si è fermata" :

DropapbleController controller = droppable.getController();
controller.onHalt(grid);

- la gestione dell'evento "tutte le gemme sono ferme" provocherà i crush, che lavoreranno in maniera diversificata a seconda del Droppable

Questa è la mia proposta...a voi
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 11:17   #2
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Faccio 2 puntualizzazioni per vedere se ho capito

1) Ci vuole ovviamente l'interfaccia Droppabel
2) La gestione degli eventi comporta anche la creazione di 2 interfaccie:
-quella di chi genera gli eventi
-quella di chi li ascolta, il listener
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 12:06   #3
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
Quote:
Originariamente inviato da Bonfo
1) Ci vuole ovviamente l'interfaccia Droppabel
Sì, ora fek preferirebbe un'interfaccia, sinceramente io preferirei una classe base
Quote:
Originariamente inviato da Bonfo
2) La gestione degli eventi comporta anche la creazione di 2 interfaccie:
-quella di chi genera gli eventi
-quella di chi li ascolta, il listener
Dipende un po' da come organizzaimo la cosa...
Se esisterà una sola classe evento e ci sarà un tipo a discriminare l'evento generato, basta uno switch (soluzione che scala male)...

Se invece facciamo una classe evento per ogni evento da gestire allora bisogna definire un'interfaccia per il listener, mentre per chi genera gli eventi non ci sarà bisogno di interfaccia...

Vediamo un po' come gestirla...

I generatori di eventi potrebbero essere due: Grid e GridController... Questi sono sicuri...

Il listener dovrebbe essere GridController... Ditemi voi come pensereste di organizzare la cosa...

PS: ho pensato che, dopo, ad eventi sarebbe possibile gestire qualsiasi cosa che fa GridController...come la gestione dei vari timestamp...l'inserimento di una nuova gemma... Ditemi voi...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 12:18   #4
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da cionci
Sì, ora fek preferirebbe un'interfaccia, sinceramente io preferirei una classe base
Perchè non tutte e due...interfaccia e classse astratta che implementa tale interfaccia

Quote:
Originariamente inviato da cionci
Il listener dovrebbe essere GridController...
Nella mia testa era il contrario
GridControler genera l'evento e il CrushGemListener si registra all'evento
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 12:27   #5
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
mmmhhh...quindi te faresti un listener per ogni evento ? Non ci avevo pensato sinceramente...

Io invece farei così, supponendo di definire una classe per ogni evento:
Codice:
class DroppableHaltedEvent
{
   public processEvent(Listener listener)
   {
       listener.onDroppableHalted();
   }
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 12:59   #6
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quindi tu faresti generare a GridController degli eventi che poi GrdiContyroller deve gestire....

Mi sembra un po' masochistico

A parte gli scherzi, penso che l'idea principale che deve guidare il refactoring di GridController è prorio quella di dividere le responsabilità.
Quello che secondo me dobbiamno fare è eliminare quell'update in GridController e trasformarlo in una semplice generazione di eventi.

Ora per amore di Ingegneria del Software dovrebbe essere possibile che all'evento "gemsPair ferma" possano corrispondere più azioni, ovvero più listener.

Quindi in conclusione io farei:
- N listener in base alle responsabilità, ovvero a che cosa deve fare. Io vedo bene come listener i GemAction...alla fine sono quelli i compiti da svolgere.
- M eventi che notificano i momenti chiave del gioco

in realtà ciò che penso io è un pattern observer, dove gli observable sono "eventi", ovvero accadimenti del gioco
Codice:
------------------------------------------------------------------
GridController.registerEventGemsPairStop(CrushGemListener);

------------------------------------------------------------------
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        notifyEvent()
------------------------------------------------------------------
public void notifyEvent()
{
      processEvent()
}

Così a GridController la facciamo dimagrire in fretta
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:23   #7
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
La proposta mi sembra buona, preferisco ovviamente l'interfaccia e poi, eventualmente, una classe astratta base (proprio se necesaria). L'importante e' suddividere il refactoring in piccoli passi verificabili e ben testabili. Non voglio un lungo refactoring che ha bisogno di essere concluso prima che il tutto torni a funzionare. E poi, voglio che le cose si semplifichino: non fatevi prendere la mano dal refactoring aggiungendo piu' flessibilita' di quella strettamente necessaria. Cose tipo per l'Amore dell'Ingegneria del Software mi suonano gia' male: diciamo per l'amore di semplicita' e fate le cose semplici
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:48   #8
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da fek
Cose tipo per l'Amore dell'Ingegneria del Software mi suonano gia' male: diciamo per l'amore di semplicita' e fate le cose semplici


Comunque era ironico
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 03-04-2006 alle 13:50.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 14:54   #9
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
Ripeto...io non farei un listener per ogni azione da svolgere...
Io invece a questo punto farei un solo listener che contenga i vari metodi da richiamare...

Codice:
class DroppableHaltedEvent implements GridEvent
{
   Droppable droppable;

   public DroppableHaltendEvent(Droppable droppable)
   {
       this.droppable = droppable;
   }

   public processEvent(GridEventHandler handler)
   {
       handler.onDroppableHalted(droppable);
   }
}


class GridEventHandler
{
   ....
   public notifyEvent(GridEvent event)
   {
      event.processEvent(this);
   }

   public onDroppableHalted(Droppable droppable)
   {
      DropapbleController controller = droppable.getController();
      controller.onHalt(grid); 
   }
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 17:19   #10
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Cionci a me la tua soluzione piace molto
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 17:32   #11
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Piace anche a me. A occhio non c'e' un'indirezione di troppo? (non ci giuro affatto, probabilmente ho perso qualcosa io).
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 17:35   #12
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ò c'è una cosa che non mi sconfiffera...questo affare resta sicrono

Il mio dubbio è questo:

Codice:
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        notifyEvent(new DroppableHaltedEvent (droppable))
In pratica appena avviene un evento viene eseguito l'handler...allora tanto vale chiamare questo, no ????
Codice:
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        handler.onDroppableHalted(droppable);
Potremmo desincronizzarlo ????? Avrebbe senso ??? Sarebbe utile Semplificherebbe ?

Intendo praticamente mettere in coda gli eventi...

Dentro update di GridController avverrà l'update di Grid (che metterà in coda alcuni eventi)...verrà eseguito il resto del codice di Gridcontroller (che metterà in coda altri eventi)....a questo punto potrebbe essere chiamata gridEventHandler.processEventList() che non farà alltro che eseguire glie venti dal più vecchio al più recente...

Che ne dite ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 17:35   #13
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
Quote:
Originariamente inviato da fek
Piace anche a me. A occhio non c'e' un'indirezione di troppo? (non ci giuro affatto, probabilmente ho perso qualcosa io).
Vedi sopra...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:08   #14
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da cionci
Che ne dite ?
La seconda versione tutta la vita, perche' toglie un'indirezione. Al momento non vedo motivo per desincronizzare, ci interessa solo portare fuori da Grid il codice di gestione dell'evento.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:16   #15
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da cionci
Che ne dite ?
Scusate...ma notifyEvent() è senza parametro.
Io la metteri perchè all'interno di questo metodo, anche privato, vengono invocati tutti i handler.onDroppableHalted(droppable);....

....però se si usa un solo handler, ovvero listener, va bene uguale
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:21   #16
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
Quote:
Originariamente inviato da Bonfo
vengono invocati tutti i handler.onDroppableHalted(droppable);....
No, ne viene invocato solo uno...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 21:06   #17
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
Ma quando ci lavoriamo su questo refactoring ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 23:52   #18
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Propongo un'altra cosa:

all'interno di GridController quando una GemsPair viene droppata viene eseguito qualcosa, viene atteso un tot di tempo, di nuovo viene eseguito qualcosa etc...

Non sarebbe bello un observer pattern con tot observers?
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2006, 02:23   #19
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
é quello che volevo fare con i listener, ovveo gli observer
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2006, 07:17   #20
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
io butto li un idea...

introdurre una specie di pattern state in gridController(uno per quando ci sono le gemme in movimento, uno per quando si fa cadere le gemme che possono cadere, uno per le crush, uno per l'update delle stone, etc), che contengano un metodo update(che faccia il lavoro per quello stato), e che restituiscano lo stato successivo del gridController. In modo da simulare una specie di macchina a stati.
thebol è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
I nuovi Samsung Galaxy Watch 9 si mostra...
Einsten aveva ragione, di nuovo: captate...
Top 10 offerte Amazon: 5 sono partite qu...
AI Conf 2026: l'intelligenza artificiale...
Samsung Galaxy S26 scende a 711,49€: un ...
Dopo il maxi blackout, la Spagna cambia ...
Costa meno di un MacBook e fa molto di p...
Ecco tutti i robot aspirapolvere rimasti...
Più partite da seguire in contemporanea?...
389€ sono veramente pochi per questo PC ...
Vesuvius Challenge: srotolato in digital...
Torna oggi a soli 101,79€ grazie a un co...
Steam Machine: addio al 4K 60 fps. Valve...
Cosa aumenterà di prezzo dopo com...
Altro che 2028: Micron ha blindato prezz...
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:01.


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