chore: change img paths

This commit is contained in:
thomasabishop 2024-02-16 16:14:01 +00:00
parent 3726285fa5
commit 2b1ea69c02
97 changed files with 206 additions and 198 deletions

8
scripts/convert_link_format.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
find /home/thomas/repos/eolas/zk/ -type f -name "*.md" | while
read file; do
sed -r 's/\[([^\]]+)\]\(\/[^)]+\)/[[\1]]/g'
done

View file

@ -21,7 +21,7 @@ router.get("/", (req, res) => {
Our server is now set up: Our server is now set up:
![](/_img/server-listening.png) ![](/img/server-listening.png)
> When creating our API this structure of creating handlers for specific routes > When creating our API this structure of creating handlers for specific routes
> will be iterated. Every endpoint will be specified with > will be iterated. Every endpoint will be specified with

View file

@ -13,7 +13,7 @@ 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](/DevOps/AWS/AWS_Lambda/Lambda_handler_function.md) that
executes a backend process. executes a backend process.
![](/_img/gateway-services.png) ![](/img/gateway-services.png)
See See
[using API Gateway as Lambda trigger](/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation_within_AWS.md) [using API Gateway as Lambda trigger](/DevOps/AWS/AWS_Lambda/Practical_walkthrough_Lambda_creation_within_AWS.md)

View file

@ -47,4 +47,4 @@ have the Mongo document outputted to the console:
This will also be reflected in Compass: This will also be reflected in Compass:
![](/_img/mongo-doc-added.png) ![](/img/mongo-doc-added.png)

View file

@ -2,7 +2,7 @@
tags: [algorithms] tags: [algorithms]
--- ---
![Screenshot_2021-05-11_at_18.55.23.png](../_img/Screenshot_2021-05-11_at_18.55.23.png) ![Screenshot_2021-05-11_at_18.55.23.png](../img/Screenshot_2021-05-11_at_18.55.23.png)
_Summary of the main classes of algorithmic complexity_ _Summary of the main classes of algorithmic complexity_
## Distinguish algorithms from programs ## Distinguish algorithms from programs
@ -117,7 +117,7 @@ following data set:
| 5 | 5 | | 5 | 5 |
If we plotted this as a graph it is clear that this is equivalent to a linear If we plotted this as a graph it is clear that this is equivalent to a linear
distribution:![lin.svg](../_img/lin.svg) distribution:![lin.svg](../img/lin.svg)
Algorithms which display this distribution are therefore called **linear Algorithms which display this distribution are therefore called **linear
algorithms**. 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. the input, it is growing proportional to the size of the input squared.
Graphically this is represented with a curving lines as follows: Graphically this is represented with a curving lines as follows:
![square.svg](../_img/square.svg) ![square.svg](../img/square.svg)
We can clearly see that as n grows, the runtime gets steeper and more We can clearly see that as n grows, the runtime gets steeper and more
pronounced, 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 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: a slight increase in runtime but then quickly levels off:
![Screenshot_2021-05-11_at_18.51.02.png](../_img/Screenshot_2021-05-11_at_18.51.02.png) ![Screenshot_2021-05-11_at_18.51.02.png](../img/Screenshot_2021-05-11_at_18.51.02.png)
Many sorting algorithms run in log n time, as does recursion. 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: With this in mind we can break down the `findSum` function like so:
![breakdown.svg](../_img/breakdown.svg) ![breakdown.svg](../img/breakdown.svg)
This gives us: This gives us:

View file

@ -10,7 +10,7 @@ tags: [analogue]
Analogue and digital are paradigms for recording information, specifically Analogue and digital are paradigms for recording information, specifically
information about an object or state that obtains in the world. information about an object or state that obtains in the world.
![](/_img/analog-digital.svg) ![](/img/analog-digital.svg)
## Analogue ## Analogue

View file

@ -77,7 +77,7 @@ When we access the local URL we are able to access the Apollo server using the
Explorer GUI. This automatically loads our schema and is basically a more fancy Explorer GUI. This automatically loads our schema and is basically a more fancy
version of GraphiQL: version of GraphiQL:
![](/_img/apollo-explorer.png) ![](/img/apollo-explorer.png)
It makes it easy to read descriptions of the dataypes and to construct queries It makes it easy to read descriptions of the dataypes and to construct queries
by clicking to insert fields. by clicking to insert fields.

View file

@ -91,7 +91,7 @@ awk '/Joe/ {print}' list.txt
### Lines, records, fields ### Lines, records, fields
![](/_img/awk-outline.png) ![](/img/awk-outline.png)
When `awk` receives a file it divides the lines into **records**. When `awk` receives a file it divides the lines into **records**.

View file

@ -10,4 +10,4 @@ Give that the biconditional means that if $P$ is the case, $Q$ must be the case
and if $Q$ is the case, $P$ must be the case, if we have $P \leftrightarrow Q$ and if $Q$ is the case, $P$ must be the case, if we have $P \leftrightarrow Q$
and $P$, we can derive $Q$ and vice versa. and $P$, we can derive $Q$ and vice versa.
![](/_img/biconditional-elim.png) ![](/img/biconditional-elim.png)

View file

@ -11,4 +11,4 @@ the case, $P$ must be the case. Thus to introduce this operator we must
demonstrate both that $Q$ follows from $P$ and that $P$ follows from $Q$. We do demonstrate both that $Q$ follows from $P$ and that $P$ follows from $Q$. We do
this via two sub-proofs. this via two sub-proofs.
![](/_img/bi-intro.png) ![](/img/bi-intro.png)

View file

@ -25,7 +25,7 @@ In decimal, 0 is equal to black (zero light intensity) and 255 is equal to white
(full light intensity). Some examples of this (including binary and hex (full light intensity). Some examples of this (including binary and hex
representations are below): representations are below):
![](/_img/greyscale-encoding.svg) ![](/img/greyscale-encoding.svg)
### Colour encoding ### Colour encoding
@ -42,13 +42,13 @@ Some examples below
Red is represented in RGB with all 8 red bits to set to 1 and the remaining 16 Red is represented in RGB with all 8 red bits to set to 1 and the remaining 16
bits for the other two colours set to 0. bits for the other two colours set to 0.
![](/_img/red-encoding.svg) ![](/img/red-encoding.svg)
#### Yellow #### Yellow
Yellow is represented in RGB with both red and blue set to 1 and the remaining 8 Yellow is represented in RGB with both red and blue set to 1 and the remaining 8
green bits set to ): green bits set to ):
![](/_img/yellow-encoding.svg) ![](/img/yellow-encoding.svg)
## Binary encoding of images ## Binary encoding of images

View file

@ -101,11 +101,11 @@ equal to: **1 in the two column and 1 in the 4 column → 110**
More clearly: More clearly:
![](../../_img/Pasted_image_20220319135558.png) ![](../../img/Pasted_image_20220319135558.png)
And for comparison: And for comparison:
![](../../_img/Pasted_image_20220319135805.png) ![](../../img/Pasted_image_20220319135805.png)
Or we can express the binary as: Or we can express the binary as:
@ -119,4 +119,4 @@ $$ 2^1 + 2^2 $$
Let's convert 23 into binary: Let's convert 23 into binary:
![](../../_img/Pasted_image_20220319135823.png) ![](../../img/Pasted_image_20220319135823.png)

View file

@ -63,7 +63,7 @@ create your boot process so the two are clearly distinguishable.
The de facto standard boot loader for Linux is GRUB: Grand Unified Boot Loader. The de facto standard boot loader for Linux is GRUB: Grand Unified Boot Loader.
![](/_img/grub.jpg) ![](/img/grub.jpg)
You see the GRUB default menu when you first start a Linux machine. It will You see the GRUB default menu when you first start a Linux machine. It will
offer you various options for loading your installed OS or other OSs. GRUB is a offer you various options for loading your installed OS or other OSs. GRUB is a

View file

@ -43,8 +43,8 @@ link is used to transfer the data from an end to another. On other hand Parallel
Transmission is the transmission in which multiple parallel links are used that Transmission is the transmission in which multiple parallel links are used that
transmit each bit of data simultaneously. transmit each bit of data simultaneously.
<img src="../_img/serial-transmission.jpg" width="800px"/> <img src="../img/serial-transmission.jpg" width="800px"/>
<img src="../_img/parallel-transmission.jpg" width="800px"/> <img src="../img/parallel-transmission.jpg" width="800px"/>
- Serial buses are cheaper to implement than parallel buses - Serial buses are cheaper to implement than parallel buses
- Serial buses operate at greater - Serial buses operate at greater

View file

@ -19,7 +19,7 @@ The CPU comprises three core components:
- the Arithmetic Logic Unit (ALU) - the Arithmetic Logic Unit (ALU)
- the Control Unit (CU) - the Control Unit (CU)
![](/_img/von_neumann_architecture.jpeg) ![](/img/von_neumann_architecture.jpeg)
> This method of putting together a computer is known as the **Von Neumann > This method of putting together a computer is known as the **Von Neumann
> Architecture**. It was devised by John von Neumann in about 1945, well before > Architecture**. It was devised by John von Neumann in about 1945, well before
@ -106,7 +106,7 @@ Hertz was the scientist who detected
We use Hertz as a measure of the frequency of electromatic wave cycles in a We use Hertz as a measure of the frequency of electromatic wave cycles in a
signal. signal.
![](/_img/hertz_wave_freq.gif) ![](/img/hertz_wave_freq.gif)
As the diagram above shows, a cycle is equal to one ascending and one descending As the diagram above shows, a cycle is equal to one ascending and one descending
crest. The more cycles per time unit, the greater the Hertz. We see the Hz crest. The more cycles per time unit, the greater the Hertz. We see the Hz

View file

@ -34,7 +34,7 @@ connection types:
The table below summarises the relative differences: The table below summarises the relative differences:
![](/_img/cell-comparison.svg) ![](/img/cell-comparison.svg)
### Series connections ### Series connections
@ -58,12 +58,12 @@ Thus series connections increase voltage but keep current constant.
_Series battery connection:_ _Series battery connection:_
![](/_img/series-battery-diagram.svg) ![](/img/series-battery-diagram.svg)
_Can be represented in a circuit diagram in one of the following two ways: as a _Can be represented in a circuit diagram in one of the following two ways: as a
series of cells or as a single battery:_ series of cells or as a single battery:_
![](/_img/series-battcircuit.svg) ![](/img/series-battcircuit.svg)
In the case of **series opposing**, negative terminals are connected to each In the case of **series opposing**, negative terminals are connected to each
other and positive terminals are connected to each other in a series. This other and positive terminals are connected to each other in a series. This
@ -88,11 +88,11 @@ $$
_Parallel battery connection:_ _Parallel battery connection:_
![](/_img/parallel-battery-diagram.svg) ![](/img/parallel-battery-diagram.svg)
_Parallel battery circuit diagram:_ _Parallel battery circuit diagram:_
![](/_img/circ-batt-final.svg) ![](/img/circ-batt-final.svg)
### Series-parrallel ### Series-parrallel

View file

@ -42,7 +42,7 @@ This will apply the changes from the commit with hash `xyz` from thee `main`
branch to the `feature` branch. This will create a new SHA on `feature` (pqr) branch to the `feature` branch. This will create a new SHA on `feature` (pqr)
but the changes will be identical. but the changes will be identical.
![](/_img/cherry-pick.svg) ![](/img/cherry-pick.svg)
The benefit is that you only take the select changes you want, you are not The benefit is that you only take the select changes you want, you are not
merging the whole `main` branch into feature. merging the whole `main` branch into feature.

View file

@ -18,7 +18,7 @@ accross its terminals. Through the application of
[Ohm's Law](/Electronics_and_Hardware/Physics_of_electricity/Ohms_Law.md) we can [Ohm's Law](/Electronics_and_Hardware/Physics_of_electricity/Ohms_Law.md) we can
determine that the maximum current will be 0.9 miliamps. determine that the maximum current will be 0.9 miliamps.
![](/_img/basic-circuit.png) ![](/img/basic-circuit.png)
## Open and short circuits ## Open and short circuits
@ -42,4 +42,4 @@ current is represented as flowing in a straight line from the voltage source
The circuit below is functionally identical to the previous circuit but The circuit below is functionally identical to the previous circuit but
represented vertically: represented vertically:
![](/_img/vertical-circuit.png) ![](/img/vertical-circuit.png)

View file

@ -30,7 +30,7 @@ the reverse (the electrons moving from the voltage source to ground).
The diagram below shows a pulse cycle of 2Hz. The diagram below shows a pulse cycle of 2Hz.
![](/_img/clock_pulses.png) ![](/img/clock_pulses.png)
## Linking components to the clock ## Linking components to the clock

View file

@ -42,9 +42,9 @@ their infrastructure and applications.
CloudWatch can usually be accessed directly from within the dashboard for the CloudWatch can usually be accessed directly from within the dashboard for the
given AWS service under the "Monitor" tab. For example with AWS Lambda: given AWS service under the "Monitor" tab. For example with AWS Lambda:
![](/_img/lambda-cloudwatch.png) ![](/img/lambda-cloudwatch.png)
In addition to graphical metrics, we can also view specific logs for each event In addition to graphical metrics, we can also view specific logs for each event
and execution of the given service. In the case of a Lambda function: and execution of the given service. In the case of a Lambda function:
![](/_img/cloudwatch-logs.png) ![](/img/cloudwatch-logs.png)

View file

@ -10,4 +10,4 @@ If we have a conditional and we have independently derived its antecedent, we
may invoke its consequent. This is often referred to as _Modus ponens_ may invoke its consequent. This is often referred to as _Modus ponens_
(affirming the antecedent). (affirming the antecedent).
![](/_img/cond-elim.png) ![](/img/cond-elim.png)

View file

@ -9,4 +9,4 @@ tags: []
If we can show that $Q$ follows from $P$ (typically via a sub-proof) than we can If we can show that $Q$ follows from $P$ (typically via a sub-proof) than we can
assert that P implies Q. This is also sometimes known as _Conditional Proof_ assert that P implies Q. This is also sometimes known as _Conditional Proof_
![](/_img/cond-intro.png) ![](/img/cond-intro.png)

View file

@ -9,4 +9,4 @@ tags: []
If a conjunction exists, it means that both conjuncts are the case; therefore we If a conjunction exists, it means that both conjuncts are the case; therefore we
can legitimately extract either one of them. Also known as _Simplification_. can legitimately extract either one of them. Also known as _Simplification_.
![](/_img/conjunc-elim.png) ![](/img/conjunc-elim.png)

View file

@ -7,4 +7,4 @@ tags: []
If two conjuncts have each been independently derived then they can be If two conjuncts have each been independently derived then they can be
conjoined. Also known more simply as _Conjunction_ conjoined. Also known more simply as _Conjunction_
![](/_img/conjunc-intro.png) ![](/img/conjunc-intro.png)

View file

@ -69,11 +69,11 @@ expenditure and security challenges.
_Standard userspace_ _Standard userspace_
![](/_img/standard-userspace.png) ![](/img/standard-userspace.png)
_Userspace with containerization_ _Userspace with containerization_
![](/_img/containers-in-userspace.png) ![](/img/containers-in-userspace.png)
## Differences with virtual machines ## Differences with virtual machines
@ -102,7 +102,7 @@ rest as it would any other process on the OS.
| Less portable | More portable | | Less portable | More portable |
| Slower and more difficult to run | Scale rapidly due to lightweight nature | | Slower and more difficult to run | Scale rapidly due to lightweight nature |
![](/_img/container-versus-vm.png) ![](/img/container-versus-vm.png)
## Why use containers? ## Why use containers?

View file

@ -29,4 +29,4 @@ _Compass_ is a graphical interface for viewing and interacting with the data in
your Mongo database. It will automatically load to the default Mongo port: your Mongo database. It will automatically load to the default Mongo port:
`27017`. `27017`.
![](/_img/mongo-compass.png) ![](/img/mongo-compass.png)

View file

@ -69,11 +69,11 @@ const course = new Course({
}); });
``` ```
![](/_img/mongoose-hierarchy.svg) ![](/img/mongoose-hierarchy.svg)
## Outcome ## Outcome
Having created a database, connected to it with Mongoose, and created a model we Having created a database, connected to it with Mongoose, and created a model we
will see our collection reflected in Compass: will see our collection reflected in Compass:
![](img/../../../_img/mongo-collection.png) ![](img/../../../img/mongo-collection.png)

View file

@ -15,7 +15,7 @@ below demonstrates how memory can be created using
[NAND](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nand-gate) [NAND](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nand-gate)
gates. A single bit is stored in memory. gates. A single bit is stored in memory.
![](/_img/nand_latch_logic_circuit.png) Interactive version of circuit: ![](/img/nand_latch_logic_circuit.png) Interactive version of circuit:
<iframe src="https://circuitverse.org/simulator/embed/nand-mem?theme=default&display_title=false&clock_time=true&fullscreen=true&zoom_in_out=true" style="border-width:; border-style: solid; border-color:;" name="myiframe" id="projectPreview" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" height="500" width="500" allowFullScreen></iframe> <iframe src="https://circuitverse.org/simulator/embed/nand-mem?theme=default&display_title=false&clock_time=true&fullscreen=true&zoom_in_out=true" style="border-width:; border-style: solid; border-color:;" name="myiframe" id="projectPreview" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" height="500" width="500" allowFullScreen></iframe>
@ -42,7 +42,7 @@ gates. A single bit is stored in memory.
> Upshot: With **S** `ON`, output is the same as input > Upshot: With **S** `ON`, output is the same as input
![](/_img/nand-mem-first.gif) ![](/img/nand-mem-first.gif)
### Second state: both S and I `ON` ### Second state: both S and I `ON`
@ -59,7 +59,7 @@ gates. A single bit is stored in memory.
> Upshot: With **S** on, the output is again the same as the input > Upshot: With **S** on, the output is again the same as the input
![](/_img/nand-mem-second.gif) ![](/img/nand-mem-second.gif)
> So far we have seen that when **S** is `ON` you can change **I** on and off > So far we have seen that when **S** is `ON` you can change **I** on and off
> and **O** will change with it. > and **O** will change with it.
@ -78,4 +78,4 @@ and at Gate 2: `OFF (Gate 1) + OFF (S) = OFF`
This is illustrated in the diagram below. The space occupied by **A** and **B** This is illustrated in the diagram below. The space occupied by **A** and **B**
remains on (note it is illuminated) regardless of the state of **I**. remains on (note it is illuminated) regardless of the state of **I**.
![](/_img/nand-mem-demonstrated.gif) ![](/img/nand-mem-demonstrated.gif)

View file

@ -33,7 +33,7 @@ force the **voltage source**.
_The diagram below illustrates the flow of current where the circles are _The diagram below illustrates the flow of current where the circles are
electrons knocking into each other and passing current:_ electrons knocking into each other and passing current:_
![](/_img/charge-cylinder.svg) ![](/img/charge-cylinder.svg)
> Electrons travel very slowly through a conductor. This is in contrast to their > Electrons travel very slowly through a conductor. This is in contrast to their
> intrinsic motion which of course equal to the speed of light (186, 000 miles > intrinsic motion which of course equal to the speed of light (186, 000 miles

View file

@ -17,7 +17,7 @@ single set of tasks according to prewritten instructions. Well take the term
_computer_ to mean general purpose computer. _computer_ to mean general purpose computer.
Simplified model of what a computer is: Simplified model of what a computer is:
![1.4-Input-Process-Output.png](../_img/1.4-Input-Process-Output.png) ![1.4-Input-Process-Output.png](../img/1.4-Input-Process-Output.png)
Although the input, output and storage parts of a computer are very important, 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 they will not be the focus of this course. Instead we are going to learn all
@ -57,9 +57,9 @@ instructions to make calculations.
wind, drift, slope and elevation. These were used well into WW2 but they were wind, drift, slope and elevation. These were used well into WW2 but they were
limited to the particular type of cannon or shell limited to the particular type of cannon or shell
![Screenshot_2020-08-09_at_21.32.54 1.png](../_img/Screenshot_2020-08-09_at_21.32.54%201.png) ![Screenshot_2020-08-09_at_21.32.54 1.png](../img/Screenshot_2020-08-09_at_21.32.54%201.png)
![Screenshot_2020-08-09_at_21.34.48.png](../_img/Screenshot_2020-08-09_at_21.34.48.png) ![Screenshot_2020-08-09_at_21.34.48.png](../img/Screenshot_2020-08-09_at_21.34.48.png)
> Before the invention of actual computers, 'computer' was a job-title denoting > Before the invention of actual computers, 'computer' was a job-title denoting
> people who were employed to conduct complex calculations, sometimes with the > people who were employed to conduct complex calculations, sometimes with the

View file

@ -15,14 +15,14 @@ disjuncts comprising the disjunction you start out with. If you can derive your
target proposition as the conclusion of each subproof then you may invoke the target proposition as the conclusion of each subproof then you may invoke the
conclusion in the main proof and take it to be derived. conclusion in the main proof and take it to be derived.
![](/_img/disjunc-elim.png) ![](/img/disjunc-elim.png)
_Here is an example where Disjunction Elimination is used to derive a new _Here is an example where Disjunction Elimination is used to derive a new
disjunction._ disjunction._
![](/_img/proofs-drawio-Page-6.drawio.png) ![](/img/proofs-drawio-Page-6.drawio.png)
_Here are two further examples that use Disjunction Elimination to derive _Here are two further examples that use Disjunction Elimination to derive
singular propositions_ singular propositions_
![](/_img/ORelim1.png) ![](/_img/ORelim2.png) ![](/img/ORelim1.png) ![](/img/ORelim2.png)

View file

@ -15,4 +15,4 @@ to be true. This is represented in the context of
can pass up via either branch of a disjunction pattern. This rule is sometimes can pass up via either branch of a disjunction pattern. This rule is sometimes
also referred to (confusingly) as _Addition_. also referred to (confusingly) as _Addition_.
![](/_img/disjunc-intro.png) ![](/img/disjunc-intro.png)

View file

@ -10,16 +10,16 @@ tags:
Suppose you have the following shape: Suppose you have the following shape:
![draw.io-Page-9.drawio 1.png](../../_img/draw.io-Page-9.drawio.png) ![draw.io-Page-9.drawio 1.png](../../img/draw.io-Page-9.drawio.png)
One part is shaded. This represents one-eighth of the original shape. One part is shaded. This represents one-eighth of the original shape.
![one-eighth-a.png](../../_img/one-eighth-a.png) ![one-eighth-a.png](../../img/one-eighth-a.png)
Now imagine there are four instances of the shape and one-eighth remains shaded. Now imagine there are four instances of the shape and one-eighth remains shaded.
How man one-eighths are there in four? How man one-eighths are there in four?
![draw.io-Page-9.drawio 2.png](../../_img/draw.io-Page-9.drawio.png) ![draw.io-Page-9.drawio 2.png](../../img/draw.io-Page-9.drawio.png)
The shaded proportion represents $\frac{1}{8}$ of the shape. Imagine four of The shaded proportion represents $\frac{1}{8}$ of the shape. Imagine four of
these shapes, how many eighths are there? these shapes, how many eighths are there?

View file

@ -8,7 +8,7 @@ tags: [docker, containerization]
## Overview ## Overview
![](/_img/dock-architecture.png) ![](/img/dock-architecture.png)
- The Docker Client is a thin API for making - The Docker Client is a thin API for making
[REST API](/Databases/REST/RESTful_APIs.md) to the Docker Server. Any CLI [REST API](/Databases/REST/RESTful_APIs.md) to the Docker Server. Any CLI

View file

@ -144,7 +144,7 @@ docker attach my_container
## Container lifecycle ## Container lifecycle
![](/_img/container-lifecycle.png) ![](/img/container-lifecycle.png)
All containers have a lifecycle represented by five distinct states. Each state All containers have a lifecycle represented by five distinct states. Each state
has an associated command: has an associated command:

View file

@ -57,7 +57,7 @@ call this propensity of electrons the **intrinsic magnetic moment** of the
electron. It is aggregates of these miniature magnetic behaviours that produce electron. It is aggregates of these miniature magnetic behaviours that produce
the overall magnetic property of the material. the overall magnetic property of the material.
![](/_img/dipole-again.svg) ![](/img/dipole-again.svg)
In most materials, equal numbers of electrons spin in opposite directions. As a In most materials, equal numbers of electrons spin in opposite directions. As a
result, their magentic effects are cancelled out. However **in strongly magnetic result, their magentic effects are cancelled out. However **in strongly magnetic
@ -128,7 +128,7 @@ charge, the magnetic field is different:
This is illustrated below which shows the magnetic field operating at right This is illustrated below which shows the magnetic field operating at right
angles to the flow of charge within a wire. angles to the flow of charge within a wire.
<img src="/home/thomas/repos/eolas/_img/magnetic_field.png" width="300" /> <img src="/home/thomas/repos/eolas/img/magnetic_field.png" width="300" />
## The electromagnetic field ## The electromagnetic field
@ -181,7 +181,7 @@ waves form a spectrum based on their frequency and wavelength. For example,
'radio waves' are low-frequency / long wavelength electromagnetic waves and 'radio waves' are low-frequency / long wavelength electromagnetic waves and
gamma rays are high-frequency / short wavelength waves: gamma rays are high-frequency / short wavelength waves:
![](/_img/em-spectrum.jpg) ![](/img/em-spectrum.jpg)
The image below shows the propagation of an electromagnetic wave through space. The image below shows the propagation of an electromagnetic wave through space.
We can identify the core components as follows We can identify the core components as follows
@ -191,7 +191,7 @@ We can identify the core components as follows
which propagates upward along the $y$ axis which propagates upward along the $y$ axis
- The directionality of both waves is forward along the $x$ axis - The directionality of both waves is forward along the $x$ axis
![](/_img/em-wave.gif) ![](/img/em-wave.gif)
## Using magnetism to generate electricity ## Using magnetism to generate electricity

View file

@ -18,7 +18,7 @@ the nucleus.
_The diagram below demonstrates shell naming conventions and the maximum number _The diagram below demonstrates shell naming conventions and the maximum number
of electrons per shell._ of electrons per shell._
![](/_img/valence-shell.svg) ![](/img/valence-shell.svg)
## Valence ## Valence

View file

@ -9,7 +9,7 @@ tags:
Two fractions are equivalent if they represent the same value. To begin with we Two fractions are equivalent if they represent the same value. To begin with we
can represent this visually: can represent this visually:
![equiv-fractions.png](../../_img/equiv-fractions.png) ![equiv-fractions.png](../../img/equiv-fractions.png)
_Each shaded area is taking up the same proportion of the whole._ _Each shaded area is taking up the same proportion of the whole._

View file

@ -40,7 +40,7 @@ exception class.
The root class is `BaseException` which all errors and exeptions extend as The root class is `BaseException` which all errors and exeptions extend as
subclasses as demonstrated by this diagram: subclasses as demonstrated by this diagram:
![](/_img/python-exception-hierarchy.png) ![](/img/python-exception-hierarchy.png)
## Exception syntax ## Exception syntax

View file

@ -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 Therefore the framework will be multi-threaded: multiple request-response cycles
can be executed at once by different threads. can be executed at once by different threads.
![sync-thread.svg](/_img/sync-thread.svg) ![sync-thread.svg](/img/sync-thread.svg)
To accomodate the ability to increase the scale of synchronous applications you 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 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 continues with its execution and handling new requests. Once these resolve, the
data is returned to the main thread. data is returned to the main thread.
![async.svg](/_img/async.svg) ![async.svg](/img/async.svg)
## The Event Loop ## The Event Loop
@ -77,7 +77,7 @@ process exits when there is no more pending work in the Event Loop, or when
are tasks queued in the Event Loop, or present on the are tasks queued in the Event Loop, or present on the
[call stack](/Software_Engineering/Call_stack.md). [call stack](/Software_Engineering/Call_stack.md).
![](/_img/node-event-loop.svg) ![](/img/node-event-loop.svg)
The phases are as follows: The phases are as follows:

View file

@ -66,7 +66,7 @@ Our `sda1` partition is now mounted at `mountpoint`. We can go ahead and create
files. If we now look within the graphical file manager when we click on the files. If we now look within the graphical file manager when we click on the
`sda1` volume, we will see the new file we have created in `mountpoint`. `sda1` volume, we will see the new file we have created in `mountpoint`.
![](/_img/mount-directory.png) ![](/img/mount-directory.png)
## fstab ## fstab

View file

@ -42,7 +42,7 @@ The possible state changes for the JK Flip-Flop are detailed below:
A JK Flip-Flop can execute on either the positive or negative pulse. Below are A JK Flip-Flop can execute on either the positive or negative pulse. Below are
the diagrams for a rising and falling pulse respectively: the diagrams for a rising and falling pulse respectively:
![](/_img/jk-flip-flops.png) ![](/img/jk-flip-flops.png)
## T Flip-Flops ## T Flip-Flops
@ -59,4 +59,4 @@ Thus the state table for the T Flip-Flop is:
| 0 | Pulse | Maintain previous value | Hold | | 0 | Pulse | Maintain previous value | Hold |
| 0 | Pulse | Inverse of previous value | Toggle | | 0 | Pulse | Inverse of previous value | Toggle |
![](/_img/t-flip-flops.png) ![](/img/t-flip-flops.png)

View file

@ -54,11 +54,11 @@ Sub-proofs follow this structure recursively. This is known as _Fitch notation_
_Schematically_: _Schematically_:
![](/_img/proofs-drawio-Page-5.drawio.png) ![](/img/proofs-drawio-Page-5.drawio.png)
_Applied example_: _Applied example_:
![](/_img/proofs-drawio-Page-6.drawio.png) ![](/img/proofs-drawio-Page-6.drawio.png)
## Sub-proofs ## Sub-proofs

View file

@ -32,7 +32,7 @@ three lines
## Colour outputs ## Colour outputs
![](/_img/terminal_colours.png) ![](/img/terminal_colours.png)
```bash ```bash
echo -e "\033[31;40mColoured Text\033[0m" echo -e "\033[31;40mColoured Text\033[0m"

View file

@ -17,7 +17,7 @@ We mark the last good revision and the first bad revision. Bisect will the reset
the code to the midpoint between the good and bad versions and let you test it. the code to the midpoint between the good and bad versions and let you test it.
You mark that as a good or bad version and then bisect repeats the process. You mark that as a good or bad version and then bisect repeats the process.
![](/_img/git-bisect.svg) ![](/img/git-bisect.svg)
## Procedure ## Procedure

View file

@ -24,4 +24,4 @@ terminal of the voltage source.
The symbol for ground in circuit diagrams: The symbol for ground in circuit diagrams:
<img src="/home/thomas/repos/computer_science/_img/ground-symbol.png" width="300px"> <img src="/home/thomas/repos/computer_science/img/ground-symbol.png" width="300px">

View file

@ -68,7 +68,7 @@ The diagram below shows the circuit representation of a half-adder and an
example calculation. This calculation matches the ones column of the earlier example calculation. This calculation matches the ones column of the earlier
binary addition example: $0011 + 0010$. binary addition example: $0011 + 0010$.
![](/_img/half-adder-new.png) ![](/img/half-adder-new.png)
### Implementation with logic gates ### Implementation with logic gates
@ -112,7 +112,7 @@ And the carry-out bit replicates the truth conditions of
It is therefore possible to implement a half-adder with just these two logic It is therefore possible to implement a half-adder with just these two logic
gates: gates:
![](/_img/half-adder-gates-three.png) ![](/img/half-adder-gates-three.png)
The digital circuit above has the same inputs and outputs as the half adder The digital circuit above has the same inputs and outputs as the half adder
diagram above. diagram above.
@ -137,7 +137,7 @@ and B) and like the half adder, generates a sum bit and a carry-out bit.
| ---------------------------- | ----------------------------- | ------------------------ | ---------------------- | ---------------------------- | | ---------------------------- | ----------------------------- | ------------------------ | ---------------------- | ---------------------------- |
| The first number to be added | The second number to be added | The incoming carried bit | The sum bit (A+B+C_in) | The carry-out bit (A+B+C_in) | | The first number to be added | The second number to be added | The incoming carried bit | The sum bit (A+B+C_in) | The carry-out bit (A+B+C_in) |
![](/_img/full-adder-new.png) ![](/img/full-adder-new.png)
The diagram above is equivalent to the calculation taking place in the fours The diagram above is equivalent to the calculation taking place in the fours
column. It has received a carry from the twos column ($1 + 1$ results in $1$ as column. It has received a carry from the twos column ($1 + 1$ results in $1$ as

View file

@ -37,7 +37,7 @@ we can learn the main facets of chip design. Its syntax is very similar to VHDL.
We will create an HDL program for an XOR gate that is implemented through the We will create an HDL program for an XOR gate that is implemented through the
following arrangement of NOT, AND, and OR gates: following arrangement of NOT, AND, and OR gates:
![](/_img/xor-hdl.png) ![](/img/xor-hdl.png)
### HDL file (`Xor.hdl`): ### HDL file (`Xor.hdl`):

View file

@ -32,4 +32,4 @@ Edition)]
The design of the diagram below emphasises the role of abstraction and The design of the diagram below emphasises the role of abstraction and
modularity in the movement from transistors to chips: modularity in the movement from transistors to chips:
![](/_img/hardware-abstraction-hierarchy.png) ![](/img/hardware-abstraction-hierarchy.png)

View file

@ -12,7 +12,7 @@ In order to test our
them into the hardware simulator program. We will demonstrate this with the them into the hardware simulator program. We will demonstrate this with the
following XOR implementation: following XOR implementation:
![](/_img/xor-addition-four.png) ![](/img/xor-addition-four.png)
There are several simulation options: There are several simulation options:
@ -34,7 +34,7 @@ uploaded the `Xor.hdl` file into the simulator and changed the input pins to
`a=1, b=0` and clicked the calculator icon (representing "evaluation"). This `a=1, b=0` and clicked the calculator icon (representing "evaluation"). This
then shows the output and internal pin values for these inputs. then shows the output and internal pin values for these inputs.
<img src="/home/thomas/repos/computer_science/_img/hardware-sim-basic.png" > <img src="/home/thomas/repos/computer_science/img/hardware-sim-basic.png" >
## Script-based ## Script-based
@ -46,7 +46,7 @@ When this is run it automatically generates an output file in the source
directory at `Xor.out`. This can be viewed within the simulator via the 'View' directory at `Xor.out`. This can be viewed within the simulator via the 'View'
drop down. drop down.
![](/_img/hd-sim-test.png) ![](/img/hd-sim-test.png)
## Comparison-based ## Comparison-based

View file

@ -117,7 +117,7 @@ $$
= 15 = 15
$$ $$
![](/_img/hexadecimal-to-bytes.svg) ![](/img/hexadecimal-to-bytes.svg)
> Every four bits (or half byte) in binary corresponds to one symbol in > Every four bits (or half byte) in binary corresponds to one symbol in
> hexadecimal. Therefore **a byte can be easily represented with two hexadecimal > hexadecimal. Therefore **a byte can be easily represented with two hexadecimal

View file

@ -26,5 +26,5 @@ to a breadboard.
_An integrated circuit and its use on a breadboard:_ _An integrated circuit and its use on a breadboard:_
<img align="left" width="200" src="/home/thomas/repos/computer_science/_img/integrated-circuit.jpeg"> <img align="left" width="200" src="/home/thomas/repos/computer_science/img/integrated-circuit.jpeg">
<img width="200" src="/home/thomas/repos/computer_science/_img/breadboard-DIP.jpg"> <img width="200" src="/home/thomas/repos/computer_science/img/breadboard-DIP.jpg">

View file

@ -19,7 +19,7 @@ git add -i
This opens an interface: This opens an interface:
![](/_img/git-interactive-mode-2.png) ![](/img/git-interactive-mode-2.png)
We select 2 and it lets us stage by number. If I enter 1, it will stage the We select 2 and it lets us stage by number. If I enter 1, it will stage the
first change. first change.
@ -40,7 +40,7 @@ But it is useful for staging sub-portions of a file, which are called **hunks**.
We access these via **patch mode**: We access these via **patch mode**:
![](/_img/git-patch-mode.png) ![](/img/git-patch-mode.png)
### Splitting hunks ### Splitting hunks
@ -59,7 +59,7 @@ mode. We enter this with `e`.
This will oped up Vim for the manual work to be done: This will oped up Vim for the manual work to be done:
![](/_img/git-manual-hunk.png) ![](/img/git-manual-hunk.png)
We use the diff symbols `+`, `-` and space to do this. We use the diff symbols `+`, `-` and space to do this.

View file

@ -27,4 +27,4 @@ in RDB table: units that comprise the collection.
A document is a container comprising key-value pairs in the manner of an object. A document is a container comprising key-value pairs in the manner of an object.
![](/_img/mongo-db-structure.svg) ![](/img/mongo-db-structure.svg)

View file

@ -93,7 +93,7 @@ ON model.model_id = sales.model_id; -- Specify the match criteria
We can represent the logical relationship that obtains between the `sales` and We can represent the logical relationship that obtains between the `sales` and
`model` tables as follows: `model` tables as follows:
![](/_img/sql-inner-join.png) ![](/img/sql-inner-join.png)
## Outer joins ## Outer joins
@ -142,7 +142,7 @@ this would give us the following table in return:
The logical relationship sustained between `sales` and `model` by a left inner The logical relationship sustained between `sales` and `model` by a left inner
join is represented in the following diagram: join is represented in the following diagram:
![](/_img/sql-left-outer-join.png) ![](/img/sql-left-outer-join.png)
#### Implementation #### Implementation
@ -185,7 +185,7 @@ performed a right outer join this would give us the following table in return:
The logical relationship sustained between `sales` and `model` by a right inner The logical relationship sustained between `sales` and `model` by a right inner
join is represented in the following diagram: join is represented in the following diagram:
![](/_img/sql-right-outer-join.png) ![](/img/sql-right-outer-join.png)
#### Implementation #### Implementation
@ -227,7 +227,7 @@ generated:
Represented by the following diagram: Represented by the following diagram:
![](/_img/sql-full-outer-join.png) ![](/img/sql-full-outer-join.png)
#### Implementation #### Implementation

View file

@ -6,4 +6,4 @@ tags: [graphql]
# The journey of a GraphQL query # The journey of a GraphQL query
![](/_img/graphql-journey-two.svg) ![](/img/graphql-journey-two.svg)

View file

@ -58,7 +58,7 @@ client application.
Client requests are sent over HTTPS and the data is typically returned in the Client requests are sent over HTTPS and the data is typically returned in the
form of JSON: form of JSON:
![](/_img/graphql-architecture.png) ![](/img/graphql-architecture.png)
## Implementation overview ## Implementation overview
@ -136,15 +136,15 @@ each individual resource:
The REST scenario: The REST scenario:
![](/_img/REST_request-load.png) ![](/img/REST_request-load.png)
The GraphQL scenario: The GraphQL scenario:
![](/_img/graphQL_request_load.png) ![](/img/graphQL_request_load.png)
### Abstraction of multiple services ### Abstraction of multiple services
![](/_img/graphql_multiple_resources.png) ![](/img/graphql_multiple_resources.png)
### Stops overfetching ### Stops overfetching

View file

@ -9,7 +9,7 @@ tags: [electricity, circuits]
LED' stands for **Light Emitting Diode**, a [circuit]() component that emits LED' stands for **Light Emitting Diode**, a [circuit]() component that emits
light. The symbol for an LED is displayed below: light. The symbol for an LED is displayed below:
![](/_img/diode-led.png) ![](/img/diode-led.png)
A **diode** is a special kind of component that only permits current to flow A **diode** is a special kind of component that only permits current to flow
through it in one direction. To achieve this it has very low resistance in one through it in one direction. To achieve this it has very low resistance in one
@ -17,7 +17,7 @@ direction to allow current flow and high resistance in the other direction to
impede current flow. This feature of diodes is clearly represented in the impede current flow. This feature of diodes is clearly represented in the
generic diode circuit symbol: generic diode circuit symbol:
![](/_img/diode.png) ![](/img/diode.png)
An LED diode lights up when the right amount of current flows through it. A 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 standard LED has a maximum current of 20mA. An appropriate

View file

@ -47,7 +47,7 @@ The most succinct account of a latch:
_The representation of an SR Latch in a digital circuit diagram_: _The representation of an SR Latch in a digital circuit diagram_:
![](/_img/sr_latch_diagram.png) ![](/img/sr_latch_diagram.png)
## Creating a latch circuit ## Creating a latch circuit
@ -62,7 +62,7 @@ also an input of the other at a single stage in the sequence.
The circuit is created as follows: The circuit is created as follows:
![](/_img/sr_latch_logic_circuit.png) ![](/img/sr_latch_logic_circuit.png)
Interactive version: Interactive version:

View file

@ -45,7 +45,7 @@ The final phase is unmounting: when the component is removed from the DOM:
6. `componentWillUnmount()` 6. `componentWillUnmount()`
![React component lifecycle](../../../_img/react-lifecycle.png) ![React component lifecycle](../../../img/react-lifecycle.png)
## Side-effects: why lifecycle phases matter ## Side-effects: why lifecycle phases matter

View file

@ -96,7 +96,7 @@ tion) truth functional connective
### Symbol ### Symbol
![](/_img/and-gate-new-2.png) ![](/img/and-gate-new-2.png)
### Truth conditions ### Truth conditions
@ -114,7 +114,7 @@ tion) truth functional connective
### Symbol ### Symbol
![](/_img/nand-gate-new.png) ![](/img/nand-gate-new.png)
### Truth conditions ### Truth conditions
@ -143,7 +143,7 @@ NANDs alone.
### Symbol ### Symbol
![](/_img/or-gate-new.png) ![](/img/or-gate-new.png)
### Truth condition ### Truth condition
@ -172,7 +172,7 @@ t
### Symbol ### Symbol
![](/_img/xor-gate-new.png) ![](/img/xor-gate-new.png)
### Truth conditions ### Truth conditions
@ -193,7 +193,7 @@ t
### Symbol ### Symbol
![](/_img/nor-gate-new.png) ![](/img/nor-gate-new.png)
### Truth conditions ### Truth conditions

View file

@ -72,7 +72,7 @@ A
has very important consequences for reasoning because if a set of propositions has very important consequences for reasoning because if a set of propositions
is inconsistent, any other proposition is derivable from it. is inconsistent, any other proposition is derivable from it.
![](/_img/derivation_from_contradiction.png) ![](/img/derivation_from_contradiction.png)
_A demonstration of the the consequences of deriving a contradiction in a _A demonstration of the the consequences of deriving a contradiction in a
sequence of reasoning._ sequence of reasoning._

View file

@ -41,4 +41,4 @@ Note that the property of equivalence stated in terms of derivablity above is
identical to the derivation rule for the identical to the derivation rule for the
[material biconditional](/Logic/Proofs/Biconditional_Introduction.md): [material biconditional](/Logic/Proofs/Biconditional_Introduction.md):
![bi-intro.png](/_img/bi-intro.png) ![bi-intro.png](/img/bi-intro.png)

View file

@ -31,7 +31,7 @@ tags: [physics]
## Atomic particles ## Atomic particles
<img src="/home/thomas/repos/computer_science/_img/atom-diagram.svg" width="400" align="right" /> <img src="/home/thomas/repos/computer_science/img/atom-diagram.svg" width="400" align="right" />
- There are three particles comprising atoms: **protons**, **neutrons** and - There are three particles comprising atoms: **protons**, **neutrons** and
**electrons**. **electrons**.

View file

@ -87,7 +87,7 @@ the OS kernel is itself loaded into memory.
> sends to the CPU not just the first instruction in the requested file but also > sends to the CPU not just the first instruction in the requested file but also
> a number of instructions that immediately follow it. > a number of instructions that immediately follow it.
![](/_img/memory-flow.svg) ![](/img/memory-flow.svg)
Every part of the above process - the journey accross the bus, the lookup in the Every part of the above process - the journey accross the bus, the lookup in the
controller, the operations on the DRAM, the journey back accross the bus - takes controller, the operations on the DRAM, the journey back accross the bus - takes
@ -134,7 +134,7 @@ these from slow DRAM to fast SRAM.
The diagram below compares the different forms of memory within a computing The diagram below compares the different forms of memory within a computing
device in terms of speed, monetary cost and capacity: device in terms of speed, monetary cost and capacity:
![](/_img/Memory-Hierarchy.jpg) ![](/img/Memory-Hierarchy.jpg)
## Memory addresses ## Memory addresses

View file

@ -21,7 +21,7 @@ time that they are utilising. You can also order by memory usage.
_Here I have pressed `u` to show only the processes associated with my user:_ _Here I have pressed `u` to show only the processes associated with my user:_
![](/_img/htop.png) ![](/img/htop.png)
### Main commands ### Main commands
@ -130,7 +130,7 @@ using them. Without modifiers it outputs a huge amount of data. The best way to
use it is to execute it against a specific PID. For example the below output use it is to execute it against a specific PID. For example the below output
gives me some useful info about which files VS Code is using: gives me some useful info about which files VS Code is using:
![](/_img/lsof.png) ![](/img/lsof.png)
## System calls: `strace` ## System calls: `strace`

View file

@ -7,7 +7,7 @@ tags: [motherboard]
# Motherboard # Motherboard
<img src="../_img/motherboard-pi.jpg" width="400px"/> <img src="../img/motherboard-pi.jpg" width="400px"/>
The motherboard is the foundation of a computer. It allocates power and allows The motherboard is the foundation of a computer. It allocates power and allows
communication to and between the communication to and between the

View file

@ -19,7 +19,7 @@ input to a single output line.
We have two inputs (A,B) plus a third input SEL (for "select"). Applying a value We have two inputs (A,B) plus a third input SEL (for "select"). Applying a value
to SEL toggles the output between A and B. to SEL toggles the output between A and B.
![](/_img/MUX.png) ![](/img/MUX.png)
Multiplexers can be used to build larger circuits by connecting the output of Multiplexers can be used to build larger circuits by connecting the output of
one multiplexer to the input of another. They are often used to implement data one multiplexer to the input of another. They are often used to implement data
@ -38,7 +38,7 @@ As the name suggests, a demultiplexer reverses the functionality of a
multiplexer. It receives a single input and based on the selection of the SEL multiplexer. It receives a single input and based on the selection of the SEL
input it channels it to either an A or a B output. input it channels it to either an A or a B output.
![](/_img/DMUX.png) ![](/img/DMUX.png)
We can think of it as a distributor of a value into one of several possible We can think of it as a distributor of a value into one of several possible
channels. channels.

View file

@ -13,4 +13,4 @@ with a true proposition from which you derive a contradiction, you start with
the negation of a proposition, derive a contradiction and then assert the the negation of a proposition, derive a contradiction and then assert the
positive of the negated proposition you started out with. positive of the negated proposition you started out with.
![](/_img/negate-elim.png) ![](/img/negate-elim.png)

View file

@ -12,4 +12,4 @@ declared in a sub-proof. If you can derive a contradiction from this assumption
you are permitted to derive the negation of the auxiliary assumption in the main you are permitted to derive the negation of the auxiliary assumption in the main
proof. proof.
![](/_img/negate-intro.png) ![](/img/negate-intro.png)

View file

@ -52,7 +52,7 @@ A cluster is the highest level of organisation within an OpensSearch domain that
contains your indexed data. It processes all the search queries and handles contains your indexed data. It processes all the search queries and handles
tasks like indexing, searching, and managing documents. tasks like indexing, searching, and managing documents.
![](/_img/opensearch-architecture.drawio.svg) ![](/img/opensearch-architecture.drawio.svg)
A cluster comprises **nodes**. Nodes are individual servers that hold part of A cluster comprises **nodes**. Nodes are individual servers that hold part of
the cluster's data. Each node participates in the indexing and searching of the the cluster's data. Each node participates in the indexing and searching of the

View file

@ -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 See whether your dependency version is out of date use `npm outdated`. This
gives us a table, for example: gives us a table, for example:
![Pasted image 20220411082627.png](/_img/Pasted_image_20220411082627.png) ![Pasted image 20220411082627.png](/img/Pasted_image_20220411082627.png)
- _Latest_ tells us the latest release available from the developers - _Latest_ tells us the latest release available from the developers
- _Wanted_ tells us the version that our `package.json` rules target. To take - _Wanted_ tells us the version that our `package.json` rules target. To take

View file

@ -11,17 +11,17 @@ tags: [AWS, aws-lambda, node-js]
First we name the function and accept the defaults: First we name the function and accept the defaults:
![](/_img/lambda_func_one.png) ![](/img/lambda_func_one.png)
This presents us with the function dashboard - a graphical representation of the This presents us with the function dashboard - a graphical representation of the
Lambda showing [triggers]() as an input and destination as an output: Lambda showing [triggers]() as an input and destination as an output:
![](/_img/lambda-func-two.png) ![](/img/lambda-func-two.png)
Beneath this we have a code editor with the handler function with a basic Beneath this we have a code editor with the handler function with a basic
boilerplate: boilerplate:
![](/_img/lambda-func-three.png) ![](/img/lambda-func-three.png)
## Adding a trigger ## Adding a trigger
@ -31,15 +31,15 @@ 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](/DevOps/AWS/AWS_API_Gateway.md). We
select "Add trigger" from the dashboard view and input basic settings: select "Add trigger" from the dashboard view and input basic settings:
![](/_img/api-gateway-trigger.png) ![](/img/api-gateway-trigger.png)
Now we see this step displayed in the dashboard: Now we see this step displayed in the dashboard:
![](/_img/lambda-overview.png) ![](/img/lambda-overview.png)
With the endpoint and other settings displayed: With the endpoint and other settings displayed:
![](/_img/trigger-info.png) ![](/img/trigger-info.png)
If we go to the endpoint URL If we go to the endpoint URL
(`https://4kjqwbvd7g.execute-api.us-east-1.amazonaws.com/default/myFirstFunction`), (`https://4kjqwbvd7g.execute-api.us-east-1.amazonaws.com/default/myFirstFunction`),
@ -77,4 +77,4 @@ We get `Hello Thomas` as output.
For a more advanced API with multiple endpoints and parameters, it's easiest to For a more advanced API with multiple endpoints and parameters, it's easiest to
use Postman: use Postman:
![](/_img/postman-lambda.png) ![](/img/postman-lambda.png)

View file

@ -19,11 +19,11 @@ main approaches to this:
> $n$. We then repeat this process with the resulting factors working > $n$. We then repeat this process with the resulting factors working
> recursively until the numbers we are left with are primes. > recursively until the numbers we are left with are primes.
![Untitled Diagram-Page-1.drawio.png](../../_img/Untitled%20Diagram-Page-1.drawio.png) ![Untitled Diagram-Page-1.drawio.png](../../img/Untitled%20Diagram-Page-1.drawio.png)
_The prime factors of 27 are 2, 3, 3_ _The prime factors of 27 are 2, 3, 3_
it doesn't matter which products we choose as the interim factors, we should it doesn't matter which products we choose as the interim factors, we should
always reach the same outcome: always reach the same outcome:
![Untitled Diagram-Page-3.drawio 1.png](../../_img/Untitled%20Diagram-Page-3.drawio%201.png) ![Untitled Diagram-Page-3.drawio 1.png](../../img/Untitled%20Diagram-Page-3.drawio%201.png)
![Untitled Diagram-Page-2.drawio.png](../../_img/Untitled%20Diagram-Page-2.drawio.png) ![Untitled Diagram-Page-2.drawio.png](../../img/Untitled%20Diagram-Page-2.drawio.png)

View file

@ -9,7 +9,7 @@ tags:
_Visualization of the queue data structure_ _Visualization of the queue data structure_
![queue.svg](../_img/queue.svg) ![queue.svg](../img/queue.svg)
## A queue is a sequential data structure and most similar to a stack ## A queue is a sequential data structure and most similar to a stack

View file

@ -19,7 +19,7 @@ is evident from the following automatic commit message that is generated:
Merge branch B of github.com:thomasabishop/remote-repository into A Merge branch B of github.com:thomasabishop/remote-repository into A
``` ```
![](/_img/normal-merge-again.svg) ![](/img/normal-merge-again.svg)
In this scenario the merge commit has two or more parent commits each In this scenario the merge commit has two or more parent commits each
representing the history of the merged branches. The resulting history of A will representing the history of the merged branches. The resulting history of A will
@ -28,7 +28,7 @@ include the commits of B. Basically the two histories are combined.
This would give us a history that looks like the following, with different This would give us a history that looks like the following, with different
colours for the separate SHAs of each merged branch: colours for the separate SHAs of each merged branch:
![](/_img/combined-merge-hist.svg) ![](/img/combined-merge-hist.svg)
If we were to create a rebase branch of A from B, there would be a new singular If we were to create a rebase branch of A from B, there would be a new singular
history without distinguishing multiple parents that combines the commits of A history without distinguishing multiple parents that combines the commits of A
@ -41,12 +41,12 @@ of commits in a single branch.
When a rebase is applied, it will put the diverging B commits at the tip of A When a rebase is applied, it will put the diverging B commits at the tip of A
like so: like so:
![](/_img/rebase-tip-chage.svg) ![](/img/rebase-tip-chage.svg)
And then rebrand the previous A commits to be continuous with B presenting a And then rebrand the previous A commits to be continuous with B presenting a
flat and linear Git history like the following: flat and linear Git history like the following:
![](/_img/single-git-history-rebase.svg) ![](/img/single-git-history-rebase.svg)
## Benefits, use-cases ## Benefits, use-cases
@ -162,7 +162,7 @@ recent. This will open an interactive rebase window, listing the commits. You
can then use the keywords to decide what you want to do with them. In our case can then use the keywords to decide what you want to do with them. In our case
this will be `s` for squash. this will be `s` for squash.
![](/_img/git-interactive-rebase.png) ![](/img/git-interactive-rebase.png)
### Example ### Example

View file

@ -17,7 +17,7 @@ another example. Also fractals display recursive properties.
## Schema ## Schema
The general structure of a recursive function is as follows: The general structure of a recursive function is as follows:
![javascript-recursion.png](../_img/javascript-recursion.png) ![javascript-recursion.png](../img/javascript-recursion.png)
## Why use recursive functions? ## Why use recursive functions?
@ -131,4 +131,4 @@ if (num > 0) {
} }
``` ```
![javascript-factorial 1.png](../_img/javascript-factorial%201.png) ![javascript-factorial 1.png](../img/javascript-factorial%201.png)

View file

@ -93,7 +93,7 @@ A better method is to utilise [prime factorization](Prime%20factorization.md)
combined with the canceling technique. combined with the canceling technique.
First we find the prime factors of both the numerator and denominator: First we find the prime factors of both the numerator and denominator:
![drawio-Page-7.drawio.png](../../_img/drawio-Page-7.drawio.png) ![drawio-Page-7.drawio.png](../../img/drawio-Page-7.drawio.png)
This gives us: 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): - Apply [Prime factorization](Prime%20factorization.md):
![draw.io-Page-8.drawio.png](../../_img/draw.io-Page-8.drawio.png) ![draw.io-Page-8.drawio.png](../../img/draw.io-Page-8.drawio.png)
- Cancel the coefficients and variable parts - Cancel the coefficients and variable parts
@ -179,7 +179,7 @@ $$\frac{- 12xy^2}{ - 18xy^2}$$_
- Apply [Prime factorization](Prime%20factorization.md): - Apply [Prime factorization](Prime%20factorization.md):
![draw.io-Page-8.drawio 1.png](../../_img/draw.io-Page-8.drawio%201.png) ![draw.io-Page-8.drawio 1.png](../../img/draw.io-Page-8.drawio%201.png)
- Cancel the coefficients and variable parts - Cancel the coefficients and variable parts

View file

@ -11,4 +11,4 @@ within the main proof or a more deeply nested sub-proof. Reiteration allows us
to reuse any assumptions, or propositions derived from assumptions, without to reuse any assumptions, or propositions derived from assumptions, without
having to introduce a new dependency with another assumption. having to introduce a new dependency with another assumption.
![](/_img/reiteration.png) ![](/img/reiteration.png)

View file

@ -28,7 +28,7 @@ is the first instruction that the CPU fetches and this is what allows the kernel
to play its mediatory role. However most of the fetch, decode, execute cycles of to play its mediatory role. However most of the fetch, decode, execute cycles of
the CPU take place independently of the kernel. the CPU take place independently of the kernel.
![](/_img/kernel-cpu-interaction.svg) ![](/img/kernel-cpu-interaction.svg)
> Fetch decode and execute refer to processor pipeline stages. They occur > Fetch decode and execute refer to processor pipeline stages. They occur
> automatically as part of normal processor operation, the kernel doesnt > automatically as part of normal processor operation, the kernel doesnt

View file

@ -8,7 +8,7 @@ tags: [relational-databases]
Tables, fields and records are the basic building blocks of databases Tables, fields and records are the basic building blocks of databases
![](/_img/FL-Databases-1.5_terminology.gif) ![](/img/FL-Databases-1.5_terminology.gif)
## Table ## Table

View file

@ -35,12 +35,12 @@ simple algorithm at work to generate the complement for 4-bit number:
values, so $0$ becomes $1$ and $1$ becomes $0$. values, so $0$ becomes $1$ and $1$ becomes $0$.
2. Add one 2. Add one
![](/_img/unsigned-to-signed.png) ![](/img/unsigned-to-signed.png)
To translate a signed number to an unsigned number you flip them back and still To translate a signed number to an unsigned number you flip them back and still
add one: add one:
![](/_img/signed-to-unsigned.png) ![](/img/signed-to-unsigned.png)
### Formal expresssion: $2^n - x$ ### Formal expresssion: $2^n - x$

View file

@ -5,9 +5,9 @@ tags:
- data-structures - data-structures
--- ---
_A stack visualised vertically_ ![stack2.svg](../_img/stack2.svg) _A stack visualised vertically_ ![stack2.svg](../img/stack2.svg)
_A stack visualised horizontally_ ![stack1.svg](../_img/stack1.svg) _A stack visualised horizontally_ ![stack1.svg](../img/stack1.svg)
## A stack is a linear data structure that observes LIFO ## A stack is a linear data structure that observes LIFO

View file

@ -40,11 +40,11 @@ The diagram below shows the definition of a given state machine. On the left is
the JSON specification. On the right is a diagramatic representation that shows the JSON specification. On the right is a diagramatic representation that shows
the control flow and all possible steps that comprise a given pathway / state: the control flow and all possible steps that comprise a given pathway / state:
![](/_img/state-machine-definition.png) ![](/img/state-machine-definition.png)
For each execution of the state machine (each time it is triggered) you can For each execution of the state machine (each time it is triggered) you can
review the runtime. The flow diagram will highlight green to show the given review the runtime. The flow diagram will highlight green to show the given
pathway, and you can also see the inputs and outputs for each step and any pathway, and you can also see the inputs and outputs for each step and any
errors: errors:
![](/_img/state-machine-execution.png) ![](/img/state-machine-execution.png)

View file

@ -58,7 +58,7 @@ in the first conjunct. We can get this simply but applying
So far we have: So far we have:
![](/_img/step1.png) ![](/img/step1.png)
Now we just need to get $D$ from the proposition at line 3. This is easy since 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. we already have access to the consequent of the biconditional at line 1.
@ -66,7 +66,7 @@ Therefore we can apply
[Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md)) at line [Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md)) at line
3 to get $D$. We are now halfway there: 3 to get $D$. We are now halfway there:
![](/_img/step2.png) ![](/img/step2.png)
Next we need to turn our attention to deriving $L \lor A$. How can we obtain $L$ 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. ? Well it is contained within the first conjunct of the assumption on line 2.
@ -77,7 +77,7 @@ $\lnot N$ as an assumption on the first line, so we can use
[Conditional Elimination](/Logic/Proofs/Conditional_Elimination.md) to derive [Conditional Elimination](/Logic/Proofs/Conditional_Elimination.md) to derive
$L$. These two steps give us: $L$. These two steps give us:
![](/_img/step3.png) ![](/img/step3.png)
Now we need to get from $L$ to $L \lor A$. This is really straightforward Now we need to get from $L$ to $L \lor A$. This is really straightforward
because by using because by using
@ -87,7 +87,7 @@ 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](/Logic/Proofs/Conjunction_Introduction.md) as we
had planned at the outset. had planned at the outset.
![](/_img/step4.png) ![](/img/step4.png)
### A further example ### A further example
@ -109,7 +109,7 @@ approach is therefore to seek to derive the antecedent ($\lnot L$) and then use
[Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md) to [Biconditional Elimination](/Logic/Proofs/Biconditional_Elimination.md) to
extract the target sentence which is the consequent. extract the target sentence which is the consequent.
![proof.png](/_img/proof.png) ![proof.png](/img/proof.png)
## Proving theorems ## Proving theorems
@ -127,13 +127,13 @@ Our strategy here is to identify the main connective in the proposition we want
to derive (the material conditional). We then assume the antecedent and attempt to derive (the material conditional). We then assume the antecedent and attempt
to derive the consequent from it. to derive the consequent from it.
![](/_img/theoremproof.png) ![](/img/theoremproof.png)
## A complex theorem proof ## A complex theorem proof
_Prove_ $\vdash (\lnot A \lor \lnot B) \leftrightarrow \lnot(A \land B)$ _Prove_ $\vdash (\lnot A \lor \lnot B) \leftrightarrow \lnot(A \land B)$
![](/_img/dsfdsfsdfwe.png) ![](/img/dsfdsfsdfwe.png)
### Walkthrough ### Walkthrough

View file

@ -11,7 +11,7 @@ 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 have detailed above. It is programmed in machine code but for simplicity it uses
the denary rather than the binary number system. the denary rather than the binary number system.
![LMC_5.gif](/_img/LMC_5.gif) ![LMC_5.gif](/img/LMC_5.gif)
On the left is the instruction set. Each number constitutes and execution 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 routine and the `xx` stand for the address in RAM that the execution will work

View file

@ -13,7 +13,7 @@ empty.
_Demonstration_ _Demonstration_
![](/_img/proofs-drawio-Page-5.drawio_2.png) ![](/img/proofs-drawio-Page-5.drawio_2.png)
We see in this example that there is no starting set and thus no primary We see in this example that there is no starting set and thus no primary
assumptions. Instead we start with nothing other than the proposition we wish to assumptions. Instead we start with nothing other than the proposition we wish to

View file

@ -58,7 +58,7 @@ since the only state change we need is a single bit toggle three times that
retains its value. retains its value.
Using these pulse patterns we can construct a circuit as follows: Using these pulse patterns we can construct a circuit as follows:
![](/_img/3-bit-adder-diagram.png) ![](/img/3-bit-adder-diagram.png)
<iframe src="https://circuitverse.org/simulator/embed/3-bit-counter-d33846e3-7538-427d-b4cc-dc64fdaf0af3?theme=default&display_title=false&clock_time=true&fullscreen=true&zoom_in_out=true" style="border-width:; border-style: solid; border-color:;" name="myiframe" id="projectPreview" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" height="500" width="600" allowFullScreen></iframe> <iframe src="https://circuitverse.org/simulator/embed/3-bit-counter-d33846e3-7538-427d-b4cc-dc64fdaf0af3?theme=default&display_title=false&clock_time=true&fullscreen=true&zoom_in_out=true" style="border-width:; border-style: solid; border-color:;" name="myiframe" id="projectPreview" scrolling="no" frameborder="1" marginheight="0px" marginwidth="0px" height="500" width="600" allowFullScreen></iframe>

View file

@ -25,13 +25,13 @@ it acts like an open circuit and no current can flow.
We can combine switches in a circuit to create analogs to logic gates. We can combine switches in a circuit to create analogs to logic gates.
![](/_img/switch-and-gate.png) ![](/img/switch-and-gate.png)
In the example above a simple AND gate is implemented with switches. Each switch In the example above a simple AND gate is implemented with switches. Each switch
is a conjunct and the current only flows if both switches are on, closing the is a conjunct and the current only flows if both switches are on, closing the
circuit. circuit.
![](/_img/switch-or-gate.png) ![](/img/switch-or-gate.png)
In the example above is a circuit implementing an OR gate. The current flows In the example above is a circuit implementing an OR gate. The current flows
just if one of the switches are on or if both of the switches are on but not if just if one of the switches are on or if both of the switches are on but not if
@ -53,7 +53,7 @@ set parameters.
There are different types of transistors but the simplest for the purposes of There are different types of transistors but the simplest for the purposes of
explanation are **bipolar junction transistors**. explanation are **bipolar junction transistors**.
![](/_img/transistor-diag.svg) ![](/img/transistor-diag.svg)
A transistor works as follows: applying a small amount of current at the base A transistor works as follows: applying a small amount of current at the base
allows a larger current to flow from the collector to the emitter. Relating this allows a larger current to flow from the collector to the emitter. Relating this
@ -63,9 +63,9 @@ Removing this current is like turning the switch off.
The diagrams below show a transistor being used in a circuit to create 'on' and The diagrams below show a transistor being used in a circuit to create 'on' and
'off' switch states alongside a switch based circuit. 'off' switch states alongside a switch based circuit.
![](/_img/transistor-off.png) ![](/img/transistor-off.png)
![](/_img/transistor-on.png) ![](/img/transistor-on.png)
- $V^{in}$ is the voltage that electrically controls the switch-as-transistor - $V^{in}$ is the voltage that electrically controls the switch-as-transistor
- $V^{out}$ is the voltage we want to control: it will be high when the - $V^{out}$ is the voltage we want to control: it will be high when the
@ -100,11 +100,11 @@ collector of one to the emitter of the other. If either voltage input is low
then the voltage of the combined line is low (equivalent to the circuit being then the voltage of the combined line is low (equivalent to the circuit being
broken) and there is no current flowing. broken) and there is no current flowing.
![](/_img/and-transistor.png) ![](/img/and-transistor.png)
Below, an Below, an
[OR](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#or-gate) has been [OR](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#or-gate) has been
constructed with transistors. If a voltage is applied to the base of either constructed with transistors. If a voltage is applied to the base of either
transistor, the current reaches the V-out terminal. transistor, the current reaches the V-out terminal.
![](/_img/or-transistor.svg) ![](/img/or-transistor.svg)

View file

@ -116,7 +116,7 @@ inconsistency in terms of truth trees:
The following is a truth tree for the set ${P \lor Q, \sim P }$: The following is a truth tree for the set ${P \lor Q, \sim P }$:
![basic-open-tree 1.svg](../_img/basic-open-tree%201.svg) ![basic-open-tree 1.svg](../img/basic-open-tree%201.svg)
### Interpretation ### Interpretation
@ -161,7 +161,7 @@ not the right hand side.
The following is a truth tree for the set The following is a truth tree for the set
${A & \sim B, C, \sim A \lor \sim B }$. ${A & \sim B, C, \sim A \lor \sim B }$.
![basic-closed-tree 1.svg](../_img/basic-closed-tree%201.svg) ![basic-closed-tree 1.svg](../img/basic-closed-tree%201.svg)
### Interpretation ### Interpretation
@ -201,19 +201,19 @@ of each of the main connectives and these rules rely on logical equivalences
### Negated negation decomposition: `~~D` ### Negated negation decomposition: `~~D`
![negated-negation-decomposition-rule 2.svg](../_img/negated-negation-decomposition-rule%202.svg) ![negated-negation-decomposition-rule 2.svg](../img/negated-negation-decomposition-rule%202.svg)
Truth passes only if $P$ is true Truth passes only if $P$ is true
### Conjunction decomposition: `&D` ### Conjunction decomposition: `&D`
![conjunction-decomposition-rule.svg](../_img/conjunction-decomposition-rule.svg) ![conjunction-decomposition-rule.svg](../img/conjunction-decomposition-rule.svg)
Truth passes only $P$ and $Q$ are both true. Truth passes only $P$ and $Q$ are both true.
### Negated Conjunction decomposition: `~&D` ### Negated Conjunction decomposition: `~&D`
![negated-conjunction-decomposition-rule.svg](../_img/negated-conjunction-decomposition-rule.svg) ![negated-conjunction-decomposition-rule.svg](../img/negated-conjunction-decomposition-rule.svg)
Truth passes if either $\sim P$ or $\sim Q$ is true. This rule is a consequence 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 of the equivalence between $\sim (P & Q)$ and $\sim P \lor \sim Q$ , the first
@ -221,13 +221,13 @@ of DeMorgans Laws.
### Disjunction decomposition: `vD` ### Disjunction decomposition: `vD`
![disjunction-decomposition-rule.svg](../_img/disjunction-decomposition-rule.svg) ![disjunction-decomposition-rule.svg](../img/disjunction-decomposition-rule.svg)
Truth passes if either $P$or $Q$ are true. Truth passes if either $P$or $Q$ are true.
### Negated Disjunction decomposition: `~vD` ### Negated Disjunction decomposition: `~vD`
![negated-disjunction-decomposition-rule.svg](../_img/negated-disjunction-decomposition-rule.svg) ![negated-disjunction-decomposition-rule.svg](../img/negated-disjunction-decomposition-rule.svg)
Truth passes if both $P$ and $Q$ are false. This rule is a consequence of the 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 equivalence between $\sim (P \lor Q)$ and $\sim P & \sim Q$, the second of
@ -235,7 +235,7 @@ DeMorgans Laws.
### Conditional decomposition: `⊃D` ### Conditional decomposition: `⊃D`
![conditional-decomposition-rule.svg](../_img/conditional-decomposition-rule.svg) ![conditional-decomposition-rule.svg](../img/conditional-decomposition-rule.svg)
Truth passes if either $\sim P$ or $Q$ are true. This rule is a consequence of 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 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 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$. equivalence between $\sim (P \supset Q)$ and $P & \sim Q$.
![negated-conditional-decomposition-rule.svg](../_img/negated-conditional-decomposition-rule.svg) ![negated-conditional-decomposition-rule.svg](../img/negated-conditional-decomposition-rule.svg)
### Biconditional decomposition: `≡D` ### Biconditional decomposition: `≡D`
![biconditional-decomposition-rule.drawio(1).svg](../_img/biconditional-decomposition-rule.drawio%281%29.svg) ![biconditional-decomposition-rule.drawio(1).svg](../img/biconditional-decomposition-rule.drawio%281%29.svg)
Truth passes if either $P$ and $Q$ are true or $\sim P & \sim Q$ are true. This 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 is an interesting rule because it combines the disjunction and conjunction tree
@ -258,7 +258,7 @@ shapes.
### Negated biconditional decomposition: `~≡D` ### Negated biconditional decomposition: `~≡D`
![negated-biconditional-decomposition-rule.drawio.svg](../_img/negated-biconditional-decomposition-rule.drawio.svg) ![negated-biconditional-decomposition-rule.drawio.svg](../img/negated-biconditional-decomposition-rule.drawio.svg)
Truth passes if either $P$ and $\sim Q$ is true or if $\sim P$ and $Q$ is true. 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: Here are some examples of these rules applied:
![complex-tree.svg](../_img/complex-tree.svg) ![complex-tree.svg](../img/complex-tree.svg)
Observe that here we dont bother to decompose the sentence on line 1. This is Observe that here we dont 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 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 thing as an inconsistent set. Thus it will be represented in a truth tree as
inconsistency which is disclosed via a closed tree. inconsistency which is disclosed via a closed tree.
![logical-falsity-tree.svg](../_img/logical-falsity-tree.svg) ![logical-falsity-tree.svg](../img/logical-falsity-tree.svg)
### Logical truth ### Logical truth
@ -367,7 +367,7 @@ equivalent.
> Sentences $P$ and $Q$ are truth-functionally equivalent if and only if the set > Sentences $P$ and $Q$ are truth-functionally equivalent if and only if the set
> $\sim (P \equiv Q)$ has a closed tree > $\sim (P \equiv Q)$ has a closed tree
![logical-equivalence-tree.svg](../_img/logical-equivalence-tree.svg) ![logical-equivalence-tree.svg](../img/logical-equivalence-tree.svg)
### Logical entailment and validity ### Logical entailment and validity

View file

@ -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 the symbols written in the cells. The head is also capable of erasing symbols
and writing new symbols into the cells. and writing new symbols into the cells.
![Turing_machines_01.gif](../_img/Turing_machines_01.gif) The direction that the ![Turing_machines_01.gif](../img/Turing_machines_01.gif) The direction that the
head moves, which values it erases, and which values it writes in, are dependent head moves, which values it erases, and which values it writes in, are dependent
on a set of instructions provided to the machine.0 on a set of instructions provided to the machine.0

View file

@ -20,7 +20,7 @@ accessing the real memory blocks. This reduces complexity because often memory
will be allocated in places that are non-contiguous with similar running will be allocated in places that are non-contiguous with similar running
processes or be located in the cache or swap memory on the disk. processes or be located in the cache or swap memory on the disk.
![](/_img/virtual-memory-diagram.jpg) ![](/img/virtual-memory-diagram.jpg)
It would require considerable processing work for the kernel to be tracing these It would require considerable processing work for the kernel to be tracing these
disparate memory sources at every instance. By working on an idealised disparate memory sources at every instance. By working on an idealised

View file

@ -91,7 +91,7 @@ Kirchoff's Voltage Law:
The application of the Law is illustrated in the following diagram: The application of the Law is illustrated in the following diagram:
![](/_img/voltage-drop.png) ![](/img/voltage-drop.png)
The explanation for the voltage drop at the positions $V^{A}$ and $V^{D}$ are The explanation for the voltage drop at the positions $V^{A}$ and $V^{D}$ are
obvious enough: they are at the beginning and end of the loop so are equal to obvious enough: they are at the beginning and end of the loop so are equal to

View file

@ -22,7 +22,7 @@ can write to and read from.
The following diagram represents the basic anatomy of a disk device. The following diagram represents the basic anatomy of a disk device.
![](/_img/harddisk.png) ![](/img/harddisk.png)
- A disk is divided up into [partitions](/Operating_Systems/Disks/Partitions.md) - A disk is divided up into [partitions](/Operating_Systems/Disks/Partitions.md)
which are subsections of the overall disk. The kernel presents each partition which are subsections of the overall disk. The kernel presents each partition

View file

@ -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 an electrical circuit. A single circuit representing the binary values of 1 and
0: 0:
![multi_on_off 1.gif](../../_img/multi_on_off.gif) ![multi_on_off 1.gif](../../img/multi_on_off.gif)
It would be much more complicated to have to represent ten different states It would be much more complicated to have to represent ten different states
under the decimal number system, although denary computers do exist. 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 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. and so small that billions can be fitted on a single circuit board.
![multiple_circuits.gif](../../_img/multiple_circuits.gif) ![multiple_circuits.gif](../../img/multiple_circuits.gif)
When we use the term 'switch' we actually mean the transistor components of a 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 circuit. We don't need to know the physical details at this level but we can say

View file

@ -12,7 +12,7 @@ track of all [kernel](/Operating_Systems/The_Kernel.md) processes. It is
invaluable when tracing the source of problems and errors that may arise on the invaluable when tracing the source of problems and errors that may arise on the
system level. It keeps a track of all kernal processes. system level. It keeps a track of all kernal processes.
![](/_img/journald.png) ![](/img/journald.png)
## `journalctl` ## `journalctl`

View file

@ -77,13 +77,13 @@ at `/usr/lib/systemd/system`. You shouldn't change or manipulate these files or
attempt to add new config files here since they will be overwritten by the attempt to add new config files here since they will be overwritten by the
system. system.
![](/_img/systemd-global-files.png) _`systemd` global unit files_ ![](/img/systemd-global-files.png) _`systemd` global unit files_
Local definitions that relate to the specific user and where the user herself Local definitions that relate to the specific user and where the user herself
can define units are located in the _system configuration_ directory: can define units are located in the _system configuration_ directory:
`/etc/systemd/system`. `/etc/systemd/system`.
![](/_img/systemd-local-files.png) ![](/img/systemd-local-files.png)
_`systemd` local unit files, specific to the currently logged-in user_ _`systemd` local unit files, specific to the currently logged-in user_