diff options
| -rw-r--r-- | .gitignore | 4 | ||||
| -rw-r--r-- | Makefile | 15 | ||||
| -rw-r--r-- | math/index.org | 13 | ||||
| -rw-r--r-- | math/integrals.org | 20 | ||||
| -rw-r--r-- | math/math.css | 85 | ||||
| -rw-r--r-- | math_options.org | 39 | ||||
| -rw-r--r-- | options.org | 2 | ||||
| -rwxr-xr-x | publish.el | 197 | ||||
| -rwxr-xr-x | run.sh | 2 | ||||
| -rw-r--r-- | server/lighttpd.conf | 62 | ||||
| -rw-r--r-- | server/mime.conf | 1369 | ||||
| -rw-r--r-- | server/modules.conf | 9 | ||||
| -rw-r--r-- | site/DejaVuSans.woff2 | bin | 0 -> 257460 bytes | |||
| -rw-r--r-- | site/css/math.css | 41 | ||||
| -rw-r--r-- | site/css/style.css | 166 | ||||
| -rw-r--r-- | site/img/programmer_side.png | bin | 0 -> 1827240 bytes | |||
| -rw-r--r-- | site/img/programmer_top.png | bin | 0 -> 2969390 bytes | |||
| -rw-r--r-- | site/img/prototype1.jpg | bin | 0 -> 2988593 bytes | |||
| -rw-r--r-- | site/img/prototype2_1.jpg | bin | 0 -> 3079552 bytes | |||
| -rw-r--r-- | site/img/prototype2_2.jpg | bin | 0 -> 3509082 bytes | |||
| -rw-r--r-- | site/robots.txt | 2 | ||||
| -rw-r--r-- | site/sitemap | 26 | ||||
| -rw-r--r-- | site/thomas.pub | 1 | ||||
| -rw-r--r-- | src/abgabe.org | 101 | ||||
| -rw-r--r-- | src/arm/adventures.org | 58 | ||||
| -rw-r--r-- | src/math/cylindrical_coordinates.org (renamed from math/cylindrical_coordinates.org) | 11 | ||||
| -rw-r--r-- | src/math/derivatives.org (renamed from math/derivatives.org) | 21 | ||||
| -rw-r--r-- | src/math/diff.org | 100 | ||||
| -rw-r--r-- | src/math/fft.org | 141 | ||||
| -rw-r--r-- | src/math/index.org | 19 | ||||
| -rw-r--r-- | src/math/integrals.org | 35 | ||||
| -rw-r--r-- | src/math/lagrange.org | 23 | ||||
| -rw-r--r-- | src/math/laplace.org | 39 | ||||
| -rw-r--r-- | src/math/levi_cevita.org (renamed from math/levi_cevita.org) | 7 | ||||
| -rw-r--r-- | src/math/matrices.org (renamed from math/matrices.org) | 9 | ||||
| -rw-r--r-- | src/math/orbit.org (renamed from math/orbit.org) | 46 | ||||
| -rw-r--r-- | src/math/polar_coordinates.org (renamed from math/polar_coordinates.org) | 10 | ||||
| -rw-r--r-- | src/math/spherical-harmonics.org | 119 | ||||
| -rw-r--r-- | src/math/spherical_coordinates.org (renamed from math/spherical_coordinates.org) | 11 | ||||
| -rw-r--r-- | src/math/trigonometry.org (renamed from math/trigonometry.org) | 12 | ||||
| -rw-r--r-- | src/math/variation.org | 19 | ||||
| -rw-r--r-- | src/math/vectors.org (renamed from math/vectors.org) | 6 | ||||
| -rw-r--r-- | src/physics/lorentz-transformation.org | 62 | ||||
| -rw-r--r-- | src/style.css | 123 | ||||
| -rw-r--r-- | src/svg/fft.tex | 44 | ||||
| -rw-r--r-- | src/z80/prototype1.org | 2 | ||||
| -rw-r--r-- | src/z80/prototype2.org | 4 | ||||
| -rw-r--r-- | template.el | 0 | 
48 files changed, 2571 insertions, 504 deletions
| 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/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/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_options.org b/math_options.org index 5fd9baa..75cde25 100644 --- a/math_options.org +++ b/math_options.org @@ -1,5 +1,34 @@ -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="/style.css" /> -#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="/math.css" /> -#+HTML_HEAD_EXTRA: <meta name="author" content="Thomas Albers Raviola"> -#+HTML_HEAD_EXTRA: <meta name="description" content="Hobbyist electronics, programming and more"> -#+MACRO: date_place $1, $2, {{{date(%B %d\, %Y)}}} +#+html_head: <link rel="stylesheet" type="text/css" href="/css/style.css" /> +#+html_head: <link rel="stylesheet" type="text/css" href="/css/math.css" /> +#+html_head_extra: <meta name="author" content="Thomas Albers Raviola"> +#+html_head_extra: <meta name="description" content="Hobbyist electronics, programming and more"> + +#+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: <link rel="stylesheet" type="text/css" href="/style.css" /> +#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="/css/style.css" />  #+HTML_HEAD_EXTRA: <meta name="author" content="Thomas Albers Raviola">  #+HTML_HEAD_EXTRA: <meta name="description" content="Hobbyist electronics, programming and more">  #+MACRO: date_place $1, $2, {{{date(%B %d\, %Y)}}} @@ -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 "<a href=\"%s\">%s</a>"            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")))) -         :language "en_US" +(defun resize-image (factor input output) +  (let ((percentage (format "%.01f%%" (* 100.0 factor)))) +    (call-process "convert" nil nil nil input "-resize" percentage output))) -         :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) +(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)) -        ("math_html" -         :base-directory "~/Code/websites/thomaslabs/math" -         :publishing-directory "/srv/web/thomaslabs/math" -         :publishing-function thomaslabs-publish-to-html -         :with-toc nil -         :recursive t +(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<div%s class=\"equation-container\">\n%s%s\n</div>" +          ;; ID. +          (if (org-string-nw-p label) (format " id=\"%s\"" label) "") +          ;; Contents. +          (format "<span class=\"equation\">\n%s\n</span>" contents) +          ;; Caption. +          (if (not (org-string-nw-p caption)) "" +            (format "\n<span class=\"equation-label\">(%s)</span>" +                    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" +(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 +         ,@(org-plist-delete default-html-project-properties :html-preamble) -         :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) +         :sitemap-function math-sitemap) -        ("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) +        ("img" +         :base-directory "site/img" +         :publishing-directory "site/img-small" +         :base-extension "png\\|jpg\\|gif" +         :recursive t +         :publishing-function thomaslabs-publish-image) -        ("thomaslabs_media" -         :base-directory "~/Code/websites/thomaslabs/media" -         :base-extension "jpg\\|gif\\|png" -         :publishing-directory "/srv/web/thomaslabs/media" -         :publishing-function org-publish-attachment)          ("thomaslabs" -         :components ("thomaslabs_html" -                      "thomaslabs_media" -                      "thomaslabs_css")) +         :components ("root" "arm" "programs" "z80" "math" "img")))) -        ("thomaslabs_math" -         :components ("math_html" -                      "math_css" -                      "math_svg")))) +;; (plist-put org-format-latex-options :html-foreground "#cccccc") +(plist-put org-format-latex-options :html-foreground "#000000") -(plist-put org-format-latex-options :html-foreground "#cccccc") +(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 "thomaslabs_math" t) - -;; (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))) - -;; (org-publish "thomaslabs" t) -;; (org-publish "math_svg" t) +;; fork ox-html? @@ -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.woff2Binary files differ new file mode 100644 index 0000000..8437d4e --- /dev/null +++ b/site/DejaVuSans.woff2 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.pngBinary files differ new file mode 100644 index 0000000..a3f4baa --- /dev/null +++ b/site/img/programmer_side.png diff --git a/site/img/programmer_top.png b/site/img/programmer_top.pngBinary files differ new file mode 100644 index 0000000..827464e --- /dev/null +++ b/site/img/programmer_top.png diff --git a/site/img/prototype1.jpg b/site/img/prototype1.jpgBinary files differ new file mode 100644 index 0000000..33ac569 --- /dev/null +++ b/site/img/prototype1.jpg diff --git a/site/img/prototype2_1.jpg b/site/img/prototype2_1.jpgBinary files differ new file mode 100644 index 0000000..64d0786 --- /dev/null +++ b/site/img/prototype2_1.jpg diff --git a/site/img/prototype2_2.jpg b/site/img/prototype2_2.jpgBinary files differ new file mode 100644 index 0000000..349c04b --- /dev/null +++ b/site/img/prototype2_2.jpg 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: <meta name="robots" content="noindex"> -#+SETUPFILE: ../options.org - -[[https://thomaslabs.org/shortcoil.m][Quellcode herunterladen]] - -* Ergebnisse des Programms -[[https://thomaslabs.org/media/betrag.png]] - -[[https://thomaslabs.org/media/richtung.png]] - -[[https://thomaslabs.org/media/spulenachse.png]] -* Octave / Matlab Quellcode -#+BEGIN_SRC octave -  clear all; -  close all; -  clc; - -  %% length of the observed region in m -  len = 40e-3; %m -  len = len / 2; %we shall go from -len to +len -  %% number of points in x- and z-direction -  N_space = 50; -  %% number of points for integration along coil -  N_phi = 250; -  %% radius -  R = 5e-3; %m -  %% length -  L = 23e-3; %m -  %% number of windings -  N = 5; -  %% current -  I = 8; %A -  %% vacuumpermeability -  mu0 = 4 * pi * 1e-7; %Vs/Am - -  %% define grid -  z = linspace(-len, len, N_space); %m -  x = linspace(-len, len, N_space); %m - -  %% parameter of coil-wire-path-paramtrisation -  phi = linspace(0, N * 2 * pi, N_phi); -  dphi = phi(2) - phi(1); - -  %% Precalculate cos and sin -  p_sin = sin(phi); -  p_cos = cos(phi); - -  %% loop through all x-z-points -  for iz = 1 : N_space -    for ix = 1 : N_space -      %% r of this x-z-point -      r = [x(ix); 0; z(iz)]; -      B = [0; 0; 0]; - -      %% Riemann sum along the coil -      for ip = 1 : N_phi -        %% Point along the coil -        l = [R * p_cos(ip); R * p_sin(ip); ip * L / N_phi - L / 2]; -        %% Vector tangent to the coil of length dl = R * dphi -        dl = [- R * p_sin(ip); R * p_cos(ip); L / 2 / N / pi]; -        dl = (R * dphi / norm(dl)) * dl; -        %% Vector from the coil to the x-z-point -        rp = r - l; -        %% Add dB -        B = B + (mu0 / 4 / pi) * I * (1 / norm(rp) ^ 3) * cross(dl, rp); -      end - -      B_X(iz, ix) = B(1); -      B_Y(iz, ix) = B(2); -      B_Z(iz, ix) = B(3); -    end -  end - -  figure('Name', 'Richtung der Flußdichte', 'NumberTitle', 'off'); -  quiver(x * 1e3, z * 1e3, B_X ./ sqrt(B_X .^ 2 + B_Z .^ 2), -         B_Z ./ sqrt(B_X .^ 2 + B_Z .^ 2)); -  title('Richtung der Flußdichte') -  xlabel('x [mm]') -  ylabel('z [mm]') -  axis image -  saveas(gca, 'richtung.png') - -  betrag = sqrt(B_X .^ 2 + B_Y .^ 2 + B_Z .^ 2) -  figure('Name', 'Betrag der Flußdichte', 'NumberTitle', 'off'); -  imagesc(x * 1e3, z * 1e3, betrag); -  title('Betrag der Flußdichte'); -  xlabel('x [mm]') -  ylabel('z [mm]') -  colormap(gray); -  colorbar('title', 'B [T]'); -  saveas(gca, 'betrag.png') - -  figure('Name', 'Flußdichte entlang Spulenachse', 'NumberTitle', 'off'); -  B_2 = B_Z(:, round((N_space - 1) / 2)); -  plot(x * 1e3, B_2); -  title('Flußdichte entlang Spulenachse'); -  xlabel('z [mm]'); -  ylabel('Flußdichte [T]'); -  saveas(gca, 'spulenachse.png') -#+END_SRC diff --git a/src/arm/adventures.org b/src/arm/adventures.org new file mode 100644 index 0000000..8712435 --- /dev/null +++ b/src/arm/adventures.org @@ -0,0 +1,58 @@ +#+title: New adventures in ARM +#+author: Thomas Albers Raviola +#+date: 2022-10-10 + +* Backgroud +If you have read my poorly written articles about my Z80 computers, it is +probably no surprise that I ended up playing with ARM processors. + +Way back I bought a Beaglebone Black based on the Sitara AM335x series of armhf +processors. I never really gave it much use as I got more interested in Z80 and +the idea of myself building and soldering my own computer. + +This changed some weeks ago, when while enjoying the free time between semesters +at university I decided to buy a Pinenote from Pine64. I had seen before the +E-Ink tablet of one of my tutors and wanted to replace taking notes on paper for +some kind of digital form. Initially I used my X200T laptop for this end but the +battery life does leave some performance to wish for. + +The alternatives I found in the market shared all the same disadvantages. For +example, the reMarkable tablet of my Tutor seems to work in some kind of +restricted ecosystem with cloud syncing bullshit I don't care about. + +If I am not able to run the software I want, I don't care about the product. + +The Pinenote on the other hand, while still in development and with basically no +finished software ready, is designed to leave complete freedom to the user. + +My plan was to experiment with my Beaglebone, learning to compile a kernel and a +GNU/Linux distro for ARM and then apply this knowledge to port some system to +the Pinenote. + +This however was not at all necessary, as there are already people who have +reverse engineered the DRM driver for the display and documented how to comile a +custom kernel to run on the ARM processor of the Pinenote. This process ended up +being actually really easy. + +I won't claim to be able to explain it better. Nonetheless I have documented (or +will) the process as part of this series of articles about my experiments with +low-level ARM hacking. + +This topic evolved rapidly into an extremly deep rabbit hole. As I still plan to +learn how the boot process for ARM devices work by writing a bare-bones blink +LED code, the Hello World! of low-level programming, for my Beaglebone. I plan +this to be the continuation of me learning low-level stuff as with my Z80. + +I also discovered that the ebook reader I had and that now is left redundant by +my Pinenote also has an ARM processor (I know, not a big surprise). But instead +of writing the system to a eMMC, tolino packed a SD card with the system, +rendering the process of testing other code a trivial one. + +Given my despise for Android and how satisfied I am with my Pinenote, I actually +decided to buy the Pinephone Pro and the Pinebook Pro. When the time comes, I +would like to also write articles on how I port my favourite GNU/Linux distro, +GNU/Guix, to these platforms. Hopefully I won't need to use a damn Android +device ever again and will actually be able to use my devices the way I want. + +Ranting aside, I now invite you to check the writings about the findings in my +new adventures in the ARM world. diff --git a/math/cylindrical_coordinates.org b/src/math/cylindrical_coordinates.org index fab185b..bfb6d57 100644 --- a/math/cylindrical_coordinates.org +++ b/src/math/cylindrical_coordinates.org @@ -1,14 +1,11 @@ -#+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} +#+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\\ @@ -22,6 +19,7 @@ z &= z  \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*} @@ -29,6 +27,7 @@ z &= z  \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}\\ diff --git a/math/derivatives.org b/src/math/derivatives.org index 4d5d4be..b9d431d 100644 --- a/math/derivatives.org +++ b/src/math/derivatives.org @@ -1,10 +1,5 @@ -#+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} +#+title:Table of Derivatives +#+setupfile: ../../math_options.org  * Disclaimer  This site as of now just a technology demonstration and its claims @@ -22,10 +17,10 @@ Let $f$ and $g$ be real valued functions and $c$ some real constant:  * 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)} +\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/math/levi_cevita.org b/src/math/levi_cevita.org index aaa2074..983130e 100644 --- a/math/levi_cevita.org +++ b/src/math/levi_cevita.org @@ -1,12 +1,11 @@ -#+TITLE: The Levi Cevita Symbol -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} +#+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} diff --git a/math/matrices.org b/src/math/matrices.org index a7ba58b..c968f8c 100644 --- a/math/matrices.org +++ b/src/math/matrices.org @@ -1,22 +1,23 @@ -#+TITLE:Matrix Properties -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} +#+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}\\ diff --git a/math/orbit.org b/src/math/orbit.org index 88079a6..5e4040a 100644 --- a/math/orbit.org +++ b/src/math/orbit.org @@ -1,15 +1,11 @@ -#+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} +#+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 @@ -18,76 +14,76 @@ 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*} +{{{beg-eqn}}}  m\ddot{\bm{r}} = - \frac{GMm}{r^3}\bm{r} \Leftrightarrow \ddot{\bm{r}} = - \frac{GM}{r^3}\bm{r} -\end{equation*} +{{{end-eqn}}}  In order to solve this differential equation we first consider the angular  momentum of or object around its orbit. -\begin{equation*} +{{{beg-eqn}}}  \bm{L} = \bm{r} \times m \dot{\bm{r}} -\end{equation*} +{{{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. -\begin{equation*} +{{{beg-eqn}}}  \deriv{\bm{L}}{t} = \dot{\bm{r}} \times m \dot{\bm{r}} + \bm{r} \times m \ddot{\bm{r}} = 0 -\end{equation*} +{{{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. -\begin{align*} +{{{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*} +{{{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*} +{{{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*} +{{{end-align}}}  Our objective is now to solve the equation for $r$, so we multiply both sides by $\bm{r}$: -\begin{align*} +{{{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*} +{{{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*} +{{{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*} +{{{end-align}}}  The last steps are to solve for $r$ -\begin{align*} +{{{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*} +{{{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*} +{{{beg-eqn}}}  r &= \frac{L^2}{GM m^2} \frac{1}{1 + e\cos\theta} -\end{equation*} +{{{end-eqn}}}  * Deriving a physical interpretation of the excentricity of the orbit diff --git a/math/polar_coordinates.org b/src/math/polar_coordinates.org index ff07be3..0d26138 100644 --- a/math/polar_coordinates.org +++ b/src/math/polar_coordinates.org @@ -1,14 +1,11 @@ -#+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} +#+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\\ @@ -27,6 +24,7 @@ y &= r \sin\theta  \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}\\ 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/math/spherical_coordinates.org b/src/math/spherical_coordinates.org index 1c7fd9c..bf3b8d0 100644 --- a/math/spherical_coordinates.org +++ b/src/math/spherical_coordinates.org @@ -1,14 +1,11 @@ -#+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} +#+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\\ @@ -22,6 +19,7 @@ z &= r \cos\theta  \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*} @@ -29,6 +27,7 @@ z &= r \cos\theta  \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}\\ diff --git a/math/trigonometry.org b/src/math/trigonometry.org index 3e81eeb..d2afc32 100644 --- a/math/trigonometry.org +++ b/src/math/trigonometry.org @@ -1,7 +1,5 @@ -#+TITLE:Trigonometric identities -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} +#+title:Trigonometric identities +#+setupfile: ../../math_options.org  * Disclaimer  This site as of now just a technology demonstration and its claims @@ -14,27 +12,32 @@ they are)  &\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)\\ @@ -42,6 +45,7 @@ they are)  &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)\\ 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/math/vectors.org b/src/math/vectors.org index 49d8132..ceab691 100644 --- a/math/vectors.org +++ b/src/math/vectors.org @@ -1,7 +1,5 @@ -#+TITLE:Cross Product -#+SETUPFILE: ../math_options.org -#+LATEX_HEADER: \usepackage{bm} -#+LATEX_HEADER: \usepackage{mathtools} +#+title:Cross Product +#+setupfile: ../../math_options.org  * Disclaimer  This site as of now just a technology demonstration and its claims diff --git a/src/physics/lorentz-transformation.org b/src/physics/lorentz-transformation.org new file mode 100644 index 0000000..a5e3c8f --- /dev/null +++ b/src/physics/lorentz-transformation.org @@ -0,0 +1,62 @@ +#+TITLE:Lorentz Transformation +#+SETUPFILE: ../math_options.org +#+LATEX_HEADER: \usepackage{bm} +#+LATEX_HEADER: \usepackage{mathtools} +#+LATEX_HEADER: \newcommand{\dcoff}[1]{\frac{\text{d}}{\text{d}x} #1} +#+LATEX_HEADER: \newcommand{\sdcoff}[1]{\frac{\text{d}#1}{\text{d}x}} +#+LATEX_HEADER: \newcommand{\deriv}[2]{\frac{\text{d}}{\text{d}x} #1 &= #2} + +As a direct consequence of the second postulate, it follows, that for 2 events +in spacetime describing the propagation of a beam of light it must hold + +\begin{equation*} +c^2(t_2 - t_1)^2 - (x_2 - x_1)^2 - (y_2 - y_1)^2 - (z_2 - z_1)^2 = 0 +\end{equation*} + +To abbreviate we introduce the following expressions + +\begin{align*} +t &= t_2 - t_1\\ +x &= x_2 - x_1\\ +y &= y_2 - y_1\\ +z &= z_2 - z_1 +\end{align*} + +Furthermore, because this must also hold in any other reference frame, for +example $\Sigma'$, we have: + +\begin{equation*} +c^2t^2 - x^2 - y^2 - z^2 = c^2{t'}^2 - {x'}^2 - {y'}^2 - {z'}^2 = 0 +\begin{end*} + +We introducing the Minkowski metric $\eta$ and rewrite this using matrices + +\begin{equation*} +\sum_{\mu\nu} \eta_{\mu\nu} {x'}_\mu {x'}_\nu = \sum_{\alpha\beta} \eta_{\alpha\beta} x_\alpha x_\beta +\end{equation*} + +Let us now consider some inertial system $\Sigma'$ that is moving away in +respect to $\Sigma$ with some constant speed $v$ in the x direction. We are +interested in the transformation that will allow us to convert the coordinates +between this 2 systems. + +Further development of our last equation yields: + +\begin{align*} +\sum_{\alpha\beta} \eta_{\alpha\beta} x_\alpha x_\beta &= \sum_{\mu\nu} \eta_{\mu\nu} \left(\sum_\alpha \Lambda_{\mu\alpha} x_\alpha \right) \left(\sum_\beta \Lambda_{\nu\beta} x_\beta \right)\\ +&= \sum_{\mu\nu\alpha\beta} \eta_{\mu\nu} \Lambda_{\mu\alpha} \Lambda_{\nu\beta} x_\alpha x_\beta +\end{align*} + +From this we notice + +\begin{align*} +\eta_{\alpha\beta} &= \sum_{\mu\nu} \eta_{\mu\nu} \Lambda_{\mu\alpha} \Lambda_{\nu\beta}\\ +&=\sum_{\mu\nu} (\Lambda^\text{T})_{\alpha\mu} \eta_{\mu\nu} \Lambda_{\nu\beta}\\ +&=\sum_{\nu} \left(\sum_\mu (\Lambda^\text{T})_{\alpha\mu} \eta_{\mu\nu}\right) \Lambda_{\nu\beta} +\end{align*} + +And thus + +\begin{equation*} +\eta = \Lambda^\text{T}\eta\Lambda +\end{equation*} diff --git a/src/style.css b/src/style.css deleted file mode 100644 index bd731ad..0000000 --- a/src/style.css +++ /dev/null @@ -1,123 +0,0 @@ -html { -    height: 100%; -    color: #cccccc; -    background-color: hsl(240, 30%, 10%);/*#452b41*/ /*#2c314b*/ -} - -body { -    margin: auto; -    max-width: 64em; -    min-height: 100%; -    display: flex; -    flex-direction: column; -    background-color: hsl(240, 30%, 15%); -} - -nav { -    /*#3a2438*/ /*#2a3257*/ -    background-color: hsl(240, 30%, 20%); -} - -nav > ul { -    display: flex; -    margin: 0 auto; -} - -nav > ul > li:last-child { -    margin-left: auto; -} - -nav ul { -    padding: 0; -} - -nav li { -    margin: 2px; -    display: block; -    list-style: none; -} - -nav li:hover { -    background-color: hsl(240, 30%, 30%); -} - -nav .submenu:hover .submenu-contents { -    display: block; -} - -nav .submenu-contents { -    display: none; -    position: absolute; -    z-index: 10; -    background-color: red; -} - -nav a, -nav span { -    text-decoration: none; -    color: #dddddd; -    display: block; -    line-height: 2em; -    height: 2em; -    margin-left: 1em; -    margin-right: 1em; -} - -nav span { -    cursor: pointer; -} - -.article-date { -    margin-left: auto; -} - -.link-like, a { -    color: #eeeeee; -    text-decoration: underline; -} - -.rel-header { -    padding: 1em 2em 1em 2em; -} - -header { -    background-color: hsl(240, 30%, 10%); -} - -header p { -    text-align: center; -    margin-bottom: 0.15em; -} - -header p ~ h1 { -    margin-top: 0.15em; -} - -main { -    padding: 2em 2em 2em 2em; -    flex-grow: 1; -} - -hr { -    margin: 0; -    margin-top: auto; -} - -footer { -    padding: 1em 2em 1em 2em; -} - -figure { -    text-align: center; -} - -figure img { -    max-width: 30em; -    object-fit: contain; -    display: block; -    margin: auto; -} - -h1, h2, h3, h4, h5, h6 { -    text-align: center; -} diff --git a/src/svg/fft.tex b/src/svg/fft.tex new file mode 100644 index 0000000..82af9df --- /dev/null +++ b/src/svg/fft.tex @@ -0,0 +1,44 @@ +\documentclass{standalone} + +\usepackage{tikz} + +\begin{document} +\begin{tikzpicture} +  \foreach \y in {7,6,...,0} { +    \draw (0,\y) node {$\xi_\y$}; +    \draw (.3, \y) -- (.7,\y); +    \draw (6.4, \y) -- (7, \y); +    \draw (7.05, \y) circle (0.05); +    \draw (.25, \y) circle (0.05); + +    \draw (8.95, \y) -- (10.25, \y); +    \draw (9.25,\y+0.3) node {$W_N^\y$}; +    \draw (10.3, \y) circle (0.05); +    \draw (10.7,\y) node {$x_\y$}; +  } + +  \foreach \y in {0, 1, 2, 3} { +    \draw (6.8,\y+4+0.3) node {$O_\y$}; +    \draw (6.8,\y+0.3) node {$E_\y$}; +    \draw[->,red] (7.1, \y) -- (8.95, \y+4); +    \draw[->, blue] (7.1, \y+4) -- (8.95, \y); + +    \draw[->, blue] (7.1, \y) -- (8.95, \y); +    \draw[->, red] (7.1, \y+4) -- (8.95, \y+4); + +    \draw[->] (.7, 2 * \y) -- (2.2, \y); +    \draw (2.25, \y + 4) circle (0.05); +    \draw (2.3, \y + 4) -- (3, \y + 4); + +    \draw[->] (.7, 2 * \y + 1) -- (2.2, \y+4); +    \draw (2.25, \y) circle (0.05); +    \draw (2.3, \y) -- (3, \y); +  } + +  \draw (3, -.2) rectangle  (6.4, 3.2); +  \draw (3, 3.8) rectangle  (6.4, 7.2); +  \draw (.7, 8) rectangle  (9.7, -1); +  \draw (4.6, 1.5) node {$N/2$-FFT}; +  \draw (4.6, 5.5) node {$N/2$-FFT}; +\end{tikzpicture} +\end{document} diff --git a/src/z80/prototype1.org b/src/z80/prototype1.org index 23adec1..c9e8b0a 100644 --- a/src/z80/prototype1.org +++ b/src/z80/prototype1.org @@ -50,7 +50,7 @@ managed to get all the components and build my first working  prototype. It did not look beautiful, but it was functional.  #+CAPTION: Prototype 1 together with its serial terminal -[[https://thomaslabs.org/media/prototype1.jpg]] +[[/img/prototype1.jpg]]  I wasn't satisfied with this prototype though. It was not what I had  envisioned. I wanted to have a pocket computer and this was nothing diff --git a/src/z80/prototype2.org b/src/z80/prototype2.org index ba19bd7..549c18e 100644 --- a/src/z80/prototype2.org +++ b/src/z80/prototype2.org @@ -9,7 +9,7 @@ m4_define(`_REL_HEADER', `Next: <ahref="/z80/prototype1.html">Prototype 1</a> Up  {{{date_place(Bremen, Germany)}}}  #+CAPTION: Prototype 2 -[[https://thomaslabs.org/media/prototype2_1.jpg]] +[[/img/prototype2_1.jpg]]  Because when moving to Bremen, I wasn't able to take my old Prototype  with me, I had to build a new one. This time though, I needed @@ -41,7 +41,7 @@ Prototype 2  - Dual serial ports with complete modem control lines  #+CAPTION: Prototype 2 together with screen -[[https://thomaslabs.org/media/prototype2_2.jpg]] +[[/img/prototype2_2.jpg]]  It didn't take long until Prototype 2 became incapable of fulfilling  its task. Once it was clear, which parts would definitely be part of diff --git a/template.el b/template.el new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/template.el | 
