10 replies [Last post]
Joined: 08/09/2010

About game and new players

Could be divided into cate gories. First 100, and your ranking among 1-100,second 100-200, 200-300, and the rest. On that way new players are more motivated being their first objective to be the first of its range, and to move to the following one. It's not the same to be the second on your range that to be the 587th.
As an added incentive you can't belong to a group until you complete the first range.

About way of folding

1.- Be able to extract and match portions of different tracks. For example, you have two tracks rebuilding, and one improved one part and the other one other part: be able to mount the protein as if it were a puzzle. That could also be an important improvement for teamwork.

2.- Enable a 3D grid where you can specify the distance of the grid segments. The intersection points of the grid would be sticky. If for example you active a grid with distance 3.5, you could put cuts across the backbone and place each cutted bone on points of the grid as you want.

About bands

Three types of behavior: Normal, compression, decompression.
With added properties: maximum and minimum length from which takes effect. Example: a band compression only works when the distance is greater 7

About enable cutbands

It is usually to divide the protein into several parts and work with one part. To avoid interactions with the rest you separate the part with whom you work with cuts and getting far away.
But doing so the score is always -99999, so it is impossible to know what are you doing in the working part. Could limit the exaggerated negative score of a cutpoint?

About filters:

Disable the filters completely: both wiggle behavior as calculating score, in order to work swiftly with filtered puzzles. You could put a score of -20000 when you disable the filters. Currently it is almost impossible to move puzzles with filters on an underpowered machine.

About wiggle

Assign weights to the backbone, so you can set how hard or malleable is an area, for example to prevent warping on sheets and helix and target adaptation to loops, or otherwise become less rigid one sheet if you are not sure that its SS is correct.

About Scripts:

1.- Multithread. To launch several threads. currently we run several tracks doing the same.
They consume less machine resources (only one client/track running) if for example:

for s=1,10 do fork(FunctionsOver(RebuildResult[s]))
WaitFor semaphore(1,10)
for s=1,10 CompareResults(result[s])

2.- Callback functions for keyboard events, like this


cb_function keyb(event)
key_pressed=(...) -- key_pressed as reserved name

in recipe:

function Main()
if key_pressed="?" then
-- break the "for"
-- change C.I.
-- run rutine
-- set variable
-- ...

In this way you modify the behavior of a script as you see the intermediate results. We can start another way of folding: scripting and handwork together.

3.- Batch mode

Feature: Foldit run without GUI. So we can run:
Foldit -solution file -recipe my_recipe -time x[s,m,h]
where 'recipe' is in all.macro, and two conditions would have to end: the return of the script, or the end of time.
we can read the standard output (from print in recipe) and program a batch to run other scripts depending on the results.


1.- IRC Disconnect Button

2.- Reload Cookbook from disk, Save cookbook.

3.- Cookbook sync with web: you can load/save your whole all.macro online.


Enable extended log, with name of recipes running and actions. Extended = slow,
so we could enable/disable it.

thanks if you have read until here, and sorry my english :)

jeff101's picture
User offline. Last seen 1 hour 31 min ago. Offline
Joined: 04/20/2012
Groups: Go Science
I like many of these ideas.

I like many of these ideas. I know I have seen Feedbacks about some of them, for example, one-directional bands (http://fold.it/portal/node/996372).

#3-Batch mode above reminds me of the Feedback about Meta Scripts (http://fold.it/portal/node/987800), but I guess here you mean no visuals at all. Instead, just run the numerical part of Foldit and monitor its progress via scriptlog.default.xml (the Recipe Output). This would probably let Recipes go faster. I know many people already pick fast-rendering View methods, slide the protein off the screen, and then minimize the Foldit window to help their Recipes go faster. #3-Batch mode would just be another step in this direction.

#2-Callback for keyboard events above sounds like http://fold.it/portal/node/992669 (see http://fold.it/portal/node/992669#comment-17450 in particular).

If anyone knows of other Feedbacks like these, please post links to them so folks can up-vote their favorites. I know several were listed before in a 2012 wish list (http://fold.it/portal/node/992324).

viosca's picture
User offline. Last seen 1 year 42 weeks ago. Offline
Joined: 10/16/2013
My Feature Wish List.

As a Software Engineer, I've embedded script interpreters (e.g. TCL/TK, Perl, and forth) into applications, and these are some things I think would really improve FoldIt.

Lua wishes:

1. Give us getmetatable and setmetatable so we can implement true classes and objects, like true sets and lists for segments, bands, etc. We could then have libraries of these classes that we load with require.

2. Implement "require" and so that scripts can load other scripts/libraries. This way when we fix a bug in a lib we fix it everywhere. Updates to the foldit scripts, like for what happened with NewChapter, become much easier.

Band Wishes:

1. Catch band delete events from the GUI and issue an LUA callback AFTER the current operation has completed. This way LUA code can be written to keep the band indexes in sync with lua code. And it still allows the user to interact with the model asynchronously during script operation. i.e.
function call_back(bandid, event) dosomethinghere end
band.AddCallback(bandid, event, call_back)
band.DeleteCallback(bandid, event)
The callback would not be saved between script invocations.

2. Provide a Lua clientdata pointer in each segment and band. (Would not have to be saved between scripts.) i.e.
structure.SetClientDataPointer(segno, luatableptr)
local luatableptr = structure.GetClientDataPointer(segno)

3. In bands, store the arguments the band was created with so they can be retrieved as a properties table. Would be read only. Should be saved. i.e.
local luatable = band.GetCreatioinProperties(bandid)

Debugging Wishes:

1. Consider providing access to debug.* object so that meaningful error messages and the callstack can be printed. At least for in offline mode.

2. Add a socket to the .exe that we can connect to with IDE's such as eclipse. Some of us develop in eclipse and would like to be able to execute our code from there during debugging. I've had to write a FoldIt emulation layer for eclipse to debug and that's not ideal. The development socket could be made available when the game is played offline, if that's an issue.

Non Commercial Open Source:
I know it's probably not going to happen, but what the heck, it's a wish!


Joined: 07/21/2013
Groups: Beta Folders
enable copy for chat windows

This would be useful if some of the veterans had a discussion about how to do something in Foldit and someone who was new could copy it.

This would be good to get web site addresses that do not have "fold.it" in them.

Joined: 04/11/2013
Recent Credit best

Sometimes you want to try something and you don't want to lose track of what you are doing. By going back to credit best, you often lose that work. A "Set Recent Credit best" and not just "Set Recent Best" could be helpful.
Save my chat info.
Enable Scripts to change wiggle power.
Combinations of types of puzzles.
That's my wishlist for now :)

Joined: 08/06/2010
Groups: Contenders
scriptv2 call to select segments dialogue box

The GUI recipe allows "User Pick".

It sure would be nice to allow a call like


in scriptV2 that would allow the user to select
segments. It would be easy for the program to
run through the segments using IsSelected to find
them and use this information in the recipe.

Joined: 08/06/2010
Groups: Contenders
finding out about bands

A scriptv2 function

table band.GetParams(integer bandindex)

that returns a sequence where [1] is either 'Add' or 'AddBetweenSegments' and subsequent indices are the parameters used to recreate the band in its current end points.
If 'Add' then [2],[3], and [4] are the segments originally used to build the band [5],[6], and [7]
are the rho, theta, and phi needed to rebuild the band. [8],[9],[10] are returned if not nil.

If the user added the band to space then segmentXAxis and segmentYAxis are presumed to be the segments on either side of the segmentOrigin unless it is either the first or last segment in which case the other end stands in for the missing segment number.

Joined: 08/06/2010
Groups: Contenders
Allow copy from editor's help text.

Until I use a function a few times my fingers just can't type its name correctly.
It would be really nice to be able to copy from the help text and/or the recipe output text.

Joined: 08/06/2010
Groups: Contenders
My way around this inability to copy problem

I leave scriptlog.defaul.xml open in a notepad++ window while developing recipes.

I've long since saved the output of help() in a file I can reference and copy from.

As needed I'll do so while running a script. This is only a minor inconvenience not a blocker.

Joined: 08/06/2010
Groups: Contenders
yet another standard function ui.GetInterface()

It could be used like this:

if orig.hasFrozen then
  dlg.leaveFrozen=dialog.AddCheckbox("Leave frozen segments frozen",false)
  if ui.GetInterface()="original" then
    dlg.selectFrozen=dialog.AddCheckbox("Use frozen as selection",true)
options.leaveFrozen = dlg.leaveFrozen and dlg.leaveFrozen.value
options.selectFrozen = dlg.selectFrozen and dlg.selectFrozen.value
if options.leaveFrozen and options.selectFrozen then
  options.leaveFrozen,options.selectFrozen = ChoseLeaveOrSelect()

Joined: 08/06/2010
Groups: Contenders
add radio buttons to dialog

table dialog.AddRadioButtons(table labels, integer index)

use like this:

local rebuildOrder={
  "Worst Score to Best",
  "First Segment to Last",
  "Last Segment to First"

For every string in the table labels and in the order they appear in the table a line would appear in the dialog box. Each line would have a little circle followed by the string. The circle at index would have a dot in it. The user could click on a circle and the dot would be removed from where it was in the lines for the labels and moved to the one the user clicked. When the dialog box was closed the "value" would have the index associated with the row clicked, for instance dlg.rebuildOrder.value in the above example.


Developed by: UW Center for Game Science, UW Institute for Protein Design, Northeastern University, Vanderbilt University Meiler Lab, UC Davis
Supported by: DARPA, NSF, NIH, HHMI, Amazon, Microsoft, Adobe, Boehringer Ingelheim, RosettaCommons