commit 08f30b88c549c91bee5f652628786faef9eaae14 Author: Jan Philipp Timme Date: Sat Nov 10 18:53:33 2018 +0100 Initial import with old slides from bachelorcolloquium diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..401aa93 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +*.aux +*.bbl +*.blg +*.dvi +*.log +*.lol +*.lot +*.lof +*.nav +*.snm +*.toc +*.out +*.synctex.gz +*.bak +*.vrb +.nfs* + +build/ +release/ diff --git a/MA-KO-Inhalt.tex b/MA-KO-Inhalt.tex new file mode 100644 index 0000000..fea8a39 --- /dev/null +++ b/MA-KO-Inhalt.tex @@ -0,0 +1,366 @@ +\section{Motivation} + +\begin{frame}{Motivation} +\begin{itemize} +\item Immer mehr Geräte sind mit dem Internet verbunden +\item Sollen überwacht werden beziehungsweise überwachen selbst etwas +\item Bieten kontinuierlich aktuelle Zustands- und Messinformationen +\item $\rightarrow$ In Form von RDF-Ereignisdatenströmen abrufbar +\end{itemize} +\end{frame} + +\begin{frame}{Ereignisdatenströme} +\begin{itemize} +\item Transportieren Daten von einzelnen Ereignissen +\item Jedes Ereignis bildet kleinen Teil der Realität ab +\begin{itemize} +\item \dots sofern Daten korrekt sind (Messfehler, Übertragungsfehler, \dots) +\end{itemize} +\item Aber: Sind oft zeitlich begrenzt gültig +\item Und: Treten meist hochfrequent auf +\item $\rightarrow$ Große Datenmengen in kürzester Zeit +\end{itemize} +\end{frame} + +\begin{frame}{Verarbeitung der Ereignisdatenströme} +\begin{itemize} +\item Ein Ereignis für sich trägt kaum Bedeutung +\item Betrachtung in Kontext notwendig +\item Der Kontext ergibt sich \dots +\begin{itemize} +\item \dots durch relevante, weitere Ereignisse +\item \dots durch Integration von \emph{Domänenwissen} +\end{itemize} +\item Möglichst schnelle Verarbeitung gefordert +\item $\rightarrow$ Complex Event Processing (CEP) +\end{itemize} +\end{frame} + +\begin{frame}{Was ist Complex Event Processing? (CEP)} +\begin{itemize} +\item Betrachtung von Ereignissen in \emph{Sliding Windows} +\item $\rightarrow$ In-Memory Processing +\item Erkennung von Ereignismustern +\item Aggregation von Ereignissen +\item $\rightarrow$ Erzeugung von komplexen Ereignissen +\end{itemize} +\end{frame} + +\begin{frame}{Ziel der Arbeit} +\begin{itemize} +\item Verarbeitung von RDF-Ereignisdatenströmen mit CEP +\begin{itemize} +\item \dots unter Nutzung der C-SPARQL-Engine +\end{itemize} +\item Dabei: Integration von Domänenwissen +\item Und: In wie weit kann Reasoning\footnote{Dazu später mehr \dots} genutzt werden? +\item $\rightarrow$ Anhand eines Beispielszenarios praktisch durchführen +\end{itemize} +\end{frame} + + +\section{Exkurs: Grundlagen RDF} + +\begin{frame}{Exkurs: Grundlagen RDF} +\begin{itemize} +\item Resource Description Framework +\item Framework zur Beschreibung und Modellierung von Wissen +\item Aussagen sind Tripel +\item Bestehen aus Subjekt, Prädikat und Objekt +\item Werden als URI repräsentiert +\begin{itemize} +\item Im Objektteil sind auch Literalwerte erlaubt +\end{itemize} +\end{itemize} + +Es folgt ein Beispiel \dots +\end{frame} + +\begin{frame}[fragile]{Beispiel: Zwei RDF-Tripel in Turtle-Notation} +Fakten über ein beispielhaftes Subjekt in RDF: +\begin{lstlisting} +@prefix car: . +@prefix carModel: . +@prefix carOnt: . + +car:23 carOnt:isCarModel carModel:42 . +car:23 carOnt:hasNickname "Alf"^^xsd:string . +\end{lstlisting} +\begin{itemize} +\item Turtle erlaubt mit \texttt{@prefix} die Definition von Prefixen\footnote{Für die Übersichtlichkeit werden Prefixe auf den folgenden Folien weggelassen.} +\item $\rightarrow$ Übersichtliche Repräsentation der Fakten +\end{itemize} +\end{frame} + +\begin{frame}[fragile]{Beispiel: Zwei RDF-Tripel visualisiert} +\begin{figure}[htbp] +\centering +%\includegraphics[width=\textwidth]{img/triple-spo.pdf} +\caption{Prädikate verknüpfen ein Subjekt mit Objekt und Literalwert} +\label{fig:triple_spo} +\end{figure} +\begin{lstlisting} +car:23 carOnt:isCarModel carModel:42 . +car:23 carOnt:hasNickname "Alf"^^xsd:string . +\end{lstlisting} +\end{frame} + +\begin{frame}{Assertion Box (ABox) und Terminology Box (TBox)} +\begin{itemize} +\item Unterscheidung zwischen Faktenbasis (ABox) und Terminologie (TBox) +\item TBox enthält Vokabular mit definierter Bedeutung +\item $\rightarrow$ Analog: Klassendefinition in OOP +\begin{itemize} +\item Objektklassen +\item Prädikate +\end{itemize} +\item ABox enthält konkrete Fakten +\item $\rightarrow$ Analog: Instanzen in OOP +\begin{itemize} +\item z.B. Wissen über existierende Objekte, \dots +\end{itemize} +\end{itemize} +\end{frame} + +\begin{comment} +\begin{frame}[fragile]{Beispiel für eine TBox} +Definition der Klassen \texttt{Car}, \texttt{CarModel} und \texttt{Driver} in RDF-Schema (RDFS): +\begin{lstlisting} +:Car rdf:type rdfs:class . +:CarModel rdf:type rdfs:class . +:Driver rdf:type rdfs:class . + +:drives rdf:type rdf:Property . +:drives rdfs:domain :Driver . +:drives rdfs:range :Car . + +:isCarModel rdf:type rdf:Property . +:isCarModel rdfs:domain :Car . +:isCarModel rdfs:range :CarModel . +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile]{Beispiel für eine ABox} +Beschreibung eines PKW und dessen Fahrer mit Hilfe der Terminologie aus der vorherigen TBox: +\begin{lstlisting} +car:5 rdf:type :Car . +car:5 :isCarModel carModel:8 . + +carModel:8 rdf:type :CarModel . +carModel:8 :maximumMotorRPM 4300 . + +driver:1 rdf:type :Driver . +driver:1 :drives car:5 . +driver:1 :hasName "Max Mustermann"^^xsd:string . +\end{lstlisting} +\end{frame} +\end{comment} + +\begin{frame}{Reasoning} +\begin{itemize} +\item Prozess zum automatischen Anreichern von RDF-Daten +\item Baut auf einer gegebenen TBox auf +\item Ermittelt in der ABox enthaltenes, \emph{implizites} Wissen +\end{itemize} + +Dazu folgt nun ein Beispiel \dots +\end{frame} + +\begin{frame}[fragile]{Beispiel: Reasoning} +Gegeben sei folgende Faktenbasis (ABox): +\begin{lstlisting} +:a :drives :b . +\end{lstlisting} +Führt man nun Reasoning mit Hilfe dieser Terminologie (TBox) durch: +\begin{lstlisting} +:drives rdf:type rdf:Property . +:drives rdfs:domain :Driver . +:drives rdfs:range :Car . + +:Vehicle rdf:type rdfs:class . +:Car rdf:type rdfs:class . +:Car rdfs:subclassOf :Vehicle . +\end{lstlisting} +So ergibt sich daraus folgendes, implizites Wissen: +\begin{lstlisting} +:a rdf:type :Driver . +:b rdf:type :Car . +:b rdf:type :Vehicle . +\end{lstlisting} +\end{frame} + +\begin{comment} +\begin{frame}{Zusammenfassung RDF-Exkurs} +\begin{itemize} +\item RDF-Daten bestehen aus Tripeln (Subjekt, Prädikat, Objekt) +\item ABox enthält Fakten +\item TBox enthält Definitionen für Klassen und Attribute +\item Reasoning reichert vorhandenes Wissen automatisch um \emph{implizites} Wissen an +\begin{itemize} +\item \dots dafür ist eine TBox mit Vokabular notwendig +\item Unter Nutzung von Vokabular auf RDFS-Basis kann schon viel erreicht werden +\end{itemize} +\end{itemize} +\end{frame} +\end{comment} + + +\section{Complex Event Processing mit C-SPARQL} + +\begin{frame}[fragile]{Input: RDF-Ereignisdatenströme} +\begin{itemize} +\item Ereignisdaten kommen als RDF-Quadrupel an +\begin{itemize} +\item Tripel + Zeitstempel $\rightarrow$ Quadrupel (kurz: Quads) +\end{itemize} +\end{itemize} +Beispiel für Quadrupel aus RDF-Ereignisdatenströmen: +\begin{lstlisting} +(1344829400) event:324 rdf:type carOnt:CarStatusEvent . +(1344829400) event:324 carOnt:relatedCar car:0 . +(1344829400) event:324 carOnt:speed 63 . + +(1344829405) event:325 rdf:type carOnt:CarStatusEvent . +(1344829405) event:325 carOnt:relatedCar car:0 . +(1344829405) event:325 carOnt:speed 75 . +\end{lstlisting} +\end{frame} + +\begin{frame}{Complex Event Processing} +\begin{itemize} +\item Ereignisdaten werden in Sliding Windows betrachtet +\item Auswertung anhand von CEP-Regeln +\begin{itemize} +\item Definieren Bedingungen und Aktionen +\item Aktionen werden ausgeführt, wenn Bedingungen erfüllt sind +\end{itemize} +\item Mustererkennung und Aggregation von Ereignissen +\item $\rightarrow$ Erzeugung komplexer Ereignisse aus Ergebnissen +\item $\rightarrow$ Auslösen von Aktionen (externe Dienste anstoßen, Code ausführen) +\end{itemize} +\end{frame} + +\begin{frame}{Sliding Window und Tumbling Window} +\begin{itemize} +\item Nur Ereignisse in einem Window sind Teil der Auswertung +\item Haben feste Größe (z.B. 15 Minuten oder 100 Ereignisse) +\item Werden nach jeder Auswertung weitergeschoben +\item Tumbling Window ist Sonderfall +\item \dots wird um seine Größe weitergeschoben +\begin{itemize} +\item $\rightarrow$ Ereignisse nur ein \emph{einziges Mal} darin enthalten +\end{itemize} +\end{itemize} +\begin{figure}[htbp] +\centering +%\includegraphics[width=\textwidth]{img/slidingvstumblingwindow.pdf} +\caption{Sliding- und Tumbling Window auf einem Ereignisstrom} +\label{fig:slidingvstumblingwindow} +\end{figure} +\end{frame} + +\begin{frame}{CEP mit der C-SPARQL-Engine} +\begin{itemize} +\item \enquote{Continuous SPARQL} +\item In Java implementiert, basiert auf Bibliotheken Apache Jena und Sesame +\item Erweiterung der Abfragesprache SPARQL für RDF-Daten +\item Enthält Funktionalität zur Verarbeitung von RDF-Datenströmen +\item Ermöglicht leichte Einbindung von lokalem Domänenwissen +\item Unterstützt Reasoning auf RDF-Datenströmen mit RDFS-Vokabular +\end{itemize} +\end{frame} + +\begin{frame}{CEP-Regeln} +Szenario: +\begin{itemize} +\item PKW-Verleihgesellschaft möchte Fuhrpark überwachen +\item Vergünstigte Tarife für verschleißarmes Fahrverhalten +\item PKW senden periodisch \texttt{CarStatusEvent}s aus +\item Domänenwissen enthält Daten über die Fahrer der PKW +\item Beispiel: Notorische Raser (>130km/h) sollen erkannt werden +\end{itemize} +Dazu folgt nun der C-SPARQL-Query \dots +\end{frame} + +\begin{frame}[fragile]{C-SPARQL Query} +\begin{lstlisting} +REGISTER QUERY getSpeedingCars AS +PREFIX rdf: +PREFIX car: +SELECT ?driverName ?car (AVG(?speed) AS ?avgSpeed) +FROM STREAM [RANGE 5m STEP 1m] +FROM +WHERE { + ?e rdf:type car:CarStatusEvent . + ?e car:relatedCar ?car . + ?e car:speed ?speed . + ?driver car:isDriving ?car . + ?driver car:hasName ?driverName . +} +GROUP BY (?car) +HAVING (AVG(?speed) > 130) +\end{lstlisting} +\end{frame} + +\begin{frame}{Ergebnis} +\begin{itemize} +\item Alle PKW mit Durchschnittsgeschwindigkeit >130km/h werden gemeldet +\item Verantwortliche Fahrer sind Teil des Ergebnisses +\item Weiterführend möglich: Observer in Java schreiben und an Abfrage registrieren +\item In Observer: über solche Vorfälle Buch führen +\item Gesamte Umsetzung des Szenarios in Bachelorarbeit beschrieben +\end{itemize} +\end{frame} + + +\section{Fazit} + +\begin{frame}{Fazit} +\begin{itemize} +\item C-SPARQL-Engine noch nicht vollständig ausgereift +\begin{itemize} +\item Probleme mit Sprachparser, kryptische Exceptions, Zeitstempel nicht immer abrufbar +\end{itemize} +\item Einige Probleme bei der Durchführung des Beispielszenarios aufgetaucht +\item Einfacher Zugriff auf Domänenwissen ist großer Pluspunkt +\item Domänenwissen zur Laufzeit leicht veränderbar +\item Nutzung von Reasoning auf Basis von TBox mit RDF-Schema möglich +\begin{itemize} +\item \dots auch auf Daten der Ereignisdatenströme! +\end{itemize} +\item Für rein didaktische Zwecke auf jeden Fall zur Erprobung von CEP geeignet +\end{itemize} +\end{frame} + +\begin{frame}{Ausblick} +\begin{itemize} +\item Nach einigen Verbesserungen und Fehlerbehebungen gut nutzbar +\item Dann auch definitiv für Einsteiger geeignet +\item Eventuell Reasoning auf Basis von TBox mit OWL-Ontologien denkbar +\begin{itemize} +\item Diese sind deutlich mächtiger als Vokabular auf RDFS-Basis +\item Ermöglichen Attribute mit Transitivität, Symmetrie, Inversen, \dots +\end{itemize} +\end{itemize} +\end{frame} + + +% Probably not used, not sure yet. +\begin{comment} +\begin{frame}{Literaturverzeichnis} +% Literaturverzeichnis +% Schlüssel als Buchstaben +\bibliographystyle{alpha} +\bibliography{Literaturverweise} +% Und JETZT zum Inhaltsverzeichnis hinzufügen. Geil! +\addcontentsline{toc}{chapter}{Literaturverweise} +\end{frame} +\end{comment} + +\begin{frame}[fragile]{EOF} +Vielen Dank für Ihre Aufmerksamkeit! + +Fragen? + +Download der Software und Bachelorarbeit unter: \url{http://jpt.lu/thesispackage.zip} +\end{frame} \ No newline at end of file diff --git a/MA-KO-Master.tex b/MA-KO-Master.tex new file mode 100644 index 0000000..7606d7b --- /dev/null +++ b/MA-KO-Master.tex @@ -0,0 +1,70 @@ +\documentclass{f4_beamer} + +% Basic setup +\usepackage[german]{babel} % Sprachpaket für Deutsch (Umlaute, Trennung,deutsche Überschriften) +\usepackage{graphicx,hyperref} % Graphikeinbindung, Hyperref (alles klickbar, Bookmarks) +\usepackage{amssymb} % Math. Symbole aus AmsTeX +\usepackage[utf8]{inputenc} % Umlaute +% Custom packages +\usepackage[autostyle=true,german=quotes]{csquotes} % Anführungszeichen mit \enquote{} +\usepackage{textcomp} % Zusätzliches Package für °C +\usepackage{listings} % Codesnippets +\usepackage{scrhack} % Hack for lstlisting i suspect :-/ +\usepackage{xcolor} +\usepackage{float} +\usepackage{soul} +\usepackage{verbatim} % für comment-environment +\usepackage{amsmath} + +% Setup für Codeblocks +\lstset{ + % Optionen + breaklines=true, + breakatwhitespace=true, + breakautoindent=true, + frame=single, + %framexleftmargin=19pt, + inputencoding=utf8, + %language=awk, + %numbers=left, + %numbersep=8pt, + showspaces=false, + showstringspaces=false, + tabsize=1, + %xleftmargin=19pt, + captionpos=b, + % Styling + basicstyle=\footnotesize\ttfamily, + commentstyle=\footnotesize, + keywordstyle=\footnotesize\ttfamily, + numberstyle=\footnotesize, + stringstyle=\footnotesize\ttfamily, +} +% Hack für Sonderzeichen in Codeblocks +\lstset{literate=% + {Ö}{{\"O}}1 + {Ä}{{\"A}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 + {ü}{{\"u}}1 + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {°}{{${^\circ}$}}1 +} + +% Broken citation needs broken command +\newcommand\mathplus{+} + +% Actual beamer related document setup +\title{Konzeption und Umsetzung eines IPv6-VPN für die Abteilung Informatik} +\subtitle{Masterkolloquium} +\author{Jan Philipp Timme} +\date{\today} + +% Content below this line +\begin{document} + +\input{MA-KO-Inhalt.tex} + +\end{document} +% No more content below this line diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..14af533 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +.PHONY: default +SHELL=/bin/bash + +MA_KO_NAME="MA-KO-Master" +MA_KO_NAME_FINAL="Kolloquium Masterarbeit IPv6-VPN" + +# Custom command enhancements +PDFLATEX=pdflatex -interaction=nonstopmode -file-line-error -output-directory build +PDFLATEXGREP="" +#PDFLATEXGREP=| grep -i ".*:[0-9]*:.*\|warning" + +default: cleanall render + +render: + ${PDFLATEX} ${MA_KO_NAME}.tex ${PDFLATEXGREP} + #bibtex build/${MA_KO_NAME} + #${PDFLATEX} ${MA_KO_NAME}.tex ${PDFLATEXGREP} + ${PDFLATEX} ${MA_KO_NAME}.tex ${PDFLATEXGREP} + cp build/${MA_KO_NAME}.pdf release/${MA_KO_NAME_FINAL}.pdf + +clean: + cd build; rm -v *.aux *.bbl *.blg *.log *.out *.toc *.synctex.gz; cd ..; exit 0; + +cleanall: + rm -rfv build; mkdir build + rm -rfv release; mkdir release diff --git a/f4_beamer.cls b/f4_beamer.cls new file mode 100644 index 0000000..f47eb8b --- /dev/null +++ b/f4_beamer.cls @@ -0,0 +1,131 @@ +\typeout{Beamer class for talks with F4 style <2017-07-19> Frauke Sprengel} +\NeedsTeXFormat{LaTeX2e} + +\ProvidesClass{f4_beamer}[2017/07/19 beamer class F4 style] + +\RequirePackage{ifthen} +\RequirePackage{etex} +\RequirePackage[utf8]{inputenc} +\RequirePackage[T1]{fontenc} +\RequirePackage{lmodern} +\RequirePackage{amssymb} +\RequirePackage{amsmath} +\RequirePackage{graphicx} + +%\RequirePackage{url,hyperref} + + \DeclareOption{ngerman}{% + \PassOptionsToPackage{\CurrentOption}{babel} + } + + \DeclareOption{english}{% + \PassOptionsToPackage{\CurrentOption}{babel} +} + +\ExecuteOptions{ngerman} +\ProcessOptions + +\LoadClass[german,compress,hyperref={pdfpagelabels=false},unknownkeysallowed]{beamer} +%\RequirePackage{babel} +\RequirePackage{geometry} +\geometry{paperwidth=16cm,paperheight=9cm} + + +\newcommand{\zsp}{\rule{0pt}{0pt}} % zero space + + +\mode{% +\hypersetup{pdffitwindow=true,pdfpagelayout=SinglePage,%pdfpagemode=FullScreen, +breaklinks=true,urlcolor=Blue} +\usetheme{default} +\useinnertheme[shadow=true]{rounded} +\usecolortheme{orchid} +\setbeamercovered{invisible} +\setbeamertemplate{theorems}[numbered] +\setbeamertemplate{captions}[numbered] +\setbeamertemplate{bibliography item}[book] +\usefonttheme{professionalfonts} + \raggedright +\setbeamertemplate{items}[circle] +%\setbeamertemplate{itemize items}[ball] +\setbeamertemplate{bibliography item}[book] + +\titlegraphic{\includegraphics[width=0.15\textwidth]{res/Wortmarke_WI_schwarz.pdf}} + +\defbeamertemplate*{title page}{customized}[1][] +{ \inserttitlegraphic\par\vfill\vfill + \usebeamerfont{title}{\bfseries \inserttitle}\par + \usebeamerfont{subtitle}%\usebeamercolor[fg]{subtitle} + {\slshape \insertsubtitle}\par \bigskip + \usebeamerfont{author}{\footnotesize\insertauthor\par + \usebeamerfont{date}\insertdate\par}\vspace*{-1cm} + %\usebeamerfont{institute}\insertinstitute\par +} + + \AtBeginDocument{% + \setcounter{framenumber}{0} +{\setbeamertemplate{footline}{} + \setbeamertemplate{sidebar right}{~ \vfill\par +\mbox{}\hspace{-2cm} +\includegraphics[width=3cm]{res/H_WI_Pantone1665.pdf}} + +\maketitle } + } + +\AtBeginSection[] +{ + \begin{frame} + \tableofcontents[currentsection,hideothersubsections] + \end{frame} +} + + % Frame layout + \pgfdeclareimage[height=1.7cm]{fhh-logo}{res/H_WI_Pantone1665.pdf} + \logo{\pgfuseimage{fhh-logo}} +\definecolor{structureBlue}{rgb}{0.862745098, 0.235294118, 0.019607843} +\renewcommand{\alert}[1]{{\textcolor{structureBlue}{#1}}} + \setbeamertemplate{navigation symbols}{% + \insertslidenavigationsymbol{} + \insertframenavigationsymbol{} + \insertbackfindforwardnavigationsymbol{}% + } + + \setbeamertemplate{sidebar left}{} + \setbeamertemplate{footline}{% + + \zsp\hspace{0.1cm}% + \parbox{0.95\textwidth}{{\fontsize{6}{8} + \mbox{~}\textcolor{structureBlue}{\hrulefill}\mbox{} \\ + + \mbox{~}{\bfseries Hochschule Hannover}, Fak. IV, \insertshortauthor{}, \insertshorttitle{}, + \insertshortsubtitle{}, \insertdate{} \hfill \insertframenumber{} + \vspace*{4pt} + }} +% \parbox{4cm}{% + %\insertlogo{}% +% \vskip2pt% +% }% +% \hfill +% \parbox{4cm}{% +% \centering\fontsize{6}{8}% +% \textcolor{lightgray}{\insertshorttitle{}}\\[2pt] +% \textcolor{lightgray}{\insertshortauthor{} -- \insertdate{}}% +% \vspace*{2pt}% +% } +% \hfill +% \parbox{4cm}{% +% \raggedleft\fontsize{6}{8}% +% \textcolor{lightgray}{\insertlecture{} -- \insertsectionhead{} -- +% \insertframenumber{}}\\ \usebeamertemplate***{navigation symbols}% +% \vspace*{2pt}% +% } + \hspace{0.1cm}\zsp + } + +\setbeamersize{sidebar width right=1.5cm} + \setbeamertemplate{sidebar right}{~ \vfill \insertlogo \vspace*{10pt} + + ~} + +\setbeamercolor{structure}{fg=structureBlue!70!black} +} diff --git a/res/H_WI_Pantone1665.pdf b/res/H_WI_Pantone1665.pdf new file mode 100644 index 0000000..f20d694 Binary files /dev/null and b/res/H_WI_Pantone1665.pdf differ diff --git a/res/Wortmarke_WI_schwarz.pdf b/res/Wortmarke_WI_schwarz.pdf new file mode 100644 index 0000000..c5db6f3 Binary files /dev/null and b/res/Wortmarke_WI_schwarz.pdf differ