\documentclass{beamer}
\usetheme{Marburg}
\setbeamercovered{transparent}

\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}

\usepackage{listings}
\lstset{showstringspaces=false}
\lstset{basicstyle=\small}

\usepackage{tikz}
\usetikzlibrary{shapes}
\tikzstyle{pfeil}=[->,thick]
\tikzstyle{doku}=[->,thick,bend right=60,swap]
\tikzstyle{klinik}=[ellipse,draw,fill=red!20,thick]
\tikzstyle{studie}=[rectangle,draw,thick,fill=red!20,inner sep=0mm,minimum size=6mm]
\tikzstyle{neutral}=[rectangle,draw,thick,inner sep=0mm,minimum size=6mm]
\tikzstyle{verbli}=[rectangle,draw,thick,fill=green!20,inner sep=0mm,minimum size=6mm]
\tikzstyle{experte}=[ellipse,draw,fill=green!20,thick]

\AtBeginSection[]
{
    \begin{frame}
        \frametitle{Übersicht}
        \tableofcontents[currentsection]
    \end{frame}
}

\title{DC-Rap -- Technischer Import von medizinischen Bilddaten}
\author{Volker Grabsch}
\date{29. Januar 2008}

\begin{document}

\begin{frame}
    \titlepage
\end{frame}

\begin{frame}
    \frametitle{Allgemeines}

    \begin{itemize}
    \item Dieser Vortrag ist veröffentlicht unter \\
        \url{http://www.profv.de/dc-rap/}

    \vfill

    \item Dieser Vortrag ist lizensiert unter \\
        \href{http://creativecommons.org/licenses/by/3.0/deed.de}{%
        % CC-Icons heruntergeladen von:
        % http://creativecommons.org/presskit
        \includegraphics{by} \\
        Creative Commons BY 3.0}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Übersicht}
    \tableofcontents
\end{frame}

\section{Einsatzgebiet von DC-Rap}

\begin{frame}
    \frametitle{Blinded Readings}
    % auch:
    % - Independent Radiologic Imaging Review
    % - Independent Radiologic Review
    % - Independent Blinded Radiologic Review
    % - Blinded Independent Radiologic Review

    \begin{tikzpicture}[node distance=1.5cm]
    \node [experte] (Experte3)                              {Experte};
    \node [experte] (Experte2)      [left of=Experte3]      {Experte};
    \node [experte] (Experte1)      [left of=Experte2]      {Experte};
    \node [experte] (Experte4)      [right of=Experte3]     {Experte};
    \node [experte] (Experte5)      [right of=Experte4]     {Experte};
    \node [verbli]  (Verblindung)   [above of=Experte3]     {}
        edge [pfeil]    (Experte1)
        edge [pfeil]    (Experte2)
        edge [pfeil]    (Experte3)
        edge [pfeil]    (Experte4)
        edge [pfeil]    (Experte5);
    \node [studie]  (Studie)        [above of=Verblindung]  {}
        edge [pfeil]    node[auto] {Tech.\ Import / Verblindung} (Verblindung);
    \node [klinik]  (Klinik3)       [above of=Studie]       {Klinik}
        edge [pfeil]    (Studie);
    \node [klinik]  (Klinik2)       [left of=Klinik3]       {Klinik}
        edge [pfeil]    (Studie);
    \node [klinik]  (Klinik1)       [left of=Klinik2]       {Klinik}
        edge [pfeil]    (Studie);
    \node [klinik]  (Klinik4)       [right of=Klinik3]      {Klinik}
        edge [pfeil]    (Studie);
    \node [klinik]  (Klinik5)       [right of=Klinik4]      {Klinik}
        edge [pfeil]    (Studie);
    \end{tikzpicture}

    \pause
    \bigskip

    \begin{itemize}
    \item Ziel: größtmögliche Objektivität der Experten
    \pause
    \item Transparenz
    \item Dokumentation
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Technischer Import / Verblindung}

    \begin{tikzpicture}[node distance=1.3cm]
    \node [verbli]  (Verblindung)                                   {};
    \node [neutral] (Anonymisierung)    [above of=Verblindung]      {}
        edge [pfeil]    node[auto] {Verblindung}    (Verblindung);
    \node [neutral] (Markierung)        [above of=Anonymisierung]   {}
        edge [pfeil]    node[auto] {Anonymisierung} (Anonymisierung);
    \node [neutral] (Reparatur)         [above of=Markierung]       {}
        edge [pfeil]    node[auto] {Markierung}     (Markierung);
    \node [neutral] (Ueberpruefung)     [above of=Reparatur]        {}
        edge [pfeil]    node[auto] {Reparatur}      (Reparatur);
    \node [studie]  (Studie)            [above of=Ueberpruefung]    {}
        edge [pfeil]    node[auto] {Überprüfung}    (Ueberpruefung)
        edge [doku]     node[auto] {Dokumentation}  (Verblindung);
    \end{tikzpicture}
\end{frame}

\begin{frame}
    \frametitle{DC-Rap}

    \begin{itemize}
    \item Auftraggeber
        \begin{itemize}
        \item \href{http://de.wikipedia.org/wiki/Bayer\_Schering\_Pharma}{Bayer Schering Pharma AG}
        \end{itemize}
    \item Auftragnehmer
        \begin{itemize}
        \item \href{http://www.rentapacs.de/}{Rent a PACS GmbH - Multimediale Archive}
        \end{itemize}
    \pause
    \item Auftrag
        \begin{itemize}
        \item Technischer Import (von CDs)
        \pause
        \item Datenformat: \href{http://de.wikipedia.org/wiki/Digital\_Imaging\_and\_Communications\_in\_Medicine}{%
                                 DICOM-Standard}
            \begin{itemize}
            \item Grafik \emph{und} Zusatzinformationen
            \end{itemize}
        \pause
        \item DICOM-Überprüfung
        \pause
        \item DICOM-Reparatur
        \pause
        \item DICOM-Änderung
            \begin{itemize}
            \item Markierung, Anonymisierung, Verblindung
            \end{itemize}
        \pause
        \item Integration mit vorhandener GUI
        \end{itemize}
    \pause
    \item Name
        \begin{itemize}
        \item "`\underline{D}I\underline{C}OM-Parser von \underline{R}ent \underline{a} \underline{P}ACS"'
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Qualitätssicherung}

    \begin{itemize}
    \item fester Ansprechpartner beim Kunden
    \pause
    \item Fehlerbehandlung ausführlich mit Kunden besprochen
    \pause
    \item Dokumentation
    \pause
    \item zitieren des DICOM-Standards im Quelltext
    \pause
    \item Debugging-Ausgaben
    \pause
    \item interne Unit-Tests
        \begin{itemize}
        \item für kritische Funktionen
        \end{itemize}
    \pause
    \item externe Unit-Tests
        \begin{itemize}
        \item für Verarbeitung von DICOM-Dateien
        \item großes Spektrum an realen(!) Abweichungen vom DICOM-Standard
        \end{itemize}
    \pause
    \item $\rightarrow$ läuft sehr stabil
    \end{itemize}
\end{frame}

\section{Technische Umgebung}

\begin{frame}
    \frametitle{Steckbrief}

    \begin{itemize}
    \item Betriebssystem
        \begin{itemize}
        \item GNU/Linux
        \item BSD?
        \item (Cygwin?)
        \end{itemize}
    \pause
    \item Compiler
        \begin{itemize}
        \item GCC / C++
        \end{itemize}
    \pause
    \item Standard-Libraries
        \begin{itemize}
        \item libiconv, libuuid, libglib
        \end{itemize}
    \pause
    \item mitgelieferte Libraries
        \begin{itemize}
        \item libxml, libxslt, libs11n
        \end{itemize}
    \pause
    \item Auslieferung
        \begin{itemize}
        \item Quellcode-Paket (930 KB, 28.000 LOC, 980 Commits)
        \item RPM-Paket (450 KB)
        \item Gesamt-Paket (27 MB)
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Kommunikations-Wege zu DC-Rap}

    \begin{itemize}
    \item Kommandozeile (stdin/stdout)
    \pause
    \item TCP/IP
        \begin{itemize}
        \item inetd
        \item xinetd
        \end{itemize}
    \pause
    \item "`Shared Folder"'-Script
        \begin{itemize}
        \item separates Shellscript
        \pause
        \item beobachtet den "`Shared Folder"'
        \pause
        \item Auftrags-XML-Datei $\rightarrow$ DC-Rap
        \item DC-Rap-Ausgabe $\rightarrow$ XML-Datei
        \pause
        \item DC-Rap-Ausgabe $\rightarrow$ CSV-Datei
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Sprache von DC-Rap}

    \begin{itemize}
    \item Offene Schnittstellen
        \begin{itemize}
        \item XML-Formate
        \item Syntax: XML-Schemas
        \item Semantik: Dokumentation
        \end{itemize}
    \pause
    \item Eingabe
        \begin{itemize}
        \item \href{http://de.wikipedia.org/wiki/Dom\%C3\%A4nenspezifische\_Programmiersprache}{%
                    Domänenspezifische Spache (DSL)}
        \item Konfigurationsdateien
        \end{itemize}
    \pause
    \item Ausgabe
        \begin{itemize}
        \item Critical-Log (wichtige Warnungen)
        \item Debug-Log
        \item Modify-Log
        \item Report(s)
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Vorführung}
\end{frame}

\section{DC-Rap und freie Software}

\begin{frame}
    \frametitle{DC-Rap nutzt freie Software}

    \begin{itemize}
    \item läuft unter RHEL 4
    \pause
    \item nutzt ausschließlich freie Libraries
    \pause
    \item nutzt ausschließlich freie Hilfsprogramme
    \end{itemize}
    \pause

    \bigskip

    \begin{tabular}{lll}
    bash, sed, ...     &               & GPL \\
    libiconv           &               & LGPL \\
    libuuid            &               & BSD (3-Klausel) \\
    libglib            & $\geq$ 2.4    & LGPL \\
    libxml             & $\geq$ 2.6.27 & MIT/X11 \\
    xsltproc (libxslt) & $\geq$ 1.1.18 & MIT/X11 \\
    libs11n            & $\geq$ 1.2    & Public Domain \\
    \end{tabular}
\end{frame}

\begin{frame}
    \frametitle{DC-Rap mit freier Software entwickelt}

    \begin{itemize}
    \item Betriebssystem (Entwicklungsrechner)
        \begin{itemize}
        \item Debian 4.0 (Etch)
        \item SuSE 10.0
        \item CentOS 4.3 (kompatibel zu RHEL 4)
        \end{itemize}
    \pause
    \item Editor
        \begin{itemize}
        \item Vim
        \item Eclipse
        \item KHexEdit
        \end{itemize}
    \pause
    \item Versionskontrolle
        \begin{itemize}
        \item Mercurial (hg)
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{DC-Rap mit freier Software entwickelt (2)}

    \begin{itemize}
    \item Build-System
        \begin{itemize}
        \item GCC
        \item make
        \item autoconf, automake
        \end{itemize}
    \pause
    \item Debugger
        \begin{itemize}
        \item gdb
        \item KDbg (GUI für gdb)
        \end{itemize}
    \pause
    \item Profiler
        \begin{itemize}
        \item Valgrind
        \item KCacheGrind (GUI für Valgrind)
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Freie SHA1-Implementierung}

    \begin{itemize}
    \item Was ist SHA1?
        \begin{itemize}
        \item \url{http://de.wikipedia.org/wiki/SHA1}
        \end{itemize}
    \pause
    \item Einsatz in DC-Rap
        \begin{itemize}
        \item Checksumme zwischen verschiedenen Durchläufen
        \end{itemize}
    \pause
    \item Gute Implementierung für C++?
    \pause
    \item Gute Implementierung für C
        \begin{itemize}
        \item Steve Reid: Implementierung für C
        \pause
        \item Bruce Guenter: Anpassung für bglibs
        \pause
        \item Umsetzung nach C++
        \pause
        \item viele kleine Verbesserungen
        \end{itemize}
    \pause
    \item Public Domain
    \pause
    \item Separates Projekt
        \begin{itemize}
        \item \url{http://www.profv.de/sha1/}
        \end{itemize}
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Anwenderfreiheiten bei Spezialsoftware}

    \begin{itemize}
    \item Freie Software heißt: Jeder darf das Programm
        \begin{itemize}
        \item zu jedem Zweck ausführen
        \item studieren und verändern
        \item verbreiten
        \item verbessern und verbreiten
        \end{itemize}
    \pause
    \item "`jeder"' = Zielgruppe
    \pause
    \item Bei Spezialanfertigungen: Zielgruppe = Auftraggeber
    \pause
    \item Spezialanfertigungen sind freie Software?
    \end{itemize}
\end{frame}

\begin{frame}
    \frametitle{Ende}

    \begin{center}
    Vielen Dank für Ihre Aufmerksamkeit!
    \end{center}
\end{frame}

\end{document}
