Bläddra i källkod

Initial commit

Matthias Vogelgesang 10 år sedan
incheckning
ce5eaac08c
6 ändrade filer med 342 tillägg och 0 borttagningar
  1. 5 0
      .gitignore
  2. 22 0
      Makefile
  3. 58 0
      convert.py
  4. 86 0
      cv.tex.in
  5. 120 0
      moderncv.tex.in
  6. 51 0
      resume.de.json

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+*.log
+*.aux
+*.tex
+*.out
+*.pdf

+ 22 - 0
Makefile

@@ -0,0 +1,22 @@
+RESUME=resume.de.json
+# TEMPLATES=$(wildcard *.in)
+TEMPLATES=cv.tex.in
+TEX=$(patsubst %.in,%,$(TEMPLATES))
+PDF=$(patsubst %.tex,%.pdf,$(TEX))
+
+.PHONY: all clean
+
+
+all: $(PDF)
+
+
+clean: $(PDF)
+	rm -f $(PDF)
+
+
+%.tex: %.tex.in $(RESUME)
+	@python convert.py --template $< --resume $(RESUME) > $@
+
+
+%.pdf: %.tex $(TEX)
+	@xelatex $<

+ 58 - 0
convert.py

@@ -0,0 +1,58 @@
+import argparse
+import os
+import json
+import datetime
+import jinja2
+
+
+def is_valid_file(parser, arg):
+    if not os.path.exists(arg):
+        parser.error("%s does not exist." % arg)
+    else:
+        return arg
+
+
+def create_template(args):
+    env = jinja2.Environment(loader=jinja2.FileSystemLoader('.'))
+    env.block_start_string = '((*'
+    env.block_end_string = '*))'
+    env.variable_start_string = '((('
+    env.variable_end_string = ')))'
+    env.comment_start_string = '((='
+    env.comment_end_string = '=))'
+    return env.get_template(args.template)
+
+
+def fix_date(date_string):
+    d = datetime.datetime.strptime(date_string, '%Y-%M-%d')
+    return d.strftime('%M/%Y')
+
+
+def preprocess(data):
+    # TODO: fix date in locale-agnostic way
+    for stage in data['education']:
+        stage['startDate'] = fix_date(stage['startDate'])
+        stage['endDate'] = fix_date(stage['endDate'])
+
+    return data
+
+
+def main():
+    parser = argparse.ArgumentParser()
+
+    parser.add_argument('-t', '--template',
+                        type=lambda x: is_valid_file(parser, x),
+                        help="Jinja2 input template", required=True)
+    parser.add_argument('-r', '--resume', 
+                        type=lambda x: is_valid_file(parser, x),
+                        help="JSON resume", required=True)
+
+    args = parser.parse_args()
+    data = preprocess(json.load(open(args.resume, 'r')))
+    template = create_template(args)
+    result = template.render(resume=data).encode('utf-8')
+    print(result)
+
+
+if __name__ == '__main__':
+    main()

+ 86 - 0
cv.tex.in

@@ -0,0 +1,86 @@
+\documentclass[a4paper]{scrartcl}
+
+\usepackage{fontspec}
+\usepackage{enumitem}
+
+% --- Fonts
+
+\setmainfont[Mapping=tex-text]{Linux Libertine O}
+
+\newfontfamily\light[Mapping=tex-text, LetterSpace=12.0]{Archivo Narrow}
+
+\setlist[description]{%
+  font={\normalfont\light\footnotesize},
+  itemsep=0.2em
+}
+
+
+% --- Commands
+\newcommand*{\textlight}[1]{{\light #1}}
+
+\newcommand*{\cvperiod}[2]{%
+  \noindent
+  \begin{minipage}[t]{0.7\textwidth}
+    \raggedright #2
+  \end{minipage}
+  \hfill
+  \begin{minipage}[t]{0.3\textwidth}
+    \raggedleft #1
+  \end{minipage}
+}
+
+
+% --- Environments
+
+\newenvironment*{cvsection}[1]{%
+  \noindent\rule{\textwidth}{0.4pt}
+  \begin{flushleft}
+    \vspace{-0.6em}
+    \addfontfeature{LetterSpace=6.0}\bfseries\footnotesize\light{\MakeUppercase{#1}}
+  \end{flushleft}
+}
+{}
+
+\begin{document}
+  \begin{center}
+    \light{\addfontfeature{LetterSpace=18.0}{\LARGE\MakeUppercase{((( resume.basics.title)))~((( resume.basics.name )))}}}
+    \vspace{.8em}
+
+    {\footnotesize\textlight{\MakeUppercase{%
+      ((( resume.basics.location.address ))), 
+      ((( resume.basics.location.postalCode ))) 
+      ((( resume.basics.location.city )))}}}
+    \vspace{.4em}
+
+    {\footnotesize\textlight{((( resume.basics.phone )))\hspace{1em}\MakeUppercase{((( resume.basics.email )))}}}
+  \end{center}
+
+  \begin{cvsection}{Ausbildung}
+    ((* for stage in resume.education *))
+    \cvperiod{((( stage.startDate )))--((( stage.endDate )))}{\emph{((( stage.studyType )))}, ((( stage.institution )))}
+    ((* endfor *))
+    \begin{itemize}
+      \item Diplom-Informatiker, Notenschnitt: 1.3
+    \end{itemize}
+  \end{cvsection}
+
+  \begin{cvsection}{Berufserfahrung}
+  \end{cvsection}
+
+  \begin{cvsection}{Sprachen}
+    \begin{description}
+    ((* for lang in resume.languages *))
+      \item[((( lang.language )))] ((( lang.fluency )))
+    ((* endfor *))
+    \end{description}
+  \end{cvsection}
+
+  \begin{cvsection}{Netz}
+    \begin{description}
+      \item[Webseite] ((( resume.basics.website )))
+    ((* for profile in resume.basics.profiles *))
+      \item[((( profile.network )))] ((( profile.url )))
+    ((* endfor *))
+    \end{description}
+  \end{cvsection}
+\end{document}

+ 120 - 0
moderncv.tex.in

@@ -0,0 +1,120 @@
+\documentclass[a4paper,10pt]{moderncv}
+
+\usepackage{fontspec}
+\usepackage{url,parskip}
+\usepackage{xunicode,xltxtra}
+\usepackage{ngerman}
+\usepackage{etoolbox}
+
+\usepackage[scale=0.75]{geometry}
+
+\setmainfont[BoldFont={Source Sans Pro Semibold},
+             Mapping=tex-text]{Source Sans Pro}
+
+\moderncvstyle{classic}
+\moderncvcolor{grey}
+
+\renewcommand*{\sectionfont}{\large\mdseries\upshape}
+
+\firstname{\LARGE\scshape Matthias}
+\familyname{Vogelgesang}
+
+\title{\normalfont Lebenslauf}
+\address{Schützenstraße 55}{76137 Karlsruhe}
+\mobile{0162--9769061}
+\email{matthias.vogelgesang@gmail.com}
+
+\patchcmd{\section}{0.95ex}{0.1ex}{}{}
+\makeatletter
+\RenewDocumentCommand{\section}{sm}{%
+  \par\addvspace{2.5ex}%
+  \phantomsection{}% reset the anchor for hyperrefs
+  \addcontentsline{toc}{section}{#2}%
+  \parbox[t]{\hintscolumnwidth}{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{\hintscolumnwidth}{0.15ex}}}%
+  \hspace{\separatorcolumnwidth}%
+  \parbox[t]{\maincolumnwidth}{\strut\sectionstyle{#2}}%
+  \par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading
+\makeatother
+
+\begin{document}
+
+\makecvtitle
+
+\section{Persönliche Daten}
+
+\cvitem{Name}{Matthias~Vogelgesang}
+\cvitem{Geburtsdatum}{24. Juli 1984}
+\cvitem{Geburtsort}{Elsterwerda}
+
+\section{Schulische Ausbildung}
+
+\cventry{7/1997--6/2004}{Abitur}{Pestalozzi Gymnasium Guben}{}{}{}
+
+
+\section{Zivildienst}
+
+\cventry{8/2004--6/2005}
+{Suchthilfezentrum}
+{Guben}
+{Betreuung, Fahrdienste und handwerkliche Tätigkeiten}{}{}
+
+
+\section{Akademische Ausbildung}
+
+\cventry{1/2011--11/2014}{Promotion}{Karlsruher Institut für Technologie}{Fakultät für Informatik}{}{}
+\cventry{10/2005--9/2010}{Diplom}{Karlsruher Institut für Technologie}{Fakultät für Informatik}{}{}
+\cventry{11/2009--6/2010}{Diplomarbeit}{Carnegie Mellon University, Pittsburgh,
+PA., USA}{}{}{}
+
+
+\section{Berufserfahrung}
+
+\cventry{seit 1/2011}
+{Institut für Prozessdatenverarbeitung und Elektronik}
+{\textbf{\textsc{kit}}, Karlsruhe}
+{Wissenschaftlicher Mitarbeiter}{}{}
+% {
+%   \begin{itemize}
+%     \item Entwicklung GPU-basierter Bildverarbeitung.
+%     \item Entwurf und Entwicklung eines Synchrotronbeamline-Kontrollsystems.
+%   \end{itemize}
+% }
+
+\cventry{8/2006--9/2009}
+{Fraunhofer \textsc{iosb}}
+{Karlsruhe}
+{Wissenschaftliche Hilfskraft}{}{}
+% {
+%   \begin{itemize}
+%     \item Entwurf und Aufbau einer Kommunikationsschnittstelle für verteilte
+%       Datenerfassung.
+%     \item Messung und Auswertung der Kopfposition für alternative
+%       Mensch-Maschine-Interaktion.
+%   \end{itemize}
+% }
+
+
+\section{Drittmittel und Stipendien}
+\cvline{2013}{\textsc{KSETA} Doctoral Fellow}
+\cvline{2012}{\textsc{KIT}-Startup-Antrag mit H. Anzt vom Institut
+für Numerische Mathematik 4}
+\cvline{2009}{Stipendium der Stiftung Baden-Württemberg für
+Auslandsaufenthalt in den USA}
+
+
+\section{Sprachen}
+\cvlanguage{Deutsch}{Muttersprache}{}
+\cvlanguage{Englisch}{verhandlungssicher}{UNICert III = GER C1 Prüfung mit
+  97,5\% abgeschlossen.}
+\cvlanguage{Französisch}{Grundkenntnisse}{}
+
+
+\section{Qualifikationen}
+
+\cvline{Sprachen}{C, Python, C++, Java, Bash}
+\cvline{Parallelisierung}{OpenCL, CUDA, Pthreads, OpenMP, MPI}
+\cvline{Software}{Linux, MS Windows, Git, Bazaar, \LaTeX, Vim, Autotools, CMake,
+GLib}
+
+
+\end{document}

+ 51 - 0
resume.de.json

@@ -0,0 +1,51 @@
+{
+    "basics": {
+        "name": "Matthias Vogelgesang",
+        "title": "Dr.",
+        "email": "matthias.vogelgesang@gmail.com",
+        "website": "https://bloerg.net",
+        "phone": "0162 9769061",
+        "location": {
+            "address": "Schützenstrasse 55",
+            "postalCode": "76137",
+            "city": "Karlsruhe",
+            "countryCode": "DE"
+        },
+        "profiles": [{
+            "network": "GitHub",
+            "username": "matze",
+            "url": "https://github.com/matze"
+        },
+        {
+            "network": "Xing",
+            "username": "Matthias.Vogelgesang",
+            "url": "https://xing.com/profile/matthias.vogelgesang"
+        }]
+    },
+    "education": [{
+        "institution": "Karlsruher Institut für Technologie",
+        "area": "Informatik",
+        "studyType": "Diplom",
+        "startDate": "2005-10-01",
+        "endDate": "2010-09-01"
+    },
+    {
+        "institution": "Pestalozzi Gymnasium Guben",
+        "area": "Abitur",
+        "studyType": "Abitur",
+        "startDate": "1997-07-01",
+        "endDate": "2004-05-01"
+    }],
+    "languages": [{
+        "language": "Deutsch",
+        "fluency": "Muttersprache"
+    },
+    {
+        "language": "Englisch",
+        "fluency": "Verhandlungssicher"
+    },
+    {
+        "language": "Französisch",
+        "fluency": "Grundkenntnisse"
+    }]
+}