Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico
Motorola propone in fascia media il nuovo Moto G77 5G, uno smartphone che punta sul display AMOLED da 1.5K a 120Hz, e sulla fotocamera da 108 MP con stabilizzazione ottica per affrontare la fascia media. Il tutto insieme a una batteria da 5200mAh in soli 7,3 millimetri di spessore, con una scocca certificata con standard militari
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-04-2009, 13:02   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#/Generics]Oggetti come parametri

Ciao a tutti

Ho un'interfaccia molto semplice così composta:

Codice:
using System;
using Collection.Generics;

namespace UnderstandingGenerics
{

    public interface IGenericTest<T>
    {

        void Add(T businessObject);
        List<T> GetAll();
     }
}


//una prima semplice implementazione:

public class Persona 
{

    private string nome;
    private string cognome;

    public Persona(string nome, string cognome)
    {
        this.nome = nome;
        this.cognome = cognome;
    }
}

public class Rubrica : IGenericTest<Persona>
{
    public void Add(Persona persona)
    {
         //codice che aggiunge la persona alla rubrica
    }

    public List<Persona> GetAll()
    {
         //codice che ottiene tutte le persone presenti in rubrica
    }
}
Ora il mio dubbio:

mi sono reso conto che così facendo sarò obbligato ad definire una classe che implementi i metodi dell'interfaccia per ogni tipo di entità che avrò.
Non so se è un bene o un male... cmq, mi chiedevo se invece avessi una sola classe che implementa l'interfaccia, come potrei passarle dinamicamente gli oggetti che mi interessano ?


Grazie mille

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 13:35   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Forse ho capito:

Codice:
public interface IProva
{

     void Add(Object o);
}


public class Persona
{

     private string nome;

     public Persona(string nome)
     {
          this.nome = nome;
     }
}

public class AzioniRubrica : IProva
{

    public void Add(Object o)
    {

            //codice che aggiunge un oggetto alla rubrica
    }
}


public class Rubrica
{
     
        Persona persona;
        Azienda azienda; //altra classe di prova
        
        public void Test()
        {

           AzioniRubrica a = new AzioniRubrica();
           persona = new Persona("raoul");
           a.Add(persona);
           a.Add(azienda);
        }
}
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 29-04-2009 alle 13:38.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 14:29   #3
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
object no, non usarlo. E' proprio controproducente e costa troppo in termini di errori runtime e anche velocita' di esecuzione.
I generics sono stati introdotti apposta.

Usare un'interfaccia qui, se non si hanno altri requisiti che ne vincolano l'esistenza, mi sembra un po' una stortura.
Userei una classe, eventualmente astratta, per questo specifico problema.

Codice:
namespace UnderstandingGenerics
{

    public abstract class MyBaseCollection<T>
    {        
        protected List<T> myList;
        
        public MyBaseCollection()
        {
             myList=new List<T>();
        }        

        public void Add(T businessObject)
        {
            myList.Add(businessObject);
        }

        public List<T> GetAll()
        {
             return myList;
        }

        // Metodo banale aggiunto perche' altrimenti verrebbe voglia di usare il
        //    generics List direttamente senza dover costruire
       //     questa classe astratta
        public List<T> GetReverse()
        {
             return myList.Reverse().ToList();
        }
     }
}


//una prima semplice implementazione:

public class Persona 
{

    private string nome;
    private string cognome;

    public Persona(string nome, string cognome)
    {
        this.nome = nome;
        this.cognome = cognome;
    }
}

public class Rubrica : MyBaseCollection<Persona>
{
      public Rubrica():base()
      {
      }

      // Metodo per giustificare l'esistenza della classe Rubrica
      //   Altrimenti si sarebbe usata direttamente la generic MyBaseCollection
      //    (ovviamente non piu' Abstract in questo caso)
      public Persona GetFirstByName(string name)
      {
           Persona ret = myList.
                                Where(per => per.nome==name).
                                FirstOrDefault();

            return ret;
      }
}
Una classe astratta ha qui poco senso comunque, non essendoci metodi astratti che devono essere implementati dalle classi derivate.
L'unico effetto sara' quello di impedire la costruzione di un oggetto della classe specifica MyBaseCollection, effetto magari voluto dall'applicazione.

Un primo passo prima di costruire un nuovo Generics, e' quello di usarli. La maggior parte dei problemi si puo' risolvere usando Generics gia' fatti e classi normali. Per esigenze piu' complesse si puo' valutare la scrittura di una nuova classe Generic, cosa non proprio banale anche a causa della sintassi un po' forzata e poco leggibile.
Una volta fatta pero', almeno, l'uso di un Generic ben fatto risulta essere semplice.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 15:28   #4
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Ciao gugoXX

In linea di massima ho capito la tua spiegazione, e, con le seguenti premesse:

1) Sto usando le interfacce perchè sono il mio attuale argomento di studio
2) non è un'applicazione reale, solo didattica

mi chiedevo però se:

anzichè avere un'entità Rubrica, io avessi un'entità CalendarioAttività, se dovessi aggiungere più oggetti diversi fra di loro a CalendarioAttività, sarei costretto ad implementare i metodi dell'interfaccia o della classe astratta per ogni tipo di oggetto che devo aggiungere?

cioè:

Codice:
public interface IPlanning<T>
{
    void Add(T oggetto);
    
}

public class Planning : IPlanning<Persona>
//già qui... mi blocco ...
//posso solo aggiungere un oggetto di tipo persona al mio planning, 
//ma se dovessi aggiungere un appuntamento?
oppure, se considero invece le cose dal punto di vista di un'azienda credo che:

un'azienda ha dei dipendenti
un'azienda ha dei fornitori

quindi mi viene in mente un: azienda.Add(dipendente) e azienda.Add(fornitore)

e di conseguenza penso che potrei avere un'unico gestore di queste azioni.

Oppure è sbagliato proprio il mio approccio ?


Grazie di cuore

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 15:52   #5
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
L'approccio non e' sbagliato, anche se non e' ortodosso.
Lo puo' diventare se devi giustificare le interfaccie per altri motivi.
Ovviamente per questo esempio non solo non userei le interfaccie, ma come detto non userei neppure un nuova classe Generics, quanto piu' userei direttamente le Collection offerte dai namespace Generics.

Comunque, per la tua implementazione ti e' sufficiente implementare l'interfaccia 2 volte...

Codice:
public class Planning : IPlanning<Dipendente>, IPlanning<Fornitore>
Per cui dovrai implementare le 2 diverse Add specifiche.
Il controsenso sta qui, dato che molto probaiblmente il codice per le 2 add sara' identico, e quindi il tuo legittimo dubbio se l'uso delle interfaccie sia proprio questo.
Ebbene, ovviamente non lo e'. Raramente si inseriscono tecnicismi che forzano la riscrittura del codice, quanto piu' invece per ridurlo.

Ti faccio un esempio concreto in cui l'uso delle interfaccie puo' essere utile.
Immagina di avere un Database remoto a San Francisco, non da te manutenuto, che espone qualche Stored Procedure implementate su questo Database e che tu potrai chiamare.
Potrebbe venire voglia semplicemente di costruire una classe Helper, con tanti metodi quante sono le stored procedure.
Ti sono pero' arrivate delle direttive dall'alto, che ti consigliano fortemente di non legare l'implementazione pensando all'esistenza di un Database, perche' probabilmente in futuro l'azienda passera' ad usare WebService per l'accesso ai dati, che circonera' il Database che sara' di fatto reso invisibile, vietando quindi in futuro l'accesso diretto al database a qualsiasi utilizzatore aziendale.
Verra' creato quindi da qualuno un WebService che esporra' tanti metodi quante erano le stored procedure che tu prima avresti potuto utilizzare.
Pero' nel frattempo questo WebService non c'e'.
E tu vorresti evitare di riscrivere tanto codice.
Parti anche dal presupposto di avere una classe, come probabile che sia, che gia' sa come gestire connection string, aprire connessioni al database, eseguire query, lanciare stored procedure e ritirarne i risultati, etc.

Uno dei possibili modi e' questo:
- Crei l'interfaccia IRemoteSanFrancisco che contiene tanti metodi quante sono le stored procedure
- Crei una classe RemoteDBSanFrancisco: DBGeneric, IRemoteSanFrancisco che deriva dalla tua DBGeneric e che sa quindi come lavorare sui Database, e che implementa anche l'interfaccia.
- Ciascun metodo implementato dall'interfaccia sara' quindi la chiamata alla stored procedure relativa, ovviamente usando le facilities presenti nella classe base DBGeneric

- Crei quindi anche la classe RemoteWSSanFrancisco: IRemoteSanFrancisco, ovvero la classe che nell'implementazione di ciascun metodo remoto andra' a chiamare il WebMethod relativo al WebService, invece che accedere direttamente al DB.

Per concludere e mettere la ciliegina, doterai la tua soluzione di un SanFranciscoFactory, ovvero una classe con un Helper statico in grado di costruire un oggetto che implementa l'interfaccia IRemoteSanFrancisco
Codice:
public static class SanFranciscoFactory
{
    public static IRemoteSanFrancisco GetMyRemoteSanFrancisco()
    {
          // Qui si crea un'istanza della RemoteDBSanFrancisco
          //oppure della RemoteWSSanFrancisco, a seconda di cosa c'e' scritto nei file di configurazione
          // e se ne restituisce l'istanza
          if (config qualcosa)
            return new RemoteDBSanFrancisco();
          else
            return new RemoteWSSanFrancisco();
    }
}

// L'utilizzatore quindi eseguira'

....
   IRemoteSanFrancisco proxy = SanFranciscoFactory.GetMyRemoteSanFrancisco();
   proxy.Metodo1(var1, var2, var3);
   PippoClass inst = proxy.Metodo2(var4, var5);
...
senza sapere se Metodo1 e Metodo2 passeranno attraverso DB call oppure WebMethod call. In futuro sara' sufficinete cambiare l'istanza dell'interfaccia che dovra' restiture il Factory per agire mediante il primo o il nuovo metodo.
Tutto il codice che "usa" i vai Metodo1, Metodo2, etc. non sara' da cambiare.

PS: Questo discorso si puo' fare di nuovo con le abstract class invece che con le interfaccie. Farlo con le interfaccie pero' abilita' una metodologia avanzata di test che si chiama Mock, molto utile, direi indispensabile, se si usa il Test Driven Development.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 29-04-2009 alle 15:56.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 16:31   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi

>cut<

Codice:
public class Planning : IPlanning<Dipendente>, IPlanning<Fornitore>
Per cui dovrai implementare le 2 diverse Add specifiche.
Il controsenso sta qui, dato che molto probaiblmente il codice per le 2 add sara' identico, e quindi il tuo legittimo dubbio se l'uso delle interfaccie sia proprio questo.
Ebbene, ovviamente non lo e'. Raramente si inseriscono tecnicismi che forzano la riscrittura del codice, quanto piu' invece per ridurlo.
ora mi è molto più chiaro!!

Quote:
Ti faccio un esempio concreto...

....

Uno dei possibili modi e' questo:
- Crei l'interfaccia IRemoteSanFrancisco che contiene tanti metodi quante sono le stored procedure
mmm... quindi se non ci sarà più un metodo generico Add, ma ogni Add o metodo sarà relativo alla stored oppure, in assenza di esse, direttamente pensato per la specifica tabella? per es.: Add(Persona p), Add(Cliente c)

cioè:

Codice:
public interface IAzienda
{
    void CallProcedureAddCliente();
    void CallProcedureAddPersona();
    void CallProcedureAddFornitore();
    ......
}

public class DBManager : IAzienda
{

     //metodi per le connessioni etc..

     public void CallProcedureAddCliente()
     {
          blabla "insert into clienti..."
     }
     //etcetera..
}

//riducendo un pò l'ambito ad un umile winform:
//mi trovo sul form dei clienti
private buttonCliente_click(Object sender, EventArgs e)
{

      DBManager db = new DBManager();
      db.CallProcedureAddCliente();
}
Per la parte finale sto ancora cercando di capire il discorso relativo alla classe Factory
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 16:35   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
mmm... quindi se non ci sarà più un metodo generico Add, ma ogni Add o metodo sarà relativo alla stored oppure, in assenza di esse, direttamente pensato per la specifica tabella? per es.: Add(Persona p), Add(Cliente c)

cioè:

Codice:
public interface IAzienda
{
    void CallProcedureAddCliente();
    void CallProcedureAddPersona();
    void CallProcedureAddFornitore();
    ......
}

public class DBManager : IAzienda
{

     //metodi per le connessioni etc..

     public void CallProcedureAddCliente()
     {
          blabla "insert into clienti..."
     }
     //etcetera..
}

//riducendo un pò l'ambito ad un umile winform:
//mi trovo sul form dei clienti
private buttonCliente_click(Object sender, EventArgs e)
{

      DBManager db = new DBManager();
      db.CallProcedureAddCliente();
}
Per la parte finale sto ancora cercando di capire il discorso relativo alla classe Factory
Nono, non stavo piu' parlando di Generics, ma solo di Interfacce, dato che mi sembrava non le stessi usando in maniera produttiva.

Era quindi solo un esempio di uso delle interfaccie, senza generics di mezzo.
Proponevo un metodo per ciascuna stored procedure. Se la stored procedure si chiama
"UpdateUserState"
Avrai una entry
void UpdateUserState(int UserId, string UserState);

Che verra' implementata dalla classe del Database chiamando la stored procedure
e dalla classe del WebService chiamando il WebMethod.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 29-04-2009, 22:21   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
PS: Questo discorso si puo' fare di nuovo con le abstract class invece che con le interfaccie. Farlo con le interfaccie pero' abilita' una metodologia avanzata di test che si chiama Mock, molto utile, direi indispensabile, se si usa il Test Driven Development.
A proposito di test: usando TypeMock (per quanto riguarda .NET) puoi eseguire il mock di qualunque chiamata a metodo anche se non usi le interfacce, ad esempio puoi mockkare anche metodi del framework, veramente impressionante l'utilizzo che se ne può fare.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 08:29   #9
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da tomminno Guarda i messaggi
A proposito di test: usando TypeMock (per quanto riguarda .NET) puoi eseguire il mock di qualunque chiamata a metodo anche se non usi le interfacce, ad esempio puoi mockkare anche metodi del framework, veramente impressionante l'utilizzo che se ne può fare.
Bello, provo a dargli un'occhiata allora, potrebbe sempre essere utile.
Se poi (io) scrivessi interfacce invece che interfaccie sarebbe anche meglio.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 14:38   #10
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Nono, non stavo piu' parlando di Generics, ma solo di Interfacce, dato che mi sembrava non le stessi usando in maniera produttiva.

Era quindi solo un esempio di uso delle interfaccie, senza generics di mezzo.
Proponevo un metodo per ciascuna stored procedure. Se la stored procedure si chiama
"UpdateUserState"
Avrai una entry
void UpdateUserState(int UserId, string UserState);

Che verra' implementata dalla classe del Database chiamando la stored procedure
e dalla classe del WebService chiamando il WebMethod.
Grazie gugoXX

Ma come sempre per ogni chiarimento nascono altri millemila dubbi

Se ho ben compreso quindi, in presenza dell'interfaccia, se il DB di San Francisco ha 200 stored procedure, avrò duecento metodi da definire nell'interfaccia e, di conseguenza, da riscrivere nella classe che implementerà l'interfaccia?

...cerco di spiegare meglio il mio dubbio:

Ogni volta che dovrò avere a che fare con il db, utilizzerò una sola classe che implementa l'interfaccia con tutti i suoi metodi ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 14:53   #11
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Grazie gugoXX

Ma come sempre per ogni chiarimento nascono altri millemila dubbi

Se ho ben compreso quindi, in presenza dell'interfaccia, se il DB di San Francisco ha 200 stored procedure, avrò duecento metodi da definire nell'interfaccia e, di conseguenza, da riscrivere nella classe che implementerà l'interfaccia?
Si', nell'esempio fatto quello sarebbe stato il panorama.
Diciamo che ci sono modi ulteriori per semplificare la scrittura di codice in quei casi, ma l'idea sarebbe stata comunque quella di dover implementare 200 metodi in ciascuna delle 2 classi.
Implementare come ora non impoterebbe piu' di tanto.

Quote:
...cerco di spiegare meglio il mio dubbio:

Ogni volta che dovrò avere a che fare con il db, utilizzerò una sola classe che implementa l'interfaccia con tutti i suoi metodi ?
Ogni volta che avrai a che fare con questo "servizio", userai una classe sola, che implementa l'interfaccia con tutti i suoi metodi.
Che poi i metodi di questo servizio siano chiamate a database o chiamate a WebService, a chi questa classe la usa non importera' piu'.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 14:59   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
....rieccomi....

Altra piccolissima questione:

lo scenario da te descritto sarebbe lo stesso in assenza di stored procedures lato Db ?

per es.:

Codice:
//codice interfaccia

void InsertCliente(Cliente c)
void InsertProdotti(Prodotto p)
?

Grazie mille.

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 21:56   #13
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
....rieccomi....

Altra piccolissima questione:

lo scenario da te descritto sarebbe lo stesso in assenza di stored procedures lato Db ?

per es.:

Codice:
//codice interfaccia

void InsertCliente(Cliente c)
void InsertProdotti(Prodotto p)
?

Grazie mille.

RaouL.
Si', certo.
Stored procedure o query dirette oppure LINQ to Sql, oppure Entity framework, etc.
Tutti modi buoni per leggere dati dal database, e quindi per poter adottare la soluzione ad interfacce, ovvero se si prevede in futuro di utilizzare anche altri modi,oppure se si conta di testare con NMock che prevedono appunto l'uso di interfacce.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Moto G77: display AMOLED e buona autonomia per il midrange economico Recensione Moto G77: display AMOLED e buona auto...
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Intel aggiorna i driver Arc Pro: fino al...
La Cina blocca l'acquisizione di Manus d...
Le batterie al sodio di CATL raggiungono...
Samsung rischia 36 giorni di stop totale...
Huawei annuncia l'arrivo della serie Wat...
L'auto elettrica più veloce del m...
ASUS ha rilasciato il cavo salva-GPU: 50...
TeamViewer Intelligent Agent si rinnova ...
Il conflitto in Iran fa salire i prezzi ...
B05 di Leapmotor in Italia: hatchback el...
Addio app? OpenAI prepara lo smartphone ...
MacBook Air 13" con chip M5 in offerta s...
Un round pre seed da 500mila euro per Va...
Non si butta via niente: Intel fa soldi ...
Cos'è Windows K2: il piano segreto di Mi...
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: 19:41.


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