One of the most awful problems in my group is avoiding to rewrite scripts that have been already written by others. Since we have different projects and we work with different data, everybody ends up writing its own scripts in his favorite programming language, and it is very frequent to waste an afternoon on writing a new program and then discover that your workmate already had a script to do that.
Apart from the most logical answer ("talk with your workmates"), we are thinking about having a common place to store our best scripts, and if possible work together on them. It would be similar to an image library like this: http://matplotlib.sourceforge.net/gallery.html , where to put the script and an example of its output (most of our scripts produce graphs), and if possible integrated with Git.
Do you have any idea? How to you cope with the problem in your lab?
If you want to see the code, but also store associated information, such as expected outputs etc, then a wiki probably is the best choice (we prefer DokuWiki here), although this would involve a lot of manual effort to document each script.
Use of a site such as GitHub would give you version control + a handy place to read code, although it is not free to host private repositories there, which I guess is what the majority of labs would require.
If privacy is not a concern, then I would consider GitHub gists for code, which can then be embedded in a Posterous blog for comments. Posterous automatically unfolds Gist URLs into code samples in blog posts, so then you can annotate them easily. This would be a lot less manual effort than a wiki.
This might be useful .
I'm the only person in my group who uses software control, other people are averse to it. What we've ended up with is a by-convention approach within our large NAS block (which everyone mounts). Any code which is deemed to be generally useful is essentially "checked in" to a particular directory tree w/ a designated format for keeping track of versioning, builds (where appropriate), etc. Code which is specific to a project, dataset, etc is stored in a designated manner within the appropriate directory trees for that project, dataset, etc.
You might also want to setup a simple snippets database. Navysnip application by Jason Strutz is easy to install and run if you have ruby and rubyonrails installed.
git clone git://github.com/navyrain/navysnip.git cd navysnip sudo rake gems:install rake db:migrate ruby script/server Then visit your app at http://localhost:3000
check out http://github.com/navyrain/navysnip for complete details
My lab uses a network-attached storage unit which every Linux workstation mounts by NFS at startup. It was reasonably cheap -- a couple hundred dollars per TB. We also keep copies of public databases on there. We put data sets on there as we're working on them, and also put the more important scripts in a Mercurial repositiory.
As Marcos and Istvan mentioned, a wiki integrated with your VCS would be wise, and Trac (trac.edgewall.org) is the obvious choice for that.
I can very much recommend MyExperiment.org. You can set up a category for a certain class of scripts, as the system has no limitation to Taverna 'scripts' anymore. MyExperiment is a true social services, provides tagging, setting up groups, etc.