Skip to content

Commit

Permalink
defense: Add transitions
Browse files Browse the repository at this point in the history
  • Loading branch information
DashieTM committed Jun 29, 2024
1 parent 08053cf commit 7a29e4f
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 8 deletions.
2 changes: 1 addition & 1 deletion defense/ReSetPresentation.pdfpc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"pdfpcFormat":2,"disableMarkdown":false,"pages":[{"idx":0,"label":1,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":1,"label":2,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"# Fabio\n- context\n- plugin system\n# Felix\n- plugin ideas\n- User interface\n- showcase"},{"idx":2,"label":3,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"# topic\n- goal:\n - plugin system for reset\n- methods:\n - analysis of existing solutions\n - Implementation\n - exemplary plugins to validate system\n - user tests to validate experience\n - testing framework across both to prove validity and viability"},{"idx":3,"label":4,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":4,"label":5,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"# default gnome look\n- modular\n - can be replaced unlike in windows\n - different environments kde, budgie, hyprland, sway\n- not all apps cross compatible\n - especially with wayland"},{"idx":5,"label":6,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- specific implementation needed\n- not all environments support everything\n- differing paradigms\n- not all environments offer settings at all"},{"idx":6,"label":7,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- show picture of ReSet -> explain functionality\n- works on as many environments as possible\n- All features share one user interface design"},{"idx":7,"label":8,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- Explain why these features are chosen\n - Everything a typical user might want to use\n - Base features include features that are independent of environments\n- Explain why the plugin system\n - wayland and x11 differences\n - environment differences\n - user preferences to omit features\n - new hardware -> new configuration"},{"idx":8,"label":9,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- gtk -> reliable, established -> 20 years\n - iced possible alternative -> not ready when SA started\n - no change for BA due to time constraints\n- libadwaita -> extension of gtk -> subjective choice\n- rust -> fast, memory efficient, good developer experience, still safe\n -> optimal to speed up with dbus -> aka mask dbus overhead"},{"idx":9,"label":10,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- testing not possible because BUS connection\n - reliance on real world hardware\n- features set intentionally limited due to plugin system\n- accessibility limited to default gtk\n - work in progress"},{"idx":10,"label":11,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":11,"label":12,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- shared libraries\n - compiled binaries which are loaded at runtime\n- interpreted languages\n - simplification by using an \"easier\" language"},{"idx":12,"label":13,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- dynamic libraries\n - less memory -> load once, access from anywhere\n - performance -> rust is still rust, no interpretation\n - compatibility -> if rust supports the tookit, then libraries will as well\n - interoperability -> C-ABI requires programming overhead\n - user experience -> installation not always simple\n- interpreted languages\n - user experience -> simple installation -> see neovim\n - simple extendability -> neovim easy to expand with lua, instead of C\n - requires good API\n - ABI -> no ABI as language interpreted\n - stability defined by interpreter\n - interpreter per process -> 2 interpreters for ReSet\n - performance overhead -> interpretation\n - implementation overhead -> creating an interpreter is time consuming and complex\n - limited compatibility -> using GTK within interpreted language with existing gtk thread requires synchronization"},{"idx":13,"label":14,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- multi process\n- user can choose how to interact\n- plugins\n - only frontend\n - only backend\n - or both"},{"idx":14,"label":15,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- explain each function\n- explain why crossroads was an issue"},{"idx":15,"label":16,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- compile time difference\n - debug includes log\n - release does not\n- also used for testing system\n- 0 cost abstraction"},{"idx":16,"label":17,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- mock\n - fake bluetooth\n - fake network\n - sound not possible\n- plugins\n - custom result prints\n - all tests independent -> different thread\n- macro"},{"idx":17,"label":18,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- one thread per plugin\n- speed up loading"},{"idx":18,"label":19,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- issues\n - arbitrary code execution\n - malicious plugin copied into folder\n - review necessary -> takes time, infeasible\n- mitigations\n - enforce copyleft to make it \"illegal\" to create proprietary plugins\n - implemented\n - not enforceable\n - by default all proprietary plugins are \"evil\"\n - permission system\n - user needs to accept plugin on first load\n - plugin hash stored within user wallet\n - kwallet, gnome keyring etc\n - not implemented\n - signing system\n - only good if user checks signature\n - only protects against malicious derivations\n - malicious creations without impersonation are still possible"},{"idx":19,"label":20,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- flexibility\n - language\n - hard to achieve with DBus and gtk wrappers\n - requires modifications to both\n - toolkit\n - not possible with ReSets own user interface\n - but reset can be used without it, hence you can create your own\n - stability\n - rust provides good documentation with documentation tests\n - memory safety -> all crashes were due to logic errors or gtk issues"},{"idx":20,"label":21,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":21,"label":22,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":22,"label":23,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- Inspired by Windows and Gnome Keyboard Settings\n- Sortable by drag and drop\n - Top element is active layout\n- How to use:\n - Use the add layout button the go to another screen\n - (Optional) Use the search bar to filter layouts\n - Select the language and press the add button\n - (Optional) Use the delete button to remove a layout with the 3 dots icon\n - Currently not useful as the only feature in there\n- Features:\n - Add layouts\n - Easy to find a layout\n - Highlight of top 4 layouts\n- Obstacles: // todo explain more\n - Main problems:\n - Bad documentation and no examples\n - Very rigid to changes"},{"idx":23,"label":24,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- custom signals it would need access to the implementation of the widget\n - else you would send a signal in reponse to a signal\n- actions are function because that can be assigned to widgets and called via string\n - advantages: reusable code, can be called from anywhere where widget is available\n- if i have to bind to an existing signal and call an action, why not inline?\n - certain information not available in the signal\n - e.g in add keyboard layout no access to user keyboard layout list"},{"idx":24,"label":25,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- Solution: Grab focus of another widget so no selection is triggered\n- Rows with no variant need no action\n- Rows with variant have a on click event to override keyboard layout list"},{"idx":25,"label":26,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- this problem is will happen to all plugins that need to access system schemas\n- schema is a db file that contains the settings of the system"},{"idx":26,"label":27,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":27,"label":28,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":28,"label":29,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- gnome -> fixed scaling\n- all others -> arbitrary scaling\n- x11 to wayland differences ? -> therefore no x11!\n- dynamic hiding and showing of interface parts -> hyprland no primary monitor\n- convert information to be user friendly\n - user doesn't understand what a monitor MODE is\n - user wants to choose refreshrate not a resolution,refreshrate,scaling combo\n - abstract these into singular items which can be chosen independently"},{"idx":29,"label":30,"overlay":0,"forcedOverlay":false,"hidden":false,"note":""},{"idx":30,"label":31,"overlay":0,"forcedOverlay":false,"hidden":false,"note":""},{"idx":31,"label":32,"overlay":0,"forcedOverlay":false,"hidden":false,"note":""},{"idx":32,"label":33,"overlay":0,"forcedOverlay":false,"hidden":false,"note":""},{"idx":33,"label":34,"overlay":0,"forcedOverlay":false,"hidden":false,"note":""},{"idx":34,"label":35,"overlay":0,"forcedOverlay":false,"hidden":false},{"idx":35,"label":36,"overlay":0,"forcedOverlay":false,"hidden":false,"note":"- start without plugins\n - show audio\n - add plugin\n - show with plugin\n - show deamon without interface (dspy)"},{"idx":36,"label":37,"overlay":0,"forcedOverlay":false,"hidden":false}]}
{"pdfpcFormat":2,"duration":35,"lastMinutes":25,"defaultTransition":"push:0.20000000000000001:180:v:o","disableMarkdown":false,"noteFontSize":20,"pages":[{"idx":1,"label":"2","overlay":0,"note":"# Fabio\n- context\n- plugin system\n# Felix\n- plugin ideas\n- User interface\n- showcase"},{"idx":3,"label":"4","overlay":0,"note":"# default gnome look\n- modular\n - can be replaced unlike in windows\n - different environments kde, budgie, hyprland, sway\n- not all apps cross compatible\n - especially with wayland"},{"idx":4,"label":"5","overlay":0,"note":"- specific implementation needed\n- not all environments support everything\n- differing paradigms\n- not all environments offer settings at all"},{"idx":5,"label":"6","overlay":0,"note":"- show picture of ReSet -> explain functionality\n- works on as many environments as possible\n- All features share one user interface design"},{"idx":6,"label":"7","overlay":0,"note":"# features\n- Explain why these features are chosen\n - Everything a typical user might want to use\n - Base features include features that are independent of environments\n- Explain why the plugin system\n - wayland and x11 differences\n - environment differences\n - user preferences to omit features\n - new hardware -> new configuration"},{"idx":7,"label":"8","overlay":0,"note":"- gtk -> reliable, established -> 20 years\n - iced possible alternative -> not ready when SA started\n - no change for BA due to time constraints\n- libadwaita -> extension of gtk -> subjective choice\n- rust -> fast, memory efficient, good developer experience, still safe\n -> optimal to speed up with dbus -> aka mask dbus overhead"},{"idx":8,"label":"9","overlay":0,"note":"- testing not possible because BUS connection\n - reliance on real world hardware\n- features set intentionally limited due to plugin system\n- accessibility limited to default gtk\n - work in progress"},{"idx":9,"label":"10","overlay":0,"note":"# topic\n- goal:\n - plugin system for reset\n- methods:\n - analysis of existing solutions\n - Implementation\n - exemplary plugins to validate system\n - user tests to validate experience\n - testing framework across both to prove validity and viability"},{"idx":11,"label":"12","overlay":0,"note":"- shared libraries\n - compiled binaries which are loaded at runtime\n- interpreted languages\n - simplification by using an \"easier\" language"},{"idx":12,"label":"13","overlay":0,"note":"- dynamic libraries\n - less memory -> load once, access from anywhere\n - performance -> rust is still rust, no interpretation\n - compatibility -> if rust supports the tookit, then libraries will as well\n - interoperability -> C-ABI requires programming overhead\n - user experience -> installation not always simple\n- interpreted languages\n - user experience -> simple installation -> see neovim\n - simple extendability -> neovim easy to expand with lua, instead of C\n - requires good API\n - ABI -> no ABI as language interpreted\n - stability defined by interpreter\n - interpreter per process -> 2 interpreters for ReSet\n - performance overhead -> interpretation\n - implementation overhead -> creating an interpreter is time consuming and complex\n - limited compatibility -> using GTK within interpreted language with existing gtk thread requires synchronization"},{"idx":13,"label":"14","overlay":0,"note":"- multi process\n- user can choose how to interact\n- plugins\n - only frontend\n - only backend\n - or both"},{"idx":14,"label":"15","overlay":0,"note":"- explain each function\n- explain why crossroads was an issue"},{"idx":15,"label":"16","overlay":0,"note":"- compile time difference\n - debug includes log\n - release does not\n- also used for testing system\n- 0 cost abstraction"},{"idx":16,"label":"17","overlay":0,"note":"- mock\n - fake bluetooth\n - fake network\n - sound not possible\n- plugins\n - custom result prints\n - all tests independent -> different thread\n- macro"},{"idx":17,"label":"18","overlay":0,"note":"- one thread per plugin\n- speed up loading"},{"idx":18,"label":"19","overlay":0,"note":"- issues\n - arbitrary code execution\n - malicious plugin copied into folder\n - review necessary -> takes time, infeasible\n- mitigations\n - enforce copyleft to make it \"illegal\" to create proprietary plugins\n - implemented\n - not enforceable\n - by default all proprietary plugins are \"evil\"\n - permission system\n - user needs to accept plugin on first load\n - plugin hash stored within user wallet\n - kwallet, gnome keyring etc\n - not implemented\n - signing system\n - only good if user checks signature\n - only protects against malicious derivations\n - malicious creations without impersonation are still possible"},{"idx":20,"label":"21","overlay":0,"note":"- Inspired by Windows and Gnome Keyboard Settings\n- Gnome:\n - Drag and drop to change order\n - Add button below list\n - Other functions in triple dots icon right\n- KDE:\n - 2 buttons to change order\n - Add button above list\n - Other functions next to add button"},{"idx":21,"label":"22","overlay":0,"note":"- Sortable by drag and drop\n - Top element is active layout\n - Reason: Much easier to drag compared to spam button\n\n- Features:\n - Add layouts\n - Easy to find a layout\n - Highlight of top 4 layouts\n- Obstacles: // todo explain more\n - Main problems:\n - Bad documentation and no examples\n - Very rigid to changes"},{"idx":22,"label":"23","overlay":0,"note":"- How to use:\n - Use the add layout button the go to another screen\n - (Optional) Use the search bar to filter layouts\n - Select the language and press the add button\n - (Optional) Use the delete button to remove a layout with the 3 dots icon\n - Currently not useful as the only feature in there"},{"idx":23,"label":"24","overlay":0,"note":"- limitation of xkb (not enough space for more in xkbstate struct)\n- custom signals it would need access to the implementation of the widget\n - else you would send a signal in reponse to a signal\n - not possible because it would require changes in the gtk library\n- actions are function because that can be assigned to widgets\n - can be called from anywhere of the widget or children via string\n - with information not available from where it is called\n - advantages: reusable code, can be called from anywhere where widget is available\n- if i have to bind to an existing signal and call an action, why not inline?\n - certain information not available in the signal\n - e.g in add keyboard layout no access to user keyboard layout list\n- Solution: Using custom actions to change CSS"},{"idx":24,"label":"25","overlay":0,"note":"- Solution: Grab focus of another widget so no selection is triggered\n- Rows with no variant need no action\n- Rows with variant have a on click event to override keyboard layout list"},{"idx":25,"label":"26","overlay":0,"note":"- this problem is will happen to all plugins that need to access system schemas\n- schema is a db file that contains the settings of the system"},{"idx":27,"label":"28","overlay":0,"note":"### gnome\n- per monitor display in separate popup\n- dragging possible -> no gaps\n- numbered monitors\n- offers various additional features on top page\n - night light\n - join/mirror\n- fixed scaling\n\n### kde\n- per monitor settings on top page\n- shows currently selected monitor by highlighting\n- dragging possible -> no gaps\n- arbitrary scaling"},{"idx":28,"label":"29","overlay":0,"note":"- gnome -> fixed scaling\n- all others -> arbitrary scaling\n- x11 to wayland differences ? -> therefore no x11!\n- dynamic hiding and showing of interface parts -> hyprland no primary monitor\n- convert information to be user friendly\n - user doesn't understand what a monitor MODE is\n - user wants to choose refreshrate not a resolution,refreshrate,scaling combo\n - abstract these into singular items which can be chosen independently"},{"idx":29,"label":"30","overlay":0,"note":"### overlaps\n- resizing (resolution) might cause overlaps\n - bigger issue with more monitors\n - complex detection and solution\n- transform or scaling can also cause overlaps"},{"idx":30,"label":"31","overlay":0,"note":"- detected overlaps are handled if\n - monitor is not in y axis position 0 -> level\n - monitor is not the furthest monitor to the right\n- only one monitor is moved out of the way"},{"idx":31,"label":"32","overlay":0,"note":"- monitor snap to the closest monitor\n- not possible on overlap due to edge cases\n- similar approach to kde\n - useful for hyprland with possible monitor gaps"},{"idx":32,"label":"33","overlay":0,"note":"- loops over modes\n- independent refreshrate/scaling from resolution\n- no duplicate entries"},{"idx":33,"label":"34","overlay":0,"note":"- selected monitor highlighted\n - blue -> color blindness\n- per monitor settings below\n- libadwaita rows\n- dynamic entries for scaling, primary monitor, vrr"},{"idx":34,"label":"35","overlay":0,"note":"### ubuntu 24.04 package\n - reset\n - both plugins\n - auto installed -> configuration required\n ### Nix\n - homemanager module\n - ReSet and plugins\n - auto installation and configuration\n ### Arch\n - reset\n - both plugins\n - auto installed -> configuration required\n### Flatpak\n - ReSet\n - plugins must be installed manually -> binary\n - manual configuration\n - suboptimal"},{"idx":36,"label":"37","overlay":0,"note":"- 12 participants\n - most of them are very experienced with computers or linux\n - most of them study computer science\n - might skew data a bit\n - advantage\n - people who know what they talk about\n - disadvantage\n - might not be representative"},{"idx":37,"label":"38","overlay":0,"note":"- Very intuitive (similar to gnome settings)\n - works well with different themes\n - improvements:\n - drag and drop not effortless\n - translations"},{"idx":38,"label":"39","overlay":0,"note":"- simple and clean design\n - reminiscent of gnome settings (both use gtk widgets)\n - easy to navigate\n - improvements:\n - add more spacing between widgets (cramped)\n - more customization options"},{"idx":39,"label":"40","overlay":0,"note":"- start without plugins\n - show audio\n - add plugin\n - show with plugin\n - show daemon without interface (dspy)\n - show monitor plugin\n - show various configurations\n - show keyboard plugin\n - show new input language"}]}
12 changes: 12 additions & 0 deletions defense/ReSetPresentation.typ
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@
#set text(size: 20pt, font: "DejaVu Sans")
// #set text(size: 20pt,

#pdfpc.config(
default-transition: (type: "push", duration-seconds: 0.2, angle: rtl, alignment: "vertical", direction: "outward")
)
// pdfpc ReSetPresentation.pdf --duration=35 --last-minutes=25
//
// in /home/dashie/.config/pdfpc/pdfpcrc
//
// option current-size 50
// option current-height 50
// option next-height 40
// option transition-fps 90

#polylux-slide[
#align(horizon + center)[
= ReSet
Expand Down
Loading

0 comments on commit 7a29e4f

Please sign in to comment.