diff --git a/.gitignore b/.gitignore index 150f2f9..c73058c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -content/.hugo_build.lock -content/public/ -content/resources/ +content/snippets.md + diff --git a/Dockerfile b/Dockerfile index 13306da..fa2a492 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM nginx:alpine3.21 COPY ./content /usr/share/nginx/html +RUN cd /usr/share/nginx/html && ./snippet-indexer.sh + # ------------ # prepare for rootless operations RUN \ diff --git a/attic/public/082071E0415E0A2D87A2385B5159E88B93B67538.txt b/attic/public/082071E0415E0A2D87A2385B5159E88B93B67538.txt new file mode 100644 index 0000000..f21394f --- /dev/null +++ b/attic/public/082071E0415E0A2D87A2385B5159E88B93B67538.txt @@ -0,0 +1,75 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +3Ik8eKMcjlz9npo= +=XG+P +-----END PGP PUBLIC KEY BLOCK----- diff --git a/attic/public/2016-10-13_1.png b/attic/public/2016-10-13_1.png new file mode 100644 index 0000000..66c881e Binary files /dev/null and b/attic/public/2016-10-13_1.png differ diff --git a/attic/public/2016-10-13_works.png b/attic/public/2016-10-13_works.png new file mode 100644 index 0000000..04e7cfd Binary files /dev/null and b/attic/public/2016-10-13_works.png differ diff --git a/attic/public/2016-10-13_works_not.png b/attic/public/2016-10-13_works_not.png new file mode 100644 index 0000000..a6f06c8 Binary files /dev/null and b/attic/public/2016-10-13_works_not.png differ diff --git a/attic/public/20180430110848869_0001.jpg b/attic/public/20180430110848869_0001.jpg new file mode 100644 index 0000000..b8a8f71 Binary files /dev/null and b/attic/public/20180430110848869_0001.jpg differ diff --git a/attic/public/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt b/attic/public/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt new file mode 100644 index 0000000..fade889 --- /dev/null +++ b/attic/public/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt @@ -0,0 +1,88 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGJ1FZQBEACtK3mLl0GqsFTMfLkk/LlzalxmcKvkFg2NNF7YCv9ev2l+sg42 +HT8iHh6MzEpgfApYWfHxc6nPzZ1NOb8zLO3TByPERp9lNlysYlUh0l3Fwn0lULmf +fIu230RW9oq4X50STDRvYSRSXDuuXJzOz3wT1PARdhPl8XB9c4gpgN0Uyq+oxxC1 +KLmPdmpUEcla3fSwe29Jp/OhjtHP8nvBuaA/m3sLm70IMTADqd8pJNsaByVBXFqK +w5lnSTW4Vy3UllyNIDzyEN4S2nEQellg3g5gUzvzv8yKZTtXXwuIenSWesny9/pI +1mN5eJh9sapH+GvsbYXKd3+QAWMi+IYsyjyIE0ZPMokarn+HM9FIago6JcF4k/hk +dbamjZgXLYc66N+VZJ1id3Htjc6RZ1BmsXNFHFfWh5jyOp5GkCa/zh6SfFy2XYA3 +udcxKEXRyk1Hu9CY9y3hQb8We8zBCihJeX0st3gAfif9BI42UmvLrQ8qqtshOPH4 +pblGwupRYIJKy+1z2Oq33Aj+P8xkfVBrmmpN++2J4Ev7wzHVR5Tyfvgw3/qFbxgG +s3c3mOPfRknrxUlWUcmSs5hyCRhWZ52L+6hbJg30dBAYOB4I5Yl0nDVaqyL84wEh +f93oNiouMdWbFSXAPbR/hZfEwg8laUNscRfa+fZ+XaIhv6Jb+dSz4T//gwARAQAB +tDZXb2xmZ2FuZyBIb3R0Z2Vucm90aCA8d29sZmdhbmcuaG90dGdlbnJvdGhAaWNs +b3VkLmNvbT6JAlEEEwEIADsWIQQjBqpHptelNLG3RGyDbp4RkqaxMgUCYnUVlAIb +AwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRCDbp4RkqaxMqG3D/9rupMu +40fpIWTSECMwV2FBIhHsRuv3w90N9n2QSfJy1oVl5Sw/SGd8kCRHMz4I+CgSGW7B +uOQ7l9web/UMbwjOu7xIMD/5/eUkDWQiV/eq/imIhrBepioyN3xTxLKh5CRbfL1e +fkFE7bdTeN6JIFFua6Bjn6IphuPX/ooDC6HjoaV+8O1W15oSXBxdJhefuZGG9I6t +0dPk3/llQ2wMijweZGVJx4YxadNSPxC4M4QXU6mhQ1Y+BpkiM5fasFbcvGFH2UQu +5qipf6qHiqvI9qibnaAykZU34xBaz3CQKvlIjZYMcquSCqjO7lU9XGd33f5yyuKC +vD0tSPyoSnkneQhlFPHZlZ72Gr/SmH9PlEgPNEZ6oq61mGCVP9yrP97wDYWxOAMV +bgwXjekmvFn5g4poOGBsXI2bfVK5NH0kFPWe/2helVtA51avxebQr6UJS6096xo3 +jpfHCeICBhO0oH1tuf9sX/w7fcCwQHceLCtA45lfqOQ2CcSe92+dIh9edcTGbJAw +xIcl0nwZ7MtxVt24S+r+1KnvwPheKlP8s0wj73nSQDmg7JJkWAZYpXmWNvBWGD55 +K0fHxGUzqYiEPJzaE2zdNzv7IpxVB0ctx0dpNAS1nT9yuPqx3rp1SReCM70Gdkj+ +y4KiqGlHLGsBYZwrOcaIO/eIqN4LPppo5PJXMbQvV29sZmdhbmcgSG90dGdlbnJv +dGggPHcuaG90dGdlbnJvdGhAa3JvaG5lLmNvbT6JAlEEEwEIADsWIQQjBqpHptel +NLG3RGyDbp4RkqaxMgUCZNoBlQIbAwULCQgHAgIiAgYVCgkICwIEFgIDAQIeBwIX +gAAKCRCDbp4RkqaxMtFJD/90/lij4qgww1wHd0mLm1fmom9XMiX5fuLHeVXb94dq +5+mqBcZMUA+O4eln3tX4Xu5CO1BV/asHDEp42uDWrzGdwOdUfK/dY1v6As/FDAuw +7FHRcekCEHuwrIYtoIOw2Dvz3YFPJpWIjfQALZVl88t0ddGBwuT55PF5J/9tYFZZ +3wPaW66XrOLOda4VkENWO/gfxI3w3hB+weXgkZip5bo4tU65aeQ+r11BMdun+0oN +esfFJCzKov/3wJZlTdkn8KE71d6M+hsxrPteccWH1MK5RFSPVY55cbDxgwoWMI6l +B7qpHQb7Z7xfoGD4oNh9YWKqwOYH/QuwfN+4t63KOrnJuRX8ICD8IwmbW5GnSJOU +I9c4H8ZrveG++7JoHeV8yZ+KrtlqRdNnjlGSCa4tWasfacr6y+ABuLANdmmXWHW8 +QoI/heLAvbNfOsSkC2+K8oUGqalP9Ks2TGfEmAjPs5ZSi2o5gjhHTHT8Cz/zB4ab +onbfWTOEZu5XPqA1aoRuvQot/oc6gF5R7AffSiH8WDzVFaIyjvA2O6zjd7QuulwZ +dmXsoc9wJqvmGIrHU462MM1RxHAq9IiytpfytXehJEUl/R4PyLMNPeWboIzt4BjU +H18Y1Q5TQp8CAdLOPm4iny/3UgYsHEN9YOpkFzUlY6HLMoX93o+Bq6pJIxMPcFDx +9rkCDQRidRWUARAA4FqU4sA9r9TyH4BDAevwYz4Xrw9qVeiO5elNPBEl3IKohBvX +0fEcab1T/uSv4LxcN+qnFSDQm4smMR+kzEcKmD6WEYQcMsnQyTDMxoNBRU7nEAIV +Z8URGZObKA8oZcEFLprL5pNP/jWdA8UwNmeCSUsLw/UNhpuXGug/51KHZW+6rOP9 +ujbH3zJk2J4NzUCymIOkYNE8lelkYh68XqJ2ljngqmLgeLBuYYpr1CdHG4OmL7PN +kMuHY4qWt55iIuhm6Ty6orAtRcvER9Y99pKmO8Nvou1/cQ/lNmH/T2Bi4j2ecswq +oZx9WfVNvzEFHNY8x51ij3c1f2DMTqXAkR6S2Ou15idwe3V1T45QA1QNU/kiL4cu ++1GVfa4VcggjYn2+qkhFhsDfAgW23lN8+IUpDZ8Tb9kZ1Ju1EMkT5S/nFgt1N+KJ +qhmTGW+R1F4Wd9ba8+tT4l5cv5oDiisBgdAtH9VOErR3OPx0fIGO10I/OeEdqM5w +G2YMv8YgmTtJGSfYQkN67bdTah5B3ffp9kD8lSIAmDKBGsbPbpiSpAK22FbFlyHR +ziXJxB9lJP6fP/yXtivGFvjwEPxlysBEdPqV4+Bv3Dgp40HBCFpVAwLmGDn6kRu4 +ZAuh/mS8junJjigeYEUE2n9SWp2xS+JQDFByP+CwffxNB4SCIMZ7JrMond0AEQEA +AYkCNgQYAQgAIBYhBCMGqkem16U0sbdEbINunhGSprEyBQJidRWUAhsgAAoJEINu +nhGSprEysBkP/2c+RoEkGek1w3LmdOyWMzs/mjytFaJLtQde81OO6S4MsPcMmkBF +62HsZ75sKTXVq4UzmZuHNa8gW+b570hHbWFb7pA8f2DOIwugxTRcVKtloQDPqjO6 +pKLowXmuv8EKIhB6fvIU4Ov2J/fzpdDdrM5GlLyh3dn4v8KlfWFopMsEPASOnuWz +6kJJzO+6fk/ee9qVfEsYl2kaZmVA4pmNboGPQfACA3BgH1EXTHwubgJBwcrWCLmk +UW/Uew6vhfGbm+VWjTmVdW5bIOd1Pn3cjK6MqKhT6QFt9bucA6GonEKSjXMM+D/e +htgrr8nOM+1crHbRDuX1dxOkqI1KxIdhHk0RrRky3qfFpDjYXGvao7o4r5AbahzS +UlknLZbzGeqvm/0SAS+WhufVipM3XSpbm/dHWv4gQeqYOhTfb05W6RUM1YbhkdJo +iHtZwlQgiKQ1/98rPHJxELQ3EexYVAyWNEo9o6TnsUjSQSpDFKdcdYG7bVBBP5Ez +0zaXKB7NtWkgUK/2BI2XjZVxc57IhJaLoSoZnQbbVhCtQdts+TXqNJoIfqcS6mcn +daBLUWE99QsJg5S/41HfWn9xQUW+uyDFhDMax0Ka7tJug2/1h+DblaZ/DuM5+cof +r47r96mDrI3phAI3rH30anJxGeQe7hq4qv6ZPoZp5Grt5A5tMdJJqTUduQINBGJ1 +FZQBEADiKyRl0nRtbgeABgBGwzGR0vm9QjTcZg6RrXDzl837C4vCMcJlvLtx00+J +xQiT1Jvj/YFuDbNup9XkDHGmpx8zFWkjz7i43943VclLzj+M13vP0jOreoiCtyrm +23ZMW0lsxR2DyaEo3pouvvLW5lmZMtmMpq4C7IE8vhqmh8srKjsUtI3UJJRHDA1C +lONtxwULMvfIPHocpAzDoAH/dYbphRP6yscmIDJzDgkrifqQrPns7TeD8qCnRU6z +zmT30EzlwzTL1Ai7LqEj3iDFI+XAhMr5aJ5pw1PboxlM/5zz+0XG26Kr9OuvYdTS +UM3ekoMh0ZESJa1ZQccNL2j7DOKJ2nzVjByOHMrGo99mtRNhtrUzcYtTb9SDG0bQ +Sbd/pVQDZdLsp4dJmdgHXw8E7VbAIj3k6ojlRMdqqu0M0k6EZ+SuT/IXoq4Z5KTI +6I+zq1b+wpOyjaUtZeQO4lnMKnxOn/Kbxa6YdX2zmbpY51W+HnJKzF5Qu9YP4qnG +X/OmKRda9f1NZSAlBeL5kRNb+ErY4KBwxJUp6Jzxu2G3e8082twMD2mUpdpSLFA0 +uZuuI70fDc6jCg8eX3MpxbirjjlX7EA2TqT0Ft2GhWYFROYuRhx0HPR5ttff1kLY +m4fM7ML4o8Lj4Yin0tnqZSTElHIuvnjQ6lNYvr04crCNiQlxJwARAQABiQI2BBgB +CAAgFiEEIwaqR6bXpTSxt0Rsg26eEZKmsTIFAmJ1FZQCGwwACgkQg26eEZKmsTKc +4hAAqw37X7+KVzleyZrNFGxc0BgBdQU7egtXZ5d+EDxnbwEtgOJ/cUc3dD/yHIqG +1+Xc0erchjYDjhdMu5rRTHmz2TEE/BRm/6F+ynii7haAifOdA2zG+KGEaLaL6Ze2 +3ZJc1LYIKdiV9H9s2mjSH5qYzUSKLAKVJoRqVLKUO/lxW/mhSgv5L9VqVutnyIAB +nxEGtb/Job7QPWloxOnVoWTP2g3vlI/jQu1z992PW614RHrbsn+2oBpB9JzgAeqt +lk6kXsezmgHHA3CkFmbd8Rjm+DEBuw97Efmj0sIWl9tVMmMl+0k+1qH55nc0VVft +yb0k8ogOtt69Qp1iUV7tM8T4yQnSogY1kuWmP4hs9XitT2lU09FYwr1AfMSxp6JT +RPL4POUjUGqbj5nYVx93prIC27PP+TF5/X3LvHUvsjvgGV9zgF/5BntHsnYPxedi +XqDYiF5ZkifR3zRnMZprCU3gJOJTQTNpmA2UY/CnTUzCLqZxH10mkmW+ZGNVJo6Y ++wzDaV/YCooOC6aH/LH7dq5Ya1zOJ+P+228Lz1Fe1vnAQrWa5yX96uCK8lUnFVoD +5p9lc+HpyqwNJxzK897YOKG7+g9cRjOHvjSEpEVQ/xfOnlF+EfW2h/CxHgOJH3C3 +zDtN3Awy43bUcB7YzUitkxlvt4OdzZtUVjgYhW6Q3WLnDjA= +=8doW +-----END PGP PUBLIC KEY BLOCK----- diff --git a/attic/public/404.html b/attic/public/404.html new file mode 100644 index 0000000..71b4495 --- /dev/null +++ b/attic/public/404.html @@ -0,0 +1,120 @@ + + + + + +404 Page not found - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

404 Not Found

+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/74hc74-function-table.png b/attic/public/74hc74-function-table.png new file mode 100644 index 0000000..8cf232f Binary files /dev/null and b/attic/public/74hc74-function-table.png differ diff --git a/attic/public/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt b/attic/public/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt new file mode 100644 index 0000000..21f2507 --- /dev/null +++ b/attic/public/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt @@ -0,0 +1,75 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +K76IzI2dBaPHmmk= +=OOQd +-----END PGP PUBLIC KEY BLOCK----- diff --git a/attic/public/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt b/attic/public/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt new file mode 100644 index 0000000..fe8620d --- /dev/null +++ b/attic/public/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt @@ -0,0 +1,88 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=fK6V +-----END PGP PUBLIC KEY BLOCK----- diff --git a/attic/public/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt b/attic/public/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt new file mode 100644 index 0000000..31bfe82 --- /dev/null +++ b/attic/public/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt @@ -0,0 +1,88 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=FWis +-----END PGP PUBLIC KEY BLOCK----- diff --git a/attic/public/IMG_3019.png b/attic/public/IMG_3019.png new file mode 100644 index 0000000..06497cc Binary files /dev/null and b/attic/public/IMG_3019.png differ diff --git a/attic/public/IMG_4936.jpg b/attic/public/IMG_4936.jpg new file mode 100644 index 0000000..1c64933 Binary files /dev/null and b/attic/public/IMG_4936.jpg differ diff --git a/attic/public/IMG_4941.jpg b/attic/public/IMG_4941.jpg new file mode 100644 index 0000000..4fc8a23 Binary files /dev/null and b/attic/public/IMG_4941.jpg differ diff --git a/attic/public/IMG_4958.jpeg b/attic/public/IMG_4958.jpeg new file mode 100644 index 0000000..5f0dac3 Binary files /dev/null and b/attic/public/IMG_4958.jpeg differ diff --git a/attic/public/IMG_6045.jpg b/attic/public/IMG_6045.jpg new file mode 100644 index 0000000..82ad249 Binary files /dev/null and b/attic/public/IMG_6045.jpg differ diff --git a/attic/public/TertiaryColorWheel_Chart.png b/attic/public/TertiaryColorWheel_Chart.png new file mode 100644 index 0000000..71eb4d6 Binary files /dev/null and b/attic/public/TertiaryColorWheel_Chart.png differ diff --git a/attic/public/about/index.html b/attic/public/about/index.html new file mode 100644 index 0000000..3208770 --- /dev/null +++ b/attic/public/about/index.html @@ -0,0 +1,129 @@ + + + + + +About - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

About

+

Wolfgang Hottgenroth

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/articles/index.html b/attic/public/articles/index.html new file mode 100644 index 0000000..854a177 --- /dev/null +++ b/attic/public/articles/index.html @@ -0,0 +1,124 @@ + + + + + +Articles - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Articles

+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/articles/index.xml b/attic/public/articles/index.xml new file mode 100644 index 0000000..d9273a8 --- /dev/null +++ b/attic/public/articles/index.xml @@ -0,0 +1,18 @@ + + + + Articles on Minimal Setups + http://172.16.3.33:1313/articles/ + Recent content in Articles on Minimal Setups + Hugo + en-us + + + Quotes + http://172.16.3.33:1313/articles/quotes/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/articles/quotes/ + <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Und dann in deinem Arm, alles gut, alles andere egal </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-22</span> <span>Alles Du, Dota Kehr</span> </div> </div> <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Es ist immer was los, aber es passiert nichts. </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-14</span> <span>Steinhammer, Thadeusz</span> </div> </div> <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Sie steht gut da. Aber die Seele setzt sich nicht dazu. </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-14</span> <span>Samuel Overbeck in Steinhammer, Thadeusz, S. 68, 71</span> </div> </div> + + + diff --git a/attic/public/articles/quotes/index.html b/attic/public/articles/quotes/index.html new file mode 100644 index 0000000..1439b3e --- /dev/null +++ b/attic/public/articles/quotes/index.html @@ -0,0 +1,178 @@ + + + + + +Quotes - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Quotes

+
+ +
+ +Und dann in deinem Arm, alles gut, alles andere egal + +
+ + +
+ 2025-01-22 + Alles Du, Dota Kehr +
+
+ + +
+ +
+ +Es ist immer was los, aber es passiert nichts. + +
+ + +
+ 2025-01-14 + Steinhammer, Thadeusz +
+
+ + +
+ +
+ +Sie steht gut da. Aber die Seele setzt sich nicht dazu. + +
+ + +
+ 2025-01-14 + Samuel Overbeck in Steinhammer, Thadeusz, S. 68, 71 +
+
+ + +
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/debouncing/index.html b/attic/public/blog/debouncing/index.html new file mode 100644 index 0000000..12cc2db --- /dev/null +++ b/attic/public/blog/debouncing/index.html @@ -0,0 +1,254 @@ + + + + + +Yet Another Debouncing Method - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Yet Another Debouncing Method

+

You can find several approaches for debouncing mechanical switches on the Internet, some work better, some not so good.

+

One common approach is to ignore events in an ISR when they come too fast:<

+
void count() {
+	static uint32_t lastEvent = 0;
+	uint32_t currentEvent = micros();
+	if (currentEvent &gt; (lastEvent + configBlock.debounce)) {
+		lastEvent = currentEvent;
+		cnt++;
+	}
+}
+
+void setup() {
+        pinMode(REED_PIN, INPUT_PULLUP);
+        attachInterrupt(REED_PIN, count, FALLING);
+}
+

This works very good when only the tipping of a switch is relevant.

+

When also the time the button was pressed is relevant and when it is especially necessary to distinguish between a short and a long press this approach doesn’t work anymore.

+

Since I couldn’t remember the approaches I read about earlier I’ve sketched this state machine:

+

+

(The double-lined states are action-states which send out the related information.)

+

At least for me, this approach is working very reliable so far, I’m quite happy with it.

+
enum tPressedState { psHIGH, psLOW, psACCEPTED_LOW, psLONG_START, psLONG_CONT, psLONG_CONT_SEND, psLONG_END, psSHORT, psINVALID };
+
+typedef struct {
+	uint8_t index;
+	uint8_t buttonPin;
+	tPressedState pressedState;
+	tPressedState oldPressedState;
+	uint32_t lastStateChange;
+} tButton;
+
+tButton buttons[] = {
+					  { 1, SWITCH_1, psHIGH, psINVALID, 0 },
+					  { 2, SWITCH_2, psHIGH, psINVALID, 0 },
+					  { 3, SWITCH_3, psHIGH, psINVALID, 0 },
+					  { 0, 0, psINVALID, psINVALID, 0 } // END MARKER
+};
+
+static void buttonHandler(tButton *button) {
+	uint32_t currentMicros = micros();
+	uint8_t buttonState = digitalRead(button-&gt;buttonPin);
+
+#ifdef DEBUG
+	if (button-&gt;oldPressedState != button-&gt;pressedState) {
+		Serial.print("Index ");
+		Serial.print(button-&gt;index);
+		Serial.print(", state changed from ");
+		Serial.print(button-&gt;oldPressedState);
+		Serial.print(" to ");
+		Serial.print(button-&gt;pressedState);
+		Serial.println();
+		button-&gt;oldPressedState = button-&gt;pressedState;
+	}
+#endif
+
+	switch (button-&gt;pressedState) {
+	case psHIGH:
+		if (buttonState == LOW) {
+			button-&gt;pressedState = psLOW;
+			button-&gt;lastStateChange = currentMicros;
+		}
+		break;
+	case psLOW:
+		if (buttonState == HIGH) {
+			button-&gt;pressedState = psHIGH;
+			button-&gt;lastStateChange = currentMicros;
+		} else {
+			if (currentMicros &gt; (button-&gt;lastStateChange + configBlock.debounce)) {
+				button-&gt;pressedState = psACCEPTED_LOW;
+				button-&gt;lastStateChange = currentMicros;
+			}
+		}
+		break;
+	case psACCEPTED_LOW:
+		if (buttonState == HIGH) {
+			button-&gt;pressedState = psSHORT;
+			button-&gt;lastStateChange = currentMicros;
+		}
+		if (currentMicros &gt; (button-&gt;lastStateChange + (configBlock.longPress * 1000))) {
+			button-&gt;pressedState = psLONG_START;
+			button-&gt;lastStateChange = currentMicros;
+		}
+		break;
+	case psSHORT:
+		sendMsg(button-&gt;index, "PRESS_SHORT");
+		button-&gt;pressedState = psHIGH;
+		button-&gt;lastStateChange = currentMicros;
+		break;
+	case psLONG_START:
+		sendMsg(button-&gt;index, "PRESS_LONG_START");
+		button-&gt;pressedState = psLONG_CONT;
+		button-&gt;lastStateChange = currentMicros;
+		break;
+	case psLONG_CONT:
+		if (buttonState == HIGH) {
+			button-&gt;pressedState = psLONG_END;
+			button-&gt;lastStateChange = currentMicros;
+		}
+		if (currentMicros &gt; (button-&gt;lastStateChange + (configBlock.longPressRepeat * 1000))) {
+			button-&gt;pressedState = psLONG_CONT_SEND;
+			button-&gt;lastStateChange = currentMicros;
+		}
+		break;
+	case psLONG_CONT_SEND:
+		sendMsg(button-&gt;index, "PRESS_LONG_CONT");
+		button-&gt;pressedState = psLONG_CONT;
+		button-&gt;lastStateChange = currentMicros;
+		break;
+	case psLONG_END:
+		sendMsg(button-&gt;index, "PRESS_LONG_END");
+		button-&gt;pressedState = psHIGH;
+		button-&gt;lastStateChange = currentMicros;
+		break;
+	default:
+		button-&gt;pressedState = psHIGH;
+		button-&gt;lastStateChange = currentMicros;
+	}
+}
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/email-childprot/index.html b/attic/public/blog/email-childprot/index.html new file mode 100644 index 0000000..4d74cf4 --- /dev/null +++ b/attic/public/blog/email-childprot/index.html @@ -0,0 +1,174 @@ + + + + + +Children Protection for Postfix-based EMail-Server - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Children Protection for Postfix-based EMail-Server

+

This small tool implements a whitelist on a Postfix mail-server. It prevents certain recipient addresses (your kids ones) from +receiving mail from any not whitelisted address. Any mail from not whitelisted senders is redirected to a delegate (a parent).

+

The code for this tool can is here: https://gitea.hottis.de/wn/childprot.

+

Configure the tool by adding this line into the master.cf of the Postfix installation:

+
childprot unix -   n    n    -    25    spawn user=mail argv=/opt/sbin/ChildProt
+

and this one to the main.cf:

+
check_policy_service unix:private/childprot
+

The restricted recipients and the whitelists are stored in an SQLite3 database:

+
CREATE TABLE child_address_t (
+  child INTEGER REFERENCES child_t(id),
+  address TEXT
+);
+
+CREATE TABLE child_t (
+  id INTEGER PRIMARY KEY,
+  name TEXT,
+  delegate TEXT
+);
+
+CREATE TABLE whitelist_t (
+  child INTEGER REFERENCES child_t(id),
+  address TEXT
+);
+
+CREATE VIEW child_v AS
+  SELECT c.id as id,
+         c.delegate as delegate,
+         ca.address as address
+  FROM child_t c,
+       child_address_t ca
+  WHERE c.id = ca.child;
+

Restricted persons together with their delegates are added to the table child_t, multiple addresses can be assigned to those persons in +child_address_t. Whitelists per person are maintained in whitelist_t.

+

The tool is querying the view child_v.

+

Note: The code is unmaintained and here only for documentary reasons. It is not meant to be used any longer.

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/index.html b/attic/public/blog/index.html new file mode 100644 index 0000000..23bf90d --- /dev/null +++ b/attic/public/blog/index.html @@ -0,0 +1,261 @@ + + + + + +Blogs - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Blogs

+
+

Tetris

+ +

Tetris - Hardware and Software

+

+

Update Amplifier (separate input circuitry per PSG, it appears, that a silent PSG has a DC level on its output which is summarized to the AC output of the working PSG, so two input circuits with individual couping capacitor):

+

+

Update of the power switch of the amplifier (at appears, that the small transistor couldn’t deliver enough current):

+

+

This Tetris implementation consists of a hardware and a software (running on that hardware).

+
+ +

+

+ +
+

PL 9823 meets MSP430

+ +

Generating signals for PL 9823 using a MSP430

+

Debugging

+
mspdebug rf2500 gdb
+
+msp430-gdb -x firmware.gdb
+

Attention: the gdb in the TI toolchain package is broken, use the one from Debian

+

Signals Working Cycler

+

These signals are related to code under tag cycler_works_include_output_stage.

+

First octets:

+

+

Last octets:

+

+

Schematics and legend for signals:

+

+

Some more explanations

+

Consider above schematics and the screen shot “Last octets” from the oscilloscope.

+

+

Timer TA1 is running in “up mode” to the value 45 set in compare register TA1CCR0. The compare registers TA1CCR1 is set to 10, TA1CCR2 is set to 22. +The output mode of the timer is set to “Reset/Set”, which means the GPIO associated with TA1CCR1 (P2.1) and TA1CCR2 (P2.4) are set at the overflow and +restart of the counter and reset when the counter matches the associated compare value.

+
+ +

+

+ + + +

+

+ +
+

Just another Stratum 1 Timeserver

+ +

+

This server utilizes ntpsec on Debian on a BeagleBone Black with a UBlox GPS module.

+

It has been joined the NTP pool, the statistics are available at https://www.ntppool.org/scores/93.241.86.156.

+

Some additional statistics graphs for the server are available at https://numbers.hottis.de/ntpserver.

+

Preparation of the BeagleBone

+

The GPS module is connected via serial line to the UART of the BB.

+

The additional connection of the PPS output with the PPS device of the Linux running on the BB via a GPIO must be prepared. A device tree overlay must be created and compiled:

+
+ +

+

+ +
+

Yet Another Debouncing Method

+ +

You can find several approaches for debouncing mechanical switches on the Internet, some work better, some not so good.

+

One common approach is to ignore events in an ISR when they come too fast:<

+
void count() {
+	static uint32_t lastEvent = 0;
+	uint32_t currentEvent = micros();
+	if (currentEvent &gt; (lastEvent + configBlock.debounce)) {
+		lastEvent = currentEvent;
+		cnt++;
+	}
+}
+
+void setup() {
+        pinMode(REED_PIN, INPUT_PULLUP);
+        attachInterrupt(REED_PIN, count, FALLING);
+}
+

This works very good when only the tipping of a switch is relevant.

+
+ +

+

+ +
+

Three Phase Inverter - Second Service

+ +

I wrote in October about my first try to build a simple three phase inverter, see here. In the first try I used four MSP430 microcontroller, one for the PWM of each phase and one to coordinate the phase shift of the three phases.

+

In this experiment I put everything on one STM32 microcontroller. Here I used the DMA feature to feed data into the PWM counter and I calculated the sine values at start-up time on the microcontroller. Additionally I put in the driver for a CAN interface, however, it is not yet supported in the firmware.

+
+ +

+

+ +
+

Three Phase Inverter

+ +

Already when I was still in school, about 30 years ago, I was curious to make an inverter using some MOSFETs. I actually was able to build a simple one phase inverter with rectangular signal shape (I used a NE555). Using this thing I drove a transformer to light a blub. However, all of these inverters I built passed by in fire.

+

Now, I tried it again, not longer using MOSFETs but IGBTs with free-wheeling diode. Moreover, I used some microcontrollers and sine values to feed a PWM to get a sine-alike signal shape. And this time I was able with three phases to drive an asynchronous motor.

+
+ +

+

+ +
+

Theremin

+ +

A Theremin is a rather old electronic music instrument, invented in 1928. It is played by approaching hands to two antennas, without touching them. One antenna is used to manipulate the frequeny of the tone, the other one to manipulate the volume.

+

+

This is just another Theremin. Only basic structure of the circuit was taken from many other published Theremin circuits.

+

+

Completely new (or at least not found during my Theremin googling) is the digital zero-calibration.

+
+ +

+

+ +
+

Children Protection for Postfix-based EMail-Server

+ +

This small tool implements a whitelist on a Postfix mail-server. It prevents certain recipient addresses (your kids ones) from +receiving mail from any not whitelisted address. Any mail from not whitelisted senders is redirected to a delegate (a parent).

+

The code for this tool can is here: https://gitea.hottis.de/wn/childprot.

+

Configure the tool by adding this line into the master.cf of the Postfix installation:

+
childprot unix -   n    n    -    25    spawn user=mail argv=/opt/sbin/ChildProt
+

and this one to the main.cf:

+
+ +

+

+ +
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/index.xml b/attic/public/blog/index.xml new file mode 100644 index 0000000..3c6b6fe --- /dev/null +++ b/attic/public/blog/index.xml @@ -0,0 +1,75 @@ + + + + Blogs on Minimal Setups + http://172.16.3.33:1313/blog/ + Recent content in Blogs on Minimal Setups + Hugo + en-us + Thu, 13 Mar 2025 00:00:00 +0000 + + + Tetris + http://172.16.3.33:1313/blog/tetris/ + Mon, 27 May 2024 00:00:00 +0000 + http://172.16.3.33:1313/blog/tetris/ + <h1 id="tetris---hardware-and-software">Tetris - Hardware and Software</h1> <p><img src="http://172.16.3.33:1313/IMG_4936.jpg" alt=""></p> <p>Update Amplifier (separate input circuitry per PSG, it appears, that a silent PSG has a DC level on its output which is summarized to the AC output of the working PSG, so two input circuits with individual couping capacitor):</p> <p><img src="http://172.16.3.33:1313/IMG_4941.jpg" alt=""></p> <p>Update of the power switch of the amplifier (at appears, that the small transistor couldn&rsquo;t deliver enough current):</p> <p><img src="http://172.16.3.33:1313/IMG_4958.jpeg" alt=""></p> <p>This Tetris implementation consists of a hardware and a software (running on that hardware).</p> + + + PL 9823 meets MSP430 + http://172.16.3.33:1313/blog/rgb-driver/ + Sat, 25 May 2024 00:00:00 +0000 + http://172.16.3.33:1313/blog/rgb-driver/ + <h2 id="generating-signals-for-pl-9823-using-a-msp430">Generating signals for PL 9823 using a MSP430</h2> <h3 id="debugging">Debugging</h3> <pre tabindex="0"><code>mspdebug rf2500 gdb msp430-gdb -x firmware.gdb </code></pre><p>Attention: the gdb in the TI toolchain package is broken, use the one from Debian</p> <h3 id="signals-working-cycler">Signals Working Cycler</h3> <p>These signals are related to code under tag <code>cycler_works_include_output_stage</code>.</p> <p>First octets:</p> <p><img src="http://172.16.3.33:1313/cycler_working_first_octets.png" alt=""></p> <p>Last octets:</p> <p><img src="http://172.16.3.33:1313/cycler_working_last_octets.png" alt=""></p> <p>Schematics and legend for signals:</p> <p><img src="http://172.16.3.33:1313/schematics.jpeg" alt=""></p> <h4 id="some-more-explanations">Some more explanations</h4> <p>Consider above schematics and the screen shot &ldquo;Last octets&rdquo; from the oscilloscope.</p> <p><img src="http://172.16.3.33:1313/timing.png" alt=""></p> <p>Timer TA1 is running in &ldquo;up mode&rdquo; to the value 45 set in compare register <code>TA1CCR0</code>. The compare registers <code>TA1CCR1</code> is set to 10, <code>TA1CCR2</code> is set to 22. The output mode of the timer is set to &ldquo;Reset/Set&rdquo;, which means the GPIO associated with <code>TA1CCR1</code> (P2.1) and <code>TA1CCR2</code> (P2.4) are set at the overflow and restart of the counter and reset when the counter matches the associated compare value.</p> + + + Stratum 1 NTP Server participating in ntppool.org + http://172.16.3.33:1313/blog/timeserver2/ + Thu, 13 Mar 2025 00:00:00 +0000 + http://172.16.3.33:1313/blog/timeserver2/ + + + + Just another Stratum 1 Timeserver + http://172.16.3.33:1313/blog/timeserver/ + Tue, 11 Feb 2025 00:00:00 +0000 + http://172.16.3.33:1313/blog/timeserver/ + <p><img src="http://172.16.3.33:1313/IMG_6045.jpg" alt=""></p> <p>This server utilizes <code>ntpsec</code> on Debian on a BeagleBone Black with a UBlox GPS module.</p> <p>It has been joined the NTP pool, the statistics are available at <a href="https://www.ntppool.org/scores/93.241.86.156">https://www.ntppool.org/scores/93.241.86.156</a>.</p> <p>Some additional statistics graphs for the server are available at <a href="https://numbers.hottis.de/ntpserver">https://numbers.hottis.de/ntpserver</a>.</p> <h2 id="preparation-of-the-beaglebone">Preparation of the BeagleBone</h2> <p>The GPS module is connected via serial line to the UART of the BB.</p> <p>The additional connection of the PPS output with the PPS device of the Linux running on the BB via a GPIO must be prepared. A device tree overlay must be created and compiled:</p> + + + Yet Another Debouncing Method + http://172.16.3.33:1313/blog/debouncing/ + Mon, 30 Apr 2018 00:00:00 +0000 + http://172.16.3.33:1313/blog/debouncing/ + <p>You can find several approaches for debouncing mechanical switches on the Internet, some work better, some not so good.</p> <p>One common approach is to ignore events in an ISR when they come too fast:&lt;</p> <pre tabindex="0"><code>void count() { static uint32_t lastEvent = 0; uint32_t currentEvent = micros(); if (currentEvent &amp;gt; (lastEvent + configBlock.debounce)) { lastEvent = currentEvent; cnt++; } } void setup() { pinMode(REED_PIN, INPUT_PULLUP); attachInterrupt(REED_PIN, count, FALLING); } </code></pre><p>This works very good when only the tipping of a switch is relevant.</p> + + + Three Phase Inverter - Second Service + http://172.16.3.33:1313/blog/three-phase-inverter-ng/ + Mon, 19 Dec 2016 00:00:00 +0000 + http://172.16.3.33:1313/blog/three-phase-inverter-ng/ + <p>I wrote in October about my first try to build a simple three phase inverter, see <a href="http://172.16.3.33:1313/blog/three-phase-inverter/">here</a>. In the first try I used four MSP430 microcontroller, one for the PWM of each phase and one to coordinate the phase shift of the three phases.</p> <p>In this experiment I put everything on one STM32 microcontroller. Here I used the DMA feature to feed data into the PWM counter and I calculated the sine values at start-up time on the microcontroller. Additionally I put in the driver for a CAN interface, however, it is not yet supported in the firmware.</p> + + + Three Phase Inverter + http://172.16.3.33:1313/blog/three-phase-inverter/ + Fri, 14 Oct 2016 00:00:00 +0000 + http://172.16.3.33:1313/blog/three-phase-inverter/ + <p>Already when I was still in school, about 30 years ago, I was curious to make an inverter using some MOSFETs. I actually was able to build a simple one phase inverter with rectangular signal shape (I used a NE555). Using this thing I drove a transformer to light a blub. However, all of these inverters I built passed by in fire.</p> <p>Now, I tried it again, not longer using MOSFETs but IGBTs with free-wheeling diode. Moreover, I used some microcontrollers and sine values to feed a PWM to get a sine-alike signal shape. And this time I was able with three phases to drive an asynchronous motor.</p> + + + Theremin + http://172.16.3.33:1313/blog/theremin/ + Mon, 01 Jul 2013 00:00:00 +0000 + http://172.16.3.33:1313/blog/theremin/ + <p>A <a href="https://en.wikipedia.org/wiki/Theremin">Theremin</a> is a rather old electronic music instrument, invented in 1928. It is played by approaching hands to two antennas, without touching them. One antenna is used to manipulate the frequeny of the tone, the other one to manipulate the volume.</p> <p><img src="http://172.16.3.33:1313/foto-am-30-06-13-um-20-021.jpg" alt=""></p> <p>This is just another Theremin. Only basic structure of the circuit was taken from many other published Theremin circuits.</p> <p><img src="http://172.16.3.33:1313/scan_005006-1024x654.jpg" alt=""></p> <p>Completely new (or at least not found during my Theremin googling) is the digital zero-calibration.</p> + + + Children Protection for Postfix-based EMail-Server + http://172.16.3.33:1313/blog/email-childprot/ + Thu, 27 Jun 2013 00:00:00 +0000 + http://172.16.3.33:1313/blog/email-childprot/ + <p>This small tool implements a whitelist on a Postfix mail-server. It prevents certain recipient addresses (your kids ones) from receiving mail from any not whitelisted address. Any mail from not whitelisted senders is redirected to a delegate (a parent).</p> <p>The code for this tool can is here: <a href="https://gitea.hottis.de/wn/childprot">https://gitea.hottis.de/wn/childprot</a>.</p> <p>Configure the tool by adding this line into the <code>master.cf</code> of the Postfix installation:</p> <pre tabindex="0"><code>childprot unix - n n - 25 spawn user=mail argv=/opt/sbin/ChildProt </code></pre><p>and this one to the <code>main.cf</code>:</p> + + + diff --git a/attic/public/blog/page/1/index.html b/attic/public/blog/page/1/index.html new file mode 100644 index 0000000..9ba8a6e --- /dev/null +++ b/attic/public/blog/page/1/index.html @@ -0,0 +1,10 @@ + + + + http://172.16.3.33:1313/blog/ + + + + + + diff --git a/attic/public/blog/rgb-driver/index.html b/attic/public/blog/rgb-driver/index.html new file mode 100644 index 0000000..cc42da8 --- /dev/null +++ b/attic/public/blog/rgb-driver/index.html @@ -0,0 +1,241 @@ + + + + + +PL 9823 meets MSP430 - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

PL 9823 meets MSP430

+

Generating signals for PL 9823 using a MSP430

+

Debugging

+
mspdebug rf2500 gdb
+
+msp430-gdb -x firmware.gdb
+

Attention: the gdb in the TI toolchain package is broken, use the one from Debian

+

Signals Working Cycler

+

These signals are related to code under tag cycler_works_include_output_stage.

+

First octets:

+

+

Last octets:

+

+

Schematics and legend for signals:

+

+

Some more explanations

+

Consider above schematics and the screen shot “Last octets” from the oscilloscope.

+

+

Timer TA1 is running in “up mode” to the value 45 set in compare register TA1CCR0. The compare registers TA1CCR1 is set to 10, TA1CCR2 is set to 22. +The output mode of the timer is set to “Reset/Set”, which means the GPIO associated with TA1CCR1 (P2.1) and TA1CCR2 (P2.4) are set at the overflow and +restart of the counter and reset when the counter matches the associated compare value.

+

So, on P2.1 (D1 on the oscilloscope) we have a long pulse and at P2.4 (D0 on the oscilloscope) we have a short pulse, with synchronous raising edge.

+

+

The inverted signal P2.4 is connected to the Clock input of a 74HC74 D-flipflop, the data input of the flipflop is connected to GPIO P1.0 (D2 on the oscilloscope).

+

The interrupt service routine shifter_isr is triggered by the overflow and restart of the timer, this interrupt service routine provides the next bit to be +signaled on P1.0. This bit is stored at the falling edge of P2.4 (long pulse) in the flipflop.

+

The short pulse (P2.1, D1) is ANDed using a 74HC08 with the inverted output of the flipflop, the long pulse (P2.4, D0) is ANDed with the non-inverted output of +the flipflop, the ANDed results are ORed using a 74HC32.

+

So, at the output of the OR gate (yellow on the oscilloscope) we get a long pulse for a 1 at P1.0 provided by the ISR and a short pulse for a 0 at P1.0.

+

The routine drawscreen takes color values from the “frame buffer” beginning at screendata and translated them into the red, green and blue values and provides these values, first red, then green and finally blue to the ISR via the DATA_REGISTER.

+

The ISR cycles over the DATA_REGISTER and presents the bits at P1.0.

+

Additionally, when the first bit of a full draw screen cycle is presented at P1.0 by the ISR, it also sets the data enable signal at P1.1 and when the last bit has been provided it disabled the data enable signal. This signal is also synchronized using a flipflop and used to enable the short/long pulses using an AND gate.

+

Timing

+

Complete cycle: 2.48us

+

+

Short pulse: 550ns

+

+

Long pulse: 1.18us

+

+

Load Time

+

During of loading data into five LEDs: 297us

+

+

During of loading data into six LEDs: 297us

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
# of LEDsLoad Time measuredcalculated
5297us
6354us356.4us
10594us
1005.9ms
20011.8ms
+

Reset Circuitry

+

It appears that the output voltage of the power supply raises that slow, that the MCU +will not handle the reset correctly.

+

The following circuitry should generate a valid reset signal far enough from the raise +of the supply voltage:

+

+

The circuit generates the following signals:

+

+
Reference voltage (green):
+
U_ref = 3.3V \frac{22k\Omega}{22k\Omega + 10k\Omega} = 2.2V
+
Trigger voltage (purple):
+
U_trigg = 3.3V \frac{330k\Omega}{330k\Omega + 82k\Omega} = 2.64V
+
RC constant:
+
\tau = 82k\Omega \cdot 100nF = 8.2ms
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/tetris/index.html b/attic/public/blog/tetris/index.html new file mode 100644 index 0000000..f1146e3 --- /dev/null +++ b/attic/public/blog/tetris/index.html @@ -0,0 +1,171 @@ + + + + + +Tetris - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Tetris

+

Tetris - Hardware and Software

+

+

Update Amplifier (separate input circuitry per PSG, it appears, that a silent PSG has a DC level on its output which is summarized to the AC output of the working PSG, so two input circuits with individual couping capacitor):

+

+

Update of the power switch of the amplifier (at appears, that the small transistor couldn’t deliver enough current):

+

+

This Tetris implementation consists of a hardware and a software (running on that hardware).

+

The hardware utilizes four MSP430 microcontrollers for 1.) the game play, 2.) the play ground canvas, 3.) the score display and 4.) the sound effects.

+

Further documentation including calculations and drawing can be found in the docs subdirs of the four main subdirs.

+

Game Play

+

Code is in subdir game-ctrl (https://gitea.hottis.de/wn/tetris/src/branch/main/game-ctrl).

+

In the firmware for this MSP430 microcontroller the whole game mechanics, reading the buttons, reading and writing the highscore EEPROM and the control of the peripherial microcontrollers are implemented.

+

The buttons are debounced using RC circuitry and Schmitt triggers and connected to GPIOs of the microcontroller.

+

The peripherial microcontrollers and the EEPROM are connected via SPI including individual chip select lines.

+

+

Play Ground Canvas

+

Code is in subdir rgb-driver (https://gitea.hottis.de/wn/tetris/src/branch/main/rgb-driver).

+

The play ground is implemented using a 10 * 20 matrix of PL9823 RGB LEDs which are controlled by another MSP430 microcontroller. The firmware for this microcontroller is implemented for performance and real time requirements in assembly code. Through some discret logic the signals for PL9823 LEDs are generated. Major challenge was to generated the signals according the datasheet of all 200 (including a mini canvas for the stone preview: 212) LEDs in real time without interrupts.

+

The communcation with the game play controller is implemented as a sequences of tuples of LED address (0 to 211) and color code. A single octet of 253 where the LED address is expected is taken as the end-of-telegram mark. Readiness to receive a telegram is signaled to the game play controller via a single line connected to a GPIO of the game play controller.

+

+

Details are here

+

Score Display

+

Code is in subdir display-driver (https://gitea.hottis.de/wn/tetris/src/branch/main/display-driver).

+

In the first place, a MAX7221 was meant to be used for connecting a multiple digit seven-segment display. However, it appears, that the MAX7221 requires 3.5V as minimum voltage for the high-level, which caan’t be provided by the MSP430 (which runs on 3.3V) and level-shifters haven’t been around. Thus, the minimal required amount of functionality of the MAX7221 has been implemented in C on an MSP430. Just four digits are supported.

+

Communication with the game play controller is just a 16 bit number to be displayed.

+

+

Sound Effects

+

Code is in subdir sound-driver (https://gitea.hottis.de/wn/tetris/src/branch/main/sound-driver).

+

An MSP430 microcontroller and two mediaeval AY-3-8913 sound chips are deployed. The sound chips themselve run on 5V, their 8-bit-address/data bus is connected to the port 2 (bit 0 to 7) of the microcontroller. The bus control signal _CS, BC1 and BDIR are generated in software and provided via GPIOs.

+

An amplifier following the proposal of the AY-3-8913 datasheet is implemented using a LM386 chip. A MOSFET BS108 controlled via a GPIO is use the shortcut the input of the amplifier to ground to mute sound effects.

+

The clock generator proposed by the AY-3-8913 does not work reliably, so an alternative design from “The Art of Electronics” has been used.

+

+ + +

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/theremin/index.html b/attic/public/blog/theremin/index.html new file mode 100644 index 0000000..58e40dc --- /dev/null +++ b/attic/public/blog/theremin/index.html @@ -0,0 +1,169 @@ + + + + + +Theremin - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Theremin

+

A Theremin is a rather old electronic music instrument, invented in 1928. It is played by approaching hands to two antennas, without touching them. One antenna is used to manipulate the frequeny of the tone, the other one to manipulate the volume.

+

+

This is just another Theremin. Only basic structure of the circuit was taken from many other published Theremin circuits.

+

+

Completely new (or at least not found during my Theremin googling) is the digital zero-calibration.

+

The both left-hand-side oscillators together with the mixer+filter block provide the signal to control the volume, the right-hand-side oscillators and mixer+filter block provide the signal to control the frequency.

+

Each of these both couples consists of two oscillators and a mixer+filter block. Both oscillators have to swing on exactly the same frequency, in this case of about 1.3MHz. While the exact frequency does not matter, it is significant that both oscillators have the same frequency. The signals of both oscillators will be mixed, which means, multiplied.

+

$$\sin(\omega_0 t) sin(\omega t)$$

+

Here $\omega$ is the frequncy of one of the oscillators while $\omega_0$ is the frequency of the other one.

+

This term can be modified using the addition rule for trigonometric functions into

+

$$\frac{\cos((\omega_0-\omega)t)-\cos((\omega_0+\omega)t)}{2}$$

+

Due to this transformation, two signals, one with the sum and one with the difference of both input signal frequencies, are accumulated. +When both frequencies are exactly the same, one part of the sum appears as a DC offset, while the other part is the doubled frequency. +If one oscillator is de-tuned by only a few Hz’s, one part are this few Hz's (a very low, hearable frequency) and the other part is still (roughly) the doubled frequency (a high frequency). The high frequency part can now be suppressed using a lowpass-filter. +Multiplication of two signals can be done using an analog four quadrant multiplier, like the AD633. So, this is the schematic of the mixer+filter block:

+

+

The output signal of this block is the difference of the detuning of the one oscillator.

+

Detuning of the oscillator will be achieved by approaching the hand to the antenna of the oscillator.

+

+

The antenna acts as a kind of a capacitive sensor and by approaching the hand a very small amount of capacity is added into the LC resonator.

+

The other oscillator is a fix-frequency oscillator which can be tuned to swing on the same frequency as the first oscillator in a not detuned state.

+

+

This tuning is achieved by biasing the two varactor diodes.

+

Here is automated tuning circuit steps in:

+

+

The low-frequency output signal of the mixer+filter block is provided through a 2-to-1 multiplexer (the four NAND-gates) into a microcontroller. The microcontroller measures the frequency and as long as it is above a frequency $\epsilon$ of say 10Hz, the bias voltage $U_{tune}$ is increased.

+

These both oscillators with mixer+filter and one channel of the zero-calibration appear twice in the whole circuit, one for frequency manipulation and one for volume manipulation.

+

The low-frequency, hearable, signal and the volume-control signal are brought together in the volume-control circuit

+

+

Here, the low-frequency signal $U_{Lf1}$ is passed through a high-pass filter. The high-pass filter is calculated that way that the whole detunable frequency range comes onto the ramp of the filter. So, the not detuned output signal of the mixer+filter is a DC signal, which is suppressed completely by the high-pass filter (beginning of the ramp) and the maximum detuned output signal of about 2kHz matched roughly to the end of the ramp. This filtered signal is rectified and only the negative half-wave of the signal passes the diode. This half-wave signal is sieved by the larger capacitor to get a DC signal between 0 and the maximum amplitude which passed the fiter. This negative DC signal is fed into the FET, which is configured as a voltage controlled resistor. This voltage controlled resistor and the fix resistor (5k6) are building a voltage controlled voltage divider. The hearable frequency signal $U_{Lf2}$ is fed into this voltage divider  and passed to an amplifier.

+

The output signal of this block in turn is the volume-controlled and frequency-controlled signal which is the output signal of this Theremin. It is passed into a power-amplifier and into a speaker - done.

+

Calibrating the Theremin

+

Playing the Theremin

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/three-phase-inverter-ng/index.html b/attic/public/blog/three-phase-inverter-ng/index.html new file mode 100644 index 0000000..da9d53b --- /dev/null +++ b/attic/public/blog/three-phase-inverter-ng/index.html @@ -0,0 +1,143 @@ + + + + + +Three Phase Inverter - Second Service - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Three Phase Inverter - Second Service

+

I wrote in October about my first try to build a simple three phase inverter, see here. In the first try I used four MSP430 microcontroller, one for the PWM of each phase and one to coordinate the phase shift of the three phases.

+

In this experiment I put everything on one STM32 microcontroller. Here I used the DMA feature to feed data into the PWM counter and I calculated the sine values at start-up time on the microcontroller. Additionally I put in the driver for a CAN interface, however, it is not yet supported in the firmware.

+

+

From top to bottom you see the CAN driver, the STM32 board, opto coupler to separate logic and power part and then from right to left in the bottom half the low-side/high-side MOSFET drivers and the MOSFETs.

+

+

The power supply consists of a traditional transformer and (top right) the rectifier and capacitors for the power part, together with the 12V regulator for the drivers and (top left) the regulators for 3.3V and 5V for the logic part.

+

+

The motor is the same as in the earlier experiment - I don’t have too much of them. And everything is put onto one board:

+

+

The code for this experiment is here: https://gitea.hottis.de/wn/inverter2.

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/three-phase-inverter/index.html b/attic/public/blog/three-phase-inverter/index.html new file mode 100644 index 0000000..c5438db --- /dev/null +++ b/attic/public/blog/three-phase-inverter/index.html @@ -0,0 +1,152 @@ + + + + + +Three Phase Inverter - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Three Phase Inverter

+

Already when I was still in school, about 30 years ago, I was curious to make an inverter using some MOSFETs. I actually was able to build a simple one phase inverter with rectangular signal shape (I used a NE555). Using this thing I drove a transformer to light a blub. However, all of these inverters I built passed by in fire.

+

Now, I tried it again, not longer using MOSFETs but IGBTs with free-wheeling diode. Moreover, I used some microcontrollers and sine values to feed a PWM to get a sine-alike signal shape. And this time I was able with three phases to drive an asynchronous motor.

+

+

The signal shaping is done with four MSP430 controllers, three as PWMs to drive the bridge and one to coordinate and control the three PWMs. The PWM controller is decoupled from the IGBT driver (IR2184) using optic couplers.

+

+

The bridge is a three phase IGBT module is a 6MB120F-060 I got for a few euros at ebay.

+

+

To avoid high voltages in my setup I got a 24V async motor, also from ebay.

+

+

The PWMs generate the signal from a sine table generated using Excel. Those I got this signal:

+

+

The main task of the coordinator is the start the PWMs with a phase shift of 120° (digital line 1, 2 and 3):

+

+

Currently the PWMs start with random polarity. The interesting signals are the digital lines 4, 5 and 6.

+

Sometimes the motor runs:

+

+

But sometimes not:

+

+

The firmware is available here https://gitea.hottis.de/wn/inverter0 and https://gitea.hottis.de/wn/inverter0ctrl.

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/timeserver/index.html b/attic/public/blog/timeserver/index.html new file mode 100644 index 0000000..d3a9b94 --- /dev/null +++ b/attic/public/blog/timeserver/index.html @@ -0,0 +1,235 @@ + + + + + +Just another Stratum 1 Timeserver - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Just another Stratum 1 Timeserver

+

+

This server utilizes ntpsec on Debian on a BeagleBone Black with a UBlox GPS module.

+

It has been joined the NTP pool, the statistics are available at https://www.ntppool.org/scores/93.241.86.156.

+

Some additional statistics graphs for the server are available at https://numbers.hottis.de/ntpserver.

+

Preparation of the BeagleBone

+

The GPS module is connected via serial line to the UART of the BB.

+

The additional connection of the PPS output with the PPS device of the Linux running on the BB via a GPIO must be prepared. A device tree overlay must be created and compiled:

+
/dts-v1/;
+/plugin/;
+
+/{
+    compatible = "ti,beaglebone", "ti,beaglebone-black";
+    part_number = "WN-PPS";
+    version = "00A0";
+
+    exclusive-use =
+        "P8.7",
+        "gpio2_2";
+
+    fragment@0 {
+        target = <&am33xx_pinmux>;
+        __overlay__ {
+            bs_pinmode_P8_7_0x27: pinmux_bs_pinmode_P8_7_0x27 {
+                pinctrl-single,pins = <0x090 0x27>;
+            };
+        };
+    };
+
+    fragment@1 {
+        target = <&ocp>;
+        __overlay__ {
+            bs_pinmode_P8_7_0x27_pinmux {
+                compatible = "pps-gpio";
+                status = "okay";
+                pinctrl-names = "default";
+                pinctrl-0 = <&bs_pinmode_P8_7_0x27>;
+                gpios = <&gpio2 2 0>;
+                assert-rising-edge;
+            };
+        };
+    };
+};
+

This file shall be compiled using

+
dtc -O dtb -o WN-PPS-00A0.dtbo -b 0 -@ WN-PPS-00A0.dts
+

The binary dtbo file then copied into /lib/firmware and mentioned in the /boot/uEnv.txt:

+
uboot_overlay_addr0=/lib/firmware/WN-PPS-00A0.dtbo
+

After a reboot the device file /dev/pps0 should be available and using ppstest /dev/pps0 you can test the connection:

+
root@david:/boot# ppstest /dev/pps0
+trying PPS source "/dev/pps0"
+found PPS source "/dev/pps0"
+ok, found 1 source(s), now start fetching data...
+source 0 - assert 1739442756.999984966, sequence: 306598 - clear  0.000000000, sequence: 0
+source 0 - assert 1739442757.999978472, sequence: 306599 - clear  0.000000000, sequence: 0
+source 0 - assert 1739442758.999976057, sequence: 306600 - clear  0.000000000, sequence: 0
+^C
+root@david:/boot# 
+

Configuration of the ntpsec daemon

+
interface listen all
+logconfig +all
+logfile /var/log/ntp.log
+
+statsdir /var/log/ntpsec/
+statistics loopstats peerstats clockstats protostats sysstats rawstats
+filegen loopstats file loopstats type day disable
+filegen peerstats file peerstats type day enable
+filegen clockstats file clockstats type day enable
+filegen protostats file protostats type day enable
+filegen sysstats file sysstats type day enable
+filegen rawstats file rawstats type day disable
+
+driftfile /var/lib/ntpsec/ntp.drift
+leapfile /usr/share/zoneinfo/leap-seconds.list
+
+tos maxclock 11
+tos minclock 4 minsane 3
+
+refclock nmea unit 0 prefer mode 0x10 minpoll 4 maxpoll 4 path /dev/ttyO4 ppspath /dev/pps0 baud 9600 flag1 1 refid BBgp
+# refclock shm unit 0 refid BBg minpoll 4 maxpoll 4 time1 0.1555
+# refclock shm unit 2 refid BBp minpoll 4 maxpoll 4 prefer
+# refclock pps unit 0 prefer refid BBp ppspath /dev/pps0 minpoll 4 maxpoll 4
+# refclock gpsd unit 0 prefer refid BBgp mode 1 minpoll 4 maxpoll 4
+
+server ntps1-1.uni-erlangen.de
+server ntps1-0.cs.tu-berlin.de
+server ptbtime1.ptb.de
+server rustime01.rus.uni-stuttgart.de
+server ntp1.sda.t-online.de
+server ntps1.gwdg.de
+
+restrict default kod nomodify nopeer noquery limited notrap
+restrict 127.0.0.1
+restrict ::1
+

Although the nmea reference clock driver is obsolete according to https://ntpsec.org/removal-plan.html, it works perfectly for me, in particular better then the other drivers. However, maybe I was not trying hard enough with the others.

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/blog/timeserver2/index.html b/attic/public/blog/timeserver2/index.html new file mode 100644 index 0000000..f0adca9 --- /dev/null +++ b/attic/public/blog/timeserver2/index.html @@ -0,0 +1,126 @@ + + + + + +Stratum 1 NTP Server participating in ntppool.org - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Stratum 1 NTP Server participating in ntppool.org

+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/categories/index.html b/attic/public/categories/index.html new file mode 100644 index 0000000..ef3b925 --- /dev/null +++ b/attic/public/categories/index.html @@ -0,0 +1,123 @@ + + + + + +Categories - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Categories

+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/categories/index.xml b/attic/public/categories/index.xml new file mode 100644 index 0000000..0d34245 --- /dev/null +++ b/attic/public/categories/index.xml @@ -0,0 +1,11 @@ + + + + Categories on Minimal Setups + http://172.16.3.33:1313/categories/ + Recent content in Categories on Minimal Setups + Hugo + en-us + + + diff --git a/attic/public/comm_game_ctrl_01.png b/attic/public/comm_game_ctrl_01.png new file mode 100644 index 0000000..45ea8e2 Binary files /dev/null and b/attic/public/comm_game_ctrl_01.png differ diff --git a/attic/public/css/chroma.css b/attic/public/css/chroma.css new file mode 100644 index 0000000..f6fe0b3 --- /dev/null +++ b/attic/public/css/chroma.css @@ -0,0 +1,310 @@ +/* Background */ +.chroma { + color: #f8f8f2; + background-color: #272822; +} + +/* Error */ +.chroma .err { + color: #960050; + background-color: #1e0010; +} + +/* LineTableTD */ +.chroma .lntd { + vertical-align: top; + padding: 0; + margin: 0; + border: 0; +} + +/* LineTable */ +.chroma .lntable { + border-spacing: 0; + padding: 0; + margin: 0; + border: 0; + width: 100%; + overflow: auto; + display: block; +} + +/* LineHighlight */ +.chroma .hl { + background-color: #ffffcc; + display: block; + width: 100%; +} + +/* LineNumbersTable */ +.chroma .lnt { + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; + display: block; +} + +/* LineNumbers */ +.chroma .ln { + margin-right: 0.4em; + padding: 0 0.4em 0 0.4em; +} + +/* Keyword */ +.chroma .k { + color: #66d9ef; +} + +/* KeywordConstant */ +.chroma .kc { + color: #66d9ef; +} + +/* KeywordDeclaration */ +.chroma .kd { + color: #66d9ef; +} + +/* KeywordNamespace */ +.chroma .kn { + color: #f92672; +} + +/* KeywordPseudo */ +.chroma .kp { + color: #66d9ef; +} + +/* KeywordReserved */ +.chroma .kr { + color: #66d9ef; +} + +/* KeywordType */ +.chroma .kt { + color: #66d9ef; +} + +/* NameAttribute */ +.chroma .na { + color: #a6e22e; +} + +/* NameClass */ +.chroma .nc { + color: #a6e22e; +} + +/* NameConstant */ +.chroma .no { + color: #66d9ef; +} + +/* NameDecorator */ +.chroma .nd { + color: #a6e22e; +} + +/* NameException */ +.chroma .ne { + color: #a6e22e; +} + +/* NameFunction */ +.chroma .nf { + color: #a6e22e; +} + +/* NameOther */ +.chroma .nx { + color: #a6e22e; +} + +/* NameTag */ +.chroma .nt { + color: #f92672; +} + +/* Literal */ +.chroma .l { + color: #ae81ff; +} + +/* LiteralDate */ +.chroma .ld { + color: #e6db74; +} + +/* LiteralString */ +.chroma .s { + color: #e6db74; +} + +/* LiteralStringAffix */ +.chroma .sa { + color: #e6db74; +} + +/* LiteralStringBacktick */ +.chroma .sb { + color: #e6db74; +} + +/* LiteralStringChar */ +.chroma .sc { + color: #e6db74; +} + +/* LiteralStringDelimiter */ +.chroma .dl { + color: #e6db74; +} + +/* LiteralStringDoc */ +.chroma .sd { + color: #e6db74; +} + +/* LiteralStringDouble */ +.chroma .s2 { + color: #e6db74; +} + +/* LiteralStringEscape */ +.chroma .se { + color: #ae81ff; +} + +/* LiteralStringHeredoc */ +.chroma .sh { + color: #e6db74; +} + +/* LiteralStringInterpol */ +.chroma .si { + color: #e6db74; +} + +/* LiteralStringOther */ +.chroma .sx { + color: #e6db74; +} + +/* LiteralStringRegex */ +.chroma .sr { + color: #e6db74; +} + +/* LiteralStringSingle */ +.chroma .s1 { + color: #e6db74; +} + +/* LiteralStringSymbol */ +.chroma .ss { + color: #e6db74; +} + +/* LiteralNumber */ +.chroma .m { + color: #ae81ff; +} + +/* LiteralNumberBin */ +.chroma .mb { + color: #ae81ff; +} + +/* LiteralNumberFloat */ +.chroma .mf { + color: #ae81ff; +} + +/* LiteralNumberHex */ +.chroma .mh { + color: #ae81ff; +} + +/* LiteralNumberInteger */ +.chroma .mi { + color: #ae81ff; +} + +/* LiteralNumberIntegerLong */ +.chroma .il { + color: #ae81ff; +} + +/* LiteralNumberOct */ +.chroma .mo { + color: #ae81ff; +} + +/* Operator */ +.chroma .o { + color: #f92672; +} + +/* OperatorWord */ +.chroma .ow { + color: #f92672; +} + +/* Comment */ +.chroma .c { + color: #75715e; +} + +/* CommentHashbang */ +.chroma .ch { + color: #75715e; +} + +/* CommentMultiline */ +.chroma .cm { + color: #75715e; +} + +/* CommentSingle */ +.chroma .c1 { + color: #75715e; +} + +/* CommentSpecial */ +.chroma .cs { + color: #75715e; +} + +/* CommentPreproc */ +.chroma .cp { + color: #75715e; +} + +/* CommentPreprocFile */ +.chroma .cpf { + color: #75715e; +} + +/* GenericDeleted */ +.chroma .gd { + color: #f92672; +} + +/* GenericEmph */ +.chroma .ge { + font-style: italic; +} + +/* GenericInserted */ +.chroma .gi { + color: #a6e22e; +} + +/* GenericStrong */ +.chroma .gs { + font-weight: bold; +} + +/* GenericSubheading */ +.chroma .gu { + color: #75715e; +} diff --git a/attic/public/css/chroma.min.css b/attic/public/css/chroma.min.css new file mode 100644 index 0000000..d652c29 --- /dev/null +++ b/attic/public/css/chroma.min.css @@ -0,0 +1 @@ +.chroma{background-color:#272822;color:#f8f8f2}.chroma .err{background-color:#1e0010;color:#960050}.chroma .lntd{border:0;margin:0;padding:0;vertical-align:top}.chroma .lntable{border:0;border-spacing:0;display:block;margin:0;overflow:auto;padding:0;width:100%}.chroma .hl{background-color:#ffc;display:block;width:100%}.chroma .lnt{display:block}.chroma .ln,.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .k,.chroma .kc,.chroma .kd{color:#66d9ef}.chroma .kn{color:#f92672}.chroma .kp,.chroma .kr,.chroma .kt{color:#66d9ef}.chroma .na,.chroma .nc{color:#a6e22e}.chroma .no{color:#66d9ef}.chroma .nd,.chroma .ne,.chroma .nf,.chroma .nx{color:#a6e22e}.chroma .nt{color:#f92672}.chroma .l{color:#ae81ff}.chroma .dl,.chroma .ld,.chroma .s,.chroma .s2,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .sd{color:#e6db74}.chroma .se{color:#ae81ff}.chroma .s1,.chroma .sh,.chroma .si,.chroma .sr,.chroma .ss,.chroma .sx{color:#e6db74}.chroma .il,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo{color:#ae81ff}.chroma .o,.chroma .ow{color:#f92672}.chroma .c,.chroma .c1,.chroma .ch,.chroma .cm,.chroma .cp,.chroma .cpf,.chroma .cs{color:#75715e}.chroma .gd{color:#f92672}.chroma .ge{font-style:italic}.chroma .gi{color:#a6e22e}.chroma .gs{font-weight:700}.chroma .gu{color:#75715e} \ No newline at end of file diff --git a/attic/public/css/theme.css b/attic/public/css/theme.css new file mode 100644 index 0000000..8d33318 --- /dev/null +++ b/attic/public/css/theme.css @@ -0,0 +1,1305 @@ +@charset "UTF-8"; +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + /* stylelint-disable */ + font-family: monospace, monospace; /* 1 */ + /* stylelint-enable */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; /* 1 */ + /* stylelint-disable */ + text-decoration: underline; /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; /* 2 */ + /* stylelint-enable */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + /* stylelint-disable */ + font-family: monospace, monospace; /* 1 */ + /* stylelint-enable */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type=checkbox], +[type=radio] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type=search] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/*-----------------------* + Reset +*-----------------------*/ +* { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +body, +h1, +h2, +h3, +h4, +h5, +h6, +p, +ul, +ol, +li, +figure, +figcaption, +blockquote, +dl, +dd { + margin: 0; +} + +a { + text-decoration: none; + color: inherit; + cursor: pointer; +} + +input, +button, +textarea, +select { + font: inherit; +} + +button { + background-color: transparent; + color: inherit; + border-width: 0; + padding: 0; + cursor: pointer; +} + +input::-moz-focus-inner { + border: 0; + margin: 0; + padding: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +cite { + font-style: normal; +} + +fieldset { + border-width: 0; + margin: 0; + padding: 0; +} + +/*-----------------------* + Element v1.0.0-custom +*-----------------------*/ +* { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +:root { + font-size: 18px; + line-height: 1.6666666667; + color: #000; + font-family: var(--custom-font-family-base, -apple-system, BlinkMacSystemFont, "游ゴシック体", YuGothic, "メイリオ", Meiryo, "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + -webkit-font-feature-settings: "pwid"; + font-feature-settings: "pwid"; +} + +body { + background-color: #fafafa; + margin: 0; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--custom-font-family-headings, -apple-system, BlinkMacSystemFont, "游ゴシック体", YuGothic, "メイリオ", Meiryo, "Helvetica Neue", HelveticaNeue, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-weight: bold; + line-height: 1.6666666667; +} +h1 > small, +h2 > small, +h3 > small, +h4 > small, +h5 > small, +h6 > small { + font-size: 75%; + font-weight: normal; +} + +h1 { + font-size: 240%; + line-height: 1.3125; +} + +h2 { + font-size: 200%; + line-height: 1.375; +} + +h3 { + font-size: 160%; + line-height: 1.46875; +} + +h4 { + font-size: 125%; + line-height: 1.6; +} + +h5 { + font-size: 100%; + line-height: 1.75; +} + +h6 { + font-size: 80%; + line-height: 1.9375; +} + +a { + color: var(--custom-link-text-color, #2e7eb3); + text-decoration: none; +} +a:focus, a:active, a:hover { + color: var(--custom-link-text-hover-color, #38a0e4); + text-decoration: underline; +} + +hr { + background-color: #ccc; + height: 2px; + border: 0; +} + +p { + font-size: 18px; +} + +img { + display: inline-block; + line-height: 0; +} + +img, +video { + height: auto; + max-width: 100%; +} + +table { + border-collapse: collapse; + border: 1px solid #f0f0f0; + width: 100%; +} + +th, +td { + border-top: 1px solid #f0f0f0; + border-right: 1px solid #f0f0f0; + padding: 0.6rem; +} +tr:nth-child(even) th, +tr:nth-child(even) td { + background: #f8f8f8; +} + +th { + background: #eee; + font-weight: bold; + text-align: left; +} + +ul { + list-style-type: disc; +} + +ul.no-style { + list-style: none; + padding-left: 0; +} +ul.inline { + list-style: none; + padding-left: 0; +} +ul.inline li { + display: inline; + padding-right: 2rem; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 2rem; +} + +blockquote { + color: #999; + padding: 1.6666666667rem; + background-color: #f4f4f4; + border-left: 4px solid #f0f0f0; + border-radius: 0.2rem; +} + +code, +pre, +kbd { + font-family: Menlo, Monaco, "Courier New", monospace; +} + +code, +kbd { + padding: 0.2rem; + border-radius: 0.2rem; +} + +code { + background-color: #f4f4f4; +} + +kbd { + color: #fff; + background-color: #333; +} + +pre { + background-color: #f4f4f4; + padding: 1.6666666667rem; + overflow: auto; + white-space: pre-wrap; + border-radius: 0.2rem; +} +pre code { + padding: 0; + background-color: unset; +} +pre.wrap { + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; +} +pre.scrollable { + max-height: 240px; + overflow-y: scroll; +} + +figcaption { + color: #333; + font-size: 18px; + line-height: 1.6666666667; +} + +/*-----------------------* + stack +*-----------------------*/ +:root { + --const-stack: 1.6666666667rem; + --stack-top: 1.6666666667rem; + --stack-bottom: 0; + --first-stack-top: 0; + --first-stack-bottom: 0; + --last-stack-top: 0; + --last-stack-bottom: 0; +} + +.first-stack, +main * { + margin-top: var(--first-stack-top, unset); + margin-bottom: var(--first-stack-bottom, unset); +} + +.stack, +main * + h1, +main * + h2, +main * + h3, +main * + h4, +main * + h5, +main * + h6, +main * + p, +main * + hr, +main * + table, +main * + ul, +main * + ol, +main * + dl, +main * + blockquote, +main * + pre, +main * + figure, +.table_of_contents, +.edit-meta, +.edit-page, +.pagination, +.highlight, +.powered, +.panel, +.button, +.gist, +.twitter-tweet, +.ais-Hits-item, +.code { + margin-top: var(--stack-top, unset); + margin-bottom: var(--stack-bottom, unset); +} + +.last-stack { + margin-top: var(--last-stack-top, unset); + margin-bottom: var(--last-stack-bottom, unset); +} + +.stack-multi--by2 { + margin-top: calc(var(--first-stack-top, unset) * 2); + margin-bottom: calc(var(--first-stack-bottom, unset) * 2); +} + +.stack-multi--by4 { + margin-top: calc(var(--first-stack-top, unset) * 4); + margin-bottom: calc(var(--first-stack-bottom, unset) * 4); +} + +.stack-divi--by2 { + margin-top: calc(var(--first-stack-top, unset) / 2); + margin-bottom: calc(var(--first-stack-bottom, unset) / 2); +} + +.none-stack, +figure > figcaption, +.pagination > *, +.code .code-content .highlight { + margin-top: 0; +} + +.unset-stack, +main li > ul, +main li > ol, +.ais-Hits-item p { + margin-top: unset; +} + +/*-----------------------* + Structure +*-----------------------*/ +html, +body { + height: 100%; +} + +.container { + width: 100%; + height: 100%; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; + margin: auto; +} + +.content-container { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 1; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +main { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} +main:only-child { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.sidebar { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + overflow-x: hidden; + overflow-y: scroll; +} + +@media screen and (max-width: 480px) { + .content-container { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; + } + main { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + min-width: 100%; + } + .sidebar { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } +} +.pagination { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + font-weight: bold; +} +.nav-next { + margin-left: auto; +} + +@media screen and (max-width: 480px) { + .pagination { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + .nav-next { + margin-left: 0; + } +} +.panel { + --panel-font-color: #000; + --panel-background-color: unset; + --panel-border-color: transparent; + padding: 1.6666666667rem; + color: var(--panel-font-color, #000); + background: var(--panel-background-color, unset); + border: 1px solid; + border-color: var(--panel-border-color, transparent); +} +.panel a { + text-decoration: underline; + font-weight: bold; +} + +.panel-primary { + --panel-border-color: #f0f0f0; +} + +.panel-notice { + --panel-font-color: #fff; + --panel-background-color: #4ba0e1; + --custom-link-text-color: #fff; + --custom-link-text-hover-color: #fff; +} + +.panel-success { + --panel-font-color: #fff; + --panel-background-color: #609f43; + --custom-link-text-color: #fff; + --custom-link-text-hover-color: #fff; +} + +.panel-caution { + --panel-font-color: #fff; + --panel-background-color: #de776d; + --custom-link-text-color: #fff; + --custom-link-text-hover-color: #fff; +} + +.panel-warning { + --panel-font-color: #fff; + --panel-background-color: #e67e22; + --custom-link-text-color: #fff; + --custom-link-text-hover-color: #fff; +} + +.panel-danger { + --panel-font-color: #fff; + --panel-background-color: #ce3426; + --custom-link-text-color: #fff; + --custom-link-text-hover-color: #fff; +} + +.button { + display: inline-block; + font-size: 120%; + padding: 0.5rem 1.2rem; + font-weight: bold; + text-decoration: none; + border-radius: 0.8rem; + --button-font-color: #000; + --button-font-hover-color: #000; + --button-background-color: #fafafa; + --button-background-hover-color: #f7f7f7; + --button-border-color: #f0f0f0; + color: var(--button-font-color, #000); + background: var(--button-background-color, unset); + border: 2px solid; + border-color: var(--button-border-color, transparent); +} +.button:hover { + color: var(--button-font-hover-color, #000); + text-decoration: none; + background: var(--button-background-hover-color, unset); +} + +.button-notice { + --button-font-color: #fff; + --button-font-hover-color: #fff; + --button-background-color: #4ba0e1; + --button-background-hover-color: #3b89c5; + --button-border-color: transparent; +} + +.button-success { + --button-font-color: #fff; + --button-font-hover-color: #fff; + --button-background-color: #369b08; + --button-background-hover-color: #256905; + --button-border-color: transparent; +} + +.button-caution { + --button-font-color: #fff; + --button-font-hover-color: #fff; + --button-background-color: #f56558; + --button-background-hover-color: #d45145; + --button-border-color: transparent; +} + +.button-warning { + --button-font-color: #fff; + --button-font-hover-color: #fff; + --button-background-color: #f5811b; + --button-background-hover-color: #db7012; + --button-border-color: transparent; +} + +.button-danger { + --button-font-color: #fff; + --button-font-hover-color: #fff; + --button-background-color: #ce3426; + --button-background-hover-color: #a0281d; + --button-border-color: transparent; +} + +.notification { + padding: 0.2rem 1.6666666667rem; + text-align: center; + background: #eee; +} + +.backtothetop { + display: none; + font-size: 200%; +} + +.fa-layers .fa-circle { + color: #fff; +} + +figure > figcaption h4 { + font-size: 80%; + font-weight: normal; +} + +.table_of_contents { + font-size: 90%; + padding: 1.6666666667rem; + border: 4px solid #f0f0f0; +} +.table_of_contents ul { + list-style: none; + padding-left: 0; +} +.table_of_contents li { + border-top: 1px solid #f0f0f0; +} +.table_of_contents > nav > ul > li:first-child { + border-top: unset; +} +.table_of_contents ul > li li a { + margin-left: 2rem; +} +.table_of_contents ul ul > li li a { + margin-left: 4rem; +} +.table_of_contents ul ul ul > li li a { + margin-left: 6rem; +} +.table_of_contents ul ul ul ul > li li a { + margin-left: 8rem; +} +.table_of_contents ul ul ul ul ul > li li a { + margin-left: 10rem; +} + +.headerlink > .svg-inline--fa { + margin-left: 0.4rem; + width: 0.8rem; +} + +.ais-SearchBox .ais-SearchBox-input { + width: 70%; +} +.ais-SearchBox button { + margin-left: 0.2rem; + padding: 0.4rem; +} + +.ais-Stats { + font-size: 80%; + color: #70757a; +} + +.ais-Hits-item h3 { + font-size: 140%; + font-weight: normal; +} +.ais-Hits-item p { + color: #3C4043; +} +.ais-Hits-item .lastmod { + font-size: 90%; + color: #70757a; +} + +.ais-Pagination { + margin-top: 1em; +} + +.ais-Pagination-list { + list-style: none; + padding-left: 0; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; +} + +.ais-Pagination-item { + padding: 0.6rem; +} + +.code { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} +.code .filename { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + font-size: 80%; + color: #666; +} +.code .copy-btn { + margin-left: auto; + cursor: pointer; + position: relative; + font-size: 80%; + border: solid 1px #ccc; + padding: 0.2rem 0.6rem; + border-radius: 0.3rem; + line-height: 1; + margin-bottom: 0.2rem; + outline: none; +} +.code .code-content { + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} +.tooltipped::after { + content: "Copied!"; + background: #555; + display: inline-block; + color: #fff; + border-radius: 0.4rem; + position: absolute; + left: 50%; + top: -1.8rem; + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + font-size: 0.75rem; + padding: 4px 10px 6px 10px; + -webkit-animation: fade-tooltip 0.5s 1s 1 forwards; + animation: fade-tooltip 0.5s 1s 1 forwards; +} + +@-webkit-keyframes fade-tooltip { + to { + opacity: 0; + } +} + +@keyframes fade-tooltip { + to { + opacity: 0; + } +} +header { + color: var(--custom-font-color, #fff); + background: var(--custom-background-color, #000); + padding: 0.5rem 1.6666666667rem; +} +header h1 { + font-size: 140%; + display: inline-block; +} +header .version { + margin-left: 0.4rem; + font-size: 80%; +} +header .github { + color: currentColor; + margin-left: 0.4rem; + font-size: 180%; +} + +.global-menu { + color: var(--custom-font-color, #fff); + background: var(--custom-background-color, #000); + padding: 0.2rem 1.6666666667rem; +} +.global-menu ul { + list-style: none; + padding: 0; + margin: 0; +} +.global-menu li { + display: inline-block; + margin-right: 1.8rem; + position: relative; +} +.global-menu ul.sub-menu { + display: none; + margin: 0; + position: absolute; + top: 1.8rem; + left: 0; + z-index: 99999; +} +.global-menu ul.sub-menu li { + padding: 0.2rem 1.6666666667rem; + background: var(--custom-background-color, #000); + width: 140px; + font-size: 80%; +} +.global-menu ul.sub-menu li a { + color: var(--custom-font-color, #fff); +} +.global-menu .fa-angle-right { + margin-left: 0.4rem; + font-size: 80%; +} +.global-menu li.parent:hover > ul.sub-menu { + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-flow: column nowrap; + flex-flow: column nowrap; +} +@media screen and (max-width: 480px) { + .global-menu li { + display: block; + margin-right: 0; + border-bottom: 1px solid currentColor; + } + .global-menu li:last-child { + border-bottom: none; + } + .global-menu .fa-angle-right { + display: none; + } + .global-menu ul.sub-menu { + display: block; + position: static; + } + .global-menu ul.sub-menu li { + width: auto; + background: transparent; + padding: 0 0.4rem; + } + .global-menu ul.sub-menu li + li { + padding-top: 0.2rem; + } + .global-menu ul.sub-menu li a { + color: currentColor; + } +} +.global-menu a { + display: block; + color: currentColor; + text-decoration: none; +} +.global-menu a:hover { + text-decoration: underline; +} + +main { + padding: 3rem; +} + +@media screen and (max-width: 480px) { + main { + padding: 1rem; + } +} +.sidebar { + font-size: 90%; + line-height: 1.8; + background: #f9f9f9; + border-right: 1px solid #eee; +} +.sidebar ul { + list-style: none; + padding: 0; + margin: 0; +} +.sidebar a { + position: relative; + display: block; + color: #404040; + text-decoration: none; + padding: 0.2rem 1rem; + border-left: solid 4px #f9f9f9; + border-bottom: solid 1px #eee; +} +.sidebar a:hover { + color: #404040; + background: #eee; + border-left: solid 4px #ccc; +} +.sidebar nav > ul > li li a { + padding-left: 2rem; +} +.sidebar nav > ul ul > li li a { + padding-left: 3rem; +} +.sidebar nav > ul ul ul > li li a { + padding-left: 4rem; +} +.sidebar nav > ul ul ul ul > li li a { + padding-left: 5rem; +} +.sidebar nav > ul ul ul ul ul > li li a { + padding-left: 6rem; +} +@media screen and (max-width: 480px) { + .sidebar nav > ul > li:first-child a { + border-top: solid 1px #eee; + } +} +.sidebar .active > a { + background: #eee; + border-left: solid 4px #ccc; +} +.sidebar .slide-menu .has-sub-menu:not(.parent) ul { + display: none; +} +.sidebar .slide-menu .has-sub-menu > a span.mark { + position: absolute; + top: 0; + right: 0; + display: inline-block; + height: 32px; + width: 32px; + line-height: 2; + text-align: center; + color: #979797; + background: #f2f2f2; + border-left: 1px solid #e7e7e7; +} + +.sidebar-footer { + padding: 1.6666666667rem; +} + +.edit-meta { + font-size: 80%; + text-align: right; +} + +.edit-page { + font-weight: bold; +} + +.powered { + font-size: 80%; + text-align: right; + color: #999; +} diff --git a/attic/public/css/theme.min.css b/attic/public/css/theme.min.css new file mode 100644 index 0000000..170b483 --- /dev/null +++ b/attic/public/css/theme.min.css @@ -0,0 +1,2 @@ +@charset "UTF-8"; +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,body,dd,dl,figcaption,figure,h1,h2,h3,h4,h5,h6,li,ol,p,ul{margin:0}a{color:inherit;cursor:pointer}button,input,select,textarea{font:inherit}button{background-color:transparent;border-width:0;color:inherit;cursor:pointer;padding:0}input::-moz-focus-inner{border:0;margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}cite{font-style:normal}fieldset{border-width:0;margin:0;padding:0}*{-webkit-box-sizing:border-box;box-sizing:border-box}:root{color:#000;font-family:var(--custom-font-family-base,-apple-system,BlinkMacSystemFont,"游ゴシック体",YuGothic,"メイリオ",Meiryo,"Helvetica Neue",HelveticaNeue,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");-webkit-font-feature-settings:"pwid";font-feature-settings:"pwid";font-size:18px;line-height:1.6666666667}body{background-color:#fafafa;margin:0}h1,h2,h3,h4,h5,h6{font-family:var(--custom-font-family-headings,-apple-system,BlinkMacSystemFont,"游ゴシック体",YuGothic,"メイリオ",Meiryo,"Helvetica Neue",HelveticaNeue,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-weight:700;line-height:1.6666666667}h1>small,h2>small,h3>small,h4>small,h5>small,h6>small{font-size:75%;font-weight:400}h1{font-size:240%;line-height:1.3125}h2{font-size:200%;line-height:1.375}h3{font-size:160%;line-height:1.46875}h4{font-size:125%;line-height:1.6}h5{font-size:100%;line-height:1.75}h6{font-size:80%;line-height:1.9375}a{color:var(--custom-link-text-color,#2e7eb3);text-decoration:none}a:active,a:focus,a:hover{color:var(--custom-link-text-hover-color,#38a0e4);text-decoration:underline}hr{background-color:#ccc;border:0;height:2px}p{font-size:18px}img{display:inline-block;line-height:0}img,video{height:auto;max-width:100%}table{border:1px solid #f0f0f0;border-collapse:collapse;width:100%}td,th{border-right:1px solid #f0f0f0;border-top:1px solid #f0f0f0;padding:.6rem}tr:nth-child(2n) td,tr:nth-child(2n) th{background:#f8f8f8}th{background:#eee;font-weight:700;text-align:left}ul{list-style-type:disc}ul.inline,ul.no-style{list-style:none;padding-left:0}ul.inline li{display:inline;padding-right:2rem}dt{font-weight:700}dd{margin-left:2rem}blockquote{background-color:#f4f4f4;border-left:4px solid #f0f0f0;border-radius:.2rem;color:#999;padding:1.6666666667rem}code,kbd,pre{font-family:Menlo,Monaco,Courier New,monospace}code,kbd{border-radius:.2rem;padding:.2rem}code{background-color:#f4f4f4}kbd{background-color:#333;color:#fff}pre{background-color:#f4f4f4;border-radius:.2rem;overflow:auto;padding:1.6666666667rem;white-space:pre-wrap}pre code{background-color:unset;padding:0}pre.wrap{white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word}pre.scrollable{max-height:240px;overflow-y:scroll}figcaption{color:#333;font-size:18px;line-height:1.6666666667}:root{--const-stack:1.6666666667rem;--stack-top:1.6666666667rem;--stack-bottom:0;--first-stack-top:0;--first-stack-bottom:0;--last-stack-top:0;--last-stack-bottom:0}.first-stack,main *{margin-bottom:var(--first-stack-bottom,unset);margin-top:var(--first-stack-top,unset)}.ais-Hits-item,.button,.code,.edit-meta,.edit-page,.gist,.highlight,.pagination,.panel,.powered,.stack,.table_of_contents,.twitter-tweet,main *+blockquote,main *+dl,main *+figure,main *+h1,main *+h2,main *+h3,main *+h4,main *+h5,main *+h6,main *+hr,main *+ol,main *+p,main *+pre,main *+table,main *+ul{margin-bottom:var(--stack-bottom,unset);margin-top:var(--stack-top,unset)}.last-stack{margin-bottom:var(--last-stack-bottom,unset);margin-top:var(--last-stack-top,unset)}.stack-multi--by2{margin-bottom:calc(var(--first-stack-bottom, unset)*2);margin-top:calc(var(--first-stack-top, unset)*2)}.stack-multi--by4{margin-bottom:calc(var(--first-stack-bottom, unset)*4);margin-top:calc(var(--first-stack-top, unset)*4)}.stack-divi--by2{margin-bottom:calc(var(--first-stack-bottom, unset)/2);margin-top:calc(var(--first-stack-top, unset)/2)}.code .code-content .highlight,.none-stack,.pagination>*,figure>figcaption{margin-top:0}.ais-Hits-item p,.unset-stack,main li>ol,main li>ul{margin-top:unset}body,html{height:100%}.container{height:100%;width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;margin:auto}.container,.content-container{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex}.content-container{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}main{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}main,main:only-child{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0}main:only-child{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.sidebar{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1;overflow-x:hidden;overflow-y:scroll}@media screen and (max-width:480px){.content-container{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}main{min-width:100%}.sidebar,main{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.sidebar{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}.pagination{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:justify;-ms-flex-pack:justify;font-weight:700;justify-content:space-between}.nav-next{margin-left:auto}@media screen and (max-width:480px){.pagination{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nav-next{margin-left:0}}.panel{--panel-font-color:#000;--panel-background-color:unset;--panel-border-color:transparent;background:var(--panel-background-color,unset);border:1px solid;border-color:var(--panel-border-color,transparent);color:var(--panel-font-color,#000);padding:1.6666666667rem}.panel a{font-weight:700;text-decoration:underline}.panel-primary{--panel-border-color:#f0f0f0}.panel-notice{--panel-font-color:#fff;--panel-background-color:#4ba0e1;--custom-link-text-color:#fff;--custom-link-text-hover-color:#fff}.panel-success{--panel-font-color:#fff;--panel-background-color:#609f43;--custom-link-text-color:#fff;--custom-link-text-hover-color:#fff}.panel-caution{--panel-font-color:#fff;--panel-background-color:#de776d;--custom-link-text-color:#fff;--custom-link-text-hover-color:#fff}.panel-warning{--panel-font-color:#fff;--panel-background-color:#e67e22;--custom-link-text-color:#fff;--custom-link-text-hover-color:#fff}.panel-danger{--panel-font-color:#fff;--panel-background-color:#ce3426;--custom-link-text-color:#fff;--custom-link-text-hover-color:#fff}.button{border-radius:.8rem;display:inline-block;font-size:120%;font-weight:700;padding:.5rem 1.2rem;text-decoration:none;--button-font-color:#000;--button-font-hover-color:#000;--button-background-color:#fafafa;--button-background-hover-color:#f7f7f7;--button-border-color:#f0f0f0;background:var(--button-background-color,unset);border:2px solid;border-color:var(--button-border-color,transparent);color:var(--button-font-color,#000)}.button:hover{background:var(--button-background-hover-color,unset);color:var(--button-font-hover-color,#000);text-decoration:none}.button-notice{--button-font-color:#fff;--button-font-hover-color:#fff;--button-background-color:#4ba0e1;--button-background-hover-color:#3b89c5;--button-border-color:transparent}.button-success{--button-font-color:#fff;--button-font-hover-color:#fff;--button-background-color:#369b08;--button-background-hover-color:#256905;--button-border-color:transparent}.button-caution{--button-font-color:#fff;--button-font-hover-color:#fff;--button-background-color:#f56558;--button-background-hover-color:#d45145;--button-border-color:transparent}.button-warning{--button-font-color:#fff;--button-font-hover-color:#fff;--button-background-color:#f5811b;--button-background-hover-color:#db7012;--button-border-color:transparent}.button-danger{--button-font-color:#fff;--button-font-hover-color:#fff;--button-background-color:#ce3426;--button-background-hover-color:#a0281d;--button-border-color:transparent}.notification{background:#eee;padding:.2rem 1.6666666667rem;text-align:center}.backtothetop{display:none;font-size:200%}.fa-layers .fa-circle{color:#fff}figure>figcaption h4{font-size:80%;font-weight:400}.table_of_contents{border:4px solid #f0f0f0;font-size:90%;padding:1.6666666667rem}.table_of_contents ul{list-style:none;padding-left:0}.table_of_contents li{border-top:1px solid #f0f0f0}.table_of_contents>nav>ul>li:first-child{border-top:unset}.table_of_contents ul>li li a{margin-left:2rem}.table_of_contents ul ul>li li a{margin-left:4rem}.table_of_contents ul ul ul>li li a{margin-left:6rem}.table_of_contents ul ul ul ul>li li a{margin-left:8rem}.table_of_contents ul ul ul ul ul>li li a{margin-left:10rem}.headerlink>.svg-inline--fa{margin-left:.4rem;width:.8rem}.ais-SearchBox .ais-SearchBox-input{width:70%}.ais-SearchBox button{margin-left:.2rem;padding:.4rem}.ais-Stats{color:#70757a;font-size:80%}.ais-Hits-item h3{font-size:140%;font-weight:400}.ais-Hits-item p{color:#3c4043}.ais-Hits-item .lastmod{color:#70757a;font-size:90%}.ais-Pagination{margin-top:1em}.ais-Pagination-list{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style:none;padding-left:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ais-Pagination-item{padding:.6rem}.code{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.code,.code .filename{-webkit-box-sizing:border-box;box-sizing:border-box}.code .filename{-webkit-box-flex:0;color:#666;-ms-flex:0 0 75%;flex:0 0 75%;font-size:80%;max-width:75%}.code .copy-btn{border:1px solid #ccc;border-radius:.3rem;cursor:pointer;font-size:80%;line-height:1;margin-bottom:.2rem;margin-left:auto;outline:none;padding:.2rem .6rem;position:relative}.code .code-content{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.tooltipped:after{-webkit-animation:fade-tooltip .5s 1s 1 forwards;animation:fade-tooltip .5s 1s 1 forwards;background:#555;border-radius:.4rem;color:#fff;content:"Copied!";display:inline-block;font-size:.75rem;left:50%;padding:4px 10px 6px;position:absolute;top:-1.8rem;-webkit-transform:translate(-50%);transform:translate(-50%)}@-webkit-keyframes fade-tooltip{to{opacity:0}}@keyframes fade-tooltip{to{opacity:0}}header{background:var(--custom-background-color,#000);color:var(--custom-font-color,#fff);padding:.5rem 1.6666666667rem}header h1{display:inline-block;font-size:140%}header .version{font-size:80%;margin-left:.4rem}header .github{color:currentColor;font-size:180%;margin-left:.4rem}.global-menu{background:var(--custom-background-color,#000);color:var(--custom-font-color,#fff);padding:.2rem 1.6666666667rem}.global-menu ul{list-style:none;margin:0;padding:0}.global-menu li{display:inline-block;margin-right:1.8rem;position:relative}.global-menu ul.sub-menu{display:none;left:0;margin:0;position:absolute;top:1.8rem;z-index:99999}.global-menu ul.sub-menu li{background:var(--custom-background-color,#000);font-size:80%;padding:.2rem 1.6666666667rem;width:140px}.global-menu ul.sub-menu li a{color:var(--custom-font-color,#fff)}.global-menu .fa-angle-right{font-size:80%;margin-left:.4rem}.global-menu li.parent:hover>ul.sub-menu{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column nowrap;flex-flow:column nowrap}@media screen and (max-width:480px){.global-menu li{border-bottom:1px solid;display:block;margin-right:0}.global-menu li:last-child{border-bottom:none}.global-menu .fa-angle-right{display:none}.global-menu ul.sub-menu{display:block;position:static}.global-menu ul.sub-menu li{background:transparent;padding:0 .4rem;width:auto}.global-menu ul.sub-menu li+li{padding-top:.2rem}.global-menu ul.sub-menu li a{color:currentColor}}.global-menu a{color:currentColor;display:block;text-decoration:none}.global-menu a:hover{text-decoration:underline}main{padding:3rem}@media screen and (max-width:480px){main{padding:1rem}}.sidebar{background:#f9f9f9;border-right:1px solid #eee;font-size:90%;line-height:1.8}.sidebar ul{list-style:none;margin:0;padding:0}.sidebar a{border-bottom:1px solid #eee;border-left:4px solid #f9f9f9;color:#404040;display:block;padding:.2rem 1rem;position:relative;text-decoration:none}.sidebar a:hover{background:#eee;border-left:4px solid #ccc;color:#404040}.sidebar nav>ul>li li a{padding-left:2rem}.sidebar nav>ul ul>li li a{padding-left:3rem}.sidebar nav>ul ul ul>li li a{padding-left:4rem}.sidebar nav>ul ul ul ul>li li a{padding-left:5rem}.sidebar nav>ul ul ul ul ul>li li a{padding-left:6rem}@media screen and (max-width:480px){.sidebar nav>ul>li:first-child a{border-top:1px solid #eee}}.sidebar .active>a{background:#eee;border-left:4px solid #ccc}.sidebar .slide-menu .has-sub-menu:not(.parent) ul{display:none}.sidebar .slide-menu .has-sub-menu>a span.mark{background:#f2f2f2;border-left:1px solid #e7e7e7;color:#979797;display:inline-block;height:32px;line-height:2;position:absolute;right:0;text-align:center;top:0;width:32px}.sidebar-footer{padding:1.6666666667rem}.edit-meta{font-size:80%;text-align:right}.edit-page{font-weight:700}.powered{color:#999;font-size:80%;text-align:right} \ No newline at end of file diff --git a/attic/public/cycler_working_first_octets.png b/attic/public/cycler_working_first_octets.png new file mode 100644 index 0000000..0f85784 Binary files /dev/null and b/attic/public/cycler_working_first_octets.png differ diff --git a/attic/public/cycler_working_last_octets.png b/attic/public/cycler_working_last_octets.png new file mode 100644 index 0000000..ccde004 Binary files /dev/null and b/attic/public/cycler_working_last_octets.png differ diff --git a/attic/public/display-driver.jpg b/attic/public/display-driver.jpg new file mode 100644 index 0000000..ee46bb7 Binary files /dev/null and b/attic/public/display-driver.jpg differ diff --git a/attic/public/five_leds.png b/attic/public/five_leds.png new file mode 100644 index 0000000..1d6bd21 Binary files /dev/null and b/attic/public/five_leds.png differ diff --git a/attic/public/foto-am-30-06-13-um-20-021.jpg b/attic/public/foto-am-30-06-13-um-20-021.jpg new file mode 100644 index 0000000..9e26387 Binary files /dev/null and b/attic/public/foto-am-30-06-13-um-20-021.jpg differ diff --git a/attic/public/game-ctrl.jpg b/attic/public/game-ctrl.jpg new file mode 100644 index 0000000..0ad20c5 Binary files /dev/null and b/attic/public/game-ctrl.jpg differ diff --git a/attic/public/howtos/ca-certificate-in-debian/index.html b/attic/public/howtos/ca-certificate-in-debian/index.html new file mode 100644 index 0000000..a921f0e --- /dev/null +++ b/attic/public/howtos/ca-certificate-in-debian/index.html @@ -0,0 +1,135 @@ + + + + + +How to add a CA certificate in Debian - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

How to add a CA certificate in Debian

+

Copy CA file with extension crt into /usr/local/share/ca-certificates/.

+

Call update-ca-certificates as root.

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/colors-in-minicom/index.html b/attic/public/howtos/colors-in-minicom/index.html new file mode 100644 index 0000000..f0704d8 --- /dev/null +++ b/attic/public/howtos/colors-in-minicom/index.html @@ -0,0 +1,209 @@ + + + + + +Colors in Minicom - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Colors in Minicom

+

To start minicom in color mode use

+
minicom -c on
+

Switch terminal emulation to ANSI.

+

Use escape sequences to actually change the color of text as described for instance here

+

https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html.

+

The base sequence is \1b[Xm where X is a number as described below.

+

To get the colors in bright style, use the sequence \x1b[X;1m.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NumberColor
0reset
1highlight
7inverse
30black
31red
32green
33yellow
34blue
35magenta
36cyan
37white
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/engel-des-herrn/index.html b/attic/public/howtos/engel-des-herrn/index.html new file mode 100644 index 0000000..60c2220 --- /dev/null +++ b/attic/public/howtos/engel-des-herrn/index.html @@ -0,0 +1,150 @@ + + + + + +Engel des Herrn - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Engel des Herrn

+

Der Engel des Herrn brachte Maria die Botschaft, und sie empfing vom Heiligen Geist. +Gegrüßet seist du, Maria …

+

Maria sprach: Siehe, ich bin die Magd des Herrn; mir geschehe nach deinem Wort. +Gegrüßet seist du, Maria …

+

Und das Wort ist Fleisch geworden und hat unter uns gewohnt. +Gegrüßet seist du, Maria …

+

Bitte für uns, heilige Gottesmutter (heilige Gottesgebärerin), (auf) dass wir würdig werden der Verheißungen Christi.

+

Lasset uns beten. Allmächtiger Gott, gieße deine Gnade in unsere Herzen ein. Durch die Botschaft des Engels haben wir die Menschwerdung Christi, deines Sohnes, erkannt. Führe uns durch sein Leiden und Kreuz zur Herrlichkeit der Auferstehung. Darum bitten wir durch Christus, unsern Herrn. Amen.

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/gitlab-backup/index.html b/attic/public/howtos/gitlab-backup/index.html new file mode 100644 index 0000000..d582ac9 --- /dev/null +++ b/attic/public/howtos/gitlab-backup/index.html @@ -0,0 +1,177 @@ + + + + + +Gitlab Backup and Restore - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Gitlab Backup and Restore

+

Backup

+

Find the backup directory:

+
grep backup_path /etc/gitlab/gitlab.rb
+

Issue backup:

+
sudo gitlab-backup create
+

Transfer backup using scp to destination machine.

+

Backup configuration and secrets:

+
sudp cp /etc/gitlab/gitlab-secrets.json /backuppath/
+sudo cp /etc/gitlab/gitlab.rb /backuppath/
+

Restore

+

See also here: https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html

+

DO NOT OVERWRITE THE CONFIGURATION ON THE DESTINATION MACHINE. COMPARE IT AND CONSIDER AND EVALUATE EACH DIFFERENCE

+

Stop processes of GitLab connecting to the database:

+
gitlab-ctl stop puma
+gitlab-ctl stop sidekiq
+# check
+gitlab-ctl status
+

Do not stop the whole system since the restore tool has to connect to the database which would also stop in that case.

+

Issue restore. Run this command in a screen session. It is running quite long and requires manual intervention in between.

+
sudo gitlab-backup restore BACKUP=...
+

Use the datecode and the version tag of the backup created above.

+

Remember secrets and configuration. Do not overwrite configuration, see above.

+

Reconfigure the instance:

+
sudo gitlab-ctl reconfigure
+

Start the instance:

+
sudo gitlab-ctl start
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/gitlab-change-baseurl/index.html b/attic/public/howtos/gitlab-change-baseurl/index.html new file mode 100644 index 0000000..3b37018 --- /dev/null +++ b/attic/public/howtos/gitlab-change-baseurl/index.html @@ -0,0 +1,149 @@ + + + + + +Gitlab Change BaseURL in Database - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Gitlab Change BaseURL in Database

+

Change URL

+

After a migration changing the base url in the configuration is not enough. It must also be changed in the database.

+
    +
  • Adjust the variable external_url in the file /etc/gitlab/gitlab.rb and run gitlab-ctl reconfigure
  • +
  • Adjust the canonical URL in the database: +
    gitlab-rails console
    +ApplicationSetting.current.update!(home_page_url: 'https://neue-url.example.com')
    +ApplicationSetting.current.update!(after_sign_out_path: 'https://neue-url.example.com')
    +
  • +
  • Reading out a value from the ApplicationSetting via the gitlab-rails console is done using +
    ApplicationSetting.current.home_page_url
    +
  • +
  • Clear the internal cache: +
    gitlab-rake cache:clear
    +
  • +
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/gitlab-upgrades/index.html b/attic/public/howtos/gitlab-upgrades/index.html new file mode 100644 index 0000000..e0d1f06 --- /dev/null +++ b/attic/public/howtos/gitlab-upgrades/index.html @@ -0,0 +1,151 @@ + + + + + +Gitlab Upgrades - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Gitlab Upgrades

+

Upgrade of a GitLab instance

+

When upgrading a Gitlab instance, strictly follow the defined upgrade path. Consider to snapshot the filesystem if possible after each step.

+

Additional, after each step wait until all background migrations are completed before performing the next upgrade step.

+ +

To find the versions of a specific package in the Debian apt cache use

+
    apt-cache madison gitlab-ce
+

To upgrade to a specific version use

+
    apt install gitlab-ce=<version>
+

Definitely observe the version specific upgrade instructions, especially background migrations!

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/index.html b/attic/public/howtos/index.html new file mode 100644 index 0000000..b81df29 --- /dev/null +++ b/attic/public/howtos/index.html @@ -0,0 +1,124 @@ + + + + + +HowTos - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

HowTos

+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/index.xml b/attic/public/howtos/index.xml new file mode 100644 index 0000000..670e1a9 --- /dev/null +++ b/attic/public/howtos/index.xml @@ -0,0 +1,109 @@ + + + + HowTos on Minimal Setups + http://172.16.3.33:1313/howtos/ + Recent content in HowTos on Minimal Setups + Hugo + en-us + + + Colors in Minicom + http://172.16.3.33:1313/howtos/colors-in-minicom/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/colors-in-minicom/ + <p>To start <code>minicom</code> in color mode use</p> <pre tabindex="0"><code>minicom -c on </code></pre><p>Switch terminal emulation to ANSI.</p> <p>Use escape sequences to actually change the color of text as described for instance here</p> <p><a href="https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html">https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html</a>.</p> <p>The base sequence is <code>\1b[Xm</code> where X is a number as described below.</p> <p>To get the colors in bright style, use the sequence <code>\x1b[X;1m</code>.</p> <table> <thead> <tr> <th>Number</th> <th>Color</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>reset</td> </tr> <tr> <td>1</td> <td>highlight</td> </tr> <tr> <td>7</td> <td>inverse</td> </tr> <tr> <td>30</td> <td>black</td> </tr> <tr> <td>31</td> <td>red</td> </tr> <tr> <td>32</td> <td>green</td> </tr> <tr> <td>33</td> <td>yellow</td> </tr> <tr> <td>34</td> <td>blue</td> </tr> <tr> <td>35</td> <td>magenta</td> </tr> <tr> <td>36</td> <td>cyan</td> </tr> <tr> <td>37</td> <td>white</td> </tr> </tbody> </table> + + + Engel des Herrn + http://172.16.3.33:1313/howtos/engel-des-herrn/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/engel-des-herrn/ + <p>Der Engel des Herrn brachte Maria die Botschaft, und sie empfing vom Heiligen Geist. Gegrüßet seist du, Maria …</p> <p>Maria sprach: Siehe, ich bin die Magd des Herrn; mir geschehe nach deinem Wort. Gegrüßet seist du, Maria …</p> <p>Und das Wort ist Fleisch geworden und hat unter uns gewohnt. Gegrüßet seist du, Maria …</p> <p>Bitte für uns, heilige Gottesmutter (heilige Gottesgebärerin), (auf) dass wir würdig werden der Verheißungen Christi.</p> <p>Lasset uns beten. Allmächtiger Gott, gieße deine Gnade in unsere Herzen ein. Durch die Botschaft des Engels haben wir die Menschwerdung Christi, deines Sohnes, erkannt. Führe uns durch sein Leiden und Kreuz zur Herrlichkeit der Auferstehung. Darum bitten wir durch Christus, unsern Herrn. Amen.</p> + + + Execute occ in Nextcloud pod + http://172.16.3.33:1313/howtos/occ-in-nextcloud-pod/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/occ-in-nextcloud-pod/ + <p>First, look up the name of the pod using</p> <pre tabindex="0"><code>kubectl get pods -n nextcloud </code></pre><p>Then, get into the pod using</p> <pre tabindex="0"><code>kubectl exec --stdin --tty NAME_OF_THE_POD -c nextcloud -n nextcloud -- sh </code></pre><p>Finally, within the pod</p> <pre tabindex="0"><code>su -s /bin/sh www-data -c &#34;php occ --help&#34; </code></pre> + + + Gitlab Backup and Restore + http://172.16.3.33:1313/howtos/gitlab-backup/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-backup/ + <h2 id="backup">Backup</h2> <p>Find the backup directory:</p> <pre tabindex="0"><code>grep backup_path /etc/gitlab/gitlab.rb </code></pre><p>Issue backup:</p> <pre tabindex="0"><code>sudo gitlab-backup create </code></pre><p>Transfer backup using scp to destination machine.</p> <p>Backup configuration and secrets:</p> <pre tabindex="0"><code>sudp cp /etc/gitlab/gitlab-secrets.json /backuppath/ sudo cp /etc/gitlab/gitlab.rb /backuppath/ </code></pre><h2 id="restore">Restore</h2> <p>See also here: <a href="https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html">https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html</a></p> <p><em>DO NOT OVERWRITE THE CONFIGURATION ON THE DESTINATION MACHINE. COMPARE IT AND CONSIDER AND EVALUATE EACH DIFFERENCE</em></p> <p>Stop processes of GitLab connecting to the database:</p> <pre tabindex="0"><code>gitlab-ctl stop puma gitlab-ctl stop sidekiq # check gitlab-ctl status </code></pre><p>Do not stop the whole system since the restore tool has to connect to the database which would also stop in that case.</p> + + + Gitlab Change BaseURL in Database + http://172.16.3.33:1313/howtos/gitlab-change-baseurl/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-change-baseurl/ + <h2 id="change-url">Change URL</h2> <p>After a migration changing the base url in the configuration is not enough. It must also be changed in the database.</p> <ul> <li>Adjust the variable <code>external_url</code> in the file <code>/etc/gitlab/gitlab.rb</code> and run <code>gitlab-ctl reconfigure</code></li> <li>Adjust the canonical URL in the database: <pre tabindex="0"><code>gitlab-rails console ApplicationSetting.current.update!(home_page_url: &#39;https://neue-url.example.com&#39;) ApplicationSetting.current.update!(after_sign_out_path: &#39;https://neue-url.example.com&#39;) </code></pre></li> <li>Reading out a value from the ApplicationSetting via the gitlab-rails console is done using <pre tabindex="0"><code>ApplicationSetting.current.home_page_url </code></pre></li> <li>Clear the internal cache: <pre tabindex="0"><code>gitlab-rake cache:clear </code></pre></li> </ul> + + + Gitlab Upgrades + http://172.16.3.33:1313/howtos/gitlab-upgrades/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-upgrades/ + <h2 id="upgrade-of-a-gitlab-instance">Upgrade of a GitLab instance</h2> <p>When upgrading a Gitlab instance, strictly follow the defined upgrade path. Consider to snapshot the filesystem if possible after each step.</p> <p>Additional, after each step wait until all background migrations are completed before performing the next upgrade step.</p> <ul> <li><a href="https://docs.gitlab.com/ee/update/index.html#upgrade-paths">Upgrade Paths</a></li> <li><a href="https://docs.gitlab.com/ee/update/package/#upgrade-to-a-specific-version-using-the-official-repositories">Upgrading to a specific version</a></li> </ul> <p>To find the versions of a specific package in the Debian apt cache use</p> <pre tabindex="0"><code> apt-cache madison gitlab-ce </code></pre><p>To upgrade to a specific version use</p> + + + How to add a CA certificate in Debian + http://172.16.3.33:1313/howtos/ca-certificate-in-debian/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/ca-certificate-in-debian/ + <p>Copy CA file with extension <code>crt</code> into <code>/usr/local/share/ca-certificates/</code>.</p> <p>Call <code>update-ca-certificates</code> as root.</p> + + + iSCSI on Linux + http://172.16.3.33:1313/howtos/iscsi-on-linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/iscsi-on-linux/ + <h2 id="preparation">Preparation</h2> <p>Install <code>open-iscsi</code>, at least on Debian systems.</p> <h2 id="use-an-iscsi-target-from-linux">Use an iSCSI target from Linux</h2> <p>In our setup a Synology NAS at 172.16.200.19 provides the targets.</p> <p>First, run</p> <pre tabindex="0"><code> iscsiadm -m discovery -t sendtargets -p 172.16.200.19 </code></pre><p>to discover all provided targets.</p> <p>You get something like this</p> <pre tabindex="0"><code> 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7 </code></pre><p>Now, connect to the target using</p> + + + Magnifikat + http://172.16.3.33:1313/howtos/magnifikat/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/magnifikat/ + <p>Bibellese zum 15.12.2013</p> <p>1,46 Und Maria sprach: Meine Seele erhebt den Herrn,</p> <p>47 und mein Geist freut sich Gottes, meines Heilandes;</p> <p>48 denn er hat die Niedrigkeit seiner Magd angesehen. Siehe, von nun an werden mich selig preisen alle Kindeskinder.</p> <p>49 Denn er hat große Dinge an mir getan, der da mächtig ist und dessen Name heilig ist.</p> <p>50 Und seine Barmherzigkeit währt von Geschlecht zu Geschlecht bei denen, die ihn fürchten.</p> + + + Neovim Setup + http://172.16.3.33:1313/howtos/neovim/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/neovim/ + <p>Lots of information on nvim can be found for instance here:</p> <ul> <li><a href="https://programmingpercy.tech/blog/learn-how-to-use-neovim-as-ide/">https://programmingpercy.tech/blog/learn-how-to-use-neovim-as-ide/</a></li> <li><a href="https://github.com/hrsh7th/">https://github.com/hrsh7th/</a></li> <li><a href="https://github.com/wbthomason/packer.nvim">https://github.com/wbthomason/packer.nvim</a></li> <li><a href="https://docs.rockylinux.org/books/nvchad/nvchad_ui/nvimtree/">https://docs.rockylinux.org/books/nvchad/nvchad_ui/nvimtree/</a></li> </ul> <h2 id="installation-of-neovim">Installation of Neovim</h2> <p>On Debian install neovim from the sources, the packages are mostly a bit aged.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>git clone https://github.com/neovim/neovim </span></span><span style="display:flex;"><span>sudo apt install ninja-build gettext cmake unzip curl </span></span><span style="display:flex;"><span>make CMAKE_BUILD_TYPE<span style="color:#f92672">=</span>Release </span></span><span style="display:flex;"><span>sudo make install </span></span></code></pre></div><p>On Windows install from binary or using installer, on MacOS use <code>brew</code>.</p> <p>Debian packages can be found here: <a href="https://github.com/neovim/neovim-releases/releases">https://github.com/neovim/neovim-releases/releases</a></p> <h2 id="configuration">Configuration</h2> <p>Clone the packer repository:</p> + + + PuTTY and OPENGPG hardware keys + http://172.16.3.33:1313/howtos/putty-and-hardware-keys/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/putty-and-hardware-keys/ + <ul> <li>install gpg4win installed</li> <li>create or edit the file <code>gpg-agent.conf</code>, usually in <code>c:\Users\XXX\AppData\Roaming\gnupg\</code>: <pre tabindex="0"><code>enable-putty-support enable-ssh-support use-standard-socket </code></pre></li> </ul> + + + Resize HDD on running system + http://172.16.3.33:1313/howtos/resize-hdd-on-running-system/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/resize-hdd-on-running-system/ + <ul> <li>Resize target on VMWare or on Synology or where ever it is provided</li> <li>Stop services using the disk</li> <li>Unmount the disk</li> <li>Run <code>e2fsck -f</code> on the disk</li> <li>Rescan disks using <code>echo 1&gt;/sys/class/block/sdx/device/rescan</code> (replace <code>sdx</code> by actual disk device)</li> <li>Extend partition using <code>resize</code> in <code>cfdisk</code></li> <li>Extend filesystem using <code>resize2fs</code> on extended partition</li> <li>Mount the partition</li> <li>Start services</li> </ul> + + + snmpwalk with numeric and text output of oid + http://172.16.3.33:1313/howtos/snmpwalk-with-numeric-and-text-output/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/snmpwalk-with-numeric-and-text-output/ + <pre tabindex="0"><code>snmpwalk -v 2c -c $COMMUNITY -On $HOST $BASE_OID | while read -r line; do oid=`echo $line | awk &#39;{print $1}&#39;` textoid=`snmptranslate $oid` value=`echo $line | cut -d &#39; &#39; -f 3-` echo &#34;$oid ($textoid): $value&#34; done </code></pre> + + + Solution for Prince of Persia 1 + http://172.16.3.33:1313/howtos/prince-of-persia-1/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/prince-of-persia-1/ + <h1 id="lösung-prince-of-persia-1">Lösung Prince of Persia 1</h1> <h2 id="komplettlösung-zu-prince-of-persia-1">Komplettlösung zu &ldquo;Prince of Persia 1&rdquo;</h2> <p>Zuallererst mal zur Joysticksteuerung: Wenn Ihr beim<br> Springen den Feuerknopf gedrückt haltet, macht der Prince<br> einen &lsquo;Klammersprung&rsquo;, d.h., bei grossen Entfernungen<br> springt er an die gegenüberliegende Wand und klammert sich<br> dort fest. Mit dem Joystick dann einfach nach oben drücken<br> und schon ist&rsquo;s geschafft.</p> <p>Ausserdem kann man teilweise Decken aufstossen (VORSICHT,<br> wenn die Platten dann runterfallen!); aber dies ist für das<br> Spiel nur dann nötig, wenn man in einer Sackgasse steckt<br> und der Weg über die Decke weitergeht. Ansonsten sind dort<br> meist &rsquo;nur&rsquo; Potions versteckt. ACHTUNG: Um das Spiel<br> zeitlich zu schaffen empfiehlt es sich, (wenn nicht<br> wirklich nötig) die Deckengänge NICHT zu benutzen. Das<br> Spiel an sich verfügt über 13 Level (12 Level + den<br> Abschlußlevel mit Kampf gegen Jaffar). Wenn man alle Level<br> kennt und perfekt spielt (nie kaputt geht) braucht man<br> trotzdem ca. 45-50 min. Um das Spiel also zu schaffen, muß<br> man in allen Leveln den Weg kennen. Da dies natürlich nicht<br> beim erstenmal klappt ist klar; also immer ein bis zwei<br> Level weiterarbeiten und gut auskundschaften.</p> + + + diff --git a/attic/public/howtos/iscsi-on-linux/index.html b/attic/public/howtos/iscsi-on-linux/index.html new file mode 100644 index 0000000..9d24690 --- /dev/null +++ b/attic/public/howtos/iscsi-on-linux/index.html @@ -0,0 +1,182 @@ + + + + + +iSCSI on Linux - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

iSCSI on Linux

+

Preparation

+

Install open-iscsi, at least on Debian systems.

+

Use an iSCSI target from Linux

+

In our setup a Synology NAS at 172.16.200.19 provides the targets.

+

First, run

+
   iscsiadm -m discovery -t sendtargets -p 172.16.200.19
+

to discover all provided targets.

+

You get something like this

+
   172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7
+   [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7
+   172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7
+   [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7
+   172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7
+   [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7
+   172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7
+   [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7
+   172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7
+   [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7
+

Now, connect to the target using

+
   iscsiadm -m node --targetname "iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7" \
+     --portal 172.16.200.19 --login
+

A new SCSI device will be created. Check the name of the device using ‘‘dmesg’’. You see something like this

+
   [16924536.979916] scsi host13: iSCSI Initiator over TCP/IP
+   [16924537.010635] scsi 13:0:0:1: Direct-Access     SYNOLOGY iSCSI Storage    4.0  PQ: 0 ANSI: 5
+   [16924537.011449] sd 13:0:0:1: Attached scsi generic sg10 type 0
+   [16924537.012597] sd 13:0:0:1: [sdj] 209715200 512-byte logical blocks: (107 GB/100 GiB)
+   [16924537.012827] sd 13:0:0:1: [sdj] Write Protect is off
+   [16924537.012828] sd 13:0:0:1: [sdj] Mode Sense: 43 00 10 08
+   [16924537.013111] sd 13:0:0:1: [sdj] Write cache: enabled, read cache: enabled, supports DPO and FUA
+   [16924537.013361] sd 13:0:0:1: [sdj] Optimal transfer size 16384 logical blocks > dev_max (8192 logical blocks)
+   [16924537.018630] sd 13:0:0:1: [sdj] Attached SCSI disk
+

Now use fdisk, mkfs and if you like blkid on the new device and put it into the /etc/fstab.

+

===== Authenticated target =====

+
    iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.authmethod --value=CHAP
+    iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.username --value=$Id
+    iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.password --value=$MDP
+    iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --login
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/magnifikat/index.html b/attic/public/howtos/magnifikat/index.html new file mode 100644 index 0000000..d739d47 --- /dev/null +++ b/attic/public/howtos/magnifikat/index.html @@ -0,0 +1,167 @@ + + + + + +Magnifikat - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Magnifikat

+

Bibellese zum 15.12.2013

+

1,46 Und Maria sprach: +Meine Seele erhebt den Herrn,

+

47 und mein Geist freut sich Gottes, meines Heilandes;

+

48 denn er hat die Niedrigkeit seiner Magd angesehen. +Siehe, von nun an werden mich selig preisen alle Kindeskinder.

+

49 Denn er hat große Dinge an mir getan, +der da mächtig ist und dessen Name heilig ist.

+

50 Und seine Barmherzigkeit währt von Geschlecht zu Geschlecht +bei denen, die ihn fürchten.

+

51 Er übt Gewalt mit seinem Arm +und zerstreut, die hoffärtig sind in ihres Herzens Sinn.

+

52 Er stößt die Gewaltigen vom Thron +und erhebt die Niedrigen.

+

53 Die Hungrigen füllt er mit Gütern +und lässt die Reichen leer ausgehen.

+

54 Er gedenkt der Barmherzigkeit +und hilft seinem Diener Israel auf,

+

55 wie er geredet hat zu unsern Vätern, +Abraham und seinen Kindern in Ewigkeit.

+

Lukas 1,46-55

+

http://m.die-bibel.de/luther-bibel-1984/bibelstelle/Lukas%201?utm_source=Bibellese_Apple&utm_medium=App&utm_campaign=Bibellese

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/neovim/index.html b/attic/public/howtos/neovim/index.html new file mode 100644 index 0000000..0d796eb --- /dev/null +++ b/attic/public/howtos/neovim/index.html @@ -0,0 +1,164 @@ + + + + + +Neovim Setup - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Neovim Setup

+

Lots of information on nvim can be found for instance here:

+ +

Installation of Neovim

+

On Debian install neovim from the sources, the packages are mostly a bit aged.

+
git clone https://github.com/neovim/neovim
+sudo apt install ninja-build gettext cmake unzip curl
+make CMAKE_BUILD_TYPE=Release
+sudo make install
+

On Windows install from binary or using installer, on MacOS use brew.

+

Debian packages can be found here: https://github.com/neovim/neovim-releases/releases

+

Configuration

+

Clone the packer repository:

+
git clone --depth 1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvim
+

Clone the local configuration repo:

+
git clone git@gitea.hottis.de:wn/my-nvim-config.git ~/.config/nvim
+

At the first start of nvim a lot of error messages will be shown. Ignore them and run :PackerInstall. At the next start everything should be fine.

+

The file ~/.config/nvim/init.lua contains both plugins to be loaded and regular settings for nvim. The directory ~/.config/nvim/lua contains configuration for individual plugins.

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/occ-in-nextcloud-pod/index.html b/attic/public/howtos/occ-in-nextcloud-pod/index.html new file mode 100644 index 0000000..8b99001 --- /dev/null +++ b/attic/public/howtos/occ-in-nextcloud-pod/index.html @@ -0,0 +1,145 @@ + + + + + +Execute occ in Nextcloud pod - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Execute occ in Nextcloud pod

+

First, look up the name of the pod using

+
kubectl get pods -n nextcloud
+

Then, get into the pod using

+
kubectl exec --stdin --tty NAME_OF_THE_POD -c nextcloud -n nextcloud -- sh
+

Finally, within the pod

+
su -s /bin/sh www-data -c "php occ --help"
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/prince-of-persia-1/index.html b/attic/public/howtos/prince-of-persia-1/index.html new file mode 100644 index 0000000..c6e89a1 --- /dev/null +++ b/attic/public/howtos/prince-of-persia-1/index.html @@ -0,0 +1,322 @@ + + + + + +Solution for Prince of Persia 1 - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Solution for Prince of Persia 1

+

Lösung Prince of Persia 1

+

Komplettlösung zu “Prince of Persia 1”

+

Zuallererst mal zur Joysticksteuerung: Wenn Ihr beim
+Springen den Feuerknopf gedrückt haltet, macht der Prince
+einen ‘Klammersprung’, d.h., bei grossen Entfernungen
+springt er an die gegenüberliegende Wand und klammert sich
+dort fest. Mit dem Joystick dann einfach nach oben drücken
+und schon ist’s geschafft.

+

Ausserdem kann man teilweise Decken aufstossen (VORSICHT,
+wenn die Platten dann runterfallen!); aber dies ist für das
+Spiel nur dann nötig, wenn man in einer Sackgasse steckt
+und der Weg über die Decke weitergeht. Ansonsten sind dort
+meist ’nur’ Potions versteckt. ACHTUNG: Um das Spiel
+zeitlich zu schaffen empfiehlt es sich, (wenn nicht
+wirklich nötig) die Deckengänge NICHT zu benutzen. Das
+Spiel an sich verfügt über 13 Level (12 Level + den
+Abschlußlevel mit Kampf gegen Jaffar). Wenn man alle Level
+kennt und perfekt spielt (nie kaputt geht) braucht man
+trotzdem ca. 45-50 min. Um das Spiel also zu schaffen, muß
+man in allen Leveln den Weg kennen. Da dies natürlich nicht
+beim erstenmal klappt ist klar; also immer ein bis zwei
+Level weiterarbeiten und gut auskundschaften.

+

Das Ziel je Level ist simpel:

+
    +
  • Türe zum nächsten Level finden
  • +
  • Türe zum nächsten Level öffnen
  • +
  • JEDE Superpotion finden und trinken!!!
  • +
+

Die einzelnen Level:

+

Level 1:

+

Hier holt Ihr Euch das Schwert

+

Level 2:

+

Nix besonderes, allerdings muss man am Ende zum ersten Mal
+den Klammersprung ausführen.

+

Level 3:

+

Dieser Level ist in 2 Teile unterteilt:

+
    +
  • Klettert soweit nach oben, wie Ihr könnt, dann einen
    +Sprung in die nicht sichtbare rechte Seite, dort den
    +Türmechanismus betätigen und SCHNELL solange nach links
    +laufen, bis Ihr das sich schließende Tor seht; sofort (aus
    +dem Lauf) einen Klammersprung machen.
  • +
  • Türmechanismus finden und Tür öffnen. Beim Zurücklaufen
    +vorsichtig an das Skelett ranschleichen, es im Kampf die
    +Schlucht runterstoßen, ihm nachklettern und es nochmal
    +besiegen.
  • +
+

Level 4:

+

Superpotion holen, Türmechanismus betätigen, und durch
+Spiegel mit Anlauf springen –> Shadow wird geboren (er
+wird Euch noch einigen Ärger bereiten)

+

Level 5:

+

Beim Versuch die Superpotion zu holen, stiehlt sie Euch
+Shadow. Ihr müßt aber den Versuch trotzdem ausführen!
+(Erklärung später)

+

Level 6:

+

(Sehr kurzer Level) Kämpft mit dem dicken Wächter, indem
+Ihr auch abwehrt (dazu müßt Ihr den Joystick nach oben
+drücken). Der Sprung zu Shadow mißlingt und Ihr werdet in
+Level 7 FALLEN.

+

Level 7:

+

Holt Euch die Superpotion (,die man schon am Anfang sieht)
+und springt dann in die Schlucht hinein, denn die Potion
+besitzt die magischen Kräfte, Euch fliegen zu lassen.

+

Level 8:

+

Den ersten Wächter schafft man leicht mit der
+Joystickkombination: VOR, HOCH, 2x Feuerknopf (solange
+wiederholen, bis er tot ist) Wenn Ihr ganz rechts im Level
+angekommen seit und Euch auf den Weg macht, links den
+Türmechanismus zu betätigen sind einige Fallen:

+
    +
  • Der erste Wächter oben ist nur zu schaffen, wenn Ihr
    +schon im vorigen Bild losspringt (er kann dann nicht
    +schnell genug reagieren, trotzdem bekommt Ihr einen Schlag
    +ab!)
  • +
  • Nun müsst Ihr schnell sein (aber immer ruhig und nicht
    +überhasten), da mit dem Türmechanismus 3 (!) Tore auf und
    +zu gehen, also fix durch die Fallmesser.
  • +
  • Wenn Ihr den Türmechanismus betätigt habt und plötzlich
    +nicht mehr nach rechts weiterkommt, müßt Ihr auf eine Maus
    +warten, die den Türmechanismus betätigt (Ahhh!!)
  • +
+

Level 9:

+

Einfach durchspielen, aber AUFPASSEN: Die erste Superpotion
+nicht trinken, da sonst der Bildschirm auf dem Kopf steht!
+Die zweite Superpotion (im Bild nebenan) ist wieder ok und
+die dritte kehrt den Bildschirm wieder um, falls Ihr die
+erste getrunken habt. Noch ein Tip: Wenn Ihr das Tor zu
+Level 10 gefunden habt seht Ihr zwei Säulen; AUF der
+rechten befindet sich der Mechanismus, der die Tür zur
+linken Säule öffnet. Ihr MÜSST diesen Mechanismus
+betätigen.

+

Level 10:

+

Zuerst die Wache ganz links töten, dann rechts durch die
+zwei Fallmesser (2x) hüpfen. Im nächsten Bild den Wächter
+NICHT fertigmachen, stattdessen oben die Decke einstoßen,
+hochklettern und von dort OHNE PAUSE nach rechts laufen.

+

Level 11:

+

Stoßt im zweiten Bild neben der Säule die Decke auf,
+klettert hoch und lauft dann OHNE Pause nach rechts zur
+Superpotion. Vor dem ersten Fallbeil die Decke aufstoßen
+hochklettern und ganz nach links (ohne Pause) laufen. Wenn
+Ihr den nächsten Wächter fertiggemacht habt, springt Ihr
+aus dem Lauf nach rechts und klammert 2x.

+

Level 12:

+

Ziemlich tricky! Nach oben klettern, bis ein Weg nach links
+führt. Diesen ohne Pause durchlaufen und am Ende nach links
+springen. Hochklettern bis Ihr eine Möglichkeit seht nach
+rechts zu springen. Hier muss man dann ziemlich schnell 3x
+nach rechts springen. Es geht dann so ähnlich weiter, bis
+man auf dem mittleren Turm ganz oben steht. Dort stoßt Ihr
+die Decke auf, klettert hoch, lauft auf der Plattform ganz
+nach rechts (Achtung das letzte Teil ist wieder lose),
+springt dann AUS DEM LAUF nach links und rennt bis zur
+Wand. Wenn Ihr nun hochklettert, bemerkt Ihr, daß das
+Schwert fehlt. Ihr geht vorsichtig aber zügig über die 2
+Fallteile und bleibt dann SOFORT stehen. Shadow springt nun
+mit gezückter Waffe auf Euch zu. Nun AUF KEINEN FALL mit
+ihm kämpfen und stattdessen SOFORT Euer Schwert einstecken
+(Joystick nach unten). Nach der Vereinigung lauft Ihr
+einfach nach links weiter (nicht wundern, probierts einfach
+aus, Ihr fallt schon nicht!)

+

Level 13:

+

Abwarten bis alles von den Decken gefallen ist, und erst
+dann los laufen. Jaffar erledigt Ihr am besten, wenn Ihr
+über das Fallteil auf ihn zu hüpft. Der Kampf ist nicht
+einfach, da Jaffar über 4! Schlagkombinationen verfügt.
+Noch einmal VORSICHT. Wenn Ihr ihn besiegt habt lauft Ihr
+nach rechts, dann wieder nach links (das Tor geht auf),
+wenn Ihr nun in Richtung Tor nach links geht, springt am
+besten in das Bild, in dem das Tor ist, da Ihr sonst
+womöglich in die Schlucht fallt und nochmal kämpfen müsst.
+Der Rest ist geschenkt und Ihr betretet als Prince of
+Persia die Hall of fame!!

+

Diese Lösung stammt aus Mogel-Power (www.mogelpower.de) / Solution.Net (solution.mogelpower.de)

+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/putty-and-hardware-keys/index.html b/attic/public/howtos/putty-and-hardware-keys/index.html new file mode 100644 index 0000000..6d60391 --- /dev/null +++ b/attic/public/howtos/putty-and-hardware-keys/index.html @@ -0,0 +1,138 @@ + + + + + +PuTTY and OPENGPG hardware keys - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

PuTTY and OPENGPG hardware keys

+
    +
  • install gpg4win installed
  • +
  • create or edit the file gpg-agent.conf, usually in c:\Users\XXX\AppData\Roaming\gnupg\: +
    enable-putty-support
    +enable-ssh-support
    +use-standard-socket
    +
  • +
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/resize-hdd-on-running-system/index.html b/attic/public/howtos/resize-hdd-on-running-system/index.html new file mode 100644 index 0000000..c4d042f --- /dev/null +++ b/attic/public/howtos/resize-hdd-on-running-system/index.html @@ -0,0 +1,141 @@ + + + + + +Resize HDD on running system - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Resize HDD on running system

+
    +
  • Resize target on VMWare or on Synology or where ever it is provided
  • +
  • Stop services using the disk
  • +
  • Unmount the disk
  • +
  • Run e2fsck -f on the disk
  • +
  • Rescan disks using echo 1>/sys/class/block/sdx/device/rescan (replace sdx by actual disk device)
  • +
  • Extend partition using resize in cfdisk
  • +
  • Extend filesystem using resize2fs on extended partition
  • +
  • Mount the partition
  • +
  • Start services
  • +
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/howtos/snmpwalk-with-numeric-and-text-output/index.html b/attic/public/howtos/snmpwalk-with-numeric-and-text-output/index.html new file mode 100644 index 0000000..94371fe --- /dev/null +++ b/attic/public/howtos/snmpwalk-with-numeric-and-text-output/index.html @@ -0,0 +1,136 @@ + + + + + +snmpwalk with numeric and text output of oid - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

snmpwalk with numeric and text output of oid

+
snmpwalk -v 2c -c $COMMUNITY -On $HOST $BASE_OID | while read -r line; do 
+  oid=`echo $line | awk '{print $1}'`
+  textoid=`snmptranslate $oid`
+  value=`echo $line | cut -d ' ' -f 3-`
+  echo "$oid ($textoid): $value" 
+done
+
+
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/img_0053.jpg b/attic/public/img_0053.jpg new file mode 100644 index 0000000..0708d94 Binary files /dev/null and b/attic/public/img_0053.jpg differ diff --git a/attic/public/img_0054-e1476437702547.jpg b/attic/public/img_0054-e1476437702547.jpg new file mode 100644 index 0000000..1654ffc Binary files /dev/null and b/attic/public/img_0054-e1476437702547.jpg differ diff --git a/attic/public/img_0055-e1476437685461.jpg b/attic/public/img_0055-e1476437685461.jpg new file mode 100644 index 0000000..0605186 Binary files /dev/null and b/attic/public/img_0055-e1476437685461.jpg differ diff --git a/attic/public/img_0056.jpg b/attic/public/img_0056.jpg new file mode 100644 index 0000000..a7fe5e6 Binary files /dev/null and b/attic/public/img_0056.jpg differ diff --git a/attic/public/img_0140.jpg b/attic/public/img_0140.jpg new file mode 100644 index 0000000..9171e0d Binary files /dev/null and b/attic/public/img_0140.jpg differ diff --git a/attic/public/img_0144.jpg b/attic/public/img_0144.jpg new file mode 100644 index 0000000..bd1b222 Binary files /dev/null and b/attic/public/img_0144.jpg differ diff --git a/attic/public/img_0146.jpg b/attic/public/img_0146.jpg new file mode 100644 index 0000000..424660b Binary files /dev/null and b/attic/public/img_0146.jpg differ diff --git a/attic/public/index.html b/attic/public/index.html new file mode 100644 index 0000000..96a0434 --- /dev/null +++ b/attic/public/index.html @@ -0,0 +1,134 @@ + + + + + +Minimal Setups - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Minimal Setups

+
+ + +
+

Minimal Setups

+

+
+
+
+%RELEASETAG% +
+
+
+
+ + +
+ + + + +
+ + diff --git a/attic/public/index.xml b/attic/public/index.xml new file mode 100644 index 0000000..7d8cbde --- /dev/null +++ b/attic/public/index.xml @@ -0,0 +1,194 @@ + + + + Minimal Setups + http://172.16.3.33:1313/ + Recent content on Minimal Setups + Hugo + en-us + Thu, 13 Mar 2025 00:00:00 +0000 + + + Tetris + http://172.16.3.33:1313/blog/tetris/ + Mon, 27 May 2024 00:00:00 +0000 + http://172.16.3.33:1313/blog/tetris/ + <h1 id="tetris---hardware-and-software">Tetris - Hardware and Software</h1> <p><img src="http://172.16.3.33:1313/IMG_4936.jpg" alt=""></p> <p>Update Amplifier (separate input circuitry per PSG, it appears, that a silent PSG has a DC level on its output which is summarized to the AC output of the working PSG, so two input circuits with individual couping capacitor):</p> <p><img src="http://172.16.3.33:1313/IMG_4941.jpg" alt=""></p> <p>Update of the power switch of the amplifier (at appears, that the small transistor couldn&rsquo;t deliver enough current):</p> <p><img src="http://172.16.3.33:1313/IMG_4958.jpeg" alt=""></p> <p>This Tetris implementation consists of a hardware and a software (running on that hardware).</p> + + + PL 9823 meets MSP430 + http://172.16.3.33:1313/blog/rgb-driver/ + Sat, 25 May 2024 00:00:00 +0000 + http://172.16.3.33:1313/blog/rgb-driver/ + <h2 id="generating-signals-for-pl-9823-using-a-msp430">Generating signals for PL 9823 using a MSP430</h2> <h3 id="debugging">Debugging</h3> <pre tabindex="0"><code>mspdebug rf2500 gdb msp430-gdb -x firmware.gdb </code></pre><p>Attention: the gdb in the TI toolchain package is broken, use the one from Debian</p> <h3 id="signals-working-cycler">Signals Working Cycler</h3> <p>These signals are related to code under tag <code>cycler_works_include_output_stage</code>.</p> <p>First octets:</p> <p><img src="http://172.16.3.33:1313/cycler_working_first_octets.png" alt=""></p> <p>Last octets:</p> <p><img src="http://172.16.3.33:1313/cycler_working_last_octets.png" alt=""></p> <p>Schematics and legend for signals:</p> <p><img src="http://172.16.3.33:1313/schematics.jpeg" alt=""></p> <h4 id="some-more-explanations">Some more explanations</h4> <p>Consider above schematics and the screen shot &ldquo;Last octets&rdquo; from the oscilloscope.</p> <p><img src="http://172.16.3.33:1313/timing.png" alt=""></p> <p>Timer TA1 is running in &ldquo;up mode&rdquo; to the value 45 set in compare register <code>TA1CCR0</code>. The compare registers <code>TA1CCR1</code> is set to 10, <code>TA1CCR2</code> is set to 22. The output mode of the timer is set to &ldquo;Reset/Set&rdquo;, which means the GPIO associated with <code>TA1CCR1</code> (P2.1) and <code>TA1CCR2</code> (P2.4) are set at the overflow and restart of the counter and reset when the counter matches the associated compare value.</p> + + + Stratum 1 NTP Server participating in ntppool.org + http://172.16.3.33:1313/blog/timeserver2/ + Thu, 13 Mar 2025 00:00:00 +0000 + http://172.16.3.33:1313/blog/timeserver2/ + + + + Just another Stratum 1 Timeserver + http://172.16.3.33:1313/blog/timeserver/ + Tue, 11 Feb 2025 00:00:00 +0000 + http://172.16.3.33:1313/blog/timeserver/ + <p><img src="http://172.16.3.33:1313/IMG_6045.jpg" alt=""></p> <p>This server utilizes <code>ntpsec</code> on Debian on a BeagleBone Black with a UBlox GPS module.</p> <p>It has been joined the NTP pool, the statistics are available at <a href="https://www.ntppool.org/scores/93.241.86.156">https://www.ntppool.org/scores/93.241.86.156</a>.</p> <p>Some additional statistics graphs for the server are available at <a href="https://numbers.hottis.de/ntpserver">https://numbers.hottis.de/ntpserver</a>.</p> <h2 id="preparation-of-the-beaglebone">Preparation of the BeagleBone</h2> <p>The GPS module is connected via serial line to the UART of the BB.</p> <p>The additional connection of the PPS output with the PPS device of the Linux running on the BB via a GPIO must be prepared. A device tree overlay must be created and compiled:</p> + + + Yet Another Debouncing Method + http://172.16.3.33:1313/blog/debouncing/ + Mon, 30 Apr 2018 00:00:00 +0000 + http://172.16.3.33:1313/blog/debouncing/ + <p>You can find several approaches for debouncing mechanical switches on the Internet, some work better, some not so good.</p> <p>One common approach is to ignore events in an ISR when they come too fast:&lt;</p> <pre tabindex="0"><code>void count() { static uint32_t lastEvent = 0; uint32_t currentEvent = micros(); if (currentEvent &amp;gt; (lastEvent + configBlock.debounce)) { lastEvent = currentEvent; cnt++; } } void setup() { pinMode(REED_PIN, INPUT_PULLUP); attachInterrupt(REED_PIN, count, FALLING); } </code></pre><p>This works very good when only the tipping of a switch is relevant.</p> + + + Three Phase Inverter - Second Service + http://172.16.3.33:1313/blog/three-phase-inverter-ng/ + Mon, 19 Dec 2016 00:00:00 +0000 + http://172.16.3.33:1313/blog/three-phase-inverter-ng/ + <p>I wrote in October about my first try to build a simple three phase inverter, see <a href="http://172.16.3.33:1313/blog/three-phase-inverter/">here</a>. In the first try I used four MSP430 microcontroller, one for the PWM of each phase and one to coordinate the phase shift of the three phases.</p> <p>In this experiment I put everything on one STM32 microcontroller. Here I used the DMA feature to feed data into the PWM counter and I calculated the sine values at start-up time on the microcontroller. Additionally I put in the driver for a CAN interface, however, it is not yet supported in the firmware.</p> + + + Three Phase Inverter + http://172.16.3.33:1313/blog/three-phase-inverter/ + Fri, 14 Oct 2016 00:00:00 +0000 + http://172.16.3.33:1313/blog/three-phase-inverter/ + <p>Already when I was still in school, about 30 years ago, I was curious to make an inverter using some MOSFETs. I actually was able to build a simple one phase inverter with rectangular signal shape (I used a NE555). Using this thing I drove a transformer to light a blub. However, all of these inverters I built passed by in fire.</p> <p>Now, I tried it again, not longer using MOSFETs but IGBTs with free-wheeling diode. Moreover, I used some microcontrollers and sine values to feed a PWM to get a sine-alike signal shape. And this time I was able with three phases to drive an asynchronous motor.</p> + + + Theremin + http://172.16.3.33:1313/blog/theremin/ + Mon, 01 Jul 2013 00:00:00 +0000 + http://172.16.3.33:1313/blog/theremin/ + <p>A <a href="https://en.wikipedia.org/wiki/Theremin">Theremin</a> is a rather old electronic music instrument, invented in 1928. It is played by approaching hands to two antennas, without touching them. One antenna is used to manipulate the frequeny of the tone, the other one to manipulate the volume.</p> <p><img src="http://172.16.3.33:1313/foto-am-30-06-13-um-20-021.jpg" alt=""></p> <p>This is just another Theremin. Only basic structure of the circuit was taken from many other published Theremin circuits.</p> <p><img src="http://172.16.3.33:1313/scan_005006-1024x654.jpg" alt=""></p> <p>Completely new (or at least not found during my Theremin googling) is the digital zero-calibration.</p> + + + Children Protection for Postfix-based EMail-Server + http://172.16.3.33:1313/blog/email-childprot/ + Thu, 27 Jun 2013 00:00:00 +0000 + http://172.16.3.33:1313/blog/email-childprot/ + <p>This small tool implements a whitelist on a Postfix mail-server. It prevents certain recipient addresses (your kids ones) from receiving mail from any not whitelisted address. Any mail from not whitelisted senders is redirected to a delegate (a parent).</p> <p>The code for this tool can is here: <a href="https://gitea.hottis.de/wn/childprot">https://gitea.hottis.de/wn/childprot</a>.</p> <p>Configure the tool by adding this line into the <code>master.cf</code> of the Postfix installation:</p> <pre tabindex="0"><code>childprot unix - n n - 25 spawn user=mail argv=/opt/sbin/ChildProt </code></pre><p>and this one to the <code>main.cf</code>:</p> + + + + http://172.16.3.33:1313/keys/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/keys/ + <h2 id="my-public-gpg-and-ssh-keys">My Public GPG and SSH Keys</h2> <h3 id="ssh-keys">SSH Keys</h3> <ul> <li><a href="http://172.16.3.33:1313/mysshkeys.txt">My SSH Keys</a></li> </ul> <h3 id="gpg-keys">GPG Keys</h3> <ul> <li><a href="http://172.16.3.33:1313/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt"><code>2306AA47A6D7A534B1B7446C836E9E1192A6B132</code></a></li> <li><a href="http://172.16.3.33:1313/082071E0415E0A2D87A2385B5159E88B93B67538.txt"><code>082071E0415E0A2D87A2385B5159E88B93B67538</code></a></li> <li><a href="http://172.16.3.33:1313/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt"><code>7B5C0BB6AFCADDC8E3435746B76E53073EE19643</code></a></li> <li><a href="http://172.16.3.33:1313/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt"><code>90E1D1E935FC6AB94444B15B18FDFA577A8871AD</code></a></li> <li><a href="http://172.16.3.33:1313/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt"><code>BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469</code></a></li> </ul> + + + About + http://172.16.3.33:1313/about/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/about/ + <p><a href="mailto:woho@hottis.de">Wolfgang Hottgenroth</a></p> + + + Colors in Minicom + http://172.16.3.33:1313/howtos/colors-in-minicom/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/colors-in-minicom/ + <p>To start <code>minicom</code> in color mode use</p> <pre tabindex="0"><code>minicom -c on </code></pre><p>Switch terminal emulation to ANSI.</p> <p>Use escape sequences to actually change the color of text as described for instance here</p> <p><a href="https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html">https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html</a>.</p> <p>The base sequence is <code>\1b[Xm</code> where X is a number as described below.</p> <p>To get the colors in bright style, use the sequence <code>\x1b[X;1m</code>.</p> <table> <thead> <tr> <th>Number</th> <th>Color</th> </tr> </thead> <tbody> <tr> <td>0</td> <td>reset</td> </tr> <tr> <td>1</td> <td>highlight</td> </tr> <tr> <td>7</td> <td>inverse</td> </tr> <tr> <td>30</td> <td>black</td> </tr> <tr> <td>31</td> <td>red</td> </tr> <tr> <td>32</td> <td>green</td> </tr> <tr> <td>33</td> <td>yellow</td> </tr> <tr> <td>34</td> <td>blue</td> </tr> <tr> <td>35</td> <td>magenta</td> </tr> <tr> <td>36</td> <td>cyan</td> </tr> <tr> <td>37</td> <td>white</td> </tr> </tbody> </table> + + + Engel des Herrn + http://172.16.3.33:1313/howtos/engel-des-herrn/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/engel-des-herrn/ + <p>Der Engel des Herrn brachte Maria die Botschaft, und sie empfing vom Heiligen Geist. Gegrüßet seist du, Maria …</p> <p>Maria sprach: Siehe, ich bin die Magd des Herrn; mir geschehe nach deinem Wort. Gegrüßet seist du, Maria …</p> <p>Und das Wort ist Fleisch geworden und hat unter uns gewohnt. Gegrüßet seist du, Maria …</p> <p>Bitte für uns, heilige Gottesmutter (heilige Gottesgebärerin), (auf) dass wir würdig werden der Verheißungen Christi.</p> <p>Lasset uns beten. Allmächtiger Gott, gieße deine Gnade in unsere Herzen ein. Durch die Botschaft des Engels haben wir die Menschwerdung Christi, deines Sohnes, erkannt. Führe uns durch sein Leiden und Kreuz zur Herrlichkeit der Auferstehung. Darum bitten wir durch Christus, unsern Herrn. Amen.</p> + + + Execute occ in Nextcloud pod + http://172.16.3.33:1313/howtos/occ-in-nextcloud-pod/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/occ-in-nextcloud-pod/ + <p>First, look up the name of the pod using</p> <pre tabindex="0"><code>kubectl get pods -n nextcloud </code></pre><p>Then, get into the pod using</p> <pre tabindex="0"><code>kubectl exec --stdin --tty NAME_OF_THE_POD -c nextcloud -n nextcloud -- sh </code></pre><p>Finally, within the pod</p> <pre tabindex="0"><code>su -s /bin/sh www-data -c &#34;php occ --help&#34; </code></pre> + + + Gitlab Backup and Restore + http://172.16.3.33:1313/howtos/gitlab-backup/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-backup/ + <h2 id="backup">Backup</h2> <p>Find the backup directory:</p> <pre tabindex="0"><code>grep backup_path /etc/gitlab/gitlab.rb </code></pre><p>Issue backup:</p> <pre tabindex="0"><code>sudo gitlab-backup create </code></pre><p>Transfer backup using scp to destination machine.</p> <p>Backup configuration and secrets:</p> <pre tabindex="0"><code>sudp cp /etc/gitlab/gitlab-secrets.json /backuppath/ sudo cp /etc/gitlab/gitlab.rb /backuppath/ </code></pre><h2 id="restore">Restore</h2> <p>See also here: <a href="https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html">https://docs.gitlab.com/ee/administration/backup_restore/restore_gitlab.html</a></p> <p><em>DO NOT OVERWRITE THE CONFIGURATION ON THE DESTINATION MACHINE. COMPARE IT AND CONSIDER AND EVALUATE EACH DIFFERENCE</em></p> <p>Stop processes of GitLab connecting to the database:</p> <pre tabindex="0"><code>gitlab-ctl stop puma gitlab-ctl stop sidekiq # check gitlab-ctl status </code></pre><p>Do not stop the whole system since the restore tool has to connect to the database which would also stop in that case.</p> + + + Gitlab Change BaseURL in Database + http://172.16.3.33:1313/howtos/gitlab-change-baseurl/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-change-baseurl/ + <h2 id="change-url">Change URL</h2> <p>After a migration changing the base url in the configuration is not enough. It must also be changed in the database.</p> <ul> <li>Adjust the variable <code>external_url</code> in the file <code>/etc/gitlab/gitlab.rb</code> and run <code>gitlab-ctl reconfigure</code></li> <li>Adjust the canonical URL in the database: <pre tabindex="0"><code>gitlab-rails console ApplicationSetting.current.update!(home_page_url: &#39;https://neue-url.example.com&#39;) ApplicationSetting.current.update!(after_sign_out_path: &#39;https://neue-url.example.com&#39;) </code></pre></li> <li>Reading out a value from the ApplicationSetting via the gitlab-rails console is done using <pre tabindex="0"><code>ApplicationSetting.current.home_page_url </code></pre></li> <li>Clear the internal cache: <pre tabindex="0"><code>gitlab-rake cache:clear </code></pre></li> </ul> + + + Gitlab Upgrades + http://172.16.3.33:1313/howtos/gitlab-upgrades/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/gitlab-upgrades/ + <h2 id="upgrade-of-a-gitlab-instance">Upgrade of a GitLab instance</h2> <p>When upgrading a Gitlab instance, strictly follow the defined upgrade path. Consider to snapshot the filesystem if possible after each step.</p> <p>Additional, after each step wait until all background migrations are completed before performing the next upgrade step.</p> <ul> <li><a href="https://docs.gitlab.com/ee/update/index.html#upgrade-paths">Upgrade Paths</a></li> <li><a href="https://docs.gitlab.com/ee/update/package/#upgrade-to-a-specific-version-using-the-official-repositories">Upgrading to a specific version</a></li> </ul> <p>To find the versions of a specific package in the Debian apt cache use</p> <pre tabindex="0"><code> apt-cache madison gitlab-ce </code></pre><p>To upgrade to a specific version use</p> + + + How to add a CA certificate in Debian + http://172.16.3.33:1313/howtos/ca-certificate-in-debian/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/ca-certificate-in-debian/ + <p>Copy CA file with extension <code>crt</code> into <code>/usr/local/share/ca-certificates/</code>.</p> <p>Call <code>update-ca-certificates</code> as root.</p> + + + iSCSI on Linux + http://172.16.3.33:1313/howtos/iscsi-on-linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/iscsi-on-linux/ + <h2 id="preparation">Preparation</h2> <p>Install <code>open-iscsi</code>, at least on Debian systems.</p> <h2 id="use-an-iscsi-target-from-linux">Use an iSCSI target from Linux</h2> <p>In our setup a Synology NAS at 172.16.200.19 provides the targets.</p> <p>First, run</p> <pre tabindex="0"><code> iscsiadm -m discovery -t sendtargets -p 172.16.200.19 </code></pre><p>to discover all provided targets.</p> <p>You get something like this</p> <pre tabindex="0"><code> 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-GitLab.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Bitwarden.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Nextcloud.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-MariaDB.db1c0541e7 172.16.200.19:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7 [fe80::211:32ff:febe:da31]:3260,1 iqn.2000-01.com.synology:nas.Target-Backup.db1c0541e7 </code></pre><p>Now, connect to the target using</p> + + + Magnifikat + http://172.16.3.33:1313/howtos/magnifikat/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/magnifikat/ + <p>Bibellese zum 15.12.2013</p> <p>1,46 Und Maria sprach: Meine Seele erhebt den Herrn,</p> <p>47 und mein Geist freut sich Gottes, meines Heilandes;</p> <p>48 denn er hat die Niedrigkeit seiner Magd angesehen. Siehe, von nun an werden mich selig preisen alle Kindeskinder.</p> <p>49 Denn er hat große Dinge an mir getan, der da mächtig ist und dessen Name heilig ist.</p> <p>50 Und seine Barmherzigkeit währt von Geschlecht zu Geschlecht bei denen, die ihn fürchten.</p> + + + Neovim Setup + http://172.16.3.33:1313/howtos/neovim/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/neovim/ + <p>Lots of information on nvim can be found for instance here:</p> <ul> <li><a href="https://programmingpercy.tech/blog/learn-how-to-use-neovim-as-ide/">https://programmingpercy.tech/blog/learn-how-to-use-neovim-as-ide/</a></li> <li><a href="https://github.com/hrsh7th/">https://github.com/hrsh7th/</a></li> <li><a href="https://github.com/wbthomason/packer.nvim">https://github.com/wbthomason/packer.nvim</a></li> <li><a href="https://docs.rockylinux.org/books/nvchad/nvchad_ui/nvimtree/">https://docs.rockylinux.org/books/nvchad/nvchad_ui/nvimtree/</a></li> </ul> <h2 id="installation-of-neovim">Installation of Neovim</h2> <p>On Debian install neovim from the sources, the packages are mostly a bit aged.</p> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>git clone https://github.com/neovim/neovim </span></span><span style="display:flex;"><span>sudo apt install ninja-build gettext cmake unzip curl </span></span><span style="display:flex;"><span>make CMAKE_BUILD_TYPE<span style="color:#f92672">=</span>Release </span></span><span style="display:flex;"><span>sudo make install </span></span></code></pre></div><p>On Windows install from binary or using installer, on MacOS use <code>brew</code>.</p> <p>Debian packages can be found here: <a href="https://github.com/neovim/neovim-releases/releases">https://github.com/neovim/neovim-releases/releases</a></p> <h2 id="configuration">Configuration</h2> <p>Clone the packer repository:</p> + + + PuTTY and OPENGPG hardware keys + http://172.16.3.33:1313/howtos/putty-and-hardware-keys/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/putty-and-hardware-keys/ + <ul> <li>install gpg4win installed</li> <li>create or edit the file <code>gpg-agent.conf</code>, usually in <code>c:\Users\XXX\AppData\Roaming\gnupg\</code>: <pre tabindex="0"><code>enable-putty-support enable-ssh-support use-standard-socket </code></pre></li> </ul> + + + Quotes + http://172.16.3.33:1313/articles/quotes/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/articles/quotes/ + <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Und dann in deinem Arm, alles gut, alles andere egal </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-22</span> <span>Alles Du, Dota Kehr</span> </div> </div> <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Es ist immer was los, aber es passiert nichts. </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-14</span> <span>Steinhammer, Thadeusz</span> </div> </div> <div style="margin: 20px 0; font-family: inherit; color: inherit;"> <blockquote style="margin: 0; font-size: inherit; color: inherit;"> Sie steht gut da. Aber die Seele setzt sich nicht dazu. </blockquote> <div style="display: flex; justify-content: space-between; font-size: 0.9em; color: gray; margin-top: 5px;"> <span>2025-01-14</span> <span>Samuel Overbeck in Steinhammer, Thadeusz, S. 68, 71</span> </div> </div> + + + Resize HDD on running system + http://172.16.3.33:1313/howtos/resize-hdd-on-running-system/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/resize-hdd-on-running-system/ + <ul> <li>Resize target on VMWare or on Synology or where ever it is provided</li> <li>Stop services using the disk</li> <li>Unmount the disk</li> <li>Run <code>e2fsck -f</code> on the disk</li> <li>Rescan disks using <code>echo 1&gt;/sys/class/block/sdx/device/rescan</code> (replace <code>sdx</code> by actual disk device)</li> <li>Extend partition using <code>resize</code> in <code>cfdisk</code></li> <li>Extend filesystem using <code>resize2fs</code> on extended partition</li> <li>Mount the partition</li> <li>Start services</li> </ul> + + + snmpwalk with numeric and text output of oid + http://172.16.3.33:1313/howtos/snmpwalk-with-numeric-and-text-output/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/snmpwalk-with-numeric-and-text-output/ + <pre tabindex="0"><code>snmpwalk -v 2c -c $COMMUNITY -On $HOST $BASE_OID | while read -r line; do oid=`echo $line | awk &#39;{print $1}&#39;` textoid=`snmptranslate $oid` value=`echo $line | cut -d &#39; &#39; -f 3-` echo &#34;$oid ($textoid): $value&#34; done </code></pre> + + + Solution for Prince of Persia 1 + http://172.16.3.33:1313/howtos/prince-of-persia-1/ + Mon, 01 Jan 0001 00:00:00 +0000 + http://172.16.3.33:1313/howtos/prince-of-persia-1/ + <h1 id="lösung-prince-of-persia-1">Lösung Prince of Persia 1</h1> <h2 id="komplettlösung-zu-prince-of-persia-1">Komplettlösung zu &ldquo;Prince of Persia 1&rdquo;</h2> <p>Zuallererst mal zur Joysticksteuerung: Wenn Ihr beim<br> Springen den Feuerknopf gedrückt haltet, macht der Prince<br> einen &lsquo;Klammersprung&rsquo;, d.h., bei grossen Entfernungen<br> springt er an die gegenüberliegende Wand und klammert sich<br> dort fest. Mit dem Joystick dann einfach nach oben drücken<br> und schon ist&rsquo;s geschafft.</p> <p>Ausserdem kann man teilweise Decken aufstossen (VORSICHT,<br> wenn die Platten dann runterfallen!); aber dies ist für das<br> Spiel nur dann nötig, wenn man in einer Sackgasse steckt<br> und der Weg über die Decke weitergeht. Ansonsten sind dort<br> meist &rsquo;nur&rsquo; Potions versteckt. ACHTUNG: Um das Spiel<br> zeitlich zu schaffen empfiehlt es sich, (wenn nicht<br> wirklich nötig) die Deckengänge NICHT zu benutzen. Das<br> Spiel an sich verfügt über 13 Level (12 Level + den<br> Abschlußlevel mit Kampf gegen Jaffar). Wenn man alle Level<br> kennt und perfekt spielt (nie kaputt geht) braucht man<br> trotzdem ca. 45-50 min. Um das Spiel also zu schaffen, muß<br> man in allen Leveln den Weg kennen. Da dies natürlich nicht<br> beim erstenmal klappt ist klar; also immer ein bis zwei<br> Level weiterarbeiten und gut auskundschaften.</p> + + + diff --git a/attic/public/inverter0_2016-09-23-4.png b/attic/public/inverter0_2016-09-23-4.png new file mode 100644 index 0000000..3671c91 Binary files /dev/null and b/attic/public/inverter0_2016-09-23-4.png differ diff --git a/attic/public/js/bundle.js b/attic/public/js/bundle.js new file mode 100644 index 0000000..602b0c1 --- /dev/null +++ b/attic/public/js/bundle.js @@ -0,0 +1 @@ +!function(){var t={219:function(){!function(){function t(t){t.currentTarget.setAttribute("class","copy-btn copy"),t.currentTarget.setAttribute("aria-label","Copy this code.")}window.onload=function(){new ClipboardJS(".copy",{target:function(t){return t.nextElementSibling}}).on("success",(function(t){!function(t,o){t.setAttribute("class","copy-btn copy tooltipped"),t.setAttribute("aria-label","Copied!")}(t.trigger),t.clearSelection()})).on("error",(function(t){console.error("Action:",t.action),console.error("Trigger:",t.trigger)}))},document.addEventListener("DOMContentLoaded",(function(){document.querySelectorAll(".copy").forEach((function(o){o.addEventListener("animationend",t)}))}))}()},447:function(){document.addEventListener("DOMContentLoaded",(function(){document.querySelector("main").querySelectorAll("h1, h2, h3, h4, h5, h6").forEach((function(t){if(t.id){var o=document.createElement("a");o.setAttribute("class","headerlink"),o.setAttribute("href","#"+t.id),o.setAttribute("title","Permalink to this headline");var e=document.createElement("i");e.setAttribute("class","fas fa-hashtag"),e.setAttribute("aria-hidden","true"),o.append(e),t.append(o)}}))}))},557:function(){var t;(t=jQuery)(window).on("load.BackToTheTop",(function(){t('a[href^="#"]').BackToTheTop()})),t.fn.BackToTheTop=function(o){var e={duration:300,easing:"swing",offset:0,hash:!0,scrolloffset:0,fadein:"slow",fadeout:"slow",display:"bottom-right",top:0,bottom:0,left:0,right:0,zIndex:999,position:"fixed"};t.extend(e,o),t('a[href^="#"]').on("click.BackToTheTop",(function(){var o=void 0!==t(this).data("backtothetop-scrolltop")?t(this).data("backtothetop-scrolltop"):t(this.hash).offset()?t(this.hash).offset().top:"backtothetop-fixed"==t(this).attr("id")&&"#"==t(this).attr("href")?0:null;if(null!==o){var a=void 0===t(this).data("backtothetop-duration")?e.duration:t(this).data("backtothetop-duration"),i=void 0===t(this).data("backtothetop-easing")?e.easing:t(this).data("backtothetop-easing"),n=void 0===t(this).data("backtothetop-offset")?e.offset:t(this).data("backtothetop-offset"),d=void 0===t(this).data("backtothetop-hash")?e.hash:t(this).data("backtothetop-hash"),r=t(this).attr("href");return t("html,body").animate({scrollTop:o+n},a,i,(function(){!0===d&&window.history.pushState("","",r)})),!1}})),function(){var o=t("a#backtothetop-fixed");if(o){var a=void 0===o.data("backtothetop-fixed-scroll-offset")?e.scrolloffset:o.data("backtothetop-fixed-scroll-offset"),i=void 0===o.data("backtothetop-fixed-fadein")?e.fadein:o.data("backtothetop-fixed-fadein"),n=void 0===o.data("backtothetop-fixed-fadeout")?e.fadeout:o.data("backtothetop-fixed-fadeout"),d=void 0===o.data("backtothetop-fixed-display")?e.display:o.data("backtothetop-fixed-display"),r=void 0===o.data("backtothetop-fixed-top")?e.top:o.data("backtothetop-fixed-top"),c=void 0===o.data("backtothetop-fixed-bottom")?e.bottom:o.data("backtothetop-fixed-bottom"),s=void 0===o.data("backtothetop-fixed-left")?e.left:o.data("backtothetop-fixed-left"),f=void 0===o.data("backtothetop-fixed-right")?e.right:o.data("backtothetop-fixed-right"),h=void 0===o.data("backtothetop-fixed-zindex")?e.zIndex:o.data("backtothetop-fixed-zindex");"top-left"==d?(c="none",f="none"):"top-right"==d?(c="none",s="none"):"bottom-left"==d?(r="none",f="none"):"bottom-right"==d&&(r="none",s="none"),o.css({display:"none"}),t(window).on("scroll.BackToTheTop",(function(){t(this).scrollTop()>a?(o.css({top:r,bottom:c,left:s,right:f,zIndex:h,position:e.position}),"none"==o.css("display")&&o.fadeIn(i)):t(this).scrollTop()<=0+a&&"none"!=o.css("display")&&o.fadeOut(n)}))}}()}},127:function(){document.addEventListener("DOMContentLoaded",(function(){var t=document.querySelector(".nav-prev"),o=document.querySelector(".nav-next");document.addEventListener("keydown",(function(e){t&&"ArrowLeft"===e.key&&(location.href=t.getAttribute("href")),o&&"ArrowRight"===e.key&&(location.href=o.getAttribute("href"))}))}))},738:function(){var t;(t=jQuery)(document).ready((function(){t(".has-sub-menu > a span.mark").on("click",(function(o){t(this).parent().siblings("ul").slideToggle("fast","swing",(function(){var o;o=t(this).is(":visible")?"-":"+",t(this).siblings("a").children("span.mark").text(o)})),o.preventDefault()}))}))}},o={};function e(a){var i=o[a];if(void 0!==i)return i.exports;var n=o[a]={exports:{}};return t[a](n,n.exports,e),n.exports}e(738),e(127),e(557),e(447),e(219)}(); \ No newline at end of file diff --git a/attic/public/js/fontawesome6/all.min.js b/attic/public/js/fontawesome6/all.min.js new file mode 100644 index 0000000..0690df5 --- /dev/null +++ b/attic/public/js/fontawesome6/all.min.js @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. + */ +!function(){"use strict";var C={},c={};try{"undefined"!=typeof window&&(C=window),"undefined"!=typeof document&&(c=document)}catch(C){}var l=(C.navigator||{}).userAgent,z=void 0===l?"":l,e=C,a=c;e.document,a.documentElement&&a.head&&"function"==typeof a.addEventListener&&a.createElement,~z.indexOf("MSIE")||z.indexOf("Trident/");function M(c,C){var l,z=Object.keys(c);return Object.getOwnPropertySymbols&&(l=Object.getOwnPropertySymbols(c),C&&(l=l.filter(function(C){return Object.getOwnPropertyDescriptor(c,C).enumerable})),z.push.apply(z,l)),z}function L(z){for(var C=1;CC.length)&&(c=C.length);for(var l=0,z=new Array(c);lC.length)&&(c=C.length);for(var l=0,z=new Array(c);lC.length)&&(c=C.length);for(var l=0,z=new Array(c);lC.length)&&(c=C.length);for(var l=0,z=new Array(c);l>>0;l--;)c[l]=C[l];return c}function J(C){return C.classList?$(C.classList):(C.getAttribute("class")||"").split(" ").filter(function(C){return C})}function Z(C){return"".concat(C).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function C1(l){return Object.keys(l||{}).reduce(function(C,c){return C+"".concat(c,": ").concat(l[c].trim(),";")},"")}function c1(C){return C.size!==Q.size||C.x!==Q.x||C.y!==Q.y||C.rotate!==Q.rotate||C.flipX||C.flipY}function l1(){var C,c,l=p,z=U.familyPrefix,e=U.replacementClass,a=':host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Solid";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Regular";--fa-font-light:normal 300 1em/1 "Font Awesome 6 Light";--fa-font-thin:normal 100 1em/1 "Font Awesome 6 Thin";--fa-font-duotone:normal 900 1em/1 "Font Awesome 6 Duotone";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}svg:not(:host).svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible;box-sizing:content-box}.svg-inline--fa{display:var(--fa-display,inline-block);height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-2xs{vertical-align:.1em}.svg-inline--fa.fa-xs{vertical-align:0}.svg-inline--fa.fa-sm{vertical-align:-.0714285705em}.svg-inline--fa.fa-lg{vertical-align:-.2em}.svg-inline--fa.fa-xl{vertical-align:-.25em}.svg-inline--fa.fa-2xl{vertical-align:-.3125em}.svg-inline--fa.fa-pull-left{margin-right:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-pull-right{margin-left:var(--fa-pull-margin,.3em);width:auto}.svg-inline--fa.fa-li{width:var(--fa-li-width,2em);top:.25em}.svg-inline--fa.fa-fw{width:var(--fa-fw-width,1.25em)}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:var(--fa-counter-background-color,#ff253a);border-radius:var(--fa-counter-border-radius,1em);box-sizing:border-box;color:var(--fa-inverse,#fff);line-height:var(--fa-counter-line-height,1);max-width:var(--fa-counter-max-width,5em);min-width:var(--fa-counter-min-width,1.5em);overflow:hidden;padding:var(--fa-counter-padding,.25em .5em);right:var(--fa-right,0);text-overflow:ellipsis;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-counter-scale,.25));transform:scale(var(--fa-counter-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:var(--fa-bottom,0);right:var(--fa-right,0);top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:var(--fa-bottom,0);left:var(--fa-left,0);right:auto;top:auto;-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{top:var(--fa-top,0);right:var(--fa-right,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:var(--fa-left,0);right:auto;top:var(--fa-top,0);-webkit-transform:scale(var(--fa-layers-scale,.25));transform:scale(var(--fa-layers-scale,.25));-webkit-transform-origin:top left;transform-origin:top left}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width,2em) * -1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-delay:var(--fa-animation-delay,0);animation-delay:var(--fa-animation-delay,0);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1,1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}100%{-webkit-transform:scale(1,1) translateY(0);transform:scale(1,1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,100%{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}24%,8%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}100%,40%{-webkit-transform:rotate(0);transform:rotate(0)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;vertical-align:middle;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;z-index:var(--fa-stack-z-index,auto)}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-sr-only,.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fa-sr-only-focusable:not(:focus),.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fa-duotone.fa-inverse,.fad.fa-inverse{color:var(--fa-inverse,#fff)}';return"fa"===z&&e===l||(C=new RegExp("\\.".concat("fa","\\-"),"g"),c=new RegExp("\\--".concat("fa","\\-"),"g"),l=new RegExp("\\.".concat(l),"g"),a=a.replace(C,".".concat(z,"-")).replace(c,"--".concat(z,"-")).replace(l,".".concat(e))),a}var z1=!1;function e1(){U.autoAddCss&&!z1&&(function(C){if(C&&o){var c=v.createElement("style");c.setAttribute("type","text/css"),c.innerHTML=C;for(var l=v.head.childNodes,z=null,e=l.length-1;-1").concat(z.map(t1).join(""),"")}function r1(C,c,l){if(C&&C[c]&&C[c][l])return{prefix:c,iconName:l,icon:C[c][l]}}o&&((V1=(v.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(v.readyState))||v.addEventListener("DOMContentLoaded",a1));function s1(C,c,l,z){for(var e,a,M=Object.keys(C),L=M.length,V=void 0!==z?h1(c,z):c,H=void 0===l?(e=1,C[M[0]]):(e=0,l);e + + + + +Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/public/logo.jpg b/attic/public/logo.jpg new file mode 100644 index 0000000..458936c Binary files /dev/null and b/attic/public/logo.jpg differ diff --git a/attic/public/logo.png b/attic/public/logo.png new file mode 100644 index 0000000..c54fa8b Binary files /dev/null and b/attic/public/logo.png differ diff --git a/attic/public/mysshkeys.txt b/attic/public/mysshkeys.txt new file mode 100644 index 0000000..eb6ce78 --- /dev/null +++ b/attic/public/mysshkeys.txt @@ -0,0 +1,8 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDJ1rOpvyKpOXtTzMEEsWAYTLAzEle7EeqTUJpJcnqz+r5JOBMhLxvuRmKRK2dU23gQicCHxmOQhNCd4b2d64G9QbngvJeyEv4IwgLxePNv5/LN00PTk6rUNkApGcVU663tHXs8Q8Ux+R1zYk7UY86LIoBzC8lA21q5WktXl1qaAw85a/fn9G/Vd+o+Gb8XS6OfCdmM9CGV1Gv3vnAJ+xytf+I5UIFXs+FExlWpWlcNGlYlRFHAiHB/f/rvNJVnHamyipmfn6T3N809A+k9XVqmbhC1ymav1eYPfHCOtCFwMXmvRgD7D2fNoJzu93cX8qPZLvyz0VOFuR1XVyshTKsxB4foXaqA6xhTtHBqn6F2Nz90gpvrd+mTxNxaCkhh2j2rQzfDGLcVCpoMLtFb9vcwWYOrsVjNAAhi91VSSc6xkILTbxeWEljyFYDYZQh+M/FimY2YGULgdwX1nlRfIrRRJ/E0gY6KzwbBQd6dL8LWx9bYVl/hAMZeAuifFfBqSbL7V7Q3yrmU4PErVKhH/2Q/eCD47xvjK5mAqVPo52CSJ6RFiZNHUfA4i7EFznEM/4K3+GahqYcyu2fKu/AiHp9WlK5rO+KpliD84YQ8dmJ7h4/xj0plnxclJjAhhGEl3m+v6BINdfLNbZyib+T4swmf/OUA7+NYR1ZHWmWfMN2qnw== openpgp:0xBE3E26CA +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCNnQEIzgOMYU2W0laO6t8vuz5lggs6pRVju8WJ6zp5OIcTGsOSHAWKMkFkCSkKkLLyEy86Ozz1CRHcsMgngorDMnEbg/uZzn9Zi5ij9eKdApgMy0/jS6eMM5Sj3rT5MNcNjdLGT5Fsv2X+7A3QTCo5Il2IhjULb1hfPgcBU4aehDzDK3FZTgBHrlPGnhh1PSf6oN+TmcStn5Aw+GoPJ/9cSs2988JGKIlO4IXZQE1C8jaxgQpFwpMla1MQpqXdjTNv9oinAQe53sE+8la8C5FOkfUTWKLPrAqtIMF0sL3zz3cPmKr49IDebvmJW6C1UdZ2Pefsq9+pdDtzROBuxvbKZLiU61sLbkxpGmC2a1zYQkmjFfRRuJCjPvGyGnMsRmEVvSCFe4102hUud3rPJkyKKezInkOxtfW/PZOWW1nvWKPKRrQ5yQ30maMAhqhnUbQ6zWtfWnVlVJwpaCRv+iv6hTahYfehSwAi+sSgKfcb81z9Z9hYf/tmgimyJC165PUTIRvqr9hBHDQpIHE+h4Pc/ahSUz0Zwnt3Vb9mMeK9U5dkhRCgpX4UnbkBv94ikUVDvTwfHcnal98xiU5Oj+1C+sA4Z7kZGL0nE8DuFyt1zMOPWHtyfN1X4+bRjODbqk49Xs4T8OTSkU36OhgzpTs0UlEzxhzhkf88BzUpWgsqZw== openpgp:0x9B703B00 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDIprHEP1R39F0k4Gj4aMbwiaPwFkYqOSk7zlz66Qe21s8V+ylh+9SHgqivxdKI69D5w+ZOUbuzWTiMUVQMteiFeLwjjHtp3ZxwFByHPhKzR+Wuv1EazsO523UavM4iL1vaL/hpgL85/0X0389wOMPUDnrgfrxN5vCXmIAc/Li+IBkyt+Nxc+lR8B7uokVpfE9jxXjZVbR4n46RRXl+cBZkhUM6N+Yu2yrjFVjZ01IyqpboQ/v1F8z/jdcd/x4qc869sXpt6MgLu18kYGCxzGXh4xJUTt7RZIpjh2bMIsYCu7kgTtiDXf4NLlM62ZiJ6KJ15W/q8TAi4ylvtqSOj+aN openpgp:0x3D11E372 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDlUHjnEML85Q39zf7qobB/M4zGCmXjkDRehtWoemqfa2TrDcCxtvN7T0u62fxdknyrhR13ZHAA8NoOvbu2Or7ViCELf6mGhAdbIU0zOTTVKyZ+FnVa6CMOb/smzT/6rzNvgRJz306WzjxjE1c2Db4+p/7O17cwpx7rsfobb2a3pXyg0FQuxJiO6utbMKYFBkqYkN1afckPO27FbQB4lcMw8RbPq64ZclbQ3lFh1qxPow7xGRBig18erCvKvkxmdqPHo/Vj7raCbIgXreE3TdaPo+jPu9jk/L9nZqaOfJm8k7jfrk9lnBjJVEy4XswfGqICq03UQ6DuNM2jpujiROgnTJ6WjZ2kzvS6IZ8mP8fJtZo6WYQ/pbexOZrbU9b2pNod8NGLGCo6sl2cPitLViazpB6CrPiMYyFAexg5tCt1qBiGBIckLEtTwfMf3LF29wm1RnjwxDp9uPB2G3nj3T0AGnyG2+LtNm5J6Oia0T+gbt6JcCGBHX82XopJGiWfxsjnYRzSlj5Fe4ntTytSIkn42QpxPWrKa1qVN/+GyfxpMdYwubfNeAogxfrnq5AAdgd0Sj+91GiisOn+p6mTmKKFhxO92q1xKM9r/sURe9H/v2KHgSjkJefWUC65GDTzAo7RWgSx3fefYJ5BGkL+hyrYnIrCj9t2CMktx8aZhx/GKQ== openpgp:0x5328CC43 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDgWpTiwD2v1PIfgEMB6/BjPhevD2pV6I7l6U08ESXcgqiEG9fR8RxpvVP+5K/gvFw36qcVINCbiyYxH6TMRwqYPpYRhBwyydDJMMzGg0FFTucQAhVnxREZk5soDyhlwQUumsvmk0/+NZ0DxTA2Z4JJSwvD9Q2Gm5ca6D/nUodlb7qs4/26NsffMmTYng3NQLKYg6Rg0TyV6WRiHrxeonaWOeCqYuB4sG5himvUJ0cbg6Yvs82Qy4djipa3nmIi6GbpPLqisC1Fy8RH1j32kqY7w2+i7X9xD+U2Yf9PYGLiPZ5yzCqhnH1Z9U2/MQUc1jzHnWKPdzV/YMxOpcCRHpLY67XmJ3B7dXVPjlADVA1T+SIvhy77UZV9rhVyCCNifb6qSEWGwN8CBbbeU3z4hSkNnxNv2RnUm7UQyRPlL+cWC3U34omqGZMZb5HUXhZ31trz61PiXly/mgOKKwGB0C0f1U4StHc4/HR8gY7XQj854R2oznAbZgy/xiCZO0kZJ9hCQ3rtt1NqHkHd9+n2QPyVIgCYMoEaxs9umJKkArbYVsWXIdHOJcnEH2Uk/p8//Je2K8YW+PAQ/GXKwER0+pXj4G/cOCnjQcEIWlUDAuYYOfqRG7hkC6H+ZLyO6cmOKB5gRQTaf1JanbFL4lAMUHI/4LB9/E0HhIIgxnsmsyid3Q== openpgp:0x49DE4884 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDA76VvXrpw03opLO6nWnY+hOsxUkba1uDl8CRG6JXlEtC4DvNaejJ2jnaa2kLD4M9a+3H2tXmmZlOm8UzdFQNcRJCkmAsapuedb5gI12w4G7O8aCPJftsQlO/ICojjsFj0OIDzxHWIMOMmJN9u4+FQdaiif6nUbVRmpTFS0oEX6niLqgKOMqp4a/+bD4IJpdLj6kEBnw0PFS+16p6S2BRIN8W/brOngvu/5RdmEN3bvco/H476OfGYU40IZW5JBl5uJd/qXqZ7GVW9YVnCFfpJQVvRT4fi2AmCrSHngsuRXzID+JxYtC+8Emw2AREKSFKG7H+iOdF7k92TL0JZmDU0JBzWd0/NJ4C+J5Hz4JDb62KVURglDcUhAy8WqHHmut919xjUCRuqjymEqr9WizQW21HPhIm3E7EjVz4id/lX97Vjy+qYIFIZtc7nDup1VSO4Rqt/1eQM96IVe0nxA0jGTCGouXcemdzxNtBck4grl8LmKACymFKxalB7q9RT9Ji6DCTs4oAi7r5lKd9h5zfXQMbK8H/TEDO5bP4coARQiAXbpOGgzmx7teTe7B/VP1mXUAFloA6uQmqlC3bcTp2TiwSrIS0y/YJBVPS3pIeC+iANvYBkVe93/VTIyH6+Zc4afM85YcPCd7p+NlMqvsKpPkIyBpGrlvB6GE9Kcgg/Fw== openpgp:0x8C28C039 +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC+9wuMSMxDylwcKNJzr8Z+HkyuuxEi1MKiV9lEDD4o4FuCuo3COqfhxl4hx2+B8e2hPiCUmEhNhRDIQZ25JS+LEywOdDUAqODNnrD0Tc8ueb6zI9MEqwg4mHa+F6LoJJLfNBX1BSdDgg5AVZpH5wu5n6f6YAhPo+ZbzEmObNt/38PcZsl2FO5q0lNpf0phGowDze8oteuATc21tM96K+1CYony5rzDtB2J6554WlRltNufzH4UcUUBvOceiqKu6n/KhkTuVFq76Wp3ERstF0TGMP7M5jEB58cI1hdhfEiC/GL3WIwpbhMAMsrFZrFlJJiDdivvqBnWDPxjfaRLKPEtXryyQ5NPuvN27TpjiQGvLVqskFbPmkaVH5iI4F835g2xrk+qKKQGRTNNh0rVHPqCCPSvYvS/7cRkrfepB2V1bYGAdMHdF6NvJpe9VqWb5lcl3uJxcLQY4evvv+53HLVPAz2DIjr/IF/8mmoHLvdxHlihHmCDlem7Yg4NIWFrl8v48uEHCbaBxtGU+aWbleE0Lr3Lo1OqoqMyAyBMQSl11WfOgq4PELK39OEkJipCAvMFI/FSc9plVSmaHWMuJzGsHCsrBPWnD/CS/G38LLaxgg1mXNt6GHLmDwrWw38PTbN0sNtXm80x5ReVjpvvVooIUZerYJ18sb8bOZ7O2jLE5w== openpgp:0x591AFDCE +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDWP/CfohVMxpsuryOPwh5F0o6TNret5patWZTF3hstZop5/ghlDO8vm5LRg2/a6VrP1e0rOnU24tGjO6VlhZguWfz7ixQAHx7AbjllnD+NIY5nKXSk6RtKk2D42NzO9c8XDbReaVYfd91UNswxe6SpAPw6SuKaMY/zL7as2qYpBsFdrr1oyKbgZMI2yPRJloJjklqlznJcUC4SzEaxtVSnZRIUdx3ANLzt5xNxWhYZ7048oGen4cRfiOtiTypW5uAOwovQulJVtpavo2GTD9sSpnFF9UQhgRkqT+oFRgHQnnOHUqazLsc4uRv0h6/6wSBl9SkKys33x0Zxl1zpxM+0iJDFVnn8HnXLvuRLMCXAg9QWCmKkrQJ/SFU213Qg21O62Nbet6bRfFGz+uz0+9GeMaARmhPbxEGEgqBrscaadeO+JRWntEcoULupKsU0Mc77/DX3UfEYGUgvA8FIFTgpiPnOuGI2K/6kP/QLMqZzLXRAgYO4U+vyOniPy9kHadQ9ZEuCX5inhZhOFi5v/ofI7532skXktbbm1ue46j+7xGHSVcoeuz02dZNtnLZP36vCCi8UkE3CAvuU0hLa/ZBeos6M3GNogdIQ+pzesZ6htQhZcGUR7XHmrFLDwAwV4JTJUfXZ5nMwm78+Oh1CptLyH7Ww4z/k3an8caggxP2+QQ== openpgp:0xCD137F0B diff --git a/attic/public/pulse_complete.png b/attic/public/pulse_complete.png new file mode 100644 index 0000000..9881949 Binary files /dev/null and b/attic/public/pulse_complete.png differ diff --git a/attic/public/pulse_long.png b/attic/public/pulse_long.png new file mode 100644 index 0000000..508e9ea Binary files /dev/null and b/attic/public/pulse_long.png differ diff --git a/attic/public/pulse_short.png b/attic/public/pulse_short.png new file mode 100644 index 0000000..59713b6 Binary files /dev/null and b/attic/public/pulse_short.png differ diff --git a/attic/public/reset-circuit.jpeg b/attic/public/reset-circuit.jpeg new file mode 100644 index 0000000..0a61edb Binary files /dev/null and b/attic/public/reset-circuit.jpeg differ diff --git a/attic/public/reset-ctrl.jpg b/attic/public/reset-ctrl.jpg new file mode 100644 index 0000000..5ca7d4d Binary files /dev/null and b/attic/public/reset-ctrl.jpg differ diff --git a/attic/public/reset-signal.png b/attic/public/reset-signal.png new file mode 100644 index 0000000..a8e9e20 Binary files /dev/null and b/attic/public/reset-signal.png differ diff --git a/attic/public/rgb-driver.jpg b/attic/public/rgb-driver.jpg new file mode 100644 index 0000000..32537a3 Binary files /dev/null and b/attic/public/rgb-driver.jpg differ diff --git a/attic/public/scan_005006-1024x654.jpg b/attic/public/scan_005006-1024x654.jpg new file mode 100644 index 0000000..c06fb69 Binary files /dev/null and b/attic/public/scan_005006-1024x654.jpg differ diff --git a/attic/public/scan_005006_2-1024x553.jpg b/attic/public/scan_005006_2-1024x553.jpg new file mode 100644 index 0000000..5fc0c0a Binary files /dev/null and b/attic/public/scan_005006_2-1024x553.jpg differ diff --git a/attic/public/scan_005006_3.jpg b/attic/public/scan_005006_3.jpg new file mode 100644 index 0000000..58a829b Binary files /dev/null and b/attic/public/scan_005006_3.jpg differ diff --git a/attic/public/scan_005006_4.jpg b/attic/public/scan_005006_4.jpg new file mode 100644 index 0000000..8716743 Binary files /dev/null and b/attic/public/scan_005006_4.jpg differ diff --git a/attic/public/scan_005006_5-1024x717.jpg b/attic/public/scan_005006_5-1024x717.jpg new file mode 100644 index 0000000..149fe6e Binary files /dev/null and b/attic/public/scan_005006_5-1024x717.jpg differ diff --git a/attic/public/scan_005006_6.jpg b/attic/public/scan_005006_6.jpg new file mode 100644 index 0000000..1839f9b Binary files /dev/null and b/attic/public/scan_005006_6.jpg differ diff --git a/attic/public/schematics.jpeg b/attic/public/schematics.jpeg new file mode 100644 index 0000000..a752d4f Binary files /dev/null and b/attic/public/schematics.jpeg differ diff --git a/attic/public/schematics.pdf b/attic/public/schematics.pdf new file mode 100755 index 0000000..883db6b Binary files /dev/null and b/attic/public/schematics.pdf differ diff --git a/attic/public/signals01.png b/attic/public/signals01.png new file mode 100644 index 0000000..cd378b8 Binary files /dev/null and b/attic/public/signals01.png differ diff --git a/attic/public/sitemap.xml b/attic/public/sitemap.xml new file mode 100644 index 0000000..8643cd6 --- /dev/null +++ b/attic/public/sitemap.xml @@ -0,0 +1,80 @@ + + + + http://172.16.3.33:1313/blog/tetris/ + 2024-05-27T00:00:00+00:00 + + http://172.16.3.33:1313/blog/rgb-driver/ + 2024-05-25T00:00:00+00:00 + + http://172.16.3.33:1313/blog/ + 2025-03-13T00:00:00+00:00 + + http://172.16.3.33:1313/ + 2025-03-13T00:00:00+00:00 + + http://172.16.3.33:1313/blog/timeserver2/ + 2025-03-13T00:00:00+00:00 + + http://172.16.3.33:1313/blog/timeserver/ + 2025-02-11T00:00:00+00:00 + + http://172.16.3.33:1313/blog/debouncing/ + 2018-04-30T00:00:00+00:00 + + http://172.16.3.33:1313/blog/three-phase-inverter-ng/ + 2016-12-19T00:00:00+00:00 + + http://172.16.3.33:1313/blog/three-phase-inverter/ + 2016-10-14T00:00:00+00:00 + + http://172.16.3.33:1313/blog/theremin/ + 2013-07-01T00:00:00+00:00 + + http://172.16.3.33:1313/blog/email-childprot/ + 2013-06-27T00:00:00+00:00 + + http://172.16.3.33:1313/keys/ + + http://172.16.3.33:1313/about/ + + http://172.16.3.33:1313/articles/ + + http://172.16.3.33:1313/categories/ + + http://172.16.3.33:1313/howtos/colors-in-minicom/ + + http://172.16.3.33:1313/howtos/engel-des-herrn/ + + http://172.16.3.33:1313/howtos/occ-in-nextcloud-pod/ + + http://172.16.3.33:1313/howtos/gitlab-backup/ + + http://172.16.3.33:1313/howtos/gitlab-change-baseurl/ + + http://172.16.3.33:1313/howtos/gitlab-upgrades/ + + http://172.16.3.33:1313/howtos/ca-certificate-in-debian/ + + http://172.16.3.33:1313/howtos/ + + http://172.16.3.33:1313/howtos/iscsi-on-linux/ + + http://172.16.3.33:1313/howtos/magnifikat/ + + http://172.16.3.33:1313/howtos/neovim/ + + http://172.16.3.33:1313/howtos/putty-and-hardware-keys/ + + http://172.16.3.33:1313/articles/quotes/ + + http://172.16.3.33:1313/howtos/resize-hdd-on-running-system/ + + http://172.16.3.33:1313/howtos/snmpwalk-with-numeric-and-text-output/ + + http://172.16.3.33:1313/howtos/prince-of-persia-1/ + + http://172.16.3.33:1313/tags/ + + diff --git a/attic/public/six_leds.png b/attic/public/six_leds.png new file mode 100644 index 0000000..01ea978 Binary files /dev/null and b/attic/public/six_leds.png differ diff --git a/attic/public/sound-driver-1.jpg b/attic/public/sound-driver-1.jpg new file mode 100644 index 0000000..b235116 Binary files /dev/null and b/attic/public/sound-driver-1.jpg differ diff --git a/attic/public/sound-driver-2.png b/attic/public/sound-driver-2.png new file mode 100644 index 0000000..f262537 Binary files /dev/null and b/attic/public/sound-driver-2.png differ diff --git a/attic/public/sound-driver-3.jpg b/attic/public/sound-driver-3.jpg new file mode 100644 index 0000000..731a204 Binary files /dev/null and b/attic/public/sound-driver-3.jpg differ diff --git a/attic/public/sound-driver-4.jpg b/attic/public/sound-driver-4.jpg new file mode 100644 index 0000000..f173366 Binary files /dev/null and b/attic/public/sound-driver-4.jpg differ diff --git a/attic/public/tags/index.html b/attic/public/tags/index.html new file mode 100644 index 0000000..74958af --- /dev/null +++ b/attic/public/tags/index.html @@ -0,0 +1,123 @@ + + + + + +Tags - Minimal Setups + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/attic/public/tags/index.xml b/attic/public/tags/index.xml new file mode 100644 index 0000000..d26beb8 --- /dev/null +++ b/attic/public/tags/index.xml @@ -0,0 +1,11 @@ + + + + Tags on Minimal Setups + http://172.16.3.33:1313/tags/ + Recent content in Tags on Minimal Setups + Hugo + en-us + + + diff --git a/attic/public/timing.png b/attic/public/timing.png new file mode 100644 index 0000000..28708b3 Binary files /dev/null and b/attic/public/timing.png differ diff --git a/content/content/about.md b/content/about.md similarity index 65% rename from content/content/about.md rename to content/about.md index 32c3568..3634865 100644 --- a/content/content/about.md +++ b/content/about.md @@ -1,9 +1,3 @@ ---- -title: "About" ---- - - - [Wolfgang Hottgenroth](mailto:woho@hottis.de) diff --git a/content/archetypes/default.md b/content/archetypes/default.md deleted file mode 100644 index 25b6752..0000000 --- a/content/archetypes/default.md +++ /dev/null @@ -1,5 +0,0 @@ -+++ -date = '{{ .Date }}' -draft = true -title = '{{ replace .File.ContentBaseName "-" " " | title }}' -+++ diff --git a/content/content/_index.md b/content/content/_index.md deleted file mode 100644 index ab5f091..0000000 --- a/content/content/_index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: "Minimal Setups" ---- - - - -## Minimal Setups - -![](/IMG_3019.png) - diff --git a/content/content/articles/quotes.md b/content/content/articles/quotes.md deleted file mode 100644 index e8859cf..0000000 --- a/content/content/articles/quotes.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Quotes" ---- - -{{< quote date="2025-01-22" source="Alles Du, Dota Kehr" >}} -Und dann in deinem Arm, alles gut, alles andere egal -{{< /quote >}} - -{{< quote date="2025-01-14" source="Steinhammer, Thadeusz" >}} -Es ist immer was los, aber es passiert nichts. -{{< /quote >}} - -{{< quote date="2025-01-14" source="Samuel Overbeck in Steinhammer, Thadeusz, S. 68, 71" >}} -Sie steht gut da. Aber die Seele setzt sich nicht dazu. -{{< /quote >}} - diff --git a/content/content/keys.md b/content/content/keys.md deleted file mode 100644 index 9a41646..0000000 --- a/content/content/keys.md +++ /dev/null @@ -1,16 +0,0 @@ -## My Public GPG and SSH Keys - -### SSH Keys - -* [My SSH Keys](/mysshkeys.txt) - - -### GPG Keys - -* [`2306AA47A6D7A534B1B7446C836E9E1192A6B132`](/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt) -* [`082071E0415E0A2D87A2385B5159E88B93B67538`](/082071E0415E0A2D87A2385B5159E88B93B67538.txt) -* [`7B5C0BB6AFCADDC8E3435746B76E53073EE19643`](/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt) -* [`90E1D1E935FC6AB94444B15B18FDFA577A8871AD`](/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt) -* [`BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469`](/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt) - - diff --git a/content/hugo.yaml b/content/hugo.yaml deleted file mode 100644 index 85e7495..0000000 --- a/content/hugo.yaml +++ /dev/null @@ -1,26 +0,0 @@ -baseURL: "https://minimal-setups.de" -releaseTag: "%RELEASETAG%" -languageCode: "en-us" -title: "Minimal Setups" -theme: "ananke" -# theme: "hextra" -theme: "hugo-theme-techdoc-x" -googleAnalystics: "" - -params: - menu_style: "slide-menu" - -menu: - main: - - name: Keys - pageRef: /keys - weight: 3 - - name: About - pageRef: /about - weight: 4 - -markup: - defaultMarkdownHandler: goldmark - goldmark: - renderer: - unsafe: true diff --git a/content/index.md b/content/index.md new file mode 100644 index 0000000..27230bd --- /dev/null +++ b/content/index.md @@ -0,0 +1,4 @@ +# Minimal Setups + +![](/static/IMG_3019.png) + diff --git a/content/keys.md b/content/keys.md new file mode 100644 index 0000000..450ddd6 --- /dev/null +++ b/content/keys.md @@ -0,0 +1,16 @@ +## My Public GPG and SSH Keys + +### SSH Keys + +* [My SSH Keys](/static/mysshkeys.txt) + + +### GPG Keys + +* [`2306AA47A6D7A534B1B7446C836E9E1192A6B132`](/static/2306AA47A6D7A534B1B7446C836E9E1192A6B132.txt) +* [`082071E0415E0A2D87A2385B5159E88B93B67538`](/static/082071E0415E0A2D87A2385B5159E88B93B67538.txt) +* [`7B5C0BB6AFCADDC8E3435746B76E53073EE19643`](/static/7B5C0BB6AFCADDC8E3435746B76E53073EE19643.txt) +* [`90E1D1E935FC6AB94444B15B18FDFA577A8871AD`](/static/90E1D1E935FC6AB94444B15B18FDFA577A8871AD.txt) +* [`BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469`](/static/BDB9F424842252FB4D8EEDDCE49AF3B9EF6DD469.txt) + + diff --git a/content/layouts/partials/releasetag.html b/content/layouts/partials/releasetag.html deleted file mode 100644 index 16ca7ca..0000000 --- a/content/layouts/partials/releasetag.html +++ /dev/null @@ -1,3 +0,0 @@ -
-%RELEASETAG% -
diff --git a/content/mdwiki.html b/content/mdwiki.html new file mode 100644 index 0000000..fe38bb1 --- /dev/null +++ b/content/mdwiki.html @@ -0,0 +1,239 @@ + + + + + MDwiki + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + diff --git a/content/navigation.md b/content/navigation.md new file mode 100644 index 0000000..1cd6ad1 --- /dev/null +++ b/content/navigation.md @@ -0,0 +1,6 @@ +# Minimal Setups + +[About](about.md) +[Keys](keys.md) +[Snippets](snippets.md) + diff --git a/content/snippet-indexer.sh b/content/snippet-indexer.sh new file mode 100755 index 0000000..32c8ec6 --- /dev/null +++ b/content/snippet-indexer.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +SNIPPETS_DIR=./snippets +SNIPPETS_INDEX=snippets.md + +echo "# Snippets" > $SNIPPETS_INDEX +for I in `ls $SNIPPETS_DIR | sort -r`; do + TITLE=`head -4 $SNIPPETS_DIR/$I | awk '/^title:/ { sub($1 FS, ""); print }'` + DATE=`head -4 $SNIPPETS_DIR/$I | awk '/^date:/ { sub($1 FS, ""); print }'` + echo "- [$TITLE ($DATE)]($SNIPPETS_DIR/$I)" >> $SNIPPETS_INDEX +done + diff --git a/content/content/blog/debouncing.md b/content/snippets/0020-debouncing.md similarity index 97% rename from content/content/blog/debouncing.md rename to content/snippets/0020-debouncing.md index cd22d60..92d945f 100644 --- a/content/content/blog/debouncing.md +++ b/content/snippets/0020-debouncing.md @@ -1,7 +1,7 @@ ---- -title: "Yet Another Debouncing Method" -date: "2018-04-30" ---- + You can find several approaches for debouncing mechanical switches on the Internet, some work better, some not so good. @@ -29,7 +29,7 @@ When also the time the button was pressed is relevant and when it is especially Since I couldn't remember the approaches I read about earlier I've sketched this state machine: -![](/20180430110848869_0001.jpg) +![](/static/20180430110848869_0001.jpg) (The double-lined states are action-states which send out the related information.) diff --git a/content/content/HowTos/ca-certificate-in-debian.md b/content/snippets/0030-ca-certificates-in-debian.md similarity index 68% rename from content/content/HowTos/ca-certificate-in-debian.md rename to content/snippets/0030-ca-certificates-in-debian.md index 83bc2af..3b7a1b1 100644 --- a/content/content/HowTos/ca-certificate-in-debian.md +++ b/content/snippets/0030-ca-certificates-in-debian.md @@ -1,6 +1,6 @@ ---- -title: "How to add a CA certificate in Debian" ---- + Copy CA file with extension `crt` into `/usr/local/share/ca-certificates/`. diff --git a/content/content/HowTos/colors-in-minicom.md b/content/snippets/0040-colors-in-minicom.md similarity index 94% rename from content/content/HowTos/colors-in-minicom.md rename to content/snippets/0040-colors-in-minicom.md index e92d693..2a6049c 100644 --- a/content/content/HowTos/colors-in-minicom.md +++ b/content/snippets/0040-colors-in-minicom.md @@ -1,6 +1,6 @@ ---- -title: "Colors in Minicom" ---- + To start `minicom` in color mode use diff --git a/content/content/blog/email-childprot.md b/content/snippets/0050-email-childprot.md similarity index 94% rename from content/content/blog/email-childprot.md rename to content/snippets/0050-email-childprot.md index 0e015f2..0341663 100644 --- a/content/content/blog/email-childprot.md +++ b/content/snippets/0050-email-childprot.md @@ -1,7 +1,7 @@ ---- -title: "Children Protection for Postfix-based EMail-Server" -date: "2013-06-27" ---- + This small tool implements a whitelist on a Postfix mail-server. It prevents certain recipient addresses (your kids ones) from receiving mail from any not whitelisted address. Any mail from not whitelisted senders is redirected to a delegate (a parent). diff --git a/content/content/HowTos/engel-des-herrn.md b/content/snippets/0060-engel-des-herrn.md similarity index 94% rename from content/content/HowTos/engel-des-herrn.md rename to content/snippets/0060-engel-des-herrn.md index bbc70eb..ba02ebf 100644 --- a/content/content/HowTos/engel-des-herrn.md +++ b/content/snippets/0060-engel-des-herrn.md @@ -1,7 +1,6 @@ ---- -title: "Engel des Herrn" -toc: false ---- + Der Engel des Herrn brachte Maria die Botschaft, und sie empfing vom Heiligen Geist. diff --git a/content/content/HowTos/gitlab-backup.md b/content/snippets/0070-gitlab-backup.md similarity index 96% rename from content/content/HowTos/gitlab-backup.md rename to content/snippets/0070-gitlab-backup.md index 5792ad1..3bd6e9a 100644 --- a/content/content/HowTos/gitlab-backup.md +++ b/content/snippets/0070-gitlab-backup.md @@ -1,6 +1,6 @@ ---- -title: "Gitlab Backup and Restore" ---- + ## Backup Find the backup directory: diff --git a/content/content/HowTos/gitlab-change-baseurl.md b/content/snippets/0080-gitlab-change-baseurl.md similarity index 93% rename from content/content/HowTos/gitlab-change-baseurl.md rename to content/snippets/0080-gitlab-change-baseurl.md index 2ebb603..624d216 100644 --- a/content/content/HowTos/gitlab-change-baseurl.md +++ b/content/snippets/0080-gitlab-change-baseurl.md @@ -1,6 +1,6 @@ ---- -title: "Gitlab Change BaseURL in Database" ---- + ## Change URL diff --git a/content/content/HowTos/gitlab-upgrades.md b/content/snippets/0090-gitlab-upgrades.md similarity index 96% rename from content/content/HowTos/gitlab-upgrades.md rename to content/snippets/0090-gitlab-upgrades.md index cd34d2a..ac66688 100644 --- a/content/content/HowTos/gitlab-upgrades.md +++ b/content/snippets/0090-gitlab-upgrades.md @@ -1,6 +1,6 @@ ---- -title: "Gitlab Upgrades" ---- + ## Upgrade of a GitLab instance diff --git a/content/content/HowTos/iscsi-on-linux.md b/content/snippets/0100-iscsi-on-linux.md similarity index 98% rename from content/content/HowTos/iscsi-on-linux.md rename to content/snippets/0100-iscsi-on-linux.md index 1b1840d..7a6a546 100644 --- a/content/content/HowTos/iscsi-on-linux.md +++ b/content/snippets/0100-iscsi-on-linux.md @@ -1,6 +1,6 @@ ---- -title: "iSCSI on Linux" ---- + ## Preparation Install `open-iscsi`, at least on Debian systems. diff --git a/content/content/HowTos/magnifikat.md b/content/snippets/0110-magnifikat.md similarity index 96% rename from content/content/HowTos/magnifikat.md rename to content/snippets/0110-magnifikat.md index aed3c85..b2bfe58 100644 --- a/content/content/HowTos/magnifikat.md +++ b/content/snippets/0110-magnifikat.md @@ -1,7 +1,6 @@ ---- -title: "Magnifikat" -toc: false ---- + diff --git a/content/content/HowTos/neovim.md b/content/snippets/0120-neovim.md similarity index 97% rename from content/content/HowTos/neovim.md rename to content/snippets/0120-neovim.md index e8ab7cc..02f5c96 100644 --- a/content/content/HowTos/neovim.md +++ b/content/snippets/0120-neovim.md @@ -1,6 +1,6 @@ ---- -title: "Neovim Setup" ---- + Lots of information on nvim can be found for instance here: diff --git a/content/content/HowTos/occ-in-nextcloud-pod.md b/content/snippets/0130-occ-in-nextcloud-pod.md similarity index 85% rename from content/content/HowTos/occ-in-nextcloud-pod.md rename to content/snippets/0130-occ-in-nextcloud-pod.md index b0db3b4..4a07120 100644 --- a/content/content/HowTos/occ-in-nextcloud-pod.md +++ b/content/snippets/0130-occ-in-nextcloud-pod.md @@ -1,6 +1,6 @@ ---- -title: "Execute occ in Nextcloud pod" ---- + First, look up the name of the pod using diff --git a/content/content/HowTos/prince-of-persia-1.md b/content/snippets/0140-prince-of-persia-1.md similarity index 99% rename from content/content/HowTos/prince-of-persia-1.md rename to content/snippets/0140-prince-of-persia-1.md index 2a6d70a..114fd22 100644 --- a/content/content/HowTos/prince-of-persia-1.md +++ b/content/snippets/0140-prince-of-persia-1.md @@ -1,6 +1,6 @@ ---- -title: "Solution for Prince of Persia 1" ---- + # Lösung Prince of Persia 1 ## Komplettlösung zu "Prince of Persia 1" diff --git a/content/content/HowTos/putty-and-hardware-keys.md b/content/snippets/0150-putty-and-hardware-keys.md similarity index 80% rename from content/content/HowTos/putty-and-hardware-keys.md rename to content/snippets/0150-putty-and-hardware-keys.md index 018593d..086bae3 100644 --- a/content/content/HowTos/putty-and-hardware-keys.md +++ b/content/snippets/0150-putty-and-hardware-keys.md @@ -1,6 +1,6 @@ ---- -title: "PuTTY and OPENGPG hardware keys" ---- + * install gpg4win installed * create or edit the file `gpg-agent.conf`, usually in `c:\Users\XXX\AppData\Roaming\gnupg\`: diff --git a/content/content/HowTos/resize-hdd-on-running-system.md b/content/snippets/0160-resize-hdd-on-running-system.md similarity index 90% rename from content/content/HowTos/resize-hdd-on-running-system.md rename to content/snippets/0160-resize-hdd-on-running-system.md index dfb283f..be0aaac 100644 --- a/content/content/HowTos/resize-hdd-on-running-system.md +++ b/content/snippets/0160-resize-hdd-on-running-system.md @@ -1,6 +1,6 @@ ---- -title: "Resize HDD on running system" ---- + * Resize target on VMWare or on Synology or where ever it is provided * Stop services using the disk diff --git a/content/content/blog/rgb-driver.md b/content/snippets/0170-rgb-driver.md similarity index 89% rename from content/content/blog/rgb-driver.md rename to content/snippets/0170-rgb-driver.md index 89f273a..4f0a34f 100644 --- a/content/content/blog/rgb-driver.md +++ b/content/snippets/0170-rgb-driver.md @@ -1,8 +1,7 @@ ---- -title: "PL 9823 meets MSP430" -date: "2024-05-25" -weight: 2 ---- + ## Generating signals for PL 9823 using a MSP430 @@ -24,21 +23,21 @@ These signals are related to code under tag `cycler_works_include_output_stage`. First octets: -![](/cycler_working_first_octets.png) +![](/static/cycler_working_first_octets.png) Last octets: -![](/cycler_working_last_octets.png) +![](/static/cycler_working_last_octets.png) Schematics and legend for signals: -![](/schematics.jpeg) +![](/static/schematics.jpeg) #### Some more explanations Consider above schematics and the screen shot "Last octets" from the oscilloscope. -![](/timing.png) +![](/static/timing.png) Timer TA1 is running in "up mode" to the value 45 set in compare register `TA1CCR0`. The compare registers `TA1CCR1` is set to 10, `TA1CCR2` is set to 22. The output mode of the timer is set to "Reset/Set", which means the GPIO associated with `TA1CCR1` (P2.1) and `TA1CCR2` (P2.4) are set at the overflow and @@ -46,7 +45,7 @@ restart of the counter and reset when the counter matches the associated compare So, on P2.1 (D1 on the oscilloscope) we have a long pulse and at P2.4 (D0 on the oscilloscope) we have a short pulse, with synchronous raising edge. -![](/74hc74-function-table.png) +![](/static/74hc74-function-table.png) The inverted signal P2.4 is connected to the Clock input of a 74HC74 D-flipflop, the data input of the flipflop is connected to GPIO P1.0 (D2 on the oscilloscope). @@ -70,26 +69,26 @@ Additionally, when the first bit of a full draw screen cycle is presented at P1. Complete cycle: 2.48us -![](/pulse_complete.png) +![](/static/pulse_complete.png) Short pulse: 550ns -![](/pulse_short.png) +![](/static/pulse_short.png) Long pulse: 1.18us -![](/pulse_long.png) +![](/static/pulse_long.png) ### Load Time During of loading data into five LEDs: 297us -![](/five_leds.png) +![](/static/five_leds.png) During of loading data into six LEDs: 297us -![](/six_leds.png) +![](/static/six_leds.png) | # of LEDs | Load Time measured | calculated | @@ -109,11 +108,11 @@ will not handle the reset correctly. The following circuitry should generate a valid reset signal far enough from the raise of the supply voltage: -![](/reset-circuit.jpeg) +![](/static/reset-circuit.jpeg) The circuit generates the following signals: -![](/reset-signal.png) +![](/static/reset-signal.png) ##### Reference voltage (green): diff --git a/content/content/HowTos/snmpwalk-with-numeric-and-text-output.md b/content/snippets/0180-snmpwalk-with-numeric-and-text-output.md similarity index 78% rename from content/content/HowTos/snmpwalk-with-numeric-and-text-output.md rename to content/snippets/0180-snmpwalk-with-numeric-and-text-output.md index 07ac2bb..fac6114 100644 --- a/content/content/HowTos/snmpwalk-with-numeric-and-text-output.md +++ b/content/snippets/0180-snmpwalk-with-numeric-and-text-output.md @@ -1,6 +1,6 @@ ---- -title: "snmpwalk with numeric and text output of oid" ---- + ``` snmpwalk -v 2c -c $COMMUNITY -On $HOST $BASE_OID | while read -r line; do diff --git a/content/content/blog/tetris.md b/content/snippets/0190-tetris.md similarity index 91% rename from content/content/blog/tetris.md rename to content/snippets/0190-tetris.md index c4fa696..5ae3a46 100644 --- a/content/content/blog/tetris.md +++ b/content/snippets/0190-tetris.md @@ -1,20 +1,19 @@ ---- -title: "Tetris" -date: "2024-05-27" -weight: 1 ---- + # Tetris - Hardware and Software -![](/IMG_4936.jpg) +![](/static/IMG_4936.jpg) Update Amplifier (separate input circuitry per PSG, it appears, that a silent PSG has a DC level on its output which is summarized to the AC output of the working PSG, so two input circuits with individual couping capacitor): -![](/IMG_4941.jpg) +![](/static/IMG_4941.jpg) Update of the power switch of the amplifier (at appears, that the small transistor couldn't deliver enough current): -![](/IMG_4958.jpeg) +![](/static/IMG_4958.jpeg) This Tetris implementation consists of a hardware and a software (running on that hardware). @@ -32,7 +31,7 @@ The buttons are debounced using RC circuitry and Schmitt triggers and connected The peripherial microcontrollers and the EEPROM are connected via SPI including individual chip select lines. -![](/game-ctrl.jpg) +![](/static/game-ctrl.jpg) ## Play Ground Canvas @@ -43,7 +42,7 @@ The play ground is implemented using a 10 * 20 matrix of PL9823 RGB LEDs which a The communcation with the game play controller is implemented as a sequences of tuples of LED address (0 to 211) and color code. A single octet of 253 where the LED address is expected is taken as the end-of-telegram mark. Readiness to receive a telegram is signaled to the game play controller via a single line connected to a GPIO of the game play controller. -![](/rgb-driver.jpg) +![](/static/rgb-driver.jpg) [Details are here]({{< ref "rgb-driver.md" >}} "Details are here") @@ -56,7 +55,7 @@ In the first place, a MAX7221 was meant to be used for connecting a multiple dig Communication with the game play controller is just a 16 bit number to be displayed. -![](/display-driver.jpg) +![](/static/display-driver.jpg) ## Sound Effects @@ -69,8 +68,8 @@ An amplifier following the proposal of the AY-3-8913 datasheet is implemented us The clock generator proposed by the AY-3-8913 does not work reliably, so an alternative design from "The Art of Electronics" has been used. -![](/sound-driver-1.jpg) -![](/sound-driver-2.png) -![](/sound-driver-3.jpg) -![](/sound-driver-4.jpg) +![](/static/sound-driver-1.jpg) +![](/static/sound-driver-2.png) +![](/static/sound-driver-3.jpg) +![](/static/sound-driver-4.jpg) diff --git a/content/content/blog/theremin.md b/content/snippets/0200-theremin.md similarity index 93% rename from content/content/blog/theremin.md rename to content/snippets/0200-theremin.md index d122f0a..d1bb428 100644 --- a/content/content/blog/theremin.md +++ b/content/snippets/0200-theremin.md @@ -1,14 +1,14 @@ ---- -title: "Theremin" -date: "2013-07-01" ---- + A [Theremin](https://en.wikipedia.org/wiki/Theremin) is a rather old electronic music instrument, invented in 1928. It is played by approaching hands to two antennas, without touching them. One antenna is used to manipulate the frequeny of the tone, the other one to manipulate the volume. -![](/foto-am-30-06-13-um-20-021.jpg) +![](/static/foto-am-30-06-13-um-20-021.jpg) This is just another Theremin. Only basic structure of the circuit was taken from many other published Theremin circuits. -![](/scan_005006-1024x654.jpg) +![](/static/scan_005006-1024x654.jpg) Completely new (or at least not found during my Theremin googling) is the digital zero-calibration. @@ -29,25 +29,25 @@ When both frequencies are exactly the same, one part of the sum appears as a DC If one oscillator is de-tuned by only a few Hz'`s, one part are this few Hz'`s (a very low, hearable frequency) and the other part is still (roughly) the doubled frequency (a high frequency). The high frequency part can now be suppressed using a lowpass-filter. Multiplication of two signals can be done using an analog four quadrant multiplier, like the AD633. So, this is the schematic of the mixer+filter block: -![](/scan_005006_5-1024x717.jpg) +![](/static/scan_005006_5-1024x717.jpg) The output signal of this block is the difference of the detuning of the one oscillator. Detuning of the oscillator will be achieved by approaching the hand to the antenna of the oscillator. -![](/scan_005006_3.jpg) +![](/static/scan_005006_3.jpg) The antenna acts as a kind of a capacitive sensor and by approaching the hand a very small amount of capacity is added into the LC resonator. The other oscillator is a fix-frequency oscillator which can be tuned to swing on the same frequency as the first oscillator in a not detuned state. -![](/scan_005006_4.jpg) +![](/static/scan_005006_4.jpg) This tuning is achieved by biasing the two varactor diodes. Here is automated tuning circuit steps in: -![](scan_005006_6.jpg) +![](/static/scan_005006_6.jpg) The low-frequency output signal of the mixer+filter block is provided through a 2-to-1 multiplexer (the four NAND-gates) into a microcontroller. The microcontroller measures the frequency and as long as it is above a frequency $\epsilon$ of say 10Hz, the bias voltage $U_{tune}$ is increased. @@ -55,7 +55,7 @@ These both oscillators with mixer+filter and one channel of the zero-calibration The low-frequency, hearable, signal and the volume-control signal are brought together in the volume-control circuit -![](/scan_005006_2-1024x553.jpg) +![](/static/scan_005006_2-1024x553.jpg) Here, the low-frequency signal $U_{Lf1}$ is passed through a high-pass filter. The high-pass filter is calculated that way that the whole detunable frequency range comes onto the ramp of the filter. So, the not detuned output signal of the mixer+filter is a DC signal, which is suppressed completely by the high-pass filter (beginning of the ramp) and the maximum detuned output signal of about 2kHz matched roughly to the end of the ramp. This filtered signal is rectified and only the negative half-wave of the signal passes the diode. This half-wave signal is sieved by the larger capacitor to get a DC signal between 0 and the maximum amplitude which passed the fiter. This negative DC signal is fed into the FET, which is configured as a voltage controlled resistor. This voltage controlled resistor and the fix resistor (5k6) are building a voltage controlled voltage divider. The hearable frequency signal $U_{Lf2}$ is fed into this voltage divider  and passed to an amplifier. diff --git a/content/content/blog/three-phase-inverter-ng.md b/content/snippets/0210-three-phase-inverter-ng.md similarity index 86% rename from content/content/blog/three-phase-inverter-ng.md rename to content/snippets/0210-three-phase-inverter-ng.md index 830381a..5ffc254 100644 --- a/content/content/blog/three-phase-inverter-ng.md +++ b/content/snippets/0210-three-phase-inverter-ng.md @@ -1,25 +1,25 @@ ---- -title: "Three Phase Inverter - Second Service" -date: "2016-12-19" ---- + I wrote in October about my first try to build a simple three phase inverter, see [here]({{< ref "three-phase-inverter.md" >}}). In the first try I used four MSP430 microcontroller, one for the PWM of each phase and one to coordinate the phase shift of the three phases. In this experiment I put everything on one STM32 microcontroller. Here I used the DMA feature to feed data into the PWM counter and I calculated the sine values at start-up time on the microcontroller. Additionally I put in the driver for a CAN interface, however, it is not yet supported in the firmware. -![](/img_0140.jpg) +![](/static/img_0140.jpg) From top to bottom you see the CAN driver, the STM32 board, opto coupler to separate logic and power part and then from right to left in the bottom half the low-side/high-side MOSFET drivers and the MOSFETs. -![](/img_0144.jpg) +![](/static/img_0144.jpg) The power supply consists of a traditional transformer and (top right) the rectifier and capacitors for the power part, together with the 12V regulator for the drivers and (top left) the regulators for 3.3V and 5V for the logic part. -![](/img_0146.jpg) +![](/static/img_0146.jpg) The motor is the same as in the earlier experiment - I don't have too much of them. And everything is put onto one board: -![](/img_0143-e1482141676335.jpg) +![](/static/img_0143-e1482141676335.jpg) The code for this experiment is here: [https://gitea.hottis.de/wn/inverter2](https://gitea.hottis.de/wn/inverter2). diff --git a/content/content/blog/three-phase-inverter.md b/content/snippets/0220-three-phase-inverter.md similarity index 82% rename from content/content/blog/three-phase-inverter.md rename to content/snippets/0220-three-phase-inverter.md index 2c67746..9a68d9a 100644 --- a/content/content/blog/three-phase-inverter.md +++ b/content/snippets/0220-three-phase-inverter.md @@ -1,44 +1,44 @@ ---- -title: "Three Phase Inverter" -date: "2016-10-14" ---- + Already when I was still in school, about 30 years ago, I was curious to make an inverter using some MOSFETs. I actually was able to build a simple one phase inverter with rectangular signal shape (I used a NE555). Using this thing I drove a transformer to light a blub. However, all of these inverters I built passed by in fire. Now, I tried it again, not longer using MOSFETs but IGBTs with free-wheeling diode. Moreover, I used some microcontrollers and sine values to feed a PWM to get a sine-alike signal shape. And this time I was able with three phases to drive an asynchronous motor. -![](/img_0053.jpg) +![](/static/img_0053.jpg) The signal shaping is done with four MSP430 controllers, three as PWMs to drive the bridge and one to coordinate and control the three PWMs. The PWM controller is decoupled from the IGBT driver (IR2184) using optic couplers. -![](/img_0054-e1476437702547.jpg) +![](/static/img_0054-e1476437702547.jpg) The bridge is a three phase IGBT module is a 6MB120F-060 I got for a few euros at ebay. -![](img_0055-e1476437685461.jpg) +![](/static/img_0055-e1476437685461.jpg) To avoid high voltages in my setup I got a 24V async motor, also from ebay. -![](/img_0056.jpg) +![](/static/img_0056.jpg) The PWMs generate the signal from a sine table generated using Excel. Those I got this signal: -![](/inverter0_2016-09-23-4.png) +![](/static/inverter0_2016-09-23-4.png) The main task of the coordinator is the start the PWMs with a phase shift of 120° (digital line 1, 2 and 3): -![](/2016-10-13_1.png) +![](/static/2016-10-13_1.png) Currently the PWMs start with random polarity. The interesting signals are the digital lines 4, 5 and 6. Sometimes the motor runs: -![](/2016-10-13_works.png) +![](/static/2016-10-13_works.png) But sometimes not: -![](/2016-10-13_works_not.png) +![](/static/2016-10-13_works_not.png) The firmware is available here [https://gitea.hottis.de/wn/inverter0](https://gitea.hottis.de/wn/inverter0) and [https://gitea.hottis.de/wn/inverter0ctrl](https://gitea.hottis.de/wn/inverter0ctrl). diff --git a/content/content/blog/timeserver2.md b/content/snippets/0230-timeserver2.md similarity index 88% rename from content/content/blog/timeserver2.md rename to content/snippets/0230-timeserver2.md index cdb919f..e3b9e98 100644 --- a/content/content/blog/timeserver2.md +++ b/content/snippets/0230-timeserver2.md @@ -1,7 +1,7 @@ ---- -title: "Stratum 1 NTP Server participating in ntppool.org" -date: "2025-03-13" ---- + ![](https://numbers.hottis.de/ntp/packets-load.png) @@ -10,8 +10,8 @@ date: "2025-03-13" [Details at ntppool.org](https://www.ntppool.org/scores/93.241.86.156) ## Harrison -![](/IMG_6089.jpg) -![](/IMG_6088.jpg) +![](/static/IMG_6089.jpg) +![](/static/IMG_6088.jpg) Setup details for this machine are here: [https://gitea.hottis.de/wn/harrison-setup](https://gitea.hottis.de/wn/harrison-setup). @@ -31,7 +31,7 @@ refclock nmea unit 0 mode 0x10 minpoll 4 maxpoll 4 path /dev/ttyS0 ppspath /dev/ ## David -![](/IMG_6045.jpg) +![](/static/IMG_6045.jpg) Details on the setup of this machine are described here: [https://minimal-setups.de/blog/timeserver/](https://minimal-setups.de/blog/timeserver/). diff --git a/content/content/blog/timeserver.md b/content/snippets/0240-timeserver.md similarity index 97% rename from content/content/blog/timeserver.md rename to content/snippets/0240-timeserver.md index 7523685..6ddc647 100644 --- a/content/content/blog/timeserver.md +++ b/content/snippets/0240-timeserver.md @@ -1,10 +1,10 @@ ---- -title: "Just another Stratum 1 Timeserver" -date: "2025-02-11" ---- + -![](/IMG_6045.jpg) +![](/static/IMG_6045.jpg) This server utilizes `ntpsec` on Debian on a BeagleBone Black with a UBlox GPS module. diff --git a/content/snippets/9999-quotes.md b/content/snippets/9999-quotes.md new file mode 100644 index 0000000..3cd996e --- /dev/null +++ b/content/snippets/9999-quotes.md @@ -0,0 +1,15 @@ + + +# Quotes + +Und dann in deinem Arm, alles gut, alles andere egal +(Dota Kehr, Alles Du) + +Es ist immer was los, aber es passiert nichts. +(Thadeuz, Steinhammer) + +Sie steht gut da. Aber die Seele setzt sich nicht dazu. +(Thadeuz, Steinhammer) + diff --git a/content/themes/ananke b/content/themes/ananke deleted file mode 160000 index 0ba75ea..0000000 --- a/content/themes/ananke +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0ba75ea1e50ad5ddcaeb25f02bef64448ad42891 diff --git a/content/themes/hugo-theme-techdoc-x b/content/themes/hugo-theme-techdoc-x deleted file mode 160000 index 092ff68..0000000 --- a/content/themes/hugo-theme-techdoc-x +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 092ff6889054f2d7da3ec163ec3d3c45d9812ee4