From 61b5ce20f25c5785e41574998a12c6d06eb05a5e Mon Sep 17 00:00:00 2001 From: Thomas Albers Date: Wed, 8 Mar 2023 23:43:00 +0100 Subject: Restructure build system and directory structures --- .gitignore | 4 + Makefile | 15 + math/cylindrical_coordinates.org | 37 - math/derivatives.org | 31 - math/index.org | 13 - math/integrals.org | 20 - math/levi_cevita.org | 26 - math/math.css | 85 -- math/matrices.org | 32 - math/orbit.org | 93 --- math/polar_coordinates.org | 36 - math/spherical_coordinates.org | 39 - math/trigonometry.org | 51 -- math/vectors.org | 58 -- math_options.org | 39 +- options.org | 2 +- publish.el | 205 +++-- run.sh | 2 + server/lighttpd.conf | 62 ++ server/mime.conf | 1369 ++++++++++++++++++++++++++++++++ server/modules.conf | 9 + site/DejaVuSans.woff2 | Bin 0 -> 257460 bytes site/css/math.css | 41 + site/css/style.css | 166 ++++ site/img/programmer_side.png | Bin 0 -> 1827240 bytes site/img/programmer_top.png | Bin 0 -> 2969390 bytes site/img/prototype1.jpg | Bin 0 -> 2988593 bytes site/img/prototype2_1.jpg | Bin 0 -> 3079552 bytes site/img/prototype2_2.jpg | Bin 0 -> 3509082 bytes site/robots.txt | 2 + site/sitemap | 26 + site/thomas.pub | 1 + src/abgabe.org | 101 --- src/arm/adventures.org | 58 ++ src/math/cylindrical_coordinates.org | 36 + src/math/derivatives.org | 26 + src/math/diff.org | 100 +++ src/math/fft.org | 141 ++++ src/math/index.org | 19 + src/math/integrals.org | 35 + src/math/lagrange.org | 23 + src/math/laplace.org | 39 + src/math/levi_cevita.org | 25 + src/math/matrices.org | 33 + src/math/orbit.org | 89 +++ src/math/polar_coordinates.org | 34 + src/math/spherical-harmonics.org | 119 +++ src/math/spherical_coordinates.org | 38 + src/math/trigonometry.org | 55 ++ src/math/variation.org | 19 + src/math/vectors.org | 56 ++ src/physics/lorentz-transformation.org | 62 ++ src/style.css | 123 --- src/svg/fft.tex | 44 + src/z80/prototype1.org | 2 +- src/z80/prototype2.org | 4 +- template.el | 0 57 files changed, 2906 insertions(+), 839 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile delete mode 100644 math/cylindrical_coordinates.org delete mode 100644 math/derivatives.org delete mode 100644 math/index.org delete mode 100644 math/integrals.org delete mode 100644 math/levi_cevita.org delete mode 100644 math/math.css delete mode 100644 math/matrices.org delete mode 100644 math/orbit.org delete mode 100644 math/polar_coordinates.org delete mode 100644 math/spherical_coordinates.org delete mode 100644 math/trigonometry.org delete mode 100644 math/vectors.org create mode 100755 run.sh create mode 100644 server/lighttpd.conf create mode 100644 server/mime.conf create mode 100644 server/modules.conf create mode 100644 site/DejaVuSans.woff2 create mode 100644 site/css/math.css create mode 100644 site/css/style.css create mode 100644 site/img/programmer_side.png create mode 100644 site/img/programmer_top.png create mode 100644 site/img/prototype1.jpg create mode 100644 site/img/prototype2_1.jpg create mode 100644 site/img/prototype2_2.jpg create mode 100644 site/robots.txt create mode 100644 site/sitemap create mode 100644 site/thomas.pub delete mode 100644 src/abgabe.org create mode 100644 src/arm/adventures.org create mode 100644 src/math/cylindrical_coordinates.org create mode 100644 src/math/derivatives.org create mode 100644 src/math/diff.org create mode 100644 src/math/fft.org create mode 100644 src/math/index.org create mode 100644 src/math/integrals.org create mode 100644 src/math/lagrange.org create mode 100644 src/math/laplace.org create mode 100644 src/math/levi_cevita.org create mode 100644 src/math/matrices.org create mode 100644 src/math/orbit.org create mode 100644 src/math/polar_coordinates.org create mode 100644 src/math/spherical-harmonics.org create mode 100644 src/math/spherical_coordinates.org create mode 100644 src/math/trigonometry.org create mode 100644 src/math/variation.org create mode 100644 src/math/vectors.org create mode 100644 src/physics/lorentz-transformation.org delete mode 100644 src/style.css create mode 100644 src/svg/fft.tex create mode 100644 template.el diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36698df --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +site/**/*.html +site/img-small/* +site/svg/* +build/* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c2399c7 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +all : + find site -name "*.html" -printf "https://thomaslabs.org/%P\n" > site/sitemap + +.PHONY : svg +svg : + latex -output-directory build -interaction nonstopmode src/svg/fft.tex + dvisvgm build/fft.dvi --no-fonts --exact-bbox --output=site/svg/fft.svg + +.PHONY : clean +clean : + rm -rf site/svg/* site/img-small site/math site/programs site/z80 site/index.html site/privacy.html site/arm site/sitemap + +.PHONY : upload +upload : + rsync -Pa --delete "site/" "thomas@gamma:/srv/web/thomaslabs/" diff --git a/math/cylindrical_coordinates.org b/math/cylindrical_coordinates.org deleted file mode 100644 index fab185b..0000000 --- a/math/cylindrical_coordinates.org +++ /dev/null @@ -1,37 +0,0 @@ -#+TITLE:Cylindrical Coordinates -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} -#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}#1}{\text{d}#2}} -#+LATEX_HEADER: \newcommand{\unitv}[1]{\bm{\hat{e}}_#1} - -* 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/math/derivatives.org b/math/derivatives.org deleted file mode 100644 index 4d5d4be..0000000 --- a/math/derivatives.org +++ /dev/null @@ -1,31 +0,0 @@ -#+TITLE:Table of Derivatives -#+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} - -* 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*} -\deriv{\sin(x)}{\cos(x)}\\ -\deriv{\cos(x)}{-\sin(x)}\\ -\deriv{\tan(x)}{\sec^2(x)}\\ -\deriv{\sec(x)}{\sec(x)\tan(x)}\\ -\deriv{\csc(x)}{\csc(x)\cot(x)}\\ -\deriv{\csc(x)}{-\csc^2(x)} -\end{align*} diff --git a/math/index.org b/math/index.org deleted file mode 100644 index 069c4b6..0000000 --- a/math/index.org +++ /dev/null @@ -1,13 +0,0 @@ -#+TITLE: Math and Physics articles -#+SETUPFILE: ../math_options.org - -- [[file:vectors.org][Cross Product]] -- [[file:cylindrical_coordinates.org][Cylindrical Coordinates]] -- [[file:matrices.org][Matrix Properties]] -- [[file:orbit.org][Orbit]] -- [[file:polar_coordinates.org][Polar 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]] \ No newline at end of file diff --git a/math/integrals.org b/math/integrals.org deleted file mode 100644 index 6a32903..0000000 --- a/math/integrals.org +++ /dev/null @@ -1,20 +0,0 @@ -#+TITLE:Table of Integrals -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} -#+LATEX_HEADER: \newcommand{\intg}[2]{\int #1 \text{d}x &= #2 + C} - -* 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) - -* 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*} diff --git a/math/levi_cevita.org b/math/levi_cevita.org deleted file mode 100644 index aaa2074..0000000 --- a/math/levi_cevita.org +++ /dev/null @@ -1,26 +0,0 @@ -#+TITLE: The Levi Cevita Symbol -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} - -* 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/math/math.css b/math/math.css deleted file mode 100644 index d4e1054..0000000 --- a/math/math.css +++ /dev/null @@ -1,85 +0,0 @@ -/* -p.author -p.date -p.creator -.title -.subtitle -.todo -.done -.WAITING -.timestamp -.timestamp-kwd -.timestamp-wrapper -.tag -._HOME -.target -.linenr -.code-highlighted -div.outline-N -div.outline-text-N -.section-number-N -.figure-number -.table-number -.listing-number -div.figure -pre.src -pre.example -p.verse -div.footnotes -p.footnote -.footref -.footnum -.org-svg -*/ - -html { - height: 100%; - color: #cccccc; - background-color: hsl(240, 30%, 10%); -} - -body { - margin: auto; - max-width: 64em; - min-height: 100%; - display: flex; - flex-direction: column; - background-color: hsl(240, 30%, 15%); -} - -main { - padding: 2em 2em 2em 2em; - flex-grow: 1; -} - -h1 { - text-align: center; -} - -#content { - max-width: 50em; - margin: auto; -} - -div.outline-2:first-of-type { - padding: 0.25em 1em; - background-color: hsl(60,30%,30%); -} - -.equation-container { - display: block; - padding: 1em 2em; - background-color: hsl(240, 30%, 20%); - overflow: auto; - border: 1px solid hsl(240, 30%, 50%) -} - -img { - max-width: unset; -} - -.equation-container img { - object-fit: contain; - display: block; - margin: auto; -} diff --git a/math/matrices.org b/math/matrices.org deleted file mode 100644 index a7ba58b..0000000 --- a/math/matrices.org +++ /dev/null @@ -1,32 +0,0 @@ -#+TITLE:Matrix Properties -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} - -* 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/math/orbit.org b/math/orbit.org deleted file mode 100644 index 88079a6..0000000 --- a/math/orbit.org +++ /dev/null @@ -1,93 +0,0 @@ -#+TITLE:Orbit -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} -#+LATEX_HEADER: \usepackage{amssymb} -#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}#1}{\text{d}#2}} -#+LATEX_HEADER: \newcommand{\unitv}[1]{\bm{\hat{e}}_#1} - -* 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: - -\begin{equation*} -m\ddot{\bm{r}} = - \frac{GMm}{r^3}\bm{r} \Leftrightarrow \ddot{\bm{r}} = - \frac{GM}{r^3}\bm{r} -\end{equation*} - -In order to solve this differential equation we first consider the angular -momentum of or object around its orbit. - -\begin{equation*} -\bm{L} = \bm{r} \times m \dot{\bm{r}} -\end{equation*} - -In the abscense of external toques, because the only force acting on the object -is parallel to its position, the angular momentum is conserved. - -\begin{equation*} -\deriv{\bm{L}}{t} = \dot{\bm{r}} \times m \dot{\bm{r}} + \bm{r} \times m \ddot{\bm{r}} = 0 -\end{equation*} - -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. - -\begin{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. - -\begin{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}$: - -\begin{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. - -\begin{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$ - -\begin{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. - -\begin{equation*} -r &= \frac{L^2}{GM m^2} \frac{1}{1 + e\cos\theta} -\end{equation*} - -* Deriving a physical interpretation of the excentricity of the orbit diff --git a/math/polar_coordinates.org b/math/polar_coordinates.org deleted file mode 100644 index ff07be3..0000000 --- a/math/polar_coordinates.org +++ /dev/null @@ -1,36 +0,0 @@ -#+TITLE:Polar Coordinates -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} -#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}#1}{\text{d}#2}} -#+LATEX_HEADER: \newcommand{\unitv}[1]{\bm{\hat{e}}_#1} - -* 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/math/spherical_coordinates.org b/math/spherical_coordinates.org deleted file mode 100644 index 1c7fd9c..0000000 --- a/math/spherical_coordinates.org +++ /dev/null @@ -1,39 +0,0 @@ -#+TITLE:Spherical Coordinates -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} -#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}#1}{\text{d}#2}} -#+LATEX_HEADER: \newcommand{\unitv}[1]{\bm{\hat{e}}_#1} - -* 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/math/trigonometry.org b/math/trigonometry.org deleted file mode 100644 index 3e81eeb..0000000 --- a/math/trigonometry.org +++ /dev/null @@ -1,51 +0,0 @@ -#+TITLE:Trigonometric identities -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} - -* 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/math/vectors.org b/math/vectors.org deleted file mode 100644 index 49d8132..0000000 --- a/math/vectors.org +++ /dev/null @@ -1,58 +0,0 @@ -#+TITLE:Cross Product -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} - -* 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/math_options.org b/math_options.org index 5fd9baa..75cde25 100644 --- a/math_options.org +++ b/math_options.org @@ -1,5 +1,34 @@ -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD_EXTRA: -#+HTML_HEAD_EXTRA: -#+MACRO: date_place $1, $2, {{{date(%B %d\, %Y)}}} +#+html_head: +#+html_head: +#+html_head_extra: +#+html_head_extra: + +#+macro: date_place $1, $2, {{{date(%B %d\, %Y)}}} + +#+macro: beg-eqn \begin{equation*} +#+macro: end-eqn \end{equation*} + +#+macro: beg-align \begin{align*} +#+macro: end-align \end{align*} + +#+macro: ref + +#+latex_header: \usepackage{bm} +#+latex_header: \usepackage{amssymb} + +#+latex_header: \newcommand{\deriv}[2]{\frac{\text{d}#1}{\text{d}#2}} +#+latex_header: \newcommand{\pderiv}[2]{\frac{\partial{}#1}{\partial{}#2}} +#+latex_header: \newcommand{\unitv}[1]{\bm{\hat{e}}_#1} +#+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{\ddx}[2]{\frac{\text{d}}{\text{d}x} #1} +#+latex_header: \newcommand{\intg}[2]{\int #1 \text{d}x &= #2 + C} +#+latex_header: \newcommand{\D}[1]{\text{d}#1} + +#+latex_header: \DeclareMathOperator\arsinh{arsinh} +#+latex_header: \DeclareMathOperator\arcosh{arcosh} +#+latex_header: \DeclareMathOperator\artanh{artanh} +#+latex_header: \DeclareMathOperator\arcoth{arcoth} +#+latex_header: \DeclareMathOperator\arsech{arsech} +#+latex_header: \DeclareMathOperator\arcsch{arcsch} diff --git a/options.org b/options.org index 234c394..3434526 100644 --- a/options.org +++ b/options.org @@ -1,4 +1,4 @@ -#+HTML_HEAD: +#+HTML_HEAD: #+HTML_HEAD_EXTRA: #+HTML_HEAD_EXTRA: #+MACRO: date_place $1, $2, {{{date(%B %d\, %Y)}}} diff --git a/publish.el b/publish.el index a327d02..6786c7d 100755 --- a/publish.el +++ b/publish.el @@ -15,6 +15,8 @@ "programs")) (li (a (@ (href "/math/")) "math")) + (li (a (@ (href "https://git.thomaslabs.org")) + "git")) (li (a (@ (href "/privacy.html")) "contact & privacy policy")))))) @@ -22,7 +24,7 @@ (sxml-to-xml `(footer (p - "Copyright © 2021 - 2022 Thomas Albers Raviola" + "Copyright © 2021 - 2023 Thomas Albers Raviola" (br) "This website and its contents are published under the following licences, unless otherwise specified" @@ -51,9 +53,14 @@ following licences, unless otherwise specified" ,(org-html--build-head info)) (body ,(if-let ((title (plist-get info :title))) - `(header - (p "Thomas' Labs") - (h1 ,(org-export-data title info))) + (let ((subtitle (plist-get info :subtitle))) + `(header + (div "Thomas' Labs") + (h1 ,(org-export-data title info)) + ,@(if subtitle + `((div (@ (class "subtitle")) + ,(car subtitle))) + '()))) `(header (h1 "Thomas' Labs"))) ,(thomaslabs-navbar) @@ -72,7 +79,8 @@ should not be taken as true (even though I myself am pretty confident they are")))) (defun math-sitemap (title entries) - (concat (format "#+TITLE: %s\n#+SETUPFILE: ../math_options.org\n\n" title) + (concat "#+title: " title "\n" + "#+setupfile: ../../math_options.org\n\n" (org-list-to-org entries))) @@ -82,7 +90,6 @@ they are")))) description)) (defun org-img-link-export (link description format info) - (message "%s" info) (format "%s" link description)) @@ -98,6 +105,18 @@ they are")))) :follow #'org-local-link-follow :export #'org-img-link-export) +(defvar root-dir (expand-file-name "")) + +(defun org-export-file-uri (filename) + "Return file URI associated to FILENAME." + (cond ((not (file-name-absolute-p filename)) + (string-remove-prefix "site" filename)) + ((string-suffix-p ".jpg" filename) + (concat "/img-small" (string-remove-prefix "/img" filename))) + (t + (string-remove-prefix (concat root-dir "/site") + (expand-file-name filename))))) + (org-export-define-derived-backend 'thomaslabs-html 'html :translate-alist '((template . thomaslabs-template))) @@ -110,96 +129,112 @@ they are")))) plist pub-dir)) -(setq org-publish-project-alist - `(("thomaslabs_html" - :base-directory "~/Code/websites/thomaslabs/src" - :publishing-directory "/srv/web/thomaslabs" - :publishing-function thomaslabs-publish-to-html - :with-toc nil - :recursive t +(defun image-dimensions (pathname) + (with-temp-buffer + (call-process "identify" nil (current-buffer) nil + "-ping" "-format" "%wx%h" pathname) + (mapcar #'cl-parse-integer (split-string (buffer-string) "x")))) + +(defun resize-image (factor input output) + (let ((percentage (format "%.01f%%" (* 100.0 factor)))) + (call-process "convert" nil nil nil input "-resize" percentage output))) + +(defun thomaslabs-publish-image (_plist filename pub-dir) + (unless (file-directory-p pub-dir) + (make-directory pub-dir t)) + (let ((output (expand-file-name (file-name-nondirectory filename) pub-dir))) + (unless (file-equal-p (expand-file-name (file-name-directory filename)) + (file-name-as-directory (expand-file-name pub-dir))) + (let* ((dimensions (image-dimensions filename)) + (width (cl-first dimensions)) + (height (cl-second dimensions)) + (factor (min (/ 800.0 width) (/ 800.0 height) 1.0))) + (resize-image factor filename output))) + ;; Return file name. + output)) + +(defun org-html--wrap-latex-environment (contents _ &optional caption label) + "Wrap CONTENTS string within appropriate environment for equations. +When optional arguments CAPTION and LABEL are given, use them for +caption and \"id\" attribute." + (format "\n\n%s%s\n" + ;; ID. + (if (org-string-nw-p label) (format " id=\"%s\"" label) "") + ;; Contents. + (format "\n%s\n" contents) + ;; Caption. + (if (not (org-string-nw-p caption)) "" + (format "\n(%s)" + caption)))) + +(defvar default-html-project-properties + '(:publishing-function thomaslabs-publish-to-html + :with-toc nil + :recursive nil + + :language "en_US" + :html-head-include-default-style nil + :html-head-include-scripts nil + :html-preamble nil + :html-postamble nil + :html-use-infojs nil + :html-html5-fancy t + :html-doctype "html5" + :with-toc nil + :section-numbers nil + :with-latex dvisvgm)) - :language "en_US" - - :html-head-include-default-style nil - :html-head-include-scripts nil - :html-preamble nil - :html-postamble nil - :html-use-infojs nil - :html-html5-fancy t - :html-doctype "html5" - :with-toc nil - :section-numbers nil - :with-latex dvisvgm) - - ("math_html" - :base-directory "~/Code/websites/thomaslabs/math" - :publishing-directory "/srv/web/thomaslabs/math" +(setq org-publish-project-alist + `(("root" + :base-directory "src" + :publishing-directory "site" + ,@default-html-project-properties) + ("arm" + :base-directory "src/arm" + :publishing-directory "site/arm" + ,@default-html-project-properties + :recursive t) + ("programs" + :base-directory "src/programs" + :publishing-directory "site/programs" + ,@default-html-project-properties + :recursive t) + ("z80" + :base-directory "src/z80" + :publishing-directory "site/z80" + ,@default-html-project-properties + :recursive t) + + ("math" + :base-directory "src/math" + :publishing-directory "site/math" :publishing-function thomaslabs-publish-to-html - :with-toc nil - :recursive t + ,@(org-plist-delete default-html-project-properties :html-preamble) - :language "en_US" - - :html-head-include-default-style nil - :html-head-include-scripts nil :html-preamble math-preamble - :html-postamble nil - :html-use-infojs nil - :html-html5-fancy t - :html-doctype "html5" - :with-toc nil :auto-sitemap t :sitemap-filename "index.org" :sitemap-title "Math and Physics articles" - :sitemap-function math-sitemap - - :section-numbers nil - :with-latex dvisvgm) - - ("math_svg" - :base-directory "~/Code/websites/thomaslabs/math/ltximg" - :base-extension "svg" - :publishing-directory "/srv/web/thomaslabs/math/ltximg" - :publishing-function org-publish-attachment) - - ("math_css" - :base-directory "~/Code/websites/thomaslabs/math" - :base-extension "css" - :publishing-directory "/srv/web/thomaslabs" - :publishing-function org-publish-attachment) - - ("thomaslabs_css" - :base-directory "~/Code/websites/thomaslabs/src" - :base-extension "css" - :publishing-directory "/srv/web/thomaslabs" - :publishing-function org-publish-attachment) - - ("thomaslabs_media" - :base-directory "~/Code/websites/thomaslabs/media" - :base-extension "jpg\\|gif\\|png" - :publishing-directory "/srv/web/thomaslabs/media" - :publishing-function org-publish-attachment) + :sitemap-function math-sitemap) - ("thomaslabs" - :components ("thomaslabs_html" - "thomaslabs_media" - "thomaslabs_css")) + ("img" + :base-directory "site/img" + :publishing-directory "site/img-small" + :base-extension "png\\|jpg\\|gif" + :recursive t + :publishing-function thomaslabs-publish-image) - ("thomaslabs_math" - :components ("math_html" - "math_css" - "math_svg")))) -(plist-put org-format-latex-options :html-foreground "#cccccc") + ("thomaslabs" + :components ("root" "arm" "programs" "z80" "math" "img")))) -(org-publish "thomaslabs" t) -(org-publish "thomaslabs_math" t) +;; (plist-put org-format-latex-options :html-foreground "#cccccc") +(plist-put org-format-latex-options :html-foreground "#000000") -;; (let ((opt "--delete -Prlpte 'ssh -p 1764'") -;; (src "'/srv/web/thomaslabs/'") -;; (dst "'root@thomaslabs.org:/var/www/math/'")) -;; (call-process-shell-command (format "rsync %s %s %s" opt src dst))) +(setq org-publish-timestamp-directory (concat (getenv "XDG_CACHE_HOME") "/org-timestamps/")) +(setq org-preview-latex-image-directory (expand-file-name "site/svg")) +(setq org-html-htmlize-output-type 'css) -;; (org-publish "thomaslabs" t) -;; (org-publish "math_svg" t) +(org-publish "thomaslabs" t) +;; fork ox-html? diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..6c745b4 --- /dev/null +++ b/run.sh @@ -0,0 +1,2 @@ +#!/bin/sh +lighttpd -f server/lighttpd.conf -D diff --git a/server/lighttpd.conf b/server/lighttpd.conf new file mode 100644 index 0000000..181f2c6 --- /dev/null +++ b/server/lighttpd.conf @@ -0,0 +1,62 @@ +var.log_root = env.HOME + "/.local/share/lighttpd" +var.server_root = env.PWD + "/site" +var.state_dir = "/tmp" +var.home_dir = "/tmp" +var.conf_dir = env.PWD + "/server" + +var.cache_dir = env.HOME + "/.cache/lighttpd" +var.socket_dir = home_dir + "/sockets" + +server.modules = ( + "mod_access", + "mod_fastcgi", + "mod_scgi", + "mod_accesslog" +) + +fastcgi.debug = 1 +fastcgi.server = ( + ".cgi" => (( + "host" => "127.0.0.1", + "port" => "9000", + "check-local" => "disable" + ))) + +server.bind = "0.0.0.0" +server.port = 8080 +server.document-root = server_root +server.pid-file = state_dir + "/lighttpd.pid" + +server.errorlog = log_root + "/error.log" +accesslog.filename = log_root + "/access.log" + +server.max-fds = 1024 + +index-file.names += ( + "index.html" +) + +url.access-deny = ( "~", ".inc" ) + +static-file.exclude-extensions = ( ".cgi", ".fcgi", ".scgi" ) + +include conf_dir + "/mime.conf" + +dir-listing.exclude = ( "~$" ) +dir-listing.encoding = "UTF-8" + +## This time we launch the rails application via scgi_rails externally. +## +#$HTTP["host"] == "rails2.example.com" { +# server.document-root = server_root + "/rails/someapp/public" +# server.error-handler-404 = "/dispatch.scgi" +# scgi.server = ( ".scgi" => +# ( "scgi-tcp" => +# ( +# "host" => "127.0.0.1", +# "port" => 9998, +# "check-local" => "disable", +# ) +# ) +# ) +#} diff --git a/server/mime.conf b/server/mime.conf new file mode 100644 index 0000000..6daffd6 --- /dev/null +++ b/server/mime.conf @@ -0,0 +1,1369 @@ +# created by create-mime.conf.pl + +####################################################################### +## +## MimeType handling +## ------------------- +## +## https://redmine.lighttpd.net/projects/lighttpd/wiki/Mimetype_assignDetails + +## +## mimetype.xattr-name +## Set the extended file attribute name used to obtain mime type +## (must also set mimetype.use-xattr = "enable") +## +## Default value is "Content-Type" +## +## freedesktop.org Shared MIME-info Database specification suggests +## user-defined value ("user.mime_type") as name for extended file attribute +#mimetype.xattr-name = "user.mime_type" + +## +## Use extended attribute named in mimetype.xattr-name (default "Content-Type") +## to obtain mime type if possible +## +## Disabled by default +## +#mimetype.use-xattr = "enable" + +## +## mimetype ("Content-Type" HTTP header) mapping for static file handling +## +## The first matching suffix is used. If no mapping is found +## 'application/octet-stream' is used, and caching (etag/last-modified handling) +## is disabled to prevent clients from caching "unknown" mime types. +## +## Therefore the last mapping is: +## "" => "application/octet-stream" +## This matches all extensions and acts as default mime type, and enables +## caching for those. +mimetype.assign = ( + ".sarif.json" => "application/sarif+json", + ".sarif-external-properties.json" => "application/sarif-external-properties+json", + ".1905.1" => "application/vnd.ieee.1905", + ".tar.bz2" => "application/x-gtar-compressed", + ".tar.gz" => "application/x-gtar-compressed", + ".a2l" => "application/A2L", + ".aml" => "application/AML", + ".atf" => "application/ATF", + ".atfx" => "application/ATFX", + ".atxml" => "application/ATXML", + ".cdfx" => "application/CDFX+XML", + ".cea" => "application/CEA", + ".dcd" => "application/DCD", + ".dii" => "application/DII", + ".dit" => "application/DIT", + ".lxf" => "application/LXF", + ".mf4" => "application/MF4", + ".oda" => "application/ODA", + ".odx" => "application/ODX", + ".pdx" => "application/PDX", + ".ez" => "application/andrew-inset", + ".atom" => "application/atom+xml", + ".atomcat" => "application/atomcat+xml", + ".atomdeleted" => "application/atomdeleted+xml", + ".atomsvc" => "application/atomsvc+xml", + ".dwd" => "application/atsc-dwd+xml", + ".held" => "application/atsc-held+xml", + ".rsat" => "application/atsc-rsat+xml", + ".apxml" => "application/auth-policy+xml", + ".xdd" => "application/bacnet-xdd+zip", + ".xcs" => "application/calendar+xml", + ".cbor" => "application/cbor", + ".c3ex" => "application/cccex", + ".ccmp" => "application/ccmp+xml", + ".ccxml" => "application/ccxml+xml", + ".cdmia" => "application/cdmi-capability", + ".cdmic" => "application/cdmi-container", + ".cdmid" => "application/cdmi-domain", + ".cdmio" => "application/cdmi-object", + ".cdmiq" => "application/cdmi-queue", + ".cellml" => "application/cellml+xml", + ".cml" => "application/cellml+xml", + ".1clr" => "application/clr", + ".cmsc" => "application/cms", + ".cpl" => "application/cpl+xml", + ".csrattrs" => "application/csrattrs", + ".mpd" => "application/dash+xml", + ".mpdd" => "application/dashdelta", + ".davmount" => "application/davmount+xml", + ".dcm" => "application/dicom", + ".xmls" => "application/dskpp+xml", + ".dssc" => "application/dssc+der", + ".xdssc" => "application/dssc+xml", + ".dvc" => "application/dvcs", + ".es" => "application/ecmascript", + ".efi" => "application/efi", + ".emma" => "application/emma+xml", + ".emotionml" => "application/emotionml+xml", + ".epub" => "application/epub+zip", + ".exi" => "application/exi", + ".finf" => "application/fastinfoset", + ".fdt" => "application/fdt+xml", + ".pfr" => "application/font-tdpfr", + ".geojson" => "application/geo+json", + ".gpkg" => "application/geopackage+sqlite3", + ".glbin" => "application/gltf-buffer", + ".glbuf" => "application/gltf-buffer", + ".gml" => "application/gml+xml", + ".gz" => "application/gzip", + ".tgz" => "application/gzip", + ".stk" => "application/hyperstudio", + ".ink" => "application/inkml+xml", + ".inkml" => "application/inkml+xml", + ".ipfix" => "application/ipfix", + ".its" => "application/its+xml", + ".jrd" => "application/jrd+json", + ".json" => "application/json", + ".json-patch" => "application/json-patch+json", + ".jsonld" => "application/ld+json", + ".lgr" => "application/lgr+xml", + ".wlnk" => "application/link-format", + ".lostxml" => "application/lost+xml", + ".lostsyncxml" => "application/lostsync+xml", + ".lpf" => "application/lpf+zip", + ".hqx" => "application/mac-binhex40", + ".cpt" => "application/mac-compactpro", + ".mads" => "application/mads+xml", + ".mrc" => "application/marc", + ".mrcx" => "application/marcxml+xml", + ".ma" => "application/mathematica", + ".mb" => "application/mathematica", + ".nb" => "application/mathematica", + ".mml" => "application/mathml+xml", + ".mbox" => "application/mbox", + ".metalink" => "application/metalink+xml", + ".meta4" => "application/metalink4+xml", + ".mets" => "application/mets+xml", + ".h5" => "application/mipc", + ".maei" => "application/mmt-aei+xml", + ".musd" => "application/mmt-usd+xml", + ".mods" => "application/mods+xml", + ".m21" => "application/mp21", + ".mp21" => "application/mp21", + ".doc" => "application/msword", + ".mxf" => "application/mxf", + ".nq" => "application/n-quads", + ".nt" => "application/n-triples", + ".orq" => "application/ocsp-request", + ".ors" => "application/ocsp-response", + ".bin" => "application/octet-stream", + ".class" => "application/octet-stream", + ".dll" => "application/octet-stream", + ".exe" => "application/octet-stream", + ".img" => "application/octet-stream", + ".iso" => "application/octet-stream", + ".lha" => "application/octet-stream", + ".lzh" => "application/octet-stream", + ".so" => "application/octet-stream", + ".opf" => "application/oebps-package+xml", + ".ogx" => "application/ogg", + ".owx" => "application/owl+xml", + ".oxps" => "application/oxps", + ".relo" => "application/p2p-overlay+xml", + ".pdf" => "application/pdf", + ".pem" => "application/pem-certificate-chain", + ".pgp" => "application/pgp-encrypted", + ".sig" => "application/pgp-signature", + ".p10" => "application/pkcs10", + ".p12" => "application/pkcs12", + ".pfx" => "application/pkcs12", + ".p7c" => "application/pkcs7-mime", + ".p7m" => "application/pkcs7-mime", + ".p7s" => "application/pkcs7-signature", + ".p8" => "application/pkcs8", + ".p8e" => "application/pkcs8-encrypted", + ".cer" => "application/pkix-cert", + ".crl" => "application/pkix-crl", + ".pkipath" => "application/pkix-pkipath", + ".pki" => "application/pkixcmp", + ".pls" => "application/pls+xml", + ".ai" => "application/postscript", + ".eps" => "application/postscript", + ".ps" => "application/postscript", + ".provx" => "application/provenance+xml", + ".cw" => "application/prs.cww", + ".cww" => "application/prs.cww", + ".hpub" => "application/prs.hpub+zip", + ".rct" => "application/prs.nprend", + ".rnd" => "application/prs.nprend", + ".rdf-crypt" => "application/prs.rdf-xml-crypt", + ".xsf" => "application/prs.xsf+xml", + ".pskcxml" => "application/pskc+xml", + ".rdf" => "application/rdf+xml", + ".rif" => "application/reginfo+xml", + ".rnc" => "application/relax-ng-compact-syntax", + ".rl" => "application/resource-lists+xml", + ".rld" => "application/resource-lists-diff+xml", + ".rfcxml" => "application/rfc+xml", + ".rs" => "application/rls-services+xml", + ".rapd" => "application/route-apd+xml", + ".sls" => "application/route-s-tsid+xml", + ".rusd" => "application/route-usd+xml", + ".gbr" => "application/rpki-ghostbusters", + ".mft" => "application/rpki-manifest", + ".roa" => "application/rpki-roa", + ".rss" => "application/rss+xml", + ".rtf" => "application/rtf", + ".sarif" => "application/sarif+json", + ".sarif-external-properties" => "application/sarif-external-properties+json", + ".scim" => "application/scim+json", + ".scq" => "application/scvp-cv-request", + ".scs" => "application/scvp-cv-response", + ".spq" => "application/scvp-vp-request", + ".spp" => "application/scvp-vp-response", + ".sdp" => "application/sdp", + ".senmlc" => "application/senml+cbor", + ".senml" => "application/senml+json", + ".senmlx" => "application/senml+xml", + ".senml-etchc" => "application/senml-etch+cbor", + ".senml-etchj" => "application/senml-etch+json", + ".senmle" => "application/senml-exi", + ".sensmlc" => "application/sensml+cbor", + ".sensml" => "application/sensml+json", + ".sensmlx" => "application/sensml+xml", + ".sensmle" => "application/sensml-exi", + ".soc" => "application/sgml-open-catalog", + ".shf" => "application/shf+xml", + ".sieve" => "application/sieve", + ".siv" => "application/sieve", + ".cl" => "application/simple-filter+xml", + ".smi" => "application/smil+xml", + ".smil" => "application/smil+xml", + ".sml" => "application/smil+xml", + ".rq" => "application/sparql-query", + ".srx" => "application/sparql-results+xml", + ".sql" => "application/sql", + ".gram" => "application/srgs", + ".grxml" => "application/srgs+xml", + ".sru" => "application/sru+xml", + ".ssml" => "application/ssml+xml", + ".stix" => "application/stix+json", + ".swidtag" => "application/swid+xml", + ".tau" => "application/tamp-apex-update", + ".auc" => "application/tamp-apex-update-confirm", + ".tcu" => "application/tamp-community-update", + ".cuc" => "application/tamp-community-update-confirm", + ".ter" => "application/tamp-error", + ".tsa" => "application/tamp-sequence-adjust", + ".sac" => "application/tamp-sequence-adjust-confirm", + ".tur" => "application/tamp-update", + ".tuc" => "application/tamp-update-confirm", + ".jsontd" => "application/td+json", + ".odd" => "application/tei+xml", + ".tei" => "application/tei+xml", + ".teiCorpus" => "application/tei+xml", + ".tfi" => "application/thraud+xml", + ".tsq" => "application/timestamp-query", + ".tsr" => "application/timestamp-reply", + ".tsd" => "application/timestamped-data", + ".trig" => "application/trig", + ".ttml" => "application/ttml+xml", + ".gsheet" => "application/urc-grpsheet+xml", + ".rsheet" => "application/urc-ressheet+xml", + ".td" => "application/urc-targetdesc+xml", + ".uis" => "application/urc-uisocketdesc+xml", + ".vxml" => "application/voicexml+xml", + ".vcj" => "application/voucher-cms+json", + ".wasm" => "application/wasm", + ".wif" => "application/watcherinfo+xml", + ".wgt" => "application/widget", + ".wsdl" => "application/wsdl+xml", + ".wspolicy" => "application/wspolicy+xml", + ".xav" => "application/xcap-att+xml", + ".xca" => "application/xcap-caps+xml", + ".xdf" => "application/xcap-diff+xml", + ".xel" => "application/xcap-el+xml", + ".xer" => "application/xcap-error+xml", + ".xns" => "application/xcap-ns+xml", + ".xht" => "application/xhtml+xml", + ".xhtm" => "application/xhtml+xml", + ".xhtml" => "application/xhtml+xml", + ".xlf" => "application/xliff+xml", + ".dtd" => "application/xml-dtd", + ".xop" => "application/xop+xml", + ".xsl" => "application/xslt+xml", + ".xslt" => "application/xslt+xml", + ".mxml" => "application/xv+xml", + ".xhvml" => "application/xv+xml", + ".xvm" => "application/xv+xml", + ".xvml" => "application/xv+xml", + ".yang" => "application/yang", + ".yin" => "application/yin+xml", + ".zip" => "application/zip", + ".zst" => "application/zstd", + ".1km" => "application/vnd.1000minds.decision-model+xml", + ".pwn" => "application/vnd.3M.Post-it-Notes", + ".plb" => "application/vnd.3gpp.pic-bw-large", + ".psb" => "application/vnd.3gpp.pic-bw-small", + ".pvb" => "application/vnd.3gpp.pic-bw-var", + ".sms" => "application/vnd.3gpp2.sms", + ".tcap" => "application/vnd.3gpp2.tcap", + ".imgcal" => "application/vnd.3lightssoftware.imagescal", + ".gph" => "application/vnd.FloGraphIt", + ".zmm" => "application/vnd.HandHeld-Entertainment+xml", + ".kne" => "application/vnd.Kinar", + ".knp" => "application/vnd.Kinar", + ".sdf" => "application/vnd.Kinar", + ".mwf" => "application/vnd.MFER", + ".daf" => "application/vnd.Mobius.DAF", + ".dis" => "application/vnd.Mobius.DIS", + ".mbk" => "application/vnd.Mobius.MBK", + ".mqy" => "application/vnd.Mobius.MQY", + ".msl" => "application/vnd.Mobius.MSL", + ".plc" => "application/vnd.Mobius.PLC", + ".txf" => "application/vnd.Mobius.TXF", + ".qwd" => "application/vnd.Quark.QuarkXPress", + ".qwt" => "application/vnd.Quark.QuarkXPress", + ".qxb" => "application/vnd.Quark.QuarkXPress", + ".qxd" => "application/vnd.Quark.QuarkXPress", + ".qxl" => "application/vnd.Quark.QuarkXPress", + ".qxt" => "application/vnd.Quark.QuarkXPress", + ".twd" => "application/vnd.SimTech-MindMapper", + ".twds" => "application/vnd.SimTech-MindMapper", + ".aso" => "application/vnd.accpac.simply.aso", + ".imp" => "application/vnd.accpac.simply.imp", + ".acu" => "application/vnd.acucobol", + ".acutc" => "application/vnd.acucorp", + ".atc" => "application/vnd.acucorp", + ".swf" => "application/vnd.adobe.flash.movie", + ".fcdt" => "application/vnd.adobe.formscentral.fcdt", + ".fxp" => "application/vnd.adobe.fxp", + ".fxpl" => "application/vnd.adobe.fxp", + ".xdp" => "application/vnd.adobe.xdp+xml", + ".xfdf" => "application/vnd.adobe.xfdf", + ".afp" => "application/vnd.afpc.modca", + ".list3820" => "application/vnd.afpc.modca", + ".listafp" => "application/vnd.afpc.modca", + ".pseg3820" => "application/vnd.afpc.modca", + ".ovl" => "application/vnd.afpc.modca-overlay", + ".psg" => "application/vnd.afpc.modca-pagesegment", + ".ahead" => "application/vnd.ahead.space", + ".azf" => "application/vnd.airzip.filesecure.azf", + ".azs" => "application/vnd.airzip.filesecure.azs", + ".azw3" => "application/vnd.amazon.mobi8-ebook", + ".acc" => "application/vnd.americandynamics.acc", + ".ami" => "application/vnd.amiga.ami", + ".ota" => "application/vnd.android.ota", + ".apk" => "application/vnd.android.package-archive", + ".apkg" => "application/vnd.anki", + ".cii" => "application/vnd.anser-web-certificate-issue-initiation", + ".fti" => "application/vnd.anser-web-funds-transfer-initiation", + ".dist" => "application/vnd.apple.installer+xml", + ".distz" => "application/vnd.apple.installer+xml", + ".mpkg" => "application/vnd.apple.installer+xml", + ".pkg" => "application/vnd.apple.installer+xml", + ".keynote" => "application/vnd.apple.keynote", + ".m3u8" => "application/vnd.apple.mpegurl", + ".numbers" => "application/vnd.apple.numbers", + ".pages" => "application/vnd.apple.pages", + ".swi" => "application/vnd.aristanetworks.swi", + ".artisan" => "application/vnd.artisan+json", + ".iota" => "application/vnd.astraea-software.iota", + ".aep" => "application/vnd.audiograph", + ".package" => "application/vnd.autopackage", + ".bmml" => "application/vnd.balsamiq.bmml+xml", + ".bmpr" => "application/vnd.balsamiq.bmpr", + ".ac2" => "application/vnd.banana-accounting", + ".mpm" => "application/vnd.blueice.multipass", + ".ep" => "application/vnd.bluetooth.ep.oob", + ".le" => "application/vnd.bluetooth.le.oob", + ".bmi" => "application/vnd.bmi", + ".rep" => "application/vnd.businessobjects", + ".tlclient" => "application/vnd.cendio.thinlinc.clientconf", + ".cdxml" => "application/vnd.chemdraw+xml", + ".pgn" => "application/vnd.chess-pgn", + ".mmd" => "application/vnd.chipnuts.karaoke-mmd", + ".cdy" => "application/vnd.cinderella", + ".csl" => "application/vnd.citationstyles.style+xml", + ".cla" => "application/vnd.claymore", + ".rp9" => "application/vnd.cloanto.rp9", + ".c4d" => "application/vnd.clonk.c4group", + ".c4f" => "application/vnd.clonk.c4group", + ".c4g" => "application/vnd.clonk.c4group", + ".c4p" => "application/vnd.clonk.c4group", + ".c4u" => "application/vnd.clonk.c4group", + ".c11amc" => "application/vnd.cluetrust.cartomobile-config", + ".c11amz" => "application/vnd.cluetrust.cartomobile-config-pkg", + ".coffee" => "application/vnd.coffeescript", + ".xodt" => "application/vnd.collabio.xodocuments.document", + ".xott" => "application/vnd.collabio.xodocuments.document-template", + ".xodp" => "application/vnd.collabio.xodocuments.presentation", + ".xotp" => "application/vnd.collabio.xodocuments.presentation-template", + ".xods" => "application/vnd.collabio.xodocuments.spreadsheet", + ".xots" => "application/vnd.collabio.xodocuments.spreadsheet-template", + ".cbz" => "application/vnd.comicbook+zip", + ".cbr" => "application/vnd.comicbook-rar", + ".ic0" => "application/vnd.commerce-battelle", + ".ic1" => "application/vnd.commerce-battelle", + ".ic2" => "application/vnd.commerce-battelle", + ".ic3" => "application/vnd.commerce-battelle", + ".ic4" => "application/vnd.commerce-battelle", + ".ic5" => "application/vnd.commerce-battelle", + ".ic6" => "application/vnd.commerce-battelle", + ".ic7" => "application/vnd.commerce-battelle", + ".ic8" => "application/vnd.commerce-battelle", + ".ica" => "application/vnd.commerce-battelle", + ".icd" => "application/vnd.commerce-battelle", + ".icf" => "application/vnd.commerce-battelle", + ".csp" => "application/vnd.commonspace", + ".cst" => "application/vnd.commonspace", + ".cdbcmsg" => "application/vnd.contact.cmsg", + ".ign" => "application/vnd.coreos.ignition+json", + ".ignition" => "application/vnd.coreos.ignition+json", + ".cmc" => "application/vnd.cosmocaller", + ".clkx" => "application/vnd.crick.clicker", + ".clkk" => "application/vnd.crick.clicker.keyboard", + ".clkp" => "application/vnd.crick.clicker.palette", + ".clkt" => "application/vnd.crick.clicker.template", + ".clkw" => "application/vnd.crick.clicker.wordbank", + ".wbs" => "application/vnd.criticaltools.wbs+xml", + ".ssvc" => "application/vnd.crypto-shade-file", + ".c9r" => "application/vnd.cryptomator.encrypted", + ".c9s" => "application/vnd.cryptomator.encrypted", + ".cryptomator" => "application/vnd.cryptomator.vault", + ".pml" => "application/vnd.ctc-posml", + ".ppd" => "application/vnd.cups-ppd", + ".curl" => "application/vnd.curl", + ".dart" => "application/vnd.dart", + ".rdz" => "application/vnd.data-vision.rdz", + ".dbf" => "application/vnd.dbf", + ".deb" => "application/vnd.debian.binary-package", + ".udeb" => "application/vnd.debian.binary-package", + ".uvd" => "application/vnd.dece.data", + ".uvf" => "application/vnd.dece.data", + ".uvvd" => "application/vnd.dece.data", + ".uvvf" => "application/vnd.dece.data", + ".uvt" => "application/vnd.dece.ttml+xml", + ".uvvt" => "application/vnd.dece.ttml+xml", + ".uvvx" => "application/vnd.dece.unspecified", + ".uvx" => "application/vnd.dece.unspecified", + ".uvvz" => "application/vnd.dece.zip", + ".uvz" => "application/vnd.dece.zip", + ".dsm" => "application/vnd.desmume.movie", + ".dna" => "application/vnd.dna", + ".docjson" => "application/vnd.document+json", + ".scld" => "application/vnd.doremir.scorecloud-binary-document", + ".dpg" => "application/vnd.dpgraph", + ".dpgraph" => "application/vnd.dpgraph", + ".mwc" => "application/vnd.dpgraph", + ".dfac" => "application/vnd.dreamfactory", + ".fla" => "application/vnd.dtg.local.flash", + ".ait" => "application/vnd.dvb.ait", + ".svc" => "application/vnd.dvb.service", + ".geo" => "application/vnd.dynageo", + ".dzr" => "application/vnd.dzr", + ".mag" => "application/vnd.ecowin.chart", + ".nml" => "application/vnd.enliven", + ".esf" => "application/vnd.epson.esf", + ".msf" => "application/vnd.epson.msf", + ".qam" => "application/vnd.epson.quickanime", + ".slt" => "application/vnd.epson.salt", + ".ssf" => "application/vnd.epson.ssf", + ".qca" => "application/vnd.ericsson.quickcall", + ".qcall" => "application/vnd.ericsson.quickcall", + ".espass" => "application/vnd.espass-espass+zip", + ".es3" => "application/vnd.eszigno3+xml", + ".et3" => "application/vnd.eszigno3+xml", + ".asice" => "application/vnd.etsi.asic-e+zip", + ".sce" => "application/vnd.etsi.asic-e+zip", + ".asics" => "application/vnd.etsi.asic-s+zip", + ".tst" => "application/vnd.etsi.timestamp-token", + ".ecigprofile" => "application/vnd.evolv.ecig.profile", + ".ecig" => "application/vnd.evolv.ecig.settings", + ".ecigtheme" => "application/vnd.evolv.ecig.theme", + ".mpw" => "application/vnd.exstream-empower+zip", + ".pub" => "application/vnd.exstream-package", + ".ez2" => "application/vnd.ezpix-album", + ".ez3" => "application/vnd.ezpix-package", + ".dim" => "application/vnd.fastcopy-disk-image", + ".fdf" => "application/vnd.fdf", + ".msd" => "application/vnd.fdsn.mseed", + ".mseed" => "application/vnd.fdsn.mseed", + ".dataless" => "application/vnd.fdsn.seed", + ".seed" => "application/vnd.fdsn.seed", + ".flb" => "application/vnd.ficlab.flb+zip", + ".zfc" => "application/vnd.filmit.zfc", + ".ftc" => "application/vnd.fluxtime.clip", + ".sfd" => "application/vnd.font-fontforge-sfd", + ".fm" => "application/vnd.framemaker", + ".fnc" => "application/vnd.frogans.fnc", + ".ltf" => "application/vnd.frogans.ltf", + ".fsc" => "application/vnd.fsc.weblaunch", + ".oas" => "application/vnd.fujitsu.oasys", + ".oa2" => "application/vnd.fujitsu.oasys2", + ".oa3" => "application/vnd.fujitsu.oasys3", + ".fg5" => "application/vnd.fujitsu.oasysgp", + ".bh2" => "application/vnd.fujitsu.oasysprs", + ".ddd" => "application/vnd.fujixerox.ddd", + ".xdw" => "application/vnd.fujixerox.docuworks", + ".xbd" => "application/vnd.fujixerox.docuworks.binder", + ".xct" => "application/vnd.fujixerox.docuworks.container", + ".fzs" => "application/vnd.fuzzysheet", + ".txd" => "application/vnd.genomatix.tuxedo", + ".ggb" => "application/vnd.geogebra.file", + ".ggs" => "application/vnd.geogebra.slides", + ".ggt" => "application/vnd.geogebra.tool", + ".gex" => "application/vnd.geometry-explorer", + ".gre" => "application/vnd.geometry-explorer", + ".gxt" => "application/vnd.geonext", + ".g2w" => "application/vnd.geoplan", + ".g3w" => "application/vnd.geospace", + ".gmx" => "application/vnd.gmx", + ".kml" => "application/vnd.google-earth.kml+xml", + ".kmz" => "application/vnd.google-earth.kmz", + ".gqf" => "application/vnd.grafeq", + ".gqs" => "application/vnd.grafeq", + ".gac" => "application/vnd.groove-account", + ".ghf" => "application/vnd.groove-help", + ".gim" => "application/vnd.groove-identity-message", + ".grv" => "application/vnd.groove-injector", + ".gtm" => "application/vnd.groove-tool-message", + ".tpl" => "application/vnd.groove-tool-template", + ".vcg" => "application/vnd.groove-vcard", + ".hal" => "application/vnd.hal+xml", + ".bpd" => "application/vnd.hbci", + ".hbc" => "application/vnd.hbci", + ".hbci" => "application/vnd.hbci", + ".kom" => "application/vnd.hbci", + ".pkd" => "application/vnd.hbci", + ".upa" => "application/vnd.hbci", + ".hdt" => "application/vnd.hdt", + ".les" => "application/vnd.hhe.lesson-player", + ".hpgl" => "application/vnd.hp-HPGL", + ".pcl" => "application/vnd.hp-PCL", + ".hpi" => "application/vnd.hp-hpid", + ".hpid" => "application/vnd.hp-hpid", + ".hps" => "application/vnd.hp-hps", + ".jlt" => "application/vnd.hp-jlyt", + ".sfd-hdstx" => "application/vnd.hydrostatix.sof-data", + ".x3d" => "application/vnd.hzn-3d-crossword", + ".mpy" => "application/vnd.ibm.MiniPay", + ".emm" => "application/vnd.ibm.electronic-media", + ".irm" => "application/vnd.ibm.rights-management", + ".sc" => "application/vnd.ibm.secure-container", + ".icc" => "application/vnd.iccprofile", + ".icm" => "application/vnd.iccprofile", + ".igl" => "application/vnd.igloader", + ".imf" => "application/vnd.imagemeter.folder+zip", + ".imi" => "application/vnd.imagemeter.image+zip", + ".ivp" => "application/vnd.immervision-ivp", + ".ivu" => "application/vnd.immervision-ivu", + ".imscc" => "application/vnd.ims.imsccv1p1", + ".igm" => "application/vnd.insors.igm", + ".xpw" => "application/vnd.intercon.formnet", + ".xpx" => "application/vnd.intercon.formnet", + ".i2g" => "application/vnd.intergeo", + ".qbo" => "application/vnd.intu.qbo", + ".qfx" => "application/vnd.intu.qfx", + ".rcprofile" => "application/vnd.ipunplugged.rcprofile", + ".irp" => "application/vnd.irepository.package+xml", + ".xpr" => "application/vnd.is-xpr", + ".fcs" => "application/vnd.isac.fcs", + ".jam" => "application/vnd.jam", + ".rms" => "application/vnd.jcp.javame.midlet-rms", + ".jisp" => "application/vnd.jisp", + ".joda" => "application/vnd.joost.joda-archive", + ".ktr" => "application/vnd.kahootz", + ".ktz" => "application/vnd.kahootz", + ".karbon" => "application/vnd.kde.karbon", + ".chrt" => "application/vnd.kde.kchart", + ".kfo" => "application/vnd.kde.kformula", + ".flw" => "application/vnd.kde.kivio", + ".kon" => "application/vnd.kde.kontour", + ".kpr" => "application/vnd.kde.kpresenter", + ".kpt" => "application/vnd.kde.kpresenter", + ".ksp" => "application/vnd.kde.kspread", + ".kwd" => "application/vnd.kde.kword", + ".kwt" => "application/vnd.kde.kword", + ".htke" => "application/vnd.kenameaapp", + ".kia" => "application/vnd.kidspiration", + ".skd" => "application/vnd.koan", + ".skm" => "application/vnd.koan", + ".skp" => "application/vnd.koan", + ".skt" => "application/vnd.koan", + ".sse" => "application/vnd.kodak-descriptor", + ".las" => "application/vnd.las", + ".lasjson" => "application/vnd.las.las+json", + ".lasxml" => "application/vnd.las.las+xml", + ".lbd" => "application/vnd.llamagraphics.life-balance.desktop", + ".lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml", + ".lca" => "application/vnd.logipipe.circuit+zip", + ".lcs" => "application/vnd.logipipe.circuit+zip", + ".loom" => "application/vnd.loom", + ".123" => "application/vnd.lotus-1-2-3", + ".wk1" => "application/vnd.lotus-1-2-3", + ".wk3" => "application/vnd.lotus-1-2-3", + ".wk4" => "application/vnd.lotus-1-2-3", + ".apr" => "application/vnd.lotus-approach", + ".vew" => "application/vnd.lotus-approach", + ".pre" => "application/vnd.lotus-freelance", + ".prz" => "application/vnd.lotus-freelance", + ".ndl" => "application/vnd.lotus-notes", + ".ns2" => "application/vnd.lotus-notes", + ".ns3" => "application/vnd.lotus-notes", + ".ns4" => "application/vnd.lotus-notes", + ".nsf" => "application/vnd.lotus-notes", + ".nsg" => "application/vnd.lotus-notes", + ".nsh" => "application/vnd.lotus-notes", + ".ntf" => "application/vnd.lotus-notes", + ".or2" => "application/vnd.lotus-organizer", + ".or3" => "application/vnd.lotus-organizer", + ".org" => "application/vnd.lotus-organizer", + ".scm" => "application/vnd.lotus-screencam", + ".lwp" => "application/vnd.lotus-wordpro", + ".sam" => "application/vnd.lotus-wordpro", + ".portpkg" => "application/vnd.macports.portpkg", + ".mvt" => "application/vnd.mapbox-vector-tile", + ".mdc" => "application/vnd.marlin.drm.mdcf", + ".mmdb" => "application/vnd.maxmind.maxmind-db", + ".mcd" => "application/vnd.mcd", + ".mc1" => "application/vnd.medcalcdata", + ".cdkey" => "application/vnd.mediastation.cdkey", + ".mfm" => "application/vnd.mfmp", + ".flo" => "application/vnd.micrografx.flo", + ".igx" => "application/vnd.micrografx.igx", + ".mif" => "application/vnd.mif", + ".mpn" => "application/vnd.mophun.application", + ".mpc" => "application/vnd.mophun.certificate", + ".xul" => "application/vnd.mozilla.xul+xml", + ".3mf" => "application/vnd.ms-3mfdocument", + ".cil" => "application/vnd.ms-artgalry", + ".asf" => "application/vnd.ms-asf", + ".cab" => "application/vnd.ms-cab-compressed", + ".xla" => "application/vnd.ms-excel", + ".xlc" => "application/vnd.ms-excel", + ".xlm" => "application/vnd.ms-excel", + ".xls" => "application/vnd.ms-excel", + ".xlt" => "application/vnd.ms-excel", + ".xlw" => "application/vnd.ms-excel", + ".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12", + ".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12", + ".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12", + ".xltm" => "application/vnd.ms-excel.template.macroEnabled.12", + ".eot" => "application/vnd.ms-fontobject", + ".chm" => "application/vnd.ms-htmlhelp", + ".ims" => "application/vnd.ms-ims", + ".lrm" => "application/vnd.ms-lrm", + ".thmx" => "application/vnd.ms-officetheme", + ".pot" => "application/vnd.ms-powerpoint", + ".pps" => "application/vnd.ms-powerpoint", + ".ppt" => "application/vnd.ms-powerpoint", + ".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12", + ".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12", + ".sldm" => "application/vnd.ms-powerpoint.slide.macroEnabled.12", + ".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", + ".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12", + ".mpp" => "application/vnd.ms-project", + ".mpt" => "application/vnd.ms-project", + ".tnef" => "application/vnd.ms-tnef", + ".tnf" => "application/vnd.ms-tnef", + ".docm" => "application/vnd.ms-word.document.macroEnabled.12", + ".dotm" => "application/vnd.ms-word.template.macroEnabled.12", + ".wcm" => "application/vnd.ms-works", + ".wdb" => "application/vnd.ms-works", + ".wks" => "application/vnd.ms-works", + ".wps" => "application/vnd.ms-works", + ".wpl" => "application/vnd.ms-wpl", + ".xps" => "application/vnd.ms-xpsdocument", + ".msa" => "application/vnd.msa-disk-image", + ".mseq" => "application/vnd.mseq", + ".crtr" => "application/vnd.multiad.creator", + ".cif" => "application/vnd.multiad.creator.cif", + ".mus" => "application/vnd.musician", + ".msty" => "application/vnd.muvee.style", + ".taglet" => "application/vnd.mynfc", + ".line" => "application/vnd.nebumind.line", + ".nebul" => "application/vnd.nebumind.line", + ".bkm" => "application/vnd.nervana", + ".entity" => "application/vnd.nervana", + ".kcm" => "application/vnd.nervana", + ".request" => "application/vnd.nervana", + ".nlu" => "application/vnd.neurolanguage.nlu", + ".nimn" => "application/vnd.nimn", + ".nds" => "application/vnd.nintendo.nitro.rom", + ".sfc" => "application/vnd.nintendo.snes.rom", + ".smc" => "application/vnd.nintendo.snes.rom", + ".nitf" => "application/vnd.nitf", + ".nnd" => "application/vnd.noblenet-directory", + ".nns" => "application/vnd.noblenet-sealer", + ".nnw" => "application/vnd.noblenet-web", + ".ac" => "application/vnd.nokia.n-gage.ac+xml", + ".ngdat" => "application/vnd.nokia.n-gage.data", + ".n-gage" => "application/vnd.nokia.n-gage.symbian.install", + ".rpst" => "application/vnd.nokia.radio-preset", + ".rpss" => "application/vnd.nokia.radio-presets", + ".edm" => "application/vnd.novadigm.EDM", + ".edx" => "application/vnd.novadigm.EDX", + ".ext" => "application/vnd.novadigm.EXT", + ".odc" => "application/vnd.oasis.opendocument.chart", + ".otc" => "application/vnd.oasis.opendocument.chart-template", + ".odb" => "application/vnd.oasis.opendocument.database", + ".odf" => "application/vnd.oasis.opendocument.formula", + ".odg" => "application/vnd.oasis.opendocument.graphics", + ".otg" => "application/vnd.oasis.opendocument.graphics-template", + ".odi" => "application/vnd.oasis.opendocument.image", + ".oti" => "application/vnd.oasis.opendocument.image-template", + ".odp" => "application/vnd.oasis.opendocument.presentation", + ".otp" => "application/vnd.oasis.opendocument.presentation-template", + ".ods" => "application/vnd.oasis.opendocument.spreadsheet", + ".ots" => "application/vnd.oasis.opendocument.spreadsheet-template", + ".odt" => "application/vnd.oasis.opendocument.text", + ".odm" => "application/vnd.oasis.opendocument.text-master", + ".ott" => "application/vnd.oasis.opendocument.text-template", + ".oth" => "application/vnd.oasis.opendocument.text-web", + ".xo" => "application/vnd.olpc-sugar", + ".dd" => "application/vnd.oma.dd+xml", + ".dd2" => "application/vnd.oma.dd2+xml", + ".dcf" => "application/vnd.oma.drm.content", + ".o4a" => "application/vnd.oma.drm.dcf", + ".o4v" => "application/vnd.oma.drm.dcf", + ".dm" => "application/vnd.oma.drm.message", + ".drc" => "application/vnd.oma.drm.rights+wbxml", + ".dr" => "application/vnd.oma.drm.rights+xml", + ".tam" => "application/vnd.onepager", + ".tamp" => "application/vnd.onepagertamp", + ".tamx" => "application/vnd.onepagertamx", + ".tat" => "application/vnd.onepagertat", + ".tatp" => "application/vnd.onepagertatp", + ".tatx" => "application/vnd.onepagertatx", + ".obgx" => "application/vnd.openblox.game+xml", + ".obg" => "application/vnd.openblox.game-binary", + ".oeb" => "application/vnd.openeye.oeb", + ".oxt" => "application/vnd.openofficeorg.extension", + ".osm" => "application/vnd.openstreetmap.data+xml", + ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".sldx" => "application/vnd.openxmlformats-officedocument.presentationml.slide", + ".ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow", + ".potx" => "application/vnd.openxmlformats-officedocument.presentationml.template", + ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template", + ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template", + ".ndc" => "application/vnd.osa.netdeploy", + ".mgp" => "application/vnd.osgeo.mapguide.package", + ".dp" => "application/vnd.osgi.dp", + ".esa" => "application/vnd.osgi.subsystem", + ".oxlicg" => "application/vnd.oxli.countgraph", + ".oprc" => "application/vnd.palm", + ".pdb" => "application/vnd.palm", + ".pqa" => "application/vnd.palm", + ".prc" => "application/vnd.palm", + ".plp" => "application/vnd.panoply", + ".dive" => "application/vnd.patentdive", + ".paw" => "application/vnd.pawaafile", + ".str" => "application/vnd.pg.format", + ".ei6" => "application/vnd.pg.osasli", + ".pil" => "application/vnd.piaccess.application-licence", + ".efif" => "application/vnd.picsel", + ".wg" => "application/vnd.pmi.widget", + ".plf" => "application/vnd.pocketlearn", + ".pbd" => "application/vnd.powerbuilder6", + ".preminet" => "application/vnd.preminet", + ".box" => "application/vnd.previewsystems.box", + ".vbox" => "application/vnd.previewsystems.box", + ".mgz" => "application/vnd.proteus.magazine", + ".psfs" => "application/vnd.psfs", + ".qps" => "application/vnd.publishare-delta-tree", + ".ptid" => "application/vnd.pvi.ptid1", + ".bar" => "application/vnd.qualcomm.brew-app-res", + ".quiz" => "application/vnd.quobject-quoxdocument", + ".quox" => "application/vnd.quobject-quoxdocument", + ".tree" => "application/vnd.rainstor.data", + ".rar" => "application/vnd.rar", + ".bed" => "application/vnd.realvnc.bed", + ".mxl" => "application/vnd.recordare.musicxml", + ".cryptonote" => "application/vnd.rig.cryptonote", + ".link66" => "application/vnd.route66.link66+xml", + ".st" => "application/vnd.sailingtracker.track", + ".SAR" => "application/vnd.sar", + ".scd" => "application/vnd.scribus", + ".sla" => "application/vnd.scribus", + ".slaz" => "application/vnd.scribus", + ".s3df" => "application/vnd.sealed.3df", + ".scsf" => "application/vnd.sealed.csf", + ".s1w" => "application/vnd.sealed.doc", + ".sdo" => "application/vnd.sealed.doc", + ".sdoc" => "application/vnd.sealed.doc", + ".sem" => "application/vnd.sealed.eml", + ".seml" => "application/vnd.sealed.eml", + ".smh" => "application/vnd.sealed.mht", + ".smht" => "application/vnd.sealed.mht", + ".s1p" => "application/vnd.sealed.ppt", + ".sppt" => "application/vnd.sealed.ppt", + ".stif" => "application/vnd.sealed.tiff", + ".s1e" => "application/vnd.sealed.xls", + ".sxl" => "application/vnd.sealed.xls", + ".sxls" => "application/vnd.sealed.xls", + ".s1h" => "application/vnd.sealedmedia.softseal.html", + ".stml" => "application/vnd.sealedmedia.softseal.html", + ".s1a" => "application/vnd.sealedmedia.softseal.pdf", + ".spd" => "application/vnd.sealedmedia.softseal.pdf", + ".spdf" => "application/vnd.sealedmedia.softseal.pdf", + ".see" => "application/vnd.seemail", + ".sema" => "application/vnd.sema", + ".semd" => "application/vnd.semd", + ".semf" => "application/vnd.semf", + ".ssv" => "application/vnd.shade-save-file", + ".ifm" => "application/vnd.shana.informed.formdata", + ".itp" => "application/vnd.shana.informed.formtemplate", + ".iif" => "application/vnd.shana.informed.interchange", + ".ipk" => "application/vnd.shana.informed.package", + ".shp" => "application/vnd.shp", + ".shx" => "application/vnd.shx", + ".sr" => "application/vnd.sigrok.session", + ".mmf" => "application/vnd.smaf", + ".notebook" => "application/vnd.smart.notebook", + ".teacher" => "application/vnd.smart.teacher", + ".pt" => "application/vnd.snesdev-page-table", + ".ptrom" => "application/vnd.snesdev-page-table", + ".fo" => "application/vnd.software602.filler.form+xml", + ".zfo" => "application/vnd.software602.filler.form-xml-zip", + ".sdkd" => "application/vnd.solent.sdkm+xml", + ".sdkm" => "application/vnd.solent.sdkm+xml", + ".dxp" => "application/vnd.spotfire.dxp", + ".sfs" => "application/vnd.spotfire.sfs", + ".sqlite" => "application/vnd.sqlite3", + ".sqlite3" => "application/vnd.sqlite3", + ".smzip" => "application/vnd.stepmania.package", + ".sm" => "application/vnd.stepmania.stepchart", + ".wadl" => "application/vnd.sun.wadl+xml", + ".sxc" => "application/vnd.sun.xml.calc", + ".stc" => "application/vnd.sun.xml.calc.template", + ".sxd" => "application/vnd.sun.xml.draw", + ".std" => "application/vnd.sun.xml.draw.template", + ".sxi" => "application/vnd.sun.xml.impress", + ".sti" => "application/vnd.sun.xml.impress.template", + ".sxm" => "application/vnd.sun.xml.math", + ".sxw" => "application/vnd.sun.xml.writer", + ".sxg" => "application/vnd.sun.xml.writer.global", + ".stw" => "application/vnd.sun.xml.writer.template", + ".sus" => "application/vnd.sus-calendar", + ".susp" => "application/vnd.sus-calendar", + ".scl" => "application/vnd.sycle+xml", + ".sis" => "application/vnd.symbian.install", + ".xsm" => "application/vnd.syncml+xml", + ".bdm" => "application/vnd.syncml.dm+wbxml", + ".xdm" => "application/vnd.syncml.dm+xml", + ".ddf" => "application/vnd.syncml.dmddf+xml", + ".tao" => "application/vnd.tao.intent-module-archive", + ".cap" => "application/vnd.tcpdump.pcap", + ".dmp" => "application/vnd.tcpdump.pcap", + ".pcap" => "application/vnd.tcpdump.pcap", + ".qvd" => "application/vnd.theqvd", + ".ppttc" => "application/vnd.think-cell.ppttc+json", + ".vfr" => "application/vnd.tml", + ".viaframe" => "application/vnd.tml", + ".tmo" => "application/vnd.tmobile-livetv", + ".tpt" => "application/vnd.trid.tpt", + ".mxs" => "application/vnd.triscape.mxs", + ".tra" => "application/vnd.trueapp", + ".frm" => "application/vnd.ufdl", + ".ufd" => "application/vnd.ufdl", + ".ufdl" => "application/vnd.ufdl", + ".utz" => "application/vnd.uiq.theme", + ".umj" => "application/vnd.umajin", + ".unityweb" => "application/vnd.unity", + ".uo" => "application/vnd.uoml+xml", + ".uoml" => "application/vnd.uoml+xml", + ".urim" => "application/vnd.uri-map", + ".urimap" => "application/vnd.uri-map", + ".vmt" => "application/vnd.valve.source.material", + ".vcx" => "application/vnd.vcx", + ".model-inter" => "application/vnd.vd-study", + ".mxi" => "application/vnd.vd-study", + ".study-inter" => "application/vnd.vd-study", + ".vwx" => "application/vnd.vectorworks", + ".istc" => "application/vnd.veryant.thin", + ".isws" => "application/vnd.veryant.thin", + ".VES" => "application/vnd.ves.encrypted", + ".vsc" => "application/vnd.vidsoft.vidconference", + ".vsd" => "application/vnd.visio", + ".vss" => "application/vnd.visio", + ".vst" => "application/vnd.visio", + ".vsw" => "application/vnd.visio", + ".vis" => "application/vnd.visionary", + ".vsf" => "application/vnd.vsf", + ".mms" => "application/vnd.wap.mms-message", + ".sic" => "application/vnd.wap.sic", + ".slc" => "application/vnd.wap.slc", + ".wbxml" => "application/vnd.wap.wbxml", + ".wmlc" => "application/vnd.wap.wmlc", + ".wmlsc" => "application/vnd.wap.wmlscriptc", + ".wtb" => "application/vnd.webturbo", + ".p2p" => "application/vnd.wfa.p2p", + ".wsc" => "application/vnd.wfa.wsc", + ".wmc" => "application/vnd.wmc", + ".m" => "application/vnd.wolfram.mathematica.package", + ".nbp" => "application/vnd.wolfram.player", + ".wpd" => "application/vnd.wordperfect", + ".wqd" => "application/vnd.wqd", + ".stf" => "application/vnd.wt.stf", + ".wv" => "application/vnd.wv.csp+wbxml", + ".xar" => "application/vnd.xara", + ".xfd" => "application/vnd.xfdl", + ".xfdl" => "application/vnd.xfdl", + ".cpkg" => "application/vnd.xmpie.cpkg", + ".dpkg" => "application/vnd.xmpie.dpkg", + ".ppkg" => "application/vnd.xmpie.ppkg", + ".xlim" => "application/vnd.xmpie.xlim", + ".hvd" => "application/vnd.yamaha.hv-dic", + ".hvs" => "application/vnd.yamaha.hv-script", + ".hvp" => "application/vnd.yamaha.hv-voice", + ".osf" => "application/vnd.yamaha.openscoreformat", + ".saf" => "application/vnd.yamaha.smaf-audio", + ".spf" => "application/vnd.yamaha.smaf-phrase", + ".yme" => "application/vnd.yaoweme", + ".cmp" => "application/vnd.yellowriver-custom-menu", + ".zir" => "application/vnd.zul", + ".zirz" => "application/vnd.zul", + ".zaz" => "application/vnd.zzazz.deck+xml", + ".anx" => "application/x-annodex", + ".bcpio" => "application/x-bcpio", + ".torrent" => "application/x-bittorrent", + ".bz2" => "application/x-bzip2", + ".vcd" => "application/x-cdlink", + ".crx" => "application/x-chrome-extension", + ".cpio" => "application/x-cpio", + ".csh" => "application/x-csh", + ".dcr" => "application/x-director", + ".dir" => "application/x-director", + ".dxr" => "application/x-director", + ".dvi" => "application/x-dvi", + ".spl" => "application/x-futuresplash", + ".gtar" => "application/x-gtar", + ".tbz" => "application/x-gtar-compressed", + ".hdf" => "application/x-hdf", + ".jar" => "application/x-java-archive", + ".jnlp" => "application/x-java-jnlp-file", + ".pack" => "application/x-java-pack200", + ".kil" => "application/x-killustrator", + ".latex" => "application/x-latex", + ".cdf" => "application/x-netcdf", + ".nc" => "application/x-netcdf", + ".pl" => "application/x-perl", + ".rpm" => "application/x-rpm", + ".sh" => "application/x-sh", + ".shar" => "application/x-shar", + ".sit" => "application/x-stuffit", + ".sv4cpio" => "application/x-sv4cpio", + ".sv4crc" => "application/x-sv4crc", + ".tar" => "application/x-tar", + ".tcl" => "application/x-tcl", + ".tex" => "application/x-tex", + ".texi" => "application/x-texinfo", + ".texinfo" => "application/x-texinfo", + ".1" => "application/x-troff-man", + ".2" => "application/x-troff-man", + ".3" => "application/x-troff-man", + ".4" => "application/x-troff-man", + ".5" => "application/x-troff-man", + ".6" => "application/x-troff-man", + ".7" => "application/x-troff-man", + ".8" => "application/x-troff-man", + ".man" => "application/x-troff-man", + ".me" => "application/x-troff-me", + ".ms" => "application/x-troff-ms", + ".ustar" => "application/x-ustar", + ".src" => "application/x-wais-source", + ".xpi" => "application/x-xpinstall", + ".xspf" => "application/x-xspf+xml", + ".xz" => "application/x-xz", + ".726" => "audio/32kadpcm", + ".amr" => "audio/AMR", + ".awb" => "audio/AMR-WB", + ".aal" => "audio/ATRAC-ADVANCED-LOSSLESS", + ".atx" => "audio/ATRAC-X", + ".aa3" => "audio/ATRAC3", + ".at3" => "audio/ATRAC3", + ".omg" => "audio/ATRAC3", + ".evc" => "audio/EVRC", + ".evb" => "audio/EVRCB", + ".enw" => "audio/EVRCNW", + ".evw" => "audio/EVRCWB", + ".l16" => "audio/L16", + ".qcp" => "audio/QCELP", + ".smv" => "audio/SMV", + ".aac" => "audio/aac", + ".adts" => "audio/aac", + ".ass" => "audio/aac", + ".ac3" => "audio/ac3", + ".acn" => "audio/asc", + ".au" => "audio/basic", + ".snd" => "audio/basic", + ".dls" => "audio/dls", + ".lbc" => "audio/iLBC", + ".mhas" => "audio/mhas", + ".kar" => "audio/midi", + ".mid" => "audio/midi", + ".midi" => "audio/midi", + ".mxmf" => "audio/mobile-xmf", + ".m4a" => "audio/mp4", + ".mp1" => "audio/mpeg", + ".mp2" => "audio/mpeg", + ".mp3" => "audio/mpeg", + ".mpga" => "audio/mpeg", + ".oga" => "audio/ogg", + ".ogg" => "audio/ogg", + ".opus" => "audio/ogg", + ".spx" => "audio/ogg", + ".psid" => "audio/prs.sid", + ".sid" => "audio/prs.sid", + ".sofa" => "audio/sofa", + ".loas" => "audio/usac", + ".xhe" => "audio/usac", + ".koz" => "audio/vnd.audiokoz", + ".uva" => "audio/vnd.dece.audio", + ".uvva" => "audio/vnd.dece.audio", + ".eol" => "audio/vnd.digital-winds", + ".mlp" => "audio/vnd.dolby.mlp", + ".dts" => "audio/vnd.dts", + ".dtshd" => "audio/vnd.dts.hd", + ".plj" => "audio/vnd.everad.plj", + ".lvp" => "audio/vnd.lucent.voice", + ".pya" => "audio/vnd.ms-playready.media.pya", + ".vbk" => "audio/vnd.nortel.vbk", + ".ecelp4800" => "audio/vnd.nuera.ecelp4800", + ".ecelp7470" => "audio/vnd.nuera.ecelp7470", + ".ecelp9600" => "audio/vnd.nuera.ecelp9600", + ".multitrack" => "audio/vnd.presonus.multitrack", + ".rip" => "audio/vnd.rip", + ".s1m" => "audio/vnd.sealedmedia.softseal.mpeg", + ".smp" => "audio/vnd.sealedmedia.softseal.mpeg", + ".smp3" => "audio/vnd.sealedmedia.softseal.mpeg", + ".aif" => "audio/x-aiff", + ".aifc" => "audio/x-aiff", + ".aiff" => "audio/x-aiff", + ".axa" => "audio/x-annodex", + ".flac" => "audio/x-flac", + ".mka" => "audio/x-matroska", + ".669" => "audio/x-mod", + ".m15" => "audio/x-mod", + ".med" => "audio/x-mod", + ".mod" => "audio/x-mod", + ".mtm" => "audio/x-mod", + ".ult" => "audio/x-mod", + ".uni" => "audio/x-mod", + ".m3u" => "audio/x-mpegurl", + ".wax" => "audio/x-ms-wax", + ".wma" => "audio/x-ms-wma", + ".ram" => "audio/x-pn-realaudio", + ".rm" => "audio/x-pn-realaudio", + ".ra" => "audio/x-realaudio", + ".s3m" => "audio/x-s3m", + ".stm" => "audio/x-stm", + ".wav" => "audio/x-wav", + ".xyz" => "chemical/x-xyz", + ".ttc" => "font/collection", + ".otf" => "font/otf", + ".ttf" => "font/ttf", + ".woff" => "font/woff", + ".woff2" => "font/woff2", + ".exr" => "image/aces", + ".avci" => "image/avci", + ".avcs" => "image/avcs", + ".avif" => "image/avif", + ".hif" => "image/avif", + ".bmp" => "image/bmp", + ".dib" => "image/bmp", + ".cgm" => "image/cgm", + ".drle" => "image/dicom-rle", + ".emf" => "image/emf", + ".fit" => "image/fits", + ".fits" => "image/fits", + ".fts" => "image/fits", + ".gif" => "image/gif", + ".heic" => "image/heic", + ".heics" => "image/heic-sequence", + ".heif" => "image/heif", + ".heifs" => "image/heif-sequence", + ".hej2" => "image/hej2k", + ".hsj2" => "image/hsj2", + ".ief" => "image/ief", + ".jls" => "image/jls", + ".jp2" => "image/jp2", + ".jpg2" => "image/jp2", + ".jfif" => "image/jpeg", + ".jpe" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".jpg" => "image/jpeg", + ".jph" => "image/jph", + ".jhc" => "image/jphc", + ".jpgm" => "image/jpm", + ".jpm" => "image/jpm", + ".jpf" => "image/jpx", + ".jpx" => "image/jpx", + ".jxl" => "image/jxl", + ".jxr" => "image/jxr", + ".jxra" => "image/jxrA", + ".jxrs" => "image/jxrS", + ".jxs" => "image/jxs", + ".jxsc" => "image/jxsc", + ".jxsi" => "image/jxsi", + ".jxss" => "image/jxss", + ".ktx" => "image/ktx", + ".ktx2" => "image/ktx2", + ".png" => "image/png", + ".btf" => "image/prs.btif", + ".btif" => "image/prs.btif", + ".pti" => "image/prs.pti", + ".svg" => "image/svg+xml", + ".svgz" => "image/svg+xml", + ".t38" => "image/t38", + ".tif" => "image/tiff", + ".tiff" => "image/tiff", + ".tfx" => "image/tiff-fx", + ".webp" => "image/webp", + ".wmf" => "image/wmf", + ".psd" => "image/vnd.adobe.photoshop", + ".azv" => "image/vnd.airzip.accelerator.azv", + ".uvg" => "image/vnd.dece.graphic", + ".uvi" => "image/vnd.dece.graphic", + ".uvvg" => "image/vnd.dece.graphic", + ".uvvi" => "image/vnd.dece.graphic", + ".djv" => "image/vnd.djvu", + ".djvu" => "image/vnd.djvu", + ".dwg" => "image/vnd.dwg", + ".dxf" => "image/vnd.dxf", + ".fbs" => "image/vnd.fastbidsheet", + ".fpx" => "image/vnd.fpx", + ".fst" => "image/vnd.fst", + ".mmr" => "image/vnd.fujixerox.edmics-mmr", + ".rlc" => "image/vnd.fujixerox.edmics-rlc", + ".pgb" => "image/vnd.globalgraphics.pgb", + ".ico" => "image/vnd.microsoft.icon", + ".apng" => "image/vnd.mozilla.apng", + ".mdi" => "image/vnd.ms-modi", + ".b16" => "image/vnd.pco.b16", + ".hdr" => "image/vnd.radiance", + ".rgbe" => "image/vnd.radiance", + ".xyze" => "image/vnd.radiance", + ".s1n" => "image/vnd.sealed.png", + ".spn" => "image/vnd.sealed.png", + ".spng" => "image/vnd.sealed.png", + ".s1g" => "image/vnd.sealedmedia.softseal.gif", + ".sgi" => "image/vnd.sealedmedia.softseal.gif", + ".sgif" => "image/vnd.sealedmedia.softseal.gif", + ".s1j" => "image/vnd.sealedmedia.softseal.jpg", + ".sjp" => "image/vnd.sealedmedia.softseal.jpg", + ".sjpg" => "image/vnd.sealedmedia.softseal.jpg", + ".tap" => "image/vnd.tencent.tap", + ".vtf" => "image/vnd.valve.source.texture", + ".wbmp" => "image/vnd.wap.wbmp", + ".xif" => "image/vnd.xiff", + ".pcx" => "image/vnd.zbrush.pcx", + ".ras" => "image/x-cmu-raster", + ".pnm" => "image/x-portable-anymap", + ".pbm" => "image/x-portable-bitmap", + ".pgm" => "image/x-portable-graymap", + ".ppm" => "image/x-portable-pixmap", + ".rgb" => "image/x-rgb", + ".tga" => "image/x-targa", + ".xbm" => "image/x-xbitmap", + ".xpm" => "image/x-xpixmap", + ".xwd" => "image/x-xwindowdump", + ".u8msg" => "message/global", + ".u8dsn" => "message/global-delivery-status", + ".u8mdn" => "message/global-disposition-notification", + ".u8hdr" => "message/global-headers", + ".art" => "message/rfc822", + ".eml" => "message/rfc822", + ".mail" => "message/rfc822", + ".gltf" => "model/gltf+json", + ".glb" => "model/gltf-binary", + ".iges" => "model/iges", + ".igs" => "model/iges", + ".mesh" => "model/mesh", + ".msh" => "model/mesh", + ".silo" => "model/mesh", + ".mtl" => "model/mtl", + ".obj" => "model/obj", + ".stl" => "model/stl", + ".vrml" => "model/vrml", + ".wrl" => "model/vrml", + ".x3db" => "model/x3d+xml", + ".x3dv" => "model/x3d-vrml", + ".x3dvz" => "model/x3d-vrml", + ".dae" => "model/vnd.collada+xml", + ".dwf" => "model/vnd.dwf", + ".dor" => "model/vnd.gdl", + ".gdl" => "model/vnd.gdl", + ".gsm" => "model/vnd.gdl", + ".ism" => "model/vnd.gdl", + ".lmp" => "model/vnd.gdl", + ".msm" => "model/vnd.gdl", + ".rsm" => "model/vnd.gdl", + ".win" => "model/vnd.gdl", + ".gtw" => "model/vnd.gtw", + ".moml" => "model/vnd.moml+xml", + ".mts" => "model/vnd.mts", + ".ogex" => "model/vnd.opengex", + ".pyo" => "model/vnd.pytha.pyox", + ".pyox" => "model/vnd.pytha.pyox", + ".vds" => "model/vnd.sap.vds", + ".usdz" => "model/vnd.usdz+zip", + ".bsp" => "model/vnd.valve.source.compiled-map", + ".vtu" => "model/vnd.vtu", + ".vpm" => "multipart/voice-message", + ".bmed" => "multipart/vnd.bint.med-plus", + ".sgm" => "text/SGML", + ".sgml" => "text/SGML", + ".appcache" => "text/cache-manifest", + ".manifest" => "text/cache-manifest", + ".ics" => "text/calendar", + ".ifb" => "text/calendar", + ".CQL" => "text/cql", + ".css" => "text/css;charset=utf-8", + ".csv" => "text/csv;charset=utf-8", + ".csvs" => "text/csv-schema", + ".soa" => "text/dns", + ".zone" => "text/dns", + ".gff3" => "text/gff3", + ".htm" => "text/html", + ".html" => "text/html", + ".sandboxed" => "text/html-sandboxed", + ".js" => "text/javascript", + ".mjs" => "text/javascript", + ".cnd" => "text/jcr-cnd", + ".markdown" => "text/markdown;charset=utf-8", + ".md" => "text/markdown;charset=utf-8", + ".miz" => "text/mizar", + ".n3" => "text/n3", + ".asc" => "text/plain;charset=utf-8", + ".c" => "text/plain;charset=utf-8", + ".cc" => "text/plain;charset=utf-8", + ".conf" => "text/plain;charset=utf-8", + ".cxx" => "text/plain;charset=utf-8", + ".el" => "text/plain;charset=utf-8", + ".f90" => "text/plain;charset=utf-8", + ".h" => "text/plain;charset=utf-8", + ".hh" => "text/plain;charset=utf-8", + ".hxx" => "text/plain;charset=utf-8", + ".log" => "text/plain;charset=utf-8", + ".pm" => "text/plain;charset=utf-8", + ".spec" => "text/plain;charset=utf-8", + ".text" => "text/plain;charset=utf-8", + ".txt" => "text/plain;charset=utf-8", + ".provn" => "text/provenance-notation", + ".rst" => "text/prs.fallenstein.rst", + ".dsc" => "text/prs.lines.tag", + ".tag" => "text/prs.lines.tag", + ".rtx" => "text/richtext", + ".shaclc" => "text/shaclc", + ".shc" => "text/shaclc", + ".spdx" => "text/spdx", + ".tsv" => "text/tab-separated-values", + ".roff" => "text/troff", + ".t" => "text/troff", + ".tr" => "text/troff", + ".ttl" => "text/turtle", + ".uri" => "text/uri-list", + ".uris" => "text/uri-list", + ".vcard" => "text/vcard", + ".vcf" => "text/vcard", + ".vtt" => "text/vtt", + ".rng" => "text/xml", + ".xml" => "text/xml", + ".xsd" => "text/xml", + ".ent" => "text/xml-external-parsed-entity", + ".dms" => "text/vnd.DMClientScript", + ".a" => "text/vnd.a", + ".abc" => "text/vnd.abc", + ".ascii" => "text/vnd.ascii-art", + ".copyright" => "text/vnd.debian.copyright", + ".sub" => "text/vnd.dvb.subtitle", + ".jtd" => "text/vnd.esmertec.theme-descriptor", + ".flt" => "text/vnd.ficlab.flt", + ".fly" => "text/vnd.fly", + ".flx" => "text/vnd.fmi.flexstor", + ".dot" => "text/vnd.graphviz", + ".gv" => "text/vnd.graphviz", + ".hans" => "text/vnd.hans", + ".hgl" => "text/vnd.hgl", + ".3dm" => "text/vnd.in3d.3dml", + ".3dml" => "text/vnd.in3d.3dml", + ".spo" => "text/vnd.in3d.spot", + ".spot" => "text/vnd.in3d.spot", + ".mpf" => "text/vnd.ms-mediapackage", + ".ccc" => "text/vnd.net2phone.commcenter.command", + ".mc2" => "text/vnd.senx.warpscript", + ".uric" => "text/vnd.si.uricatalogue", + ".sos" => "text/vnd.sosi", + ".jad" => "text/vnd.sun.j2me.app-descriptor", + ".ts" => "text/vnd.trolltech.linguist", + ".si" => "text/vnd.wap.si", + ".sl" => "text/vnd.wap.sl", + ".wml" => "text/vnd.wap.wml", + ".wmls" => "text/vnd.wap.wmlscript", + ".pod" => "text/x-pod", + ".etx" => "text/x-setext", + ".3gp" => "video/3gpp", + ".3gpp" => "video/3gpp", + ".3g2" => "video/3gpp2", + ".3gpp2" => "video/3gpp2", + ".m4s" => "video/iso.segment", + ".mj2" => "video/mj2", + ".mjp2" => "video/mj2", + ".m4v" => "video/mp4", + ".mp4" => "video/mp4", + ".mpg4" => "video/mp4", + ".m1v" => "video/mpeg", + ".m2v" => "video/mpeg", + ".mpe" => "video/mpeg", + ".mpeg" => "video/mpeg", + ".mpg" => "video/mpeg", + ".ogv" => "video/ogg", + ".mov" => "video/quicktime", + ".qt" => "video/quicktime", + ".webm" => "video/webm", + ".uvh" => "video/vnd.dece.hd", + ".uvvh" => "video/vnd.dece.hd", + ".uvm" => "video/vnd.dece.mobile", + ".uvvm" => "video/vnd.dece.mobile", + ".uvu" => "video/vnd.dece.mp4", + ".uvvu" => "video/vnd.dece.mp4", + ".uvp" => "video/vnd.dece.pd", + ".uvvp" => "video/vnd.dece.pd", + ".uvs" => "video/vnd.dece.sd", + ".uvvs" => "video/vnd.dece.sd", + ".uvv" => "video/vnd.dece.video", + ".uvvv" => "video/vnd.dece.video", + ".dvb" => "video/vnd.dvb.file", + ".fvt" => "video/vnd.fvt", + ".m4u" => "video/vnd.mpegurl", + ".mxu" => "video/vnd.mpegurl", + ".pyv" => "video/vnd.ms-playready.media.pyv", + ".nim" => "video/vnd.nokia.interleaved-multimedia", + ".bik" => "video/vnd.radgamettools.bink", + ".bk2" => "video/vnd.radgamettools.bink", + ".smk" => "video/vnd.radgamettools.smacker", + ".s11" => "video/vnd.sealed.mpeg1", + ".smpg" => "video/vnd.sealed.mpeg1", + ".s14" => "video/vnd.sealed.mpeg4", + ".ssw" => "video/vnd.sealed.swf", + ".sswf" => "video/vnd.sealed.swf", + ".s1q" => "video/vnd.sealedmedia.softseal.mov", + ".smo" => "video/vnd.sealedmedia.softseal.mov", + ".smov" => "video/vnd.sealedmedia.softseal.mov", + ".viv" => "video/vnd.vivo", + ".yt" => "video/vnd.youtube.yt", + ".axv" => "video/x-annodex", + ".flv" => "video/x-flv", + ".fxm" => "video/x-javafx", + ".mkv" => "video/x-matroska", + ".mk3d" => "video/x-matroska-3d", + ".asx" => "video/x-ms-asf", + ".wm" => "video/x-ms-wm", + ".wmv" => "video/x-ms-wmv", + ".wmx" => "video/x-ms-wmx", + ".wvx" => "video/x-ms-wvx", + ".avi" => "video/x-msvideo", + ".movie" => "video/x-sgi-movie", + ".ice" => "x-conference/x-cooltalk", + ".sisx" => "x-epoc/x-sisx-app", + "README" => "text/plain;charset=utf-8", + "Makefile" => "text/x-makefile;charset=utf-8", + + # enable caching for unknown mime types: + "" => "application/octet-stream" +) diff --git a/server/modules.conf b/server/modules.conf new file mode 100644 index 0000000..e25538c --- /dev/null +++ b/server/modules.conf @@ -0,0 +1,9 @@ +server.modules = ( +# "mod_rewrite", + "mod_access", +# "mod_auth", +# "mod_authn_file", +# "mod_redirect", +# "mod_setenv", +# "mod_alias", +) diff --git a/site/DejaVuSans.woff2 b/site/DejaVuSans.woff2 new file mode 100644 index 0000000..8437d4e Binary files /dev/null and b/site/DejaVuSans.woff2 differ diff --git a/site/css/math.css b/site/css/math.css new file mode 100644 index 0000000..d111d1f --- /dev/null +++ b/site/css/math.css @@ -0,0 +1,41 @@ +/* +p.author +p.date +p.creator +.title +.subtitle +.todo +.done +.WAITING +.timestamp +.timestamp-kwd +.timestamp-wrapper +.tag +._HOME +.target +.linenr +.code-highlighted +div.outline-N +div.outline-text-N +.section-number-N +.figure-number +.table-number +.listing-number +div.figure +pre.src +pre.example +p.verse +div.footnotes +p.footnote +.footref +.footnum +.org-svg +*/ + +/* +html { + height: 100%; + color: #cccccc; + background-color: hsl(240, 30%, 50%); +} +*/ diff --git a/site/css/style.css b/site/css/style.css new file mode 100644 index 0000000..c8e04e0 --- /dev/null +++ b/site/css/style.css @@ -0,0 +1,166 @@ +@font-face { + font-family: "DejaVuSans"; + src: url(/DejaVuSans.woff2) format("woff2"); +} + +/* Main layout of the page */ + +html { + height: 100%; + background-color: hsl(240, 30%, 50%); + font-family: "DejaVuSans"; +} + +body { + margin: auto; + max-width: 25cm; + min-height: 100%; + display: flex; + flex-direction: column; +} + +body, header { + background-color: hsl(240, 30%, 80%); +} + +header { + text-align: center; +} + +header > * { + margin: 0.5rem auto; +} + +nav { + background-color: hsl(240, 30%, 20%); +} + +nav > ul { + display: flex; + padding: 0; + margin: 0 auto; +} + +nav li { + display: block; + list-style: none; +} + +nav li:hover { + background-color: hsl(240, 30%, 30%); +} + +nav > ul > li:last-child { + margin-left: auto; +} + +nav a { + text-decoration: none; + color: #dddddd; + display: block; + line-height: 2em; + height: 2em; + padding: 0 1em; +} + +main { + padding: 2em; + flex-grow: 1; +} + +footer { + padding: 1em 2em; +} + +/* Other elements */ + +h1, h2, h3, h4, h5, h6 { + text-align: center; +} + +hr { + margin: 0; + margin-top: auto; +} + +figure { + text-align: center; +} + +figure img { + /* max-width: 30em; */ + max-width: 100%; + object-fit: contain; + display: block; + margin-left: auto; + margin-right: auto; +} + +figcaption { + margin-top: 1em; +} + +.equation-container { + display: block; + padding: 1em 2em; + overflow: auto; +} + +.equation-container img { + object-fit: contain; + display: block; + margin: auto; +} + +pre, figure, .equation-container { + margin: 1rem; + padding: 1rem; + box-sizing: border-box; + background-color: hsl(240, 30%, 90%); + border: 1px solid hsl(240, 60%, 50%); + overflow: scroll; + +} + +/* Inline math */ +p > .org-svg { + max-height: 1rem; + display: inline-block; +} + +.article-date { + margin-left: auto; +} + +.link-like, a { + color: #111111; + text-decoration: underline; +} + +/* Source code */ +.src-common-lisp .org-keyword { + color: #3a81c3; + font-weight: bold; +} + +.src-common-lisp .org-builtin { + color: #3a81c3; +} + +.src-common-lisp .org-function-name { + color: #6c3163; + font-weight: bold; +} + +.src-common-lisp .org-doc { + color: #da8b55; +} + +.src-common-lisp .org-comment { + color: #2aa1ae; +} + +/* NOTE: orgmode uses `code` only for inline code */ +code { + background-color: hsl(240, 40%, 90%); +} diff --git a/site/img/programmer_side.png b/site/img/programmer_side.png new file mode 100644 index 0000000..a3f4baa Binary files /dev/null and b/site/img/programmer_side.png differ diff --git a/site/img/programmer_top.png b/site/img/programmer_top.png new file mode 100644 index 0000000..827464e Binary files /dev/null and b/site/img/programmer_top.png differ diff --git a/site/img/prototype1.jpg b/site/img/prototype1.jpg new file mode 100644 index 0000000..33ac569 Binary files /dev/null and b/site/img/prototype1.jpg differ diff --git a/site/img/prototype2_1.jpg b/site/img/prototype2_1.jpg new file mode 100644 index 0000000..64d0786 Binary files /dev/null and b/site/img/prototype2_1.jpg differ diff --git a/site/img/prototype2_2.jpg b/site/img/prototype2_2.jpg new file mode 100644 index 0000000..349c04b Binary files /dev/null and b/site/img/prototype2_2.jpg differ diff --git a/site/robots.txt b/site/robots.txt new file mode 100644 index 0000000..b463ba6 --- /dev/null +++ b/site/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /privacy.html diff --git a/site/sitemap b/site/sitemap new file mode 100644 index 0000000..33c5925 --- /dev/null +++ b/site/sitemap @@ -0,0 +1,26 @@ +https://thomaslabs.org/privacy.html +https://thomaslabs.org/index.html +https://thomaslabs.org/arm/adventures.html +https://thomaslabs.org/programs/index.html +https://thomaslabs.org/z80/index.html +https://thomaslabs.org/z80/prototype1.html +https://thomaslabs.org/z80/spi.html +https://thomaslabs.org/z80/prototype2.html +https://thomaslabs.org/z80/plm.html +https://thomaslabs.org/math/spherical-harmonics.html +https://thomaslabs.org/math/laplace.html +https://thomaslabs.org/math/diff.html +https://thomaslabs.org/math/variation.html +https://thomaslabs.org/math/lagrange.html +https://thomaslabs.org/math/derivatives.html +https://thomaslabs.org/math/cylindrical_coordinates.html +https://thomaslabs.org/math/polar_coordinates.html +https://thomaslabs.org/math/vectors.html +https://thomaslabs.org/math/matrices.html +https://thomaslabs.org/math/integrals.html +https://thomaslabs.org/math/levi_cevita.html +https://thomaslabs.org/math/index.html +https://thomaslabs.org/math/spherical_coordinates.html +https://thomaslabs.org/math/orbit.html +https://thomaslabs.org/math/trigonometry.html +https://thomaslabs.org/math/fft.html diff --git a/site/thomas.pub b/site/thomas.pub new file mode 100644 index 0000000..87b380f --- /dev/null +++ b/site/thomas.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCz+zwLS2s41AFwBAb/sj7B0s9v9OcMWnNQ1QgHlYQOgHHsat1MOdfFGh1Le7qAE+LxXBxsUIUq3sXC3Ui53AKz3lFG1YPGdLA48a156Xxqhb4m4cbuUZ0Gg3hazeEjQXu+451o3ZzmSy6jWx9eGMtE2tzb5RvCwVBZixsWm8DUAzdl1xrGekZXliJcr2EAI5utJHjleNGwWJ5UD6/YL8XDkUhtRIGqNLjXqlQ+J3vMb4xQ3npuPLoCupU3FdqPjhayOiZlCIOEWPr0TNVMi89pb94+9yDrZmfHZhysv+OVei+0qS+qgVSu4chi80VHAdTuY6gJgib2kIxI3uU1Di9pRHGQQ6VNjJtOjfzetK1gGXw7ANUG53NX00wtLfqddfANNFYKSI+iLqls/AxMthSXyFk3W1b5fTTtZoHVqBTl5vtmoVRtr7feEwG9Y9g7xTZLmRK/Nzo9x55Cthga0T8Ibq2dDh4Wfyy8pam8vn99nlHZ7Uw/+AS4/zlpwEloESC3px6eBitbNznsXZnogs1V8vgMXY/nWBJblHl7eGfZaP8yRCwqljuu+NoARyFkcCr+N1hocOQiqGYqTtqeWzs4piIA/36SUj9pzuukzY3tkhamkCX9pUrcCK9vPIIbTY503AjUMvCdgfBZ4bHwgcKJt+5hTWrBArVCeLGaK2lcGw== thomas@alpha 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: -#+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: Prototype 1 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 diff --git a/template.el b/template.el new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3