Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart
Mentre Ubisoft vorrebbe chiedere agli utenti, all'occorrenza, di distruggere perfino le copie fisiche dei propri giochi, il movimento Stop Killing Games si sta battendo per preservare quella che l'Unione Europea ha già riconosciuto come una forma d'arte. Abbiamo avuto modo di parlare con Daniel Ondruska, portavoce dell'Iniziativa Europa volta a preservare la conservazione dei videogiochi
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione
Abbiamo provato il nuovo Galaxy S25 Edge, uno smartphone unico per il suo spessore di soli 5,8 mm e un peso super piuma. Parliamo di un device che ha pro e contro, ma sicuramente si differenzia dalla massa per la sua portabilità, ma non senza qualche compromesso. Ecco la nostra prova completa.
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto
Pensato per il professionista sempre in movimento, HP Elitebook Ultra G1i 14 abbina una piattaforma Intel Core Ultra 7 ad una costruzione robusta, riuscendo a mantenere un peso contenuto e una facile trasportabilità. Ottime prestazioni per gli ambiti di produttività personale con un'autonomia lontano dalla presa di corrente che permette di lavorare per tutta la giornata
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-03-2013, 22:19   #1
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
sqlite jdbc

Sto usando il driver SQLiteJDBC (https://lists.hcoop.net/listinfo/sqlitejdbc) ma e' estremamente lento!!

Qualcuno conosce qualcosa di meglio?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 01-03-2013, 23:04   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Non ho ancora avuto modo di usarlo ma per un mio progetto pensavo di provare questo:
https://bitbucket.org/xerial/sqlite-jdbc
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 07:19   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Non ho ancora avuto modo di usarlo ma per un mio progetto pensavo di provare questo:
https://bitbucket.org/xerial/sqlite-jdbc
Good to know. Lo provo subito, grazie mille!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:10   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ho provato, ma devo dire che le prestazioni sono deludenti anche in questo caso.

Quantomeno e' meglio del primo driver che ho provato: addirittura il primo driver falliva nell'inserimento di record nonostante i dati fossero corretti (un ciclo che inseriva migliaia di record, ma ogni tanto non ce la faceva). Mi sono messo a contare quanti record venivano inseriti e quanti persi, ed erano piu' quelli persi che inseriti.

Ho provato ad inserire record con centinaia di campi, che poi e' il caso che mi interessa. Cmq le prestazioni sono davvero terribili, soprattutto confrontate a quelle che si ottengono con altri linguaggi.

Se non ci sono altri driver jdbc per sqlite, forse e' il caso di riferirsi ad un altro database (se le prestazioni contano, ovviamente)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:28   #5
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Mi chiedo solo se le così scarse performance sono dovute al driver o a SQLite. Se qualcuno potesse fare una prova con python o con qualcos'altro...
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:49   #6
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Il driver è un layer in più alla fine. Non so com'è implementato, ma non dovrebbe mangiarsi tutto questo tempo.

Provare con Python è banale, perché c'è il modulo già integrato, e l'interfaccia con SQLite è diretta (richiama le API della DLL, peraltro già inclusa nel pacchetto standard di Python).
Ecco qui la documentazione. Uno script di prova si realizza in una manciata di minuti.

Consiglio Python 2.7 per fare qualche esperimento. Setup, Avanti, Avanti, Fine, e da shell:

python NomeDelloScriptDiProva.py
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 11:51   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Ma se ho già installato l'ultima versione posso installare anche la 2.7 senza problemi?

@sottovento: puoi postare il codice di prova che hai usato?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 12:21   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Ho scritto questo codice di test:
Codice:
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

# Create table
c.execute('''create table two_hundred_one (id integer,
										   str_1 text, str_2 text, str_3 text, str_4 text, str_5 text, str_6 text, str_7 text, str_8 text, str_9 text, str_10 text, str_11 text, str_12 text, str_13 text, str_14 text, str_15 text, str_16 text, str_17 text, str_18 text, str_19 text, str_20 text, str_21 text, str_22 text, str_23 text, str_24 text, str_25 text, str_26 text, str_27 text, str_28 text, str_29 text, str_30 text, str_31 text, str_32 text, str_33 text, str_34 text, str_35 text, str_36 text, str_37 text, str_38 text, str_39 text, str_40 text, str_41 text, str_42 text, str_43 text, str_44 text, str_45 text, str_46 text, str_47 text, str_48 text, str_49 text, str_50 text, str_51 text, str_52 text, str_53 text, str_54 text, str_55 text, str_56 text, str_57 text, str_58 text, str_59 text, str_60 text, str_61 text, str_62 text, str_63 text, str_64 text, str_65 text, str_66 text, str_67 text, str_68 text, str_69 text, str_70 text, str_71 text, str_72 text, str_73 text, str_74 text, str_75 text, str_76 text, str_77 text, str_78 text, str_79 text, str_80 text, str_81 text, str_82 text, str_83 text, str_84 text, str_85 text, str_86 text, str_87 text, str_88 text, str_89 text, str_90 text, str_91 text, str_92 text, str_93 text, str_94 text, str_95 text, str_96 text, str_97 text, str_98 text, str_99 text, str_100 text,
										   int_1 integer, int_2 integer, int_3 integer, int_4 integer, int_5 integer, int_6 integer, int_7 integer, int_8 integer, int_9 integer, int_10 integer, int_11 integer, int_12 integer, int_13 integer, int_14 integer, int_15 integer, int_16 integer, int_17 integer, int_18 integer, int_19 integer, int_20 integer, int_21 integer, int_22 integer, int_23 integer, int_24 integer, int_25 integer, int_26 integer, int_27 integer, int_28 integer, int_29 integer, int_30 integer, int_31 integer, int_32 integer, int_33 integer, int_34 integer, int_35 integer, int_36 integer, int_37 integer, int_38 integer, int_39 integer, int_40 integer, int_41 integer, int_42 integer, int_43 integer, int_44 integer, int_45 integer, int_46 integer, int_47 integer, int_48 integer, int_49 integer, int_50 integer, int_51 integer, int_52 integer, int_53 integer, int_54 integer, int_55 integer, int_56 integer, int_57 integer, int_58 integer, int_59 integer, int_60 integer, int_61 integer, int_62 integer, int_63 integer, int_64 integer, int_65 integer, int_66 integer, int_67 integer, int_68 integer, int_69 integer, int_70 integer, int_71 integer, int_72 integer, int_73 integer, int_74 integer, int_75 integer, int_76 integer, int_77 integer, int_78 integer, int_79 integer, int_80 integer, int_81 integer, int_82 integer, int_83 integer, int_84 integer, int_85 integer, int_86 integer, int_87 integer, int_88 integer, int_89 integer, int_90 integer, int_91 integer, int_92 integer, int_93 integer, int_94 integer, int_95 integer, int_96 integer, int_97 integer, int_98 integer, int_99 integer, int_100 integer)''')

t = ('Text_1', 'Text_2', 'Text_3', 'Text_4', 'Text_5', 'Text_6', 'Text_7', 'Text_8', 'Text_9', 'Text_10', 'Text_11', 'Text_12', 'Text_13', 'Text_14', 'Text_15', 'Text_16', 'Text_17', 'Text_18', 'Text_19', 'Text_20', 'Text_21', 'Text_22', 'Text_23', 'Text_24', 'Text_25', 'Text_26', 'Text_27', 'Text_28', 'Text_29', 'Text_30', 'Text_31', 'Text_32', 'Text_33', 'Text_34', 'Text_35', 'Text_36', 'Text_37', 'Text_38', 'Text_39', 'Text_40', 'Text_41', 'Text_42', 'Text_43', 'Text_44', 'Text_45', 'Text_46', 'Text_47', 'Text_48', 'Text_49', 'Text_50', 'Text_51', 'Text_52', 'Text_53', 'Text_54', 'Text_55', 'Text_56', 'Text_57', 'Text_58', 'Text_59', 'Text_60', 'Text_61', 'Text_62', 'Text_63', 'Text_64', 'Text_65', 'Text_66', 'Text_67', 'Text_68', 'Text_69', 'Text_70', 'Text_71', 'Text_72', 'Text_73', 'Text_74', 'Text_75', 'Text_76', 'Text_77', 'Text_78', 'Text_79', 'Text_80', 'Text_81', 'Text_82', 'Text_83', 'Text_84', 'Text_85', 'Text_86', 'Text_87', 'Text_88', 'Text_89', 'Text_90', 'Text_91', 'Text_92', 'Text_93', 'Text_94', 'Text_95', 'Text_96', 'Text_97', 'Text_98', 'Text_99', 'Text_100', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)


for id in range(100000):
    c.execute('insert into two_hundred_one values (' + str(id+1) + ', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', t)
	
# Save (commit) the changes
conn.commit()

# We can also close the cursor if we are done with it
c.close()
Ma come prendo il tempo?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 12:49   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Da Python stesso tramite il modulo timeit. Guardate gli esempi.

Altrimenti ci sono programmi esterni, come ptime (se non ricordo male).
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Ma se ho già installato l'ultima versione posso installare anche la 2.7 senza problemi?
Certo. Io ho Python 2.5, 2.6, 2.7, e 3.2 installati.

P.S. Non usare range, ma xrange per Python <= 2.7.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 12:53   #10
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Sto usando il driver SQLiteJDBC (https://lists.hcoop.net/listinfo/sqlitejdbc) ma e' estremamente lento!!

Qualcuno conosce qualcosa di meglio?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 13:01   #11
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Mi sono permesso di dare una sistemata al codice:
Codice:
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

NumStrings = 100
NumIntegers = 100

# Create table
c.execute('create table two_hundred_one (id integer, %s)' % ', '.join(['str_%s text' % i for i in xrange(1, NumStrings + 1)] + ['int_%s integer' % i for i in xrange(1, NumIntegers + 1)]))

t = tuple(['Text_%s' % i for i in xrange(1, NumStrings + 1)] + range(1, NumIntegers + 1))

for id in range(100000):
    c.execute('insert into two_hundred_one values (' + str(id + 1) + ', ?' * (NumStrings + NumIntegers) + ')', t)
  
# Save (commit) the changes
conn.commit()

# We can also close the cursor if we are done with it
c.close()
Così è più adattabile per cambiare velocemente quante stringhe e interi utilizzare.

Non l'ho testato, ma credo che dovrebbe andare.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 13:22   #12
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Bello, mi chiedevo giusto come si potesse fare una cosa del genere. Quello che hai fatto nel ciclo for lo sapevo fare ma non l'ho fatto per ridurre al minimo le operazioni aggiuntive a execute, però ora è molto più manutenibile.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 13:31   #13
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Allora basta precalcolare la query, e anche quel problema viene risolto:
Codice:
import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

NumStrings = 100
NumIntegers = 100

# Create table
c.execute('create table two_hundred_one (id integer, %s)' % ', '.join(['str_%s text' % i for i in xrange(1, NumStrings + 1)] + ['int_%s integer' % i for i in xrange(1, NumIntegers + 1)]))

t = tuple(['Text_%s' % i for i in xrange(1, NumStrings + 1)] + range(1, NumIntegers + 1))

Query = 'insert into two_hundred_one values (%s' + ', ?' * (NumStrings + NumIntegers) + ')'

for id in xrange(1, 100001):
  c.execute(Query % id, t)
  
# Save (commit) the changes
conn.commit()

# We can also close the cursor if we are done with it
c.close()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 14:41   #14
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Giusto! Grande! Appena ho tempo aggiungo la misurazione del tempo ma sul mio pc non so se sarà molto significativo senza fare un confronto con la versione java perché ho un hd ssd...
Comunque a naso ci mette circa 20 secondi.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 15:19   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Scusate, avevo dei lavori da fare fuori casa (fra l'altro, oggi qui il termometro segna -28).
Il codice non e' di facile pubblicazione poiche' si tratta di lettura dei record da un file e poi di insert nel database. Preparero' un programmino di prova, ma ovviamente sara' banale.

Nei miei test, ho provato a commentare tutte le righe relative all'inserimento dei dati in sqlite per verificare quanto pesasse il resto dell'applicazione, ed il risultato e' che l'operazione e' terminata in un batter d'occhio. Nel caso rimetta le operazioni sul database, ci impiega decine di minuti per portarla a termine. Evidentemente l'overhead della mia applicazione non e' significativo.

Anche su internet ci si lamenta delle prestazioni del driver jdbc.
Per inciso: qualcuno ha misurato - anche spannometricamente - le prestazioni della versione pitonata?

Ok, ora ceno. Dopo preparo i test.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 15:44   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
A questo punto non sarebbe meglio utilizzare l'interfaccia nativa SQLite(anziché ODBC) tramite JNI?

http://docs.oracle.com/javase/7/docs...tro.html#wp725
http://en.wikipedia.org/wiki/Java_Native_Interface
http://192.9.162.55/docs/books/jni/
http://www.ibm.com/developerworks/java/tutorials/j-jni/
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 17:19   #17
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
Certo che si puo'. Si tratta pero' di reimplementare il driver. Lo posso mettere nella gia' lunga mia to-do list, nella speranza di aver tempo per farlo.

A questo punto e' piu' facile provare un altro database, pero'.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 17:52   #18
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Certo che si puo'. Si tratta pero' di reimplementare il driver. Lo posso mettere nella gia' lunga mia to-do list, nella speranza di aver tempo per farlo.

A questo punto e' piu' facile provare un altro database, pero'.
No, che reimplementare il driver. Devi solo mappare quelle poche funzioni che ti servono. Crei una dll/so proxy che ti mappa le 2/3(4/5) funzioncine dalla dll/so SQLite.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 18:18   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Nientedimeno se ne trovano di già bell'e pronti:

http://code.google.com/p/sqlite4java/



EDIT: Eh! va che roba:

Codice:
    SQLiteConnection db = new SQLiteConnection(new File("/tmp/database"));
    db.open(true);
    ...
    SQLiteStatement st = db.prepare("SELECT order_id FROM orders WHERE quantity >= ?");
    try {
      st.bind(1, minimumQuantity);
      while (st.step()) {
        orders.add(st.columnLong(0));
      }
    } finally {
      st.dispose();
    }
    ...
    db.dispose();

Ultima modifica di Vincenzo1968 : 02-03-2013 alle 18:21.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 02-03-2013, 18:24   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Eh! nientedimeno!

http://www.codicefacile.it/tutorials...ava+con+SQLite


Il binding per Java

Specifico subito che esistono molti bindings per Java, tutti disponibili dal sito ufficiale. In generale esistono i bindings native e quelli 100% Java. I primi sfruttano la dll originale di SQLite, e forniscono solo un'interfaccia a tale dll tramite una libreria jar. I bindigs 100% invece hanno prestazioni leggermente minori, ma hanno il vantaggio di essere totalmente multipiattaforma, proprio perchè 100% Java.
Anche i metodi di comunicazione possono essere diversi. In questo tutorial vedremo come utilizzare un binding 100% Java a cui si può accedere con il classico JDBC, e quindi il package java.sql.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Samsung Galaxy S25 Edge: il top di gamma ultrasottile e leggerissimo. La recensione Samsung Galaxy S25 Edge: il top di gamma ultraso...
HP Elitebook Ultra G1i 14 è il notebook compatto, potente e robusto HP Elitebook Ultra G1i 14 è il notebook c...
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
La Corea del Sud vorrebbe costruire una ...
Rilasciati i primi risultati delle anali...
Robot umanoidi low cost? Unitree ci prov...
Non solo Rocket Lab, anche Avio potrebbe...
Chips Act UE: 41,5 milioni di euro a Eph...
Ryzen Threadripper 9000 al debutto il 31...
Nuovi coupon nascosti Amazon (aggiorname...
Chatbot e salute mentale: nascono i prim...
Prezzi in ribasso su Amazon su tante com...
Eureka J15 Ultra spiazza la concorrenza ...
Stufi di tagliare il prato? Questi robot...
Anche Dyson si adegua: sconti fino a 200...
Mi sono rotto un dito, e le avventure gr...
Tutto vero: costa solo 899€ il portatile...
Lefant M330Pro da 5.000Pa a 104€ o i due...
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: 00:48.


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