Skip to content
Snippets Groups Projects
Commit 8f3e8a27 authored by Horea Christian's avatar Horea Christian
Browse files

Demo re-write

parent eb6025f3
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env bash
wget https://raw.githubusercontent.com/IBT-FMI/SAMRI/master/setup.py -O samri/setup.py
scientific_software_management/img/fork.png

24.6 KiB

scientific_software_management/img/git.png

5.85 KiB

scientific_software_management/img/pr.png

19 KiB

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']
},
)
......@@ -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}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment