--- a/slides/slides01.tex Thu Nov 09 16:34:08 2017 +0000
+++ b/slides/slides01.tex Fri Nov 10 00:56:12 2017 +0000
@@ -55,7 +55,7 @@
\begin{tabular}{l}
\mbox{}\hspace{-1mm}\includegraphics[scale=0.36]{../pics/twitter.png}\\[-1mm]
\includegraphics[scale=0.30]{../pics/linked.png}\\
-\includegraphics[scale=0.30]{../pics/guardian.jpg}\\[-3mm]
+%\includegraphics[scale=0.30]{../pics/guardian.jpg}\\[-3mm]
\mbox{}\hspace{-2mm}\includegraphics[scale=0.38]{../pics/morgan.png}\\[-3mm]
\includegraphics[scale=0.30]{../pics/suisse.png}\\
{\large\bf ...}
@@ -93,7 +93,7 @@
\small
alternatives:\\
-Elm, Haskell, Ocaml, F\sharp, Erlang, ML, Lisp (Racket), \ldots
+Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -114,8 +114,6 @@
\textbf{\large Java}
\end{textblock}
-
-
\begin{textblock}{6}(13,13.4)
\textbf{\large Scala}
\end{textblock}
@@ -148,7 +146,7 @@
%
\mbox{}\\[3.5cm]
\small
-Scala, Elm, Haskell, Ocaml, F\sharp, Erlang, ML, Lisp (Racket), \ldots
+Scala, Elm, Haskell, Ocaml, F$\sharp$, Erlang, ML, Lisp (Racket), \ldots
\only<3>{
\begin{textblock}{6}(2,6.2)
@@ -289,10 +287,10 @@
\end{textblock}}
\only<3>{
- \begin{textblock}{5}(1,8)
- \begin{bubble}[2.1cm]
- \footnotesize{}in Java or C++\\
- \end{bubble}
+ \begin{textblock}{14.2}(1,12.3)
+ In FP: Once a variable is created, it is assigned a value and then
+ never changed again $\Rightarrow$ no synchronisation\smallskip\\
+ \small\textcolor{gray}{(Andrew's second favourite feature of C++)}
\end{textblock}}
\end{frame}
@@ -380,23 +378,219 @@
{\lstset{language=Java}\fontsize{7}{8}\selectfont
\texttt{\lstinputlisting{URLReader.java}}}
-\only<2>{
-\begin{textblock}{5}(12,2)
-\includegraphics[scale=0.50]{../pics/skeleton.jpg}\\
-\end{textblock}}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[c]
+\frametitle{Coursework}
+
+\begin{itemize}
+\item sorry, I might have been a bit wordy:\\
+ CW description is 7 pages, but
+ I only needed \mbox{< 100} loc for all the CW\bigskip
+
+\item there is email feedback when pushing code to github\bigskip
+
+\item we want you to learn FP: \alert{no vars}, no mutable
+ datastructures, e.g.~\texttt{ListBuffer}
+\end{itemize}
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{frame}[c, fragile]
+\frametitle{The Joy of Immutability}
+
+\begin{itemize}
+\item If you need to manipulate some data in a list say, then you make
+ a new list with the updated values, rather than revise the original
+ list. Easy!\medskip
+
+ {\small
+ \begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
+ val old_list = List(1, 2, 3, 5)
+ val new_list = 0 :: old_list
+ \end{lstlisting}}
+
+\item You do not have to be defensive about who can access the data
+ (concurrency, lazyness).
+\end{itemize}
+\end{frame}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t]
+\frametitle{Email: Hate 'val'}
+
+\mbox{}\\[-25mm]\mbox{}
+
+\begin{center}
+ \begin{bubble}[10.5cm]
+ Subject: \textbf{Hate '\textbf{\texttt{val}}'}\hfill 01:00 AM\medskip\\
+
+ Hello Mr Urban,\medskip\\
+
+ I just wanted to ask, how are we suppose to work
+ with the completely useless \textbf{\texttt{val}}, that can’t be changed ever? Why is
+ this rule active at all? I’ve spent 4 hours not thinking on the
+ coursework, but how to bypass this annoying rule. What’s the whole
+ point of all these coursework, when we can’t use everything Scala
+ gives us?!?\medskip\\
+
+ Regards.\\
+ \mbox{}\hspace{5mm}\textcolor{black!50}{<<deleted>>}\\
+ \end{bubble}
+\end{center}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
+
+\mbox{}\\[-25mm]\mbox{}
+
+\begin{center}
+ \begin{bubble}[10.5cm]
+ Subject: \textbf{Re: Hate '\textbf{\texttt{val}}'}\hfill 01:02 AM\bigskip\bigskip\\
+
+ \textcolor{black!70}{
+ \textit{\large<<my usual rant about fp\ldots\\ concurrency bla bla\ldots{} better programs
+ yada>>}}\bigskip\bigskip\bigskip
+
+ PS: What are you trying to do where you desperately want to use \texttt{var}?
+ \end{bubble}
+\end{center}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c,fragile]
+
+\begin{textblock}{6}(0.5,0.5)
+\begin{bubble}[11.5cm]
+ \small
+ Subject: \textbf{Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:04 AM\medskip\\
+
+ \textbf{Right now my is\_legal function works fine:}
+
+\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
+ def is_legal(dim: Int, path: Path)(x: Pos): Boolean = {
+ var boolReturn = false
+ if(x._1 > dim || x._2 > dim || x._1 < 0 || x._2 < 0) {
+ else { var breakLoop = false
+ if(path == Nil) { boolReturn = true }
+ else { for(i <- 0 until path.length) {
+ if(breakLoop == false) {
+ if(path(i) == x) {
+ boolReturn = true
+ breakLoop = true
+ }
+ else { boolReturn = false }
+ } else breakLoop
+ }
+ }
+ boolReturn
+ }
+\end{lstlisting}
+\end{bubble}
+\end{textblock}
+
+\begin{textblock}{6}(8.2,11.8)
+\begin{bubble}[5.5cm]\footnotesize\bf
+\ldots{}but I can’t make it work with boolReturn being val. What approach would
+you recommend in this case, and is using var in this case justified?
+\end{bubble}
+\end{textblock}
+
+\only<2>{
+\begin{textblock}{6}(0.3,11.8)
+ \begin{bubble}[3.1cm]
+ \textbf{Me:}
+ \raisebox{-12mm}{\includegraphics[scale=0.08]{../pics/throwup.jpg}}
+ \end{bubble}
+\end{textblock}}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t,fragile]
+
+\mbox{}\\[-25mm]\mbox{}
+
+\begin{textblock}{6}(0.5,2)
+ \begin{bubble}[11.5cm]
+ Subject: \textbf{Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 01:06 AM\bigskip\\
+ \small
+
+ OK. So you want to make sure that the \texttt{x}-position is not outside the
+ board....and furthermore you want to make sure that the \texttt{x}-position
+ is not yet in the path list. How about something like\bigskip
+
+\footnotesize\begin{lstlisting}[language=Scala, numbers=none, xleftmargin=-1mm]
+ def is_legal(dim: Int, path: Path)(x: Pos): Boolean =
+ ...<<some board conditions>>... && !path.contains(x)
+\end{lstlisting}\bigskip
+
+ \small Does not even contain a \texttt{val}.
+ \end{bubble}
+\end{textblock}
+
+\begin{textblock}{6}(7,12)
+\footnotesize\textcolor{black!50}{(This is all on one line)}
+\end{textblock}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[t,fragile]
+
+\mbox{}\\[-15mm]\mbox{}
+
+\begin{textblock}{6}(1,3)
+ \begin{bubble}[10.5cm]
+ Subject: \textbf{Re: Re: Re: Re: Hate '\textbf{\texttt{val}}'}\hfill 11:02 AM\bigskip\bigskip\\
+
+ THANK YOU! You made me change my coding perspective. Because of you,
+ I figured out the next one\ldots
+ \end{bubble}
+\end{textblock}
+
+\only<2>{
+\begin{textblock}{6}(0.3,11.8)
+ \begin{bubble}[3.1cm]
+ \textbf{Me:}
+ \raisebox{-12mm}{\includegraphics[scale=0.15]{../pics/happy.jpg}}
+ \end{bubble}
+\end{textblock}}
+
+\end{frame}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[c]
\frametitle{Conclusion}
\begin{itemize}
\item Scala is still under heavy development\\ (the compiler is terribly slow)\medskip
\item {\bf\url{http://www.scala-lang.org/}}\bigskip
-\item it is a rather \textbf{\alert{deep}} language\ldots i.e.~gives you a lot of
- rope to shoot yourself\bigskip\bigskip
+
+\item it is a rather \textbf{\alert{deep}} language\ldots i.e.~gives
+ you a lot of rope to shoot yourself\bigskip
+\item learning functional programming is not easy\ldots{}when you have
+ spent all of your career thinking in a procedural way it is hard to
+ change\bigskip\medskip
+
\item hope you have fun with the coursework
\end{itemize}
\end{frame}
@@ -404,9 +598,18 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[c]
-\frametitle{\begin{tabular}{c}\\[3cm]\alert{Questions?}\end{tabular}}
+\frametitle{\begin{tabular}{c}\\[0cm]\alert{Questions?}\end{tabular}}
-\mbox{}
+\begin{center}
+ \begin{tabular}[t]{@{}l@{}l@{}}
+ \includegraphics[scale=0.1]{../pics/mand4.png} &
+ \raisebox{1.2mm}{\includegraphics[scale=0.1]{../pics/mand3.png}}
+ \end{tabular}
+\end{center}
+
+\begin{center}
+My Scala Office Hours: Thursdays 11 -- 13
+\end{center}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
@@ -419,3 +622,10 @@
%%% TeX-master: t
%%% End:
+
+“Functional programming is often regarded as the best-kept secret of
+scientific modelers, mathematicians, artificial intelligence
+researchers, financial institutions, graphic designers, CPU designers,
+compiler programmers, and telecommunications engineers.”
+
+The Wikipedia F# page
\ No newline at end of file