official version of the presentation

Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
This commit is contained in:
Vincenzo Palazzo 2023-09-15 14:12:35 +02:00
parent eaad54ebdd
commit 0b0992839c
15 changed files with 11347 additions and 1224 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules
.vercel

View File

@ -1,79 +1,3 @@
# Reveal.js + Svelte + Vite
# Kangrejos-2023-RustForLinux-talk
![Svelte Slides logo](public/svelte-slides.jpg)
This template should help get you started creating awesome slide decks using [Reveal.js](https://revealjs.com) with Svelte in Vite.
## How does it work?
- Your slides are both Svelte components and Reveal.js slides.
- You can have one or more slides (using `<section/>`) within a single Svelte component.
- Create new slides as Svelte components under `src/slides`
- Just import and include your components inside the `src/Presentation.svelte` component
- That's it, you are good to go.
## Configuring Reveal.js
You can customize the `Reveal.js` setup in `src/config.js`.
## Sample slide
### src/Title.svelte
You can insert code blocks using template literals inside `<pre>` and `<code>` elements.
```html
<section>
<h1>This is a sample slide</h1>
<ul>
<li>Apples</li>
<li>Oranges</li>
<li>Grapes</li>
</ul>
<h2>Sample code</h2>
<pre>
<code data-line-numbers data-trim data-no-escape>
{`
const name = "hello world";
if(name === 'hello') {
console.log('world');
}
`}
</code>
</pre>
</section>
```
### src/Presentation.svelte
The slide order is the order in which you layout your Svelte components.
```html
<script>
import Title from "./slides/Title.svelte";
import Love from "./slides/Love.svelte";
import GettingStarted from "./slides/GettingStarted.svelte";
const partner = ["Svelte", "Reveal.js"];
</script>
<title />
<Love {partner} />
<GettingStarted />
```
## Inspiration
This project is inspired by [svelte-reveal-boilerplate](https://github.com/micschwarz/svelte-reveal-boilerplate/)
## Recommended IDE Setup
[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode).
## References
- [Svelte](https://svelte.dev)
- [Vite.js](https://vitejs.dev)
- [Reveal.js](https://revealjs.com)
My presentation given at the Rust for Linux Kernel summit https://kangrejos.com/

File diff suppressed because one or more lines are too long

1194
dist/assets/index.9e11991c.js vendored Normal file

File diff suppressed because one or more lines are too long

8
dist/index.html vendored
View File

@ -2,14 +2,8 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link
rel="icon"
type="image/png"
href="https://brink.dev/assets/images/b_logo_whitebg.png"
/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Svelte + Reveal.js Boilerplate</title>
<script type="module" crossorigin src="/assets/index.07220a6d.js"></script>
<script type="module" crossorigin src="/assets/index.9e11991c.js"></script>
<link rel="stylesheet" href="/assets/index.f526871f.css">
</head>
<body>

View File

@ -2,13 +2,8 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link
rel="icon"
type="image/png"
href="https://brink.dev/assets/images/b_logo_whitebg.png"
/>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Svelte + Reveal.js Boilerplate</title>
<title>Rust for Linux kernel summit 2023 </title>
</head>
<body>
<div id="app"></div>

View File

@ -20,5 +20,5 @@ check:
clean:
{{CC}} clean
deply:
@echo "I do not know how to deploy this stuff"
deploy:
{{CC}} x vercel --prod

9712
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@
"prettier": "^2.8.3",
"prettier-plugin-svelte": "^2.9.0",
"svelte": "^3.49.0",
"vercel": "^28.13.2",
"vercel": "^28.20.0",
"vite": "^3.0.0"
},
"dependencies": {

View File

@ -1,5 +1,13 @@
<script>
import Title from "./slides/Title.svelte";
import Intro from "./slides/Intro.svelte";
import NowOnTheKernel from "./slides/NowOnTheKernel.svelte";
import Solution from "./slides/Solution.svelte";
import UseCase from "./slides/UseCase.svelte";
</script>
<Title />
<Intro />
<NowOnTheKernel />
<Solution />
<UseCase />

80
src/slides/Intro.svelte Normal file
View File

@ -0,0 +1,80 @@
<section>
<section>
<p
style="background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:30%;text-align:left;padding:8px"
>
<span style="color:green;diplay:flex;margin-left:14px"></span>
<span style="color:#ADB5BD">~</span> whoami
</p>
<q>Random Person with Ramdom Side Project!</q>
</section>
<section>
<h4>Some of my Current Interest</h4>
<ul>
<li class="fragment">
Working on the Rust compiler
<ul>
<li>Project Leader of <a href="#TODO">Macros Working Group</a></li>
<li>Project Member of <a href="#TODO">Async Working Group</a></li>
</ul>
</li>
<li class="fragment">
Working in the linux kernel through the <a
href="https://github.com/Rust-for-Linux">Rust for Linux</a
> Initiative;
</li>
</ul>
</section>
<section>
<q>C macros are difficult to read</q>
<div>
<img
src="https://cdn.pvs-studio.com/import/docx/blog/0583_Perl5/image2.png?ver=07-27-2023-02-50-27"
/>
</div>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
while let Some(token) = body_it.next() {
match token {
TokenTree::Ident(ident) if ident.to_string() == "fn" => {
let fn_name = match body_it.next() {
Some(TokenTree::Ident(ident)) =>
ident.to_string(),
_ => continue,
};
functions.insert(fn_name);
}
// ...
_ => (),
}
}
</script>
</code>
</pre>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
macro_rules! quote_spanned {
($span:expr => $($tt:tt)*) => {{
let mut tokens;
#[allow(clippy::vec_init_then_push)]
{
tokens = ::std::vec::Vec::new();
let span = $span;
quote_spanned!(@proc tokens span $($tt)*);
}
::proc_macro::TokenStream::from_iter(tokens)
}};
(@proc $v:ident $span:ident) => {};
....
}
</script>
</code>
</pre>
</section>
</section>

View File

@ -0,0 +1,56 @@
<script>
</script>
<section>
<section>
<p
style="background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:50%;text-align:left;padding:8px"
>
<span style="color:green;diplay:flex;margin-left:14px"></span>
<span style="color:#ADB5BD">~</span> ls -la linux/rust/macros
</p>
<h3>Into the Kernel Right Now</h3>
</section>
<section>
<ul>
<li>All the macros are defined in the same directory; (good for now)</li>
<li class="fragment">
All the macros are parsing almost the same syntax; (impl/struct)
</li>
<pre class="fragment">
<code data-trim data-noescape>
<script type="text/template">
#[proc_macro]
pub fn foo(body: TokenStream) -> TokenStream {
for tt in body.into_iter() {
match tt {
TokenTree::Ident(_) => eprintln!("Ident"),
TokenTree::Punct(_) => eprintln!("Punct"),
TokenTree::Literal(_) => eprintln!("Literal"),
_ => {}
}
}
return TokenStream::new();
}
</script>
</code>
</pre>
</ul>
</section>
<section>
<p><strong>Drawbacks</strong></p>
<ul>
<li>Code duplication</li>
<li class="fragment">
Bigger patch when there is a new syntax to support. (Good for seek jobs)
</li>
<li class="fragment">
There is no common pattern, so everyone use their own mental pattern for
parsing
</li>
<li class="fragment">
Copy and Paste do not work without <strong>eprintln</strong>
</li>
</ul>
</section>
</section>

178
src/slides/Solution.svelte Normal file

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
<section>
<section>
<h3>Title of the presentation 🦀</h3>
<h3>Procedural Macro in the Linux Kernel 🦀</h3>
<img
src="https://avatars.githubusercontent.com/u/17150045?v=4"
width="120"
@ -16,14 +16,7 @@
>
<div align="center">
<p><small> Date x.x.x</small></p>
<p><small> Spain 17-09-2023 </small></p>
</div>
</section>
<section>
<h3>Overview</h3>
<ul>
<li> 🦕</li>
</ul>
</section>
</section>

109
src/slides/UseCase.svelte Normal file
View File

@ -0,0 +1,109 @@
<section>
<section>
<p
style="background-color: #373A3C; color: #ADB5BD;border-radius:25px;width:90%;text-align:left;padding:8px"
>
<span style="color:green;diplay:flex;margin-left:14px"></span>
<span style="color:#ADB5BD">~</span> cat kproc_macros/exaperiments/README.md
</p>
<h3>Dogfooting</h3>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
let plugin = plugin! {
state: State::new(),
dynamic: true,
notification: [],
methods: [],
hooks: [],
};
plugin.start();
</script>
</code>
</pre>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
#[rpc_method(
rpc_name = "foo_macro",
description = "This is a simple and short description"
)]
pub fn foo_rpc(plugin: &mut Plugin<State>, request: Value) -> Result<Value, PluginError> {
let response = json!({"is_dynamic": plugin.dynamic, "rpc_request": request});
Ok(response)
}
</script>
</code>
</pre>
</section>
<section>
<p>
User library: <a src="https://github.com/rsmicro/lexopt-derive"
>lexopt-derive</a
>
</p>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
pub fn generate_impl(struct_tok: &StructToken) -> TokenStream {
let gen = if let Some(str_gen) = &struct_tok.generics {
format!("{}", str_gen)
} else {
"".to_owned()
};
let name_attr = &struct_tok.fields[0].identifier;
let ty = struct_tok.fields[0].ty.to_string();
let code = format!(
"impl{} {}{} {{ \
fn get_{name_attr}(&self) -> {ty} {{ \
return self.{name_attr}.clone()\
}} \
\
fn set_{name_attr}(&self, inner: {ty}) {{ }}
}}",
gen, struct_tok.name, gen,
);
return code.parse().unwrap();
}
</script>
</code>
</pre>
</section>
<section>
<pre>
<code data-trim data-noescape>
<script type="text/template">
editor!{
@foreach ${attributes} {
println!("{}", ${ir});
}
}
</script>
</code>
</pre>
<p class="fragment">
Or just finish to implement <a
src="https://doc.rust-lang.org/proc_macro/fn.quote.html">quote</a
> in the std
</p>
</section>
<section>
<p>
Please complain at <a src="https://github.com/rsmicro/kproc-macros"
>https://github.com/rsmicro/kproc-macros</a
>
</p>
</section>
<section>
<h3>Thanks!</h3>
</section>
</section>