\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{datetime}
\usetheme{Madrid}  
\usecolortheme{crane}

% für Verbatim
\usepackage{fancyvrb}

\title{Persistenz}
\author{\href{https://kohnlehome.de}{Franz Kohnle}}
%\institute{\href{https://kohnlehome.de}{kohnlehome.de}}

\begin{document}
\maketitle
%\frame{\tableofcontents[currentsection]}

\section{Persistenz}
\begin{frame} 
    \frametitle{Persistenz} 
    \begin{block}{Persistenz}
      Dauerhafte Speicherung von Daten,\\
  auch nachdem das Programm beendet wurde.
    \end{block}  
  \end{frame}
  
\begin{frame} 
    \frametitle{Persistenz} 
    \begin{itemize}
        \item Binärdateien
        \item Textdateien
        \begin{itemize}
            \item CSV
            \item XML
            \item JSON
            \item YAML
        \end{itemize}  
        \item Datenbanken
        \begin{itemize}
            \item Relationale Datenbanken (MySQL, MariaDB, Oracle, …)
            \item NoSQL-Datenbanken (MongoDB, Redis, ...)
        \end{itemize}        
    \end{itemize}
\end{frame}

\begin{frame} 
    \frametitle{Persistenz: Binärdateien} 
    \begin{block}{Binärdateien}
        können nur mit speziellen Programmen gelesen und geschrieben werden.
      \end{block}

    \begin{itemize}
        \item .xlsx
        \item .jpg
        \item \dots
    \end{itemize}
\end{frame}
  
\begin{frame} 
    \frametitle{Persistenz: Textdateien} 
    \begin{block}{Textdateien}
        \begin{itemize}
            \item enthalten nur darstellbare Zeichen.
            \item Zum Lesen und Bearbeiten wird nur ein Texteditor benötigt.
            \item Zu beachten ist die Zeichencodierung (z.B. UTF-8).
        \end{itemize}        
      \end{block}    
\end{frame}

\begin{frame} 
    \frametitle{Persistenz: Texteditoren} 
    \begin{block}{Texteditoren}
        \begin{itemize}
            \item Windows Notepad
            \item Notepad++
            \item Vim
            \item nano
            \item VS Code
            \item ...
        \end{itemize}        
      \end{block}   
\end{frame}

\begin{frame} 
    \frametitle{Persistenz: Texteditoren} 
    \huge{\centerline{Texteditor  $\neq$ Textverarbeitungsprogramm}}
    \small{
    \begin{block}{Textverarbeitungsprogramme}
        \begin{itemize}
            \item MS Word
            \item LibreOffice Writer 
            \item ...
        \end{itemize}        
      \end{block} 
    }  
\end{frame}

\begin{frame} 
    \frametitle{Persistenz: Textformate} 
    
    \begin{block}{Dateiformate von Textdateien}
        \begin{itemize}
            \item TXT
            \item CSV 
            \item XML
            \item JSON
            \item YAML
        \end{itemize}        
      \end{block}
\end{frame}

\begin{frame}[fragile] 
    \frametitle{Persistenz: CSV}    
    \begin{block}{CSV}
        \begin{itemize}
            \item "\textbf{C}omma \textbf{S}eparated \textbf{V}alues"
            \item Dateiformat zur Speicherung \textbf{einer Tabelle}
        \end{itemize}
      \end{block}
      
      \begin{block}{personen.csv}
        \begin{verbatim}
            vorname,nachname,alter
            Anna,Arm,25
            Berta,Bein,22
            Carla,Copf,26
        \end{verbatim}
      \end{block}
\end{frame}

\begin{frame}[fragile] 
    \frametitle{Persistenz: XML}    
    \begin{block}{XML}
        \begin{itemize}
            \item "E\textbf{x}tensible \textbf{M}arkup \textbf{L}anguage"
            \item Auszeichnungssprache zur Darstellung \textbf{hierarchisch strukturierter} Daten
        \end{itemize}
      \end{block}
      
      \begin{block}{personen.xml}
        \begin{Verbatim}[fontsize=\small]
<menschen>
    <person vorname="Anna"  nachname="Arm"  alter="25" />
    <person vorname="Berta" nachname="Bein" alter="22" />
    <person vorname="Carla" nachname="Copf" alter="25" />    
</menschen>
        \end{Verbatim}
      \end{block}
\end{frame}

\begin{frame}[fragile] 
    \frametitle{Persistenz: XML}
      \begin{block}{personen.xml (ohne Attribute)}
        \begin{Verbatim}[fontsize=\tiny]
            <menschen>
                <person>
                    <vorname>Anna</vorname>
                    <nachname>Arm</nachname>
                    <alter>25</alter>
                </person>
        
                <person>
                    <vorname>Berta</vorname>
                    <nachname>Bein</nachname>
                    <alter>22</alter>
                </person>
        
                <person>
                    <vorname>Carla</vorname>
                    <nachname>Copf</nachname>
                    <alter>25</alter>
                </person>
            </menschen>
        \end{Verbatim}
      \end{block}
\end{frame}

\begin{frame}[fragile] 
    \frametitle{Persistenz: JSON}    
    \begin{block}{JSON}
        \begin{itemize}
            \item "\textbf{J}ava\textbf{S}cript \textbf{O}bject \textbf{N}otation"
            \item Datenformat zum Austausch zwischen Anwendungen
        \end{itemize}
      \end{block}
      
      \begin{block}{personen.json}
\begin{Verbatim}[fontsize=\small]
[
    { "vorname": "Anna", "nachname": "Arm", "alter": 25},
    { "vorname": "Berta", "nachname": "Bein", "alter": 22},
    { "vorname": "Carla", "nachname": "Copf", "alter": 25}
]            
\end{Verbatim}
      \end{block}
\end{frame}

\begin{frame}[fragile] 
    \frametitle{Persistenz: YAML}    
    \begin{block}{YAML}
        \begin{itemize}
            \item "\textbf{Y}AML \textbf{A}in't \textbf{M}arkup \textbf{L}anguage"
            \item Superset von JSON
            \item Datenformat für Konfigurationsdateien
        \end{itemize}
      \end{block}
      
      \begin{block}{personen.yaml}
\begin{Verbatim}[fontsize=\small]
---
- vorname: Anna
  nachanme: Arm
  alter: 25
- vorname: Berta
  nachanme: Bein
  alter: 22
- vorname: Carla
  nachanme: Copf
  alter: 25
\end{Verbatim}
      \end{block}
\end{frame}
\end{document}