diff --git a/README.md b/README.md
deleted file mode 100644
index 9c91375..0000000
--- a/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Eólas
-
-> Eólas is Irish for knowledge or information, especially knowledge gained by
-> experience or practice
-
-This repository contains notes from my autodidactic study of software
-engineering and computer science.
-
-
diff --git a/_img/1.4-Input-Process-Output.png b/_img/1.4-Input-Process-Output.png
deleted file mode 100644
index 9f804e1..0000000
Binary files a/_img/1.4-Input-Process-Output.png and /dev/null differ
diff --git a/_img/3-bit-adder-diagram.png b/_img/3-bit-adder-diagram.png
deleted file mode 100644
index 7d993e7..0000000
Binary files a/_img/3-bit-adder-diagram.png and /dev/null differ
diff --git a/_img/74181aluschematic.png b/_img/74181aluschematic.png
deleted file mode 100644
index 161699e..0000000
Binary files a/_img/74181aluschematic.png and /dev/null differ
diff --git a/_img/DMUX.png b/_img/DMUX.png
deleted file mode 100644
index 02f118d..0000000
Binary files a/_img/DMUX.png and /dev/null differ
diff --git a/_img/FL-Databases-1.5_terminology.gif b/_img/FL-Databases-1.5_terminology.gif
deleted file mode 100644
index 1040c3d..0000000
Binary files a/_img/FL-Databases-1.5_terminology.gif and /dev/null differ
diff --git a/_img/LMC_5.gif b/_img/LMC_5.gif
deleted file mode 100644
index 3399182..0000000
Binary files a/_img/LMC_5.gif and /dev/null differ
diff --git a/_img/MUX.png b/_img/MUX.png
deleted file mode 100644
index ca8b128..0000000
Binary files a/_img/MUX.png and /dev/null differ
diff --git a/_img/Memory-Hierarchy.jpg b/_img/Memory-Hierarchy.jpg
deleted file mode 100644
index 4c9bba8..0000000
Binary files a/_img/Memory-Hierarchy.jpg and /dev/null differ
diff --git a/_img/ORelim1.png b/_img/ORelim1.png
deleted file mode 100644
index 75731b0..0000000
Binary files a/_img/ORelim1.png and /dev/null differ
diff --git a/_img/ORelim2.png b/_img/ORelim2.png
deleted file mode 100644
index 3bb7113..0000000
Binary files a/_img/ORelim2.png and /dev/null differ
diff --git a/_img/Pasted_image_20220319135558.png b/_img/Pasted_image_20220319135558.png
deleted file mode 100644
index 6298a65..0000000
Binary files a/_img/Pasted_image_20220319135558.png and /dev/null differ
diff --git a/_img/Pasted_image_20220319135805.png b/_img/Pasted_image_20220319135805.png
deleted file mode 100644
index 37109dd..0000000
Binary files a/_img/Pasted_image_20220319135805.png and /dev/null differ
diff --git a/_img/Pasted_image_20220319135823.png b/_img/Pasted_image_20220319135823.png
deleted file mode 100644
index 2b5fd00..0000000
Binary files a/_img/Pasted_image_20220319135823.png and /dev/null differ
diff --git a/_img/Pasted_image_20220411082627.png b/_img/Pasted_image_20220411082627.png
deleted file mode 100644
index 82fd434..0000000
Binary files a/_img/Pasted_image_20220411082627.png and /dev/null differ
diff --git a/_img/REST_request-load.png b/_img/REST_request-load.png
deleted file mode 100644
index 74792c2..0000000
Binary files a/_img/REST_request-load.png and /dev/null differ
diff --git a/_img/Screenshot_2020-08-09_at_21.34.48.png b/_img/Screenshot_2020-08-09_at_21.34.48.png
deleted file mode 100644
index bbbb066..0000000
Binary files a/_img/Screenshot_2020-08-09_at_21.34.48.png and /dev/null differ
diff --git a/_img/Screenshot_2021-05-11_at_18.51.02.png b/_img/Screenshot_2021-05-11_at_18.51.02.png
deleted file mode 100644
index 15ee66a..0000000
Binary files a/_img/Screenshot_2021-05-11_at_18.51.02.png and /dev/null differ
diff --git a/_img/Screenshot_2021-05-11_at_18.55.23.png b/_img/Screenshot_2021-05-11_at_18.55.23.png
deleted file mode 100644
index 1da93a9..0000000
Binary files a/_img/Screenshot_2021-05-11_at_18.55.23.png and /dev/null differ
diff --git a/_img/Turing_machines_01.gif b/_img/Turing_machines_01.gif
deleted file mode 100644
index 974e3b3..0000000
Binary files a/_img/Turing_machines_01.gif and /dev/null differ
diff --git a/_img/access-key-aws.png b/_img/access-key-aws.png
deleted file mode 100644
index d6ce20f..0000000
Binary files a/_img/access-key-aws.png and /dev/null differ
diff --git a/_img/analog-digital.svg b/_img/analog-digital.svg
deleted file mode 100644
index 35f441a..0000000
--- a/_img/analog-digital.svg
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/_img/and-gate-new-2.png b/_img/and-gate-new-2.png
deleted file mode 100644
index 58eab1d..0000000
Binary files a/_img/and-gate-new-2.png and /dev/null differ
diff --git a/_img/and-transistor.png b/_img/and-transistor.png
deleted file mode 100644
index a18d128..0000000
Binary files a/_img/and-transistor.png and /dev/null differ
diff --git a/_img/api-gateway-trigger.png b/_img/api-gateway-trigger.png
deleted file mode 100644
index 7ab0e1a..0000000
Binary files a/_img/api-gateway-trigger.png and /dev/null differ
diff --git a/_img/apollo-explorer.png b/_img/apollo-explorer.png
deleted file mode 100644
index 4725eeb..0000000
Binary files a/_img/apollo-explorer.png and /dev/null differ
diff --git a/_img/async.svg b/_img/async.svg
deleted file mode 100644
index fd85032..0000000
--- a/_img/async.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/atom-diagram.svg b/_img/atom-diagram.svg
deleted file mode 100644
index bde130b..0000000
--- a/_img/atom-diagram.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/_img/awk-outline.png b/_img/awk-outline.png
deleted file mode 100644
index 9ff7848..0000000
Binary files a/_img/awk-outline.png and /dev/null differ
diff --git a/_img/basic-circuit.png b/_img/basic-circuit.png
deleted file mode 100644
index f72f364..0000000
Binary files a/_img/basic-circuit.png and /dev/null differ
diff --git a/_img/bi-intro.png b/_img/bi-intro.png
deleted file mode 100644
index 23a0572..0000000
Binary files a/_img/bi-intro.png and /dev/null differ
diff --git a/_img/biconditional-elim.png b/_img/biconditional-elim.png
deleted file mode 100644
index c34918b..0000000
Binary files a/_img/biconditional-elim.png and /dev/null differ
diff --git a/_img/breadboard-DIP.jpg b/_img/breadboard-DIP.jpg
deleted file mode 100644
index 4e54dec..0000000
Binary files a/_img/breadboard-DIP.jpg and /dev/null differ
diff --git a/_img/breakdown.svg b/_img/breakdown.svg
deleted file mode 100644
index 3258648..0000000
--- a/_img/breakdown.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
\ No newline at end of file
diff --git a/_img/cell-comparison.svg b/_img/cell-comparison.svg
deleted file mode 100644
index 65a4a4f..0000000
--- a/_img/cell-comparison.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/charge-cylinder.svg b/_img/charge-cylinder.svg
deleted file mode 100644
index 6325077..0000000
--- a/_img/charge-cylinder.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/cherry-pick.svg b/_img/cherry-pick.svg
deleted file mode 100644
index f351da4..0000000
--- a/_img/cherry-pick.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/circ-batt-final.svg b/_img/circ-batt-final.svg
deleted file mode 100644
index 1d2a2ae..0000000
--- a/_img/circ-batt-final.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/clock_pulses.png b/_img/clock_pulses.png
deleted file mode 100644
index 7e69aaa..0000000
Binary files a/_img/clock_pulses.png and /dev/null differ
diff --git a/_img/cloud-formation-stack.png b/_img/cloud-formation-stack.png
deleted file mode 100644
index fc65b7a..0000000
Binary files a/_img/cloud-formation-stack.png and /dev/null differ
diff --git a/_img/cloudwatch-logs.png b/_img/cloudwatch-logs.png
deleted file mode 100644
index e73c386..0000000
Binary files a/_img/cloudwatch-logs.png and /dev/null differ
diff --git a/_img/combined-merge-hist.svg b/_img/combined-merge-hist.svg
deleted file mode 100644
index 30e5259..0000000
--- a/_img/combined-merge-hist.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/complex-tree.svg b/_img/complex-tree.svg
deleted file mode 100644
index 9cbba30..0000000
--- a/_img/complex-tree.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/cond-elim.png b/_img/cond-elim.png
deleted file mode 100644
index 993a336..0000000
Binary files a/_img/cond-elim.png and /dev/null differ
diff --git a/_img/cond-intro.png b/_img/cond-intro.png
deleted file mode 100644
index 5287392..0000000
Binary files a/_img/cond-intro.png and /dev/null differ
diff --git a/_img/conditional-decomposition-rule.svg b/_img/conditional-decomposition-rule.svg
deleted file mode 100644
index a400a50..0000000
--- a/_img/conditional-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/conjunc-elim.png b/_img/conjunc-elim.png
deleted file mode 100644
index fd66290..0000000
Binary files a/_img/conjunc-elim.png and /dev/null differ
diff --git a/_img/conjunc-intro.png b/_img/conjunc-intro.png
deleted file mode 100644
index 3a8d642..0000000
Binary files a/_img/conjunc-intro.png and /dev/null differ
diff --git a/_img/conjunction-decomposition-rule.svg b/_img/conjunction-decomposition-rule.svg
deleted file mode 100644
index 5abcbd2..0000000
--- a/_img/conjunction-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/container-lifecycle.png b/_img/container-lifecycle.png
deleted file mode 100644
index c3f98e0..0000000
Binary files a/_img/container-lifecycle.png and /dev/null differ
diff --git a/_img/container-versus-vm.png b/_img/container-versus-vm.png
deleted file mode 100644
index b30fe6b..0000000
Binary files a/_img/container-versus-vm.png and /dev/null differ
diff --git a/_img/containers-in-userspace.png b/_img/containers-in-userspace.png
deleted file mode 100644
index 04705fc..0000000
Binary files a/_img/containers-in-userspace.png and /dev/null differ
diff --git a/_img/derivation_from_contradiction.png b/_img/derivation_from_contradiction.png
deleted file mode 100644
index 2c81072..0000000
Binary files a/_img/derivation_from_contradiction.png and /dev/null differ
diff --git a/_img/diode-led.png b/_img/diode-led.png
deleted file mode 100644
index 00c3334..0000000
Binary files a/_img/diode-led.png and /dev/null differ
diff --git a/_img/diode.png b/_img/diode.png
deleted file mode 100644
index fddfca4..0000000
Binary files a/_img/diode.png and /dev/null differ
diff --git a/_img/dipole-again.svg b/_img/dipole-again.svg
deleted file mode 100644
index 13cac44..0000000
--- a/_img/dipole-again.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/disjunc-elim.png b/_img/disjunc-elim.png
deleted file mode 100644
index 0127c59..0000000
Binary files a/_img/disjunc-elim.png and /dev/null differ
diff --git a/_img/disjunc-intro.png b/_img/disjunc-intro.png
deleted file mode 100644
index 6047493..0000000
Binary files a/_img/disjunc-intro.png and /dev/null differ
diff --git a/_img/disjunction-decomposition-rule.svg b/_img/disjunction-decomposition-rule.svg
deleted file mode 100644
index 144b2e8..0000000
--- a/_img/disjunction-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/dock-architecture.png b/_img/dock-architecture.png
deleted file mode 100644
index 84e6b6c..0000000
Binary files a/_img/dock-architecture.png and /dev/null differ
diff --git a/_img/draw.io-Page-8.drawio.png b/_img/draw.io-Page-8.drawio.png
deleted file mode 100644
index 8c111e9..0000000
Binary files a/_img/draw.io-Page-8.drawio.png and /dev/null differ
diff --git a/_img/draw.io-Page-9.drawio.png b/_img/draw.io-Page-9.drawio.png
deleted file mode 100644
index 9614777..0000000
Binary files a/_img/draw.io-Page-9.drawio.png and /dev/null differ
diff --git a/_img/drawio-Page-7.drawio.png b/_img/drawio-Page-7.drawio.png
deleted file mode 100644
index e86a851..0000000
Binary files a/_img/drawio-Page-7.drawio.png and /dev/null differ
diff --git a/_img/dsfdsfsdfwe.png b/_img/dsfdsfsdfwe.png
deleted file mode 100644
index 207ba84..0000000
Binary files a/_img/dsfdsfsdfwe.png and /dev/null differ
diff --git a/_img/em-spectrum.jpg b/_img/em-spectrum.jpg
deleted file mode 100644
index 46a2191..0000000
Binary files a/_img/em-spectrum.jpg and /dev/null differ
diff --git a/_img/em-wave.gif b/_img/em-wave.gif
deleted file mode 100644
index 8faba2c..0000000
Binary files a/_img/em-wave.gif and /dev/null differ
diff --git a/_img/equiv-fractions.png b/_img/equiv-fractions.png
deleted file mode 100644
index ddd0dbd..0000000
Binary files a/_img/equiv-fractions.png and /dev/null differ
diff --git a/_img/full-adder-new.png b/_img/full-adder-new.png
deleted file mode 100644
index 8eb9df0..0000000
Binary files a/_img/full-adder-new.png and /dev/null differ
diff --git a/_img/gateway-services.png b/_img/gateway-services.png
deleted file mode 100644
index cd11117..0000000
Binary files a/_img/gateway-services.png and /dev/null differ
diff --git a/_img/gateway-trigger.png b/_img/gateway-trigger.png
deleted file mode 100644
index d43fe05..0000000
Binary files a/_img/gateway-trigger.png and /dev/null differ
diff --git a/_img/git-bisect.svg b/_img/git-bisect.svg
deleted file mode 100644
index 200a9c4..0000000
--- a/_img/git-bisect.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/git-interactive-mode-2.png b/_img/git-interactive-mode-2.png
deleted file mode 100644
index 7e69265..0000000
Binary files a/_img/git-interactive-mode-2.png and /dev/null differ
diff --git a/_img/git-interactive-rebase.png b/_img/git-interactive-rebase.png
deleted file mode 100644
index 99ce73c..0000000
Binary files a/_img/git-interactive-rebase.png and /dev/null differ
diff --git a/_img/git-manual-hunk.png b/_img/git-manual-hunk.png
deleted file mode 100644
index c3a8dbd..0000000
Binary files a/_img/git-manual-hunk.png and /dev/null differ
diff --git a/_img/git-patch-mode.png b/_img/git-patch-mode.png
deleted file mode 100644
index 2b448ee..0000000
Binary files a/_img/git-patch-mode.png and /dev/null differ
diff --git a/_img/graphQL_request_load.png b/_img/graphQL_request_load.png
deleted file mode 100644
index df97e79..0000000
Binary files a/_img/graphQL_request_load.png and /dev/null differ
diff --git a/_img/graphql-architecture.png b/_img/graphql-architecture.png
deleted file mode 100644
index b56b208..0000000
Binary files a/_img/graphql-architecture.png and /dev/null differ
diff --git a/_img/graphql-journey-two.svg b/_img/graphql-journey-two.svg
deleted file mode 100644
index 949cd30..0000000
--- a/_img/graphql-journey-two.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/graphql_multiple_resources.png b/_img/graphql_multiple_resources.png
deleted file mode 100644
index 3b526da..0000000
Binary files a/_img/graphql_multiple_resources.png and /dev/null differ
diff --git a/_img/greyscale-encoding.svg b/_img/greyscale-encoding.svg
deleted file mode 100644
index 4a72d8e..0000000
--- a/_img/greyscale-encoding.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/ground-symbol.png b/_img/ground-symbol.png
deleted file mode 100644
index 7c7be5d..0000000
Binary files a/_img/ground-symbol.png and /dev/null differ
diff --git a/_img/grub.jpg b/_img/grub.jpg
deleted file mode 100644
index 58cb270..0000000
Binary files a/_img/grub.jpg and /dev/null differ
diff --git a/_img/half-adder-gates-three.png b/_img/half-adder-gates-three.png
deleted file mode 100644
index 0469bc3..0000000
Binary files a/_img/half-adder-gates-three.png and /dev/null differ
diff --git a/_img/half-adder-new.png b/_img/half-adder-new.png
deleted file mode 100644
index 45dc092..0000000
Binary files a/_img/half-adder-new.png and /dev/null differ
diff --git a/_img/harddisk.png b/_img/harddisk.png
deleted file mode 100644
index 5f5ee0d..0000000
Binary files a/_img/harddisk.png and /dev/null differ
diff --git a/_img/hardware-abstraction-hierarchy.png b/_img/hardware-abstraction-hierarchy.png
deleted file mode 100644
index 7251df8..0000000
Binary files a/_img/hardware-abstraction-hierarchy.png and /dev/null differ
diff --git a/_img/hardware-sim-basic.png b/_img/hardware-sim-basic.png
deleted file mode 100644
index 52a0049..0000000
Binary files a/_img/hardware-sim-basic.png and /dev/null differ
diff --git a/_img/hd-sim-test.png b/_img/hd-sim-test.png
deleted file mode 100644
index f6775dd..0000000
Binary files a/_img/hd-sim-test.png and /dev/null differ
diff --git a/_img/hertz_wave_freq.gif b/_img/hertz_wave_freq.gif
deleted file mode 100644
index 0fd7c0f..0000000
Binary files a/_img/hertz_wave_freq.gif and /dev/null differ
diff --git a/_img/hexadecimal-to-bytes.svg b/_img/hexadecimal-to-bytes.svg
deleted file mode 100644
index 99cfb98..0000000
--- a/_img/hexadecimal-to-bytes.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/htop.png b/_img/htop.png
deleted file mode 100644
index a97cd4b..0000000
Binary files a/_img/htop.png and /dev/null differ
diff --git a/_img/integrated-circuit.jpeg b/_img/integrated-circuit.jpeg
deleted file mode 100644
index 71b6598..0000000
Binary files a/_img/integrated-circuit.jpeg and /dev/null differ
diff --git a/_img/javascript-recursion.png b/_img/javascript-recursion.png
deleted file mode 100644
index b232421..0000000
Binary files a/_img/javascript-recursion.png and /dev/null differ
diff --git a/_img/jk-flip-flops.png b/_img/jk-flip-flops.png
deleted file mode 100644
index f83dcdc..0000000
Binary files a/_img/jk-flip-flops.png and /dev/null differ
diff --git a/_img/journald.png b/_img/journald.png
deleted file mode 100644
index 2781425..0000000
Binary files a/_img/journald.png and /dev/null differ
diff --git a/_img/kernel-cpu-interaction.svg b/_img/kernel-cpu-interaction.svg
deleted file mode 100644
index 0706e8c..0000000
--- a/_img/kernel-cpu-interaction.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/lambda-cloudwatch.png b/_img/lambda-cloudwatch.png
deleted file mode 100644
index 4bf29ff..0000000
Binary files a/_img/lambda-cloudwatch.png and /dev/null differ
diff --git a/_img/lambda-func-three.png b/_img/lambda-func-three.png
deleted file mode 100644
index a6fb7ea..0000000
Binary files a/_img/lambda-func-three.png and /dev/null differ
diff --git a/_img/lambda-func-two.png b/_img/lambda-func-two.png
deleted file mode 100644
index d57af7f..0000000
Binary files a/_img/lambda-func-two.png and /dev/null differ
diff --git a/_img/lambda-overview.png b/_img/lambda-overview.png
deleted file mode 100644
index 8a522ca..0000000
Binary files a/_img/lambda-overview.png and /dev/null differ
diff --git a/_img/lambda_func_one.png b/_img/lambda_func_one.png
deleted file mode 100644
index 11353a7..0000000
Binary files a/_img/lambda_func_one.png and /dev/null differ
diff --git a/_img/lin.svg b/_img/lin.svg
deleted file mode 100644
index f207dd0..0000000
--- a/_img/lin.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/_img/local-sam-docker.png b/_img/local-sam-docker.png
deleted file mode 100644
index 9f964fa..0000000
Binary files a/_img/local-sam-docker.png and /dev/null differ
diff --git a/_img/logical-equivalence-tree.svg b/_img/logical-equivalence-tree.svg
deleted file mode 100644
index bb78612..0000000
--- a/_img/logical-equivalence-tree.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/logical-falsity-tree.svg b/_img/logical-falsity-tree.svg
deleted file mode 100644
index 4e0c22c..0000000
--- a/_img/logical-falsity-tree.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/lsof.png b/_img/lsof.png
deleted file mode 100644
index 8a8b5d5..0000000
Binary files a/_img/lsof.png and /dev/null differ
diff --git a/_img/magnetic_field.png b/_img/magnetic_field.png
deleted file mode 100644
index e82e190..0000000
Binary files a/_img/magnetic_field.png and /dev/null differ
diff --git a/_img/memory-flow.svg b/_img/memory-flow.svg
deleted file mode 100644
index ab78d87..0000000
--- a/_img/memory-flow.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/mongo-collection.png b/_img/mongo-collection.png
deleted file mode 100644
index 227ae90..0000000
Binary files a/_img/mongo-collection.png and /dev/null differ
diff --git a/_img/mongo-compass.png b/_img/mongo-compass.png
deleted file mode 100644
index 8ecbab2..0000000
Binary files a/_img/mongo-compass.png and /dev/null differ
diff --git a/_img/mongo-db-structure.svg b/_img/mongo-db-structure.svg
deleted file mode 100644
index 6b1e2fb..0000000
--- a/_img/mongo-db-structure.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/mongo-doc-added.png b/_img/mongo-doc-added.png
deleted file mode 100644
index a45847f..0000000
Binary files a/_img/mongo-doc-added.png and /dev/null differ
diff --git a/_img/mongoose-hierarchy.svg b/_img/mongoose-hierarchy.svg
deleted file mode 100644
index 15091f1..0000000
--- a/_img/mongoose-hierarchy.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/motherboard-pi.jpg b/_img/motherboard-pi.jpg
deleted file mode 100644
index 07c8c91..0000000
Binary files a/_img/motherboard-pi.jpg and /dev/null differ
diff --git a/_img/mount-directory.png b/_img/mount-directory.png
deleted file mode 100644
index c522d2d..0000000
Binary files a/_img/mount-directory.png and /dev/null differ
diff --git a/_img/multi_on_off.gif b/_img/multi_on_off.gif
deleted file mode 100644
index f7c90ea..0000000
Binary files a/_img/multi_on_off.gif and /dev/null differ
diff --git a/_img/multiple_circuits.gif b/_img/multiple_circuits.gif
deleted file mode 100644
index c298651..0000000
Binary files a/_img/multiple_circuits.gif and /dev/null differ
diff --git a/_img/nand-gate-new.png b/_img/nand-gate-new.png
deleted file mode 100644
index ca27c16..0000000
Binary files a/_img/nand-gate-new.png and /dev/null differ
diff --git a/_img/nand-mem-demonstrated.gif b/_img/nand-mem-demonstrated.gif
deleted file mode 100644
index c8af9a7..0000000
Binary files a/_img/nand-mem-demonstrated.gif and /dev/null differ
diff --git a/_img/nand-mem-first.gif b/_img/nand-mem-first.gif
deleted file mode 100644
index 927aa81..0000000
Binary files a/_img/nand-mem-first.gif and /dev/null differ
diff --git a/_img/nand-mem-second.gif b/_img/nand-mem-second.gif
deleted file mode 100644
index 035f4e6..0000000
Binary files a/_img/nand-mem-second.gif and /dev/null differ
diff --git a/_img/nand_latch_logic_circuit.png b/_img/nand_latch_logic_circuit.png
deleted file mode 100644
index 631f722..0000000
Binary files a/_img/nand_latch_logic_circuit.png and /dev/null differ
diff --git a/_img/negate-elim.png b/_img/negate-elim.png
deleted file mode 100644
index 043992c..0000000
Binary files a/_img/negate-elim.png and /dev/null differ
diff --git a/_img/negate-intro.png b/_img/negate-intro.png
deleted file mode 100644
index 0c2e920..0000000
Binary files a/_img/negate-intro.png and /dev/null differ
diff --git a/_img/negated-biconditional-decomposition-rule.drawio.svg b/_img/negated-biconditional-decomposition-rule.drawio.svg
deleted file mode 100644
index 38228e9..0000000
--- a/_img/negated-biconditional-decomposition-rule.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/negated-conditional-decomposition-rule.svg b/_img/negated-conditional-decomposition-rule.svg
deleted file mode 100644
index bc8e052..0000000
--- a/_img/negated-conditional-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/negated-conjunction-decomposition-rule.svg b/_img/negated-conjunction-decomposition-rule.svg
deleted file mode 100644
index 0a7a24c..0000000
--- a/_img/negated-conjunction-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/negated-disjunction-decomposition-rule.svg b/_img/negated-disjunction-decomposition-rule.svg
deleted file mode 100644
index 21b10e1..0000000
--- a/_img/negated-disjunction-decomposition-rule.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/node-event-loop.svg b/_img/node-event-loop.svg
deleted file mode 100644
index a87e2d3..0000000
--- a/_img/node-event-loop.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/nor-gate-new.png b/_img/nor-gate-new.png
deleted file mode 100644
index d97578f..0000000
Binary files a/_img/nor-gate-new.png and /dev/null differ
diff --git a/_img/normal-merge-again.svg b/_img/normal-merge-again.svg
deleted file mode 100644
index 273eeb4..0000000
--- a/_img/normal-merge-again.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/one-eighth-a.png b/_img/one-eighth-a.png
deleted file mode 100644
index a39820d..0000000
Binary files a/_img/one-eighth-a.png and /dev/null differ
diff --git a/_img/opensearch-architecture.drawio.svg b/_img/opensearch-architecture.drawio.svg
deleted file mode 100644
index 7696016..0000000
--- a/_img/opensearch-architecture.drawio.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/or-gate-new.png b/_img/or-gate-new.png
deleted file mode 100644
index 2d97429..0000000
Binary files a/_img/or-gate-new.png and /dev/null differ
diff --git a/_img/or-transistor.svg b/_img/or-transistor.svg
deleted file mode 100644
index b691723..0000000
--- a/_img/or-transistor.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/parallel-battery-diagram.svg b/_img/parallel-battery-diagram.svg
deleted file mode 100644
index e8df3d3..0000000
--- a/_img/parallel-battery-diagram.svg
+++ /dev/null
@@ -1,689 +0,0 @@
-
-
-
-
diff --git a/_img/parallel-transmission.jpg b/_img/parallel-transmission.jpg
deleted file mode 100644
index e7f69b1..0000000
Binary files a/_img/parallel-transmission.jpg and /dev/null differ
diff --git a/_img/postman-aws-output.png b/_img/postman-aws-output.png
deleted file mode 100644
index 7ce61fb..0000000
Binary files a/_img/postman-aws-output.png and /dev/null differ
diff --git a/_img/postman-lambda.png b/_img/postman-lambda.png
deleted file mode 100644
index 5afc07e..0000000
Binary files a/_img/postman-lambda.png and /dev/null differ
diff --git a/_img/proof.png b/_img/proof.png
deleted file mode 100644
index bf3831f..0000000
Binary files a/_img/proof.png and /dev/null differ
diff --git a/_img/proofs-drawio-Page-5.drawio.png b/_img/proofs-drawio-Page-5.drawio.png
deleted file mode 100644
index 8f59d18..0000000
Binary files a/_img/proofs-drawio-Page-5.drawio.png and /dev/null differ
diff --git a/_img/proofs-drawio-Page-5.drawio_2.png b/_img/proofs-drawio-Page-5.drawio_2.png
deleted file mode 100644
index b83b8a9..0000000
Binary files a/_img/proofs-drawio-Page-5.drawio_2.png and /dev/null differ
diff --git a/_img/proofs-drawio-Page-6.drawio.png b/_img/proofs-drawio-Page-6.drawio.png
deleted file mode 100644
index ba492af..0000000
Binary files a/_img/proofs-drawio-Page-6.drawio.png and /dev/null differ
diff --git a/_img/python-exception-hierarchy.png b/_img/python-exception-hierarchy.png
deleted file mode 100644
index 085758a..0000000
Binary files a/_img/python-exception-hierarchy.png and /dev/null differ
diff --git a/_img/queue.svg b/_img/queue.svg
deleted file mode 100644
index d6720d7..0000000
--- a/_img/queue.svg
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
\ No newline at end of file
diff --git a/_img/react-lifecycle.png b/_img/react-lifecycle.png
deleted file mode 100644
index eee57bd..0000000
Binary files a/_img/react-lifecycle.png and /dev/null differ
diff --git a/_img/rebase-tip-chage.svg b/_img/rebase-tip-chage.svg
deleted file mode 100644
index 94769c3..0000000
--- a/_img/rebase-tip-chage.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/red-encoding.svg b/_img/red-encoding.svg
deleted file mode 100644
index f9b5752..0000000
--- a/_img/red-encoding.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/reiteration.png b/_img/reiteration.png
deleted file mode 100644
index 6aee327..0000000
Binary files a/_img/reiteration.png and /dev/null differ
diff --git a/_img/s3-package-again.svg b/_img/s3-package-again.svg
deleted file mode 100644
index 61aa822..0000000
--- a/_img/s3-package-again.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/sam-build.png b/_img/sam-build.png
deleted file mode 100644
index 18fea88..0000000
Binary files a/_img/sam-build.png and /dev/null differ
diff --git a/_img/sam-directory.png b/_img/sam-directory.png
deleted file mode 100644
index 182ee2b..0000000
Binary files a/_img/sam-directory.png and /dev/null differ
diff --git a/_img/sam-template-yaml.png b/_img/sam-template-yaml.png
deleted file mode 100644
index c394ea5..0000000
Binary files a/_img/sam-template-yaml.png and /dev/null differ
diff --git a/_img/serial-transmission.jpg b/_img/serial-transmission.jpg
deleted file mode 100644
index efd2c19..0000000
Binary files a/_img/serial-transmission.jpg and /dev/null differ
diff --git a/_img/series-battcircuit.svg b/_img/series-battcircuit.svg
deleted file mode 100644
index de63e18..0000000
--- a/_img/series-battcircuit.svg
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/series-battery-diagram.svg b/_img/series-battery-diagram.svg
deleted file mode 100644
index 838766a..0000000
--- a/_img/series-battery-diagram.svg
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
diff --git a/_img/server-listening.png b/_img/server-listening.png
deleted file mode 100644
index eb38b2d..0000000
Binary files a/_img/server-listening.png and /dev/null differ
diff --git a/_img/signed-conversion.png b/_img/signed-conversion.png
deleted file mode 100644
index 8208d10..0000000
Binary files a/_img/signed-conversion.png and /dev/null differ
diff --git a/_img/signed-to-unsigned.png b/_img/signed-to-unsigned.png
deleted file mode 100644
index ac7ba0a..0000000
Binary files a/_img/signed-to-unsigned.png and /dev/null differ
diff --git a/_img/single-git-history-rebase.svg b/_img/single-git-history-rebase.svg
deleted file mode 100644
index eadbe25..0000000
--- a/_img/single-git-history-rebase.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/sql-full-outer-join.png b/_img/sql-full-outer-join.png
deleted file mode 100644
index 9f44f41..0000000
Binary files a/_img/sql-full-outer-join.png and /dev/null differ
diff --git a/_img/sql-inner-join.png b/_img/sql-inner-join.png
deleted file mode 100644
index b71eb33..0000000
Binary files a/_img/sql-inner-join.png and /dev/null differ
diff --git a/_img/sql-left-outer-join.png b/_img/sql-left-outer-join.png
deleted file mode 100644
index e27388b..0000000
Binary files a/_img/sql-left-outer-join.png and /dev/null differ
diff --git a/_img/sql-right-outer-join.png b/_img/sql-right-outer-join.png
deleted file mode 100644
index 2115475..0000000
Binary files a/_img/sql-right-outer-join.png and /dev/null differ
diff --git a/_img/square.svg b/_img/square.svg
deleted file mode 100644
index b305e27..0000000
--- a/_img/square.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/_img/sr_latch_diagram.png b/_img/sr_latch_diagram.png
deleted file mode 100644
index 41c51f6..0000000
Binary files a/_img/sr_latch_diagram.png and /dev/null differ
diff --git a/_img/sr_latch_logic_circuit.png b/_img/sr_latch_logic_circuit.png
deleted file mode 100644
index f3a2702..0000000
Binary files a/_img/sr_latch_logic_circuit.png and /dev/null differ
diff --git a/_img/stack1.svg b/_img/stack1.svg
deleted file mode 100644
index 897bf39..0000000
--- a/_img/stack1.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
\ No newline at end of file
diff --git a/_img/stack2.svg b/_img/stack2.svg
deleted file mode 100644
index f2d1752..0000000
--- a/_img/stack2.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
\ No newline at end of file
diff --git a/_img/standard-userspace.png b/_img/standard-userspace.png
deleted file mode 100644
index 3d8ff3a..0000000
Binary files a/_img/standard-userspace.png and /dev/null differ
diff --git a/_img/state-machine-definition.png b/_img/state-machine-definition.png
deleted file mode 100644
index 19c39bd..0000000
Binary files a/_img/state-machine-definition.png and /dev/null differ
diff --git a/_img/state-machine-execution.png b/_img/state-machine-execution.png
deleted file mode 100644
index be95d42..0000000
Binary files a/_img/state-machine-execution.png and /dev/null differ
diff --git a/_img/step1.png b/_img/step1.png
deleted file mode 100644
index e9dee56..0000000
Binary files a/_img/step1.png and /dev/null differ
diff --git a/_img/step2.png b/_img/step2.png
deleted file mode 100644
index 674fc62..0000000
Binary files a/_img/step2.png and /dev/null differ
diff --git a/_img/step3.png b/_img/step3.png
deleted file mode 100644
index 7331da7..0000000
Binary files a/_img/step3.png and /dev/null differ
diff --git a/_img/step4.png b/_img/step4.png
deleted file mode 100644
index 12a57b9..0000000
Binary files a/_img/step4.png and /dev/null differ
diff --git a/_img/switch-and-gate.png b/_img/switch-and-gate.png
deleted file mode 100644
index aae726a..0000000
Binary files a/_img/switch-and-gate.png and /dev/null differ
diff --git a/_img/switch-or-gate.png b/_img/switch-or-gate.png
deleted file mode 100644
index d621991..0000000
Binary files a/_img/switch-or-gate.png and /dev/null differ
diff --git a/_img/sync-thread.svg b/_img/sync-thread.svg
deleted file mode 100644
index f3a6eb0..0000000
--- a/_img/sync-thread.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/systemd-global-files.png b/_img/systemd-global-files.png
deleted file mode 100644
index 700600b..0000000
Binary files a/_img/systemd-global-files.png and /dev/null differ
diff --git a/_img/systemd-local-files.png b/_img/systemd-local-files.png
deleted file mode 100644
index b443998..0000000
Binary files a/_img/systemd-local-files.png and /dev/null differ
diff --git a/_img/t-flip-flops.png b/_img/t-flip-flops.png
deleted file mode 100644
index 208deea..0000000
Binary files a/_img/t-flip-flops.png and /dev/null differ
diff --git a/_img/terminal_colours.png b/_img/terminal_colours.png
deleted file mode 100644
index 801f439..0000000
Binary files a/_img/terminal_colours.png and /dev/null differ
diff --git a/_img/theoremproof.png b/_img/theoremproof.png
deleted file mode 100644
index 6c4b549..0000000
Binary files a/_img/theoremproof.png and /dev/null differ
diff --git a/_img/transistor-off.png b/_img/transistor-off.png
deleted file mode 100644
index 0d24182..0000000
Binary files a/_img/transistor-off.png and /dev/null differ
diff --git a/_img/transistor-on.png b/_img/transistor-on.png
deleted file mode 100644
index 4cc1441..0000000
Binary files a/_img/transistor-on.png and /dev/null differ
diff --git a/_img/trigger-info.png b/_img/trigger-info.png
deleted file mode 100644
index b478497..0000000
Binary files a/_img/trigger-info.png and /dev/null differ
diff --git a/_img/unsigned-to-signed.png b/_img/unsigned-to-signed.png
deleted file mode 100644
index 0168aed..0000000
Binary files a/_img/unsigned-to-signed.png and /dev/null differ
diff --git a/_img/valence-shell.svg b/_img/valence-shell.svg
deleted file mode 100644
index f086c05..0000000
--- a/_img/valence-shell.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_img/vertical-circuit.png b/_img/vertical-circuit.png
deleted file mode 100644
index 940bbb5..0000000
Binary files a/_img/vertical-circuit.png and /dev/null differ
diff --git a/_img/virtual-memory-diagram.jpg b/_img/virtual-memory-diagram.jpg
deleted file mode 100644
index b65f527..0000000
Binary files a/_img/virtual-memory-diagram.jpg and /dev/null differ
diff --git a/_img/voltage-drop.png b/_img/voltage-drop.png
deleted file mode 100644
index c7f1bad..0000000
Binary files a/_img/voltage-drop.png and /dev/null differ
diff --git a/_img/von_neumann_architecture.jpeg b/_img/von_neumann_architecture.jpeg
deleted file mode 100644
index 3d168a4..0000000
Binary files a/_img/von_neumann_architecture.jpeg and /dev/null differ
diff --git a/_img/xor-addition-four.png b/_img/xor-addition-four.png
deleted file mode 100644
index ea5ae5b..0000000
Binary files a/_img/xor-addition-four.png and /dev/null differ
diff --git a/_img/xor-gate-new.png b/_img/xor-gate-new.png
deleted file mode 100644
index 9961f48..0000000
Binary files a/_img/xor-gate-new.png and /dev/null differ
diff --git a/_img/xor-hdl.png b/_img/xor-hdl.png
deleted file mode 100644
index 56dba50..0000000
Binary files a/_img/xor-hdl.png and /dev/null differ
diff --git a/_img/yellow-encoding.svg b/_img/yellow-encoding.svg
deleted file mode 100644
index 3a12161..0000000
--- a/_img/yellow-encoding.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/scripts/convert_link_format.sh b/scripts/convert_link_format.sh
index a16ffda..38bb115 100755
--- a/scripts/convert_link_format.sh
+++ b/scripts/convert_link_format.sh
@@ -1,8 +1,7 @@
#!/bin/bash
-find /home/thomas/repos/eolas/zk/ -type f -name "*.md" | while
-read file; do
- sed -r 's/\[([^\]]+)\]\(\/[^)]+\)/[[\1]]/g'
+find /home/thomas/repos/eolas/zk/ -type f -name "*.md" | while read file; do
+ sed -i -r 's/\[([^\]]+)\]\(\/[^)]+\)/[[\1]]/g' "$file"
done
diff --git a/scripts/rename-links.py b/scripts/rename-links.py
new file mode 100644
index 0000000..01eaaed
--- /dev/null
+++ b/scripts/rename-links.py
@@ -0,0 +1,33 @@
+import os
+import re
+
+
+def trim_markdown_links(filepath):
+ with open(filepath, "r") as file:
+ content = file.read()
+
+ # Regular expression to match Markdown links
+ pattern = r"\[([^\]]+)\]\(([^)]+)\)"
+ links = re.findall(pattern, content)
+
+ # For each link, extract the filename and replace the link
+ for text, link in links:
+ link_filename = os.path.basename(link)
+ content = content.replace(f"[{text}]({link})", f"[{text}]({link_filename})")
+
+ # Write the modified content back to the file
+ with open(filepath, "w") as file:
+ file.write(content)
+
+
+def process_directory(directory):
+ for filename in os.listdir(directory):
+ if filename.endswith(".md"):
+ trim_markdown_links(os.path.join(directory, filename))
+
+
+# Usage
+# process_directory('/path/to/your/directory')
+
+# Usage
+process_directory("/home/thomas/repos/eolas/zk")
diff --git a/zk/0_Introduction.md b/zk/0_Introduction.md
index c26d0ea..ebfb8f2 100644
--- a/zk/0_Introduction.md
+++ b/zk/0_Introduction.md
@@ -7,12 +7,12 @@ tags: [backend, node-js, REST, APIs]
# Creating a RESTful API: Introduction
We are going to use Express to create a
-[RESTful API](/Databases/RESTful_APIs.md) in Node.js.
+[RESTful API](RESTful_APIs.md) in Node.js.
## Request types
Express provides us with methods corresponding to each of the
-[HTTP request types](/Databases/HTTP_request_types.md):
+[HTTP request types](HTTP_request_types.md):
- `.get()`
- `.post()`
@@ -25,7 +25,7 @@ Express provides us with methods corresponding to each of the
> from a database. For simplicity we are just going simulate this with a simple
> data array so that we can focus on the Express syntax rather than database
> handling. Later we will integrate this with a
-> [MongoDB database](/Programming_Languages/NodeJS/REST_APIs/05_%20Integrating_the_database.md).
+> [MongoDB database](05_%20Integrating_the_database.md).
We will mainly work with the following array of objects:
@@ -51,7 +51,7 @@ const courses = [
We first create an instance of Express within `index.js`. This will be the main
coordinating file and we will aim to minimise the amount of business logic we
have in this file. It should really just be for initialization and managing
-[middleware](/Programming_Languages/NodeJS/Architecture/Middleware.md).
+[middleware](Middleware.md).
```js
const express = require("express");
@@ -103,10 +103,10 @@ app.listen(3000, () => console.log("Listening on port 30000..."));
We can now proceed to set up our RESTful endpoints:
-[GET requests](/Programming_Languages/NodeJS/REST_APIs/1_GET.md)
+[GET requests](1_GET.md)
-[POST requests](/Programming_Languages/NodeJS/REST_APIs/2_POST.md)
+[POST requests](2_POST.md)
-[PUT requests](/Programming_Languages/NodeJS/REST_APIs/3_PUT.md)
+[PUT requests](3_PUT.md)
-[DELETE requests](/Programming_Languages/NodeJS/REST_APIs/4_DELETE.md)
+[DELETE requests](4_DELETE.md)
diff --git a/zk/2_POST.md b/zk/2_POST.md
index eaec619..23335e4 100644
--- a/zk/2_POST.md
+++ b/zk/2_POST.md
@@ -61,7 +61,7 @@ client.
We should accept alterations to the database that are not first validated. We
can use the
-[Joi validator](/Programming_Languages/NodeJS/REST_APIs/Validation.md) to vet
+[Joi validator](Validation.md) to vet
the request:
```js
diff --git a/zk/5__Integrating_the_database.md b/zk/5__Integrating_the_database.md
index 6896330..28b7712 100644
--- a/zk/5__Integrating_the_database.md
+++ b/zk/5__Integrating_the_database.md
@@ -15,10 +15,10 @@ the array.
## Set-up
We will follow the routine for establishing a MongoDB instance as detailed in
-[my notes](/Databases/MongoDB/Connect_to_database.md) on Mongo:
+[my notes](Connect_to_database.md) on Mongo:
-- [Create MongoDB database](/Databases/MongoDB/Create_database.md)
-- [Connect to MongoDB database](/Databases/MongoDB/Connect_to_database.md)
+- [Create MongoDB database](Create_database.md)
+- [Connect to MongoDB database](Connect_to_database.md)
Our `index.js` now looks like the following:
@@ -122,8 +122,8 @@ const Course = mongoose.model(
Now we need to rewrite our RESTful request handlers so that the data is sourced
from and added to the database. We will mainly be using the Mongo syntax defined
-at [Querying a collection](/Databases/MongoDB/Querying_a_collection.md) and
-[Adding documents to a collection](/Databases/MongoDB/Adding_documents_to_a_collection.md).
+at [Querying a collection](Querying_a_collection.md) and
+[Adding documents to a collection](Adding_documents_to_a_collection.md).
We will also keep API validation within the `/model/` file.
### GET
@@ -174,7 +174,7 @@ router.post("/", async (req, res) => {
### PUT
When updating a value in the database we are going to use the
-[query-first](/Databases/MongoDB/Update_document.md#query-first-document-update)
+[query-first](Update_document.md#query-first-document-update)
approach to updating a Mongo document.
```jsconst courseSchema = new mongoose.Schema({
diff --git a/zk/API_Gateway.md b/zk/API_Gateway.md
index f77b992..5095522 100644
--- a/zk/API_Gateway.md
+++ b/zk/API_Gateway.md
@@ -8,13 +8,13 @@ tags: [AWS, APIs]
# AWS API Gateway
We can use Gateway as the front-door to our application. It will create an
-[HTTP](/Databases/REST/HTTP_request_types.md) endpoint that you can call from a
+[HTTP](HTTP_request_types.md) endpoint that you can call from a
client. In response to a client request you can then call a
-[lambda function](/DevOps/AWS/AWS_Lambda/Lambda_handler_function.md) that
+[lambda function](Lambda_handler_function.md) that
executes a backend process.

See
-[using API Gateway as Lambda trigger](/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation_within_AWS.md)
+[using API Gateway as Lambda trigger](Practical_walkthrough_Lambda_creation_within_AWS.md)
for a basic example of usage.
diff --git a/zk/Accessing_secrets_from_a_Lambda.md b/zk/Accessing_secrets_from_a_Lambda.md
index 7605511..3f79052 100644
--- a/zk/Accessing_secrets_from_a_Lambda.md
+++ b/zk/Accessing_secrets_from_a_Lambda.md
@@ -46,5 +46,5 @@ Here is an example of a resource permission giving access to a Lambda:
```
See
-[Fetch from Secrets Manager](/DevOps/AWS/AWS_Lambda/Code_examples/Fetch_from_Secrets_Manager.md)
+[Fetch from Secrets Manager](Fetch_from_Secrets_Manager.md)
for a code example of retrieving a value from Secrets Manager.
diff --git a/zk/Add_Subtract_Fractions.md b/zk/Add_Subtract_Fractions.md
index 5c898ed..ae367a4 100644
--- a/zk/Add_Subtract_Fractions.md
+++ b/zk/Add_Subtract_Fractions.md
@@ -39,7 +39,7 @@ $$
### Lowest common denominator and lowest common multiple
Given the symmetry between
-[factors and divisors](/Mathematics/Prealgebra/Factors_and_divisors.md) these
+[factors and divisors](Factors_and_divisors.md) these
properties are related. Note however that the LCM is more generic: it applies to
any set of numbers not just fractions. Whereas the LCD is explicitly to do with
fractions (hence 'denominator').
diff --git a/zk/Algorithmic_complexity.md b/zk/Algorithmic_complexity.md
index 451c5d3..85d7dcd 100644
--- a/zk/Algorithmic_complexity.md
+++ b/zk/Algorithmic_complexity.md
@@ -2,7 +2,7 @@
tags: [algorithms]
---
-
+
_Summary of the main classes of algorithmic complexity_
## Distinguish algorithms from programs
@@ -117,7 +117,7 @@ following data set:
| 5 | 5 |
If we plotted this as a graph it is clear that this is equivalent to a linear
-distribution:
+distribution:
Algorithms which display this distribution are therefore called **linear
algorithms**.
@@ -240,7 +240,7 @@ factor of it. Therefore the runtime is not growing proportional to the size of
the input, it is growing proportional to the size of the input squared.
Graphically this is represented with a curving lines as follows:
-
+
We can clearly see that as n grows, the runtime gets steeper and more
pronounced,
@@ -289,7 +289,7 @@ Back to algorithms: $O(\log n)$ is a really good complexity to have. It is close
to O(1) and in between O(1) and O(n). Represented graphically, it starts of with
a slight increase in runtime but then quickly levels off:
-
+
Many sorting algorithms run in log n time, as does recursion.
@@ -354,7 +354,7 @@ we should keep in mind the following shorthands:
With this in mind we can break down the `findSum` function like so:
-
+
This gives us:
diff --git a/zk/Analogue_and_digital.md b/zk/Analogue_and_digital.md
index 9926a72..5eaaee2 100644
--- a/zk/Analogue_and_digital.md
+++ b/zk/Analogue_and_digital.md
@@ -72,7 +72,7 @@ one of a limited set of values.
Computers only use two symbols for each value: 0 and 1.
Although a digital system could use more than two symbols, adding more would
-[increase the complexity](/Electronics_and_Hardware/Binary/Why_computers_use_binary.md#from-circuits-to-programs)
+[increase the complexity](Why_computers_use_binary.md#from-circuits-to-programs)
and cost of the system. A set of only two symbols allows for simplified hardware
and improved reliability.
diff --git a/zk/Apollo_Client.md b/zk/Apollo_Client.md
index e245235..6bb17d2 100644
--- a/zk/Apollo_Client.md
+++ b/zk/Apollo_Client.md
@@ -8,12 +8,12 @@ tags: [graphql]
# Apollo Client
Apollo Client is the client-side counterpart to
-[Apollo Server](/Databases/GraphQL/Apollo/Apollo_Server.md). We use it for
+[Apollo Server](Apollo_Server.md). We use it for
managing queries and mutations from the frontend to our Apollo GraphQL server.
It is specifically designed to work with React.
> We will be working with the
-> [schema](/Databases/GraphQL/Apollo/Apollo_Server.md#example-schema) we defined
+> [schema](Apollo_Server.md#example-schema) we defined
> when working on the server
## Initializing the client
@@ -58,7 +58,7 @@ between the frontend and the backend, it is not itself executable code.
Therefore, for each query in the schema we must write a frontend implementation.
We do this with **query constants**. The frontend implementation has a backend
analogue: the
-[resolver](/Databases/GraphQL/Apollo/Apollo_Server.md#implementing-resolvers)
+[resolver](Apollo_Server.md#implementing-resolvers)
that is invoked when the frontend issues a query. The schema standardises this
relationship so that every query on the client must have a corresponding
resolver on the backend.
diff --git a/zk/Apollo_Server.md b/zk/Apollo_Server.md
index d842b28..3cfd31a 100644
--- a/zk/Apollo_Server.md
+++ b/zk/Apollo_Server.md
@@ -55,7 +55,7 @@ type Author {
We instantiate an `ApolloServer` instance and pass our schema to it. We then
subscribe to it with a
-[listener](/Programming_Languages/Node/Modules/Core/Node_JS_events_module.md#extending-the-eventemitter-class).
+[listener](Node_JS_events_module.md#extending-the-eventemitter-class).
```js
// index.js
@@ -121,12 +121,12 @@ const server = new ApolloServer({ typeDefs, mocks });
```
We can now
-[run queries](/Databases/GraphQL/Apollo/Apollo_Client.md#running-a-query)
+[run queries](Apollo_Client.md#running-a-query)
against our server.
## Implementing resolvers
-A resolver is a [function](/Trash/Creating_a_GraphQL_server.md#resolvers) that
+A resolver is a [function](Creating_a_GraphQL_server.md#resolvers) that
populates data for a given query. It should have **the same name as the field
for the query**. So far we have one query in our schema: `tracksForHome` which
returns the tracks to be listed on the home page. We must therefore also name
@@ -136,7 +136,7 @@ It can fetch data from a single data source or multiple data sources (other
servers, databases, REST APIs) and present this as a single integrated resource
to the client, matching the shape requested.
-As per the [generic example](/Trash/Creating_a_GraphQL_server.md#resolvers), you
+As per the [generic example](Creating_a_GraphQL_server.md#resolvers), you
write write your resolvers as keys on a `resolvers` object, e.g:
```js
@@ -162,7 +162,7 @@ implementing the resolution: `resolverFunction(parent, args, context, info)`.
- `parent`
- Used with
- [resolver chains](/Databases/GraphQL/Apollo/Using_arguments_with_Apollo_Client.md#resolver-chains)
+ [resolver chains](Using_arguments_with_Apollo_Client.md#resolver-chains)
---add example
- `args`
- an object comprising arguments provided for the given field by the client.
@@ -296,7 +296,7 @@ const resolvers = {
`ApolloServer` instance.
* This time we utilise the `args` parameter in the resolver since an `id` will
be provided as a client-side
- [argument](/Databases/GraphQL/Apollo/Using_arguments_with_Apollo_Client.md) to
+ [argument](Using_arguments_with_Apollo_Client.md) to
return a specific author.
## The `useMutation` hook
@@ -304,4 +304,4 @@ const resolvers = {
We invoke the `useMutation` hook to issue mutations from the client-side.
As with queries and
-[query constants](/Databases/GraphQL/Apollo/Apollo_Client.md#query-constants)
+[query constants](Apollo_Client.md#query-constants)
diff --git a/zk/Application_state_management.md b/zk/Application_state_management.md
index 1100810..46a0046 100644
--- a/zk/Application_state_management.md
+++ b/zk/Application_state_management.md
@@ -9,7 +9,7 @@ tags:
# Application state management
-Although [useReducer](./useReducer.md) and [useContext](./useContext.md) have
+Although [useReducer](useReducer.md) and [useContext](useContext.md) have
many sound use cases by themselves, when they are combined they offer a way to
acheive a system of global state management, without utilising third-party
libraries like Redux.
@@ -50,7 +50,7 @@ export const CounterContext = React.createContext({});
Now we need a reducer that will handle the state updates. We will just use the
same setup as we used in the example of
-[useReducer](./useReducer.md#refining-the-syntax):
+[useReducer](useReducer.md#refining-the-syntax):
```js
function reducer(state, action) {
diff --git a/zk/Application_structure.md b/zk/Application_structure.md
index ca18416..9f21409 100644
--- a/zk/Application_structure.md
+++ b/zk/Application_structure.md
@@ -44,7 +44,7 @@ src/
- The `App` component is your parent component and the container for your app.
It is where you will import your sub-components.
- If you are using React Router `App` becomes the index for the different page
- components. See [Routing](./Routing.md) for more detail.
+ components. See [Routing](Routing.md) for more detail.
## `build`
diff --git a/zk/Arithmetic_Logic_Unit.md b/zk/Arithmetic_Logic_Unit.md
index 406d9e8..417ee06 100644
--- a/zk/Arithmetic_Logic_Unit.md
+++ b/zk/Arithmetic_Logic_Unit.md
@@ -7,23 +7,23 @@ tags: [CPU]
# Arithmetic Logic Unit (ALU)
The ALU is the centerpiece or core of the
-[CPU](/Computer_Architecture/CPU/CPU_architecture.md) architecture, where the
+[CPU](CPU_architecture.md) architecture, where the
binary calculations occur. All the other components on the CPU chip are
appendanges to the execution that occurs within the ALU.
The ALU comprises
-[logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md) that
+[logic gates](Logic_gates.md) that
execute the instructions passed from memory and where the data stored by the
registers is acted upon. A processor's ALU is just a complex combinatorial logic
circuit.
It executes arithmetic and logical operations on binary numbers and where you
will find operations conducted by
-[full-adders and half adders](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md)
+[full-adders and half adders](Half_adder_and_full_adder.md)
etc.
More specifically, the ALU is responsible for the _execute_ phase of the
-[fetch, decode, execute cycle](/Computer_Architecture/CPU/Fetch_decode_execute.md).
+[fetch, decode, execute cycle](Fetch_decode_execute.md).
## ALU execution lifecycle
diff --git a/zk/Axioms_of_set_theory.md b/zk/Axioms_of_set_theory.md
index 5049613..e0b5fee 100644
--- a/zk/Axioms_of_set_theory.md
+++ b/zk/Axioms_of_set_theory.md
@@ -20,4 +20,4 @@ Sets which contain the same members are the same set. If sets A and B contain
the same elements then A = B.
$$\forall a \forall b [\forall x (x \in a \longleftrightarrow x \in b) \rightarrow a =b]$$
-[link to test](/testFolder/beta.md)
+[link to test](beta.md)
diff --git a/zk/Basic_properties_of_sets.md b/zk/Basic_properties_of_sets.md
index be42c7f..0e35ce7 100644
--- a/zk/Basic_properties_of_sets.md
+++ b/zk/Basic_properties_of_sets.md
@@ -126,4 +126,4 @@ This asserts that B is not a superset of A.
## Resources
-[Set symbols](https://www.mathsisfun.com/sets/symbols.html)
+[Set symbols](symbols.html)
diff --git a/zk/Basics_of_web_components.md b/zk/Basics_of_web_components.md
index 49b60b5..ef1ecd4 100644
--- a/zk/Basics_of_web_components.md
+++ b/zk/Basics_of_web_components.md
@@ -39,4 +39,4 @@ customElements.define("my-component", MyComponent);
## Resources
-[A complete introdution to Web Components](https://kinsta.com/blog/web-components/)
+[A complete introdution to Web Components]()
diff --git a/zk/Binary_colour_encoding.md b/zk/Binary_colour_encoding.md
index 3b80366..33cbfb0 100644
--- a/zk/Binary_colour_encoding.md
+++ b/zk/Binary_colour_encoding.md
@@ -8,7 +8,7 @@ tags: [binary, binary-encoding]
The approach to encoding binary representations of colour is very similar to the
approach we explored when looking at the encoding of
-[alphanumeric values](/Electronics_and_Hardware/Binary/Text_encoding.md).
+[alphanumeric values](Text_encoding.md).
We begin by determining the total number of colours and colour shades we want to
represent. With this value established we then decide on the bit-length required
diff --git a/zk/Binary_encoding_of_text.md b/zk/Binary_encoding_of_text.md
index 8cc7e83..b686423 100644
--- a/zk/Binary_encoding_of_text.md
+++ b/zk/Binary_encoding_of_text.md
@@ -8,7 +8,7 @@ tags: [binary, binary-encoding]
# Text encoding
Text encoding is an applied instance of
-[binary encoding](/Electronics_and_Hardware/Binary/Binary_encoding.md).
+[binary encoding](Binary_encoding.md).
## ASCII
diff --git a/zk/Binary_number_system.md b/zk/Binary_number_system.md
index 8b0d641..1ac1bb6 100644
--- a/zk/Binary_number_system.md
+++ b/zk/Binary_number_system.md
@@ -88,7 +88,7 @@ Counting in binary:
## Binary prefix
To distinguish numbers in binary from decimal or
-[hexadecimal](/Electronics_and_Hardware/Binary/Hexadecimal_number_system.md)
+[hexadecimal](Hexadecimal_number_system.md)
numbers, it is common to use the prefix `0b`. Thus, e.g, `0b110` for decimal
`6`.
diff --git a/zk/Binary_units_of_measurement.md b/zk/Binary_units_of_measurement.md
index a6d8a88..1dbe88d 100644
--- a/zk/Binary_units_of_measurement.md
+++ b/zk/Binary_units_of_measurement.md
@@ -13,7 +13,7 @@ the number 343 is a number containing three digits. A digit can be any one of
the ten numerals through 0-9.
The equivalent entity in the
-[binary number system](/Electronics_and_Hardware/Binary/Binary_number_system.md)
+[binary number system](Binary_number_system.md)
is the **bit**. For example the binary number 110 has three bits. A bit can only
have one of two values in contrast to a digit which can have one of ten values.
These values are 0 and 1.
@@ -57,7 +57,7 @@ A byte allows for a complexity of up to 256 possible states: $2^{8} = 256$
Having established that the core quantity of information is the byte, the
convention is to apply the
-[standard metric prefixes](/Electronics_and_Hardware/Prefixes_for_units_of_electrical_measurement.md)
+[standard metric prefixes](Prefixes_for_units_of_electrical_measurement.md)
to the byte to establish units:
| Prefix | Symbol | Expression as base ten exponent | Value | English word |
diff --git a/zk/Boolean_algebra.md b/zk/Boolean_algebra.md
index a95536c..b9fb2b6 100644
--- a/zk/Boolean_algebra.md
+++ b/zk/Boolean_algebra.md
@@ -24,7 +24,7 @@ $$
$$
Compare the
-[Commutative Law](/Mathematics/Prealgebra/Whole_numbers.md#the-commutative-property)
+[Commutative Law](Whole_numbers.md#the-commutative-property)
in the context of arithmetic.
### The Associative Law
@@ -38,7 +38,7 @@ $$
$$
Compare the
-[Associative Law](/Mathematics/Prealgebra/Whole_numbers.md#the-associative-property)
+[Associative Law](Whole_numbers.md#the-associative-property)
in the context of arithmetic.
### The Distributive Law
@@ -52,7 +52,7 @@ $$
$$
Compare how the
-[Distributive Law applies in the case of algebra based on arithmetic](/Mathematics/Prealgebra/Distributivity.md):
+[Distributive Law applies in the case of algebra based on arithmetic](Distributivity.md):
$$
a \cdot (b + c) = a \cdot b + a \cdot c
@@ -77,7 +77,7 @@ $$
### DeMorgan's Laws
In addition we have
-[DeMorgan's Laws](/Logic/Laws_and_theorems.md/DeMorgan's_Laws.md) which express
+[DeMorgan's Laws](DeMorgan's_Laws.md) which express
the relationship that obtains between the negations of conjunctive and
disjunctive expressions:
@@ -158,8 +158,8 @@ with a truth table:
The fact that we can take a complex Boolean function and reduce it to a simpler
formulation has great significance for the development of computer
architectures, specifically
-[logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md). It
+[logic gates](Logic_gates.md). It
would be rather resource intensive and inefficient to create a gate that is
representative of the complex function. Whereas the simplified version only
requires a single
-[OR gate](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#or-gate).
+[OR gate](Logic_gates.md#or-gate).
diff --git a/zk/Boolean_function_synthesis.md b/zk/Boolean_function_synthesis.md
index a2a6cae..448c732 100644
--- a/zk/Boolean_function_synthesis.md
+++ b/zk/Boolean_function_synthesis.md
@@ -8,17 +8,17 @@ tags: [propositional-logic, nand-to-tetris]
# Boolean function synthesis
When we looked at
-[boolean functions](/Logic/Propositional_logic/Boolean_functions.md) we were
+[boolean functions](Boolean_functions.md) we were
working in a particular direction: from a function to a truth table. When we do
Boolean function synthesis we work in the opposite direction: from a truth table
to a function.
This is an important skill that we will use when constructing
-[logic circuits](/Electronics_and_Hardware/Digital_circuits/Digital_circuits.md).
+[logic circuits](Digital_circuits.md).
We will go from truth conditions (i.e. what we want the circuit to do and when
we want it to do it) to a function expression which is then reduced to its
simplest form and implemented with
-[logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md).
+[logic gates](Logic_gates.md).
Specifically, NAND gates.
We will show here that a complex logical expression can be reduced to an
@@ -88,7 +88,7 @@ $$
$$
Notice that $\lnot(z)$ is repeated so we can remove the repetition through
-[idempotence](/Logic/Propositional_logic/Boolean_algebra.md#idempotent-law):
+[idempotence](Boolean_algebra.md#idempotent-law):
$$
\lnot z \land (\lnot(x) \lor \lnot(y))
@@ -121,7 +121,7 @@ $$
Finally, we can simplify even further by doing away with AND and NOT and using a
single
-[NAND gate](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nand-gate)
+[NAND gate](Logic_gates.md#nand-gate)
which embodies the logic of both, being true in all instances where AND would be
false: $\lnot (x \land y)$.
diff --git a/zk/Boolean_functions.md b/zk/Boolean_functions.md
index c1156ff..f88e950 100644
--- a/zk/Boolean_functions.md
+++ b/zk/Boolean_functions.md
@@ -22,7 +22,7 @@ Here is a work through where $f(1, 0, 1)$:
and both of its disjuncts are false
We can compute all possible outputs of the function by constructing a
-[trkjuth table](/Logic/Propositional_logic/Truth-tables.md) with each possible
+[trkjuth table](Truth-tables.md) with each possible
variable as the truth conditions and the output of the function as the truth
value:
diff --git a/zk/Boot_process.md b/zk/Boot_process.md
index 4f806eb..c0c3ee7 100644
--- a/zk/Boot_process.md
+++ b/zk/Boot_process.md
@@ -11,7 +11,7 @@ tags:
The primary or boot
[partition](Disks.md#primary-extended-and-logical-partitions) of a harddisk
contains a bootloader. It is the job of the bootloader to locate the
-[kernel](/Operating_Systems/The_Kernel.md) on the harddrive and inject it into
+[kernel](The_Kernel.md) on the harddrive and inject it into
memory so that they operating system can start. This is the boot process.
## Boot loaders
@@ -82,7 +82,7 @@ would with any other filesystem, allowing for advanced configuration.
3. The kernel initializes the devices and its drivers.
4. The kernel mounts the root filesystem.
5. The kernel starts a program called **init**. It has a
- [process id](/Programming_Languages/Shell_Scripting/Processes.md#processes-ps)
+ [process id](Processes.md#processes-ps)
of 1. This is the point at which [user space](User_Space.md) starts.
6. Init sets the rest of the system processes in motion.
7. At the end of the boot process, init starts a process allowing you to log in.
diff --git a/zk/Bus.md b/zk/Bus.md
index 65aa6a1..6353da1 100644
--- a/zk/Bus.md
+++ b/zk/Bus.md
@@ -23,11 +23,11 @@ can mean:
| Bus type | Description |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| System bus | The primary pathway between the CPU and [memory](/Computer_Architecture/Memory/Memory.md). It comprises the **data bus** that transfers data from the memory to the CPU and the **address bus** which transmits requests from the CPU to memory. |
+| System bus | The primary pathway between the CPU and [memory](Memory.md). It comprises the **data bus** that transfers data from the memory to the CPU and the **address bus** which transmits requests from the CPU to memory. |
| Internal bus | Connects local devices for example the harddisk to the CPU. |
-| External bus | Connects peripheral devices such as disks and printers to the [motherboard](/Electronics_and_Hardware/Motherboard.md) |
+| External bus | Connects peripheral devices such as disks and printers to the [motherboard](Motherboard.md) |
| Expansion bus | Allows expansion boards to access the CPU and memory. |
-| Frontside bus | Main computer bus that determines data transfer rate speed and is the primary data transfer path between the CPU, RAM and other [motherboard](/Electronics_and_Hardware/Motherboard.md) devices. |
+| Frontside bus | Main computer bus that determines data transfer rate speed and is the primary data transfer path between the CPU, RAM and other [motherboard](Motherboard.md) devices. |
| Backside bus | Transfers secondary cache (L2 cache) data at faster speeds, allowing more efficient CPU operations |
## Bus standards
@@ -48,7 +48,7 @@ transmit each bit of data simultaneously.
- Serial buses are cheaper to implement than parallel buses
- Serial buses operate at greater
- [latency](/Computer_Architecture/Bus.md#latency) than parallel buses
+ [latency](Bus.md#latency) than parallel buses
## Latency
diff --git a/zk/CPU_architecture.md b/zk/CPU_architecture.md
index 63011c9..482cdb1 100644
--- a/zk/CPU_architecture.md
+++ b/zk/CPU_architecture.md
@@ -8,8 +8,8 @@ tags: [CPU, electromagnetism, clock]
At the core of a computer sits the Central Processing Unit. This is the assembly
of chips that execute all computation. Instructions are passed to the CPU along
-the data bus part of the [system bus](/Computer_Architecture/Bus.md) from the
-memory. The [kernel](/Operating_Systems/The_Kernel.md), also residing in memory,
+the data bus part of the [system bus](Bus.md) from the
+memory. The [kernel](The_Kernel.md), also residing in memory,
sequences and schedules the sending of data to the CPU and manages requests from
the CPU for data in memory.
@@ -29,13 +29,13 @@ The CPU comprises three core components:
## Registers
This is the part of the CPU that stores data. The memory cells that comprise it
-do not have [capacitors](/Computer_Architecture/Memory/Memory.md) (unlike RAM)
+do not have [capacitors](Memory.md) (unlike RAM)
so they cannot store very much data but they work faster, which is what is
important. Because their memory capacity is so small, we measure the size of
registers in bits rather than bytes.
In terms of speed, registers sit at the top part of the overall
-[memory hierarchy](/Computer_Architecture/Memory/Memory.md#the-memory-hierarchy).
+[memory hierarchy](Memory.md#the-memory-hierarchy).
There are five main types of register in the CPU:
@@ -49,11 +49,11 @@ There are five main types of register in the CPU:
## Arithmetic Logic Unit
-See [Arithmetic Logic Unit](/Computer_Architecture/CPU/Arithmetic_Logic_Unit.md)
+See [Arithmetic Logic Unit](Arithmetic_Logic_Unit.md)
## Control Unit
-The CPU's [controller](/Computer_Architecture/Chipset_and_controllers.md). It
+The CPU's [controller](Chipset_and_controllers.md). It
takes the instructions in binary form from RAM memory (separate from the CPU,
but connected) and then signals to the to ALU and memory registers what it is
supposed to do to execute the instructions. Think of it as the overseer that
@@ -73,11 +73,11 @@ cycle_.
The clock's circuitry is based on a quartz crystal system like that used in
watches. At precisely timed intervals, the clock sends out pulses of electricity
that cause bits to move from place to place within
-[logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md) or
+[logic gates](Logic_gates.md) or
between logic gates and
-[registers](/Computer_Architecture/CPU/CPU_architecture.md#registers). This is
+[registers](CPU_architecture.md#registers). This is
covered in greater detail in the discussion of
-[clock signals in digital circuits](/Electronics_and_Hardware/Digital_circuits/Clock_signals.md).
+[clock signals in digital circuits](Clock_signals.md).
Simple instructions such as add can often be executed in just one clock cycle,
whilst complex operations such as divide will require a number of smaller steps,
@@ -95,14 +95,14 @@ Hz a processor possesses.
## Processing cycles
Each "cycle" is the execution of a process that commences once the
-[kernel](/Operating_Systems/The_Kernel.md) hands control to the CPU. Each cycle
+[kernel](The_Kernel.md) hands control to the CPU. Each cycle
follows a sequence of events known as
-[fetch, decode, and execute](/Computer_Architecture/CPU/Fetch_decode_execute.md).
+[fetch, decode, and execute](Fetch_decode_execute.md).
## Electromagnetism: broader scientific context
Hertz was the scientist who detected
-[electromagentic waves](/Electronics_and_Hardware/Physics_of_electricity/Electromagnetism.md).
+[electromagentic waves](Electromagnetism.md).
We use Hertz as a measure of the frequency of electromatic wave cycles in a
signal.
diff --git a/zk/Call_stack.md b/zk/Call_stack.md
index dd77e60..0fd1975 100644
--- a/zk/Call_stack.md
+++ b/zk/Call_stack.md
@@ -6,7 +6,7 @@ tags: []
# The call-stack
-A [stack](/Data_Structures/Stacks.md) data structure that holds the information
+A [stack](Stacks.md) data structure that holds the information
of the functions called within a program that allows transfer of the application
control from these functions to the main process after code inside the functions
has been executed.
diff --git a/zk/Capturing_user_input_in_Bash.md b/zk/Capturing_user_input_in_Bash.md
index ed0a9f2..be0da12 100644
--- a/zk/Capturing_user_input_in_Bash.md
+++ b/zk/Capturing_user_input_in_Bash.md
@@ -7,7 +7,7 @@ tags:
# Capturing user input in Bash
-We use [read](/Programming_Languages/Shell/Read.md) to gather user input.
+We use [read](Read.md) to gather user input.
## Capturing raw inputs
@@ -91,7 +91,7 @@ echo "$fave was selected"
### Check right number of arguments supplied
Here we test that the right number of
-[arguments](/Programming_Languages/Shell/Passing_arguments_and_options_to_Bash_scripts.md)
+[arguments](Passing_arguments_and_options_to_Bash_scripts.md)
have been passed to the script:
```sh
diff --git a/zk/Cells_and_batteries.md b/zk/Cells_and_batteries.md
index ed5ea3b..9f6039f 100644
--- a/zk/Cells_and_batteries.md
+++ b/zk/Cells_and_batteries.md
@@ -7,7 +7,7 @@ tags: [physics, electricity]
# Cells and batteries
Cells are a
-[voltage source](/Electronics_and_Hardware/Analogue_circuits/Voltage.md) that
+[voltage source](Voltage.md) that
generate a difference of potential via a positive and negative electrode
separated by an electrolytic solution. The electrolytes pull free electrons from
one of the materials which creates a positive charge. The other material gains
@@ -48,7 +48,7 @@ line.
In this configuration the same current flows through all the cells; it is not
cumulative. We represent this as follow> However the voltage is cumulative: it
is the _sum_ of the individual cell voltages, represented below as
-[electrical field](/Electronics_and_Hardware/Analogue_circuits/Voltage.md#distinguishing-voltage-from-electric-field):
+[electrical field](Voltage.md#distinguishing-voltage-from-electric-field):
$$
E_{T} = E_{1} + E_{2} + E_{3} \\
diff --git a/zk/Cherry_picking.md b/zk/Cherry_picking.md
index 21205da..95f2305 100644
--- a/zk/Cherry_picking.md
+++ b/zk/Cherry_picking.md
@@ -57,7 +57,7 @@ git cherry-pick abcdefg hijklmn opqrst
## Limitations
- You don't have to just cherry-pick locally, you can also cherry-pick from a
- [remote tracking branch](/DevOps/Git/Remote_tracking_branches.md).
+ [remote tracking branch](Remote_tracking_branches.md).
- You cannot cherry-pick merge commits since these commits do not implement a
set of changes, they are connecting commits.
diff --git a/zk/Chipset_and_controllers.md b/zk/Chipset_and_controllers.md
index cc22c2e..c75b03f 100644
--- a/zk/Chipset_and_controllers.md
+++ b/zk/Chipset_and_controllers.md
@@ -11,13 +11,13 @@ A **controller** is simply a circuit that controls a process. The **chipset** is
a combination of controllers placed on the same piece of silicon.
The chipset manages the data flow between the different components that comprise
-the [motherboard](/Electronics_and_Hardware/Motherboard.md): processor,
-[memory](/Computer_Architecture/Memory/Memory.md),
-[harddisk](/Operating_Systems/Disks/What_are_disks.md) and peripherals.
+the [motherboard](Motherboard.md): processor,
+[memory](Memory.md),
+[harddisk](What_are_disks.md) and peripherals.
Buses run in and out of the chipset into these key motherboard components. The
main chipset is a kind of junction that sits between the memory and CPU through
-which the [system bus](/Computer_Architecture/Bus.md) passes.
+which the [system bus](Bus.md) passes.
The chipset is sometimes called the "glue" or "traffic controller" of the
motherboard or _an intelligent intersection of buses_.
diff --git a/zk/Circuits.md b/zk/Circuits.md
index 4644ef7..fdf9090 100644
--- a/zk/Circuits.md
+++ b/zk/Circuits.md
@@ -11,11 +11,11 @@ that current flows in a loop from a voltage source, through the circuit elements
and back to the voltage source.
Below is a basic circuit representing a 9-volt
-[battery](/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md#cells-and-batteries)
+[battery](Cells_and_batteries.md#cells-and-batteries)
with a 10,000$\Omega$
-[resistor](/Electronics_and_Hardware/Analogue_circuits/Resistance.md) attached
+[resistor](Resistance.md) attached
accross its terminals. Through the application of
-[Ohm's Law](/Electronics_and_Hardware/Physics_of_electricity/Ohms_Law.md) we can
+[Ohm's Law](Ohms_Law.md) we can
determine that the maximum current will be 0.9 miliamps.

diff --git a/zk/Classes.md b/zk/Classes.md
index fe91df9..c2e7b33 100644
--- a/zk/Classes.md
+++ b/zk/Classes.md
@@ -243,7 +243,7 @@ constructor with `super`.
You shouldn't confuse `implements` with `extends`. `implements` just checks the
class as an interface in accordance with the principles of
-[duck typing](/Programming_Languages/TypeScript/Custom_types.md#duck-typing):
+[duck typing](Custom_types.md#duck-typing):
i.e the implementing class should have the same properties and methods. It
doesn't affect anything internal to the methods or properties. So e.g, if you
typed a method parameter as `string` in the base class, this would still default
diff --git a/zk/Classes_in_Python.md b/zk/Classes_in_Python.md
index 80e64a4..6357bd5 100644
--- a/zk/Classes_in_Python.md
+++ b/zk/Classes_in_Python.md
@@ -85,7 +85,7 @@ class Person:
## Object references
When you log a class you get a reference to its hexadecimal
-[memory](/Computer_Architecture/Memory/Memory.md) reference.
+[memory](Memory.md) reference.
```py
p1 = Person('John', 36)
@@ -112,7 +112,7 @@ print(id(p2))
## Copying objects
The same principle that applies to
-[copying functions](/Programming_Languages/Python/Syntax/Functions_in_Python.md)
+[copying functions](Functions_in_Python.md)
applies to copying objects created through classes: redeclaration results in a
duplicate entity. Thus changes to the duplicate will affect the original.
diff --git a/zk/Clock_signals.md b/zk/Clock_signals.md
index a7f9764..d6cd974 100644
--- a/zk/Clock_signals.md
+++ b/zk/Clock_signals.md
@@ -9,8 +9,8 @@ tags: [binary, memory, clock, electromagnetism]
# Clock signals
In the examples of digital circuits so far (i.e
-[adders](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md)
-and [latches](/Electronics_and_Hardware/Digital_circuits/Latches.md)) everything
+[adders](Half_adder_and_full_adder.md)
+and [latches](Latches.md)) everything
happens in a single instant or over several repeated instances. This is because
of how simple the circuits are. In the case of latches only a single bit is
updated. And even with rippled adders they are just a series of 1-bit updaters
@@ -22,7 +22,7 @@ We do this by sequencing the execution with the pulses of the system clock.
A single iteration of the volatage rising and falling is a **pulse**. A complete
oscillation from low to high and back to low is a **cycle**. As with all
-[electromagnetic](/Electronics_and_Hardware/Physics_of_electricity/Electromagnetism.md)
+[electromagnetic](Electromagnetism.md)
signals we measure the frequency of the wave in Hertz: cylcles per second. We
also further distinguish the rising and falling edge of a pulse. Rising
represents the signal passing from ground to its maximum voltage and falling is
@@ -44,6 +44,6 @@ The diagram below shows a pulse cycle of 2Hz.
edge-triggered**
The role of the clock is essential in the functioning of the
-[CPU](/Computer_Architecture/CPU/CPU_architecture.md#the-system-clock). It is
+[CPU](CPU_architecture.md#the-system-clock). It is
the system clock that gives CPUs their performance rating: how many processes
can execute within a given clock cycle.
diff --git a/zk/Components.md b/zk/Components.md
index 3f64d93..d2dee60 100644
--- a/zk/Components.md
+++ b/zk/Components.md
@@ -9,7 +9,7 @@ tags:
# Components
We write functional components in the manner of a normal
-[function](/Programming_Languages/React/React_Typescript/Functions.md) that take
+[function](Functions.md) that take
a props argument and return a JSX element.
```jsx
diff --git a/zk/Components_props_hooks.md b/zk/Components_props_hooks.md
index 092653f..07a0610 100644
--- a/zk/Components_props_hooks.md
+++ b/zk/Components_props_hooks.md
@@ -70,4 +70,4 @@ function components.
We change components by using state, not by mutating props. This is consistent
with React's
-[principle of the immutability of elements](https://www.notion.so/Elements-992594b9cd2e483c85cddddffeb16f11).
+[principle of the immutability of elements](Elements-992594b9cd2e483c85cddddffeb16f11).
diff --git a/zk/Connecting_a_frontend_to_a_Docker_backend.md b/zk/Connecting_a_frontend_to_a_Docker_backend.md
index 02beb2d..e4e2cca 100644
--- a/zk/Connecting_a_frontend_to_a_Docker_backend.md
+++ b/zk/Connecting_a_frontend_to_a_Docker_backend.md
@@ -8,9 +8,9 @@ tags: [docker, SQL, node-js]
# Connecting a frontend to a Docker backend
Building on from
-[NodeJS backend with MySQL database](/DevOps/Docker/Docker_Examples/Node_and_MySQL_db.md)
+[NodeJS backend with MySQL database](Node_and_MySQL_db.md)
we can add a frontend by adapting the existing
-[Docker Compose](/DevOps/Docker/Docker_Compose.md) files (one for each
+[Docker Compose](Docker_Compose.md) files (one for each
environment) to accept an additional dependency.
We won't create a container for the frontend as this is not necessary.
diff --git a/zk/Containerization.md b/zk/Containerization.md
index ad2eb05..4d3bb81 100644
--- a/zk/Containerization.md
+++ b/zk/Containerization.md
@@ -33,7 +33,7 @@ increased the speed of transport.
particular implementation of containerization that simplifies the process and
bases it on a standardised specification.
-- Containers are native to the Linux [kernal](/Operating_Systems/The_Kernel.md)
+- Containers are native to the Linux [kernal](The_Kernel.md)
and are key part of how it works. Thus when you run containers on Linux, you
are using native capability. When you use containers on Windows or Mac you
have to run a virtual version of Linux in order to exploit the capabilities of
@@ -53,7 +53,7 @@ groups).
example a container is ignorant of the underlying operating system and
network, by default.
-In ordinary [user space](/Operating_Systems/User_Space.md) applications share
+In ordinary [user space](User_Space.md) applications share
the _same_ processor, memory and file system resources. This increases the
likelihood of resourcing challenges, dependency conflicts and security threats.
Without modularisation and the titration of resources, you are opened up to much
diff --git a/zk/Create_an_SQL_table.md b/zk/Create_an_SQL_table.md
index 6470587..b92821a 100644
--- a/zk/Create_an_SQL_table.md
+++ b/zk/Create_an_SQL_table.md
@@ -11,7 +11,7 @@ We create tables in an SQL database with the `CREATE` command.
Below is an example of this in practice. Each field corresponds to a column. We
specify the name of the field and its corresponding
-[data type](/Databases/SQL/Data_types_in_MySQL.md). Every table must have a
+[data type](Data_types_in_MySQL.md). Every table must have a
**primary key**. In the example, `employee_id` is the primary key.
```sql
diff --git a/zk/Creating_a_schema_and_model.md b/zk/Creating_a_schema_and_model.md
index dda8182..ccc25d0 100644
--- a/zk/Creating_a_schema_and_model.md
+++ b/zk/Creating_a_schema_and_model.md
@@ -9,7 +9,7 @@ tags: [mongo-db, node-js, mongoose]
## Schema
In order start adding
-[collections and documents](/Databases/MongoDB/Introduction.md) to our database,
+[collections and documents](Introduction.md) to our database,
we use Mongoose's **schema** structure. (This is specific to Mongoose and is not
a structure that is a part of Mongo in general.)
@@ -45,7 +45,7 @@ The following data types are available:
> Note that we set our validation criteria as the second property for each
> schema value. There is more info info on validation in a
-> [separate entry](/Databases/MongoDB/Validating_Mongoose_schemas.md);
+> [separate entry](Validating_Mongoose_schemas.md);
## Models
diff --git a/zk/Creating_memory_with_NAND.md b/zk/Creating_memory_with_NAND.md
index b25c35c..f337e1d 100644
--- a/zk/Creating_memory_with_NAND.md
+++ b/zk/Creating_memory_with_NAND.md
@@ -10,9 +10,9 @@ tags: [logic-gates, binary, memory]
# Creating memory with NAND gates
The
-[logic circuit](/Electronics_and_Hardware/Digital_circuits/Digital_circuits.md)
+[logic circuit](Digital_circuits.md)
below demonstrates how memory can be created using
-[NAND](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nand-gate)
+[NAND](Logic_gates.md#nand-gate)
gates. A single bit is stored in memory.
 Interactive version of circuit:
diff --git a/zk/Current.md b/zk/Current.md
index 0845c6d..477ac88 100644
--- a/zk/Current.md
+++ b/zk/Current.md
@@ -17,12 +17,12 @@ So current is the flow of electrons. Charge is the quantity that flows.
## Why current exists
Current exists because of the
-[first law of electrostatics](/Electronics_and_Hardware/Physics_of_electricity/Coulombs_Laws.md).
+[first law of electrostatics](Coulombs_Laws.md).
When there is an excess of electrons at one terminal (i.e. negatively charged
atoms) and a deficiency of electrons at the other terminal (i.e. positively
charged atoms), a
-[_difference of potential_](/Electronics_and_Hardware/Analogue_circuits/Voltage.md)
+[_difference of potential_](Voltage.md)
exists between the two terminals.
When the terminals are connected to each other via a conductor (e.g. copper
diff --git a/zk/Custom_types.md b/zk/Custom_types.md
index 34342ac..db7838b 100644
--- a/zk/Custom_types.md
+++ b/zk/Custom_types.md
@@ -7,7 +7,7 @@ tags:
# Custom types
-Objects and [classes](./Classes.md) are where TypeScript becomes most useful and
+Objects and [classes](Classes.md) are where TypeScript becomes most useful and
powerful. In TypeScript, objects and classes are by definition custom types.
When typing objects, you do not write the types alongside the actual data as you
diff --git a/zk/DeMorgan's_Laws.md b/zk/DeMorgan's_Laws.md
index c393c79..e179560 100644
--- a/zk/DeMorgan's_Laws.md
+++ b/zk/DeMorgan's_Laws.md
@@ -8,7 +8,7 @@ tags: []
DeMorgan's laws express some fundamental equivalences that obtain between the
Boolean
-[connectives](/Logic/Propositional_logic/Truth-functional_connectives.md).
+[connectives](Truth-functional_connectives.md).
## First Law
diff --git a/zk/Defining_a_computer.md b/zk/Defining_a_computer.md
index c4809be..9963bee 100644
--- a/zk/Defining_a_computer.md
+++ b/zk/Defining_a_computer.md
@@ -17,7 +17,7 @@ single set of tasks according to prewritten instructions. We’ll take the term
_computer_ to mean general purpose computer.
Simplified model of what a computer is:
-
+
Although the input, output and storage parts of a computer are very important,
they will not be the focus of this course. Instead we are going to learn all
@@ -28,7 +28,7 @@ instructions to make calculations.
### Early computing (_Crash Course Computer Science)_
-[Early Computing: Crash Course Computer Science #1](https://www.youtube.com/watch?v=O5nskjZ_GoI)
+[Early Computing: Crash Course Computer Science #1](watch?v=O5nskjZ_GoI)
- The abacus was created because the scale of society had become greater than
what a single person could create and manipulate in their mind.
@@ -57,9 +57,9 @@ instructions to make calculations.
wind, drift, slope and elevation. These were used well into WW2 but they were
limited to the particular type of cannon or shell
-
+
-
+
> Before the invention of actual computers, 'computer' was a job-title denoting
> people who were employed to conduct complex calculations, sometimes with the
diff --git a/zk/Devices.md b/zk/Devices.md
index e0af567..fee6394 100644
--- a/zk/Devices.md
+++ b/zk/Devices.md
@@ -9,7 +9,7 @@ tags:
Devices are hardware that require access to the CPU in order to function.
Devices can either be external and plugged-in or internal to the motherboard.
-The most common type of device that you will work with are [disks](./Disks.md).
+The most common type of device that you will work with are [disks](Disks.md).
Devices are files but they have some different capabilities than ordinaryq
files. There are two types: **block** and **stream**. Device files reside in the
@@ -45,7 +45,7 @@ brw-rw---- 1 root disk 259, 3 Jun 4 11:00 nvme0n1p3
> programs like `ls` and `cat`.
The
-[mode](/Programming_Languages/Shell_Scripting/File_permissions_and_execution.md#what-the-output-means)
+[mode](File_permissions_and_execution.md#what-the-output-means)
is different from ordinary files. Each device file is prepended with
`b, p, c, s` before the standard permissions. These stand for the major types of
devices: _block, character, pipe_ and _socket_.
@@ -65,7 +65,7 @@ devices: _block, character, pipe_ and _socket_.
`/dev/null` is a virtual device: it doesn't actually exist as a piece of
hardware on the system. It can be useful when
-[bash scripting](/Programming_Languages/Shell/Redirect_to_dev_null.md) as a
+[bash scripting](Redirect_to_dev_null.md) as a
place to direct output that you don't care about, for example errors or verbose
program read-outs.
diff --git a/zk/Digital_circuits.md b/zk/Digital_circuits.md
index 2862d5b..fe705be 100644
--- a/zk/Digital_circuits.md
+++ b/zk/Digital_circuits.md
@@ -7,10 +7,10 @@ tags: [circuits]
# Digital circuits
Ultimately every process in a computer is the product of a digital
-[circuit](/Electronics_and_Hardware/Analogue_circuits/Circuits.md) that is
+[circuit](Circuits.md) that is
working on binary values. In contrast to electrical circuits, digital circuits
are not represented in an
-[analogue](/Electronics_and_Hardware/Analogue_and_digital.md) fashion.
+[analogue](Analogue_and_digital.md) fashion.
Analogue circuits work on the basis of real continuous phenomena in the world:
charges and currents. As a result, the key properties of a circuit - voltage,
@@ -21,7 +21,7 @@ natural flow of current and ensure that it only runs within desired parameters.
In a standard electrical circuit, voltage, current and resistance can vary over
a wide range of values however in the binary context we want to deal with
discrete values (zeros and ones) which can be fed into the various
-[logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md).
+[logic gates](Logic_gates.md).
We therefore need a way to represent 'on' and 'off' as single quantities. We do
this by stipulating that a given voltage corresponds to 'on' (high) and another
@@ -31,6 +31,6 @@ voltage is inherently analogue but we basically binary-encode them. Formally
be within 2-5V depending on the circuit design and anything between 0 - 0.8V is
considered off.
-The [transistor](/Electronics_and_Hardware/Digital_circuits/Transistors.md) is
+The [transistor](Transistors.md) is
the electrical component that enables us to represent given voltage ranges as
being 'on' or 'off'.
diff --git a/zk/Dividing_fractions.md b/zk/Dividing_fractions.md
index 817cd7a..925d2ca 100644
--- a/zk/Dividing_fractions.md
+++ b/zk/Dividing_fractions.md
@@ -10,16 +10,16 @@ tags:
Suppose you have the following shape:
-
+
One part is shaded. This represents one-eighth of the original shape.
-
+
Now imagine there are four instances of the shape and one-eighth remains shaded.
How man one-eighths are there in four?
-
+
The shaded proportion represents $\frac{1}{8}$ of the shape. Imagine four of
these shapes, how many eighths are there?
diff --git a/zk/Docker_Compose.md b/zk/Docker_Compose.md
index d8264c2..ef85182 100644
--- a/zk/Docker_Compose.md
+++ b/zk/Docker_Compose.md
@@ -93,4 +93,4 @@ services:
## See also
-[NodeJS and MySQL Docker backend](/DevOps/Docker/Docker_Examples/Node_and_MySQL_db.md)
+[NodeJS and MySQL Docker backend](Node_and_MySQL_db.md)
diff --git a/zk/Docker_architecture.md b/zk/Docker_architecture.md
index a3df1b0..e44cbaa 100644
--- a/zk/Docker_architecture.md
+++ b/zk/Docker_architecture.md
@@ -11,7 +11,7 @@ tags: [docker, containerization]

- The Docker Client is a thin API for making
- [REST API](/Databases/REST/RESTful_APIs.md) to the Docker Server. Any CLI
+ [REST API](RESTful_APIs.md) to the Docker Server. Any CLI
command beginning `docker...` is an API request to the server.
- The internal process name for the server is `dockerd`.
- On `docker run...`, `dockerd` calls `containerd`. This process starts the
diff --git a/zk/Docker_general_overview.md b/zk/Docker_general_overview.md
index 6f99f1d..e932c53 100644
--- a/zk/Docker_general_overview.md
+++ b/zk/Docker_general_overview.md
@@ -62,4 +62,4 @@ containers can be launched from the same, single image.
## Docker architectural overview
-See [Docker architecture](/DevOps/Docker/Docker_architecture.md).
+See [Docker architecture](Docker_architecture.md).
diff --git a/zk/Electromagnetism.md b/zk/Electromagnetism.md
index fb1bcd4..14426fa 100644
--- a/zk/Electromagnetism.md
+++ b/zk/Electromagnetism.md
@@ -30,7 +30,7 @@ currents.
> Magnetism is a physical property produced by the _motion_ of electric charge,
> which of course, is the same thing as
-> [electric current](/Electronics_and_Hardware/Analogue_circuits/Current.md)
+> [electric current](Current.md)
A **magnet** is a material or object that produces a magnetic field. This field
is invisible but visible by its effects: pulling on other magnetic materials
diff --git a/zk/Environmental_and_shell_variables.md b/zk/Environmental_and_shell_variables.md
index eeec74f..92d8a29 100644
--- a/zk/Environmental_and_shell_variables.md
+++ b/zk/Environmental_and_shell_variables.md
@@ -46,7 +46,7 @@ spawned instances? Is this even possible or do they die on `exit` .
session. It contains variables that define system properties.
- Every time a
- [shell session](https://www.notion.so/Shell-sessions-e6dd743dec1d4fe3b1ee672c8f9731f6)
+ [shell session](Shell-sessions-e6dd743dec1d4fe3b1ee672c8f9731f6)
spawns, a process takes place to gather and compile information that should be
available to the shell process and its child processes. It obtains the data
for these settings from a variety of different files and settings on the
@@ -155,7 +155,7 @@ variables use `set` .
You can also add variables to config files that run on login such as your user
`.bashrc` / `.zshrc` . This is obviously best for when you want the variables to
persist and be accessible within every
-[shell session](https://www.notion.so/Shell-sessions-e6dd743dec1d4fe3b1ee672c8f9731f6).
+[shell session](Shell-sessions-e6dd743dec1d4fe3b1ee672c8f9731f6).
## Important environmental and shell variables
diff --git a/zk/Equivalent_fractions.md b/zk/Equivalent_fractions.md
index 2eeffb8..2470a4d 100644
--- a/zk/Equivalent_fractions.md
+++ b/zk/Equivalent_fractions.md
@@ -9,7 +9,7 @@ tags:
Two fractions are equivalent if they represent the same value. To begin with we
can represent this visually:
-
+
_Each shaded area is taking up the same proportion of the whole._
diff --git a/zk/Errors.md b/zk/Errors.md
index 8b2af33..21ef94f 100644
--- a/zk/Errors.md
+++ b/zk/Errors.md
@@ -20,4 +20,4 @@ Once the data is returned, React tries to update the state but the component is
unmounted.
As the warning suggests, this can be resolved using the cleanup parameter within
-[useEffect](../../Programming_Languages/React/Hooks/useEffect.md#cleanup-functions).
+[useEffect](useEffect.md#cleanup-functions).
diff --git a/zk/Event_loop.md b/zk/Event_loop.md
index c0e0360..9045ca5 100644
--- a/zk/Event_loop.md
+++ b/zk/Event_loop.md
@@ -28,7 +28,7 @@ If there was only one thread, this would be inefficient and unworkable.
Therefore the framework will be multi-threaded: multiple request-response cycles
can be executed at once by different threads.
-
+
To accomodate the ability to increase the scale of synchronous applications you
need to be able to spawn more threads commensurate to increased demand. This
@@ -46,7 +46,7 @@ dispatching them asynchronously. When a request is made it sends it off and
continues with its execution and handling new requests. Once these resolve, the
data is returned to the main thread.
-
+
## The Event Loop
@@ -61,7 +61,7 @@ Node is continually monitoring the Event Loop in the background.
A running Node application is a single running process. Like everything that
happens within the OS, a process is managed by the
-[kernel](/Operating_Systems/The_Kernel.md) that dispatches operations to the CPU
+[kernel](The_Kernel.md) that dispatches operations to the CPU
in a clock cycle. A thread is a sequence of code that resides within the process
and utilises its memory pool (the amount of memory assigned by the kernel to the
Node process). The Event Loop runs on CPU ticks: a tick is a single run of the
@@ -75,7 +75,7 @@ These six phases create one cycle, or loop, equal to one **tick**. A Node.js
process exits when there is no more pending work in the Event Loop, or when
`process.exit()` is called manually. A program only runs for as long as there
are tasks queued in the Event Loop, or present on the
-[call stack](/Software_Engineering/Call_stack.md).
+[call stack](Call_stack.md).

@@ -93,7 +93,7 @@ The phases are as follows:
are currently set. The Event Loop takes the timer with the shortest wait
time and compares it with the Event Loop's current time. If the wait time
has elapsed, then the timer's callback is queued to be called once the
- [call stack](/Software_Engineering/Call_stack.md) is empty.
+ [call stack](Call_stack.md) is empty.
2. **I/O Callbacks**
- Once timers have been checked and scheduled, Node jumps to I/O operations.
- Node implements a non-blocking input/output interface. This is to say,
diff --git a/zk/Events.md b/zk/Events.md
index 00372ef..19b3e31 100644
--- a/zk/Events.md
+++ b/zk/Events.md
@@ -70,7 +70,7 @@ return (
```
This follows standard practise for
-[controlled-components](/Programming_Languages/React/Hooks/Forms.md). The TS
+[controlled-components](Forms.md). The TS
specific additions:
- We define the change event as being of the type `React.ChangeEvent` and state
diff --git a/zk/Expansions_and_substitutions.md b/zk/Expansions_and_substitutions.md
index cd36429..56580ff 100644
--- a/zk/Expansions_and_substitutions.md
+++ b/zk/Expansions_and_substitutions.md
@@ -81,7 +81,7 @@ the second list against them.
## Parameter expansion: `${...}`
We use most frequently for returning the value of stored
-[variables](/Programming_Languages/Shell/Variables_and_data_types.md).
+[variables](Variables_and_data_types.md).
Techically we do not have to use the braces, we can retrieve with just `$var`
however it's better to use them to minimise interpretation fuck-ups which happen
a lot.
@@ -93,7 +93,7 @@ returned such as only returning from the 6th character: `${var:6}`.
Command substitution (circle-brackets) allows us to put the output of one
command inside another. Bash runs the bracketed command in a
-[sub-shell](/Programming_Languages/Shell/Shell_sessions.md) and then returns it
+[sub-shell](Shell_sessions.md) and then returns it
to the main user shell.
For example:
@@ -107,5 +107,5 @@ echo "The current directory is $(pwd)."
We use arithmetic expansion when we want to calculate numerical values
See
-[Working with numbers in Bash](/Programming_Languages/Shell/Working_with_numbers_in_Bash.md)
+[Working with numbers in Bash](Working_with_numbers_in_Bash.md)
for more.
diff --git a/zk/Fetch_decode_execute.md b/zk/Fetch_decode_execute.md
index 6390639..8b117da 100644
--- a/zk/Fetch_decode_execute.md
+++ b/zk/Fetch_decode_execute.md
@@ -8,7 +8,7 @@ tags: [CPU]
_Fetch, decode, execute_ is the operating cycle of the CPU. We will run through
how this works with reference to the
-[CPU architecture](/Computer_Architecture/CPU/CPU_architecture.md).
+[CPU architecture](CPU_architecture.md).
## Fetch
@@ -59,9 +59,9 @@ to determine which of its circuits should be used for processing.
Now the command will be executed. The operand is copied to the Memory Address
Register and then passed to the Memory Data Register and the command is carried
out by the ALU. The activities of ALU are covered in
-[CPU Architecture](/Computer_Architecture/CPU/CPU_architecture.md#arithmetic-logic-unit)
+[CPU Architecture](CPU_architecture.md#arithmetic-logic-unit)
and the notes on
-[Logic Gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md).
+[Logic Gates](Logic_gates.md).
## Store
@@ -76,7 +76,7 @@ specify where to store the result.
- If the instruction is iterative (e.g. adding two numbers and then multiplying
by another number), the instruction will tell the CPU to store the interim
first value in the CPU's
- [registers](/Computer_Architecture/CPU/CPU_architecture.md#registers). As
+ [registers](CPU_architecture.md#registers). As
these are part of the CPU, the data can be retrieved more readily. If the
value is not expected to be used again immediately, it goes to the DRAM or
harddisk.
diff --git a/zk/File_descriptors.md b/zk/File_descriptors.md
index 36e85a0..fdcfb2b 100644
--- a/zk/File_descriptors.md
+++ b/zk/File_descriptors.md
@@ -16,7 +16,7 @@ File descriptors are shorthand for `stdin`, `stdout` and `stderr`:
| 2 | Standard error | `stderr` |
They are typically used when you want to
-[redirect](/Programming_Languages/Shell/Redirection.md) the output of the
+[redirect](Redirection.md) the output of the
standard/input /output/error somewhere, e.g a file or as input to another
program. A classic case is `[some_command] > /dev/null 2>&1`
@@ -24,7 +24,7 @@ They are all technically "files" which are open and which append themselves to
every process that can run in the shell. For any command or program that you
run, you will be able to access `0`, `1` and `2` for them. In this way they are
similar to variables like
-[`$0`](/Programming_Languages/Shell/Passing_arguments_and_options_to_Bash_scripts.md#passing-arguments)
+[`$0`](Passing_arguments_and_options_to_Bash_scripts.md#passing-arguments)
and
-[`$@`](/Programming_Languages/Shell/Passing_arguments_and_options_to_Bash_scripts.md#passing-arguments).
+[`$@`](Passing_arguments_and_options_to_Bash_scripts.md#passing-arguments).
They have a universal meaning within the context of the shell runtime.
diff --git a/zk/File_permissions_and_execution.md b/zk/File_permissions_and_execution.md
index 756a1b6..d44843f 100644
--- a/zk/File_permissions_and_execution.md
+++ b/zk/File_permissions_and_execution.md
@@ -64,7 +64,7 @@ is:
If you are working solo and not with group access to files, you can disregard
assigning the other numerals, by putting zeros in as placeholders.
-[Permission codes](https://www.notion.so/685254916b2642f189e6316b876e09c9)
+[Permission codes](685254916b2642f189e6316b876e09c9)
### Example
diff --git a/zk/Filesystems.md b/zk/Filesystems.md
index 0832a35..b34ba39 100644
--- a/zk/Filesystems.md
+++ b/zk/Filesystems.md
@@ -11,7 +11,7 @@ tags:
We cannot yet mount or interact with the partitions we have created. This is
because we have not added a filesystem to each partition.
-> A filesytem is a form of [database](/Databases/Basic_database_concepts.md); it
+> A filesytem is a form of [database](Basic_database_concepts.md); it
> supplies the structure to transform a simple block device into the
> sophisticated hierarchy of files and subdirectories that users can understand.
@@ -89,7 +89,7 @@ UUID=c53577b5-92ef-4a0a-9a19-e488bfdfa39c /home ext4 rw,relatime 0 2
```
It shows my root and home filesystems and my
-[swap](/Operating_Systems/Disks/Swap_space.md) file. Note that we use the UUID
+[swap](Swap_space.md) file. Note that we use the UUID
to name the partition rather than its name in `/dev/`. The order of the
parameters is as follows:
diff --git a/zk/Flip_flops.md b/zk/Flip_flops.md
index dc7493a..70ab689 100644
--- a/zk/Flip_flops.md
+++ b/zk/Flip_flops.md
@@ -8,8 +8,8 @@ tags: [logic-gates, binary, memory, clock]
# Flip-Flops
A flip-flop is a type of
-[latch](/Electronics_and_Hardware/Digital_circuits/Latches.md) that is connected
-to a [clock signal](/Electronics_and_Hardware/Digital_circuits/Clock_signals.md)
+[latch](Latches.md) that is connected
+to a [clock signal](Clock_signals.md)
and which executes in time with the clock's pulse. (Sometimes "latch" and
"flip-flop" are used interchangeably but technically a latch is flip-flop
without a clock connection.)
diff --git a/zk/Foreign_keys_in_SQL.md b/zk/Foreign_keys_in_SQL.md
index 19c5c62..e1d2531 100644
--- a/zk/Foreign_keys_in_SQL.md
+++ b/zk/Foreign_keys_in_SQL.md
@@ -8,7 +8,7 @@ tags: [SQL, relational-databases]
# Creating views with foreign keys
We utilise **foreign** and
-[primary keys](/Databases/Relational_Databases/Primary_key.md) to create
+[primary keys](Primary_key.md) to create
relationships between tables in SQL. Foreign keys link data in one table to the
data in another table and are how we cross-reference data in SQL.
diff --git a/zk/Formal_proofs_in_propositional_logic.md b/zk/Formal_proofs_in_propositional_logic.md
index e136e6b..f9489e1 100644
--- a/zk/Formal_proofs_in_propositional_logic.md
+++ b/zk/Formal_proofs_in_propositional_logic.md
@@ -71,7 +71,7 @@ only its result.
## Derivation rules
Derivation rules are
-[syntactic](/Logic/Propositional_logic/Syntax_of_sentential_logic.md) rather
+[syntactic](Syntax_of_sentential_logic.md) rather
than semantic. They are applied on the basis of their form rather than on the
basis of the truth conditions of the sentences they are applied to.
@@ -86,13 +86,13 @@ connective and one for its elimination.
The main derivation rules:
-- [Negation Introduction](/Logic/Proofs/Negation_Introduction.md)
-- [Negation Elimination](/Logic/Proofs/Negation_Elimination.md)
-- [Conjunction Introduction](/Logic/Proofs/Conjunction_Introduction.md)
-- [Conjunction Elimination](/Logic/Proofs/Conditional_Elimination.md)
-- [Disjunction Introduction](/Logic/Proofs/Disjunction_Introduction.md)
-- [Disjunction Elimination](/Logic/Proofs/Disjunction_Elimination.md)
-- [Conditional Introduction](/Logic/Proofs/Conditional_Introduction.md)
-- [Disjunction Elimination](/Logic/Proofs/Disjunction_Elimination.md)
-- [Biconditional Introduction](/Logic/Proofs/Biconditional_Introduction.md)
-- [Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md)
+- [Negation Introduction](Negation_Introduction.md)
+- [Negation Elimination](Negation_Elimination.md)
+- [Conjunction Introduction](Conjunction_Introduction.md)
+- [Conjunction Elimination](Conditional_Elimination.md)
+- [Disjunction Introduction](Disjunction_Introduction.md)
+- [Disjunction Elimination](Disjunction_Elimination.md)
+- [Conditional Introduction](Conditional_Introduction.md)
+- [Disjunction Elimination](Disjunction_Elimination.md)
+- [Biconditional Introduction](Biconditional_Introduction.md)
+- [Biconditional Elimination](Biconditional_Elimination.md)
diff --git a/zk/Forms.md b/zk/Forms.md
index a8e5863..7fc7dd8 100644
--- a/zk/Forms.md
+++ b/zk/Forms.md
@@ -10,7 +10,7 @@ tags:
# Forms using hooks
With hooks, form processing is exactly the same as
-[classes](/Programming_Languages/React/Classes/Forms.md) in terms of the overall
+[classes](Forms.md) in terms of the overall
methodology, but the syntax is slightly different as a result of the `useState`
hook.
@@ -157,7 +157,7 @@ export default FormHookAbstracted;
Note that instead of individual variables `email` , `phone`, `age` , this
approach returns a single object `formValues` . We could therefore access the
-individual values with e.g `[formValues.email](http://formvalues.email)` .
+individual values with e.g `[formValues.email](formvalues.email)` .
As it is an object, it makes resetting to the original state very easy, viz:
diff --git a/zk/Four_bit_adder.md b/zk/Four_bit_adder.md
index 8d626b6..b19067d 100644
--- a/zk/Four_bit_adder.md
+++ b/zk/Four_bit_adder.md
@@ -8,9 +8,9 @@ tags: [logic-gates, binary]
# Four-bit adder
A single
-[half adder](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md#half-adder)
+[half adder](Half_adder_and_full_adder.md#half-adder)
and
-[full adder](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md#fufll-adder)
+[full adder](Half_adder_and_full_adder.md#fufll-adder)
allows us to calculate the sum of two 1-bit numbers, but this is not much use in
practice. To approximate what is really happening at the circuit level in
computers we need to be able to add bigger binary numbers. We will demonstrate
diff --git a/zk/Functions_in_Bash.md b/zk/Functions_in_Bash.md
index c79f03e..4a85968 100644
--- a/zk/Functions_in_Bash.md
+++ b/zk/Functions_in_Bash.md
@@ -32,7 +32,7 @@ echo $expandedRange
We can access all the arguments passed to a function using the `$@` syntax we
encountered before when
-[passing arguments to scripts](/Programming_Languages/Shell/Passing_arguments_to_Bash_scripts.md).
+[passing arguments to scripts](Passing_arguments_to_Bash_scripts.md).
(Here a function is a kind of script in miniature so the process is the same.)
```sh
diff --git a/zk/Half_adder_and_full_adder.md b/zk/Half_adder_and_full_adder.md
index ebfdb28..50be40c 100644
--- a/zk/Half_adder_and_full_adder.md
+++ b/zk/Half_adder_and_full_adder.md
@@ -12,7 +12,7 @@ tags: [logic-gates, binary]
The half adder and full adder are components of digital circuits that enable us
to carry out binary addition. Using adders and half adders we can add two binary
numbers together. Adders are a type of [integrated circuit]() comprising certain
-[logic gates](/Hardware/Digital_circuits/Logic_gates.md) where the arrangement
+[logic gates](Logic_gates.md) where the arrangement
allows for the representation of the addition of bits.
### Example addition
@@ -90,7 +90,7 @@ We can represent this with a simple truth-table:
| 1 | 1 | 0 | 1 |
We can see that the sum bit column replicates the truth-conditions of
-[XOR](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#xor-gate):
+[XOR](Logic_gates.md#xor-gate):
| P | Q | P V Q |
| --- | --- | ----- |
@@ -100,7 +100,7 @@ We can see that the sum bit column replicates the truth-conditions of
| F | F | F |
And the carry-out bit replicates the truth conditions of
-[AND](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#and-gate):
+[AND](Logic_gates.md#and-gate):
| P | Q | P & Q |
| --- | --- | ----- |
diff --git a/zk/Hardware_Description_Language.md b/zk/Hardware_Description_Language.md
index b21c1ea..70a4992 100644
--- a/zk/Hardware_Description_Language.md
+++ b/zk/Hardware_Description_Language.md
@@ -9,12 +9,12 @@ tags: [nand-to-tetris]
An HDL is a declarative programming language used to describe the behaviour or
structure of
-[digital circuits](/Electronics_and_Hardware/Digital_circuits/Integrated_circuits.md).
+[digital circuits](Integrated_circuits.md).
They are used to simulate the circuit and check its response.
The hardware designer specifies a chip's logic by writing an HDL program which
is then rigorously tested. At this stage, a
-[hardware simulator](/Computer_Architecture/Hardware_simulation.md) takes the
+[hardware simulator](Hardware_simulation.md) takes the
HDL program as input and creates a software representation of the chip logic.
The designer can instruct the simulator to test the virtual chip on various sets
of inputs. This is done to check the chip's functionality but also to benchmark
@@ -76,7 +76,7 @@ circuit diagram
#### Pins
In an HDL program we distinguish internal pins along with the standard
-[input and output pins](/Electronics_and_Hardware/Digital_circuits/Integrated_circuits.md).
+[input and output pins](Integrated_circuits.md).
At the level of the interface, we are concerned only with input and output pins
(in the example program these are `a`, `b` and `out`). It is at the level of the
implementation that internal pins are encountered. In the example these are the
@@ -91,7 +91,7 @@ a NOT. `out` is the value that is computed based on the input pins of `a` and
Along with the HDL file we also create a test file. This runs the chip against
the inputs we supply, these will typically be equivalent to the (left-hand)
truth-values column in a truth table which is the same as the parameters passed
-to a [Boolean function](/Logic/Propositional_logic/Boolean_functions.md), for
+to a [Boolean function](Boolean_functions.md), for
example:
```vhdl
diff --git a/zk/Hardware_simulation.md b/zk/Hardware_simulation.md
index 10849be..b3c5bbf 100644
--- a/zk/Hardware_simulation.md
+++ b/zk/Hardware_simulation.md
@@ -8,7 +8,7 @@ tags: [nand-to-tetris]
# Hardware simulation
In order to test our
-[HDL](/Computer_Architecture/Hardware_Description_Language.md) files we load
+[HDL](Hardware_Description_Language.md) files we load
them into the hardware simulator program. We will demonstrate this with the
following XOR implementation:
diff --git a/zk/Hexadecimal_number_system.md b/zk/Hexadecimal_number_system.md
index f36168b..52f3c68 100644
--- a/zk/Hexadecimal_number_system.md
+++ b/zk/Hexadecimal_number_system.md
@@ -10,7 +10,7 @@ tags: [number-systems]
Hexadecimal is the other main number system used in computing. It works in
tandem with the
-[binary number system](/Electronics_and_Hardware/Binary/Binary_number_system.md)
+[binary number system](Binary_number_system.md)
and provides an easier and more accessible means of working with long sequences
of binary numbers.
diff --git a/zk/IO_in_Python.md b/zk/IO_in_Python.md
index 83a180a..d65e954 100644
--- a/zk/IO_in_Python.md
+++ b/zk/IO_in_Python.md
@@ -133,9 +133,9 @@ file.close()
Obviously file access can raise errors - typically when the file you want to
access does not exist (i.e. a `FileNotFoundError`
-[exception](/Programming_Languages/Python/Syntax/Error_handling_in_Python.md)).
+[exception](Error_handling_in_Python.md)).
We can manage this scenario with
-[exception handlers](/Programming_Languages/Python/Syntax/Error_handling_in_Python.md):
+[exception handlers](Error_handling_in_Python.md):
```py
try:
diff --git a/zk/Instruction_set_architectures.md b/zk/Instruction_set_architectures.md
index 7a6225a..65b21dd 100644
--- a/zk/Instruction_set_architectures.md
+++ b/zk/Instruction_set_architectures.md
@@ -6,9 +6,9 @@ tags: [CPU]
# instruction set architectures
-We know that the [ALU](/Computer_Architecture/CPU/Arithmetic_Logic_Unit.md) is
+We know that the [ALU](Arithmetic_Logic_Unit.md) is
responsible for the "execute" stage of the
-[fetch, decode, execute](/Computer_Architecture/CPU/Fetch_decode_execute.md)
+[fetch, decode, execute](Fetch_decode_execute.md)
cycle, implementing the most basic binary operations such as adding two numbers.
Accross different machines and CPU types there can be differences in how the
@@ -39,7 +39,7 @@ Over time, new instructions have been added to the x86 architecture but they all
maintain backwards compatibility with preceding generations.
There have been different, successive generations of x86 corresponding to their
-[word-size](/Electronics_and_Hardware/Binary/Signed_and_unsigned_numbers.md):
+[word-size](Signed_and_unsigned_numbers.md):
16-bit, 32-bit, 64-bit. Word size here just means how many bits the processor
can work with at a time.
diff --git a/zk/Integrated_circuits.md b/zk/Integrated_circuits.md
index c8f168e..8e50dc5 100644
--- a/zk/Integrated_circuits.md
+++ b/zk/Integrated_circuits.md
@@ -10,7 +10,7 @@ tags: [logic-gates]
An integrated circuit (IC) is a single unit that comprises several logic gates
designed for the easy construction of
-[digital circuits](/Electronics_and_Hardware/Digital_circuits/Digital_circuits.md).
+[digital circuits](Digital_circuits.md).
The terms "integrated circuit" and "chip" are often used interchangeably.
An IC puts the gates on a single piece of silicon that has electrical contact
diff --git a/zk/Introduction.md b/zk/Introduction.md
index b645080..83727e2 100644
--- a/zk/Introduction.md
+++ b/zk/Introduction.md
@@ -20,9 +20,9 @@ them as JSON.
Although Mongo is not a relational database it has a structure that we can
understand in relation to that paradigm. A **database** is obviously the overall
structure. It comprises **collections** which are organised sets of data that
-are analagous to [tables](/Databases/Relational_database_architecture.md#table)
+are analagous to [tables](Relational_database_architecture.md#table)
in RDBs. Within each collection are a series of **documents** which we can think
-of as being equivalent to [rows](/Databases/Relational_database_architecture.md)
+of as being equivalent to [rows](Relational_database_architecture.md)
in RDB table: units that comprise the collection.
A document is a container comprising key-value pairs in the manner of an object.
diff --git a/zk/Iterating_through_complex_data_structures_in_Python.md b/zk/Iterating_through_complex_data_structures_in_Python.md
index 6a38dab..1943f53 100644
--- a/zk/Iterating_through_complex_data_structures_in_Python.md
+++ b/zk/Iterating_through_complex_data_structures_in_Python.md
@@ -53,9 +53,9 @@ In Python there are two common ways to handle similar data structures:
### Sorting by common property
Assuming the sub-lists have an identical structure, you can
-[sort](/Programming_Languages/Python/Syntax/Sorting_lists_in_Python.md) them by
+[sort](Sorting_lists_in_Python.md) them by
a common property by passing a
-[lambda function](/Programming_Languages/Python/Syntax/Lambdas_in_Python.md) to
+[lambda function](Lambdas_in_Python.md) to
the `key` value of `sorted()` and `.sort()`.
For example, to sort the following list of lists by the second `age` property:
@@ -108,8 +108,8 @@ data = [
```
Below we use
-[map](/Programming_Languages/Python/Syntax/Map_and_filter_in_Python.md) and a
-[lambda function](/Programming_Languages/Python/Syntax/Lambdas_in_Python.md) to
+[map](Map_and_filter_in_Python.md) and a
+[lambda function](Lambdas_in_Python.md) to
convert the first element of each iner list from a Unix timestamp to a readable
string:
@@ -118,7 +118,7 @@ string:
```
We could also use
-[list comprehension](/Programming_Languages/Python/Syntax/List_comprehension_etc.md)
+[list comprehension](List_comprehension_etc.md)
to achieve the same outcome:
```py
@@ -195,7 +195,7 @@ will simply overwrite the old value for that key.
Accordingly, we create a dictionary which uses the unique key in each list as
the key of each dictionary entry via
-[dictionary comprehension](/Programming_Languages/Python/Syntax/List_comprehension_etc.md#dictionary-comprehension)
+[dictionary comprehension](List_comprehension_etc.md#dictionary-comprehension)
that loops through each value in the inner lists of the multidimensional array.
We then parse the values of the dictionary into a list.
diff --git a/zk/Joins_in_SQL.md b/zk/Joins_in_SQL.md
index 3f7112b..74ce729 100644
--- a/zk/Joins_in_SQL.md
+++ b/zk/Joins_in_SQL.md
@@ -16,7 +16,7 @@ that share the same fields**.
The output will be represented as a table but it is virtual, not an actual
table. (If you wish to actually create a table or a view off the back of a join
operation you should combine the join with the
-[`CREATE TABLE`](/Databases/SQL/Create_an_SQL_table.md) command etc.)
+[`CREATE TABLE`](Create_an_SQL_table.md) command etc.)
## Inner joins
diff --git a/zk/Key_characteristics_of_GraphQL.md b/zk/Key_characteristics_of_GraphQL.md
index 9b747eb..25aaae9 100644
--- a/zk/Key_characteristics_of_GraphQL.md
+++ b/zk/Key_characteristics_of_GraphQL.md
@@ -34,7 +34,7 @@ tags: [graphql, APIs]
> The best way to think of GraphQL architecturally is to think of it as a
> different technique for instantiating the _uniform interface_, _client/server
> decoupling_, and _layered-system architecture_ contraints of traditional
-> [REST APIs](/Databases/REST/RESTful_APIs.md#rest). However, instead of making
+> [REST APIs](RESTful_APIs.md#rest). However, instead of making
> GET or POST requests to a REST endpoint URL and passing parameters, you send a
> structured query object.
diff --git a/zk/LEDs.md b/zk/LEDs.md
index ac573a5..e7cc444 100644
--- a/zk/LEDs.md
+++ b/zk/LEDs.md
@@ -21,6 +21,6 @@ generic diode circuit symbol:
An LED diode lights up when the right amount of current flows through it. A
standard LED has a maximum current of 20mA. An appropriate
-[resistor](/Electronics_and_Hardware/Analogue_circuits/Resistance.md#resistors)
+[resistor](Resistance.md#resistors)
must therefore be added to the circuit to ensure the current doesn't exeedd this
amount.
diff --git a/zk/Lambda_programming_model.md b/zk/Lambda_programming_model.md
index a139356..108a99a 100644
--- a/zk/Lambda_programming_model.md
+++ b/zk/Lambda_programming_model.md
@@ -14,12 +14,12 @@ The overall architecure consists in the following three processes:
## Triggers
-See [AWS Lambda triggers](/DevOps/AWS/AWS_Lambda/Lambda_triggers.md)
+See [AWS Lambda triggers](Lambda_triggers.md)
## Handler function
See
-[AWS Lambda handler function](/DevOps/AWS/AWS_Lambda/Lambda_handler_function.md)
+[AWS Lambda handler function](Lambda_handler_function.md)
## Code
diff --git a/zk/Lambda_triggers.md b/zk/Lambda_triggers.md
index faecefe..cf0d87b 100644
--- a/zk/Lambda_triggers.md
+++ b/zk/Lambda_triggers.md
@@ -26,6 +26,6 @@ Here are some common trigger patterns
### SQS trigger
-- a new message is added to an [SQS](/DevOps/AWS/AWS_Messaging_services.md#sqs)
+- a new message is added to an [SQS](AWS_Messaging_services.md#sqs)
queue
- SQS triggers a Lambda function to execute
diff --git a/zk/Lambdas_in_Python.md b/zk/Lambdas_in_Python.md
index 1afc3f3..8b8660f 100644
--- a/zk/Lambdas_in_Python.md
+++ b/zk/Lambdas_in_Python.md
@@ -13,7 +13,7 @@ Whilst they are unnamed, just like JS, the value they return can be stored in a
variable. They do not require the `return` keyword.
They are most often used unnamed with the functional methods
-[map, filter](/Programming_Languages/Python/Syntax/Map_and_filter_in_Python.md)
+[map, filter](Map_and_filter_in_Python.md)
and reduce.
Here is the two syntaxes side by side:
diff --git a/zk/Latches.md b/zk/Latches.md
index 893b766..188412a 100644
--- a/zk/Latches.md
+++ b/zk/Latches.md
@@ -11,7 +11,7 @@ tags: [logic-gates, binary, memory]
The **combinatorial digital circuits** we have looked at so far have been
non-sequential. The outcome is a function of its immediate set of inputs and
everything happens at once: there is no means of storing state for future use.
-In other words there is no _[memory](/Computer_Architecture/Memory/Memory.md)_.
+In other words there is no _[memory](Memory.md)_.
In contrast, the output of a **sequential digital circuit** depends not only on
its present set of inputs but also on past inputs to the circuit. It has some
@@ -54,7 +54,7 @@ _The representation of an SR Latch in a digital circuit diagram_:
The circuit diagram latch symbol obviously encapsulates more complex
functionality that occurs at the sub-circuit level. We will demonstrate how this
functionality can be achieved with two
-[NOR](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nor-gate) gates.
+[NOR](Logic_gates.md#nor-gate) gates.
The two gates are in a **cross-coupled configuration**. This basically means
that the wires are crossed back on themselves such that the output of one is
diff --git a/zk/Lifecycle_methods.md b/zk/Lifecycle_methods.md
index 45d1bfa..2e3cdf9 100644
--- a/zk/Lifecycle_methods.md
+++ b/zk/Lifecycle_methods.md
@@ -45,7 +45,7 @@ The final phase is unmounting: when the component is removed from the DOM:
6. `componentWillUnmount()`
-
+
## Side-effects: why lifecycle phases matter
diff --git a/zk/List_comprehension_etc.md b/zk/List_comprehension_etc.md
index 2d79b5b..717e011 100644
--- a/zk/List_comprehension_etc.md
+++ b/zk/List_comprehension_etc.md
@@ -11,8 +11,8 @@ element in a list without explicitly using loop syntax.
Since its introduction to the language, the same functionality has become
achievable by using functional methods like
-[`map` and `filter`](/Programming_Languages/Python/Syntax/Map_and_filter_in_Python.md),
-utilising [lambdas](/Programming_Languages/Python/Syntax/Lambdas_in_Python.md)
+[`map` and `filter`](Map_and_filter_in_Python.md),
+utilising [lambdas](Lambdas_in_Python.md)
however list comprehension is often more straightforward and easier to read.
## Syntax
diff --git a/zk/Lists_and_arrays.md b/zk/Lists_and_arrays.md
index c737e79..0690f51 100644
--- a/zk/Lists_and_arrays.md
+++ b/zk/Lists_and_arrays.md
@@ -88,7 +88,7 @@ fi
```
Here we pass all the elements of the array to a
-[test](/Programming_Languages/Shell/Test_values_in_Bash.md) condition which
+[test](Test_values_in_Bash.md) condition which
tests for an empty string.
> NB: This will not immediately work in the context of a function. See below.
@@ -96,7 +96,7 @@ tests for an empty string.
## Weirdness with functions
When you pass an array as an argument to a
-[function](/Programming_Languages/Shell/Functions_in_Bash.md) it will not
+[function](Functions_in_Bash.md) it will not
immediately be understood to be an array.
When we use `$1` to individuate the first function argument this is read as
@@ -163,4 +163,4 @@ done
```
We are leveraging this aspect of Bash when we
-[loop through each character in a string](/Programming_Languages/Shell/Strings_in_bash.md#loop-through-each-character-in-a-string).
+[loop through each character in a string](Strings_in_bash.md#loop-through-each-character-in-a-string).
diff --git a/zk/Lists_in_Python.md b/zk/Lists_in_Python.md
index d7bb52b..bac3af5 100644
--- a/zk/Lists_in_Python.md
+++ b/zk/Lists_in_Python.md
@@ -190,4 +190,4 @@ print(merged_list) # Output: [1, 2, 3, 4, 5, 6]
## See also
-[Sorting lists in Python](/Programming_Languages/Python/Syntax/Sorting_lists_in_Python.md)
+[Sorting lists in Python](Sorting_lists_in_Python.md)
diff --git a/zk/Logic_gates.md b/zk/Logic_gates.md
index e092ac8..c49ded5 100644
--- a/zk/Logic_gates.md
+++ b/zk/Logic_gates.md
@@ -19,19 +19,19 @@ tags: [logic-gates, binary]
Logic gates are the basic building blocks of digital computing. **A logic gate
is an electrical circuit that has one or more than one input and only one
output.** The input and output points of the gate are
-[pins](/Electronics_and_Hardware/Digital_circuits/Integrated_circuits.md) The
+[pins](Integrated_circuits.md) The
input controls the output and the logic determining which types of input
(on/off) lead to specific outputs (on/off) is isomorphic with the
truth-conditions of the
-[Boolean connectives](/Logic/Truth-functional_connectives.md) specifiable in
-terms of [truth tables](/Logic/Truth-tables.md).
+[Boolean connectives](Truth-functional_connectives.md) specifiable in
+terms of [truth tables](Truth-tables.md).
Physically, what 'travels through' the gates is electrical current and what
constitutes the 'gate' is a
-[transistor](/Electronics_and_Hardware/Digital_circuits/Transistors.md)
+[transistor](Transistors.md)
responding to the current. Going up a level of abstraction, the current/ charge
is identified with a
-[bit](/Electronics_and_Hardware/Binary/Binary_units_of_measurement.md#binary-units-of-measurement).
+[bit](Binary_units_of_measurement.md#binary-units-of-measurement).
It is bits that go into the gate and bits which come out: binary information
that may be either 1 or 0.
@@ -45,10 +45,10 @@ one elemen>tary gate and/or other composite gates.
An example of a composite gate would be a three-way AND. An AND with three
inputs rather than the standard two that furnish the elementary AND gate. This
gate would output 1 when all three gates have the value 1 and 0 otherwise.
-[Adders](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md)
-and [latche>s](/Electronics_and_Hardware/Digital_circuits/Latches.md) whilst
+[Adders](Half_adder_and_full_adder.md)
+and [latche>s](Latches.md) whilst
being
-[integrated circuits](/Electronics_and_Hardware/Digital_circuits/Integrated_circuits.md)
+[integrated circuits](Integrated_circuits.md)
are also, technically speaking, composite gates.
## Gate interface / gate implementation
@@ -73,7 +73,7 @@ represented in the interface diagram.
> is a one-to-many relationship at work here. From the point of view of the user
> interface these differences should not be detectable. This is another example
> of
-> [hardware abstraction](/Computer_Architecture/Hardware_abstraction_and_modularity.md)
+> [hardware abstraction](Hardware_abstraction_and_modularity.md)
## NOT gate
@@ -138,7 +138,7 @@ NANDs alone.
## OR gate
> The OR gate represents the truth conditions of the
-> [disjunction](/Logic/Truth-functional_connectives### Truth
+> [disjunction](Truth-functional_connectives### Truth
> conditions.md#disjunction) truth functional connective
### Symbol
diff --git a/zk/Logical_consistency.md b/zk/Logical_consistency.md
index 1434008..c5d4002 100644
--- a/zk/Logical_consistency.md
+++ b/zk/Logical_consistency.md
@@ -68,7 +68,7 @@ In other terms, if you can derive a contradiction from the set, the set is
logically inconsistent.
A
-[contradiction](/Logic/General_concepts/Logical_truth_and_falsity.md#logical-falsity)
+[contradiction](Logical_truth_and_falsity.md#logical-falsity)
has very important consequences for reasoning because if a set of propositions
is inconsistent, any other proposition is derivable from it.
@@ -79,7 +79,7 @@ sequence of reasoning._
Here we want to derive some proposition $Q$. If we can derive a contradiction
from its negation as an assumption then, by the
-[negation elimination](/Logic/Proofs/Negation_Elimination.md)) rule, we can
+[negation elimination](Negation_Elimination.md)) rule, we can
assert $Q$. This is why contradictions should be avoided in arguments, they
'prove' everything which, by association, undermines any particular premise you
are trying to assert.
diff --git a/zk/Logical_equivalence.md b/zk/Logical_equivalence.md
index 03ee328..6e23674 100644
--- a/zk/Logical_equivalence.md
+++ b/zk/Logical_equivalence.md
@@ -39,6 +39,6 @@ $$
Note that the property of equivalence stated in terms of derivablity above is
identical to the derivation rule for the
-[material biconditional](/Logic/Proofs/Biconditional_Introduction.md):
+[material biconditional](Biconditional_Introduction.md):
-
+
diff --git a/zk/Logical_indeterminacy.md b/zk/Logical_indeterminacy.md
index d4d4a7e..e0e8371 100644
--- a/zk/Logical_indeterminacy.md
+++ b/zk/Logical_indeterminacy.md
@@ -8,9 +8,9 @@ tags: [propositional-logic]
The vast majority of propositions in natural and formal logical languages are
**neither
-[logically true](/Logic/General_concepts/Logical_truth_and_falsity.md#logical-truth)
+[logically true](Logical_truth_and_falsity.md#logical-truth)
or
-[logically false](/Logic/General_concepts/Logical_truth_and_falsity.md#logical-falsity)**.
+[logically false](Logical_truth_and_falsity.md#logical-falsity)**.
This makes sense because propositions of this form are all either tautologies or
contradictions and as such do not express information about the state of events
in the world. We call propositions that are neither logically true or logically
diff --git a/zk/Logical_possibility_and_necessity.md b/zk/Logical_possibility_and_necessity.md
index 4074ac2..6753d34 100644
--- a/zk/Logical_possibility_and_necessity.md
+++ b/zk/Logical_possibility_and_necessity.md
@@ -9,8 +9,8 @@ tags: [propositional-logic]
## Logical possibility
In distinguishing the properties of
-[logical consistency](/Logic/General_concepts/Logical_consistency.md) and
-[validity](/Logic/General_concepts/Validity_and_entailment.md) we make tacit use
+[logical consistency](Logical_consistency.md) and
+[validity](Validity_and_entailment.md) we make tacit use
of the notion of **possibility**. This is because when we consider the validity
of an argument we are assessing truth-conditions and this consists in asking
ourselves what could or could not be the case: were it such that _P_, then it
@@ -60,7 +60,7 @@ From this we can derive the following property of logical possibility:
A proposition is _logically necessary_ if it is true in every logically possible
circumstance which is to say: true on every possible truth functional
assignment. Necessity and
-[logical truth](/Logic/General_concepts/Logical_truth_and_falsity.md#logical-truth)
+[logical truth](Logical_truth_and_falsity.md#logical-truth)
are therefore synonyms: anything that is logically true (a tautology) is true by
necessity (could not be otherwise.)
diff --git a/zk/Logical_truth_and_falsity.md b/zk/Logical_truth_and_falsity.md
index 1ad422a..78a77cf 100644
--- a/zk/Logical_truth_and_falsity.md
+++ b/zk/Logical_truth_and_falsity.md
@@ -25,7 +25,7 @@ Apples are fruits and apples are not fruits
Neither proposition can be true because the truth of the first clause is
contradicted by the second. By the principle of
-[consistency](/Logic/General_concepts/Logical_consistency.md), it is not
+[consistency](Logical_consistency.md), it is not
possible for both clauses to be true at once therefore the proposition, overall
has the truth value of false.
@@ -96,7 +96,7 @@ technicalities that have philosophically interesting consequences.
- If an argument contains premises which are logically false than this argument
will perforce be valid. This is because one cannot consistently assert the
premises and deny the conclusion which is the definition of
- [validity](/Logic/General_concepts/Validity_and_entailment.md). However the
+ [validity](Validity_and_entailment.md). However the
_reason_ why one cannot consistently assert the premises and deny the
conclusions is because one cannot consistently assert the premises - they
conflict with each other. Furthermore as the argument contains false premises,
diff --git a/zk/Managing_environments.md b/zk/Managing_environments.md
index 9a071a1..86714ec 100644
--- a/zk/Managing_environments.md
+++ b/zk/Managing_environments.md
@@ -18,7 +18,7 @@ With a full-scale Node application you will typically run three environments:
To determine the current environment we can use the variable
**`process.env.NODE_ENV`** from the
-[global process object](/Programming_Languages/Node/Architecture/Process_object.md).
+[global process object](Process_object.md).
This works universally regardless of the kind of Node app we are building.
If you have not manually set up your environments, **`process.env.NODE_ENV`**
@@ -29,7 +29,7 @@ will return `undefined`.
#### For the session
`NODE_ENV` is a bash
-[environment variable](/Programming_Languages/Shell_Scripting/Environmental_and_shell_variables.md)
+[environment variable](Environmental_and_shell_variables.md)
like any other. So we can set it in the normal way:
```bash
@@ -45,7 +45,7 @@ In Express, there is a built in method for retrieving the current envrionment:
## Configuring environments
-We use the third-party [Config](https://github.com/node-config/node-config)
+We use the third-party [Config](node-config)
package to manage different configurations based on the environment.
Once installed we set up a dedicated config directory with a structure as
@@ -85,7 +85,7 @@ for our application. We obviously shouldn't store this data openly in our config
files since it would be made public.
We can do so securely by utilising
-[environmental variables](../Shell_Scripting/Environmental_and_shell_variables.md)
+[environmental variables](Environmental_and_shell_variables.md)
alongside the config pacakage.
We create a file called `custom-environment-variables` (must be called this) and
diff --git a/zk/Memoization.md b/zk/Memoization.md
index a4e3e31..b8d6673 100644
--- a/zk/Memoization.md
+++ b/zk/Memoization.md
@@ -71,7 +71,7 @@ const handleSubmit = useCallback(
);
```
-Note that the syntax is similar to [useEffect](./useEffect.md): there is a
+Note that the syntax is similar to [useEffect](useEffect.md): there is a
dependency array. The effect is the same: the function contained within
`useCallback` will only re-rendered if one of these dependencies changes.
However (see next section) the function will run in its memoized form on every
diff --git a/zk/Memory.md b/zk/Memory.md
index c8e1a0b..15a7d9a 100644
--- a/zk/Memory.md
+++ b/zk/Memory.md
@@ -12,7 +12,7 @@ tags: [memory, motherboard]
> A CPU is just an operator on memory. It reads its instructions and data from
> the memory and writes back out to the memory. (Ward 2021)
-When a [CPU](/Computer_Architecture/CPU/CPU_architecture.md) executes a program,
+When a [CPU](CPU_architecture.md) executes a program,
it needs a place to store the program's **instructions** and **related data**.
This is the role of memory.
@@ -43,11 +43,11 @@ DRAM uses capacitors to create the memory cell:
In a DRAM cell, each bit of data is stored as a charge in a capacitor. The
presence of charge represents a '1' bit and the absence of charge represents a
'0' bit. Each of these cells is paired with a
-[transistor](/Electronics_and_Hardware/Digital_circuits/Transistors.md) that
+[transistor](Transistors.md) that
controls the reading and writing of data.
However capacitors lose
-[charge](/Electronics_and_Hardware/Analogue_circuits/Current.md) over time due
+[charge](Current.md) over time due
to leaks. As a result DRAM is memory that needs to be refreshed (recharged)
frequently. For this reason and because it only uses one transistor and
capacitor per bit, DRAM is the less expensive form of volatile memory.
@@ -59,7 +59,7 @@ implementation is different. Unlike DRAM it doesn't use capacitors. Consequently
the transistors do not leak or need to be refreshed, hence why SRAM is _static_
and DRAM is _dynamic_.
-SRAM uses [flip flops](/Electronics_and_Hardware/Digital_circuits/Flip_flops.md)
+SRAM uses [flip flops](Flip_flops.md)
to store the bits. It also uses multiple transistors per bit. This makes it
faster than DRAM but more expensive. DRAM is at least ten times slower than
SRAM.
@@ -68,18 +68,18 @@ SRAM.
The following steps outline the way in which memory interacts with the processor
during computational cycles, once the
-[bootstrapping](/Operating_Systems/Boot_process.md) process has completed and
+[bootstrapping](Boot_process.md) process has completed and
the OS kernel is itself loaded into memory.
1. A file is loaded from the harddisk into memory.
2. The instruction at the first address is sent to the CPU, travelling accross
- the data bus part of the [system bus](/Computer_Architecture/Bus.md).
+ the data bus part of the [system bus](Bus.md).
3. The CPU processes this instruction and then sends a request accross the
address bus part of the system bus for the next instruction to the memory
controller within the
- [chipset](/Computer_Architecture/Chipset_and_controllers.md).
+ [chipset](Chipset_and_controllers.md).
4. The chipset finds where this instruction is stored within the
- [DRAM](/Computer_Architecture/Memory/Memory.md#dram) and issues a request to
+ [DRAM](Memory.md#dram) and issues a request to
have it read out and send to the CPU over the data bus.
> This is a simplified account; it is not the case that only single requests are
@@ -177,7 +177,7 @@ is the number of bits.
We need to reverse this formula to find out how many bits we need to represent a
given number of addresses. We can do this with a
-[logarithm](/Mathematics/Algebra/Logarithms.md).
+[logarithm](Logarithms.md).
We can reverse the formula as follows: number of bits = $\log_2$(number of
addresses).
@@ -195,7 +195,7 @@ Using memory addresses we end up with tables like the following:
| 0000000000000010 | 0010001001001010 |
This is hard to parse so we can instead use
-[hexadecimal numbers](/Electronics_and_Hardware/Binary/Hexadecimal_number_system.md)
+[hexadecimal numbers](Hexadecimal_number_system.md)
to represent the addresses:
| Memory address (as hex) | Data (as binary) |
@@ -205,7 +205,7 @@ to represent the addresses:
| 0x0002 | 0010001001001010 |
By itself, the the data is meaningless but we know from
-[binary encoding](/Electronics_and_Hardware/Binary/Binary_encoding.md) that the
+[binary encoding](Binary_encoding.md) that the
binary data will correspond to some meaningful data, such as a character or a
colour, depending on the encoding scheme used. The above table could correspond
to the characters for 'A', 'B' and 'C' in the ASCII encoding scheme:
diff --git a/zk/Messaging_services.md b/zk/Messaging_services.md
index 9f3ded9..03cff4d 100644
--- a/zk/Messaging_services.md
+++ b/zk/Messaging_services.md
@@ -15,7 +15,7 @@ apps and software components built in AWS, with automatic encryption. It helps
with decoupling and scaling.
As the name indicates, its operating mode is that of a
-[queue](/Data_Structures/Queue.md) data structure offering first-in, first-out
+[queue](Queue.md) data structure offering first-in, first-out
and other queue implementations.
An example application of this would be to set up an SQS queue that receives
diff --git a/zk/Middleware.md b/zk/Middleware.md
index e78cc83..5eadbb8 100644
--- a/zk/Middleware.md
+++ b/zk/Middleware.md
@@ -73,10 +73,10 @@ It would make more sense to run this only in development.
### Accessing current Node environment
We can control which middleware we run via the Node envrionment variables:
-`process.env` (see for instance [ports](./Ports.md)).
+`process.env` (see for instance [ports](Ports.md)).
We could set
-[Morgan](/Programming_Languages/NodeJS/Modules/Third_party/Morgan.md) to run
+[Morgan](Morgan.md) to run
only in development with:
```js
diff --git a/zk/Mixed_and_improper_fractions.md b/zk/Mixed_and_improper_fractions.md
index 21abd78..dc52f2a 100644
--- a/zk/Mixed_and_improper_fractions.md
+++ b/zk/Mixed_and_improper_fractions.md
@@ -39,7 +39,7 @@ $$
$$
But we know that when we
-[add fractions with a common denominator](./Add_Subtract_Fractions.md#adding-subracting-fractions-with-common-denominators),
+[add fractions with a common denominator](Add_Subtract_Fractions.md#adding-subracting-fractions-with-common-denominators),
we only add the numerators, not the denominators. Thus the calculation would
actually be:
@@ -108,7 +108,7 @@ $$
$$
2. Then carry out the multiplication
- [using factorization](./Multiplying_fractions.md#prime-factorisation-in-place):
+ [using factorization](Multiplying_fractions.md#prime-factorisation-in-place):
$$
\begin{split}
@@ -137,7 +137,7 @@ $$
Again we convert the mixed fraction into an improper fraction and then follow
the requisite rule, in the case of division this is to
-[invert and multiply]('./../Dividing_fractions.md#formal-specification-of-how-to-divide-fractions').
+[invert and multiply](Dividing_fractions.md#formal-specification-of-how-to-divide-fractions').
Calculate $-4 \frac{4}{5} \div 5 \frac{3}{5}$.
diff --git a/zk/Modelling_relationships.md b/zk/Modelling_relationships.md
index 6ff0a2b..e116a0a 100644
--- a/zk/Modelling_relationships.md
+++ b/zk/Modelling_relationships.md
@@ -12,7 +12,7 @@ a collection with the proprties `age` and `publications` and the author name,
say `Tosh Gnomay` was a document in this collection? This means we would have an
interaction between two collections. In this entry we will look at how to work
with interrelated collections. This is equivalent to establishing
-[joins](/Databases/SQL/10_Joins.md) in a relational database.
+[joins](10_Joins.md) in a relational database.
There are two main approaches to modelling relationships between data:
**normalisation** and **denormalisation**.
diff --git a/zk/Monitoring_processes_and_resources.md b/zk/Monitoring_processes_and_resources.md
index ac46659..bf0539d 100644
--- a/zk/Monitoring_processes_and_resources.md
+++ b/zk/Monitoring_processes_and_resources.md
@@ -10,7 +10,7 @@ tags: [systems-programming]
### `top`/`htop`
-We can use [ps](/Programming_Languages/Shell_Scripting/Processes.md) to list the
+We can use [ps](Processes.md) to list the
currently running processes but it does not provide much information about the
resource metrics or how the process changes over time. We can use `top` to get
more information.
@@ -60,7 +60,7 @@ _Here I have pressed `u` to show only the processes associated with my user:_
```
- `VIRT`
- The total amount of
- [virtual memory](/Operating_Systems/Virtual_memory_and_the_MMU.md) used by
+ [virtual memory](Virtual_memory_and_the_MMU.md) used by
the process including: program code, data, shared libraries, pages that have
been swapped, pages that have been mapped but not used.
- `RES`
@@ -68,7 +68,7 @@ _Here I have pressed `u` to show only the processes associated with my user:_
- The non swapped _physical_ memory the process has used
- `SHR`
- The size of the process's
- [shared pages](/Operating_Systems/Virtual_memory_and_the_MMU.md#shared-pages)
+ [shared pages](Virtual_memory_and_the_MMU.md#shared-pages)
- `S`
- Status:
- S for sleeping (idle)
@@ -104,13 +104,13 @@ procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
- Total kbs swapped to disk
- Total kbs free
- Total kbs currently in
- [buffer](/Hardware/Memory/Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
+ [buffer](Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
and not written
- Total amount of virtual memory in the
- [cache](/Hardware/Memory/Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
+ [cache](Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
- `swap`
- Distinguishes amount of memory
- [swapped](/Operating_Systems/Disks/Swap_space.md) in (`si`) to memory and
+ [swapped](Swap_space.md) in (`si`) to memory and
swapped out (`so`) to disk
- `io`
- Disk actions
@@ -135,7 +135,7 @@ gives me some useful info about which files VS Code is using:
## System calls: `strace`
A system call is when a process requests a service from the
-[kernel](/Operating_Systems/The_Kernel.md), for instance an I/O operation to
+[kernel](The_Kernel.md), for instance an I/O operation to
memory. We can trace these system calls with `strace`.
## CPU performance
@@ -167,7 +167,7 @@ $ uptime
We know that processes primarily interact with virtual memory in the form of
pages which are then translated to physical blocks by the kernel via the
-[MMU](/Operating_Systems/Virtual_memory_and_the_MMU.md). There are several tools
+[MMU](Virtual_memory_and_the_MMU.md). There are several tools
which provide windows onto this process.
### System page size
@@ -186,7 +186,7 @@ This will typically be the same for all Linux systems.
`free` displays the total amount of free and¬used physical and swap memory in
the system, as well as the
-[buffers and caches](/Hardware/Memory/Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
+[buffers and caches](Role_of_memory_in_computation.md#relation-between-cache-and-buffers)
used by the kernel.
```bash
diff --git a/zk/Motherboard.md b/zk/Motherboard.md
index 46b766d..2191aab 100644
--- a/zk/Motherboard.md
+++ b/zk/Motherboard.md
@@ -11,9 +11,9 @@ tags: [motherboard]
The motherboard is the foundation of a computer. It allocates power and allows
communication to and between the
-[CPU](/Computer_Architecture/CPU/CPU_architecture.md),
-[RAM](/Computer_Architecture/Memory/Memory.md),
-[harddisk](/Operating_Systems/Disks/What_are_disks.md) and all other hardware
+[CPU](CPU_architecture.md),
+[RAM](Memory.md),
+[harddisk](What_are_disks.md) and all other hardware
components.
It is a printed circuit board and is always the largest board within the
diff --git a/zk/Multiplying_fractions.md b/zk/Multiplying_fractions.md
index 0f984ee..b45e673 100644
--- a/zk/Multiplying_fractions.md
+++ b/zk/Multiplying_fractions.md
@@ -31,7 +31,7 @@ $$
It would be laborious to reduce such a large product using factor trees or the
repeated application of divisors, as defined in
-[reducing fractions](./Reducing_fractions.md). We can use a more efficient
+[reducing fractions](Reducing_fractions.md). We can use a more efficient
method. This method can be applied at the point at which we conduct the
multiplication rather than afterwards once we have the product. We express the
the initial multiplicands as prime factors:
diff --git a/zk/Mutations_with_Apollo_Client.md b/zk/Mutations_with_Apollo_Client.md
index 7d0b49f..91c7beb 100644
--- a/zk/Mutations_with_Apollo_Client.md
+++ b/zk/Mutations_with_Apollo_Client.md
@@ -150,7 +150,7 @@ const resolvers = {
We invoke the `useMutation` hook to issue mutations from the client-side.
As with queries and
-[query constants](/Databases/GraphQL/Apollo/Apollo_Client.md#query-constants) we
+[query constants](Apollo_Client.md#query-constants) we
wrap our mutation in a `gql` template string:
```js
diff --git a/zk/Negation_Elimination.md b/zk/Negation_Elimination.md
index 2fe5405..ffa21ce 100644
--- a/zk/Negation_Elimination.md
+++ b/zk/Negation_Elimination.md
@@ -6,7 +6,7 @@ tags: []
# Negation Elimination
-Like the [introduction](/Logic/Proofs/Negation_Introduction.md) rule for
+Like the [introduction](Negation_Introduction.md) rule for
negation, the elimination rule also works by deriving a contradiction. It is
basically _Negation Introduction_ in reverse. Instead of starting the sub-proof
with a true proposition from which you derive a contradiction, you start with
diff --git a/zk/Network_requests_in_Python.md b/zk/Network_requests_in_Python.md
index 4a7e31b..33502d1 100644
--- a/zk/Network_requests_in_Python.md
+++ b/zk/Network_requests_in_Python.md
@@ -7,7 +7,7 @@ tags: [python, APIs]
# Making network requests in Python
We can use the `requests` package to make API requests to
-[RESTful](/Databases/REST/RESTful_APIs.md) resources and handle the data as
+[RESTful](RESTful_APIs.md) resources and handle the data as
JSON.
```sh
@@ -68,7 +68,7 @@ Running `main` returns:
```
This is JSON but in Python is a
-[dictionary](/Programming_Languages/Python/Syntax/Dictionaries_in_Python.md)
+[dictionary](Dictionaries_in_Python.md)
We can use standard dictionary methods to handle the data. For example, we'll
add to the existing `try` block:
diff --git a/zk/Node_and_MySQL_db.md b/zk/Node_and_MySQL_db.md
index 9acdac1..81938d1 100644
--- a/zk/Node_and_MySQL_db.md
+++ b/zk/Node_and_MySQL_db.md
@@ -7,7 +7,7 @@ tags: [docker, SQL, node-js]
# Docker example: NodeJS backend with MySQL database
-We will utilise [Docker Compose](/DevOps/Docker/Docker_Compose.md) to combine
+We will utilise [Docker Compose](Docker_Compose.md) to combine
two containers:
- A container for the NodeJS backend
@@ -19,7 +19,7 @@ configuration.
Each of the files listed below would be saved to the same source directory which
would then form the basis of the
-[build context](/DevOps/Docker/Creating_a_Docker_image.md#creating-a-docker-image).
+[build context](Creating_a_Docker_image.md#creating-a-docker-image).
## Docker Compose file
@@ -136,7 +136,7 @@ docker-compose -up
In the example, the database connection information in the Node source is coming
from the
-[`process.env`](/Programming_Languages/NodeJS/Architecture/Managing_environments.md)
+[`process.env`](Managing_environments.md)
object, which itself is sourcing the values `MYSQL_HOST`, `MYSQL_PASSWORD` etc
from the Docker compose file. Therefore these values are hardcoded there.
diff --git a/zk/Non_null_assertion.md b/zk/Non_null_assertion.md
index a0ff720..aa124f3 100644
--- a/zk/Non_null_assertion.md
+++ b/zk/Non_null_assertion.md
@@ -36,5 +36,5 @@ However it should be used carefully and sparingly because you are obviously
turning off core type-checking and overuse nullifies the purpose of TypeScript.
One way to get around it is to use better
-[type-guarding](./Type_guarding_and_narrowing.md) and conditionality and to
+[type-guarding](Type_guarding_and_narrowing.md) and conditionality and to
cover cases where the value may be undefined.
diff --git a/zk/Ohms_Law.md b/zk/Ohms_Law.md
index b2b5f4a..3b313fc 100644
--- a/zk/Ohms_Law.md
+++ b/zk/Ohms_Law.md
@@ -8,9 +8,9 @@ tags: [physics, electricity]
# Ohm's Law
The relationship between
-[current](/Electronics_and_Hardware/Analogue_circuits/Current.md),
-[voltage](/Electronics_and_Hardware/Analogue_circuits/Voltage.md), and
-[resistance](/Electronics_and_Hardware/Analogue_circuits/Resistance.md) is
+[current](Current.md),
+[voltage](Voltage.md), and
+[resistance](Resistance.md) is
defined by Ohm's Law:
> The current flowing from one point to another is equal to the voltage accross
diff --git a/zk/Package_management.md b/zk/Package_management.md
index 1a68e7a..cde59a9 100644
--- a/zk/Package_management.md
+++ b/zk/Package_management.md
@@ -32,7 +32,7 @@ We can pinpoint specific dependencies in the `package.json`, e.g.
See whether your dependency version is out of date use `npm outdated`. This
gives us a table, for example:
-
+
- _Latest_ tells us the latest release available from the developers
- _Wanted_ tells us the version that our `package.json` rules target. To take
@@ -48,4 +48,4 @@ gives us a table, for example:
`npm update` only updates from _current_ to _wanted_. In other words it only
updates in accordance with your caret and tilde rules applied to
-[semantic versioning](/Software_Engineering/Semantic_versioning.md).
+[semantic versioning](Semantic_versioning.md).
diff --git a/zk/Partitions.md b/zk/Partitions.md
index a3bbbdc..3e9a0f9 100644
--- a/zk/Partitions.md
+++ b/zk/Partitions.md
@@ -9,9 +9,9 @@ tags:
# Disk partitions
-A disk is divided up into [partitions](/Operating_Systems/Disks/Partitions.md)
+A disk is divided up into [partitions](Partitions.md)
which are subsections of the overall disk. The kernel presents each partition as
-a [block device](/Operating_Systems/Devices.md#Devices) as it would with an
+a [block device](Devices.md#Devices) as it would with an
entire disk.
The disk dedicates a small part of its contents to a **partition table**: this
@@ -81,7 +81,7 @@ The two tools disclose that the main harddrive is `/dev/nvme0n1` (equivalent to
the BIOS. In Linux this will be GRUB.
- Root dir (`/dev/nvme0n1p2`)
- This is the domain of the
- [superuser](/Operating_Systems/User_Space.md#root-user-superuser). The part
+ [superuser](User_Space.md#root-user-superuser). The part
of the filesystem that you need sudo priveleges to access and where you
manage users
- Home dir (`/dev/nvme0n1p3`)
@@ -101,7 +101,7 @@ Most standard partition tables allow for primary, extended and logical
partitions. The primary partition is the part of the harddisk that contains the
operating system and is thus described as 'bootable' and may be called the 'boot
partition'. During the bootstrapping process this is injected into memory as the
-[kernel](/Operating_Systems/The_Kernel.md).
+[kernel](The_Kernel.md).
The extended partition is basically everything other than the primary partition.
This is typically subdivided into other partitions that are called _logical_
diff --git a/zk/Passing_arguments_and_options_to_Bash_scripts.md b/zk/Passing_arguments_and_options_to_Bash_scripts.md
index 49957a3..99cbc12 100644
--- a/zk/Passing_arguments_and_options_to_Bash_scripts.md
+++ b/zk/Passing_arguments_and_options_to_Bash_scripts.md
@@ -16,7 +16,7 @@ must run `chmod` to make them executable. When we issue a command like
When we run a program like `cd` or `npm` we don’t have to type `./cd.sh` or
`./npm.sh`. This is because a reference to the program file is already in our
-[`$PATH`](/Programming_Languages/Shell/The_PATH.md).
+[`$PATH`](The_PATH.md).
In the case of `cd`, this is an in-built program and as such it will be sourced
from a binary and we have a reference to the binary in path. In the case of
diff --git a/zk/Practical_walkthrough_Lambda_creation_within_AWS.md b/zk/Practical_walkthrough_Lambda_creation_within_AWS.md
index c199488..a4a2b68 100644
--- a/zk/Practical_walkthrough_Lambda_creation_within_AWS.md
+++ b/zk/Practical_walkthrough_Lambda_creation_within_AWS.md
@@ -25,10 +25,10 @@ boilerplate:
## Adding a trigger
-Next we need to add a [trigger](/DevOps/AWS/AWS_Lambda/Lambda_triggers.md) that
+Next we need to add a [trigger](Lambda_triggers.md) that
execute the handler.
-We will do this using [AWS API Gateway](/DevOps/AWS/AWS_API_Gateway.md). We
+We will do this using [AWS API Gateway](AWS_API_Gateway.md). We
select "Add trigger" from the dashboard view and input basic settings:

diff --git a/zk/Prefixes_for_units_of_electrical_measurement.md b/zk/Prefixes_for_units_of_electrical_measurement.md
index a597171..46c2bc6 100644
--- a/zk/Prefixes_for_units_of_electrical_measurement.md
+++ b/zk/Prefixes_for_units_of_electrical_measurement.md
@@ -7,7 +7,7 @@ tags: [physics, electricity, exponents]
# Prefixes for unit of electrical measurement
In electronics we are often dealing with units that are very large or very
-small, thus we rely on [exponents](/Mathematics/Algebra/Exponents.md) for formal
+small, thus we rely on [exponents](Exponents.md) for formal
expression.
| Prefix | Symbol | Expression as exponent | Expression as decimal value | English word |
diff --git a/zk/Prime_factorization.md b/zk/Prime_factorization.md
index b72e97c..ec084b4 100644
--- a/zk/Prime_factorization.md
+++ b/zk/Prime_factorization.md
@@ -19,11 +19,11 @@ main approaches to this:
> $n$. We then repeat this process with the resulting factors working
> recursively until the numbers we are left with are primes.
-
+
_The prime factors of 27 are 2, 3, 3_
it doesn't matter which products we choose as the interim factors, we should
always reach the same outcome:
-
+
-
+
diff --git a/zk/Primitive_types.md b/zk/Primitive_types.md
index 94581f9..17721e4 100644
--- a/zk/Primitive_types.md
+++ b/zk/Primitive_types.md
@@ -40,11 +40,11 @@ const store: string[] = []; // Empty array
## Object
`Object` is a valid type declaration in TS but it is not particularly helpful
-since it becomes similar to using [any](./Any.md) given that most primitive
+since it becomes similar to using [any](Any.md) given that most primitive
types in JavaScripts prototypically inherit from an Object.
Generally, when you use objects in TypeScript you type them as
-[custom types](./Custom_types.md).
+[custom types](Custom_types.md).
## Array of (untyped) objects
diff --git a/zk/Processes.md b/zk/Processes.md
index de05c15..c73747c 100644
--- a/zk/Processes.md
+++ b/zk/Processes.md
@@ -7,7 +7,7 @@ tags:
# Processes (`ps`)
-`ps` allows us to control [user processes](/Operating_Systems/The_Kernel.md)
+`ps` allows us to control [user processes](The_Kernel.md)
from the shell.
The command in its most minimal application returns the following
diff --git a/zk/Python_data_types.md b/zk/Python_data_types.md
index 5122583..36ac03a 100644
--- a/zk/Python_data_types.md
+++ b/zk/Python_data_types.md
@@ -16,7 +16,7 @@ tags: [python, data-types]
The core data-types are as follows:
-- [str](/Programming_Languages/Python/Syntax/Strings_in_Python.md)
+- [str](Strings_in_Python.md)
- bool
- float
- double
diff --git a/zk/Python_interpreter.md b/zk/Python_interpreter.md
index 4272eec..7977546 100644
--- a/zk/Python_interpreter.md
+++ b/zk/Python_interpreter.md
@@ -32,7 +32,7 @@ In the standard implementation, the language which interprets Python code is C.
When Python runs in this implementation, code written in C converts it to
bytecode (so-called because each instruction is
-[8-bits long](/Hardware/Binary/Binary_units_of_measurement.md)). This is a
+[8-bits long](Binary_units_of_measurement.md)). This is a
lower-level transliteration of Python is not meant to be understood by the CPU
(since it is not binary) but rather to be run in the Python virtual machine
which is equipped to understand bytecode. The Python Virtual Machine is
diff --git a/zk/Querying_a_collection.md b/zk/Querying_a_collection.md
index ccc2c5f..e4ed5c0 100644
--- a/zk/Querying_a_collection.md
+++ b/zk/Querying_a_collection.md
@@ -33,7 +33,7 @@ We now have the following entries in our `courses` collection:
Now we will query the collection. This capability is provided via the Mongoose
schema class we used to create the `Course`
-[model](/Databases/MongoDB/Create_collections_and_documents_with_Mongoose.md#models).
+[model](Create_collections_and_documents_with_Mongoose.md#models).
We have the following methods available to use from the schema:
- `find`
@@ -168,7 +168,7 @@ When we apply logical operators, we do not apply the query within the main
predicate.
For example to query by logical
-[OR](/Logic/Truth-functional_connectives.md#disjunction):
+[OR](Truth-functional_connectives.md#disjunction):
```js
async function getCourses() {
diff --git a/zk/Queue.md b/zk/Queue.md
index c4e1b53..488789d 100644
--- a/zk/Queue.md
+++ b/zk/Queue.md
@@ -9,7 +9,7 @@ tags:
_Visualization of the queue data structure_
-
+
## A queue is a sequential data structure and most similar to a stack
diff --git a/zk/RESTful_APIs.md b/zk/RESTful_APIs.md
index 28a3042..b73e20b 100644
--- a/zk/RESTful_APIs.md
+++ b/zk/RESTful_APIs.md
@@ -61,7 +61,7 @@ In order to qualify as RESTful, an API must meet the following constraints:
## Example
A basic example of a REST API would be a series of methods corresponding to the
-main [HTTP request types](/Databases/HTTP_request_types.md).
+main [HTTP request types](HTTP_request_types.md).
| HTTP request type | URI | Action | Body ? |
| ----------------- | ------------------- | --------------------------- | ------------------------ |
diff --git a/zk/Read.md b/zk/Read.md
index 36104ba..3d8a007 100644
--- a/zk/Read.md
+++ b/zk/Read.md
@@ -13,7 +13,7 @@ piped to it. In each case, what is read is stored as a variable.
`read` will parse line by line using a space (`\n`) as the default delimiter.
You can use IFS to parse by other characters and/or
-[split the contents into an array](/Programming_Languages/Shell/Split_into_array.md).
+[split the contents into an array](Split_into_array.md).
## Example of capturing user input
@@ -36,7 +36,7 @@ read
## Example of piping to read
-Here we use [find](/Programming_Languages/Shell/Find.md) to collate the files in
+Here we use [find](Find.md) to collate the files in
the current directory and then pipe them to read.
```bash
diff --git a/zk/Rebasing.md b/zk/Rebasing.md
index 642ed42..5387c31 100644
--- a/zk/Rebasing.md
+++ b/zk/Rebasing.md
@@ -129,7 +129,7 @@ request.
## Difference from cherry-picking
The main difference between the two approaches is that
-[cherry-picking](/DevOps/Git/Cherry_picking_a_branch.md) is a more selective
+[cherry-picking](Cherry_picking_a_branch.md) is a more selective
process, where you can pick and choose specific commits that you want to include
in another branch. This can be useful when you only want to apply specific
changes or fixes from one branch to another, without including all the changes
diff --git a/zk/Recursion.md b/zk/Recursion.md
index a6ceaf4..b0cb6b9 100644
--- a/zk/Recursion.md
+++ b/zk/Recursion.md
@@ -17,7 +17,7 @@ another example. Also fractals display recursive properties.
## Schema
The general structure of a recursive function is as follows:
-
+
## Why use recursive functions?
@@ -131,4 +131,4 @@ if (num > 0) {
}
```
-
+
diff --git a/zk/Redirect_to_dev_null.md b/zk/Redirect_to_dev_null.md
index 1e90675..b938ab2 100644
--- a/zk/Redirect_to_dev_null.md
+++ b/zk/Redirect_to_dev_null.md
@@ -19,7 +19,7 @@ because you don't want it to be output to `stdout`.
The `2>&1` argument is the content: any errors that the program may generate and
try to show in stout. Notice we are using the
-[file descriptors](/Programming_Languages/Shell/File_descriptors_and_redirection.md)
+[file descriptors](File_descriptors_and_redirection.md)
`1` and `2`.
If you just want the errors regardless of whether they appear in `stdout` you
diff --git a/zk/Redirection.md b/zk/Redirection.md
index dff0924..b0da787 100644
--- a/zk/Redirection.md
+++ b/zk/Redirection.md
@@ -20,9 +20,9 @@ ls | grep d* > result.txt
### Combining redirection with file escriptors
It is common practice to combine redirection with the
-[file descriptors](/Programming_Languages/Shell/File_descriptors.md) to redirect
+[file descriptors](File_descriptors.md) to redirect
the output of `stdout` and `stderr`. A common case is to
-[redirect error output to `/dev/null`](/Programming_Languages/Shell/Redirect_to_dev_null.md).
+[redirect error output to `/dev/null`](Redirect_to_dev_null.md).
Redirection defaults to interpreting `>` as the redirection of `stdout` (`1`);
diff --git a/zk/Reducing_fractions.md b/zk/Reducing_fractions.md
index 5fd8725..23e16d0 100644
--- a/zk/Reducing_fractions.md
+++ b/zk/Reducing_fractions.md
@@ -93,7 +93,7 @@ A better method is to utilise [prime factorization](Prime%20factorization.md)
combined with the canceling technique.
First we find the prime factors of both the numerator and denominator:
-
+
This gives us:
@@ -163,7 +163,7 @@ _Reduce the following fraction to its lowest terms: $$\frac{14y^5}{-35y^3}$$_
- Apply [Prime factorization](Prime%20factorization.md):
- 
+ 
- Cancel the coefficients and variable parts
@@ -179,7 +179,7 @@ $$\frac{- 12xy^2}{ - 18xy^2}$$_
- Apply [Prime factorization](Prime%20factorization.md):
-
+
- Cancel the coefficients and variable parts
diff --git a/zk/Relation_between_kernel_and_CPU.md b/zk/Relation_between_kernel_and_CPU.md
index d19a046..a7d8edc 100644
--- a/zk/Relation_between_kernel_and_CPU.md
+++ b/zk/Relation_between_kernel_and_CPU.md
@@ -17,7 +17,7 @@ above' the actions of the CPU. This is wrong and if you think about it, how
could this be since any process, kernel included, requires the processor? The
kernel is executed by and loaded into the CPU just like any other instruction in
the
-[fetch, decode, execute cycle](/Computer_Architecture/CPU/Fetch_decode_execute.md)
+[fetch, decode, execute cycle](Fetch_decode_execute.md)
of the CPU.
However as a process, the kernel is the 'first amongst equals' given that it is
@@ -40,7 +40,7 @@ the CPU take place independently of the kernel.
> points the program counter back into kernel code. That’s basically what the
> CPU will be doing from boot up to shut down; switching between executing
> kernel code and executing userspace code
-> ([Reddit](https://www.reddit.com/r/osdev/comments/wdskj5/how_does_kernel_decide_if_use_cpu_or_gpu_after/))
+> ([Reddit]())
This is because of [context switching](), when the CPU is running its cycle, the
kernel is idle waiting for it to complete. Once control switches back to the
diff --git a/zk/Resistance.md b/zk/Resistance.md
index 43531d0..83e51f8 100644
--- a/zk/Resistance.md
+++ b/zk/Resistance.md
@@ -38,9 +38,9 @@ used to _control_ the flow of current in a circuit.
> One ohm is the resistance of a circuit or circuit element that permits a
> steady current flow of one
-> [amp](/Electronics_and_Hardware/Analogue_circuits/Current.md#formal-expression)
+> [amp](Current.md#formal-expression)
> (one coulomb/second) when one
-> [volt](/Electronics_and_Hardware/Analogue_circuits/Voltage.md#voltage) is
+> [volt](Voltage.md#voltage) is
> applied to the circuit.
### Conductance
@@ -56,7 +56,7 @@ used to _control_ the flow of current in a circuit.
## Ohm's Law
The relationship between current, resistance and voltage is expressed in
-[Ohm's Law](/Electronics_and_Hardware/Physics_of_electricity/Ohms_Law.md).
+[Ohm's Law](Ohms_Law.md).
## Resistors
diff --git a/zk/Restructure_URLs.md b/zk/Restructure_URLs.md
index ce6a7f0..bdd3a7c 100644
--- a/zk/Restructure_URLs.md
+++ b/zk/Restructure_URLs.md
@@ -29,7 +29,7 @@ exports.handler = (event, context, callback) => {
Let's walk through the above example making reference to the general structure
of the
-[AWS Lambda handler function](/DevOps/AWS/AWS_Lambda/Lambda_handler_function.md):
+[AWS Lambda handler function](Lambda_handler_function.md):
1. The `event` parameter is invoked to gain access to the event that triggered
the function. This is a CloudFront request event which is targetted with
diff --git a/zk/Role_of_unique_key_in_relational_databases.md b/zk/Role_of_unique_key_in_relational_databases.md
index a33acc5..bb1043c 100644
--- a/zk/Role_of_unique_key_in_relational_databases.md
+++ b/zk/Role_of_unique_key_in_relational_databases.md
@@ -11,7 +11,7 @@ tags: [relational-databases]
This is essential for carrying out operations across database tables and for
creating and deleting database entires in accordance with the
-[ACID principle](/Databases/ACID_principle.md). It is also a safeguard: it means
+[ACID principle](ACID_principle.md). It is also a safeguard: it means
you can always identify a record by itself and don't have to rely on generic
queries to identify it.
diff --git a/zk/Shell_sessions.md b/zk/Shell_sessions.md
index e6ab5e8..9c7751e 100644
--- a/zk/Shell_sessions.md
+++ b/zk/Shell_sessions.md
@@ -27,7 +27,7 @@ shell**. If you run a script from the command line you will be in a
## Shell sessions and access
The type of shell session that you are currently in affects the
-[environmental and shell variables](https://www.notion.so/Environmental-and-shell-variables-04d5ec7e8e2b486a93f002bf686e4bbb)
+[environmental and shell variables](Environmental-and-shell-variables-04d5ec7e8e2b486a93f002bf686e4bbb)
that you can access. This is because the order in which configuration files are
read on initialisation differs depending on the type of shell.
diff --git a/zk/Signed_and_unsigned_numbers.md b/zk/Signed_and_unsigned_numbers.md
index a5aecf3..6385366 100644
--- a/zk/Signed_and_unsigned_numbers.md
+++ b/zk/Signed_and_unsigned_numbers.md
@@ -12,7 +12,7 @@ represented. **Unsigned binary** is standard binary without negative integers.
In order to represent negative integers alonside positive integers a natural
approach is to divide the available
-[encoding space / word length](/Electronics_and_Hardware/Binary/Binary_encoding.md)
+[encoding space / word length](Binary_encoding.md)
into two subsets: one for representing non-negative integers and one for
representing negative integers.
@@ -86,7 +86,7 @@ The chief advantage of the two's complement technique of signing numbers is that
its circuit implementation is no different from the adding of two unsigned
numbers. Once the signing algorithm is applied the addition can be passed
through an
-[adder](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md)
+[adder](Half_adder_and_full_adder.md)
component without any special handling or additional hardware.
Let's demonstrate this with the following addition:
@@ -121,7 +121,7 @@ The ease by which we conduct signed arithmetic with standard hardware contrasts
with alternative approaches to signing numbers. An example of another approach
is **signed magnitude representation**. A basic implemetation of this would be
to say that for a given bit-length (6, 16, 32...) if the
-[most significant bit](/Electronics_and_Hardware/Digital_circuits/Half_adder_and_full_adder.md#binary-arithmetic)
+[most significant bit](Half_adder_and_full_adder.md#binary-arithmetic)
is a 0 then the number is positive. If it is 1 then it is negative.
This works but it requires extra complexity to in a system's design to account
diff --git a/zk/Solving_equations.md b/zk/Solving_equations.md
index 3597653..63e6d71 100644
--- a/zk/Solving_equations.md
+++ b/zk/Solving_equations.md
@@ -7,7 +7,7 @@ tags: [algebra]
## Use inversion of operators
When solving equations we frequently make use of the
-[ operator inversion rules](../Prealgebra/Inversion%20of%20operators.md) to find
+[ operator inversion rules](Inversion%20of%20operators.md) to find
the solutions.
### Example: inversion of addition
diff --git a/zk/Soundness.md b/zk/Soundness.md
index fb5c51e..8e760f0 100644
--- a/zk/Soundness.md
+++ b/zk/Soundness.md
@@ -7,7 +7,7 @@ tags: [propositional-logic]
# Soundness
Recall that in the definition of
-[deductive validity](/Logic/General_concepts/Validity_and_entailment.md#validity)
+[deductive validity](Validity_and_entailment.md#validity)
we do not say: an argument is valid iff if the premises _are true_ and the
conclusion _is true_. We say _if it is possible for the premises to be true_.
This is important: we are not interested in the actual truth of the premises or
diff --git a/zk/Stacks.md b/zk/Stacks.md
index ca13d86..51ee3a0 100644
--- a/zk/Stacks.md
+++ b/zk/Stacks.md
@@ -5,9 +5,9 @@ tags:
- data-structures
---
-_A stack visualised vertically_ 
+_A stack visualised vertically_ 
-_A stack visualised horizontally_ 
+_A stack visualised horizontally_ 
## A stack is a linear data structure that observes LIFO
diff --git a/zk/Stale_branches_and_pruning.md b/zk/Stale_branches_and_pruning.md
index 1583e7c..b20e3d5 100644
--- a/zk/Stale_branches_and_pruning.md
+++ b/zk/Stale_branches_and_pruning.md
@@ -7,7 +7,7 @@ tags: [git]
# Stale branches and pruning
A **stale branch** is a
-[remote tracking branch](/DevOps/Git/Remote_tracking_branches.md) that **no
+[remote tracking branch](Remote_tracking_branches.md) that **no
longer tracks anything** because the actual branch on the remote has been
deleted.
diff --git a/zk/Step_functions_and_state_machines.md b/zk/Step_functions_and_state_machines.md
index 4e1b801..b9bda3f 100644
--- a/zk/Step_functions_and_state_machines.md
+++ b/zk/Step_functions_and_state_machines.md
@@ -22,8 +22,8 @@ transitions between them. It also includes error catchers and retry logic.
At the beginning you define a `StartAt` state which is the entrypoint of the
state machine. This can be manually triggered, or more likely, triggered by
another AWS service such as a
-[Lambda](/DevOps/AWS/AWS_Lambda/Lambda_programming_model.md), an
-[API Gateway](/DevOps/AWS/AWS_API_Gateway.md) request or a messaging/queue
+[Lambda](Lambda_programming_model.md), an
+[API Gateway](AWS_API_Gateway.md) request or a messaging/queue
event.
The state machine ultimately ends at an end state. In between are various
diff --git a/zk/Strategies_for_constructing_proofs.md b/zk/Strategies_for_constructing_proofs.md
index ad9996c..86193ca 100644
--- a/zk/Strategies_for_constructing_proofs.md
+++ b/zk/Strategies_for_constructing_proofs.md
@@ -20,17 +20,17 @@ not always work and there will be cases where the route to the desired
derivation is more circuitous. In these instances it is to best to combine this
general top level strategy with goal analysis.
-Goal analysis is a [recursive](/Data_Structures/Recursion.md) strategy which
+Goal analysis is a [recursive](Recursion.md) strategy which
proceeds by using a 'goal' proposition to guide the construction of intermediary
derivations.
Assume that we want to show that an argument is
-[valid](/Logic/General_concepts/Validity_and_entailment.md#validity). Then our
+[valid](Validity_and_entailment.md#validity). Then our
ultimate goal is to derive the conclusion from the premises we are given. We
first ask ourselves: _which propositions if we could derive them, would allow us
to easily derive the conclusion_? (For example, these propositions might be two
simple propositions that when combined with
-[Conjunction Introduction](/Logic/Proofs/Conjunction_Introduction.md) give us
+[Conjunction Introduction](Conjunction_Introduction.md) give us
the conclusion.) Deriving these propositions then becomes the new intermediate
goal.
@@ -48,7 +48,7 @@ and $((\lnot N \rightarrow L) \land (D \leftrightarrow \lnot N))$.
First, we consider what is the easiest possible way of achieving the proposition
$(L \lor A) \land D$. Clearly it is to separately derive each disjunct
($L \lor A$ and $D$) and then combine them with
-[Conjunction Introduction](/Logic/Proofs/Conditional_Introduction.md). This
+[Conjunction Introduction](Conditional_Introduction.md). This
provides us with our first goal: to derive each of the separate conjuncts.
Let's start with $D$: where does it occur in the assumptions? It occurs in the
@@ -63,7 +63,7 @@ So far we have:
Now we just need to get $D$ from the proposition at line 3. This is easy since
we already have access to the consequent of the biconditional at line 1.
Therefore we can apply
-[Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md)) at line
+[Biconditional Elimination](Biconditional_Elimination.md)) at line
3 to get $D$. We are now halfway there:

@@ -71,20 +71,20 @@ Therefore we can apply
Next we need to turn our attention to deriving $L \lor A$. How can we obtain $L$
? Well it is contained within the first conjunct of the assumption on line 2.
Again, we can get this through the application of
-[Conjunction Elimination](/Logic/Proofs/Conjunction_Elimination.md). Now, how do
+[Conjunction Elimination](Conjunction_Elimination.md). Now, how do
we get $L$ from $(\lnot N \rightarrow L)$? Well, we already have the antecedent
$\lnot N$ as an assumption on the first line, so we can use
-[Conditional Elimination](/Logic/Proofs/Conditional_Elimination.md) to derive
+[Conditional Elimination](Conditional_Elimination.md) to derive
$L$. These two steps give us:

Now we need to get from $L$ to $L \lor A$. This is really straightforward
because by using
-[Disjunction Introduction](/Logic/Proofs/Disjunction_Introduction.md)) we can
+[Disjunction Introduction](Disjunction_Introduction.md)) we can
get from any sentence to a disjunction. Finally, having assembled all the
constituent parts of the conjunction that is the conclusion, we can combine them
-with [Conjunction Introduction](/Logic/Proofs/Conjunction_Introduction.md) as we
+with [Conjunction Introduction](Conjunction_Introduction.md) as we
had planned at the outset.

@@ -100,21 +100,21 @@ $$
The requirements here could easily mislead us. We see that the target
proposition is a conjunction so we might think that the best strategy is to seek
to derive each conjunct and then combine them via
-[Conjunction Introduction](/Logic/Proofs/Conjunction_Introduction.md)).
+[Conjunction Introduction](Conjunction_Introduction.md)).
Actually, if we look more closely, there is a better approach. The target
proposition is contained in the first premise as the consequent to the
biconditional ($\lnot L \leftrightarrow [X \land (\lnot S \lor B)]$). A better
approach is therefore to seek to derive the antecedent ($\lnot L$) and then use
-[Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md) to
+[Biconditional Elimination](Biconditional_Elimination.md) to
extract the target sentence which is the consequent.
-
+
## Proving theorems
When we are proving
-[theorems](/Logic/Laws_and_theorems.md/Theorems_and_empty_sets.md#theorems-and-empty-sets)
+[theorems](Theorems_and_empty_sets.md#theorems-and-empty-sets)
we do not have a set of assumptions to work from when constructing the proof. We
must derive the target sentence from the 'empty set' which is the target
sentence itself. It is therefore like a process of reverse engineering.
@@ -143,7 +143,7 @@ _Prove_ $\vdash (\lnot A \lor \lnot B) \leftrightarrow \lnot(A \land B)$
$\lnot (A \lor B) \rightarrow \lnot (A \land B)$.
- Our starting assumption is to a disjunction. Thus we can apply
- [Disjunction Elimination](/Logic/Proofs/Disjunction_Elimination.md) to show
+ [Disjunction Elimination](Disjunction_Elimination.md) to show
that our goal sentence $\lnot(A \land B)$ follows from each of the disjuncts
($\lnot A$ and $\lnot B$) in dedicated sub-proofs. If we can do this, we have
the right to derive $\lnot (A \land B)$.
@@ -154,7 +154,7 @@ _Prove_ $\vdash (\lnot A \lor \lnot B) \leftrightarrow \lnot(A \land B)$
$A \land B$ so that we can negate it as $\lnot (A \land B)$.
- Having done this, we can discharge the
- [Disjunction Elimination](/Logic/Proofs/Disjunction_Elimination.md) sub-proofs
+ [Disjunction Elimination](Disjunction_Elimination.md) sub-proofs
and derive $\lnot (A \land B)$ from $\lnot A \lor \lnot B$
**Lines 13-26**
@@ -165,9 +165,9 @@ _Prove_ $\vdash (\lnot A \lor \lnot B) \leftrightarrow \lnot(A \land B)$
anymore, we have a negated conjunction.
- We will do this by assuming the negation of what we want to prove
($\lnot (\lnot A \lor \lnot B)$) and then apply
- [Negation Elimination](/Logic/Proofs/Negation_Elimination.md) to get
+ [Negation Elimination](Negation_Elimination.md) to get
$\lnot A \lor \lnot B$.
- This requires us to derive a contradiction. We get this on lines 23 and 24.
This requires as previous steps that we have two sub-proofs that use
- [Negation Elimination](/Logic/Proofs/Negation_Elimination.md) to release $A$
+ [Negation Elimination](Negation_Elimination.md) to release $A$
and $B$
diff --git a/zk/Streams.md b/zk/Streams.md
index 0bfcc8f..11951c3 100644
--- a/zk/Streams.md
+++ b/zk/Streams.md
@@ -9,10 +9,10 @@ tags:
# Handling streams with fs
When reading from a file, the
-[`fs.readFile()`](/Programming_Languages/NodeJS/Modules/Core/fs.md) method waits
+[`fs.readFile()`](fs.md) method waits
until the entire file has been read before executing the callback. It's obvious
why this might not be ideal in certain cases. If the file is very large you are
-utilising a lot of [memory](/Computer_Architecture/Memory/Memory.md) for a
+utilising a lot of [memory](Memory.md) for a
single process. Additionally, the data you need might appear early in the file,
in which case, once you find the data you want, there is no need to read to the
end of the file.
diff --git a/zk/Strings_in_Python.md b/zk/Strings_in_Python.md
index 07c4ce8..f190203 100644
--- a/zk/Strings_in_Python.md
+++ b/zk/Strings_in_Python.md
@@ -82,7 +82,7 @@ print(f'You are {user_age}')
The `split()` function in Python is used to divide a string into multiple parts
at the occurrence of a given separator. This function returns a
-[list](/Programming_Languages/Python/Syntax/Lists_in_Python.md) of substrings.
+[list](Lists_in_Python.md) of substrings.
### General syntax
diff --git a/zk/Swap_space.md b/zk/Swap_space.md
index 68c9c29..c734ab7 100644
--- a/zk/Swap_space.md
+++ b/zk/Swap_space.md
@@ -34,12 +34,12 @@ Swap: 3145724 0 3145724
To use an existing disk partition as a swap you can run the command
`mkswap [device]` and then `swapon [device]` to register the space with the
-[kernel](/Operating_Systems/The_Kernel.md).
+[kernel](The_Kernel.md).
### Add to `fstab`
You will want the swap to be activated every time the OS boots so add the
-following line to the [fstab](/Operating_Systems/Disks/Filesystems.md#fstab),
+following line to the [fstab](Filesystems.md#fstab),
where `/sda3` is used as the example partition:
```bash
diff --git a/zk/Syllogism.md b/zk/Syllogism.md
index 781a02e..ab07f16 100644
--- a/zk/Syllogism.md
+++ b/zk/Syllogism.md
@@ -7,7 +7,7 @@ tags: [propositional-logic]
# Syllogism
In order to make assertions about the relative
-[consistency](/Logic/General_concepts/Logical_consistency.md) or inconsistency
+[consistency](Logical_consistency.md) or inconsistency
of a set of propositions we advance arguments. Consider everyday life: if we are
having an argument with someone, we believe that they are wrong. A more logical
way to say this is that we believe that their beliefs are inconsistent. In order
diff --git a/zk/Syntax_of_propositional_logic.md b/zk/Syntax_of_propositional_logic.md
index 2f97108..70be7a4 100644
--- a/zk/Syntax_of_propositional_logic.md
+++ b/zk/Syntax_of_propositional_logic.md
@@ -61,7 +61,7 @@ We also distinguish:
- **atomic components**
These definitions provide a formal specification of the concepts of
-[atomic and molecular propositions](/Logic/Propositional_logic/Atomic_and_molecular_propositions.md)
+[atomic and molecular propositions](Atomic_and_molecular_propositions.md)
introduced previously.
1. If $P$ is an atomic proposition, $P$ contains no connectives and hence does
diff --git a/zk/Test_values_in_Bash.md b/zk/Test_values_in_Bash.md
index 68fb8c3..cd5a28f 100644
--- a/zk/Test_values_in_Bash.md
+++ b/zk/Test_values_in_Bash.md
@@ -119,4 +119,4 @@ fi
```
> Note: this syntax can also be used to test if a given element exists in an
-> [array](/Programming_Languages/Shell/Lists_and_arrays.md).
+> [array](Lists_and_arrays.md).
diff --git a/zk/Testing_Python_code.md b/zk/Testing_Python_code.md
index 4fc1655..c33ce58 100644
--- a/zk/Testing_Python_code.md
+++ b/zk/Testing_Python_code.md
@@ -10,7 +10,7 @@ tags: [python, testing]
Pytest is the most popular testing library for Python. It is not included with
the Python standard library so it must be installed with
-[pip](/Programming_Languages/Python/Concepts/Python_package_management.md).
+[pip](Python_package_management.md).
While it does not include a declaration library, it is robust enough to handle
most scenarios having a rich and expressive set of constructs and decorators
that let you declare what your tests should do, under what conditions they
diff --git a/zk/The_Kernel.md b/zk/The_Kernel.md
index 151a441..4c3e04d 100644
--- a/zk/The_Kernel.md
+++ b/zk/The_Kernel.md
@@ -7,7 +7,7 @@ tags: [systems-programming, memory]
# The Kernel
The kernel acts as the primary mediator between the hardware (CPU, memory) and
-user [processes](../Programming_Languages/Shell_Scripting/Processes.md). Let's
+user [processes](Processes.md). Let's
look at each of its responsibilities in greater depth:
- process management
@@ -63,7 +63,7 @@ It has the following jobs to manage:
- Allowing for the use of disk space as auxiliary memory
> Modern CPUs include a
-> [memory management unit](/Operating_Systems/Virtual_memory_and_the_MMU.md#the-memory-management-unit-mmu)
+> [memory management unit](Virtual_memory_and_the_MMU.md#the-memory-management-unit-mmu)
> which provides the kernel with **virtual** memory. In this scenario, memory
> isn't directly accessed by the process instead it works on the assumption that
> is has access to the entire memory of the machine and this is then translated
@@ -100,4 +100,4 @@ Example with a terminal program like `ls`:
## Controlling processes
In Linux we can view, kill, pause and resume processes using
-[ps](../Programming_Languages/Shell_Scripting/Processes.md).
+[ps](Processes.md).
diff --git a/zk/The_Little_Man_computer.md b/zk/The_Little_Man_computer.md
index 8c44ab6..40508b3 100644
--- a/zk/The_Little_Man_computer.md
+++ b/zk/The_Little_Man_computer.md
@@ -6,12 +6,12 @@ tags: [CPU]
## The Little Man Computer
-The [Little Man Computer](https://peterhigginson.co.uk/lmc/) is a simplified
+The [Little Man Computer]() is a simplified
computer that works on Von Neuman principles. It has all the CPU components we
have detailed above. It is programmed in machine code but for simplicity it uses
the denary rather than the binary number system.
-
+
On the left is the instruction set. Each number constitutes and execution
routine and the `xx` stand for the address in RAM that the execution will work
diff --git a/zk/The_PATH.md b/zk/The_PATH.md
index c8c143a..0e084ca 100644
--- a/zk/The_PATH.md
+++ b/zk/The_PATH.md
@@ -8,7 +8,7 @@ tags:
# The `$PATH`
We know that `$PATH` is an
-[environment variable](/Programming_Languages/Shell/Environmental_and_shell_variables.md).
+[environment variable](Environmental_and_shell_variables.md).
This variable keeps track of directories **where executables are found**.
Whenever any command is run, the shell looks up the directories contained in the
diff --git a/zk/Theorems_and_empty_sets.md b/zk/Theorems_and_empty_sets.md
index 6b05a04..ea1409e 100644
--- a/zk/Theorems_and_empty_sets.md
+++ b/zk/Theorems_and_empty_sets.md
@@ -5,7 +5,7 @@ tags: [propositional-logic]
---
We know that when we construct a
-[derivation](/Logic/Proofs/Formal_proofs_in_propositional_logic.md#derivation-rules)
+[derivation](Formal_proofs_in_propositional_logic.md#derivation-rules)
we start from a set of assumptions and then attempt to reach a proposition that
is a consequence of the starting assumptions. However it does not always have to
be the case that the starting set contains members. The set can in fact be
diff --git a/zk/Three_bit_counter.md b/zk/Three_bit_counter.md
index f90867d..4fab175 100644
--- a/zk/Three_bit_counter.md
+++ b/zk/Three_bit_counter.md
@@ -8,7 +8,7 @@ tags: [logic-gates, binary, memory, clock]
# 3-bit Counter
To demonstrate the use of
-[Flip-Flops](/Electronics_and_Hardware/Digital_circuits/Flip_flops.md) we will
+[Flip-Flops](Flip_flops.md) we will
create the circuit for a 3-bit counter. This simply counts up from 0 to 7
because 7 is the maximum decimal number we can create with three bits ($2^3$):
@@ -25,7 +25,7 @@ because 7 is the maximum decimal number we can create with three bits ($2^3$):
The circuit will have three memory components, each representing one bit of the
3-bit number. When the
-[clock pulses](/Electronics_and_Hardware/Digital_circuits/Clock_signals.md), the
+[clock pulses](Clock_signals.md), the
3-bit number increments by one. We need to synchronise the operation with a
clock because each bit by itself is meaningless, it only gains meaning by the
relation it sustains to the other two bits hence it must be kept in sync with
@@ -53,7 +53,7 @@ If we look at the pattern of each flip-flops' output we notice the following:
This means that to construct a circuit that displays this behaviour we just have
to use a
-[T flip-flop](/Electronics_and_Hardware/Digital_circuits/Flip_flops.md#t-flip-flops)
+[T flip-flop](Flip_flops.md#t-flip-flops)
since the only state change we need is a single bit toggle three times that
retains its value.
diff --git a/zk/Transistors.md b/zk/Transistors.md
index 5ff154c..0e375a8 100644
--- a/zk/Transistors.md
+++ b/zk/Transistors.md
@@ -9,7 +9,7 @@ tags: [logic-gates, binary]
# Transistors
In the discussion of
-[digital circuits](/Electronics_and_Hardware/Digital_circuits/Digital_circuits.md)
+[digital circuits](Digital_circuits.md)
we noted that a digital circuit requires that electrical phenomena be treated as
discrete rather than continuous values. Although a given voltage at a point in
the circuit can vary widely, in order to represent the binary states of 'on' and
@@ -47,7 +47,7 @@ needs to be fed into another and there is no way to do this with switches.
Thus instead of switches, modern digital circuits use transistors, a special
electrical component that controls the flow of current in the manner of a switch
where the 'off' and 'on' states are represented by
-[voltage](/Electronics_and_Hardware/Analogue_circuits/Voltage.md) values within
+[voltage](Voltage.md) values within
set parameters.
There are different types of transistors but the simplest for the purposes of
@@ -93,7 +93,7 @@ where the logical function is represented by the characteristic input and output
voltages.
For example to create an
-[AND](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#and-gate) gate
+[AND](Logic_gates.md#and-gate) gate
we would have two voltage inputs going into two transistors that are connected
in sequence. The two transistors create a continuous line going from the
collector of one to the emitter of the other. If either voltage input is low
@@ -103,7 +103,7 @@ broken) and there is no current flowing.

Below, an
-[OR](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#or-gate) has been
+[OR](Logic_gates.md#or-gate) has been
constructed with transistors. If a voltage is applied to the base of either
transistor, the current reaches the V-out terminal.
diff --git a/zk/Truth-functional_connectives.md b/zk/Truth-functional_connectives.md
index 778962b..f4ac834 100644
--- a/zk/Truth-functional_connectives.md
+++ b/zk/Truth-functional_connectives.md
@@ -8,10 +8,10 @@ tags: [propositional-logic]
Propositions generated from other (simple) propositions by means of
propositional connectives are
-[compound propositions](/Logic/Propositional_logic/Atomic_and_molecular_propositions.md).
+[compound propositions](Atomic_and_molecular_propositions.md).
We know that
-[logically determinant](/Logic/General_concepts/Logical_indeterminacy.md)
+[logically determinant](Logical_indeterminacy.md)
propositions express a truth value. When simple propositions are joined with a
connective to make a compound proposition they also have a truth value. This is
determined by the nature of the connective and the truth value of the
diff --git a/zk/Truth-trees.md b/zk/Truth-trees.md
index 4be0ff3..d1bfa03 100644
--- a/zk/Truth-trees.md
+++ b/zk/Truth-trees.md
@@ -116,7 +116,7 @@ inconsistency in terms of truth trees:
The following is a truth tree for the set ${P \lor Q, \sim P }$:
-
+
### Interpretation
@@ -161,7 +161,7 @@ not the right hand side.
The following is a truth tree for the set
${A & \sim B, C, \sim A \lor \sim B }$.
-
+
### Interpretation
@@ -201,19 +201,19 @@ of each of the main connectives and these rules rely on logical equivalences
### Negated negation decomposition: `~~D`
-
+
Truth passes only if $P$ is true
### Conjunction decomposition: `&D`
-
+
Truth passes only $P$ and $Q$ are both true.
### Negated Conjunction decomposition: `~&D`
-
+
Truth passes if either $\sim P$ or $\sim Q$ is true. This rule is a consequence
of the equivalence between $\sim (P & Q)$ and $\sim P \lor \sim Q$ , the first
@@ -221,13 +221,13 @@ of DeMorgan’s Laws.
### Disjunction decomposition: `vD`
-
+
Truth passes if either $P$or $Q$ are true.
### Negated Disjunction decomposition: `~vD`
-
+
Truth passes if both $P$ and $Q$ are false. This rule is a consequence of the
equivalence between $\sim (P \lor Q)$ and $\sim P & \sim Q$, the second of
@@ -235,7 +235,7 @@ DeMorgan’s Laws.
### Conditional decomposition: `⊃D`
-
+
Truth passes if either $\sim P$ or $Q$ are true. This rule is a consequence of
the equivalence between $P \supset Q$ and $\sim P \lor Q$ therefore this branch
@@ -246,11 +246,11 @@ has the shape of a disjunction with $\sim P$ , $Q$ as its disjuncts.
Truth passes if both $P$ and $\sim Q$ are true. This is a consequence of the
equivalence between $\sim (P \supset Q)$ and $P & \sim Q$.
-
+
### Biconditional decomposition: `≡D`
-
+
Truth passes if either $P$ and $Q$ are true or $\sim P & \sim Q$ are true. This
is an interesting rule because it combines the disjunction and conjunction tree
@@ -258,7 +258,7 @@ shapes.
### Negated biconditional decomposition: `~≡D`
-
+
Truth passes if either $P$ and $\sim Q$ is true or if $\sim P$ and $Q$ is true.
@@ -279,7 +279,7 @@ following heuristic techniques followed in order, facilitate this:
Here are some examples of these rules applied:
-
+
Observe that here we don’t bother to decompose the sentence on line 1. This is
because, having decomposed the sentences on lines 2 and 3 we have arrived at a
@@ -318,7 +318,7 @@ A logically false sentence cannot be true on any assignment. This is the same
thing as an inconsistent set. Thus it will be represented in a truth tree as
inconsistency which is disclosed via a closed tree.
-
+
### Logical truth
@@ -367,7 +367,7 @@ equivalent.
> Sentences $P$ and $Q$ are truth-functionally equivalent if and only if the set
> $\sim (P \equiv Q)$ has a closed tree
-
+
### Logical entailment and validity
diff --git a/zk/Turing_machines.md b/zk/Turing_machines.md
index f3921cd..666e147 100644
--- a/zk/Turing_machines.md
+++ b/zk/Turing_machines.md
@@ -13,7 +13,7 @@ cell of the tape is a head, which can either move left or right, and can read
the symbols written in the cells. The head is also capable of erasing symbols
and writing new symbols into the cells.
- The direction that the
+ The direction that the
head moves, which values it erases, and which values it writes in, are dependent
on a set of instructions provided to the machine.0
diff --git a/zk/Type_guarding_narrowing.md b/zk/Type_guarding_narrowing.md
index fd4f6b2..61a2ebf 100644
--- a/zk/Type_guarding_narrowing.md
+++ b/zk/Type_guarding_narrowing.md
@@ -8,7 +8,7 @@ tags:
# Type narrowing and guarding
Type narrowing is the process of working out from a supertype like
-[any](./Any.md) or [unknown](./Unknown.md) whic type the value should be in the
+[any](Any.md) or [unknown](Unknown.md) whic type the value should be in the
x course of your code. This is necessary since a process will not necessarily
always return or involve homogenous types.
diff --git a/zk/Update_document.md b/zk/Update_document.md
index 72ec4f3..7549a23 100644
--- a/zk/Update_document.md
+++ b/zk/Update_document.md
@@ -14,7 +14,7 @@ There are two methods for updating a document
## Query first document update
With this approach we first execute a
-[query](/Databases/MongoDB/Querying_a_collection.md) to retrieve the document we
+[query](Querying_a_collection.md) to retrieve the document we
want to edit and then make the change. We use the `findById` method to identify
the document by its UUID and then `set` to update specified properties on the
document. The `set` method is one of many operators that can be used to update
diff --git a/zk/Using_GraphQL_with_Node.md b/zk/Using_GraphQL_with_Node.md
index f3b9375..856b3af 100644
--- a/zk/Using_GraphQL_with_Node.md
+++ b/zk/Using_GraphQL_with_Node.md
@@ -26,7 +26,7 @@ app.listen(8080, () =>
## Add GraphQL as middlewear
Next we introduce GraphQL as a piece of Node.js
-[middlewear](/Programming_Languages/Node/Architecture/Middleware.md), with the
+[middlewear](Middleware.md), with the
`app.use()` method.
```js
diff --git a/zk/Using_arguments_with_Apollo_Client.md b/zk/Using_arguments_with_Apollo_Client.md
index 7249180..2707177 100644
--- a/zk/Using_arguments_with_Apollo_Client.md
+++ b/zk/Using_arguments_with_Apollo_Client.md
@@ -21,7 +21,7 @@ tags: [graphql]
## Updated schema
In order to demonstrate arguments we need to expand the
-[original schema](/Databases/GraphQL/Apollo/Apollo_Server.md#example-schema).
+[original schema](Apollo_Server.md#example-schema).
Remember a Track is a group of modules that teaches about a specific topic. We
are going to add:
@@ -82,7 +82,7 @@ If we have more than one argument we can separate them with commas.
## Create resolver for new query
Now we have to create a resolver for our new `track` query. We will quickly run
-through the [server-side process](/Databases/GraphQL/Apollo/Apollo_Server.md).
+through the [server-side process](Apollo_Server.md).
### Update our `RESTDataSource`
@@ -266,7 +266,7 @@ return a specific track.
## Send query with arguments using Apollo `useQuery`
We can now write a proper query using the
-[useQuery hook](/Databases/GraphQL/Apollo/Apollo_Client.md#usequery-hook) from
+[useQuery hook](Apollo_Client.md#usequery-hook) from
Apollo Client, with variables.
First define our query constant:
@@ -304,6 +304,6 @@ const { loading, error, data } = useQuery(GET_TRACK, {
```
Note that in contrast to the
-[simple example](/Databases/GraphQL/Apollo/Apollo_Client.md#query-constants)
+[simple example](Apollo_Client.md#query-constants)
because we are using variables, we have to pass-in an additional options object
with the query constant that specifies our variables.
diff --git a/zk/Validating_Mongoose_schemas.md b/zk/Validating_Mongoose_schemas.md
index 9608816..8fdb2ac 100644
--- a/zk/Validating_Mongoose_schemas.md
+++ b/zk/Validating_Mongoose_schemas.md
@@ -29,7 +29,7 @@ the property of `required` for a cell in the table. If we didn't set any
validation via Mongoose, Mongo would accept whatever we sent to it.
What is the relationship between this Mongoose validation and the
-[Joi](/Programming_Languages/NodeJS/REST_APIs/Validation.md) validation that we
+[Joi](Validation.md) validation that we
use when validating API requests in Node/Express? They complement each other. We
use Joi to validate the client request to the API. If this is valid, the process
would then move onto the next stage which would be transforming the data from a
diff --git a/zk/Validation.md b/zk/Validation.md
index f5a06f1..d158f65 100644
--- a/zk/Validation.md
+++ b/zk/Validation.md
@@ -13,7 +13,7 @@ validate the data that we receive from any HTTP requests where the client sends
a body to the endpoint.
One of the most popular schema validators for NodeJS is
-[joi](https://www.npmjs.com/package/joi).
+[joi](joi).
## Demonstration
diff --git a/zk/Virtual_memory_and_the_MMU.md b/zk/Virtual_memory_and_the_MMU.md
index 2840dcc..310a477 100644
--- a/zk/Virtual_memory_and_the_MMU.md
+++ b/zk/Virtual_memory_and_the_MMU.md
@@ -72,4 +72,4 @@ processes on hold.
## Resources
-[Virtual memory](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html#:~:text=Virtual%20memory%20also%20allows%20the,to%20more%20than%20one%20process)
+[Virtual memory](9_VirtualMemory.html#:~:text=Virtual%20memory%20also%20allows%20the,to%20more%20than%20one%20process)
diff --git a/zk/Voltage.md b/zk/Voltage.md
index fdfcc30..9a98570 100644
--- a/zk/Voltage.md
+++ b/zk/Voltage.md
@@ -8,7 +8,7 @@ tags: [physics, electricity]
## Difference of potential and the tranfer of energy
We noted in the discussion of
-[current](/Electronics_and_Hardware/Analogue_circuits/Current.md) that current
+[current](Current.md) that current
flows when there is a difference of potential between two points with negatively
charged atoms at one point and positively charged atoms at the other.
@@ -21,7 +21,7 @@ current, energy must be imparted to the electrons so that they all flow in the
same direction.
Voltage is the application of this energy. Any
-[form of energy](/Electronics_and_Hardware/Analogue_circuits/Voltage_sources.md)
+[form of energy](Voltage_sources.md)
that dislodges electrons from atoms can be used to produce current. Thus:
> Voltage is the work required per coulomb to move a charge from one point to
@@ -31,7 +31,7 @@ that dislodges electrons from atoms can be used to produce current. Thus:
Given that voltage is the force that generates current, it would be natural to
think that voltage only exists when a voltage source (such as a
-[battery](/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md))
+[battery](Cells_and_batteries.md))
is connected to a circuit. This however is not the case. Even if a 9V battery
isn't connected to anything it still has a difference of potential of 9-volts
accross its terminals. Remember voltage is _potential energy_ not just the
@@ -98,7 +98,7 @@ obvious enough: they are at the beginning and end of the loop so are equal to
the maximal voltage rise and minimal voltage drop, respectively.
We can work out the voltage of the remaining voltage points by inverting
-[Ohm's Law](/Electronics_and_Hardware/Physics_of_electricity/Ohms_Law.md):
+[Ohm's Law](Ohms_Law.md):
$V = I \times R$:
For the voltage at $V^{B}$:
diff --git a/zk/Voltage_sources.md b/zk/Voltage_sources.md
index a2eea52..1686cda 100644
--- a/zk/Voltage_sources.md
+++ b/zk/Voltage_sources.md
@@ -45,7 +45,7 @@ or **alternating current** (AC):
### Chemicals (cells and batteries)
The chemical creation of current is the physics behind
-[batteries](/Electronics_and_Hardware/Analogue_circuits/Cells_and_batteries.md).
+[batteries](Cells_and_batteries.md).
Chemical current production produces currents on a smaller and less industrial
scale than generators.
diff --git a/zk/What_are_disks.md b/zk/What_are_disks.md
index e631d64..f737f52 100644
--- a/zk/What_are_disks.md
+++ b/zk/What_are_disks.md
@@ -8,7 +8,7 @@ tags:
# What are disks?
-A disk is a mass storage [block_device](/Operating_Systems/Devices.md) which we
+A disk is a mass storage [block_device](Devices.md) which we
can write to and read from.
## SCSI
@@ -24,12 +24,12 @@ The following diagram represents the basic anatomy of a disk device.

-- A disk is divided up into [partitions](/Operating_Systems/Disks/Partitions.md)
+- A disk is divided up into [partitions](Partitions.md)
which are subsections of the overall disk. The kernel presents each partition
- as a [block device](/Operating_Systems/Devices.md) as it would with an entire
+ as a [block device](Devices.md) as it would with an entire
disk.
- The disk dedicates a small part of its contents to a **partition table**: this
defines the different partitions that comprise the total disk space.
- The **filesystem** is a database of files and directories: this comprises the
bulk of the partition and is what you interact with in
- [user space](/Operating_Systems/User_Space.md) when reading and writing data.
+ [user space](User_Space.md) when reading and writing data.
diff --git a/zk/Whole_numbers.md b/zk/Whole_numbers.md
index b790446..a7376fd 100644
--- a/zk/Whole_numbers.md
+++ b/zk/Whole_numbers.md
@@ -30,9 +30,9 @@ $$ a + b = b + a $$
### Multiplication
When **multiplying** whole numbers the placement of the
-[multiplicands](https://www.notion.so/Symbols-and-formal-conventions-80aeaf1872f94a0d97a2e8d07e3855bd)
+[multiplicands](Symbols-and-formal-conventions-80aeaf1872f94a0d97a2e8d07e3855bd)
does not affect the
-[product](https://www.notion.so/Symbols-and-formal-conventions-80aeaf1872f94a0d97a2e8d07e3855bd).
+[product](Symbols-and-formal-conventions-80aeaf1872f94a0d97a2e8d07e3855bd).
Let **a, b** represent whole numbers, then:
diff --git a/zk/Why_computers_use_binary.md b/zk/Why_computers_use_binary.md
index b3f5370..cf46c74 100644
--- a/zk/Why_computers_use_binary.md
+++ b/zk/Why_computers_use_binary.md
@@ -17,7 +17,7 @@ to represent two states: on (1) and off (0) which corresponds to the switch on
an electrical circuit. A single circuit representing the binary values of 1 and
0:
-
+
It would be much more complicated to have to represent ten different states
under the decimal number system, although denary computers do exist.
@@ -27,7 +27,7 @@ represent as large a binary number as we need. We just need one switch for every
digit we want to represent. The switches used in modern computers are so cheap
and so small that billions can be fitted on a single circuit board.
-
+
When we use the term 'switch' we actually mean the transistor components of a
circuit. We don't need to know the physical details at this level but we can say
diff --git a/zk/Working_with_numbers_in_Bash.md b/zk/Working_with_numbers_in_Bash.md
index 0d3d6dd..a4b26ca 100644
--- a/zk/Working_with_numbers_in_Bash.md
+++ b/zk/Working_with_numbers_in_Bash.md
@@ -28,7 +28,7 @@ echo $a
> Note: we do not use a dollar-sign when referring to variables within
> arithmetic evaluation, there is no need. If we do, we get an error. This is
> because we are using an
-> [expansion](/Programming_Languages/Shell/Expansions_and_substitutions.md),
+> [expansion](Expansions_and_substitutions.md),
> therefore the variables are already being interpreted as variables.
## Declaring variables as integers
diff --git a/zk/events.md b/zk/events.md
index c0184fa..86cc136 100644
--- a/zk/events.md
+++ b/zk/events.md
@@ -18,7 +18,7 @@ event. At bottom everything in Node is an event with a callback, created via
event emitters.
Because Node's runtime is
-[event-driven](/Programming_Languages/NodeJS/Architecture/Event_loop.md), it is
+[event-driven](Event_loop.md), it is
event-emitter cycles that are being processed by the Event Loop, although you
may know them as `fs` or `http` (etc) events. The call stack that the Event Loop
works through is just a series of event emissions and their associated
diff --git a/zk/fs.md b/zk/fs.md
index 9a8c9b7..05fb40f 100644
--- a/zk/fs.md
+++ b/zk/fs.md
@@ -13,7 +13,7 @@ methods for working with files and directories.
Every method associated with `fs` has a _blocking_ and _asynchronous_
implementation. The former obviously blocks the
-[event queue](/Programming_Languages/NodeJS/Architecture/Event_loop.md), the
+[event queue](Event_loop.md), the
latter does not.
The synchronous methods are useful to have in some contexts but in general and
@@ -100,4 +100,4 @@ fs.rmSync("/dir", { recursive: true, force: true });
## Streams
-See [Handling streams with fs](/Programming_Languages/NodeJS/Streams.md)
+See [Handling streams with fs](Streams.md)
diff --git a/zk/http.md b/zk/http.md
index 455f7da..8378373 100644
--- a/zk/http.md
+++ b/zk/http.md
@@ -15,7 +15,7 @@ JavaScript.
## Creating a server
An HTTP server is another instance of an
-[event emitter](/Programming_Languages/NodeJS/Modules/Core/events.md)). It
+[event emitter](events.md)). It
therefore has all the same methods as the `EventEmitter` class: `on`, `emit`,
`addListener` etc. This demonstrates again how much of Node's core functionality
is based on event emitters.
diff --git a/zk/journald.md b/zk/journald.md
index 2668dc9..27ea364 100644
--- a/zk/journald.md
+++ b/zk/journald.md
@@ -6,9 +6,9 @@ tags: [systems-programming]
# `journald`
-`journald` is a program that comes as default with [systemd](/Linux/systemd.md).
+`journald` is a program that comes as default with [systemd](systemd.md).
It is a service fror collecting and storing system-level log data. I keeps a
-track of all [kernel](/Operating_Systems/The_Kernel.md) processes. It is
+track of all [kernel](The_Kernel.md) processes. It is
invaluable when tracing the source of problems and errors that may arise on the
system level. It keeps a track of all kernal processes.
diff --git a/zk/process.md b/zk/process.md
index ce275ad..78fdb9d 100644
--- a/zk/process.md
+++ b/zk/process.md
@@ -19,7 +19,7 @@ the terminal and exit the current process.
## Managing runtime environments
See
-[Managing Environments](/Programming_Languages/NodeJS/Architecture/Managing_environments.md).
+[Managing Environments](Managing_environments.md).
## Accessing arguments: `process.argv`
@@ -101,7 +101,7 @@ Hello from file
Typically we want to write and read data that the user provides. To do this we
need to wait on that event. So we use Node's asynchonous
-[event listeners](/Programming_Languages/NodeJS/Modules/Core/events.md). We wait
+[event listeners](events.md). We wait
on the `data` event:
```js
diff --git a/zk/systemd.md b/zk/systemd.md
index e6ee7d6..b53fd6a 100644
--- a/zk/systemd.md
+++ b/zk/systemd.md
@@ -6,10 +6,10 @@ tags: [systems-programming]
# systemd
-Once the [boot process](/Operating_Systems/Boot_process.md) has completed and
+Once the [boot process](Boot_process.md) has completed and
the bootloader has located the kernel and injected it into memory the first user
space program runs: `init` (for _initialisation_). `init` is a
-[daemon](/Operating_Systems/Daemons.md) process that continues running until
+[daemon](Daemons.md) process that continues running until
shutdown and is responsible for starting all the processes that are
prerequisites for user space. For example: network connections, disk access,
user logins etc.
diff --git a/zk/useContext.md b/zk/useContext.md
index 51e8cf2..e4412f8 100644
--- a/zk/useContext.md
+++ b/zk/useContext.md
@@ -126,4 +126,4 @@ Then, in our code we just insert the `Context` component:
In the examples above we have only been consuming state that is owned by the
provider however in most scenarios you will also want to update the state from a
consumer. This is best achieved by combining `useContext` with a reducer and is
-detailed in [Application state management](./Application_state_management.md).
+detailed in [Application state management](Application_state_management.md).
diff --git a/zk/useEffect.md b/zk/useEffect.md
index f648d1b..acc3642 100644
--- a/zk/useEffect.md
+++ b/zk/useEffect.md
@@ -15,7 +15,7 @@ would be dispatching a request to an API to retrieve data to display in a
component's initial render.
`useEffect` enshrines but also simplifies the
-[lifecyle methods](./../Classes/Lifecycle_methods.md) that are used with
+[lifecyle methods](Lifecycle_methods.md) that are used with
class-based React components.
## Demonstration
@@ -78,12 +78,12 @@ Note the array that is the second argument to `useEffect`. This is the
The syntax of the `useEffect` hook also allows you to handle cleanup: something
you want to do when the component unmounts (another example of how this hook
-recasts the traditional [lifecycle methods](./../Classes/Lifecycle_methods.md))
+recasts the traditional [lifecycle methods](Lifecycle_methods.md))
. In addition to running on unmount, the cleanup function will run before the
effect runs again (i.e. when it runs in response to a change in one of the
elements of the dependency araray). This is chiefly used to prevent
-[memory leaks](../../../Software_Engineering/Memory_leaks.md) and the
-['update on unmounted component error'](../Errors.md#state-update-on-unmounted-component).
+[memory leaks](Memory_leaks.md) and the
+['update on unmounted component error'](Errors.md#state-update-on-unmounted-component).
You do this by having a `return` clause after the main effect. Schematically:
@@ -114,4 +114,4 @@ useEffect(() => {
## Resources
-[Understanding the React useEffect cleanup function](https://blog.logrocket.com/understanding-react-useeffect-cleanup-function/)
+[Understanding the React useEffect cleanup function]()