Rebuilding Repository for Bachelor thesis

This commit is contained in:
Nis Boerge Wechselberg 2014-09-26 15:45:57 +02:00
commit b095814840
117 changed files with 37459 additions and 0 deletions

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="Untitled Gantt Project" company="" webLink="http://" view-date="2012-10-01" view-index="0" gantt-divider-location="353" resource-divider-location="300" version="2.0" locale="de_DE">
<description/>
<view zooming-state="default:8" id="gantt-chart">
<field id="tpd3" name="Vorgang" width="57" order="0"/>
<field id="tpd4" name="Anfang" width="21" order="1"/>
<field id="tpd5" name="Ende" width="21" order="2"/>
</view>
<view id="resource-table">
<field id="0" name="Ressource" width="56" order="0"/>
<field id="1" name="Rolle" width="43" order="1"/>
</view>
<!-- -->
<calendars>
<day-types>
<day-type id="0"/>
<day-type id="1"/>
<calendar id="1" name="default">
<default-week sun="1" mon="0" tue="0" wed="0" thu="0" fri="0" sat="1"/>
<only-show-weekends value="false"/>
<overriden-day-types/>
<days/>
</calendar>
</day-types>
</calendars>
<tasks empty-milestones="true">
<taskproperties>
<taskproperty id="tpd0" name="type" type="default" valuetype="icon"/>
<taskproperty id="tpd1" name="priority" type="default" valuetype="icon"/>
<taskproperty id="tpd2" name="info" type="default" valuetype="icon"/>
<taskproperty id="tpd3" name="name" type="default" valuetype="text"/>
<taskproperty id="tpd4" name="begindate" type="default" valuetype="date"/>
<taskproperty id="tpd5" name="enddate" type="default" valuetype="date"/>
<taskproperty id="tpd6" name="duration" type="default" valuetype="int"/>
<taskproperty id="tpd7" name="completion" type="default" valuetype="int"/>
<taskproperty id="tpd8" name="coordinator" type="default" valuetype="text"/>
<taskproperty id="tpd9" name="predecessorsr" type="default" valuetype="text"/>
</taskproperties>
<task id="0" name="Literaturrecherche/Vorarbeiten" color="#8cb6ce" meeting="false" start="2012-11-19" duration="10" complete="0" expand="true"/>
<task id="3" name="Implementierung des Perl-Moduls" color="#8cb6ce" meeting="false" start="2012-11-26" duration="20" complete="0" expand="true"/>
<task id="5" name="Konsolidierung/Schreiben" color="#8cb6ce" meeting="false" start="2012-12-21" duration="7" complete="0" expand="true"/>
<task id="8" name="Test-Instrumentierung" color="#8cb6ce" meeting="false" start="2013-01-01" duration="9" complete="0" expand="true"/>
<task id="11" name="KielPrints-Instrumentierung" color="#8cb6ce" meeting="false" start="2013-01-14" duration="25" complete="0" expand="true"/>
<task id="14" name="Konsolidierung/Schreiben 2" color="#8cb6ce" meeting="false" start="2013-02-18" duration="15" complete="0" expand="true"/>
<task id="9" name="Abschluss der Arbeit/Vortrag" color="#8cb6ce" meeting="false" start="2013-03-11" duration="15" complete="0" expand="true"/>
</tasks>
<resources/>
<allocations/>
<vacations/>
<taskdisplaycolumns>
<displaycolumn property-id="tpd6" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd7" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd11" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd10" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd1" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd0" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd8" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd9" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd2" order="-1" width="75" visible="false"/>
<displaycolumn property-id="tpd3" order="0" width="199" visible="true"/>
<displaycolumn property-id="tpd4" order="1" width="75" visible="true"/>
<displaycolumn property-id="tpd5" order="2" width="75" visible="true"/>
</taskdisplaycolumns>
<previous/>
<roles roleset-name="Default"/>
</project>

View file

@ -0,0 +1,70 @@
\ProvidesFile{authoryear-square.bbx}
%% [\abx@bbxid]
\RequirePackage{xpatch}
\RequireBibliographyStyle{standard}
\ExecuteBibliographyOptions{sorting=anyt,pagetracker,labelyear}
\ExecuteBibliographyOptions{firstinits,useprefix,maxbibnames=999,maxcitenames=2,block=space}
\defbibenvironment{bibliography}
{\list
{}
{\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{-\leftmargin}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\item}
\DeclareFieldFormat{shorthandwidth}{#1}
\defbibenvironment{shorthands}
{\list
{\printfield[shorthandwidth]{shorthand}}
{\setlength{\labelwidth}{\shorthandwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}%
\renewcommand*{\makelabel}[1]{##1\hss}}}
{\endlist}
{\item}
\InitializeBibliographyStyle{}
%% Changes to standard style
\renewcommand*{\nameyeardelim}{\addspace}
\renewcommand*{\bibpagerefpunct}{\iflistundef{pageref}{\addspace}{\addperiod\addspace}}
\renewcommand*{\finentrypunct}{\iflistundef{pageref}{\addperiod}{}}%
\renewbibmacro*{in:}{%
\ifentrytype{article}{}{%
\printtext{\bibstring{in}\intitlepunct}}}
\xpatchbibmacro{pageref:comp}{\multilistdelim}%
{\ifboolexpr{test {\ifnumless{\value{listcount}}{\value{liststop}}}or test \ifmoreitems}{\multilistdelim}{\finallistdelim}}{}{}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{#1\isdot}
%% Add the citekey
\xpatchbibdriver{misc}{\setunit{\labelnamepunct}}{\setunit*{\labelnamepunct}}{}{}
\renewbibmacro*{begentry}{%
\printtext[brackets]{%
\begingroup%
\defcounter{maxnames}{\blx@maxcitenames}%
\iffieldundef{shorthand}%
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}%
{\iffieldundef{label}{\printfield[citetitle]{labeltitle}}{\printfield{label}}%
%\setunit{\nameyeardelim}%
%\iffieldundef{labelyear}{}{\printfield{labelyear}\printfield{extrayear}}%
}%
{\printnames{labelname}%
\setunit{\nameyeardelim}%
\iffieldundef{labelyear}{}{\printfield{labelyear}\printfield{extrayear}}}}%
{\printfield{shorthand}}%
\endgroup%
}%
\printtext{}\setunit{\addspace}\newblock% \printtext{\quad}or \addspace
}
\endinput

View file

@ -0,0 +1,214 @@
\ProvidesFile{authoryear-square.cbx}
%% [\abx@cbxid]
\ExecuteBibliographyOptions{labelyear,autocite=inline,maxcitenames=2}
\newbool{cbx:parens}
\newbibmacro*{cite:init}{%
\ifnumless{\value{multicitecount}}{2}
{\global\boolfalse{cbx:parens}%
\global\undef\cbx@lasthash
\global\undef\cbx@lastyear}
{\iffieldundef{prenote}
{}
{\global\undef\cbx@lasthash
\global\undef\cbx@lastyear}}}
\newbibmacro*{cite:reinit}{%
\global\undef\cbx@lasthash
\global\undef\cbx@lastyear}
\newbibmacro*{cite}{%
\printtext[bibhyperref]{% Apply citation link to bibmacro output
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
%\setunit{\nameyeardelim}%
%\usebibmacro{cite:labelyear+extrayear}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}}
\newbibmacro*{citeyear}{%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\usebibmacro{cite:label}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\usebibmacro{cite:labelyear+extrayear}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\newbibmacro*{textcite}{%
\iffieldequals{namehash}{\cbx@lasthash}
{\iffieldundef{shorthand}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}}
{\ifbool{cbx:parens}{\bibclosebracket\global\boolfalse{cbx:parens}}{}%
\setunit*{\multicitedelim}%
\ifnameundef{labelname}
{\iffieldundef{shorthand}
{\printtext[bibhyperref]{\DeclareFieldAlias{bibhyperref}{default}\usebibmacro{cite:label}}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenbracket}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
{\printtext[bibhyperref]{\DeclareFieldAlias{bibhyperref}{default}\printnames{labelname}}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenbracket}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\usebibmacro{cite:label}}
{\usebibmacro{cite:labelyear+extrayear}}%
\savefield{labelyear}{\cbx@lastyear}}
{\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}%
\savefield{namehash}{\cbx@lasthash}}}}
\newbibmacro*{cite:shorthand}{%
\printtext[bibhyperref]{\printfield{shorthand}}}
\newbibmacro*{cite:label}{%
\iffieldundef{label}
{\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
{\printtext[bibhyperref]{\printfield{label}}}}
\newbibmacro*{cite:labelyear+extrayear}{%
\iffieldundef{labelyear}
{}
{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}}
\newbibmacro*{cite:extrayear}{%
\iffieldundef{extrayear}
{}
{\printtext[bibhyperref]{\printfield{extrayear}}}}
\newbibmacro*{textcite:postnote}{%
\usebibmacro{postnote}%
\ifthenelse{\value{multicitecount}=\value{multicitetotal}}
{\setunit{}%
\printtext{%
\ifbool{cbx:parens}
{\bibclosebracket\global\boolfalse{cbx:parens}}
{}}}
{\setunit{%
\ifbool{cbx:parens}
{\bibclosebracket\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}}}
\DeclareCiteCommand{\cite}
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand*{\cite}
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{citeyear}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\parencite}[\mkbibbrackets]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand*{\parencite}[\mkbibbrackets]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{citeyear}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footcite}[\mkbibfootnote]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\smartcite}[\iffootnote\mkbibbrackets\mkbibfootnote]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{cite}}
{}
{\usebibmacro{postnote}}
\DeclareCiteCommand{\textcite}
{\usebibmacro{cite:init}}
{\usebibmacro{citeindex}\usebibmacro{textcite}}
{}
{\usebibmacro{textcite:postnote}%
\ifbool{cbx:parens}{\bibclosebracket\global\boolfalse{cbx:parens}}{}}
\DeclareMultiCiteCommand{\cites}{\cite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\parencites}[\mkbibbrackets]{\parencite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\footcites}[\mkbibfootnote]{\footcite}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\footcitetexts}[\mkbibfootnotetext]{\footcitetext}{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\smartcites}[\iffootnote\mkbibbrackets\mkbibfootnote]{\smartcite}
{\setunit{\multicitedelim}}
\DeclareMultiCiteCommand{\textcites}{\textcite}{}
\endinput

View file

@ -0,0 +1,47 @@
@mastersthesis{cau15489,
month = August,
type = {Diplomarbeit},
title = {Dynamische Analyse von COBOL-Systemarchitekturen zum modellbasierten Testen},
school = {Department of Computer Science, University of Kiel, Germany},
author = {Bettual Richter},
year = {2012},
note = {Diploma Thesis, University of Kiel (work in progress)},
keywords = { },
url = {http://eprints.uni-kiel.de/15489/},
}
@mastersthesis{cau15486,
month = Oktober,
type = {Diplomarbeit},
title = {Dynamic analysis of .NET applications for architecture-based model extraction and test generation},
school = {Department of Computer Science, University of Kiel, Germany},
author = {Felix Magedanz},
year = {2011},
keywords = { },
url = {http://eprints.uni-kiel.de/15486/},
}
@online{gpl,
title = {GNU General Public License, version 3},
url = {http://www.gnu.org/licenses/gpl.html},
year = {2007},
month = June
}
@MANUAL{Kieker1.6UserGuide,
title = {Kieker 1.6 User Guide},
author = {{Kieker Project}},
organization = {{Software Engineering Group, Kiel University, Kiel, Germany}},
month = oct,
year = {2012},
url = {http://kieker-monitoring.net/documentation/},
}
@book{schmalenbach2007performancemanagement,
title={Performancemanagement f{\"u}r serviceorientierte Java-Anwendungen: Werkzeug- und Methodenunterst{\"u}tzung im Spannungsfeld von Entwicklung und Betrieb},
author={Schmalenbach, C.},
isbn={9783540366317},
url={http://books.google.de/books?id=IbaEtgAACAAJ},
year={2007},
publisher={Springer}
}

View file

@ -0,0 +1,24 @@
%% SE-KCSS-Style DE v1.1
\documentclass[10pt]{book}
\usepackage{fixltx2e}
\usepackage[resetfonts]{cmap}
\usepackage{nameref}
\usepackage[%
language=german,paper=a4paper,largepaper=true,%
algorithmBackwardCompatibility=false,algorithmForwardCompatibility=false,%
biblatexstyle=authoryear-square,biblatexOptions={natbib=true,backend=bibtex},%
acronymOptions={smaller,printonlyused}%,withpage
]{ifiseries}
\usepackage[format=hang]{caption}
\usepackage{textcomp}
\newcommand{\thesistitlepage}[5]{\gentitlepage{#1}{#2}{#3\\\Large\vspace{5ex}#4}{\Large\textsc{Christian-Albrechts-Universit\"{a}t zu Kiel\\Institut f\"{u}r Informatik\\ Arbeitsgruppe Software Engineering }\\\vspace{10ex}\begin{tabular}{rl}Betreut durch: & Prof. Dr. Wilhelm Hasselbring \\ & #5 \\\end{tabular}}}
\ExecuteBibliographyOptions{sortcase=false,babel=other,backref=true,abbreviate=false}
\ExecuteBibliographyOptions{isbn=false,url=true,doi=false,eprint=false}
\addbibresource{bibliography.bib}
\hypersetup{bookmarksdepth=3}
\hypersetup{bookmarksopen=true}
\hypersetup{bookmarksopenlevel=0}
\hypersetup{bookmarksnumbered=true}
\endinput

View file

@ -0,0 +1,10 @@
%E
\newglossaryentry{eprints}{name={ePrints},description={Open-Source Plattform zur Veröffentlichung von Dokumenten,\\\url{http://www.eprints.org/software}},see={moni}}
%K
\newglossaryentry{kieker}{name={Kieker},description={Software Framework zur Durchführung von Monitoringaufgaben,\\\url{http://www.kieker-monitoring.net}},see={moni}}
%M
\newglossaryentry{moni}{name={Monitoring},description={Überwachung des Verhalten eines Programmes während der Laufzeit}}
\newglossaryentry{probe}{name={monitoring probe},description={Eingefügter Messpunkt in einem Programm zur Erzeugung von \glspl{record}},plural={monitoring probes}}
\newglossaryentry{record}{name={monitoring record},description={Bei der Ausführung einer \gls{probe} erzeugter Protokoll-Eintrag einer Messung},plural={monitoring records}}
%R
\newglossaryentry{recursion}{name={Rekursion},description={siehe \gls{recursion}}}

View file

@ -0,0 +1,939 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ifiseries}
\RequirePackage{kvoptions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Options and their defaults
\DeclareBoolOption[false]{legacytexlive} % for the ancient TeX Live shipped with Ubuntu
\DeclareBoolOption[false]{natbib}
\DeclareBoolOption[false]{babelbib}
\DeclareBoolOption[true]{biblatex}
\DeclareStringOption[sort,numbers]{natbibOptions}
\DeclareStringOption[alphabetic]{biblatexstyle}
\DeclareStringOption[maxcitenames=4,maxbibnames=10,babel=other]{biblatexOptions}
\DeclareStringOption[]{bibresource}
\DeclareStringOption[ngerman,english]{babelOptions}
\DeclareStringOption[]{variorefOptions}
\DeclareStringOption[linesnumbered,ruled,vlined]{algorithmOptions}
\DeclareStringOption[alphaurl]{bibliographystyle} % only for bibtex, not biblatex
\DeclareStringOption[utf8]{inputencOptions}
\DeclareBoolOption[true]{tikz}
\DeclareBoolOption[true]{algorithmForwardCompatibility}
\DeclareBoolOption[true]{algorithmBackwardCompatibility}
\DeclareStringOption[smaller,nohyperlinks,printonlyused]{acronymOptions}
\DeclareStringOption[caption=false,font=footnotesize]{subfigOptions}
\DeclareStringOption[]{theorems}
\DeclareStringOption[Bibliography]{refname}
\DeclareStringOption[black]{hypercolor}
\DeclareBoolOption[false]{dottednumbers}
\DeclareStringOption[english]{language}
\DeclareBoolOption[true]{runningtitle}
\DeclareBoolOption[true]{layout}
\DeclareBoolOption[true]{pagelayout}
\DeclareStringOption[ustrade]{paper}
\DeclareStringOption[]{paperwidth}
\DeclareStringOption[]{paperheight}
\DeclareStringOption[0mm]{bindingoffset}
\DeclareStringOption[.25]{halfparskipfill}
\DeclareBoolOption[false]{halfparskip}
\DeclareStringOption[Palatino]{font}
\DeclareStringOption[12]{marginfrac}
\DeclareStringOption[floatrow]{figure}
\DeclareStringOption[]{compact}
\DeclareStringOption[1.5]{headsepmult}
\DeclareStringOption[3]{footskipmult}
\DeclareBoolOption[false]{leftmarkright}
\if@twoside
\DeclareBoolOption[false]{hcenter}
\else
\DeclareBoolOption[true]{hcenter}
\fi
\@ifclassloaded{book}%
{\DeclareStringOption[section]{theoremswithin}}%
{\DeclareStringOption[subsection]{theoremswithin}}
\DeclareBoolOption[false]{largepaper}
\ProcessKeyvalOptions*
\RequirePackage{etoolbox}
\RequirePackage{xifthen}
\RequirePackage{expl3}
\ifthenelse{\boolean{ifiseries@legacytexlive}}{% FIXME why can't i use \ififiseries@legacytexlive?
\let\ifiseries@natbibtrue\@undefined%
\let\ifiseries@natbibfalse\@undefined%
\let\ififiseries@natbib\@undefined%
\let\ifiseries@biblatextrue\@undefined%
\let\ifiseries@biblatexfalse\@undefined%
\let\ififiseries@biblatex\@undefined%
\DeclareBoolOption[true]{natbib}%
\DeclareBoolOption[false]{biblatex}%
}{}
\ififiseries@largepaper
\let\ifiseries@marginfrac\@undefined%
\let\ifiseries@headsepmult\@undefined%
\let\ifiseries@footskipmult\@undefined%
\DeclareStringOption[9]{marginfrac}%
\DeclareStringOption[2]{headsepmult}%
\DeclareStringOption[3.5]{footskipmult}%
\fi
\ExplSyntaxOn
% TeX Live 2009 (still shipped with Ubuntu in 2012) does not provide the 'onn' version.
% So we have to use a little trick to get the argument expanded.
% This will occur frequently in this code.
\newcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{english} {\relax}
{german} {
\let\ifiseries@babelOptions\@undefined%
\let\ifiseries@variorefOptions\@undefined%
\let\ifiseries@refname\@undefined%
\let\ifiseries@dottednumberstrue\@undefined%
\let\ifiseries@dottednumbersfalse\@undefined%
\let\ififiseries@dottednumbers\@undefined%
\DeclareStringOption[english,ngerman]{babelOptions}%
\DeclareStringOption[ngerman]{variorefOptions}%
\DeclareStringOption[Bibliografie]{refname}%
\DeclareBoolOption[true]{dottednumbers}%
\ifthenelse{\boolean{ifiseries@legacytexlive}}{%
\let\ifiseries@babelbibtrue\@undefined%
\let\ifiseries@babelbibfalse\@undefined%
\let\ififiseries@babelbib\@undefined%
\let\ifiseries@bibliographystyle\@undefined%
\DeclareBoolOption[true]{babelbib}%
\DeclareStringOption[babalpha]{bibliographystyle}%
}{}
}
}{\PackageError{ifiseries}{Unsupported~language:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@language}
\ProcessKeyvalOptions*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Packages with no or minimal influence on the main layout
\RequirePackage{etex}
\RequirePackage[\ifiseries@inputencOptions]{inputenc}
\RequirePackage[T1]{fontenc}
\@ifclassloaded{beamer}{}{\RequirePackage[rgb,svgnames]{xcolor}}
\RequirePackage[\ifiseries@babelOptions]{babel}
\RequirePackage{amsmath}
\RequirePackage[matha]{mathabx}
\RequirePackage{amssymb}
\RequirePackage{amsfonts}
\RequirePackage{amstext}
\RequirePackage{mathtools}
\RequirePackage{nicefrac}
\RequirePackage{graphicx}
\RequirePackage{grffile}
\RequirePackage{eso-pic}
\RequirePackage{listings}
\RequirePackage{booktabs}
\RequirePackage{multicol}
\RequirePackage{multirow}
\RequirePackage[autolanguage]{numprint}
\RequirePackage{units}
\RequirePackage[babel=true]{csquotes}
\ififiseries@natbib\RequirePackage[\ifiseries@natbibOptions]{natbib}\fi
\ififiseries@babelbib\RequirePackage{babelbib}\fi
\ififiseries@biblatex
\RequirePackage[style=\ifiseries@biblatexstyle,\ifiseries@biblatexOptions]{biblatex}%
\ifdefempty{\ifiseries@bibresource}{}{\addbibresource{\ifiseries@bibresource}}%
\DeclareFieldFormat[article,unpublished,inproceedings]{realtitlecase}{\MakeSentenceCase*{#1}}%
%% cf. texmf-dist/tex/latex/biblatex/biblatex.def
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[realtitlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[realtitlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}%
%%
\else
\bibliographystyle{\ifiseries@bibliographystyle}%
\RequirePackage{bibentry}%
\fi
\RequirePackage[\ifiseries@variorefOptions]{varioref}
\RequirePackage{url}
\RequirePackage{dsfont}
\RequirePackage{bbding}
\RequirePackage{pifont}
\RequirePackage{calc}
\RequirePackage{blindtext}
\RequirePackage{setspace}
\RequirePackage{relsize}
\RequirePackage[\ifiseries@algorithmOptions]{algorithm2e}
\ififiseries@algorithmForwardCompatibility
\ifthenelse{\isundefined{\DontPrintSemicolon}}{\newcommand*{\DontPrintSemicolon}{\dontprintsemicolon}}{}
\ifthenelse{\isundefined{\SetAlgoVlined}}{\newcommand*{\SetAlgoVlined}{\SetVline}}{}
\ifthenelse{\isundefined{\SetAlgoNoLine}}{\newcommand*{\SetAlgoNoLine}{\SetNoline}}{}
\fi
\ififiseries@algorithmBackwardCompatibility
\ifthenelse{\isundefined{\RestyleAlgo}}{\let\RestyleAlgo\restylealgo}
\fi
\RequirePackage[compatibility=false]{caption} % compatibility switched off for hyperref
\RequirePackage{bookmark}
\RequirePackage{hyperref}
\hypersetup{%
final=true,%
colorlinks=true,%
linkcolor=\ifiseries@hypercolor,%
citecolor=\ifiseries@hypercolor,%
urlcolor=\ifiseries@hypercolor,%
}
\RequirePackage[strict]{changepage}
\ififiseries@tikz
\RequirePackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows}
\usetikzlibrary{shapes}
\usetikzlibrary{shadows}
\usetikzlibrary{decorations.text}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{petri}
\usetikzlibrary{shapes.symbols}
\usetikzlibrary{shapes.arrows}
\usetikzlibrary{decorations}
\usetikzlibrary{decorations.pathreplacing}
\usetikzlibrary{decorations.shapes}
\usetikzlibrary{calc}
\usetikzlibrary{chains}
\usetikzlibrary{patterns}
\usetikzlibrary{matrix}
\usetikzlibrary{backgrounds}
\usetikzlibrary{mindmap}
\usetikzlibrary{topaths}
\usetikzlibrary{automata}
\fi
\RequirePackage{microtype}
\RequirePackage{enumitem} %%% add 'inline' option once it is supported everywhere
\newlist{compactitemize}{itemize}{3}
\setlist[compactitemize]{label=\raisebox{.1em}{\smaller\textbullet}}
\newlist{compactenumerate}{enumerate}{2}
\setlist[compactenumerate]{label=\arabic*.}
\newlist{compactdescription}{description}{3}
\RequirePackage{placeins}
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{floatrow} {\RequirePackage{floatrow}\DeclareCaptionSubType[alph]{figure}}
{subfig} {\RequirePackage[\ifiseries@subfigOptions]{subfig}\RequirePackage{sidecap}\sidecaptionvpos{figure}{t}}
}{\PackageError{ifiseries}{Unknown~figure~system:~#1}\@ehc}}
\expandafter\ifiseries@temp\expandafter{\ifiseries@figure}
\ExplSyntaxOff
\RequirePackage[\ifiseries@acronymOptions]{acronym}
\RequirePackage{xspace}
\RequirePackage{hyphenat}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Useful commands
%% Remove margins for screen viewing.
%% This command is used by the code below if 'compact' is set.
%% It is the same as the '\nomargin' command in 'localKit'.
\newcommand*{\nomargin}{
\setlength{\oddsidemargin}{.02\textwidth-1in}
\setlength{\evensidemargin}{.02\textwidth-1in}
\setlength{\paperwidth}{1.04\textwidth}
\setlength{\paperheight}{\headheight+\headsep+\textheight+\footskip}
\setlength{\paperheight}{1.04\paperheight}
\setlength{\topmargin}{.02\paperheight-1in}
}
%% Abbreviations
\newcommand*{\abbrdot}{\protect\@ifnextchar.{}{.\@\xspace}}
\newcommand*{\abbrcomma}{\protect\@ifnextchar,{}{,\xspace}}
\newcommand*{\eg}{e.\@\,g.\@\abbrcomma}
\newcommand*{\ie}{i.\@\,e.\@\abbrcomma}
\newcommand*{\cf}{cf.\@\abbrcomma}
\newcommand*{\Eg}{E.\@\,g.\@\abbrcomma}
\newcommand*{\Ie}{I.\@\,e.\@\abbrcomma}
\newcommand*{\Cf}{Cf.\@\abbrcomma}
\newcommand*{\etal}{et~al\abbrdot}
\newcommand*{\etc}{etc\abbrdot}
\newcommand*{\vs}{vs\abbrdot}
\newcommand*{\Wlg}{W.l.o.g\abbrdot}
\newcommand*{\wlg}{w.l.o.g\abbrdot}
\newcommand*{\OBdA}{O.B.d.A\abbrdot}
\newcommand*{\oBdA}{o.B.d.A\abbrdot}
\newcommand*{\wrt}{w.r.t.\@\xspace}
\newcommand*{\rv}{r.v.\@\xspace}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Theorems. If 'theorems' is empty, nothing happens here.
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{numbersfirst} {
\ififiseries@dottednumbers% FIXME how can I pass through boolean options?
\RequirePackage[within=\ifiseries@theoremswithin,likeequations,language=\ifiseries@language,dottednumbers=true]{localTheorem}%
\else%
\RequirePackage[within=\ifiseries@theoremswithin,likeequations,language=\ifiseries@language,dottednumbers=false]{localTheorem}%
\fi%
\let\@subsection\subsection%
\renewcommand*\subsection{\@ifnextchar*{\@subsection}{\@subsection*}}%
\let\@subsubsection\subsubsection%
\renewcommand*\subsubsection{\@ifnextchar*{\@subsubsection}{\@subsubsection*}}%
}
{numberslast} {
\ififiseries@dottednumbers%
\RequirePackage[numbersfirst=false,language=\ifiseries@language,dottednumbers=true]{localTheorem}%
\else%
\RequirePackage[numbersfirst=false,language=\ifiseries@language,dottednumbers=false]{localTheorem}%
\fi%
}
}{\PackageError{ifiseries}{Unknown~theorem~system:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@theorems}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Packages and settings with influence on the main layout
\ififiseries@layout
\newcommand*{\ifiseries@titlefontfamily}{}
\newcommand*{\ifiseries@sectionfontweight}{\bfseries}
\newcommand*{\ifiseries@chapterfontweight}{\bfseries}
%% Font and linespread.
\ExplSyntaxOn
\renewcommand{\ifiseries@temp}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{Bera} {
\RequirePackage[scaled]{beraserif}%
\RequirePackage[scaled=.90]{berasans}%
\RequirePackage[scaled=.90]{beramono}%
\linespread{1.05}%
}
{Charter} { %% sometimes problem: "Too many math alphabets used in version normal."
\usepackage[bitstream-charter]{mathdesign}%
\RequirePackage[scaled]{berasans}%
\RequirePackage[scaled]{beramono}%
\RequirePackage{eucal}%
\linespread{1.05}%
}
{ConcreteEuler} {
\RequirePackage{lmodern}%
\RequirePackage[boldsans]{concmath}%
\RequirePackage{eulervm}%
\RequirePackage[scaled=.84]{beramono}%
\linespread{1.05}%
}
{DejaVu} {
\RequirePackage[scaled]{DejaVuSerif}
\RequirePackage{eulervm}
\RequirePackage[scaled=.95]{beramono}
\linespread{1.10}
}
{DejaVuCondensed} {
\RequirePackage[scaled]{DejaVuSerifCondensed}
\RequirePackage{eulervm}
\RequirePackage[scaled=.95]{beramono}
\linespread{1.10}
}
{Kerkis} { %% some problems in math mode, e.g., tildas extend into symbols
\usepackage{kmath,kerkis}%
\let\openbox\@undefined%
\RequirePackage[scaled=.81]{berasans}%
\RequirePackage[scaled=.81]{beramono}%
\renewcommand*{\bfdefault}{sb}%
\linespread{1.10}%
}
{KP} {
\RequirePackage{kpfonts}%
\linespread{1.05}%
}
{LatinModern} {
\RequirePackage{lmodern}%
\RequirePackage[scaled=.80]{beramono}%
\let\@bfseries\bfseries%
\renewcommand*{\bfseries}{\sffamily\@bfseries\fontseries{sbc}\selectfont}%
\linespread{1.05}%
}
{NewCenturySchoolbook} {
\RequirePackage{fouriernc}%
\RequirePackage[scaled=.85]{beramono}%
\linespread{1.10}%
}
{Palatino} {
\RequirePackage[sc]{mathpazo}%
\@ifclassloaded{beamer}{%
\RequirePackage[scaled=.90]{helvet}%
\RequirePackage[scaled=.80]{beramono}%
}{%
\RequirePackage[scaled=.80]{berasans}%
\RequirePackage[scaled=.80]{beramono}%
}%
\linespread{1.05}%
}
{Schola} {
\RequirePackage{fouriernc}% only for the math
\RequirePackage{tgschola}%
\RequirePackage[scaled=.88]{beramono}%
\linespread{1.05}%
}
{Times} {
\RequirePackage{eucal}%
\RequirePackage{mathptmx}%
\RequirePackage[scaled=.87]{helvet}%
\RequirePackage[scaled=.82]{beramono}%
\linespread{1.05}%
}
{Termes} {
\RequirePackage{tgtermes}%
\RequirePackage[scaled=.86]{berasans}%
\RequirePackage[scaled=.86]{beramono}%
\linespread{1.05}%
}
{TX} {
\RequirePackage{txfonts}%
\RequirePackage[scaled=.86]{berasans}%
\RequirePackage[scaled=.86]{beramono}%
\linespread{1.05}%
}
{Utopia} {
\RequirePackage[widespace]{fourier}%
\RequirePackage{eucal}%
\RequirePackage[scaled=.82]{berasans}%
\RequirePackage[scaled=.82]{beramono}%
\linespread{1.05}%
}
}{\PackageError{ifiseries}{Unknown~font:~#1}\@ehc}}
\ExplSyntaxOff
\expandafter\ifiseries@temp\expandafter{\ifiseries@font}
%% \prg_case_str cannot occur inside an argument.
%% So we have to prepare several commands here to be called later
%% inside the \@ifclassloaded.
\ExplSyntaxOn
%
\newcommand{\ifiseries@temp@paper}[1]{
\prg_case_str:nnn{#1} {
{} {\relax}
{ustrade} {\geometry{paperwidth=15.24cm, paperheight=22.86cm}}
{15522} {\geometry{paperwidth=15.50cm, paperheight=22.00cm}}
{royal} {\geometry{paperwidth=15.57cm, paperheight=23.39cm}}
{crownquarto} {\geometry{paperwidth=18.91cm, paperheight=24.589cm}}
}{\geometry{paper=\ifiseries@paper}}}
%
\newcommand{\ifiseries@temp@compact}[1]{
\prg_case_str:nnn{#1}{
{} {\relax}
{moderate} {
\setlength{\headsep}{.5\baselineskip}%
\setlength{\footskip}{\baselineskip}%
\nomargin%
}
{strong} {
%% This does the same as the '\ebook' command in 'localKit'.
\fancyhf{}%
\fancyfoot[R]{\thepage}%
\fancypagestyle{plain}{\fancyhf{}\fancyfoot[R]{\thepage}}%
\setlength{\headsep}{0pt}%
\setlength{\headheight}{0pt}%
%\setlength{\topskip}{0pt}% affects height of textblock in ways difficult to determine!
\setlength{\footskip}{1.5\baselineskip}%
\setlength{\oddsidemargin}{.02\textwidth-1in}%
\setlength{\evensidemargin}{.02\textwidth-1in}%
\setlength{\paperwidth}{1.04\textwidth}%
\setlength{\paperheight}{\textheight+\footskip}%
\setlength{\topmargin}{.005\paperheight-1in}% CHANGE
\setlength{\paperheight}{1.02\paperheight}%
}
}{\PackageError{ifiseries}{Unknown~compact~system:~#1}\@ehc}}
\ExplSyntaxOff
%% End of preparations.
\@ifclassloaded{beamer}{}{%
%% Page layout.
\ififiseries@pagelayout
\RequirePackage{geometry}
\expandafter\ifiseries@temp@paper\expandafter{\ifiseries@paper}
\ifdefempty{\ifiseries@paperheight}{}{\ifdefempty{\ifiseries@paperwidth}{}%
{\geometry{paperwidth=\ifiseries@paperwidth,paperheight=\ifiseries@paperheight}}}
%
\ifthenelse
{\equal{\@ptsize}{1}}
{\setlength{\headheight}{13.59999pt}}
{}
%
\ififiseries@hcenter
\geometry{%
bindingoffset=\ifiseries@bindingoffset, %
heightrounded, %
headsep=\ifiseries@headsepmult\baselineskip, %
footskip=\ifiseries@footskipmult\baselineskip, %
left=3\paperwidth/(2*\ifiseries@marginfrac), hmarginratio=1:1, %
includehead, top=\paperheight/\ifiseries@marginfrac, vmarginratio=1:2}
\else
\geometry{%
bindingoffset=\ifiseries@bindingoffset, %
heightrounded, %
headsep=\ifiseries@headsepmult\baselineskip, %
footskip=\ifiseries@footskipmult\baselineskip, %
left=\paperwidth/\ifiseries@marginfrac, hmarginratio=1:2, %
includehead, top=\paperheight/\ifiseries@marginfrac, vmarginratio=1:2}
\fi
\fi % pagelayout
%% Folios and running titles (and others, see below).
\ififiseries@leftmarkright\let\rightmark\leftmark\fi
\RequirePackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\@ifclassloaded{book}{%
\let\@frontmatter\frontmatter
\renewcommand*{\frontmatter}{\@frontmatter\renewcommand*{\chaptermark}[1]{\markboth{##1}{##1}}}
\let\@mainmatter\mainmatter
\renewcommand*{\mainmatter}{\@mainmatter\renewcommand*{\chaptermark}[1]{\markboth{\thechapter. \ ##1}{}}}
\let\@backmatter\backmatter
\renewcommand*{\backmatter}{\@backmatter\bookmarksetup{startatroot}}
\let\@appendix\appendix
\renewcommand*{\appendix}{\bookmarksetup{startatroot}\@appendix}
\fancyhead[LE]{\nouppercase{\leftmark}}
}{ %%% else ifclassloaded book
\ififiseries@runningtitle\fancyhead[LE]{\nouppercase{\rightmark}}\fi
} %%% end ifclassloaded book
\ififiseries@runningtitle\fancyhead[RO]{\nouppercase{\rightmark}}\fi
\fancyfoot[RO]{\thepage}
\fancyfoot[LE]{\thepage}
\renewcommand*{\headrulewidth}{0pt}
\fancypagestyle{plain}{\fancyhf{}\fancyfoot[LE]{\thepage}\fancyfoot[RO]{\thepage}}
%% Compact system: reduce margins.
\expandafter\ifiseries@temp@compact\expandafter{\ifiseries@compact}
%% Empty clearpages (i.e., pages left blank before a chapter start).
\renewcommand*{\cleardoublepage}{%
\clearpage
\if@twoside
\ifodd
\c@page
\else
\thispagestyle{empty}
\hbox{}
\newpage
\if@twocolumn
\hbox{}
\newpage
\fi
\fi
\fi
}
%% Section headings.
\RequirePackage{sectsty}
\sectionfont{\normalfont\Large\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\subsectionfont{\normalfont\large\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\subsubsectionfont{\normalfont\normalsize\ifiseries@sectionfontweight\ifiseries@titlefontfamily}
\ififiseries@dottednumbers
\def\@seccntformat#1{\csname the#1\endcsname.\quad}
\def\@subseccntformat#1{\csname the#1\endcsname.\quad}
\def\@subsubseccntformat#1{\csname the#1\endcsname.\quad}
\fi
%% Part title page (package 'sectsty' must be loaded first).
\newenvironment{centerpage}%
{\begin{adjustwidth*}%
{(\paperwidth-\textwidth)/2-1in-\oddsidemargin+\ifiseries@bindingoffset}%
{(\paperwidth-\textwidth)/2-1in-\evensidemargin}%
\centering}%
{\end{adjustwidth*}}
\newcommand*{\typesetpart}[1]{{%
\begin{centerpage}
\null
\vspace{.20\textheight}
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\LARGE\sc\bfseries\ifiseries@titlefontfamily \partname\nobreakspace\thepart
\par\normalsize\normalfont
\vskip 20\p@
\fi
\Huge \bfseries \ifiseries@titlefontfamily #1\par
\end{centerpage}
}}
\renewcommand*{\part}{%
\if@openright
\FloatBarrier
\newpage\thispagestyle{empty}\hbox{}
\cleardoublepage
\else
\clearpage
\fi
\thispagestyle{empty}%
\if@twocolumn
\onecolumn
\@tempswatrue
\else
\@tempswafalse
\fi
\secdef\@part\@spart%
}
\renewcommand*{\@part}[2][]{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{}{}%
\typesetpart{#2}%
\@endpart%
}
%% Chapter titles
%% cf. texlive/2011/texmf-dist/tex/latex/base/book.cls
\@ifclassloaded{book}{%
\renewcommand*{\@makechapterhead}[1]{%
%\vspace*{20\p@}%
{\parindent \z@ \flushright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\large\sc\ifiseries@chapterfontweight\ifiseries@titlefontfamily \@chapapp\space \thechapter
\par\normalsize\normalfont\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\huge \ifiseries@chapterfontweight \ifiseries@titlefontfamily #1\par\nobreak
\vskip 50\p@
}}
\renewcommand*{\@makeschapterhead}[1]{%
%\vspace*{50\p@}%
{\parindent \z@ \flushright
\normalfont
\interlinepenalty\@M
{\huge\bfseries #1\par\nobreak}
\vskip 50\p@
}}
}{} %%% end ifclassloaded book
} %%% end ifclassloaded not beamer
%% Bibliography.
\@ifclassloaded{book}{%
\newcommand*{\preparebibliography}{%
\renewcommand*{\refname}{\ifiseries@refname}%
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\refname}
}%
\newcommand*{\tocbibliography}{%
\preparebibliography%
\ififiseries@biblatex\printbibliography\else\bibliography{\ifiseries@bibresource}\fi}}{%
\newcommand*{\preparebibliography}{%
\renewcommand*{\refname}{\ifiseries@refname}%
\phantomsection
\addcontentsline{toc}{section}{\refname}
}%
\newcommand*{\tocbibliography}{%
\preparebibliography%
\ififiseries@biblatex\printbibliography\else\bibliography{\ifiseries@bibresource}\fi}}
%% For multiple authors.
\newcommand*{\andauthor}{\\[.5\baselineskip]}
%% Command to create generic cover pages.
\ifthenelse{\equal{\ifiseries@compact}{}}{\newcommand*{\ifiseries@titlepagetopskip}{}}%
{\newcommand*{\ifiseries@titlepagetopskip}{\vspace*{5ex}}}
\newcommand{\gentitlepage}[4]{%
\newpage
\thispagestyle{empty}
\begin{centerpage}
\ifiseries@titlepagetopskip%
\Huge #1\\
\normalsize\vspace{5ex}
\Large \ifthenelse{\equal{#2}{}}{\mbox{ }}{#2}\\
\normalsize\vspace{5ex}
\Large #3\\
\normalsize\vfill
#4
\end{centerpage}}
%% Command to create the cover page for dissertations.
\newcommand{\disstitlepage}[5]{%
\gentitlepage{#1}{#2}{#3}{%
Dissertation\\
zur Erlangung des akademischen Grades\\
%
\ifstrequal{#4}{nat}{%
Doktor der Naturwissenschaften\\%
(Dr.~rer.~nat.)\\%
}{\ifstrequal{#4}{ing}{%
Doktor der Ingenieurwissenschaften\\%
(Dr.-Ing.)\\%
}{}}%
%
der Technischen Fakult\"at\\
der Christian-Albrechts-Universit\"at zu Kiel\\
eingereicht im Jahr #5}}
%% Command to create the cover page for student's thesis.
\newcommand{\studtitlepage}[7]{%
\gentitlepage{#1}{#2}{#3}{%
#4\\
eingereicht im Jahr #5\\
\vspace{1ex}
Christian-Albrechts-Universit\"at zu Kiel\\
#6\\
\vspace{1ex}
Betreut durch: #7}}
%% Command to create the reviewer page for dissertations.
\newcommand{\dissreviewerpage}[4]{%
\newpage
\thispagestyle{plain}
\vspace*{.5\textheight}
\noindent
\begin{tabular}{@{}p{.20\textwidth}@{\hspace{.05\textwidth}}p{.75\textwidth}@{}}
1.~Gutachter: & \ifthenelse{\equal{#1}{_}}{\rule{12em}{.3pt}}{#1} \\[1em]
2.~Gutachter: & \ifthenelse{\equal{#2}{_}}{\rule{12em}{.3pt}}{#2}
\ifthenelse{\equal{#3}{}}{}{\\[1em] 3.~Gutachter: & \ifthenelse{\equal{#3}{_}}{\rule{12em}{.3pt}}{#3}}
\end{tabular}
\par
\vspace*{2em}
\noindent
Datum der m\"undlichen Pr\"ufung:~\ifthenelse{\equal{#4}{_}}{\rule{12em}{.3pt}}{#4}}
%% Eidesstattliche Erklaerung
\newcommand*{\eidesstatt}{%
\newpage
\thispagestyle{plain}
\hskip 0mm
\vfill
\noindent
\begin{otherlanguage}{ngerman}
\textbf{Eidesstattliche Erkl{\"a}rung}\par
\bigskip\noindent Hiermit erkl{\"a}re ich an Eides statt, dass
ich die vorliegende Arbeit selbst\-st{\"a}n\-dig verfasst und keine
anderen als die angegebenen Quellen und Hilfsmittel verwendet habe.\par
\bigskip\noindent Kiel,
\vskip 10mm
\hfill\rule{18em}{.3pt}%
\end{otherlanguage}}
%% Command to create a page with meta data.
\newcommand{\metapage}[7]{%
\newpage%
\thispagestyle{plain}%
\footnotesize%
\mbox{}\vfill%
\begin{itemize}[label=]%
\item Kiel Computer Science Series (KCSS) #1%
\item
ISSN 2193-6781 (print version)\\
ISSN 2194-6639 (electronic version)
\item Electronic version, updates, errata available via
\url{https://www.informatik.uni-kiel.de/kcss}
\ifthenelse{\equal{#2}{}}{}{\item The author can be contacted via #2}%
\item Published by the Department of Computer Science, Christian-Albrechts-Universit\"at zu Kiel%
\item #3%
\item Please cite as:%
\begin{itemize}%
\item #4%
\end{itemize}%
\item \lstinputlisting[%
nolol=true,frame=none,numbers=none,language={},style={},keywordsprefix={},basicstyle=\tt,%
aboveskip=\medskipamount,belowskip=\medskipamount,lineskip=0pt,boxpos=c,print=true,%
showlines=false,gobble=0,tabsize=8,showtabs=false,showspaces=false,%
linewidth=\linewidth,xleftmargin=0pt,xrightmargin=0pt,resetmargins=false,breaklines=false,%
columns={[c]fixed},flexiblecolumns=false,keepspaces=false,basewidth={0.6em,0.45em},fontadjust=false,%
mathescape=false,escapechar={},escapeinside={},%
]{#5}%
\item \textcopyright\ #6%
\ifthenelse{\equal{#7}{}}{}{\item #7}%
\end{itemize}%
\normalsize}
%% Paragraph skip instead of paragraph indentation.
\ififiseries@halfparskip
\setlength{\parskip}{.5\baselineskip plus .5\baselineskip}
\setlength{\parindent}{0em}
\setlength{\parfillskip}{\ifiseries@halfparskipfill\textwidth plus 1fil}
\fi
%% Enumeration environments.
%
\ififiseries@halfparskip
%
% For halfparskip, we set topsep to 0 everywhere.
% This seems to be necessary to prevent excessive whitespace.
%
\setitemize{leftmargin=*, label=$\triangleright$, topsep=0em}
\setenumerate{leftmargin=*, topsep=0em}
\setdescription{leftmargin=\parindent, style=sameline, font=\it, topsep=0em}
\setlist[compactitemize]{%
label=\raisebox{.1em}{\smaller\textbullet},%
leftmargin=*,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactitemize,2,3]{%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactenumerate]{%
label=\arabic*.,%
leftmargin=*,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
% FIXME: third level does not work for compactenumerate
\setlist[compactenumerate,2]{%
label=(\alph*),%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactdescription]{%
style=sameline,%
font=\it,%
leftmargin=\parindent,%
topsep=.0em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactdescription,2,3]{%
topsep=.0em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
\else
%
% Settings for non-halfparskip (the normal settings).
%
\@ifclassloaded{beamer}{\setitemize{leftmargin=*,%
label={\usebeamercolor[fg]{itemize item}%
\scriptsize\raise1.25pt\hbox{\donotcoloroutermaths$\blacktriangleright$}}}%
\setenumerate{leftmargin=*}%
\setdescription{font={\normalfont\usebeamercolor[fg]{itemize item}}}}%
{\setitemize{leftmargin=*, label=$\triangleright$}%
\setenumerate{leftmargin=*}%
\setdescription{leftmargin=\parindent, style=sameline, font=\it}}
\setlist[compactitemize]{%
label=\raisebox{.1em}{\smaller\textbullet},%
leftmargin=*,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactitemize,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactenumerate]{%
label=\arabic*.,%
leftmargin=*,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactenumerate,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
%
\setlist[compactdescription]{%
style=sameline,%
font=\it,%
leftmargin=\parindent,%
topsep=.4em plus .1em,%
parsep=.2em plus .1em,%
itemsep=.2em plus .1em,%
}
\setlist[compactdescription,2,3]{%
topsep=.1em,%
partopsep=.1em,%
parsep=.1em,%
itemsep=.1em,%
}
\fi
%% Figures and captions.
\captionsetup{font=small,labelfont=bf,labelsep=period}
\ifdefstring{\ifiseries@figure}{floatrow}{%
\captionsetup[subfigure]{labelformat=parens,labelsep=space}%
\floatsetup[table]{style=plaintop}%
\floatsetup[figure]{capbesideposition={center,inside},facing=yes}}{}
% Alter some defaults for better treatment of figures.
% Taken from http://mintaka.sdsu.edu/GF/bibliog/latex/floats.html
% See also p.105 of "TeX Unbound" for suggested values.
% General parameters, for ALL pages:
\renewcommand*{\topfraction}{0.9} % max fraction of floats at top
\renewcommand*{\bottomfraction}{0.8} % max fraction of floats at bottom
% Parameters for TEXT pages (not float pages):
\setcounter{topnumber}{2}
\setcounter{bottomnumber}{2}
\setcounter{totalnumber}{4} % 2 may work better
\setcounter{dbltopnumber}{2} % for 2-column pages
\renewcommand*{\dbltopfraction}{0.9} % fit big float above 2-col. text
\renewcommand*{\textfraction}{0.07} % allow minimal text w. figs
% Parameters for FLOAT pages (not text pages):
\renewcommand*{\floatpagefraction}{0.7} % require fuller float pages
% N.B.: floatpagefraction MUST be less than topfraction
\renewcommand*{\dblfloatpagefraction}{0.7} % require fuller float pages
%% Hyperref's \autoref feature.
\@ifclassloaded{beamer}{}{%
\providecommand{\subfigureautorefname}{\figureautorefname}
% \extrasenglish seem to be invoked twice, so need \renew.. there, hence all \...refname must be defined
\ifthenelse{\isundefined{\algorithmautorefname}}{\newcommand*{\algorithmautorefname}{Algorithm}}{}
\addto\extrasenglish{
\renewcommand*{\chapterautorefname}{Chapter}
\renewcommand*{\sectionautorefname}{Section}
\renewcommand*{\subsectionautorefname}{Section}
\renewcommand*{\algorithmautorefname}{Algorithm}}
} %%% end ifclassloaded not beamer
%% Configure listings package.
\lstset{basicstyle=\tt}
%% Configure the url package, and adjust \href command.
\ifthenelse{\isundefined{\DeclareUrlCommand}}{\renewcommand*{\path}[1]{\url{#1}}}{\DeclareUrlCommand\path{}} %%% workaround
\renewcommand*{\UrlFont}{\smaller\tt}
\let\@href\href
\renewcommand*{\href}[3][]{\@href[#1]{#2}{\UrlFont #3}}
%% Display settings.
\allowdisplaybreaks
\AtBeginDocument{
\setlength{\abovedisplayshortskip}{-.5\baselineskip plus .5\baselineskip}
\setlength{\abovedisplayskip}{\medskipamount}
\setlength{\belowdisplayshortskip}{\medskipamount}
\setlength{\belowdisplayskip}{\medskipamount}
}
\fi % ifiseries@layout

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 95 KiB

View file

@ -0,0 +1,865 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
color-rendering="auto"
color-interpolation="auto"
text-rendering="auto"
width="376.84402"
stroke-miterlimit="10"
shape-rendering="auto"
font-weight="normal"
height="197.10254"
font-style="normal"
font-size="12"
image-rendering="auto"
id="svg3225"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="Kielprints Deployment.svg"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:0;stroke-dasharray:none;stroke-dashoffset:0;font-family:Dialog">
<metadata
id="metadata3463">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1323"
inkscape:window-height="788"
id="namedview3461"
showgrid="false"
inkscape:zoom="2.1325301"
inkscape:cx="170.54338"
inkscape:cy="106.04333"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg3225"
units="mm"
fit-margin-left="1"
fit-margin-top="1"
fit-margin-bottom="1"
fit-margin-right="1" />
<!--Generated by the Batik Graphics2D SVG Generator-->
<defs
id="genericDefs">
<defs
id="defs1">
<clipPath
id="clipPath1"
clipPathUnits="userSpaceOnUse">
<path
id="path3232"
d="m -7,-7 358,0 0,208 -358,0 0,-208 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath2"
clipPathUnits="userSpaceOnUse">
<path
id="path3235"
d="M 0,0 332,0 332,19 0,19 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath3"
clipPathUnits="userSpaceOnUse">
<path
id="path3238"
d="m 0,0 0,163 331,0 0,-163 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath4"
clipPathUnits="userSpaceOnUse">
<path
id="path3241"
d="m -7,-7 138,0 0,58 -138,0 0,-58 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath5"
clipPathUnits="userSpaceOnUse">
<path
id="path3244"
d="M 0,0 96,0 96,40 0,40 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath6"
clipPathUnits="userSpaceOnUse">
<path
id="path3247"
d="m -7,-7 38,0 0,38 -38,0 0,-38 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath7"
clipPathUnits="userSpaceOnUse">
<path
id="path3250"
d="m -7,-7 30,0 0,30 -30,0 0,-30 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath8"
clipPathUnits="userSpaceOnUse">
<path
id="path3253"
d="m -49,-15 147,0 0,45 -147,0 0,-45 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath9"
clipPathUnits="userSpaceOnUse">
<path
id="path3256"
d="m -63,-15 189,0 0,45 -189,0 0,-45 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath10"
clipPathUnits="userSpaceOnUse">
<path
id="path3259"
d="m -43,-15 129,0 0,45 -129,0 0,-45 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath11"
clipPathUnits="userSpaceOnUse">
<path
id="path3262"
d="M 0,0 124,0 124,104 0,104 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath12"
clipPathUnits="userSpaceOnUse">
<path
id="path3265"
d="M 0,0 125,0 125,104 0,104 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath13"
clipPathUnits="userSpaceOnUse">
<path
id="path3268"
d="M 100,0 100,125 -4,125 -4,0 100,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath14"
clipPathUnits="userSpaceOnUse">
<path
id="path3271"
d="M 0,0 104,0 104,114 0,114 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath15"
clipPathUnits="userSpaceOnUse">
<path
id="path3274"
d="M 0,0 104,0 104,125 0,125 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
<clipPath
id="clipPath16"
clipPathUnits="userSpaceOnUse">
<path
id="path3277"
d="M 0,0 126,0 126,104 0,104 0,0 z"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
</defs>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3283"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(4.0433847,4.0592348)"
font-size="11">
<polygon
style="fill:none"
id="polygon3285"
clip-path="url(#clipPath1)"
points="339,0 331,8 0,8 8,0 " />
<polygon
style="fill:none"
id="polygon3287"
clip-path="url(#clipPath1)"
points="339,181 331,189 331,8 339,0 " />
<rect
style="fill:none"
id="rect3289"
clip-path="url(#clipPath1)"
y="8"
height="181"
width="331"
x="0" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3291"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(4.0433847,12.059235)"
font-size="11">
<text
style="stroke:none"
id="text3293"
clip-path="url(#clipPath2)"
y="16"
xml:space="preserve"
x="131">SunFire 4250</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3295"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(14.043385,44.059235)"
font-size="11">
<rect
style="stroke:none"
id="rect3297"
clip-path="url(#clipPath4)"
y="0"
height="40"
width="120"
x="0" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3299"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(14.043385,44.059235)"
font-size="11">
<rect
style="fill:none"
id="rect3301"
clip-path="url(#clipPath4)"
y="0"
height="39"
width="119"
x="0" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3303"
stroke-miterlimit="10"
y2="5"
y1="5"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3305"
stroke-miterlimit="10"
y2="21"
y1="5"
x2="114"
x1="114"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3307"
stroke-miterlimit="10"
y2="21"
y1="21"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3309"
stroke-miterlimit="10"
y2="8"
y1="5"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3311"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="8"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3313"
stroke-miterlimit="10"
y2="14"
y1="12"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3315"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="14"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3317"
stroke-miterlimit="10"
y2="21"
y1="18"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3319"
text-rendering="geometricPrecision"
transform="translate(14.043385,44.059235)"
font-size="11">
<text
style="stroke:none"
id="text3321"
clip-path="url(#clipPath5)"
y="15"
xml:space="preserve"
x="7">&lt;&lt;component&gt;&gt;</text>
<text
style="font-weight:bold;stroke:none"
id="text3323"
clip-path="url(#clipPath5)"
font-weight="bold"
y="30"
xml:space="preserve"
x="16">PostgreSQL</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3325"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(194.04338,44.059235)"
font-size="11">
<rect
style="stroke:none"
id="rect3327"
clip-path="url(#clipPath4)"
y="0"
height="40"
width="120"
x="0" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3329"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(194.04338,44.059235)"
font-size="11">
<rect
style="fill:none"
id="rect3331"
clip-path="url(#clipPath4)"
y="0"
height="39"
width="119"
x="0" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3333"
stroke-miterlimit="10"
y2="5"
y1="5"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3335"
stroke-miterlimit="10"
y2="21"
y1="5"
x2="114"
x1="114"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3337"
stroke-miterlimit="10"
y2="21"
y1="21"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3339"
stroke-miterlimit="10"
y2="8"
y1="5"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3341"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="8"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3343"
stroke-miterlimit="10"
y2="14"
y1="12"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3345"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="14"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3347"
stroke-miterlimit="10"
y2="21"
y1="18"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3349"
text-rendering="geometricPrecision"
transform="translate(194.04338,44.059235)"
font-size="11">
<text
style="stroke:none"
id="text3351"
clip-path="url(#clipPath5)"
y="15"
xml:space="preserve"
x="7">&lt;&lt;component&gt;&gt;</text>
<text
style="font-weight:bold;stroke:none"
id="text3353"
clip-path="url(#clipPath5)"
font-weight="bold"
y="30"
xml:space="preserve"
x="28">Apache</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3355"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(194.04338,134.05924)"
font-size="11">
<rect
style="stroke:none"
id="rect3357"
clip-path="url(#clipPath4)"
y="0"
height="40"
width="120"
x="0" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3359"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(194.04338,134.05924)"
font-size="11">
<rect
style="fill:none"
id="rect3361"
clip-path="url(#clipPath4)"
y="0"
height="39"
width="119"
x="0" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3363"
stroke-miterlimit="10"
y2="5"
y1="5"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3365"
stroke-miterlimit="10"
y2="21"
y1="5"
x2="114"
x1="114"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3367"
stroke-miterlimit="10"
y2="21"
y1="21"
x2="114"
x1="104"
clip-path="url(#clipPath4)" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3369"
stroke-miterlimit="10"
y2="8"
y1="5"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3371"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="8"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3373"
stroke-miterlimit="10"
y2="14"
y1="12"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
<rect
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="rect3375"
stroke-miterlimit="10"
height="4"
width="7"
clip-path="url(#clipPath4)"
y="14"
x="101" />
<line
style="fill:none;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10"
id="line3377"
stroke-miterlimit="10"
y2="21"
y1="18"
x2="104"
x1="104"
clip-path="url(#clipPath4)" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3379"
text-rendering="geometricPrecision"
transform="translate(194.04338,134.05924)"
font-size="11">
<text
style="stroke:none"
id="text3381"
clip-path="url(#clipPath5)"
y="15"
xml:space="preserve"
x="7">&lt;&lt;component&gt;&gt;</text>
<text
style="font-weight:bold;stroke:none"
id="text3383"
clip-path="url(#clipPath5)"
font-weight="bold"
y="30"
xml:space="preserve"
x="28">ePrints</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3385"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(154.04338,54.059235)"
font-size="11">
<circle
style="stroke:none"
sodipodi:ry="9.5"
sodipodi:rx="9.5"
sodipodi:cy="9.5"
sodipodi:cx="9.5"
d="M 19,9.5 C 19,14.746705 14.746705,19 9.5,19 4.2532949,19 0,14.746705 0,9.5 0,4.2532949 4.2532949,0 9.5,0 14.746705,0 19,4.2532949 19,9.5 z"
id="circle3387"
cy="9.5"
cx="9.5"
clip-path="url(#clipPath6)"
r="9.5" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3389"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(154.04338,54.059235)"
font-size="11">
<circle
style="fill:none"
sodipodi:ry="9.5"
sodipodi:rx="9.5"
sodipodi:cy="9.5"
sodipodi:cx="9.5"
d="M 19,9.5 C 19,14.746705 14.746705,19 9.5,19 4.2532949,19 0,14.746705 0,9.5 0,4.2532949 4.2532949,0 9.5,0 14.746705,0 19,4.2532949 19,9.5 z"
id="circle3391"
cy="9.5"
cx="9.5"
clip-path="url(#clipPath6)"
r="9.5" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3393"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(244.04338,94.059239)"
font-size="11">
<circle
style="stroke:none"
sodipodi:ry="9.5"
sodipodi:rx="9.5"
sodipodi:cy="9.5"
sodipodi:cx="9.5"
d="M 19,9.5 C 19,14.746705 14.746705,19 9.5,19 4.2532949,19 0,14.746705 0,9.5 0,4.2532949 4.2532949,0 9.5,0 14.746705,0 19,4.2532949 19,9.5 z"
id="circle3395"
cy="9.5"
cx="9.5"
clip-path="url(#clipPath6)"
r="9.5" />
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3397"
stroke-miterlimit="0"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(244.04338,94.059239)"
font-size="11">
<circle
style="fill:none"
sodipodi:ry="9.5"
sodipodi:rx="9.5"
sodipodi:cy="9.5"
sodipodi:cx="9.5"
d="M 19,9.5 C 19,14.746705 14.746705,19 9.5,19 4.2532949,19 0,14.746705 0,9.5 0,4.2532949 4.2532949,0 9.5,0 14.746705,0 19,4.2532949 19,9.5 z"
id="circle3399"
cy="9.5"
cx="9.5"
clip-path="url(#clipPath6)"
r="9.5" />
</g>
<g
style="font-size:11px;fill:#7acff5;fill-opacity:1;stroke:#7acff5;stroke-opacity:1;font-family:sans-serif"
id="g3401"
text-rendering="geometricPrecision"
transform="translate(338.04338,70.059235)"
font-size="11">
<rect
style="stroke:none"
id="rect3403"
clip-path="url(#clipPath7)"
y="0"
height="12"
width="12"
x="0" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;font-family:sans-serif"
id="g3405"
stroke-miterlimit="0"
text-rendering="geometricPrecision"
transform="translate(338.04338,70.059235)"
font-size="11">
<rect
style="fill:none"
id="rect3407"
clip-path="url(#clipPath7)"
y="0"
height="12"
width="12"
x="0" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3421"
text-rendering="geometricPrecision"
transform="translate(333.04338,81.059239)"
font-size="11">
<text
style="stroke:none"
id="text3423"
clip-path="url(#clipPath8)"
y="12"
xml:space="preserve"
x="12">HTTP</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3425"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(256.04338,92.059239)"
font-size="11">
<text
style="stroke:none"
id="text3427"
clip-path="url(#clipPath9)"
y="12"
xml:space="preserve"
x="9">CGI/Perl</text>
</g>
<g
style="font-size:11px;font-weight:bold;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:sans-serif"
id="g3429"
font-weight="bold"
text-rendering="geometricPrecision"
transform="translate(142.04338,74.059235)"
font-size="11">
<text
style="stroke:none"
id="text3431"
clip-path="url(#clipPath10)"
y="12"
xml:space="preserve"
x="10">SQL</text>
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;font-family:sans-serif"
id="g3433"
text-rendering="geometricPrecision"
transform="translate(85.043385,14.059235)"
font-size="11">
<line
style="fill:none"
id="line3435"
y1="50"
x2="50"
clip-path="url(#clipPath11)"
x1="70"
y2="50" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;font-family:sans-serif"
id="g3437"
text-rendering="geometricPrecision"
transform="translate(122.04338,14.059235)"
font-size="11">
<line
style="fill:none"
id="line3439"
y1="50"
x2="56"
clip-path="url(#clipPath12)"
x1="71"
y2="50" />
<path
style="fill:none"
inkscape:connector-curvature="0"
id="path3441"
transform="matrix(0,-1,1,0,0,100)"
clip-path="url(#clipPath13)"
d="m 37,42.8571 a 13,13 0 0 0 26,0" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;font-family:sans-serif"
id="g3443"
text-rendering="geometricPrecision"
transform="translate(204.04338,35.059235)"
font-size="11">
<line
style="fill:none"
id="line3445"
y1="60"
x2="50"
clip-path="url(#clipPath14)"
x1="50"
y2="50" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;font-family:sans-serif"
id="g3447"
text-rendering="geometricPrecision"
transform="translate(204.04338,62.059235)"
font-size="11">
<line
style="fill:none"
id="line3449"
y1="71"
x2="50"
clip-path="url(#clipPath15)"
x1="50"
y2="56" />
<path
style="fill:none"
inkscape:connector-curvature="0"
id="path3451"
clip-path="url(#clipPath15)"
d="m 37,42.8571 a 13,13 0 0 0 26,0" />
</g>
<g
style="font-size:11px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;font-family:sans-serif"
id="g3453"
text-rendering="geometricPrecision"
transform="translate(265.04338,22.059235)"
font-size="11">
<line
style="fill:none"
id="line3455"
y1="50"
x2="72"
clip-path="url(#clipPath16)"
x1="50"
y2="50" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 156 KiB

View file

@ -0,0 +1,11 @@
@Comment{$ biblatex control file $}
@Comment{$ biblatex version 1.7 $}
Do not modify this file!
This is an auxiliary file used by the 'biblatex' package.
This file may safely be deleted. It will be recreated as
required.
@Control{biblatex-control,
options = {1.7:0:0:0:0:1:1:1:0:0:1:0:12:1:2:1:79:+},
}

BIN
Proposal/LaTeX/proposal.pdf Normal file

Binary file not shown.

213
Proposal/LaTeX/proposal.tex Normal file
View file

@ -0,0 +1,213 @@
\input{docstyleDE}
% Einrichtung von Paket Glossaries
\usepackage[ngerman]{translator}
\usepackage[xindy,toc,style=altlistgroup]{glossaries}
\input{glossary} % Glossardaten ausgelagert
\makeglossaries
% PDF Metadaten
\hypersetup{pdftitle=Monitoring von Perl-basierten Webanwendungen mittels Kieker}
\hypersetup{pdfauthor=Nis Börge Wechselberg}
\hypersetup{pdfsubject=Proposal zur Bachelor-Arbeit}
\hypersetup{pdfkeywords=}
% Dokumenteninhalt
\begin{document}
% Präambel (Deckblatt, Inhalt, ...)
\frontmatter
\thesistitlepage
{Monitoring von Perl-basierten\\[.1em]Webanwendungen mittels Kieker}% Title
{Proposal zur Bachelor-Arbeit}% Thesistype
{Nis Börge Wechselberg}% Name
{\today}% Date
{Dipl.-Inf. Peer Brauer}
\tableofcontents
% Hauptteil
\mainmatter
\chapter{Einleitung}
Dieses Proposal soll zur genauen Definition des Themas und des Umfangs der Bachelorarbeit dienen. Hierzu wird zunächst die Zielsetzung der Arbeit und eine Einordnung in das umgebende Themenfeld vorgestellt. Anschließend werden die benötigten und verwendeten Technologien und Softwaresysteme vorgestellt.
Hierauf aufbauend wird dann das geplantes Vorgehen für die Lösung der Problemstellung aufgezeigt.
%\section{Zielsetzung der Arbeit} %Auskommentiert um Gliederungsfehler zu vermeiden
Die Bachelorarbeit trägt den Arbeitstitel \emph{Monitoring von Perl-basierten Webanwendungen mittels \gls{kieker}}. Somit soll in der Arbeit zunächst ein Monitoringverfahren für Perl-Anwendungen im Allgemeinen und Webanwendungen im speziellen etabliert werden. Das \gls{moni} soll hierbei mit dem \gls{kieker} Framework geschehen, welches bisher primär auf Java-Anwendungen ausgerichtet war. In mehreren Abschlussarbeiten wurden unter anderem bereits Erweiterungen für .NET oder COBOL sowie COM entwickelt, allerdings ist bisher noch kein \gls{moni} von Perl-Anwendungen möglich. Somit muss zunächst ein System entwickelt werden um Perl-Anwendungen mit \emph{\glspl{probe}} zu versehen und diese Daten anschließend an \gls{kieker} zu übergeben. Hierbei liegt der Fokus auf dem \emph{performance monitoring}, also der Erfassung des zeitlichen Verhaltens der Anwendung.
Mit diesen \emph{\glspl{probe}} soll dann zunächst eine isolierte Testanwendung instrumentiert werden und das Verhalten der Anwendung ausgewertet werden. Hierbei können erste Ergebnisse zu dem Einfluss der \emph{\glspl{probe}} auf die Laufzeit der Anwendung und das korrekte Verhalten der Probes ermittelt werden.
Sobald diese Tests erfolgreich abgeschlossen sind, sollen dann die Probes in die Anwendung Kielprints eingeführt werden. Diese Plattform wird vom Geomar Helmholtz-Zentrum betrieben und in der letzten Zeit sind hier einige Probleme mit dem Laufzeitverhalten beobachtet worden. Durch das Monitoring kann dann das Verhalten der Anwendung im Betrieb beobachtet werden. Es soll versucht werden Ursachen für Leistungseinbußen zu lokalisieren und Optimierungspotential in der Anwendung aufgezeigt werden.
Bei ausreichender Zeit können dann noch weitere Funktionen für die Perl-Schnittstelle implementiert werden wie Optionen zur automatischen oder teil-automatischen Instrumentierung der Anwendung oder andere Monitoringoptionen.
\chapter{Ziele \& Technologien}
Im folgenden werden kurz die wichtigsten Technologien und Softwaresysteme vorgestellt, welche im Rahmen dieser Bachelor-Arbeit eingesetzt werden sollen. Zuvor wird auf das Verfahren des Performance Monitorings (\ref{sec:perfmoni}) eingegangen um den Zweck dieser Systeme zu verdeutlichen. Die verwendeten Softwaresysteme umfassen neben der Programmiersprache Perl (\ref{sec:perl}) primär das Monitoring Framework \gls{kieker} (\ref{sec:kieker}). Das zu untersuchende System \gls{eprints} wird ebenfalls kurz vorgestellt (\ref{sec:eprints}) um die Rahmenbedingungen zu erläutern. Zum Abschluss werden dann die Ziele der Arbeit aufgelistet (\ref{sec:ziele}).
\section{Performance Monitoring}
\label{sec:perfmoni}
Beim Monitoring, auch dynamische Analyse genannt, werden während der Ausführung einer Anwendung Messdaten erzeugt und anschließend anhand dieser Messdaten das Verhalten der Anwendung analysiert. Dieses Verfahren steht als ergänzendes Mittel zur statischen Analyse, bei welchem die Software anhand ihres Quelltextes analysiert wird. Allerdings ist die statische Analyse für umfangreichere Softwaresysteme nur schwierig durchführbar. Mit der dynamischen Analyse können die tatsächlich ausgeführten Programmpfade ermittelt werden und direkt das Verhalten der Anwendung nachvollzogen werden.(\cite[vgl. auch][]{schmalenbach2007performancemanagement})
Mit verschiedenen Techniken können dann auch bei Bedarf nur Teile der Anwendung beobachtet werden und der Fokus auf bestimmte Programmteile gelegt werden.
Die dynamische Analyse wird auch häufig eingesetzt um das Verhalten eines existierenden Softwaresystems in Modernisierungsprozessen zu erfassen. Da Anwendungen häufig im Betrieb modifiziert und weiterentwickelt werden und hierbei mitunter die Dokumentation der Änderungen nur untergeordneten Charakter gegenüber der Funktionalität geniest, weicht häufig das dokumentierte Verhalten von dem tatsächlich beobachteten ab. Diese Differenzen können durch die dynamische Analyse erkannt werden und in den Modernisierungsprozess eingebunden werden.
Zur Durchführung des Monitorings wird der Quelltext des Programms mit sogenannten Probes versehen, welche verschiedene Ereignisse im Programmablauf protokollieren. Hierbei sind häufig Verzweigungen, Sprünge oder Funktionsaufrufe besonders von Interesse, aber auch andere Ereignisse wie Anfragen an Datenbanken können protokolliert werden.
Mit diesen Messdaten kann dann eine Analyse und Visualisierung durchgeführt werden um das Verhalten der Anwendung zu dokumentieren. Hierbei werden dann zum Beispiel UML Sequenz Diagramme erstellt oder das zeitliche Verhalten der Anwendung detailliert untersucht.
Der Schwerpunkt dieser Arbeit wird auf dem \emph{performance monitoring} liegen. Hierbei wird eine möglichst präzise Zeitmessung im Programmablauf durchgeführt und dieser Zeitcode in den \emph{\glspl{record}} eingefügt. Somit kann nicht nur die Aufrufreihenfolge sondern auch der zeitliche Ablauf, also konkret die Dauer zur Ausführung einer Funktion und auch die Häufigkeit der Ausführung, festgestellt werden. Somit können dann besonders lang und/oder häufig laufende Funktionen identifiziert werden um Ansatzpunkte für Performanceprobleme aufzuzeigen. Neben der Zeit können bei Bedarf auch noch weitere Systemdaten wie CPU-Auslastung oder Speicherverbrauch protokolliert werden.
\section{Kieker Monitoring Framework}
\label{sec:kieker}
\gls{kieker}\footnote{\url{http://www.kieker-monitoring.net}} ist ein System zum \gls{moni} und zur Analyse des Laufzeit-Verhaltens einer Software. Es wird seit 2006 in der Arbeitsgruppe Software Engineering an der CAU Kiel entwickelt. Frühere Versionen von \gls{kieker} waren primär auf das \gls{moni} von Java-Anwendungen ausgerichtet, doch wurden bereits ergänzende Module entwickelt oder befinden sich zur Zeit in der Entwicklung um zum Beispiel .NET oder COBOL mit \gls{kieker} analysieren zu können. Seit 2011 wird \gls{kieker} von der SPEC Research Group als empfohlenes Tool im SPEC RG Software Verzeichnis\footnote{\url{http://research.spec.org/projects/tools.html}} angeboten.
\begin{figure}
\centering
\includegraphics[width=0.96\textwidth]{images/kiekerComponentDiagram-woCloud-bw-w-record-newNames-withTraceAnalysis-colors}
\caption[Kieker Komponentendiagramm]{Kieker Komponentendiagramm \footnotemark}
\label{fig:KiekerComponentDiagram}
\end{figure}
Wie in Grafik \ref{fig:KiekerComponentDiagram} dargestellt besteht \gls{kieker} aus den zwei zentralen Komponenten Kieker.Monitoring und Kieker.Analysis. Die Monitoring Komponente stellt Klassen und Methoden zum Instrumentieren und Überwachen der Software zur Verfügung. Hierzu werden von \emph{\glspl{probe}} Messungen vorgenommen und hierzu \emph{\glspl{record}} erstellt. Diese \emph{\glspl{record}} werden dann an einen \emph{monitoring writer} übergeben, der die Informationen in eine Log-Datei schreibt oder mit einem Stream an die Analysis Komponente übergibt. Zum \gls{moni} stehen manuelle Methoden aber auch automatische Mechanismen zur Verfügung die, zum Beispiel mittels \emph{AspectJ}, die Programmstruktur analysieren und automatisch die benötigten Messpunkte erzeugen.
Die Analyse der erhaltenen Daten wird mittels Kieker.Analysis durchgeführt. Diese Komponente liest die \emph{\glspl{record}} ein und stellt einen konfigurierbaren Ablauf zum Filtern, Analysieren und Visualisieren der Daten bereit. Hierbei können zum Beispiel Sequenz Diagramme oder Abhängigkeitsbäume erzeugt werden um das Verhalten der Anwendung zu beschreiben.
Die Kieker.Monitoring Funktionen werden in dieser Arbeit nicht oder nur teilweise eingesetzt werden, da sie primär auf Java-Anwendungen ausgerichtet sind. Allerdings werden die Kieker.Analysis Funktionen benutzt werden um die weitere Analyse durchzuführen.
\footnotetext{Grafik entnommen aus \citep{Kieker1.6UserGuide}}
\section{Perl}
\label{sec:perl}
Die Programmiersprache Perl\footnote{\url{http://www.perl.org}} ist eine imperative, plattformunabhängige, interpretierte Programmiersprache. Die erste Version wurde 1987 vorgestellt und hat seine Wurzeln primär in C und awk. Die aktuelle Version ist Perl 5.16, die im Mai 2012 veröffentlicht wurde. Perl ist eine interpretierte Programmiersprache, also werden die Programme nicht zu einer nativen Anwendung übersetzt sondern mit einem Interpreter ausgeführt. Der Perl-Interpreter ist für alle relevanten Betriebssysteme verfügbar und in vielen Systemen bereits integriert.
In Perl werden verschiedenste Programmierparadigmen umgesetzt, allerdings ist es dem Programmierer freigestellt, welche dieser Möglichkeiten er umsetzen will. So ist zum Beispiel die Objektorientierung ein Teil der Sprache, allerdings nicht wie in Java erzwungen. Auch stellt Perl häufig mehrere Optionen für die selben Probleme bereit, so können häufig Befehle verkürzt werden oder es stehen mehrere äquivalente Befehle zur Verfügung. Dies führt allerdings sehr schnell zu schlechter Lesbarkeit der Programme, da Perl auch eine sehr freie Syntax ermöglicht. Zeilenumbrüche und Leerzeichen sind weitgehend bedeutungslos und führen zu einem sehr unterschiedlichen Code-Format und sehr persönlichen Gestaltungen der Programme.
Eines der stärksten Features von Perl sind Reguläre Ausdrücke. Bereits in frühen Versionen wurden diese unterstützt und aufgrund der hohen Verbreitung von Perl wurden die Perl Syntax de facto Standard für Reguläre Ausdrücke. Auch aufgrund dieser Stärke bei der Verarbeitung von Regulären Ausdrücken und der guten Verbindung mit anderen Softwaresystemen wird Perl in vielen Websystemen eingesetzt. Die meisten Webserver bieten Schnittstellen um den Perl-Interpreter einzubinden und Perl-Anwendungen somit in die Webpräsenz einzubinden.
\section{ePrints / Kielprints}
\label{sec:eprints}
Das System \gls{eprints} ist eine quelloffene Webplattform zur Veröffentlichung von Publikationen, Forschungsberichten oder anderen Dokumenten. Die Plattform implementiert dabei das OAI-PMH\footnote{Open Archives Initiative Protocol for Metadata Harvesting} Protokoll und ist somit ein Projekt zur Umsetzung von Open Access. \gls{eprints} wurde initial von der University of Southampton entwickelt und unter der \citep{gpl} lizenziert. Die Plattform wurde in Perl implementiert und steht zur Zeit in der Version 3.3 zum Download\footnote{\url{http://www.eprints.org/software/}} bereit.
An der Universität Kiel wird die Software Kielprints verwendet, was einen angepasste Version von \gls{eprints} ist. Betrieben wird diese Plattform von dem Kieler Datenmanagement Team am Geomar Helmholtz-Zentrum für Ozeanforschung Kiel. Das Deployment der Anwendung ist in der Abbildung \ref{fig:deploy} grob skizziert.
\begin{figure}
\centering
\includegraphics[width=0.6\textwidth]{images/deployment}
\caption{Deployment der Kielprints-Anwendung}
\label{fig:deploy}
\end{figure}
Für die Plattform wurden bereits einige Erweiterungen entwickelt und in die Plattform integriert. Mit der Öffnung der Plattform für alle Institute der Universität sind unerwartete Performanceprobleme aufgetreten. Diese sollen mit dieser Arbeit und den entwickelten Modulen aufgespürt werden. Diese Probleme treten einerseits für die Benutzer beim Datenabruf auf, wobei unerwünscht lange Antwortzeiten, besonders bei der Suche nach Autoren oder Forschungsbereichen, beobachtet werden können. Aber auch die Administration und Datenpflege leidet unter den Problemen, da die Oberflächen für das Eintragen oder Editieren von Publikationen teilweise Wartezeiten von über 10 Sekunden aufweisen. Diese Zeiten sind bei einer Datenbankgröße von etwa 14000 Publikationen und 1000 Autoren nicht angemessen und weisen auf Probleme in der Aufbereitung der Seiten hin.
\section{Zielsetzung}
\label{sec:ziele}
Folgende Punkte sollen in der Bachelorarbeit konkret umgesetzt werden:
\begin{itemize}
\item Implementierung von \glspl{probe} und einem monitoring writer in Perl.
\item Verwendung eines monitoring logs in Dateiform.
\item Untersuchung des Einflusses der \glspl{probe} auf die Laufzeit von Anwendungen.
\item Instrumentierung der Kielprints-Anwendung.
\item Lokalisierung von Performanceproblemen in der Kielprints-Anwendung.
\end{itemize}
\chapter{Geplante Umsetzung}
Wie bereits in der Einleitung skizziert muss für die Umsetzung der Arbeit zunächst eine Möglichkeit des Monitorings der Perl-Anwendungen geschaffen werden (\ref{sec:PerlMoni}). Anschließend soll das Verhalten zunächst getestet werden (\ref{sec:testInstr}) und schließlich das Projekt Kielprints untersucht werden (\ref{sec:KielprintsInstr}).
\section{Monitoring-Probes in Perl}
\label{sec:PerlMoni}
\begin{figure}
\centering
\includegraphics[width=0.9\textwidth]{images/architektur2}
\caption{Entwurf der Systemarchitektur}
\label{fig:architecture}
\end{figure}
Das \gls{kieker} Framework unterstützt zur Zeit noch kein \gls{moni} von Perl-Anwendungen. Im Rahmen von früheren Abschlussarbeiten wurden bereits Verfahren zum \gls{moni} von zum Beispiel .NET- \citep{cau15486} oder COBOL-Anwendungen \citep{cau15489} realisiert. Aufbauend auf den bisherigen Entwicklungen soll in dieser Arbeit nun das \gls{moni} von Perl-Anwendungen ermöglicht werden. Hierzu soll ein Perl-Modul implementiert werden, welches die Aufgaben des Kieker.Monitoring übernimmt. Dieser Ansatz ist in Abbildung \ref{fig:architecture} dargestellt.
Dieses Modul muss zunächst Funktionen zur Anreicherung des Codes mit Probes bereitstellen. Diese Funktionen müssen das Verhalten der Anwendung protokollieren und an eine (zu implementierende) Funktion weiterreichen, welche die persistente Sicherung der Daten übernimmt. Hierbei ist abzuwägen, ob von diesem Perl-Modul direkt \emph{\glspl{record}} erzeugt werden sollen, die von Kieker.Analysis verarbeitet werden können, oder ob ein Ansatz gewählt werden soll, der zunächst eigene Records erstellt und anschließend mit einer neuen Kieker Komponente die Übersetzung in \gls{kieker} \emph{\glspl{record}} realisiert. Dieser zweistufige Ansatz wurde bereits für COBOL-Anwendungen realisiert, allerdings ist auch die Erzeugung fertiger Records in Perl möglich. Für die erste Implementierung soll aber der Ansatz mit einer zwischengelagerten Kieker-Ausführung gewählt werden.
Da in Perl auch recht mächtige Funktionen zur Anbindung anderer Programmiersprachen unterstützt werden könnte auch eine Integration der bestehenden \gls{kieker} Klassen in Betracht gezogen werden. Da aber hierbei eine Verbindung von vorcompiliertem Java-Code und interpretiertem Perl-Code realisiert werden muss, kann bei dieser Veriante das Laufzeitverhalten stärker als in dem oben skizzierten Ansatz beeinflusst werden.
\section{Instrumentierung und Monitoring einer Testanwendung}
\label{sec:testInstr}
Das fertige Perl-Modul wird anschließend auf eine isolierte Testanwendung angewendet. Hierbei wird es sich voraussichtlich um eine Kopie des ePrints-Systems handeln. In dieser Testanwendung kann dann die Instrumentierung durchgeführt werden und verschiedenen Testszenarien untersucht werden. Durch die Simulation von verschiedenen Anfragen kann neben dem Verhalten der Anwendung auch der Einfluss des Monitorings auf die Anwendung untersucht werden. Es sollte versucht werden, den zusätzlichen Aufwand der Anwendung möglichst gering zu halten um das tatsächliche Verhalten der Anwendung nicht zu stark zu verzerren.
Mit den erzeugten Daten soll die Anbindung an Kieker.Analysis getestet werden und eine geeignete Analysemethode für die späteren Tests festgelegt werden. Sobald diese Tests zufriedenstellend ausfallen kann dann die Instrumentierung von Kielprints im produktiven Betrieb durchgeführt werden.
\section{Instrumentierung von Kielprints}
\label{sec:KielprintsInstr}
In Zusammenarbeit mit dem Geomar Helmholtz-Zentrum für Ozeanforschung Kiel soll dann Kielprints instrumentiert werden. In dem momentanen Zustand der Anwendung sind langsame Reaktionszeiten aufgetreten, obwohl bisher mit knapp 14000 Publikationen die Auslastung der Datenbank noch in einem üblichen Rahmen liegt. Somit soll die Anwendung instrumentiert werden und Engpässe in der Anwendung identifiziert werden. Hierzu werden die Erkenntnisse der vorherigen Testläufe verwendet um Analysemethoden festzulegen und Vergleichswerte zu erhalten. Mit den erhaltenen Analysedaten soll dann versucht werden Optimierungspotential der Anwendung aufzuzeigen.
\chapter{Organisatorischer Rahmen}
\begin{itemize}
\item Organisation
\begin{description}
\item[Dauer der Arbeit] 1. Oktober 2012 bis 31. März 2013
\item[Bearbeiter] Nis Börge Wechselberg, Mat-Nr. 774996, nbw@informatik.uni-kiel.de
\item[Berater] Dipl.-Inf. Peer Brauer, pcb@informatik.uni-kiel.de
\end{description}
\item Entwicklung
\begin{description}
\item[Hardware] Die Kielprints-Plattform wird im Geomar auf einer SunFire 4250 betreiben. Das Testsystem wird auf einem Blade des Lehrstuhls bereitgestellt.
\item[System] Solaris 10
\item[Software] ePrints 3.3 unter Perl 5.10
\item[Entwicklungsumgebung] Für den Betreib von Kielprints werden PostgreSQL 8.3 sowie Apache 2.2.22 eingesetzt. Die Pakete wurden von OpenCSW.org angepasst.
\end{description}
\end{itemize}
\chapter{Zeitplan}
In der folgenden Tabelle ist das geplante Vorgehen skizziert:
\begin{table}[tph]
\centering
\begin{tabular}{rlp{5.5cm}}
KW & Projektphase & Meilensteine \\
\hline
47 & Vorbereitung & Literaturrecherche \\
\hline
48 & Perl-Modul & Analyse der benötigten Funktionen, Festlegung des Datenformats \\
48 & & Implementierung der Probes \\
49 & & Implementierung der Probes \\
50 & & Lokale Tests und Fehlerbehebung \\
\hline
51 & Konsolidierung & Schreiben der Arbeit \\
52 & & Schreiben der Arbeit \\
\hline
1 & Test-Instrumentierung & Einrichtung von Testanwendungen, Instrumentierung \\
2 & & Feststellung von Monitoring-Overhead \\
\hline
3 & Konsolidierung & Schreiben der Arbeit \\
\hline
4 & Kielprints & Instrumentierung der Anwendung \\
5 & & Ablauf des Monitorings zur Laufzeit \\
6 & & Analyse der Traces \\
7 & & Evtl. Langzeit \gls{moni} \\
8 & & \\
9 & & \\
\hline
10 & Konsolidierung & Schreiben der Arbeit \\
\hline
11 & Abschluss der Arbeit & Fertigstellung, Kolloqium \\
12 & & \\
13 & &
\end{tabular}
\caption{Zeitplan}
\label{tab:zeitplan}
\end{table}
Dieser Verlauf ist auch aus dem folgenden Gantt-Diagramm (Abbildung \ref{fig:GanttChart}) ersichtlich.
\begin{figure}
\centering
\includegraphics[angle=90,scale=0.45]{images/ganttchart}
\caption{Gantt-Chart}
\label{fig:GanttChart}
\end{figure}
% Abschluss
\backmatter
\printglossaries
\tocbibliography
\end{document}

10
Proposal/LaTeX/run.sh Normal file
View file

@ -0,0 +1,10 @@
#!/bin/sh
pdflatex proposal.tex
pdflatex proposal.tex
bibtex proposal.aux
makeglossaries proposal
pdflatex proposal.tex
makeglossaries proposal
pdflatex proposal.tex
pdflatex proposal.tex