\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}