H.G.Muller wrote:I am not sure how exactly you imagine such a protocol would look. Perhaps because I do not know UCI protocol at all. What I understand from discussions about it that now and then surface, is that the strong point of UCI is that it defines a standard for the parameters that an engine needs at startup, like hash-table size, book and EGTB paths, EGTB cache, Pawn Hash, Eval Cache.
But is seems to me the problem with WB engines is not so much that such parameters cannot be set through the same stdio channel as that handles the moves during playing. Such parameters can just as easy be generated by the GUI for passing as command-line arguments to the engine it starts. If only there was a standard for this.
One line of reasoning might be that WB protocol is a tightly controlled standard, so that adding the setup commands to that protocol would be accepted as standard much more rapidly than designing a standard for command-line arguments. A second point might be that using the same channel for all communication would be easier on the engine programmer, which than only has to learn about stdio, and can ignore command-line arguments.
But I think the existing WinBoard protocol already offers an excellent device for setting up engines, namely the 'features' command. It would be a comparatively small protocol extension to make it possible for the engine to make known to WinBoard what setup parameters it needs/can handle through the stdio channel. How about having a feature similar in syntax to the 'variants' feature, where the engine can tell to WinBoard all the setup options it will understand? like
feature options="hash,EGTBcache,nalimovpath,bookpath"
This would enable WinBoard to send commands
hashsize 128
EGTBcache 32
nalimovpath F:\chess\nalimov
bookpath F:\chess\books\goldbook.bk
Would this achieve the ease of setup that you had in mind?
You could do more. I think you are now in a position to improve Winboard
a lot, and with the acceptance of many programmers. For a long time
winboard was just stable but stuck. And if you change something
have a look at the UCI protocol. Perhaps there are ideas and features
that are worth to 'steal'. This would also make it easier to change
and expand the engine side of the communication.
I have not looked up whether and how UCI does this:
Make it easy for an engine to tell the GUI (and the human user) how
to change a lot of parameters with dialog boxes. The engine could send
something like this:
setting <featurename> <valuetype> [<list of values> | <min> - <max> | <free text>]
With <valuetype> := bool | list | int | string
Example:
setting "UseTrick17" bool 0
setting "Style" list "solid" "normal" "active" "agressive"
setting "KingSafetyPercent" int 0 - 100
setting "LearnFile" string ".\default_learn_file"
setting "UseSecretSettings" string "A1_B42_X23"
I mean, let the engine tell the GUI all things that it needs to know
to build a dialog box on the fly (perhaps even with some grouping
informations and radio buttons):
setting group "Title" radio
...
setting group end
And on the other hand Winboard could respond with something like this:
setting <featurename> <value>
Example:
setting "UseTrick17" 1
setting "Style" "active"
setting "KingSafetyPercent" 67
setting "LearnFile" ".\other_learn_file"
setting "UseSecretSettings" "A1_B6x9_U2"
May be that this seems to be overkill. But not every day we [ you
]
have the possibility to think ahead and do some good work for the future.
Harald