diff --git a/scientific_software_management/get_samri_data.sh b/scientific_software_management/get_samri_data.sh new file mode 100755 index 0000000000000000000000000000000000000000..ca2d64584837c1b6ccdf4adcb3af5d9e5d929835 --- /dev/null +++ b/scientific_software_management/get_samri_data.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +wget https://raw.githubusercontent.com/IBT-FMI/SAMRI/master/setup.py -O samri/setup.py diff --git a/scientific_software_management/img/fork.png b/scientific_software_management/img/fork.png new file mode 100644 index 0000000000000000000000000000000000000000..12bcd26d8f71db5c637504e669221e5be086e859 Binary files /dev/null and b/scientific_software_management/img/fork.png differ diff --git a/scientific_software_management/img/git.png b/scientific_software_management/img/git.png new file mode 100644 index 0000000000000000000000000000000000000000..18c5b29d788326339b39df657ad2c9134de2ac45 Binary files /dev/null and b/scientific_software_management/img/git.png differ diff --git a/scientific_software_management/img/pr.png b/scientific_software_management/img/pr.png new file mode 100644 index 0000000000000000000000000000000000000000..029e4b4a4ea58f31d8e26ddff450f69a0a392a4a Binary files /dev/null and b/scientific_software_management/img/pr.png differ diff --git a/scientific_software_management/samri/setup.py b/scientific_software_management/samri/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..e0613913351492c3a07e6633c8579c975149bbed --- /dev/null +++ b/scientific_software_management/samri/setup.py @@ -0,0 +1,23 @@ +from setuptools import setup, find_packages + +packages = find_packages(exclude=('samri.tests*', 'samri.*.tests*')) + +setup( + name="SAMRI", + version="9999", + description = "Small animal magnetic resonance imaging via Python.", + author = "Horea Christian", + author_email = "chr@chymera.eu", + url = "https://github.com/IBT-FMI/SAMRI", + keywords = ["fMRI", "pipelines", "data analysis", "bruker"], + classifiers = [], + install_requires = [], + provides = ["samri"], + packages = packages, + include_package_data=True, + extras_require = { + }, + entry_points = {'console_scripts' : \ + ['SAMRI = samri.cli:main'] + }, + ) diff --git a/scientific_software_management/slides.tex b/scientific_software_management/slides.tex index 7edc8a73529b65d53806e4fba1665c23b9c8a214..c74acd1328ec2de391b3a752446a3a7cf82f1e67 100644 --- a/scientific_software_management/slides.tex +++ b/scientific_software_management/slides.tex @@ -11,49 +11,80 @@ \begin{frame}{These Slides} Type one link, click all others: \begin{itemize} - \item Download \textcolor{lg}{\href{http://chymera.eu/pres/ld_packaging-sci/pres.pdf}{\texttt{chymera.eu/pres/ld\_foss/pres.pdf}}} + \item Download \textcolor{lg}{\href{https://thealternative.ch/ssm/slides.tex}{\texttt{thealternative.ch/ssm/slides.tex}}} \end{itemize} \end{frame} \section{Requirements} - \subsection{... for the Demo Session} + \subsection{... for the demo session} \begin{frame}{SSH} Linux and MacOS: \begin{itemize} \item check that you can run - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|ssh userXX@130.60.24.172| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|ssh YOURUSER@130.60.24.66| \end{itemize} Windows: \begin{itemize} \item Download and launch “Git for Windows†from \textcolor{lg}{\href{https://git-for-windows.github.io}{\texttt{git-for-windows.github.io}}} \item check that you can run - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|ssh userXX@130.60.24.172| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|ssh YOURUSER@130.60.24.66| \end{itemize} \end{frame} - \begin{frame}{GitHub Account} + \begin{frame}{Command Line Text Editor} + Usable via SSH and ubiquitous. There are many alternatives, but here we use \textcolor{lg}{\texttt{nano}}: + \begin{itemize} + \item Open file + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|nano file| + \item Save via: \keys{Ctrl + c} + \item Exit via: \keys{Ctrl + x} + \end{itemize} + \end{frame} + \begin{frame}{Git and Social Coding} + Git needs to know who you are. + \begin{itemize} + \item On the server, run: + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git config --global user.name "Your Name"| + \vspace{-3.1em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git config --global user.email yourname@example.com| + \end{itemize} + GitHub is a \textbf{social coding platform} providing free accounts: \begin{itemize} \item Register under \textcolor{lg}{\href{https://github.com}{\texttt{github.com}}} + \item Use a password which you can remember. \end{itemize} \end{frame} \section{What?} - \subsection{What is Packaging?} + \subsection{What is software management?} \begin{frame}{The Package} + \begin{center} + \textcolor{ldorange}{\Large Better organization for your research!} + \end{center} + \vspace{1.5em} + A package is a software format which is (easily): + \begin{multicols}{2} \begin{itemize} - \item distributable (i.e. installable) + \item distributable \item integrated \item testable \item updateable \item uninstallable \item understandable \end{itemize} + \end{multicols} \end{frame} \begin{frame}{Package Management --- best done automatically} \begin{minipage}{0.44\textwidth} Packages interact in complex and nontrivial manners: \begin{itemize} - \item architecture requirements - \item dependencies (incl. blockers, version-dependent behaviour, static/dynamic linking) + \item version-dependent behaviour + \item optional features + \item incompatibilities + \item static/dynamic linking \end{itemize} \end{minipage} \begin{minipage}{0.55\textwidth} @@ -68,14 +99,14 @@ \begin{figure} \centering \includegraphics[width=0.9\textwidth]{img/pm_d.png} - \caption{Rudimentary overview of binary package distribution workflow.} + \caption{Rudimentary overview of binary package distribution.} \end{figure} \begin{columns} \column{.5\linewidth} Advantages: \begin{itemize} \item Faster installation - \item More reproducible installation + \item Less variable installation \end{itemize} \column{.5\linewidth} Disadvantages: @@ -86,11 +117,11 @@ \end{itemize} \end{columns} \end{frame} - \begin{frame}{Source Packages} + \begin{frame}{Source-Based Packages} \begin{figure} \centering \includegraphics[width=0.9\textwidth]{img/pm_g.png} - \caption{Rudimentary overview of source distribution workflow.} + \caption{Rudimentary overview of source-based package distribution.} \end{figure} \begin{columns} \column{.5\linewidth} @@ -109,16 +140,14 @@ \end{columns} \end{frame} \section{Why?} - \subsection{Why Package my Software?} - \begin{frame}{Recognition} + \subsection{Why does open science require package management?} + \begin{frame}{Quality} \begin{itemize} - \item Establish proof of authorship. - \item Publicize your innovative workflows, solutions, data structures. - \item Create a handle for attribution (including DOI), e.g: - \begin{itemize} - \item BehavioPy: \textcolor{lg}{\href{http://doi.org/10.5281/zenodo.188169}{\texttt{10.5281/zenodo.188169}}} - \item Nipype: \textcolor{lg}{\href{http://doi.org/10.5281/zenodo.50186}{\texttt{10.5281/zenodo.50186}}} - \end{itemize} + \item Make development more transparent. + \item Get \textbf{constructive} feedback. + \item Ask for help with concrete reproducible examples. + \item Easily manage \textcolor{lg}{\href{https://github.com/gentoo-science/sci/issues}{\texttt{bugs/issues}}} and \textcolor{lg}{\href{https://github.com/gentoo-science/sci/pulls}{\texttt{conributions}}}. + \item Implement proper version tracking. \end{itemize} \end{frame} \begin{frame}{Impact} @@ -128,34 +157,37 @@ \item Retain more users. \end{itemize} \end{frame} - \begin{frame}{Quality} + \begin{frame}{Recognition} \begin{itemize} - \item Make development more transparent. - \item Get \textbf{constructive} feedback. - \item Ask for help with concrete reproducible examples. - \item Easily manage \textcolor{lg}{\href{https://github.com/gentoo-science/sci/issues}{\texttt{bugs/issues}}} and \textcolor{lg}{\href{https://github.com/gentoo-science/sci/pulls}{\texttt{conributions}}}. - \item Implement proper version tracking. + \item Establish proof of authorship. + \item Publicize your innovative workflows, solutions, data structures. + \item Create a handle for attribution (including DOI), e.g: + \begin{itemize} + \item BehavioPy: \textcolor{lg}{\href{http://doi.org/10.5281/zenodo.188169}{\texttt{10.5281/zenodo.188169}}} + \item Nipype: \textcolor{lg}{\href{http://doi.org/10.5281/zenodo.50186}{\texttt{10.5281/zenodo.50186}}} + \end{itemize} \end{itemize} \end{frame} \begin{frame}{Sustainability} + A sustainable project \textbf{cannot} depend on environments remaining unchanged. \begin{itemize} + \item Ensure long-term viability of your software. \item Avoid death-by-PhD. - \item Ensure long-term availability of your software. - \item Give your funding bodies their money's worth. + \item Give your funders their money's worth. \item Develop a lean start-up. - \item Maintain a sustainable and affordable infrastructure for your business/employer. + \item Maintain a reliable and affordable infrastructure for your work. \end{itemize} \end{frame} \begin{frame}{Why Not?} \begin{itemize} \item Don't be afraid of your software not being “good/unique enoughâ€! - \item Don't be wait until your software is “readyâ€! + \item Don't wait until your software is “readyâ€! \item A lot of research software you are already using is not written by “professional†programmers. \end{itemize} \end{frame} \section{How?} - \subsection{How Do I Package my Software?} - \begin{frame}{Choose an Environment} + \subsection{How do I package my software?} + \begin{frame}{Choose Appropriate Technologies} \begin{columns} \column{.5\linewidth} \begin{figure} @@ -171,56 +203,67 @@ \end{figure} \end{columns} \end{frame} - \begin{frame}{Reposit Your Software} - \begin{itemize} - \item Bitbucket - \item GitHub - \item GitLab - \item ... - \end{itemize} - \end{frame} \begin{frame}{Python Package Distribution} \begin{columns} - \column{.4\linewidth} + \column{.55\linewidth} You can package your python software by writing \textbf{one short} file. \begin{itemize} - \item Python provides its own package management, e.g. via \textcolor{lg}{\href{https://packaging.python.org/distributing/}{\texttt{setuptools}}}. + \item Python provides its own limited package management, e.g. via \textcolor{lg}{\href{https://packaging.python.org/distributing/}{\texttt{setuptools}}}. \item Package metadata saved in \texttt{setup.py}, e.g. \textcolor{lg}{\href{https://github.com/IBT-FMI/SAMRI/blob/master/setup.py}{\texttt{SAMRI/setup.py}}} \end{itemize} - \column{.6\linewidth} - \begin{figure} - \centering - \includegraphics[width=0.9\textheight]{img/sp.png} - \end{figure} + \column{.45\linewidth} + \inputminted[bgcolor=tlg,fontsize=\Tiny,tabsize=4]{python}{samri/setup.py} \end{columns} \end{frame} \begin{frame}{Gentoo Packages} \begin{columns} - \column{.4\linewidth} - You can package your software for Gentoo by writing \textbf{one short} file. + \column{.55\linewidth} + A Gentoo package is \textbf{one short} file. \begin{itemize} - \item Gentoo packages metadata/instruction text files - \item The Gentoo package manager understands external package management formats, e.g. as seen in \textcolor{lg}{\href{https://github.com/TheChymera/overlay/blob/master/sci-biology/samri/samri-9999.ebuild}{\texttt{=sci-biology/samri-9999}}} + \item regardless of the programming language + \item can automatically interpret information contained in the package, e.g. in \textcolor{lg}{\texttt{setup.py}} \end{itemize} - \column{.6\linewidth} - \begin{figure} - \centering - \includegraphics[width=0.7\textheight]{img/eb.png} - \end{figure} + \column{.47\linewidth} + \vspace{-3em} + \inputminted[bgcolor=tlg,fontsize=\Tiny,tabsize=4,firstline=1,lastline=36]{bash}{samri/samri-0.4.ebuild} + \vspace{-3.2em} + \inputminted[bgcolor=tlg,fontsize=\Tiny,tabsize=4,firstline=47,lastline=49]{bash}{samri/samri-0.4.ebuild} \end{columns} \end{frame} + \begin{frame}{Reposit Your Software} + \begin{figure} + \centering + \includegraphics[width=0.4\textwidth]{img/git.png} + \caption{Git Logo by Jason Long (\href{https://creativecommons.org/licenses/by/3.0/}{CC-BY-3.0})} + \end{figure} + You can self-host, but hosting also available via social coding platforms: + \begin{multicols}{3} + \begin{itemize} + \item GitLab + \item GitHub + \item Bitbucket + \end{itemize} + \end{multicols} + \end{frame} \section{Demo} \subsection{Put what you have learned into practice, and start typing...} \begin{frame}{A Few Basic Gentoo Commands} \begin{itemize} \item check available package names, versions, and details - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|eix samri| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|eix nibabel| \item see package dependencies - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|equery g samri| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|equery g nibabel| \item see what packages depend on a said package - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|equery d nipype| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|equery d nibabel| + \item see files installed by package + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|equery f nibabel| \item try to install a new package - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|emerge -p =nilearn-0.1.4.1| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|emerge -p nibabel| \end{itemize} \end{frame} \begin{frame}{Reproduce a Scientific Article} @@ -229,22 +272,26 @@ \item Get the source code for brand-new articles: \begin{itemize} \item Work-in-progress (reexecution time \SI{\approx 3}{\second}) - \vspace{-0.5em} + \vspace{-0.6em} \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone https://gitlab.com/Chymera/nvcz.git | \item Preprint (reexecution time \SI{\approx 2}{\minute}) - \vspace{-0.5em} - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone git clone https://bitbucket.org/TheChymera/irsabi.git | + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone https://bitbucket.org/TheChymera/irsabi.git | \end{itemize} \item Switch to article directory - \vspace{-0.5em} + \vspace{-0.6em} \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cd nvcz| \item Attempt to reexecute - \vspace{-0.5em} + \vspace{-0.6em} \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|./compile.sh| %\mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git chechout 28b5d2d1| \end{itemize} \end{frame} \begin{frame}{What happened? Dependency requirements happened.} + \begin{center} + \textcolor{ldorange}{\Large But you can solve the issue yourself!} + \end{center} + \vspace{2em} Write a new package atom for the package manager. \begin{itemize} \item Gentoo Linux makes this wholly autonomous. @@ -255,28 +302,130 @@ \end{itemize} \end{itemize} \end{frame} - \begin{frame}{Write an ebuild} + \begin{frame}{Write a Package Atom --- The Overlay} \begin{itemize} - \Item Fork an overlay on GitHub. - \textcolor{lg}{\href{https://github.com/TheChymera/overlay}{\texttt{github.com/TheChymera/overlay}}} + \item Fork an overlay on GitHub, e.g. from \textcolor{lg}{\href{https://github.com/TheChymera/overlay}{\texttt{github.com/TheChymera/overlay}}} + \begin{figure} + \vspace{-0.1em} + \includegraphics[width=0.94\textwidth]{img/fork.png} + \end{figure} \item Go back to your home directory. - \vspace{-0.5em} + \vspace{-0.6em} \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cd| \item Clone your fork of the overlay. - \vspace{-0.5em} - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone https://github.com/TheChymera/overlay.git| - \item Clone your fork of the overlay. - \vspace{-0.5em} - \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone https://github.com/TheChymera/overlay.git| + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git clone https://github.com/YourName/overlay.git| + \item Make the ebuild directory, and navigate into it. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|mkdir -p overlay/sci-biology/samri && cd $_|%stopzone + \end{itemize} + \end{frame} + \begin{frame}{Transparency means less work for you!} + You could write the following files from scratch, but you can also reuse analogous files from existing packages. + \begin{itemize} + \item Copy a metadata file from a Python package + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cp /usr/portage/sci-libs/nibabel/metadata.xml .| + \item Copy an ebuild file from a Python package + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cp /usr/portage/sci-libs/nibabel/*2.5.1.ebuild samri-0.4.ebuild| + \end{itemize} + \end{frame} + \begin{frame}{Write a Package Atom --- The Metadata File} + \vspace{-0.9em} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4]{xml}{samri/metadata.xml} + \end{frame} + \begin{frame}{Write a Package Atom --- The Ebuild (header excerpt)} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4,firstline=1,lastline=17]{bash}{samri/samri-0.4.ebuild} + \end{frame} + \begin{frame}{Write a Package Atom --- The Ebuild (dependency excerpts)} + \begin{itemize} + \item Compile-time dependency example: + \vspace{-0.6em} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4,firstline=18,lastline=25]{bash}{samri/samri-0.4.ebuild} + \item Run-time dependency DIY (fill out, consulting \textcolor{lg}{\href{https://github.com/IBT-FMI/SAMRI}{\texttt{github.com/IBT-FMI/SAMRI}}}): + \vspace{-0.6em} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4,firstline=26,lastline=29]{bash}{samri/samri-0.4.ebuild} + \vspace{-3em} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4,firstline=47,lastline=47]{bash}{samri/samri-0.4.ebuild} + \end{itemize} + \end{frame} + \begin{frame}{Write a Package Atom --- Finishing Touches} + \begin{itemize} + \item Not all packages are perfect. Append the following to the ebuild. + \vspace{-0.6em} + \inputminted[bgcolor=tlg,fontsize=\scriptsize,tabsize=4,firstline=49,lastline=49]{bash}{samri/samri-0.4.ebuild} + \item Check your work. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|wget https://thealternative.ch/ssm/samri/samri-0.4.ebuild -P ~| + \vspace{-3.1em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|colordiff ~/samri-0.4.ebuild samri-0.4.ebuild| + \vspace{-3.1em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|wget https://thealternative.ch/ssm/samri/metadata.xml -P ~| + \vspace{-3.1em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|colordiff ~/metadata.xml metadata.xml| + \end{itemize} + \end{frame} + \begin{frame}{Social Coding --- Upload Your Package for Reuse} + \begin{itemize} + \item Quality Control. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|repoman full| + \item Record and publish your work in version control. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git commit -a && git push origin master| + \item Include your work in widely used overlay: visit \textcolor{lg}{\href{https://github.com/YourName/overlay}{\texttt{github.com/YourName/overlay}}}. + \begin{figure} + \vspace{-0.1em} + \includegraphics[width=0.94\textwidth]{img/pr.png} + \end{figure} + \end{itemize} + \end{frame} + \begin{frame}{Use Your Work} + \begin{itemize} + \item Package index update (done by the superuser). + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|eix-sync| + \item Try out the install command yourself. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|emerge -pv samri| + \item Install (done by the superuser). + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|emerge -v samri| + \end{itemize} + \end{frame} + \begin{frame}{The Article Environment is Now Reproducible} + \begin{itemize} + \item Navigate back to the article directory. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cd ~/nvcz| + \item Compile. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|./compile| + \item Log out from SSH: \keys{Ctrl + d} + \item Get the document locally. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|scp YOURUSER@130.60.24.66:nvcz/article.pdf .| \end{itemize} \end{frame} - \begin{frame}{Write Packaged Free and Open Source Scientific Software} - \begin{enumerate} - \item correct URL in \textcolor{lg}{\href{https://github.com/IBT-FMI/SAMRI/blob/master/setup.py}{\texttt{SAMRI/setup.py}}} - \item Add notice of dependency on nilearn in \textcolor{lg}{\href{https://github.com/IBT-FMI/SAMRI/blob/master/README.md}{\texttt{SAMRI/README.md}}} - \item Add notice of dependency on nilearn in \textcolor{lg}{\href{https://github.com/TheChymera/overlay/blob/master/sci-biology/samri/samri-9999.ebuild}{\texttt{=sci-biology/samri-9999}}} - \item Remove \texttt{dcmstack} import and dependency from the SAMRI source and the Gentoo SAMRI package - \end{enumerate} + \begin{frame}{And the Article is now Automated} + \begin{itemize} + \item Log back in and navigate to article directory. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|ssh YOURUSER@130.60.24.66| + \vspace{-3.1em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|cd nvcz| + \item Automatically adjust the t-statistic threshold for the entire document. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}:grep -rlI 3\.5 | xargs sed -i -e "s/3.5/3.0/g": + \item Visualize what you have changed. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|git diff| + \item Compile, log out. + \item Get the document locally. + \vspace{-0.6em} + \mint[bgcolor=tlg,fontsize=\footnotesize]{bash}|scp YOURUSER@130.60.24.66:nvcz/article.pdf newarticle.pdf| + \end{itemize} \end{frame} @@ -290,19 +439,20 @@ \textcolor{lg}{in a few minutes} \item Get help with running your own Gentoo Linux data analysis server\\ \textcolor{lg}{in a few hours} - \item Spread the word\\ + \item Spread package management in your field\\ \textcolor{lg}{tomorrow at work} \end{itemize} \end{frame} \begin{frame}{These Slides} \begin{itemize} - \item \textcolor{lg}{Latest Slides:}\\ \url{http://chymera.eu/pres/ld_packaging-sci/pres.pdf} - \item \textcolor{lg}{Source:}\\ \url{https://bitbucket.org/TheChymera/ld_packaging-sci/} + \item \textcolor{lg}{Latest Slides:}\\ + \texttt{\href{https://thealternative.ch/ssm/slides.tex}{thealternative.ch/ssm/slides.tex}} + \item \textcolor{lg}{Source:}\\ + \texttt{\href{https://gitlab.ethz.ch/thealternative/courses/tree/master/scientific_software_management}{\footnotesize gitlab.ethz.ch/thealternative/courses/tree/master/scientific\_software\_management}} \end{itemize} %separate sources from info so it looks nicer \begin{itemize} \item \textcolor{lg}{License:} \href{https://creativecommons.org/licenses/by-sa/3.0/}{CC BY-SA 3.0} - \item \small\textcolor{lg}{Special Thanks to} Mickey Vaenskae \end{itemize} \end{frame} \begin{frame}{References}