\documentclass{moderncv}
\usepackage[english]{babel}
\usepackage[autostyle]{csquotes}
\usepackage{fontspec}
\usepackage[top=1.5cm,bottom=1.5cm,footskip=1cm,includefoot]{geometry}

\usepackage{etoolbox}
\usepackage{bophook}

%\setsansfont{Droid Sans}
%\setsansfont{Open Sans}
\setmainfont{PT Sans}

\moderncvstyle{classic}
\moderncvcolor{googly}

\firstname{Marek}
\familyname{Kubica}
\address{}{Copenhagen, Denmark}
%\email{marek@blumbird.com}
\email{marek@xivilization.net}
\homepage{xivilization.net}
%\mobile{+49 177 000000}
\social[github]{Leonidas-from-XIV}

% order that we want to have the colors
\expandafter\newcommand\csname coloralias0 \endcsname{red}
\expandafter\newcommand\csname coloralias1 \endcsname{yellow}
\expandafter\newcommand\csname coloralias2 \endcsname{green}
\expandafter\newcommand\csname coloralias3 \endcsname{blue}

% counter that points to the current color position
\newcounter{cycle}
\defcounter{cycle}{0}
% wrap counter if it exceeds the "array" length of 3
\newcommand{\wrapcounter}[0]{\ifnumcomp{\value{cycle}}{>}{3}{\defcounter{cycle}{0}}{}}
% increment counter and wrap it
\newcommand{\dostep}[0]{\stepcounter{cycle} \wrapcounter}

\newcommand{\stepcolor}[0]{\definecolor{color1}{named}{google-\csname coloralias\the\value{cycle} \endcsname}\dostep}

\makeatletter
\let\section@old\section
\renewcommand{\section}[1]{\stepcolor \section@old{#1}}
\makeatother

% reset the counter to 0 on every new page
\AtBeginPage{\global\defcounter{cycle}{0}}

\begin{document}
\makecvtitle

\section{Experience}

\cventry{2021-now}{Software Consultant}{\link[Udviklings- og Forenklingsstyrelsen]{https://www.ufst.dk/}}{Copenhagen}{}
  {Working on a finite-state machine that is responsible for the valuation of
  Danish real estate for property taxation.
  \newline{}Technologies used: Clojure, ClojureScript, Reagent, Terraform, AWS,
  PostgreSQL, Git, Jenkins}
\cventry{2017-2021}{Backend Developer}{\link[Issuu ApS]{https://issuu.com/}}{Copenhagen}{}
  {Working on backend analytics and serving recommendations. Maintenance and
  modernization of legacy systems. Planning and implementation of modern
  replacements with focus on improving on previous shortcomings.
  Implementation, deployment and monitoring of statistics system handling
  500.000 events per minute at peak. Creation of explicit detection service
  using AWS Rekognition, with custom-written OCaml bindings.
  \newline{}Creating tooling for more reliable deployments. Modernization of
  development practices, implementation of private OCaml package repository.
  Publication of a variety of free software packages for OCaml, contributions
  to existing projects. Technical blogging.
  \newline{}Technologies used: OCaml, OCaml Package Manager (OPAM), Jane Street Base,
  Core \& Async, Dune, js\_of\_ocaml, PPX, AMQP, AWS Rekognition, Redis, MySQL,
  PostgreSQL, Graphite, Grafana, Docker, Docker Swarm, Kubernetes, Git, Jenkins,
  Travis CI}
\cventry{2015-2017}{Software Developer}{stylefruits GmbH}{Munich}{}
  {Implementing and extending REST API endpoints, implementation of a product feed,
  backend administration user interfaces, statistics collection.
  \newline{}Technologies used: Clojure, Liberator, MySQL, PostgreSQL, Elasticsearch,
  React.js, Reagent, Bootstrap, AMQP, Docker, Git}
\cventry{2014–2015}{Master's Thesis Student}{Realtime Technology AG}{Munich}{}
  {Implementing a randomized testing solution similar to Haskell's \emph{QuickCheck}
  for a custom ML-inspired programming language by extending its compiler.
  \newline{}Technologies used: OCaml, OPAM, menhir (parser generator), LLVM}
\cventry{2014–2015}{Tutor}{Technische Universität München}{Munich}{}
  {Tutor for \enquote{Einführung in die Informatik 2} (Computer Science 102),
  teaching students functional programming concepts using Haskell and \emph{QuickCheck}.}
\cventry{2008–2014}{Programmer/Administrator}{\link[Watchdesigner.de]{https://www.watchdesigner.de}}{Ismaning}{}
  {Development of JavaScript and CoffeeScript libraries, set-up and maintenance of
   web shop, maintenance of virtual servers.
  \newline{}Reevaluation of virtualization solutions, set up of KVM via Libvirt. Migration
   of POINT tec setup. Addition of SPF and DKIM to mail configuration, set up of backup MX
   to increase reliability, introduced versioning of configuration files.
   Hosting of multiple sites in their own virtual environments. Hardening of server with
   automated banning of SSH login attempts and filesystem checksums.
   \newline{}Technologies used: KVM, libvirt, Debian GNU/Linux, Apache, nginx,
   Python, JavaScript, CoffeeScript and Git.}
\cventry{2013–2013}{Tutor}{Technische Universität München}{Munich}{}
  {Tutor for \enquote{Grundlagen Algorithmen und Datenstrukturen} (Introduction to algorithms and data structures),
  teaching students $\mathcal O$ notation, various types of hashing, tree structures}
%\cventry{2009–2009}{Internship}{TechSAT GmbH}{Poing}{}{ADFX router configuration tool.
%  Editor for proprietary binary/textual configuration file format, help with configuration
%  of SSH.
%  \newline{}Technologies used: Python, Mercurial, parsers for text and binary files.}
%\cventry{2006–2008}{Programmer/Administrator}{POINT tec Electronic GmbH}{Ismaning}{}%
%  {Relaunch of web site, creation of custom Django-based CMS, administration and maintenance of server.
%  \newline{}Initial version launched on virtual server with low performance, evaluation of Lighttpd for lower overhead.
%  Later migrated to a physical host with as Xen Dom0 on Debian and DomU running the software. Django installation
%  running on Python via FastCGI connected to Apache. PostgreSQL as database. Mails served first via Postfix,
%  then switched to Exim, IMAP4 access over Dovecot with authentification as local users.
%  Spam control via SpamAssasin. Regular automated remote backups of files and database contents.
%  \newline{}Technologies used: Xen, Debian GNU/Linux, Apache, Python, Django and Bazaar.}


\section{Languages}
\cvitemwithcomment{German}{native}{grew up in Germany}
\cvitemwithcomment{Polish}{native}{went to school in Poland}
\cvitemwithcomment{English}{fluent}{C2 in speaking, writing and understanding}
\cvitemwithcomment{French}{basic}{High School education}
\cvitemwithcomment{Japanese}{beginner}{lived one year in Japan}

\section{Computer Languages}
\cvitem{Advanced}{\small Clojure, OCaml, Python}
\cvitem{Intermediate}{\small Elm, C, Go, JavaScript, {\fontfamily{lmr}\selectfont{}\LaTeX}}
\cvitem{Basic}{\small Bash, Io, Factor, Haskell, Java, PostScript, Ruby, Rust, Scala, Vala}

\bigskip

\cvitem{Very impressed}{\small Haskell, OCaml}
\cvitem{Impressed}{\small Clojure, Scheme, Factor, Io, Rust}
\cvitem{Not impressed at all}{\small Bash, C, Go, Java, JavaScript, {\fontfamily{lmr}\selectfont{}\LaTeX}}

\section{Education}
\cventry{2013–2015}{Master of Science in Computer Science}{Technische Universität München}{Munich}{}{Master's thesis: \enquote{Randomized testing for hybrid CPU/GPU shader description languages}. Implemented a generative testing framework in the compiler of non-general-purpose language to allow for \emph{QuickCheck}-like testing.}
\cventry{2008–2013}{Bachelor of Science in Computer Science}{Technische Universität München}{Munich}{}{Bachelor's thesis: \enquote{A functional streaming API for OCaml}. Explored usage of advanced functional concepts like monads in practical usage context, specifically at wrapping a data compression library via OCaml.}
\cventry{2011–2012}{Research student}{Nagoya University}{Nagoya, Japan}{}{Research at the \httplink[Embedded and Real-Time Systems Laboratory]{www.ertl.jp} on monitoring the system state of the Linux kernel via virtualization. A Dual-OS hypervisor using ARM Trustzone extensions is utilized to run a trusted RTOS on the same device which checks the state of the GPOS with regard to crashes and intrusions.}
\cventry{2000–2008}{General qualification for university entrance}{Werner Heisenberg Gymnasium}{Garching}{}{}

\section{Projects}

\cvitem{Master project}{Subset of Caml Light compiler written in Scala using
  JFlex and CUP that compiles to JVM bytecode.}
\cvitem{Master project}{Linux system administration: Set up and integration of servers:
  DHCP, DNS, HTTP, SQL, LDAP, SMTP, POP3, IMAP4, NFS, Monitoring}
\cvitem{Bachelor project}{LEGO Mindstorms robots to pick up items, identify
  them via RFID, explore a maze and put items down at color coded places in the maze.}

\section{Talks}
\cvitemwithcomment{2015}{\normalfont \link[From Imperative to Functional APIs (english)]{https://speakerdeck.com/leonidas/from-imperative-to-functional-apis}}{LambdaCon}
\cvitemwithcomment{2015}{\normalfont \link[Brave New OCaml World (english)]{https://speakerdeck.com/leonidas/brave-new-ocaml-world}}{Lambda Days}
\cvitemwithcomment{2013}{\normalfont Cre Workshop (english)}{defworkshop}
\cvitemwithcomment{2013}{\normalfont \link[Using static typing features for fun and profit (english)]{https://speakerdeck.com/leonidas/using-static-typing-features-for-fun-and-profit}}{defmunich}
\cvitemwithcomment{2012}{\normalfont \link[10 years of Python-Forum (german)]{https://speakerdeck.com/leonidas/10-jahre-python-forum}}{PyCon DE 2012}
\cvitemwithcomment{2011}{\normalfont \link[Software Transactional Memory (english)]{https://speakerdeck.com/leonidas/software-transactional-memory}}{TU~München}
\cvitemwithcomment{2010}{\normalfont \link[A Caml Light compiler for the JVM (german)]{https://speakerdeck.com/leonidas/a-caml-light-compiler-for-the-jvm}}{TU~München}
\cvitemwithcomment{2010}{\normalfont \link[PostScript madness (german)]{https://speakerdeck.com/leonidas/postscript-madness}}{$\mu{}C^3$}
\cvitemwithcomment{2010}{\normalfont \link[Macros in Scheme (german)]{https://speakerdeck.com/leonidas/makros-in-scheme}}{TU~München}
\cvitemwithcomment{2009}{\normalfont \link[ctypes: Python-Bindings without C code (german)]{https://speakerdeck.com/leonidas/ctypes-python-bindings-ohne-c-code}}{$\mu$Py}
\cvitemwithcomment{2009}{\normalfont \link[Why Scheme rocks (english)]{https://speakerdeck.com/leonidas/why-scheme-rocks}}{munich-lisp}
\cvitemwithcomment{2009}{\normalfont \link[Higher-order Python (german)]{https://speakerdeck.com/leonidas/python-hoherer-ordnung}}{$\mu$Py}
\cvitemwithcomment{2008}{\normalfont \link[Bazaar, the DVCS (german)]{https://speakerdeck.com/leonidas/bazaar-das-dvcs}}{$\mu$Py}
\cvitemwithcomment{2008}{\normalfont \link[Unicode in Python, demystified (german)]{https://speakerdeck.com/leonidas/unicode-in-python-demystifiziert}}{$\mu$Py}
\cvitemwithcomment{2008}{\normalfont \link[Domain Specific Languages in Python (german)]{https://speakerdeck.com/leonidas/dsls-in-python}}{$\mu$Py}


\section{Activity in Free Software Community}

\cvitem{GitHub}{Number of Free Software projects at \link[github.com/Leonidas-from-XIV]{https://github.com/Leonidas-from-XIV}, among these \link[xml2js]{https://github.com/Leonidas-from-XIV/node-xml2js}, a popular XML parser frontend for Node.js}
\cvitem{Python-Forum}{User since 2003, moderator since 2004, administrator from 2005 to 2020}
\cvitem{$\mu$Py}{Former organizer of the \link[Python User Group Munich]{https://wiki.python.de/User Group München}}
\cvitem{Arch Linux}{Maintainer of packages in \link[Arch User Repository]{https://aur.archlinux.org}}
\cvitem{Debian}{Participant in \enquote{squeeze} Bug-Squashing-Party and \link[Debian User Group Munich]{https://wiki.debian.org/LocalGroups/DebianMuc/}}
\cvitem{CCC}{Member of the \link[Chaos Computer Club e.V.]{https://www.ccc.de} until 2012}
\cvitem{$\mu{}C^3$}{Member of the \link[Chaos Computer Club Munich e.V.]{https://muc.ccc.de} until 2012}


\section{Conferences}
\cvitem{2015}{Speaker at LambdaCon}
\cvitem{2015}{Speaker at Lambda Days}
\cvitem{2012}{Speaker at PyCon DE}
\cvitem{2012}{Participant at LinuxCon Japan}
\cvitem{2011}{Participant at the Chaos Communication Camp}
\cvitem{2010}{Helper at the 27\textsuperscript{th} Chaos Communication Conference}
\cvitem{2010}{Participant at Google Developer Day in Munich}
\cvitem{2009}{Helper at the 26\textsuperscript{th} Chaos Communication Conference}
\cvitem{2009}{Participant at Hacking at Random}

\end{document}
