From c033384c4e1287eda7e3ce82350ef96848d12770 Mon Sep 17 00:00:00 2001 From: nek0 Date: Wed, 7 Sep 2022 08:24:54 +0200 Subject: [PATCH] init --- .gitignore | 8 ++ Webdev in Haskell.pdf | Bin 0 -> 84854 bytes Webdev in Haskell.tex | 257 ++++++++++++++++++++++++++++++++++++++++++ logo.png | Bin 0 -> 15529 bytes writeup.md | 65 +++++++++++ 5 files changed, 330 insertions(+) create mode 100644 .gitignore create mode 100644 Webdev in Haskell.pdf create mode 100644 Webdev in Haskell.tex create mode 100644 logo.png create mode 100644 writeup.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cdc30fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*.aux +*.log +*.nav +*.out +*.snm +*.synctex.gz +*.toc +*.sty diff --git a/Webdev in Haskell.pdf b/Webdev in Haskell.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b8aa69ceb0d511c07ce11a8494a86e11cd6294a GIT binary patch literal 84854 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�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 QLK?4R=>!Ey{wL}F1t+R$,->,::,++,!!,|,<-}, +} + +\lstset{ + frame=none, + xleftmargin=2pt, + stepnumber=1, + numbers=none, + numbersep=5pt, + numberstyle=\ttfamily\tiny\color{lightgray}, + belowcaptionskip=\bigskipamount, + captionpos=b, + escapeinside={*'}{'*}, + language=Haskelln, + tabsize=2, + emphstyle={\bf}, + commentstyle=\it, + stringstyle=\mdseries\ttfamily\color{green}, + showspaces=false, + keywordstyle=[1]\color{cyan}\bfseries\ttfamily, + keywordstyle=[2]\color{orange}\bfseries\ttfamily, + keywordstyle=[3]\color{yellow}\bfseries\ttfamily, + keywordstyle=[4]\color{red}\bfseries\ttfamily, + keywordstyle=[5]\color{purple}\bfseries\ttfamily, + keywordstyle=[6]\color{blue}\bfseries\ttfamily, + %keywordstyle=\color{cyan}\ttfamily + columns=flexible, + basicstyle=\color{white}\small\ttfamily, + showstringspaces=false, + morecomment=[l]\%, + emptylines=1, +} + +% You can set fonts for Latin script here +\setmainfont{FreeSerif} +\setsansfont{FreeSans} +\setmonofont{Fira Mono} + +\usetheme{DarkConsole} + +\begin{document} + + % The metadata of the presentation + \title{Modernes WEbdevolpment in Haskell} + \subtitle{Am Beispiel des Projektes \texttt{mateamt}} + \author[]{Amedeo Molnár - \href{mailto:nek0@nek0.eu}{nek0@nek0.eu}} + %\institute{SRH Berufsbildungswerk Dresden gGmbH} + \date{\today} % Replace with date of the presentation + +\begin{frame}[plain] + \maketitle +\end{frame} + +\begin{frame}{Gliederung} + \tableofcontents +\end{frame} + +\section{Moderne Webentwicklung} + +\begin{frame}{\secname} + \onslide<2->{ + \mybox{ + \begin{minipage}{0.45\linewidth} + \onslide<2->{ + \begin{center} + \textbf{Backend} + \end{center} + } + \onslide<3->{ + Typische Sprachen: + \begin{itemize} + \item<4-> PHP + \item<5-> Java + \item<6-> Ruby + \item<7-> Python + \end{itemize} + } + \end{minipage} + } + \mybox{ + \begin{minipage}{0.45\linewidth} + \onslide<2->{ + \begin{center} + \textbf{Frontend} + \end{center} + } + \onslide<8-> + Verwendete Sprachen: + \begin{itemize} + \item<8-> HTML + \item<9-> CSS + \item<10-> JavaScript + \end{itemize} + \onslide<11->{ + Häufig verwendete Frameworks: + \begin{itemize} + \item<12-> React + \item<13-> Bootstrap + \item<14-> jQuery + \end{itemize} + } + \end{minipage} + } + } +\end{frame} + +\section{Haskell} + +\begin{frame}{\secname} + \begin{center} + \includegraphics[width=.2\linewidth]{logo.png} + \end{center} + \begin{minipage}{.45\linewidth} + \begin{itemize} + \item<2-> Rein funktional + \item<3-> Nicht-strikt evaluiert + \item<4-> Stark statisch typisiert + \item<5-> Volle Typinferenz + \end{itemize} + \end{minipage} + \begin{minipage}{.45\linewidth} + \begin{itemize} + \item<6-> Big Data + \item<7-> Banken- und FInanzsektor + \item<8-> Wissenschaft + \end{itemize} + \end{minipage} +\end{frame} + +\subsection{Hauptunterschiede zu imperativer Programmierung} + +\begin{frame}{\subsecname} + \begin{itemize} + \item<2-> Strikte Trennung zwischen reinen Berechnungen und Seiteneffekten + \item<3-> Unveränderliche Variablen + \item<4-> Keine Schleifen + \item<5-> Kein State + \end{itemize} +\end{frame} + +\section{Vorteile von Haskell in der Webentwicklung} + +\begin{frame}{\secname} + \begin{itemize} + \item<2-> Serialisierung und Deserialisierung von Daten unkompliziert + \item<3-> Datenverarbeitung kann leichter auf Korrektheit geprüft werden + \item<4-> Webanwendungen sind in der Regel zustandslos + \item<5-> Konkurrente Anfragen/Berechungen relativ leicht hmöglich + \end{itemize} +\end{frame} + +\section{Konventionen beim \texttt{mateamt} im Gegensatz zum \texttt{yammat}} + +\begin{frame}{secname} + \mybox{ + \begin{minipage}{.45\linewidth} + \texttt{mateamt}\\ + \begin{itemize} + \item<2-> Programmiersprache: Haskell + \item<4-> Stellt nur ein Backend dar + \item<6-> Microservice-Architektur + \end{itemize} + \end{minipage} + } + \mybox{ + \begin{minipage}{.45\linewidth} + \texttt{yammat}\\ + \begin{itemize} + \item<3-> Programmiersprache: Haskell + \item<5-> Front- und Backend + \item<7-> Monolithische Architektur + \end{itemize} + \end{minipage} + } +\end{frame} + +\section{Das Frontend des \texttt{mateamt}es} + +\begin{frame}{\secname} + \begin{itemize} + \item<2-> Zukünftige Benutzer des \texttt{mateamt}es sind ausdrücklich eingeladen eigene Frontends/Clients zu schreiben + \item<3-> Zur Unterstützung bei der Entwicklung wird folgendes angeboten: + \begin{itemize} + \item<4-> Beschreibung der API nach OpenAPI 3.0 + \item<5-> Swagger UI + \end{itemize} + \item<6-> Ein Referenzclient (der \texttt{matebeamte}) ist bereits in Arbeit + \end{itemize} +\end{frame} + +\section{Der Quelltext} + +\begin{frame}{Codetour} + \begin{center} + Bitte schnallen Sie sich an… + \end{center} +\end{frame} + +\begin{frame}{Code-Repositories} + \begin{minipage}{.45\linewidth} + \begin{center} + \qrcode{https://gitea.nek0.eu/nek0/mateamt}\\ + \href{https://gitea.nek0.eu/nek0/mateamt}{gitea.nek0.eu/nek0/mateamt} + \end{center} + \end{minipage} + \begin{minipage}{.45\linewidth} + \begin{center} + \qrcode{https://gitea.nek0.eu/nek0/matebeamter}\\ + \href{https://gitea.nek0.eu/nek0/matebeamter}{gitea.nek0.eu/nek0/matebeamter} + \end{center} + \end{minipage} +\end{frame} + +\section*{Abschluss} + +\begin{frame}[plain, noframenumbering] + \begin{center} + \Huge Fragen? Fragen! + \end{center} +\end{frame} + +\begin{frame}[plain, noframenumbering] + \begin{center} + {\Huge Vielen Dank für die Aufmerksamkeit!}\\ + + \vspace{1cm} + + Diese Presentation steht zum Download bereit unter:\\ + \url{https://gitea.nek0.eu/nek0/???} + \end{center} +\end{frame} + +\end{document} \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bc22230936901b3b080ea3272a64c771103937cc GIT binary patch literal 15529 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 XRY0Yc-CN{#W0dy_ALZ+0&BFc}X7 literal 0 HcmV?d00001 diff --git a/writeup.md b/writeup.md new file mode 100644 index 0000000..e6962d4 --- /dev/null +++ b/writeup.md @@ -0,0 +1,65 @@ +#Modernes Web-Development in Haskell am Beispiel des Projektes `mateamt` + +##Webentwicklung + +* Typischerweise unterteilt in Frontend und Backend +* Typische Sprachen Backend: + * PHP + * Java + * Ruby + * Python +* Frontendentwicklung geschieht in: + * HTML + * CSS + * JavaScript +* Häufige Bibliotheken im Frontend: + * React + * Bootstrap + * jQuery + +##Haskell + +* Rein funktionale Programmiersprache +* Nicht-strikt evaluiert +* Stark statisch typisiert +* Volle Typinferenz +* Typische Einsatzgebiete: + * Big Data + * Banken- und Finanzsektor + * Wissenschaft (Simulationen, Hochparallele Berechnungen) + * Theoretisch: Überall, da Turing-Vollständig + +###Hauptunterschiede zur imperativen Programmierung + +* Vermeidung bzw. klare Trennung von Seiteneffekten (Disk IO, DB, Netzwerk, etc.) +* Unveränderliche Variablen +* Keine Schleifen +* Kein State + +##Vorteile von Haskell in der Webentwicklung + +* Serialisierung und Deserialisierung von Daten meist unkompliziert, da stark typisiert +* Datenverarbeitung kann einfach auf Korrektheit geprüft werden +* Webanwendungen sind i.d.R. stateless, Haskell auch +* Haskell kann sehr gut mit konkurrenten Berechnungen umgehen, welche bei Webanwendungen häufig + auftreten + +##Konventionen beim `mateamt` und Unterschiede vom `yammat` + +* Programmiert ist es (wieder) in Haskell +* Grundsätzlich ist das `mateamt` 'nur' ein Backend +* Microservice-Architektur (Im Gegensatz zum monolithischen `yammat`) ermöglicht klarere Trennung + zwischen Daten- und Kundenseite (Separation of Concerns) +* Es wird ein modifiziertes MVC-Architekturmodell verwendet: + * 'View' ist ausgelassen, da keine Anzeige erfolgt + * Vorteil ist auch hier eine Domänentrennung zwischen Datenbank und Controller. +* Kommunikation mit Frontend(s) läuft über eine definierte JSON-REST-API + +##Das Frontend des `mateamt`es + +* Zukünftige Benutzer das `mateamt`es sind ausdrücklich eingeladen eigene Clients/Frontends für die + API des `mateamt`es in einer Sprache ihrer Wahl zu implementieren. +* Zur Unterstützung der Entwicklung eigener Clients/Frontends werden angeboten: + * OpenAPI 3.0 beschreibung der API + * Swagger UI +* Ein Referenzclient (der `matebeamte`) ist bereits in Arbeit