%% Presentation about Scheme Macros

%% Some useful variations of the document class
%%\documentclass[draft]{beamer}
%%\documentclass[handout]{beamer}
% silence hyperref warnings
%\documentclass[hyperref={pdfpagelabels=false}]{beamer}
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel,german=quotes]{csquotes}
\usepackage{listings}
%% get the smiley
\usepackage{wasysym}
\usepackage{ccbeamer}
\usepackage{lmodern}
\mode<presentation>{\usetheme{Copenhagen}}
\title{Postscript madness}
\author{Leonidas <leonidas@muc.ccc.de>}
\institute{$\mu{}C^3$}
\date{19.~August~2010}

%% get rid of navigation symbols
%\setbeamertemplate{navigation symbols}{}
\beamertemplatenavigationsymbolsempty

\usecolortheme{ccc}

\begin{document}

\frame{
  \titlepage
  \vfill
  \begin{center}
    \CcGroupBy{0.83}\\[2.5ex]
    {\tiny\CcNote{\CcLongnameBy}}
    \vspace*{-2.5ex}
  \end{center}
}

\AtBeginSection[]{
  \begin{frame}
    \frametitle{\insertsection}
    \tableofcontents[currentsection]
  \end{frame}
}

% define the logo after the title page
\logo{\includegraphics[width=1.5cm]{muccc-logo}}

\begin{frame}
  Disclaimer:\pause
  I'm mad \smiley
\end{frame}

\begin{frame}{Warum PostScript}
  \begin{block}{PostScript ist überall}
    \begin{itemize}
      \item dein Drucker
      \item dein CUPS
      \item deine Type1"=Fonts
      \pause
      \item deine Mutter!
    \end{itemize}
  \end{block}
  \pause
  \begin{block}{Über PostScript}
    \begin{itemize}
      \item von Adobe anno dazumal für Drucker entworfen
      \item stackbasiert wie viele VMs, etwa JVM
      \item man programmiert indem man \enquote{Wörter} auf den Stack wirft
      \item Referenz und viele Bücher verfügbar
    \end{itemize}
  \end{block}
\end{frame}

\begin{frame}{PostScript nutzen}
  \begin{columns}
    \column{0.4\textwidth}
      \includegraphics[width=4cm]{gs-logo}
    \column{0.6\textwidth}
      \begin{block}{Software}
        \begin{itemize}
          \item Adobe Acrobat (proprietär)
          \item GhostScript (GPLv3+)
          \item Poppler (GPLv2+)
        \end{itemize}
      \end{block}
      \begin{block}{Hardware}
        \begin{itemize}
          \item KPDL 2 \& 3 (Kyocera)
          \item PhoenixPage, OakPage (HP)
          \item Brotherscript (Brother)
          \item PageStyler
          \item TrueImage
          \item TurboPS
        \end{itemize}
      \end{block}
  \end{columns}
\end{frame}

\begin{frame}[fragile]{Ein einfaches Beispiel}
  \begin{lstlisting}
  1 2 add
  pstack
  \end{lstlisting}
  \begin{tabular}{ll}
  \hline
  pstack & zeigt Stackinhalt an \\
  pop & wirft obersten Wert auf dem Stack weg \\
  clear & leert Stack \\
  exch & vertauscht die beiden obersten Werte \\
  dup & dupliziert den obersten Wert \\
  \hline
  \end{tabular}
\end{frame}

\begin{frame}[fragile]{Eigene Wörter definieren}
  \begin{lstlisting}
  /2dup { dup 2 index exch } def
  \end{lstlisting}
  Definiert ein Wort, das die obersten 2 Werte dupliziert
  \begin{lstlisting}
  23 42 2dup pstack
  \end{lstlisting}
  Parameter: Auf dem Stack, beliebig viele
  
  Rückgabewerte: Auf dem Stack, beliebig viele
\end{frame}

\begin{frame}[fragile]{Datenstrukturen}
  \begin{itemize}
    \item Zahlen 1.337
    \item (Strings sind in runden Klammern)
    \item \{ (in) (executable) (Arrays) (kann) (beliebiges) (stehen) 42 \}
    \item \lbrack (in) (literate) (Arrays) (auch) 23 \rbrack
    \item Dictionaries
  \end{itemize}

  \begin{lstlisting}
   % Kommentar
   { 3 2 add } [ 3 2 add ]
  \end{lstlisting}
\end{frame}

\begin{frame}{Grafikausgabe}
  Konzept: Zeichenfläche mit Stift
  \begin{tabular}{ll}
  \hline
  moveto & Stift an bestimmte Stelle setzen \\
  rmoveto & Stift relativ zur aktuellen Stelle verschieben \\
  lineto & Pfad von aktuellem Punkt zu Endpunkt setzen \\
  rlineto & Äquivalent zu rmoveto \\
  stroke & aktuellen Pfad zeichnen \\
  gsave & aktuellen Grafikkontext abspeichern \\
  grestore & vorherigen Grafikkontext laden \\
  scale & Skalieren, in X und Y-Richtung \\
  rotate & Rotieren \\
  \hline
  \end{tabular}
\end{frame}

\begin{frame}[fragile]{Textausgabe}
  PostScript"=Interpreter bringen einige Fonts mit.
  \begin{lstlisting}
   300 200 translate
   0 0 moveto
   /Times-Roman findfont 25 scalefont setfont
   (All hail Eris!) show
  \end{lstlisting}
\end{frame}

\begin{frame}{Demo: Rekursion}
  \includegraphics[height=8cm]{recursion}
\end{frame}

\begin{frame}{Demo: Koch}
  \includegraphics{koch}
\end{frame}

\begin{frame}{Demo: Daumenkino}
  \includegraphics[height=8cm]{laughingman}
\end{frame}

\begin{frame}{Ressourcen}
  \begin{block}{Bücher}
    \begin{itemize}
      \item PostScript Language Reference, third edition
      \item PostScript Language Tutorial and Cookbook
      \item Thinking in PostScript
    \end{itemize}
    Alle frei (wie Bier) verfügbar
  \end{block}
  \begin{block}{Webseiten}
    \begin{itemize}
      \item \url{http://www.tailrecursive.org/postscript/}
    \end{itemize}
  \end{block}
  \begin{center}
    \Large{\textbf{KTHXBAI!}}
  \end{center}
\end{frame}

\end{document}
