Italian Classifiche

LucaMs

Expert
Licensed User
Longtime User
Sia per pigrizia mentale, sia per scrivere ancora qualche post (facendo così contento SOLO
@Star-Dust :D), anziché spremere i due vecchissimi neuroni, chiedo a voi (sapendo che non risponderete semplicemente con spiegazioni tecniche ma allegherete una classe già bella e pronta :p).

Mettiamo che io voglia mantenere in un db (remoto) alcune classifiche legate a dei giochi.

Mettiamo che io conservi solo i primi 10 UserID e Points in classifica; però vorrei creare classifiche giornaliere, settimanali, mensili ed assolute.

Ho una bella funzione (query su MySql) che mi restituisce data-ora UTC (dalla macchina, ovviamente, che io non so manco dove sia, sempre ovviamente).

Se un utente inviasse UserID, Points, GameID e basta, il mio orrido PHP potrebbe ricavare la suddetta data-ora (time stamp).

Però tra un utente che giocasse adesso qui a Roma, dove sono circa le 20:10, e uno che giochi a Pechino, dove sono circa le 2 di notte di "domani"... c'aggia a fa?


Grazie per l'attenzione, per gli script php e la classe b4a (b4x, se preferite)
:p
 

Star-Dust

Expert
Licensed User
Longtime User
Cos'é un UTC? A quanto lo fanno al Kilo? E soprattutto se lo inzuppo nel latte mi sale l'acido?
 

Star-Dust

Expert
Licensed User
Longtime User

LucaMs(Erel) said:

E quindi con il signor UTC hai risolto il problema... di che ti lamenti?

P.S: Però non mi hai risposto se posso inzuppare UTC nel latte la mattina:(
 

LucaMs

Expert
Licensed User
Longtime User
E' un bel problemino, ANCHE perché se hai un misero spazio web ed al massimo puoi usare PHP, hai dei limiti; ad esempio, non è che puoi far girare un servizio che crei un nuovo record o tabella ogni ora (ammesso che questo serva al mio scopo, inizio adesso a pensare alla soluzione, visto che da voi AVARI non credo che riceverò la soluzione :D - scherzo, ovviamente, non vi ritengo avari... taccagni, piuttosto :p)
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Io purtroppo non ho capito come aiutarti ammesso che sappia farlo.
PHP, asp ecc.. per me sono sconosciuti. Vorrei saperne qualcosa ma non ho mai il tempo. Qualche mese fa ho attivato IIS su Windows per avere un server ASP per fare delle prove ma non ci ho capito molto e poi il poco tempo mi ha imposto la disfatta..
 

Star-Dust

Expert
Licensed User
Longtime User
Consolati: io ancora non so come evitare che IIS parta in automatico sul mio PC (installato una vita fà e mai più usato)
:D
Quello te lo posso dire io, formatta il pc e IIS cessa.
 

LucaMs

Expert
Licensed User
Longtime User
Per il fatto di non poter creare "servizi" sulla macchina host, suppongo che una soluzione potrebbe essere di verificare se sia necessario creare un nuovo record (o tabella, ancora da decidere) nel momento in cui si riceva il punteggio da un "client". Cioè, in quel momento, "prelevare" l'UTC e... etc.

Cmq, SE mi sveglio, provo a pensarci ancora :)
 

Star-Dust

Expert
Licensed User
Longtime User
Per il fatto di non poter creare "servizi" sulla macchina host, suppongo che una soluzione potrebbe essere di verificare se sia necessario creare un nuovo record (o tabella, ancora da decidere) nel momento in cui si riceva il punteggio da un "client". Cioè, in quel momento, "prelevare" l'UTC e... etc.

Cmq, SE mi sveglio, provo a pensarci ancora :)
la cosa più importante è identificare il dispositivo. Devi creare un device_id, anche se sembra impossibile con Android 6.
 

LucaMs

Expert
Licensed User
Longtime User
la cosa più importante è identificare il dispositivo. Devi creare un device_id, anche se sembra impossibile con Android 6.
Ho appena pubblicato un paio di post, al riguardo. Comunque non c'entra col mio "problema".

Il problema è far entrare nelle stesse 24 ore (ma vale anche per settimana e mese) tutti i punteggi ottenuti dai "client" (ci sarebbe pure il problema che un hacker potrebbe inviare punteggi astronomici, anzi, c'è anche questo problema, ma è un altro discorso, da fare in un thread separato).

[sempre relativamente al fatto che non si possa avviare un "servizio" su macchina non tua, non c'è quindi nemmeno il modo di determinare la scadenza del periodo (24h, ad esempio) e quindi dichiarare il vincitore finale e comunicarlo]
 

udg

Expert
Licensed User
Longtime User
Avrei qualche spunto aggiuntivo..tanto per complicarti la vita..eheh

Nel post#1 hai detto di voler mantenere solo i primi 10 migliori risultati (per ogni gioco). Io sono un pessimo giocatore, ma mi fa piacere vedere che poco alla volta miglioro anche senza mai raggiungere i top-players (lo so che questa definizione ti piace..). Quindi un primo tema sarebbe quello di registrare comunque il miglior punteggio di ciascun giocatore.

Per la questione temporale, direi che dipende da come la vuoi trattare. Mi spiego. Se ritieni prevalente data/ora locali al giocatore, allora ti fai inviare quelle e le classifiche dipenderanno dal momento in cui ciascuno ha giocato. Nel tuo esempio, ammesso che entrambi ottengano un super punteggio tale da entrare in classifica, il romano si ritroverebbe al top di quella di oggi, mentre il cinese apparirebbe il giorno successivo. Per ognuno dei due ciò corrisponderebbe alla loro realtà.
In alternativa potresti pensare di uniformare tutto alla data/ora del server e quindi registri i dati provenienti dal giocatore con un timestamp locale al server che poi utilizzi per le classifiche "normate" su quel riferimento. Basta dichiararlo all'inizio e dovresti evitare mugugni e commenti negativi.

ps: vai di DB senza dubbio. Ci sarebbe anche il KVS (se non ricordo male il nome) ma non so fino a che punto sia "più semplice", soprattutto se, come nel tuo caso, sai utilizzare i DB.

UUUHUUUUUHHHHHUUUU
 

Star-Dust

Expert
Licensed User
Longtime User
Ho appena pubblicato un paio di post, al riguardo. Comunque non c'entra col mio "problema".

Il problema è far entrare nelle stesse 24 ore (ma vale anche per settimana e mese) tutti i punteggi ottenuti dai "client" (ci sarebbe pure il problema che un hacker potrebbe inviare punteggi astronomici, anzi, c'è anche questo problema, ma è un altro discorso, da fare in un thread separato).

[sempre relativamente al fatto che non si possa avviare un "servizio" su macchina non tua, non c'è quindi nemmeno il modo di determinare la scadenza del periodo (24h, ad esempio) e quindi dichiarare il vincitore finale e comunicarlo]
non centra con il tuo problema ma aiuta ad arrivare a 34 post al giorno :p:p
 

Star-Dust

Expert
Licensed User
Longtime User
Ho appena pubblicato un paio di post, al riguardo. Comunque non c'entra col mio "problema".

Il problema è far entrare nelle stesse 24 ore (ma vale anche per settimana e mese) tutti i punteggi ottenuti dai "client" (ci sarebbe pure il problema che un hacker potrebbe inviare punteggi astronomici, anzi, c'è anche questo problema, ma è un altro discorso, da fare in un thread separato).

[sempre relativamente al fatto che non si possa avviare un "servizio" su macchina non tua, non c'è quindi nemmeno il modo di determinare la scadenza del periodo (24h, ad esempio) e quindi dichiarare il vincitore finale e comunicarlo]
ps in molti giochi vedo che le statistiche non stanno ne in cielo ne in terra.. Tu contrariamente agli altri vuoi fare una classifica realistica e affidabile ... Ma perché?

Tanto la maggioranza saranno pessimi giocatori.. Gli basta vedere il proprio record a la top 10...
 

LucaMs

Expert
Licensed User
Longtime User
Avrei qualche spunto aggiuntivo..tanto per complicarti la vita..eheh
Grazie; ho una vita talmente serena e felice che mi serve qualche nuovo diversivo :p:mad:

i top-players (lo so che questa definizione ti piace..).
Beh, preferisco sentire i giornalisti sportivi pronunciare tUrn over, ma anche questa mi ha fatto piacere, in effetti, W gli inglesismi, soprattutto mal pronunciati.

Quindi un primo tema sarebbe quello di registrare comunque il miglior punteggio di ciascun giocatore.
Questo lo faccio localmente ;)

Per la questione temporale, direi che dipende da come la vuoi trattare. Mi spiego. Se ritieni prevalente data/ora locali al giocatore, allora ti fai inviare quelle e le classifiche dipenderanno dal momento in cui ciascuno ha giocato. Nel tuo esempio, ammesso che entrambi ottengano un super punteggio tale da entrare in classifica, il romano si ritroverebbe al top di quella di oggi, mentre il cinese apparirebbe il giorno successivo. Per ognuno dei due ciò corrisponderebbe alla loro realtà.
In alternativa potresti pensare di uniformare tutto alla data/ora del server e quindi registri i dati provenienti dal giocatore con un timestamp locale al server che poi utilizzi per le classifiche "normate" su quel riferimento. Basta dichiararlo all'inizio e dovresti evitare mugugni e commenti negativi.

In effetti, a naso, ho la sensazione di dover creare classifiche duplicate, per il giorno in corso e quello successivo (va beh, per due giorni consecutivi).
Ma l'ideale sarebbe che a tutti i giocatori comparisse la classifica del giorno xx/xx/xxxx e ancora non mi è chiaro come fare (ammesso che si possa).

Nota che mentre il timestamp della macchina host posso ricavarlo usando una query MySql, dai dispositivi non so come si possa fare ed utilizzare l'ora di sistema non è un modo affidabile, in quanto potrebbe non essere aggiornata.
 

udg

Expert
Licensed User
Longtime User
Ma perché?
Per complicarsi la vita! E rinviare la data di pubblicazione di qualche altro mese..eheh
Ormai dovresti conoscerlo. Fondamentalmente è un super analista; scava così in dettaglio su ogni aspetto (cosa che personalmente apprezzo molto) che però rischia di non arrivare mai ad una conclusione.
Il guaio è che il mondo delle app è basato sulla velocità. Una porcheria pensata, realizzata e pubblicata in 48ore tende ad aver maggior valore di un ottimo prodotto, pensato con cura, realizzato al meglio e pubblicato dopo mesi o anni di lavoro.
 
Top