From c43da9fb1e2cc90e8ea0a2a74b8197d386b867f2 Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 21 Mar 2022 11:24:23 +0100 Subject: [PATCH 01/24] Update README.md --- Week3/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Week3/README.md b/Week3/README.md index 356fcf3a..7d7356c5 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -66,6 +66,8 @@ _Note: following the technical assignment guidelines will also be a part of the - Make sure you have read the [technical assignment guidelines](https://github.com/HackYourFuture/ta_guidelines) and that your code and README follows these guidelines ## Final remarks -Enjoy the project! +As you are all working on the projects this week there will not be a Q&A session on Sunday this week. + +Enjoy getting practical! From 637b16c6577619963992092d87b93a23f26615a0 Mon Sep 17 00:00:00 2001 From: robvk Date: Wed, 6 Apr 2022 10:23:56 +0200 Subject: [PATCH 02/24] Update MAKEME.md Add link to the JavaScript Visualizer --- Week1/MAKEME.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 4a1a1611..171ebb56 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -10,6 +10,7 @@ This week is tough, asynchronous coding is another one of these programming things that takes awhile to get your head around. Let's start this week off with some interactive exercises! Visit the following link to get started: +- [Visualising Asynchronicity](https://www.jsv9000.app/). _Note that you do not need to actually solve anything here, but you can use this visualizer to see how asynchronicity works under the hood. Very cool!_ - [Learn JavaScript: Promises](https://www.codecademy.com/learn/learn-intermediate-javascript/modules/javascript-promises). _Note that the last exercise is not necessary, it is very complicated and something that is rarely used. You will not need to be able to do this. See it as a challenge!_ - [JavaScript promises, mastering the asynchronous](https://www.codingame.com/playgrounds/347/javascript-promises-mastering-the-asynchronous/what-is-asynchronous-in-javascript) From 2ef0e98a86d3a94ea0e876f8437e6902c558f625 Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 25 Jul 2022 10:26:52 +0200 Subject: [PATCH 03/24] Update README.md --- Week3/README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Week3/README.md b/Week3/README.md index 7d7356c5..3044ca7f 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -7,11 +7,12 @@ This is quite a big undertaking, so during the project one of the mentors for th ## Project requirements We want you to get excited and be free to build something you are passionate about, but there are some things that we need to see you have mastered. This means there are a few requirements: -- The app needs to be a single page application. That means only one `index.html` file and JavaScript needs to update the html using DOM manipulation. +- The app needs to be responsive. +- The app needs to be a single page application. That means there should be only one `index.html` file and JavaScript needs to update the html using DOM manipulation. - The app needs to interact with an API to grab data. -- The app needs to have loading/error handling for the interaction with the API. +- The app needs to have loading/error handling for the interaction with the API and needs to show this to the user, not just a `console.log`. - The app needs some user interaction such that you need to grab different data from the API. So you cannot just grab everything from the API and store it locally with one fetch. -- Follow the [guidelines for technical assignments](https://github.com/HackYourFuture/ta_guidelines). This will help you not get stuck or end up with only half an application and make sure that what you have at the end is something presentable. +- Follow the [guidelines for technical assignments](https://github.com/HackYourFuture/ta_guidelines) to already practice making these for later. This will also help you not get stuck or end up with only half an application and make sure that what you have at the end is something presentable. ## Ideas There are many APIs that are open to get data from, have a look at the following lists to see if there is a topic that interests you: @@ -38,6 +39,9 @@ For more information about CORS have a look at the [MDN article](https://develop If you really are stuck and have no inspiration, have a chat with your project mentor and talk it through together to come up with something. +## Tip: Get a JSON viewer extension for Chrome +Something like [this extension](https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh) will make it easier to work with an API. If your request returns JSON, which the API's do, it will format it nicely in your browsers so that you can easily navigate what the API is giving you. + ## Final product The final product (the repository is the product, not just the application) should be something that you can show off on your CV. So have a look at our technical assignment guidelines [here](https://github.com/HackYourFuture/ta_guidelines) and our design guidelines [here](https://github.com/HackYourFuture/design_guidelines) to see what it entails. By following those guidelines your app AND your code will look great, making it a great thing to show off to employers. You will also get into the habit of doing this with all the technical assignments you will get during your job search. @@ -66,7 +70,7 @@ _Note: following the technical assignment guidelines will also be a part of the - Make sure you have read the [technical assignment guidelines](https://github.com/HackYourFuture/ta_guidelines) and that your code and README follows these guidelines ## Final remarks -As you are all working on the projects this week there will not be a Q&A session on Sunday this week. +As you are all working on the projects this week there will not be a Q&A session on Sunday. Enjoy getting practical! From 3c7bd25efe9e247aace930a9e168f318fabdd908 Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 25 Jul 2022 10:56:12 +0200 Subject: [PATCH 04/24] Add alternative API for code along --- Week2/MAKEME.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index d11ca9f6..90f37969 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -25,7 +25,7 @@ Inside your `Using API's` fork, go to the folder `Week2`. Inside of that folder, ## **3. Code along** -In the following "code along" you'll be building a complete Weather App that makes use of the [Darksky API](https://darksky.net). +In the following "code along" you'll be building a complete Weather App that makes use of the [Darksky API](https://darksky.net). Darksky has stopped supporting signups, so you can use an alternative [openweathermap API](https://openweathermap.org). For the icons you can use the url `http://openweathermap.org/img/wn/${icon}@2x.png` where ${icon} is where you need to put the data. - [Build a Weather App with Vanilla JavaScript Tutorial](https://www.youtube.com/watch?v=wPElVpR1rwA) From a41406edb47934f962407c381cffe540d5bbe5d6 Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 9 Jan 2023 10:33:28 +0100 Subject: [PATCH 05/24] Update MAKEME.md Update exercise link --- Week1/MAKEME.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 171ebb56..86182588 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -11,7 +11,7 @@ This week is tough, asynchronous coding is another one of these programming things that takes awhile to get your head around. Let's start this week off with some interactive exercises! Visit the following link to get started: - [Visualising Asynchronicity](https://www.jsv9000.app/). _Note that you do not need to actually solve anything here, but you can use this visualizer to see how asynchronicity works under the hood. Very cool!_ -- [Learn JavaScript: Promises](https://www.codecademy.com/learn/learn-intermediate-javascript/modules/javascript-promises). _Note that the last exercise is not necessary, it is very complicated and something that is rarely used. You will not need to be able to do this. See it as a challenge!_ +- [Learn JavaScript: Promises](https://www.codecademy.com/courses/learn-intermediate-javascript/lessons/promises/exercises/constructing-promises). _Note that the last exercise is not necessary, it is very complicated and something that is rarely used. You will not need to be able to do this. See it as a challenge!_ - [JavaScript promises, mastering the asynchronous](https://www.codingame.com/playgrounds/347/javascript-promises-mastering-the-asynchronous/what-is-asynchronous-in-javascript) ## **2. Prep exercises** From 8e468804bc6fb1760c7bc544970042a63504cffa Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 5 Jun 2023 15:38:45 +0200 Subject: [PATCH 06/24] update title image --- assets/usingapis.png | Bin 29403 -> 37554 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/usingapis.png b/assets/usingapis.png index 7fc585c58e58fa6280b2078bbc7874b14843a911..ff8bb1ad46a44d5ca7c6dc0e6290aa4bfe1af863 100644 GIT binary patch literal 37554 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%0DRQvBn2f8iwvfWi!LJ)RTTLv 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 QG~g#Ir6~DXT;K2i0MPEjDgXcg From 2f2f7cc09e07b7c104f74f43f3ee557e99d00fe7 Mon Sep 17 00:00:00 2001 From: robvk Date: Mon, 12 Jun 2023 11:27:04 +0200 Subject: [PATCH 07/24] Update README.md Add rule for not using code alongs --- Week3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Week3/README.md b/Week3/README.md index 3044ca7f..a743733f 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -12,6 +12,7 @@ We want you to get excited and be free to build something you are passionate abo - The app needs to interact with an API to grab data. - The app needs to have loading/error handling for the interaction with the API and needs to show this to the user, not just a `console.log`. - The app needs some user interaction such that you need to grab different data from the API. So you cannot just grab everything from the API and store it locally with one fetch. +- You are *not* allowed to do a code-along or tutorial for this project, the goal is for you to build something yourself! - Follow the [guidelines for technical assignments](https://github.com/HackYourFuture/ta_guidelines) to already practice making these for later. This will also help you not get stuck or end up with only half an application and make sure that what you have at the end is something presentable. ## Ideas From e5d5eaedc1935e9ce2f45ba1750c11f53f2456c6 Mon Sep 17 00:00:00 2001 From: robvk Date: Thu, 13 Jul 2023 17:15:57 +0200 Subject: [PATCH 08/24] Add changes to career training 1 and 2 planning --- Week1/MAKEME.md | 8 ++++++++ Week2/MAKEME.md | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 86182588..495eee5f 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -5,6 +5,7 @@ 1. Practice the concepts 2. Prep exercises 3. Homework exercises +4. Career Training 1 (If not completed yet) ## **1. Practice the concepts** @@ -26,6 +27,13 @@ This week we expect you to do the exercises in the corresponding module/week fol *NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous homework will be a part of the PR* +## **4. Career Training 1 (If not completed yet)** + +Remember that the Career Training 1 session is coming up (check your class channel on slack for the exact date). Before the session make sure you have: + +- Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). +- Done the [homework](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. + ## Done early? Have a look at the material for next week! diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 90f37969..c19bec6c 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -35,9 +35,12 @@ This week we expect you to do the exercises in the corresponding module/week fol *NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous homework will be a part of the PR* -## **5. Interview preparation** +## **5. Career Training 1 (If not completed yet)** -After reading the info on the [‘Interview Preparation’ Repo](https://github.com/HackYourFuture/interviewpreparation), make a copy of [this file](https://docs.google.com/document/u/2/d/114rTGS4eG6tpkrMAyVIdvgTrnpmkRL6ax_smkw1B0HI/copy) and submit your answers to the team [here](https://hackyourfuture.typeform.com/to/s6zYAugm). These answers will help us assess how ready you are for interviews and we will also discuss your answers in the Career Training Session II which will happen this (or next) week. More information about this session will be shared on Slack! +Remember that the Career Training 1 session is coming up (check your class channel on slack for the exact date). Before the session make sure you have: + +- Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). +- Done the [homework](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. ## **6. Extra: Code along** From 9434e1094e0e557cf8c7e253189ffb5f2914a048 Mon Sep 17 00:00:00 2001 From: robvk Date: Wed, 13 Sep 2023 14:04:48 +0200 Subject: [PATCH 09/24] Rename homework to assignments --- README.md | 18 +++++----- Week1/MAKEME.md | 12 +++---- Week1/README.md | 2 +- .../1-catwalk-promises/README.md | 2 +- Week2/MAKEME.md | 14 ++++---- hand-in-assignments-guide.md | 35 +++++++++++++++++++ homework-handin-guide.md | 35 ------------------- package.json | 2 +- 8 files changed, 60 insertions(+), 60 deletions(-) create mode 100644 hand-in-assignments-guide.md delete mode 100644 homework-handin-guide.md diff --git a/README.md b/README.md index beb0707f..15240d02 100644 --- a/README.md +++ b/README.md @@ -24,21 +24,21 @@ In order to successfully complete this module you will need to master the follow This repository consists of 2 essential parts per week: -1. `README`: this document contains all the required theory you need to understand **while** working on the homework. It contains not only the right resources to learn about the concepts, but also lectures done by HackYourFuture teachers. This is the **first thing** you should start with every week -2. `MAKEME`: this document contains the instructions for each week's homework. Start with the exercises rather quickly, so that you can ground the concepts you read about earlier. +1. `README`: this document contains all the required theory you need to understand **while** working on the assignments. It contains not only the right resources to learn about the concepts, but also lectures done by HackYourFuture teachers. This is the **first thing** you should start with every week +2. `MAKEME`: this document contains the instructions for each week's assignments. Start with the exercises rather quickly, so that you can ground the concepts you read about earlier. ### How to study Let's say you are just starting out with the Using API's module. This is what you do... 1. The week always starts on **Wednesday**. First thing you'll do is open the `README.md` for that week. For the first week of `Using API's`, that would be [Week1 Reading](/Week1/README.md) -2. You spend **Wednesday** and **Thursday** going over the resources and try to get a basic understanding of the concepts. In the meanwhile, you'll also implement any feedback you got on last week's homework (from the JavaScript2 module) -3. On **Friday** you start with the homework, found in the `MAKEME.md`. For the first week of `Using API's`, that would be [Week1 Homework](/Week1/MAKEME.md) +2. You spend **Wednesday** and **Thursday** going over the resources and try to get a basic understanding of the concepts. In the meanwhile, you'll also implement any feedback you got on last week's assignments (from the JavaScript2 module) +3. On **Friday** you start with the assignments, found in the `MAKEME.md`. For the first week of `Using API's`, that would be [Week1 Assignments](/Week1/MAKEME.md) 4. You spend **Friday** and **Saturday** playing around with the exercises and write down any questions you might have 5. **DEADLINE 1**: You'll submit any questions you might have before **Saturday 23.59**, in the class channel 6. On **Sunday** you'll attend class. It'll be of the Q&A format, meaning that there will be no new material. Instead your questions shall be discussed and you can learn from others -7. You spend **Monday** and **Tuesday** finalizing your homework -8. **DEADLINE 2**: You submit your homework to the right channels (GitHub) before **Tuesday 23.59**. If you can't make it on time, please communicate it with your mentor +7. You spend **Monday** and **Tuesday** finalizing your assignments +8. **DEADLINE 2**: You submit your assignments to the right channels (GitHub) before **Tuesday 23.59**. If you can't make it on time, please communicate it with your mentor 9. Start the new week by going back to point 1! In summary: @@ -49,10 +49,10 @@ To have a more detailed overview of the guidelines, please read [this document]( ## Planning -| Week | Topic | Reading Materials | Homework | +| Week | Topic | Reading Materials | Assignments | | ---- | ----- | ----------------- | -------- | -| 1. | Synchronous vs asynchronous, Callbacks, Promises, The Event Loop | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | -| 2. | Application Programming Interface (API), Fetch, Async/await | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | +| 1. | Synchronous vs asynchronous, Callbacks, Promises, The Event Loop | [Reading W1](/Week1/README.md) | [Assignments W1](/Week1/MAKEME.md) | +| 2. | Application Programming Interface (API), Fetch, Async/await | [Reading W2](/Week2/README.md) | [Assignments W2](/Week2/MAKEME.md) | | 3. | Individual project + Interview as test | [Project](/Week3/README.md) | ## Finished? diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 495eee5f..cb8cac16 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -1,10 +1,10 @@ -# Homework Using API's Week 1 +# Assignments Using API's Week 1 ## **Todo list** 1. Practice the concepts 2. Prep exercises -3. Homework exercises +3. Assignments exercises 4. Career Training 1 (If not completed yet) ## **1. Practice the concepts** @@ -21,18 +21,18 @@ This week is tough, asynchronous coding is another one of these programming thin Inside your `Using API's` fork, go to the folder `Week1`. Inside of that folder, navigate to `/prep-exercises`. For each exercise, you will find a separate folder. The `README` explains what needs to be done. There will also be some questions at the bottom to think about. Go through them _before_ the session on Sunday as it will be covered then. -## **3. Homework exercises** +## **3. Assignments exercises** -This week we expect you to do the exercises in the corresponding module/week folder (Using API's / Week 1). Have a look at the [homework guide](https://github.com/HackYourFuture/UsingAPIs/blob/main/homework-handin-guide.md) to see how to hand in your homework. +This week we expect you to do the exercises in the corresponding module/week folder (Using API's / Week 1). Have a look at the [assignments guide](https://github.com/HackYourFuture/UsingAPIs/blob/main/hand-in-assignments-guide.md) to see how to hand in your assignments. -*NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous homework will be a part of the PR* +*NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous assignments will be a part of the PR* ## **4. Career Training 1 (If not completed yet)** Remember that the Career Training 1 session is coming up (check your class channel on slack for the exact date). Before the session make sure you have: - Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). -- Done the [homework](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. +- Done the [assignments](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. ## Done early? diff --git a/Week1/README.md b/Week1/README.md index b504e55b..6c240965 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -26,7 +26,7 @@ In this module we are going to learn how to connect our applications with data s Lastly, as we now know everything about asynchronicity, we can look at the browser's [Event Loop](https://study.hackyourfuture.net/#/the-internet/event-loop) which every browser implements. This will help you understand how and when your code gets executed in the browser. This will help you decide where to link up your code with the DOM so that it does what you expect. ## Career training II (Interview preparation) -Finally it is time to continue with developing your soft skills to ace those job interviews. For that, have a look at the [interview preparation repo](https://github.com/HackYourFuture/interviewpreparation). It is a lot to get through, so you may need some time next week as well. There is no homework for this week, but there is some homework for the career training next week, you can already have a look at it if you find these things difficult. +Finally it is time to continue with developing your soft skills to ace those job interviews. For that, have a look at the [interview preparation repo](https://github.com/HackYourFuture/interviewpreparation). It is a lot to get through, so you may need some time next week as well. There is no assignments for this week, but there is some assignments for the career training next week, you can already have a look at it if you find these things difficult. ## Finished? diff --git a/Week1/prep-exercises/1-catwalk-promises/README.md b/Week1/prep-exercises/1-catwalk-promises/README.md index cb3063c2..ffc2b8c8 100644 --- a/Week1/prep-exercises/1-catwalk-promises/README.md +++ b/Week1/prep-exercises/1-catwalk-promises/README.md @@ -2,7 +2,7 @@ In the Browsers module you made an exercise to make a cat walk on the screen until it was halfway, then do a dance for 5 seconds after which it will continue walking until the end of the screen. In this exercise the result should be the same, but this time we want to use `Promise`s to write it in a different way. -Have a look [here](https://github.com/HackYourFuture/Homework/tree/main/2-Browsers/Week1#exercise-5-the-cat-walk) to remind yourself what the goal of the code was and then do the steps written in `index.js`. We have already provided a couple of functions for you. +Have a look [here](https://github.com/HackYourFuture/Assignments/tree/main/2-Browsers/Week1#exercise-5-the-cat-walk) to remind yourself what the goal of the code was and then do the steps written in `index.js`. We have already provided a couple of functions for you. ## Things to think about diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index c19bec6c..b5222824 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -1,11 +1,11 @@ -# Homework Using API's Week 2 +# Assignments Using API's Week 2 ## **Todo list** 1. Practice the concepts 2. Prep exercises 3. Code along -4. Homework exercises +4. Assignments exercises 5. Interview preparation 6. Extra: Code along @@ -29,18 +29,18 @@ In the following "code along" you'll be building a complete Weather App that mak - [Build a Weather App with Vanilla JavaScript Tutorial](https://www.youtube.com/watch?v=wPElVpR1rwA) -## **4. Homework exercises** +## **4. Assignments exercises** -This week we expect you to do the exercises in the corresponding module/week folder (Using API's / Week 2). Have a look at the [homework guide](https://github.com/HackYourFuture/UsingAPIs/blob/main/homework-handin-guide.md) to see how to hand in your homework. +This week we expect you to do the exercises in the corresponding module/week folder (Using API's / Week 2). Have a look at the [assignments guide](https://github.com/HackYourFuture/UsingAPIs/blob/main/hand-in-assignments-guide.md) to see how to hand in your assignments. -*NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous homework will be a part of the PR* +*NOTE: do NOT forget to checkout the main branch before creating the branch for this week. Otherwise your previous assignments will be a part of the PR* ## **5. Career Training 1 (If not completed yet)** Remember that the Career Training 1 session is coming up (check your class channel on slack for the exact date). Before the session make sure you have: - Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). -- Done the [homework](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. +- Done the [assignments](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. ## **6. Extra: Code along** @@ -54,4 +54,4 @@ He uses some things that will be new for you: ## Done early? -Have a look at the project for next week and start thinking of ideas. You can even start a bit already if you wish, just remember to make sure all your homework is done beforehand! +Have a look at the project for next week and start thinking of ideas. You can even start a bit already if you wish, just remember to make sure all your assignments is done beforehand! diff --git a/hand-in-assignments-guide.md b/hand-in-assignments-guide.md new file mode 100644 index 00000000..45b251df --- /dev/null +++ b/hand-in-assignments-guide.md @@ -0,0 +1,35 @@ +# How to hand in assignments + +In this module you'll submit your assignments only using GIT and GitHub. + +1. [GitHub](https://www.github.com/HackYourFuture/UsingAPIs) + +## 1. GitHub assignments guide + +HYF Video + +Watch the video (by clicking the image) or go through the following walk-through to learn how to submit your assignments: + +ONE TIME ONLY (START OF EVERY MODULE) + +This module is slightly different as you have already done the one time setup for the assignments repo in the previous module. We will be using the same fork as we used there (`https://www.github.com/HackYourAssignment/Assignments-classXX`). + +EVERY WEEK + +1. Do a `git pull` on your main branch to get the latest version. +2. Create a new branch for each week you have assignments. For example, for the week 1 assignments for Using API's create a branch called `YOUR_NAME-w1-UsingAPIs`. Don't forget to checkout this branch after creating it. +3. Make your assignments! +4. Once you're finished, add your assignments to a commit. There will be some test and config files added by the test runner, this is expected and should be added! +5. Create the commit (`git commit`). Make the commit message meaningful, for example `finished project for assignments week1`. +6. Push the branch to your forked repository +7. On the GitHub page of your forked repository, click on the `create pull request` button. Make sure the `base repository` is your teacher's repository, on branch master +8. Give the pull request a title in the following format: + +```markdown +Assignments week 1 +``` + +9. Submit the pull request from your forked repository branch into the `main` branch + +If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯, please ask/comment on Slack! + diff --git a/homework-handin-guide.md b/homework-handin-guide.md deleted file mode 100644 index 95f83868..00000000 --- a/homework-handin-guide.md +++ /dev/null @@ -1,35 +0,0 @@ -# How to hand in homework - -In this module you'll submit your homework only using GIT and GitHub. - -1. [GitHub](https://www.github.com/HackYourFuture/UsingAPIs) - -## 1. GitHub homework guide - -HYF Video - -Watch the video (by clicking the image) or go through the following walk-through to learn how to submit your homework: - -ONE TIME ONLY (START OF EVERY MODULE) - -This module is slightly different as you have already done the one time setup for the homework repo in the previous module. We will be using the same fork as we used there (`https://www.github.com/HackYourHomework/Homework-classXX`). - -EVERY WEEK - -1. Do a `git pull` on your main branch to get the latest version. -2. Create a new branch for each week you have homework. For example, for the week 1 homework for Using API's create a branch called `YOUR_NAME-w1-UsingAPIs`. Don't forget to checkout this branch after creating it. -3. Make your homework! -4. Once you're finished, add your homework to a commit. There will be some test and config files added by the test runner, this is expected and should be added! -5. Create the commit (`git commit`). Make the commit message meaningful, for example `finished project for homework week1`. -6. Push the branch to your forked repository -7. On the GitHub page of your forked repository, click on the `create pull request` button. Make sure the `base repository` is your teacher's repository, on branch master -8. Give the pull request a title in the following format: - -```markdown -Homework week 1 -``` - -9. Submit the pull request from your forked repository branch into the `main` branch - -If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯, please ask/comment on Slack! - diff --git a/package.json b/package.json index 685329c3..bad9aaf5 100755 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Course content for the JavaScript3 module", "repository": "https://github.com/HackYourFuture/JavaScript3.git", "scripts": { - "lint": "eslint homework", + "lint": "eslint assignments", "test": "npm run lint" }, "author": "HackYourFuture", From d8dd1c932acb59c80496d2ccc61e4846d6a12b8e Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:49:00 +0100 Subject: [PATCH 10/24] Update README.md --- Week1/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Week1/README.md b/Week1/README.md index 6c240965..fb48afd5 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -14,7 +14,8 @@ These are the topics for week 1: - Chaining - Benefits 3. [The Event Loop](https://study.hackyourfuture.net/#/the-internet/event-loop) -4. [Career Training II (Interview preparation)](https://github.com/HackYourFuture/interviewpreparation) +4. [Your personal brand](https://github.com/HackYourFuture/yourpersonalbrand) - Continue reading! +5. [Career Training II (Interview preparation)](https://github.com/HackYourFuture/interviewpreparation) ## Week goals From c6267158a3dc12a2ee9d278a7f5cb397946cd2a5 Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:52:47 +0100 Subject: [PATCH 11/24] Update README.md --- Week2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Week2/README.md b/Week2/README.md index 5c54dfaf..1af57a4e 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -11,6 +11,7 @@ These are the topics for week 2: 3. [Async/Await](https://study.hackyourfuture.net/#/javascript/modern-js) - Catching errors with try/catch 4. [Interview preparation](https://github.com/HackYourFuture/interviewpreparation) +5. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! ## Week goals From 81cdd3ef99f0b58289ae3a895aa7d6507d0dabc7 Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 15:57:33 +0100 Subject: [PATCH 12/24] Update README.md --- Week2/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Week2/README.md b/Week2/README.md index 1af57a4e..9b716028 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -10,8 +10,7 @@ These are the topics for week 2: 2. [Fetch API](https://study.hackyourfuture.net/#/the-internet/fetch) 3. [Async/Await](https://study.hackyourfuture.net/#/javascript/modern-js) - Catching errors with try/catch -4. [Interview preparation](https://github.com/HackYourFuture/interviewpreparation) -5. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! +4. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! ## Week goals From 603eed90b3b2a1ed9b39c5a6591d10eb436345b3 Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:01:46 +0100 Subject: [PATCH 13/24] Update README.md --- Week2/README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Week2/README.md b/Week2/README.md index 9b716028..1e02f210 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -24,9 +24,12 @@ Last week we learned about Promises and with the increased use of promises, mode You will probably ask yourself now which way is best to handle asynchronous code and the answer is that there is no best way. Generally callbacks are great for simple applications, but get into callback hell if stuff gets too complicated. Promises with `.then` chains are great for more complex situations where the chaining can be very powerful, but can be a little hard to follow for people who do not have much experience with them. Using async/await makes the code look a little more synchronous again and that can make it easier to follow. It does, however, make it a little more complex to handle errors or situations where something absolutely needs to be done (a `finally` is invaluable in these situations). So, it is up to you to decide based on the situation what to use. -## Career training II (Interview preparation) -If you haven't finished all the material yet, then continue with it this week. +## Career training 1 (Your personal brand) -## Finished? +After the project you will have your first project that you can put on your CV! For now that is, as you will want to add many more in the future as you progress in your abilities. It is therefore time to start thinking about all of the steps required to start the job search and getting accepted to your first programming job. The first step to this will be handled in Career training 1: Your personal brand. This is all about making your CV, GitHub, LinkedIn, etc. stand out. These are the first things employers will look at so it is your first impression and has to be great! We have compiled a big list of information about how to go about creating your personal brand in [this repo](https://github.com/HackYourFuture/yourpersonalbrand). -Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). +### Career training 1: Planning + +You don't have to do all of this at this moment. Before the end of the Browsers module you will get a message in your cohort channel about when the Career Training 1 session will be. *Before* that session make sure to have: +- Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). +- Done the [assignment](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. From 2ed248db9f07cacd28c02fa04d090b572801064a Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:09:20 +0100 Subject: [PATCH 14/24] Update README.md --- Week1/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Week1/README.md b/Week1/README.md index fb48afd5..c399630b 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -15,8 +15,6 @@ These are the topics for week 1: - Benefits 3. [The Event Loop](https://study.hackyourfuture.net/#/the-internet/event-loop) 4. [Your personal brand](https://github.com/HackYourFuture/yourpersonalbrand) - Continue reading! -5. [Career Training II (Interview preparation)](https://github.com/HackYourFuture/interviewpreparation) - ## Week goals @@ -26,9 +24,6 @@ In this module we are going to learn how to connect our applications with data s Lastly, as we now know everything about asynchronicity, we can look at the browser's [Event Loop](https://study.hackyourfuture.net/#/the-internet/event-loop) which every browser implements. This will help you understand how and when your code gets executed in the browser. This will help you decide where to link up your code with the DOM so that it does what you expect. -## Career training II (Interview preparation) -Finally it is time to continue with developing your soft skills to ace those job interviews. For that, have a look at the [interview preparation repo](https://github.com/HackYourFuture/interviewpreparation). It is a lot to get through, so you may need some time next week as well. There is no assignments for this week, but there is some assignments for the career training next week, you can already have a look at it if you find these things difficult. - ## Finished? Are you finished with going through the materials? High five! If you feel ready to get practical, click [here](./MAKEME.md). From 1176d4b3cd88ffda45e135e5a6f38e74702b9940 Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:10:48 +0100 Subject: [PATCH 15/24] Update README.md --- Week1/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/Week1/README.md b/Week1/README.md index c399630b..4a45c1f5 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -14,7 +14,6 @@ These are the topics for week 1: - Chaining - Benefits 3. [The Event Loop](https://study.hackyourfuture.net/#/the-internet/event-loop) -4. [Your personal brand](https://github.com/HackYourFuture/yourpersonalbrand) - Continue reading! ## Week goals From 85a344435677439f0529a4138746d190d1547ccb Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:33:04 +0100 Subject: [PATCH 16/24] Update README.md --- Week2/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Week2/README.md b/Week2/README.md index 1e02f210..bf7f40c3 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -22,14 +22,14 @@ There are many ways to request data from an API, initially everything was done u Last week we learned about Promises and with the increased use of promises, modern JavaScript introduced some new syntax that can be used with those promises. Have a look at the section on Async/await in the modern JavaScript page of your study book [here]((https://study.hackyourfuture.net/#/javascript/modern-js)) now that you know what promises are so that you know what it does. -You will probably ask yourself now which way is best to handle asynchronous code and the answer is that there is no best way. Generally callbacks are great for simple applications, but get into callback hell if stuff gets too complicated. Promises with `.then` chains are great for more complex situations where the chaining can be very powerful, but can be a little hard to follow for people who do not have much experience with them. Using async/await makes the code look a little more synchronous again and that can make it easier to follow. It does, however, make it a little more complex to handle errors or situations where something absolutely needs to be done (a `finally` is invaluable in these situations). So, it is up to you to decide based on the situation what to use. +You will probably ask yourself now which way is best to handle asynchronous code and the answer is that there is no best way. Generally callbacks are great for simple applications, but get into callback hell if stuff gets too complicated. Promises with `.then` chains are great for more complex situations where the chaining can be very powerful, but can be a little hard to follow for people who do not have much experience with them. Using async/await makes the code look a little more synchronous again and that can make it easier to follow. It does, however, make it a little more complex to handle errors or situations where something absolutely needs to be done (a `finally` is invaluable in these situations). So, it is up to you to decide based on the situation what to use. -## Career training 1 (Your personal brand) +## Career Training I (Your personal brand) -After the project you will have your first project that you can put on your CV! For now that is, as you will want to add many more in the future as you progress in your abilities. It is therefore time to start thinking about all of the steps required to start the job search and getting accepted to your first programming job. The first step to this will be handled in Career training 1: Your personal brand. This is all about making your CV, GitHub, LinkedIn, etc. stand out. These are the first things employers will look at so it is your first impression and has to be great! We have compiled a big list of information about how to go about creating your personal brand in [this repo](https://github.com/HackYourFuture/yourpersonalbrand). +Since you completed Browsers, you now have a first project to write down on your CV! You will add many more in the future, as you progress in your abilities. It is therefore time to start thinking about all of the steps required to start the job search and to get accepted to your first programming job. The first step will be handled in the Career Training I: _your personal brand_. We will cover how to present your CV, GitHub, LinkedIn, etc. to that they stand out. These are the first things employers will look at, so they convey a first impression of you and has to be great! We have compiled a big list of information about how to go about creating your personal brand in [this repo](https://github.com/HackYourFuture/yourpersonalbrand). -### Career training 1: Planning +### Career Training I: Planning -You don't have to do all of this at this moment. Before the end of the Browsers module you will get a message in your cohort channel about when the Career Training 1 session will be. *Before* that session make sure to have: +You don't have to do all of this immediately. Somewhere this week you will receive a message in your cohort channel from Giuseppina to plan the Career Training I. *Before* that session, make sure to have: - Read the whole [personal brand repository](https://github.com/HackYourFuture/yourpersonalbrand). - Done the [assignment](https://github.com/HackYourFuture/yourpersonalbrand/blob/main/yourcurriculum.md#4-submitting-your-cv-to-the-hyf-team) for the repository. From bcbe0c4857485c949f5fe7c098a07c686d2b9148 Mon Sep 17 00:00:00 2001 From: JosephineHYF <113513079+JosephineHYF@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:37:12 +0100 Subject: [PATCH 17/24] Update README.md --- Week3/README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Week3/README.md b/Week3/README.md index a743733f..89322456 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -2,13 +2,13 @@ In the final week of the Using API's module you will put everything you have learned to good use and build your own single page application that is connected to an API! What you build is totally up to you. Maybe you already had an idea in your head for a while, or maybe you will get inspired by all the open API's that are available. -This is quite a big undertaking, so during the project one of the mentors for this module will be assigned to you. Feel free to ask them for help if you are stuck or unsure, but they have been instructed to not write any code for you :). +This is quite a big undertaking, so you will have a mentor assigned to you to assist you in the project. Feel free to ask them for help if you are stuck or unsure, but they have been instructed to not write any code for you :). ## Project requirements We want you to get excited and be free to build something you are passionate about, but there are some things that we need to see you have mastered. This means there are a few requirements: - The app needs to be responsive. -- The app needs to be a single page application. That means there should be only one `index.html` file and JavaScript needs to update the html using DOM manipulation. +- The app needs to be a single page application. That means there should be only one `index.html` file and JavaScript needs to update the HTML using DOM manipulation. - The app needs to interact with an API to grab data. - The app needs to have loading/error handling for the interaction with the API and needs to show this to the user, not just a `console.log`. - The app needs some user interaction such that you need to grab different data from the API. So you cannot just grab everything from the API and store it locally with one fetch. @@ -44,10 +44,10 @@ If you really are stuck and have no inspiration, have a chat with your project m Something like [this extension](https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh) will make it easier to work with an API. If your request returns JSON, which the API's do, it will format it nicely in your browsers so that you can easily navigate what the API is giving you. ## Final product -The final product (the repository is the product, not just the application) should be something that you can show off on your CV. So have a look at our technical assignment guidelines [here](https://github.com/HackYourFuture/ta_guidelines) and our design guidelines [here](https://github.com/HackYourFuture/design_guidelines) to see what it entails. By following those guidelines your app AND your code will look great, making it a great thing to show off to employers. You will also get into the habit of doing this with all the technical assignments you will get during your job search. +The final product (the repository is the product, not just the application) should be something that you can show off on your CV. So have a look at our technical assignment guidelines [here](https://github.com/HackYourFuture/ta_guidelines) and our design guidelines [here](https://github.com/HackYourFuture/design_guidelines) to see what it entails. By following those guidelines your app _and_ your code will look great, making it a great thing to show off to employers. You will also get into the habit of doing this with all the technical assignments you will get during your job search. ## Planning and deadlines -There are only 2 deadlines in the project, how you divide your time for the rest is up to you. +There are only two deadlines for the project; how you divide your time for the rest is up to you. ### Deadline 1: Project definition By *Thursday 18:00PM CET* (but the earlier the better) you should send a short description of what your app will be as well as the name of the company whose brand/colour palette you will be mimicking to your project mentor. @@ -74,5 +74,3 @@ _Note: following the technical assignment guidelines will also be a part of the As you are all working on the projects this week there will not be a Q&A session on Sunday. Enjoy getting practical! - - From a30a3362c7cb634accab5370cf6f607801a90ebc Mon Sep 17 00:00:00 2001 From: stasel <2033301+stasel@users.noreply.github.com> Date: Wed, 27 Mar 2024 17:08:29 +0100 Subject: [PATCH 18/24] Added rapidapi.com to the list of API ideas --- Week3/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Week3/README.md b/Week3/README.md index 89322456..38a76b03 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -19,9 +19,10 @@ We want you to get excited and be free to build something you are passionate abo There are many APIs that are open to get data from, have a look at the following lists to see if there is a topic that interests you: - [publicapi.dev](https://publicapi.dev) -- [public api repo](https://github.com/public-apis/public-apis) +- [public API repo](https://github.com/public-apis/public-apis) - [API list](https://apilist.fun/) - [Public APIs](https://public-apis.io/) +- [RapidAPI](https://rapidapi.com/hub) When looking to see if an API is suitable for you there are a couple of questions to check: 1. Is the API rated, and if so how? From 34033984348cf8a5ad8ca7d9f9204edd3b49b459 Mon Sep 17 00:00:00 2001 From: Stasel <2033301+stasel@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:38:28 +0100 Subject: [PATCH 19/24] Update README.md Fixed a broken link --- Week3/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week3/README.md b/Week3/README.md index 38a76b03..43b63a04 100644 --- a/Week3/README.md +++ b/Week3/README.md @@ -21,7 +21,7 @@ There are many APIs that are open to get data from, have a look at the following - [publicapi.dev](https://publicapi.dev) - [public API repo](https://github.com/public-apis/public-apis) - [API list](https://apilist.fun/) -- [Public APIs](https://public-apis.io/) +- [Public APIs](https://publicapis.io/) - [RapidAPI](https://rapidapi.com/hub) When looking to see if an API is suitable for you there are a couple of questions to check: From 00497df47d3ccc32ea67c067516e78741e90a525 Mon Sep 17 00:00:00 2001 From: stasel <2033301+stasel@users.noreply.github.com> Date: Wed, 12 Jun 2024 12:10:33 +0200 Subject: [PATCH 20/24] Added CORS section to Week 2 readings --- Week2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week2/README.md b/Week2/README.md index bf7f40c3..5e63ef86 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -7,7 +7,7 @@ These are the topics for week 2: 1. [Application Programming Interface (API)](https://study.hackyourfuture.net/#/the-internet/api) - Public/private APIs - Connecting with APIs -2. [Fetch API](https://study.hackyourfuture.net/#/the-internet/fetch) +2. [Fetch API](https://study.hackyourfuture.net/#/the-internet/fetch) and [CORS](https://study.hackyourfuture.net/#/the-internet/cors) 3. [Async/Await](https://study.hackyourfuture.net/#/javascript/modern-js) - Catching errors with try/catch 4. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! From decde37d0beacc7a12cb1484cf4e0da6022763d1 Mon Sep 17 00:00:00 2001 From: stasel <2033301+stasel@users.noreply.github.com> Date: Wed, 12 Jun 2024 12:11:12 +0200 Subject: [PATCH 21/24] Added CORS section to Week 2 readings --- Week2/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Week2/README.md b/Week2/README.md index 5e63ef86..a05fd1c4 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -7,10 +7,11 @@ These are the topics for week 2: 1. [Application Programming Interface (API)](https://study.hackyourfuture.net/#/the-internet/api) - Public/private APIs - Connecting with APIs -2. [Fetch API](https://study.hackyourfuture.net/#/the-internet/fetch) and [CORS](https://study.hackyourfuture.net/#/the-internet/cors) -3. [Async/Await](https://study.hackyourfuture.net/#/javascript/modern-js) +2. [Fetch API](https://study.hackyourfuture.net/#/the-internet/fetch) +3. [CORS](https://study.hackyourfuture.net/#/the-internet/cors) +4. [Async/Await](https://study.hackyourfuture.net/#/javascript/modern-js) - Catching errors with try/catch -4. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! +5. [Career Training I](https://github.com/HackYourFuture/yourpersonalbrand): Not all at once! ## Week goals From e90437ee1d836a1d081becf1eada2fd501e7c6ed Mon Sep 17 00:00:00 2001 From: EsenKaratas Date: Sat, 2 Nov 2024 22:43:53 +0100 Subject: [PATCH 22/24] add looping cat walk and dance animation --- .../1-catwalk-promises/index.js | 50 +++++++++++++------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/Week1/prep-exercises/1-catwalk-promises/index.js b/Week1/prep-exercises/1-catwalk-promises/index.js index dc07a9fe..58713500 100644 --- a/Week1/prep-exercises/1-catwalk-promises/index.js +++ b/Week1/prep-exercises/1-catwalk-promises/index.js @@ -3,38 +3,56 @@ const STEP_SIZE_PX = 10; const STEP_INTERVAL_MS = 50; const DANCE_TIME_MS = 5000; -const DANCING_CAT_URL = - 'https://media1.tenor.com/images/2de63e950fb254920054f9bd081e8157/tenor.gif'; +const WALKING_CAT_URL = 'http://www.anniemation.com/clip_art/images/cat-walk.gif'; +const DANCING_CAT_URL = 'https://media1.tenor.com/images/2de63e950fb254920054f9bd081e8157/tenor.gif'; function walk(img, startPos, stopPos) { return new Promise((resolve) => { - // Resolve this promise when the cat (`img`) has walked from `startPos` to - // `stopPos`. - // Make good use of the `STEP_INTERVAL_PX` and `STEP_INTERVAL_MS` - // constants. + let currentPos = startPos; + img.style.left = `${currentPos}px`; + img.src = WALKING_CAT_URL; + + const intervalId = setInterval(() => { + currentPos += STEP_SIZE_PX; + img.style.left = `${currentPos}px`; + + if (currentPos >= stopPos) { + clearInterval(intervalId); + resolve(); + } + }, STEP_INTERVAL_MS); }); } function dance(img) { return new Promise((resolve) => { - // Switch the `.src` of the `img` from the walking cat to the dancing cat - // and, after a timeout, reset the `img` back to the walking cat. Then - // resolve the promise. - // Make good use of the `DANCING_CAT_URL` and `DANCE_TIME_MS` constants. + img.src = DANCING_CAT_URL; + setTimeout(() => { + img.src = WALKING_CAT_URL; + resolve(); + }, DANCE_TIME_MS); }); } function catWalk() { const img = document.querySelector('img'); + if (!img) { + return; + } + const startPos = -img.width; const centerPos = (window.innerWidth - img.width) / 2; const stopPos = window.innerWidth; - // Use the `walk()` and `dance()` functions to let the cat do the following: - // 1. Walk from `startPos` to `centerPos`. - // 2. Then dance for 5 secs. - // 3. Then walk from `centerPos` to `stopPos`. - // 4. Repeat the first three steps indefinitely. + + function performCatWalk() { + walk(img, startPos, centerPos) + .then(() => dance(img)) + .then(() => walk(img, centerPos, stopPos)) + .then(() => performCatWalk()); + } + + performCatWalk(); } -window.addEventListener('load', catWalk); \ No newline at end of file +window.addEventListener('load', catWalk); From c53e51ab19af6d0c2fd689a742c0dbab5a6f03b3 Mon Sep 17 00:00:00 2001 From: EsenKaratas Date: Sat, 9 Nov 2024 22:02:23 +0100 Subject: [PATCH 23/24] add cat walking and dancing animation --- .../1-catwalk-async-await/index.js | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/Week2/prep-exercises/1-catwalk-async-await/index.js b/Week2/prep-exercises/1-catwalk-async-await/index.js index 9fd9f774..51298c01 100644 --- a/Week2/prep-exercises/1-catwalk-async-await/index.js +++ b/Week2/prep-exercises/1-catwalk-async-await/index.js @@ -3,18 +3,36 @@ const STEP_INTERVAL_MS = 50; const STEP_SIZE_PX = 10; const DANCE_TIME_MS = 5000; +const WALKING_CAT_URL = 'http://www.anniemation.com/clip_art/images/cat-walk.gif'; const DANCING_CAT_URL = 'https://media1.tenor.com/images/2de63e950fb254920054f9bd081e8157/tenor.gif'; + function walk(img, startPos, stopPos) { return new Promise((resolve) => { - // Copy over the implementation from last week + let currentPos = startPos; + img.style.left = `${currentPos}px`; + img.src = WALKING_CAT_URL; + + const intervalId = setInterval(() => { + currentPos += STEP_SIZE_PX; + img.style.left = `${currentPos}px`; + + if (currentPos >= stopPos) { + clearInterval(intervalId); + resolve(); + } + }, STEP_INTERVAL_MS); }); } function dance(img) { return new Promise((resolve) => { - // Copy over the implementation from last week + img.src = DANCING_CAT_URL; + setTimeout(() => { + img.src = WALKING_CAT_URL; + resolve(); + }, DANCE_TIME_MS); }); } @@ -23,8 +41,11 @@ async function catWalk() { const startPos = -img.width; const centerPos = (window.innerWidth - img.width) / 2; const stopPos = window.innerWidth; - - // Use async/await syntax to loop the walk and dance functions + + while (true) { + await walk(img, startPos, centerPos); + await dance(img); + await walk(img, centerPos, stopPos); + } } - window.addEventListener('load', catWalk); \ No newline at end of file From 16fb8fefb2e7c6862847b5e8aebb14e0fbd1436d Mon Sep 17 00:00:00 2001 From: EsenKaratas Date: Sat, 9 Nov 2024 23:15:07 +0100 Subject: [PATCH 24/24] implement Pokemon fetch with UI update and error handling --- Week2/prep-exercises/2-pokemon-fetch/index.js | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Week2/prep-exercises/2-pokemon-fetch/index.js b/Week2/prep-exercises/2-pokemon-fetch/index.js index f6be006c..d600aeb6 100644 --- a/Week2/prep-exercises/2-pokemon-fetch/index.js +++ b/Week2/prep-exercises/2-pokemon-fetch/index.js @@ -16,11 +16,13 @@ const VALID_URL = 'https://pokeapi.co/api/v2/pokemon/?limit=5'; const INVALID_URL = 'https://pokeapi.co/api/v2/pokemons/?limit=5'; async function fetchJSON(url) { - // TODO - // Fetch the JSON data from the web API that responds to the `url` parameter - // and return a promise that resolves to a corresponding JavaScript object. - // Make sure to check for HTTP errors. + + const response = await fetch(url); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + return response.json(); } function renderResults(pokemons) { @@ -48,15 +50,17 @@ function renderError(err) { function main() { const button = document.querySelector('#button'); - button.addEventListener('click', () => { + button.addEventListener('click', async () => { const option = document.querySelector('#option'); const url = option.checked ? INVALID_URL : VALID_URL; - // TODO - // Use `fetchJSON()` to fetch data from the selected url. - // If successful, render the data by calling function `renderResults()`. - // On failure, render the error by calling function `renderError()`. + try { + const pokemons = await fetchJSON(url); + renderResults(pokemons); + } catch (err) { + renderError(err); + } }); } -window.addEventListener('load', main); \ No newline at end of file +window.addEventListener('load', main);