Benvenuto Ospite,
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:


Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-


Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum

Sito web Arcade Database

Il database che raccoglie tutte le informazioni sui giochi, video, screenshot e tanto altro ancora

Moderatore: Moderatore ADB

Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3408
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 37 volte
Grazie Ricevuti: 56 volte
Contatta:

Re: Sito web Arcade Database

Messaggio da motoschifo »

Ambienti locali configurati ed operativi, quindi tra un paio di settimane dovrei iniziare con lo sviluppo "serio" del sito.
Clone locale/backup del server in hosting quasi ultimato, per fortuna il download incrementale è molto piccolo (solo un paio di giga rispetto al vecchio) altrimenti per scaricare 500GB di dati ci avrei messo un intero mese...
Il software in questi anni è migliorato parecchio ed è giusto allinearsi alle ultime release.

Mentre cercavo di capire il motivo dell'errore sull'xml non caricato ho spulciato alcune parti ed ho visto che ci sono ampi margini di miglioramento. Al tempo avevo limiti architetturali pesanti, oltre a vincoli lato php, ora posso sfruttare alcuni accorgimenti che dovrebbero non solo migliorare l'esperienza utente ma alleggerire il carico cpu/db lato server.
Tante belle cose... serve solo tempo per metterle in pratica e per fare esperimenti :D
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase
Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3408
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 37 volte
Grazie Ricevuti: 56 volte
Contatta:

Re: Sito web Arcade Database

Messaggio da motoschifo »

Per i più curiosi (tecnicamente parlando), ecco l'ambiente locale proxmox con la macchina clone, mentre come sviluppo sto passando da vscode+addon a vim+tmuxinator (in pratica editor stile terminale) con servizi docker web/db/php separati.
In allegato si vedono le statistiche del server locale e il sync in corso sugli ultimi file aggiornati.
Un bel salto di qualità rispetto a qualche anno fa.
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase
Avatar utente
idro
Newbie
Newbie
Messaggi: 88
Iscritto il: 23/08/2013, 16:31
Città: Roma
Località: Santa Marinella

Re: Sito web Arcade Database

Messaggio da idro »

[cancellato]
Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3408
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 37 volte
Grazie Ricevuti: 56 volte
Contatta:

Re: Sito web Arcade Database

Messaggio da motoschifo »

Proviamo se il nuovo forum funziona, intanto vi aggiorno sulla situazione sito.

Come scritto sopra ho creato i 3 ambienti locali: legacy (vecchio/attuale), dev (in sviluppo), next (prototipo).
Il vecchio mi serve principalmente per sistemare errori rapidamente fino a quando non aggiornerò, il prototipo per riferimento dato che non ha quasi nulla di dipendenza dal vecchio.

Ora sto completando la copia di tutte le pagine nel nuovo motore, ed intanto pulisco il superfluo (temi, statistiche, login demo, ecc.)
Il sito si mostrerà sostanzialmente identico al vecchio, ma internamente userà una logica di routing completamente nuova.
Da qui, una alla volta cambierò le pagine e potrò aggiornare con regolarità.
Dovrei aver mantenuto tutto funzionante: utenti, liste, ricerche, link, api, import.
Questo tipo di lavori si fa normalmente su progetti enterprise, dove va garantita la continuità, ed in effetti con i milioni di righe di codice questo sito è decisamente troppo ingombrante e poco ottimizzato :D

Piccola nota tecnica: nei giorni scorsi ho messo in ban (provvisorio o definitivo) poco meno di 10 mila indirizzi IP totali. Ora siamo stabili sui 1000, perchè i ban provvisori decadono dopo pochi giorni.
C'erano accessi continui, tentativi di intrusione, scraping selvaggio (es. dozzine di richieste contemporanee dallo stesso ip, superamento dei limiti recidivo, richieste identiche ogni minuto per ore intere).
Ho cercato di non andarci giù pesante e comunque lo scraping sarà supportato, ovviamente quando fatto secondo le regole.
Ho agito solo per evitare di far cadere il server, non per dispetto verso alcuni utenti, e i ban definitivi sono limitati a finti crawler che facevano mirror continuo ed insostenibile.
Questo, unito ad un'ottimizzazione estrema del sito, consentiranno di avere molti più accessi giornalieri e alla fine potrò alzare qualche limite che oggi ho messo come protezione.
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase
Avatar utente
Tox Nox Fox

BanHammer Silver Medal Helper Donatore
Moderatore
Moderatore
Messaggi: 12716
Iscritto il: 14/01/2007, 23:35
Medaglie: 4
Grazie Inviati: 238 volte
Grazie Ricevuti: 357 volte

Re: Sito web Arcade Database

Messaggio da Tox Nox Fox »

Ottimo!
WP.ARCADEITALIA.NET
La Guida al MameCab
Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3408
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 37 volte
Grazie Ricevuti: 56 volte
Contatta:

Re: Sito web Arcade Database

Messaggio da motoschifo »

A distanza di qualche tempo, dopo la pausa con Edicola8bit, sono tornato operativo sul sito e sto "falciando" parecchie cose vecchie che avevano proprio bisogno di nuova vita.
Purtroppo i tempi saranno lunghi, ma non bisogna spaventarsi.

Per prima cosa ho deciso di separare i database: uno "mame" dedicato all'emulatore (macchine + software), uno "comune" con utenti e dati generali del sito, uno "import" temporaneo che esiste solo in fase di importazione dati e in futuro uno dedicato alle api (che in realtà sarà integrato con redis o altro servizio di cache).
Questo mi permette di separare nettamente le competenze e quindi di avere una struttura più gestibile.

Modifica dei menu per poter ospitare più emulatori/sistemi: avremo "Sistemi" per una panoramica (oggi è la voce "Mame") e "Libreria" per le ricerche e i cataloghi.
Rimarrà il tasto di ricerca, comodo e rapido, ma la pagina di ricerca cambierà per poter gestire più tipologie diverse e salverà dati nel local storage per evitare di far fare troppi click all'utente abituato a cercare solo romset arcade Mame.
Il termine "sistemi" si riferisce a tutto, quindi emulatori, console, hardware, ecc. e sarà oggetto di prossime implementazioni.
Le ricerche saranno diverse: macchine, software, liste software, file romset, history/testi, media, storico.
La distinzione è puramente semantica, alla fine potrò avere un elenco di romset da esportare o da filtrare ulteriormente, e sposerà la gestione ad insiemi che da ormai troppo tempo ho promesso di fare... ma ci sarà tmepo per parlarne, prima completiamo le pagine che ci sono già e poi discutiamo di nuove funzioni in appositi thread.

Lato prestazioni, al momento sto avendo un incremento fino a 10x rispetto al sito classico, 100x sulle API/scraper, quindi promette bene. Ovviamente una richiesta di tanti file insieme sarà cestinata, oltre un certo limite ed una certa insistenza scatteranno dei ban come sta già succedendo oggi per alcuni bot recidivi.

A proposito di blocchi, il server è ormai preso di mira in maniera continuativa: ad un mese e mezzo dalla partenza siamo oltre il milione di tentativi bloccati (insistenti o recidivi), con 1300 ip bannati in maniera permanente.
Solo negli ultimi 5 giorni ci sono stati 150 mila tentativi di accesso alla console.
Se il sito sta ancora rispondendo alla navigazione è merito di questi servizi che permettono all'hardware di non passare il tempo a controllare qualsiasi cosa in movimento e quindi sopperire sotto il carico. Il futuro limitatore di banda, il controllo per ip e la gestione cache dovrebbero permettere di attivare più servizi senza pesare troppo (e quindi senza richiedere ulteriori esporsi economici).
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase
Avatar utente
motoschifo

Gold Medal Donatore
Progetto Arcade Database
Progetto Arcade Database
Messaggi: 3408
Iscritto il: 12/07/2013, 20:29
Medaglie: 2
Città: Parma
Località: Parma
Grazie Inviati: 37 volte
Grazie Ricevuti: 56 volte
Contatta:

Re: Sito web Arcade Database

Messaggio da motoschifo »

Nelle ultime due settimane il lavoro svolto è stato parecchio, e rispetto al prototipo dello scorso anno ho migliorato ulteriormente quasi tutti i settori.
Come accennato nel post precedente, sto seguendo tutti i pattern e le best pratice per gestire un sito complesso e completo, quindi con supporto alle ultime tecnologie e agli ultimi standard, oltre a risultare più snello ed efficiente.

Non sono ancora entrato nella parte più critica (ricerca ed import) perchè siamo ancora un po' indietro, ma ho rivisto la gestione delle lingue e degli accessi (url self contained, ovvero il link in alto contiene anche i parametri della pagina).

Ho aggiunto un altro router per gli rss e questi sono al momento quelli supportati:

Codice: Seleziona tutto

- /api -> tutte le chiamate da fuori, come scraper e funzioni
- /rss -> feed di varia natura, per ora solo notizie ma in futuro anche altre sezioni
- /media, /download, /files -> gestione scaricamento file
- /admin -> amministrazione del sito
- /language -> modifica la lingua per le pagine utente
- qualsiasi altro link -> pagina del sito
La cosa interessante di questa divisione è che una modifica ad una pagina non rompe tutto il sito, cosa che invece oggi è tecnicamente possibile, dato che molte logiche sono condivise in pochi file.
Con questa separazione, un cambiamento nell'importazione non toccherà alcun comportamento lato api o lato utente, ovvero non sarà necessario un aggiornamento dei modelli e non saranno invalidate le varie cache.

Il formato include anche dei modificatori, come la selezione lingua nei formati normali (it, en) o posix (it_IT, en_US):

Codice: Seleziona tutto

- /en
- /en_US
- /?lang=en
- /?lang=en_US
- /?language=en
- /?language=en_US
in presenza di questi valori si viene portati in automatico verso la pagina corretta, quando ha senso farlo, rispettando le logiche SEO e codici di stato html (redirect temporaneo, redirect lingua, redirect permanente).
Nello stesso scenario vengono gestiti i vecchi link per ottenere sempre un url pulito.

Lato impostazioni, la lingua ha diverse fasi e priorità in base al router impostato:
- se api o rss (in gergo stateless) -> guida il prefisso (/en/api, /en_US/api), poi i parametri (?lang=en o ?language=en), poi la lingua di base del sito
- se altro (in gergo stateful, ovvero pagine utente) -> guidano preferenze utente, cookies, parametri, preferenze browser, lingua base

La lingua completa (locale posix) viene salvata e gestita anche se non completamente supportata.
Es. salvo lingua spagnola e codice regionale (es_ES) anche se non la supporto ora, ma appena disponibile anche in spagnolo l'utente si vedrà cambiare il sito secondo le proprie preferenze.
Oppure se copio un link da un forum del tipo /en/mame, in automatico passa a /mame perdendo la lingua e non cambiando le mie preferenze di navigazione. Per cambiare la lingua occorrerà sempre passare per language, es. /language/en passa all'inglese, /language/pt_BR o /language/pt-BR, ecc. Teoricamente dovrebbero fare tutti così, poi in realtà nessuno se ne preoccupano e le tue preferenze vanno a farsi benedire...

Questo dettaglio tecnico evita che uno scraper sporchi i cookies di lingua, come accade oggi, e viceversa che le preferenze dell'utente non incidano sulle chiamate esterne fatte dal proprio pc.
Esiste un elenco delle lingue e del loro supporto (parziale, completo, mancante) quindi i vari menu e le opzioni si adegueranno dinamicamente in base all'avanzamento delle traduzioni.
Per le pagine è gestito lo standard i18n (file PO/MO), per i valori (generi o categorie) la cosa è più complessa e valuterò come gestirlo senza impazzire.

Altro pezzo che ho riscritto è la logica e gestione del cookies. Sono ammesse 3 tipologie di cookie (tecnici, applicativi, autenticazione) e quindi ci sono casi in cui si possono pulire alcune categorie e non altre, senza interferenze (es. quelli di autenticazione al logout). Sempre per seguire le regole, tutti i cookies non vengono salvati in chiaro.

Discorso a parte meritano le altre funzioni accessorie come titoli, metadati per SEO e motori di ricerca, cache, indicizzazione. Ho creato tante piccole funzioni che applicano queste regole alle pagine e permettono di avere un sito ben organizzato senza dover rincorrere tutti i vari punti del codice. Per il sitemap.xml c'è una funziona ancora incompleta che genera link e segue tutte le regole per ottenere dati certi su indirizzi unici, canonici, date di effettivo aggiornamento, ecc.

La gestione parametri da url (post e get) ha ora un pattern migliore di singleton che aiuta a rendere più leggibile il codice sorgente. Per es. prima era così.

Codice: Seleziona tutto

$filtro_ricerca = Parameters::fromGet()->getString('ricerca', '');
$arcade_sn = Parameters::fromGet()->getBool('arcade', false);
$voto = Parameters::fromGet()->getInt('voto', 0);
è diventato adesso così:

Codice: Seleziona tutto

$filtro_ricerca = Get::string('ricerca');     // default nullo
$arcade_sn = Get::bool('arcade') ?? false;    // default false
$voto = Get::int('voto') ?? 0;                // default zero
Questo è un tipico esempio in cui si mescolano funzioni e responsabilità: in php 8.4 possiamo gestire molto meglio l'init dei valori restituiti (default sempre nulli) e quindi avere una leggibilità simile ai programmi moderni come C# 10 con nullable abilitati.

I repository (il database) è migliorato anche lui per evitare qualsiasi possibilità di sql injection, e questa è una cosa molto importante perchè prima costringeva a controllare qualsiasi parametro passato. Oggi se passa per una dimenticanza, la pagina "muore" con un errore grave e non viene eseguito niente. Ovviamente sono errori che si correggono in pochi minuti, ma è comunque una barriera importante contro le intrusioni.

Le pagine statiche principali ormai sono fatte (es. contatti, home, download, crediti) ed alcune hanno ancora il vecchio layout. Cercherò di uniformare prima della pubblicazione, ma il fatto di poter eseguire vecchie pagine senza modifiche sostanziali lato codice mi da la garanzia di poter fare i lavori in maniera graduale.

Probabilmente sono tutti dettagli troppo tecnici che non interessano alla maggior parte dei frequentatori del forum, ma comunque aiutano il sito ad essere leggero e a non farlo collassare su se stesso per le troppe richieste, oppure a consentire un carico supplementare senza sforzo.
Non mi azzardo a fare previsioni per la pubblicazione, ma se continuo con questo ritmo, fine anno diventa un traguardo raggiungibile.
Motoschifo
CAB ›MameOriz ›MameVert ›PCB ›NeoGeo ›TopDrive ›Tekken3 Wishlist ›PacMan ›Arkanoid
Flipper ›HighSpeed Wishlist ›MedievalMadness ›MonsterBash ›HighSpeed2 WebArcadeDatabase
Rispondi

Torna a “Progetto Arcade Data Base”