From 47b6a20dd410311e6f98ea8eaa534cffd4f4475f Mon Sep 17 00:00:00 2001 From: camperbot Date: Mon, 1 May 2023 22:39:25 +0530 Subject: [PATCH] chore(i18n,learn): processed translations (#50240) --- ...e-of-any-node.js-project-or-npm-package.md | 2 +- .../announce-new-users.md | 2 +- .../authentication-strategies.md | 2 +- .../authentication-with-socket.io.md | 4 +- .../communicate-by-emitting.md | 2 +- .../handle-a-disconnect.md | 10 ++--- .../hashing-your-passwords.md | 8 ++-- .../how-to-put-a-profile-together.md | 4 +- .../how-to-use-passport-strategies.md | 4 +- ...ementation-of-social-authentication-iii.md | 2 +- ...implementation-of-social-authentication.md | 2 +- .../logging-a-user-out.md | 2 +- .../registration-of-new-users.md | 18 ++++----- .../send-and-display-chat-messages.md | 4 +- .../serialization-of-a-user-object.md | 6 +-- ...-tests-on-api-endpoints-using-chai-http.md | 4 +- ...f-a-value-falls-within-a-specific-range.md | 4 +- .../issue-tracker.md | 8 ++-- .../personal-library.md | 4 +- .../budget-app.md | 4 +- .../probability-calculator.md | 2 +- .../data-cleaning-and-visualizations.md | 10 ++--- .../data-cleaning-duplicates.md | 18 ++++----- .../numpy-introduction-b.md | 2 +- .../medical-data-visualizer.md | 18 ++++----- .../page-view-time-series-visualizer.md | 4 +- ...ng-and-changing-elements,-rows,-columns.md | 4 +- .../numpy/basics-of-numpy.md | 2 +- .../numpy/copying-arrays-warning.md | 2 +- .../numpy/initialize-array-problem.md | 4 +- .../numpy/initializing-different-arrays.md | 2 +- .../loading-data-and-advanced-indexing.md | 4 +- .../numpy/what-is-numpy.md | 10 ++--- .../port-scanner.md | 12 +++--- .../secure-real-time-multiplayer-game.md | 8 ++-- .../sha-1-password-cracker.md | 24 +++++------ .../stock-price-checker.md | 10 ++--- ...ur-site-via-https-only-with-helmet.hsts.md | 8 ++-- ...-response-mime-type-with-helmet.nosniff.md | 4 +- ...lmet-using-the-parent-helmet-middleware.md | 4 +- ...fetching-with-helmet.dnsprefetchcontrol.md | 4 +- ...sh-and-compare-passwords-asynchronously.md | 8 ++-- ...ash-and-compare-passwords-synchronously.md | 4 +- .../install-and-require-helmet.md | 8 ++-- ...-of-clickjacking-with-helmet.frameguard.md | 4 +- ...ing-untrusted-html-with-helmet.ienoopen.md | 4 +- ...olicy-with-helmet.contentsecuritypolicy.md | 4 +- .../understand-bcrypt-hashes.md | 10 ++--- .../creating-a-tcp-client.md | 4 +- .../developing-a-port-scanner.md | 8 ++-- .../developing-an-nmap-scanner-part-1.md | 4 +- .../introduction-and-setup.md | 2 +- ...nding-sockets-and-creating-a-tcp-server.md | 4 +- .../basic-javascript/record-collection.md | 2 +- .../64061a98f704a014b44afdb2.md | 2 +- .../6410efff0ae97c0f06856511.md | 2 +- .../6410f149110ec60fd40fcfe1.md | 14 +++---- .../6410f97a721cd1144804b7a8.md | 12 +++--- .../6410f9a443d57414ee50fada.md | 6 +-- .../6410fb3b68429716a810ea4b.md | 4 +- .../6410fcd1f731fd17cdb101a7.md | 18 ++++----- .../6411024727181d190ef03166.md | 12 +++--- .../64110377201e7b1a0de0d558.md | 6 +-- .../64110727cefd3d1d9bdb0128.md | 4 +- .../6411083020a3101e9514a0f5.md | 4 +- .../64110998bc00321fd8052ab5.md | 14 +++---- .../64110a03f6a450209b01f45c.md | 6 +-- .../64110b1849454521871243ca.md | 12 +++--- .../6411108bc8b9c324f66aab4c.md | 10 ++--- .../641110e4fb696b259dbf0bcf.md | 18 ++++----- .../6411135e9ee2fa26c882eb02.md | 6 +-- .../64112c9cf53d632910ea2f9b.md | 6 +-- .../64112cea9e6ac22a314628b0.md | 4 +- .../64112d0943e1bb2aef11e2d1.md | 8 ++-- .../64112fa63a0f812c66499a54.md | 8 ++-- .../641130423e5f512d8972dae1.md | 10 ++--- .../64113124efd2852edafaf25f.md | 14 +++---- .../64113249bab9952fb2ce4469.md | 8 ++-- .../641d9a19bff38d34d5a5edb8.md | 14 +++---- .../641da3c6b6fbd742bff6ee40.md | 8 ++-- .../basic-javascript/record-collection.md | 2 +- .../css-foundations-exercise-a.md | 40 +++++++++---------- .../css-foundations-exercise-b.md | 36 ++++++++--------- .../css-foundations-exercise-c.md | 8 ++-- .../css-foundations-exercise-d.md | 8 ++-- .../css-foundations-exercise-e.md | 8 ++-- .../css-foundations-question-a.md | 14 +++---- .../css-foundations-question-b.md | 24 +++++------ .../css-foundations-question-c.md | 10 ++--- .../css-foundations-question-d.md | 16 ++++---- .../css-foundations-question-e.md | 18 ++++----- .../css-foundations-question-f.md | 26 ++++++------ .../css-foundations-question-g.md | 16 ++++---- .../css-foundations-question-h.md | 18 ++++----- .../problem-260-stone-game.md | 8 ++-- ...h-the-area--perimeter-ratio-is-integral.md | 14 +++---- .../problem-288-an-enormous-factorial.md | 14 +++---- .../problem-424-kakuro.md | 30 +++++++------- 98 files changed, 429 insertions(+), 429 deletions(-) diff --git a/curriculum/challenges/german/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md b/curriculum/challenges/german/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md index d8878688f38..55d34d6294c 100644 --- a/curriculum/challenges/german/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md +++ b/curriculum/challenges/german/05-back-end-development-and-apis/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.md @@ -40,7 +40,7 @@ Add your name as the `author` of the project in the `package.json` file. # --hints-- -`package.json` should have a valid "author" key +`package.json` sollte über einen gültigen "Autor"-Schlüssel verfügen ```js (getUserInput) => diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/announce-new-users.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/announce-new-users.md index 7e60fb6de49..ec457f215fc 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/announce-new-users.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/announce-new-users.md @@ -10,7 +10,7 @@ dashedName: announce-new-users Viele Chaträume sind in der Lage, zu erkennen, wann ein Benutzer eine Verbindung herstellt oder unterbricht – dies wird dann allen verbundenen Nutzern im Chat angezeigt. Da du bereits ein Ereignis beim Verbinden und Trennen emittierst, musst du nur dieses Ereignis ändern, um eine solche Funktion zu implementieren. The most logical way of doing so is sending 3 pieces of data with the event: the username of the user who connected/disconnected, the current user count, and if that username connected or disconnected. -Change the event name to `'user'`, and pass an object along containing the fields `username`, `currentUsers`, and `connected` (to be `true` in case of connection, or `false` for disconnection of the user sent). Be sure to change both `'user count'` events and set the disconnect one to send `false` for the field `connected` instead of `true` like the event emitted on connect. +Setze den Ereignisnamen auf `'user'` und übergebe diesem ein Objekt mit den Feldern `username`, `currentUsers` und `connected` (`true` bei Verbindungsaufbau bzw. `false` bei Trennung des Nutzers). Be sure to change both `'user count'` events and set the disconnect one to send `false` for the field `connected` instead of `true` like the event emitted on connect. ```js io.emit('user', { diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-strategies.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-strategies.md index d9d1de2d3f7..f28e377c0a5 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-strategies.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-strategies.md @@ -8,7 +8,7 @@ dashedName: authentication-strategies # --description-- -Eine Strategie ist eine Möglichkeit, einen Benutzer zu authentifizieren. You can use a strategy for allowing users to authenticate based on locally saved information (if you have them register first) or from a variety of providers such as Google or GitHub. For this project, we will use Passport middleware. Passport provides a comprehensive set of strategies that support authentication using a username and password, GitHub, Google, and more. +Eine Strategie ist eine Möglichkeit, einen Benutzer zu authentifizieren. Du kannst eine Strategie anwenden, die es Nutzern ermöglicht, sich entweder auf Grundlage lokal gespeicherter Informationen zu authentifizieren (sofern sie sich zuerst registrieren) oder mithilfe verschiedener Anbieter wie Google oder GitHub. Für dieses Projekt werden wir die Passport-Middleware verwenden. Passport provides a comprehensive set of strategies that support authentication using a username and password, GitHub, Google, and more. `passport-local@~1.0.0` has already been added as a dependency. Add it to your server as follows: diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md index 8bb7f1747bc..a8af95e6b33 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.md @@ -18,7 +18,7 @@ const URI = process.env.MONGO_URI; const store = new MongoStore({ url: URI }); ``` -Jetzt müssen wir Socket.IO nur noch mitteilen, diesen zu verwenden und Optionen festlegen. Be sure this is added before the existing socket code and not in the existing connection listener. Für deinen Server sollte das so aussehen: +Jetzt müssen wir Socket.IO nur noch mitteilen, diesen zu verwenden und Optionen festlegen. Stelle sicher, dass dies vor dem bestehenden Socket-Code hinzugefügt wird und nicht in den bestehenden Verbindungs-Listener. Für deinen Server sollte das so aussehen: ```js io.use( @@ -35,7 +35,7 @@ io.use( Die Konfiguration einer Passport-Authentifizierung für Socket.IO ähnelt der Art, wie wir die `session`-Middleware für die API konfiguriert haben, übrigens sehr. This is because they are meant to use the same authentication method — get the session id from a cookie and validate it. -Zuvor haben wir bei der Konfiguration der `session`-Middleware den Cookie-Namen für die Sitzung (`key`) nicht explizit festgelegt. This is because the `session` package was using the default value. Nun, da wir ein weiteres Paket hinzugefügt haben, welches Zugriff auf denselben Wert der Cookies benötigt, müssen wir explizit den `key`-Wert in beiden Konfigurationsobjekten setzen. +Zuvor haben wir bei der Konfiguration der `session`-Middleware den Cookie-Namen für die Sitzung (`key`) nicht explizit festgelegt. Schlicht, weil das `session`-Paket den Standardwert nutzte. Nun, da wir ein weiteres Paket hinzugefügt haben, welches Zugriff auf denselben Wert der Cookies benötigt, müssen wir explizit den `key`-Wert in beiden Konfigurationsobjekten setzen. Achte darauf, den `key` mit dem Cookie-Namen zur `session`-Middleware hinzuzufügen, die zum Socket.IO-Schlüssel passt. Also, add the `store` reference to the options, near where we set `saveUninitialized: true`. Das ist notwendig, um Socket.IO mitzuteilen, auf welche Sitzung es sich zu beziehen hat. diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md index 84aeb38e8c5..9673bffc81e 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.md @@ -1,6 +1,6 @@ --- id: 589fc831f9fc0f352b528e75 -title: Communicate by Emitting +title: Kommunizieren durch Emittieren challengeType: 2 forumTopicId: 301550 dashedName: communicate-by-emitting diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.md index 7d2abb500e4..cf430bfc04e 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.md @@ -1,6 +1,6 @@ --- id: 589fc831f9fc0f352b528e76 -title: Handle a Disconnect +title: Verbindungsabbruch verarbeiten challengeType: 2 forumTopicId: 301552 dashedName: handle-a-disconnect @@ -8,7 +8,7 @@ dashedName: handle-a-disconnect # --description-- -You may notice that up to now you have only been increasing the user count. Das Verarbeiten eines Verbindungsabbruchs des Nutzers ist genauso einfach, wie das Verarbeiten des ersten Verbindungsaufbaus – nur musst du hierfür, statt auf dem gesamten Server, auf jeden Socket hören. +Du wirst vielleicht feststellen, dass du bisher nur die Anzahl der Nutzer erhöht hast. Das Verarbeiten eines Verbindungsabbruchs des Nutzers ist genauso einfach, wie das Verarbeiten des ersten Verbindungsaufbaus – nur musst du hierfür, statt auf dem gesamten Server, auf jeden Socket hören. To do this, add another listener inside the existing `'connect'` listener that listens for `'disconnect'` on the socket with no data passed through. You can test this functionality by just logging that a user has disconnected to the console. @@ -18,15 +18,15 @@ socket.on('disconnect', () => { }); ``` -To make sure clients continuously have the updated count of current users, you should decrease `currentUsers` by 1 when the disconnect happens then emit the `'user count'` event with the updated count. +Um sicherzustellen, dass Clients immer über aktuelle Nutzerzahlen verfügen, solltest du `currentUsers` um 1 verringern, wenn die Verbindung unterbrochen wird und dann das Ereignis `'user count'` mit der aktualisierten Anzahl ausgeben. -**Note:** Just like `'disconnect'`, all other events that a socket can emit to the server should be handled within the connecting listener where we have 'socket' defined. +**Hinweis:** Wie bei `'disconnect'` sollten auch alle anderen Ereignisse, die ein Socket an den Server übertragen kann, innerhalb des Verbindungsaufbau-Listeners verarbeitet werden, in welchem wir 'socket' definiert haben. Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. If you're running into errors, you can check out the project completed up to this point. # --hints-- -Server should handle the event disconnect from a socket. +Der Server sollte das disconnect-Ereignis des Sockets verarbeiten. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.md index 5b3b9bc0e0a..9193793ddf5 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.md @@ -1,6 +1,6 @@ --- id: 58a25c98f9fc0f352b528e7f -title: Hashing Your Passwords +title: Hashing deiner Passwörter challengeType: 2 forumTopicId: 301553 dashedName: hashing-your-passwords @@ -8,7 +8,7 @@ dashedName: hashing-your-passwords # --description-- -Going back to the information security section, you may remember that storing plaintext passwords is *never* okay. Now it is time to implement BCrypt to solve this issue. +Going back to the information security section, you may remember that storing plaintext passwords is *never* okay. Jetzt ist es an der Zeit, BCrypt zu implementieren, um dieses Problem zu lösen. `bcrypt@~5.0.0` has already been added as a dependency, so require it in your server. You will need to handle hashing in 2 key areas: where you handle registering/saving a new account, and when you check to see that a password is correct on login. @@ -28,7 +28,7 @@ Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. # --hints-- -BCrypt should be a dependency. +BCrypt sollte eine Abhängigkeit sein. ```js async (getUserInput) => { @@ -43,7 +43,7 @@ async (getUserInput) => { } ``` -BCrypt should be correctly required and implemented. +BCrypt sollte korrekt angewendet und implementiert werden. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.md index 1cfd5241cfe..9352a56e463 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.md @@ -1,6 +1,6 @@ --- id: 5895f70ef9fc0f352b528e6b -title: How to Put a Profile Together +title: Wie man ein Profil zusammenstellt challengeType: 2 forumTopicId: 301554 dashedName: how-to-put-a-profile-together @@ -8,7 +8,7 @@ dashedName: how-to-put-a-profile-together # --description-- -Now that you can ensure the user accessing the `/profile` is authenticated, you can use the information contained in `req.user` on your page. +Da du nun sicherstellen kannst, dass der Nutzer, der auf `/profile` zugreift, authentifiziert ist, kannst du die in `req.user` enthaltenen Informationen auf deiner Seite verwenden. Pass an object containing the property `username` and value of `req.user.username` as the second argument for the `render` method of the profile view. diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md index cbee4b52426..a93f9dcef2a 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.md @@ -10,7 +10,7 @@ dashedName: how-to-use-passport-strategies In the `index.pug` file supplied, there is a login form. It is hidden because of the inline JavaScript `if showLogin` with the form indented after it. -In the `res.render` for that page, add a new variable to the object, `showLogin: true`. Wenn du deine Seite aktualisierst, solltest du das Formular sehen! Das Formular übermittelt **POST**-Anfragen an `/login`. Hier solltest du also die POST-Anfrage annehmen und den Nutzer authentifizieren. +Füge innerhalb des `res.render` dieser Seite dem Objekt eine neue Variable hinzu, `showLogin: true`. Wenn du deine Seite aktualisierst, solltest du das Formular sehen! Das Formular übermittelt **POST**-Anfragen an `/login`. Hier solltest du also die POST-Anfrage annehmen und den Nutzer authentifizieren. In dieser Aufgabe erstellst du die Route `/login`, um eine POST-Anfrage anzunehmen. Um mithilfe dieser Route Nutzer zu authentifizieren, benötigst du eine Middleware, die das vor Beantwortung der Anfrage tut. Dazu wird einfach ein weiteres Argument an die Middleware übergeben, bevor die Antwort kommt. The middleware to use is `passport.authenticate('local')`. @@ -49,7 +49,7 @@ async (getUserInput) => { } ``` -A POST request to `/login` should correctly redirect to `/`. +Eine POST-Anfrage an `/login` sollte korrekt zu `/` weiterleiten. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md index 03488cd925b..2802fdffae2 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.md @@ -8,7 +8,7 @@ dashedName: implementation-of-social-authentication-iii # --description-- -Der letzte Teil der Strategie ist der Umgang mit dem von GitHub übermittelten Profil. We need to load the user's database object if it exists, or create one if it doesn't, and populate the fields from the profile, then return the user's object. GitHub supplies us a unique *id* within each profile which we can use to search with to serialize the user with (already implemented). Im Folgenden findest du eine Beispielimplementierung, die du in deinem Projekt verwenden kannst. Sie wird in die Funktion eingefügt, die das zweite Argument für die neue Strategie ist, direkt unter der Stelle, an der sich derzeit `console.log(profile);` befindet: +Der letzte Teil der Strategie ist der Umgang mit dem von GitHub übermittelten Profil. We need to load the user's database object if it exists, or create one if it doesn't, and populate the fields from the profile, then return the user's object. GitHub liefert uns eine einzigartige *-id* innerhalb jedes Profils, die wir für Suchen verwenden können, um den Benutzer zu serialisieren (bereits implementiert). Im Folgenden findest du eine Beispielimplementierung, die du in deinem Projekt verwenden kannst. Sie wird in die Funktion eingefügt, die das zweite Argument für die neue Strategie ist, direkt unter der Stelle, an der sich derzeit `console.log(profile);` befindet: ```js myDataBase.findOneAndUpdate( diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md index 7757e4f0101..1014d7508ad 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.md @@ -16,7 +16,7 @@ The basic path this kind of authentication will follow in your app is: 4. The user is then returned to your app at a specific callback url with their profile if they are approved. 5. They are now authenticated, and your app should check if it is a returning profile, or save it in your database if it is not. -Strategies with OAuth require you to have at least a *Client ID* and a *Client Secret* which is a way for the service to verify who the authentication request is coming from and if it is valid. These are obtained from the site you are trying to implement authentication with, such as GitHub, and are unique to your app--**THEY ARE NOT TO BE SHARED** and should never be uploaded to a public repository or written directly in your code. A common practice is to put them in your `.env` file and reference them like so: `process.env.GITHUB_CLIENT_ID`. For this challenge you are going to use the GitHub strategy. +Strategies with OAuth require you to have at least a *Client ID* and a *Client Secret* which is a way for the service to verify who the authentication request is coming from and if it is valid. These are obtained from the site you are trying to implement authentication with, such as GitHub, and are unique to your app--**THEY ARE NOT TO BE SHARED** and should never be uploaded to a public repository or written directly in your code. Eine gängige Praxis ist es, sie in die `.env`-Datei zu packen und sie wie folgt zu referenzieren: `process.env.GITHUB_CLIENT_ID`. For this challenge you are going to use the GitHub strategy. Follow these instructions to obtain your *Client ID and Secret* from GitHub. Set the homepage URL to your Replit homepage (**not the project code's URL**), and set the callback URL to the same homepage URL with `/auth/github/callback` appended to the end. Save the client ID and your client secret in your project's `.env` file as `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET`. diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/logging-a-user-out.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/logging-a-user-out.md index 2e79df69b62..5477556d5f4 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/logging-a-user-out.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/logging-a-user-out.md @@ -8,7 +8,7 @@ dashedName: logging-a-user-out # --description-- -Creating the logout logic is easy. The route should just unauthenticate the user, and redirect to the home page instead of rendering any view. +Die Logout-Logik zu erstellen ist einfach. The route should just unauthenticate the user, and redirect to the home page instead of rendering any view. In passport, unauthenticating a user is as easy as just calling `req.logout()` before redirecting. Füge diese `/logout`-Route hinzu, um dies zu tun: diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/registration-of-new-users.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/registration-of-new-users.md index f9f6e786ef9..6a37ff41580 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/registration-of-new-users.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/registration-of-new-users.md @@ -8,20 +8,20 @@ dashedName: registration-of-new-users # --description-- -Now you need to allow a new user on your site to register an account. In the `res.render` for the home page add a new variable to the object passed along - `showRegistration: true`. When you refresh your page, you should then see the registration form that was already created in your `index.pug` file. This form is set up to **POST** on `/register`, so create that route and have it add the user object to the database by following the logic below. +Jetzt musst du einem neuen Nutzer deiner Webseite erlauben, ein Konto zu erstellen. In the `res.render` for the home page add a new variable to the object passed along - `showRegistration: true`. When you refresh your page, you should then see the registration form that was already created in your `index.pug` file. This form is set up to **POST** on `/register`, so create that route and have it add the user object to the database by following the logic below. The logic of the registration route should be as follows: -1. Register the new user -2. Authenticate the new user -3. Redirect to `/profile` +1. Registriere den neuen Nutzer +2. Authentifiziere den neuen Nutzer +3. Leite zu `/profile` weiter -The logic of step 1 should be as follows: +Die Logik von Schritt 1 sollte wie folgt lauten: 1. Query database with `findOne` -2. If there is an error, call `next` with the error +2. Wenn ein Fehler auftritt, rufe `next` mit dem Fehler auf 3. If a user is returned, redirect back to home -4. If a user is not found and no errors occur, then `insertOne` into the database with the username and password. As long as no errors occur there, call `next` to go to step 2, authenticating the new user, which you already wrote the logic for in your `POST /login` route. +4. Wird der Nutzer nicht gefunden und tritt kein Fehler auf, so füge den Nutzernamen sowie das Passwort der Datenbank mithilfe von `insertOne` hinzu. Tritt auch hier kein Fehler auf, so rufe `next` auf, um zu Schritt 2 überzugehen – der Authentifizierung des neuen Nutzers. Die Logik hierfür hast du bereits in deiner `POST /login`-Route geschrieben. ```js app.route('/register') @@ -58,11 +58,11 @@ app.route('/register') Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. If you're running into errors, you can check out the project completed up to this point. -**NOTE:** From this point onwards, issues can arise relating to the use of the *picture-in-picture* browser. If you are using an online IDE which offers a preview of the app within the editor, it is recommended to open this preview in a new tab. +**HINWEIS:** Ab jetzt können Probleme im Zusammenhang mit der Verwendung des *picture-in-picture*-Browsers auftreten. Wenn du eine Online-IDE verwendest, die eine Vorschau der Anwendung innerhalb des Editors bietet, wird empfohlen, diese Vorschau in einem neuen Tab zu öffnen. # --hints-- -You should have a `/register` route and display a registration form on the home page. +Du solltest eine `/register`-Route haben und ein Registrierungsformular auf der Startseite anzeigen. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md index 517a492bcb3..4ca57e0d8e6 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.md @@ -8,7 +8,7 @@ dashedName: send-and-display-chat-messages # --description-- -Es ist an der Zeit, dass du den Clients erlaubst, eine Chatnachricht an den Server zu senden, die er wiederum an alle Clients emittiert! In your `client.js` file, you should see there is already a block of code handling when the message form is submitted. +Es ist an der Zeit, dass du den Clients erlaubst, eine Chatnachricht an den Server zu senden, die er wiederum an alle Clients emittiert! In der Datei `client.js` solltest du sehen, dass es bereits einen Codeblock gibt, der das Absenden des Nachrichtenformulars verarbeitet. ```js $('form').submit(function() { @@ -26,7 +26,7 @@ Now, on your server, you should be listening to the socket for the event `'chat In `client.js`, you should now listen for event `'chat message'` and, when received, append a list item to `#messages` with the username, a colon, and the message! -At this point, the chat should be fully functional and sending messages across all clients! +Nun sollte der Chat voll funktionsfähig sein und Nachrichten an alle Clients verschicken! Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. If you're running into errors, you can check out the project completed up to this point. diff --git a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.md b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.md index 48703cd0af5..4ae01537d7c 100644 --- a/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.md +++ b/curriculum/challenges/german/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.md @@ -8,7 +8,7 @@ dashedName: serialization-of-a-user-object # --description-- -Serialization and deserialization are important concepts in regards to authentication. To serialize an object means to convert its contents into a small *key* that can then be deserialized into the original object. This is what allows us to know who has communicated with the server without having to send the authentication data, like the username and password, at each request for a new page. +Serialisierung und Deserialisierung sind wichtige Konzepte der Authentifizierung. Ein Objekt zu serialisieren bedeutet, dessen Inhalt in einen kleinen *key* zu konvertieren, welcher dann in das Originalobjekt deserialisiert werden kann. Auf diese Weise können wir wissen, wer mit dem Server kommuniziert hat, ohne dabei Authentifizierungsdaten wie Nutzernamen und Passwort für jeden Seitenaufruf übertragen zu müssen. To set this up properly, you need to have a serialize function and a deserialize function. In Passport, these can be created with: @@ -50,7 +50,7 @@ Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. # --hints-- -You should serialize the user object correctly. +Du solltest das Nutzerobjekt korrekt serialisieren. ```js async (getUserInput) => { @@ -70,7 +70,7 @@ async (getUserInput) => { } ``` -You should deserialize the user object correctly. +Du solltest das Nutzerobjekt korrekt deserialisieren. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md b/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md index 657938c5af2..dbd38f34359 100644 --- a/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md +++ b/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.md @@ -36,9 +36,9 @@ Die erste `assert.equal` überprüft ob der Status gleich `200` ist. Die zweite Beachte auch den Parameter `done` in der Callback-Funktion des Tests. Der Aufruf ohne Argument am Ende eines Tests ist notwendig, um zu signalisieren, dass der asynchrone Vorgang abgeschlossen ist. -Finally, note the `keepOpen` method just after the `request` method. Normally you would run your tests from the command line, or as part of an automated integration process, and you could let `chai-http` start and stop your server automatically. +Schaue dir dann die `keepOpen`-Methode kurz nach der `request`-Methode an. Normalerweise führst du deine Tests über die Kommandozeile oder als Teil eines automatisierten Integrationsprozesses aus und du könntest `chai-http` deinen Server automatisch starten und stoppen lassen. -However, the tests that run when you submit the link to your project require your server to be up, so you need to use the `keepOpen` method to prevent `chai-http` from stopping your server. +Die Tests, die ausgeführt werden, sobald du den Link zu deinem Projekt einreichst, erfordern jedoch, dass dein Server aktiv ist, weshalb du die `keepOpen`-Methode verwenden musst, um `chai-http` daran zu hindern, deinen Server zu stoppen. # --instructions-- diff --git a/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md b/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md index 550feffd724..1031dee5bc8 100644 --- a/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md +++ b/curriculum/challenges/german/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.md @@ -38,7 +38,7 @@ Alle Tests sollten bestanden werden. ); ``` -You should choose the correct range for the first assertion - `approximately(actual, expected, range)`. +Du solltest den richtigen Bereich für die erste Behauptung wählen - `approximately(actual, expected, range)`. ```js (getUserInput) => @@ -57,7 +57,7 @@ You should choose the correct range for the first assertion - `approximately(act ); ``` -You should choose the correct range for the second assertion - `approximately(actual, expected, range)`. +Du solltest den richtigen Bereich für die zweite Behauptung wählen - `approximately(actual, expected, range)`. ```js (getUserInput) => diff --git a/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/issue-tracker.md b/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/issue-tracker.md index a98111f6c95..20a1584cd78 100644 --- a/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/issue-tracker.md +++ b/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/issue-tracker.md @@ -57,7 +57,7 @@ You can provide your own project, not the example URL. }; ``` -You can send a `POST` request to `/api/issues/{projectname}` with form data containing the required fields `issue_title`, `issue_text`, `created_by`, and optionally `assigned_to` and `status_text`. +Du kannst eine `POST`-Anfrage mit Formulardaten an `/api/issues/{projectname}` senden. Die Formulardaten benötigen die Felder `issue_title`, `issue_text`, `created_by` und optional `assigned_to` sowie `status_text`. ```js async (getUserInput) => { @@ -219,7 +219,7 @@ async (getUserInput) => { }; ``` -You can send a `PUT` request to `/api/issues/{projectname}` with an `_id` and one or more fields to update. On success, the `updated_on` field should be updated, and returned should be `{ result: 'successfully updated', '_id': _id }`. +Du kannst eine `PUT`-Anfrage an `/api/issues/{projectname}` mit einer `_id` und mindestens einem Feld zum Aktualisieren senden. Im Erfolgsfall sollte das Feld `updated_on` aktualisiert werden und `{ result: 'successfully updated', '_id': _id }` zurückgeben. ```js async (getUserInput) => { @@ -254,7 +254,7 @@ async (getUserInput) => { }; ``` -When the `PUT` request sent to `/api/issues/{projectname}` does not include an `_id`, the return value is `{ error: 'missing _id' }`. +Wenn die `PUT`-Anfrage, die an `/api/issues/{projectname}` übermittelt wird, keine `_id` enthält, entspricht der Rückgabewert `{ error: 'missing _id' }`. ```js async (getUserInput) => { @@ -270,7 +270,7 @@ async (getUserInput) => { }; ``` -When the `PUT` request sent to `/api/issues/{projectname}` does not include update fields, the return value is `{ error: 'no update field(s) sent', '_id': _id }`. Bei jedem anderen Fehler entspricht der Rückgabewert `{ error: 'could not update', '_id': _id }`. +Wenn die `PUT`-Anfrage, die an `/api/issues/{projectname}` übermittelt wird, keine Aktualisierungsfelder enthält, entspricht der Rückgabewert `{ error: 'no update field(s) sent', '_id': _id }`. Bei jedem anderen Fehler entspricht der Rückgabewert `{ error: 'could not update', '_id': _id }`. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/personal-library.md b/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/personal-library.md index 8ec08e6b1ab..b77dfb53945 100644 --- a/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/personal-library.md +++ b/curriculum/challenges/german/06-quality-assurance/quality-assurance-projects/personal-library.md @@ -26,8 +26,8 @@ When you are done, make sure a working demo of your project is hosted somewhere 1. Add your MongoDB connection string to `.env` without quotes as `DB` Example: `DB=mongodb://admin:pass@1234.mlab.com:1234/fccpersonallib` 2. In your `.env` file set `NODE_ENV` to `test`, without quotes -3. You need to create all routes within `routes/api.js` -4. You will create all functional tests in `tests/2_functional-tests.js` +3. Alle Pfade müssen innerhalb von `routes/api.js` erstellt werden +4. Du wirst alle funktionalen Tests in `tests/2_functional-tests.js` erstellen # --hints-- diff --git a/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md b/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md index 74cf015278f..cf7f654ef83 100644 --- a/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md +++ b/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/budget-app.md @@ -21,8 +21,8 @@ Vervollständige die `Category`-Klasse in `budget.py`. Es sollte in der Lage sei - Eine `deposit`-Methode, die einen Betrag und eine Beschreibung annimmt. Wenn keine Beschreibung angegeben wird, sollte standardmäßig eine leere Zeichenfolge ausgegeben werden. Die Methode sollte ein Objekt in Form von `{"amount": amount, "description": description}` an die Ledgerliste anhängen. - Eine `withdraw`-Methode, die der `deposit`-Methode ähnelt, bei der der übergebene Betrag jedoch als negative Zahl im Hauptbuch gespeichert werden soll. Wenn die Mittel nicht ausreichen, sollte nichts in das Hauptbuch eingetragen werden. Diese Methode sollte `True` zurückgeben, wenn die Auszahlung stattgefunden hat, ansonsten sollte sie `False` ausgeben. -- A `get_balance` method that returns the current balance of the budget category based on the deposits and withdrawals that have occurred. -- Eine `transfer`-Methode, die einen Betrag und eine andere Budgetkategorie als Argument akzeptiert. Die Methode sollte eine Entnahme mit dem Betrag und der Beschreibung "Transfer to [Destination Budget Category]" hinzufügen. Die Methode sollte dann eine Einzahlung in die andere Budgetkategorie mit dem Betrag und der Beschreibung "Übertragung von [Source Budget Category]" hinzufügen. If there are not enough funds, nothing should be added to either ledgers. This method should return `True` if the transfer took place, and `False` otherwise. +- Eine `get_balance`-Methode, die den aktuellen Saldo der Kategorie des Budgets auf der Grundlage der erfolgten Einzahlungen und Abhebungen zurückgibt. +- Eine `transfer`-Methode, die einen Betrag und eine andere Budgetkategorie als Argument akzeptiert. Die Methode sollte eine Entnahme mit dem Betrag und der Beschreibung "Transfer to [Destination Budget Category]" hinzufügen. Die Methode sollte dann eine Einzahlung in die andere Budgetkategorie mit dem Betrag und der Beschreibung "Übertragung von [Source Budget Category]" hinzufügen. Wenn nicht genügend Mittel vorhanden sind, sollte in keinem der beiden Hauptbücher etwas hinzugefügt werden. This method should return `True` if the transfer took place, and `False` otherwise. - Eine `check_funds`-Methode, die einen Betrag als Argument akzeptiert. Es wird `False` zurückgegeben, wenn der Betrag größer ist als der Saldo der Budgetkategorie, ansonsten wird `True` zurückgegeben. Diese Methode sollte sowohl von der Methode `withdraw` als auch von der Methode `transfer` verwendet werden. Wenn das Budgetobjekt ausgegeben wird, sollte es folgendes anzeigen: diff --git a/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md b/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md index 2cd5bab104f..5273e4e153f 100644 --- a/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md +++ b/curriculum/challenges/german/07-scientific-computing-with-python/scientific-computing-with-python-projects/probability-calculator.md @@ -38,7 +38,7 @@ Erstelle nun eine `experiment`-Funktion in `prob_calculator.py` (nicht innerhalb - `hat`: Ein Hut-Objekt, das Bälle enthält, das innerhalb der Funktion kopiert werden soll. - `expected_balls`: Ein Objekt, das die genaue Gruppe von Bällen angibt, die für das Experiment aus dem Hut gezogen werden sollen. For example, to determine the probability of drawing 2 blue balls and 1 red ball from the hat, set `expected_balls` to `{"blue":2, "red":1}`. - `num_balls_drawn`: Die Anzahl der Bälle, die in jedem Experiment aus dem Hut gezogen werden sollen. -- `num_experiments`: Die Anzahl der durchzuführenden Experimente. (The more experiments performed, the more accurate the approximate probability will be.) +- `num_experiments`: Die Anzahl der durchzuführenden Experimente. (Je mehr Experimente durchgeführt werden, desto genauer wird die ungefähre Wahrscheinlichkeit sein.) Die `experiment`-Funktion sollte eine Wahrscheinlichkeit zurückgeben. diff --git a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-and-visualizations.md b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-and-visualizations.md index 47ec12a35ad..6e0ec2cef1a 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-and-visualizations.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-and-visualizations.md @@ -1,6 +1,6 @@ --- id: 5e9a093a74c4063ca6f7c160 -title: Data Cleaning and Visualizations +title: Datenbereinigung und Visualisierungen challengeType: 11 videoId: mHjxzFS5_Z0 bilibiliIds: @@ -12,18 +12,18 @@ dashedName: data-cleaning-and-visualizations # --description-- -*Instead of using notebooks.ai like it shows in the video, you can use Google Colab instead.* +*Anstatt notebooks.ai zu verwenden, wie es im Video gezeigt wird, kannst du stattdessen Google Colab verwenden.* -More resources: +Weitere Quellen: -- Notebooks on GitHub +- Notebooks auf GitHub - Wie man Notebooks über Github mit Google Colab öffnet. # --question-- ## --text-- -When using Matplotlib's global API, what does the order of numbers mean here? +Was bedeutet hier die Reihenfolge der Zahlen, wenn man die globale API von Matplotlib verwendet? ```py plt.subplot(1, 2, 1) diff --git a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-duplicates.md b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-duplicates.md index 14cab33625a..654164e4a6d 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-duplicates.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/data-cleaning-duplicates.md @@ -1,6 +1,6 @@ --- id: 5e9a093a74c4063ca6f7c15f -title: Data Cleaning Duplicates +title: Datenbereinigung der Duplikate challengeType: 11 videoId: kj7QqjXhH6A bilibiliIds: @@ -12,30 +12,30 @@ dashedName: data-cleaning-duplicates # --description-- -*Instead of using notebooks.ai like it shows in the video, you can use Google Colab instead.* +*Anstatt, wie in dem Video gezeigt, notebooks.ai zu verwenden, kannst du auch Google Colab verwenden.* -More resources: +Weitere Ressourcen: -- Notebooks on GitHub -- How to open Notebooks from GitHub using Google Colab. +- Notebooks auf GitHub +- Wie man Notebooks von GitHub unter Verwendung von Google Colab öffnet. # --question-- ## --text-- -The Python method `.duplicated()` returns a boolean Series for your DataFrame. `True` is the return value for rows that: +Die Python Methode `.duplicated()` gibt eine boolesche Serie für einen DataFrame zurück. `True` ist der Rückgabewert für Zeilen, die: ## --answers-- -contain a duplicate, where the value for the row contains the first occurrence of that value. +ein Duplikat beinhalten, wobei der Wert für die Zeile zum ersten Mal vorkommt. --- -contain a duplicate, where the value for the row is at least the second occurrence of that value. +ein Duplikat beinhalten, wobei der Wert für die Zeile zumindest zum zweiten Mal vorkommt. --- -contain a duplicate, where the value for the row contains either the first or second occurrence. +ein Duplikat beinhalten, wobei der Wert für die Zeile entweder zum ersten oder zweiten Mal vorkommt. ## --video-solution-- diff --git a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/numpy-introduction-b.md b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/numpy-introduction-b.md index ca2910ddf4a..6fcf6065546 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/numpy-introduction-b.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-course/numpy-introduction-b.md @@ -23,7 +23,7 @@ Weitere Ressourcen: ## --text-- -About how much memory does the integer `5` consume in plain Python? +Wieviel Speicherplatz benötigt der Integer `5` in Python? ## --answers-- diff --git a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md index 8d3d6bd0045..e545f414287 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/medical-data-visualizer.md @@ -1,6 +1,6 @@ --- id: 5e46f7f8ac417301a38fb92a -title: Medical Data Visualizer +title: Medizinischer Datenvisualisierer challengeType: 10 forumTopicId: 462368 dashedName: medical-data-visualizer @@ -44,9 +44,9 @@ Dateiname: medical_examination.csv | Rauchen | Subjective Feature | `smoke` | binär | | Alkoholkonsum | Subjective Feature | `alco` | binär | | Körperliche Aktivität | Subjective Feature | `active` | binär | -| Leiden unter Herz-Kreislauf-Erkrankungen | Target Variable | `cardio` | binär | +| Leiden unter Herz-Kreislauf-Erkrankungen | Zielvariable | `cardio` | binär | -## Tasks +## Aufgaben Erstelle ein Diagramm, ähnlich wie `examples/Figure_1.png`, in dem wir die guten und schlechten Ergebnisse für `cholesterol`, `gluc`, `alco`, `active`, und `smoke`-Variablen der Patienten mit cardio=1 und cardio=0 in verschiedenen Panels anzeigen. @@ -69,19 +69,19 @@ Modultests werden für dich in `test_module.py` geschrieben. ## Entwicklung -Für die Entwicklung kannst du `main.py` verwenden, um deinen Code zu testen. Click the "run" button and `main.py` will run. +Für die Entwicklung kannst du `main.py` verwenden, um deinen Code zu testen. Klicke den "Run"-Button und `main.py` wird ausgeführt. -## Testing +## Testen -We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button. +We imported the tests from `test_module.py` to `main.py` for your convenience. Die Tests werden automatisch ausgeführt, wenn du auf den "Run"-Button klickst. -## Submitting +## Absenden -Copy your project's URL and submit it to freeCodeCamp. +Kopiere die URL deines Projekts und sende sie an freeCodeCamp. # --hints-- -It should pass all Python tests. +Es sollte alle Python-Tests bestehen. ```js diff --git a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md index 6a998206e64..5d91a231f75 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/data-analysis-with-python-projects/page-view-time-series-visualizer.md @@ -10,8 +10,8 @@ dashedName: page-view-time-series-visualizer Du wirst mit unserem Replit-Startercode an diesem Projekt arbeiten. -- Start by importing the project on Replit. -- Next, you will see a `.replit` window. +- Beginne, indem du das Projekt in Replit importierst. +- Als nächstes wird ein `.replit`-Fenster angezeigt. - Wähle `Use run command` und klicke auf die `Done`-Schaltfläche. diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/accessing-and-changing-elements,-rows,-columns.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/accessing-and-changing-elements,-rows,-columns.md index 9964d4e18a9..e2b73d3e810 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/accessing-and-changing-elements,-rows,-columns.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/accessing-and-changing-elements,-rows,-columns.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed4 -title: 'Accessing and Changing Elements, Rows, Columns' +title: 'Zugriff und Änderung von Elementen, Zeilen, Spalten' challengeType: 11 videoId: v-7Y7koJ_N0 bilibiliIds: @@ -14,7 +14,7 @@ dashedName: accessing-and-changing-elements-rows-columns ## --text-- -What code would change the values in the 3rd column of both of the following Numpy arrays to 20? +Welcher Code würde die Werte in der 3. Spalte der beiden folgenden Numpy-Arrays auf 20 ändern? ```py a = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/basics-of-numpy.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/basics-of-numpy.md index ed181537994..860a41ce6ac 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/basics-of-numpy.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/basics-of-numpy.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed3 -title: Basics of Numpy +title: Grundlagen von NumPy challengeType: 11 videoId: f9QrZrKQMLI bilibiliIds: diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/copying-arrays-warning.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/copying-arrays-warning.md index b266bedd46e..2f12b7278ff 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/copying-arrays-warning.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/copying-arrays-warning.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed7 -title: Copying Arrays Warning +title: Warnung beim Kopieren von Arrays challengeType: 11 videoId: iIoQ0_L0GvA bilibiliIds: diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/initialize-array-problem.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/initialize-array-problem.md index 08984a3c7a8..41c6baab27a 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/initialize-array-problem.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/initialize-array-problem.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed6 -title: Initialize Array Problem +title: Array-Problem initialisieren challengeType: 11 videoId: 0jGfH8BPfOk bilibiliIds: @@ -14,7 +14,7 @@ dashedName: initialize-array-problem ## --text-- -What is another way to produce the following array? +Was ist eine andere Möglichkeit, um das folgende Array zu erstellen? ```py [[0. 0. 0. 0. 0. 0. 0.] diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/initializing-different-arrays.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/initializing-different-arrays.md index 301cac029c6..3bd5697321f 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/initializing-different-arrays.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/initializing-different-arrays.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed5 -title: Initializing Different Arrays +title: Initialisiere verschiedene Arrays challengeType: 11 videoId: CEykdsKT4U4 bilibiliIds: diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/loading-data-and-advanced-indexing.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/loading-data-and-advanced-indexing.md index 4a2ec27fee7..5eb265a61fe 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/loading-data-and-advanced-indexing.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/loading-data-and-advanced-indexing.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600eda -title: Loading Data and Advanced Indexing +title: Laden von Daten und erweiterte Indizierung challengeType: 11 videoId: tUdBZ7pF8Jg bilibiliIds: @@ -21,7 +21,7 @@ Given a file named `data.txt` with these contents: 15,88,5,75,22 -What code would produce the following array? +Welcher Code würde das folgende Array erstellen? ```py [29. 32. 45. 15. 5. 22.] diff --git a/curriculum/challenges/german/08-data-analysis-with-python/numpy/what-is-numpy.md b/curriculum/challenges/german/08-data-analysis-with-python/numpy/what-is-numpy.md index 57660ed97ad..b284dde1cbd 100644 --- a/curriculum/challenges/german/08-data-analysis-with-python/numpy/what-is-numpy.md +++ b/curriculum/challenges/german/08-data-analysis-with-python/numpy/what-is-numpy.md @@ -1,6 +1,6 @@ --- id: 5e9a0a8e09c5df3cc3600ed2 -title: What is NumPy +title: Was ist NumPy challengeType: 11 videoId: 5Nwfs5Ej85Q bilibiliIds: @@ -14,11 +14,11 @@ dashedName: what-is-numpy ## --text-- -Why are Numpy arrays faster than regular Python lists? +Warum sind Numpy-Arrays schneller als normale Python-Listen? ## --answers-- -Numpy does not perform type checking while iterating through objects. +Numpy führt keine Typüberprüfung durch, während es durch Objekte iteriert. --- @@ -26,11 +26,11 @@ Numpy uses fixed types. --- -Numpy uses contiguous memory. +Numpy verwendet zusammenhängenden Speicher. --- -All of the above. +Alle der oben genannten Möglichkeiten. ## --video-solution-- diff --git a/curriculum/challenges/german/09-information-security/information-security-projects/port-scanner.md b/curriculum/challenges/german/09-information-security/information-security-projects/port-scanner.md index 1ad59f30ab0..b3650398359 100644 --- a/curriculum/challenges/german/09-information-security/information-security-projects/port-scanner.md +++ b/curriculum/challenges/german/09-information-security/information-security-projects/port-scanner.md @@ -26,7 +26,7 @@ Wir sind noch dabei, den interaktiven Teil des Python-Kurses zu entwickeln. For # --instructions-- -Create a port scanner using Python. +Erstelle einen Portscanner mit Python. Erstelle eine Funktion in der `port_scanner.py`-Datei namens `get_open_ports`, die ein `target` Argument und ein `port_range` Argument verwendet. `target` kann eine URL oder IP-Adresse sein. `port_range` ist eine Liste von zwei Zahlen, die die erste und letzte Zahl des zu überprüfenden Ports angeben. @@ -67,7 +67,7 @@ PORT SERVICE 80 http ``` -Make sure to include proper spacing and new line characters. +Achte auf einen korrekten Zeilenabstand und neue Zeilenzeichen. If the URL passed into the `get_open_ports` function is invalid, the function should return the string: "Error: Invalid hostname". @@ -75,19 +75,19 @@ If the IP address passed into the `get_open_ports` function is invalid, the func ## Entwicklung -Write your code in `port_scanner.py`. For development, you can use `main.py` to test your code. Click the "run" button and `main.py` will run. +Schreibe deinen Code in `port_scanner.py`. Für die Entwicklung kannst du `main.py` verwenden, um deinen Code zu testen. Klicke den "Run"-Button und `main.py` wird ausgeführt. -## Testing +## Testen The unit tests for this project are in `test_module.py`. We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button. ## Submitting -Copy your project's URL and submit it to freeCodeCamp. +Kopiere die URL deines Projekts und übermittle sie an freeCodeCamp. # --hints-- -It should pass all Python tests. +Es sollte alle Python-Tests bestehen. ```js diff --git a/curriculum/challenges/german/09-information-security/information-security-projects/secure-real-time-multiplayer-game.md b/curriculum/challenges/german/09-information-security/information-security-projects/secure-real-time-multiplayer-game.md index 3439fd1e470..b7b0afda2c2 100644 --- a/curriculum/challenges/german/09-information-security/information-security-projects/secure-real-time-multiplayer-game.md +++ b/curriculum/challenges/german/09-information-security/information-security-projects/secure-real-time-multiplayer-game.md @@ -117,7 +117,7 @@ Die Spieler können mit einem Sammelgegenstand zusammenstoßen. Vervollständige ``` -Die `collision`-Methode sollte ein Sammelobjekt als Argument akzeptieren. If the player's avatar intersects with the item, the `collision` method should return `true`. +Die `collision`-Methode sollte ein Sammelobjekt als Argument akzeptieren. Wenn sich der Avatar des Spielers mit dem Gegenstand überschneidet, sollte die `collision`-Methode `true` zurückgeben. ```js @@ -135,7 +135,7 @@ Die Spieler können die Verbindung zum Spiel jederzeit unterbrechen. ``` -Prevent the client from trying to guess / sniff the MIME type. +Verhindere, dass der Client versucht, den MIME-Typ zu erraten/auszuspähen. ```js async (getUserInput) => { @@ -145,7 +145,7 @@ async (getUserInput) => { }; ``` -Prevent cross-site scripting (XSS) attacks. +Verhinderung von Cross-Site-Scripting (XSS)-Angriffen. ```js async (getUserInput) => { @@ -171,7 +171,7 @@ async (getUserInput) => { }; ``` -The headers say that the site is powered by "PHP 7.4.3" even though it isn't (as a security measure). +In den Kopfzeilen steht, dass die Website mit "PHP 7.4.3" betrieben wird, obwohl das nicht der Fall ist (als Sicherheitsmaßnahme). ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/09-information-security/information-security-projects/sha-1-password-cracker.md b/curriculum/challenges/german/09-information-security/information-security-projects/sha-1-password-cracker.md index 2e1c757741f..49108553bda 100644 --- a/curriculum/challenges/german/09-information-security/information-security-projects/sha-1-password-cracker.md +++ b/curriculum/challenges/german/09-information-security/information-security-projects/sha-1-password-cracker.md @@ -16,7 +16,7 @@ Du wirst Python for Everybody Video Course (14 hours) @@ -26,7 +26,7 @@ We are still developing the interactive instructional part of the Python curricu # --instructions-- -Passwords should never be stored in plain text. They should be stored as hashes, just in case the password list is discovered. However, not all hashes are created equal. +Passwords should never be stored in plain text. They should be stored as hashes, just in case the password list is discovered. Allerdings werden nicht alle Hashwerte gleich erstellt. For this project you will learn about the importance of good security by creating a password cracker to figure out passwords that were hashed using SHA-1. @@ -36,35 +36,35 @@ The function should hash each password from `top-10000-passwords.txt` and compar The function should take an optional second argument named `use_salts`. If set to true, each salt string from the file `known-salts.txt` should be appended AND prepended to each password from `top-10000-passwords.txt` before hashing and before comparing it to the hash passed into the function. -Here are some hashed passwords to test the function with: +Hier sind ein paar gehashte Passwörter, mit denen die Funktion getestet werden kann: - `b305921a3723cd5d70a375cd21a61e60aabb84ec` should return "sammy123" - `c7ab388a5ebefbf4d550652f1eb4d833e5316e3e` should return "abacab" -- `5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8` should return "password" +- `5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8` sollte "Passwort" zurückgeben -Here are some hashed passwords to test the function with when `use_salts` is set to `True`: +Hier sind einige gehashte Passwörter, mit denen die Funktion getestet werden soll, wenn `use_salts` auf `True` gesetzt ist: - `53d8b3dc9d39f0184144674e310185e41a87ffd5` should return "superman" - `da5a4e8cf89539e66097acd2f8af128acae2f8ae` should return "q1w2e3r4t5" -- `ea3f62d498e3b98557f9f9cd0d905028b3b019e1` should return "bubbles1" +- `ea3f62d498e3b98557f9f9cd0d905028b3b019e1` sollte "bubbles1" zurückgeben The `hashlib` library has been imported for you. You should consider using it in your code. Learn more about "hashlib" here. -## Development +## Entwicklung -Write your code in `password_cracker.py`. For development, you can use `main.py` to test your code. Click the "run" button and `main.py` will run. +Schreibe deinen Code in `password_cracker.py`. Für die Entwicklung kannst du `main.py` verwenden, um deinen Code zu testen. Klicke den "Run"-Button und `main.py` wird ausgeführt. -## Testing +## Testen -The unit tests for this project are in `test_module.py`. We imported the tests from `test_module.py` to `main.py` for your convenience. The tests will run automatically whenever you hit the "run" button. +The unit tests for this project are in `test_module.py`. We imported the tests from `test_module.py` to `main.py` for your convenience. Die Tests werden automatisch ausgeführt, wenn du auf den "Run"-Button klickst. ## Submitting -Copy your project's URL and submit it to freeCodeCamp. +Kopiere die URL deines Projekts und übermittle sie an freeCodeCamp. # --hints-- -It should pass all Python tests. +Es sollte alle Python-Tests bestehen. ```js diff --git a/curriculum/challenges/german/09-information-security/information-security-projects/stock-price-checker.md b/curriculum/challenges/german/09-information-security/information-security-projects/stock-price-checker.md index bc73283fe51..32f644a0b92 100644 --- a/curriculum/challenges/german/09-information-security/information-security-projects/stock-price-checker.md +++ b/curriculum/challenges/german/09-information-security/information-security-projects/stock-price-checker.md @@ -12,10 +12,10 @@ Erstelle eine vollständige JavaScript Anwendung, die eine ähnliche Funktionali Since all reliable stock price APIs require an API key, we've built a workaround. Use https://stock-price-checker-proxy.freecodecamp.rocks/ to get up-to-date stock price information without needing to sign up for your own key. -Working on this project will involve you writing your code using one of the following methods: +Bei der Arbeit an diesem Projekt musst du deinen Code mit einer der folgenden Methoden schreiben: - Clone this GitHub repo and complete your project locally. -- Use our Replit starter project to complete your project. +- Benutze unser Replit Starter Projekt um dein Projekt fertigzustellen. - Verwende einen Site-Builder deiner Wahl, um das Projekt abzuschließen. Achte darauf, alle Dateien von unserem GitHub-Repo zu integrieren. If you use Replit, follow these steps to set up the project: @@ -31,7 +31,7 @@ When you are done, make sure a working demo of your project is hosted somewhere 1. SET `NODE_ENV` to `test` without quotes and set `DB` to your MongoDB connection string 2. Complete the project in `routes/api.js` or by creating a handler/controller 3. You will add any security features to `server.js` -4. You will create all of the functional tests in `tests/2_functional-tests.js` +4. Du wirst alle funktionalen Tests in `tests/2_functional-tests.js` erstellen **Note** Privacy Considerations: Due to the requirement that only 1 like per IP should be accepted, you will have to save IP addresses. It is important to remain compliant with data privacy laws such as the General Data Protection Regulation. One option is to get permission to save the user's data, but it is much simpler to anonymize it. For this challenge, remember to anonymize IP addresses before saving them to the database. If you need ideas on how to do this, you may choose to hash the data, truncate it, or set part of the IP address to 0. @@ -97,13 +97,13 @@ async (getUserInput) => { }; ``` -You can also pass along a `like` field as `true` (boolean) to have your like added to the stock(s). Only 1 like per IP should be accepted. +You can also pass along a `like` field as `true` (boolean) to have your like added to the stock(s). Nur 1 "Like" pro IP sollte akzeptiert werden. ```js ``` -If you pass along 2 stocks, the returned value will be an array with information about both stocks. Instead of `likes`, it will display `rel_likes` (the difference between the likes on both stocks) for both `stockData` objects. +Wenn du 2 Aktien übergibst, ist der Rückgabewert eine Anordnung mit Informationen über beide Aktien. Instead of `likes`, it will display `rel_likes` (the difference between the likes on both stocks) for both `stockData` objects. ```js async (getUserInput) => { diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.md index 451cbd98349..46eb845e16e 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.md @@ -10,13 +10,13 @@ dashedName: ask-browsers-to-access-your-site-via-https-only-with-helmet-hsts As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. -HTTP Strict Transport Security (HSTS) is a web security policy which helps to protect websites against protocol downgrade attacks and cookie hijacking. If your website can be accessed via HTTPS you can ask user’s browsers to avoid using insecure HTTP. By setting the header Strict-Transport-Security, you tell the browsers to use HTTPS for the future requests in a specified amount of time. This will work for the requests coming after the initial request. +HTTP Strict Transport Security (HSTS) ist eine Web-Sicherheitsrichtlinie, die dazu beiträgt, Websites vor Protokoll-Downgrad-Attacken und Cookie-Hijacking zu schützen. Wenn du über HTTPS auf deine Website zugreifen kannst, kannst du den Browser des Benutzers bitten, unsichere HTTP zu vermeiden. By setting the header Strict-Transport-Security, you tell the browsers to use HTTPS for the future requests in a specified amount of time. This will work for the requests coming after the initial request. # --instructions-- -Configure `helmet.hsts()` to use HTTPS for the next 90 days. Pass the config object `{maxAge: timeInSeconds, force: true}`. You can create a variable `ninetyDaysInSeconds = 90*24*60*60;` to use for the `timeInSeconds`. Replit already has hsts enabled. To override its settings you need to set the field "force" to true in the config object. We will intercept and restore the Replit header, after inspecting it for testing. +Konfiguriere `helmet.hsts()`, um HTTPS für die nächsten 90 Tage zu verwenden. Übergib das Konfigurations-Objekt `{maxAge: timeInSeconds, force: true}`. You can create a variable `ninetyDaysInSeconds = 90*24*60*60;` to use for the `timeInSeconds`. Replit hat bereits Hsts aktiviert. Um seine Einstellungen zu überschreiben, musst du das Feld "force" auf true im Konfigurations-Objekt setzen. We will intercept and restore the Replit header, after inspecting it for testing. -Note: Configuring HTTPS on a custom website requires the acquisition of a domain, and an SSL/TLS Certificate. +Hinweis: Die Konfiguration von HTTPS auf einer benutzerdefinierten Website erfordert den Erwerb einer Domain und eines SSL/TLS-Zertifikats. # --hints-- @@ -35,7 +35,7 @@ helmet.hsts() middleware should be mounted correctly ); ``` -maxAge should be equal to 7776000 s (90 days) +maxAge sollte 7776000 s (90 Tagen) entsprechen ```js (getUserInput) => diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.md index 1c8b0a039da..efc8ea0c5a9 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.md @@ -8,11 +8,11 @@ dashedName: avoid-inferring-the-response-mime-type-with-helmet-nosniff # --description-- -As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. Browsers can use content or MIME sniffing to override the `Content-Type` header of a response to guess and process the data using an implicit content type. While this can be convenient in some scenarios, it can also lead to some dangerous attacks. This middleware sets the `X-Content-Type-Options` header to `nosniff`, instructing the browser to not bypass the provided `Content-Type`. +As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. Browser können Content- oder MIME-Sniffing verwenden, um den `Content-Type`-Header einer Antwort zu überschreiben, um die Daten zu erraten und unter Verwendung eines impliziten Inhaltstyps zu verarbeiten. While this can be convenient in some scenarios, it can also lead to some dangerous attacks. Diese Middleware setzt den `X-Content-Type-Options`-Header auf `nosniff` und weist den Browser somit an, den angegebenen `Content-Type` nicht zu umgehen. # --instructions-- -Use the `helmet.noSniff()` method on your server. +Verwende die `helmet.noSniff()`-Methode auf deinem Server. # --hints-- diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.md index df5a2738dbb..ebcf0d8e0aa 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.md @@ -10,7 +10,7 @@ dashedName: configure-helmet-using-the-parent-helmet-middleware As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. -`app.use(helmet())` will automatically include all the middleware introduced above, except `noCache()`, and `contentSecurityPolicy()`, but these can be enabled if necessary. You can also disable or configure any other middleware individually, using a configuration object. +`app.use(helmet())` will automatically include all the middleware introduced above, except `noCache()`, and `contentSecurityPolicy()`, but these can be enabled if necessary. Du kannst auch jede andere Middleware einzeln deaktivieren oder konfigurieren, indem du ein Konfigurationsobjekt verwendest. **Example:** @@ -29,7 +29,7 @@ app.use(helmet({ })) ``` -We introduced each middleware separately for teaching purposes and for ease of testing. Using the ‘parent’ `helmet()` middleware is easy to implement in a real project. +Wir haben jede Middleware einzeln vorgestellt - zum einen für Schulungszwecke und zum anderen zur Vereinfachung der Tests. Using the ‘parent’ `helmet()` middleware is easy to implement in a real project. # --hints-- diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.md index ec268aa846c..10e742b96a1 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.md @@ -10,11 +10,11 @@ dashedName: disable-dns-prefetching-with-helmet-dnsprefetchcontrol As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. -To improve performance, most browsers prefetch DNS records for the links in a page. In that way the destination ip is already known when the user clicks on a link. This may lead to over-use of the DNS service (if you own a big website, visited by millions people…), privacy issues (one eavesdropper could infer that you are on a certain page), or page statistics alteration (some links may appear visited even if they are not). If you have high security needs you can disable DNS prefetching, at the cost of a performance penalty. +To improve performance, most browsers prefetch DNS records for the links in a page. Auf diese Weise ist die Ziel-IP bereits bekannt, wenn der Nutzer auf einen Link klickt. This may lead to over-use of the DNS service (if you own a big website, visited by millions people…), privacy issues (one eavesdropper could infer that you are on a certain page), or page statistics alteration (some links may appear visited even if they are not). Wenn du ein hohes Sicherheitsbedürfnis hast, kannst du das DNS-Prefetching deaktivieren, was allerdings mit Leistungseinbußen verbunden ist. # --instructions-- -Use the `helmet.dnsPrefetchControl()` method on your server. +Verwende die `helmet.dnsPrefetchControl()`-Methode auf deinem Server. # --hints-- diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md index dfcd64f5434..f339dcb2353 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.md @@ -1,6 +1,6 @@ --- id: 58a25bcff9fc0f352b528e7d -title: Hash and Compare Passwords Asynchronously +title: Passwörter asynchron hashen und vergleichen challengeType: 2 forumTopicId: 301578 dashedName: hash-and-compare-passwords-asynchronously @@ -10,7 +10,7 @@ dashedName: hash-and-compare-passwords-asynchronously As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. -As hashing is designed to be computationally intensive, it is recommended to do so asynchronously on your server as to avoid blocking incoming connections while you hash. All you have to do to hash a password asynchronous is call +Da das Hashing sehr rechenintensiv ist, wird empfohlen, es asynchron auf dem Server durchzuführen, um zu vermeiden, dass eingehende Verbindungen während des Hashens blockiert werden. All you have to do to hash a password asynchronous is call ```js bcrypt.hash(myPlaintextPassword, saltRounds, (err, hash) => { @@ -20,7 +20,7 @@ bcrypt.hash(myPlaintextPassword, saltRounds, (err, hash) => { # --instructions-- -Add this hashing function to your server (we've already defined the variables used in the function for you to use) and log it to the console for you to see! At this point you would normally save the hash to your database. +Add this hashing function to your server (we've already defined the variables used in the function for you to use) and log it to the console for you to see! An dieser Stelle speicherst du normalerweise den Hash in deiner Datenbank. Now when you need to figure out if a new input is the same data as the hash you would just use the compare function. @@ -47,7 +47,7 @@ Reiche deine Seite ein, wenn du davon ausgehst, alles richtig gemacht zu haben. # --hints-- -Async hash should be generated and correctly compared. +Async-Hash sollte generiert und korrekt verglichen werden. ```js (getUserInput) => diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md index 8fa1a53e118..4bea45b0c6b 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.md @@ -1,6 +1,6 @@ --- id: 58a25bcff9fc0f352b528e7e -title: Hash and Compare Passwords Synchronously +title: Passwörter synchron hashen und vergleichen challengeType: 2 forumTopicId: 301579 dashedName: hash-and-compare-passwords-synchronously @@ -10,7 +10,7 @@ dashedName: hash-and-compare-passwords-synchronously Zur Erinnerung: Dieses Projekt baut auf dem folgenden Starterprojekt auf: Replit oder geklont von GitHub. -Hashing synchronously is just as easy to do but can cause lag if using it server side with a high cost or with hashing done very often. Hashing with this method is as easy as calling +Das synchrone Hashing ist ebenso einfach, kann aber zu Verzögerungen führen, wenn es auf der Serverseite mit hohen Kosten verwendet wird oder wenn das Hashing sehr oft durchgeführt wird. Das Hashing mit dieser Methode ist so einfach wie der Aufruf ```js var hash = bcrypt.hashSync(myPlaintextPassword, saltRounds); diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md index 6e8bcbd7820..ac65357fc95 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/install-and-require-helmet.md @@ -11,14 +11,14 @@ dashedName: install-and-require-helmet Bei der Arbeit an diesen Aufgaben wirst du deinen Code mithilfe folgender Methoden schreiben: - Klone diese GitHub-Repo und schließe dein Projekt lokal ab. -- Use our Replit starter project to complete these challenges. +- Benutze unser Replit-Starter-Projekt, um diese Aufgaben abzuschließen. - Verwende einen Site-Builder deiner Wahl, um das Projekt abzuschließen. Achte darauf, alle Dateien von unserem GitHub-Repo zu integrieren. If you use Replit, follow these steps to set up the project: - Start by importing the project on Replit. -- Next, you will see a `.replit` window. -- Select `Use run command` and click the `Done` button. +- Daraufhin wird ein `.replit`-Fenster angezeigt. +- Wähle `Use run command` aus klicke auf die `Done`-Schaltfläche. When you are done, make sure a working demo of your project is hosted somewhere public. Then submit the URL to it in the Solution Link field. @@ -26,7 +26,7 @@ Helmet helps you secure your Express apps by setting various HTTP headers. # --instructions-- -All your code for these lessons goes in the `myApp.js` file between the lines of code we have started you off with. Do not change or delete the code we have added for you. +All your code for these lessons goes in the `myApp.js` file between the lines of code we have started you off with. Ändere oder lösche nicht den Code, den wir für dich hinzugefügt haben. Helmet version `3.21.3` has already been installed, so require it as `helmet` in `myApp.js`. diff --git a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.md b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.md index 5c9c9d7b740..2c6db890147 100644 --- a/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.md +++ b/curriculum/challenges/german/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.md @@ -10,7 +10,7 @@ dashedName: mitigate-the-risk-of-clickjacking-with-helmet-frameguard As a reminder, this project is being built upon the following starter project on Replit, or cloned from GitHub. -Your page could be put in a `` or `