summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasper Ras <jaspert.ras@gmail.com>2025-08-03 16:51:35 +0200
committerJasper Ras <jaspert.ras@gmail.com>2025-08-03 16:51:35 +0200
commit19150baf3963c234158a79dea8974017bd0c0de4 (patch)
treefe2d6ff162bde82629b2bad32ec8dc4f22cefd06
parent8800edbb04ae0e1a015c1aa7aeea62174369a401 (diff)
parentcb2d833329c58d00229056c01538fa097ecb03ca (diff)
vault backup: 2025-08-03 16:51:35
-rw-r--r--Creating the screen border with correct convex rounding.md13
-rw-r--r--Excalidraw/quickshell_border_area.excalidraw.md64
-rw-r--r--Go Flags.md22
-rw-r--r--High Latency TCP Might Be Caused By TCP No Delay.md14
-rw-r--r--Item Size Position.md2
-rw-r--r--LVM.md11
-rw-r--r--Loop devices.md7
-rw-r--r--Port stuck in migrating.md42
-rw-r--r--QtQuick.md0
-rw-r--r--Quickshell.md10
-rw-r--r--Switch networks and external networks on OS5.md6
-rw-r--r--bilat-2025-07-23.md9
-rw-r--r--git-crypt.md12
-rw-r--r--ipcalc.md3
14 files changed, 207 insertions, 8 deletions
diff --git a/Creating the screen border with correct convex rounding.md b/Creating the screen border with correct convex rounding.md
new file mode 100644
index 0000000..f731dae
--- /dev/null
+++ b/Creating the screen border with correct convex rounding.md
@@ -0,0 +1,13 @@
+[[Quickshell]]
+[[Item Size Position]]
+
+---
+
+To create the border around the entire screen with convex rounding at the edges we can simply create an overlay rectangle over the entire screen which is transparent and then set the border size.
+
+Set `PanelWindow.aboveWindows: false` to regain mouse control.
+
+The next challenge is how to offset this rect from the edges of the screen and allow us to put visual items "inside" of it.
+![[quickshell_border_area.excalidraw]] Fig1. Monitor View
+
+In Fig1. the white part is our rect with borders. \ No newline at end of file
diff --git a/Excalidraw/quickshell_border_area.excalidraw.md b/Excalidraw/quickshell_border_area.excalidraw.md
new file mode 100644
index 0000000..0779088
--- /dev/null
+++ b/Excalidraw/quickshell_border_area.excalidraw.md
@@ -0,0 +1,64 @@
+---
+
+excalidraw-plugin: parsed
+tags: [excalidraw]
+
+---
+==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
+
+
+# Excalidraw Data
+
+## Text Elements
+%%
+## Drawing
+```compressed-json
+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
+```
+%% \ No newline at end of file
diff --git a/Go Flags.md b/Go Flags.md
new file mode 100644
index 0000000..07af1f6
--- /dev/null
+++ b/Go Flags.md
@@ -0,0 +1,22 @@
+[[Golang]]
+
+---
+
+Flags!
+
+```go
+package main
+
+import "flag"
+
+var n = flag.Bool("n", false, "omit trailing newline")
+var sep = flag.String("s", " ", "seperator")
+
+func main() {
+ flag.Parse()
+
+ if *n {
+ strings.Split("blaat", *sep)
+ }
+}
+```
diff --git a/High Latency TCP Might Be Caused By TCP No Delay.md b/High Latency TCP Might Be Caused By TCP No Delay.md
new file mode 100644
index 0000000..a70efc1
--- /dev/null
+++ b/High Latency TCP Might Be Caused By TCP No Delay.md
@@ -0,0 +1,14 @@
+[[TCP]] [[Networking]]
+
+# High Latency TCP Might Be Caused By TCP No Delay
+https://brooker.co.za/blog/2024/05/09/nagle.html
+
+Describes a situation where two algorithms in TCP bite each other:
+- Nagle's algorithm tries to prevent sending very small data packets to minimze header overhead
+- Delayed ACK delays acks until data's ready
+
+So the first holds packets back until an ACK is received, the second holds ACK until the response is ready.
+
+Also due to modern systems the penalty for small datagrams is much lower.
+
+To get rid of Nagle's algorithm when latency matters: enable TCP_NODELAY.
diff --git a/Item Size Position.md b/Item Size Position.md
index 541b04d..3a6ba30 100644
--- a/Item Size Position.md
+++ b/Item Size Position.md
@@ -2,8 +2,6 @@
---
-# Item Size Position
-
`Item` type is the base type for "visual items". It has two properties:
- actual size ( width, height )
- implicit/desired size ( implicitWidth, implicitHeight )
diff --git a/LVM.md b/LVM.md
new file mode 100644
index 0000000..5d9561a
--- /dev/null
+++ b/LVM.md
@@ -0,0 +1,11 @@
+[[Linux]]
+
+---
+
+Physical volumes:
+- create: `pvcreate`
+- show: `pvs`
+
+Logical Volume Groups:
+- create: `vgcreate <vg> <pv>`
+- show: `vgs`
diff --git a/Loop devices.md b/Loop devices.md
new file mode 100644
index 0000000..c72b2e1
--- /dev/null
+++ b/Loop devices.md
@@ -0,0 +1,7 @@
+[[Linux]]
+
+---
+
+Managed with `losetup`
+
+A loop device is a block device that can be backed by a file or another block device. \ No newline at end of file
diff --git a/Port stuck in migrating.md b/Port stuck in migrating.md
new file mode 100644
index 0000000..26c22e1
--- /dev/null
+++ b/Port stuck in migrating.md
@@ -0,0 +1,42 @@
+[[Neutron]]
+
+---
+
+# Port stuck in migrating
+
+Check whether DB has duplicate record:
+```
+MariaDB [neutron]> select * from ml2_port_bindings where port_id = "e87c2cab-e2e8-4e7b-9014-acdf5adfff0e";
++--------------------------------------+-----------------------------------+----------+-----------+----------------------------------------------------------------------------------+---------------------------------------------+----------+
+| port_id | host | vif_type | vnic_type | profile | vif_details | status |
++--------------------------------------+-----------------------------------+----------+-----------+----------------------------------------------------------------------------------+---------------------------------------------+----------+
+| e87c2cab-e2e8-4e7b-9014-acdf5adfff0e | n13.compute.env.vps1-lej1.one.com | ovs | normal | {"os_vif_delegation": true} | {"port_filter": true, "connectivity": "l2"} | INACTIVE |
+| e87c2cab-e2e8-4e7b-9014-acdf5adfff0e | n16.compute.env.vps1-lej1.one.com | ovs | normal | {"os_vif_delegation": true, "migrating_to": "n13.compute.env.vps1-lej1.one.com"} | {"port_filter": true, "connectivity": "l2"} | ACTIVE |
++--------------------------------------+-----------------------------------+----------+-----------+----------------------------------------------------------------------------------+---------------------------------------------+----------+
+2 rows in set (0.000 sec)
+```
+
+Delete the that is INACTIVE
+```
+MariaDB [neutron]> delete from ml2_port_bindings where port_id = "e87c2cab-e2e8-4e7b-9014-acdf5adfff0e" and host = "n13.compute.env.vps1-lej1.one.com";
+Query OK, 1 row affected (0.001 sec)
+```
+
+Now update port binding
+```
+.venv ❯ os3 port set --host n13.compute.env.vps1-lej1.one.com e87c2cab-e2e8-4e7b-9014-acdf5adfff0e
+```
+
+Update binding_profile:
+
+```
+osc main*​​ 2s
+.venv ❯ os3 port set --no-binding-profile e87c2cab-e2e8-4e7b-9014-acdf5adfff0e
+```
+
+```
+osc main*​​ 2s
+.venv ❯ os3 port set --binding-profile os_vif_delegation=True e87c2cab-e2e8-4e7b-9014-acdf5adfff0e
+```
+
+Check the port status afterward, is it DOWN? Perhaps migrate the VM.
diff --git a/QtQuick.md b/QtQuick.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/QtQuick.md
diff --git a/Quickshell.md b/Quickshell.md
index d199cd1..eb142f2 100644
--- a/Quickshell.md
+++ b/Quickshell.md
@@ -2,15 +2,15 @@
---
-# Quickshell
-
https://quickshell.org
+https://htmlcolorcodes.com
QML Types: https://doc.qt.io/qt-6/qtquick-qmlmodule.html
-https://htmlcolorcodes.com
-XDG standard config paths. Looks for `shell.qml` in all sub-directories unless root dir has one. Target specific config using `quickshell -c configname`.
+When launching `quickshell` it wil scan XDG_CONFIG_DIRS for `shell.qml` that it will load unless `-c` is specified. It will scan sub-directories if no `shell.qml` is found in the root directory.
+
+Quickshell expands [[QtQuick]] with functionalities useful for building shells.
## Windows
Requires `import Quickshell`.
@@ -81,7 +81,6 @@ Set `pragma Singleton` at the top of the file ( before imports ). and Use `Singl
[Clock formatting](https://doc.qt.io/qt-6/qml-qtqml-qt.html#formatDateTime-method)
-
## Signals
Event emitter.
Same rules as properties and function.
@@ -99,7 +98,6 @@ Does that somehow override the onClicked function of the target??
All properties have `propertynameChanged` handler, powering the reactivity.
-
## Attached objects
Every object has `Component` attached, used to run stuff when an Object finishes
initializes using `Component.onCompleted`.
diff --git a/Switch networks and external networks on OS5.md b/Switch networks and external networks on OS5.md
new file mode 100644
index 0000000..73d5d3a
--- /dev/null
+++ b/Switch networks and external networks on OS5.md
@@ -0,0 +1,6 @@
+[[GroupVPS Platform]]
+
+---
+
+The switch networks are regular flat layer 2 networks, they act as a big switch (hence the name).
+The external networks are for Floating IPs. They are also connected to the switches, but here the public IPs are on the network nodes rather than in openstack. So instead of \ No newline at end of file
diff --git a/bilat-2025-07-23.md b/bilat-2025-07-23.md
new file mode 100644
index 0000000..2f0525e
--- /dev/null
+++ b/bilat-2025-07-23.md
@@ -0,0 +1,9 @@
+[[bilaterale-gesprekken-met-rutger]]
+
+---
+
+calendar
+
+keystone auth middleware maken -> restrict ip per user.
+
+marcel huck - share netwerk
diff --git a/git-crypt.md b/git-crypt.md
new file mode 100644
index 0000000..9648571
--- /dev/null
+++ b/git-crypt.md
@@ -0,0 +1,12 @@
+# Git-Crypt
+[[git]]
+
+---
+
+[Website](https://www.agwa.name/projects/git-crypt/)
+
+Encrypts files in a git repository transparently.
+
+
+## Add new user
+`git-crypt add-gpg-user USER_ID`
diff --git a/ipcalc.md b/ipcalc.md
new file mode 100644
index 0000000..c558bbe
--- /dev/null
+++ b/ipcalc.md
@@ -0,0 +1,3 @@
+# IPCalc
+The busybox ipcalc does very little. Install RedHat Ipcalc, either via nix-shell or globally.
+