\documentclass[usepdftitle=false,hyperref={pdfpagelabels=false}]{beamer}
\usepackage{../templates/myStyle}

\begin{document}
\title{\titleText}
\subtitle{Five-in-A-Row, Multithreading}
\author{\tutor}
\date{\today}
\subject{Programmieren}

\frame{\titlepage}

\frame{
    \frametitle{Inhaltsverzeichnis}
    \setcounter{tocdepth}{1}
    \tableofcontents
    \setcounter{tocdepth}{2}
}

%\AtBeginSection[]{
%    \InsertToC[sections={\thesection}]  % shows only subsubsections of one subsection
%}

\section{Einleitung}
\subsection{Quiz}
\begin{frame}{Quiz}
    \begin{minipage}[b]{0.45\linewidth}
        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizMain.java}
    \end{minipage}
    \hspace{0.5cm}
    \begin{minipage}[b]{0.45\linewidth}
        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{QuizSum.java}
        \vspace{3.5cm}
    \end{minipage}
\end{frame}

\begin{frame}{Quiz: Race-Condition}
    \begin{itemize}[<+->]
        \item \myCode{bigSum++;} ist nicht atomar:
        \item[] 3 Operationen: Wert holen, Wert erhöhen, Wert schreiben
        \item[$\Rightarrow$] Ergebnis ist zufällig
        \item Alles im Bereich $[BIG\_NR, 50 \cdot BIG\_NR]$ ist möglich:
            \begin{enumerate}
                \item Thread 1 holt sich den Wert von \texttt{bigSum}
                \item Thread 2 - 50 laufen durch
                \item Thread 1 erhöht den zuvor geholten Wert um 1
                \item Thread 1 überschreibt \texttt{bigSum} mit 2
                \item Thread 1 läuft durch
            \end{enumerate}
        \item Sind kleinere Werte möglich?
    \end{itemize}
\end{frame}

\begin{frame}{Quiz: Race-Condition}
    Sind kleinere Werte als \texttt{BIG\_NR} für \texttt{bigSum} möglich?
    \begin{enumerate}[<+->]
        \item[] Ja:
        \item Thread 1 holt sich den Wert von \texttt{bigSum}
        \item Thread 2 holt sich den Wert von \texttt{bigSum}
        \item Thread 3 - 50 laufen durch
        \item Thread 2 läuft bis 1 vorm Ende durch
        \item Thread 1 erhöht Wert im Register von 0 auf 1 und schreibt 1
        \item Thread 2 hohlt sich die 1 aus \texttt{bigSum}
        \item Thread 1 läuft durch
        \item Thread 2 erhöht Wert im Register von 1 auf 2 und schreibt 2
        \item[$\Rightarrow$] Alle Werte in $[2, 50 \cdot BIG\_NR]$ sind möglich!
        \item[] Wie löst man das Problem?
    \end{enumerate}
\end{frame}

\begin{frame}{Quiz}
    Wie löst man das Problem:?

    Mit
    \href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html}{AtomicLong}
    aus
    \href{http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html}{java.util.concurrent}
\end{frame}

\begin{frame}{Quiz}
    \begin{minipage}[b]{0.45\linewidth}
        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{AnswerMain.java}
    \end{minipage}
    \hspace{0.5cm}
    \begin{minipage}[b]{0.45\linewidth}
        \inputminted[linenos=true, numbersep=5pt, tabsize=4, fontsize=\tiny]{java}{AnswerSum.java}
        \vspace{3.5cm}
    \end{minipage}
\end{frame}

\section{Abschlussaufgaben}
\subsection{Abschlussaufgaben}
\begin{frame}{Abschlussaufgaben}
    \begin{itemize}
        \item Herangehensweise
            \begin{itemize}
                \item Genau lesen
                \item Frühzeitig lösen, viel Testen (Am besten schon heute!)
                \item Bei Unklarheiten frühzeitig fragen!
            \end{itemize}
        \item Ausgabe
            \begin{itemize}
                \item Genau die erwartete Ausgabe liefern
                \item An \myCode{toString()} denken
            \end{itemize}
        \item Trennung von Logik und Shell
            \begin{itemize}
                \item Siehe \href{https://github.com/MartinThoma/prog-ws1213/tree/master/Blatt-05.5}{Lösung zur Aufgabe 5.5}
            \end{itemize}
        \item Code
            \begin{itemize}
                \item \myCode{equals()}, \myCode{compareTo()} nutzen wenn sinnvoll
                \item Exceptions einbauen, sollte der Nutzer aber nie sehen!
                \item Gute JavaDoc!
            \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}{Abschlussaufgaben}
    Bepunktung:
    \begin{itemize}
        \item Punkte für Funktionalität
        \item Punkte für Programmier-Stil
        \item Nicht unbedingt gleich gewichtet
    \end{itemize}
\end{frame}

% http://www.tutorialspoint.com/java/java_multithreading.htm
%TODO David Kulicke - Nr. 13

\section{Spiele}
\subsection{Spiele}
\begin{frame}{Spiele}
  Anleitung für Snake, Tetris, Sokuban, Breakout \dots ist \href{http://zetcode.com/tutorials/javagamestutorial/}{hier}.
\end{frame}

\section{Multithreading}
\subsection{Multithreading}
\begin{frame}{Multithreading}
    \begin{itemize}
        \item \href{http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html}{Runnable}
        \item \href{http://www.vogella.com/articles/JavaConcurrency/article.html}{Java Concurrency (Multithreading) - Tutorial}
        \item \href{http://www.tutorialspoint.com/java/java_multithreading.htm}{Java - Multithreading}
    \end{itemize}
\end{frame}

\section{Abspann}
\subsection{Kommende Tutorien}
\begin{frame}{Kommende Tutorien}
  \begin{itemize}
    \item[1.] 28.01.2013: Abschlussprüfunsvorbereitung
    \item[0.] 04.02.2013: Abschlussprüfunsvorbereitung
    \item[-] 10.02.2013: Ende der Vorlesungszeit des WS 2012/2013 (\href{http://www.kit.edu/studieren/2873.php}{Quelle})
  \end{itemize}
\end{frame}

\framedgraphic{Vielen Dank für eure Aufmerksamkeit!}{../images/Teach-yourself-C++-in-21-days.png}

\end{document}
