如何将代码链接到出版物


40

科学计算领域的学术论文(以及如今的许多其他领域)通常包含大量代码或什至是为该论文专门编写的或用于在论文中获得结果的整个软件包。帮助论文读者访问代码的最佳方法是什么?我当前的方法是在论文或引文中添加指向Github存储库的链接(以及特定的版本标签)。


2
共享代码是一个好主意,应该做更多。我知道我可以更好地提供论文的相关代码。Github仓库似乎是一个很好的解决方案。肯定比在附录中包含源代码要好得多,我已经看到这样做是为了进行较小的编码工作。
巴伦2012年

4
是一个有关MO的问题。
JM

@JM谢谢,MO的答案非常好!
David Ketcheson 2012年

请注意,您可以在github上发布ipython笔记本,并且呈现它们(交互式部分除外)
denfromufa 2015年

1
@denfromufa不幸的是,Github禁用Mathjax,因此也不会渲染数学。这使得它对大多数相关领域都毫无用处。但是总会有nbviewer。
David Ketcheson

Answers:


17

好吧,我想您有几个选择。

  1. 如果您有一个稳定的页面(例如由大学或其他非营利机构赞助的页面,不太可能很快消失),则可以在该页面上发布。
  2. 您可以使用Github或Bitbucket或SourceForge之类的服务来分发代码。
  3. 如果该代码具有边际一般价值(这是针对一组特定条件的分析代码等),则可以在使用该代码的文件中将其作为“补充信息”下载提供。
  4. 您可以结合使用以上内容。

但是,在任何或所有这些情况下,您都应该在文章中清楚地指出采购,并指出其许可类型(GPL,知识共享等),这样一来就不会出现与IP相关的问题。


6
我认为应该将自己的代码放在最可能生存的地方,如果可能的话,可以放在多个地方。例如,大学页面似乎比托管服务更不可能生存。让日记也提供一些快照是有意义的。不幸的是,我所知的杂志都没有回购托管。
Faheem Mitha 2012年

1
学生不应该将软件放在个人主页上。但是,我认为对于典型的研究代码而言,将其分发到与研究组相关的页面上可能比从可能会丢失属性的外部页面上获得更多的收益。至于期刊,的确是它们不进行存储库托管。但是,我认为以研究代码的形式具有“补充信息”的能力可以满足负责任的科学软件开发的大多数要求。(如果需要的话)
aeismail 2012年

我的感觉是,大学页面比常规托管站点更容易丢失。当然,当今大多数流行的托管网站(Bitbucket,Github,Google Code)都没有那么久。另一方面,例如Sourceforge已经存在了一段时间。
Faheem Mitha 2012年

还有其他需要注意的问题;知识产权问题以及大学或政府法规也可能控制存储库的选择。但是反驳的是,有许多代码已经在大学拥有的站点上成功分发了(NAMD是一个主要示例)。通常,代码的“重要性”将决定其可见性。我怀疑开发大量用户群的代码是否会完全消失。
aeismail 2012年

1
是的,但是如果代码晦涩,并不表示消失就可以。人们希望大多数科学法规都将获得免费许可,并且不受不合理的限制。例如,我相信美国国立卫生研究院(NIH)正在强制要求使用NIH(纳税人)资金开发的工作。我认为所有纳税人资助的项目都应该如此。
Faheem Mitha 2012年

8

伟大的问题和伟大的答复,但我认为,如果目标是要达到与出版物本身相同的标准,那么没有人能够充分解决持久性问题。(考虑到代码仍然可以运行的机会,这可能很愚蠢,但可能仍然至少与出版物一样有用)。

大学网站的期刊补充资料并不持久

大学网站不太可能提供稳定性或冗余性来保留托管内容。内容更难引用,通常缺少机器可读的元数据。

不幸的是,期刊在维护其补充材料方面似乎并没有做得更好(参见Anderson等,2006),并且可能不接受必要的格式,甚至根本不接受补充材料(参见一个著名的例子)。

由于这些原因,关注长期数据归档的人们已经一致转向倡导使用专用存储库而不是网站或补充材料,现在许多期刊都要求采用这种做法。遵守此标准似乎是公平的。

多份的解决方案?

Github和相关站点尚未证明大学图书馆和老牌出版商可以达到100多年的使用寿命。通过促进广泛的分发,它可以提供其他人在评论中呼应的解决方案,其中包括一个无法对stackexchange发表评论的人,

...让我们保存剩下的东西:不是通过拱顶和锁来将它们挡在公众视线之外,而是用来浪费时间,而是通过增加副本的数量来避免意外的发生。

— 1791年2月18日,托马斯·杰斐逊(Thomas Jefferson)

Figshare和CLOCKSS标准

我知道的唯一存档标准是figshare,它可以接受完整的代码存储库(目前为“文件集”,但我相信不久之后可以选择将其列为“代码”类型)。关键的一块figshare不仅可引用DOI与程序的元数据,但后盾CLOCKSS存档服务,这在12地理保持其所有内容的副本和地缘政治上分布在世界各地的节点。如果figshare停业或不复存在,这将触发其所有内容可从CLOCKSS免费获得。

因此,我建议使用Github进行代码分发,但也建议在发布时将档案副本提供给figshare。


1
figshare是向前迈出的一大步,尽管CC-BY许可证不是软件许可证,而且我不知道有多少科学家愿意在CC0下发布其代码,因此这是一个要解决的问题。我确实感谢他们使用DOI和CLOCKSS,但这很棒。
阿隆·艾玛迪亚

是的,关于许可证仍然存在一些问题的要点,尤其是对于更全面开发的软件而言。对于要复制分析的脚本,我可以看到CC0更合适。
cboettig 2012年

对于更广泛的受众来说,Google代码可能会稍微好一点,因为您可以拥有一个更好的网页,其中包含摘要,图像,DOI链接,更高的搜索可见性等。您绝对应该在下载部分添加一个tgz,并在首页上提供一个链接。请记住,大多数非开发人员甚至都不熟悉版本控制,更不用说git / hg了。据我所知,Subversion面向更广泛的受众。
stali 2012年

1
@stali回想起github还通过gh-pages和可下载的tarball从下载中支持仓库的自定义网页。但是Google和Github都没有为代码提供单独的DOI,也没有解决文件寿命超过公司afaik寿命的问题。
cboettig 2012年

4

您可以使用一些精美的pdf技术来简单地将代码附加到pdf(即,将代码文件嵌入到pdf中,并且可以通过单击pdf中的某些按钮来“下载”)。例如,这可以通过attachfile包来完成。当然,可以使用预印本(尽管我不知道它是否已经适用于arxiv),但是您可能会遇到日记文件问题...


很酷!我不知道LaTeX可以做到这一点。
qubyte 2012年

4

对于特定于特定研究项目的小脚本,最好的发表位置是该期刊的网站,作为该论文的“补充信息”。对于那些阅读本文的人来说,这是最容易找到的地方。

其他项目感兴趣的更重要的软件包也应单独发布。不幸的是,目前没有真正好的解决方案。理想情况下,可以通过DOI像纸一样永久访问代码发布,但是我不知道有任何托管站点可以分发DOI并保证其永久性。像Github或Bitbucket这样的公共存储库可能是目前最好的选择。

最好的解决方案是发布包装有代码和数据的文件,但这在技术上尚不可行。我正在研究这种想法的研究原型,有关详细信息,请参见本网站


1
为ActivePapers +1。我认为它现在不能满足我的需求,但是我很高兴看到有人在致力于解决方案!
David Ketcheson 2012年

figshare提供了DOI:请参见figshare.com/blog/…–
Jeromy Anglim

3

我采取了两种策略,这是因为我预计很快就会改变机构,所以我的大学URL丝毫不稳定。

当代码相对较短时,我假设他们可能会做得体面的工作,将论文和代码保持在大致相同的位置,所以我尝试将其作为期刊的补充附录。这对于没有广泛关注的代码特别有用-在没有相关论文提供上下文的情况下,这些代码毫无用处。

但是对于源代码,实际软件以及更复杂的项目或人们普遍感兴趣的项目,我一直在遵循您链接到GitHub存储库的策略,该存储库对于我的论文的平均生产寿命至少应该是稳定的。


2

看看http://www.runmycode.org。他们托管与研究论文相关的代码的伴侣站点。如果代码是R,Matlab或其他一些代码,它将实际为您运行代码。我还没有尝试过,但是我打算。我认为David Donoho和他的合作者正在使用它。



@David Ketcheson和我在12月也使用wakari.io堆栈和IPython笔记本进行了一项基于Python的代码的实验。您可以在此处查看PyClaw再现性笔记本。
Aron Ahmadia 2013年

0

大学图书馆可能是这个场所或大学的托管中心。


-2

作为读者,在论文中声明可以通过直接与作者联系来获取代码是有效的。作为作者,这可以帮助促进协作,并给我机会提醒人们,如果他们在工作中使用代码,请引用我的文章。


4
这是一个有趣的观点,我很好奇它的普遍性。就个人而言,这就是我想要摆脱的。我觉得这就像发表一篇不完整的论文,要求读者索要完整的论文。参见sciencecodemanifesto.org
大卫·凯奇森

2
我最著名的论文之一上的联系地址实际上已经死了-不确定其他一些论文-我通常反对这样做。“联系我”不一定是世界上最简单的事情,尤其是十年之后。
Fomite 2012年

2
“与我联系”方法也不保证可重复性。当您联系我索要一些代码时,我可能会给您发送最新版本,而不是我在原始论文中使用的版本。如果仅仅是因为我不再有原始版本了。
khinsen 2012年

3
即使作者已经签署了许可协议以按要求提供数据,但实际上与作者联系并索取数据的实证研究表明,很少有作者遵守。例如,请参见dx.doi.org/10.1371/journal.pone.0007078及其引用。如果这对于数据不能很好地工作,我怀疑它也不是代码的好解决方案。
cboettig 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.