Jak połączyć kod z publikacjami

40

Prace naukowe w informatyce naukowej (i obecnie wiele innych dziedzin) zazwyczaj zawierają pewną ilość kodu lub nawet całe pakiety oprogramowania, które zostały napisane specjalnie dla tego artykułu lub zostały użyte do uzyskania wyników w pracy. Jaki jest najlepszy sposób, aby pomóc czytelnikom tego dokumentu uzyskać dostęp do kodu? Moje obecne podejście polega na umieszczeniu linku do repozytorium Github (wraz z konkretnym znacznikiem wersji) w gazecie lub w cytacie.

David Ketcheson
źródło
2
Dzielenie się kodem to świetny pomysł i należy zrobić więcej. Wiem, że mógłbym być lepszy w dostarczaniu odpowiedniego kodu dla artykułu. Repo Github wydaje się dobrym rozwiązaniem. Z pewnością znacznie lepsze niż zawarcie kodu źródłowego w dodatku, co widziałem w przypadku mniejszych wysiłków związanych z kodowaniem.
Barron
4
To jest powiązane pytanie MO.
JM
@JM Dzięki, odpowiedzi na MO są bardzo dobre!
David Ketcheson
zwróć uwagę, że możesz publikować zeszyty ipython na github i są one renderowane, z wyjątkiem części interaktywnych
denfromufa
1
@denfromufa Niestety, Github wyłącza Mathjax, więc matematyka też nie jest renderowana. To sprawia, że ​​jest to dość bezużyteczne w najbardziej odpowiednich dziedzinach. Ale zawsze jest nbviewer.
David Ketcheson

Odpowiedzi:

17

Myślę, że masz kilka opcji.

  1. Jeśli masz stabilną stronę - taką jak ta sponsorowana przez uniwersytet lub inną instytucję non-profit, która prawdopodobnie nie zniknie w najbliższym czasie - możesz ją tam opublikować.
  2. Możesz użyć usługi takiej jak Github, Bitbucket lub SourceForge do rozpowszechnienia kodu.
  3. Jeśli kod ma marginalną wartość ogólną (jest to kod analizy dla określonego zestawu warunków itp.), Możesz udostępnić kod do pobrania jako „informacje uzupełniające” na papierze, w którym go używasz.
  4. Możesz użyć jakiejś kombinacji powyższych.

W każdym lub we wszystkich tych przypadkach należy jednak wyraźnie wskazać źródło w artykule i wskazać, jaki to rodzaj licencjonowania (GPL, Creative Commons itp.), Aby uniknąć problemów związanych z IP.

eeismail
źródło
6
Myślę, że należy umieścić swój kod w najbardziej prawdopodobnym miejscu do przeżycia, aw wielu miejscach, jeśli to możliwe. Na przykład strony uniwersyteckie wydają się mniej prawdopodobne niż usługi hostingowe. Sensowne jest także, aby dziennik udostępnił migawkę. Niestety, żaden znany mi dziennik nie zawiera repozytorium.
Faheem Mitha
1
Uczeń prawdopodobnie nie powinien umieszczać oprogramowania na osobistej stronie głównej; argumentowałbym jednak, że w przypadku typowego kodu badawczego prawdopodobnie można uzyskać więcej, dystrybuując go na stronie powiązanej z grupą badawczą, niż na stronie zewnętrznej, na której prawdopodobne jest utratę atrybucji. Jeśli chodzi o czasopisma, to prawda, że ​​nie zajmują się hostingiem repozytoriów. Jednak zdolność do posiadania „informacji uzupełniających” w postaci kodu badawczego spełnia większość wymagań odpowiedzialnego rozwoju oprogramowania naukowego. (W razie potrzeby.)
aeismail
Mam wrażenie, że strony uniwersyteckie są bardziej zagubione niż zwykłe witryny hostingowe. Oczywiście większość popularnych obecnie witryn hostingowych (Bitbucket, Github, Google Code) nie istniała tak długo. Z drugiej strony na przykład Sourceforge istnieje już od jakiegoś czasu.
Faheem Mitha
Są inne kwestie, o których należy pamiętać; Obawy związane z własnością intelektualną oraz regulacje uniwersyteckie lub rządowe mogą również kontrolować wybór repozytoriów. Ale kontrargumentem jest to, że istnieje wiele kodów ( NAMD jest jednym z głównych przykładów), które zostały pomyślnie rozpowszechnione na stronach należących do uniwersytetów. Zasadniczo „istotność” kodu określa, jak jest on widoczny. Wątpię, aby kod, który tworzy znaczną bazę użytkowników, kiedykolwiek zniknie całkowicie.
aeismail
1
To prawda, ale jeśli kod jest niejasny, nie oznacza, że ​​jest OK, jeśli znika. I można mieć nadzieję, że większość kodu naukowego będzie podlegać wolnej licencji i bez nieuzasadnionych ograniczeń. Wierzę, że NIH na przykład obecnie nakazuje to dla prac opracowanych przy użyciu pieniędzy NIH (podatników). Myślę, że tak powinno być w przypadku wszystkich projektów finansowanych przez podatników.
Faheem Mitha
8

Świetne pytanie i świetne odpowiedzi, ale myślę, że nikt nie odnosi się odpowiednio do kwestii wytrwałości, jeśli celem jest osiągnięcie tego samego standardu, który przyznano samej publikacji. (Co może być głupie, biorąc pod uwagę szanse, że kod nadal działa , ale może być co najmniej tak samo przydatne, jak publikacja mimo wszystko).

Dodatki do czasopism na uniwersytetach nie są trwałe

Witryny uniwersyteckie raczej nie zapewnią stabilności ani nadmiarowości w celu zachowania hostowanych treści. Treść jest trudniejsza do cytowania i zazwyczaj brakuje metadanych do odczytu maszynowego.

Niestety wydaje się, że czasopisma nie radzą sobie znacznie lepiej w utrzymywaniu swoich materiałów uzupełniających (patrz Anderson i in. 2006 ) i mogą nie przyjmować niezbędnych formatów, a nawet w ogóle przyjmować materiały uzupełniające (patrz jeden znaczący przykład ).

Z tych powodów ludzie zajmujący się długoterminową archiwizacją danych jednogłośnie zwrócili się w kierunku korzystania z dedykowanych repozytoriów zamiast stron internetowych lub materiałów uzupełniających, a wiele czasopism nakazuje obecnie tę praktykę . Wydaje się słuszne, aby kod był zgodny z tym standardem.

Rozwiązanie wielu kopii?

Github i powiązane strony muszą jeszcze udowodnić długowieczność na przestrzeni setek lat, osiągniętą przez biblioteki uniwersyteckie i uznanych wydawców. Ułatwiając szeroką dystrybucję, może zapewnić rozwiązanie, które inni wyrazili w komentarzach, w tym jeden, który nie mógł komentować stackexchange,

... ocalmy to, co pozostaje: nie przez sklepienia i zamki, które odgradzają je od publicznego widoku i wykorzystują w skazaniu ich na stratę czasu, ale przez takie zwielokrotnienie kopii, które wystawią je poza zasięg wypadku.

- Thomas Jefferson, 18 lutego 1791 r

Figshare i standard CLOCKSS

Jedynym znanym mi standardem archiwizacji jest figshare , który może akceptować pełne repozytoria kodu (na razie jako „zestawy plików”, ale wierzę, że wkrótce będzie można je wymienić jako „kod”). Kluczowym elementem figshare jest nie tylko cytowany DOI z programowymi metadanymi, ale także wsparcie usługi archiwalnej CLOCKSS , która utrzymuje kopie całej swojej zawartości w 12 geograficznie i geopolitycznie rozmieszczonych węzłach na całym świecie. Jeśli figshare przestanie działać lub przestanie istnieć, spowoduje to, że cała jego zawartość będzie swobodnie dostępna w CLOCKSS.

W związku z tym sugerowałbym użycie Github do dystrybucji kodu, ale także zapewnienie kopii archiwalnej dla figshare w momencie publikacji.

cboettig
źródło
1
figshare jest wielkim krokiem naprzód, chociaż licencja CC-BY nie jest licencją na oprogramowanie i nie wiem, ilu naukowców jest gotowych wydać swój kod na podstawie CC0, więc jest to problem do rozwiązania. Doceniam to, że używają DOI i CLOCKSS, ale to świetnie.
Aron Ahmadia,
Tak, wielka uwaga na temat tego, że licencje są nadal nieco problematyczne, szczególnie w przypadku bardziej w pełni rozwiniętego oprogramowania. W przypadku skryptów do replikacji analizy zauważyłem, że CC0 jest bardziej odpowiedni.
cboettig 10.10.12
Kod Google może być nieco lepszy dla szerszej publiczności, ponieważ możesz mieć ładniejszą stronę internetową z podsumowaniem, obrazkami, linkiem DOI, lepszą widocznością w wyszukiwaniu itp. Zdecydowanie powinieneś umieścić tgz w sekcji Pobieranie i podać link na stronie głównej. Pamiętaj, że większość nie-programistów nawet nie zna kontroli wersji, a tym bardziej git / hg. Subversion jest tak daleko, jak chciałbym, dla szerszej publiczności.
stali
1
@stali przypomina, że ​​github obsługuje również niestandardowe strony internetowe dla repozytoriów za pośrednictwem stron gh i tarballów do pobrania z pobranych plików. Ale ani Google, ani Github nie zapewniają osobnego DOI dla kodu, ani nie zajmują się długowiecznością archiwalną po życiu firmy afaik.
cboettig,
4

Możesz użyć fantazyjnych technik pdf, aby po prostu dołączyć kod do pliku pdf (to znaczy, że pliki kodu są osadzone w pliku pdf i można je „pobrać” za pomocą kliknięcia przycisku w pliku pdf). Można to osiągnąć na przykład za pomocą pakietu attachfile . Oczywiście działa to z wydrukami wstępnymi (chociaż nie wiem, czy już działa z arxivem), ale prawdopodobnie masz problemy z plikami dziennika ...

Sztylet
źródło
Bardzo fajny! Nie wiedziałem, że LaTeX może to zrobić.
qubyte
4

W przypadku małych skryptów specyficznych dla konkretnego projektu badawczego najlepszym miejscem do publikacji jest strona internetowa czasopisma jako „informacja uzupełniająca” do artykułu. Tam najłatwiej jest znaleźć kogoś, kto czyta artykuł.

Bardziej znaczące pakiety, które mogą zainteresować również inne projekty, powinny być lepiej publikowane osobno. Niestety w tej chwili nie ma naprawdę dobrego rozwiązania. Idealnie byłoby, gdyby publikacja kodu była stale dostępna za pośrednictwem DOI, tak jak papier, ale nie znam żadnej strony hostingowej, która rozdawałaby DOI i gwarantowała ich trwałość. Publiczne repozytoria, takie jak Github lub Bitbucket, są na razie najlepszym wyborem.

Najlepszym rozwiązaniem byłoby opublikowanie papieru z kodem i danych z nim związanych, ale nie jest to jeszcze technicznie wykonalne. Pracuję nad prototypem badawczym badającym ten pomysł, zobacz tę stronę, aby uzyskać szczegółowe informacje.

Khinsen
źródło
1
+1 dla ActivePapers. Nie sądzę, że teraz spełnia moje potrzeby, ale cieszę się, że ktoś pracuje nad rozwiązaniem!
David Ketcheson
figshare zapewnia DOI: patrz figshare.com/blog/…
Anglim
3

Podjąłem dwie taktyki, które wynikają z tego, że wkrótce spodziewam się zmiany instytucji, więc mój uniwersytecki adres URL nie jest stabilny.

Kiedy kod jest stosunkowo krótki, próbowałem dołączyć go jako dodatek do samego czasopisma, zakładając, że prawdopodobnie wykonają przyzwoitą robotę, trzymając papier i kod mniej więcej w tym samym miejscu. Jest to szczególnie przydatne w przypadku kodu, w którym nie ma dużej liczby ogólnych zainteresowań - kodu, który jest nieco bezużyteczny bez omawianego papieru zapewniającego kontekst.

Ale w przypadku kodu źródłowego, faktycznego oprogramowania i bardziej skomplikowanych projektów lub projektów będących przedmiotem ogólnego zainteresowania podążałem za twoją taktyką łączenia się z repozytorium GitHub, które powinno być przynajmniej stabilne przez średni okres produktywności moich artykułów.

Fomite
źródło
2

Spójrz na http://www.runmycode.org . Są gospodarzem stron towarzyszących dla kodu związanego z artykułami badawczymi. Jeśli kod to R, Matlab lub kilka innych, faktycznie uruchomi kod dla Ciebie. Jeszcze tego nie próbowałem, ale zamierzam. Myślę, że David Donoho i jego współpracownicy go używają.

Paul G. Constantine
źródło
Ach Już tego użyłeś. runmycode.org/CompanionSite/site.do?siteId=158
Paul G. Constantine
@David Ketcheson i ja przeprowadziliśmy eksperyment w grudniu, używając stosu wakari.io i notesów IPython dla jednego z naszych kodów opartych na języku Python. Można sprawdzić zeszyty PyClaw powtarzalność tutaj .
Aron Ahmadia
0

Biblioteki uniwersyteckie mogą być miejscem dla tego lub ośrodkiem uniwersyteckim.

vanCompute
źródło
-2

Jako czytelnik skuteczne byłoby stwierdzenie w artykule, że kod można uzyskać, kontaktując się bezpośrednio z autorem. Jako autor może to pomóc w promowaniu współpracy i dać mi możliwość przypomnienia ludziom, aby zacytowali mój artykuł, jeśli używają kodu w swojej pracy.

JxB
źródło
4
To interesujący punkt widzenia i jestem ciekawy, jak często się to zdarza. Osobiście staram się od tego uciec. Wydaje mi się, że to jak publikowanie niekompletnej gazety i wymaganie od czytelników, by poprosili o pełną treść. Zobacz sciencecodemanifesto.org .
David Ketcheson
2
Posiadanie adresu kontaktowego na jednym z moich najważniejszych dokumentów jest w zasadzie martwe - i nie jestem pewien co do innych - na ogół sprzeciwiam się temu jako rozwiązaniu. „Kontakt ze mną” niekoniecznie jest najłatwiejszą rzeczą na świecie - zwłaszcza dekadę później.
Fomite
2
Podejście „skontaktuj się ze mną” również nie gwarantuje powtarzalności. Gdy skontaktujesz się ze mną z prośbą o kod, prawdopodobnie wyślę Ci najbardziej aktualną wersję, a nie tę, której użyłem w oryginalnej pracy. Choćby dlatego, że nie miałbym już oryginalnej wersji.
khinsen
3
Badania empiryczne faktycznie nawiązujące kontakt z autorem i proszące o dane, nawet jeśli autor podpisał umowę licencyjną, aby dostarczyć je na żądanie, wykazały, że zaskakująco niewielu autorów stosuje się do nich. Na przykład zobacz dx.doi.org/10.1371/journal.pone.0007078 i cytowane w nim cytaty. Jeśli to nie działa dobrze w przypadku danych, podejrzewam, że nie jest to również dobre rozwiązanie dla kodu.
cboettig 18.01.12