From 1f1423fdb8d4e2928768ffa33a6ad2b59c75e82e Mon Sep 17 00:00:00 2001 From: Jasper Ras Date: Sat, 23 Nov 2024 11:30:28 +0100 Subject: lowercase dirs --- Buffer/2024-01-08.md | 16 --------- Buffer/2024-01-09.md | 24 ------------- Buffer/2024-01-10.md | 5 --- Buffer/2024-02-20.md | 12 ------- Buffer/2024-06-13.md | 2 -- Buffer/2024-06-17.md | 10 ------ Buffer/2024-06-26.md | 0 Buffer/Blkio errors.md | 14 -------- Buffer/ELF (files).md | 0 Buffer/Group.ONE Backup Service.md | 6 ---- Buffer/Issues met TC oplossen.md | 25 -------------- Buffer/Neutron DNS & Designate.md | 3 -- Buffer/Nix Flakes.md | 21 ------------ Buffer/Nixpkgs Overlays.md | 0 Buffer/Nova Scheduler.md | 2 -- Buffer/Ruby gems nixpkgs.md | 0 Buffer/Shell.nix python.md | 15 -------- Buffer/Timings VPS.md | 4 --- Buffer/Updates ansible ad-hoc.md | 19 ---------- Buffer/Zoner Migration.md | 1 - Daily/2024-08-21.md | 27 --------------- Daily/2024-08-22.md | 25 -------------- Daily/2024-08-23.md | 6 ---- Daily/2024-08-26.md | 1 - Daily/2024-08-27.md | 11 ------ Daily/2024-08-28.md | 1 - Daily/2024-08-29.md | 0 Daily/2024-09-03.md | 1 - Daily/2024-09-10.md | 1 - Daily/2024-09-30.md | 1 - Daily/2024-10-02.md | 6 ---- Interviews/Interview Mohammed Al-Mahdawi.md | 7 ---- Interviews/Interview Patrick Spek.md | 21 ------------ Interviews/Vragenlijst.md | 7 ---- Refined/Group.ONE Infrastructure.md | 1 - Refined/Man pages.md | 3 -- Refined/Note taking.md | 7 ---- Refined/RabbitMQ.md | 2 -- Refined/TaskWarrior (ToDo).md | 3 -- Zettelkast/Index/Computer Networking.md | 3 -- Zettelkast/Index/Domain Driven Design.md | 2 -- Zettelkast/Index/Golang.md | 3 -- Zettelkast/Index/Nix.md | 1 - Zettelkast/Index/Python3.md | 3 -- Zettelkast/Index/Software Architecture.md | 2 -- Zettelkast/Index/_Index.md | 7 ---- Zettelkast/Notes/010420240957 - spf13 cobra.md | 13 ------- Zettelkast/Notes/010720231037 - With function.md | 18 ---------- Zettelkast/Notes/010920231133 - OpenFlow.md | 2 -- Zettelkast/Notes/010920231434 - (UNIX) Watch.md | 1 - .../Notes/022920240849 - Layered Architecture.md | 7 ---- .../Notes/022920240901 - Repository Pattern.md | 1 - .../032220240826 - Python3 Escape Sequences.md | 21 ------------ Zettelkast/Notes/060620241559 - Adjacency Lists.md | 3 -- ...13112 - Aggregates should protect invariants.md | 5 --- Zettelkast/Notes/202406131159 - Invariant.md | 5 --- .../280620231200 - Direct Attach Cable -DAC.md | 9 ----- Zettelkast/Notes/280620231201 - Transceiver.md | 5 --- Zettelkast/Notes/280620231556 - Svelte.md | 9 ----- Zettelkast/Notes/280620231557 - SvelteKit.md | 7 ---- .../280620231621 - Knowledge vs Information.md | 8 ----- ...1634 - Using Zettelkasten as a thinking tool.md | 11 ------ Zettelkast/Notes/290220240839 - Domain Modeling.md | 5 --- Zettelkast/Notes/290220240842 - Entity.md | 1 - Zettelkast/Notes/290220240843 - Value Object.md | 15 -------- .../Notes/290220241409 - TDD High and Low Gear.md | 3 -- Zettelkast/Notes/290220241412 - Service Layer.md | 3 -- .../Notes/290220241458 - Unit of Work pattern.md | 40 ---------------------- Zettelkast/Notes/290220241543 - Aggregates.md | 5 --- ...Running programs in the background with tmux.md | 8 ----- Zettelkast/Notes/300820231007 - OVN.md | 32 ----------------- Zettelkast/Notes/310820231448 - Neutron OVN.md | 1 - .../Notes/310820231618 - Open VSwitch (OVS).md | 3 -- .../310820231706 - Networking One Giant Compute.md | 3 -- buffer/2024-01-08.md | 16 +++++++++ buffer/2024-01-09.md | 24 +++++++++++++ buffer/2024-01-10.md | 5 +++ buffer/2024-02-20.md | 12 +++++++ buffer/2024-06-13.md | 2 ++ buffer/2024-06-17.md | 10 ++++++ buffer/2024-06-26.md | 0 buffer/Blkio errors.md | 14 ++++++++ buffer/ELF (files).md | 0 buffer/Group.ONE Backup Service.md | 6 ++++ buffer/Issues met TC oplossen.md | 25 ++++++++++++++ buffer/Neutron DNS & Designate.md | 3 ++ buffer/Nix Flakes.md | 21 ++++++++++++ buffer/Nixpkgs Overlays.md | 0 buffer/Nova Scheduler.md | 2 ++ buffer/Ruby gems nixpkgs.md | 0 buffer/Shell.nix python.md | 15 ++++++++ buffer/Timings VPS.md | 4 +++ buffer/Updates ansible ad-hoc.md | 19 ++++++++++ buffer/Zoner Migration.md | 1 + daily/2024-08-21.md | 27 +++++++++++++++ daily/2024-08-22.md | 25 ++++++++++++++ daily/2024-08-23.md | 6 ++++ daily/2024-08-26.md | 1 + daily/2024-08-27.md | 11 ++++++ daily/2024-08-28.md | 1 + daily/2024-08-29.md | 0 daily/2024-09-03.md | 1 + daily/2024-09-10.md | 1 + daily/2024-09-30.md | 1 + daily/2024-10-02.md | 6 ++++ interviews/Interview Mohammed Al-Mahdawi.md | 7 ++++ interviews/Interview Patrick Spek.md | 21 ++++++++++++ interviews/Vragenlijst.md | 7 ++++ refined/Group.ONE Infrastructure.md | 1 + refined/Man pages.md | 3 ++ refined/Note taking.md | 7 ++++ refined/RabbitMQ.md | 2 ++ refined/TaskWarrior (ToDo).md | 3 ++ zettelkast/Index/Computer Networking.md | 3 ++ zettelkast/Index/Domain Driven Design.md | 2 ++ zettelkast/Index/Golang.md | 3 ++ zettelkast/Index/Nix.md | 1 + zettelkast/Index/Python3.md | 3 ++ zettelkast/Index/Software Architecture.md | 2 ++ zettelkast/Index/_Index.md | 7 ++++ zettelkast/Notes/010420240957 - spf13 cobra.md | 13 +++++++ zettelkast/Notes/010720231037 - With function.md | 18 ++++++++++ zettelkast/Notes/010920231133 - OpenFlow.md | 2 ++ zettelkast/Notes/010920231434 - (UNIX) Watch.md | 1 + .../Notes/022920240849 - Layered Architecture.md | 7 ++++ .../Notes/022920240901 - Repository Pattern.md | 1 + .../032220240826 - Python3 Escape Sequences.md | 21 ++++++++++++ zettelkast/Notes/060620241559 - Adjacency Lists.md | 3 ++ ...13112 - Aggregates should protect invariants.md | 5 +++ zettelkast/Notes/202406131159 - Invariant.md | 5 +++ .../280620231200 - Direct Attach Cable -DAC.md | 9 +++++ zettelkast/Notes/280620231201 - Transceiver.md | 5 +++ zettelkast/Notes/280620231556 - Svelte.md | 9 +++++ zettelkast/Notes/280620231557 - SvelteKit.md | 7 ++++ .../280620231621 - Knowledge vs Information.md | 8 +++++ ...1634 - Using Zettelkasten as a thinking tool.md | 11 ++++++ zettelkast/Notes/290220240839 - Domain Modeling.md | 5 +++ zettelkast/Notes/290220240842 - Entity.md | 1 + zettelkast/Notes/290220240843 - Value Object.md | 15 ++++++++ .../Notes/290220241409 - TDD High and Low Gear.md | 3 ++ zettelkast/Notes/290220241412 - Service Layer.md | 3 ++ .../Notes/290220241458 - Unit of Work pattern.md | 40 ++++++++++++++++++++++ zettelkast/Notes/290220241543 - Aggregates.md | 5 +++ ...Running programs in the background with tmux.md | 8 +++++ zettelkast/Notes/300820231007 - OVN.md | 32 +++++++++++++++++ zettelkast/Notes/310820231448 - Neutron OVN.md | 1 + .../Notes/310820231618 - Open VSwitch (OVS).md | 3 ++ .../310820231706 - Networking One Giant Compute.md | 3 ++ 148 files changed, 575 insertions(+), 575 deletions(-) delete mode 100644 Buffer/2024-01-08.md delete mode 100644 Buffer/2024-01-09.md delete mode 100644 Buffer/2024-01-10.md delete mode 100644 Buffer/2024-02-20.md delete mode 100644 Buffer/2024-06-13.md delete mode 100644 Buffer/2024-06-17.md delete mode 100644 Buffer/2024-06-26.md delete mode 100644 Buffer/Blkio errors.md delete mode 100644 Buffer/ELF (files).md delete mode 100644 Buffer/Group.ONE Backup Service.md delete mode 100644 Buffer/Issues met TC oplossen.md delete mode 100644 Buffer/Neutron DNS & Designate.md delete mode 100644 Buffer/Nix Flakes.md delete mode 100644 Buffer/Nixpkgs Overlays.md delete mode 100644 Buffer/Nova Scheduler.md delete mode 100644 Buffer/Ruby gems nixpkgs.md delete mode 100644 Buffer/Shell.nix python.md delete mode 100644 Buffer/Timings VPS.md delete mode 100644 Buffer/Updates ansible ad-hoc.md delete mode 100644 Buffer/Zoner Migration.md delete mode 100644 Daily/2024-08-21.md delete mode 100644 Daily/2024-08-22.md delete mode 100644 Daily/2024-08-23.md delete mode 100644 Daily/2024-08-26.md delete mode 100644 Daily/2024-08-27.md delete mode 100644 Daily/2024-08-28.md delete mode 100644 Daily/2024-08-29.md delete mode 100644 Daily/2024-09-03.md delete mode 100644 Daily/2024-09-10.md delete mode 100644 Daily/2024-09-30.md delete mode 100644 Daily/2024-10-02.md delete mode 100644 Interviews/Interview Mohammed Al-Mahdawi.md delete mode 100644 Interviews/Interview Patrick Spek.md delete mode 100644 Interviews/Vragenlijst.md delete mode 100644 Refined/Group.ONE Infrastructure.md delete mode 100644 Refined/Man pages.md delete mode 100644 Refined/Note taking.md delete mode 100644 Refined/RabbitMQ.md delete mode 100644 Refined/TaskWarrior (ToDo).md delete mode 100644 Zettelkast/Index/Computer Networking.md delete mode 100644 Zettelkast/Index/Domain Driven Design.md delete mode 100644 Zettelkast/Index/Golang.md delete mode 100644 Zettelkast/Index/Nix.md delete mode 100644 Zettelkast/Index/Python3.md delete mode 100644 Zettelkast/Index/Software Architecture.md delete mode 100644 Zettelkast/Index/_Index.md delete mode 100644 Zettelkast/Notes/010420240957 - spf13 cobra.md delete mode 100644 Zettelkast/Notes/010720231037 - With function.md delete mode 100644 Zettelkast/Notes/010920231133 - OpenFlow.md delete mode 100644 Zettelkast/Notes/010920231434 - (UNIX) Watch.md delete mode 100644 Zettelkast/Notes/022920240849 - Layered Architecture.md delete mode 100644 Zettelkast/Notes/022920240901 - Repository Pattern.md delete mode 100644 Zettelkast/Notes/032220240826 - Python3 Escape Sequences.md delete mode 100644 Zettelkast/Notes/060620241559 - Adjacency Lists.md delete mode 100644 Zettelkast/Notes/20240613112 - Aggregates should protect invariants.md delete mode 100644 Zettelkast/Notes/202406131159 - Invariant.md delete mode 100644 Zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md delete mode 100644 Zettelkast/Notes/280620231201 - Transceiver.md delete mode 100644 Zettelkast/Notes/280620231556 - Svelte.md delete mode 100644 Zettelkast/Notes/280620231557 - SvelteKit.md delete mode 100644 Zettelkast/Notes/280620231621 - Knowledge vs Information.md delete mode 100644 Zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md delete mode 100644 Zettelkast/Notes/290220240839 - Domain Modeling.md delete mode 100644 Zettelkast/Notes/290220240842 - Entity.md delete mode 100644 Zettelkast/Notes/290220240843 - Value Object.md delete mode 100644 Zettelkast/Notes/290220241409 - TDD High and Low Gear.md delete mode 100644 Zettelkast/Notes/290220241412 - Service Layer.md delete mode 100644 Zettelkast/Notes/290220241458 - Unit of Work pattern.md delete mode 100644 Zettelkast/Notes/290220241543 - Aggregates.md delete mode 100644 Zettelkast/Notes/300620231000 - Running programs in the background with tmux.md delete mode 100644 Zettelkast/Notes/300820231007 - OVN.md delete mode 100644 Zettelkast/Notes/310820231448 - Neutron OVN.md delete mode 100644 Zettelkast/Notes/310820231618 - Open VSwitch (OVS).md delete mode 100644 Zettelkast/Notes/310820231706 - Networking One Giant Compute.md create mode 100644 buffer/2024-01-08.md create mode 100644 buffer/2024-01-09.md create mode 100644 buffer/2024-01-10.md create mode 100644 buffer/2024-02-20.md create mode 100644 buffer/2024-06-13.md create mode 100644 buffer/2024-06-17.md create mode 100644 buffer/2024-06-26.md create mode 100644 buffer/Blkio errors.md create mode 100644 buffer/ELF (files).md create mode 100644 buffer/Group.ONE Backup Service.md create mode 100644 buffer/Issues met TC oplossen.md create mode 100644 buffer/Neutron DNS & Designate.md create mode 100644 buffer/Nix Flakes.md create mode 100644 buffer/Nixpkgs Overlays.md create mode 100644 buffer/Nova Scheduler.md create mode 100644 buffer/Ruby gems nixpkgs.md create mode 100644 buffer/Shell.nix python.md create mode 100644 buffer/Timings VPS.md create mode 100644 buffer/Updates ansible ad-hoc.md create mode 100644 buffer/Zoner Migration.md create mode 100644 daily/2024-08-21.md create mode 100644 daily/2024-08-22.md create mode 100644 daily/2024-08-23.md create mode 100644 daily/2024-08-26.md create mode 100644 daily/2024-08-27.md create mode 100644 daily/2024-08-28.md create mode 100644 daily/2024-08-29.md create mode 100644 daily/2024-09-03.md create mode 100644 daily/2024-09-10.md create mode 100644 daily/2024-09-30.md create mode 100644 daily/2024-10-02.md create mode 100644 interviews/Interview Mohammed Al-Mahdawi.md create mode 100644 interviews/Interview Patrick Spek.md create mode 100644 interviews/Vragenlijst.md create mode 100644 refined/Group.ONE Infrastructure.md create mode 100644 refined/Man pages.md create mode 100644 refined/Note taking.md create mode 100644 refined/RabbitMQ.md create mode 100644 refined/TaskWarrior (ToDo).md create mode 100644 zettelkast/Index/Computer Networking.md create mode 100644 zettelkast/Index/Domain Driven Design.md create mode 100644 zettelkast/Index/Golang.md create mode 100644 zettelkast/Index/Nix.md create mode 100644 zettelkast/Index/Python3.md create mode 100644 zettelkast/Index/Software Architecture.md create mode 100644 zettelkast/Index/_Index.md create mode 100644 zettelkast/Notes/010420240957 - spf13 cobra.md create mode 100644 zettelkast/Notes/010720231037 - With function.md create mode 100644 zettelkast/Notes/010920231133 - OpenFlow.md create mode 100644 zettelkast/Notes/010920231434 - (UNIX) Watch.md create mode 100644 zettelkast/Notes/022920240849 - Layered Architecture.md create mode 100644 zettelkast/Notes/022920240901 - Repository Pattern.md create mode 100644 zettelkast/Notes/032220240826 - Python3 Escape Sequences.md create mode 100644 zettelkast/Notes/060620241559 - Adjacency Lists.md create mode 100644 zettelkast/Notes/20240613112 - Aggregates should protect invariants.md create mode 100644 zettelkast/Notes/202406131159 - Invariant.md create mode 100644 zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md create mode 100644 zettelkast/Notes/280620231201 - Transceiver.md create mode 100644 zettelkast/Notes/280620231556 - Svelte.md create mode 100644 zettelkast/Notes/280620231557 - SvelteKit.md create mode 100644 zettelkast/Notes/280620231621 - Knowledge vs Information.md create mode 100644 zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md create mode 100644 zettelkast/Notes/290220240839 - Domain Modeling.md create mode 100644 zettelkast/Notes/290220240842 - Entity.md create mode 100644 zettelkast/Notes/290220240843 - Value Object.md create mode 100644 zettelkast/Notes/290220241409 - TDD High and Low Gear.md create mode 100644 zettelkast/Notes/290220241412 - Service Layer.md create mode 100644 zettelkast/Notes/290220241458 - Unit of Work pattern.md create mode 100644 zettelkast/Notes/290220241543 - Aggregates.md create mode 100644 zettelkast/Notes/300620231000 - Running programs in the background with tmux.md create mode 100644 zettelkast/Notes/300820231007 - OVN.md create mode 100644 zettelkast/Notes/310820231448 - Neutron OVN.md create mode 100644 zettelkast/Notes/310820231618 - Open VSwitch (OVS).md create mode 100644 zettelkast/Notes/310820231706 - Networking One Giant Compute.md diff --git a/Buffer/2024-01-08.md b/Buffer/2024-01-08.md deleted file mode 100644 index 13eee22..0000000 --- a/Buffer/2024-01-08.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -tags: - - qemu - - qemu-guest-agent - - backups ---- -Got QEMU Guest agent working via booting a VM with an image after setting `hw_qemu_guest_agent='yes'` on that image. - -Put a script under `/etc/qemu/fsfreeze-hook.d/` with the executable flag set that echo's 'yo' when it is run. - -Tried Cinder backup: script not called -Tried Cinder snapshot: script not called -Tried Nova snapshot: script not called. - ---- -10.40 - 16.00 \ No newline at end of file diff --git a/Buffer/2024-01-09.md b/Buffer/2024-01-09.md deleted file mode 100644 index e0d0937..0000000 --- a/Buffer/2024-01-09.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -tags: - - idea - - oslo_messaging - - tuning - - maintenance - - issue ---- -Had an idea to develop a tool to parse openstack release pages to see what's new from the CLI. - -Continued maintenance after making sure cold migrations do work on running VMs and make sure they are started again after migrating. - -Messaging timeouts occurred during maintenance. Found some settings to tune the neutron and nova oslo messaging library. -https://docs.mirantis.com/mcp/q4-18/mcp-deployment-guide/advanced-config/tune-rabbitmq-perf.html - -Learned about the HAProxy ansible module: -https://docs.ansible.com/ansible/latest/collections/community/general/haproxy_module.html - -We decided to add ansible playbooks for enabling and disabling services. So we can disable the neutron controller in haproxy before restarting it. This prevents an issue where it is being flooded with requests while starting up and causing it to process SSL requests before even having loaded the SSL certificates. - -Forgot that I had to visit the mortgage advisor at the end of the afternoon. - ---- -9.30 - 16.00 diff --git a/Buffer/2024-01-10.md b/Buffer/2024-01-10.md deleted file mode 100644 index 6a91cdb..0000000 --- a/Buffer/2024-01-10.md +++ /dev/null @@ -1,5 +0,0 @@ -Maintenance had been stopped due to an hanging apt-lock on n40 vps2 compute. Killed the hanging process and resumed maintenance. - - ---- -9.30 \ No newline at end of file diff --git a/Buffer/2024-02-20.md b/Buffer/2024-02-20.md deleted file mode 100644 index 2359685..0000000 --- a/Buffer/2024-02-20.md +++ /dev/null @@ -1,12 +0,0 @@ -Building an OpenStack service. - -**Things to look into** -- Tox (testing I think) -- Project structure -- Conventions -- Deployment considerations -- https://opendev.org/openstack/requirements/ - -**Tox** -https://tox.wiki/en/4.13.0/ -Test automation and standardization. \ No newline at end of file diff --git a/Buffer/2024-06-13.md b/Buffer/2024-06-13.md deleted file mode 100644 index 61a16ac..0000000 --- a/Buffer/2024-06-13.md +++ /dev/null @@ -1,2 +0,0 @@ -Tests: -- \ No newline at end of file diff --git a/Buffer/2024-06-17.md b/Buffer/2024-06-17.md deleted file mode 100644 index 144e133..0000000 --- a/Buffer/2024-06-17.md +++ /dev/null @@ -1,10 +0,0 @@ -Investigated the last remaining error with a missing reply queue which was the likely suspect of some alerts of compute service down etc. After some digging in Kibana i noticed a compute node that was logging MessagingTimeouts. I restarted the compute service on this node and it seems to have resolved the errors. - -Both system test in CPH8 and LEJ1 were failing. CPH8 likely due to me restarting neutron-server earlier that morning in an attempt to fix the reply queue error. -LEJ1 had been failing since 14th of June. My guess is due to some maintenance related issue. Both system tests are running smoothly again after cleaning up their artifacts. - -Meanwhile, maintenance on VPS1-LEJ1 is still on-going and causing headaches. Another password refresh of the access node caused a migration to fail during post-cleanup and I had to set the host and node of the instance to the correct node directly via MySQL. I should apply Rutgers' suggestion of saving some variables in the OS_\* env vars, rather sooner than later. - -Tested retention backups being scheduled, and deployed it to prod. - -Investigate whether we can listen for notifications by Nova so that we can listen for server deletions and remove them from periodic backups. There should be no need to delete backups for the server, as the retention policy will have them deleted after a while. \ No newline at end of file diff --git a/Buffer/2024-06-26.md b/Buffer/2024-06-26.md deleted file mode 100644 index e69de29..0000000 diff --git a/Buffer/Blkio errors.md b/Buffer/Blkio errors.md deleted file mode 100644 index 2b666a3..0000000 --- a/Buffer/Blkio errors.md +++ /dev/null @@ -1,14 +0,0 @@ -Dmesg is spewing blkio errors - -Find out which device: e.g dm-4, then: -``` -sudo virsh list --all --name | while read dom; do sudo virsh dumpxml $dom | grep dm-4 && echo $dom; done -``` -To find which domain -After which: -``` -sudo virsh dumpxml $domain -``` -to find the hostname - -reboot it hard. \ No newline at end of file diff --git a/Buffer/ELF (files).md b/Buffer/ELF (files).md deleted file mode 100644 index e69de29..0000000 diff --git a/Buffer/Group.ONE Backup Service.md b/Buffer/Group.ONE Backup Service.md deleted file mode 100644 index ebb2c92..0000000 --- a/Buffer/Group.ONE Backup Service.md +++ /dev/null @@ -1,6 +0,0 @@ -# Ubiquitous language -**Project** The customer or tenant that owns the servers, backups and periodic backups. -**Server** Is the subject of a backup or periodic backup. It has one or more disks assigned. -**Disk** Can either be a local storage disk or shared storage volume. It is attached to a server and can be referenced by its name. -**Backup** Is a snapshot in time of a server. It can be used to restore a server to how it was exactly at that moment in time. -**PeriodicBackup** Is a group of servers that will be backed up periodically. \ No newline at end of file diff --git a/Buffer/Issues met TC oplossen.md b/Buffer/Issues met TC oplossen.md deleted file mode 100644 index 4ad3bf8..0000000 --- a/Buffer/Issues met TC oplossen.md +++ /dev/null @@ -1,25 +0,0 @@ -Probleem: referenties in ovs naar devices die niet meer bestaan. Hij probeert vervolgens een nieuw device aan te maken met een qdisc op zo'n niet bestaande device. - -``` -sudo grep -r 'could not open network device' /var/log/openvswitch/ | grep -oi 'tap[a-z0-9\-]*' | uniq > ports_no_device -``` -``` -sudo ip l l | grep ports_no_device | grep -oi 'tap[a-z0-9\-]*' > ports_with_device -``` -``` -for P in $(cat ports_no_device | grep -v -f ports_with_device); do sudo ovs-vsctl del-port $P; done -``` -``` -sudo systemctl restart ovn-controller -``` - - -Rutger versie: -``` -sudo grep 'could not open network device' /var/log/openvswitch/ovs-vswitchd.log | grep -oi 'tap[a-z0-9\-]*' | sort | uniq | while read dev; do ip l l $dev || sudo ovs-vsctl del-port $dev; done; sudo systemctl restart ovn-controller -``` - - -Dus: ovs-vsctl del-port is nice. - -Niet vergeten ovn-controller te herstarten. diff --git a/Buffer/Neutron DNS & Designate.md b/Buffer/Neutron DNS & Designate.md deleted file mode 100644 index 48785ab..0000000 --- a/Buffer/Neutron DNS & Designate.md +++ /dev/null @@ -1,3 +0,0 @@ -https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#config-dns-int - -Lijkt er op dat dns_domain overruled kan worden op port niveau. \ No newline at end of file diff --git a/Buffer/Nix Flakes.md b/Buffer/Nix Flakes.md deleted file mode 100644 index cb7f69b..0000000 --- a/Buffer/Nix Flakes.md +++ /dev/null @@ -1,21 +0,0 @@ -#nix - -Nix flakes are source trees containing a file `flake.nix` at their root. The file `flake.nix` provides a standardized way to provide [[Zettelkast/Index/Nix]] artifacts. It's like a package manager for [[Zettelkast/Index/Nix]]. A flake can be dependent on other Flakes and it's possible to pin dependencies to exact revisions by using a `flake.lock` file. - -Nix flake evaluation is hermetic, meaning that it produces the same result wherever it's built.k - -The feature can be enabled in `~/.config/nix/nix.conf`: - -``` -experimental-features = nix-command flakes -``` - -To initialize in a repo: `nix flake init`. - -In flakes dependencies have to be specified explicitly and MUST be locked to specific versions therefore it's no longer allowed to use the nixpkgs found in `NIX_PATH` by referencing it like ``. - -Output of a Flake is an arbitrary [[Zettelkast/Index/Nix]] value such as a package, [[NixOS]] module or library function. -Commands `nix build` and `nix shell` will build the output `packages..default` unless we specify another output, for example: `nix shell .#checks.aarch64-linux.build`. - ---- -[Flakes Wiki](https://nixos.wiki/wiki/Flakes) \ No newline at end of file diff --git a/Buffer/Nixpkgs Overlays.md b/Buffer/Nixpkgs Overlays.md deleted file mode 100644 index e69de29..0000000 diff --git a/Buffer/Nova Scheduler.md b/Buffer/Nova Scheduler.md deleted file mode 100644 index 1f58400..0000000 --- a/Buffer/Nova Scheduler.md +++ /dev/null @@ -1,2 +0,0 @@ -Applies Filters to filters compute hosts that are not usable until a list remains of usable compute hosts. -Filters have different costs, thus it's a good idea to put lightweight filters first as to reduce the load on the heavyweight ones. \ No newline at end of file diff --git a/Buffer/Ruby gems nixpkgs.md b/Buffer/Ruby gems nixpkgs.md deleted file mode 100644 index e69de29..0000000 diff --git a/Buffer/Shell.nix python.md b/Buffer/Shell.nix python.md deleted file mode 100644 index 7dabd4d..0000000 --- a/Buffer/Shell.nix python.md +++ /dev/null @@ -1,15 +0,0 @@ -https://nixos.org/manual/nixpkgs/stable/#python - -```nix -{ pkgs ? import {}}: - -pkgs.mkShell { - packages = [ pkgs.virtualenv ]; -} -``` - -```nix -with import {}; -( -let my_toolz = python311.pkgs.buildPythonPackage rec { pname = "toolz"; version = "0.10.0"; pyproject = true; src = fetchPypi { inherit pname version; hash = "sha256-CP3V73yWSArRHBLUct4hrNMjWZlvaaUlkpm1QP66RWA="; }; nativeBuildInputs = [ python311.pkgs.setuptools python311.pkgs.wheel ]; # has no tests doCheck = false; meta = { homepage = "https://github.com/pytoolz/toolz/"; description = "List processing tools and functional utilities"; # [...] }; }; in python311.withPackages (ps: with ps; [ numpy my_toolz ]) ).env -``` \ No newline at end of file diff --git a/Buffer/Timings VPS.md b/Buffer/Timings VPS.md deleted file mode 100644 index 51857df..0000000 --- a/Buffer/Timings VPS.md +++ /dev/null @@ -1,4 +0,0 @@ -10 VPS: avg ms over 100 reqs: 225 ms -20 VPS: first request: 247 ms. avg ms over 100 reqs: 203 ms -50 VPS: first request: 259 ms. avg ms over 100 reqs: 220 ms -101 VPS: first request: 264 ms. avg ms over 100 reqs: 221 ms diff --git a/Buffer/Updates ansible ad-hoc.md b/Buffer/Updates ansible ad-hoc.md deleted file mode 100644 index 2b8514c..0000000 --- a/Buffer/Updates ansible ad-hoc.md +++ /dev/null @@ -1,19 +0,0 @@ -update apt cache: -``` -ansible -m ansible.builtin.apt -a "update_cache=true cache_valid_time=3600" -``` - -update packages: -``` -ansible -m ansible.builtin.apt -a "name=* state=latest" -``` - -run puppet: -``` -ansible -a "/opt/puppetlabs/bin/puppet agent --test" -``` - -reboot: -``` -ansible -m ansible.builtin.reboot -f 1 -``` diff --git a/Buffer/Zoner Migration.md b/Buffer/Zoner Migration.md deleted file mode 100644 index dc61370..0000000 --- a/Buffer/Zoner Migration.md +++ /dev/null @@ -1 +0,0 @@ -* Kernel installation \ No newline at end of file diff --git a/Daily/2024-08-21.md b/Daily/2024-08-21.md deleted file mode 100644 index 7408220..0000000 --- a/Daily/2024-08-21.md +++ /dev/null @@ -1,27 +0,0 @@ -Need to start learning to take notes consistently. My idea now, to kick-off this process, is to open a daily note in obsidian every day at the start of the day in which I will keep crude, quick notes. -Then at the end of the day I shall take some time to go over the notes and refine them. Not yet sure if that refinement will already be the end result or if i should go over refined notes again at maybe the end of each week to see if they really stick. -I should commit notes to git to save them. - -Use taskwarrior to keep track of todo's. -`task [ | ]` -commands can be abbreviated as long as they dont become ambigious. -Tasks can be recurring. -See `man task`, specially the CONTEXT section, because i'm always confused about the context, `task context none` to unset the damn thing. -Annotate tasks that are critical with the critical tag, `task annotate +critical` or `task add +critical blaat` -Upgraded to taskwarrior3. Should set-up a task server to synchronize tasks to so I don't lose all of them if my laptop dies. - -Don't forget to always read man pages. Maybe I should create a detailed note about how to use man pages. - -I will start going to the office full-time from now on. -I should make sure my Obsidian notes and taskwarrior tasks are kept safely in a git repo in case i lose my laptop.l - -Today I learned that we can influence the output of `rabbitmqctl list_queues` , we can append it with keywords of columns that it should show, this also allows us to reorder them to set those pesky names on the end to have nicer formatting. -`rabbitmqctl list_queues messages consumers name` shows messages accumulated in Q and the number of consumers it has and then ends with the name. Of course this is explained in the manpage which I should read more often as noted before. - -I should ask for a diagram of the current systems and take note of it, e.g what is OneCRM / OneHOP / OneHome and all that. - -To upgrade a single package using apt we can use `apt-get install --only-upgrade `. - -Need to "relearn" to design stuff and document it. - -Designing structures and a mechanism to return and store info about individual disk backups, we can send that as parent when making incremental backups. Currently we fetch parent reference from checkpoint, which in case of volume's doesn't work of course. It also breaks if, on the testpod, we reset all backups etc but dont do so with all checkpoints. \ No newline at end of file diff --git a/Daily/2024-08-22.md b/Daily/2024-08-22.md deleted file mode 100644 index fd1531c..0000000 --- a/Daily/2024-08-22.md +++ /dev/null @@ -1,25 +0,0 @@ -Woke up full of motivation to go to the office. Asked my honey if it's okay to join her by train "is there enough time left?", "yeah" she replied. Then when I come downstairs and she asks me if I can be fast, I tell her maybe it's better you go then bc i worry I will not be able to. Right away she storms off mad and angry... My motivation gone, so I'll work from home.. - -Went to the office anyway by motorcycle, cannot feel like I'm waking up when staying at home anymore. - -**MermaidJS ZenUML** -Optional **Title** -**Participants** can be declared when used or at the start. -**Annotators** give **participants** a special icon, defined at the doc site. -**Aliases** give a short **participant** name a more descriptive name when rendered, e.g: A as Alice <- Alice will be rendered, but the code can use A. -**Messages** between **participants** can be **sync, async, creation or reply**. -**Sync** use A.\ have a block {} for nested messages -**Async** use an arrow A->B: How are you? -**Creation** new keyword new A(optional params) -**Reply** three ways to define: -* Assign var from **Sync** message, e.g: OptionalType a = A.SyncMessage() -* Return A.SyncMessage { return blaat } -* @return or @reply on an **async** message -**Nesting** can be done on both creation and sync messages using blocks {}. -**Comments** can be added using `// comment` and support markdown. -**Loops** can be defined using keywords: **while, for, foreach and loop**. -**Alternative** paths can be sequenced using **if, else** statements. if(blaat) { A.syncMessage(B) } -**Opt** fragments rendered via `opt { ... }`. This can be useful for optional responses or paths. -**Parallel** paths can be defined using `par { ... }`. -**Try/catch/finally** statements are supported as well. -**@Starter(participant)** to make the line start from a **participant** \ No newline at end of file diff --git a/Daily/2024-08-23.md b/Daily/2024-08-23.md deleted file mode 100644 index 6f41ca2..0000000 --- a/Daily/2024-08-23.md +++ /dev/null @@ -1,6 +0,0 @@ -Discussed about Automatic Evac (HA). We were unsure about what to do when a local storage goes down. Do we restore the instances from backups to a new node? In that case a DB server might lose important transtactions. So we could also wait until it is fixed. - -Would like Rutger to explain the Freenet BGP load balancing setup in more detail. How do the routers work, what are all those interfaces attached to them? - -A local storage disk backup is stored as a QCOW2 image. An incremental has a relationship to its parent, because they neged to be rebased onto each other. -A volume disk backup is stored as raw data and is accompanied by a file of checksums per block. The extra file is used both to track dirtied blocks for incremental backup. \ No newline at end of file diff --git a/Daily/2024-08-26.md b/Daily/2024-08-26.md deleted file mode 100644 index a91a1c9..0000000 --- a/Daily/2024-08-26.md +++ /dev/null @@ -1 +0,0 @@ -Nothing of note \ No newline at end of file diff --git a/Daily/2024-08-27.md b/Daily/2024-08-27.md deleted file mode 100644 index eb75d3f..0000000 --- a/Daily/2024-08-27.md +++ /dev/null @@ -1,11 +0,0 @@ -Changed a few things in the backup service: -* No longer delete all checkpoints when we make a full backup - * TODO: make sure we delete the checkpoint corresponding to a backup when the backup is deleted. - * TODO: Gracefully handle all checkpoints being deleted by openstack -* No longer explicitly specify "incremental" bool, just make it a best effort attempt. - * Still need to work out restores - - -When can we reboot n01.compute vps1-cph8. Its uptime is already 300 days. - -Short call with Jakub. Their priorities have shifted again, the focus on backup will be moved to improving performance of OneHome. They plan to synchronize data from OpenStack to OneHome so they can serve it faster. He asked me whether the customer can influence OpenStack state from within their VM. I told him that probably the only thing they can do to influence OpenStack is shutdown their VM. \ No newline at end of file diff --git a/Daily/2024-08-28.md b/Daily/2024-08-28.md deleted file mode 100644 index ac0cac1..0000000 --- a/Daily/2024-08-28.md +++ /dev/null @@ -1 +0,0 @@ -Had a meeting about onehome performance, they query everything in existence for a customer because of their graphQL workflow. they want to now sync everything in existence to a table so their gQL is fast again. \ No newline at end of file diff --git a/Daily/2024-08-29.md b/Daily/2024-08-29.md deleted file mode 100644 index e69de29..0000000 diff --git a/Daily/2024-09-03.md b/Daily/2024-09-03.md deleted file mode 100644 index 1d8a68e..0000000 --- a/Daily/2024-09-03.md +++ /dev/null @@ -1 +0,0 @@ -one on one Rutger; diff --git a/Daily/2024-09-10.md b/Daily/2024-09-10.md deleted file mode 100644 index 07ff5ba..0000000 --- a/Daily/2024-09-10.md +++ /dev/null @@ -1 +0,0 @@ -EYQBGNF95VORXXVVJ6NKFZF expressVPN \ No newline at end of file diff --git a/Daily/2024-09-30.md b/Daily/2024-09-30.md deleted file mode 100644 index fef578b..0000000 --- a/Daily/2024-09-30.md +++ /dev/null @@ -1 +0,0 @@ -- Check freenetvps gobs \ No newline at end of file diff --git a/Daily/2024-10-02.md b/Daily/2024-10-02.md deleted file mode 100644 index 64c611f..0000000 --- a/Daily/2024-10-02.md +++ /dev/null @@ -1,6 +0,0 @@ -* Fixed n06 testpod, due to installing stuff via pip we had some conflicting packages being used. Pip has been purged and stuff seems to work normally now. -* Investigated DNS issues on testpod lb with Erik. -* Fixed some small issues in the backup service - * Deleted servers couldn't be removed from the periodic backup, that is now fixed. - * Less noisy logging by moving some stuff to debug level. -* Deployed image_id change to prod \ No newline at end of file diff --git a/Interviews/Interview Mohammed Al-Mahdawi.md b/Interviews/Interview Mohammed Al-Mahdawi.md deleted file mode 100644 index 7c0ab8c..0000000 --- a/Interviews/Interview Mohammed Al-Mahdawi.md +++ /dev/null @@ -1,7 +0,0 @@ -Bekendheid met virtualisatie? Libvirt? QEMU? -Puppet, Ansible, chef? -Heeft Erlang geprogrammeerd? BEAM tunen/beheren? RabbitMQ? -Gezien vooral functioneel programmeren op CV: Bekendheid met OOP concepten? Ken je bijv. het repository pattern? -Weet je wat een test piramide is? - - Wat is het verschil tussen unit tests en integratie tests? - diff --git a/Interviews/Interview Patrick Spek.md b/Interviews/Interview Patrick Spek.md deleted file mode 100644 index 6f86ea9..0000000 --- a/Interviews/Interview Patrick Spek.md +++ /dev/null @@ -1,21 +0,0 @@ -Wat wil ik weten? -* Wat zijn ze z'n hobbies? Is hij in zijn vrije tijd ook bezig met zelfontwikkeling? -* Is hij gepassioneerd over software ontwikkeling of is het iemand die dit doet omdat het goed verdiend? - -"They wanted better insights into how the mail service of their platform was used, so I set up some systems to keep better details. I also configured DMARC and made sure those reports were properly analyzed." - - -Wat gaan we doen? -Ff praten, wie ben je, waar kom je vandaan? -Daarna, CV erbij, vragen over stellen? - -Wat is de reden dat je weg wilt? -Waar ben je het meest trots op? - -openstack ciso, aws, aws nieuwe aws - -geen webcam.. meh - -is nu lead, word dat niet meer, wat vind je ervan? - -veel ervaring perl, is nu golang aan het leren \ No newline at end of file diff --git a/Interviews/Vragenlijst.md b/Interviews/Vragenlijst.md deleted file mode 100644 index 08e2f89..0000000 --- a/Interviews/Vragenlijst.md +++ /dev/null @@ -1,7 +0,0 @@ -- Ben je bekend met scrum, agile, kanban, jira etc? - - -Technische vragen: -threading, race conditions, deadlocks -message queue -- Kun je uitleggen hoe een binary search werkt \ No newline at end of file diff --git a/Refined/Group.ONE Infrastructure.md b/Refined/Group.ONE Infrastructure.md deleted file mode 100644 index 1d9ba33..0000000 --- a/Refined/Group.ONE Infrastructure.md +++ /dev/null @@ -1 +0,0 @@ -I want to have an overview of systems and what they are responsible for. Example, what is OneHOP or OneHome and what do they do. I plan to write that down in this document. \ No newline at end of file diff --git a/Refined/Man pages.md b/Refined/Man pages.md deleted file mode 100644 index 901be15..0000000 --- a/Refined/Man pages.md +++ /dev/null @@ -1,3 +0,0 @@ -**2024-08-21 18:07:20** -I need to more consistently read man pages. Example is `man task` to see how taskwarrior works, after reading it today I found that it is actually quite easy. -They often contain good information on how to use a certain tool. \ No newline at end of file diff --git a/Refined/Note taking.md b/Refined/Note taking.md deleted file mode 100644 index 2a47666..0000000 --- a/Refined/Note taking.md +++ /dev/null @@ -1,7 +0,0 @@ -**2024-08-21 17:59:00** -I want to become better at taking notes consistently in the hope that I forget less important things and become better overall at managing knowledge. -To try and create the habit I will open a new daily note in Obsidian at the start of the day and sit down at the end of the day to refine anything written down into a more permanent form like this one. I'm hoping that by doing this consistently I will more often write down ideas, information, etc. during the day, rather than forget about it. - -After refining the daily notes, I should commit and push changes to a remote git repo that is also regularly backed up so I keep all this knowledge safe. - -I'm not yet sure if and how I incorporate this into a "zettelkast", something I did start before but never really stuck. I will need to do more research into this, and note taking overall. \ No newline at end of file diff --git a/Refined/RabbitMQ.md b/Refined/RabbitMQ.md deleted file mode 100644 index e9c94c5..0000000 --- a/Refined/RabbitMQ.md +++ /dev/null @@ -1,2 +0,0 @@ -**2024-08-21 18:09** -With `rabbitmqctl list_queues` we can add columns to show. So instead of the default layout which shows messages in the Q after the name and is horrible we can specify stuff like: `rabbitmqctl list_queues messages consumers name`. There are more options to be found in `man rabbitmqctl`. diff --git a/Refined/TaskWarrior (ToDo).md b/Refined/TaskWarrior (ToDo).md deleted file mode 100644 index 6002fde..0000000 --- a/Refined/TaskWarrior (ToDo).md +++ /dev/null @@ -1,3 +0,0 @@ -**2024-08-21 18:03:00** -I want to better keep track of what i'm doing, for that purpose I will use taskwarrior. For usage see `man task`. -Adding a task is done by `task add`, to modify it `task modify` . I use priorities, they can be set on a new or existing task with `priority:H/M/L`. diff --git a/Zettelkast/Index/Computer Networking.md b/Zettelkast/Index/Computer Networking.md deleted file mode 100644 index 0993b44..0000000 --- a/Zettelkast/Index/Computer Networking.md +++ /dev/null @@ -1,3 +0,0 @@ -[[300820231007 - OVN]] -[[310820231706 - Networking One Giant Compute]] -[[310820231618 - Open VSwitch (OVS)]] diff --git a/Zettelkast/Index/Domain Driven Design.md b/Zettelkast/Index/Domain Driven Design.md deleted file mode 100644 index f926e78..0000000 --- a/Zettelkast/Index/Domain Driven Design.md +++ /dev/null @@ -1,2 +0,0 @@ -[[290220240839 - Domain Modeling]] -[[290220241543 - Aggregates]] diff --git a/Zettelkast/Index/Golang.md b/Zettelkast/Index/Golang.md deleted file mode 100644 index 2da2043..0000000 --- a/Zettelkast/Index/Golang.md +++ /dev/null @@ -1,3 +0,0 @@ -The Go programming language - -[[010420240957 - spf13 cobra]] \ No newline at end of file diff --git a/Zettelkast/Index/Nix.md b/Zettelkast/Index/Nix.md deleted file mode 100644 index f107402..0000000 --- a/Zettelkast/Index/Nix.md +++ /dev/null @@ -1 +0,0 @@ -[[010720231037 - With function]] \ No newline at end of file diff --git a/Zettelkast/Index/Python3.md b/Zettelkast/Index/Python3.md deleted file mode 100644 index 6a8c99a..0000000 --- a/Zettelkast/Index/Python3.md +++ /dev/null @@ -1,3 +0,0 @@ -The python3 programming language notes.' - -[[032220240826 - Python3 Escape Sequences]] \ No newline at end of file diff --git a/Zettelkast/Index/Software Architecture.md b/Zettelkast/Index/Software Architecture.md deleted file mode 100644 index 590757e..0000000 --- a/Zettelkast/Index/Software Architecture.md +++ /dev/null @@ -1,2 +0,0 @@ -[[Domain Driven Design]] -[[022920240849 - Layered Architecture]] \ No newline at end of file diff --git a/Zettelkast/Index/_Index.md b/Zettelkast/Index/_Index.md deleted file mode 100644 index 05d5d74..0000000 --- a/Zettelkast/Index/_Index.md +++ /dev/null @@ -1,7 +0,0 @@ -[[Software Architecture]] -[[Python3]] -[[Golang]] -[[Zettelkast/Index/Nix]] - -[[300820231007 - OVN]] -[[280620231634 - Using Zettelkasten as a thinking tool]] \ No newline at end of file diff --git a/Zettelkast/Notes/010420240957 - spf13 cobra.md b/Zettelkast/Notes/010420240957 - spf13 cobra.md deleted file mode 100644 index e867fe6..0000000 --- a/Zettelkast/Notes/010420240957 - spf13 cobra.md +++ /dev/null @@ -1,13 +0,0 @@ -Cobra is a [[Golang]] library for creating command-line interfaces. - -CLI for generating stuff: -``` -go install github.com/spf13/cobra-cli@latest -``` - -The library itself: -``` -go get -u github.com/spf13/cobra@latest - -import "github.com/spf13/cobra" -``` diff --git a/Zettelkast/Notes/010720231037 - With function.md b/Zettelkast/Notes/010720231037 - With function.md deleted file mode 100644 index d646a8f..0000000 --- a/Zettelkast/Notes/010720231037 - With function.md +++ /dev/null @@ -1,18 +0,0 @@ -#nix-lang - -The `with` function brings all attributes from a given set, e.g nixpkgs, into the local scope. Making them accessible as if they were declared in the same file. - -An example, bringing everything from nixpkgs into scope: -``` -with import ; -with python310Packages; <-- declared in nixpkgs - -buildPythonPackage <-- declared in python310Packages -``` - -The import statement is required here because imports a nix expression from another source, in this case nixpkgs. -It is not required at line two, because python310Packages itself is already in the local scope. - - ---- -[Nix Manual](https://nixos.org/manual/nix/stable/language/index.html) diff --git a/Zettelkast/Notes/010920231133 - OpenFlow.md b/Zettelkast/Notes/010920231133 - OpenFlow.md deleted file mode 100644 index 4e0bd08..0000000 --- a/Zettelkast/Notes/010920231133 - OpenFlow.md +++ /dev/null @@ -1,2 +0,0 @@ -`man ovs-fields (7)` explains more about OpenFlow matches. -`man ovs-ofctl (8)` explains more about OpenFlow actions. diff --git a/Zettelkast/Notes/010920231434 - (UNIX) Watch.md b/Zettelkast/Notes/010920231434 - (UNIX) Watch.md deleted file mode 100644 index dafeb80..0000000 --- a/Zettelkast/Notes/010920231434 - (UNIX) Watch.md +++ /dev/null @@ -1 +0,0 @@ -`watch (1)` periodically executes the executable on argv. It can be used to reload the output of a command, like `sudo watch ovs-dpctl dump-flows` . \ No newline at end of file diff --git a/Zettelkast/Notes/022920240849 - Layered Architecture.md b/Zettelkast/Notes/022920240849 - Layered Architecture.md deleted file mode 100644 index d551132..0000000 --- a/Zettelkast/Notes/022920240849 - Layered Architecture.md +++ /dev/null @@ -1,7 +0,0 @@ -Layered architecture is the art of dividing an application into different layers and applying rules to decide which code goes to which layer. -Examples of layered architecture are MVC. - -Another example is: -- Business layer ([[290220240839 - Domain Modeling]]): Encapsulates all business logic -- [[290220241412 - Service Layer]]: Encapsulate all application use-cases and manages orchestration before handing over to the domain layer. -- Interface layer: E.g Flask controllers, CLI, etc. They depend on the service layer. \ No newline at end of file diff --git a/Zettelkast/Notes/022920240901 - Repository Pattern.md b/Zettelkast/Notes/022920240901 - Repository Pattern.md deleted file mode 100644 index ef6a879..0000000 --- a/Zettelkast/Notes/022920240901 - Repository Pattern.md +++ /dev/null @@ -1 +0,0 @@ -A simplifying abstraction over data storage allowing to decouple the business layer from the data layer in a [[022920240849 - Layered Architecture]] and making it easier to test as well. \ No newline at end of file diff --git a/Zettelkast/Notes/032220240826 - Python3 Escape Sequences.md b/Zettelkast/Notes/032220240826 - Python3 Escape Sequences.md deleted file mode 100644 index f63c208..0000000 --- a/Zettelkast/Notes/032220240826 - Python3 Escape Sequences.md +++ /dev/null @@ -1,21 +0,0 @@ -Escape sequences encode hard to type characters, e.g a tab \\t. - -Table of escape sequences: - -| Escape | What it does | -| ---------- | ----------------------------------------------------------- | -| \\\ | Backslash (\\) | -| \\' | Single-quote (') | -| \\" | Double-quote (") | -| \a | ASCII bell (BEL) | -| \b | ASCII backspace (BS) | -| \f | ASCII formfeed (FF) | -| \n | ASCII linefeed (LF) | -| \N{name} | Character named name in the Unicode database (Unicode only) | -| \r | Carriage return (CR) | -| \t | Horizontal tab (TAB) | -| \uxxxx | Character with 16-bit hex value xxxx | -| \Uxxxxxxxx | Character with 32-bit hex value xxxxxxxx | -| \v | ASCII vertical tab (VT) | -| \ooo | Character with octal value ooo | -| \xhh | Character with hex value hh | diff --git a/Zettelkast/Notes/060620241559 - Adjacency Lists.md b/Zettelkast/Notes/060620241559 - Adjacency Lists.md deleted file mode 100644 index c2e9003..0000000 --- a/Zettelkast/Notes/060620241559 - Adjacency Lists.md +++ /dev/null @@ -1,3 +0,0 @@ -Adjacency list is a self-referential relationship. In SQLAlchemy we can achieve this by creating a ForeignKey on the table to itself. In the mapper we can add a relationship property and specify remote_side=[table.c.id]. - -This is what I used to give backups a "base" reference. \ No newline at end of file diff --git a/Zettelkast/Notes/20240613112 - Aggregates should protect invariants.md b/Zettelkast/Notes/20240613112 - Aggregates should protect invariants.md deleted file mode 100644 index 7e4d67c..0000000 --- a/Zettelkast/Notes/20240613112 - Aggregates should protect invariants.md +++ /dev/null @@ -1,5 +0,0 @@ -An invariant should be designed in such a way that it can enforce an invariant. This means even if they require another aggregate to do so, therefore it's allowed to reference other aggregates. - ---- -Related: -- [[290220241543 - Aggregates]] \ No newline at end of file diff --git a/Zettelkast/Notes/202406131159 - Invariant.md b/Zettelkast/Notes/202406131159 - Invariant.md deleted file mode 100644 index 0109c04..0000000 --- a/Zettelkast/Notes/202406131159 - Invariant.md +++ /dev/null @@ -1,5 +0,0 @@ -An invariant is a condition that simply must always be true. - ---- -Related: -- [[20240613112 - Aggregates should protect invariants]] \ No newline at end of file diff --git a/Zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md b/Zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md deleted file mode 100644 index fb1bf77..0000000 --- a/Zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md +++ /dev/null @@ -1,9 +0,0 @@ -#datacenter - -A direct attach cable is used in data center environments to connect hardware such as servers, routers and switches. -Has a [[280620231201 - Transceiver]] on both ends. -Used most commonly to connect hardware in a rack to a switch in the top of a rack. -Can be up to 7 meter. -They are a lot cheaper than fiber. - ---- diff --git a/Zettelkast/Notes/280620231201 - Transceiver.md b/Zettelkast/Notes/280620231201 - Transceiver.md deleted file mode 100644 index 7bba020..0000000 --- a/Zettelkast/Notes/280620231201 - Transceiver.md +++ /dev/null @@ -1,5 +0,0 @@ -#datacenter - -A transceiver is an electronic device which can both transmit and receive signals. - ---- diff --git a/Zettelkast/Notes/280620231556 - Svelte.md b/Zettelkast/Notes/280620231556 - Svelte.md deleted file mode 100644 index 0e9d077..0000000 --- a/Zettelkast/Notes/280620231556 - Svelte.md +++ /dev/null @@ -1,9 +0,0 @@ -#web-development #svelte - -Svelte is a way to write UI components. It is a compiled language and compiles into JavaScript that can be run to render HTML for the page and CSS to style it. -It's not a full framework and thus would require additional components to build a complete application. -Therefore it can be used as a nice way to quickly build a simple web page using reusable components but with additional tools like [[280620231557 - SvelteKit]] it can be used to build an entire application. - ---- -[SvelteKit Documentation](https://kit.svelte.dev/docs/introduction#what-is-svelte) - diff --git a/Zettelkast/Notes/280620231557 - SvelteKit.md b/Zettelkast/Notes/280620231557 - SvelteKit.md deleted file mode 100644 index fd2f36a..0000000 --- a/Zettelkast/Notes/280620231557 - SvelteKit.md +++ /dev/null @@ -1,7 +0,0 @@ -#web-development #svelte - -SvelteKit is a framework for developing applications using [[280620231556 - Svelte]]. -It provides features like routing, server-side rendering and enables us to conform to best practices, like specific build optimizations, offline support, preloading pages, - ---- -[SvelteKit Documentation](https://kit.svelte.dev/docs/introduction) \ No newline at end of file diff --git a/Zettelkast/Notes/280620231621 - Knowledge vs Information.md b/Zettelkast/Notes/280620231621 - Knowledge vs Information.md deleted file mode 100644 index 183eb35..0000000 --- a/Zettelkast/Notes/280620231621 - Knowledge vs Information.md +++ /dev/null @@ -1,8 +0,0 @@ -#zettelkasten #note-taking - -The body of a Zettel [[280620231634 - Using Zettelkasten as a thinking tool]] should contain knowledge. -Information is just static lifeless data ready to be interpreted. Knowledge is information with added context and relevance. -It should still be relevant in the same context 10 years from now as it was when writing it. If we just capture some information. Without the context our later selves will probably look at it and wonder WTF it was for. - ---- -[Zettelkasten Introduction](https://zettelkasten.de/introduction/#the-body-of-the-zettel) \ No newline at end of file diff --git a/Zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md b/Zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md deleted file mode 100644 index ec7454d..0000000 --- a/Zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md +++ /dev/null @@ -1,11 +0,0 @@ -#zettelkasten #note-taking - -Zettelkasten is a method of note taking that can be seen as a thinking tool. The idea is that thoughts are captured in atomic notes (Zettel) and reference other such notes creating a graph. The graph may later reveal connections between topics that weren't visible before. - -The main important things are that: -- A zettel has a unique identifier -- A piece of knowledge -- Some references to whatever this knowledge came from ( or none if it's just a thought of our own ) - ---- -[Zettelkasten introduction](https://zettelkasten.de/introduction/) \ No newline at end of file diff --git a/Zettelkast/Notes/290220240839 - Domain Modeling.md b/Zettelkast/Notes/290220240839 - Domain Modeling.md deleted file mode 100644 index 9fe7f7f..0000000 --- a/Zettelkast/Notes/290220240839 - Domain Modeling.md +++ /dev/null @@ -1,5 +0,0 @@ -Domain modeling can be used to define the business layer in a [[022920240849 - Layered Architecture]]. This is all the business logic. It should be easy to understand and easy to change as this is the code that changes the most frequently. - -A domain model can be comprised out of [[290220240843 - Value Object]], [[290220240842 - Entity]], Aggregates and functions that encompass domain procedures that do not necessarily fit in an object. -It is also fine to include Exceptions in the domain, e.g stock can go out of stock and thus when we would allocate an order it would raise an OutOfStock exception. - diff --git a/Zettelkast/Notes/290220240842 - Entity.md b/Zettelkast/Notes/290220240842 - Entity.md deleted file mode 100644 index 41879da..0000000 --- a/Zettelkast/Notes/290220240842 - Entity.md +++ /dev/null @@ -1 +0,0 @@ -An Entity is an object with a unique identity. E.g a Person has a unique identity (for example his name). \ No newline at end of file diff --git a/Zettelkast/Notes/290220240843 - Value Object.md b/Zettelkast/Notes/290220240843 - Value Object.md deleted file mode 100644 index 10a9afa..0000000 --- a/Zettelkast/Notes/290220240843 - Value Object.md +++ /dev/null @@ -1,15 +0,0 @@ -A Value Object is a domain object that has no unique identity but if any of its properties change it is no longer the same. An example can be made with money. - -```py -from dataclasses import dataclass - -@dataclass(frozen=True) -class Money: - type: str - value: int - -Money("Euro", 10) != Money("Euro", 9) -Money("GBP", 10) != Money("Euro", 10) -``` - -Thus such an object is a perfect candidate for immutability. With python we can add @dataclass(frozen=True). Frozen=true makes it immutable. \ No newline at end of file diff --git a/Zettelkast/Notes/290220241409 - TDD High and Low Gear.md b/Zettelkast/Notes/290220241409 - TDD High and Low Gear.md deleted file mode 100644 index 218ad00..0000000 --- a/Zettelkast/Notes/290220241409 - TDD High and Low Gear.md +++ /dev/null @@ -1,3 +0,0 @@ -A nice idea of TDD is that of High and Low Gear. What they mean is that when you're just starting out you will write a lot of fine grained unit tests to get going, e.g against the domain layer. -Once you're at the point that you have encapsulated all use cases in a nice service layer, you can move all the specific domain tests to the service layer. This makes it easier to make modifications to the domain model. -If then you really need to make big changes, you write fine grained unit tests for those again, until you've encapsulated them in the service layer. \ No newline at end of file diff --git a/Zettelkast/Notes/290220241412 - Service Layer.md b/Zettelkast/Notes/290220241412 - Service Layer.md deleted file mode 100644 index 08e9782..0000000 --- a/Zettelkast/Notes/290220241412 - Service Layer.md +++ /dev/null @@ -1,3 +0,0 @@ -The idea of the service layer is that it handles most orchestration concerns for a use case of the application such as wiring together repositories and fetching required domain models. Basically it sets everything up so that we have everything needed to have the domain do its work properly and then persist the changes. - -This takes away this kind of logic from the entrypoints like API controllers making those easier to test as they only be concerned with doing web stuff, e.g fetching the data from the request and making sure we form a correct response. That allows us to just run an end to end test for the happy an all unhappy paths on the controller, the rest of the application functionality is covered by the service layer. \ No newline at end of file diff --git a/Zettelkast/Notes/290220241458 - Unit of Work pattern.md b/Zettelkast/Notes/290220241458 - Unit of Work pattern.md deleted file mode 100644 index 3ba00cb..0000000 --- a/Zettelkast/Notes/290220241458 - Unit of Work pattern.md +++ /dev/null @@ -1,40 +0,0 @@ -#needs-clarification - -The Unit of Work is an abstraction of the concept of atomic operations. We can have a clear boundary on what work is grouped together and should be committed only if everything succeeded. - -We can use the UoW to remove dependency on storage layer from entrypoints by having the UoW manage the set-up. This makes tests easier. - -For example an SqlAlchemyUoW can wrap an SqlAlchemy Session object and expose only its most thin API: commit and rollback. It can work together as well with a [[022920240901 - Repository Pattern|Repository]]. Using a ContextManager we can make the operations safe by only explicitly having the user of the UoW commit and otherwise when exiting do a rollback: -```py -import abc - -class AbstractUnitOfWork(abc.ABC): - products: AbstractRepository - - def __init__(self, products: AbstractRepository): - self.products = products - - def __exit__(self): - self.rollback() - - @abc.abstractmethod - def commit(self): - pass - - @abc.abstractmethod - def rollback(self): - pass - - -class SqlAlchemyUnitOfWork(AbstractUnitOfWork): - def __init__(self, products: AbstractRepository, sessionmaker): - self._session = sessionmaker() - super().__init__(some_repo) - - def commit(self): - self._session.commit() - - def rollback(self): - self._session.rollback() -``` - diff --git a/Zettelkast/Notes/290220241543 - Aggregates.md b/Zettelkast/Notes/290220241543 - Aggregates.md deleted file mode 100644 index 2001826..0000000 --- a/Zettelkast/Notes/290220241543 - Aggregates.md +++ /dev/null @@ -1,5 +0,0 @@ -An Aggregate is a single cohesive collection of domain objects. An aggregate must be consistent within a single transaction. - ---- -Related: -- [[20240613112 - Aggregates should protect invariants]] \ No newline at end of file diff --git a/Zettelkast/Notes/300620231000 - Running programs in the background with tmux.md b/Zettelkast/Notes/300620231000 - Running programs in the background with tmux.md deleted file mode 100644 index b338da5..0000000 --- a/Zettelkast/Notes/300620231000 - Running programs in the background with tmux.md +++ /dev/null @@ -1,8 +0,0 @@ -#tmux - -Tmux can be used to run programs in the background by opening a tmux session and starting the program. It is then possible to detach from that session while the program keeps running. - -It's also possible to directly start a program in its own session: - tmux new-session obsidian or leader+A $ and then new-session obsidian. - ---- diff --git a/Zettelkast/Notes/300820231007 - OVN.md b/Zettelkast/Notes/300820231007 - OVN.md deleted file mode 100644 index b0ca07a..0000000 --- a/Zettelkast/Notes/300820231007 - OVN.md +++ /dev/null @@ -1,32 +0,0 @@ -#network #networking #ovn #virtual #cloud #dc #engineering #software #emulation #gateway #tunnel #tunneling #router #routing #switch #switching #ovs - ---- - -OVN is a software that enables the creation of virtual networks. Under the hood it uses OVS (virtual switch) and a tunneling protocol to emulate networking devices. These virtual networks run on top of the normal physical infrastructure. It is useful in a cloud environment with virtual machines because it is easy to scale because we can use the singular physical infrastructure and create many seperate virtual networks with string of simple commands or managed by a configuration management system. - -OVN complements features provided by [[OVS]] to enable defining networks entirely in software on top of and unaware of the underlaying physical network. -This is achieved by using tunnels or other encapsulations. Therefore IP addresses and other addresses can overlap with the physical network as they are unaware of each other. - -A software defined network as described above is called an [[OVN Logical Network]]. - -A [[OVN Gateway]] extends a tunnel-based [[OVN Logical Network]] into the physical network by forwarding packets bi-directionally. This allows non-virtualized devices to participate in the logical network as well. - ---- - -OVN has two databases which act as interfaces for components. The NorthBound DB handles translation from higher level CMS concepts into intermediary OVN concepts with similar naming that are used to be translated to lower level flows stored in the SouthBound DB. Those flows - -**Why the NorthBound DB?** -Probably it exists to make it easy to integrate OVN into cloud management systems such as OpenStack because the tables and structures match those of higher level cloud components. OVN is then responsible for doing the complicated work of translating those into the lower level flows. - -**There is more than one table in each of the databases, how can we show which ones are there and what they contain?** -E.g the logical_switch_port table in nb db (nbctl list logical_switch_port) -From `man ovn-nbctl` : "For a list of tables and their columns, see ovn-nb(5) or see the table listing from the --help option." - -**What are dhcpv4_options on a logical switch port?** - -A Logical Datapath is the lower level concept in the SB DB, which matches the higher level Logical Switch. It is implemented by flows dictacting how packets should flow. We can see the given datapaths via `ovn-sbctl list datapath_binding`. - -`ovs-dpctl` is the interface to OVS datapaths. With `ovs-dpctl dump-flows` we can get a glimpse of the in-kernel flow cache, e.g see what's going on. - -**What is the TTL (Time To Live) on an IP packet? Why is it decreased by a router?** - diff --git a/Zettelkast/Notes/310820231448 - Neutron OVN.md b/Zettelkast/Notes/310820231448 - Neutron OVN.md deleted file mode 100644 index 7df0888..0000000 --- a/Zettelkast/Notes/310820231448 - Neutron OVN.md +++ /dev/null @@ -1 +0,0 @@ -An OpenStack Network is a logical switch, it corresponds to an [[OVN Logical Switch]] \ No newline at end of file diff --git a/Zettelkast/Notes/310820231618 - Open VSwitch (OVS).md b/Zettelkast/Notes/310820231618 - Open VSwitch (OVS).md deleted file mode 100644 index d4664d4..0000000 --- a/Zettelkast/Notes/310820231618 - Open VSwitch (OVS).md +++ /dev/null @@ -1,3 +0,0 @@ -OVS is a direct replacement for [[LinuxBridge]] an L2 switch. Linux bridge was not designed with a fast changing landscape of many VMs that need to communicate with each other from many different hosts. OVS is designed with that in mind.. - -OVS makes it possible to migrate configuration and live network state between two hypervisors by tracking current network state in OVSDB. The OVSDB supports triggers which make it possible to respond to changes of various aspects of the network. \ No newline at end of file diff --git a/Zettelkast/Notes/310820231706 - Networking One Giant Compute.md b/Zettelkast/Notes/310820231706 - Networking One Giant Compute.md deleted file mode 100644 index 31fd127..0000000 --- a/Zettelkast/Notes/310820231706 - Networking One Giant Compute.md +++ /dev/null @@ -1,3 +0,0 @@ -Using a [[TCP/IP]] network makes it almost as if two connected computers are working as one. -Like a giant botnet, all hosts working together as a single giant machine trying to bring down a company or network. -Or all our smartphones running hypervisor software creating the biggest cloud ever. \ No newline at end of file diff --git a/buffer/2024-01-08.md b/buffer/2024-01-08.md new file mode 100644 index 0000000..13eee22 --- /dev/null +++ b/buffer/2024-01-08.md @@ -0,0 +1,16 @@ +--- +tags: + - qemu + - qemu-guest-agent + - backups +--- +Got QEMU Guest agent working via booting a VM with an image after setting `hw_qemu_guest_agent='yes'` on that image. + +Put a script under `/etc/qemu/fsfreeze-hook.d/` with the executable flag set that echo's 'yo' when it is run. + +Tried Cinder backup: script not called +Tried Cinder snapshot: script not called +Tried Nova snapshot: script not called. + +--- +10.40 - 16.00 \ No newline at end of file diff --git a/buffer/2024-01-09.md b/buffer/2024-01-09.md new file mode 100644 index 0000000..e0d0937 --- /dev/null +++ b/buffer/2024-01-09.md @@ -0,0 +1,24 @@ +--- +tags: + - idea + - oslo_messaging + - tuning + - maintenance + - issue +--- +Had an idea to develop a tool to parse openstack release pages to see what's new from the CLI. + +Continued maintenance after making sure cold migrations do work on running VMs and make sure they are started again after migrating. + +Messaging timeouts occurred during maintenance. Found some settings to tune the neutron and nova oslo messaging library. +https://docs.mirantis.com/mcp/q4-18/mcp-deployment-guide/advanced-config/tune-rabbitmq-perf.html + +Learned about the HAProxy ansible module: +https://docs.ansible.com/ansible/latest/collections/community/general/haproxy_module.html + +We decided to add ansible playbooks for enabling and disabling services. So we can disable the neutron controller in haproxy before restarting it. This prevents an issue where it is being flooded with requests while starting up and causing it to process SSL requests before even having loaded the SSL certificates. + +Forgot that I had to visit the mortgage advisor at the end of the afternoon. + +--- +9.30 - 16.00 diff --git a/buffer/2024-01-10.md b/buffer/2024-01-10.md new file mode 100644 index 0000000..6a91cdb --- /dev/null +++ b/buffer/2024-01-10.md @@ -0,0 +1,5 @@ +Maintenance had been stopped due to an hanging apt-lock on n40 vps2 compute. Killed the hanging process and resumed maintenance. + + +--- +9.30 \ No newline at end of file diff --git a/buffer/2024-02-20.md b/buffer/2024-02-20.md new file mode 100644 index 0000000..2359685 --- /dev/null +++ b/buffer/2024-02-20.md @@ -0,0 +1,12 @@ +Building an OpenStack service. + +**Things to look into** +- Tox (testing I think) +- Project structure +- Conventions +- Deployment considerations +- https://opendev.org/openstack/requirements/ + +**Tox** +https://tox.wiki/en/4.13.0/ +Test automation and standardization. \ No newline at end of file diff --git a/buffer/2024-06-13.md b/buffer/2024-06-13.md new file mode 100644 index 0000000..61a16ac --- /dev/null +++ b/buffer/2024-06-13.md @@ -0,0 +1,2 @@ +Tests: +- \ No newline at end of file diff --git a/buffer/2024-06-17.md b/buffer/2024-06-17.md new file mode 100644 index 0000000..144e133 --- /dev/null +++ b/buffer/2024-06-17.md @@ -0,0 +1,10 @@ +Investigated the last remaining error with a missing reply queue which was the likely suspect of some alerts of compute service down etc. After some digging in Kibana i noticed a compute node that was logging MessagingTimeouts. I restarted the compute service on this node and it seems to have resolved the errors. + +Both system test in CPH8 and LEJ1 were failing. CPH8 likely due to me restarting neutron-server earlier that morning in an attempt to fix the reply queue error. +LEJ1 had been failing since 14th of June. My guess is due to some maintenance related issue. Both system tests are running smoothly again after cleaning up their artifacts. + +Meanwhile, maintenance on VPS1-LEJ1 is still on-going and causing headaches. Another password refresh of the access node caused a migration to fail during post-cleanup and I had to set the host and node of the instance to the correct node directly via MySQL. I should apply Rutgers' suggestion of saving some variables in the OS_\* env vars, rather sooner than later. + +Tested retention backups being scheduled, and deployed it to prod. + +Investigate whether we can listen for notifications by Nova so that we can listen for server deletions and remove them from periodic backups. There should be no need to delete backups for the server, as the retention policy will have them deleted after a while. \ No newline at end of file diff --git a/buffer/2024-06-26.md b/buffer/2024-06-26.md new file mode 100644 index 0000000..e69de29 diff --git a/buffer/Blkio errors.md b/buffer/Blkio errors.md new file mode 100644 index 0000000..2b666a3 --- /dev/null +++ b/buffer/Blkio errors.md @@ -0,0 +1,14 @@ +Dmesg is spewing blkio errors + +Find out which device: e.g dm-4, then: +``` +sudo virsh list --all --name | while read dom; do sudo virsh dumpxml $dom | grep dm-4 && echo $dom; done +``` +To find which domain +After which: +``` +sudo virsh dumpxml $domain +``` +to find the hostname + +reboot it hard. \ No newline at end of file diff --git a/buffer/ELF (files).md b/buffer/ELF (files).md new file mode 100644 index 0000000..e69de29 diff --git a/buffer/Group.ONE Backup Service.md b/buffer/Group.ONE Backup Service.md new file mode 100644 index 0000000..ebb2c92 --- /dev/null +++ b/buffer/Group.ONE Backup Service.md @@ -0,0 +1,6 @@ +# Ubiquitous language +**Project** The customer or tenant that owns the servers, backups and periodic backups. +**Server** Is the subject of a backup or periodic backup. It has one or more disks assigned. +**Disk** Can either be a local storage disk or shared storage volume. It is attached to a server and can be referenced by its name. +**Backup** Is a snapshot in time of a server. It can be used to restore a server to how it was exactly at that moment in time. +**PeriodicBackup** Is a group of servers that will be backed up periodically. \ No newline at end of file diff --git a/buffer/Issues met TC oplossen.md b/buffer/Issues met TC oplossen.md new file mode 100644 index 0000000..4ad3bf8 --- /dev/null +++ b/buffer/Issues met TC oplossen.md @@ -0,0 +1,25 @@ +Probleem: referenties in ovs naar devices die niet meer bestaan. Hij probeert vervolgens een nieuw device aan te maken met een qdisc op zo'n niet bestaande device. + +``` +sudo grep -r 'could not open network device' /var/log/openvswitch/ | grep -oi 'tap[a-z0-9\-]*' | uniq > ports_no_device +``` +``` +sudo ip l l | grep ports_no_device | grep -oi 'tap[a-z0-9\-]*' > ports_with_device +``` +``` +for P in $(cat ports_no_device | grep -v -f ports_with_device); do sudo ovs-vsctl del-port $P; done +``` +``` +sudo systemctl restart ovn-controller +``` + + +Rutger versie: +``` +sudo grep 'could not open network device' /var/log/openvswitch/ovs-vswitchd.log | grep -oi 'tap[a-z0-9\-]*' | sort | uniq | while read dev; do ip l l $dev || sudo ovs-vsctl del-port $dev; done; sudo systemctl restart ovn-controller +``` + + +Dus: ovs-vsctl del-port is nice. + +Niet vergeten ovn-controller te herstarten. diff --git a/buffer/Neutron DNS & Designate.md b/buffer/Neutron DNS & Designate.md new file mode 100644 index 0000000..48785ab --- /dev/null +++ b/buffer/Neutron DNS & Designate.md @@ -0,0 +1,3 @@ +https://docs.openstack.org/neutron/latest/admin/config-dns-int.html#config-dns-int + +Lijkt er op dat dns_domain overruled kan worden op port niveau. \ No newline at end of file diff --git a/buffer/Nix Flakes.md b/buffer/Nix Flakes.md new file mode 100644 index 0000000..cb7f69b --- /dev/null +++ b/buffer/Nix Flakes.md @@ -0,0 +1,21 @@ +#nix + +Nix flakes are source trees containing a file `flake.nix` at their root. The file `flake.nix` provides a standardized way to provide [[Zettelkast/Index/Nix]] artifacts. It's like a package manager for [[Zettelkast/Index/Nix]]. A flake can be dependent on other Flakes and it's possible to pin dependencies to exact revisions by using a `flake.lock` file. + +Nix flake evaluation is hermetic, meaning that it produces the same result wherever it's built.k + +The feature can be enabled in `~/.config/nix/nix.conf`: + +``` +experimental-features = nix-command flakes +``` + +To initialize in a repo: `nix flake init`. + +In flakes dependencies have to be specified explicitly and MUST be locked to specific versions therefore it's no longer allowed to use the nixpkgs found in `NIX_PATH` by referencing it like ``. + +Output of a Flake is an arbitrary [[Zettelkast/Index/Nix]] value such as a package, [[NixOS]] module or library function. +Commands `nix build` and `nix shell` will build the output `packages..default` unless we specify another output, for example: `nix shell .#checks.aarch64-linux.build`. + +--- +[Flakes Wiki](https://nixos.wiki/wiki/Flakes) \ No newline at end of file diff --git a/buffer/Nixpkgs Overlays.md b/buffer/Nixpkgs Overlays.md new file mode 100644 index 0000000..e69de29 diff --git a/buffer/Nova Scheduler.md b/buffer/Nova Scheduler.md new file mode 100644 index 0000000..1f58400 --- /dev/null +++ b/buffer/Nova Scheduler.md @@ -0,0 +1,2 @@ +Applies Filters to filters compute hosts that are not usable until a list remains of usable compute hosts. +Filters have different costs, thus it's a good idea to put lightweight filters first as to reduce the load on the heavyweight ones. \ No newline at end of file diff --git a/buffer/Ruby gems nixpkgs.md b/buffer/Ruby gems nixpkgs.md new file mode 100644 index 0000000..e69de29 diff --git a/buffer/Shell.nix python.md b/buffer/Shell.nix python.md new file mode 100644 index 0000000..7dabd4d --- /dev/null +++ b/buffer/Shell.nix python.md @@ -0,0 +1,15 @@ +https://nixos.org/manual/nixpkgs/stable/#python + +```nix +{ pkgs ? import {}}: + +pkgs.mkShell { + packages = [ pkgs.virtualenv ]; +} +``` + +```nix +with import {}; +( +let my_toolz = python311.pkgs.buildPythonPackage rec { pname = "toolz"; version = "0.10.0"; pyproject = true; src = fetchPypi { inherit pname version; hash = "sha256-CP3V73yWSArRHBLUct4hrNMjWZlvaaUlkpm1QP66RWA="; }; nativeBuildInputs = [ python311.pkgs.setuptools python311.pkgs.wheel ]; # has no tests doCheck = false; meta = { homepage = "https://github.com/pytoolz/toolz/"; description = "List processing tools and functional utilities"; # [...] }; }; in python311.withPackages (ps: with ps; [ numpy my_toolz ]) ).env +``` \ No newline at end of file diff --git a/buffer/Timings VPS.md b/buffer/Timings VPS.md new file mode 100644 index 0000000..51857df --- /dev/null +++ b/buffer/Timings VPS.md @@ -0,0 +1,4 @@ +10 VPS: avg ms over 100 reqs: 225 ms +20 VPS: first request: 247 ms. avg ms over 100 reqs: 203 ms +50 VPS: first request: 259 ms. avg ms over 100 reqs: 220 ms +101 VPS: first request: 264 ms. avg ms over 100 reqs: 221 ms diff --git a/buffer/Updates ansible ad-hoc.md b/buffer/Updates ansible ad-hoc.md new file mode 100644 index 0000000..2b8514c --- /dev/null +++ b/buffer/Updates ansible ad-hoc.md @@ -0,0 +1,19 @@ +update apt cache: +``` +ansible -m ansible.builtin.apt -a "update_cache=true cache_valid_time=3600" +``` + +update packages: +``` +ansible -m ansible.builtin.apt -a "name=* state=latest" +``` + +run puppet: +``` +ansible -a "/opt/puppetlabs/bin/puppet agent --test" +``` + +reboot: +``` +ansible -m ansible.builtin.reboot -f 1 +``` diff --git a/buffer/Zoner Migration.md b/buffer/Zoner Migration.md new file mode 100644 index 0000000..dc61370 --- /dev/null +++ b/buffer/Zoner Migration.md @@ -0,0 +1 @@ +* Kernel installation \ No newline at end of file diff --git a/daily/2024-08-21.md b/daily/2024-08-21.md new file mode 100644 index 0000000..7408220 --- /dev/null +++ b/daily/2024-08-21.md @@ -0,0 +1,27 @@ +Need to start learning to take notes consistently. My idea now, to kick-off this process, is to open a daily note in obsidian every day at the start of the day in which I will keep crude, quick notes. +Then at the end of the day I shall take some time to go over the notes and refine them. Not yet sure if that refinement will already be the end result or if i should go over refined notes again at maybe the end of each week to see if they really stick. +I should commit notes to git to save them. + +Use taskwarrior to keep track of todo's. +`task [ | ]` +commands can be abbreviated as long as they dont become ambigious. +Tasks can be recurring. +See `man task`, specially the CONTEXT section, because i'm always confused about the context, `task context none` to unset the damn thing. +Annotate tasks that are critical with the critical tag, `task annotate +critical` or `task add +critical blaat` +Upgraded to taskwarrior3. Should set-up a task server to synchronize tasks to so I don't lose all of them if my laptop dies. + +Don't forget to always read man pages. Maybe I should create a detailed note about how to use man pages. + +I will start going to the office full-time from now on. +I should make sure my Obsidian notes and taskwarrior tasks are kept safely in a git repo in case i lose my laptop.l + +Today I learned that we can influence the output of `rabbitmqctl list_queues` , we can append it with keywords of columns that it should show, this also allows us to reorder them to set those pesky names on the end to have nicer formatting. +`rabbitmqctl list_queues messages consumers name` shows messages accumulated in Q and the number of consumers it has and then ends with the name. Of course this is explained in the manpage which I should read more often as noted before. + +I should ask for a diagram of the current systems and take note of it, e.g what is OneCRM / OneHOP / OneHome and all that. + +To upgrade a single package using apt we can use `apt-get install --only-upgrade `. + +Need to "relearn" to design stuff and document it. + +Designing structures and a mechanism to return and store info about individual disk backups, we can send that as parent when making incremental backups. Currently we fetch parent reference from checkpoint, which in case of volume's doesn't work of course. It also breaks if, on the testpod, we reset all backups etc but dont do so with all checkpoints. \ No newline at end of file diff --git a/daily/2024-08-22.md b/daily/2024-08-22.md new file mode 100644 index 0000000..fd1531c --- /dev/null +++ b/daily/2024-08-22.md @@ -0,0 +1,25 @@ +Woke up full of motivation to go to the office. Asked my honey if it's okay to join her by train "is there enough time left?", "yeah" she replied. Then when I come downstairs and she asks me if I can be fast, I tell her maybe it's better you go then bc i worry I will not be able to. Right away she storms off mad and angry... My motivation gone, so I'll work from home.. + +Went to the office anyway by motorcycle, cannot feel like I'm waking up when staying at home anymore. + +**MermaidJS ZenUML** +Optional **Title** +**Participants** can be declared when used or at the start. +**Annotators** give **participants** a special icon, defined at the doc site. +**Aliases** give a short **participant** name a more descriptive name when rendered, e.g: A as Alice <- Alice will be rendered, but the code can use A. +**Messages** between **participants** can be **sync, async, creation or reply**. +**Sync** use A.\ have a block {} for nested messages +**Async** use an arrow A->B: How are you? +**Creation** new keyword new A(optional params) +**Reply** three ways to define: +* Assign var from **Sync** message, e.g: OptionalType a = A.SyncMessage() +* Return A.SyncMessage { return blaat } +* @return or @reply on an **async** message +**Nesting** can be done on both creation and sync messages using blocks {}. +**Comments** can be added using `// comment` and support markdown. +**Loops** can be defined using keywords: **while, for, foreach and loop**. +**Alternative** paths can be sequenced using **if, else** statements. if(blaat) { A.syncMessage(B) } +**Opt** fragments rendered via `opt { ... }`. This can be useful for optional responses or paths. +**Parallel** paths can be defined using `par { ... }`. +**Try/catch/finally** statements are supported as well. +**@Starter(participant)** to make the line start from a **participant** \ No newline at end of file diff --git a/daily/2024-08-23.md b/daily/2024-08-23.md new file mode 100644 index 0000000..6f41ca2 --- /dev/null +++ b/daily/2024-08-23.md @@ -0,0 +1,6 @@ +Discussed about Automatic Evac (HA). We were unsure about what to do when a local storage goes down. Do we restore the instances from backups to a new node? In that case a DB server might lose important transtactions. So we could also wait until it is fixed. + +Would like Rutger to explain the Freenet BGP load balancing setup in more detail. How do the routers work, what are all those interfaces attached to them? + +A local storage disk backup is stored as a QCOW2 image. An incremental has a relationship to its parent, because they neged to be rebased onto each other. +A volume disk backup is stored as raw data and is accompanied by a file of checksums per block. The extra file is used both to track dirtied blocks for incremental backup. \ No newline at end of file diff --git a/daily/2024-08-26.md b/daily/2024-08-26.md new file mode 100644 index 0000000..a91a1c9 --- /dev/null +++ b/daily/2024-08-26.md @@ -0,0 +1 @@ +Nothing of note \ No newline at end of file diff --git a/daily/2024-08-27.md b/daily/2024-08-27.md new file mode 100644 index 0000000..eb75d3f --- /dev/null +++ b/daily/2024-08-27.md @@ -0,0 +1,11 @@ +Changed a few things in the backup service: +* No longer delete all checkpoints when we make a full backup + * TODO: make sure we delete the checkpoint corresponding to a backup when the backup is deleted. + * TODO: Gracefully handle all checkpoints being deleted by openstack +* No longer explicitly specify "incremental" bool, just make it a best effort attempt. + * Still need to work out restores + + +When can we reboot n01.compute vps1-cph8. Its uptime is already 300 days. + +Short call with Jakub. Their priorities have shifted again, the focus on backup will be moved to improving performance of OneHome. They plan to synchronize data from OpenStack to OneHome so they can serve it faster. He asked me whether the customer can influence OpenStack state from within their VM. I told him that probably the only thing they can do to influence OpenStack is shutdown their VM. \ No newline at end of file diff --git a/daily/2024-08-28.md b/daily/2024-08-28.md new file mode 100644 index 0000000..ac0cac1 --- /dev/null +++ b/daily/2024-08-28.md @@ -0,0 +1 @@ +Had a meeting about onehome performance, they query everything in existence for a customer because of their graphQL workflow. they want to now sync everything in existence to a table so their gQL is fast again. \ No newline at end of file diff --git a/daily/2024-08-29.md b/daily/2024-08-29.md new file mode 100644 index 0000000..e69de29 diff --git a/daily/2024-09-03.md b/daily/2024-09-03.md new file mode 100644 index 0000000..1d8a68e --- /dev/null +++ b/daily/2024-09-03.md @@ -0,0 +1 @@ +one on one Rutger; diff --git a/daily/2024-09-10.md b/daily/2024-09-10.md new file mode 100644 index 0000000..07ff5ba --- /dev/null +++ b/daily/2024-09-10.md @@ -0,0 +1 @@ +EYQBGNF95VORXXVVJ6NKFZF expressVPN \ No newline at end of file diff --git a/daily/2024-09-30.md b/daily/2024-09-30.md new file mode 100644 index 0000000..fef578b --- /dev/null +++ b/daily/2024-09-30.md @@ -0,0 +1 @@ +- Check freenetvps gobs \ No newline at end of file diff --git a/daily/2024-10-02.md b/daily/2024-10-02.md new file mode 100644 index 0000000..64c611f --- /dev/null +++ b/daily/2024-10-02.md @@ -0,0 +1,6 @@ +* Fixed n06 testpod, due to installing stuff via pip we had some conflicting packages being used. Pip has been purged and stuff seems to work normally now. +* Investigated DNS issues on testpod lb with Erik. +* Fixed some small issues in the backup service + * Deleted servers couldn't be removed from the periodic backup, that is now fixed. + * Less noisy logging by moving some stuff to debug level. +* Deployed image_id change to prod \ No newline at end of file diff --git a/interviews/Interview Mohammed Al-Mahdawi.md b/interviews/Interview Mohammed Al-Mahdawi.md new file mode 100644 index 0000000..7c0ab8c --- /dev/null +++ b/interviews/Interview Mohammed Al-Mahdawi.md @@ -0,0 +1,7 @@ +Bekendheid met virtualisatie? Libvirt? QEMU? +Puppet, Ansible, chef? +Heeft Erlang geprogrammeerd? BEAM tunen/beheren? RabbitMQ? +Gezien vooral functioneel programmeren op CV: Bekendheid met OOP concepten? Ken je bijv. het repository pattern? +Weet je wat een test piramide is? + - Wat is het verschil tussen unit tests en integratie tests? + diff --git a/interviews/Interview Patrick Spek.md b/interviews/Interview Patrick Spek.md new file mode 100644 index 0000000..6f86ea9 --- /dev/null +++ b/interviews/Interview Patrick Spek.md @@ -0,0 +1,21 @@ +Wat wil ik weten? +* Wat zijn ze z'n hobbies? Is hij in zijn vrije tijd ook bezig met zelfontwikkeling? +* Is hij gepassioneerd over software ontwikkeling of is het iemand die dit doet omdat het goed verdiend? + +"They wanted better insights into how the mail service of their platform was used, so I set up some systems to keep better details. I also configured DMARC and made sure those reports were properly analyzed." + + +Wat gaan we doen? +Ff praten, wie ben je, waar kom je vandaan? +Daarna, CV erbij, vragen over stellen? + +Wat is de reden dat je weg wilt? +Waar ben je het meest trots op? + +openstack ciso, aws, aws nieuwe aws + +geen webcam.. meh + +is nu lead, word dat niet meer, wat vind je ervan? + +veel ervaring perl, is nu golang aan het leren \ No newline at end of file diff --git a/interviews/Vragenlijst.md b/interviews/Vragenlijst.md new file mode 100644 index 0000000..08e2f89 --- /dev/null +++ b/interviews/Vragenlijst.md @@ -0,0 +1,7 @@ +- Ben je bekend met scrum, agile, kanban, jira etc? + + +Technische vragen: +threading, race conditions, deadlocks +message queue +- Kun je uitleggen hoe een binary search werkt \ No newline at end of file diff --git a/refined/Group.ONE Infrastructure.md b/refined/Group.ONE Infrastructure.md new file mode 100644 index 0000000..1d9ba33 --- /dev/null +++ b/refined/Group.ONE Infrastructure.md @@ -0,0 +1 @@ +I want to have an overview of systems and what they are responsible for. Example, what is OneHOP or OneHome and what do they do. I plan to write that down in this document. \ No newline at end of file diff --git a/refined/Man pages.md b/refined/Man pages.md new file mode 100644 index 0000000..901be15 --- /dev/null +++ b/refined/Man pages.md @@ -0,0 +1,3 @@ +**2024-08-21 18:07:20** +I need to more consistently read man pages. Example is `man task` to see how taskwarrior works, after reading it today I found that it is actually quite easy. +They often contain good information on how to use a certain tool. \ No newline at end of file diff --git a/refined/Note taking.md b/refined/Note taking.md new file mode 100644 index 0000000..2a47666 --- /dev/null +++ b/refined/Note taking.md @@ -0,0 +1,7 @@ +**2024-08-21 17:59:00** +I want to become better at taking notes consistently in the hope that I forget less important things and become better overall at managing knowledge. +To try and create the habit I will open a new daily note in Obsidian at the start of the day and sit down at the end of the day to refine anything written down into a more permanent form like this one. I'm hoping that by doing this consistently I will more often write down ideas, information, etc. during the day, rather than forget about it. + +After refining the daily notes, I should commit and push changes to a remote git repo that is also regularly backed up so I keep all this knowledge safe. + +I'm not yet sure if and how I incorporate this into a "zettelkast", something I did start before but never really stuck. I will need to do more research into this, and note taking overall. \ No newline at end of file diff --git a/refined/RabbitMQ.md b/refined/RabbitMQ.md new file mode 100644 index 0000000..e9c94c5 --- /dev/null +++ b/refined/RabbitMQ.md @@ -0,0 +1,2 @@ +**2024-08-21 18:09** +With `rabbitmqctl list_queues` we can add columns to show. So instead of the default layout which shows messages in the Q after the name and is horrible we can specify stuff like: `rabbitmqctl list_queues messages consumers name`. There are more options to be found in `man rabbitmqctl`. diff --git a/refined/TaskWarrior (ToDo).md b/refined/TaskWarrior (ToDo).md new file mode 100644 index 0000000..6002fde --- /dev/null +++ b/refined/TaskWarrior (ToDo).md @@ -0,0 +1,3 @@ +**2024-08-21 18:03:00** +I want to better keep track of what i'm doing, for that purpose I will use taskwarrior. For usage see `man task`. +Adding a task is done by `task add`, to modify it `task modify` . I use priorities, they can be set on a new or existing task with `priority:H/M/L`. diff --git a/zettelkast/Index/Computer Networking.md b/zettelkast/Index/Computer Networking.md new file mode 100644 index 0000000..0993b44 --- /dev/null +++ b/zettelkast/Index/Computer Networking.md @@ -0,0 +1,3 @@ +[[300820231007 - OVN]] +[[310820231706 - Networking One Giant Compute]] +[[310820231618 - Open VSwitch (OVS)]] diff --git a/zettelkast/Index/Domain Driven Design.md b/zettelkast/Index/Domain Driven Design.md new file mode 100644 index 0000000..f926e78 --- /dev/null +++ b/zettelkast/Index/Domain Driven Design.md @@ -0,0 +1,2 @@ +[[290220240839 - Domain Modeling]] +[[290220241543 - Aggregates]] diff --git a/zettelkast/Index/Golang.md b/zettelkast/Index/Golang.md new file mode 100644 index 0000000..2da2043 --- /dev/null +++ b/zettelkast/Index/Golang.md @@ -0,0 +1,3 @@ +The Go programming language + +[[010420240957 - spf13 cobra]] \ No newline at end of file diff --git a/zettelkast/Index/Nix.md b/zettelkast/Index/Nix.md new file mode 100644 index 0000000..f107402 --- /dev/null +++ b/zettelkast/Index/Nix.md @@ -0,0 +1 @@ +[[010720231037 - With function]] \ No newline at end of file diff --git a/zettelkast/Index/Python3.md b/zettelkast/Index/Python3.md new file mode 100644 index 0000000..6a8c99a --- /dev/null +++ b/zettelkast/Index/Python3.md @@ -0,0 +1,3 @@ +The python3 programming language notes.' + +[[032220240826 - Python3 Escape Sequences]] \ No newline at end of file diff --git a/zettelkast/Index/Software Architecture.md b/zettelkast/Index/Software Architecture.md new file mode 100644 index 0000000..590757e --- /dev/null +++ b/zettelkast/Index/Software Architecture.md @@ -0,0 +1,2 @@ +[[Domain Driven Design]] +[[022920240849 - Layered Architecture]] \ No newline at end of file diff --git a/zettelkast/Index/_Index.md b/zettelkast/Index/_Index.md new file mode 100644 index 0000000..05d5d74 --- /dev/null +++ b/zettelkast/Index/_Index.md @@ -0,0 +1,7 @@ +[[Software Architecture]] +[[Python3]] +[[Golang]] +[[Zettelkast/Index/Nix]] + +[[300820231007 - OVN]] +[[280620231634 - Using Zettelkasten as a thinking tool]] \ No newline at end of file diff --git a/zettelkast/Notes/010420240957 - spf13 cobra.md b/zettelkast/Notes/010420240957 - spf13 cobra.md new file mode 100644 index 0000000..e867fe6 --- /dev/null +++ b/zettelkast/Notes/010420240957 - spf13 cobra.md @@ -0,0 +1,13 @@ +Cobra is a [[Golang]] library for creating command-line interfaces. + +CLI for generating stuff: +``` +go install github.com/spf13/cobra-cli@latest +``` + +The library itself: +``` +go get -u github.com/spf13/cobra@latest + +import "github.com/spf13/cobra" +``` diff --git a/zettelkast/Notes/010720231037 - With function.md b/zettelkast/Notes/010720231037 - With function.md new file mode 100644 index 0000000..d646a8f --- /dev/null +++ b/zettelkast/Notes/010720231037 - With function.md @@ -0,0 +1,18 @@ +#nix-lang + +The `with` function brings all attributes from a given set, e.g nixpkgs, into the local scope. Making them accessible as if they were declared in the same file. + +An example, bringing everything from nixpkgs into scope: +``` +with import ; +with python310Packages; <-- declared in nixpkgs + +buildPythonPackage <-- declared in python310Packages +``` + +The import statement is required here because imports a nix expression from another source, in this case nixpkgs. +It is not required at line two, because python310Packages itself is already in the local scope. + + +--- +[Nix Manual](https://nixos.org/manual/nix/stable/language/index.html) diff --git a/zettelkast/Notes/010920231133 - OpenFlow.md b/zettelkast/Notes/010920231133 - OpenFlow.md new file mode 100644 index 0000000..4e0bd08 --- /dev/null +++ b/zettelkast/Notes/010920231133 - OpenFlow.md @@ -0,0 +1,2 @@ +`man ovs-fields (7)` explains more about OpenFlow matches. +`man ovs-ofctl (8)` explains more about OpenFlow actions. diff --git a/zettelkast/Notes/010920231434 - (UNIX) Watch.md b/zettelkast/Notes/010920231434 - (UNIX) Watch.md new file mode 100644 index 0000000..dafeb80 --- /dev/null +++ b/zettelkast/Notes/010920231434 - (UNIX) Watch.md @@ -0,0 +1 @@ +`watch (1)` periodically executes the executable on argv. It can be used to reload the output of a command, like `sudo watch ovs-dpctl dump-flows` . \ No newline at end of file diff --git a/zettelkast/Notes/022920240849 - Layered Architecture.md b/zettelkast/Notes/022920240849 - Layered Architecture.md new file mode 100644 index 0000000..d551132 --- /dev/null +++ b/zettelkast/Notes/022920240849 - Layered Architecture.md @@ -0,0 +1,7 @@ +Layered architecture is the art of dividing an application into different layers and applying rules to decide which code goes to which layer. +Examples of layered architecture are MVC. + +Another example is: +- Business layer ([[290220240839 - Domain Modeling]]): Encapsulates all business logic +- [[290220241412 - Service Layer]]: Encapsulate all application use-cases and manages orchestration before handing over to the domain layer. +- Interface layer: E.g Flask controllers, CLI, etc. They depend on the service layer. \ No newline at end of file diff --git a/zettelkast/Notes/022920240901 - Repository Pattern.md b/zettelkast/Notes/022920240901 - Repository Pattern.md new file mode 100644 index 0000000..ef6a879 --- /dev/null +++ b/zettelkast/Notes/022920240901 - Repository Pattern.md @@ -0,0 +1 @@ +A simplifying abstraction over data storage allowing to decouple the business layer from the data layer in a [[022920240849 - Layered Architecture]] and making it easier to test as well. \ No newline at end of file diff --git a/zettelkast/Notes/032220240826 - Python3 Escape Sequences.md b/zettelkast/Notes/032220240826 - Python3 Escape Sequences.md new file mode 100644 index 0000000..f63c208 --- /dev/null +++ b/zettelkast/Notes/032220240826 - Python3 Escape Sequences.md @@ -0,0 +1,21 @@ +Escape sequences encode hard to type characters, e.g a tab \\t. + +Table of escape sequences: + +| Escape | What it does | +| ---------- | ----------------------------------------------------------- | +| \\\ | Backslash (\\) | +| \\' | Single-quote (') | +| \\" | Double-quote (") | +| \a | ASCII bell (BEL) | +| \b | ASCII backspace (BS) | +| \f | ASCII formfeed (FF) | +| \n | ASCII linefeed (LF) | +| \N{name} | Character named name in the Unicode database (Unicode only) | +| \r | Carriage return (CR) | +| \t | Horizontal tab (TAB) | +| \uxxxx | Character with 16-bit hex value xxxx | +| \Uxxxxxxxx | Character with 32-bit hex value xxxxxxxx | +| \v | ASCII vertical tab (VT) | +| \ooo | Character with octal value ooo | +| \xhh | Character with hex value hh | diff --git a/zettelkast/Notes/060620241559 - Adjacency Lists.md b/zettelkast/Notes/060620241559 - Adjacency Lists.md new file mode 100644 index 0000000..c2e9003 --- /dev/null +++ b/zettelkast/Notes/060620241559 - Adjacency Lists.md @@ -0,0 +1,3 @@ +Adjacency list is a self-referential relationship. In SQLAlchemy we can achieve this by creating a ForeignKey on the table to itself. In the mapper we can add a relationship property and specify remote_side=[table.c.id]. + +This is what I used to give backups a "base" reference. \ No newline at end of file diff --git a/zettelkast/Notes/20240613112 - Aggregates should protect invariants.md b/zettelkast/Notes/20240613112 - Aggregates should protect invariants.md new file mode 100644 index 0000000..7e4d67c --- /dev/null +++ b/zettelkast/Notes/20240613112 - Aggregates should protect invariants.md @@ -0,0 +1,5 @@ +An invariant should be designed in such a way that it can enforce an invariant. This means even if they require another aggregate to do so, therefore it's allowed to reference other aggregates. + +--- +Related: +- [[290220241543 - Aggregates]] \ No newline at end of file diff --git a/zettelkast/Notes/202406131159 - Invariant.md b/zettelkast/Notes/202406131159 - Invariant.md new file mode 100644 index 0000000..0109c04 --- /dev/null +++ b/zettelkast/Notes/202406131159 - Invariant.md @@ -0,0 +1,5 @@ +An invariant is a condition that simply must always be true. + +--- +Related: +- [[20240613112 - Aggregates should protect invariants]] \ No newline at end of file diff --git a/zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md b/zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md new file mode 100644 index 0000000..fb1bf77 --- /dev/null +++ b/zettelkast/Notes/280620231200 - Direct Attach Cable -DAC.md @@ -0,0 +1,9 @@ +#datacenter + +A direct attach cable is used in data center environments to connect hardware such as servers, routers and switches. +Has a [[280620231201 - Transceiver]] on both ends. +Used most commonly to connect hardware in a rack to a switch in the top of a rack. +Can be up to 7 meter. +They are a lot cheaper than fiber. + +--- diff --git a/zettelkast/Notes/280620231201 - Transceiver.md b/zettelkast/Notes/280620231201 - Transceiver.md new file mode 100644 index 0000000..7bba020 --- /dev/null +++ b/zettelkast/Notes/280620231201 - Transceiver.md @@ -0,0 +1,5 @@ +#datacenter + +A transceiver is an electronic device which can both transmit and receive signals. + +--- diff --git a/zettelkast/Notes/280620231556 - Svelte.md b/zettelkast/Notes/280620231556 - Svelte.md new file mode 100644 index 0000000..0e9d077 --- /dev/null +++ b/zettelkast/Notes/280620231556 - Svelte.md @@ -0,0 +1,9 @@ +#web-development #svelte + +Svelte is a way to write UI components. It is a compiled language and compiles into JavaScript that can be run to render HTML for the page and CSS to style it. +It's not a full framework and thus would require additional components to build a complete application. +Therefore it can be used as a nice way to quickly build a simple web page using reusable components but with additional tools like [[280620231557 - SvelteKit]] it can be used to build an entire application. + +--- +[SvelteKit Documentation](https://kit.svelte.dev/docs/introduction#what-is-svelte) + diff --git a/zettelkast/Notes/280620231557 - SvelteKit.md b/zettelkast/Notes/280620231557 - SvelteKit.md new file mode 100644 index 0000000..fd2f36a --- /dev/null +++ b/zettelkast/Notes/280620231557 - SvelteKit.md @@ -0,0 +1,7 @@ +#web-development #svelte + +SvelteKit is a framework for developing applications using [[280620231556 - Svelte]]. +It provides features like routing, server-side rendering and enables us to conform to best practices, like specific build optimizations, offline support, preloading pages, + +--- +[SvelteKit Documentation](https://kit.svelte.dev/docs/introduction) \ No newline at end of file diff --git a/zettelkast/Notes/280620231621 - Knowledge vs Information.md b/zettelkast/Notes/280620231621 - Knowledge vs Information.md new file mode 100644 index 0000000..183eb35 --- /dev/null +++ b/zettelkast/Notes/280620231621 - Knowledge vs Information.md @@ -0,0 +1,8 @@ +#zettelkasten #note-taking + +The body of a Zettel [[280620231634 - Using Zettelkasten as a thinking tool]] should contain knowledge. +Information is just static lifeless data ready to be interpreted. Knowledge is information with added context and relevance. +It should still be relevant in the same context 10 years from now as it was when writing it. If we just capture some information. Without the context our later selves will probably look at it and wonder WTF it was for. + +--- +[Zettelkasten Introduction](https://zettelkasten.de/introduction/#the-body-of-the-zettel) \ No newline at end of file diff --git a/zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md b/zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md new file mode 100644 index 0000000..ec7454d --- /dev/null +++ b/zettelkast/Notes/280620231634 - Using Zettelkasten as a thinking tool.md @@ -0,0 +1,11 @@ +#zettelkasten #note-taking + +Zettelkasten is a method of note taking that can be seen as a thinking tool. The idea is that thoughts are captured in atomic notes (Zettel) and reference other such notes creating a graph. The graph may later reveal connections between topics that weren't visible before. + +The main important things are that: +- A zettel has a unique identifier +- A piece of knowledge +- Some references to whatever this knowledge came from ( or none if it's just a thought of our own ) + +--- +[Zettelkasten introduction](https://zettelkasten.de/introduction/) \ No newline at end of file diff --git a/zettelkast/Notes/290220240839 - Domain Modeling.md b/zettelkast/Notes/290220240839 - Domain Modeling.md new file mode 100644 index 0000000..9fe7f7f --- /dev/null +++ b/zettelkast/Notes/290220240839 - Domain Modeling.md @@ -0,0 +1,5 @@ +Domain modeling can be used to define the business layer in a [[022920240849 - Layered Architecture]]. This is all the business logic. It should be easy to understand and easy to change as this is the code that changes the most frequently. + +A domain model can be comprised out of [[290220240843 - Value Object]], [[290220240842 - Entity]], Aggregates and functions that encompass domain procedures that do not necessarily fit in an object. +It is also fine to include Exceptions in the domain, e.g stock can go out of stock and thus when we would allocate an order it would raise an OutOfStock exception. + diff --git a/zettelkast/Notes/290220240842 - Entity.md b/zettelkast/Notes/290220240842 - Entity.md new file mode 100644 index 0000000..41879da --- /dev/null +++ b/zettelkast/Notes/290220240842 - Entity.md @@ -0,0 +1 @@ +An Entity is an object with a unique identity. E.g a Person has a unique identity (for example his name). \ No newline at end of file diff --git a/zettelkast/Notes/290220240843 - Value Object.md b/zettelkast/Notes/290220240843 - Value Object.md new file mode 100644 index 0000000..10a9afa --- /dev/null +++ b/zettelkast/Notes/290220240843 - Value Object.md @@ -0,0 +1,15 @@ +A Value Object is a domain object that has no unique identity but if any of its properties change it is no longer the same. An example can be made with money. + +```py +from dataclasses import dataclass + +@dataclass(frozen=True) +class Money: + type: str + value: int + +Money("Euro", 10) != Money("Euro", 9) +Money("GBP", 10) != Money("Euro", 10) +``` + +Thus such an object is a perfect candidate for immutability. With python we can add @dataclass(frozen=True). Frozen=true makes it immutable. \ No newline at end of file diff --git a/zettelkast/Notes/290220241409 - TDD High and Low Gear.md b/zettelkast/Notes/290220241409 - TDD High and Low Gear.md new file mode 100644 index 0000000..218ad00 --- /dev/null +++ b/zettelkast/Notes/290220241409 - TDD High and Low Gear.md @@ -0,0 +1,3 @@ +A nice idea of TDD is that of High and Low Gear. What they mean is that when you're just starting out you will write a lot of fine grained unit tests to get going, e.g against the domain layer. +Once you're at the point that you have encapsulated all use cases in a nice service layer, you can move all the specific domain tests to the service layer. This makes it easier to make modifications to the domain model. +If then you really need to make big changes, you write fine grained unit tests for those again, until you've encapsulated them in the service layer. \ No newline at end of file diff --git a/zettelkast/Notes/290220241412 - Service Layer.md b/zettelkast/Notes/290220241412 - Service Layer.md new file mode 100644 index 0000000..08e9782 --- /dev/null +++ b/zettelkast/Notes/290220241412 - Service Layer.md @@ -0,0 +1,3 @@ +The idea of the service layer is that it handles most orchestration concerns for a use case of the application such as wiring together repositories and fetching required domain models. Basically it sets everything up so that we have everything needed to have the domain do its work properly and then persist the changes. + +This takes away this kind of logic from the entrypoints like API controllers making those easier to test as they only be concerned with doing web stuff, e.g fetching the data from the request and making sure we form a correct response. That allows us to just run an end to end test for the happy an all unhappy paths on the controller, the rest of the application functionality is covered by the service layer. \ No newline at end of file diff --git a/zettelkast/Notes/290220241458 - Unit of Work pattern.md b/zettelkast/Notes/290220241458 - Unit of Work pattern.md new file mode 100644 index 0000000..3ba00cb --- /dev/null +++ b/zettelkast/Notes/290220241458 - Unit of Work pattern.md @@ -0,0 +1,40 @@ +#needs-clarification + +The Unit of Work is an abstraction of the concept of atomic operations. We can have a clear boundary on what work is grouped together and should be committed only if everything succeeded. + +We can use the UoW to remove dependency on storage layer from entrypoints by having the UoW manage the set-up. This makes tests easier. + +For example an SqlAlchemyUoW can wrap an SqlAlchemy Session object and expose only its most thin API: commit and rollback. It can work together as well with a [[022920240901 - Repository Pattern|Repository]]. Using a ContextManager we can make the operations safe by only explicitly having the user of the UoW commit and otherwise when exiting do a rollback: +```py +import abc + +class AbstractUnitOfWork(abc.ABC): + products: AbstractRepository + + def __init__(self, products: AbstractRepository): + self.products = products + + def __exit__(self): + self.rollback() + + @abc.abstractmethod + def commit(self): + pass + + @abc.abstractmethod + def rollback(self): + pass + + +class SqlAlchemyUnitOfWork(AbstractUnitOfWork): + def __init__(self, products: AbstractRepository, sessionmaker): + self._session = sessionmaker() + super().__init__(some_repo) + + def commit(self): + self._session.commit() + + def rollback(self): + self._session.rollback() +``` + diff --git a/zettelkast/Notes/290220241543 - Aggregates.md b/zettelkast/Notes/290220241543 - Aggregates.md new file mode 100644 index 0000000..2001826 --- /dev/null +++ b/zettelkast/Notes/290220241543 - Aggregates.md @@ -0,0 +1,5 @@ +An Aggregate is a single cohesive collection of domain objects. An aggregate must be consistent within a single transaction. + +--- +Related: +- [[20240613112 - Aggregates should protect invariants]] \ No newline at end of file diff --git a/zettelkast/Notes/300620231000 - Running programs in the background with tmux.md b/zettelkast/Notes/300620231000 - Running programs in the background with tmux.md new file mode 100644 index 0000000..b338da5 --- /dev/null +++ b/zettelkast/Notes/300620231000 - Running programs in the background with tmux.md @@ -0,0 +1,8 @@ +#tmux + +Tmux can be used to run programs in the background by opening a tmux session and starting the program. It is then possible to detach from that session while the program keeps running. + +It's also possible to directly start a program in its own session: + tmux new-session obsidian or leader+A $ and then new-session obsidian. + +--- diff --git a/zettelkast/Notes/300820231007 - OVN.md b/zettelkast/Notes/300820231007 - OVN.md new file mode 100644 index 0000000..b0ca07a --- /dev/null +++ b/zettelkast/Notes/300820231007 - OVN.md @@ -0,0 +1,32 @@ +#network #networking #ovn #virtual #cloud #dc #engineering #software #emulation #gateway #tunnel #tunneling #router #routing #switch #switching #ovs + +--- + +OVN is a software that enables the creation of virtual networks. Under the hood it uses OVS (virtual switch) and a tunneling protocol to emulate networking devices. These virtual networks run on top of the normal physical infrastructure. It is useful in a cloud environment with virtual machines because it is easy to scale because we can use the singular physical infrastructure and create many seperate virtual networks with string of simple commands or managed by a configuration management system. + +OVN complements features provided by [[OVS]] to enable defining networks entirely in software on top of and unaware of the underlaying physical network. +This is achieved by using tunnels or other encapsulations. Therefore IP addresses and other addresses can overlap with the physical network as they are unaware of each other. + +A software defined network as described above is called an [[OVN Logical Network]]. + +A [[OVN Gateway]] extends a tunnel-based [[OVN Logical Network]] into the physical network by forwarding packets bi-directionally. This allows non-virtualized devices to participate in the logical network as well. + +--- + +OVN has two databases which act as interfaces for components. The NorthBound DB handles translation from higher level CMS concepts into intermediary OVN concepts with similar naming that are used to be translated to lower level flows stored in the SouthBound DB. Those flows + +**Why the NorthBound DB?** +Probably it exists to make it easy to integrate OVN into cloud management systems such as OpenStack because the tables and structures match those of higher level cloud components. OVN is then responsible for doing the complicated work of translating those into the lower level flows. + +**There is more than one table in each of the databases, how can we show which ones are there and what they contain?** +E.g the logical_switch_port table in nb db (nbctl list logical_switch_port) +From `man ovn-nbctl` : "For a list of tables and their columns, see ovn-nb(5) or see the table listing from the --help option." + +**What are dhcpv4_options on a logical switch port?** + +A Logical Datapath is the lower level concept in the SB DB, which matches the higher level Logical Switch. It is implemented by flows dictacting how packets should flow. We can see the given datapaths via `ovn-sbctl list datapath_binding`. + +`ovs-dpctl` is the interface to OVS datapaths. With `ovs-dpctl dump-flows` we can get a glimpse of the in-kernel flow cache, e.g see what's going on. + +**What is the TTL (Time To Live) on an IP packet? Why is it decreased by a router?** + diff --git a/zettelkast/Notes/310820231448 - Neutron OVN.md b/zettelkast/Notes/310820231448 - Neutron OVN.md new file mode 100644 index 0000000..7df0888 --- /dev/null +++ b/zettelkast/Notes/310820231448 - Neutron OVN.md @@ -0,0 +1 @@ +An OpenStack Network is a logical switch, it corresponds to an [[OVN Logical Switch]] \ No newline at end of file diff --git a/zettelkast/Notes/310820231618 - Open VSwitch (OVS).md b/zettelkast/Notes/310820231618 - Open VSwitch (OVS).md new file mode 100644 index 0000000..d4664d4 --- /dev/null +++ b/zettelkast/Notes/310820231618 - Open VSwitch (OVS).md @@ -0,0 +1,3 @@ +OVS is a direct replacement for [[LinuxBridge]] an L2 switch. Linux bridge was not designed with a fast changing landscape of many VMs that need to communicate with each other from many different hosts. OVS is designed with that in mind.. + +OVS makes it possible to migrate configuration and live network state between two hypervisors by tracking current network state in OVSDB. The OVSDB supports triggers which make it possible to respond to changes of various aspects of the network. \ No newline at end of file diff --git a/zettelkast/Notes/310820231706 - Networking One Giant Compute.md b/zettelkast/Notes/310820231706 - Networking One Giant Compute.md new file mode 100644 index 0000000..31fd127 --- /dev/null +++ b/zettelkast/Notes/310820231706 - Networking One Giant Compute.md @@ -0,0 +1,3 @@ +Using a [[TCP/IP]] network makes it almost as if two connected computers are working as one. +Like a giant botnet, all hosts working together as a single giant machine trying to bring down a company or network. +Or all our smartphones running hypervisor software creating the biggest cloud ever. \ No newline at end of file -- cgit v1.2.3