#+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline #+OPTIONS: author:t broken-links:nil c:nil creator:nil #+OPTIONS: d:(not "LOGBOOK") date:t e:t email:nil f:t inline:t num:t #+OPTIONS: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t #+OPTIONS: timestamp:t title:t toc:t todo:t |:t #+TITLE: Rust, Rocket and Diesel #+SUBTITLE: Web apps with rust #+DESCRIPTION: An introduction to Rust, Rocket and Diesel. #+KEYWORDS: rust rocket diesel #+AUTHOR: \href{mailto:rocket-presentation@onders.org}{finga} #+EMAIL: rocket-presentation@onders.org #+LANGUAGE: en #+SELECT_TAGS: export #+EXCLUDE_TAGS: noexport #+CREATOR: Emacs 26.1 (Org mode 9.1.9) #+OPTIONS: H:2 #+LATEX_CLASS: beamer #+LATEX_CLASS_OPTIONS: [aspectration=1610] # #+LATEX_HEADER: \hypersetup{colorlinks=true,linkcolor=gray} #+LATEX_HEADER: \hypersetup{colorlinks=true,linkcolor=black,urlcolor=gray} #+COLUMNS: %45ITEM %10BEAMER_env(Env) %10BEAMER_act(Act) %4BEAMER_col(Col) %8BEAMER_opt(Opt) #+BEAMER_THEME: Frankfurt #+BEAMER_COLOR_THEME: seagull #+BEAMER_FONT_THEME: #+BEAMER_INNER_THEME: #+BEAMER_OUTER_THEME: #+BEAMER_HEADER: \institute[INST]{\href{https://cccsbg.at}{cccsbg}} * Rust ** What is Rust? #+BEGIN_CENTER #+LaTeX:\includegraphics[width = 0.65\textwidth]{img/Bruine_roest_op_tarwe_(Puccinia_recondita_f.sp._tritici_on_Triticum_aestivum).jpg} #+END_CENTER *** Rust, the language - About 10 years old (2010) - Memory safe without gcing, optional ref counting - Ownership, lifetimes, traits - Variables are immutable by default and can be shadowed - Performance of idiomatic Rust is comparable to the performance of idiomatic cpp ** Where to get infos *** Docs... - [[https://doc.rust-lang.org/book/][The rust book]] (~$ rustup docs --book~), [[https://doc.rust-lang.org/rust-by-example/][Rust by example]] - [[https://doc.rust-lang.org/std/][The Rust Standard Library]] - [[https://cheats.rs][cheats.rs]] - [[https://cargo.io][cargo.io]]/[[https://lib.rs][lib.rs]] *** Chat (Discord) - [[https://discord.gg/rust-lang][The Rust Programming Language]] - [[https://discord.com/invite/tcbkpyQ][The Rust Programming Language Community Server]] ** What are we going to use? *** Definitely - [[https://rocket.rs][rocket]] - [[https://diesel.rs][diesel]] - log *** Maybe - anyhow - lettre - sha3 - serde - chrono ** How to install *** Install Rust #+BEGIN_SRC sh $ curl --proto '=https' --tlsv1.2 -sSf \ https://sh.rustup.rs | sh #+END_SRC *** Install nightly Rust (needed for Rocket) #+BEGIN_SRC sh $ rustup toolchain install nightly #+END_SRC *** Install rustfmt (code formatter) #+BEGIN_SRC sh $ rustup component add rustfmt #+END_SRC *** Install clippy (linter and static code analysis) #+BEGIN_SRC sh $ rustup component add clippy #+END_SRC * Rocket ** What is Rocket? #+BEGIN_QUOTE Rocket is a web framework for Rust that makes it simple to write fast, secure web applications without sacrificing flexibility, usability, or type safety. #+END_QUOTE *** Features **** Col left :PROPERTIES: :BEAMER_col: 0.45 :END: - Type Safe - Extensible - Templating - Cookies **** Col right :PROPERTIES: :BEAMER_col: 0.45 :END: - Streams - Testing (Unit tests) - Typed URIs ** Where to get infos? *** Docs... - [[https://rocket.rs/v0.4/guide/][Rocket Guide]] - [[https://api.rocket.rs/v0.4/rocket/][Rocket API docs]] - [[https://github.com/SergioBenitez/Rocket/tree/v0.4/examples][Examples]] *** Chat - Matrix: [[https://chat.mozilla.org/#/room/%23rocket:mozilla.org][#rocket:mozilla.org]] - IRC on Freenode: [[https://kiwiirc.com/client/chat.freenode.net/#rocket][#rocket]] * Diesel ** What is an ORM? ** What is diesel capable of? * Lets code something * Conclusion ** What did we do? ** What did you hopefully learn! ** Two small projects *** [[https://git.onders.org/finga/ldap0r][ldap0r]] - LDAP password reset tool - ($\sim$ 300 SloC) - First release - Tests *** [[https://git.onders.org/finga/filerly][filerly]] - File sharing a la NextCloud - Not ready yet, work in progress... ** The End #+BEGIN_CENTER #+LaTeX:\includegraphics[width = 0.3\textwidth]{img/goodbye.jpg} \Huge Thanks for your attention!!1! This is the end.. #+END_CENTER