summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Albers <thomas@thomaslabs.org>2023-03-08 23:43:00 +0100
committerThomas Albers <thomas@thomaslabs.org>2023-03-08 23:43:00 +0100
commit61b5ce20f25c5785e41574998a12c6d06eb05a5e (patch)
tree20e2225b4f30b15d8dee30351041d1f33d42b34a /src
parent561bac75579391c14e47eaccfabdf9eda98855da (diff)
Restructure build system and directory structuresHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/abgabe.org101
-rw-r--r--src/arm/adventures.org58
-rw-r--r--src/math/cylindrical_coordinates.org36
-rw-r--r--src/math/derivatives.org26
-rw-r--r--src/math/diff.org100
-rw-r--r--src/math/fft.org141
-rw-r--r--src/math/index.org19
-rw-r--r--src/math/integrals.org35
-rw-r--r--src/math/lagrange.org23
-rw-r--r--src/math/laplace.org39
-rw-r--r--src/math/levi_cevita.org25
-rw-r--r--src/math/matrices.org33
-rw-r--r--src/math/orbit.org89
-rw-r--r--src/math/polar_coordinates.org34
-rw-r--r--src/math/spherical-harmonics.org119
-rw-r--r--src/math/spherical_coordinates.org38
-rw-r--r--src/math/trigonometry.org55
-rw-r--r--src/math/variation.org19
-rw-r--r--src/math/vectors.org56
-rw-r--r--src/physics/lorentz-transformation.org62
-rw-r--r--src/style.css123
-rw-r--r--src/svg/fft.tex44
-rw-r--r--src/z80/prototype1.org2
-rw-r--r--src/z80/prototype2.org4
24 files changed, 1054 insertions, 227 deletions
diff --git a/src/abgabe.org b/src/abgabe.org
deleted file mode 100644
index 772d04d..0000000
--- a/src/abgabe.org
+++ /dev/null
@@ -1,101 +0,0 @@
-#+TITLE: Übungsblatt 5 - Aufgabe 3
-#+HTML_HEAD_EXTRA: <meta name="robots" content="noindex">
-#+SETUPFILE: ../options.org
-
-[[https://thomaslabs.org/shortcoil.m][Quellcode herunterladen]]
-
-* Ergebnisse des Programms
-[[https://thomaslabs.org/media/betrag.png]]
-
-[[https://thomaslabs.org/media/richtung.png]]
-
-[[https://thomaslabs.org/media/spulenachse.png]]
-* Octave / Matlab Quellcode
-#+BEGIN_SRC octave
- clear all;
- close all;
- clc;
-
- %% length of the observed region in m
- len = 40e-3; %m
- len = len / 2; %we shall go from -len to +len
- %% number of points in x- and z-direction
- N_space = 50;
- %% number of points for integration along coil
- N_phi = 250;
- %% radius
- R = 5e-3; %m
- %% length
- L = 23e-3; %m
- %% number of windings
- N = 5;
- %% current
- I = 8; %A
- %% vacuumpermeability
- mu0 = 4 * pi * 1e-7; %Vs/Am
-
- %% define grid
- z = linspace(-len, len, N_space); %m
- x = linspace(-len, len, N_space); %m
-
- %% parameter of coil-wire-path-paramtrisation
- phi = linspace(0, N * 2 * pi, N_phi);
- dphi = phi(2) - phi(1);
-
- %% Precalculate cos and sin
- p_sin = sin(phi);
- p_cos = cos(phi);
-
- %% loop through all x-z-points
- for iz = 1 : N_space
- for ix = 1 : N_space
- %% r of this x-z-point
- r = [x(ix); 0; z(iz)];
- B = [0; 0; 0];
-
- %% Riemann sum along the coil
- for ip = 1 : N_phi
- %% Point along the coil
- l = [R * p_cos(ip); R * p_sin(ip); ip * L / N_phi - L / 2];
- %% Vector tangent to the coil of length dl = R * dphi
- dl = [- R * p_sin(ip); R * p_cos(ip); L / 2 / N / pi];
- dl = (R * dphi / norm(dl)) * dl;
- %% Vector from the coil to the x-z-point
- rp = r - l;
- %% Add dB
- B = B + (mu0 / 4 / pi) * I * (1 / norm(rp) ^ 3) * cross(dl, rp);
- end
-
- B_X(iz, ix) = B(1);
- B_Y(iz, ix) = B(2);
- B_Z(iz, ix) = B(3);
- end
- end
-
- figure('Name', 'Richtung der Flußdichte', 'NumberTitle', 'off');
- quiver(x * 1e3, z * 1e3, B_X ./ sqrt(B_X .^ 2 + B_Z .^ 2),
- B_Z ./ sqrt(B_X .^ 2 + B_Z .^ 2));
- title('Richtung der Flußdichte')
- xlabel('x [mm]')
- ylabel('z [mm]')
- axis image
- saveas(gca, 'richtung.png')
-
- betrag = sqrt(B_X .^ 2 + B_Y .^ 2 + B_Z .^ 2)
- figure('Name', 'Betrag der Flußdichte', 'NumberTitle', 'off');
- imagesc(x * 1e3, z * 1e3, betrag);
- title('Betrag der Flußdichte');
- xlabel('x [mm]')
- ylabel('z [mm]')
- colormap(gray);
- colorbar('title', 'B [T]');
- saveas(gca, 'betrag.png')
-
- figure('Name', 'Flußdichte entlang Spulenachse', 'NumberTitle', 'off');
- B_2 = B_Z(:, round((N_space - 1) / 2));
- plot(x * 1e3, B_2);
- title('Flußdichte entlang Spulenachse');
- xlabel('z [mm]');
- ylabel('Flußdichte [T]');
- saveas(gca, 'spulenachse.png')
-#+END_SRC
diff --git a/src/arm/adventures.org b/src/arm/adventures.org
new file mode 100644
index 0000000..8712435
--- /dev/null
+++ b/src/arm/adventures.org
@@ -0,0 +1,58 @@
+#+title: New adventures in ARM
+#+author: Thomas Albers Raviola
+#+date: 2022-10-10
+
+* Backgroud
+If you have read my poorly written articles about my Z80 computers, it is
+probably no surprise that I ended up playing with ARM processors.
+
+Way back I bought a Beaglebone Black based on the Sitara AM335x series of armhf
+processors. I never really gave it much use as I got more interested in Z80 and
+the idea of myself building and soldering my own computer.
+
+This changed some weeks ago, when while enjoying the free time between semesters
+at university I decided to buy a Pinenote from Pine64. I had seen before the
+E-Ink tablet of one of my tutors and wanted to replace taking notes on paper for
+some kind of digital form. Initially I used my X200T laptop for this end but the
+battery life does leave some performance to wish for.
+
+The alternatives I found in the market shared all the same disadvantages. For
+example, the reMarkable tablet of my Tutor seems to work in some kind of
+restricted ecosystem with cloud syncing bullshit I don't care about.
+
+If I am not able to run the software I want, I don't care about the product.
+
+The Pinenote on the other hand, while still in development and with basically no
+finished software ready, is designed to leave complete freedom to the user.
+
+My plan was to experiment with my Beaglebone, learning to compile a kernel and a
+GNU/Linux distro for ARM and then apply this knowledge to port some system to
+the Pinenote.
+
+This however was not at all necessary, as there are already people who have
+reverse engineered the DRM driver for the display and documented how to comile a
+custom kernel to run on the ARM processor of the Pinenote. This process ended up
+being actually really easy.
+
+I won't claim to be able to explain it better. Nonetheless I have documented (or
+will) the process as part of this series of articles about my experiments with
+low-level ARM hacking.
+
+This topic evolved rapidly into an extremly deep rabbit hole. As I still plan to
+learn how the boot process for ARM devices work by writing a bare-bones blink
+LED code, the Hello World! of low-level programming, for my Beaglebone. I plan
+this to be the continuation of me learning low-level stuff as with my Z80.
+
+I also discovered that the ebook reader I had and that now is left redundant by
+my Pinenote also has an ARM processor (I know, not a big surprise). But instead
+of writing the system to a eMMC, tolino packed a SD card with the system,
+rendering the process of testing other code a trivial one.
+
+Given my despise for Android and how satisfied I am with my Pinenote, I actually
+decided to buy the Pinephone Pro and the Pinebook Pro. When the time comes, I
+would like to also write articles on how I port my favourite GNU/Linux distro,
+GNU/Guix, to these platforms. Hopefully I won't need to use a damn Android
+device ever again and will actually be able to use my devices the way I want.
+
+Ranting aside, I now invite you to check the writings about the findings in my
+new adventures in the ARM world.
diff --git a/src/math/cylindrical_coordinates.org b/src/math/cylindrical_coordinates.org
new file mode 100644
index 0000000..bfb6d57
--- /dev/null
+++ b/src/math/cylindrical_coordinates.org
@@ -0,0 +1,36 @@
+#+title:Cylindrical Coordinates
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Coordinate transformations
+\begin{align*}
+x &= r \cos\varphi\\
+y &= r \sin\varphi\\
+z &= z
+\end{align*}
+
+* Local unit vectors
+\begin{align*}
+\unitv{r} &= \cos\theta \unitv{x} + \sin\theta \unitv{y}\\
+\unitv{\theta} &= -\sin\theta \unitv{x} + \cos\theta \unitv{y}\\
+\unitv{z} &= \unitv{z}
+\end{align*}
+
+* Kinematic in cylindrical coordinates
+** Time derivatives of the local unit vectors
+\begin{align*}
+\deriv{\unitv{r}}{t} &= \dot{\theta}\unitv{\theta}\\
+\deriv{\unitv{\theta}}{t} &= -\dot{\theta}\unitv{r}\\
+\deriv{\unitv{z}}{t} &= 0
+\end{align*}
+
+** Position vector and its time derivatives
+\begin{align*}
+\bm{r} &= r\unitv{r} + z\unitv{z}\\
+\bm{v} &= \dot{r}\unitv{r} + r\dot\theta\unitv{\theta} + \dot{z}\unitv{z}\\
+\bm{a} &= \left(\ddot{r}-r\dot{\theta}^2\right)\unitv{r} + \left(2\dot{r}\dot{\theta}+r\ddot{\theta}\right)\unitv{\theta} + \ddot{z}\unitv{z}
+\end{align*}
diff --git a/src/math/derivatives.org b/src/math/derivatives.org
new file mode 100644
index 0000000..b9d431d
--- /dev/null
+++ b/src/math/derivatives.org
@@ -0,0 +1,26 @@
+#+title:Table of Derivatives
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* General Properties of the Derivative
+Let $f$ and $g$ be real valued functions and $c$ some real constant:
+\begin{align*}
+\dcoff{(cf)} &= c\sdcoff{f}\\
+\dcoff{(f \pm g)} &= \sdcoff{f} \pm \sdcoff{g}\\
+\dcoff{(fg)} &= \sdcoff{f}g + f\sdcoff{g}\\
+\dcoff{\left(\frac{f}{g}\right)} &= \frac{\sdcoff{f}g - f\sdcoff{g}}{g^2}
+\end{align*}
+
+* Trigonometric Funtions
+\begin{align*}
+\ddx{\sin(x)} &= \cos(x)\\
+\ddx{\cos(x)} &= -\sin(x)\\
+\ddx{\tan(x)} &= \sec^2(x)\\
+\ddx{\sec(x)} &= \sec(x)\tan(x)\\
+\ddx{\csc(x)} &= \csc(x)\cot(x)\\
+\ddx{\csc(x)} &= -\csc^2(x)
+\end{align*}
diff --git a/src/math/diff.org b/src/math/diff.org
new file mode 100644
index 0000000..bbb8fa6
--- /dev/null
+++ b/src/math/diff.org
@@ -0,0 +1,100 @@
+#+title: Method for solving first order and Bernoulli's differential equations
+#+author: Thomas Albers Raviola
+#+date: 2022-10-01
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* History
+I came across the method concerning this article in an old math book from Doctor
+Granville (Elements of differential and integral calculus - ISBN-13:
+978-968-18-1178-5). It doesn't appear to be a popular technique as when using it
+for my assignments I always had to explain what I was doing. As of yet, I still
+haven't found another text referencing it, which is why I decided to include it
+in my website.
+
+In the original book this procedure is shown but never really explained, it is
+left as a sort of "it just works" thing. Here is my attempt to it clear.
+
+* Theory
+Throughout this article we'll consider first order differential equations with
+function coefficients just as a special case of the Bernoulli's differential
+equation with $n = 0$.
+
+Consider now the following ODE:
+\begin{equation*}
+y' + P(x)y = Q(x)y^n
+\end{equation*}
+
+let $y$ be the product of two arbitrary functions $w$ and $z$ such that
+
+\begin{align*}
+y &= wz \\
+y' &= w'z + wz'
+\end{align*}
+
+we now restrict $z$ to be the solution of the ODE
+
+\begin{equation*}
+z' + P(x)z = 0
+\end{equation*}
+
+with this it is possible to solve for $z$ by integrating
+
+\begin{equation*}
+\frac{z'}{z} = - P(x) \\
+\end{equation*}
+
+using $z$ we solve for $w$ by replacing $y$ inside the original ODE
+
+\begin{align*}
+w'z + wz' + P(x)wz &= Q(x)w^nz^n \\
+w'z + w\left(z' + P(x)z\right) &= Q(x)w^nz^n \\
+w'z &= Q(x)w^nz^n \\
+\frac{w'}{w^n} &= Q(x)z^{n-1} \\
+\end{align*}
+
+the general solution to our original ODE can be simply obtained by multiplying
+$w$ and $z$.
+
+* Comments
+This method, while functional, may not always be the most practical. In some
+cases the differential equations for $w$ and $z$ may not have closed algebraic
+solutions. A more traditional substitution may in some situations also be easier
+than this method. Like always it is up to one to know which tool to apply for a
+given problem.
+
+* Example
+Let's solve an example to show the method in practice
+
+\begin{align*}
+y' - 3x^2y &= -x^2y^3 \\
+w'z + wz' - 3x^2wz &= -x^2w^3z^3 \\
+w'z + w\left(z' - 3x^2z\right) &= -x^2w^3z^3
+\end{align*}
+
+solve now for $z$
+
+\begin{align*}
+z' - 3x^2z &= 0 \\
+\frac{z'}{z} &= 3x^2 \\
+z &= c e^{x^3}
+\end{align*}
+
+replace $z$ in the equation
+
+\begin{align*}
+w' &= -x^2w^3z^2 \\
+- \frac{w'}{w^3} &= c^2 e^(2x^3)x^2 \\
+\frac{1}{2 w^2} &= c^2\left(\frac{e^{2x^3}}{6} + k\right) \\
+w &= \pm \frac{1}{c} \sqrt{\frac{3}{e^{2x^3} + k}}
+\end{align*}
+
+finally with $w$ and $z$ get $y$
+
+\begin{equation*}
+y = \pm e^{x^3} \sqrt{\frac{3}{e^{2x^3} + k}}
+\end{equation*}
diff --git a/src/math/fft.org b/src/math/fft.org
new file mode 100644
index 0000000..45e9595
--- /dev/null
+++ b/src/math/fft.org
@@ -0,0 +1,141 @@
+#+title: Fast Fourier Transform
+#+subtitle: Implementation in Common Lisp
+#+author: Thomas Albers Raviola
+#+date: <2023-03-06>
+#+setupfile: ../../math_options.org
+
+In this article I attept to explain the principles of the fast fourier transform
+(FFT) and develop in incremental steps an implementation in common lisp.
+
+*NOTE*: This is part of my personal notes and as such may contain mistakes or
+not be correct at all. If you find any issues please contact me at my email
+address.
+
+* Introduction
+
+The FFT is an algorithm for computing the discrete fourier transform (DFT) of an
+array of values that is meant to be faster than the usual naive implementation.
+Instead of having the usual \[ O(n^2) \] behaviour it is an \[ O(n\log(n)) \]
+algorithm.
+
+* Derivation
+
+To derive the FFT we first consider the definition of the DFT
+
+Let \[ \xi_k \] be an array of N, possible complex, numbers. The DFT of \[ \xi_k
+\] is an array of the same length \[ x_k \] defined as:
+
+{{{beg-eqn}}}
+x_k = \sum_{n=0}^{N-1} \xi_n e^{- \frac{2 \pi i}{N} n k}
+{{{end-eqn}}}
+
+A possible implementation of this in code would be something like the following:
+
+#+begin_src common-lisp
+ (defun dft (x)
+ "Naive discrete fourier transform, not fft"
+ (flet ((transform (k)
+ (loop :with i = (complex 0 1)
+ :for n :below (length x)
+ :sum (* (aref x n) (exp (- (/ (* 2 pi i k n) (length x))))))))
+ (map-seq-iota #'transform (length x))))
+#+end_src
+
+But we can do a lot better in terms of performance. To this end we first split
+the sum {{{ref}}} into even and odd members
+
+{{{beg-align}}}
+x_k &= \sum_{n=0}^{N/2-1} \xi_{2n} e^{- \frac{2 \pi i}{N} (2n) k} +
+\sum_{n=0}^{N/2-1} \xi_{2n+1} e^{- \frac{2 \pi i}{N} (2n+1) k}\\
+&= \sum_{n=0}^{N/2-1} \xi_{2n} e^{- \frac{2 \pi i}{N/2} n k} +
+e^{-\frac{2 \pi i}{N}k} \sum_{n=0}^{N/2-1} \xi_{2n+1} e^{- \frac{2 \pi i}{N/2} n
+k}\\
+&=E_k + e^{-\frac{2 \pi i}{N}k} O_k
+{{{end-align}}}
+
+Where \[ E_k \] and \[ O_k \] themselves are FFTs of a smaller array each.
+Furthermore notice how thanks to the cyclic nature of the complex exponential
+function it is possible to half the number of computations:
+
+{{{beg-align}}}
+x_{k+\frac{N}{2}} &= E_{k+\frac{N}{2}} + e^{-\frac{2 \pi i}{N} (k +
+\frac{N}{2})} O_{k+\frac{N}{2}}\\
+&= E_k - e^{-\frac{2 \pi i}{N} k} O_k
+{{{end-align}}}
+
+Thus
+
+{{{beg-eqn}}}
+\begin{aligned}
+x_k &= E_k + e^{-\frac{2 \pi i}{N} k} O_k\\
+x_{k+\frac{N}{2}} &= E_k - e^{-\frac{2 \pi i}{N} k} O_k
+\end{aligned}\,\text{,}\quad k=0,\dots,\frac{N}{2}-1
+{{{end-eqn}}}
+
+* Implementing the FFT
+
+With the reduction identities we derived for the FFT a preliminary
+implementation could be:
+
+#+begin_src common-lisp
+ (defun fft (sequence)
+ (labels
+ ((fft-step (n step offset)
+ (let ((ret (make-array n)))
+ (if (= n 1)
+ (setf (aref ret 0) (aref sequence offset))
+ (loop
+ :with n2 = (/ n 2)
+ :with ek = (fft-step n2 (* 2 step) offset)
+ :with ok = (fft-step n2 (* 2 step) (+ offset step))
+ :for k :below n2
+ :for c = (exp (- (/ (* 2 pi (complex 0 1) k) n)))
+ :do
+ (setf (aref ret k) (+ (aref ek k) (* c (aref ok k)))
+ (aref ret (+ k n2)) (- (aref ek k) (* c (aref ok k))))))
+ ret)))
+ (fft-step (length sequence) 1 0)))
+#+end_src
+
+The function ~fft-step~ needs to be able to access both even and odd terms, for
+this we use the ~step~ and ~offset~ arguments. ~step~ indicate the distance
+between consecutive elements of the input to the fft. If we wanted to compute
+the FFT of the even terms, this distance would be 2. For the fft inside this
+outer fft of the even entries we also want to split further into even an odd
+members, this ~step~ needs to be 4 and so on. ~offset~ represents how many
+elements must be skipped until the first element of the subarray.
+
+Notice that we are allocating in each step a new array to return. The FFT can
+however be computed with a single array allocation. For that we store the values
+of \[ E_k \] in the first half of the return array and the values of \[ O_k \]
+in the second half. Finally we use the so called "butterfly" operations to
+compute the final result.
+
+#+caption: Diagram of the abstract data flow inside the FFT. Observe how the FFT itself is define recursively halving the number of items in each step
+[[/svg/fft.svg]]
+
+#+begin_src common-lisp
+ (defun fft* (sequence)
+ (let ((result (make-array (length sequence))))
+ (labels ((fft-step (n step offset roffset)
+ (if (= n 1)
+ (setf (aref result roffset) (aref sequence offset))
+ (let ((n2 (/ n 2)))
+ (fft-step n2 (* 2 step) offset roffset) ; e_k
+ (fft-step n2 (* 2 step) (+ offset step) (+ roffset n2)) ; o_k
+ (loop :for k :below n2
+ :for j = (+ roffset k)
+ :for c = (exp (- (/ (* 2 pi (complex 0d0 1d0) k) n)))
+ :for ek = (aref result j)
+ :for ok = (aref result (+ j n2))
+ :do
+ (setf (aref result j) (+ ek (* c ok))
+ (aref result (+ j n2)) (- ek (* c ok))))))))
+ (fft-step (length sequence) 1 0 0)
+ result)))
+#+end_src
+
+There are still many optimizations that could be made to speed up our code, like
+twiddle factors, cache optimizations and more. But this goes beyond the scope I
+planned for this article. Many would probably be also beyond the scope of my
+current abilities.
diff --git a/src/math/index.org b/src/math/index.org
new file mode 100644
index 0000000..38e2eaa
--- /dev/null
+++ b/src/math/index.org
@@ -0,0 +1,19 @@
+#+title: Math and Physics articles
+#+setupfile: ../../math_options.org
+
+- [[file:vectors.org][Cross Product]]
+- [[file:cylindrical_coordinates.org][Cylindrical Coordinates]]
+- [[file:fft.org][Fast Fourier Transform]]
+- [[file:lagrange.org][Lagrange Mechanics]]
+- [[file:laplace.org][Laplace Transformations]]
+- [[file:matrices.org][Matrix Properties]]
+- [[file:diff.org][Method for solving first order and Bernoulli's differential equations]]
+- [[file:orbit.org][Orbit]]
+- [[file:polar_coordinates.org][Polar Coordinates]]
+- [[file:spherical-harmonics.org][Solving the laplace equation in Spherical coordinates]]
+- [[file:spherical_coordinates.org][Spherical Coordinates]]
+- [[file:derivatives.org][Table of Derivatives]]
+- [[file:integrals.org][Table of Integrals]]
+- [[file:levi_cevita.org][The Levi Cevita Symbol]]
+- [[file:trigonometry.org][Trigonometric identities]]
+- [[file:variation.org][Variation Calculus]] \ No newline at end of file
diff --git a/src/math/integrals.org b/src/math/integrals.org
new file mode 100644
index 0000000..a8e9677
--- /dev/null
+++ b/src/math/integrals.org
@@ -0,0 +1,35 @@
+#+title:Table of Integrals
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* $a + bx$
+\begin{align*}
+\intg{(a + bx)^n}{\frac{(a+bx)^{n+1}}{b(n+1)}}\\
+\int\frac{\D{x}}{a + bx} &= \frac{1}{b}\log(a+bx) + C\\
+\int\frac{x\D{x}}{a + bx} &= \frac{1}{b^2}(a + bx - a\log(a+bx)) + C
+\end{align*}
+
+* Trigonometric Funtions
+\begin{align*}
+\intg{\sin(x)}{-\cos(x)}\\
+\intg{\cos(x)}{\sin(x)}\\
+\intg{\tan(x)}{-\ln(\cos(x))}\\
+\intg{\sec(x)}{\ln(\sec(x) + \tan(x))}\\
+\intg{\csc(x)}{-\ln(\csc(x) + \cot(x))}\\
+\intg{\cot(x)}{\ln(\sin(x))}
+\end{align*}
+* Hyperbolic Funtions as results
+\begin{align*}
+\int\frac{\text{d}x}{\sqrt{x^2 + a^2}} &= \arsinh{\frac{x}{a}} + C\\
+\int\frac{\text{d}x}{\sqrt{x^2 - a^2}} &= \arcosh{\frac{x}{a}} + C\\
+\int\frac{\text{d}x}{a^2 - x^2} &= \frac{1}{a}\artanh{\frac{x}{a}} + C\\
+%\int\frac{\text{d}x}{x^2 - a^2} &= -\frac{1}{a}\arcoth{\frac{x}{a}} + C\\
+\int\frac{\text{d}x}{x\sqrt{a^2 - x^2}} &= -\frac{1}{a}\arsech{\frac{x}{a}} + C\\
+\int\frac{\text{d}x}{x\sqrt{x^2 + a^2}} &= -\frac{1}{a}\arcsch{\frac{x}{a}} + C\\
+\intg{\sqrt{x^2+a^2}}{\frac{x}{2}\sqrt{x^2+a^2} + \frac{a^2}{2}\arsinh{\frac{x}{a}}}\\
+\intg{\sqrt{x^2-a^2}}{\frac{x}{2}\sqrt{x^2-a^2} - \frac{a^2}{2}\arcosh{\frac{x}{a}}}
+\end{align*}
diff --git a/src/math/lagrange.org b/src/math/lagrange.org
new file mode 100644
index 0000000..565c7e7
--- /dev/null
+++ b/src/math/lagrange.org
@@ -0,0 +1,23 @@
+#+title:Lagrange Mechanics
+#+author: Thomas Albers Raviola
+#+date: 2022-10-01
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Eliminating the constraints
+\begin{align*}
+m_i \ddot{x}_i &= F_i + \sum_{n=1}^R \lambda_n \pderiv{g_n}{x_i}\\
+m_i \ddot{x}_i \pderiv{x_i}{q_k} &= F_i \pderiv{x_i}{q_k} + \sum_{n=1}^R \lambda_n \pderiv{g_n}{x_i} \pderiv{x_i}{q_k}\\
+\sum_{i=1}^{3N} m_i \ddot{x}_i \pderiv{x_i}{q_k} &= \sum_{i=1}^{3N}F_i \pderiv{x_i}{q_k} + \sum_{n=1}^R \lambda_n \sum_{i=1}^{3N} \pderiv{g_n}{x_i} \pderiv{x_i}{q_k}\\
+\sum_{i=1}^{3N} m_i \ddot{x}_i \pderiv{x_i}{q_k} &= \sum_{i=1}^{3N}F_i \pderiv{x_i}{q_k} + \sum_{n=1}^R \lambda_n \deriv{g_n}{q_k}\\
+\sum_{i=1}^{3N} m_i \ddot{x}_i \pderiv{x_i}{q_k} &= \sum_{i=1}^{3N}F_i \pderiv{x_i}{q_k}\\
+\deriv{}{t}\pderiv{(T - U)}{\dot{q}_k} - \pderiv{T}{q_k} &= \sum_{i=1}^{3N}F_i \pderiv{x_i}{q_k}\\
+\deriv{}{t}\pderiv{(T - U)}{\dot{q}_k} - \pderiv{T}{q_k} &= - \sum_{i=1}^{3N}\pderiv{U}{x_i} \pderiv{x_i}{q_k}\\
+\deriv{}{t}\pderiv{(T - U)}{\dot{q}_k} - \left(\pderiv{T}{q_k} - \pderiv{U}{q_k}\right) &= 0\\
+\deriv{}{t}\pderiv{(T - U)}{\dot{q}_k} - \pderiv{T - U}{q_k} &= 0\\
+\deriv{}{t}\pderiv{\mathcal{L}}{\dot{q}_k} - \pderiv{\mathcal{L}}{q_k} &= 0
+\end{align*}
diff --git a/src/math/laplace.org b/src/math/laplace.org
new file mode 100644
index 0000000..ea2c638
--- /dev/null
+++ b/src/math/laplace.org
@@ -0,0 +1,39 @@
+#+title:Laplace Transformations
+#+author: Thomas Albers Raviola
+#+date: 2022-10-01
+#+setupfile: ../../math_options.org
+
+\begin{align*}
+\delta(t) & 1\\
+\delta(t - a) & e^{as}\\
+1 & \frac{1}{s}\\
+t & \frac{1}{s^2}\\
+\frac{t^{n-1}}{(n-1)!} & \frac{1}{s^n}, n \in \mathbb{N}\\
+\frac{t^{a-1}}{\Gamma(a)} & \frac{1}{s^a}\\
+e^{-at} & \frac{1}{s+a}\\
+\frac{t^{n-1}e^{-at}}{(n-1)!} & \frac{1}{(s+a)^n}, n \in \mathbb{N}\\
+\frac{e^{-at}-e^{-bt}}{b - a} & \frac{1}{(s+a)(s+b)}, a \neq b\\
+\frac{1}{a}\sin(at) & \frac{1}{s^2 + a^2}\\
+\cos(at) & \frac{s}{s^2+a^2}\\
+\frac{1}{a}\sinh(at) & \frac{1}{s^2-a^2}\\
+\cosh(at) & \frac{s}{s^2-a^2}\\
+\frac{1-\cos(at)}{a^2} & \frac{1}{s(s^2+a^2)}\\
+\frac{at - \sin(at)}{a^3} & \frac{1}{s^2(s^2 + a^2)}\\
+\frac{\sin(at) - at\cos(at)}{2a^3} & \frac{1}{(s^2 + a^2)^2}\\
+
+\frac{t\sin(at)}{2a} & \frac{s}{(s^2+a^2)^2}\\
+\frac{\sin(at) + at\cos(at)}{2a} & \frac{s^2}{(s^2 + a^2)^2}\\
+\frac{b\sin(at) - a\sin(bt)}{ab(b^2 - a^2)} & \frac{1}{(s^2+a^2)(s^2+b^2)}, a^2 \neq b^2
+\frac{\cos(at) - \cos(bt)}{b^2 - a^2} & \frac{s}{(s^2+a^2)(s^2+b^2)}, a^2 \neq b^2
+\frac{1}{b}e^{-at}\sin(bt) & \frac{1}{(s+a)^2 + b^2}\\
+e^{-at}\cos(bt) & \frac{s+a}{(s+a)^2 + b^2}\\
+\frac{\sinh(at) - \sin(at)}{2a^3} & \frac{1}{s^4 - a^4}\\
+\frac{\sin(at)\sinh(at)}{2a^2} & \frac{s}{s^4+4a^4}\\
+\frac{1}{\sqrt{\pi t}} & \frac{1}{\sqrt{s}}\\
+\frac{\sin{at}{t}} & \arctan{\frac{a}{s}}\\
+u(t) - u(t-k) & \frac{1-e^{-ks}}{s}\\
+\frac{(t-k)^{a-1}}{\Gamma(a)}u(t-k) & \frac{1}{s^a}e^{-ks}, a > 0\\
+\sum_{n=0}^\inf u(t-nk) & \frac{1}{s(1-e^{-ks})}\\
+\frac{1}{2}(\sin(t) + \|\sin(t)\|) & \frac{1}{(s^2 + 1)(1 - e^{\pi s})}\\
+\|\sin(at)\| & \frac{a\coth(\frac{\pi s}{2 a})}{s^2 + a^2}
+\end{align*}
diff --git a/src/math/levi_cevita.org b/src/math/levi_cevita.org
new file mode 100644
index 0000000..983130e
--- /dev/null
+++ b/src/math/levi_cevita.org
@@ -0,0 +1,25 @@
+#+title: The Levi Cevita Symbol
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Levi Cevita symbol
+\begin{equation*}
+\varepsilon_{ijk} = \left\{\begin{array}{rl}
+1,&(i,j,k) \in \{(1,2,3), (2,3,1), (3,1,2)\}\\
+-1,&(i,j,k) \in \{(3,2,1), (2,1,3), (1,3,2)\}\\
+0,&\text{otherwise}
+\right{}
+\end{array}
+\end{equation*}
+
+\begin{equation*}
+\varepsilon_{ijk} = \varepsilon_{jki} = \varepsilon_{kij} = - \varepsilon_{ikj} = - \varepsilon_{jik} = - \varepsilon_{kji} = 1
+\end{equation*}
+
+\begin{align*}
+\sum_{k=1}^3 \varepsilon_{ijk}\varepsilon_{kmn} = \delta_{im} \delta_{jn} - \delta_{in} \delta_{jm}
+\end{align*}
diff --git a/src/math/matrices.org b/src/math/matrices.org
new file mode 100644
index 0000000..c968f8c
--- /dev/null
+++ b/src/math/matrices.org
@@ -0,0 +1,33 @@
+#+title:Matrix Properties
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Basic properties
+\begin{align*}
+A + B = B + A
+\end{align*}
+
+* Dot product
+\begin{align*}
+(A^\text{T})^\text{T} &= A\\
+(A + B)^\text{T} &= A^\text{T} + B^\text{T}\\
+(AB)^\text{T} &= B^\text{T}A^\text{T}
+\end{align*}
+
+* Transpose
+\begin{align*}
+\bm{a} \cdot \bm{b} &= \overline{\bm{b}} \cdot \bm{a}\\
+\bm{a} \cdot \bm{b} &= \bm{a}^\text{T} \bm{b}
+\end{align*}
+
+* Hermitian transpose
+\begin{align*}
+A^\ast &= \left[\overline{a_{ij}}\right]\\
+(\lambda A)^\ast &= \left[\overline{\lambda a_{ij}}\right] = \overline{\lambda} \left[a_{ij}\right]^\ast = \overline{\lambda}\,\overline{A}\\
+A^\dag &= (A^\ast)^\text{T}\\
+A^{\dag\dag} &= A
+\end{align*}
diff --git a/src/math/orbit.org b/src/math/orbit.org
new file mode 100644
index 0000000..5e4040a
--- /dev/null
+++ b/src/math/orbit.org
@@ -0,0 +1,89 @@
+#+title:Orbit
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Deriving Kepler's first law from Newton's law of universal gravitation
+
+The movement of an object with mass $m$ orbiting another body with mass $M$ is
+given by Newton's law of gravitation. If $m \ll M$ it is possible to consider
+the position of the larger object constant and use it as the origin of our
+coordinate system. Then the following equation applies for movement of the
+smaller object:
+
+{{{beg-eqn}}}
+m\ddot{\bm{r}} = - \frac{GMm}{r^3}\bm{r} \Leftrightarrow \ddot{\bm{r}} = - \frac{GM}{r^3}\bm{r}
+{{{end-eqn}}}
+
+In order to solve this differential equation we first consider the angular
+momentum of or object around its orbit.
+
+{{{beg-eqn}}}
+\bm{L} = \bm{r} \times m \dot{\bm{r}}
+{{{end-eqn}}}
+
+In the abscense of external toques, because the only force acting on the object
+is parallel to its position, the angular momentum is conserved.
+
+{{{beg-eqn}}}
+\deriv{\bm{L}}{t} = \dot{\bm{r}} \times m \dot{\bm{r}} + \bm{r} \times m \ddot{\bm{r}} = 0
+{{{end-eqn}}}
+
+We now multiply both sides of our equation from the right by the angular
+momentum and develop the right side of the equation using vector identities.
+
+{{{beg-align}}}
+\ddot{\bm{r}} \times \bm{L} &= -GM\frac{\bm{r} \times \left(\bm{r} \times m \dot{\bm{r}}\right)}{r^3}\\
+&= - \frac{GMm}{r^3} \left(\left(\bm{r} \cdot \dot{\bm{r}}\right)\bm{r} - \left(\bm{r} \cdot \bm{r}\right)\dot{\bm{r}}\right)\\
+&= GMm\left(\frac{\left(\bm{r} \cdot \bm{r}\right)\dot{\bm{r}}}{r^3} - \frac{\left(\bm{r} \cdot \dot{\bm{r}}\right)\bm{r}}{r^3}\right)\\
+&= GMm\left(\frac{\dot{\bm{r}}}{r} - \frac{\left(\bm{r} \cdot \dot{\bm{r}}\right)\bm{r}}{r^3}\right)\\
+&= GMm\left(\frac{1}{r} \deriv{\bm{r}}{t} + \deriv{}{t}\left(\frac{1}{r}\right)\bm{r}\right)\\
+&= GMm\deriv{}{t}\left(\frac{\bm{r}}{r}\right)
+{{{end-align}}}
+
+We observe that each side of our equation is a derivative of a quantity. We know
+integrate both sides and take the integrations constant into account.
+
+{{{beg-align}}}
+& \deriv{}{t} \left(\dot{\bm{r}} \times \bm{L}\right) = GM \deriv{}{t}\left(\frac{\bm{r}}{r}\right)\\
+\Leftrightarrow \quad & \dot{\bm{r}} \times \bm{L} = GM \frac{\bm{r}}{r} + \bm{a}
+{{{end-align}}}
+
+Our objective is now to solve the equation for $r$, so we multiply both sides by $\bm{r}$:
+
+{{{beg-align}}}
+\dot{\bm{r}} \times \left(\bm{r} \times \dot{\bm{r}}\right) &= GM \frac{\bm{r}}{r} + \bm{a}\\
+\bm{r} \cdot \left(\dot{\bm{r}} \times \left(\bm{r} \times \dot{\bm{r}}\right)\right) &= GMr + \bm{r} \cdot \bm{a}
+{{{end-align}}}
+
+By applying a cyclic permutation of the resulting triple product and using the
+known property of the scalar product we now express the equation only in terms
+of the magnitudes of the vectors.
+
+{{{beg-align}}}
+\left(\bm{r} \times \dot{\bm{r}}\right) \cdot \left(\bm{r} \times \dot{\bm{r}}\right) &= GMr + \bm{r} \cdot \bm{a}\\
+\left(\frac{L}{m}\right)^2 &= GMr + \bm{r} \cdot \bm{a}\\
+\left(\frac{L}{m}\right)^2 &= GMr + r a \cos\theta
+{{{end-align}}}
+
+The last steps are to solve for $r$
+
+{{{beg-align}}}
+r &= \left(\frac{L}{m}\right)^2 \frac{1}{GM + a \cos\theta}\\
+&= \left(\frac{L}{m}\right)^2 \frac{1}{GM} \frac{1}{1 + \frac{a}{GM} \cos\theta}\\
+&= \left(\frac{L}{m}\right)^2 \frac{1}{GM} \frac{1}{1 + e\cos\theta}
+{{{end-align}}}
+
+Finally we reach our result. Objects orbiting according to Newton's Law of
+Gravitation follow paths that correspond to the conic sections. Here is Kepler's
+first Law a special case, where our object has a stable orbit around the larger
+body.
+
+{{{beg-eqn}}}
+r &= \frac{L^2}{GM m^2} \frac{1}{1 + e\cos\theta}
+{{{end-eqn}}}
+
+* Deriving a physical interpretation of the excentricity of the orbit
diff --git a/src/math/polar_coordinates.org b/src/math/polar_coordinates.org
new file mode 100644
index 0000000..0d26138
--- /dev/null
+++ b/src/math/polar_coordinates.org
@@ -0,0 +1,34 @@
+#+title:Polar Coordinates
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Coordinate transformations
+\begin{align*}
+x &= r \cos\theta\\
+y &= r \sin\theta
+\end{align*}
+
+* Local unit vectors
+\begin{align*}
+\unitv{r} &= \cos\theta \unitv{x} + \sin\theta \unitv{y}\\
+\unitv{\theta} &= -\sin\theta \unitv{x} + \cos\theta \unitv{y}
+\end{align*}
+
+* Kinematic in polar coordinates
+** Time derivatives of the local unit vectors
+\begin{align*}
+\deriv{\unitv{r}}{t} &= \dot{\theta}\unitv{\theta}\\
+\deriv{\unitv{\theta}}{t} &= -\dot{\theta}\unitv{r}
+\end{align*}
+
+** Position vector and its time derivatives
+\begin{align*}
+\bm{r} &= r\unitv{r}\\
+\bm{v} &= \dot{r}\unitv{r} + r\dot\theta\unitv{\theta}\\
+\bm{a} &= \left(\ddot{r} - r\dot\theta^2\right)\unitv{r}
++ \left(2\dot{r}\dot\theta + r\ddot\theta\right)\unitv{\theta}
+\end{align*}
diff --git a/src/math/spherical-harmonics.org b/src/math/spherical-harmonics.org
new file mode 100644
index 0000000..b5183b5
--- /dev/null
+++ b/src/math/spherical-harmonics.org
@@ -0,0 +1,119 @@
+#+title: Solving the laplace equation in Spherical coordinates
+#+author: Thomas Albers Raviola
+#+date: 2022-12-15
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Laplace equation
+
+{{{beg-eqn}}}
+\Delta \phi = 0
+{{{end-eqn}}}
+
+Solutions to this equation are called harmonics
+
+* Laplace equation in spherical coordinates
+
+Using the definition for the laplace operator in spherical coordinates, it
+follows:
+
+{{{beg-align}}}
+\frac{1}{r^2}\pderiv{}{r}\left(r^2 \pderiv{\phi}{r}\right) + \frac{1}{r^2\sin\theta} \pderiv{}{\theta}\left(\sin\theta\pderiv{\phi}{\theta}\right) + \frac{1}{r^2\sin^2\theta}\frac{\partial^2\phi}{\partial\varphi^2} &= 0\\
+\pderiv{}{r}\left(r^2 \pderiv{\phi}{r}\right) + \frac{1}{\sin\theta} \pderiv{}{\theta}\left(\sin\theta\pderiv{\phi}{\theta}\right) + \frac{1}{\sin^2\theta}\frac{\partial^2\phi}{\partial\varphi^2} &= 0
+{{{end-align}}}
+
+Using sepration of variables $\phi$ becomes
+{{{beg-eqn}}}
+\phi(r, \theta, \varphi) = R(r)Y(\theta, \varphi)
+{{{end-eqn}}}
+
+Applying this to the original equation produces
+
+{{{beg-align}}}
+\pderiv{}{r}\left(r^2 \pderiv{R}{r}\right)Y(\theta, \phi) + \left(\frac{1}{\sin\theta} \pderiv{}{\theta}\left(\sin\theta\pderiv{\phi}{\theta}\right) + \frac{1}{\sin^2\theta}\frac{\partial^2\phi}{\partial\varphi^2}\right)R(r) &= 0\\
+\frac{1}{R(r)}\pderiv{}{r}\left(r^2 \pderiv{R}{r}\right) + \frac{1}{Y(\theta, \phi)}\left(\frac{1}{\sin\theta} \pderiv{}{\theta}\left(\sin\theta\pderiv{\phi}{\theta}\right) + \frac{1}{\sin^2\theta}\frac{\partial^2\phi}{\partial\varphi^2}\right) &= 0
+{{{end-align}}}
+
+Because the terms depend on different independant variables, the only way the
+equation holds is if both terms are constant.
+
+{{{beg-align}}}
+&\frac{1}{R(r)}\pderiv{}{r}\left(r^2 \pderiv{R}{r}\right) = \lambda\\
+&\frac{1}{Y(\theta, \phi)}\left(\frac{1}{\sin\theta} \pderiv{}{\theta}\left(\sin\theta\pderiv{Y}{\theta}\right)+ \frac{1}{\sin^2\theta}\frac{\partial^2Y}{\partial\varphi^2}\right) = -\lambda
+{{{end-align}}}
+
+* Angle dependant term
+We again use separation of variables to solve the partial differential equation
+of the angle dependant term.
+
+{{{beg-eqn}}}
+Y(\theta, \varphi) = \Theta(\theta)\Phi(\varphi)
+{{{end-eqn}}}
+
+Replacing into the equation
+
+{{{beg-eqn}}}
+\lambda\sin^2\theta + \frac{\sin\theta}{\Theta(\theta)}\pderiv{}{\theta}\left(\sin\theta\pderiv{\Theta}{\theta}\right)
++ \frac{1}{\Phi(\varphi)}\frac{\partial^2\Phi}{\partial\varphi^2} = 0
+{{{end-eqn}}}
+
+Based on a similar argument it follows that both terms must be constant, with
+this we may now solve for $\Phi$
+
+{{{beg-eqn}}}
+\frac{1}{\Phi(\varphi)}\frac{\partial^2\Phi}{\partial\varphi^2} = -m^2
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\Phi(\varphi) = e^{-m\varphi{}i}
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\lambda\sin^2\theta + \frac{\sin\theta}{\Theta(\theta)}\pderiv{}{\theta}\left(\sin\theta\pderiv{\Theta}{\theta}\right) = m^2
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+l(l+1)\sin^2(\theta)\Theta(\theta) + \pderiv{}{\theta}\left(\sin\theta\pderiv{\Theta}{\theta}\right) = m^2\Theta(\theta)
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+l(l+1)\sin^2(\theta)\Theta(\theta) + \sin(\theta)\left(\cos(\theta) \Theta'(\theta) + \sin(\theta) \Theta''(\theta)\right) = m^2\Theta(\theta)
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\sin^2(\theta) \Theta''(\theta) + \sin(\theta)\cos(\theta) \Theta'(\theta) + (l(l+1)\sin^2(\theta) - m^2)\Theta(\theta) = 0
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\Theta''(\theta) + \cot(\theta)\Theta'(\theta) + \left(l(l+1) - \frac{m^2}{\sin^2\theta}\right)\Theta(\theta) = 0
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\Theta(\theta) = P(\cos \theta)
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\cot(\theta)\Theta'(\theta) = \cot(\theta) \deriv{}{\theta}P(\cos \theta)=-\cos(\theta) P'(\cos\theta)
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\frac{\text{d}^2}{\text{d}\theta^2}(P(\cos\theta)) = \sin^2(\theta) P''(\cos\theta) - \cos(\theta) P'(\cos\theta)
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+\sin^2(\theta) P''(\cos\theta) - 2\cos(\theta) P'(\cos\theta) + \left(l(l+1)-\frac{m^2}{\sin^2\theta}\right)P(\cos\theta) = 0
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+x = \cos\theta
+{{{end-eqn}}}
+
+{{{beg-eqn}}}
+(1 - x^2)P''(x) - 2xP'(x) + \left(l(l+1)-\frac{m^2}{1-x^2}\right)P(x) = 0
+{{{end-eqn}}}
+
+Solve using Frobenius Method
diff --git a/src/math/spherical_coordinates.org b/src/math/spherical_coordinates.org
new file mode 100644
index 0000000..bf3b8d0
--- /dev/null
+++ b/src/math/spherical_coordinates.org
@@ -0,0 +1,38 @@
+#+title:Spherical Coordinates
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Coordinate transformations
+\begin{align*}
+x &= r \sin\theta \cos\varphi\\
+y &= r \sin\theta \sin\varphi\\
+z &= r \cos\theta
+\end{align*}
+
+* Local unit vectors
+\begin{align*}
+\bm{\hat{e}}_r &= \sin\theta \cos\varphi \bm{\hat{e}}_x + \sin\theta \sin\varphi \bm{\hat{e}}_y + \cos\theta \bm{\hat{e}}_z\\
+\bm{\hat{e}}_\theta &= \cos\theta \cos\varphi \bm{\hat{e}}_x + \cos\theta \sin\varphi \bm{\hat{e}}_y - \sin\theta \bm{\hat{e}}_z\\
+\bm{\hat{e}}_\varphi &= - \sin\theta \sin\varphi \bm{\hat{e}}_x + \sin\theta \cos\varphi \bm{\hat{e}}_y
+\end{align*}
+
+* Kinematic in spherical coordinates
+** Time derivatives of the local unit vectors
+\begin{align*}
+\deriv{\unitv{r}}{t} &= \dot{\theta}\unitv{\theta} + \dot{\varphi}\sin\theta \unitv{\varphi}\\
+\deriv{\unitv{\theta}}{t} &= -\dot{\theta}\unitv{r} + \dot{\varphi}\cos\theta \unitv{\varphi}\\
+\deriv{\unitv{\varphi}}{t} &= -\dot{\varphi} \left(\sin\theta\unitv{r} + \cos\theta\unitv{\theta}\right)
+\end{align*}
+
+** Position vector and its time derivatives
+\begin{align*}
+\bm{r} &= r\unitv{r}\\
+\bm{v} &= \dot{r}\unitv{r} + r\dot\theta\unitv{\theta} + r\dot\varphi\sin\theta\unitv{\varphi}\\
+\bm{a} &= \left(\ddot{r} - r\dot\theta^2 - r\dot\varphi^2\sin^2\theta\right)\unitv{r}
++ \left(2\dot{r}\dot\theta + r\ddot\theta - r\dot\varphi^2\sin\theta\cos\theta\right)\unitv{\theta}
++ \left(2\dot{r}\dot\varphi\sin\theta + 2r\dot\theta\dot\varphi\cos\theta + r\ddot\varphi\sin\theta\right)\unitv{\varphi}
+\end{align*}
diff --git a/src/math/trigonometry.org b/src/math/trigonometry.org
new file mode 100644
index 0000000..d2afc32
--- /dev/null
+++ b/src/math/trigonometry.org
@@ -0,0 +1,55 @@
+#+title:Trigonometric identities
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Pythagorean identities
+\begin{align*}
+&\cos^2\left(x\right) + \sin^2\left(x\right) = 1\\
+&\tan^2\left(x\right) + 1 = \sec^2\left(x\right)\\
+&1 + \cot^2\left(x\right) = \csc^2\left(x\right)
+\end{align*}
+
+* Sum of angles
+\begin{align*}
+&\sin\left(a \pm b\right) = \sin\left(a\right)\cos\left(b\right) \pm \cos\left(a\right)\sin\left(b\right)\\
+&\cos\left(a \pm b\right) = \cos\left(a\right)\cos\left(b\right) \mp \sin\left(a\right)\sin\left(b\right)\\
+&\tan(a \pm b) = \frac{\tan(a) \pm \tan(b)}{1 \mp \tan(a) \tan(b)}
+\end{align*}
+
+* Multiple angles
+\begin{align*}
+&\sin(2\theta) = 2\sin(\theta)\cos(\theta)\\
+&\cos(2\theta) = \cos^2\theta - \sin^2\theta = 2\cos^2\theta - 1 = 1 - 2\sin^2\theta
+\end{align*}
+
+* Half-angle formulae
+\begin{align*}
+&\sin \frac{\theta}{2} = \pm \sqrt{\frac{1-\cos\theta}{2}}\\
+&\cos \frac{\theta}{2} = \pm \sqrt{\frac{1+\cos\theta}{2}}
+\end{align*}
+
+* Power-reduction formulae
+\begin{align*}
+&\sin^2\theta = \frac{1 - \cos(2\theta)}{2}\\
+&\cos^2\theta = \frac{1 + \cos(2\theta)}{2}
+\end{align*}
+
+* Product-to-sum formulae
+\begin{align*}
+&2 \cos\theta \cos\varphi = \cos(\theta-\varphi) + \cos(\theta+\varphi)\\
+&2 \sin\theta \sin\varphi = \cos(\theta-\varphi) - \cos(\theta+\varphi)\\
+&2 \sin\theta \cos\varphi = \sin(\theta+\varphi) + \sin(\theta-\varphi)\\
+&2\cos\theta\sin\varphi = \sin(\theta+\varphi) - \sin(\theta-\varphi)
+\end{align*}
+
+* Sum-to-product formulae
+\begin{align*}
+&\sin\theta \pm \sin\varphi = 2 \sin\left(\frac{\theta\pm\varphi}{2}\right) \cos\left(\frac{\theta\mp\varphi}{2}\right)\\
+&\cos\theta + \cos\varphi = 2 \cos\left(\frac{\theta+\varphi}{2}\right) \cos\left(\frac{\theta-\varphi}{2}\right)\\
+&\tan\theta \pm \tan\varphi = \frac{\sin(\theta\pm\varphi)}{\cos\theta \cos\varphi}\\
+&\cos\theta - \cos\varphi = - 2 \sin\left(\frac{\theta+\varphi}{2}\right) \sin\left(\frac{\theta-\varphi}{2}\right)
+\end{align*}
diff --git a/src/math/variation.org b/src/math/variation.org
new file mode 100644
index 0000000..fcbfb14
--- /dev/null
+++ b/src/math/variation.org
@@ -0,0 +1,19 @@
+#+title:Variation Calculus
+#+author: Thomas Albers Raviola
+#+date: 2022-10-01
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Beltrami identity
+\begin{align*}
+\deriv{}{x}\pderiv{F}{\dot{y}} &= \pderiv{F}{y}\\
+\deriv{}{x}\left(\pderiv{F}{\dot{y}}\right)\deriv{y}{x} &= \pderiv{F}{y}\deriv{y}{x}\\
+\deriv{}{x}\left(\pderiv{F}{\dot{y}}\right)\deriv{y}{x} + \pderiv{F}{\dot{y}}\deriv{\dot{y}}{x} + \pderiv{F}{x} &= \pderiv{F}{y}\deriv{y}{x} + \pderiv{F}{\dot{y}} \deriv{\dot{y}}{x} + \pderiv{F}{x}\\
+\deriv{}{x}\left(\pderiv{F}{\dot{y}}\dot{y}\right) + \pderiv{F}{x} &= \deriv{F}{x}\\
+\deriv{}{x}\left(\pderiv{F}{\dot{y}}\dot{y} - F\right) &= - \pderiv{F}{x}\\
+\pderiv{F}{\dot{y}}\dot{y} - F\right &= C
+\end{align*}
diff --git a/src/math/vectors.org b/src/math/vectors.org
new file mode 100644
index 0000000..ceab691
--- /dev/null
+++ b/src/math/vectors.org
@@ -0,0 +1,56 @@
+#+title:Cross Product
+#+setupfile: ../../math_options.org
+
+* Disclaimer
+This site as of now just a technology demonstration and its claims
+should not be taken as true (even though I myself am pretty confident
+they are)
+
+* Definition
+We shall define the cross product in terms of two properties we are
+interested in:
+
+- Distributive: $\bm{a} \times \left(\bm{b} + \bm{c}\right) = \bm{a} \times \bm{b} + \bm{a} \times \bm{c}$
+- Orthogonal: $\bm{a} \times \bm{b} = \bm{c} \implies \bm{c} \cdot \bm{a} = \bm{0} \land \bm{c} \cdot \bm{b} = \bm{0}$
+
+It is worth mentioning that given a pair of vectors in $\mathbb{R}^3$
+there exist an infinite amount of vectors that satisfy these
+properties, so it is also necessary to introduce the following
+relations between the basis vectors to properly define the cross
+product.
+
+\begin{align*}
+\bm{e}_1 &= \bm{e}_2 \times \bm{e}_3\\
+\bm{e}_2 &= \bm{e}_3 \times \bm{e}_1\\
+\bm{e}_3 &= \bm{e}_1 \times \bm{e}_2\\
+\bm{e}_i \times \bm{e}_i &= \bm{0},\qquad\text{For}\quad i = 1,2,3
+\end{align*}
+
+We introduce the Levi-Civita symbol to condense our calculations.
+
+\begin{equation*}
+\epsilon_{ijk} \coloneqq \bm{e}_i \cdot \left(\bm{e}_j \times \bm{e}_k\right)
+\end{equation*}
+
+Based on this we may now derive a way to compute the cross product of
+two vectors
+
+\begin{align*}
+\left[\bm{a} \times \bm{b}\right]_i &= \left[\left(\sum_j a_j \bm{e}_j\right) \times \left(\sum_k b_k \bm{e_k}\right)\right]_i\\
+&= \left[\sum_{jk} a_j b_k \left(\bm{e}_j \times \bm{e}_k\right)\right]_i\\
+&= \sum_{jk} a_j b_k \bm{e}_i \cdot \left(\bm{e}_j \times \bm{e}_k\right)\\
+&= \sum_{jk} \epsilon_{ijk} a_j b_k\\
+\bm{a} \times \bm{b} &= \sum_{ijk} \epsilon_{ijk} a_i b_j \bm{e}_k
+\end{align*}
+
+* Properties
+\begin{align*}
+&\bm{a} \times \bm{b} = - \bm{b} \times \bm{a}\\
+&\bm{a} \cdot \left(\bm{b} \times \bm{c}\right)
+= \bm{b} \cdot \left(\bm{c} \times \bm{a}\right)
+= \bm{c} \cdot \left(\bm{a} \times \bm{b}\right)\\
+&\bm{a} \times \left(\bm{b} \times \bm{c}\right)
+= \left(\bm{a} \cdot \bm{c}\right)\bm{b} - \left(\bm{a} \cdot \bm{b}\right)\bm{c}\\
+&\left(\bm{a} \times \bm{b}\right) \times \left(\bm{c} \times \bm{d}\right)
+= \left(\bm{a}\cdot\bm{c}\right) \left(\bm{b}\cdot\bm{d}\right) - \left(\bm{a}\cdot\bm{d}\right) \left(\bm{b}\cdot\bm{c}\right)
+\end{align*}
diff --git a/src/physics/lorentz-transformation.org b/src/physics/lorentz-transformation.org
new file mode 100644
index 0000000..a5e3c8f
--- /dev/null
+++ b/src/physics/lorentz-transformation.org
@@ -0,0 +1,62 @@
+#+TITLE:Lorentz Transformation
+#+SETUPFILE: ../math_options.org
+#+LATEX_HEADER: \usepackage{bm}
+#+LATEX_HEADER: \usepackage{mathtools}
+#+LATEX_HEADER: \newcommand{\dcoff}[1]{\frac{\text{d}}{\text{d}x} #1}
+#+LATEX_HEADER: \newcommand{\sdcoff}[1]{\frac{\text{d}#1}{\text{d}x}}
+#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}}{\text{d}x} #1 &= #2}
+
+As a direct consequence of the second postulate, it follows, that for 2 events
+in spacetime describing the propagation of a beam of light it must hold
+
+\begin{equation*}
+c^2(t_2 - t_1)^2 - (x_2 - x_1)^2 - (y_2 - y_1)^2 - (z_2 - z_1)^2 = 0
+\end{equation*}
+
+To abbreviate we introduce the following expressions
+
+\begin{align*}
+t &= t_2 - t_1\\
+x &= x_2 - x_1\\
+y &= y_2 - y_1\\
+z &= z_2 - z_1
+\end{align*}
+
+Furthermore, because this must also hold in any other reference frame, for
+example $\Sigma'$, we have:
+
+\begin{equation*}
+c^2t^2 - x^2 - y^2 - z^2 = c^2{t'}^2 - {x'}^2 - {y'}^2 - {z'}^2 = 0
+\begin{end*}
+
+We introducing the Minkowski metric $\eta$ and rewrite this using matrices
+
+\begin{equation*}
+\sum_{\mu\nu} \eta_{\mu\nu} {x'}_\mu {x'}_\nu = \sum_{\alpha\beta} \eta_{\alpha\beta} x_\alpha x_\beta
+\end{equation*}
+
+Let us now consider some inertial system $\Sigma'$ that is moving away in
+respect to $\Sigma$ with some constant speed $v$ in the x direction. We are
+interested in the transformation that will allow us to convert the coordinates
+between this 2 systems.
+
+Further development of our last equation yields:
+
+\begin{align*}
+\sum_{\alpha\beta} \eta_{\alpha\beta} x_\alpha x_\beta &= \sum_{\mu\nu} \eta_{\mu\nu} \left(\sum_\alpha \Lambda_{\mu\alpha} x_\alpha \right) \left(\sum_\beta \Lambda_{\nu\beta} x_\beta \right)\\
+&= \sum_{\mu\nu\alpha\beta} \eta_{\mu\nu} \Lambda_{\mu\alpha} \Lambda_{\nu\beta} x_\alpha x_\beta
+\end{align*}
+
+From this we notice
+
+\begin{align*}
+\eta_{\alpha\beta} &= \sum_{\mu\nu} \eta_{\mu\nu} \Lambda_{\mu\alpha} \Lambda_{\nu\beta}\\
+&=\sum_{\mu\nu} (\Lambda^\text{T})_{\alpha\mu} \eta_{\mu\nu} \Lambda_{\nu\beta}\\
+&=\sum_{\nu} \left(\sum_\mu (\Lambda^\text{T})_{\alpha\mu} \eta_{\mu\nu}\right) \Lambda_{\nu\beta}
+\end{align*}
+
+And thus
+
+\begin{equation*}
+\eta = \Lambda^\text{T}\eta\Lambda
+\end{equation*}
diff --git a/src/style.css b/src/style.css
deleted file mode 100644
index bd731ad..0000000
--- a/src/style.css
+++ /dev/null
@@ -1,123 +0,0 @@
-html {
- height: 100%;
- color: #cccccc;
- background-color: hsl(240, 30%, 10%);/*#452b41*/ /*#2c314b*/
-}
-
-body {
- margin: auto;
- max-width: 64em;
- min-height: 100%;
- display: flex;
- flex-direction: column;
- background-color: hsl(240, 30%, 15%);
-}
-
-nav {
- /*#3a2438*/ /*#2a3257*/
- background-color: hsl(240, 30%, 20%);
-}
-
-nav > ul {
- display: flex;
- margin: 0 auto;
-}
-
-nav > ul > li:last-child {
- margin-left: auto;
-}
-
-nav ul {
- padding: 0;
-}
-
-nav li {
- margin: 2px;
- display: block;
- list-style: none;
-}
-
-nav li:hover {
- background-color: hsl(240, 30%, 30%);
-}
-
-nav .submenu:hover .submenu-contents {
- display: block;
-}
-
-nav .submenu-contents {
- display: none;
- position: absolute;
- z-index: 10;
- background-color: red;
-}
-
-nav a,
-nav span {
- text-decoration: none;
- color: #dddddd;
- display: block;
- line-height: 2em;
- height: 2em;
- margin-left: 1em;
- margin-right: 1em;
-}
-
-nav span {
- cursor: pointer;
-}
-
-.article-date {
- margin-left: auto;
-}
-
-.link-like, a {
- color: #eeeeee;
- text-decoration: underline;
-}
-
-.rel-header {
- padding: 1em 2em 1em 2em;
-}
-
-header {
- background-color: hsl(240, 30%, 10%);
-}
-
-header p {
- text-align: center;
- margin-bottom: 0.15em;
-}
-
-header p ~ h1 {
- margin-top: 0.15em;
-}
-
-main {
- padding: 2em 2em 2em 2em;
- flex-grow: 1;
-}
-
-hr {
- margin: 0;
- margin-top: auto;
-}
-
-footer {
- padding: 1em 2em 1em 2em;
-}
-
-figure {
- text-align: center;
-}
-
-figure img {
- max-width: 30em;
- object-fit: contain;
- display: block;
- margin: auto;
-}
-
-h1, h2, h3, h4, h5, h6 {
- text-align: center;
-}
diff --git a/src/svg/fft.tex b/src/svg/fft.tex
new file mode 100644
index 0000000..82af9df
--- /dev/null
+++ b/src/svg/fft.tex
@@ -0,0 +1,44 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+
+\begin{document}
+\begin{tikzpicture}
+ \foreach \y in {7,6,...,0} {
+ \draw (0,\y) node {$\xi_\y$};
+ \draw (.3, \y) -- (.7,\y);
+ \draw (6.4, \y) -- (7, \y);
+ \draw (7.05, \y) circle (0.05);
+ \draw (.25, \y) circle (0.05);
+
+ \draw (8.95, \y) -- (10.25, \y);
+ \draw (9.25,\y+0.3) node {$W_N^\y$};
+ \draw (10.3, \y) circle (0.05);
+ \draw (10.7,\y) node {$x_\y$};
+ }
+
+ \foreach \y in {0, 1, 2, 3} {
+ \draw (6.8,\y+4+0.3) node {$O_\y$};
+ \draw (6.8,\y+0.3) node {$E_\y$};
+ \draw[->,red] (7.1, \y) -- (8.95, \y+4);
+ \draw[->, blue] (7.1, \y+4) -- (8.95, \y);
+
+ \draw[->, blue] (7.1, \y) -- (8.95, \y);
+ \draw[->, red] (7.1, \y+4) -- (8.95, \y+4);
+
+ \draw[->] (.7, 2 * \y) -- (2.2, \y);
+ \draw (2.25, \y + 4) circle (0.05);
+ \draw (2.3, \y + 4) -- (3, \y + 4);
+
+ \draw[->] (.7, 2 * \y + 1) -- (2.2, \y+4);
+ \draw (2.25, \y) circle (0.05);
+ \draw (2.3, \y) -- (3, \y);
+ }
+
+ \draw (3, -.2) rectangle (6.4, 3.2);
+ \draw (3, 3.8) rectangle (6.4, 7.2);
+ \draw (.7, 8) rectangle (9.7, -1);
+ \draw (4.6, 1.5) node {$N/2$-FFT};
+ \draw (4.6, 5.5) node {$N/2$-FFT};
+\end{tikzpicture}
+\end{document}
diff --git a/src/z80/prototype1.org b/src/z80/prototype1.org
index 23adec1..c9e8b0a 100644
--- a/src/z80/prototype1.org
+++ b/src/z80/prototype1.org
@@ -50,7 +50,7 @@ managed to get all the components and build my first working
prototype. It did not look beautiful, but it was functional.
#+CAPTION: Prototype 1 together with its serial terminal
-[[https://thomaslabs.org/media/prototype1.jpg]]
+[[/img/prototype1.jpg]]
I wasn't satisfied with this prototype though. It was not what I had
envisioned. I wanted to have a pocket computer and this was nothing
diff --git a/src/z80/prototype2.org b/src/z80/prototype2.org
index ba19bd7..549c18e 100644
--- a/src/z80/prototype2.org
+++ b/src/z80/prototype2.org
@@ -9,7 +9,7 @@ m4_define(`_REL_HEADER', `Next: <ahref="/z80/prototype1.html">Prototype 1</a> Up
{{{date_place(Bremen, Germany)}}}
#+CAPTION: Prototype 2
-[[https://thomaslabs.org/media/prototype2_1.jpg]]
+[[/img/prototype2_1.jpg]]
Because when moving to Bremen, I wasn't able to take my old Prototype
with me, I had to build a new one. This time though, I needed
@@ -41,7 +41,7 @@ Prototype 2
- Dual serial ports with complete modem control lines
#+CAPTION: Prototype 2 together with screen
-[[https://thomaslabs.org/media/prototype2_2.jpg]]
+[[/img/prototype2_2.jpg]]
It didn't take long until Prototype 2 became incapable of fulfilling
its task. Once it was clear, which parts would definitely be part of