updated documentation.md

This commit is contained in:
Nicole Dresselhaus 2025-06-05 11:20:12 +02:00
parent be80d335ff
commit 6fabb47fed
32 changed files with 3885 additions and 2234 deletions

View File

@ -1,69 +1,931 @@
@article{wilson2017good,
title={Good enough practices in scientific computing},
author={Wilson, Greg and Bryan, Jennifer and Cranston, Karen and Kitzes, Justin and Nederbragt, Lex and Teal, Tracy K},
journal={PLoS computational biology},
volume={13},
number={6},
pages={e1005510},
year={2017},
publisher={Public Library of Science}
@book{AhnertEtAl2023CollaborativeHistoricalResearch,
title = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}: {{Lessons}} from an {{Interdisciplinary Project}}},
shorttitle = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}},
author = {Ahnert, Ruth and Griffin, Emma and Ridge, Mia and Tolfo, Giorgia},
date = {2023},
series = {Cambridge {{Elements}}: {{Historical Theory}} and {{Practice}}},
publisher = {Cambridge University Press},
location = {Cambridge},
doi = {10.1017/9781009175548},
url = {https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D},
urldate = {2023-01-26},
abstract = {This book is output of the Living with Machines project},
langid = {english},
language = {en},
keywords = {field: History,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/ET5S8DMH/Ahnert et al. - 2023 - Collaborative Historical Research in the Age of Big Data Lessons from an Interdisciplinary Project.pdf}
}
% == BibLateX quality report for AhnertEtAl2023CollaborativeHistoricalResearch:
% ? Title looks like it was stored in title-case in Zotero
@article{prlic2012ten,
title={Ten simple rules for documenting scientific software},
author={Prli{\'c}, Andreas and Procter, James B},
journal={PLoS Computational Biology},
volume={8},
number={12},
pages={e1002802},
year={2012},
publisher={Public Library of Science}
@report{AltenhonerEtAl2023DFGPraxisregeln,
title = {DFG-Praxisregeln "Digitalisierung". Aktualisierte Fassung 2022.},
author = {Altenhöner, Reinhard and Berger, Andreas and Bracht, Christian and Klimpel, Paul and Meyer, Sebastian and Neuburger, Andreas and Stäcker, Thomas and Stein, Regine},
date = {2023-02-16},
url = {https://zenodo.org/record/7435724},
urldate = {2023-03-07},
abstract = {Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.},
langid = {deu},
language = {deu},
keywords = {Digital Scholarly Editions,Digitalisierung,Erschließung,Informationsinfrastrukturen,NFDI,Praxisregeln,project: documentation,Project: Methods Lab 🥼,Standardbildung,TEI: Text Encoding Initiative},
file = {/home/drezil/Zotero/storage/46FYRPPH/Altenhöner et al. - 2023 - DFG-Praxisregeln Digitalisierung. Aktualisierte Fassung 2022..pdf}
}
% == BibLateX quality report for AltenhonerEtAl2023DFGPraxisregeln:
% Missing required field 'type'
% Missing required field 'institution'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("Zenodo")
@article{smith2016software,
title={Software citation principles},
author={Smith, Arfon M and Katz, Daniel S and Niemeyer, Kyle E and FORCE11 Software Citation Working Group and others},
journal={PeerJ Computer Science},
volume={2},
pages={e86},
year={2016},
publisher={PeerJ Inc.}
@article{BarkerEtAl2022IntroducingFAIR,
title = {Introducing the {{FAIR Principles}} for Research Software},
author = {Barker, Michelle and Chue Hong, Neil P. and Katz, Daniel S. and Lamprecht, Anna-Lena and Martinez-Ortiz, Carlos and Psomopoulos, Fotis and Harrow, Jennifer and Castro, Leyla Jael and Gruenpeter, Morane and Martinez, Paula Andrea and Honeyman, Tom},
date = {2022-10-14},
journaltitle = {Scientific Data},
shortjournal = {Sci Data},
volume = {9},
number = {1},
pages = {622},
publisher = {Nature Publishing Group},
issn = {2052-4463},
doi = {10.1038/s41597-022-01710-x},
url = {https://www.nature.com/articles/s41597-022-01710-x},
urldate = {2024-09-10},
abstract = {Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.},
langid = {english},
language = {en},
keywords = {Policy,project: documentation,Project: Methods Lab 🥼,Research management,RSE: Research Software Engineering},
file = {/home/drezil/Zotero/storage/VRFPNWKW/VRFPNWKW_Barker et al. - 2022 - Introducing the FAIR Principles for research software.pdf}
}
% == BibLateX quality report for BarkerEtAl2022IntroducingFAIR:
% Unexpected field 'publisher'
% ? unused Library catalog ("www.nature.com")
@article{maria2019jupyter,
title={Jupyter notebooks—a publishing format for reproducible computational workflows},
author={Kluyver, Thomas and Ragan-Kelley, Benjamin and P{\'e}rez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica B and Grout, Jason and Corlay, Sylvain and others},
journal={Positioning and Power in Academic Publishing: Players, Agents and Agendas},
volume={20},
pages={87--90},
year={2016},
publisher={IOS Press}
@book{CremerEtAl2024Projektmanagement,
title = {Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit},
editor = {Cremer, Fabian and Dogunke, Swantje and Neubert, Anna Maria and Wübbena, Thorsten},
date = {2024-04},
publisher = {Bielefeld University Press},
location = {Bielefeld},
doi = {10.14361/9783839469675},
abstract = {Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.},
langid = {ngerman},
language = {de},
keywords = {field: Digital Humanities (DH),Project management,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/GYJK3NUY/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf;/home/drezil/Zotero/storage/XQ6AI49P/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf}
}
% == BibLateX quality report for CremerEtAl2024Projektmanagement:
% Missing required field 'author'
@misc{endings2020principles,
title = {Endings Principles for Digital Longevity},
author = {{Endings Project}},
year = {2020},
url = {https://endings.uvic.ca/principles.html}
@article{DiehlEtAl2025JournalOpenSource,
title = {The {{Journal}} of {{Open Source Software}} ({{JOSS}}): {{Bringing Open-Source Software Practices}} to the {{Scholarly Publishing Community}} for {{Authors}}, {{Reviewers}}, {{Editors}}, and {{Publishers}}},
shorttitle = {The {{Journal}} of {{Open Source Software}} ({{JOSS}})},
author = {Diehl, Patrick and Soneson, Charlotte and Kurchin, Rachel C. and Mounce, Ross and Katz, Daniel S.},
date = {2025-02-04},
journaltitle = {Journal of Librarianship and Scholarly Communication},
volume = {12},
number = {2},
publisher = {Iowa State University Digital Press},
issn = {2162-3309},
doi = {10.31274/jlsc.18285},
url = {https://www.iastatedigitalpress.com/jlsc/article/id/18285/},
urldate = {2025-05-15},
abstract = {Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US\$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.},
issue = {2},
langid = {english},
language = {eng},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/G4T6JNUU/Diehl et al. - 2025 - The Journal of Open Source Software (JOSS) Bringing Open-Source Software Practices to the Scholarly.pdf}
}
% == BibLateX quality report for DiehlEtAl2025JournalOpenSource:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.iastatedigitalpress.com")
@article{katz2021open,
title={The Journal of Open Source Software (JOSS)},
author={Katz, Daniel S and Niemeyer, Kyle E and Smith, Arfon M},
journal={PeerJ Computer Science},
volume={7},
pages={e432},
year={2021},
publisher={PeerJ Inc.}
@misc{EndingsPrinciples221,
title = {Endings {{Principles}} for {{Digital Longevity}}},
shorttitle = {Endings {{Principles}}},
author = {{Endings Project Team}},
date = {2023-03-03},
url = {https://endings.uvic.ca/principles.html},
urldate = {2024-05-14},
abstract = {Enabling Sustainable Digital Humanities Projects},
langid = {english},
language = {en},
version = {2.2.1},
keywords = {project: documentation,Project: Methods Lab 🥼,Project: Tool Registry 🧰,talk: 2024 Bochum,writing: 2024 Tool Registry}
}
% == BibLateX quality report for EndingsPrinciples221:
% ? Title looks like it was stored in title-case in Zotero
@standard{Forschungsgemeinschaft2025LeitlinienzurSicherung,
title = {Leitlinien zur Sicherung guter wissenschaftlicher Praxis},
date = {2024-09},
publisher = {Deutsche Forschungsgemeinschaft},
doi = {10.5281/zenodo.14281892},
url = {https://zenodo.org/records/14281892},
urldate = {2025-05-15},
abstract = {The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.},
langid = {ngerman},
language = {de},
version = {1.2},
keywords = {code of conduct,Deutsche Forschungsgemeinschaft,DFG,German research foundation,good scientific practice,gute wissenschaftliche Praxis,Kodex,Leitlinien zur Sicherung guter wissenschaftlicher Praxis,project: documentation,Project: Methods Lab 🥼,research integrity,scientific misconduct,Wissenschaftliche Integrität,wissenschaftliches Fehlverhalten},
file = {/home/drezil/Zotero/storage/DMF478TJ/2024 - Leitlinien zur Sicherung guter wissenschaftlicher Praxis.pdf}
}
% == BibLateX quality report for Forschungsgemeinschaft2025LeitlinienzurSicherung:
% Unexpected field 'title'
% Unexpected field 'publisher'
% Unexpected field 'language'
% Unexpected field 'version'
% ? unused Committee ("Team „Wissenschaftliche Integrität“")
% ? unused Library catalog ("Zenodo")
@article{Hasselbring2020OpenSourceResearch,
title = {Open {{Source Research Software}}},
author = {Hasselbring, Wilhelm and Carr, Leslie and Hettrick, Simon and Packer, Heather and Tiropanis, Thanassis},
date = {2020-08},
journaltitle = {Computer},
shortjournal = {Computer},
volume = {53},
number = {8},
pages = {84--88},
issn = {0018-9162, 1558-0814},
doi = {10.1109/MC.2020.2998235},
url = {https://ieeexplore.ieee.org/document/9153295/},
urldate = {2025-06-05},
keywords = {Praxisregeln,project: documentation,Project: Methods Lab 🥼,Research Software Engineering,Standardbildung},
file = {/home/drezil/Zotero/storage/E8CWCEFF/Hasselbring et al. - 2020 - Open Source Research Software.pdf}
}
% == BibLateX quality report for Hasselbring2020OpenSourceResearch:
% 'issn': not a valid ISSN
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("DOI.org (Crossref)")
@book{Kemman2021Trading,
title = {Trading {{Zones}} of {{Digital History}}},
author = {Kemman, Max},
date = {2021},
series = {Studies in {{Digital History}} and {{Hermeneutics}}},
number = {1},
publisher = {De Gruyter Oldenbourg},
location = {Berlin, Boston},
doi = {10.1515/9783110682106},
url = {https://www.degruyter.com/document/doi/10.1515/9783110682106/html},
urldate = {2021-09-23},
abstract = {Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.},
isbn = {978-3-11-068210-6},
langid = {english},
language = {en},
pagetotal = {182},
keywords = {Digital History,Eintrag bereinigt,PDF (Dropbox),project: documentation,TH-MA-Bloomsbury},
file = {/home/drezil/Zotero/storage/ZS2QA2H6/Kemman - 2021 - Trading Zones of Digital History.pdf}
}
% == BibLateX quality report for Kemman2021Trading:
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.degruyter.com")
@inproceedings{KluyverEtAl2016JupyterNotebookspublishing,
title = {Jupyter {{Notebooks}} a Publishing Format for Reproducible Computational Workflows},
author = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team},
editor = {Loizides, Fernando and Scmidt, Birgit},
namea = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team and Loizides, Fernando and Scmidt, Birgit},
nameatype = {collaborator},
date = {2016},
pages = {87--90},
publisher = {IOS Press},
doi = {10.3233/978-1-61499-649-1-87},
url = {https://eprints.soton.ac.uk/403913/},
urldate = {2025-05-15},
abstract = {It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.},
eventtitle = {20th {{International Conference}} on {{Electronic Publishing}} (01/01/16)},
langid = {english},
language = {en},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/QB33NJLA/Kluyver et al. - 2016 - Jupyter Notebooks a publishing format for reproducible computational workflows.pdf}
}
% == BibLateX quality report for KluyverEtAl2016JupyterNotebookspublishing:
% Missing required field 'booktitle'
% ? unused Library catalog ("eprints.soton.ac.uk")
@article{lamprecht2020towards,
title={Towards FAIR principles for research software},
author={Lamprecht, Anna-Lena and Garcia, Leyla and Kuzak, Mateusz and Martinez, Carlos and Arcila, Ricardo and Martin Del Pico, Eva and others},
journal={Data Science},
volume={3},
number={1},
pages={37--59},
year={2020},
publisher={IOS Press}
title = {Towards {{FAIR}} Principles for~Research~Software},
author = {Lamprecht, Anna-Lena and Garcia, Leyla and Kuzak, Mateusz and Martinez, Carlos and Arcila, Ricardo and Martin Del Pico, Eva and Dominguez Del Angel, Victoria and family=Sandt, given=Stephanie, prefix=van de, useprefix=true and Ison, Jon and Martinez, Paula Andrea and McQuilton, Peter and Valencia, Alfonso and Harrow, Jennifer and Psomopoulos, Fotis and Gelpi, Josep Ll. and Chue Hong, Neil and Goble, Carole and Capella-Gutierrez, Salvador},
date = {2020-06-12},
journaltitle = {Data Science},
volume = {3},
number = {1},
pages = {37--59},
publisher = {SAGE Publications},
issn = {2451-8484},
doi = {10.3233/DS-190026},
url = {https://doi.org/10.3233/DS-190026},
urldate = {2025-05-15},
abstract = {The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.},
langid = {english},
language = {EN},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/CCXUNESS/Lamprecht et al. - 2020 - Towards FAIR principles for research software.pdf}
}
% == BibLateX quality report for lamprecht2020towards:
% Unexpected field 'publisher'
% ? unused Library catalog ("SAGE Journals")
@article{Lee2018Tensimplerules,
title = {Ten Simple Rules for Documenting Scientific Software},
author = {Lee, Benjamin D.},
date = {2018-12-20},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {14},
number = {12},
pages = {e1006561},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1006561},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Citation analysis,Computer software,Genome analysis,Genomics,Open source software,project: documentation,Project: Methods Lab 🥼,Software development,Software tools,Source code},
file = {/home/drezil/Zotero/storage/Y72BUDFA/Lee - 2018 - Ten simple rules for documenting scientific software.pdf}
}
% == BibLateX quality report for Lee2018Tensimplerules:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")
@article{NoyEtAl2019IndustryscaleKnowledge,
title = {Software Citation Principles},
author = {Smith, Arfon M. and Katz, Daniel S. and Niemeyer, Kyle E.},
date = {2016},
journaltitle = {PeerJ Computer Science},
shortjournal = {PeerJ Comput. Sci.},
volume = {2},
publisher = {PeerJ Inc.},
issn = {2376-5992},
doi = {10.7717/peerj-cs.86},
url = {https://peerj.com/articles/cs-86},
urldate = {2020-09-11},
abstract = {Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.},
langid = {english},
language = {en},
keywords = {Eintrag bereinigt,PDF (Dropbox),project: documentation,Project: Methods Lab 🥼,Research Software Engineering},
annotation = {Keine weiteren Informationen gefunden},
file = {/home/drezil/Zotero/storage/XVF927LY/Smith et al. - 2016 - Software citation principles.pdf}
}
% == BibLateX quality report for NoyEtAl2019IndustryscaleKnowledge:
% Unexpected field 'publisher'
% ? unused Library catalog ("peerj.com")
@article{PrlicProcter2012TenSimpleRules,
title = {Ten {{Simple Rules}} for the {{Open Development}} of {{Scientific Software}}},
author = {Prlić, Andreas and Procter, James B.},
date = {2012-12-06},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {8},
number = {12},
pages = {e1002802},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1002802},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Computer software,Eyes,Open source software,project: documentation,Project: Methods Lab 🥼,Research funding,Scientists,Software tools,Source code,Sustainability science},
file = {/home/drezil/Zotero/storage/STZFWU4P/Prlić and Procter - 2012 - Ten Simple Rules for the Open Development of Scientific Software.pdf}
}
% == BibLateX quality report for PrlicProcter2012TenSimpleRules:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("PLoS Journals")
@article{WilsonEtAl2017Goodenoughpractices,
title = {Good Enough Practices in Scientific Computing},
author = {Wilson, Greg and Bryan, Jennifer and Cranston, Karen and Kitzes, Justin and Nederbragt, Lex and Teal, Tracy K.},
date = {2017-06-22},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {13},
number = {6},
pages = {e1005510},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1005510},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510},
urldate = {2025-05-15},
abstract = {Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often don't know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.},
langid = {english},
language = {en},
keywords = {Computer software,Control systems,Data management,Metadata,Programming languages,project: documentation,Project: Methods Lab 🥼,Reproducibility,Software tools,Source code},
file = {/home/drezil/Zotero/storage/KWWLZBNY/Wilson et al. - 2017 - Good enough practices in scientific computing.pdf}
}
% == BibLateX quality report for WilsonEtAl2017Goodenoughpractices:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")
@book{AhnertEtAl2023CollaborativeHistoricalResearch,
title = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}: {{Lessons}} from an {{Interdisciplinary Project}}},
shorttitle = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}},
author = {Ahnert, Ruth and Griffin, Emma and Ridge, Mia and Tolfo, Giorgia},
date = {2023},
series = {Cambridge {{Elements}}: {{Historical Theory}} and {{Practice}}},
publisher = {Cambridge University Press},
location = {Cambridge},
doi = {10.1017/9781009175548},
url = {https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D},
urldate = {2023-01-26},
abstract = {This book is output of the Living with Machines project},
langid = {english},
language = {en},
keywords = {field: History,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/ET5S8DMH/Ahnert et al. - 2023 - Collaborative Historical Research in the Age of Big Data Lessons from an Interdisciplinary Project.pdf}
}
% == BibLateX quality report for AhnertEtAl2023CollaborativeHistoricalResearch:
% ? Title looks like it was stored in title-case in Zotero
@report{AltenhonerEtAl2023DFGPraxisregeln,
title = {DFG-Praxisregeln "Digitalisierung". Aktualisierte Fassung 2022.},
author = {Altenhöner, Reinhard and Berger, Andreas and Bracht, Christian and Klimpel, Paul and Meyer, Sebastian and Neuburger, Andreas and Stäcker, Thomas and Stein, Regine},
date = {2023-02-16},
url = {https://zenodo.org/record/7435724},
urldate = {2023-03-07},
abstract = {Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.},
langid = {deu},
language = {deu},
keywords = {Digital Scholarly Editions,Digitalisierung,Erschließung,Informationsinfrastrukturen,NFDI,Praxisregeln,project: documentation,Project: Methods Lab 🥼,Standardbildung,TEI: Text Encoding Initiative},
file = {/home/drezil/Zotero/storage/46FYRPPH/Altenhöner et al. - 2023 - DFG-Praxisregeln Digitalisierung. Aktualisierte Fassung 2022..pdf}
}
% == BibLateX quality report for AltenhonerEtAl2023DFGPraxisregeln:
% Missing required field 'type'
% Missing required field 'institution'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("Zenodo")
@article{BarkerEtAl2022IntroducingFAIR,
title = {Introducing the {{FAIR Principles}} for Research Software},
author = {Barker, Michelle and Chue Hong, Neil P. and Katz, Daniel S. and Lamprecht, Anna-Lena and Martinez-Ortiz, Carlos and Psomopoulos, Fotis and Harrow, Jennifer and Castro, Leyla Jael and Gruenpeter, Morane and Martinez, Paula Andrea and Honeyman, Tom},
date = {2022-10-14},
journaltitle = {Scientific Data},
shortjournal = {Sci Data},
volume = {9},
number = {1},
pages = {622},
publisher = {Nature Publishing Group},
issn = {2052-4463},
doi = {10.1038/s41597-022-01710-x},
url = {https://www.nature.com/articles/s41597-022-01710-x},
urldate = {2024-09-10},
abstract = {Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.},
langid = {english},
language = {en},
keywords = {Policy,project: documentation,Project: Methods Lab 🥼,Research management,RSE: Research Software Engineering},
file = {/home/drezil/Zotero/storage/VRFPNWKW/VRFPNWKW_Barker et al. - 2022 - Introducing the FAIR Principles for research software.pdf}
}
% == BibLateX quality report for BarkerEtAl2022IntroducingFAIR:
% Unexpected field 'publisher'
% ? unused Library catalog ("www.nature.com")
@book{CremerEtAl2024Projektmanagement,
title = {Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit},
editor = {Cremer, Fabian and Dogunke, Swantje and Neubert, Anna Maria and Wübbena, Thorsten},
date = {2024-04},
publisher = {Bielefeld University Press},
location = {Bielefeld},
doi = {10.14361/9783839469675},
abstract = {Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.},
langid = {ngerman},
language = {de},
keywords = {field: Digital Humanities (DH),Project management,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/GYJK3NUY/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf;/home/drezil/Zotero/storage/XQ6AI49P/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf}
}
% == BibLateX quality report for CremerEtAl2024Projektmanagement:
% Missing required field 'author'
@article{DiehlEtAl2025JournalOpenSource,
title = {The {{Journal}} of {{Open Source Software}} ({{JOSS}}): {{Bringing Open-Source Software Practices}} to the {{Scholarly Publishing Community}} for {{Authors}}, {{Reviewers}}, {{Editors}}, and {{Publishers}}},
shorttitle = {The {{Journal}} of {{Open Source Software}} ({{JOSS}})},
author = {Diehl, Patrick and Soneson, Charlotte and Kurchin, Rachel C. and Mounce, Ross and Katz, Daniel S.},
date = {2025-02-04},
journaltitle = {Journal of Librarianship and Scholarly Communication},
volume = {12},
number = {2},
publisher = {Iowa State University Digital Press},
issn = {2162-3309},
doi = {10.31274/jlsc.18285},
url = {https://www.iastatedigitalpress.com/jlsc/article/id/18285/},
urldate = {2025-05-15},
abstract = {Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US\$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.},
issue = {2},
langid = {english},
language = {eng},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/G4T6JNUU/Diehl et al. - 2025 - The Journal of Open Source Software (JOSS) Bringing Open-Source Software Practices to the Scholarly.pdf}
}
% == BibLateX quality report for DiehlEtAl2025JournalOpenSource:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.iastatedigitalpress.com")
@misc{EndingsPrinciples221,
title = {Endings {{Principles}} for {{Digital Longevity}}},
shorttitle = {Endings {{Principles}}},
author = {{Endings Project Team}},
date = {2023-03-03},
url = {https://endings.uvic.ca/principles.html},
urldate = {2024-05-14},
abstract = {Enabling Sustainable Digital Humanities Projects},
langid = {english},
language = {en},
version = {2.2.1},
keywords = {project: documentation,Project: Methods Lab 🥼,Project: Tool Registry 🧰,talk: 2024 Bochum,writing: 2024 Tool Registry}
}
% == BibLateX quality report for EndingsPrinciples221:
% ? Title looks like it was stored in title-case in Zotero
@standard{Forschungsgemeinschaft2025LeitlinienzurSicherung,
title = {Leitlinien zur Sicherung guter wissenschaftlicher Praxis},
date = {2024-09},
publisher = {Deutsche Forschungsgemeinschaft},
doi = {10.5281/zenodo.14281892},
url = {https://zenodo.org/records/14281892},
urldate = {2025-05-15},
abstract = {The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.},
langid = {ngerman},
language = {de},
version = {1.2},
keywords = {code of conduct,Deutsche Forschungsgemeinschaft,DFG,German research foundation,good scientific practice,gute wissenschaftliche Praxis,Kodex,Leitlinien zur Sicherung guter wissenschaftlicher Praxis,project: documentation,Project: Methods Lab 🥼,research integrity,scientific misconduct,Wissenschaftliche Integrität,wissenschaftliches Fehlverhalten},
file = {/home/drezil/Zotero/storage/DMF478TJ/2024 - Leitlinien zur Sicherung guter wissenschaftlicher Praxis.pdf}
}
% == BibLateX quality report for Forschungsgemeinschaft2025LeitlinienzurSicherung:
% Unexpected field 'title'
% Unexpected field 'publisher'
% Unexpected field 'language'
% Unexpected field 'version'
% ? unused Committee ("Team „Wissenschaftliche Integrität“")
% ? unused Library catalog ("Zenodo")
@book{Kemman2021Trading,
title = {Trading {{Zones}} of {{Digital History}}},
author = {Kemman, Max},
date = {2021},
series = {Studies in {{Digital History}} and {{Hermeneutics}}},
number = {1},
publisher = {De Gruyter Oldenbourg},
location = {Berlin, Boston},
doi = {10.1515/9783110682106},
url = {https://www.degruyter.com/document/doi/10.1515/9783110682106/html},
urldate = {2021-09-23},
abstract = {Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.},
isbn = {978-3-11-068210-6},
langid = {english},
language = {en},
pagetotal = {182},
keywords = {Digital History,Eintrag bereinigt,PDF (Dropbox),project: documentation,TH-MA-Bloomsbury},
file = {/home/drezil/Zotero/storage/ZS2QA2H6/Kemman - 2021 - Trading Zones of Digital History.pdf}
}
% == BibLateX quality report for Kemman2021Trading:
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.degruyter.com")
@inproceedings{KluyverEtAl2016JupyterNotebookspublishing,
title = {Jupyter {{Notebooks}} a Publishing Format for Reproducible Computational Workflows},
author = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team},
editor = {Loizides, Fernando and Scmidt, Birgit},
namea = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team and Loizides, Fernando and Scmidt, Birgit},
nameatype = {collaborator},
date = {2016},
pages = {87--90},
publisher = {IOS Press},
doi = {10.3233/978-1-61499-649-1-87},
url = {https://eprints.soton.ac.uk/403913/},
urldate = {2025-05-15},
abstract = {It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.},
eventtitle = {20th {{International Conference}} on {{Electronic Publishing}} (01/01/16)},
langid = {english},
language = {en},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/QB33NJLA/Kluyver et al. - 2016 - Jupyter Notebooks a publishing format for reproducible computational workflows.pdf}
}
% == BibLateX quality report for KluyverEtAl2016JupyterNotebookspublishing:
% Missing required field 'booktitle'
% ? unused Library catalog ("eprints.soton.ac.uk")
@article{lamprecht2020towards,
title = {Towards {{FAIR}} Principles for~Research~Software},
author = {Lamprecht, Anna-Lena and Garcia, Leyla and Kuzak, Mateusz and Martinez, Carlos and Arcila, Ricardo and Martin Del Pico, Eva and Dominguez Del Angel, Victoria and family=Sandt, given=Stephanie, prefix=van de, useprefix=true and Ison, Jon and Martinez, Paula Andrea and McQuilton, Peter and Valencia, Alfonso and Harrow, Jennifer and Psomopoulos, Fotis and Gelpi, Josep Ll. and Chue Hong, Neil and Goble, Carole and Capella-Gutierrez, Salvador},
date = {2020-06-12},
journaltitle = {Data Science},
volume = {3},
number = {1},
pages = {37--59},
publisher = {SAGE Publications},
issn = {2451-8484},
doi = {10.3233/DS-190026},
url = {https://doi.org/10.3233/DS-190026},
urldate = {2025-05-15},
abstract = {The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.},
langid = {english},
language = {EN},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/CCXUNESS/Lamprecht et al. - 2020 - Towards FAIR principles for research software.pdf}
}
% == BibLateX quality report for lamprecht2020towards:
% Unexpected field 'publisher'
% ? unused Library catalog ("SAGE Journals")
@article{Lee2018Tensimplerules,
title = {Ten Simple Rules for Documenting Scientific Software},
author = {Lee, Benjamin D.},
date = {2018-12-20},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {14},
number = {12},
pages = {e1006561},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1006561},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Citation analysis,Computer software,Genome analysis,Genomics,Open source software,project: documentation,Project: Methods Lab 🥼,Software development,Software tools,Source code},
file = {/home/drezil/Zotero/storage/Y72BUDFA/Lee - 2018 - Ten simple rules for documenting scientific software.pdf}
}
% == BibLateX quality report for Lee2018Tensimplerules:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")
@article{NoyEtAl2019IndustryscaleKnowledge,
title = {Software Citation Principles},
author = {Smith, Arfon M. and Katz, Daniel S. and Niemeyer, Kyle E.},
date = {2016},
journaltitle = {PeerJ Computer Science},
shortjournal = {PeerJ Comput. Sci.},
volume = {2},
publisher = {PeerJ Inc.},
issn = {2376-5992},
doi = {10.7717/peerj-cs.86},
url = {https://peerj.com/articles/cs-86},
urldate = {2020-09-11},
abstract = {Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.},
langid = {english},
language = {en},
keywords = {Eintrag bereinigt,PDF (Dropbox),project: documentation,Project: Methods Lab 🥼,Research Software Engineering},
annotation = {Keine weiteren Informationen gefunden},
file = {/home/drezil/Zotero/storage/XVF927LY/Smith et al. - 2016 - Software citation principles.pdf}
}
% == BibLateX quality report for NoyEtAl2019IndustryscaleKnowledge:
% Unexpected field 'publisher'
% ? unused Library catalog ("peerj.com")
@article{PrlicProcter2012TenSimpleRules,
title = {Ten {{Simple Rules}} for the {{Open Development}} of {{Scientific Software}}},
author = {Prlić, Andreas and Procter, James B.},
date = {2012-12-06},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {8},
number = {12},
pages = {e1002802},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1002802},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Computer software,Eyes,Open source software,project: documentation,Project: Methods Lab 🥼,Research funding,Scientists,Software tools,Source code,Sustainability science},
file = {/home/drezil/Zotero/storage/STZFWU4P/Prlić and Procter - 2012 - Ten Simple Rules for the Open Development of Scientific Software.pdf}
}
% == BibLateX quality report for PrlicProcter2012TenSimpleRules:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("PLoS Journals")
@article{WilsonEtAl2017Goodenoughpractices,
title = {Good Enough Practices in Scientific Computing},
author = {Wilson, Greg and Bryan, Jennifer and Cranston, Karen and Kitzes, Justin and Nederbragt, Lex and Teal, Tracy K.},
date = {2017-06-22},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {13},
number = {6},
pages = {e1005510},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1005510},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510},
urldate = {2025-05-15},
abstract = {Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often don't know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.},
langid = {english},
language = {en},
keywords = {Computer software,Control systems,Data management,Metadata,Programming languages,project: documentation,Project: Methods Lab 🥼,Reproducibility,Software tools,Source code},
file = {/home/drezil/Zotero/storage/KWWLZBNY/Wilson et al. - 2017 - Good enough practices in scientific computing.pdf}
}
% == BibLateX quality report for WilsonEtAl2017Goodenoughpractices:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")
@book{AhnertEtAl2023CollaborativeHistoricalResearch,
title = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}: {{Lessons}} from an {{Interdisciplinary Project}}},
shorttitle = {Collaborative {{Historical Research}} in the {{Age}} of {{Big Data}}},
author = {Ahnert, Ruth and Griffin, Emma and Ridge, Mia and Tolfo, Giorgia},
date = {2023},
series = {Cambridge {{Elements}}: {{Historical Theory}} and {{Practice}}},
publisher = {Cambridge University Press},
location = {Cambridge},
doi = {10.1017/9781009175548},
url = {https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D},
urldate = {2023-01-26},
abstract = {This book is output of the Living with Machines project},
langid = {english},
language = {en},
keywords = {field: History,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/ET5S8DMH/Ahnert et al. - 2023 - Collaborative Historical Research in the Age of Big Data Lessons from an Interdisciplinary Project.pdf}
}
% == BibLateX quality report for AhnertEtAl2023CollaborativeHistoricalResearch:
% ? Title looks like it was stored in title-case in Zotero
@report{AltenhonerEtAl2023DFGPraxisregeln,
title = {DFG-Praxisregeln "Digitalisierung". Aktualisierte Fassung 2022.},
author = {Altenhöner, Reinhard and Berger, Andreas and Bracht, Christian and Klimpel, Paul and Meyer, Sebastian and Neuburger, Andreas and Stäcker, Thomas and Stein, Regine},
date = {2023-02-16},
url = {https://zenodo.org/record/7435724},
urldate = {2023-03-07},
abstract = {Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.},
langid = {deu},
language = {deu},
keywords = {Digital Scholarly Editions,Digitalisierung,Erschließung,Informationsinfrastrukturen,NFDI,Praxisregeln,project: documentation,Project: Methods Lab 🥼,Standardbildung,TEI: Text Encoding Initiative},
file = {/home/drezil/Zotero/storage/46FYRPPH/Altenhöner et al. - 2023 - DFG-Praxisregeln Digitalisierung. Aktualisierte Fassung 2022..pdf}
}
% == BibLateX quality report for AltenhonerEtAl2023DFGPraxisregeln:
% Missing required field 'type'
% Missing required field 'institution'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("Zenodo")
@article{BarkerEtAl2022IntroducingFAIR,
title = {Introducing the {{FAIR Principles}} for Research Software},
author = {Barker, Michelle and Chue Hong, Neil P. and Katz, Daniel S. and Lamprecht, Anna-Lena and Martinez-Ortiz, Carlos and Psomopoulos, Fotis and Harrow, Jennifer and Castro, Leyla Jael and Gruenpeter, Morane and Martinez, Paula Andrea and Honeyman, Tom},
date = {2022-10-14},
journaltitle = {Scientific Data},
shortjournal = {Sci Data},
volume = {9},
number = {1},
pages = {622},
publisher = {Nature Publishing Group},
issn = {2052-4463},
doi = {10.1038/s41597-022-01710-x},
url = {https://www.nature.com/articles/s41597-022-01710-x},
urldate = {2024-09-10},
abstract = {Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.},
langid = {english},
language = {en},
keywords = {Policy,project: documentation,Project: Methods Lab 🥼,Research management,RSE: Research Software Engineering},
file = {/home/drezil/Zotero/storage/VRFPNWKW/VRFPNWKW_Barker et al. - 2022 - Introducing the FAIR Principles for research software.pdf}
}
% == BibLateX quality report for BarkerEtAl2022IntroducingFAIR:
% Unexpected field 'publisher'
% ? unused Library catalog ("www.nature.com")
@book{CremerEtAl2024Projektmanagement,
title = {Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit},
editor = {Cremer, Fabian and Dogunke, Swantje and Neubert, Anna Maria and Wübbena, Thorsten},
date = {2024-04},
publisher = {Bielefeld University Press},
location = {Bielefeld},
doi = {10.14361/9783839469675},
abstract = {Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.},
langid = {ngerman},
language = {de},
keywords = {field: Digital Humanities (DH),Project management,project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/GYJK3NUY/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf;/home/drezil/Zotero/storage/XQ6AI49P/Cremer et al. - 2024 - Projektmanagement und Digital Humanities Zur klugen Gestaltung der Zusammenarbeit.pdf}
}
% == BibLateX quality report for CremerEtAl2024Projektmanagement:
% Missing required field 'author'
@article{DiehlEtAl2025JournalOpenSource,
title = {The {{Journal}} of {{Open Source Software}} ({{JOSS}}): {{Bringing Open-Source Software Practices}} to the {{Scholarly Publishing Community}} for {{Authors}}, {{Reviewers}}, {{Editors}}, and {{Publishers}}},
shorttitle = {The {{Journal}} of {{Open Source Software}} ({{JOSS}})},
author = {Diehl, Patrick and Soneson, Charlotte and Kurchin, Rachel C. and Mounce, Ross and Katz, Daniel S.},
date = {2025-02-04},
journaltitle = {Journal of Librarianship and Scholarly Communication},
volume = {12},
number = {2},
publisher = {Iowa State University Digital Press},
issn = {2162-3309},
doi = {10.31274/jlsc.18285},
url = {https://www.iastatedigitalpress.com/jlsc/article/id/18285/},
urldate = {2025-05-15},
abstract = {Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US\$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.},
issue = {2},
langid = {english},
language = {eng},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/G4T6JNUU/Diehl et al. - 2025 - The Journal of Open Source Software (JOSS) Bringing Open-Source Software Practices to the Scholarly.pdf}
}
% == BibLateX quality report for DiehlEtAl2025JournalOpenSource:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.iastatedigitalpress.com")
@misc{EndingsPrinciples221,
title = {Endings {{Principles}} for {{Digital Longevity}}},
shorttitle = {Endings {{Principles}}},
author = {{Endings Project Team}},
date = {2023-03-03},
url = {https://endings.uvic.ca/principles.html},
urldate = {2024-05-14},
abstract = {Enabling Sustainable Digital Humanities Projects},
langid = {english},
language = {en},
version = {2.2.1},
keywords = {project: documentation,Project: Methods Lab 🥼,Project: Tool Registry 🧰,talk: 2024 Bochum,writing: 2024 Tool Registry}
}
% == BibLateX quality report for EndingsPrinciples221:
% ? Title looks like it was stored in title-case in Zotero
@standard{Forschungsgemeinschaft2025LeitlinienzurSicherung,
title = {Leitlinien zur Sicherung guter wissenschaftlicher Praxis},
date = {2024-09},
publisher = {Deutsche Forschungsgemeinschaft},
doi = {10.5281/zenodo.14281892},
url = {https://zenodo.org/records/14281892},
urldate = {2025-05-15},
abstract = {The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.},
langid = {ngerman},
language = {de},
version = {1.2},
keywords = {code of conduct,Deutsche Forschungsgemeinschaft,DFG,German research foundation,good scientific practice,gute wissenschaftliche Praxis,Kodex,Leitlinien zur Sicherung guter wissenschaftlicher Praxis,project: documentation,Project: Methods Lab 🥼,research integrity,scientific misconduct,Wissenschaftliche Integrität,wissenschaftliches Fehlverhalten},
file = {/home/drezil/Zotero/storage/DMF478TJ/2024 - Leitlinien zur Sicherung guter wissenschaftlicher Praxis.pdf}
}
% == BibLateX quality report for Forschungsgemeinschaft2025LeitlinienzurSicherung:
% Unexpected field 'title'
% Unexpected field 'publisher'
% Unexpected field 'language'
% Unexpected field 'version'
% ? unused Committee ("Team „Wissenschaftliche Integrität“")
% ? unused Library catalog ("Zenodo")
@book{Kemman2021Trading,
title = {Trading {{Zones}} of {{Digital History}}},
author = {Kemman, Max},
date = {2021},
series = {Studies in {{Digital History}} and {{Hermeneutics}}},
number = {1},
publisher = {De Gruyter Oldenbourg},
location = {Berlin, Boston},
doi = {10.1515/9783110682106},
url = {https://www.degruyter.com/document/doi/10.1515/9783110682106/html},
urldate = {2021-09-23},
abstract = {Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.},
isbn = {978-3-11-068210-6},
langid = {english},
language = {en},
pagetotal = {182},
keywords = {Digital History,Eintrag bereinigt,PDF (Dropbox),project: documentation,TH-MA-Bloomsbury},
file = {/home/drezil/Zotero/storage/ZS2QA2H6/Kemman - 2021 - Trading Zones of Digital History.pdf}
}
% == BibLateX quality report for Kemman2021Trading:
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("www.degruyter.com")
@inproceedings{KluyverEtAl2016JupyterNotebookspublishing,
title = {Jupyter {{Notebooks}} a Publishing Format for Reproducible Computational Workflows},
author = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team},
editor = {Loizides, Fernando and Scmidt, Birgit},
namea = {Kluyver, Thomas and Ragan-Kelley, Benjamin and Pérez, Fernando and Granger, Brian and Bussonnier, Matthias and Frederic, Jonathan and Kelley, Kyle and Hamrick, Jessica and Grout, Jason and Corlay, Sylvain and Ivanov, Paul and Avila, Damián and Abdalla, Safia and Willing, Carol and Jupyter development team and Loizides, Fernando and Scmidt, Birgit},
nameatype = {collaborator},
date = {2016},
pages = {87--90},
publisher = {IOS Press},
doi = {10.3233/978-1-61499-649-1-87},
url = {https://eprints.soton.ac.uk/403913/},
urldate = {2025-05-15},
abstract = {It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.},
eventtitle = {20th {{International Conference}} on {{Electronic Publishing}} (01/01/16)},
langid = {english},
language = {en},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/QB33NJLA/Kluyver et al. - 2016 - Jupyter Notebooks a publishing format for reproducible computational workflows.pdf}
}
% == BibLateX quality report for KluyverEtAl2016JupyterNotebookspublishing:
% Missing required field 'booktitle'
% ? unused Library catalog ("eprints.soton.ac.uk")
@article{lamprecht2020towards,
title = {Towards {{FAIR}} Principles for~Research~Software},
author = {Lamprecht, Anna-Lena and Garcia, Leyla and Kuzak, Mateusz and Martinez, Carlos and Arcila, Ricardo and Martin Del Pico, Eva and Dominguez Del Angel, Victoria and family=Sandt, given=Stephanie, prefix=van de, useprefix=true and Ison, Jon and Martinez, Paula Andrea and McQuilton, Peter and Valencia, Alfonso and Harrow, Jennifer and Psomopoulos, Fotis and Gelpi, Josep Ll. and Chue Hong, Neil and Goble, Carole and Capella-Gutierrez, Salvador},
date = {2020-06-12},
journaltitle = {Data Science},
volume = {3},
number = {1},
pages = {37--59},
publisher = {SAGE Publications},
issn = {2451-8484},
doi = {10.3233/DS-190026},
url = {https://doi.org/10.3233/DS-190026},
urldate = {2025-05-15},
abstract = {The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.},
langid = {english},
language = {EN},
keywords = {project: documentation,Project: Methods Lab 🥼},
file = {/home/drezil/Zotero/storage/CCXUNESS/Lamprecht et al. - 2020 - Towards FAIR principles for research software.pdf}
}
% == BibLateX quality report for lamprecht2020towards:
% Unexpected field 'publisher'
% ? unused Library catalog ("SAGE Journals")
@article{Lee2018Tensimplerules,
title = {Ten Simple Rules for Documenting Scientific Software},
author = {Lee, Benjamin D.},
date = {2018-12-20},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {14},
number = {12},
pages = {e1006561},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1006561},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Citation analysis,Computer software,Genome analysis,Genomics,Open source software,project: documentation,Project: Methods Lab 🥼,Software development,Software tools,Source code},
file = {/home/drezil/Zotero/storage/Y72BUDFA/Lee - 2018 - Ten simple rules for documenting scientific software.pdf}
}
% == BibLateX quality report for Lee2018Tensimplerules:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")
@article{NoyEtAl2019IndustryscaleKnowledge,
title = {Software Citation Principles},
author = {Smith, Arfon M. and Katz, Daniel S. and Niemeyer, Kyle E.},
date = {2016},
journaltitle = {PeerJ Computer Science},
shortjournal = {PeerJ Comput. Sci.},
volume = {2},
publisher = {PeerJ Inc.},
issn = {2376-5992},
doi = {10.7717/peerj-cs.86},
url = {https://peerj.com/articles/cs-86},
urldate = {2020-09-11},
abstract = {Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.},
langid = {english},
language = {en},
keywords = {Eintrag bereinigt,PDF (Dropbox),project: documentation,Project: Methods Lab 🥼,Research Software Engineering},
annotation = {Keine weiteren Informationen gefunden},
file = {/home/drezil/Zotero/storage/XVF927LY/Smith et al. - 2016 - Software citation principles.pdf}
}
% == BibLateX quality report for NoyEtAl2019IndustryscaleKnowledge:
% Unexpected field 'publisher'
% ? unused Library catalog ("peerj.com")
@article{PrlicProcter2012TenSimpleRules,
title = {Ten {{Simple Rules}} for the {{Open Development}} of {{Scientific Software}}},
author = {Prlić, Andreas and Procter, James B.},
date = {2012-12-06},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {8},
number = {12},
pages = {e1002802},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1002802},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802},
urldate = {2025-05-15},
langid = {english},
language = {en},
keywords = {Computer software,Eyes,Open source software,project: documentation,Project: Methods Lab 🥼,Research funding,Scientists,Software tools,Source code,Sustainability science},
file = {/home/drezil/Zotero/storage/STZFWU4P/Prlić and Procter - 2012 - Ten Simple Rules for the Open Development of Scientific Software.pdf}
}
% == BibLateX quality report for PrlicProcter2012TenSimpleRules:
% Unexpected field 'publisher'
% ? Title looks like it was stored in title-case in Zotero
% ? unused Library catalog ("PLoS Journals")
@article{WilsonEtAl2017Goodenoughpractices,
title = {Good Enough Practices in Scientific Computing},
author = {Wilson, Greg and Bryan, Jennifer and Cranston, Karen and Kitzes, Justin and Nederbragt, Lex and Teal, Tracy K.},
date = {2017-06-22},
journaltitle = {PLOS Computational Biology},
shortjournal = {PLOS Computational Biology},
volume = {13},
number = {6},
pages = {e1005510},
publisher = {Public Library of Science},
issn = {1553-7358},
doi = {10.1371/journal.pcbi.1005510},
url = {https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510},
urldate = {2025-05-15},
abstract = {Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often don't know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.},
langid = {english},
language = {en},
keywords = {Computer software,Control systems,Data management,Metadata,Programming languages,project: documentation,Project: Methods Lab 🥼,Reproducibility,Software tools,Source code},
file = {/home/drezil/Zotero/storage/KWWLZBNY/Wilson et al. - 2017 - Good enough practices in scientific computing.pdf}
}
% == BibLateX quality report for WilsonEtAl2017Goodenoughpractices:
% Unexpected field 'publisher'
% ? unused Library catalog ("PLoS Journals")

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -36,13 +36,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -95,7 +96,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -128,7 +129,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -168,7 +169,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -196,7 +197,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -219,17 +220,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -240,7 +244,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -647,7 +651,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -36,13 +36,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -95,7 +96,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -128,7 +129,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -168,7 +169,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -196,7 +197,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -219,17 +220,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -240,7 +244,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -676,7 +680,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

32
dist/About/Work.html vendored
View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -36,13 +36,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -94,7 +95,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -127,7 +128,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -167,7 +168,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -195,7 +196,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -218,17 +219,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -239,7 +243,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -695,7 +699,7 @@ Was later a “nanny for everything”.</li>
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

32
dist/About/index.html vendored
View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -35,13 +35,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/popper.min.js"></script>
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -93,7 +94,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -126,7 +127,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -166,7 +167,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -194,7 +195,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -217,17 +218,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -238,7 +242,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -701,7 +705,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const isCodeAnnotation = (el) => {
for (const clz of el.classList) {
if (clz.startsWith('code-annotation-')) {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -684,7 +688,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -131,7 +132,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -164,7 +165,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -204,7 +205,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -232,7 +233,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -255,17 +256,20 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -276,7 +280,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -746,7 +750,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -133,7 +134,7 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -166,7 +167,7 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -206,7 +207,7 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -234,7 +235,7 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -257,17 +258,20 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -278,7 +282,7 @@ Knowing that this might sound daunting to many dabbling Haskellers (like I am),
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -801,7 +805,7 @@ Note
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -654,7 +658,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -131,7 +132,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -164,7 +165,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -204,7 +205,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -232,7 +233,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -255,17 +256,20 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -276,7 +280,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -1121,7 +1125,7 @@ Ausschnitt</p>
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -131,7 +132,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -164,7 +165,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -204,7 +205,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -232,7 +233,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -255,17 +256,20 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -276,7 +280,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -838,7 +842,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -131,7 +132,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -164,7 +165,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -204,7 +205,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -232,7 +233,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -255,17 +256,20 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -276,7 +280,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -734,7 +738,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -72,13 +72,14 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
<script src="../../../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../../../site_libs/quarto-html/anchor.min.js"></script>
<link href="../../../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../../../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../../../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../../../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../../../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../../../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -131,7 +132,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -164,7 +165,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -204,7 +205,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -232,7 +233,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -255,17 +256,20 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -276,7 +280,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -1143,7 +1147,7 @@ pre > code.sourceCode > span > a:first-child::before { text-decoration: underlin
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -661,7 +665,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -36,13 +36,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -95,7 +96,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -128,7 +129,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -168,7 +169,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -196,7 +197,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -219,17 +220,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -240,7 +244,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -664,7 +668,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -646,7 +650,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -633,7 +637,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -662,7 +666,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -37,13 +37,14 @@ ul.task-list li input[type="checkbox"] {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -96,7 +97,7 @@ ul.task-list li input[type="checkbox"] {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -129,7 +130,7 @@ ul.task-list li input[type="checkbox"] {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -169,7 +170,7 @@ ul.task-list li input[type="checkbox"] {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -197,7 +198,7 @@ ul.task-list li input[type="checkbox"] {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -220,17 +221,20 @@ ul.task-list li input[type="checkbox"] {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -241,7 +245,7 @@ ul.task-list li input[type="checkbox"] {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -717,7 +721,7 @@ ul.task-list li input[type="checkbox"] {
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -56,13 +56,14 @@ div.csl-indent {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -113,18 +114,18 @@ div.csl-indent {
<meta name="citation_online_date" content="2025-04-24">
<meta name="citation_fulltext_html_url" content="https://drezil.de/Writing/Obsidian-RAG.html">
<meta name="citation_language" content="de">
<meta name="citation_reference" content="citation_title=Ollama - Chroma Cookbook;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_fulltext_html_url=https://cookbook.chromadb.dev/integrations/ollama/embeddings/;">
<meta name="citation_reference" content="citation_title=Just wanted to mention that the smart connections plugin is incredible. : r/ObsidianMD;,citation_publication_date=2024-10;,citation_cover_date=2024-10;,citation_year=2024;,citation_fulltext_html_url=https://www.reddit.com/r/ObsidianMD/comments/1fzmkdk/just_wanted_to_mention_that_the_smart_connections/;">
<meta name="citation_reference" content="citation_title=Khoj: An AI powered Search Assistant for your Second Brain - Share &amp;amp;amp; showcase - Obsidian Forum;,citation_publication_date=2023-07;,citation_cover_date=2023-07;,citation_year=2023;,citation_fulltext_html_url=https://forum.obsidian.md/t/khoj-an-ai-powered-search-assistant-for-you-second-brain/53756;">
<meta name="citation_reference" content="citation_title=Supercharging Obsidian Search with AI and Ollama;,citation_author=undefined @airabbitX;,citation_publication_date=2024-11;,citation_cover_date=2024-11;,citation_year=2024;,citation_fulltext_html_url=https://medium.com/@airabbitX/supercharging-obsidian-search-with-local-llms-a-personal-journey-1e008eb649a6;">
<meta name="citation_reference" content="citation_title=Export to common graph formats - Plugins ideas - Obsidian Forum;,citation_publication_date=2020-02;,citation_cover_date=2020-02;,citation_year=2020;,citation_fulltext_html_url=https://forum.obsidian.md/t/export-to-common-graph-formats/4138;">
<meta name="citation_reference" content="citation_title=Personal Knowledge Graphs in Obsidian;,citation_author=Volodymyr Pavlyshyn;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://volodymyrpavlyshyn.medium.com/personal-knowledge-graphs-in-obsidian-528a0f4584b9;">
<meta name="citation_reference" content="citation_title=How to export your Obsidian Vault to RDF;,citation_author=Volodymyr Pavlyshyn;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://volodymyrpavlyshyn.medium.com/how-to-export-your-obsidian-vault-to-rdf-00fb2539ed18;">
<meta name="citation_reference" content="citation_title=AI empowered Zettelkasten with NER and Graph LLM - Knowledge management - Obsidian Forum;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://forum.obsidian.md/t/ai-empowered-zettelkasten-with-ner-and-graph-llm/79112;">
<meta name="citation_reference" content="citation_title=Build your second brain with Khoj AI;,citation_publication_date=2024-06;,citation_cover_date=2024-06;,citation_year=2024;,citation_fulltext_html_url=https://dswharshit.medium.com/build-your-second-brain-with-khoj-ai-high-signal-ai-2-87492730d7ce;">
<meta name="citation_reference" content="citation_title=Second Brain Assistant with Obsidian;,citation_publication_date=2025-03;,citation_cover_date=2025-03;,citation_year=2025;,citation_fulltext_html_url=https://www.ssp.sh/brain/second-brain-assistant-with-obsidian-notegpt/;">
<meta name="citation_reference" content="citation_title=Basic Memory | AI Conversations That Build Knowledge;,citation_fulltext_html_url=https://basicmachines.co/;">
<meta name="citation_reference" content="citation_title=Local (Free) RAG with Question Generation using LM Studio, Nomic embeddings, ChromaDB and Llama 3.2 on a Mac mini M1;,citation_author=Oscar Galvis;,citation_publication_date=2024-10;,citation_cover_date=2024-10;,citation_year=2024;,citation_fulltext_html_url=https://lomaky.medium.com/local-free-rag-with-question-generation-using-lm-studio-nomic-embeddings-chromadb-and-llama-3-2-9758877e93b4;">
<meta name="citation_reference" content="citation_title=Ollama - chroma cookbook;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_fulltext_html_url=https://cookbook.chromadb.dev/integrations/ollama/embeddings/;">
<meta name="citation_reference" content="citation_title=Just wanted to mention that the smart connections plugin is incredible. : R/ObsidianMD;,citation_publication_date=2024-10;,citation_cover_date=2024-10;,citation_year=2024;,citation_fulltext_html_url=https://www.reddit.com/r/ObsidianMD/comments/1fzmkdk/just_wanted_to_mention_that_the_smart_connections/;">
<meta name="citation_reference" content="citation_title=Khoj: An AI powered search assistant for your second brain - share &amp;amp;amp; showcase - obsidian forum;,citation_publication_date=2023-07;,citation_cover_date=2023-07;,citation_year=2023;,citation_fulltext_html_url=https://forum.obsidian.md/t/khoj-an-ai-powered-search-assistant-for-you-second-brain/53756;">
<meta name="citation_reference" content="citation_title=Supercharging obsidian search with AI and ollama;,citation_author=undefined @airabbitX;,citation_publication_date=2024-11;,citation_cover_date=2024-11;,citation_year=2024;,citation_fulltext_html_url=https://medium.com/@airabbitX/supercharging-obsidian-search-with-local-llms-a-personal-journey-1e008eb649a6;">
<meta name="citation_reference" content="citation_title=Export to common graph formats - plugins ideas - obsidian forum;,citation_publication_date=2020-02;,citation_cover_date=2020-02;,citation_year=2020;,citation_fulltext_html_url=https://forum.obsidian.md/t/export-to-common-graph-formats/4138;">
<meta name="citation_reference" content="citation_title=Personal knowledge graphs in obsidian;,citation_author=Volodymyr Pavlyshyn;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://volodymyrpavlyshyn.medium.com/personal-knowledge-graphs-in-obsidian-528a0f4584b9;">
<meta name="citation_reference" content="citation_title=How to export your obsidian vault to RDF;,citation_author=Volodymyr Pavlyshyn;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://volodymyrpavlyshyn.medium.com/how-to-export-your-obsidian-vault-to-rdf-00fb2539ed18;">
<meta name="citation_reference" content="citation_title=AI empowered zettelkasten with NER and graph LLM - knowledge management - obsidian forum;,citation_publication_date=2024-03;,citation_cover_date=2024-03;,citation_year=2024;,citation_fulltext_html_url=https://forum.obsidian.md/t/ai-empowered-zettelkasten-with-ner-and-graph-llm/79112;">
<meta name="citation_reference" content="citation_title=Build your second brain with khoj AI;,citation_publication_date=2024-06;,citation_cover_date=2024-06;,citation_year=2024;,citation_fulltext_html_url=https://dswharshit.medium.com/build-your-second-brain-with-khoj-ai-high-signal-ai-2-87492730d7ce;">
<meta name="citation_reference" content="citation_title=Second brain assistant with obsidian;,citation_publication_date=2025-03;,citation_cover_date=2025-03;,citation_year=2025;,citation_fulltext_html_url=https://www.ssp.sh/brain/second-brain-assistant-with-obsidian-notegpt/;">
<meta name="citation_reference" content="citation_title=Basic memory | AI conversations that build knowledge;,citation_fulltext_html_url=https://basicmachines.co/;">
<meta name="citation_reference" content="citation_title=Local (free) RAG with question generation using LM studio, nomic embeddings, ChromaDB and llama 3.2 on a mac mini M1;,citation_author=Oscar Galvis;,citation_publication_date=2024-10;,citation_cover_date=2024-10;,citation_year=2024;,citation_fulltext_html_url=https://lomaky.medium.com/local-free-rag-with-question-generation-using-lm-studio-nomic-embeddings-chromadb-and-llama-3-2-9758877e93b4;">
<meta name="citation_reference" content="citation_title=privateGPT / llama.cpp based scripts;,citation_publication_date=2025-03;,citation_cover_date=2025-03;,citation_year=2025;,citation_fulltext_html_url=https://www.ssp.sh/brain/second-brain-assistant-with-obsidian-notegpt/;">
</head>
@ -146,7 +147,7 @@ div.csl-indent {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -179,7 +180,7 @@ div.csl-indent {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -219,7 +220,7 @@ div.csl-indent {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -247,7 +248,7 @@ div.csl-indent {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -270,17 +271,20 @@ div.csl-indent {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -291,7 +295,7 @@ div.csl-indent {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -1191,7 +1195,7 @@ Für bestimmte Felder wie ORCID wird ein rein lokales LLM kaum die Werte erraten
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -57,13 +57,14 @@ div.csl-indent {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -93,6 +94,7 @@ div.csl-indent {
}</script>
<link rel="stylesheet" href="extra-styles.css">
<meta property="og:title" content="Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Humanities) Nicole Dresselhaus">
<meta property="og:description" content="Ein Überblick und Best Practices für die Dokumantation von Forschungssoftware.">
<meta property="og:image" content="https://drezil.de/thumbs/writing_documentation.png">
@ -105,20 +107,56 @@ Algorithmen und Theorien hinter der Software stehen. Sie dient dazu, den
Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
">
<meta name="citation_author" content="Nicole Dresselhaus">
<meta name="citation_author" content="GPT-4.5 ">
<meta name="citation_publication_date" content="2025-05-08">
<meta name="citation_cover_date" content="2025-05-08">
<meta name="citation_author" content="GPT-4.5 &amp;amp;quot;deep research&quot;">
<meta name="citation_publication_date" content="2025-06-05">
<meta name="citation_cover_date" content="2025-06-05">
<meta name="citation_year" content="2025">
<meta name="citation_online_date" content="2025-05-08">
<meta name="citation_online_date" content="2025-06-05">
<meta name="citation_fulltext_html_url" content="https://drezil.de/Writing/documentation.html">
<meta name="citation_language" content="de">
<meta name="citation_reference" content="citation_title=Good enough practices in scientific computing;,citation_author=Greg Wilson;,citation_author=Jennifer Bryan;,citation_author=Karen Cranston;,citation_author=Justin Kitzes;,citation_author=Lex Nederbragt;,citation_author=Tracy K Teal;,citation_publication_date=2017;,citation_cover_date=2017;,citation_year=2017;,citation_issue=6;,citation_volume=13;,citation_journal_title=PLoS computational biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Ten simple rules for documenting scientific software;,citation_author=Andreas Prlić;,citation_author=James B Procter;,citation_publication_date=2012;,citation_cover_date=2012;,citation_year=2012;,citation_issue=12;,citation_volume=8;,citation_journal_title=PLoS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Software citation principles;,citation_author=Arfon M Smith;,citation_author=Daniel S Katz;,citation_author=Kyle E Niemeyer;,citation_author=FORCE11 Software Citation Working Group;,citation_author=others;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_volume=2;,citation_journal_title=PeerJ Computer Science;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Jupyter notebooks—a publishing format for reproducible computational workflows;,citation_author=Thomas Kluyver;,citation_author=Benjamin Ragan-Kelley;,citation_author=Fernando Pérez;,citation_author=Brian Granger;,citation_author=Matthias Bussonnier;,citation_author=Jonathan Frederic;,citation_author=Kyle Kelley;,citation_author=Jessica B Hamrick;,citation_author=Jason Grout;,citation_author=Sylvain Corlay;,citation_author=others;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_volume=20;,citation_journal_title=Positioning and Power in Academic Publishing: Players, Agents and Agendas;,citation_publisher=IOS Press;">
<meta name="citation_reference" content="citation_title=Endings Principles for Digital Longevity;,citation_author=Endings Project;,citation_publication_date=2020;,citation_cover_date=2020;,citation_year=2020;,citation_fulltext_html_url=https://endings.uvic.ca/principles.html;">
<meta name="citation_reference" content="citation_title=The Journal of Open Source Software (JOSS);,citation_author=Daniel S Katz;,citation_author=Kyle E Niemeyer;,citation_author=Arfon M Smith;,citation_publication_date=2021;,citation_cover_date=2021;,citation_year=2021;,citation_volume=7;,citation_journal_title=PeerJ Computer Science;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Towards FAIR principles for research software;,citation_author=Anna-Lena Lamprecht;,citation_author=Leyla Garcia;,citation_author=Mateusz Kuzak;,citation_author=Carlos Martinez;,citation_author=Ricardo Arcila;,citation_author=Eva Martin Del Pico;,citation_author=others;,citation_publication_date=2020;,citation_cover_date=2020;,citation_year=2020;,citation_issue=1;,citation_volume=3;,citation_journal_title=Data Science;,citation_publisher=IOS Press;">
<meta name="citation_reference" content="citation_title=Collaborative Historical Research in the Age of Big Data: Lessons from an Interdisciplinary Project;,citation_abstract=This book is output of the Living with Machines project;,citation_author=Ruth Ahnert;,citation_author=Emma Griffin;,citation_author=Mia Ridge;,citation_author=Giorgia Tolfo;,citation_publication_date=2023;,citation_cover_date=2023;,citation_year=2023;,citation_fulltext_html_url=https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D;,citation_doi=10.1017/9781009175548;,citation_language=en-US;,citation_series_title=Cambridge Elements: Historical Theory and Practice;">
<meta name="citation_reference" content="citation_title=DFG-Praxisregeln &amp;amp;amp;quot;Digitalisierung&amp;quot;. Aktualisierte Fassung 2022.;,citation_abstract=Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.;,citation_author=Reinhard Altenhöner;,citation_author=Andreas Berger;,citation_author=Christian Bracht;,citation_author=Paul Klimpel;,citation_author=Sebastian Meyer;,citation_author=Andreas Neuburger;,citation_author=Thomas Stäcker;,citation_author=Regine Stein;,citation_publication_date=2023-02-16;,citation_cover_date=2023-02-16;,citation_year=2023;,citation_fulltext_html_url=https://zenodo.org/record/7435724;,citation_language=deu;">
<meta name="citation_reference" content="citation_title=Introducing the FAIR Principles for research software;,citation_abstract=Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.;,citation_author=Michelle Barker;,citation_author=Neil P. Chue Hong;,citation_author=Daniel S. Katz;,citation_author=Anna-Lena Lamprecht;,citation_author=Carlos Martinez-Ortiz;,citation_author=Fotis Psomopoulos;,citation_author=Jennifer Harrow;,citation_author=Leyla Jael Castro;,citation_author=Morane Gruenpeter;,citation_author=Paula Andrea Martinez;,citation_author=Tom Honeyman;,citation_publication_date=2022-10-14;,citation_cover_date=2022-10-14;,citation_year=2022;,citation_fulltext_html_url=https://www.nature.com/articles/s41597-022-01710-x;,citation_issue=1;,citation_doi=10.1038/s41597-022-01710-x;,citation_issn=2052-4463;,citation_volume=9;,citation_language=en-US;,citation_journal_title=Scientific Data;,citation_journal_abbrev=Sci Data;,citation_publisher=Nature Publishing Group;">
<meta name="citation_reference" content="citation_title=Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit;,citation_abstract=Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.;,citation_editor=Fabian Cremer;,citation_editor=Swantje Dogunke;,citation_editor=Anna Maria Neubert;,citation_editor=Thorsten Wübbena;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_doi=10.14361/9783839469675;,citation_language=de-DE;">
<meta name="citation_reference" content="citation_title=The Journal of Open Source Software (JOSS): Bringing Open-Source Software Practices to the Scholarly Publishing Community for Authors, Reviewers, Editors, and Publishers;,citation_abstract=Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.;,citation_author=Patrick Diehl;,citation_author=Charlotte Soneson;,citation_author=Rachel C. Kurchin;,citation_author=Ross Mounce;,citation_author=Daniel S. Katz;,citation_publication_date=2025-02-04;,citation_cover_date=2025-02-04;,citation_year=2025;,citation_fulltext_html_url=https://www.iastatedigitalpress.com/jlsc/article/id/18285/;,citation_issue=2, 2;,citation_doi=10.31274/jlsc.18285;,citation_issn=2162-3309;,citation_volume=12;,citation_language=en-US;,citation_journal_title=Journal of Librarianship and Scholarly Communication;,citation_publisher=Iowa State University Digital Press;">
<meta name="citation_reference" content="citation_title=Endings Principles for Digital Longevity;,citation_abstract=Enabling Sustainable Digital Humanities Projects;,citation_author=Endings Project Team;,citation_publication_date=2023-03-03;,citation_cover_date=2023-03-03;,citation_year=2023;,citation_fulltext_html_url=https://endings.uvic.ca/principles.html;,citation_language=en-US;">
<meta name="citation_reference" content="citation_title=Leitlinien zur Sicherung guter wissenschaftlicher Praxis;,citation_abstract=The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.;,citation_publication_date=2024-09;,citation_cover_date=2024-09;,citation_year=2024;,citation_fulltext_html_url=https://zenodo.org/records/14281892;,citation_doi=10.5281/zenodo.14281892;,citation_language=de-DE;,citation_publisher=Deutsche Forschungsgemeinschaft;">
<meta name="citation_reference" content="citation_title=Open Source Research Software;,citation_author=Wilhelm Hasselbring;,citation_author=Leslie Carr;,citation_author=Simon Hettrick;,citation_author=Heather Packer;,citation_author=Thanassis Tiropanis;,citation_publication_date=2020-08;,citation_cover_date=2020-08;,citation_year=2020;,citation_fulltext_html_url=https://ieeexplore.ieee.org/document/9153295/;,citation_issue=8;,citation_doi=10.1109/MC.2020.2998235;,citation_issn=0018-9162, 1558-0814;,citation_volume=53;,citation_journal_title=Computer;,citation_journal_abbrev=Computer;">
<meta name="citation_reference" content="citation_title=Trading Zones of Digital History;,citation_abstract=Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.;,citation_author=Max Kemman;,citation_publication_date=2021;,citation_cover_date=2021;,citation_year=2021;,citation_fulltext_html_url=https://www.degruyter.com/document/doi/10.1515/9783110682106/html;,citation_doi=10.1515/9783110682106;,citation_isbn=978-3-11-068210-6;,citation_language=en-US;,citation_series_title=Studies in Digital History and Hermeneutics;">
<meta name="citation_reference" content="citation_title=Jupyter Notebooks a publishing format for reproducible computational workflows;,citation_abstract=It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.;,citation_author=Thomas Kluyver;,citation_author=Benjamin Ragan-Kelley;,citation_author=Fernando Pérez;,citation_author=Brian Granger;,citation_author=Matthias Bussonnier;,citation_author=Jonathan Frederic;,citation_author=Kyle Kelley;,citation_author=Jessica Hamrick;,citation_author=Jason Grout;,citation_author=Sylvain Corlay;,citation_author=Paul Ivanov;,citation_author=Damián Avila;,citation_author=Safia Abdalla;,citation_author=Carol Willing;,citation_author=Jupyter team;,citation_editor=Fernando Loizides;,citation_editor=Birgit Scmidt;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://eprints.soton.ac.uk/403913/;,citation_doi=10.3233/978-1-61499-649-1-87;,citation_language=en-US;,citation_conference=IOS Press;">
<meta name="citation_reference" content="citation_title=Towards FAIR principles for&nbsp;research&nbsp;software;,citation_abstract=The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.;,citation_author=Anna-Lena Lamprecht;,citation_author=Leyla Garcia;,citation_author=Mateusz Kuzak;,citation_author=Carlos Martinez;,citation_author=Ricardo Arcila;,citation_author=Eva Martin Del Pico;,citation_author=Victoria Dominguez Del Angel;,citation_author=Stephanie Sandt;,citation_author=Jon Ison;,citation_author=Paula Andrea Martinez;,citation_author=Peter McQuilton;,citation_author=Alfonso Valencia;,citation_author=Jennifer Harrow;,citation_author=Fotis Psomopoulos;,citation_author=Josep Ll. Gelpi;,citation_author=Neil Chue Hong;,citation_author=Carole Goble;,citation_author=Salvador Capella-Gutierrez;,citation_publication_date=2020-06-12;,citation_cover_date=2020-06-12;,citation_year=2020;,citation_fulltext_html_url=https://doi.org/10.3233/DS-190026;,citation_issue=1;,citation_doi=10.3233/DS-190026;,citation_issn=2451-8484;,citation_volume=3;,citation_language=en-US;,citation_journal_title=Data Science;,citation_publisher=SAGE Publications;">
<meta name="citation_reference" content="citation_title=Ten simple rules for documenting scientific software;,citation_author=Benjamin D. Lee;,citation_publication_date=2018-12-20;,citation_cover_date=2018-12-20;,citation_year=2018;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1006561;,citation_issn=1553-7358;,citation_volume=14;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Software citation principles;,citation_abstract=Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.;,citation_author=Arfon M. Smith;,citation_author=Daniel S. Katz;,citation_author=Kyle E. Niemeyer;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://peerj.com/articles/cs-86;,citation_doi=10.7717/peerj-cs.86;,citation_issn=2376-5992;,citation_volume=2;,citation_language=en-US;,citation_journal_title=PeerJ Computer Science;,citation_journal_abbrev=PeerJ Comput. Sci.;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Ten Simple Rules for the Open Development of Scientific Software;,citation_author=Andreas Prlić;,citation_author=James B. Procter;,citation_publication_date=2012-12-06;,citation_cover_date=2012-12-06;,citation_year=2012;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1002802;,citation_issn=1553-7358;,citation_volume=8;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Good enough practices in scientific computing;,citation_abstract=Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often dont know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.;,citation_author=Greg Wilson;,citation_author=Jennifer Bryan;,citation_author=Karen Cranston;,citation_author=Justin Kitzes;,citation_author=Lex Nederbragt;,citation_author=Tracy K. Teal;,citation_publication_date=2017-06-22;,citation_cover_date=2017-06-22;,citation_year=2017;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510;,citation_issue=6;,citation_doi=10.1371/journal.pcbi.1005510;,citation_issn=1553-7358;,citation_volume=13;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Collaborative Historical Research in the Age of Big Data: Lessons from an Interdisciplinary Project;,citation_abstract=This book is output of the Living with Machines project;,citation_author=Ruth Ahnert;,citation_author=Emma Griffin;,citation_author=Mia Ridge;,citation_author=Giorgia Tolfo;,citation_publication_date=2023;,citation_cover_date=2023;,citation_year=2023;,citation_fulltext_html_url=https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D;,citation_doi=10.1017/9781009175548;,citation_language=en-US;,citation_series_title=Cambridge Elements: Historical Theory and Practice;">
<meta name="citation_reference" content="citation_title=DFG-Praxisregeln &amp;amp;amp;quot;Digitalisierung&amp;quot;. Aktualisierte Fassung 2022.;,citation_abstract=Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.;,citation_author=Reinhard Altenhöner;,citation_author=Andreas Berger;,citation_author=Christian Bracht;,citation_author=Paul Klimpel;,citation_author=Sebastian Meyer;,citation_author=Andreas Neuburger;,citation_author=Thomas Stäcker;,citation_author=Regine Stein;,citation_publication_date=2023-02-16;,citation_cover_date=2023-02-16;,citation_year=2023;,citation_fulltext_html_url=https://zenodo.org/record/7435724;,citation_language=deu;">
<meta name="citation_reference" content="citation_title=Introducing the FAIR Principles for research software;,citation_abstract=Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.;,citation_author=Michelle Barker;,citation_author=Neil P. Chue Hong;,citation_author=Daniel S. Katz;,citation_author=Anna-Lena Lamprecht;,citation_author=Carlos Martinez-Ortiz;,citation_author=Fotis Psomopoulos;,citation_author=Jennifer Harrow;,citation_author=Leyla Jael Castro;,citation_author=Morane Gruenpeter;,citation_author=Paula Andrea Martinez;,citation_author=Tom Honeyman;,citation_publication_date=2022-10-14;,citation_cover_date=2022-10-14;,citation_year=2022;,citation_fulltext_html_url=https://www.nature.com/articles/s41597-022-01710-x;,citation_issue=1;,citation_doi=10.1038/s41597-022-01710-x;,citation_issn=2052-4463;,citation_volume=9;,citation_language=en-US;,citation_journal_title=Scientific Data;,citation_journal_abbrev=Sci Data;,citation_publisher=Nature Publishing Group;">
<meta name="citation_reference" content="citation_title=Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit;,citation_abstract=Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.;,citation_editor=Fabian Cremer;,citation_editor=Swantje Dogunke;,citation_editor=Anna Maria Neubert;,citation_editor=Thorsten Wübbena;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_doi=10.14361/9783839469675;,citation_language=de-DE;">
<meta name="citation_reference" content="citation_title=The Journal of Open Source Software (JOSS): Bringing Open-Source Software Practices to the Scholarly Publishing Community for Authors, Reviewers, Editors, and Publishers;,citation_abstract=Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.;,citation_author=Patrick Diehl;,citation_author=Charlotte Soneson;,citation_author=Rachel C. Kurchin;,citation_author=Ross Mounce;,citation_author=Daniel S. Katz;,citation_publication_date=2025-02-04;,citation_cover_date=2025-02-04;,citation_year=2025;,citation_fulltext_html_url=https://www.iastatedigitalpress.com/jlsc/article/id/18285/;,citation_issue=2, 2;,citation_doi=10.31274/jlsc.18285;,citation_issn=2162-3309;,citation_volume=12;,citation_language=en-US;,citation_journal_title=Journal of Librarianship and Scholarly Communication;,citation_publisher=Iowa State University Digital Press;">
<meta name="citation_reference" content="citation_title=Endings Principles for Digital Longevity;,citation_abstract=Enabling Sustainable Digital Humanities Projects;,citation_author=Endings Project Team;,citation_publication_date=2023-03-03;,citation_cover_date=2023-03-03;,citation_year=2023;,citation_fulltext_html_url=https://endings.uvic.ca/principles.html;,citation_language=en-US;">
<meta name="citation_reference" content="citation_title=Leitlinien zur Sicherung guter wissenschaftlicher Praxis;,citation_abstract=The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.;,citation_publication_date=2024-09;,citation_cover_date=2024-09;,citation_year=2024;,citation_fulltext_html_url=https://zenodo.org/records/14281892;,citation_doi=10.5281/zenodo.14281892;,citation_language=de-DE;,citation_publisher=Deutsche Forschungsgemeinschaft;">
<meta name="citation_reference" content="citation_title=Trading Zones of Digital History;,citation_abstract=Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.;,citation_author=Max Kemman;,citation_publication_date=2021;,citation_cover_date=2021;,citation_year=2021;,citation_fulltext_html_url=https://www.degruyter.com/document/doi/10.1515/9783110682106/html;,citation_doi=10.1515/9783110682106;,citation_isbn=978-3-11-068210-6;,citation_language=en-US;,citation_series_title=Studies in Digital History and Hermeneutics;">
<meta name="citation_reference" content="citation_title=Jupyter Notebooks a publishing format for reproducible computational workflows;,citation_abstract=It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.;,citation_author=Thomas Kluyver;,citation_author=Benjamin Ragan-Kelley;,citation_author=Fernando Pérez;,citation_author=Brian Granger;,citation_author=Matthias Bussonnier;,citation_author=Jonathan Frederic;,citation_author=Kyle Kelley;,citation_author=Jessica Hamrick;,citation_author=Jason Grout;,citation_author=Sylvain Corlay;,citation_author=Paul Ivanov;,citation_author=Damián Avila;,citation_author=Safia Abdalla;,citation_author=Carol Willing;,citation_author=Jupyter team;,citation_editor=Fernando Loizides;,citation_editor=Birgit Scmidt;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://eprints.soton.ac.uk/403913/;,citation_doi=10.3233/978-1-61499-649-1-87;,citation_language=en-US;,citation_conference=IOS Press;">
<meta name="citation_reference" content="citation_title=Towards FAIR principles for&nbsp;research&nbsp;software;,citation_abstract=The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.;,citation_author=Anna-Lena Lamprecht;,citation_author=Leyla Garcia;,citation_author=Mateusz Kuzak;,citation_author=Carlos Martinez;,citation_author=Ricardo Arcila;,citation_author=Eva Martin Del Pico;,citation_author=Victoria Dominguez Del Angel;,citation_author=Stephanie Sandt;,citation_author=Jon Ison;,citation_author=Paula Andrea Martinez;,citation_author=Peter McQuilton;,citation_author=Alfonso Valencia;,citation_author=Jennifer Harrow;,citation_author=Fotis Psomopoulos;,citation_author=Josep Ll. Gelpi;,citation_author=Neil Chue Hong;,citation_author=Carole Goble;,citation_author=Salvador Capella-Gutierrez;,citation_publication_date=2020-06-12;,citation_cover_date=2020-06-12;,citation_year=2020;,citation_fulltext_html_url=https://doi.org/10.3233/DS-190026;,citation_issue=1;,citation_doi=10.3233/DS-190026;,citation_issn=2451-8484;,citation_volume=3;,citation_language=en-US;,citation_journal_title=Data Science;,citation_publisher=SAGE Publications;">
<meta name="citation_reference" content="citation_title=Ten simple rules for documenting scientific software;,citation_author=Benjamin D. Lee;,citation_publication_date=2018-12-20;,citation_cover_date=2018-12-20;,citation_year=2018;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1006561;,citation_issn=1553-7358;,citation_volume=14;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Software citation principles;,citation_abstract=Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.;,citation_author=Arfon M. Smith;,citation_author=Daniel S. Katz;,citation_author=Kyle E. Niemeyer;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://peerj.com/articles/cs-86;,citation_doi=10.7717/peerj-cs.86;,citation_issn=2376-5992;,citation_volume=2;,citation_language=en-US;,citation_journal_title=PeerJ Computer Science;,citation_journal_abbrev=PeerJ Comput. Sci.;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Ten Simple Rules for the Open Development of Scientific Software;,citation_author=Andreas Prlić;,citation_author=James B. Procter;,citation_publication_date=2012-12-06;,citation_cover_date=2012-12-06;,citation_year=2012;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1002802;,citation_issn=1553-7358;,citation_volume=8;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Good enough practices in scientific computing;,citation_abstract=Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often dont know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.;,citation_author=Greg Wilson;,citation_author=Jennifer Bryan;,citation_author=Karen Cranston;,citation_author=Justin Kitzes;,citation_author=Lex Nederbragt;,citation_author=Tracy K. Teal;,citation_publication_date=2017-06-22;,citation_cover_date=2017-06-22;,citation_year=2017;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510;,citation_issue=6;,citation_doi=10.1371/journal.pcbi.1005510;,citation_issn=1553-7358;,citation_volume=13;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Collaborative Historical Research in the Age of Big Data: Lessons from an Interdisciplinary Project;,citation_abstract=This book is output of the Living with Machines project;,citation_author=Ruth Ahnert;,citation_author=Emma Griffin;,citation_author=Mia Ridge;,citation_author=Giorgia Tolfo;,citation_publication_date=2023;,citation_cover_date=2023;,citation_year=2023;,citation_fulltext_html_url=https://www.cambridge.org/core/elements/collaborative-historical-research-in-the-age-of-big-data/839C422CCAA6C1699DE8D353B3A1960D;,citation_doi=10.1017/9781009175548;,citation_language=en-US;,citation_series_title=Cambridge Elements: Historical Theory and Practice;">
<meta name="citation_reference" content="citation_title=DFG-Praxisregeln &amp;amp;amp;quot;Digitalisierung&amp;quot;. Aktualisierte Fassung 2022.;,citation_abstract=Die DFG-Praxisregeln „Digitalisierung“ stellen eine zentrale Grundlage für DFG-geförderte Projekte im Programm „Digitalisierung und Erschließung“ dar: Sie formulieren Standards und enthalten Informationen zu organisatorischen, methodischen und technischen Fragen im Kontext der Digitalisierung und Erschließung forschungsrelevanter Objekte. Sie leisten damit einen wichtigen Beitrag zur Nachhaltigkeit, Zugänglichkeit und Anschlussfähigkeit geförderter Projekte und der in diesem Zusammenhang entstehenden Infrastruktur. Das vorliegende Dokument stellt eine aktualisierte Fassung der zuletzt 2016 durch die DFG publizierten Praxisregeln dar. Es wurde in Absprache mit der DFG-Geschäftsstelle durch eine vom NFDI-Konsortium NFDI4Culture initiierte Autor*innengruppe erarbeitet, deren Mitglieder mehrheitlich seit langem an der Ausgestaltung der Praxisregeln beteiligt waren sowie aktiv in die NFDI-Konsortien NFDI4Culture, NFDI4Memory, NFDI4Objects und Text+ eingebunden sind. Die jetzt überarbeitet vorliegenden Praxisregeln „Digitalisierung“ dienen als Ausgangspunkt für eine material- und communitybezogene Ausdifferenzierung der Praxisregeln durch die Communitys. Alle mit der Digitalisierung forschungsrelevanter Objekte befassten Communitys und Einrichtungen sind dazu aufgerufen, mit ihrer Expertise am weiteren Prozess mitzuwirken.;,citation_author=Reinhard Altenhöner;,citation_author=Andreas Berger;,citation_author=Christian Bracht;,citation_author=Paul Klimpel;,citation_author=Sebastian Meyer;,citation_author=Andreas Neuburger;,citation_author=Thomas Stäcker;,citation_author=Regine Stein;,citation_publication_date=2023-02-16;,citation_cover_date=2023-02-16;,citation_year=2023;,citation_fulltext_html_url=https://zenodo.org/record/7435724;,citation_language=deu;">
<meta name="citation_reference" content="citation_title=Introducing the FAIR Principles for research software;,citation_abstract=Research software is a fundamental and vital part of research, yet significant challenges to discoverability, productivity, quality, reproducibility, and sustainability exist. Improving the practice of scholarship is a common goal of the open science, open source, and FAIR (Findable, Accessible, Interoperable and Reusable) communities and research software is now being understood as a type of digital object to which FAIR should be applied. This emergence reflects a maturation of the research community to better understand the crucial role of FAIR research software in maximising research value. The FAIR for Research Software (FAIR4RS) Working Group has adapted the FAIR Guiding Principles to create the FAIR Principles for Research Software (FAIR4RS Principles). The contents and context of the FAIR4RS Principles are summarised here to provide the basis for discussion of their adoption. Examples of implementation by organisations are provided to share information on how to maximise the value of research outputs, and to encourage others to amplify the importance and impact of this work.;,citation_author=Michelle Barker;,citation_author=Neil P. Chue Hong;,citation_author=Daniel S. Katz;,citation_author=Anna-Lena Lamprecht;,citation_author=Carlos Martinez-Ortiz;,citation_author=Fotis Psomopoulos;,citation_author=Jennifer Harrow;,citation_author=Leyla Jael Castro;,citation_author=Morane Gruenpeter;,citation_author=Paula Andrea Martinez;,citation_author=Tom Honeyman;,citation_publication_date=2022-10-14;,citation_cover_date=2022-10-14;,citation_year=2022;,citation_fulltext_html_url=https://www.nature.com/articles/s41597-022-01710-x;,citation_issue=1;,citation_doi=10.1038/s41597-022-01710-x;,citation_issn=2052-4463;,citation_volume=9;,citation_language=en-US;,citation_journal_title=Scientific Data;,citation_journal_abbrev=Sci Data;,citation_publisher=Nature Publishing Group;">
<meta name="citation_reference" content="citation_title=Projektmanagement und Digital Humanities: Zur klugen Gestaltung der Zusammenarbeit;,citation_abstract=Die Professionalisierung des Projektmanagements in den Digital Humanities: Theorie und Praxis zum Weiterdenken.;,citation_editor=Fabian Cremer;,citation_editor=Swantje Dogunke;,citation_editor=Anna Maria Neubert;,citation_editor=Thorsten Wübbena;,citation_publication_date=2024-04;,citation_cover_date=2024-04;,citation_year=2024;,citation_doi=10.14361/9783839469675;,citation_language=de-DE;">
<meta name="citation_reference" content="citation_title=The Journal of Open Source Software (JOSS): Bringing Open-Source Software Practices to the Scholarly Publishing Community for Authors, Reviewers, Editors, and Publishers;,citation_abstract=Introduction: Open-source software (OSS) is a critical component of open science, but contributions to the OSS ecosystem are systematically undervalued in the current academic system. The Journal of Open Source Software (JOSS) contributes to addressing this by providing a venue (that is itself free, diamond open access, and all open-source, built in a layered structure using widely available elements/services of the scholarly publishing ecosystem) for publishing OSS, run in the style of OSS itself. A particularly distinctive element of JOSS is that it uses open peer review in a collaborative, iterative format, unlike most publishers. Additionally, all the components of the process—from the reviews to the papers to the software that is the subject of the papers to the software that the journal runs—are open. Background: We describe JOSSs history and its peer review process using an editorial bot, and we present statistics gathered from JOSSs public review history on GitHub showing an increasing number of peer reviewed papers each year. We discuss the new JOSSCast and use it as a data source to understand reasons why interviewed authors decided to publish in JOSS. Discussion and Outlook: JOSSs process differs significantly from traditional journals, which has impeded JOSSs inclusion in indexing services such as Web of Science. In turn, this discourages researchers within certain academic systems, such as Italys, which emphasize the importance of Web of Science and/or Scopus indexing for grant applications and promotions. JOSS is a fully diamond open-access journal with a cost of around US$5 per paper for the 401 papers published in 2023. The scalability of running JOSS with volunteers and financing JOSS with grants and donations is discussed.;,citation_author=Patrick Diehl;,citation_author=Charlotte Soneson;,citation_author=Rachel C. Kurchin;,citation_author=Ross Mounce;,citation_author=Daniel S. Katz;,citation_publication_date=2025-02-04;,citation_cover_date=2025-02-04;,citation_year=2025;,citation_fulltext_html_url=https://www.iastatedigitalpress.com/jlsc/article/id/18285/;,citation_issue=2, 2;,citation_doi=10.31274/jlsc.18285;,citation_issn=2162-3309;,citation_volume=12;,citation_language=en-US;,citation_journal_title=Journal of Librarianship and Scholarly Communication;,citation_publisher=Iowa State University Digital Press;">
<meta name="citation_reference" content="citation_title=Endings Principles for Digital Longevity;,citation_abstract=Enabling Sustainable Digital Humanities Projects;,citation_author=Endings Project Team;,citation_publication_date=2023-03-03;,citation_cover_date=2023-03-03;,citation_year=2023;,citation_fulltext_html_url=https://endings.uvic.ca/principles.html;,citation_language=en-US;">
<meta name="citation_reference" content="citation_title=Leitlinien zur Sicherung guter wissenschaftlicher Praxis;,citation_abstract=The DFG´s Code of Conduct “Safeguarding Good Research Practice” represents the consensus among the member organisations of the DFG on the fundamental principles and standards of good practice and are upheld by these organisations. These guidelines underline the importance of integrity in the everyday practice of research and provide researchers with a reliable reference with which to embed good research practice as an established and binding aspect of their work.;,citation_publication_date=2024-09;,citation_cover_date=2024-09;,citation_year=2024;,citation_fulltext_html_url=https://zenodo.org/records/14281892;,citation_doi=10.5281/zenodo.14281892;,citation_language=de-DE;,citation_publisher=Deutsche Forschungsgemeinschaft;">
<meta name="citation_reference" content="citation_title=Trading Zones of Digital History;,citation_abstract=Digital history is commonly argued to be positioned between the traditionally historical and the computational or digital. By studying digital history collaborations and the establishment of the Luxembourg Centre for Contemporary and Digital History, Kemman examines how digital history will impact historical scholarship. His analysis shows that digital history does not occupy a singular position between the digital and the historical. Instead, historians continuously move across this dimension, choosing or finding themselves in different positions as they construct different trading zones through cross-disciplinary engagement, negotiation of research goals and individual interests.;,citation_author=Max Kemman;,citation_publication_date=2021;,citation_cover_date=2021;,citation_year=2021;,citation_fulltext_html_url=https://www.degruyter.com/document/doi/10.1515/9783110682106/html;,citation_doi=10.1515/9783110682106;,citation_isbn=978-3-11-068210-6;,citation_language=en-US;,citation_series_title=Studies in Digital History and Hermeneutics;">
<meta name="citation_reference" content="citation_title=Jupyter Notebooks a publishing format for reproducible computational workflows;,citation_abstract=It is increasingly necessary for researchers in all fields to write computer code, and in order to reproduce research results, it is important that this code is published. We present Jupyter notebooks, a document format for publishing code, results and explanations in a form that is both readable and executable. We discuss various tools and use cases for notebook documents.;,citation_author=Thomas Kluyver;,citation_author=Benjamin Ragan-Kelley;,citation_author=Fernando Pérez;,citation_author=Brian Granger;,citation_author=Matthias Bussonnier;,citation_author=Jonathan Frederic;,citation_author=Kyle Kelley;,citation_author=Jessica Hamrick;,citation_author=Jason Grout;,citation_author=Sylvain Corlay;,citation_author=Paul Ivanov;,citation_author=Damián Avila;,citation_author=Safia Abdalla;,citation_author=Carol Willing;,citation_author=Jupyter team;,citation_editor=Fernando Loizides;,citation_editor=Birgit Scmidt;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://eprints.soton.ac.uk/403913/;,citation_doi=10.3233/978-1-61499-649-1-87;,citation_language=en-US;,citation_conference=IOS Press;">
<meta name="citation_reference" content="citation_title=Towards FAIR principles for&nbsp;research&nbsp;software;,citation_abstract=The FAIR Guiding Principles, published in 2016, aim to improve the findability, accessibility, interoperability and reusability of digital research objects for both humans and machines. Until now the FAIR principles have been mostly applied to research data. The ideas behind these principles are, however, also directly relevant to research software. Hence there is a distinct need to explore how the FAIR principles can be applied to software. In this work, we aim to summarize the current status of the debate around FAIR and software, as basis for the development of community-agreed principles for FAIR research software in the future. We discuss what makes software different from data with regard to the application of the FAIR principles, and which desired characteristics of research software go beyond FAIR. Then we present an analysis of where the existing principles can directly be applied to software, where they need to be adapted or reinterpreted, and where the definition of additional principles is required. Here interoperability has proven to be the most challenging principle, calling for particular attention in future discussions. Finally, we outline next steps on the way towards definite FAIR principles for research software.;,citation_author=Anna-Lena Lamprecht;,citation_author=Leyla Garcia;,citation_author=Mateusz Kuzak;,citation_author=Carlos Martinez;,citation_author=Ricardo Arcila;,citation_author=Eva Martin Del Pico;,citation_author=Victoria Dominguez Del Angel;,citation_author=Stephanie Sandt;,citation_author=Jon Ison;,citation_author=Paula Andrea Martinez;,citation_author=Peter McQuilton;,citation_author=Alfonso Valencia;,citation_author=Jennifer Harrow;,citation_author=Fotis Psomopoulos;,citation_author=Josep Ll. Gelpi;,citation_author=Neil Chue Hong;,citation_author=Carole Goble;,citation_author=Salvador Capella-Gutierrez;,citation_publication_date=2020-06-12;,citation_cover_date=2020-06-12;,citation_year=2020;,citation_fulltext_html_url=https://doi.org/10.3233/DS-190026;,citation_issue=1;,citation_doi=10.3233/DS-190026;,citation_issn=2451-8484;,citation_volume=3;,citation_language=en-US;,citation_journal_title=Data Science;,citation_publisher=SAGE Publications;">
<meta name="citation_reference" content="citation_title=Ten simple rules for documenting scientific software;,citation_author=Benjamin D. Lee;,citation_publication_date=2018-12-20;,citation_cover_date=2018-12-20;,citation_year=2018;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006561;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1006561;,citation_issn=1553-7358;,citation_volume=14;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Software citation principles;,citation_abstract=Software is a critical part of modern research and yet there is little support across the scholarly ecosystem for its acknowledgement and citation. Inspired by the activities of the FORCE11 working group focused on data citation, this document summarizes the recommendations of the FORCE11 Software Citation Working Group and its activities between June 2015 and April 2016. Based on a review of existing community practices, the goal of the working group was to produce a consolidated set of citation principles that may encourage broad adoption of a consistent policy for software citation across disciplines and venues. Our work is presented here as a set of software citation principles, a discussion of the motivations for developing the principles, reviews of existing community practice, and a discussion of the requirements these principles would place upon different stakeholders. Working examples and possible technical solutions for how these principles can be implemented will be discussed in a separate paper.;,citation_author=Arfon M. Smith;,citation_author=Daniel S. Katz;,citation_author=Kyle E. Niemeyer;,citation_publication_date=2016;,citation_cover_date=2016;,citation_year=2016;,citation_fulltext_html_url=https://peerj.com/articles/cs-86;,citation_doi=10.7717/peerj-cs.86;,citation_issn=2376-5992;,citation_volume=2;,citation_language=en-US;,citation_journal_title=PeerJ Computer Science;,citation_journal_abbrev=PeerJ Comput. Sci.;,citation_publisher=PeerJ Inc.;">
<meta name="citation_reference" content="citation_title=Ten Simple Rules for the Open Development of Scientific Software;,citation_author=Andreas Prlić;,citation_author=James B. Procter;,citation_publication_date=2012-12-06;,citation_cover_date=2012-12-06;,citation_year=2012;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1002802;,citation_issue=12;,citation_doi=10.1371/journal.pcbi.1002802;,citation_issn=1553-7358;,citation_volume=8;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
<meta name="citation_reference" content="citation_title=Good enough practices in scientific computing;,citation_abstract=Author summary Computers are now essential in all branches of science, but most researchers are never taught the equivalent of basic lab skills for research computing. As a result, data can get lost, analyses can take much longer than necessary, and researchers are limited in how effectively they can work with software and data. Computing workflows need to follow the same practices as lab projects and notebooks, with organized data, documented steps, and the project structured for reproducibility, but researchers new to computing often dont know where to start. This paper presents a set of good computing practices that every researcher can adopt, regardless of their current level of computational skill. These practices, which encompass data management, programming, collaborating with colleagues, organizing projects, tracking work, and writing manuscripts, are drawn from a wide variety of published sources from our daily lives and from our work with volunteer organizations that have delivered workshops to over 11,000 people since 2010.;,citation_author=Greg Wilson;,citation_author=Jennifer Bryan;,citation_author=Karen Cranston;,citation_author=Justin Kitzes;,citation_author=Lex Nederbragt;,citation_author=Tracy K. Teal;,citation_publication_date=2017-06-22;,citation_cover_date=2017-06-22;,citation_year=2017;,citation_fulltext_html_url=https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510;,citation_issue=6;,citation_doi=10.1371/journal.pcbi.1005510;,citation_issn=1553-7358;,citation_volume=13;,citation_language=en-US;,citation_journal_title=PLOS Computational Biology;,citation_journal_abbrev=PLOS Computational Biology;,citation_publisher=Public Library of Science;">
</head>
<body class="nav-sidebar docked nav-fixed slimcontent quarto-light"><script id="quarto-html-before-body" type="application/javascript">
@ -139,7 +177,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -172,7 +210,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -212,7 +250,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -240,7 +278,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -263,17 +301,20 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -284,7 +325,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -630,37 +671,39 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
<li><a href="#format-und-struktur-der-dokumentation" id="toc-format-und-struktur-der-dokumentation" class="nav-link" data-scroll-target="#format-und-struktur-der-dokumentation">Format und Struktur der Dokumentation</a>
<ul class="collapse">
<li><a href="#readme.md-als-zentrales-dokument" id="toc-readme.md-als-zentrales-dokument" class="nav-link" data-scroll-target="#readme.md-als-zentrales-dokument"><code>README.md</code> als zentrales Dokument</a></li>
<li><a href="#strukturierte-unterteilung-in-weitere-dateienabschnitte" id="toc-strukturierte-unterteilung-in-weitere-dateienabschnitte" class="nav-link" data-scroll-target="#strukturierte-unterteilung-in-weitere-dateienabschnitte">Strukturierte Unterteilung in weitere Dateien/Abschnitte</a></li>
<li><a href="#keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" id="toc-keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" class="nav-link" data-scroll-target="#keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen">Keine proprietären Formate oder Abhängigkeit von Werkzeugen</a></li>
<li><a href="#strukturierte-unterteilung-in-weitere-dateienabschnitte" id="toc-strukturierte-unterteilung-in-weitere-dateienabschnitte" class="nav-link" data-scroll-target="#strukturierte-unterteilung-in-weitere-dateienabschnitte">Strukturierte Unterteilung in weitere Dateien/Abschnitte</a></li>
<li><a href="#übersichtlichkeit-und-navigierbarkeit" id="toc-übersichtlichkeit-und-navigierbarkeit" class="nav-link" data-scroll-target="#übersichtlichkeit-und-navigierbarkeit">Übersichtlichkeit und Navigierbarkeit</a></li>
<li><a href="#beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" id="toc-beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" class="nav-link" data-scroll-target="#beispiele-codeblöcke-und-ggf.-abbildungen-einbinden">Beispiele, Codeblöcke und ggf. Abbildungen einbinden</a></li>
<li><a href="#fazit-format-und-struktur" id="toc-fazit-format-und-struktur" class="nav-link" data-scroll-target="#fazit-format-und-struktur">Fazit Format und Struktur</a></li>
</ul></li>
<li><a href="#die-dokumentation-selbst" id="toc-die-dokumentation-selbst" class="nav-link" data-scroll-target="#die-dokumentation-selbst">Die Dokumentation selbst</a>
<ul class="collapse">
<li><a href="#umfang-und-fokus-der-dokumentation" id="toc-umfang-und-fokus-der-dokumentation" class="nav-link" data-scroll-target="#umfang-und-fokus-der-dokumentation">Umfang und Fokus der Dokumentation</a></li>
<li><a href="#priorisierung-bei-zeitmangel" id="toc-priorisierung-bei-zeitmangel" class="nav-link" data-scroll-target="#priorisierung-bei-zeitmangel">Priorisierung bei Zeitmangel</a></li>
</ul></li>
<li><a href="#was-macht-eine-gute-dokumentation-aus" id="toc-was-macht-eine-gute-dokumentation-aus" class="nav-link" data-scroll-target="#was-macht-eine-gute-dokumentation-aus">Was macht eine gute Dokumentation aus</a>
<ul class="collapse">
<li><a href="#nutzungshilfen-außerhalb-der-dokumentation" id="toc-nutzungshilfen-außerhalb-der-dokumentation" class="nav-link" data-scroll-target="#nutzungshilfen-außerhalb-der-dokumentation">Nutzungshilfen außerhalb der Dokumentation</a></li>
<li><a href="#prinzipien-fair-und-endings" id="toc-prinzipien-fair-und-endings" class="nav-link" data-scroll-target="#prinzipien-fair-und-endings">Prinzipien: FAIR und ENDINGS</a></li>
<li><a href="#kontinuierliche-verbesserung-und-feedback" id="toc-kontinuierliche-verbesserung-und-feedback" class="nav-link" data-scroll-target="#kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</a></li>
<li><a href="#positiv--und-negativbeispiele-studieren" id="toc-positiv--und-negativbeispiele-studieren" class="nav-link" data-scroll-target="#positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</a></li>
</ul></li>
<li><a href="#teil-automatisierte-dokumentationswerkzeuge" id="toc-teil-automatisierte-dokumentationswerkzeuge" class="nav-link" data-scroll-target="#teil-automatisierte-dokumentationswerkzeuge">(Teil-)automatisierte Dokumentationswerkzeuge</a>
<ul class="collapse">
<li><a href="#docstrings-und-api-dokumentationsgeneratoren" id="toc-docstrings-und-api-dokumentationsgeneratoren" class="nav-link" data-scroll-target="#docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</a></li>
<li><a href="#jupyter-notebooks-und-literate-programming" id="toc-jupyter-notebooks-und-literate-programming" class="nav-link" data-scroll-target="#jupyter-notebooks-und-literate-programming">Jupyter Notebooks und literate programming</a></li>
<li><a href="#sphinxmkdocsdoxygen-statische-dokumentationswebseiten" id="toc-sphinxmkdocsdoxygen-statische-dokumentationswebseiten" class="nav-link" data-scroll-target="#sphinxmkdocsdoxygen-statische-dokumentationswebseiten">Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)</a></li>
<li><a href="#in-code-hilfefunktionen-und-cl-interface-doku" id="toc-in-code-hilfefunktionen-und-cl-interface-doku" class="nav-link" data-scroll-target="#in-code-hilfefunktionen-und-cl-interface-doku">In-Code Hilfefunktionen und CL-Interface Doku</a></li>
<li><a href="#docstrings-und-api-dokumentationsgeneratoren" id="toc-docstrings-und-api-dokumentationsgeneratoren" class="nav-link" data-scroll-target="#docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</a></li>
<li><a href="#versionskontrolle-und-kontinuierliche-dokumentationspflege" id="toc-versionskontrolle-und-kontinuierliche-dokumentationspflege" class="nav-link" data-scroll-target="#versionskontrolle-und-kontinuierliche-dokumentationspflege">Versionskontrolle und kontinuierliche Dokumentationspflege</a></li>
<li><a href="#spezialfälle" id="toc-spezialfälle" class="nav-link" data-scroll-target="#spezialfälle">Spezialfälle</a></li>
<li><a href="#wann-ist-was-verpflichtend" id="toc-wann-ist-was-verpflichtend" class="nav-link" data-scroll-target="#wann-ist-was-verpflichtend">Wann ist was verpflichtend</a></li>
</ul></li>
<li><a href="#best-practices-vorlagen-und-checklisten" id="toc-best-practices-vorlagen-und-checklisten" class="nav-link" data-scroll-target="#best-practices-vorlagen-und-checklisten">Best Practices, Vorlagen und Checklisten</a>
<ul class="collapse">
<li><a href="#orientierung-an-nutzerbedürfnissen" id="toc-orientierung-an-nutzerbedürfnissen" class="nav-link" data-scroll-target="#orientierung-an-nutzerbedürfnissen">Orientierung an Nutzerbedürfnissen</a></li>
<li><a href="#checkliste-für-die-mindest-dokumentation" id="toc-checkliste-für-die-mindest-dokumentation" class="nav-link" data-scroll-target="#checkliste-für-die-mindest-dokumentation">Checkliste für die Mindest-Dokumentation</a></li>
<li><a href="#positiv--und-negativbeispiele-studieren" id="toc-positiv--und-negativbeispiele-studieren" class="nav-link" data-scroll-target="#positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</a></li>
<li><a href="#prinzipien-fair-und-endings" id="toc-prinzipien-fair-und-endings" class="nav-link" data-scroll-target="#prinzipien-fair-und-endings">Prinzipien: FAIR und ENDINGS</a></li>
<li><a href="#kontinuierliche-verbesserung-und-feedback" id="toc-kontinuierliche-verbesserung-und-feedback" class="nav-link" data-scroll-target="#kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</a></li>
<li><a href="#zusammenfassung-best-practices" id="toc-zusammenfassung-best-practices" class="nav-link" data-scroll-target="#zusammenfassung-best-practices">Zusammenfassung Best Practices</a></li>
</ul></li>
<li><a href="#fazit" id="toc-fazit" class="nav-link" data-scroll-target="#fazit">Fazit</a>
<ul class="collapse">
<li><a href="#tabellarische-übersicht-der-dokumentations-bestandteile" id="toc-tabellarische-übersicht-der-dokumentations-bestandteile" class="nav-link" data-scroll-target="#tabellarische-übersicht-der-dokumentations-bestandteile">Tabellarische Übersicht der Dokumentations-Bestandteile</a></li>
<li><a href="#schlusswort" id="toc-schlusswort" class="nav-link" data-scroll-target="#schlusswort">Schlusswort</a></li>
</ul></li>
<li><a href="#fazit" id="toc-fazit" class="nav-link" data-scroll-target="#fazit">Fazit</a></li>
</ul>
<div class="quarto-code-links"><h2>Code-Links</h2><ul><li><a href="https://gitea.dresselhaus.cloud/Drezil/doc_documentation"><i class="bi bi-cup-hot-fill"></i>Repository with example-project</a></li></ul></div></nav>
@ -699,7 +742,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
</p>
</div>
<div class="quarto-title-meta-contents">
<p class="author"><a href="https://chatgpt.com">GPT-4.5</a> </p>
<p class="author"><a href="https://chatgpt.com">GPT-4.5 “deep research”</a> </p>
</div>
<div class="quarto-title-meta-contents">
<p class="affiliation">
@ -716,7 +759,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
<div>
<div class="quarto-title-meta-heading">Veröffentlichungsdatum</div>
<div class="quarto-title-meta-contents">
<p class="date">8. Mai 2025</p>
<p class="date">5. Juni 2025</p>
</div>
</div>
@ -734,11 +777,12 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
</header>
<section id="einleitung" class="level2 page-columns page-full">
<section id="einleitung" class="level2">
<h2 class="anchored" data-anchor-id="einleitung">Einleitung</h2>
<p>Die <strong>Dokumentation von Forschungssoftware</strong> ist entscheidend, um wissenschaftliche Ergebnisse nachvollziehbar und Software für andere nutzbar zu machen. Insbesondere in den Digital Humanities (etwa in der Geschichtswissenschaft) entwickeln Forschende neben Forschung und Lehre oft eigene Software meist unter hohem Zeitdruck und ohne formale Ausbildung in Softwareentwicklung. Häufig bleibt die Dokumentation deshalb minimal oder unvollständig, was dazu führt, dass andere (und sogar die Autor*innen selbst) viel Zeit aufwenden müssen, um den Code zu verstehen und anzuwenden. Dabei gilt gute Dokumentation als zentrale Voraussetzung, um Forschungssoftware <strong>auffindbar, nachvollziehbar und wiederverwendbar</strong> zu machen.</p>
<div class="page-columns page-full"><p></p><div class="no-row-height column-margin column-container"><span class="margin-aside">Alle Empfehlungen stützen sich auf Literatur und etablierte Richtlinien <span class="citation" data-cites="prlic2012ten wilson2017good katz2021open endings2020principles">(<a href="#ref-prlic2012ten" role="doc-biblioref">Prlić und Procter 2012</a>; <a href="#ref-wilson2017good" role="doc-biblioref">Wilson u.&nbsp;a. 2017</a>; <a href="#ref-katz2021open" role="doc-biblioref">Katz, Niemeyer, und Smith 2021</a>; <a href="#ref-endings2020principles" role="doc-biblioref">Endings Project 2020</a>)</span>.</span></div></div>
<p>Dieser Anforderungskatalog richtet sich an Forschende, die keine Vollzeit-Programmierer sind, und soll <strong>wissenschaftlich fundierte Richtlinien</strong> für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen berücksichtigen Best Practices des Research Software Engineering (RSE) und insbesondere die Prinzipien des <em>Endings-Projekts</em> für digitale Langlebigkeit <span class="citation" data-cites="endings2020principles">(<a href="#ref-endings2020principles" role="doc-biblioref">Endings Project 2020</a>)</span>. Ziel ist es, ein praxistaugliches Gerüst bereitzustellen, das trotz Zeitknappheit die wesentlichen Dokumentationsaspekte abdeckt, um sowohl die <strong>Nachvollziehbarkeit</strong> der Ergebnisse als auch eine <strong>Weiterverwendung</strong> der Software zu ermöglichen. Im Folgenden werden die Anforderungen an Inhalt, Format und Umfang der Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt.</p>
<p>Dieser Anforderungskatalog richtet sich an Forschende, die keine Vollzeit-Programmierer sind, und soll <strong>wissenschaftlich fundierte Richtlinien</strong> für die Dokumentation von Forschungssoftware liefern. Die Empfehlungen berücksichtigen Best Practices des Research Software Engineering (RSE) und damit einhergehender Prinzipien wie die des <em>Endings-Projekts</em> für digitale Langlebigkeit <span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span> und <em>FAIR-Prinzipien</em> für Software<span class="citation" data-cites="BarkerEtAl2022IntroducingFAIR">[<a href="#ref-BarkerEtAl2022IntroducingFAIR" role="doc-biblioref">2</a>]</span>.</p>
<p>Ziel ist es, ein praxistaugliches Gerüst bereitzustellen, das trotz Zeitknappheit die wesentlichen Dokumentationsaspekte abdeckt, um sowohl die <strong>Nachvollziehbarkeit</strong> der Ergebnisse als auch eine <strong>Weiterverwendung</strong> der Software zu ermöglichen<span class="citation" data-cites="WilsonEtAl2017Goodenoughpractices">[<a href="#ref-WilsonEtAl2017Goodenoughpractices" role="doc-biblioref">3</a>]</span>.</p>
<p>Im Folgenden werden die Anforderungen an Inhalt, Format und Umfang der Dokumentation definiert, geeignete (teil-)automatisierte Dokumentationswerkzeuge diskutiert und Best Practices in Form von Vorlagen und Checklisten vorgestellt.</p>
</section>
<section id="inhaltliche-anforderungen-an-die-dokumentation" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="inhaltliche-anforderungen-an-die-dokumentation">Inhaltliche Anforderungen an die Dokumentation</h2>
@ -749,42 +793,105 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
</section>
<section id="input-output-spezifikation-und-datenbeschreibung" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="input-output-spezifikation-und-datenbeschreibung">Input-/Output-Spezifikation und Datenbeschreibung</h3>
<div class="page-columns page-full"><p>Dokumentieren Sie alle <em>Eingabeformate, Ausgabedaten und verwendeten Datensätze</em>. Nutzer*innen müssen wissen, welche Daten die Software erwartet (Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert. Idealerweise werden Beispiele angegeben: z.B. Beispiel-Dateien oder -Parameter und die korrespondierende Ausgabe. Falls die Software mit bestimmten Forschungsdaten arbeitet, beschreiben Sie diese Daten und ihre Struktur. Dies umfasst die <strong>Datenmodelle</strong> (etwa wichtige Felder, deren Bedeutung und kontrollierte Vokabulare) und Annahmen über die Daten. Gemäß den ENDINGS-Prinzipien sollte die Datenstruktur in einem <em>statischen Dokument</em> festgehalten und der Software beigelegt sein so bleibt nachvollziehbar, wie die Software die Daten interpretiert. Eine Tabelle oder Auflistung der Eingabefelder und Ausgabegrößen mit kurzen Beschreibungen erhöht die Klarheit. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Eingabedatei: CSV mit Spalten <code>Autor</code>, <code>Empfänger</code>, …; Ausgabe: JSON-Datei mit Netzwerk-Metriken pro Briefwechsel.”</em></span></div></div>
<p>Dokumentieren Sie alle <em>Eingabeformate, Ausgabedaten und verwendeten Datensätze</em>. Nutzer*innen müssen wissen, welche Daten die Software erwartet (Dateiformate, Schnittstellen, Parameter) und welche Ergebnisse sie produziert. Idealerweise werden Beispiele angegeben: z.B. Beispiel-Dateien oder -Parameter und die korrespondierende Ausgabe.</p>
<p>Falls die Software mit bestimmten Forschungsdaten arbeitet, beschreiben Sie diese Daten und ihre Struktur. Dies umfasst die <strong>Datenmodelle</strong> (etwa wichtige Felder, deren Bedeutung und kontrollierte Vokabulare) und Annahmen über die Daten.</p>
<div class="page-columns page-full"><p>Gemäß den ENDINGS-Prinzipien sollte die Datenstruktur auch in einem <em>statischen Dokument</em> festgehalten und der Software beigelegt sein so bleibt nachvollziehbar, wie die Software die Daten interpretiert <span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span>. Eine Tabelle oder Auflistung der Eingabefelder und Ausgabegrößen mit kurzen Beschreibungen erhöht die Klarheit. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Eingabedatei: CSV mit Spalten <code>Autor</code>, <code>Empfänger</code>, …; Ausgabe: JSON-Datei mit Netzwerk-Metriken pro Briefwechsel.”</em></span></div></div>
<p>Gerade für JSON-Dateien bietet es sich an ggf. auch ein formelle Spezifikation via <a href="https://json-schema.org/draft/2020-12/json-schema-core">JSON-Schema</a> an.</p>
</section>
<section id="code-abhängigkeiten-und-technische-voraussetzungen" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="code-abhängigkeiten-und-technische-voraussetzungen">Code-Abhängigkeiten und technische Voraussetzungen</h3>
<div class="page-columns page-full"><p>Listen Sie alle <em>Abhängigkeiten</em> (Dependencies) der Software auf. Dazu gehören verwendete Programmiersprachen/Versionen, erforderliche Bibliotheken oder Frameworks, und sonstige Systemvoraussetzungen (z.B. Betriebssystem, Mindesthardware, Datenbank-Versionen). Wichtig ist, <strong>wie</strong> diese Abhängigkeiten installiert werden können. Optimal ist eine automatisierte Installationsroutine (z.B. ein <code>requirements.txt</code> für Python oder ein Paketmanager-Befehl). In jedem Fall sollte die Dokumentation mindestens Schritt-für-Schritt-Installationsanleitungen enthalten (inklusive evtl. benötigter Vorkenntnisse, z.B. <em>“Python 3 erforderlich”</em>). </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Beispiel: <em>“Benötigt Python 3.9 und die Bibliotheken Pandas und NetworkX. Installation: <code>pip install -r requirements.txt</code>.”</em> Falls spezielle technische Voraussetzungen bestehen etwa Zugriff auf bestimmte Hardware, ein Hochleistungsrechner oder große Speicherkapazitäten sind diese zu nennen.</span></div></div>
<ul>
<li><strong>Typische Nutzungsszenarien und Workflows:</strong> Zeigen Sie anhand von <em>Beispielen</em>, wie die Software benutzt wird. Ein <strong>Quickstart-Beispiel</strong> senkt die Einstiegshürde enorm. Dies kann z.B. eine Anleitung sein, wie man mit wenigen Schritten von einer Eingabedatei zum gewünschten Ergebnis kommt (<em>“Getting Started”</em>-Abschnitt). Beschreiben Sie typische Workflows in nachvollziehbaren Schritten: Eingabe vorbereiten, Software-Befehl/GUI-Aktion ausführen, Ausgabe interpretieren. Ggf. können mehrere Anwendungsfälle skizziert werden (z.B. <em>“Analyse eines einzelnen Briefes”</em> vs. <em>“Batch-Verarbeitung eines gesamten Korpus”</em>). Diese Beispiele sollten realistisch und möglichst <em>repräsentativ für wissenschaftliche Anwendungen</em> sein. Nutzen Sie gerne kleine Datensamples oder Defaults, damit Nutzer die Beispielschritte direkt ausprobieren können. Idealerweise werden Code-Beispiele mit ausgegebenen Resultaten gezeigt (z.B. in Form von Ausschnitten oder, bei Kommandozeilentools, via <code>--help</code> dokumentiert). </li>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Zeigen statt nur beschreiben konkrete Anwendungsfälle in der Doku verankern.</p>
</div>
</div></div><ul>
<li><strong>Typische Nutzungsszenarien und Workflows:</strong> Zeigen Sie anhand von <em>Beispielen</em>, wie die Software benutzt wird. Ein <strong>Quickstart-Beispiel</strong> senkt die Einstiegshürde enorm. Dies kann z.B. eine Anleitung sein, wie man mit wenigen Schritten von einer Eingabedatei zum gewünschten Ergebnis kommt (<em>“Getting Started”</em>-Abschnitt). Beschreiben Sie typische Workflows in nachvollziehbaren Schritten: Eingabe vorbereiten, Software-Befehl/GUI-Aktion ausführen, Ausgabe interpretieren. Ggf. können mehrere Anwendungsfälle skizziert werden (z.B. <em>“Analyse eines einzelnen Briefes”</em> vs. <em>“Batch-Verarbeitung eines gesamten Korpus”</em>). Diese Beispiele sollten realistisch und möglichst <em>repräsentativ für wissenschaftliche Anwendungen</em> sein. Nutzen Sie gerne kleine Datensamples oder Defaults, damit Nutzer die Beispielschritte direkt ausprobieren können. Idealerweise werden Code-Beispiele mit ausgegebenen Resultaten gezeigt (z.B. in Form von Ausschnitten oder, bei Kommandozeilentools, via <code>--help</code> dokumentiert).</li>
</ul>
<div class="no-row-height column-margin column-container"><span class="margin-aside">Faustregel: <strong>Zeigen statt nur beschreiben</strong> konkrete Anwendungsfälle in der Doku verankern.</span></div></section>
</section>
<section id="wissenschaftlicher-hintergrund-und-theoretischer-kontext" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="wissenschaftlicher-hintergrund-und-theoretischer-kontext">Wissenschaftlicher Hintergrund und theoretischer Kontext</h3>
<div class="page-columns page-full"><p>Da es sich um Forschungssoftware handelt, sollten Sie den <em>wissenschaftlichen Kontext</em> offenlegen. Das heißt, erklären Sie die grundlegenden Methoden, Algorithmen oder Modelle, die in der Software umgesetzt sind, zumindest in Überblicksform. Verweisen Sie auf <em>relevante Publikationen</em> oder Theorien, damit andere die wissenschaftliche Grundlage nachvollziehen können. Beispielsweise: <em>“Die Implementierung folgt dem Algorithmus von Müller et al.&nbsp;(2019) zur Netzwerkanalyse historischer Korrespondenz.”</em> Halten Sie diesen Abschnitt aber prägnant Details gehören in die Forschungsarbeit selbst. Wichtig ist, dass die Dokumentation den <strong>Brückenschlag zwischen Code und Forschung</strong> herstellt. Da viele Wissenschaftler*innen zentrale Aspekte lieber in ihren Artikeln dokumentieren, sollte in der Software-Dokumentation zumindest eine Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer*innen, unter welchen Annahmen oder Theorien das Tool funktioniert. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Dieser Hintergrundteil unterscheidet Forschungssoftware-Dokumentation von rein kommerzieller Dokumentation: Es geht nicht nur um <em>wie</em> man das Tool benutzt, sondern auch <em>warum</em> es so funktioniert (Stichwort Nachvollziehbarkeit).</span></div></div>
</section>
<p>Da es sich um Forschungssoftware handelt, sollten Sie den <em>wissenschaftlichen Kontext</em> <a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a> offenlegen. Das heißt, erklären Sie die grundlegenden Methoden, Algorithmen oder Modelle, die in der Software umgesetzt sind, zumindest in Überblicksform. Verweisen Sie auf <em>relevante Publikationen</em> oder Theorien, damit andere die wissenschaftliche Grundlage nachvollziehen können. Beispielsweise: <em>“Die Implementierung folgt dem Algorithmus von Müller et al. (2019) zur Netzwerkanalyse historischer Korrespondenz.”</em> Halten Sie diesen Abschnitt aber prägnant Details gehören in die Forschungsarbeit selbst. Wichtig ist, dass die Dokumentation den <strong>Brückenschlag zwischen Code und Forschung</strong> herstellt. Da viele Wissenschaftler*innen zentrale Aspekte lieber in ihren Artikeln dokumentieren, sollte in der Software-Dokumentation zumindest eine Zusammenfassung mit Querverweis erfolgen. So wissen Nutzer*innen, unter welchen Annahmen oder Theorien das Tool funktioniert.</p>
<div class="no-row-height column-margin column-container"><div id="fn1"><p><sup>1</sup>&nbsp;Dieser Hintergrundteil unterscheidet Forschungssoftware-Dokumentation von rein kommerzieller Dokumentation: Es geht nicht nur um <em>wie</em> man das Tool benutzt, sondern auch <em>warum</em> es so funktioniert (Stichwort Nachvollziehbarkeit).</p></div></div></section>
<section id="bekannte-limitationen-annahmen-und-fehlermeldungen" class="level3">
<h3 class="anchored" data-anchor-id="bekannte-limitationen-annahmen-und-fehlermeldungen">Bekannte Limitationen, Annahmen und Fehlermeldungen</h3>
<p>Geben Sie ehrlich Auskunft über die <em>Grenzen der Software</em>. Welche Fälle werden <strong>nicht</strong> abgedeckt? Welche Annahmen über die Daten oder Anwendungsszenarien werden getroffen? Dokumentieren Sie bekannte Probleme oder Einschränkungen (z.B. <em>“funktioniert nur für Deutschsprachige Texte”, “maximale Datenmenge 1 Mio. Datensätze, da Speicherbegrenzung”</em>). Solche Hinweise verhindern Fehlanwendungen und sparen Nutzern Zeit. Falls es bekannte <strong>Bugs oder Workarounds</strong> gibt, sollten diese ebenfalls (etwa in einer FAQ oder einem Abschnitt “Bekannte Probleme”) erwähnt werden. Eine transparente Auflistung von Limitationen erhöht die Vertrauenswürdigkeit und hilft anderen, die Ergebnisse richtig einzuordnen. Auch <strong>aussagekräftige Fehlermeldungen</strong> im Programm selbst sind eine Form von Dokumentation: Sie sollten nicht nur kryptisch abbrechen, sondern dem/der Anwender*in idealerweise mitteilen, was schiefging und wie es behoben werden kann (z.B. <em>“Fehler: Ungültiges Datum im Feld XY bitte Format TT/MM/JJJJ verwenden.”</em>). Solche in den Code integrierten Hinweise ergänzen die schriftliche Dokumentation und tragen zur besseren Nutzbarkeit bei.</p>
<p>Geben Sie ehrlich Auskunft über die <em>Grenzen der Software</em>:</p>
<ul>
<li>Welche Fälle werden <strong>nicht</strong> abgedeckt?</li>
<li>Welche <strong>Annahmen</strong> über die Daten oder Anwendungsszenarien werden getroffen?</li>
</ul>
<p>Dokumentieren Sie bekannte Probleme oder Einschränkungen (z.B. <em>“funktioniert nur für Deutschsprachige Texte”, “maximale Datenmenge 1 Mio. Datensätze, da Speicherbegrenzung”</em>). Solche Hinweise verhindern Fehlanwendungen und sparen Nutzern Zeit.</p>
<p>Falls es bekannte <strong>Bugs oder Workarounds</strong> gibt, sollten diese ebenfalls (etwa in einer FAQ oder einem Abschnitt “Bekannte Probleme”) erwähnt werden.</p>
<p>Auch <strong>aussagekräftige Fehlermeldungen</strong> im Programm selbst sind eine Form von Dokumentation: Sie sollten nicht nur kryptisch abbrechen, sondern dem/der Anwender*in idealerweise mitteilen, was schiefging und bestenfalls direkt wie es behoben werden kann (z.B. <em>“Fehler: Ungültiges Datum im Feld XY bitte Format TT/MM/JJJJ verwenden.”</em>). Solche in den Code integrierten Hinweise ergänzen die schriftliche Dokumentation und tragen zur besseren Nutzbarkeit bei.</p>
</section>
<section id="weiterentwicklung-und-beitragsmöglichkeiten" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="weiterentwicklung-und-beitragsmöglichkeiten">Weiterentwicklung und Beitragsmöglichkeiten</h3>
<div class="page-columns page-full"><p>Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden, sollte dennoch angegeben werden, wie andere ggf. <em>zur Software beitragen oder Support erhalten</em> können. Ein kurzer Hinweis auf den Issue-Tracker (z.B. <em>“Fehler bitte über GitHub-Issues melden”</em>) oder auf die Kontaktmöglichkeit zum Autor (E-Mail) gehört dazu. Ebenso können <strong>Community Guidelines</strong> skizziert werden: etwa Codierstandards oder ein Verhaltenskodex, falls Beiträge erwartet werden. Für kleinere Projekte reicht oft ein Satz wie <em>“Beiträge durch Pull Requests sind willkommen; bei Fragen wenden Sie sich an…”</em>. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Dieser Aspekt muss nicht umfangreich sein, zeigt aber Offenheit und sorgt dafür, dass im Falle von Rückfragen die Hürde für Kontaktaufnahme niedrig ist.</span></div></div>
</section>
<p>Obwohl viele Digital-Humanities-Tools primär von Einzelpersonen genutzt werden, sollte dennoch angegeben werden, wie andere ggf. <em>zur Software beitragen oder Support erhalten</em> können. Ein kurzer Hinweis auf den Issue-Tracker (z.B. <em>“Fehler bitte über GitHub-Issues melden”</em>) oder auf die Kontaktmöglichkeit zum*zur Autor*in (E-Mail) gehört dazu.</p>
<p>Ebenso können <strong>Community Guidelines</strong> skizziert werden: etwa Codierstandards oder ein Verhaltenskodex, falls Beiträge erwartet werden. Für kleinere Projekte reicht oft ein Satz wie <em>“Beiträge durch Pull Requests sind willkommen; bei Fragen wenden Sie sich an…”</em>. <a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a></p>
<div class="no-row-height column-margin column-container"><div id="fn2"><p><sup>2</sup>&nbsp;Dieser Aspekt muss nicht umfangreich sein, zeigt aber Offenheit und sorgt dafür, dass im Falle von Rückfragen die Hürde für Kontaktaufnahme niedrig ist.</p></div></div></section>
<section id="projekt-metadaten-lizenz-zitation-version" class="level3">
<h3 class="anchored" data-anchor-id="projekt-metadaten-lizenz-zitation-version">Projekt-Metadaten (Lizenz, Zitation, Version)</h3>
<p>Teil der Dokumentation sind auch formale Informationen, die im Repository leicht zugänglich sein sollten. <strong>Lizenzinformationen</strong> klären die rechtlichen Bedingungen der Nutzung und Weiterverbreitung. Es ist Best Practice, eine <strong>LICENSE-Datei</strong> beizulegen, aber auch in der README kurz zu erwähnen, unter welcher Lizenz die Software steht. Für Forschungssoftware empfiehlt sich eine offene Lizenz (z.B. MIT, BSD oder Apache 2.0 für Code, CC-BY für Daten), um Nachnutzung nicht zu behindern. Zudem sollte angegeben werden, wie die Software <strong>zitiert</strong> werden kann (z.B. DOI, Paper-Referenz). Ein eigener Abschnitt <em>“Zitation”</em> oder eine CITATION-Datei beschreibt, welche Publikation oder welcher DOI bei Verwendung der Software in wissenschaftlichen Arbeiten anzugeben ist. Dies erhöht die akademische Sichtbarkeit und stellt sicher, dass Autor*innen Credits für ihre Software bekommen<span class="citation" data-cites="smith2016software">(<a href="#ref-smith2016software" role="doc-biblioref">Smith u.&nbsp;a. 2016</a>)</span>. Schließlich ist es sinnvoll, eine <strong>Versionsnummer</strong> der Software zu nennen (idealerweise in README und im Tool selbst), damit Nutzer wissen, auf welche Ausgabe sich die Dokumentation bezieht insbesondere, wenn es im Laufe der Zeit Aktualisierungen gibt. Diese Praxis entspricht auch den ENDINGS-Prinzipien, die verlangen, dass jede veröffentlichte Version eindeutig erkennbar ist und zitiert werden kann.</p>
<p>Teil der Dokumentation sind auch formale Informationen, die im Repository leicht zugänglich sein sollten. <strong>Lizenzinformationen</strong> klären die rechtlichen Bedingungen der Nutzung und Weiterverbreitung. Es ist Best Practice, eine <strong>LICENSE-Datei</strong> beizulegen, aber auch in der README kurz zu erwähnen, unter welcher Lizenz die Software steht. Für Forschungssoftware empfiehlt sich eine offene Lizenz (z.B. MIT, BSD oder Apache 2.0 für Code, CC-BY für Daten), um Nachnutzung nicht zu behindern.</p>
<p>Zudem sollte angegeben werden, wie die Software <strong>zitiert</strong> werden kann (z.B. DOI, Paper-Referenz). Ein eigener Abschnitt <em>“Zitation”</em> oder eine <strong>CITATION-Datei</strong> beschreibt, welche Publikation oder welcher DOI bei Verwendung der Software in wissenschaftlichen Arbeiten anzugeben ist. Dies erhöht die akademische Sichtbarkeit und stellt sicher, dass Autor*innen Credits für ihre Software bekommen <span class="citation" data-cites="NoyEtAl2019IndustryscaleKnowledge">[<a href="#ref-NoyEtAl2019IndustryscaleKnowledge" role="doc-biblioref">4</a>]</span>.</p>
<p>Schließlich ist es sinnvoll, eine <strong>Versionsnummer</strong> der Software zu nennen (idealerweise in README und im Tool selbst), damit Nutzer wissen, auf welche Ausgabe sich die Dokumentation bezieht insbesondere, wenn es im Laufe der Zeit Aktualisierungen gibt<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span>.</p>
</section>
<section id="zusammenfassung-der-inhaltlichen-anforderungen" class="level3">
<h3 class="anchored" data-anchor-id="zusammenfassung-der-inhaltlichen-anforderungen">Zusammenfassung der inhaltlichen Anforderungen</h3>
<p>Zusammengefasst sollte die Dokumentation alle <strong>W-Fragen</strong> beantworten: <em>Was</em> tut die Software, <em>warum</em> wurde sie geschrieben (wissenschaftlicher Zweck), <em>wer</em> soll sie nutzen, <em>wie</em> wird sie benutzt (Inputs, Outputs, Abläufe), <em>womit</em> läuft sie (Umgebung/Abhängigkeiten), <em>unter welchen Bedingungen</em> (Annahmen/Limitationen) und <em>wohin</em> können sich Nutzer wenden (Support/Zitation). All diese Punkte sorgen für <strong>Nachvollziehbarkeit</strong> (im Sinne von Reproduzierbarkeit der Ergebnisse) und <strong>Weiterverwendbarkeit</strong> (im Sinne von Adaptierbarkeit der Software für neue Kontexte).</p>
<p>Zusammengefasst sollte die Dokumentation alle <strong>W-Fragen</strong> beantworten:</p>
<ul>
<li><em>Was</em> tut die Software,</li>
<li><em>warum</em> wurde sie geschrieben (wissenschaftlicher Zweck),</li>
<li><em>wer</em> soll sie nutzen,</li>
<li><em>wie</em> wird sie benutzt (Inputs, Outputs, Abläufe),</li>
<li><em>womit</em> läuft sie (Umgebung/Abhängigkeiten),</li>
<li><em>unter welchen Bedingungen</em> (Annahmen/Limitationen) und</li>
<li><em>wohin</em> können sich Nutzer wenden (Support/Zitation).</li>
</ul>
<p>All diese Punkte sorgen für <strong>Nachvollziehbarkeit</strong> (im Sinne von Reproduzierbarkeit der Ergebnisse) und <strong>Weiterverwendbarkeit</strong> (im Sinne von Adaptierbarkeit der Software für neue Kontexte).</p>
</section>
</section>
<section id="format-und-struktur-der-dokumentation" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="format-und-struktur-der-dokumentation">Format und Struktur der Dokumentation</h2>
<p>Für Forschende ohne viel Ressourcen muss die Dokumentation <strong>einfach zugänglich, leicht pflegbar und ohne Spezialsoftware</strong> erstellbar sein. Daher empfiehlt es sich, auf <strong>leichte Formate</strong> und eine klare Struktur zu setzen:</p>
<p>Für Forschende ohne viel Ressourcen muss die Dokumentation <strong>einfach zugänglich, leicht pflegbar und ohne Spezialsoftware</strong> erstellbar sein.</p>
<section id="readme.md-als-zentrales-dokument" class="level3">
<h3 class="anchored" data-anchor-id="readme.md-als-zentrales-dokument"><code>README.md</code> als zentrales Dokument</h3>
<p>Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen Punkte: Zweck der Software, Kurzbeschreibung, Installation, kurzer Nutzungsbeispiel, Kontakt/Lizenz. Auf Plattformen wie GitHub, GitLab etc. wird die README automatisch angezeigt, was die Sichtbarkeit erhöht. Die Vorteile von <strong>Markdown</strong> sind die einfache Lesbarkeit in Rohform, die breite Unterstützung (auch in Renderern wie GitHub-Webansicht) und die Eignung für Versionierung (Textdatei im Git). So bleibt die Dokumentation eng mit dem Code verzahnt und unter Versionskontrolle ein Prinzip, das auch von ENDINGS propagiert wird (Dokumentation soll statisch und zusammen mit den Daten/Code abgelegt werden).</p>
<p>Die Hauptdokumentation sollte als README in Markdown-Format im Hauptverzeichnis des Code-Repositoriums liegen. Dieses README fungiert als “Startseite” des Projekts und enthält idealerweise eine komprimierte Übersicht aller wichtigen Punkte:</p>
<ul>
<li>Zweck der Software,</li>
<li>Kurzbeschreibung,</li>
<li>Installation,</li>
<li>kurzer Nutzungsbeispiel,</li>
<li>Kontakt/Lizenz.</li>
</ul>
<p>Auf Plattformen wie <a href="https://github.com" title="Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft">GitHub</a>, <a href="https://gitlab.com" title="Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking, …). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz">GitLab</a> etc. wird die README automatisch angezeigt, was die Sichtbarkeit erhöht. Die Vorteile von <strong><a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a></strong> sind die einfache Lesbarkeit in Rohform, die breite Unterstützung (auch in Renderern wie GitHub-Webansicht) und die Eignung für Versionierung (Textdatei im <a href="https://git-scm.com" title="Das de-facto Standard-Versionskontrollsystem">git</a>). So bleibt die Dokumentation eng mit dem Code verzahnt und unter Versionskontrolle denn Dokumentation soll statisch und zusammen mit den Daten/Code abgelegt werden<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span>.</p>
</section>
<section id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen">Keine proprietären Formate oder Abhängigkeit von Werkzeugen</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Dokumentation gehört zum Code und muss auch ohne Programm lesbar sein.</p>
</div>
</div></div><p>Um Hürden für die Erstellung und Nutzung der Dokumentation gering zu halten, sollte auf gängige, offene Formate gesetzt werden (Plaintext, <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>, <a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">reStructuredText</a>).</p>
<p><span class="bad-practice">Vermeiden Sie nach Möglichkeit Formate wie Word-Dokumente oder PDF als primäre Dokumentationsquelle solche Formate sind nicht diff-freundlich, erschweren Zusammenarbeits-Workflows und sind meist nicht Teil des Versionskontrollsystems.</span> Ein <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>-Dokument hingegen kann gemeinsam mit dem Code gepflegt werden, und Änderungen sind transparent nachvollziehbar.</p>
<p>Im Sinne der <em>Digital Longevity</em><span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span> ist eine <strong>statische HTML- oder PDF-Version</strong> der Dokumentation (automatisch generiert aus <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> via <a href="https://pandoc.org/MANUAL.html#pandocs-markdown" title="DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen">pandoc</a>) als Teil der Release-Artefakte sinnvoll. <strong>Wichtig ist aber, dass die Quelle der Wahrheit immer die im Repository gepflegte Doku bleibt.</strong></p>
</section>
<section id="strukturierte-unterteilung-in-weitere-dateienabschnitte" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="strukturierte-unterteilung-in-weitere-dateienabschnitte">Strukturierte Unterteilung in weitere Dateien/Abschnitte</h3>
@ -808,7 +915,7 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
└── module/
└── helper.py</code></pre>
<p>Beispielhafter Struktur eines Code-Repositories</p>
</div></div><p>Sollte die Dokumentation umfangreicher sein, ist es sinnvoll, sie in logisch getrennte Abschnitte aufzuteilen. Dies kann innerhalb der README durch Überschriften geschehen oder durch <strong>zusätzliche Markdown-Dateien</strong> im Repository (z.B. eine <code>INSTALL.md</code> für ausführliche Installationshinweise, eine <code>USAGE.md</code> oder <code>TUTORIAL.md</code> für detaillierte Benutzeranleitungen, eine <code>CHANGELOG.md</code> für Changelog etc.). Eine gängige Struktur ist z.B.:</p>
</div></div><p>Sollte die Dokumentation umfangreicher sein, ist es sinnvoll, sie in logisch getrennte Abschnitte aufzuteilen. Dies kann innerhalb der README durch Überschriften geschehen oder durch <strong>zusätzliche <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>-Dateien</strong> im Repository (z.B. eine <code>INSTALL.md</code> für ausführliche Installationshinweise, eine <code>USAGE.md</code> oder <code>TUTORIAL.md</code> für detaillierte Benutzeranleitungen, eine <code>CHANGELOG.md</code> für Changelog etc.). Eine gängige Struktur ist z.B.:</p>
<ul>
<li><code>README.md</code> Überblick (Ziel, Installation, kurzes Beispiel, Lizenz/Zitation)</li>
<li><code>docs/</code> Verzeichnis mit weiteren .md-Dateien für tiefergehende Dokumentation (optional)</li>
@ -816,95 +923,265 @@ Nutzer*innen zu helfen, die theoretischen Grundlagen nachvollziehbar zu machen.
<li><code>LICENSE</code> Lizenztext</li>
<li><code>CITATION.cff</code> oder <code>CITATION.md</code> wie zu zitieren.</li>
</ul>
<p>Diese Dateien sollten konsistent formatiert und benannt sein, damit sie leicht auffindbar sind. Sie kommen ohne spezielle Tools aus ein einfacher Texteditor genügt zum Bearbeiten. Auch <strong>Wiki-Seiten</strong> (etwa in GitHub) können genutzt werden, sind aber weniger dauerhaft versioniert im Vergleich zu Dateien im Code-Repository selbst. Die Dokumentation sollte möglichst <em>im Repository</em> selbst liegen, um sicherzustellen, dass sie gemeinsam mit dem Code versioniert, verteilt und archiviert wird. Externe Dokumentationswebsites sind für kleine Projekte oft Overkill und können im schlimmsten Fall verwaisen.</p>
<p>Diese Dateien sollten konsistent formatiert und wie oben benannt sein, damit sie leicht auffindbar sind.</p>
</section>
<section id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen" class="level3">
<h3 class="anchored" data-anchor-id="keine-proprietären-formate-oder-abhängigkeit-von-werkzeugen">Keine proprietären Formate oder Abhängigkeit von Werkzeugen</h3>
<p>Um Hürden für die Erstellung und Nutzung der Dokumentation gering zu halten, sollte auf gängige, offene Formate gesetzt werden (Plaintext, Markdown, reStructuredText). Vermeiden Sie nach Möglichkeit Formate wie Word-Dokumente oder PDF als primäre Dokumentationsquelle solche Formate sind nicht diff-freundlich, erschweren Zusammenarbeits-Workflows und sind meist nicht Teil des Versionskontrollsystems. Ein Markdown-Dokument hingegen kann gemeinsam mit dem Code gepflegt werden, und Änderungen sind transparent nachvollziehbar. Zudem erlauben offene Formate eine leichtere <strong>Langzeitarchivierung</strong>: Gemäß Endings-Prinzip sollten Informationsressourcen in langfristig lesbaren Formaten vorliegen. Markdown/Plaintext erfüllt diese Bedingung (im Gegensatz etwa zu einer Datenbank-gestützten Wissensbasis oder einem proprietären Wiki, das in 10 Jahren evtl. nicht mehr läuft). Im Sinne der <em>Digital Longevity</em> ist eine <strong>statische HTML- oder PDF-Version</strong> der Dokumentation (automatisch generiert aus Markdown) als Teil der Release-Artefakte sinnvoll so kann z.B. in jeder veröffentlichten Version ein PDF-Handbuch beigelegt werden, das später zitiert oder referenziert werden kann. <strong>Wichtig ist aber, dass die Quelle der Wahrheit immer die im Repository gepflegte Doku bleibt.</strong></p>
</section>
<section id="übersichtlichkeit-und-navigierbarkeit" class="level3">
<section id="übersichtlichkeit-und-navigierbarkeit" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="übersichtlichkeit-und-navigierbarkeit">Übersichtlichkeit und Navigierbarkeit</h3>
<p>Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit Leser schnell die gesuchten Informationen finden. Eine <strong>logische Gliederung</strong> (wie in diesem Katalog: Einführung, Anforderungen, Installation, Nutzung, Hintergrund, etc.) hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am Anfang nützlich sein. Markdown bietet z.B. automatische Toc-Generierung auf manchen Plattformen. Achten Sie darauf, pro Abschnitt nur zusammenhängende Informationen zu behandeln (z.B. alles zu Installation an einem Ort). Wiederholungen sollten vermieden werden: lieber an einer Stelle ausführlich dokumentieren und sonst darauf verweisen, um Konsistenzprobleme zu vermeiden (<em>“Dont Repeat Yourself”</em> gilt auch für Dokumentation). Bei ähnlichen Projekten können Sie sich an bestehenden <strong>Dokumentationsvorlagen</strong> orientieren: Viele erfolgreiche Open-Source-Projekte haben auf GitHub eine ähnliche README-Struktur, die als informelles Template dienen kann.</p>
</section>
<section id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" class="level3">
<h3 class="anchored" data-anchor-id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden">Beispiele, Codeblöcke und ggf. Abbildungen einbinden</h3>
<p>Nutzen Sie die Möglichkeiten von Markdown, um die Dokumentation lebendig zu gestalten. Zeigen Sie Code-Beispiele als formatierte Codeblöcke, fügen Sie Links zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein (etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche, etc.). Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG, Diagramme wenn möglich als SVG für Langlebigkeit). Falls Diagramme der Architektur oder Workflow-Abbildungen hilfreich sind, können diese mit simplen Mitteln erstellt werden (zur Not handgezeichnet und abfotografiert, besser jedoch mit Tools wie mermaid.js Diagrammen in Markdown oder Graphviz). Diese Visualisierungen sind jedoch nur dann einzusetzen, wenn sie echten Mehrwert bieten und ohne komplexe Build-Prozesse eingebunden werden können. Im Zweifel hat textuelle Beschreibung Vorrang, um nicht vom <strong>prinzip “keep it simple”</strong> abzuweichen.</p>
</section>
<section id="fazit-format-und-struktur" class="level3">
<h3 class="anchored" data-anchor-id="fazit-format-und-struktur">Fazit Format und Struktur</h3>
<p>Insgesamt gilt: <strong>Die Dokumentation sollte im gleichen Repository leben wie der Code, klar strukturiert und in einem einfach handhabbaren Format vorliegen.</strong> Sie soll ohne spezielle Umgebung lesbar sein ein Nutzer, der das Repository klont oder herunterlädt, muss sofort Zugang zur Dokumentation haben. Dieses Prinzip entspricht auch den FAIR- und RSE-Richtlinien, die fordern, Software (und deren Doku) <em>auffindbar</em> und <em>zugänglich</em> zu machen, ohne Hürden. Eine gut gepflegte README in Markdown erfüllt diese Anforderungen in den meisten Fällen optimal.</p>
</section>
</section>
<section id="umfang-und-fokus-der-dokumentation" class="level2">
<h2 class="anchored" data-anchor-id="umfang-und-fokus-der-dokumentation">Umfang und Fokus der Dokumentation</h2>
<p>Gerade weil Forschende wenig Zeit haben, muss die Dokumentation <strong>effizient</strong> gestaltet sein sie soll alle wichtigen Informationen enthalten, aber auch nicht unnötig ausschweifen. Für typische Forschungssoftware-Projekte in den Geisteswissenschaften wird ein Umfang von <em>maximal ca. 10 Seiten</em> (bei Bedarf verteilt auf mehrere Dateien) als ausreichend erachtet. Dieser Richtwert verhindert, dass die Doku zu einer unüberschaubaren Abhandlung wird, und zwingt zur Fokussierung auf das Wesentliche. Wichtig ist der <strong>Inhalt, nicht die Länge</strong>: eine kürzere, aber inhaltsreiche Dokumentation ist besser als eine lange, die nichts aussagt.</p>
<p>Ein effizienter Umfang lässt sich erreichen, indem man sich auf die oben genannten Kernpunkte konzentriert und Ablenkendes weglässt. Dokumentieren Sie <strong>alles, was für Nachvollziehbarkeit und Wiederverwendung nötig ist, und skippen Sie alles andere</strong>. Zum Beispiel muss nicht jeder interne Programmiertrick erläutert werden Quellcode-Kommentare richten sich an Entwickler, während die Nutzerdokumentation sich auf Nutzung und Kontext beschränkt. Verzichten Sie auf seitenlange Theorieableitungen (verweisen Sie stattdessen auf Papers) und auf generische Erklärungen bekannter Technologien (man muss Git oder Python nicht in der Doku erklären, sondern kann referenzieren). Halten Sie auch die Sprache prägnant: kurze Absätze, Listen und einfache Sätze erhöhen die Lesbarkeit. Fachtermini aus dem jeweiligen wissenschaftlichen Bereich dürfen verwendet werden, aber erklären Sie sie, falls die Zielnutzer sie evtl. nicht kennen.</p>
<p><strong>Priorisierung:</strong> Beginnen Sie mit einer Minimaldokumentation, die alle Schlüsselaspekte abdeckt (<em>“keine Dokumentation”</em> ist keine Option). <em>Good Enough Practices</em> empfehlen, als ersten Schritt zumindest einen <strong>kurzen erklärenden Kommentar am Anfang jedes Scripts</strong> oder eine README mit ein paar Sätzen zu erstellen. Diese Hürde ist niedrig und bringt bereits Nutzen selbst wenn (noch) keine ausführliche Handbuch-Doku existiert. Später kann die Dokumentation erweitert werden, insbesondere wenn die Software in Kooperation entsteht oder mehr Nutzer gewinnt. Es hat sich gezeigt, dass ausführliche Dokumentation oft erst entsteht, wenn ein echter Bedarf (z.B. durch externe Nutzer) vorhanden ist. Daher: zögern Sie nicht, zunächst <em>klein</em> anzufangen, aber stellen Sie sicher, dass zumindest die kritischen Informationen sofort verfügbar sind (lieber ein 2-seitiges README heute, als das perfekte 30-seitige Handbuch in zwei Jahren, das evtl. nie geschrieben wird).</p>
<p>Die Obergrenze von ~10 Seiten ist ein Richtwert. Umfangreiche Projekte könnten etwas mehr benötigen, sehr kleine Tools kommen mit einer Seite aus. Das Ziel ist, dass ein interessierter Nutzer die Dokumentation in überschaubarer Zeit durchsehen kann. Ein guter Test ist: <strong>Kann eine neue Person in &lt; 1 Stunde mit Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel ausführen?</strong> Wenn ja, ist der Detailgrad angemessen. Wenn die Person hingegen nach 10 Seiten immer noch nicht weiß, wie sie loslegen soll, muss die Doku fokussierter werden. Fügen Sie zur Not eine kurze <em>Übersicht/Zusammenfassung</em> am Anfang ein, die das Wichtigste in Kürze nennt viele Leser entscheiden in wenigen Minuten, ob sie eine Software weiter betrachten oder nicht, und hier zählt der erste Eindruck.</p>
<p>Ein weiterer Tipp zur Effizienz: Nutzen Sie <strong>Verweise und vorhandene Ressourcen</strong>. Wenn z.B. Ihr Tool auf einem komplizierten Setup (Datenbank, Webserver) aufbaut, brauchen Sie nicht jede Installationsoption im Detail in Ihrer Doku zu reproduzieren verlinken Sie auf offizielle Installationsanleitungen dieser Abhängigkeiten, und nennen Sie nur Ihre spezifischen Konfigurationen. Ebenso können Tutorials oder Papers, die schon existieren, als weiterführende Links angegeben werden, anstatt Inhalte redundant zu erklären. Das entlastet Ihre Dokumentation und hält sie schlank.</p>
<p>Zum Fokus gehört auch, zwischen <strong>Nutzerdokumentation und Entwicklerdokumentation</strong> zu unterscheiden. Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für die Autoren selbst, wenn sie das Tool später wieder anfassen). Entwicklerdokumentation (z.B. detaillierte API-Dokumente, Code-Kommentare, technische Architektur) kann separat gehalten werden, sofern nötig, um den Hauptnutzerfluss nicht zu überfrachten. Für viele kleine Forschungssoftware-Projekte sind ausführliche Entwicklerdokus nicht nötig hier reicht es, den Code gut zu kommentieren und eventuell eine grobe Architekturübersicht bereitzustellen. Konzentrieren Sie die Hauptdokumentation darauf, <strong>das Nutzen und Verstehen der Software von außen</strong> zu ermöglichen.</p>
<p>Abschließend sei betont: Ein kompakter, zielgerichteter Dokumentsatz, der genau die relevanten Infos liefert, erhöht die Wahrscheinlichkeit, dass er <strong>aktualisiert und genutzt</strong> wird. Umfangmonster schrecken ab und veralten schneller. Halten Sie die Dokumentation deshalb so <strong>knapp wie möglich, aber so ausführlich wie nötig</strong> ganz im Sinne von Einsteins Prinzip, Dinge so einfach wie möglich zu machen, aber nicht einfacher.</p>
</section>
<section id="teil-automatisierte-dokumentationswerkzeuge" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="teil-automatisierte-dokumentationswerkzeuge">(Teil-)automatisierte Dokumentationswerkzeuge</h2>
<p>Die Dokumentationslast lässt sich durch den Einsatz geeigneter Werkzeuge erheblich senken. Gerade Forschende, die alleine programmieren, können von <strong>(teil-)automatisierter Dokumentation</strong> profitieren, um konsistente und aktuelle Unterlagen zu erhalten, ohne alles von Hand schreiben zu müssen. Im Folgenden werden einige Tools und Möglichkeiten vorgestellt samt Empfehlungen, <em>wann</em> ihr Einsatz sinnvoll oder notwendig ist:</p>
<section id="docstrings-und-api-dokumentationsgeneratoren" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</h3>
<p>Nutzen Sie die Möglichkeit, Dokumentation <em>direkt im Quellcode</em> unterzubringen, z.B. in Form von <strong>Docstrings</strong> (mehrzeilige Strings in Funktionen/Klassen bei Python, Roxygen-Kommentare in R, Javadoc-Kommentare in Java, etc.). Diese dienen doppelt: Zum einen erleichtern sie es Ihnen und Kollegen, den Code beim Lesen zu verstehen, zum anderen können sie von Tools ausgelesen und zu hübschen API-Dokumentationen verarbeitet werden. Idealerweise dokumentieren Sie <em>jede wichtige Funktion, Klasse oder Modul</em> mit einem kurzen Docstring, der Zweck, Parameter, Rückgaben und ggf. Beispiele enthält. Für kleine Scripte genügen ggf. Modul- oder Abschnittskommentare. Wichtig ist Konsistenz im Stil halten Sie sich an Konventionen Ihres Ökosystems (z.B. <strong>Google Style Guide</strong> für Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen). Mit Tools wie <strong>Sphinx</strong> (für Python, aber grundsätzlich sprachunabhängig) können aus Docstrings automatisiert Webseiten oder PDF-Handbücher generiert werden. Sphinx liest z.B. die Python-Docstrings und erzeugt daraus strukturiert eine Dokumentation; Erweiterungen wie <em>napoleon</em> erlauben es, Google- oder Numpy-Style-Dokumentation direkt zu verarbeiten.</p>
<div class="no-row-height column-margin column-container"><div class="">
<p>Ähnliche Generatoren gibt es für nahezu alle Sprachen: <strong>Javadoc</strong> für Java, <strong>Doxygen</strong> für C/C++ (und viele andere Sprachen), <strong>MkDocs</strong> oder <em>pdoc</em> für Python, etc.</p>
</div></div><p>Der Einsatz solcher Tools ist besonders dann sinnvoll, wenn Ihre Forschungssoftware über eine <em>Programmierschnittstelle (API)</em> verfügt, die von anderen genutzt werden soll, oder wenn das Projekt größer wird und die interne Struktur komplexer ist. In solchen Fällen kann eine <em>API-Referenz</em> (automatisch aus dem Code erzeugt) eine erhebliche Hilfe sein. <strong>Verpflichtend</strong> wird dieser Ansatz etwa, wenn Sie ein Bibliothekspaket veröffentlichen (z.B. ein R-Package in CRAN oder Python-Package auf PyPI) dort sind Docstrings und generierte Dokumentation quasi Standard. Für ein einmaliges Analyse-Skript in den Digital Humanities ist eine voll ausgebaute API-Doku vielleicht nicht nötig; hier reicht möglicherweise ein inline kommentierter Code. Doch sobald Funktionen von anderen aufgerufen oder das Projekt von mehreren entwickelt wird, sollte ein Dokumentationstool in Betracht gezogen werden, um den Aufwand gering zu halten und Einheitlichkeit zu gewährleisten.</p>
</section>
<section id="jupyter-notebooks-und-literate-programming" class="level3">
<h3 class="anchored" data-anchor-id="jupyter-notebooks-und-literate-programming">Jupyter Notebooks und literate programming</h3>
<p>Ein mächtiges Werkzeug gerade in datengetriebenen Geisteswissenschaften sind <strong>Jupyter Notebooks</strong> bzw. R Markdown Notebooks <span class="citation" data-cites="maria2019jupyter">(<a href="#ref-maria2019jupyter" role="doc-biblioref">Kluyver u.&nbsp;a. 2016</a>)</span>. Diese erlauben es, <em>ausführbaren Code mit erklärendem Text und Visualisierungen</em> in einem Dokument zu vereinen. Für Dokumentationszwecke können Notebooks zweierlei leisten: (1) als <strong>Tutorials/Beispiel-Workflows</strong>, die Nutzer interaktiv nachvollziehen können, und (2) als <strong>Reproduzierbarkeits-Dokumentation</strong> für analytische Prozesse. Wenn Ihre Forschungssoftware z.B. eine Bibliothek ist, könnten Sie ein Notebook bereitstellen, das einen typischen Anwendungsfall durchspielt (inklusive Daten-Loading, Aufruf der Funktionen, Darstellung der Ergebnisse).</p>
<p>Notebooks senken die Hürde, weil Nutzer direkt experimentieren können, und fördern transparente Forschung, da Code, Ergebnisse und Beschreibung zusammenfließen. Sie sind daher sinnvoll, <strong>wenn der Hauptanwendungsfall die Durchführung von Analysen oder Datenverarbeitungen ist</strong>, die man Schritt für Schritt demonstrieren kann.</p>
<div class="callout callout-style-default callout-warning callout-titled">
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Warnung
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Notebooks erfordern allerdings eine lauffähige Umgebung das heißt, Sie müssen darauf achten, dass alle Abhängigkeiten im Notebook deklariert sind und die Daten zugänglich sind. Es hat sich gezeigt, dass Notebooks aus Publikationen oft nicht ohne Weiteres laufen, weil Pfade, Datenquellen oder spezielle Umgebungen fehlen. Deshalb: Wenn Sie Notebooks als Doku nutzen, stellen Sie sicher, dass sie <em>leicht ausführbar</em> sind (z.B. durch Bereitstellen von Umgebungsdateien wie <code>environment.yml</code> oder Dockerfiles, kleinen Beispieldatensätzen und klaren Anweisungen im Notebook). Ggf. kann man Notebooks auch in reine Markdown/HTML exportieren und dem Repo beilegen, damit zumindest statisch die Inhalte einsehbar sind.</p>
<p><em>“Dont Repeat Yourself”</em>: Alle Informationen zu einem Thema (Installation/Nutzung/…) an derselben Stelle sammeln und keinesfalls mehrfach pflegen.</p>
</div>
</div></div><p>Strukturieren Sie die Dokumentation mit klaren Überschriften und Listen, damit Leser schnell die gesuchten Informationen finden. Eine <strong>logische Gliederung</strong> hilft unterschiedlichen Nutzergruppen gezielt das Relevante zu finden. Für längere Dokumente kann ein Inhaltsverzeichnis oder eine Abschnittsübersicht am Anfang nützlich sein. <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> bietet z.B. automatische TOC-Generierung auf manchen Plattformen.</p>
<p>Achten Sie darauf, pro Abschnitt nur zusammenhängende Informationen zu behandeln (z.B. alles zu Installation an einem Ort) und Wiederholungen zu vermeiden. Das Mantra <em>“Dont Repeat Yourself”</em> gilt auch für Dokumentation.</p>
</section>
<section id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="beispiele-codeblöcke-und-ggf.-abbildungen-einbinden">Beispiele, Codeblöcke und ggf. Abbildungen einbinden</h3>
<p>Nutzen Sie die Möglichkeiten von <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>, um die Dokumentation lebendig zu gestalten. Zeigen Sie Code-Beispiele als formatierte Codeblöcke, fügen Sie Links zu weiterführenden Ressourcen ein, oder binden Sie bei Bedarf Abbildungen ein (etwa ein Diagramm der Datenpipeline, ein Screenshot der Benutzeroberfläche, etc.).</p>
<p>Achten Sie dabei auf Dateigrößen und Formate (Bilder als PNG/JPG, Diagramme wenn möglich als SVG für Langlebigkeit). Falls Diagramme der Architektur oder Workflow-Abbildungen hilfreich sind, können diese mit simplen Mitteln erstellt werden<a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>.</p>
<div class="no-row-height column-margin column-container"><div id="fn3"><p><sup>3</sup>&nbsp;zur Not handgezeichnet und abfotografiert, besser jedoch mit Tools wie <a href="https://mermaid.js.org/" title="Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML, …) in Bilder gewandelt werden">mermaid.js</a> Diagrammen in <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> oder <a href="https://graphviz.org/" title="Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg">graphviz</a></p></div></div><p>Diese Visualisierungen sind jedoch nur dann einzusetzen, wenn sie echten Mehrwert bieten und ohne komplexe Build-Prozesse eingebunden werden können. Im Zweifel hat textuelle Beschreibung Vorrang, um nicht vom <strong>Prinzip “keep it simple”</strong> abzuweichen.</p>
</section>
<section id="fazit-format-und-struktur" class="level3">
<h3 class="anchored" data-anchor-id="fazit-format-und-struktur">Fazit Format und Struktur</h3>
<p>Insgesamt gilt: Die Dokumentation sollte</p>
<ul>
<li>im gleichen Repository leben wie der Code</li>
<li>klar strukturiert und in einem einfach handhabbaren Format vorliegen</li>
<li>ohne spezielle Umgebung lesbar sein</li>
</ul>
<p>Dieses Prinzip entspricht auch den FAIR- und RSE-Richtlinien, die fordern, Software (und deren Doku) <em>auffindbar</em> und <em>zugänglich</em> zu machen, ohne Hürden. Eine <strong>gut gepflegte</strong> README in <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a> erfüllt diese Anforderungen in den meisten Fällen optimal.</p>
</section>
</section>
<section id="die-dokumentation-selbst" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="die-dokumentation-selbst">Die Dokumentation selbst</h2>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<p><strong>Wann sind Notebooks verpflichtend?</strong> Nie im strengen Sinne, aber sie sind quasi Goldstandard, um wissenschaftliche Analysen nachvollziehbar zu machen. In Projekten, wo es um Data Science Workflows oder interaktive Exploration geht, sollten Notebooks stark erwogen werden, während für ein reines Tool/Script eine gut geschriebene README mit Beispielausgabe ausreichend sein kann.</p>
<div class="callout-body-container callout-body">
<p>Kann eine neue Person in &lt; 1 Stunde mit Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel ausführen?</p>
</div>
</div></div><p>Gerade weil Forschende wenig Zeit haben, muss die Dokumentation <strong>effizient</strong> gestaltet sein sie soll alle wichtigen Informationen enthalten, aber auch nicht unnötig ausschweifen. Für typische Forschungssoftware-Projekte in den Geisteswissenschaften wird ein Umfang von <em>maximal ca. 10 Seiten</em> (bei Bedarf verteilt auf mehrere Dateien) als ausreichend erachtet. Dieser Richtwert verhindert, dass die Doku zu einer unüberschaubaren Abhandlung wird, und zwingt zur Fokussierung auf das Wesentliche. Wichtig ist der <strong>Inhalt, nicht die Länge</strong>: eine kürzere, aber inhaltsreiche Dokumentation ist besser als eine lange, die nichts aussagt.</p>
<section id="umfang-und-fokus-der-dokumentation" class="level3">
<h3 class="anchored" data-anchor-id="umfang-und-fokus-der-dokumentation">Umfang und Fokus der Dokumentation</h3>
<p>Ein effizienter Umfang lässt sich erreichen, indem sie <strong>alles, was für Nachvollziehbarkeit und Wiederverwendung nötig ist dokumentieren, und alles andere skippen</strong>.</p>
<div class="bad-practice">
<p>Negativbeispiele umfassen:</p>
<ul>
<li>jeder interne Programmiertrick wird erläutert Quellcode-Kommentare richten sich an Entwickler*innen, während die Nutzendendokumentation sich auf Nutzung und Kontext beschränkt</li>
<li>seitenlange Theorieabhandlungen (verweisen Sie stattdessen auf Papers)</li>
<li>generische Erklärungen bekannter Technologien (man muss Git oder Python nicht in der Doku erklären, sondern kann referenzieren)</li>
</ul>
</div>
<p>Halten Sie auch die Sprache prägnant:</p>
<ul>
<li>kurze Absätze</li>
<li>Listen</li>
<li>und einfache Sätze</li>
</ul>
<p>erhöhen die Lesbarkeit.</p>
<p>Fachtermini aus dem jeweiligen wissenschaftlichen Bereich dürfen verwendet werden, aber erklären/verlinken Sie sie, falls die Zielnutzer sie evtl. nicht kennen.</p>
<p>Die Obergrenze von ~10 Seiten ist ein Richtwert. Umfangreiche Projekte könnten etwas mehr benötigen, sehr kleine Tools kommen mit einer Seite aus. Das Ziel ist, dass ein interessierter Nutzer die Dokumentation in überschaubarer Zeit durchsehen kann.</p>
<p>Ein guter Test ist: <strong>Kann eine neue Person in &lt; 1 Stunde mit Hilfe der Doku das Tool zum Laufen bringen und ein einfaches Beispiel ausführen?</strong></p>
<ul>
<li>Wenn ja, ist der Detailgrad angemessen</li>
<li>Wenn die Person hingegen nach 10 Seiten oder mehr als 1 Stunde immer noch nicht weiß, wie sie loslegen soll, muss die Doku fokussierter werden.</li>
</ul>
<p>Fügen Sie zur Not eine kurze <em>Übersicht/Zusammenfassung</em> am Anfang ein, die das Wichtigste in Kürze nennt viele Leser entscheiden in wenigen Minuten, ob sie eine Software weiter betrachten oder nicht, und hier zählt der erste Eindruck.</p>
</section>
<section id="priorisierung-bei-zeitmangel" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="priorisierung-bei-zeitmangel">Priorisierung bei Zeitmangel</h3>
<p>Dieser Katalog adressiert primär die Nutzerdokumentation (für Endnutzer und für die Autoren selbst, wenn sie das Tool später wieder anfassen). Entwickler*innendokumentation (z.B. detaillierte API-Dokumente, Code-Kommentare, technische Architektur) kann separat gehalten werden, sofern nötig, um den Hauptnutzerfluss nicht zu überfrachten.</p>
<section id="minimaldokumentation-kurze-kommentare" class="level4">
<h4 class="anchored" data-anchor-id="minimaldokumentation-kurze-kommentare">Minimaldokumentation: kurze Kommentare</h4>
<p>Beginnen Sie mit einer Minimaldokumentation, die alle Schlüsselaspekte abdeckt (<em>“keine Dokumentation”</em> ist keine Option). <em>Good Enough Practices</em><span class="citation" data-cites="WilsonEtAl2017Goodenoughpractices">[<a href="#ref-WilsonEtAl2017Goodenoughpractices" role="doc-biblioref">3</a>]</span> empfehlen, als ersten Schritt zumindest einen <strong>kurzen erklärenden Kommentar am Anfang jedes Scripts</strong> oder eine README mit ein paar Sätzen zu erstellen. Diese Hürde ist niedrig und bringt bereits Nutzen selbst wenn (noch) keine ausführliche Handbuch-Doku existiert. Später kann die Dokumentation erweitert werden, insbesondere wenn die Software in Kooperation entsteht oder mehr Nutzer gewinnt. Es hat sich gezeigt, dass ausführliche Dokumentation oft erst entsteht, wenn ein echter Bedarf (z.B. durch externe Nutzer) vorhanden ist. Daher: zögern Sie nicht, zunächst <em>klein</em> anzufangen, aber stellen Sie sicher, dass zumindest die kritischen Informationen sofort verfügbar sind (lieber ein 2-seitiges README heute, als das perfekte 30-seitige Handbuch in zwei Jahren, das evtl. nie geschrieben wird).</p>
</section>
<section id="verlinkte-dokumentation-ist-auch-dokumentation" class="level4">
<h4 class="anchored" data-anchor-id="verlinkte-dokumentation-ist-auch-dokumentation">Verlinkte Dokumentation ist auch Dokumentation</h4>
<p>Nutzen Sie <strong>Verweise und vorhandene Ressourcen</strong>. Wenn z.B. Ihr Tool auf einem komplizierten Setup (Datenbank, Webserver) aufbaut, brauchen Sie nicht jede Installationsoption im Detail in Ihrer Doku zu reproduzieren verlinken Sie auf offizielle Installationsanleitungen dieser Abhängigkeiten, und nennen Sie nur Ihre spezifischen Konfigurationen und verlinken sie auf die Dokumentation des Setup-Elementes für alles weitere. Ebenso können Tutorials oder Papers, die schon existieren, als weiterführende Links angegeben werden, anstatt Inhalte redundant zu erklären. Das entlastet Ihre Dokumentation und hält sie schlank.</p>
</section>
<section id="fokus-auf-nutzerinnen---nicht-entwicklerinnen" class="level4">
<h4 class="anchored" data-anchor-id="fokus-auf-nutzerinnen---nicht-entwicklerinnen">Fokus auf Nutzer*innen - nicht Entwickler*innen</h4>
<p>Stellen Sie sich beim Schreiben der Doku die verschiedenen <em>Nutzerrollen</em> vor: <strong>“Zukünftiges Ich”</strong>, <strong>Kolleg*innen</strong>, <strong>Fachforscher*innen anderer Disziplin</strong> und ggf. <strong>Software-Entwickler*innen, die den Code erweitern</strong>. Jede dieser Gruppen möchte bestimmte Dinge wissen.</p>
<p><em>Forschende</em> fragen:</p>
<ul>
<li>Was kann das Tool?</li>
<li>Wie benutze ich es?</li>
<li>In welchem Kontext steht es?</li>
</ul>
<p><em>Entwicklende Personen</em> fragen:</p>
<ul>
<li>Wie kann ich beitragen?</li>
<li>Wie funktioniert es unter der Haube?</li>
</ul>
<p>Priorisieren Sie zunächst die erstgenannten (Anwender) deshalb Fokus auf Zweck, Nutzung und Ergebnisse in der Hauptdoku. Detailinfos für Entwickler*innen (z.B. Code-Struktur, To-do-Liste) können separat oder später ergänzt werden. Für viele kleine Forschungssoftware-Projekte sind ausführliche Entwickler*innendokumentationen ohnehin nicht nötig hier reicht es, den Code gut zu kommentieren und eventuell eine grobe Architekturübersicht bereitzustellen. Konzentrieren Sie die Hauptdokumentation darauf, <strong>das Nutzen und Verstehen der Software von außen</strong> zu ermöglichen.</p>
</section>
<section id="und-anschließend" class="level4 page-columns page-full">
<h4 class="anchored" data-anchor-id="und-anschließend">Und anschließend?</h4>
<p>Wenn der Zeitmangel vorüber ist<a href="#fn4" class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a>, sollte man nach und nach das folgende Kapitel umsetzen.</p>
<div class="no-row-height column-margin column-container"><div id="fn4"><p><sup>4</sup>&nbsp;als ob DAS je der Fall wäre -.-</p></div></div></section>
</section>
</section>
<section id="was-macht-eine-gute-dokumentation-aus" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="was-macht-eine-gute-dokumentation-aus">Was macht eine gute Dokumentation aus</h2>
<section id="nutzungshilfen-außerhalb-der-dokumentation" class="level3">
<h3 class="anchored" data-anchor-id="nutzungshilfen-außerhalb-der-dokumentation">Nutzungshilfen außerhalb der Dokumentation</h3>
<p>Falls Ihre Software ein <strong>Command-Line Interface (CLI)</strong> hat, stellen Sie sicher, dass eine eingebaute Hilfe vorhanden ist (z.B. Ausgabe bei <code>--help</code>). Viele Nutzer greifen zunächst darauf zurück. Dieses Hilfemenü sollte kurz erläutern, welche Subkommandos oder Optionen existieren. Moderne CLI-Frameworks generieren solche Hilfen oft automatisch aus Ihrem Code (z.B. <a href="https://docs.python.org/3/library/argparse.html" title="Der Argument-Parser der Python-Standardbibliothek">argparse</a> in Python erzeugen <code>--help</code>-Texte). Nutzen Sie das, um konsistente Infos zu garantieren.</p>
<p>Für <strong>GUI-Anwendungen</strong> sollten Tooltips, Hilfetexte in der Oberfläche oder zumindest ein kleiner <em>Help</em>-Abschnitt im Handbuch vorhanden sein. Diese eingebetteten Hilfen ersetzen keine ausführliche Dokumentation, aber sie senken die Schwelle für alltägliche Fragen.</p>
</section>
<section id="prinzipien-fair-und-endings" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="prinzipien-fair-und-endings">Prinzipien: FAIR und ENDINGS</h3>
<p>Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des <strong>Research Software Engineering</strong><span class="citation" data-cites="Hasselbring2020OpenSourceResearch">[<a href="#ref-Hasselbring2020OpenSourceResearch" role="doc-biblioref">5</a>]</span> und den <strong>ENDINGS-Prinzipien</strong><span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span> steht.</p>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-note callout-titled" title="ENDINGS-Prinzipien">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
ENDINGS-Prinzipien
</div>
</div>
<div class="callout-body-container callout-body">
<p>Die ENDINGS-Prinzipien für digitale Projekte betonen insbesondere die Bedeutung von Dokumentation für Datenstrukturen, offenen Lizenzen, statischen Outputs und Zitierbarkeit. Unsere Empfehlungen, etwa ein statisches Markdown-README beizulegen, die Datenmodell-Doku nicht auszulagern oder Zitationsangaben zu machen, setzen genau diese Vorgaben um.</p>
</div>
</div></div><p>Gute Dokumentation bedeutet daher u.a. die Verdeutlichung und Sicherstellung von</p>
<ul>
<li>Reproduzierbarkeit (Installation, Daten, Beispiele),</li>
<li>Offenheit (Lizenz, offene Formate) und</li>
<li>Nachhaltigkeit (Versionierung, Langlebigkeit der Doku).</li>
</ul>
<p>Indem Sie also diesem Anforderungskatalog folgen, berücksichtigen Sie automatisch wichtige anerkannte Prinzipien für gute wissenschaftliche Softwarepraxis.</p>
</section>
<section id="kontinuierliche-verbesserung-und-feedback" class="level3">
<h3 class="anchored" data-anchor-id="kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</h3>
<p>Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess. Best Practice sind daher insbesondere:<span class="citation" data-cites="citation-needed">[<a href="#ref-citation-needed" role="doc-biblioref"><strong>citation-needed?</strong></a>]</span></p>
<ul>
<li>früh Feedback von Testnutzer*innen oder Kolleg*innen einzuholen: Lassen Sie jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen sich Lücken erst im Praxistest (“Ich wusste nicht, was ich nach Schritt X tun soll” etc.).</li>
<li>Planen Sie Zeiten ein, die Dokumentation nachzuführen, insbesondere wenn sich die Software ändert. Ein lebendiges Projekt wird vielleicht Release für Release die Dokumentation erweitern (evtl. neue Tutorials, neue Module dokumentieren). Spätestens zum Release-Zeitpunkt sollten diese auffallen und ggf. als Issues adressiert werden.</li>
<li>Nutzen Sie auch <em>Issues</em> für Dokumentation: Wenn Nutzer Fragen stellen, überlegen Sie, ob die Antwort in die offizielle Doku übernommen werden sollte. So wächst die Dokumentation organisch entlang der tatsächlichen Bedürfnisse.</li>
</ul>
</section>
<section id="positiv--und-negativbeispiele-studieren" class="level3">
<h3 class="anchored" data-anchor-id="positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</h3>
<p>Schlussendlich ist ein guter Weg, die eigene Dokumentation zu verbessern, ist ein Blick auf Projekte mit exzellenter Doku. In der <em><a href="https://joss.theoj.org/" title="The Journal of Open Source Software">Journal of Open Source Software (JOSS)</a></em> oder <a href="https://openresearchsoftware.metajnl.com/" title="The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential."><em>Journal of Open Research Software (JORS)</em></a> werden oft Softwareartikel veröffentlicht, bei denen die zugehörigen Repositorien vorbildliche READMEs und Wikis haben. Diese können als Vorlage dienen.</p>
<p>Achten Sie darauf, wie diese Projekte ihre README strukturieren, welche Abschnitte vorhanden sind und welche nicht. Viele erfolgreiche Projekte haben z.B. eine ähnliche Reihenfolge: Introduction, Installation, Usage, Contributing, License, Citation ein Muster, das sich bewährt hat.</p>
<p>Ebenso gibt es von Initiativen wie der Software Sustainability Institute Blogposts mit Best Practices und sogar Vorlagen (Templates) für Dokumentation.</p>
<p>Nutzen Sie solche Ressourcen; sie ersparen einem das Rad neu zu erfinden. Allerdings: Adaptieren Sie sie auf Ihre Bedürfnisse nicht jede Vorlage passt 1:1.</p>
</section>
</section>
<section id="teil-automatisierte-dokumentationswerkzeuge" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="teil-automatisierte-dokumentationswerkzeuge">(Teil-)automatisierte Dokumentationswerkzeuge</h2>
<p>Die Dokumentationslast lässt sich durch den Einsatz geeigneter Werkzeuge erheblich senken. Gerade Forschende, die alleine programmieren, können von <strong>(teil-)automatisierter Dokumentation</strong> profitieren, um konsistente und aktuelle Unterlagen zu erhalten, ohne alles von Hand schreiben zu müssen. Im Folgenden werden einige Tools und Möglichkeiten vorgestellt samt Empfehlungen, <em>wann</em> ihr Einsatz sinnvoll oder notwendig ist:</p>
<section id="jupyter-notebooks-und-literate-programming" class="level3">
<h3 class="anchored" data-anchor-id="jupyter-notebooks-und-literate-programming">Jupyter Notebooks und literate programming</h3>
<p>Ein mächtiges Werkzeug gerade in datengetriebenen Geisteswissenschaften sind <strong>Jupyter Notebooks</strong> bzw. <strong>R Markdown Notebooks</strong> <span class="citation" data-cites="KluyverEtAl2016JupyterNotebookspublishing">[<a href="#ref-KluyverEtAl2016JupyterNotebookspublishing" role="doc-biblioref">6</a>]</span>. Diese erlauben es, <em>ausführbaren Code mit erklärendem Text und Visualisierungen</em> in einem Dokument zu vereinen. Für Dokumentationszwecke können Notebooks zweierlei leisten:</p>
<ol type="1">
<li>als <strong>Tutorials/Beispiel-Workflows</strong>, die Nutzer interaktiv nachvollziehen können, und</li>
<li>als <strong>Reproduzierbarkeits-Dokumentation</strong> für analytische Prozesse.</li>
</ol>
<p>Wenn Ihre Forschungssoftware z.B. eine Bibliothek ist, könnten Sie ein Notebook bereitstellen, das einen typischen Anwendungsfall durchspielt (inklusive Daten-Loading, Aufruf der Funktionen, Darstellung der Ergebnisse).</p>
<p>Notebooks senken die Hürde, weil Nutzer direkt experimentieren können, und fördern transparente Forschung, da Code, Ergebnisse und Beschreibung zusammenfließen. Sie sind daher sinnvoll, <strong>wenn der Hauptanwendungsfall die Durchführung von Analysen oder Datenverarbeitungen ist</strong>, die man Schritt für Schritt demonstrieren kann.</p>
<div class="callout callout-style-default callout-warning callout-titled" title="Vorsicht bei Python-Notebooks">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Vorsicht bei Python-Notebooks
</div>
</div>
<div class="callout-body-container callout-body">
<p>Notebooks erfordern eine lauffähige Umgebung das heißt, Sie müssen darauf achten, dass alle Abhängigkeiten im Notebook deklariert sind oder ggf. nachinstalliert werden und die Daten zugänglich sind.</p>
<p>Es hat sich gezeigt, dass Notebooks aus Publikationen oft nicht ohne Weiteres laufen, weil Pfade, Datenquellen oder spezielle Umgebungen fehlen.</p>
<p>Deshalb: Wenn Sie Notebooks als Doku nutzen, stellen Sie sicher, dass sie <em>leicht ausführbar</em> sind (z.B. durch Bereitstellen von Umgebungsdateien wie <code>environment.yml</code> oder Dockerfiles, kleinen Beispieldatensätzen und klaren Anweisungen im Notebook). Ggf. kann man zusätzlich auch reine Markdown/HTML-Exporte von evaluierten Notebooks exportieren und dem Repo beilegen, damit zumindest statisch die Inhalte einsehbar sind.</p>
</div>
</div>
<section id="wann-sollten-sie-notebooks-nutzen" class="level4">
<h4 class="anchored" data-anchor-id="wann-sollten-sie-notebooks-nutzen">Wann sollten Sie Notebooks nutzen?</h4>
<p>Notebooks sind quasi Goldstandard, um wissenschaftliche Analysen nachvollziehbar zu machen. In Projekten, wo es um Data Science Workflows oder interaktive Exploration geht, sollten Notebooks stark erwogen werden, während für ein reines Tool/Script eine gut geschriebene README mit Beispielausgabe ausreichend sein kann.</p>
</section>
</section>
<section id="sphinxmkdocsdoxygen-statische-dokumentationswebseiten" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="sphinxmkdocsdoxygen-statische-dokumentationswebseiten">Sphinx/MkDocs/Doxygen (statische Dokumentationswebseiten)</h3>
<div class="page-columns page-full"><p>Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll sein, eine <strong>Dokumentationswebsite</strong> zu generieren. Tools wie <em>Sphinx</em> (zusammen mit ReadTheDocs für Hosting) oder <em>MkDocs</em> erlauben es, aus Markdown/reStructuredText-Dateien einen ansprechend formatierten HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare, verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit <em>Continuous Integration</em> lassen sich diese Seiten bei jedem Git-Push automatisch aktualisieren. Für die Nachhaltigkeit (ENDINGS-Prinzip) ist wichtig, dass diese Webseiten statisch sind d.h. sie funktionieren ohne Server-Backends und bleiben auch offline nutzbar. Sphinx erfüllt dies, indem es reine HTML-Seiten erzeugt. Solche Tools sind <strong>sinnvoll, wenn die Dokumentation sehr groß oder öffentlich weit verbreitet</strong> ist z.B. wenn Ihre Software von vielen genutzt wird und Sie ein professionelles Auftreten wünschen, oder wenn Sie die Doku als PDF veröffentlichen möchten. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">In kleinen DH-Projekten ist es oft nicht nötig, extra eine Webseite zu hosten; dennoch kann Sphinx auch lokal HTML/PDF erzeugen, was man dem Repo beilegen kann.</span></div></div>
<p><strong>Verpflichtend</strong> ist so ein Tool selten, höchstens wenn Förderprogramme oder Journals ein dokumentationsseitiges HTML-Manual verlangen. Wenn Sie jedoch planen, Ihre Software z.B. über Jahre zu pflegen und ggf. einem Journal wie JOSS vorzustellen, dann erwartet die Community meist, dass zumindest eine Sphinx/Doxygen-Doku für die API existiert. Als Daumenregel: ab einer Codebasis &gt; einige tausend Zeilen oder &gt; 5 Module lohnt es sich, eine generierte Dokumentation bereitzustellen, um den Überblick zu behalten.</p>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Ab einer Codebasis <code>&gt; einige tausend Zeilen</code> oder <code>&gt;5 nontriviale Module</code> sollte eine generierte Dokumentation bereitstehen.</p>
</div>
</div></div><p>Für umfangreichere Projekte oder solche mit eigener Website kann es sinnvoll sein, eine <strong>Dokumentationswebsite</strong> zu generieren. Tools wie <em><a href="https://www.sphinx-doc.org" title="Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.">Sphinx</a></em> (zusammen mit ReadTheDocs für Hosting) oder <em><a href="https://www.mkdocs.org/" title="Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown">MkDocs</a></em> erlauben es, aus <a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>/<a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">reStructuredText</a>-Dateien einen ansprechend formatierten HTML-Dokumentationssatz zu bauen. Der Vorteil ist, dass man eine durchsuchbare, verlinkte Doku bekommt, oft mit schönem Layout und zusätzlicher Navigation. Mit <em>Continuous Integration</em> lassen sich diese Seiten bei jedem Git-Push automatisch aktualisieren.</p>
<p>Für die Nachhaltigkeit ist wichtig, dass diese Webseiten statisch sind<span class="citation" data-cites="EndingsPrinciples221">[<a href="#ref-EndingsPrinciples221" role="doc-biblioref">1</a>]</span> d.h. sie funktionieren ohne Server-Backends und bleiben auch offline nutzbar.</p>
<div class="page-columns page-full"><p>Solche Tools sind <strong>sinnvoll, wenn die Dokumentation sehr groß oder öffentlich weit verbreitet</strong> ist z.B. wenn Ihre Software von vielen genutzt wird und Sie ein professionelles Auftreten wünschen, oder wenn Sie die Doku als PDF veröffentlichen möchten. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">In kleinen DH-Projekten ist es oft nicht nötig, extra eine Webseite zu hosten; dennoch kann Sphinx auch lokal HTML/PDF erzeugen, was man dem Repo beilegen kann.</span></div></div>
<section id="wann-sollten-sie-eine-statische-website-generieren" class="level4">
<h4 class="anchored" data-anchor-id="wann-sollten-sie-eine-statische-website-generieren">Wann sollten Sie eine statische Website generieren?</h4>
<p><strong>Verpflichtend</strong> ist so ein Tool selten, höchstens wenn Förderprogramme oder Journals ein dokumentationsseitiges HTML-Manual verlangen. Wenn Sie jedoch planen, Ihre Software z.B. über Jahre zu pflegen und ggf. einem Journal wie JOSS vorzustellen, dann erwartet die Community meist, dass zumindest eine Sphinx/Doxygen-Doku für die API (s.u.) existiert.</p>
</section>
<section id="in-code-hilfefunktionen-und-cl-interface-doku" class="level3">
<h3 class="anchored" data-anchor-id="in-code-hilfefunktionen-und-cl-interface-doku">In-Code Hilfefunktionen und CL-Interface Doku</h3>
<p>Falls Ihre Software ein <strong>Command-Line Interface (CLI)</strong> hat, stellen Sie sicher, dass eine eingebaute Hilfe vorhanden ist (z.B. Ausgabe bei <code>--help</code>). Viele Nutzer greifen zunächst darauf zurück. Dieses Hilfemenü sollte kurz erläutern, welche Subkommandos oder Optionen existieren. Moderne CLI-Frameworks generieren solche Hilfen oft automatisch aus Ihrem Code (z.B. Click oder argparse in Python erzeugen <code>--help</code>-Texte). Nutzen Sie das, um konsistente Infos zu garantieren.</p>
<p>Für <strong>GUI-Anwendungen</strong> sollten Tooltips, Hilfetexte in der Oberfläche oder zumindest ein kleiner <em>Help</em>-Abschnitt im Handbuch vorhanden sein. Diese eingebetteten Hilfen ersetzen keine ausführliche Dokumentation, aber sie senken die Schwelle für alltägliche Fragen.</p>
</section>
<section id="docstrings-und-api-dokumentationsgeneratoren" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="docstrings-und-api-dokumentationsgeneratoren">Docstrings und API-Dokumentationsgeneratoren</h3>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Benutzt jemand die Software nur, braucht es keine API-Dokumentationen; wird die Software aber woanders eingebunden, ist dieses notwendig.</p>
</div>
</div><div id="fn5"><p><sup>5</sup>&nbsp;kurz für: “Documentation String”</p></div></div><p>Nutzen Sie die Möglichkeit, Dokumentation <em>direkt im Quellcode</em> unterzubringen, z.B. in Form von <strong>Docstrings<a href="#fn5" class="footnote-ref" id="fnref5" role="doc-noteref"><sup>5</sup></a></strong> (mehrzeilige Strings in Funktionen/Klassen bei Python, <a href="https://roxygen2.r-lib.org/" title="Generator um aus R Docstrings eine Dokumentation zu generieren">Roxygen</a>-Kommentare in R, <a href="https://www.oracle.com/java/technologies/javase/javadoc.html" title="Generator um aus Java Docstrings eine Dokumentation zu generieren">Javadoc</a>-Kommentare in Java, etc.).</p>
<p>Diese dienen doppelt: Zum einen erleichtern sie es Ihnen und Kollegen, den Code beim Lesen zu verstehen, zum anderen können sie von Tools ausgelesen und zu hübschen API-Dokumentationen verarbeitet werden. Idealerweise dokumentieren Sie <em>jede wichtige <strong>oder</strong> von außen sichtbare Funktion, Klasse oder Modul</em> mit einem kurzen Docstring, der Zweck, Parameter, Rückgaben und ggf. Beispiele enthält. Für kleine Scripte genügen ggf. Modul- oder Abschnittskommentare.</p>
<p>Wichtig ist Konsistenz im Stil halten Sie sich an Konventionen Ihres Ökosystems (z.B. <a href="https://google.github.io/styleguide/">Google Style Guide</a> für Python Docstrings oder entsprechende Formatvorgaben für andere Sprachen). Verlinken sie diese Styleguides in der README. Sogenannte Linting-Tools, wie etwa <strong><a href="https://www.pylint.org/" title="Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.">pylint</a></strong>, können die Verwendung erzwingen.</p>
<p>Mit Tools, wie <strong><a href="https://www.sphinx-doc.org" title="Mächtiges Dokumentations-Generierungs-Werkzeug, welches hinter readthedocs.com steht.">Sphinx</a></strong>, <strong><a href="https://www.oracle.com/java/technologies/javase/javadoc.html" title="Generator um aus Java Docstrings eine Dokumentation zu generieren">Javadoc</a></strong>, <strong><a href="https://www.doxygen.nl/" title="Generator um aus C/C++ Docstrings eine Dokumentation zu generieren">Doxygen</a></strong>, <strong><a href="https://www.mkdocs.org/" title="Sehr einfacher und minimalistischer Generator für statische Websites aus Markdown">MkDocs</a></strong>,<strong><a href="https://pdoc.dev/" title="Generator um aus Python Docstrings eine Dokumentation zu generieren">pdoc</a></strong> und vielen weiteren, können aus Docstrings automatisiert Webseiten oder PDF-Handbücher generiert werden. Sie lesen z.B. die Python-Docstrings und erzeuge daraus strukturiert eine Dokumentation; Häufig kann über Erweiterungen auch dritte Dokumentation direkt eingebunden und verlinkt werden.</p>
<p>Der Einsatz solcher Tools ist besonders dann sinnvoll, wenn Ihre Forschungssoftware über eine <em>Programmierschnittstelle (API)</em> verfügt, die von anderen genutzt werden soll, oder wenn das Projekt größer wird und die interne Struktur komplexer ist. In solchen Fällen kann eine <em>API-Referenz</em> (automatisch aus dem Code erzeugt) eine erhebliche Hilfe sein.</p>
</section>
<section id="versionskontrolle-und-kontinuierliche-dokumentationspflege" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="versionskontrolle-und-kontinuierliche-dokumentationspflege">Versionskontrolle und kontinuierliche Dokumentationspflege</h3>
<div class="page-columns page-full"><p>Eine Form der <em>Teil-Automatisierung</em> ist es, die Dokumentation an den Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben Versionskontrollsystem (Git) liegen wie der Code, damit Änderungen synchron nachverfolgt werden. Es empfiehlt sich, bei jedem größeren Code-Update zu prüfen, ob die Doku noch stimmt (das kann man sich z.B. als Punkt in Pull-Request-Reviews notieren oder per Issue-Template abfragen). Für Projekte mit Continuous Integration (CI) kann man sogar automatisierte Checks einrichten, die z.B. prüfen, ob die Doku gebaut werden kann oder ob Docstrings fehlen. Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z.B. mittels Sphinx) und veröffentlichen sie so ist garantiert, dass <em>die aktuelle Codeversion immer eine aktuelle Doku hat</em>. </p><div class="no-row-height column-margin column-container"><span class="margin-aside">Dieses Level an Automation ist für kleine Projekte evtl. zu viel, aber das <strong>Prinzip “Dokumentation versionieren”</strong> ist allgemeingültig, um die Entwicklungshistorie konsistent zu halten.</span></div></div>
</section>
<section id="spezialfälle" class="level3">
<h3 class="anchored" data-anchor-id="spezialfälle">Spezialfälle</h3>
<p>In bestimmten Fällen gibt es weitere Werkzeuge: z.B. <strong>Doxygen</strong> für automatisierte Code-Diagramme und Querverweise (gerne in C++-Projekten genutzt), oder <strong>Swagger/OpenAPI</strong> für automatische Dokumentation von Web-APIs. Wenn Ihre Forschungssoftware z.B. einen Webservice anbietet, kann Swagger eine interaktive API-Doku erzeugen. Ebenso können <strong>Literatur-Manager</strong> wie Manubot oder RMarkdown Bücher helfen, Code und Text zu integrieren (aber das geht über das hinaus, was die meisten DH-Projekte benötigen). Erwähnenswert ist noch <strong>Jupyter Book</strong> oder R <strong>Bookdown</strong>, womit man umfangreiche narrative Dokumentationen (inkl. Code) als Website/Book erstellen kann nützlich, falls Ihre Dokumentation eher ein ausführlicher Lehrtext werden soll (z.B. wenn die Software einen ganzen methodischen Ansatz dokumentiert). Für den hier anvisierten Zweck (knackiger Doku-Katalog) sind solche Tools meist zu schwergewichtig.</p>
</section>
<section id="wann-ist-was-verpflichtend" class="level3">
<h3 class="anchored" data-anchor-id="wann-ist-was-verpflichtend">Wann ist was verpflichtend</h3>
<p>Es gibt kein universelles Muss, außer: <strong>Irgendeine Form der Doku ist Pflicht</strong>. Ob Sie nun per Hand Markdown schreiben oder Sphinx einsetzen, hängt von Kontext und Projektgröße ab. Allgemein gilt: Verwenden Sie Automatisierung wo immer möglich, <em>um sich zu entlasten</em>, aber vermeiden Sie Overhead durch Tools, die Sie nicht brauchen. Ein einzelnes historisches Analyse-Skript braucht kein Doxygen; ein komplexes DH-Toolkit mit API sollte hingegen Doxygen oder Sphinx nutzen, damit die Nutzer nicht den Code lesen müssen, um Funktionen zu verstehen. Denken Sie daran: <em>“Die beste Dokumentation ist die, die sich selbst schreibt.”</em> dieses Motto aus der Literatur spielt darauf an, dass wir Tools nutzen sollen, die uns Schreibarbeit abnehmen. Perfekt autonom schreibt sich die Dokumentation zwar nie, aber moderne Werkzeuge können Routineaufgaben (z.B. Inhaltsverzeichnisse, Funktionsreferenzen, Formatierung) automatisieren. Dadurch bleibt Ihnen mehr Zeit für das inhaltliche Fine-Tuning der Texte.</p>
<div class="no-row-height column-margin column-container"><div class="callout callout-style-default callout-tip callout-titled" title="Prinzip">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Prinzip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Die beste Dokumentation ist die, die sich selbst aktualisiert.</p>
</div>
</div></div><p>Eine Form der <em>Teil-Automatisierung</em> ist es, die Dokumentation an den Entwicklungs-Workflow zu koppeln. So sollte die Dokumentation im selben Versionskontrollsystem (Git) liegen wie der Code, damit Änderungen synchron nachverfolgt werden. Es empfiehlt sich, bei jedem größeren Code-Update zu prüfen, ob die Doku noch stimmt (das kann man sich z.B. als Punkt in Pull-Request-Reviews notieren oder per Issue-Template abfragen). Für Projekte mit Continuous Integration (CI) kann man sogar automatisierte Checks einrichten, die z.B. prüfen, ob die Doku gebaut werden kann oder ob Docstrings fehlen. Einige CI-Skripte generieren bei jedem Commit eine frische Doku (z.B. mittels Sphinx) und veröffentlichen sie so ist garantiert, dass <em>die aktuelle Codeversion immer eine aktuelle Doku hat</em>.</p>
<p>Schlussendlich muss aber das Level an Automation für jedes Projekt individuell abgewogen werden.</p>
</section>
</section>
<section id="best-practices-vorlagen-und-checklisten" class="level2">
<h2 class="anchored" data-anchor-id="best-practices-vorlagen-und-checklisten">Best Practices, Vorlagen und Checklisten</h2>
<p>Um zu entscheiden, <em>was</em> dokumentiert wird (und was nicht), helfen etablierte <strong>Best Practices</strong> sowie Vorlagen aus der Community. Im Folgenden sind einige bewährte Richtlinien zusammengefasst, untermauert von Quellen, die bei der Priorisierung der Dokumentationsinhalte helfen:</p>
<section id="orientierung-an-nutzerbedürfnissen" class="level3">
<h3 class="anchored" data-anchor-id="orientierung-an-nutzerbedürfnissen">Orientierung an Nutzerbedürfnissen</h3>
<p>Stellen Sie sich beim Schreiben der Doku die verschiedenen <em>Nutzerrollen</em> vor: <strong>“Zukünftiges Ich”</strong>, <strong>Kolleg*innen</strong>, <strong>Fachforscher anderer Disziplin</strong> und ggf. <strong>Software-Entwickler, die den Code erweitern</strong>. Jede dieser Gruppen möchte bestimmte Dinge wissen. <em>Forscher*innen</em> fragen: <em>Was kann das Tool? Wie benutze ich es? In welchem Kontext steht es?</em>. <em>Entwickler*innen</em> fragen: <em>Wie kann ich beitragen? Wie funktioniert es unter der Haube?</em>. Priorisieren Sie zunächst die erstgenannten (Anwender) deshalb Fokus auf Zweck, Nutzung und Ergebnisse in der Hauptdoku. Detailinfos für Entwickler (z.B. Code-Struktur, To-do-Liste) können separat oder später ergänzt werden. Halten Sie sich stets vor Augen: <strong>Dokumentation ist primär für Menschen</strong> (nicht für Maschinen), daher schreiben Sie klar und vermeiden Sie unnötigen Jargon. <em>Selbst wenn der Code “für sich spricht”</em>, denken Sie daran, dass klare Erläuterungen später viel Zeit sparen.</p>
</section>
<p>Um zu entscheiden, <em>was</em> dokumentiert wird (und was <em>nicht</em>), helfen etablierte <strong>Best Practices</strong> sowie Vorlagen aus der Community. Im Folgenden sind einige bewährte Richtlinien zusammengefasst.</p>
<section id="checkliste-für-die-mindest-dokumentation" class="level3">
<h3 class="anchored" data-anchor-id="checkliste-für-die-mindest-dokumentation">Checkliste für die Mindest-Dokumentation</h3>
<p>Die folgenden Punkte fassen zusammen, was eine gute Dokumentation mindestens enthalten sollte. Sie können auch als <strong>Qualitäts-Checkliste</strong> dienen, um Ihre Dokumentation zu überprüfen:</p>
@ -913,38 +1190,30 @@ Warnung
<li><strong>Installation &amp; Voraussetzungen:</strong> Sind alle Schritte, um die Software lauffähig zu machen, dokumentiert (inkl. Dependencies, evtl. mit Installationsbefehlen)? Ist ersichtlich, welche Umgebung nötig ist (OS, Hardware)?</li>
<li><strong>Grundlegende Nutzung:</strong> Gibt es eine Anleitung oder Beispiele, wie man die Software verwendet (Eingabe -&gt; Ausgaben)? Ist mindestens ein typischer Workflow beschrieben, idealerweise mit Beispielinput und -output?</li>
<li><strong>Optionen &amp; Schnittstellen:</strong> Falls relevant sind alle wichtigen Funktionen, Befehlsoptionen oder API-Methoden dokumentiert? (Nicht unbedingt jede intern, aber alles, was ein Nutzer aufrufen könnte). Für APIs: Sind Parameter und Rückgaben erläutert?</li>
<li><strong>Validierung &amp; Einschränkungen:</strong> Werden Annahmen und Grenzen der Software genannt? Weiß ein<em>e Nutzer</em>in, welche Fälle nicht abgedeckt sind oder worauf zu achten ist (z.B. Datenqualität, maximale Größen)? Transparenz hier verhindert Frustration.</li>
<li><strong>Validierung &amp; Einschränkungen:</strong> Werden Annahmen und Grenzen der Software genannt? Weiß ein*e Nutzer*in, welche Fälle nicht abgedeckt sind oder worauf zu achten ist (z.B. Datenqualität, maximale Größen)? Transparenz hier verhindert Frustration.</li>
<li><strong>Hintergrund &amp; Referenzen:</strong> Sind die wichtigsten konzeptionellen Hintergründe oder Referenzen angegeben? (Z.B. theoretische Grundlagen, Algorithmen, Literaturverweise). Das muss kein Essay sein, aber ein paar Sätze + Referenzen schaffen Vertrauen in die wissenschaftliche Fundierung.</li>
<li><strong>Kontakt &amp; Weiterführung:</strong> Ist angegeben, wie man Hilfe bekommt oder Fehler melden kann (Issue-Tracker, E-Mail)? Gibt es Hinweise für Beiträge (falls erwünscht) oder zumindest die Information, wer die Autor*innen sind?</li>
<li><strong>Rechtliches &amp; Zitation:</strong> Liegt die Lizenz bei und wird sie genannt? Sind Infos zum Zitieren der Software vorhanden (z.B. “Bitte zitieren Sie DOI XYZ”)? Das stellt sicher, dass die Software nachnutzbar <em>und</em> akademisch kreditiert wird.</li>
<li><strong>Aktualität &amp; Version:</strong> Entspricht die Dokumentation der aktuellen Softwareversion? (Check: Versionsnummern, Datumsangaben). Veraltete Doku kann schlimmer sein als keine planen Sie also ein, die Doku mit jedem Release kurz zu überprüfen.</li>
<li><strong>Konsistenz &amp; Stil:</strong> Wird ein einheitlicher Ton und Stil durchgehalten? (z.B. durchgehende Verwendung gleicher Begriffe für Konzepte, Sprache entweder Deutsch oder Englisch einheitlich je nach Zielgruppe). Kleinliche Fehler (Tippfehler, kaputte Links) sind auszumerzen, da sie Nutzer abschrecken.</li>
</ol>
<p>Diese Checkliste kann vor einem “Release” der Software durchgegangen werden, ähnlich einem Review-Prozess (vgl. JOSS Review-Kriterien, die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch dokumentiert werden muss und was eventuell weggelassen werden kann. <strong>Alles, was für die obigen Punkte nicht relevant ist, kann man tendenziell aus der Hauptdokumentation herauslassen.</strong> Beispielsweise interne Code-Refaktorierungsdetails oder historische Anekdoten zur Entwicklung gehören eher ins interne Changelog oder in Blog-Posts, nicht in die Nutzerdokumentation.</p>
</section>
<section id="positiv--und-negativbeispiele-studieren" class="level3">
<h3 class="anchored" data-anchor-id="positiv--und-negativbeispiele-studieren">Positiv- und Negativbeispiele studieren</h3>
<p>Ein guter Weg, die eigene Dokumentation zu verbessern, ist ein Blick auf Projekte mit exzellenter Doku. In der <em>Journal of Open Source Software (JOSS)</em> oder <em>Journal of Open Research Software (JORS)</em> werden oft Softwareartikel veröffentlicht, bei denen die zugehörigen Repositorien vorbildliche READMEs und Wikis haben. Diese können als Vorlage dienen. Achten Sie darauf, wie diese Projekte ihre README strukturieren, welche Abschnitte vorhanden sind und welche nicht. Viele erfolgreiche Projekte haben z.B. eine ähnliche Reihenfolge: Introduction, Installation, Usage, Contributing, License, Citation ein Muster, das sich bewährt hat. Ebenso gibt es von Initiativen wie der Software Sustainability Institute Blogposts mit Best Practices und sogar Vorlagen (Templates) für Dokumentation. Nutzen Sie solche Ressourcen; sie ersparen einem das Rad neu zu erfinden. Allerdings: Adaptieren Sie sie auf Ihre Bedürfnisse nicht jede Vorlage passt 1:1.</p>
</section>
<section id="prinzipien-fair-und-endings" class="level3">
<h3 class="anchored" data-anchor-id="prinzipien-fair-und-endings">Prinzipien: FAIR und ENDINGS</h3>
<p>Beachten Sie, dass dieser Anforderungskatalog in Einklang mit den Prinzipien des <strong>Research Software Engineering</strong> und den <strong>ENDINGS-Prinzipien</strong> steht. Gutes Research Software Engineering fördert u.a. <em>Nachhaltigkeit, Offenheit und Reproduzierbarkeit</em> in der Softwareentwicklung. Dementsprechend legt unsere Dokumentations-Checkliste Wert auf Reproduzierbarkeit (Installation, Daten, Beispiele), Offenheit (Lizenz, offene Formate) und Nachhaltigkeit (Versionierung, Langlebigkeit der Doku). Die ENDINGS-Prinzipien für digitale Projekte betonen insbesondere die Bedeutung von Dokumentation für Datenstrukturen, offenen Lizenzen, statischen Outputs und Zitierbarkeit. Unsere Empfehlungen, etwa ein statisches Markdown-README beizulegen, die Datenmodell-Doku nicht auszulagern oder Zitationsangaben zu machen, setzen genau diese Vorgaben um. Indem Sie also diesem Anforderungskatalog folgen, berücksichtigen Sie automatisch wichtige anerkannte Prinzipien für gute wissenschaftliche Softwarepraxis.</p>
</section>
<section id="kontinuierliche-verbesserung-und-feedback" class="level3">
<h3 class="anchored" data-anchor-id="kontinuierliche-verbesserung-und-feedback">Kontinuierliche Verbesserung und Feedback</h3>
<p>Dokumentation ist kein einmaliges Ereignis, sondern ein fortlaufender Prozess. Best Practice ist, früh Feedback von Testnutzer*innen oder Kolleg*innen einzuholen: Lassen Sie jemanden die Anleitung befolgen und hören Sie auf Stolpersteine. Oft zeigen sich Lücken erst im Praxistest (“Ich wusste nicht, was ich nach Schritt X tun soll” etc.). Planen Sie Zeiten ein, die Dokumentation nachzuführen, insbesondere wenn sich die Software ändert. Ein lebendiges Projekt wird vielleicht Release für Release die Dokumentation erweitern (evtl. neue Tutorials, neue Module dokumentieren). Nutzen Sie auch <em>Issues</em> für Dokumentation: Wenn Nutzer Fragen stellen, überlegen Sie, ob die Antwort in die offizielle Doku übernommen werden sollte. So wächst die Dokumentation organisch entlang der tatsächlichen Bedürfnisse.</p>
</section>
<section id="zusammenfassung-best-practices" class="level3">
<h3 class="anchored" data-anchor-id="zusammenfassung-best-practices">Zusammenfassung Best Practices</h3>
<p>Zusammenfassend helfen die genannten Best Practices dabei, die Dokumentation <strong>zielgerichtet</strong> zu gestalten: Dokumentiert wird, was dem Verständnis und der Nutzung dient; weggelassen wird, was überflüssig oder selbstverständlich ist. Eine gute Dokumentation <em>erzählt eine klare Geschichte</em> über die Software, anstatt den Leser mit irrelevanten Details zu verlieren. Mit den richtigen Werkzeugen und Prinzipien an der Hand kann selbst unter Zeitdruck eine qualitativ hochwertige Dokumentation entstehen zur Freude aller, die mit der Forschungssoftware arbeiten möchten.</p>
<p>Diese Checkliste kann vor einem “Release” der Software durchgegangen werden, ähnlich einem Review-Prozess (vgl. <a href="https://joss.readthedocs.io/en/latest/review_checklist.html">JOSS Review-Kriterien</a>, die viele dieser Punkte abdecken). Sie hilft zu entscheiden, was noch dokumentiert werden muss und was eventuell weggelassen werden kann. <strong>Alles, was für die obigen Punkte nicht relevant ist, kann man tendenziell aus der Hauptdokumentation herauslassen.</strong></p>
</section>
</section>
<section id="fazit" class="level2 page-columns page-full">
<section id="fazit" class="level2">
<h2 class="anchored" data-anchor-id="fazit">Fazit</h2>
<p>Die hier präsentierten Anforderungen und Empfehlungen bieten einen <strong>Leitfaden für die Dokumentation von Forschungssoftware</strong> in den Digital Humanities. Sie sind darauf ausgerichtet, mit überschaubarem Aufwand maximale <strong>Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit</strong> zu erreichen. Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel.</p>
<p>Wissenschaftlich fundierte Best Practices von <em>Ten Simple Rules for Documenting Scientific Software</em> bis zu den <em>ENDINGS-Principles</em> untermauern diesen Katalog. Die Umsetzung dieser Richtlinien wird dazu beitragen, dass Forschungssoftware aus den Geisteswissenschaften nicht nur kurzfristig von ihren Autor*innen genutzt wird, sondern langfristig von Dritten verstanden, validiert und weiterentwickelt werden kann. So schließt sich der Kreis zwischen guter <strong>Softwareentwicklung</strong> und guter <strong>Wissenschaft</strong>: Dokumentation ist das Bindeglied, das Code und Erkenntnis transparent verbindet. In der Praxis bedeutet dies zwar zusätzliche Arbeitsschritte, doch wie die Erfahrung zeigt, zahlen sich diese in Form von <em>Zeiteinsparung bei Nutzern, höherer Zitierbarkeit und größerer Wirkung</em> der Software aus. Mit diesem Anforderungskatalog sind Forschende gut gerüstet, um ihre Softwareprojekte dokumentationstechnisch auf ein solides Fundament zu stellen trotz knapper Zeit und ohne Informatikabschluss. Denn am Ende gilt: <strong>Gut dokumentierte Forschungscode ist nachhaltige Forschung</strong>.</p>
<section id="tabellarische-übersicht-der-dokumentations-bestandteile" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="tabellarische-übersicht-der-dokumentations-bestandteile">Tabellarische Übersicht der Dokumentations-Bestandteile</h3>
<p>Die hier präsentierten Anforderungen und Empfehlungen bieten einen <strong>Leitfaden für die Dokumentation von Forschungssoftware</strong> in den Digital Humanities. Sie sind darauf ausgerichtet, mit überschaubarem Aufwand maximale <strong>Nachvollziehbarkeit, Langlebigkeit und Wiederverwendbarkeit</strong> zu erreichen.</p>
<p>Indem zentrale Inhalte (Ziele, Inputs/Outputs, Hintergrund, etc.) klar dokumentiert, ein nutzerfreundliches Format (README im Repo) gewählt, der Umfang fokussiert gehalten und hilfreiche Tools eingesetzt werden, kann die Dokumentation zur Stärke eines Projekts werden statt einem lästigen Anhängsel.</p>
<p>So schließt sich der Kreis zwischen guter <strong>Softwareentwicklung</strong> und guter <strong>Wissenschaft</strong><span class="citation" data-cites="Forschungsgemeinschaft2025LeitlinienzurSicherung">[<a href="#ref-Forschungsgemeinschaft2025LeitlinienzurSicherung" role="doc-biblioref">7</a>, Leitlinie 12]</span>: Dokumentation ist das Bindeglied, das Code und Erkenntnis transparent verbindet. In der Praxis bedeutet dies zwar zusätzliche Arbeitsschritte, doch wie die Erfahrung zeigt, zahlen sich diese in Form von <em>Zeiteinsparung bei Nutzern, höherer Zitierbarkeit und größerer Wirkung</em> der Software aus. Mit diesem Anforderungskatalog sind Forschende gut gerüstet, um ihre Softwareprojekte dokumentationstechnisch auf ein solides Fundament zu stellen trotz knapper Zeit und ohne Informatikabschluss. Denn am Ende gilt: <strong>Gut dokumentierte Forschungscode ist nachhaltige Forschung</strong>.</p>
</section>
<div id="quarto-appendix" class="default page-columns page-full"><section id="tabellarische-übersicht-der-dokumentations-bestandteile" class="level2 appendix page-columns page-full"><h2 class="anchored quarto-appendix-heading">Tabellarische Übersicht der Dokumentations-Bestandteile</h2><div class="quarto-appendix-contents page-columns page-full">
<div class="column-page-right">
<table class="caption-top table">
<caption><em>Empfohlene Dokumentationselemente, Inhalte und Umfang.</em> Diese Übersicht kann als Vorlage dienen, welche Komponenten ein Dokumentationspaket enthalten sollte. Je nach Projekt können einige Elemente wegfallen oder kombiniert werden entscheidend ist, dass die Kerninformationen (siehe oben) nicht fehlen.</caption>
@ -1020,45 +1289,58 @@ Warnung
</tbody>
</table>
</div>
</section>
<section id="schlusswort" class="level3">
<h3 class="anchored" data-anchor-id="schlusswort">Schlusswort</h3>
<p>Mit einer solchen Struktur und Herangehensweise lässt sich auch in einem kleinen Forschungsteam eine professionelle Dokumentation erzielen, die den Prinzipien von Open Science und nachhaltiger Softwareentwicklung gerecht wird. Die investierte Mühe wird durch Zeitgewinn bei Wiederverwendung und Erweiterung der Software mehr als aufgewogen. So wird die Forschungssoftware nicht zum einmaligen “Nebenprodukt”, sondern zu einem robusten, teilbaren Ergebnis wissenschaftlicher Arbeit.</p>
</section>
</section>
</div></section><section id="referenz-websitesservices" class="level2 appendix"><h2 class="anchored quarto-appendix-heading">Referenz Websites/Services</h2><div class="quarto-appendix-contents">
<ul>
<li><a href="https://github.com" title="Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft">GitHub</a>: Seite mit sehr vielen Open-Source-Projekten, die git verwenden. Gehört zu Microsoft</li>
<li><a href="https://gitlab.com" title="Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking, …). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz">GitLab</a>: Open-Source-Lösung für selbst gehostete Projektverwaltung (git, issue-tracking,&nbsp;…). Community (kostenfrei; limitierte features) oder Enterprise-Linzenz</li>
<li><a href="https://joss.theoj.org/" title="The Journal of Open Source Software">JOSS</a>: The Journal of Open Source Software is a developer friendly, open access journal for research software packages.</li>
<li><a href="https://openresearchsoftware.metajnl.com/" title="The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential.">JORS</a>: The Journal of Open Research Software features peer reviewed Software Metapapers describing research software with high reuse potential.</li>
</ul>
</div></section><section id="referenz-software" class="level2 appendix"><h2 class="anchored quarto-appendix-heading">Referenz Software</h2><div class="quarto-appendix-contents">
<div id="quarto-appendix" class="default"><section id="methodik-llms-als-autoren" class="level2 appendix"><h2 class="anchored quarto-appendix-heading">Methodik / LLMs als Autoren</h2><div class="quarto-appendix-contents">
<p>Erstellt wurde der initial draft mittels Websuche und “Deep-Research” von <code>gpt-4.5 (preview)</code>. Abschließendes Korrekturlesen/inhaltliche Prüfung/Layouting durch Nicole Dresselhaus.</p>
<p>Keine Angst davor, dass dies irgendein LLM-BS ist, um auf der Seite mehr Views zu bekommen. Ich habe alles mehrfach gelesen und würde es genauso schreiben - nur in schlechteren Worten.</p>
<ul>
<li><a href="https://git-scm.com" title="Das de-facto Standard-Versionskontrollsystem">git</a>: Versionskontrollsystem</li>
<li><a href="https://graphviz.org/" title="Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg">graphviz</a>: Textuelle darstellung von Graphen; Standard-Unix-Tool; Auf vielen Systemen verfügbar und rendert zu pdf/svg</li>
<li><a href="https://en.wikipedia.org/wiki/Markdown" title="Mittlerweile DER Standard bei plaintext-Dokumenten">Markdown</a>: Mittlerweile DER Standard bei plaintext-Dokumenten</li>
<li><a href="https://mermaid.js.org/" title="Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML, …) in Bilder gewandelt werden">mermaid.js</a>: Sprache für Diagramme; kann automatisiert (z.b. durch pandoc, javascript im HTML,&nbsp;…) in Bilder gewandelt werden</li>
<li><a href="https://pandoc.org/MANUAL.html#pandocs-markdown" title="DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen">pandoc</a>: DER Konverter für Dokumente. Kann sehr viel in Markdown wandeln und hieraus HTML/PDF u.ä. erstellen</li>
<li><a href="https://www.pylint.org/" title="Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.">pylint</a>: Linting-Tool für Python. Formatiert Code und weist auf Probleme (z.b. fehlende Dokumentation) hin.</li>
<li><a href="https://en.wikipedia.org/wiki/ReStructuredText" title="Alternative zu Markdown.">rst</a>: Alternative zu Markdown.</li>
</ul>
<hr>
</div></section><section id="bibliographie" class="level2 appendix"><h2 class="quarto-appendix-heading"></h2><div class="quarto-appendix-contents">
</div></section><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Literatur</h2><div id="refs" class="references csl-bib-body hanging-indent" data-entry-spacing="0" role="list">
<div id="ref-endings2020principles" class="csl-entry" role="listitem">
Endings Project. 2020. <span>„Endings Principles for Digital Longevity“</span>. <a href="https://endings.uvic.ca/principles.html">https://endings.uvic.ca/principles.html</a>.
</div></section><section class="quarto-appendix-contents" role="doc-bibliography" id="quarto-bibliography"><h2 class="anchored quarto-appendix-heading">Bibliographie</h2><div id="refs" class="references csl-bib-body" data-entry-spacing="0" role="list">
<div id="ref-EndingsPrinciples221" class="csl-entry" role="listitem">
<div class="csl-left-margin">1. </div><div class="csl-right-inline">Endings Project Team. 2023. <a href="https://endings.uvic.ca/principles.html">Endings <span>Principles</span> for <span>Digital Longevity</span></a> (Version 2.2.1).</div>
</div>
<div id="ref-katz2021open" class="csl-entry" role="listitem">
Katz, Daniel S, Kyle E Niemeyer, und Arfon M Smith. 2021. <span>„The Journal of Open Source Software (JOSS)“</span>. <em>PeerJ Computer Science</em> 7: e432.
<div id="ref-BarkerEtAl2022IntroducingFAIR" class="csl-entry" role="listitem">
<div class="csl-left-margin">2. </div><div class="csl-right-inline">Barker, Michelle, Neil P. Chue Hong, Daniel S. Katz, Anna-Lena Lamprecht, Carlos Martinez-Ortiz, Fotis Psomopoulos, Jennifer Harrow, u.&nbsp;a. 2022. Introducing the <span>FAIR Principles</span> for Research Software. <em>Scientific Data</em> 9. Nature Publishing Group: 622. <a href="https://doi.org/10.1038/s41597-022-01710-x">https://doi.org/10.1038/s41597-022-01710-x</a>.</div>
</div>
<div id="ref-maria2019jupyter" class="csl-entry" role="listitem">
Kluyver, Thomas, Benjamin Ragan-Kelley, Fernando Pérez, Brian Granger, Matthias Bussonnier, Jonathan Frederic, Kyle Kelley, u.&nbsp;a. 2016. <span>„Jupyter notebooks—a publishing format for reproducible computational workflows“</span>. <em>Positioning and Power in Academic Publishing: Players, Agents and Agendas</em> 20: 8790.
<div id="ref-WilsonEtAl2017Goodenoughpractices" class="csl-entry" role="listitem">
<div class="csl-left-margin">3. </div><div class="csl-right-inline">Wilson, Greg, Jennifer Bryan, Karen Cranston, Justin Kitzes, Lex Nederbragt, und Tracy K. Teal. 2017. Good Enough Practices in Scientific Computing. <em>PLOS Computational Biology</em> 13. Public Library of Science: e1005510. <a href="https://doi.org/10.1371/journal.pcbi.1005510">https://doi.org/10.1371/journal.pcbi.1005510</a>.</div>
</div>
<div id="ref-prlic2012ten" class="csl-entry" role="listitem">
Prlić, Andreas, und James B Procter. 2012. <span>„Ten simple rules for documenting scientific software“</span>. <em>PLoS Computational Biology</em> 8 (12): e1002802.
<div id="ref-NoyEtAl2019IndustryscaleKnowledge" class="csl-entry" role="listitem">
<div class="csl-left-margin">4. </div><div class="csl-right-inline">Smith, Arfon M., Daniel S. Katz, und Kyle E. Niemeyer. 2016. Software Citation Principles. <em>PeerJ Computer Science</em> 2. PeerJ Inc. <a href="https://doi.org/10.7717/peerj-cs.86">https://doi.org/10.7717/peerj-cs.86</a>.</div>
</div>
<div id="ref-smith2016software" class="csl-entry" role="listitem">
Smith, Arfon M, Daniel S Katz, Kyle E Niemeyer, FORCE11 Software Citation Working Group, u.&nbsp;a. 2016. <span>„Software citation principles“</span>. <em>PeerJ Computer Science</em> 2: e86.
<div id="ref-Hasselbring2020OpenSourceResearch" class="csl-entry" role="listitem">
<div class="csl-left-margin">5. </div><div class="csl-right-inline">Hasselbring, Wilhelm, Leslie Carr, Simon Hettrick, Heather Packer, und Thanassis Tiropanis. 2020. Open <span>Source Research Software</span>. <em>Computer</em> 53: 8488. <a href="https://doi.org/10.1109/MC.2020.2998235">https://doi.org/10.1109/MC.2020.2998235</a>.</div>
</div>
<div id="ref-wilson2017good" class="csl-entry" role="listitem">
Wilson, Greg, Jennifer Bryan, Karen Cranston, Justin Kitzes, Lex Nederbragt, und Tracy K Teal. 2017. <span>„Good enough practices in scientific computing“</span>. <em>PLoS computational biology</em> 13 (6): e1005510.
<div id="ref-KluyverEtAl2016JupyterNotebookspublishing" class="csl-entry" role="listitem">
<div class="csl-left-margin">6. </div><div class="csl-right-inline">Kluyver, Thomas, Benjamin Ragan-Kelley, Fernando Pérez, Brian Granger, Matthias Bussonnier, Jonathan Frederic, Kyle Kelley, u.&nbsp;a. 2016. Jupyter <span>Notebooks</span> a Publishing Format for Reproducible Computational Workflows. In, Hrsg. Fernando Loizides und Birgit Scmidt, 8790. IOS Press. <a href="https://doi.org/10.3233/978-1-61499-649-1-87">https://doi.org/10.3233/978-1-61499-649-1-87</a>.</div>
</div>
<div id="ref-Forschungsgemeinschaft2025LeitlinienzurSicherung" class="csl-entry" role="listitem">
<div class="csl-left-margin">7. </div><div class="csl-right-inline"><em>Leitlinien zur Sicherung guter wissenschaftlicher Praxis</em>. 2024 (Version 1.2). Deutsche Forschungsgemeinschaft. <a href="https://doi.org/10.5281/zenodo.14281892">https://doi.org/10.5281/zenodo.14281892</a>.</div>
</div>
</div></section><section class="quarto-appendix-contents" id="quarto-citation"><h2 class="anchored quarto-appendix-heading">Zitat</h2><div><div class="quarto-appendix-secondary-label">Mit BibTeX zitieren:</div><pre class="sourceCode code-with-copy quarto-appendix-bibtex"><code class="sourceCode bibtex">@online{dresselhaus2025,
author = {Dresselhaus, Nicole and , GPT-4.5},
author = {Dresselhaus, Nicole and deep research, GPT-4.5},
title = {Anforderungskatalog für die Dokumentation von
Forschungssoftware (Digital Humanities)},
date = {2025-05-08},
date = {2025-06-05},
url = {https://drezil.de/Writing/documentation.html},
langid = {de},
abstract = {Diese Dokumentation fasst zusammen, welche
@ -1067,9 +1349,9 @@ Wilson, Greg, Jennifer Bryan, Karen Cranston, Justin Kitzes, Lex Nederbragt, und
theoretischen Grundlagen nachvollziehbar zu machen.}
}
</code><button title="In die Zwischenablage kopieren" class="code-copy-button"><i class="bi"></i></button></pre><div class="quarto-appendix-secondary-label">Bitte zitieren Sie diese Arbeit als:</div><div id="ref-dresselhaus2025" class="csl-entry quarto-appendix-citeas" role="listitem">
Dresselhaus, Nicole, and GPT-4.5. 2025. <span>“Anforderungskatalog für
die Dokumentation von Forschungssoftware (Digital Humanities).”</span>
May 8, 2025. <a href="https://drezil.de/Writing/documentation.html">https://drezil.de/Writing/documentation.html</a>.
Dresselhaus, Nicole, and GPT-4.5 deep research. 2025.
<span>“Anforderungskatalog für die Dokumentation von Forschungssoftware
(Digital Humanities).”</span> June 5, 2025. <a href="https://drezil.de/Writing/documentation.html">https://drezil.de/Writing/documentation.html</a>.
</div></div></section></div></main> <!-- /main -->
<script id="quarto-html-after-body" type="application/javascript">
window.document.addEventListener("DOMContentLoaded", function (event) {
@ -1085,7 +1367,7 @@ May 8, 2025. <a href="https://drezil.de/Writing/documentation.html">https://drez
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -92,13 +92,14 @@ div.csl-indent {
<script src="../site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="../site_libs/quarto-html/anchor.min.js"></script>
<link href="../site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="../site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="../site_libs/bootstrap/bootstrap.min.js"></script>
<link href="../site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="../site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="../site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -167,11 +168,11 @@ maintaining data privacy and reproducibility.
<meta name="citation_online_date" content="2025-05-05">
<meta name="citation_fulltext_html_url" content="https://drezil.de/Writing/ner4all-case-study.html">
<meta name="citation_language" content="en">
<meta name="citation_reference" content="citation_title=NER4all or Context is All You Need: Using LLMs for low-effort, high-performance NER on historical texts. A humanities informed approach;,citation_author=Torsten Hiltmann;,citation_author=Martin Dröge;,citation_author=Nicole Dresselhaus;,citation_author=Till Grallert;,citation_author=Melanie Althage;,citation_author=Paul Bayer;,citation_author=Sophie Eckenstaler;,citation_author=Koray Mendi;,citation_author=Jascha Marijn Schmitz;,citation_author=Philipp Schneider;,citation_author=Wiebke Sczeponik;,citation_author=Anica Skibba;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://arxiv.org/abs/2502.04351;">
<meta name="citation_reference" content="citation_title=NER4all or context is all you need: Using LLMs for low-effort, high-performance NER on historical texts. A humanities informed approach;,citation_author=Torsten Hiltmann;,citation_author=Martin Dröge;,citation_author=Nicole Dresselhaus;,citation_author=Till Grallert;,citation_author=Melanie Althage;,citation_author=Paul Bayer;,citation_author=Sophie Eckenstaler;,citation_author=Koray Mendi;,citation_author=Jascha Marijn Schmitz;,citation_author=Philipp Schneider;,citation_author=Wiebke Sczeponik;,citation_author=Anica Skibba;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://arxiv.org/abs/2502.04351;">
<meta name="citation_reference" content="citation_title=Run LLMs locally: 5 best methods (+ self-hosted AI starter kit);,citation_author=Mihai Farcas;,citation_publication_date=2024;,citation_cover_date=2024;,citation_year=2024;,citation_fulltext_html_url=https://blog.n8n.io/local-llm/;">
<meta name="citation_reference" content="citation_title=Tutorial on How to Integrate DeepSeek-R1 and the n8n Agent Development Framework;,citation_author=Aleksandar Haber;,citation_publication_date=2025-02-23;,citation_cover_date=2025-02-23;,citation_year=2025;,citation_fulltext_html_url=https://aleksandarhaber.com/tutorial-on-how-to-develop-private-and-secure-local-ai-agents-using-deepseek-r1-and-the-n8n-agent-development-framework/;">
<meta name="citation_reference" content="citation_title=DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning;,citation_author=undefined DeepSeek-AI;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://arxiv.org/abs/2501.12948;">
<meta name="citation_reference" content="citation_title=Cogito v1 Preview - Introducing IDA as a path to general superintelligence;,citation_author=Deep Cogito;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://www.deepcogito.com/research/cogito-v1-preview;">
<meta name="citation_reference" content="citation_title=Tutorial on how to integrate DeepSeek-R1 and the n8n agent development framework;,citation_author=Aleksandar Haber;,citation_publication_date=2025-02-23;,citation_cover_date=2025-02-23;,citation_year=2025;,citation_fulltext_html_url=https://aleksandarhaber.com/tutorial-on-how-to-develop-private-and-secure-local-ai-agents-using-deepseek-r1-and-the-n8n-agent-development-framework/;">
<meta name="citation_reference" content="citation_title=DeepSeek-R1: Incentivizing reasoning capability in LLMs via reinforcement learning;,citation_author=undefined DeepSeek-AI;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://arxiv.org/abs/2501.12948;">
<meta name="citation_reference" content="citation_title=Cogito v1 preview - introducing IDA as a path to general superintelligence;,citation_author=Deep Cogito;,citation_publication_date=2025;,citation_cover_date=2025;,citation_year=2025;,citation_fulltext_html_url=https://www.deepcogito.com/research/cogito-v1-preview;">
</head>
<body class="nav-sidebar docked nav-fixed quarto-light"><script id="quarto-html-before-body" type="application/javascript">
@ -192,7 +193,7 @@ maintaining data privacy and reproducibility.
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -225,7 +226,7 @@ maintaining data privacy and reproducibility.
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -265,7 +266,7 @@ maintaining data privacy and reproducibility.
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -293,7 +294,7 @@ maintaining data privacy and reproducibility.
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -316,17 +317,20 @@ maintaining data privacy and reproducibility.
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -337,7 +341,7 @@ maintaining data privacy and reproducibility.
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -965,7 +969,7 @@ LLM-Based NER with N8n and Ollama.”</span> May 5, 2025. <a href="https://drezi
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

118
dist/index.html vendored
View File

@ -2,7 +2,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta charset="utf-8">
<meta name="generator" content="quarto-1.7.23">
<meta name="generator" content="quarto-1.7.31">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
@ -38,13 +38,14 @@ ul.task-list li input[type="checkbox"] {
<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
<script src="site_libs/quarto-html/anchor.min.js"></script>
<link href="site_libs/quarto-html/tippy.css" rel="stylesheet">
<link href="site_libs/quarto-html/quarto-syntax-highlighting-dark-2c84ecb840a13f4c7993f9e5648f0c14.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="site_libs/quarto-html/quarto-syntax-highlighting-6cf5824034cebd0380a5b9c74c43f006.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles">
<link href="site_libs/quarto-html/quarto-syntax-highlighting-dark-ec59717222d4d18488216d07f8bb4c3b.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles">
<link href="site_libs/quarto-html/quarto-syntax-highlighting-7ac5b228a3bc26576d871d5d6ca29a78.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
<script src="site_libs/bootstrap/bootstrap.min.js"></script>
<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
<link href="site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="site_libs/bootstrap/bootstrap-dark-716ed94a23403968eaa6fe981e0cbf91.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="site_libs/bootstrap/bootstrap-ec71cb1e120c0dd41819aca960e74e38.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<link href="site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light">
<link href="site_libs/bootstrap/bootstrap-dark-26518ab1849c9162f040d645d8e3152d.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark">
<link href="site_libs/bootstrap/bootstrap-1e57f71320e1e46594eb47a04c1b275c.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
<script id="quarto-search-options" type="application/json">{
"location": "navbar",
"copy-button": false,
@ -158,7 +159,7 @@ window.Quarto = {
toggleBodyColorMode(bsSheetEl);
}
}
window.setColorSchemeToggle = (alternate) => {
const setColorSchemeToggle = (alternate) => {
const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle');
for (let i=0; i < toggles.length; i++) {
const toggle = toggles[i];
@ -191,7 +192,7 @@ window.Quarto = {
}
manageTransitions('#quarto-margin-sidebar .nav-link', true);
// Switch the toggles
window.setColorSchemeToggle(alternate)
setColorSchemeToggle(alternate)
// Hack to workaround the fact that safari doesn't
// properly recolor the scrollbar when toggling (#1455)
if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) {
@ -231,7 +232,7 @@ window.Quarto = {
const isFileUrl = () => {
return window.location.protocol === 'file:';
}
window.hasAlternateSentinel = () => {
const hasAlternateSentinel = () => {
let styleSentinel = getColorSchemeSentinel();
if (styleSentinel !== null) {
return styleSentinel === "alternate";
@ -259,7 +260,7 @@ window.Quarto = {
const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light';
const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark';
let newTheme = '';
if(darkModeDefault) {
if(authorPrefersDark) {
newTheme = isAlternate ? baseTheme : alternateTheme;
} else {
newTheme = isAlternate ? alternateTheme : baseTheme;
@ -282,17 +283,20 @@ window.Quarto = {
changeGiscusTheme();
}
};
const authorPrefersDark = false;
const queryPrefersDark = window.matchMedia('(prefers-color-scheme: dark)');
const darkModeDefault = queryPrefersDark.matches;
document.querySelector('link.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet';
let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default';
// Dark / light mode switch
window.quartoToggleColorScheme = () => {
// Read the current dark / light value
let toAlternate = !window.hasAlternateSentinel();
let toAlternate = !hasAlternateSentinel();
toggleColorMode(toAlternate);
setStyleSentinel(toAlternate);
toggleGiscusIfUsed(toAlternate, darkModeDefault);
window.dispatchEvent(new Event('resize'));
};
queryPrefersDark.addEventListener("change", e => {
if(window.localStorage.getItem("quarto-color-scheme") !== null)
@ -303,7 +307,7 @@ window.Quarto = {
toggleGiscusIfUsed(alternate, darkModeDefault);
});
// Switch to dark mode if need be
if (window.hasAlternateSentinel()) {
if (hasAlternateSentinel()) {
toggleColorMode(true);
} else {
toggleColorMode(false);
@ -672,7 +676,7 @@ window.Quarto = {
<div class="quarto-listing quarto-listing-container-grid" id="listing-listing">
<div class="list grid quarto-listing-cols-3">
<div class="g-col-1" data-index="0" data-categories="QXJ0aWNsZSUyQ0Jlc3QlMjBQcmFjdGljZXM=" data-listing-date-sort="1746655200000" data-listing-file-modified-sort="1746821536259" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="33" data-listing-word-count-sort="6508">
<div class="g-col-1" data-index="0" data-categories="QXJ0aWNsZSUyQ0Jlc3QlMjBQcmFjdGljZXM=" data-listing-date-sort="1749074400000" data-listing-file-modified-sort="1749115089816" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="31" data-listing-word-count-sort="6157">
<a href="./Writing/documentation.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top">
@ -697,13 +701,13 @@ Anforderungskatalog für die Dokumentation von Forschungssoftware (Digital Human
</div>
<div class="listing-date">
May 8, 2025
June 5, 2025
</div>
</div>
</div>
</div></a>
</div>
<div class="g-col-1" data-index="1" data-categories="QXJ0aWNsZSUyQ0Nhc2Utc3R1ZHklMkNNTCUyQ05FUg==" data-listing-date-sort="1746396000000" data-listing-file-modified-sort="1746823263319" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="28" data-listing-word-count-sort="5411">
<div class="g-col-1" data-index="1" data-categories="QXJ0aWNsZSUyQ0Nhc2Utc3R1ZHklMkNNTCUyQ05FUg==" data-listing-date-sort="1746396000000" data-listing-file-modified-sort="1749112265697" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="28" data-listing-word-count-sort="5411">
<a href="./Writing/ner4all-case-study.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top">
@ -738,7 +742,7 @@ May 5, 2025
</div>
</div></a>
</div>
<div class="g-col-1" data-index="2" data-categories="QXJ0aWNsZSUyQ1JBRyUyQ01M" data-listing-date-sort="1745445600000" data-listing-file-modified-sort="1746817736279" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="40" data-listing-word-count-sort="7887">
<div class="g-col-1" data-index="2" data-categories="QXJ0aWNsZSUyQ1JBRyUyQ01M" data-listing-date-sort="1745445600000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="40" data-listing-word-count-sort="7887">
<a href="./Writing/Obsidian-RAG.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top">
@ -771,7 +775,7 @@ April 24, 2025
</div>
</div></a>
</div>
<div class="g-col-1" data-index="3" data-categories="SGFza2VsbCUyQ0NvZGU=" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1746813880395" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="14" data-listing-word-count-sort="2676">
<div class="g-col-1" data-index="3" data-categories="SGFza2VsbCUyQ0NvZGU=" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="14" data-listing-word-count-sort="2676">
<a href="./Coding/Haskell/Webapp-Example/Main.hs.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -800,36 +804,7 @@ April 1, 2020
</div>
</div></a>
</div>
<div class="g-col-1" data-index="4" data-categories="SGFza2VsbCUyQ0NvZGU=" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1746813911127" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="6" data-listing-word-count-sort="1189">
<a href="./Coding/Haskell/Webapp-Example/MyService_Types.hs.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
<div class="card-body post-contents">
<h5 class="no-anchor card-title listing-title">
Webapp-Example: MyService/Types.hs
</h5>
<div class="listing-categories">
<div class="listing-category" onclick="window.quartoListingCategory('SGFza2VsbA=='); return false;">Haskell</div>
<div class="listing-category" onclick="window.quartoListingCategory('Q29kZQ=='); return false;">Code</div>
</div>
<div class="card-text listing-description delink">
Anleitung siehe Webapp-Example.
</div>
<div class="card-attribution card-text-small justify">
<div class="listing-author">
</div>
<div class="listing-date">
April 1, 2020
</div>
</div>
</div>
</div></a>
</div>
<div class="g-col-1" data-index="5" data-categories="SGFza2VsbCUyQ1R1dG9yaWFs" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1746818412478" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="28" data-listing-word-count-sort="5546">
<div class="g-col-1" data-index="4" data-categories="SGFza2VsbCUyQ1R1dG9yaWFs" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="28" data-listing-word-count-sort="5546">
<a href="./Coding/Haskell/Webapp-Example/index.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -858,7 +833,36 @@ April 1, 2020
</div>
</div></a>
</div>
<div class="g-col-1" data-index="6" data-categories="TWVudGFsJTIwSGVhbHRoJTJDQXJ0aWNsZSUyQ1N0cnVnZ2xlcw==" data-listing-date-sort="1546297200000" data-listing-file-modified-sort="1746818996847" data-listing-date-modified-sort="1746741600000" data-listing-reading-time-sort="3" data-listing-word-count-sort="507">
<div class="g-col-1" data-index="5" data-categories="SGFza2VsbCUyQ0NvZGU=" data-listing-date-sort="1585692000000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="6" data-listing-word-count-sort="1189">
<a href="./Coding/Haskell/Webapp-Example/MyService_Types.hs.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
<div class="card-body post-contents">
<h5 class="no-anchor card-title listing-title">
Webapp-Example: MyService/Types.hs
</h5>
<div class="listing-categories">
<div class="listing-category" onclick="window.quartoListingCategory('SGFza2VsbA=='); return false;">Haskell</div>
<div class="listing-category" onclick="window.quartoListingCategory('Q29kZQ=='); return false;">Code</div>
</div>
<div class="card-text listing-description delink">
Anleitung siehe Webapp-Example.
</div>
<div class="card-attribution card-text-small justify">
<div class="listing-author">
</div>
<div class="listing-date">
April 1, 2020
</div>
</div>
</div>
</div></a>
</div>
<div class="g-col-1" data-index="6" data-categories="TWVudGFsJTIwSGVhbHRoJTJDQXJ0aWNsZSUyQ1N0cnVnZ2xlcw==" data-listing-date-sort="1546297200000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="1746741600000" data-listing-reading-time-sort="3" data-listing-word-count-sort="507">
<a href="./Health/Issues.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -889,7 +893,7 @@ January 1, 2019
</div>
</div></a>
</div>
<div class="g-col-1" data-index="7" data-categories="TGVjdHVyZSUyQ0hhc2tlbGw=" data-listing-date-sort="1514761200000" data-listing-file-modified-sort="1746774471739" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="2" data-listing-word-count-sort="374">
<div class="g-col-1" data-index="7" data-categories="TGVjdHVyZSUyQ0hhc2tlbGw=" data-listing-date-sort="1514761200000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="2" data-listing-word-count-sort="374">
<a href="./Coding/Haskell/FFPiH.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -918,7 +922,7 @@ January 1, 2018
</div>
</div></a>
</div>
<div class="g-col-1" data-index="8" data-categories="QXJ0aWNsZSUyQ0hhc2tlbGw=" data-listing-date-sort="1514761200000" data-listing-file-modified-sort="1746774626159" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="17" data-listing-word-count-sort="3277">
<div class="g-col-1" data-index="8" data-categories="QXJ0aWNsZSUyQ0hhc2tlbGw=" data-listing-date-sort="1514761200000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="17" data-listing-word-count-sort="3277">
<a href="./Coding/Haskell/Lenses.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -949,7 +953,7 @@ January 1, 2018
</div>
</div></a>
</div>
<div class="g-col-1" data-index="9" data-categories="SGFza2VsbCUyQ1R1dG9yaWFs" data-listing-date-sort="1451602800000" data-listing-file-modified-sort="1746775138729" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="5" data-listing-word-count-sort="862">
<div class="g-col-1" data-index="9" data-categories="SGFza2VsbCUyQ1R1dG9yaWFs" data-listing-date-sort="1451602800000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="5" data-listing-word-count-sort="862">
<a href="./Coding/Haskell/Code Snippets/Monoid.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -978,7 +982,7 @@ January 1, 2016
</div>
</div></a>
</div>
<div class="g-col-1" data-index="10" data-categories="SGFza2VsbCUyQ1R1dG9yaWFsJTJDQXJjaGl2ZWQ=" data-listing-date-sort="1451602800000" data-listing-file-modified-sort="1746813961303" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="8" data-listing-word-count-sort="1524">
<div class="g-col-1" data-index="10" data-categories="SGFza2VsbCUyQ1R1dG9yaWFsJTJDQXJjaGl2ZWQ=" data-listing-date-sort="1451602800000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="8" data-listing-word-count-sort="1524">
<a href="./Coding/Haskell/Code Snippets/Morphisms.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -1010,7 +1014,7 @@ January 1, 2016
</div>
</div></a>
</div>
<div class="g-col-1" data-index="11" data-categories="SGFza2VsbCUyQ0xpbmtz" data-listing-date-sort="1443650400000" data-listing-file-modified-sort="1746774666603" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="1" data-listing-word-count-sort="146">
<div class="g-col-1" data-index="11" data-categories="SGFza2VsbCUyQ0xpbmtz" data-listing-date-sort="1443650400000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="1" data-listing-word-count-sort="146">
<a href="./Coding/Haskell/Advantages.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -1039,7 +1043,7 @@ October 1, 2015
</div>
</div></a>
</div>
<div class="g-col-1" data-index="12" data-categories="QXJ0aWNsZSUyQ0V4cGVyaWVuY2UlMkNVbmk=" data-listing-date-sort="1420066800000" data-listing-file-modified-sort="1746815058456" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="9" data-listing-word-count-sort="1685">
<div class="g-col-1" data-index="12" data-categories="QXJ0aWNsZSUyQ0V4cGVyaWVuY2UlMkNVbmk=" data-listing-date-sort="1420066800000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="9" data-listing-word-count-sort="1685">
<a href="./Uni/Lernerfolg_an_der_Uni.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -1070,7 +1074,7 @@ January 1, 2015
</div>
</div></a>
</div>
<div class="g-col-1" data-index="13" data-categories="QXJ0aWNsZSUyQ0Z1biUyQ0FyY2hpdmVk" data-listing-date-sort="757378800000" data-listing-file-modified-sort="1746815508525" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="8" data-listing-word-count-sort="1535">
<div class="g-col-1" data-index="13" data-categories="QXJ0aWNsZSUyQ0Z1biUyQ0FyY2hpdmVk" data-listing-date-sort="757378800000" data-listing-file-modified-sort="1749112265687" data-listing-date-modified-sort="NaN" data-listing-reading-time-sort="8" data-listing-word-count-sort="1535">
<a href="./Stuff/Bielefeldverschwoerung.html" class="quarto-grid-link">
<div class="quarto-grid-item card h-100 card-left">
<p class="card-img-top"><img src="./thumbs/placeholder.png" style="height: 200;" class="thumbnail-image card-img"/></p>
@ -1118,7 +1122,7 @@ January 1, 1994
a.appendChild(i);
window.document.body.appendChild(a);
}
window.setColorSchemeToggle(window.hasAlternateSentinel())
setColorSchemeToggle(hasAlternateSentinel())
const icon = "";
const anchorJS = new window.AnchorJS();
anchorJS.options = {

1325
dist/index.xml vendored

File diff suppressed because it is too large Load Diff

2
dist/listings.json vendored
View File

@ -6,8 +6,8 @@
"/Writing/ner4all-case-study.html",
"/Writing/Obsidian-RAG.html",
"/Coding/Haskell/Webapp-Example/Main.hs.html",
"/Coding/Haskell/Webapp-Example/MyService_Types.hs.html",
"/Coding/Haskell/Webapp-Example/index.html",
"/Coding/Haskell/Webapp-Example/MyService_Types.hs.html",
"/Health/Issues.html",
"/Coding/Haskell/FFPiH.html",
"/Coding/Haskell/Lenses.html",

1225
dist/search.json vendored

File diff suppressed because one or more lines are too long

View File

@ -202,4 +202,4 @@ code span.wa {
content: "</";
}
/*# sourceMappingURL=32086ec229fb0849d7fb131b930bf548.css.map */
/*# sourceMappingURL=f0851f1eb74358fc63dbf95ea037b4f5.css.map */

View File

@ -218,4 +218,4 @@ code span.wa {
content: "</";
}
/*# sourceMappingURL=9be8b4365e7d8bb6f535c9d955e89405.css.map */
/*# sourceMappingURL=0e9157e68ecc6b9bd53b4f0439c0f31a.css.map */

112
dist/sitemap.xml vendored
View File

@ -1,87 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://drezil.de/Writing/documentation.html</loc>
<lastmod>2025-05-09T20:12:16.259Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Writing/ner4all-case-study.html</loc>
<lastmod>2025-05-09T20:41:03.319Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Uni/Lernerfolg_an_der_Uni.html</loc>
<lastmod>2025-05-09T18:24:18.456Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Opinions/Keyboard-Layout.html</loc>
<lastmod>2025-05-09T18:31:10.026Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Advantages.html</loc>
<lastmod>2025-05-09T07:11:06.603Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/FFPiH.html</loc>
<lastmod>2025-05-09T07:07:51.739Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Webapp-Example/MyService_Types.hs.html</loc>
<lastmod>2025-05-09T18:05:11.127Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Code Snippets/Morphisms.html</loc>
<lastmod>2025-05-09T18:06:01.303Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/index.html</loc>
<lastmod>2025-05-09T07:01:07.584Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/Work.html</loc>
<lastmod>2025-05-08T16:36:47.996Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/Experience.html</loc>
<lastmod>2025-05-08T16:36:47.996Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/Extracurricular.html</loc>
<lastmod>2025-05-08T16:36:48.003Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Code Snippets/Monoid.html</loc>
<lastmod>2025-05-09T07:18:58.729Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Webapp-Example/Main.hs.html</loc>
<lastmod>2025-05-09T18:04:40.395Z</lastmod>
<loc>https://drezil.de/Coding/Haskell/FFPiH.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Webapp-Example/index.html</loc>
<lastmod>2025-05-09T19:20:12.478Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Lenses.html</loc>
<lastmod>2025-05-09T07:10:26.159Z</lastmod>
<loc>https://drezil.de/Coding/Haskell/Advantages.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Health/Issues.html</loc>
<lastmod>2025-05-09T19:29:56.847Z</lastmod>
<loc>https://drezil.de/About/Extracurricular.html</loc>
<lastmod>2025-06-05T08:31:05.677Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Opinions/Editors.html</loc>
<lastmod>2025-05-09T18:29:47.541Z</lastmod>
<loc>https://drezil.de/About/Work.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Stuff/Bielefeldverschwoerung.html</loc>
<lastmod>2025-05-09T18:31:48.525Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/index.html</loc>
<lastmod>2025-05-09T19:33:02.487Z</lastmod>
<loc>https://drezil.de/Writing/documentation.html</loc>
<lastmod>2025-06-05T09:18:09.816Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Writing/ner4all-case-study.html</loc>
<lastmod>2025-06-05T08:31:05.697Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Writing/Obsidian-RAG.html</loc>
<lastmod>2025-05-09T19:08:56.279Z</lastmod>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/index.html</loc>
<lastmod>2025-06-05T08:31:05.757Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/Experience.html</loc>
<lastmod>2025-06-05T08:31:05.677Z</lastmod>
</url>
<url>
<loc>https://drezil.de/About/index.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Webapp-Example/Main.hs.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Webapp-Example/MyService_Types.hs.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Code Snippets/Monoid.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Coding/Haskell/Lenses.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Opinions/Editors.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
<url>
<loc>https://drezil.de/Health/Issues.html</loc>
<lastmod>2025-06-05T08:31:05.687Z</lastmod>
</url>
</urlset>