Progetto parser & FTP

  Il progetto attuale prevede la realizzazione di un parser per il file che winboard genera attraverso il parametro /serverMoves.
Tale parser avrà il compito di realizzare un file pgn compliant a partire dal file di output di winboard.
Una volta generato, il file potrà essere utilizzato per il broadcasting delle partite in sui siti internet opportunamente predisposti.

100 %

Il progetto è ultimato. Adesso ci stiamo accanendo a creare una classifica a partire dai pgn ed a portarla sul server via FTP. :-)
L’aggiornaFTPArena lo fa attraverso un’utility che viene attivata all’occorrenza, mentre il Watcher permette già due forme diverse di rappresentazione in base alla tipologia di torneo.

watcher
Parser in python

21 commenti »

  1. Grazie ragazzi, ho visto in upload e via email i vostri files arrivati in contemporanea. Riporto subito in download quanto è arrivato per la condivisione delle informazioni. Stanotte provo e vi dico. Bye!

  2. mauro.riccardi mauro.riccardi scrive:

    Ho guardato adesso l'”esempio di file da parserizzare”.
    Non mi convince: in tutti i test che ho fatto winboard non ha mai
    usato il formato tipo

    g8:f6/(depth)/(score)/(emt)/N;

    cioe’ con il nome del pezzo dopo la ultima slash.
    Con quale versione di winboard e’ stato ottenuto il file “esempio”?

  3. mauro.riccardi mauro.riccardi scrive:

    Ok, va bene, ho testato il mio programma anche con quel formato li’, e funziona senza problemi e senza modifiche.
    Bisognerebbe chiedere a Mueller se la prossima volta ci avvisa prima di cambiare formato…

  4. Ciao Mauro, ti rispondo facendo una piccola premessa per Giovanni Ornaghi (persona che ho avuto modo di conoscere via web):
    Non aspettandomi grandi quantità di visitatori considerando il dominio attuale di questo sito, non ho descritto l’analisi che andrebbe fatta per il progetto in questione.
    Sono conseguentemente sorpreso dall’interesse di Giovanni Ornaghi per il progetto (che invito a registrarsi per potere, quando ne ha il tempo, sfruttare anche le maggiori possibilità di interazione).
    Stanotte in qualche modo, ho dato un’occhiata ai sorgenti di Giovanni che, pur senza un’analisi dettagliata ha voluto contribuire.
    Mi ha fatto piacere riscoprire il Python, linguaggio utile, semplice e usabile sia sotto windows che sotto Linux.

    La sua è una bozza che penso non sia semplice da completare senza informazioni legate alla struttura pgn e all’ottica di implementazione del parser. Per cui provo ad accingermi subito a colmare queste informazioni:
    Il pgn è un formato standard per l’interpretazione informatica delle partite di scacchi. Tale formato è riconosciuto dal plugin “embed chessboard” (meglio conosciuto come pgn4web alias Paolo Casaschi) usato da questo sito per il broadcasting delle partite.
    Per rispondere ai dubbi di Giovanni: no, il tuo approccio non è sbagliato e la disambiguazione è gestita all’interno del paragrafo ‘mosse giocate’ nel link precedente.
    La necessità di parserizzare l’output generato da winboard mossa x mossa nasce appunto dall’incompatibilità tra i due formati. Una volta parserizzato il file creato da winboard (ricordo attivato dal parametro /ServerMoves=nomefileoutput) sarà possibile inviarlo via ftp al sito e farlo interpretare correttamente dal plugin.
    Quindi riassumendo: se Tizio (con tutte le abilitazioni del caso) volesse mostrare sul sito in tempo reale un match tra due chess engines utilizzando Winboard basterà effettuare le seguenti operazioni:

    – lanciare Winboard con il parametro per la generazione delle mosse, in modalità match tra i due motori selezionati
    – attivare il parserizzatore che genererà un file pgn compliant a partire dall’output dei winboard (scopo primo del progetto)
    – inviare i risultati via ftp su questo sito

    Tali operazioni però non renderebbero il flusso snello ed in tempo reale, almeno finchè non verranno implementate le seguenti aggiunte:

    – attivare il parserizzatore che leggerà un file ini con la definizione del file di output di winboard e che rimarrà in stand by fino ad ogni modifica dello stesso
    – lanciare Winboard con il parametro per la generazione delle mosse, in modalità match tra i due motori selezionati
    – il parserizzatore dovrà generare il suo file pgn compliant parserizzato (sovrascrivendo eventualmente il precedente) ad ogni variazione dell’output di winboard
    – inviare il file di risultati della parserizzazione via ftp su questo sito alla fine di ogni processo

    Nota Di Casaschi (pgn4web):
    Any PGN header tag missing will not be displayed.
    Note that HTML tags are stripped from the PGN data, removing all text between “”.
    Please make sure your PGN data does not contain “” characters.

    Mauro… forse mi sono dilungato un po’ ;-)
    In qualunque caso: sì, uno di questi giorni scrivo a Muller.
    Stasera provo il tuo poi, ma solo quando avremo tempo, dovremo parlare di pgnres (lo scrivo soprattutto perchè poi mi dimentico.
    Piccola info: Sgro’ mi ha chiamato e di oggi proverà a riscrivere news legate al campionato che non erano pervenute prima. In qualunque caso, non appena Edo terminerà la traduzione dell’attuale regolamento ho intenzione di passare al g-sei.org
    A quel punto ricontrollo che tutto funzioni e poi si parte.

    Rimango a disposizione per eventuali chiarimenti
    Bye!
    LL

  5. mauro.riccardi mauro.riccardi scrive:

    Ciao Luca,
    se hai bisogno di link per rintracciare node e la libreria ftp chiedi pure.
    Dovrei aver scritto tutto nel README incluso, pero’ puo’ sempre essere che io mi sia scordato qualcosa…
    Probabilmente si puo’ anche mettere tutti i file necessari sul sito, visto che e’ software abbastanza free (sia la libreria che node.js hanno la licenza MIT).
    Anzi se mi dici provvedo a tutto io.

    Mauro

    PS Si’, Python e’ fantastico ;-)

  6. Ho rilasciato l’utility che uso contestualmente ad Arena per inviare i files sul sito. Non parserizza il pgn, ma con Arena non ne ha bisogno, dato che la Gui può essere abilitata per farlo.
    Così come il Watcher di Mauro, non appesantisce la banda, dato che invia via ftp solo quando in locale è effettivamente stata fatta la mossa.
    Usa PgnRes per la costruzione della classifica che invia a fine partita. Se si abilita Arena a metter tutto sul file AllGames.pgn, tale file viene spedito (appena pronto) sul sito (e verrà messo in download).
    In futuro vedrò di sfruttare lo ‘storico’ che purtroppo Arena cancella dal CurrGame.pgn (e che creerebbe la comoda combobox sul sito).

  7. admin scrive:

    Facciamo il punto della situazione ad oggi, 20 aprile 2012

    A supporto di questo progetto sono intervenuti i seguenti programmatori
    Giovanni Ornaghi che ha realizzato la bozza in Python (Parser in Python)
    Luca Lissandrello che ha sviluppato la parte FTP e che richiede Arena come interfaccia (AggiornaFTPArena)
    Mauro Riccardi che ha sviluppato sia la parte di parserizzazione che la parte FTP compatibile sia con Arena che con Winboard/xboard (Watcher)

    Il mio progetto e quello di Mauro, tutti e due in test e in ulteriore sviluppo, sembrano funzionare entrambi correttamente (io ho avuto qualche problema con il watcher ma penso che sia facilente risolvibile).
    Le differenze stanno nei linguaggi di programmazione adottati e nel range di utilizzo.
    Io ho usato Auto-it che mi ha permesso di avere un approccio semplice e un’installazione immediata.
    Il contro di questa scelta è la limitazione all’ambiente operativo windows (bisognerebbe testare se funziona attraverso wine su linux).
    La scelta di Mauro è stata invece il javascript installato attraverso il Node.js.
    Il suo Watcher è funzionante sia sotto Linux che sotto sistemi Windows e in più la possibilità di parserizzazione gli permette di estrarre ed inviare via ftp sia da Arena che da Winboard.

    I programmi in questione possono essere verticalizzati (in accordo con quanto scritto nei files readme e leggimi all’interno dei pacchetti).
    Personalmente svilupperò ancora il mio AggiornaFTPArena (tempo permettendo) con l’implementazione di una funzione che a fronte di un pgn crea una classifica in formato testo.
    Tale operazione è attualmente demandata ad una vecchia utility: PGNRES. Una volta che avrò completato questo sviluppo potrò rimuovere il PGNRES dal pacchetto.

    Considerati gli sviluppi ancora in essere invito alla lettura dei files di riferimento all’interno dei singoli pacchetti per comprendere a fondo le possibilità e funzionalità delle singole applicazioni.

  8. Ma senti, hai cambiato la pv di chexa? Ho visto che adesso le mosse sono selezionabili da pgn4web, mentre prima no… O mi ricordo male?

    Bye!
    LL

    p.s Nel frattempo pgn4web ha fatto un paio di aggiornamenti che ho implementato, quindi può essere pure che Paolo abbia aumentato la ‘rilevazione’ delle mosse.

  9. mauro.riccardi mauro.riccardi scrive:

    No, ti ricordi bene, adesso watcher manda la pv come variante e non come commento.
    L’avevo disabilitato per paura che si ingrippasse pgn4web su qualche pv non compliant, ma alla fine credo che non dovrebbero esserci problemi.

    Hai provato da cosa dipende il server error 425 che da quando manda piu’ partite?

    bye^2, mr

  10. L’errore 425 l’ho ricevuto anch’io; a tratti riusciva a connettersi e a tratti no.
    Il js non l’ho visto, ma non potrebbe essere che non chiudi una connessione prima di aprirne un’altra?

    Comunque stasera riprovo (sono e sarò sulla 4) e vediamo se troviamo l’inghippo.

    Cambiando argomento (ma poi non tanto), sto provando il miglior modo per implementare le disambiguazioni per la nuova pv san di neurone, ma non ne ho trovato uno che non mi riduca troppo i n/sec. Mi sa che passerò da AN ad LAN e mi fermerò lì :( (oppure se c’ho voglia lo metto come parametro nel mio ‘configuratore’)

    Bye!
    LL

  11. mauro.riccardi mauro.riccardi scrive:

    Ma la connessione dovrebbe rimanere aperta.
    Io ho pensato a questa cosa: node e’ asincrono, quindi non hai completo controllo dei “tempi” di esecuzione delle varie parti.
    Poiche’ l’ftp richiede che per certe transazioni ci sia una “risposta” dal server al client, se ci sono troppe transazioni ravvicinate il server non riesce, e il tutto si blocca: c’e’ un tempo minimo al di sotto del quale non si puo’ scendere (da specifiche, pare), ma a quanto ho capito dipende anche dal sw sul server.
    Solo che non riesco “dal mio lato” a vedere se effettivamente questo e’ un/il problema…

    E’ comunque sufficiente nel watcher.js commentare la riga “process.emit(‘gameover’)” (riga 668), e funziona tutto bene, solo che non aggiorna la classifica partita per partita…

    Io stasera dovrei essere disponibile dopo le 10:30, semmai ci ribecchiamo in chat.

    Riguardo alla disambiguazione, magari puoi trovare uno spunto da quella del watcher?
    Ha diversi punti in cui si puo’ ottimizzare, ma e’ abbastanza decente (usa 0x88). E’ dalla riga 529 alla 641 (si’, lo so, dovrei metterla in una funzione separata…facciamo l’altr’anno :-) ).
    Tra l’altro se ti ci dai una letta, e’ molto probabile che mi trovi qualche bug, quindi ci guadagnamo tutti ;-)

    Comunque la devi usare solo per rappresentare la PV una volta che la stampi, quindi viene eseguita non piu’ spesso di qualche volta al secondo, non puo’ impattare gli nps, anche se ne usi una selvaggiamente inefficiente, imho.

    bye^2, mr

    PS Chexa usa la notazione algebrica lunga, e pgn4web la legge bene, cmq.

  12. Grazie delle dritte sulla pv, appena riesco vedro’ di riprendere il ‘discorso’ :)

    Sapevo del limite delle transazioni troppo rapide, ma non mi sono informato più di tanto perchè AggiornaFtpArena lavora con la stessa tipologia di connessione e non si è mai perso nulla anche a cadenze brevissime.
    Saltando il pezzo del ‘gameover’ tutto fila liscio, come dicevi.
    Un dettaglio: hai dato un’occhiata alla 4? Visto cos’ha scritto al posto della classifica? Ho un dubbio atroce: che non abbia settato bene i parametri dell’ini?

    Bye!
    LL

  13. mauro.riccardi mauro.riccardi scrive:

    No, non e’ questione di parametri.
    A quanto ho capito il “coso” si “confonde” proprio…
    E’ una cosa che secondo me non dovrebbe succedere, ma quando invia la classifica ad ogni partita le partite vanno al posto della classifica…

    Comunque nei test ho usato cadenze ultrarapide (tipo partite da 10 secondi) senza problemi, le mosse vengono mandate senza intoppi.
    E’ proprio la classifica che fa cilecca, e non capisco perche’…
    Tra l’altro l’errore e’ *del server*, non del client (che sarebbe watcher), e’ questa la cosa che mi ingrippa…

    bye^2, mr

  14. mauro.riccardi mauro.riccardi scrive:

    Forse ho risolto…

    bye^2, mr

  15. Dai, dai! :)

    Bye!
    LL

  16. Stamattina verifico cosa può succedere lato server, quando sei al ‘buono’ proverei a lanciare 4 scacchiere live in contemporanea (io ho un fisso e 2 portatili).

    (e partirono insulti lato server :) )

    Bye!
    LL

  17. mauro.riccardi mauro.riccardi scrive:

    Il branch di watcher che sto sviluppando adesso, che ha tutte le modifiche di cui stiamo parlando da un po’ di giorni, si puo’ scaricare al link

    https://github.com/mauroriccardi/watcher/zipball/manygames

    bye^2, mr

  18. Grande! Di oggi aggiorno la versione del Watcher sul sito.

    Bye!
    LL

  19. mauro.riccardi mauro.riccardi scrive:

    Informazione di servizio:

    ho fatto un merge del branch manygames sul branch master: adesso si puo’ scaricare il watcher (come zip file) dal link

    https://github.com/mauroriccardi/watcher/archive/master.zip

    In futuro le modifiche partiranno da questo branch, per cui questo e’ il link da seguire.
    Prossimamente (ahem…quando ho finito con le 2-3 mila cose che sto facendo in questo momento :-) ) ho intenzione di migliorare il supporto per Arena (che purtroppo e’ andato a pallino nel campionato di S.Martinez), e di cambiare un paio di cosette che sono inutili per le partite in automatico su FICS o in locale, ma che potrebbero salvare la vita (!) quando la partita viene giocata da un umano sull’interfaccia.

    bye^2, mr

  20. Ho notato che il js della tua branch pur essendo più vecchio di quello sul g-sei è uguale come contenuto; tutto ok? Lascio le cose come stanno o lo sostituisco comunque sul server?

    Bye!
    LL

  21. mauro.riccardi mauro.riccardi scrive:

    Quello su github e’ il piu’ recente, pero’ e’ stato fatto *prima* che tu mettessi il file sul server. Su github ho solo fatto il merge, senza modifiche, quindi la data e’ sempre quella dell’ultimo commit.
    Insomma non e’ necessario aggiornare niente, ma se uno volesse essere sicuro di prendere l’ultima versione, dovrebbe far riferimento all’ultimo link che ho postato (quello che avevo dato tempo fa non va piu’ bene).

    bye^2, mr

Lascia un Commento

© 2017 G 6 Tutti i diritti riservati - Buon divertimento!

By continuing to use the site, you agree to the use of cookies. more information

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi