--- a/slides/slides01.tex Wed Sep 25 11:24:34 2019 +0100
+++ b/slides/slides01.tex Wed Sep 25 23:56:36 2019 +0100
@@ -1,3 +1,4 @@
+% !TEX program = xelatex
\documentclass[dvipsnames,14pt,t,xelatex]{beamer}
\usepackage{../slides}
\usepackage{../graphics}
@@ -20,11 +21,6 @@
\begin{document}
-
-
-
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[t]
\frametitle{%
@@ -44,8 +40,9 @@
\begin{center}
\begin{tabular}{ll}
Email: & christian.urban at kcl.ac.uk\\
- Office: & N\liningnums{7.07} (North Wing, Bush House)\\
- Slides: & KEATS
+ Office Hours: & Thursdays 12 -- 14\\
+ & N\liningnums{7.07} (North Wing, Bush House)\\
+ Slides \& Progs: & KEATS\\
\end{tabular}
\end{center}
@@ -67,30 +64,27 @@
\only<2>{
\begin{itemize}
\item {\bf Hardware is getting weirder
- rather than getting clocked faster}
+ rather than getting clocked faster.}
\begin{itemize}
-\item Almost all processors are
- multicores nowadays and it looks like there is increasing asymmetry in
- resources across cores. Processors come with vector units, crypto
- accelerators etc. We have DSPs, GPUs,
- ARM big.little, and Xeon Phi. This is only scratching the
- surface.
+\item[] ``Almost all processors are multicores nowadays and it looks
+ like there is increasing asymmetry in resources across cores.
+ Processors come with vector units, crypto accelerators etc. We have
+ DSPs, GPUs, ARM big.little, and Xeon Phi. This is only scratching the
+ surface.''
\end{itemize}
\end{itemize}}
\only<3>{
\begin{itemize}
\item {\bf We’re getting tired of low-level languages and
- their associated security disasters}
+ their associated security disasters.}
\begin{itemize}
-\item
- We want to write new code, to
- whatever extent possible, in safer, higher-level
- languages. Compilers are caught right in the middle of these
- opposing trends: one of their main jobs is to help bridge the large
- and growing gap between increasingly high-level languages and
- increasingly wacky platforms.
+\item [] ``We want to write new code, to whatever extent possible, in
+ safer, higher-level languages. Compilers are caught right in the
+ middle of these opposing trends: one of their main jobs is to help
+ bridge the large and growing gap between increasingly high-level
+ languages and increasingly wacky platforms.''
\end{itemize}
\end{itemize}}}
@@ -98,6 +92,47 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t]
+ \frametitle{What are Compilers?}
+
+\begin{center}
+\begin{tikzpicture}[]
+ \node (0) at (-2.3,0) {\includegraphics[scale=0.3]{pics/csource.png}};
+ \node (1) [right=35mm] at (0) {\includegraphics[scale=0.3]{pics/cassmbl.png}};
+ \draw [->,line width=4mm, red] (0) -- (1);
+\end{tikzpicture}
+\end{center}
+
+\begin{textblock}{10}(1,13.5)
+Compiler explorers, e.g.: \url{https://gcc.godbolt.org}
+\end{textblock}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+\frametitle{\begin{tabular}{c}Why Bother?\\[-2mm] Compilers \& Boeings 777\end{tabular}}
+
+First flight in 1994. They want to achieve triple redundancy in hardware
+faults.\bigskip
+
+They compile 1 Ada program to\medskip
+
+\begin{itemize}
+ \item Intel 80486
+ \item Motorola 68040 (old Macintosh's)
+ \item AMD 29050 (RISC chips used often in laser printers)
+\end{itemize}\medskip\medskip
+
+using 3 independent compilers.\bigskip\pause
+
+\small Airbus uses C and static analysers. Recently started using CompCert.
+
+\end{frame}
+%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[c]
\frametitle{Why Bother?}
@@ -139,11 +174,12 @@
axis lines=left,
width=5.5cm,
height=4cm,
- legend entries={Python, Java 8},
+ legend entries={Python, Java 8, JavaScript},
legend pos=north west,
legend cell align=left]
\addplot[blue,mark=*, mark options={fill=white}] table {re-python2.data};
\addplot[cyan,mark=*, mark options={fill=white}] table {re-java.data};
+\addplot[red,mark=*, mark options={fill=white}] table {re-js.data};
\end{axis}
\end{tikzpicture}
@@ -191,7 +227,36 @@
against $\underbrace{\texttt{a}...\texttt{a}}_n$
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c,fragile]
+ \frametitle{Incidents}
+
+ \begin{itemize}
+ \item a global outage on 2 July 2019 at \textbf{Cloudflare}
+ (first one for six years)\medskip
+
+ \begin{center}\small\color{blue}
+ \begin{verbatim}
+ (?:(?:\"|'|\]|\}|\\|\d|(?:nan|infinity|true|false|
+ null|undefined|symbol|math)|\`|\-|\+)+[)]*;?((?:\s
+ |-|~|!|{}|\|\||\+)*.*(?:.*=.*)))
+ \end{verbatim}
+ \end{center}\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip\bigskip
+
+ \item on 20 July 2016 the \textbf{Stack Exchange} webpage went down
+ because of an evil regular expression
+ \end{itemize}
+
+ \begin{textblock}{6}(9,7.6)
+ \includegraphics[scale=0.14]{cloudflare.png}\\
+ \footnotesize
+ It serves more web traffic than Twitter, Amazon, Apple, Instagram, Bing \& Wikipedia combined.
+ \end{textblock}
+
+ \end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[c]
\frametitle{Evil Regular Expressions}
@@ -209,7 +274,7 @@
\item sometimes also called \alert{catastrophic backtracking}
\item this is a problem for \alert{N}etwork \alert{I}ntrusion
- \alert{D}etection systems, StackExchange, Atom editor
+ \alert{D}etection systems, Cloudflare, StackExchange, Atom editor
\item \url{https://vimeo.com/112065252}
\end{itemize}
@@ -339,10 +404,11 @@
\begin{frame}[c]
\frametitle{The Acad.~Subject is Mature}
+\bigskip
\begin{itemize}
-\item Turing Machines, 1936
+\item Turing Machines, 1936 (a tape as memory)
\item Regular Expressions, 1956\\
-\item The first compiler for COBOL, 1957\\ (Grace Hopper)
+\item The first compiler for COBOL, 1957\\ (Grace Hopper)\medskip
\item But surprisingly research papers are still published nowadays\\
\item ``Parsing: The Solved Problem That Isn't''
\end{itemize}
@@ -417,123 +483,123 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-\frametitle{Today}
-
-\begin{itemize}
-\item While the ultimate goal is to implement a small compiler for the JVM
- \ldots\bigskip
-\end{itemize}
-
-Let's start with:
-
-\begin{itemize}
-\item a web-crawler
-\item an email harvester
+%\begin{frame}[c]
+%\frametitle{Today}
+%
+%\begin{itemize}
+%\item While the ultimate goal is to implement a small compiler for the JVM
+% \ldots\bigskip
+%\end{itemize}
+%
+%Let's start with:
+%
+%\begin{itemize}
+%\item a web-crawler
+%\item an email harvester
%\item \textcolor{gray}{(a web-scraper)}
-\end{itemize}
-
-\end{frame}
+%\end{itemize}
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[t]
-\frametitle{A Web-Crawler}
-
-\mbox{}\\[10mm]
-
-\begin{enumerate}
-\item given an URL, read the corresponding webpage
-\item extract all links from it
-\item call the web-crawler again for all these links
-\end{enumerate}
-
-\end{frame}
+%\begin{frame}[t]
+%\frametitle{A Web-Crawler}
+%
+%\mbox{}\\[10mm]
+%
+%\begin{enumerate}
+%\item given an URL, read the corresponding webpage
+%\item extract all links from it
+%\item call the web-crawler again for all these links
+%\end{enumerate}
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[t]
-\frametitle{A Web-Crawler}
-
-\mbox{}\\[10mm]
-
-
-\begin{enumerate}
-\item given an URL, read the corresponding webpage
-\item if not possible print, out a problem
-\item if possible, extract all links from it
-\item call the web-crawler again for all these links
-\end{enumerate}\bigskip\pause
-
-\small (we need a bound for the number of recursive calls)
-
-\small (the purpose is to check all links on my own webpage)
-\end{frame}
+%\begin{frame}[t]
+%\frametitle{A Web-Crawler}
+%
+%\mbox{}\\[10mm]
+%
+%
+%\begin{enumerate}
+%\item given an URL, read the corresponding webpage
+%\item if not possible print, out a problem
+%\item if possible, extract all links from it
+%\item call the web-crawler again for all these links
+%\end{enumerate}\bigskip\pause
+%
+%\small (we need a bound for the number of recursive calls)
+%
+%\small (the purpose is to check all links on my own webpage)
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\begin{textblock}{1}(2,5)
-\begin{tabular}{c}
-\includegraphics[scale=0.15]{pics/servers.png}\\[-2mm]
-\small Server
-\end{tabular}
-\end{textblock}
-
-\begin{textblock}{1}(5.6,4)
- \begin{tikzpicture}[scale=1.1]
- \draw[white] (0,1) node (X) {};
- \draw[white] (2,1) node (Y) {};
- \draw[white] (0,0) node (X1) {};
- \draw[white] (2,0) node (Y1) {};
- \draw[white] (0,-1) node (X2) {};
- \draw[white] (2,-1) node (Y2) {};
- \draw[red, <-, line width = 2mm] (X) -- (Y);
- \node [inner sep=5pt,label=above:\textcolor{black}{GET request}] at ($ (X)!.5!(Y) $) {};
- \draw[red, ->, line width = 2mm] (X1) -- (Y1);
- \node [inner sep=5pt,label=above:\textcolor{black}{webpage}] at ($ (X1)!.5!(Y1) $) {};
- \draw[red, <-, line width = 2mm] (X2) -- (Y2);
- \node [inner sep=7pt,label=above:\textcolor{black}{POST data}] at ($ (X2)!.5!(Y2) $) {};
- \end{tikzpicture}
-\end{textblock}
-
-
-\begin{textblock}{1}(9,5.5)
-\begin{tabular}{c}
-\includegraphics[scale=0.15]{pics/laptop.png}\\[-2mm]
-\small Browser
-\end{tabular}
-\end{textblock}
-\end{frame}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{frame}[c]
+%
+%\begin{textblock}{1}(2,5)
+%\begin{tabular}{c}
+%\includegraphics[scale=0.15]{pics/servers.png}\\[-2mm]
+%\small Server
+%\end{tabular}
+%\end{textblock}
+%
+%\begin{textblock}{1}(5.6,4)
+% \begin{tikzpicture}[scale=1.1]
+% \draw[white] (0,1) node (X) {};
+% \draw[white] (2,1) node (Y) {};
+% \draw[white] (0,0) node (X1) {};
+% \draw[white] (2,0) node (Y1) {};
+% \draw[white] (0,-1) node (X2) {};
+% \draw[white] (2,-1) node (Y2) {};
+% \draw[red, <-, line width = 2mm] (X) -- (Y);
+% \node [inner sep=5pt,label=above:\textcolor{black}{GET request}] at ($ (X)!.5!(Y) $) {};
+% \draw[red, ->, line width = 2mm] (X1) -- (Y1);
+% \node [inner sep=5pt,label=above:\textcolor{black}{webpage}] at ($ (X1)!.5!(Y1) $) {};
+% \draw[red, <-, line width = 2mm] (X2) -- (Y2);
+% \node [inner sep=7pt,label=above:\textcolor{black}{POST data}] at ($ (X2)!.5!(Y2) $) {};
+% \end{tikzpicture}
+%\end{textblock}
+%
+%
+%\begin{textblock}{1}(9,5.5)
+%\begin{tabular}{c}
+%\includegraphics[scale=0.15]{pics/laptop.png}\\[-2mm]
+%\small Browser
+%\end{tabular}
+%\end{textblock}
+%\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-\frametitle{Scala}
-
-\small A simple Scala function for reading webpages:
-\bigskip
-
-\footnotesize
-\lstinputlisting{../progs/app0.scala}
-\medskip\pause
-
-\lstinline{get_page("""https://nms.kcl.ac.uk/christian.urban/""")}
-\bigskip\medskip\pause
-
-
-\small A slightly more complicated version for handling errors:
-\smallskip
-
-\footnotesize
-\lstinputlisting[xleftmargin=-4mm]{../progs/app1.scala}
-
-
-\end{frame}
+%\begin{frame}[c]
+%\frametitle{Scala}
+%
+%\small A simple Scala function for reading webpages:
+%\bigskip
+%
+%\footnotesize
+%\lstinputlisting{../progs/app0.scala}
+%\medskip\pause
+%
+%\lstinline{get_page("""https://nms.kcl.ac.uk/christian.urban/""")}
+%\bigskip\medskip\pause
+%
+%
+%\small A slightly more complicated version for handling errors:
+%\smallskip
+%
+%\footnotesize
+%\lstinputlisting[xleftmargin=-4mm]{../progs/app1.scala}
+%
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -585,39 +651,39 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\footnotesize
-\lstinputlisting{../progs/app2.scala}
-
-\end{frame}
+%\begin{frame}[c]
+%
+%\footnotesize
+%\lstinputlisting{../progs/app2.scala}
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-
-\small
-A version that only crawls links in ``my'' domain:\bigskip
-
-\footnotesize
-\lstinputlisting{../progs/app3.scala}
-
-\end{frame}
+%\begin{frame}[c]
+%
+%\small
+%A version that only crawls links in ``my'' domain:\bigskip
+%
+%\footnotesize
+%\lstinputlisting{../progs/app3.scala}
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{frame}[c]
-\lstset{xleftmargin=-4mm}
-\small
-A little email harvester:
-
-\footnotesize
-\lstinputlisting{../progs/app4.scala}\bigskip
-
-\tiny
-\url{http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/}
-
-\end{frame}
+%\begin{frame}[c]
+%\lstset{xleftmargin=-4mm}
+%\small
+%A little email harvester:
+%
+%\footnotesize
+%\lstinputlisting{../progs/app4.scala}\bigskip
+%
+%\tiny
+%\url{http://net.tutsplus.com/tutorials/other/8-regular-expressions-you-should-know/}
+%
+%\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -681,7 +747,8 @@
\bl{$s_1 \,@\, s_2$}
\end{center}
-\bl{\textit{foo $@$ bar = foobar}, \textit{baz $@\, []$ = baz}}
+\bl{\textit{foo $@$ bar = foobar}}\\
+\bl{\textit{baz $@\, []$ = baz}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -766,6 +833,89 @@
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+ \frametitle{The Power Operation}
+
+ \begin{itemize}
+ \item The \alert{\textbf{\boldmath$n$th Power}} of a language:
+
+ \begin{center}
+ \begin{tabular}{lcl}
+ \bl{$A^0$} & \bl{$\dn$} & \bl{$\{[]\}$}\\
+ \bl{$A^{n+1}$} & \bl{$\dn$} & \bl{$A \,@\, A^n$}
+ \end{tabular}
+ \end{center}\bigskip
+
+ \item[] For example
+
+ \begin{center}
+ \begin{tabular}{lcl@{\hspace{10mm}}l}
+ \bl{$A^4$} & \bl{$=$} & \bl{$A \,@\, A \,@\, A \,@\, A$} & \bl{$(@\,\{[]\})$}\\
+ \bl{$A^1$} & \bl{$=$} & \bl{$A$} & \bl{$(@\,\{[]\})$}\\
+ \bl{$A^0$} & \bl{$=$} & \bl{$\{[]\}$}\\
+ \end{tabular}
+ \end{center}
+
+ \end{itemize}
+
+ \end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+ \frametitle{Questions}
+
+ \begin{itemize}
+ \item Say \bl{$A = \{[a],[b],[c],[d]\}$}.\bigskip
+
+ \item[]
+ How many strings are in \bl{$A^4$}\,?
+ \bigskip\medskip\pause
+
+
+ \item[]
+ What if \bl{$A = \{[a],[b],[c],[]\}$};\\
+ how many strings are then in \bl{$A^4$}\,?
+ \end{itemize}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+ \frametitle{The Star Operation}
+
+ \begin{itemize}
+ \item The \alert{\bf Kleene Star} of a \underline{language}:
+ \bigskip
+
+ \begin{center}
+ \begin{tabular}{c}
+ \bl{$A\star \dn \bigcup_{0\le n} A^n$}
+ \end{tabular}
+ \end{center}\bigskip
+
+ \item[] This expands to
+
+ \[
+ \bl{A^0 \cup A^1 \cup A^2 \cup A^3 \cup A^4 \cup \ldots}
+ \]
+
+ or
+
+ \small
+ \[
+ \bl{\{[]\} \;\cup\; A \;\cup\; A\,@\,A \;\cup\;
+ A\,@\,A\,@\,A \;\cup\; A\,@\,A\,@\,A\,@\,A \cup \ldots}
+ \]
+
+ \end{itemize}
+
+ \end{frame}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[c]
@@ -799,14 +949,14 @@
\begin{column}{.5\textwidth}
\underline{\bf Strand 1}\medskip
\begin{itemize}
-\item four programming tasks:
+\item 4 programming tasks:
\begin{itemize}
-\item matcher (4\%, 12.10.)
-\item lexer (5\%, 02.11.)
-\item parser (5\%, 23.11.)
-\item compiler (6\%, 14.12.)
+\item matcher (4\%, 11.10.)
+\item lexer (5\%, 04.11.)
+\item parser (5\%, 22.11.)
+\item compiler (6\%, 13.12.)
\end{itemize}
-\item in any lang.~you like,\\ but I want to see the code
+\item in any lang.~you like,\\ but I want to see the\\ code
\end{itemize}
\end{column}
@@ -815,7 +965,7 @@
\underline{\bf Strand 2}\smallskip\begin{itemize}
\item one task: prove the correctness of a regular expression matcher in
the \underline{Isabelle} theorem prover
-\item 20\%, submission on~14.12.\hspace{-5mm}\mbox{}
+\item 20\%, submission on~13.12.\hspace{-5mm}\mbox{}
\end{itemize}
\end{column}
\end{columns}\medskip