This commit is contained in:
simonaltschaffl@gmail.com 2025-11-06 17:07:47 +01:00
parent 535cd3335c
commit 650494ea3e
20 changed files with 252 additions and 106 deletions

24
package-lock.json generated
View File

@ -81,6 +81,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
"integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@ampproject/remapping": "^2.2.0", "@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2", "@babel/code-frame": "^7.26.2",
@ -721,6 +722,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz",
"integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.25.9" "@babel/helper-plugin-utils": "^7.25.9"
}, },
@ -1585,6 +1587,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
"integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-module-imports": "^7.25.9", "@babel/helper-module-imports": "^7.25.9",
@ -3099,6 +3102,7 @@
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"license": "MIT", "license": "MIT",
"peer": true,
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/popperjs" "url": "https://opencollective.com/popperjs"
@ -3535,6 +3539,7 @@
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
"integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.10.4", "@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
@ -3969,6 +3974,7 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz",
"integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"csstype": "^3.0.2" "csstype": "^3.0.2"
} }
@ -4095,6 +4101,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz",
"integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/scope-manager": "5.62.0",
@ -4148,6 +4155,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
"integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"peer": true,
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/scope-manager": "5.62.0",
"@typescript-eslint/types": "5.62.0", "@typescript-eslint/types": "5.62.0",
@ -4517,6 +4525,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -4603,6 +4612,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0", "fast-json-stable-stringify": "^2.0.0",
@ -5519,6 +5529,7 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"caniuse-lite": "^1.0.30001688", "caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73", "electron-to-chromium": "^1.5.73",
@ -7458,6 +7469,7 @@
"integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
@ -10427,6 +10439,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz",
"integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@jest/core": "^27.5.1", "@jest/core": "^27.5.1",
"import-local": "^3.0.2", "import-local": "^3.0.2",
@ -13555,6 +13568,7 @@
} }
], ],
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.8", "nanoid": "^3.3.8",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -14742,6 +14756,7 @@
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"cssesc": "^3.0.0", "cssesc": "^3.0.0",
"util-deprecate": "^1.0.2" "util-deprecate": "^1.0.2"
@ -15139,6 +15154,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -15307,6 +15323,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"scheduler": "^0.26.0" "scheduler": "^0.26.0"
}, },
@ -15385,6 +15402,7 @@
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
"integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -16004,6 +16022,7 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
"integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
@ -16258,6 +16277,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -17923,6 +17943,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"license": "(MIT OR CC0-1.0)", "license": "(MIT OR CC0-1.0)",
"peer": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
}, },
@ -18542,6 +18563,7 @@
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.6.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.6.tgz",
"integrity": "sha512-TJOLrJ6oeccsGWPl7ujCYuc0pIq2cNsuD6GZDma8i5o5Npvcco/z+NKvZSFsP0/x6SShVb0+X2JK/JHUjKY9dQ==", "integrity": "sha512-TJOLrJ6oeccsGWPl7ujCYuc0pIq2cNsuD6GZDma8i5o5Npvcco/z+NKvZSFsP0/x6SShVb0+X2JK/JHUjKY9dQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.7", "@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6", "@types/estree": "^1.0.6",
@ -18611,6 +18633,7 @@
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz",
"integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@types/bonjour": "^3.5.9", "@types/bonjour": "^3.5.9",
"@types/connect-history-api-fallback": "^1.3.5", "@types/connect-history-api-fallback": "^1.3.5",
@ -19023,6 +19046,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -8,76 +8,78 @@ function AboutPage() {
<div style={{ marginTop: "1.5em" }}> <div style={{ marginTop: "1.5em" }}>
<p> <p>
<b> <b>
Auf dieser Seite m&ouml;chte ich Ihnen einen Einblick in meine Willkommen auf meiner Seite! Als angehender Data Scientist mit
Reise in die faszinierende Welt der Informatik geben. Als Hintergrund in Wirtschaftsinformatik möchte ich Ihnen hier meine
20-j&auml;hriger Sch&uuml;ler f&uuml;r Wirtschaftsinformatik an Leidenschaft für die Datenanalyse und künstliche Intelligenz
der EDV-Schule Plattling ist meine Begeisterung f&uuml;r das näherbringen. Mein Ziel ist es, durch die Analyse komplexer
Programmieren und die M&ouml;glichkeiten der Datenanalyse stetig Datensätze wertvolle Erkenntnisse zu gewinnen und innovative
gewachsen. Lösungen zu entwickeln.
</b> </b>
</p> </p>
<h2>Motivation und Leidenschaft f&uuml;r die Informatik</h2> <h2>Meine Vision in Data Science</h2>
<h3>Wie ich zur Informatik gekommen bin</h3> <h3>Der Weg zur Datenanalyse</h3>
<p> <p>
Den Weg der Informatik habe ich vor wenigen Jahren gefunden nachdem Meine Reise in die Welt der Daten begann mit der Entdeckung der
ich das erste mal programmiert habe und sofort den Erfolg Programmierung und entwickelte sich schnell zu einer Faszination für
versp&uuml;ren konnte der mich bis heute noch antreibt weiter zu die Möglichkeiten der Datenanalyse. Was als allgemeines Interesse
machen. Ich bin zwar schon seit viele Jahren sehr stark von an Computern begann, hat sich zu einer gezielten Spezialisierung
Computern begeistert jedoch war ich mir bis dahin nicht so sicher im Bereich Data Science entwickelt. Die Fähigkeit, aus rohen Daten
was ich mit dieser Begeisterung anfangen sollte, daher habe ich mich wertvolle Erkenntnisse zu gewinnen und diese für fundierte
dann entschieden das Programmieren auszuprobieren. Entscheidungen zu nutzen, treibt mich besonders an.
</p> </p>
<h3>Wieso Data Science</h3> <h3>Meine Spezialisierung in Data Science</h3>
<p> <p>
Das Interesse an Data Science ist entstanden w&auml;hrend ich{" "} Meine Begeisterung für Data Science wurde durch den{" "}
<b>CS50X</b> <em>(Online Kurs der Harvard Universit&auml;t)</em> gemacht <b>CS50X</b> <em>(Harvard University)</em> Kurs geweckt, wo ich die
habe. Dort war eine Woche die den Datenbanken gewidmet war wo ich Grundlagen der Datenverarbeitung kennenlernte. Der intensive{" "}
eine gewisse Verbindung mit den Daten versp&uuml;rt habe, im <b>IBM Data Science Professional Certificate</b> vertiefte diese
Anschluss habe ich mehrere Tage nichts anderes gemacht als SQL Faszination und gab mir praktische Einblicke in Machine Learning
Querys zu schreiben und Datenbanken zu konzeptieren. Durch den{" "} und prädiktive Analysen. Besonders die Möglichkeit, durch
<b>IBM Data Science Kurs</b> wurde mein Interesse an Data Science Datenmodelle neue Erkenntnisse zu gewinnen und Vorhersagen zu
nochmal verst&auml;rkt wie ich das erste mal gelernt habe, wie man treffen, hat mich überzeugt, dass dies der richtige Weg für mich
Daten nutzen kann um ein Model anzupassen, dass es neue ist.
Informationen in Form von Daten schafft.
</p> </p>
<h3>Sonstige Interessen in der Informatik</h3> <h3>Technische Infrastruktur und Tools</h3>
<p> <p>
Neben Data Science bin ich auch sehr begeistert von{" "} Um meine Data Science Projekte optimal umzusetzen, habe ich eine
<b>Server Administration</b> was auch ein Grund war wieso ich mich eigene technische Infrastruktur aufgebaut, zu der auch dieser
entschieden habe diese Website aufzubauen. Dieses Interesse habe ich Server gehört. Er bietet mir eine <b>JupyterHub-Umgebung</b> für
vorallem in der EDV-Schule gefunden wie wir unsere ersten eigenen Datenanalysen und Machine Learning Experimente. Die{" "}
Server in der Praxis aufgesetzt haben. Dort habe ich gesehen wie <em>Server-Administration</em> und DevOps-Kenntnisse sehe ich als
interessant es ist was man alles bei einem Server beachten muss wie wichtige Ergänzung zu meinen Data Science Fähigkeiten, da sie mir
z.B. <em>Sicherheit und Wartbarkeit</em>. ermöglichen, meine Analysen und Modelle effizient zu
deployen und zu skalieren.
</p> </p>
</div> </div>
<div> <div>
<h2>Meine Lernbereitschaft und Engagement</h2> <h2>Expertise und Weiterbildung</h2>
<h3>Mein Weg zum Wissen</h3> <h3>Fundierte Ausbildung in Data Science</h3>
<p> <p>
Der Gro&szlig;teil meines Wissens kommt durch die Schule und durch Meine Expertise basiert auf einer Kombination aus strukturierter
Online Kurse welche ich w&auml;hrend meiner Zeit als Ausbildung und praktischer Erfahrung. An der EDV-Schule Plattling
Gro&szlig;handelskaufmann neben der Arbeit in meiner Freizeit erhalte ich eine solide Grundlage in Wirtschaftsinformatik, die ich
absolviert habe. Die wichtigsten Kurse (l&auml;nger als eine Woche) gezielt durch spezialisierte Kurse wie <b>CS50X</b> und den{" "}
sind vorallem <b>CS50X (Computer Science)</b> und{" "} <b>IBM Data Science Professional Certificate</b> in Richtung Data
<b>IBM Data Science</b>. In diesen beiden Kursen habe ich sowohl die Science ausbaue. Diese Kombination ermöglicht mir, sowohl die
Grundlagen in der Informatik als auch in Data Science erhalten, technischen Aspekte der Datenanalyse als auch deren
au&szlig;erdem habe mir diese beiden Kurse sehr stark bei der wirtschaftliche Anwendungen zu verstehen.
Entscheidungsfindung f&uuml;r mein Fachbereich geholfen. Die
EDV-Schule erg&auml;nzt dieses Wissen und erweitert es mit vielen
neuen Dingen vorallem wenn es darum geht das Wissen mit der
Wirtschaft zu verkn&uuml;pfen.
</p> </p>
<h3>Wie verst&auml;rke ich mein Wissen in der Zukunft</h3> <h3>Aktuelle Projekte und Karriereziele</h3>
<p> <p>
Einerseits bin ich noch &uuml;ber ein Jahr Sch&uuml;ler an der Aktuell arbeite ich an drei spannenden Projekten, die verschiedene
EDV-Schule bei welcher ich noch an viel Wissen erhalten werden. Aspekte der Softwareentwicklung abdecken. Mein <b>ABAP-Abschlussprojekt</b>
Andererseits habe ich vor in naher Zukunft verst&auml;rkt auf ist eine Plattform für Wohnungssuche und Mitfahrgelegenheiten, die
Projekte zu setzen zu dem z&auml;hlt auch diese Website. In meinen praktische Alltagsprobleme löst. Parallel entwickle ich in einem
n&auml;chsten Projekte will ich vorallem dann in den Bereich von <b>Java-Projekt</b> ein Online-Casino, das mir tiefere Einblicke in
Data Science und AI gehen um einen <em>&bdquo;Headstart&ldquo;</em>{" "} Backend-Entwicklung und Datenverwaltung ermöglicht. Besonders
f&uuml;r ein (Duales-)Studium im Bereich Data Science zu bekommen. faszinierend ist mein privates <b>KI-Projekt</b> - ein Krimi-Dinner
mit einem KI-Gamemaster, bei dem ich mich intensiv mit
Prompt-Engineering und der praktischen Anwendung von Large Language
Models beschäftige. Diese Erfahrungen im Bereich KI und Prompting
sehe ich als wichtige Grundlage für meinen angestrebten Einstieg in
die Data Science, da sie mir ein tiefes Verständnis für die
Möglichkeiten und Grenzen von KI-Systemen vermitteln.
</p> </p>
</div> </div>
</div> </div>

View File

@ -10,6 +10,8 @@ import GoalsPage from "./goals";
import ContactPage from "./contact"; import ContactPage from "./contact";
import ServerPage from "./projects/server"; import ServerPage from "./projects/server";
import LanguagestudyPage from "./projects/languageStudy"; import LanguagestudyPage from "./projects/languageStudy";
import OnlineCasinoPage from "./finalprojects/onlineCasino";
import WohnungUndFahrgemeinschaftenPage from "./finalprojects/wohnungUndFahrgemeinschaften";
function Home() { function Home() {
return <HomePage />; return <HomePage />;
@ -43,6 +45,13 @@ function Server() {
return <ServerPage />; return <ServerPage />;
} }
function OnlineCasino() {
return <OnlineCasinoPage />;
}
function WohnungUndFahrgemeinschaften() {
return <WohnungUndFahrgemeinschaftenPage />
}
function App() { function App() {
return ( return (
<Router> <Router>
@ -57,6 +66,8 @@ function App() {
<Route path="/privacy" element={<Privacy />} /> <Route path="/privacy" element={<Privacy />} />
<Route path="/projects/languagestudy" element={<LanguageStudy />} /> <Route path="/projects/languagestudy" element={<LanguageStudy />} />
<Route path="/projects/server" element={<Server />} /> <Route path="/projects/server" element={<Server />} />
<Route path="/finalprojects/onlineCasino" element={<OnlineCasino />} />
<Route path="/finalprojects/wufg" element={<WohnungUndFahrgemeinschaften />} />
</Routes> </Routes>
</div> </div>
<FooterSection /> <FooterSection />

View File

@ -0,0 +1,33 @@
import React from "react";
function OnlineCasinoPage() {
return (
<section className="content-group">
<h1 className="project-header">Online Casino</h1>
<p className="centered" style={{ marginTop: '1em' }}>
<em>Dieses Projekt ist derzeit in der Planungsphase.</em>
</p>
<div>
<h2 style={{ marginTop: '2em' }}>Worum geht es in diesem Projekt?</h2>
<p>
Dieses Projekt ist mein Abschlussprojekt. Das Ziel ist es, ein Online-Casino von Grund auf zu entwickeln.
Weitere Details zum Projekt werden hinzugefügt, sobald die Planungsphase abgeschlossen ist.
</p>
</div>
<div>
<h2 style={{ marginTop: '2em' }}>
Welche Techniken, Technologien und Bibliotheken werde ich verwenden?
</h2>
<div className="list-display">
<ul className="key-points">
<li>
<b>Programmiersprache</b>: Java
</li>
</ul>
</div>
</div>
</section>
);
}
export default OnlineCasinoPage;

View File

@ -0,0 +1,44 @@
import React from "react";
function WohnungUndFahrgemeinschaftenPage() {
return (
<section className="content-group">
<h1 className="project-header">Wohnungs- und Fahrgemeinschaften (SAP Fiori)</h1>
<p className="centered" style={{ marginTop: '1em' }}>
<em>Dieses Projekt ist mein ABAP-Abschlussprojekt für die Schule und befindet sich in der Planungsphase.</em>
</p>
<div>
<h2 style={{ marginTop: '2em' }}>Projektziel</h2>
<p>
Ziel ist die Entwicklung einer SAP-Fiori-Anwendung, die es Benutzern ermöglicht, Wohnungsangebote und Fahrgemeinschaften einfach zu verwalten. Die Applikation wird als SAP-RAP-Backend mit einem Fiori-Frontend umgesetzt.
</p>
</div>
<div>
<h2 style={{ marginTop: '2em' }}>Kernfunktionen</h2>
<div className="list-display">
<ul className="key-points">
<li><b>Wohnungsangebote:</b> Erstellen, Anzeigen, Bearbeiten und Löschen von Angeboten mit bis zu 5 Bildern.</li>
<li><b>Fahrgemeinschaften:</b> Erstellen, Suchen (Listen- & Kartenansicht), Bearbeiten und Löschen von Fahrten.</li>
<li><b>Nutzerverwaltung:</b> Anmeldung via SAP-Login mit Rollen für Schüler und Administratoren (Lehrer/Verwaltung).</li>
<li><b>Moderation:</b> Administratoren können alle Einträge verwalten und moderieren.</li>
</ul>
</div>
</div>
<div>
<h2 style={{ marginTop: '2em' }}>Technologie-Stack</h2>
<div className="list-display">
<ul className="key-points">
<li><b>Backend:</b> SAP RAP (RESTful ABAP Programming Model)</li>
<li><b>Frontend:</b> SAP Fiori (UI5)</li>
<li><b>Datenmodell:</b> Core Data Services (CDS)</li>
<li><b>API:</b> OData</li>
<li><b>Authentifizierung:</b> SAP Single Sign-On (SSO)</li>
<li><b>Kartenintegration:</b> OpenStreetMap</li>
</ul>
</div>
</div>
</section>
);
}
export default WohnungUndFahrgemeinschaftenPage;

View File

@ -1,18 +1,25 @@
import React from "react"; import React from "react";
function HomePage() { function HomePage() {
const birthDate = new Date(2005, 3, 21); // Month is 0-indexed, so 3 is April
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
return ( return (
<section className="centered"> <section className="centered">
<div> <div>
<h1>Startseite</h1> <h1>Startseite</h1>
<p style={{ marginTop: '1.5em' }}> <p style={{ marginTop: '1.5em' }}>
<b> <b>
Hallo und danke f&uuml;rs Daraufklicken! Ich bin Simon Altsch&auml;ffl, 20 Hallo und danke f&uuml;rs Daraufklicken! Ich bin Simon Altsch&auml;ffl, {age}<span> </span>
Jahre alt und derzeit Sch&uuml;ler f&uuml;r Wirtschaftsinformatik an der EDV-Schule Jahre alt und derzeit Sch&uuml;ler f&uuml;r Wirtschaftsinformatik an der EDV-Schule
Plattling. Plattling.
</b> </b>
</p> </p>
<img src="assets/img/DSC_4133.jpg" alt="Mein Foto" className="center-image"/> <img src="assets/img/picture.jpg" alt="Mein Foto" className="center-image"/>
<p> <p>
<em>Willkommen auf meiner Website!</em> Hier stelle ich mich detailliert vor, <em>Willkommen auf meiner Website!</em> Hier stelle ich mich detailliert vor,
pr&auml;sentiere meine Projekte und teile meine Erfahrung in der pr&auml;sentiere meine Projekte und teile meine Erfahrung in der

View File

@ -21,11 +21,21 @@ function Navigation() {
<NavDropdown.Item href="/projects/languagestudy"> <NavDropdown.Item href="/projects/languagestudy">
Sprachstudie Wikipedia Sprachstudie Wikipedia
</NavDropdown.Item> </NavDropdown.Item>
<NavDropdown.Divider />
<NavDropdown.ItemText>In Arbeit</NavDropdown.ItemText>
<NavDropdown.Item href="/projects/server"> <NavDropdown.Item href="/projects/server">
Server Architektur Server Architektur
</NavDropdown.Item> </NavDropdown.Item>
<NavDropdown.Divider />
<NavDropdown.ItemText>In Arbeit</NavDropdown.ItemText>
<NavDropdown.Item href="/projects/crime-dinner">
Krimi Dinner mit KI
</NavDropdown.Item>
<NavDropdown.ItemText>Abschlussprojekte in Arbeit</NavDropdown.ItemText>
<NavDropdown.Item href="/finalprojects/wufg">
Wohnungssuche und Fahrgemeinschaften
</NavDropdown.Item>
<NavDropdown.Item href="/finalprojects/onlineCasino">
Online Casino
</NavDropdown.Item>
</NavDropdown> </NavDropdown>
</Nav> </Nav>
</Navbar.Collapse> </Navbar.Collapse>

View File

@ -94,22 +94,24 @@ function PrivacyPage() {
</p>{" "} </p>{" "}
<p>Wir setzen folgende(n) Hoster ein:</p> <p>Wir setzen folgende(n) Hoster ein:</p>
<p> <p>
MC-HOST24.de ist ein Label der Gericke KG netcup GmbH
<br /> <br />
Vertretungsberechtigter Gesellschafter: Eberhard Gericke Vertretungsberechtigter Gesellschafter: Eberhard Gericke
(Komplement&auml;r) (Komplement&auml;r)
<br /> <br />
<br /> <br />
Telefon: +49 (0)7544 9679080 Telefon: +49 721 / 7540755 - 0
<br /> <br />
Mail: info@mc-host24.de Mail: mail@netcup.de
<br />
Web: <a href="www.netcup.com">www.netcup.com</a>
<br /> <br />
<br /> <br />
Postanschrift: Postanschrift:
<br /> <br />
Lichtenbergstr. 53/1 Emmy-Noether-Straße 10
<br /> <br />
88677 Markdorf D-76131 Karlsruhe
<br /> <br />
Deutschland Deutschland
</p> </p>

View File

@ -13,13 +13,14 @@ function ServerPage() {
<div className="list-display" style={{ marginTop: '2em' }}> <div className="list-display" style={{ marginTop: '2em' }}>
<h2>Welche Kernaufgaben erf&uuml;llt dieser Server?</h2> <h2>Welche Kernaufgaben erf&uuml;llt dieser Server?</h2>
<ul className="key-points"> <ul className="key-points">
<li>Die Bereitstellung dieser Website</li> <li>Die Bereitstellung dieser Website über Nginx</li>
<li>Die Bereitstellung des JupyterHub-Servers</li> <li>Die Bereitstellung des JupyterHub-Servers für Data Science und Machine Learning</li>
<li> <li>
Die Entgegennahme des GitHub-Webhooks, um die React-Applikation Automatische Aktualisierung der React-Applikation durch GitHub-Webhooks
automatisch <br /> über die Flask-App
via Python (Flask) zu aktualisieren.
</li> </li>
<li>Sichere Remote-Verbindung über WireGuard VPN und SSH</li>
<li>Zentrales Routing und Load Balancing durch Traefik</li>
</ul> </ul>
</div> </div>
@ -27,55 +28,65 @@ function ServerPage() {
<h3>Wichtige Kerntechnologien</h3> <h3>Wichtige Kerntechnologien</h3>
<ul className="key-points"> <ul className="key-points">
<li> <li>
<b>Docker und Docker-Compose</b>: Um den gesamten Server so modular <b>Docker und Docker-Compose</b>: Jeder Service läuft in einem eigenen Container,
wie m&ouml;glich f&uuml;r Erweiterungen oder Ver&auml;nderungen zu gestalten, habe was die Modularität und Wartbarkeit erhöht. Die Container-Architektur
ich mich entschieden, jeden Prozess in einem eigenen Container zu ermöglicht eine klare Trennung der Dienste und vereinfacht das Deployment
kapseln. Dies tr&auml;gt auch dazu bei, dass die Daten nicht mehr &uuml;ber sowie Updates.
den gesamten Server verteilt sind, wodurch die Fehlersuche
erleichtert wird.
</li> </li>
<li> <li>
<b>React</b>: Erstellt die Website, sodass sie von Nginx geladen <b>Traefik</b>: Fungiert als zentraler Reverse Proxy und Load Balancer.
werden kann. Traefik übernimmt das Routing der Anfragen zu den entsprechenden Services,
verwaltet SSL-Zertifikate automatisch und ermöglicht eine einfache
Integration neuer Dienste durch Docker-Labels.
</li> </li>
<li> <li>
<b>Nginx</b>: Wird hier sowohl als <em>Reverse Proxy</em> verwendet, um <b>Nginx</b>: Dient als Webserver für die React-App und stellt die
JupyterHub und die Flask-App ansprechbar zu machen, als auch als statischen Inhalte bereit.
Webserver f&uuml;r die React-App. Nginx &uuml;bernimmt in diesem Fall die
gesamte Kommunikation mit dem Client bzw. dem GitHub-Webhook.
</li> </li>
<li> <li>
<b>JupyterHub</b>: Diesen nutze ich f&uuml;r die Verwaltung der Benutzer <b>JupyterHub</b>: Ermöglicht die Verwaltung von Jupyter-Notebooks
und ihrer JupyterLab-Umgebungen. für Data Science und Machine Learning. Benutzer können ihre eigenen
JupyterLab-Umgebungen über jupyter.simonaltschaeffl.de aufrufen.
</li> </li>
<li> <li>
<b>Flask</b>: Wird verwendet, um den GitHub-Webhook zu verifizieren <b>Flask</b>: Verarbeitet GitHub-Webhooks und triggert automatische
und anschlie&szlig;end die React-App sowie den zugeh&ouml;rigen Updates der React-App. Die Flask-Anwendung verifiziert die Webhook-
Docker-Container neu zu starten. Dies bietet mir die Flexibilit&auml;t, Authentizität und stößt den Update-Prozess an.
meine gesamte Homepage mit nur wenigen Klicks oder Befehlen zu </li>
aktualisieren, ohne dass ich mich auf dem Server einloggen muss. <li>
<b>WireGuard VPN & SSH</b>: Bietet sicheren Remote-Zugriff auf den
Server. WireGuard ermöglicht eine moderne, schnelle VPN-Verbindung,
während der SSH-Server sichere Terminal-Verbindungen bereitstellt.
</li> </li>
<li><b>Certbot</b>: Stellt die SSL/TSL Zertifikate bereit und h&auml;lt sie stets aktuell.</li>
</ul> </ul>
</div> </div>
<div style={{ marginTop: '2em' }}> <div style={{ marginTop: '2em' }}>
<h3>Diese Website</h3> <h3>Routing und Zugriff</h3>
<p> <p>
Diese Website ist eine einfache React-Applikation, die unter Alle Anfragen werden zunächst von Traefik empfangen und basierend auf der
[www.]simonaltschaeffl.de erreichbar ist. Um darauf zuzugreifen, wird Domain an die entsprechenden Services weitergeleitet. Die Website ist unter
eine einfache Anfrage an Nginx gesendet, welcher die Seite aus dem simonaltschaeffl.de erreichbar, wobei Traefik die Anfragen an den
HTML innerhalb seines Containers abruft und an den Client sendet. Nginx-Container weiterleitet, der die React-Applikation bereitstellt.
</p> </p>
<h3>JupyterHub &amp; JupyterLab</h3> <h3>JupyterHub &amp; JupyterLab</h3>
<p> <p>
Hierauf gelangt man &uuml;ber die Subdomain jupyter.simonaltschaeffl.de. Um Der JupyterHub-Service ist über jupyter.simonaltschaeffl.de erreichbar.
dorthin geroutet zu werden, wird Nginx als Reverse Proxy verwendet. Traefik leitet die Anfragen an den JupyterHub-Container weiter, der die
Sobald man sich eingeloggt hat, wird ein JupyterLab-Container mit Benutzerauthentifizierung und Container-Verwaltung übernimmt. Nach erfolgreicher
Data-Science-Tools und Libraries wie Pandas, TensorFlow, NumPy etc. Anmeldung wird ein persönlicher JupyterLab-Container mit Data-Science-Tools
erstellt, welche ich f&uuml;r Experimente mit Machine Learning bzw. wie Pandas, TensorFlow, NumPy etc. gestartet, der für Machine Learning
k&uuml;nstlicher Intelligenz oder <em>Titanic Competitions</em> von Kaggle verwende. Experimente und Datenanalysen genutzt werden kann.
</p>
<h3>Sicherheit und Remote-Zugriff</h3>
<p>
Der sichere Remote-Zugriff wird durch eine Kombination aus WireGuard VPN
und SSH gewährleistet. WireGuard bietet eine moderne, effiziente
VPN-Lösung, während der SSH-Server sichere Terminal-Verbindungen für
Wartungsarbeiten ermöglicht. Die Verwaltung erfolgt über einen
dedizierten Admin-Zugang.
</p> </p>
</div> </div>
@ -116,11 +127,10 @@ function ServerPage() {
<div className="list-display" style={{ marginTop: '2em' }}> <div className="list-display" style={{ marginTop: '2em' }}>
<h2>Ideen f&uuml;r die Zukunft des Servers</h2> <h2>Ideen f&uuml;r die Zukunft des Servers</h2>
<ul className="key-points"> <ul className="key-points">
<li> <li>Integration weiterer Dienste durch einfache Erweiterung der Traefik-Konfiguration</li>
Die Trennung von React und dem Nginx-Hauptcontainer mithilfe eines <li>Implementierung eines Monitoring-Systems für bessere Überwachung der Services</li>
eigenen Nginx-Servers und Reverse Proxys <li>Automatisierung der Backups und Disaster Recovery Prozesse</li>
</li> <li>Erweiterung der JupyterHub-Umgebung mit zusätzlichen Data Science Tools</li>
<li>Erweiterung mit neuen/eigenen Services</li>
</ul> </ul>
</div> </div>
</section> </section>