From 3d68ef1e974b6cba15317d96f5ccc37f14697ea6 Mon Sep 17 00:00:00 2001 From: notes Date: Fri, 1 Mar 2024 12:37:14 +0000 Subject: [PATCH] feat: add some rust notes --- Library/Core/Widget/Linked Mentions.md | 2 +- PLUGS.md | 1 + Projects/bachelor/Notes.md | 76 +++++++++++++++++++++++++ Projects/bachelor/RUNTIME_EXECUTOR.md | 26 +++++++++ Projects/bachelor/glossary.md | 33 +++++++++++ Projects/bachelor/index.md | 12 +++- Projects/bachelor/links.md | 16 ++++++ Projects/bachelor/termine/06.02.2024.md | 10 ++++ Projects/bachelor/termine/21.02.2024.md | 1 + Resources/dev/rust.md | 30 ++++++++++ Resources/index.md | 1 + 11 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 Projects/bachelor/Notes.md create mode 100644 Projects/bachelor/RUNTIME_EXECUTOR.md create mode 100644 Projects/bachelor/glossary.md create mode 100644 Projects/bachelor/termine/06.02.2024.md create mode 100644 Projects/bachelor/termine/21.02.2024.md create mode 100644 Resources/dev/rust.md diff --git a/Library/Core/Widget/Linked Mentions.md b/Library/Core/Widget/Linked Mentions.md index a2c9554..6104e18 100644 --- a/Library/Core/Widget/Linked Mentions.md +++ b/Library/Core/Widget/Linked Mentions.md @@ -1,7 +1,7 @@ --- description: Adds Linked Mentions to pages tags: template -hooks.bottom.where: 'true' +hooks.bottom.where: 'false' --- ```template # We need to escape handlebars directives here, since we're embedding diff --git a/PLUGS.md b/PLUGS.md index 87c955b..2d78645 100644 --- a/PLUGS.md +++ b/PLUGS.md @@ -3,4 +3,5 @@ This file lists all plugs that SilverBullet will load. Run the {[Plugs: Update]} ```yaml - github:silverbulletmd/silverbullet-git/git.plug.js - github:silverbulletmd/silverbullet-mermaid/mermaid.plug.js +- github:joekrill/silverbullet-treeview/treeview.plug.js ``` \ No newline at end of file diff --git a/Projects/bachelor/Notes.md b/Projects/bachelor/Notes.md new file mode 100644 index 0000000..92ae065 --- /dev/null +++ b/Projects/bachelor/Notes.md @@ -0,0 +1,76 @@ + +```toc +``` + +# Notes + +We need three major components to work together. I would love it if the node-store and the runtime are super loosely coupled so that they could be replaced by at will. So for example i could use the “server-runtime” that executes the node-graph on the server, or the “local” runtime that executes the node-graph locally. + +**NODE_INTERFACE** +This is where the user interacts with the node graph. The frontend loads a node-system. Then fetches all the relevant nodes from the node-store. + +**NODE_REGISTRY** +The node-store stores all the nodes. For each node it stores a definition and the wasm blob that executes that node. + +**[[Projects/bachelor/RUNTIME_EXECUTOR|RUNTIME_EXECUTOR]]** +The runtime gets a node-graph and returns the result after executing the node-graph. It fetches the relevant nodes from the node-store. + + +# How to store nodes in the registry? + +The nodes need: + +## ID: string/string/string +I could imagine something like jimfx/nature/branch + +## INPUTS: +We need a way to define how the UI should render the input ui. Could be something like: + +```json +{ + "inputs": [ + “a”: { + “type”: “select”, + “options”: [ + “curly”, + “straight” + ] + }, + "b": { + "type":"float", + "value": 0.5, + "max": 10.0, + "min": 0 + }, + "res":{ + "type": "integer", + "value": 5, + "setting":"leaves/resolution" + } + ] +} +``` + +## OUTPUTS +The nodes output, could look something like this: + +```json +{ + "outputs": ["stem","float"] +} +``` + +# How to store serialized nodes + +```json +{ + "id":"jimfx/nature/branch", + "inputs": [0,8.4], + "position": [0.6, 10] + "meta": { + "title":"Branch Node" + } +} +``` + + diff --git a/Projects/bachelor/RUNTIME_EXECUTOR.md b/Projects/bachelor/RUNTIME_EXECUTOR.md new file mode 100644 index 0000000..e2735f3 --- /dev/null +++ b/Projects/bachelor/RUNTIME_EXECUTOR.md @@ -0,0 +1,26 @@ +# RUNTIME_EXECUTOR + +This component receives a serialized node_graph and returns the output. I generally love the idea that a node is a pure function which just receives its own inputs and then calculates them. BUT! there is always a but, there are some things that the nodes needs that are not its own inputs. These are in my experience: + +**run_seed** +Some nodes generate random values, and to generate random values we generally need a seed value. + +**settings** +There are some values that are kind-of global inputs. That means they are inputs to the node, but each node receives the same input. For example for the plant nodes, they are the resolution of each leave. + +After some thinking, my idea is to model these inputs as *hidden* inputs to the node. So they are not gonna be visible in the **NODE_INTERFACE**. + +But they are gonna be passed to the nodes as normal inputs. This could be super useful to allow easy memoization of the nodes, because if none of the inputs changed, we can return the previously computed output. + + + +## Linking/Importing of Nodes + +**WebAssembly Components** +\- only works in wasmtime / jco at the moment + +For this the runtime_executor needs to be wasm aswell. + +**No linking** +\+ Very easy to implement, works everywhere +\- Probably not as fast as components \ No newline at end of file diff --git a/Projects/bachelor/glossary.md b/Projects/bachelor/glossary.md new file mode 100644 index 0000000..610070d --- /dev/null +++ b/Projects/bachelor/glossary.md @@ -0,0 +1,33 @@ +# Glossar + +## WIT +WebAssembly Interface Types + +## WASM +***W***eb***As***se***m***bly + +WebAssembly is a assembly language for a stack based virtual machine. + +## WASI +So wie ich es verstanden habe ist es so eine art standard library für webassembly, so das es eine art gibt dateien zu lesen/schreiben, base64 zu encoden/decoden. + +## WASI is a modular system interface for WebAssembly +[Announcement](https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/) + +# Own Glossary + +## NODES +*> NODE_INPUTS* +*> NODE_OUTPUTS* + +## SERIALIZED_NODES + +## NODE_GRAPH + +## SERIALIZED_NODE_GRAPH + +## RUNTIME_EXECUTOR + +## NODE_GRAPH_INTERFACE + +## NODE_REGISTRY diff --git a/Projects/bachelor/index.md b/Projects/bachelor/index.md index 3b939d9..43364ec 100644 --- a/Projects/bachelor/index.md +++ b/Projects/bachelor/index.md @@ -1,5 +1,9 @@ # Bachelorarbeit +- [[Projects/bachelor/links|Links]] +- [[Projects/bachelor/glossary|Glossar]] +- [[Projects/bachelor/Notes|Notes]] + _TODOS:_ - [x] Ideen finden - [x] Betreuer finden @@ -7,6 +11,7 @@ _TODOS:_ - [x] [[Projects/bachlor/Expose|Expose]] fertig schreiben - [x] Termin mit Ivonne absagen - [x] Idee festlegen +- [ ] 15 ECTS? _Rahmenbedingungen:_ - Maximal 80 Seiten @@ -16,12 +21,13 @@ _Rahmenbedingungen:_ - Ship early, ship often _Termine_: -[[Projects/bachelor/termine/23_12_14|14.12.2023 ]] +[[Projects/bachelor/termine/21.02.2024|21.02.2024]] +[[Projects/bachelor/termine/06.02.2024|06.02.2024]] +[[Projects/bachelor/termine/23_12_14|14.12.2023]] + -- [[Projects/bachelor/links|Links]] - [[Projects/bachelor/ideas|Ideas Collection]] - ## Bachelor Topics ```query bachelor render [[template/topic]] diff --git a/Projects/bachelor/links.md b/Projects/bachelor/links.md index 0b3e396..87c29f4 100644 --- a/Projects/bachelor/links.md +++ b/Projects/bachelor/links.md @@ -1,5 +1,21 @@ # Links + +## [WebAssembly: An Updated Roadmap for Developers](https://bytecodealliance.org/articles/webassembly-the-updated-roadmap-for-developers) +*Jul 24, 2023* +What + +## [Keynote: What is a Component (and Why)? - Luke Wagner](https://www.youtube.com/watch?v=tAACYA1Mwv4) +Luke Wagner is the main guy behind wasm components + +## [Bringing the Web up to Speed with WebAssembly](https://people.mpi-sws.org/~rossberg/papers/Haas,%20Rossberg,%20Schuff,%20Titzer,%20Gohman,%20Wagner,%20Zakai,%20Bastien,%20Holman%20-%20Bringing%20the%20Web%20up%20to%20Speed%20with%20WebAssembly.pdf) + +## Runtime agnostic implementation of webassembly components +https://docs.rs/wasm_component_layer/latest/wasm_component_layer + +## Talk: Procedural Modeling with Micro Webassemblies by Sean Isom @ Wasm I/O 2023 +https://youtu.be/PAMuiYCP6mM?feature=shared + ## Gute Google-Suche um Arbeiten zu dem Thema zu finden: https://www.google.com/search?q=Visuelle+Programmierung+Stefan+Schiffer+filetype%3Apdf diff --git a/Projects/bachelor/termine/06.02.2024.md b/Projects/bachelor/termine/06.02.2024.md new file mode 100644 index 0000000..e5aa21a --- /dev/null +++ b/Projects/bachelor/termine/06.02.2024.md @@ -0,0 +1,10 @@ +# 06.02.2024 + +https://th-koeln.zoom.us/my/stefanbente +PW: 420 + +Zotero/Zitavi benutzen + +- Direkt anfangen zu schreiben +- Nicht die Grundlagen +- Direkt die Eigenleistung festhalten diff --git a/Projects/bachelor/termine/21.02.2024.md b/Projects/bachelor/termine/21.02.2024.md new file mode 100644 index 0000000..09fab05 --- /dev/null +++ b/Projects/bachelor/termine/21.02.2024.md @@ -0,0 +1 @@ +# 21.02.2024 \ No newline at end of file diff --git a/Resources/dev/rust.md b/Resources/dev/rust.md new file mode 100644 index 0000000..66b59e9 --- /dev/null +++ b/Resources/dev/rust.md @@ -0,0 +1,30 @@ +# Rust Notes + + +## Options + +So options are things that maybe contain values. + +```rust +let option_a: Option = Some(8); +let option_b: Option = None; +``` + +To get at the value of a Options you have a few options; + +```rust +let res:u8 = option_a.unwrap(); // using option.unwrap -> panics if value is none + +if let Some(unwrapped1) = option_a { + println!("Unwrapped1 {}", unwrapped1); +}else { + println!("None Unwrapped1"); +} + +match option_a { + None => println!("None Unwrapped"), + Some(unwrapped1) => { + println!("Unwrapped1 {}", unwrapped1) + }, +} +``` diff --git a/Resources/index.md b/Resources/index.md index c9db5a8..c92600e 100644 --- a/Resources/index.md +++ b/Resources/index.md @@ -49,6 +49,7 @@ - [[Resources/dev/snippets/bash|bash]] - [[Resources/dev/snippets/lua|lua]] - [[Resources/dev/neovim|neovim]] +[[Resources/dev/rust|Rust]] - [[Resources/dev/webgl|webgl]] - [[Resources/dev/latex|latex]]