The options pictured in figure 9 match the default settings used in the Express install, and are the recommended settings. Or select custom startup options below. The first option sets the FAHClient slot(s) to start at Windows login. Any FAHClient slot is only visible in the Web Control or Advanced Control interfaces.
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.Sign up
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
In Fah-Control 7.4.16 beta you can open context menu on a folding slot and check the option 'On Idle'.
When the idle=true option is set using the dialog edit slot extra options and dialog is closed again then fah config is re-read and the slot options apply immediately.
Expected behavior: Slot context menu 'On idle' is applied immediately.
Moved to FoldingAtHome/fah-issues#1198
The v7 [email protected] client supports a new remote interface which allowsapplications to do the following:
The client's GUI, FAHControl, and viewer, FAHViewer, both use this interface soall the functionality they provide and more is accessible.
Historically, third-party software has been written to read the client's logfile and reverse-engineer files like
queue.dat in order to access clientinformation. These methods were never officially supported and were oftenbroken by changes in the client or core software. The new v7 client will notsupport these older interfaces. Instead, this new interface will provide a moreconsistent and officially supported method to access the same information andmuch more.
At the lowest level, the client provides a network socket interface whichdefaults to port
36330. This interface is both usable by a machine and bya human connecting directly with a telnet program.
Socket programming can be challenging so Language specific API layers will bedeveloped to simplify connection to the socket level interface. This willallow programmers to access and control [email protected] clients via a few functioncalls via a library in their favorite language.
This socket interface is designed to be usable both by human and machine. Aquick way to gain access to this interface is to connect to a locally runningclient with a telnet program. For example:
help at the prompt will give you a list of commands organized intosection and information on how to use them.
Depending on the client configuration you may have to use the
auth <password> command to get access to other commands. The authorizationfunctionality depends on the configuration options
command-allow-no-pass, the related
deny options and where you connectfrom.
Attention Telneting is mainly for developers of 3rd party tools. If you usea compatible telnet program and send complete commands from any applicationsyou develop then everything should work fine. The problem is that FAHClient isnot compatible with the Windows telnet program (at the moment). The clientexpects to receive whole commands than a character at a time. If you telnetremotely from a Linux box to your Windows machines it should work fine. Youcould also try installing a 3rd party telnet program with more options.
Sending commands to the client is very simple. Commands consist of strings ofcharacters followed by one or more arguments separated by spaces followed bya return character (ASCII #10). Arguments which contain spaces may be escapedwith single or double quotes.
For example, to access the value of the
pause-on-battery configurationoption you would send this command:
or to set the username to a name with a space in it:
The socket interface has a built-in help system. This can be accessed bytelneting to the client's port and running the
help command. This willdump a help screen organized into sections for all the available commands. Youcan get help for a specific command like this:
The help lines are organized as follows:
The arguments may also use a special syntax to describe their usage. Thesymbols of this syntax have the following meaning:
|Everything between square brackets is optional.|
|Everything between angle brackets is required.|
|A bar means or.|
|Ellipsis mean the preceding arguments may be repeated.|
Configuration options can be global or folding slot specific. A previoussection showed how to set a single global option. You can set or list one ormore options with a single command using
List two options:
List all explicitly set options:
List all options, including those that still have their default values:
List all options, including those with default values, and options which areunset:
Set two options:
You will notice that these commands all print out the value of these optionsin a block starting with the word
PyON. This is the data format used bythe socket interface and is described in a section below. Not all commandsthat print in this format will say so in their help string.
options command allows you to view and modify global options only. Youcan operate on folding slot specific options with the
0 is the folding slot id.
No options are actually saved until the
save command is run which writes anew
config.xml file which will persist through client restarts.
Folding slot and work unit information can be access with the
queue-info commands. Both of these commands dump their information in PyONformat.
Adding a new folding slot can be done with
slot-add <type> [<name>=<value>].. command. Configuration options for thenew slot can be provided as well to override general options, but the foldingslot type must be provided. Valid folding slot types are
For example, adding a uniprocessor slot:
Deleting of an existing slot can be done with
slot-delete <slot>. Validfolding slot numbers can be obtained with
Note: Live folding slot manipulation does not require a
save command to beeffective, but if you fail to save configuration then all your folding slotmanipulations will get lost after next FAHClient startup.
The socket interface uses the PyON messages to return data to the caller. Thismakes parsing structured data easier and consistent for all commands. It alsomakes handing automatic updates much easier.
PyON messages consist of a header, content and a trailer. The header is
PyON <version> <message name>n. Where
<version> is the PyON versionnumber and
<message name> is an arbitrarily chosen name that helps toidentify the contents that can be expected to follow the header. The messagename always consists of only letters, numbers, dash
- and underscore
_.The trailer is always
---n. You can always count on both the header andtrailer being printed on their own line. In other words, they will alwaysstart and with a return character
PyON messages can be detected by scanning the socket output for the PyON headerand trailer. Whatever is between the header and trailer will be PyON parsablecontent.
To detect the header scan for the 6 characters
nPyON . To detect thetrailer scan for the 5 characters
n---n. Data outside of the header andtrailer should be ignored. These character strings cannot occur in the PyONcontent because the return character is escaped as
None is used instead of
null and boolean values start with an uppercase letter as in Python. E.g.
Most of the client commands do not use boolean or None/null values so nearly alldata returned by the client can be parsed with a JSON parser. JSON parsers areavailable for many different languages. A list of available parsers can befound here [http://www.json.org/]
In Python the content can be parsed with the following code:
The client GUI, FAHControl, is an Open-Source application. The code in
fah/Connection.py is a good example of how to access the client's socketinterface. You can check out the code with Git using thefollowing commands:
TODO add examples of how to processes PyON messages in various languages.
Rather than polling the client repeatedly for information you can ask theclient to send a PyON message when something has changed using the
updates command has 5 subcommands:
|Add a update with id and update rate.|
|Delete a update by id.|
|List all currently running updates.|
|Delete all updates.|
|Reset all updates.|
For example, we can use the
add subcommand to get updates of the work queueat a maximum rate of once every 5 seconds with the following command:
expression argument is an expression that will be evaluated at mostonce every 5 seconds. The command
queue-info must be preceded by a
$so that the script interpreter knows it is a command.
We can then add a second update, now with id
1 to get folding slot updateswith:
queue-info print PyON messages so we just have toscan for these messages and process they come. You can tell which message iswhich by its message name.
The FAHControl program uses the following update commands to get it'sinformation from the client:
The expression parameter is one argument so commands, such as
options, whichtake arguments must be wrapped in
$(). See the section The ScriptInterpreter.
Log updates are handled slightly differently than the updates described in theprevious section.
When you connect to the client you are accessing the client's internal scriptinterpreter. For the most part, you don't have to worry about the details ofthis interpreter because connections to the socket interface put in a simplecommand loop where each entered line is treated as a command expression andevaluated. However, commands and variables can also be evaluated with the
$prefix or with
$() for commands with have arguments.
A simple illustration of this processing can be seen using the
The above command will just print the string
queue-info which may not bewhat was expected. Whereas the following command will print the results ofrunning the
The above command is equivalent to just running the
queue-info commanddirectly. The difference is you can do things like this:
Poker winrates are most commonly expressed in the 4 following ways: bb/100 = The number of big blinds you win per 100 hands. Bb/hour = The number of big blinds you win per hour. $/100 = The amount of money you win per 100 hands. Most ratios in poker are in the X to 1 format anyway, so it's not a big concern. Quick ratio odds chart example. Lets say you are on the turn waiting for the river, and are holding a flush draw; you have 4.1 to 1 odds (roughly 4 to 1). A good poker win rate is anything above 0bb/100. This is because most people lose at poker in the long run. However, in small stakes games like NL2, NL5, NL10, NL25 and NL50 a good poker win rate can vary from 3bb/100 to 30bb/100. If you're a heads up SNG player, your ROI should be anywhere from 5 to 20%. For limits up to $30 or so, 15 to 20% should be what you're aiming for give or take a few percentage points. This means you'll earn up to $6 per game or so. As you move up in stakes, the competition will get tougher so you should expect your ROI to decline. /what-is-a-good-poker-hand-win-ratio/. Good Live Poker Win Ratio. So the very biggest winners in live poker (which is about 5-10% of the player pool), will have a poker session win ratio of 80%. If you are only a slightly above breakeven player over the long run (which is a much larger segment of the player pool), then your poker win ratio will be nowhere close to 80.
Most command arguments are automatically evaluated before they are passed tothe command except for a few special commands like
updates whicheither conditionally evaluate their arguments or evaluate them later.
The client's internal scripting language is actually fairly powerful but most ofthis is not needed to use the socket interface but it does explain why commandslike
updates need the
$() syntax around the expressions theevaluate.
We will depend on third-party developers to help us create the API layers whichhide the difficulties of socket programming for the most popular programminglanguages. We ask developers of these APIs to follow a few guidelines to helpmake interfacing to [email protected] clients consistent across various platformsand languages.
The API should allow API users access to all the same functions provided by thesocket layer with the same names but with language specific datatypes.