summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.trash/15-Jun-2025.md (renamed from daily/15-Jun-2025.md)0
-rw-r--r--Building Skypiea an OpenStack Dashboard.md21
-rw-r--r--Golang.md1
-rw-r--r--IP migration API.md56
-rw-r--r--TCP.md1
-rw-r--r--What are Type Assertions in Go and when to use them.md12
-rw-r--r--What is TCP KeepAlive.md9
-rw-r--r--daily/17-May-2025.md4
-rw-r--r--daily/18-Jun-2025.md1
9 files changed, 104 insertions, 1 deletions
diff --git a/daily/15-Jun-2025.md b/.trash/15-Jun-2025.md
index 8b13789..8b13789 100644
--- a/daily/15-Jun-2025.md
+++ b/.trash/15-Jun-2025.md
diff --git a/Building Skypiea an OpenStack Dashboard.md b/Building Skypiea an OpenStack Dashboard.md
new file mode 100644
index 0000000..a290653
--- /dev/null
+++ b/Building Skypiea an OpenStack Dashboard.md
@@ -0,0 +1,21 @@
+[[OpenStack]]
+
+---
+
+### To JS Framework or not to JS Framework
+I was in doubt whether or not to use a JavaScript framework. I conversed with Gemini about this. I gave the context that I was considering a JavaScript Framework or just using minimal JavaScript with HTML/CSS using HTMX and a Golang backend which I was leaning towards.
+It confirmed my gut feeling that the latter, not using a full blown JavaScript framework, is the good option especially for learning.
+
+So my decision: use purely HTML/CSS with HTMX and a Golang backend that drives it.
+
+### Can I do real-time feedback?
+Using SSE or WebSockets it is possible. HTMX supports this out-of-the box. We can listen for events from OpenStack and then push updates from the server to the client.
+##### SSE or WebSockets?
+SSE is useful when the traffic flows mostly from the server to the client. WebSockets is a full-duplex connection and thus more likely candidate when the client also converses with the server alot.
+In our case I think **SSE** would be the best fit as the client mostly just listens.
+
+#### SSE
+It works by exposing an endpoint of which the connection is kept alive by the backend when a client connects to it. It can then periodically send its events over this connection.
+`Content-Type` header should be set by the server to: `text/event-stream`.
+`Cache-Control` set to `no-cache`. **Not yet sure why. Let's investigate.**
+`Connection` set to `keepalive`. This is to ensure the connection is kept open so we can send our events. \ No newline at end of file
diff --git a/Golang.md b/Golang.md
new file mode 100644
index 0000000..3b3438f
--- /dev/null
+++ b/Golang.md
@@ -0,0 +1 @@
+[[What are Type Assertions in Go and when to use them]] \ No newline at end of file
diff --git a/IP migration API.md b/IP migration API.md
new file mode 100644
index 0000000..c6bd91b
--- /dev/null
+++ b/IP migration API.md
@@ -0,0 +1,56 @@
+---
+tags:
+ - work
+---
+# Previous IP migration API
+Stateful: sqlite db:
+- subnet state (mode: `migrating`)
+- ip state: active location (`CPH|AMS`)
+
+config:
+- LR map file
+- db config
+- tls
+- ip announcement file
+- hosts
+- key
+- user
+IP announcement file.
+
+Flow:
+- Prepare subnet (out-of-band)
+ - Creates a record for the subnet, and puts it in "migrating" mode.
+- Call migrate IP (ip, dest)
+ - Fails if subnet not prepared prior.
+ - Fails if destination not exists.
+ - Fails if invalid ip address
+
+
+# New IP migration API
+
+What is a "link scope"?
+
+API:
+- Prepare subnet : cidr
+- Migrate IP
+ - os set allowed address pair
+ - tun src: add /32
+- Migrate gateway
+
+Kevin meet:
+tunnel-dst vm in openstack
+tunnel-src hardware ding
+puppet op tunnels
+
+stap 1 paars = api doet: op os router route voor elk ip in subnet aanmaken en proxy arp shit per subnet. AllowedAddrPair op port tunnel-dst. In eerste instantie gewoon alle IPs uit het subnet toevoegen.
+
+Beide IPv4 en IPv6 (6 kan iets later)
+
+Alle stappen moeten reversable zijn.
+
+stap 2 roze: test vm, routes op os verwijderen, op src net toevoegen
+stap 3 geel: switch network naar openstack, switch gateway ip
+
+
+**How ARP works**
+Host A thinks it has direct conn to Host B, thus sends ARP request to learn its MAC. \ No newline at end of file
diff --git a/TCP.md b/TCP.md
new file mode 100644
index 0000000..9f3fef8
--- /dev/null
+++ b/TCP.md
@@ -0,0 +1 @@
+[[What is TCP KeepAlive]]
diff --git a/What are Type Assertions in Go and when to use them.md b/What are Type Assertions in Go and when to use them.md
new file mode 100644
index 0000000..d23dd66
--- /dev/null
+++ b/What are Type Assertions in Go and when to use them.md
@@ -0,0 +1,12 @@
+[[Golang]]
+
+---
+**Form**: `w.(http.Flusher)` where `w` is a variable and `http.Flusher` is an interface. We assert here that `w` implements the `http.Flusher` interface.
+
+A *type assertion* has two return values: first the original value of `w` cast to the type your asserting, and second a boolean that we can check to see if the assertion was successful, generally called `ok`.
+i.e.: `flusher, ok := w.(http.Flusher)`. If we don't assign `ok` the program would panic.
+
+### When is this useful?
+In the above example where we assert `w.(http.Flusher)` the original specified type of `w` was a `http.ResponseWriter` as per the function argument definition `func x(w http.ResponseWriter).
+So we would only be able to call the methods that interface exposes. However, the actual object passed as `w` possibly implements a lot more than just that interface, for example, the `http.Flusher` interface.
+By type asserting it and receiving the cast value, we can then call the Flush method on the object. \ No newline at end of file
diff --git a/What is TCP KeepAlive.md b/What is TCP KeepAlive.md
new file mode 100644
index 0000000..6b25179
--- /dev/null
+++ b/What is TCP KeepAlive.md
@@ -0,0 +1,9 @@
+TCP KeepAlive: Keeps TCP Alive.
+
+A timer is set up together with the TCP connection, if the timer reaches zero a probe packet is sent without any data. It has a flag set for ACK. The peer only has to support TCP/IP, not specifically keepalive. If alive it will respond with a zero data packet as well that has the ACK flag set.
+
+Because TCP lets your program handle a stream, not packets, a zero length data packet is not dangerous for the program listening on the socket.
+
+Two use cases for keepalive:
+- Detecting dead peers
+- Prevent disconnects due to inactivity \ No newline at end of file
diff --git a/daily/17-May-2025.md b/daily/17-May-2025.md
index 3729110..7872d2a 100644
--- a/daily/17-May-2025.md
+++ b/daily/17-May-2025.md
@@ -25,4 +25,6 @@ All parts gone: loop forever.
Only condition is like a while x == true;
`range` keyword to loop over a slice or array with `for index, arg := range slice`
-`_` is the blank identifier, thus above if we don' need the index we can put `_`. \ No newline at end of file
+`_` is the blank identifier, thus above if we don' need the index we can put `_`.
+
+**Type assertion**
diff --git a/daily/18-Jun-2025.md b/daily/18-Jun-2025.md
new file mode 100644
index 0000000..c7c35a1
--- /dev/null
+++ b/daily/18-Jun-2025.md
@@ -0,0 +1 @@
+Gin bool required bind fails if false, needs ptr to bool. https://github.com/gin-gonic/gin/issues/814 \ No newline at end of file