GithubHelp home page GithubHelp logo

benini / scid Goto Github PK

View Code? Open in Web Editor NEW
38.0 38.0 12.0 29.59 MB

License: Other

Inno Setup 0.10% Shell 0.62% C 4.19% Makefile 0.03% C++ 27.91% HTML 2.48% CSS 0.04% JavaScript 0.10% Perl 0.06% Python 0.16% Tcl 64.23% CMake 0.07%

scid's People

Contributors

aw-bib avatar b606 avatar benini avatar crististm avatar giba-peres avatar goomb avatar haydoooke avatar raimondi avatar sliedes avatar ukscid avatar xmcpam avatar yoastheart avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

ukscid artyompal

scid's Issues

Save game in PGN

E' possibile appendere le partite che sovrascrivono le precedenti alla fine del pgn.
Aggiungendo un tag "Sovrascrive" il game "ID", quando si compatta il PGN vengono automaticamente sovrascritte.
Dovrei però disabilitare il riordino delle partite per i PGN.
Oppure potrei farlo con un processo in background che utilizza il nuovo jthread

Scorebar

Non si capisce a cosa si riferisce la scorebar (notation, engine1, engine2, ...)

Add engine

Show best move arrow

Versione intermedia 4.7.4 quando enginewin sarà decente

Move to version 4.7.4

  • c++20
  • Impostare dark theme come default
  • Aprire i database SCID4 con l'estensione .si4 invece che solo con il nome del database (seconda patch nel branch SCID5)
  • Impostare la nuova finestra engine come defaut
  • Aggiungere una finestra "Analizza Partita"
  • Remove Corrispondence code
  • Move to version 4.8.0
  • Guardare il makefile debian
  • Allow to save PGN
  • Rimuovere per quanto possibile il codice analysis window
  • Remove Nalimov code

Last move time

Nella infobar sotto la scacchiera, quando viene visualizzato last move aggiungere tra parentesi anche il tempo dell'ultima mossa
Last move: 1.e4 (36 s)

New engine window

  • Quando va in errore, come ad esempio su macos per via dei permessi, seleziona xboard invece che auto
  • Create configWidget si può dividere in due dividendo le opzioni (che poi sono più parametri come cmd o dir) locali da quelle specifiche del motore
  • In enginecfg.tcl creare un frame indipendente che può essere utilizzato anche in altre finestre. Ad esempio per creare una nuova partita contro un motore
  • Add function descriptions
  • Le label devono poter essere tradotte
  • Creare un toggle switch usando uno stile switch.Toolbutton che imposta il background a selected ed utilizza due immagini diverse in base a se pressed o no.
    Anche alcuni parametri come "Score side" "show debug" potrebbero essere impostati con uno switch on/off
  • Rebel15 invia info time, info nps ed info hashfull senza inviare la pv. Quei messaggi vengono scartati e quindi non viene aggiornata la finestra.
  • Stockfish invia dei messaggio molto utili come info string NNUE o info string Tablebase. Ci vorrebbe un'area generica dove mostrare quei messaggi, magari nella config prima dei settings? Oppure se solo quelle due sono interessanti si potrebbero mostrare come lichess in alto
  • Scorpio invia l'opzione farlocca multipv non come spinbox e va in errore
  • 4 CPU -> label che quando clicca apre un pop up con le opzioni più comuni 1,2,4,8,16,32,64, altro (altro porta al setting UCI). Le opzioni vengono automaticamente aggiornate quanto il motore risponde con InfoConfig. Linkare in qualche modo un pulsante ad una opzione e aggiornarlo da config?
  • 1024 MB -> label che apre un pop up con le opzioni più comuni (128 - 256 - 512 -1024 -2048 4096 8192 e altro che porta al setting HASh. Qual'è il setting per xboard?). Per iniziare potrei intanto creare il pulsante che non fa niente, o porta al settings, ma visualizza il valore corrente).
  • Aggiungere la possibilità di impostare un limite massimo di tempo e profondità ( https://sourceforge.net/p/scid/feature-requests/84/ )
  • quando una linea viene aggiunta, mettere un commento alla prima mossa con la valutazione del motore.
  • mostrare un errore/warning se non tutte le mosse di un linea vengono aggiunte?
  • measure tab troppo largo in linux
  • Threats -> best move with reversed side to move
  • Magic move per idee posizionali. L'idea della finestra tablebase era buona, scegliere un pezzo e mostrare tutte le caselle dove darebbe un vantaggio decisivo. Si potrebbe colorare di rosso il pezzo piazzato peggio e colorare di verde le caselle dove darebbe un vantaggio.
  • aggiungere un messaggio per bestmove per permettere di giocare engine vs engine
  • ponder va gestito in maniera trasparente. enginecomm invia automaticamente la posizione dopo bestmove (posizione corrente + bestmove + pondermove). Quando riceve una nuova posizione, se è uguale invia ponderhit. Fare un elenco di quando inviare stop (posizione differente non ponderhit; newgame)

Dark Mode

Impostarlo come default

[ ] verificare la finestra gamelist

Le barre sopra e sotta la scacchiera hanno lo sfondo bianco. Copiare da chess.com che non usa una barra intera, ma solo il background dietro le scritte.

Search extra tags

Allow to search extra tags and replace the option -annotator with -extratags annotator
In benchmark_codec.tcl aggiungere la ricerca del tag TimeControl usato da lichess

Remote chess tournament

  • Torneo remoto: al momento il motore apre una porta e accetta connessioni.
    Sarebbe cool avere anche il contrario, il motore che si connette ad uno SCID che gestisce un torneo (in questo modo solo su un computer ci sarebbe il problema di gestire il firewall).

ttk_menu

  • ttk_menu - macos: menu's color on macos cannot be changed. It works well because it use the system defaults. Some images don't work well with the dark theme, i.e the main board menu's ones -> remove the images
  • ttk_menu - linux: use a fixed image for cascade submenu. It will never use a system default like windows or macos, maybe it is accepteable? We can change the top menu colors according to the theme
  • ttk_menu - win: cascade problem with a fixed black image plus an ugly "border" because only the background of the labels is changed. Maybe they will fix it in future releases of Tk.

Video Release

Fare un video di presentazione delle novita:

  • dark theme
    • aprire la versione 5.0
    • mostrare come si può cambiare il tema?
  • scaricare un pgn da torneo da lichess
    • mostrare che si può cliccare su event per vedere la crosstable
    • mostrare che andando avanti viene visualizzato il nome della variante
    • mostrare che viene visualizzato anche il tempo dell'ultima mossa
  • nuova evaluation bar con aggiunta facilitata dei motori
    • cliccare sulla barra -> aggiungi motore -> stockfish
    • evidenziare la velocità dei nodi -> cliccare sul pulsante cpu e cambiarlo a 4
    • evidenziare hash full -> cliccare sul pulsante hash e cambiarlo a 1024
  • supporto chess960
    • aprire un pgn twic con delle partite 360 se non ne trovo uno dove ci sono già
    • digitare "variant 960" nella awesome bar per cercare le partite 360
    • caricare e navigare in un paio di partite
  • possibilità di salvare le partite nei pgn
    • aggiungere una linea cliccando sulla nuova engine window
    • aggiungere o modificare il commento
    • cambiare il nome dell'evento in modo che venga visualizzato nella gamelist
    • salvare la partita
    • evidenziare che è cambiato nella gamelist
    • compattare il pgn? per eliminare la vecchia versione
  • nuovo formato SCID5
    • permette di salvare le partite chess960, fino a 4 miliardi, più veloce
    • creare un nuovo database da menu (database->copy all games->new -> demo).
  • funzioni avanzate della nuova engine window
    • allows to change the engine's options without restarting it
    • aggiungere un motore remoto
  • buy me a drink
    • mostrare la pagina donate di sourceforge

Try to improve rocksdb until it is as fast as SCID4

  • import games faster by disabling WAL 77f5144
  • prefix per iterare più velocemente (non cambia nulla)
  • col.compression = rocksdb::kZSTD (circa la metà più lento rispetto a LZ4)
  • use dictionary (velocità comparabile, compressione migliore):
    col.compression_opts.max_dict_bytes = 16 * 1024;
    col.compression_opts.zstd_max_train_bytes =
  • col.bottommost_compression_opts.enabled = true;
  • dividere il database in diverse colonne (non cambia nulla, anzi dividere i tag ed i commenti è peggio)

Direi che sono vicino ad abbandonarlo fcf2862

Use rocksdb instead of a new SCID5 (deps: chess960)

Evaluate if rocksdb can be a valid alteranative to the binary, custom, SCID4 database format.
PRO:
-- less code to maintain
-- portable format
CONS:
-- external dependency, less easy for users to compile
-- very long compilation times

  • SCID supports chess960
  • Add a scripts/bench_codec.tcl
  • Create a rocksdb branch
  • Change CMakeFile.txt to download, compile and link rocksdb
  • Create a simple, default CodecRocksDB and measure the performance (3 hrs)
  • #36

Remove NameBase limit of 255 chars

Al momento non è possibile importare nessun tag con più di 240 caratteri.
Per quelli extra è necessario modificare encode Game.
Quelli del namebase si potrebbero accettare per tutti i codec, tranne SCID4 (dovrebbe andare in errore in AddName).

Si potrebbe cambiare in un warning e troncare il tag, non è possibile importare tag, nemmeno quelli standard, maggiori di 240 caratteri in totale

bool visitPGN_TagPair(TView tag, TView value) {
	linenum_ += std::count(value.first, value.second, '\n');
	if (nErrorsAllowed_ < 0) // Skip until the end of the game
		return true;

	auto tagLen = std::distance(tag.first, tag.second);
	auto valueLen = std::distance(value.first, value.second);
	if (tagLen == 0 || tagLen + valueLen > 240 ||
	    !parseTagPair(tag.first, tagLen, value)) // Failure

formato SCID5

  • Utilizzare varint per la lunghezza, con i 3 bit più bassi per l'id.
    0: player, 1: events, 2: site, 3: round, 4: header, 5: game's tag and comments
  • Se sposto l'offset nel codec, posso ridurre game length a 16 bit in modo che non ci sia un limite per il gamefile (visto che al massimo ci sono 32-bit di partite)
  • A quel punto se memorizzo i tag ed i commenti nel namebase, quando viene letto all'inizio, creo un indice con tutti gli offset delle partite nel namebase

Idee x la gamelist

  • Aggiungere una colonna TimeControl con il valore del tag se esiste oppure facendo il parsing di event con blitz bullet o classic
  • Gamelist: si potrebbe aggiungere un database fittizio recent games
  • Gamelist: spostare il pulsante in alto o in basso (perchè è simile alla ricerca posizionale?). Non aprire il sotto menu e renderlo indipendente dagli altri pulsanti (come quello per la ricerca posizionale). Cambiare l'icona con quella filtro? Spostare la barra in alto?
  • quando viene chiusa l'ultima gamelist aperta per un database, chiudere anche quel database (aggiungere un opzioni per disabilitare questo comportamento)
  • nuovo layout di default con scacchiera + notation in alto e gamelist in basso (in questo modo le scroll bar si trovano ai lati che uno si aspetterebbe

PGN search - set filter position

Quando si fa la ricerca nel testo PGN, bisognerebbe memorizzare l'offset delle mosse della linea principale rispetto al pgn. In questo modo se si trova ad esempio una posizione di matto "eval #" si può impostare il filtro a quella posizione

Do not store ENCODE_COMMENT it the commented moves are more than the uncommented ones

encodeComments conta il numero di commenti
Aggiungere il numero di mosse (posizioni, include start_marker) non commentate
Aggiungere ENCODE_COMMENT solo se n_comment < n_nocomment

[x] Iniziare con la possibilità di decodificare entrambe.: se non ci sono ENCODE_COMMENT ma ci sono commenti, aggiungerli sequenzialmente usando nextInPGN()
[x] verificare che end_marker non può avere commenti anche nella decodifica
[ ] Quando si aggiunge gameData in SCID4 bisognerà aggiungere gli ENCODE_COMMENT se ci sono dei commenti
Non è possibile aggiungere gli ENCODE_COMMENT in modo semplice perchè è necessario avere la posizione corrente per identificare una mossa di regina memorizzata in 2-byte (che potrebbero essere invece 2 mosse distinte).
Trattare SCID4 come un codec non più nativo? Decodificando sempre in un Game e poi scrivendo il codice specifico in Codec::AddGame(Game&) ?
Oppure guardare se nell'indexentry il numero di commenti è maggiore di 0, recodificare sempre il game

Riscrivere il namebase

  • non utilizzare char* in modo da consentire \0 null char
  • spostare il vectorstd::string_view names_ nell'index (usare un vector chuncked in modo che le string view rimangano sempre valide)
  • per la ricerca per nome creare un vector con una funzione ad hoc che legge i valori da names_ e li ordina in maniera case insensitive. Usere equal_to per avere il range degli id che possono corrispondere
  • Namebase è lento ad esempio con lichess che ha milioni di siti diversi. Si può usare un jthread per ordinare i nomi in background ed un bloom filter (magari case insensitive) per velocizzare la ricerca per nome. Potrebbe esserci qualche libreria già disponibile, ad esempio tkrzw.

Eliminare completamente NameBase::map ed usare sortCache?

Test

  • Aggiungere partite con FEN
  • Compact database per scid4 e pgn
  • GameView search pos e treeview: confrontare lo stesso database con SCID4.7
  • ReadFen talkchess epd?
  • Search pgn e annotator
  • Game::ExactMatch

Chess960

The difficulty with adapting the SCID code to support chess960 is that simpleMoveT does not have a flag to indicate castling (such as Stockfish's 16-bit move).
The other problem is that simpleMoveT is a public struct, without a constructor, and it is not easy to trace all the points where the moves are created or modified.

  • Add a castling flag to simpleMoveT.
  • Create a function Position::makeMove which creates all moves filling all fields.
  • Memorize the castling moves of Chess960 games as king captures the rook.
  • Se un PGN viene copiato o importato in un database .si4, con la modifica fatta il processo si interrompe alla prima partita Chess960, mentre invece prima veniva riportato un errore e le altre partite erano copiate
  • Check all code where a simpleMoveT object is constructed or modified.
  • Check all code where simpleMoveT::to is used because it is different for chess960 games.
  • Test all the code where simpleMoveT::toLongNotation() is used.
  • Test TreeCalcAttacks.
  • Test Position::MakeSANString.
  • Test sc_pos_bestSquare.
  • Add the ability to search for chess960 games.
  • It is necessary to set the UCI_Chess960 option for engines such as Stockfish.

Do not reorder games when compacting PGN or small databases

Se voglio aggiungere la possibilità di modificare le partite esistenti in un database, appendendo una nuova partita con un tag speciale SCID_replace "sovrascrive la partita nr." diventa importante non modificare l'ordine delle partite.

Documentation

Man pages like tcl.tk ? Is their website created automatically?

Editor with spell checking: vscode with some plug-in? MarkDown plug-in?

Pages for developers: sc_base documentation like tcl.tk pages.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.