From 3de6f0cfbc22538541e92b2e6fb156165a5a495f Mon Sep 17 00:00:00 2001 From: kasugaijin <95949082+kasugaijin@users.noreply.github.com> Date: Wed, 6 Apr 2022 11:42:48 -0700 Subject: [PATCH 01/70] Update a_deeper_look_at_git.md fixed typo "conveniece" to "convenience" line 103 --- git/intermediate_git/a_deeper_look_at_git.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/intermediate_git/a_deeper_look_at_git.md b/git/intermediate_git/a_deeper_look_at_git.md index 977713c1b45..42dff6b4163 100644 --- a/git/intermediate_git/a_deeper_look_at_git.md +++ b/git/intermediate_git/a_deeper_look_at_git.md @@ -100,7 +100,7 @@ Rename the commit to `Create first and second file`, then finish the rebase with #### Splitting Up a Commit -Before diving into Remotes, we're going to have a look at a handy Git command called `reset`. Let's have a look at the commit `Create third file and create fourth file`. At the moment we're using blank files for conveniece, but let's say these files contained functionality and the commit was describing too much at once. In that case what we could do is split it up into two smaller commits by, once again, using the interactive `rebase` tool. +Before diving into Remotes, we're going to have a look at a handy Git command called `reset`. Let's have a look at the commit `Create third file and create fourth file`. At the moment we're using blank files for convenience, but let's say these files contained functionality and the commit was describing too much at once. In that case what we could do is split it up into two smaller commits by, once again, using the interactive `rebase` tool. We open up the tool just like last time, change `pick` to `edit` for the commit we're going to split. Now, however, what we're going to do is run `git reset HEAD^`, which resets the commit to the one right before HEAD. This allows us to add the files individually, add, and commit them individually. All together it would look something like this: From bf1d53286201380c0cb2d7f1bc0f0fb18bc10ce4 Mon Sep 17 00:00:00 2001 From: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com> Date: Sat, 2 Sep 2023 14:11:32 +0100 Subject: [PATCH 02/70] Add lesson note about prop types ESLint warning --- .../passing_data_between_components.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/react/getting_started_with_react/passing_data_between_components.md b/react/getting_started_with_react/passing_data_between_components.md index f19035f56b0..99087ed1d02 100644 --- a/react/getting_started_with_react/passing_data_between_components.md +++ b/react/getting_started_with_react/passing_data_between_components.md @@ -65,6 +65,11 @@ This may not seem like a huge deal right now, but what if we had 10 buttons, eac Let's see how by using props, we can account for any number of variations with a *single* button component. +
+

"Missing in props validation"

+You may notice squiggly lines under your props (for example under `color` and `fontSize` inside the Button component below). Hovering over these will tell you they are `missing in props validation`. For now, this can safely be ignored as it is just a default ESLint rule warning about prop types, something that will be covered later in the course. +
+ ~~~jsx function Button(props) { From 49c15dc5d26c261a8ac391adb3fa54384c5565c0 Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Mon, 4 Sep 2023 06:29:30 +0300 Subject: [PATCH 03/70] Edit backend lesson --- .../react_and_the_backend/using_nodejs_for_your_backend.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/react/react_and_the_backend/using_nodejs_for_your_backend.md b/react/react_and_the_backend/using_nodejs_for_your_backend.md index efff7a52f23..da59bc5d6a2 100644 --- a/react/react_and_the_backend/using_nodejs_for_your_backend.md +++ b/react/react_and_the_backend/using_nodejs_for_your_backend.md @@ -1,4 +1,4 @@ -### Introduction +### Using NodeJS for your backend So, you've now learned a lot of juicy JavaScript, enabling you to make various components of your HTML/CSS page react to user actions and/or input. That's great! As you've seen, you can get your apps to do a lot of pretty cool things already, just using client-side JavaScript. You may have noticed, though, that there is still an important piece of the puzzle missing: unless you use [Local Storage](http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/), your app 'forgets' the user's preferences, as well as any other changes made, as soon as the page gets reloaded. @@ -6,6 +6,5 @@ While Local Storage is great, it's not ideal: it only stores data on the compute ### NodeJS to the rescue! -We aren't quite ready to leave the frontend to learn all about how to store persistent data, but this question comes up often enough that we thought it was worth leaving a note here about it. NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it later in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. - -For now, just keep in mind that this _is_ something we'll be discussing in depth later and head over to the next lesson and continue working through the curriculum. We'll soon be back to building powerful React frontends in the Node.js course! Good luck on your learning journey! +We are now ready to leave the frontend to learn all about how to store persistent data. +NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it next in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. \ No newline at end of file From 65e025468ea7a8ce1e42d4fc293838307b086d4e Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Mon, 4 Sep 2023 06:30:11 +0300 Subject: [PATCH 04/70] Merge content to conclusion lesson --- react/conclusion/conclusion.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/react/conclusion/conclusion.md b/react/conclusion/conclusion.md index 5ab0b2b9110..fe72b4caff6 100644 --- a/react/conclusion/conclusion.md +++ b/react/conclusion/conclusion.md @@ -14,8 +14,19 @@ You're at a point in your React journey where you can begin learning about desig Before you move onto the next section. Fill out this [React course feedback survey](https://docs.google.com/forms/d/e/1FAIpQLSdj_tNMp0LEz3ZLPqYcF67V11tX_CCJP3CTictPZzZ6XQm2Gw/viewform?usp=sf_link) to add your input and experience with the section. This helps us improve the section as well as the overall course and is greatly appreciated. +### Using NodeJS for your backend + +So, you've now learned a lot of juicy JavaScript, enabling you to make various components of your HTML/CSS page react to user actions and/or input. That's great! As you've seen, you can get your apps to do a lot of pretty cool things already, just using client-side JavaScript. You may have noticed, though, that there is still an important piece of the puzzle missing: unless you use [Local Storage](http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/), your app 'forgets' the user's preferences, as well as any other changes made, as soon as the page gets reloaded. + +While Local Storage is great, it's not ideal: it only stores data on the computer from which the user is accessing the page. This approach does not allow for the app to 'remember' anything when the same user tries to access it again from a different device. For that, you're going to need a real backend. + +### NodeJS to the rescue! + +We are now ready to leave the frontend to learn all about how to store persistent data. +NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it next in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. + ### Contribute The Odin Project wouldn’t exist if not for contributors sharing their precious time and resources. We'd love to hear your ideas and suggestions to improve the React course. You can share your thoughts over on our Discord or better yet, open an issue on the [The Odin Project's curriculum repository](https://github.com/TheOdinProject/curriculum/issues). -Good luck and happy learning! +Good luck and happy learning! \ No newline at end of file From 44679932cc6f01b258211853244810b0c66c8e2a Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Mon, 4 Sep 2023 06:30:59 +0300 Subject: [PATCH 05/70] Archive old lesson --- .../react}/using_nodejs_for_your_backend.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) rename {react/react_and_the_backend => archive/react}/using_nodejs_for_your_backend.md (59%) diff --git a/react/react_and_the_backend/using_nodejs_for_your_backend.md b/archive/react/using_nodejs_for_your_backend.md similarity index 59% rename from react/react_and_the_backend/using_nodejs_for_your_backend.md rename to archive/react/using_nodejs_for_your_backend.md index da59bc5d6a2..efff7a52f23 100644 --- a/react/react_and_the_backend/using_nodejs_for_your_backend.md +++ b/archive/react/using_nodejs_for_your_backend.md @@ -1,4 +1,4 @@ -### Using NodeJS for your backend +### Introduction So, you've now learned a lot of juicy JavaScript, enabling you to make various components of your HTML/CSS page react to user actions and/or input. That's great! As you've seen, you can get your apps to do a lot of pretty cool things already, just using client-side JavaScript. You may have noticed, though, that there is still an important piece of the puzzle missing: unless you use [Local Storage](http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/), your app 'forgets' the user's preferences, as well as any other changes made, as soon as the page gets reloaded. @@ -6,5 +6,6 @@ While Local Storage is great, it's not ideal: it only stores data on the compute ### NodeJS to the rescue! -We are now ready to leave the frontend to learn all about how to store persistent data. -NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it next in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. \ No newline at end of file +We aren't quite ready to leave the frontend to learn all about how to store persistent data, but this question comes up often enough that we thought it was worth leaving a note here about it. NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it later in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. + +For now, just keep in mind that this _is_ something we'll be discussing in depth later and head over to the next lesson and continue working through the curriculum. We'll soon be back to building powerful React frontends in the Node.js course! Good luck on your learning journey! From db3192ebf441c8db529ebbf535ba84d91221b3a4 Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Fri, 8 Sep 2023 19:21:18 +0300 Subject: [PATCH 06/70] Rename conclusion lesson --- .../{conclusion.md => conclusion_full_stack_javascript.md.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename react/conclusion/{conclusion.md => conclusion_full_stack_javascript.md.md} (100%) diff --git a/react/conclusion/conclusion.md b/react/conclusion/conclusion_full_stack_javascript.md.md similarity index 100% rename from react/conclusion/conclusion.md rename to react/conclusion/conclusion_full_stack_javascript.md.md From df77adc8d5eaaebc9ede752766208f00b9a06685 Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Fri, 8 Sep 2023 19:23:10 +0300 Subject: [PATCH 07/70] Create ROR react conclusion copy --- react/conclusion/conclusion_ruby_on_rails.md | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 react/conclusion/conclusion_ruby_on_rails.md diff --git a/react/conclusion/conclusion_ruby_on_rails.md b/react/conclusion/conclusion_ruby_on_rails.md new file mode 100644 index 00000000000..5dc14637d8b --- /dev/null +++ b/react/conclusion/conclusion_ruby_on_rails.md @@ -0,0 +1,21 @@ +### Congratulations 🎉 + +Woohoo, React has been conquered! You are officially a React guru. Take a moment to appreciate what you've learned throughout this course and give yourself a round of applause. With React under your tool belt, you are well-equipped to tackle complex projects confidently. + +However, your React learning (or learning in general) doesn’t stop here. As proponents of a growth mindset, we believe there’s so much more to explore and learn. + +### What’s next + +Frontend is the land of innovation, and React is one of the leaders in the space. You can keep up with the future of React by following the [React RFC GitHub repository](https://github.com/reactjs/rfcs). This is where new features and changes to React are proposed, discussed, and eventually accepted or rejected. One of the groundbreaking RFCs is [Server Components](https://github.com/reactjs/rfcs/blob/main/text/0188-server-components.md). Over this course, we've rendered our React components in the client, but here this RFC discusses how we can bring React to the server and render it there. This feature has huge potential and is worth keeping an eye on in the future. + +Furthermore, you can dive into React meta frameworks. They're a framework for React that add first-class support for functionalities like data fetching and routing. Additionally, they leverage React's latest features to provide the best experience possible for developers and users alike. Some examples of these are [Next](https://nextjs.org/) and [Remix](https://remix.run/). + +You're at a point in your React journey where you can begin learning about design patterns and architecture. [patterns.dev](https://www.patterns.dev/) is an exceptional resource that will help you build better React apps by leveraging powerful patterns. They are worth a bookmark! + +Before you move onto the next section. Fill out this [React course feedback survey](https://docs.google.com/forms/d/e/1FAIpQLSdj_tNMp0LEz3ZLPqYcF67V11tX_CCJP3CTictPZzZ6XQm2Gw/viewform?usp=sf_link) to add your input and experience with the section. This helps us improve the section as well as the overall course and is greatly appreciated. + +### Contribute + +The Odin Project wouldn’t exist if not for contributors sharing their precious time and resources. We'd love to hear your ideas and suggestions to improve the React course. You can share your thoughts over on our Discord or better yet, open an issue on the [The Odin Project's curriculum repository](https://github.com/TheOdinProject/curriculum/issues). + +Good luck and happy learning! \ No newline at end of file From fc5d6ea7710656304397752c9794a99707f1a636 Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Sat, 9 Sep 2023 13:47:19 +0300 Subject: [PATCH 08/70] Update react/conclusion/conclusion_full_stack_javascript.md.md Co-authored-by: Eric Olkowski <70952936+thatblindgeye@users.noreply.github.com> --- .../conclusion/conclusion_full_stack_javascript.md.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/react/conclusion/conclusion_full_stack_javascript.md.md b/react/conclusion/conclusion_full_stack_javascript.md.md index fe72b4caff6..46751a299c6 100644 --- a/react/conclusion/conclusion_full_stack_javascript.md.md +++ b/react/conclusion/conclusion_full_stack_javascript.md.md @@ -14,16 +14,11 @@ You're at a point in your React journey where you can begin learning about desig Before you move onto the next section. Fill out this [React course feedback survey](https://docs.google.com/forms/d/e/1FAIpQLSdj_tNMp0LEz3ZLPqYcF67V11tX_CCJP3CTictPZzZ6XQm2Gw/viewform?usp=sf_link) to add your input and experience with the section. This helps us improve the section as well as the overall course and is greatly appreciated. -### Using NodeJS for your backend +### Using a backend -So, you've now learned a lot of juicy JavaScript, enabling you to make various components of your HTML/CSS page react to user actions and/or input. That's great! As you've seen, you can get your apps to do a lot of pretty cool things already, just using client-side JavaScript. You may have noticed, though, that there is still an important piece of the puzzle missing: unless you use [Local Storage](http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/), your app 'forgets' the user's preferences, as well as any other changes made, as soon as the page gets reloaded. +As you've seen, you can get your apps to do a lot of pretty cool things already, just using client-side JavaScript. You may have noticed, though, that there is still an important piece of the puzzle missing: unless you use [Local Storage](http://coding.smashingmagazine.com/2010/10/11/local-storage-and-how-to-use-it/), your app 'forgets' the user's preferences, as well as any other changes made, as soon as the page gets reloaded. -While Local Storage is great, it's not ideal: it only stores data on the computer from which the user is accessing the page. This approach does not allow for the app to 'remember' anything when the same user tries to access it again from a different device. For that, you're going to need a real backend. - -### NodeJS to the rescue! - -We are now ready to leave the frontend to learn all about how to store persistent data. -NodeJS is a JavaScript runtime environment which will let you build an entire backend with JavaScript. We'll learn all about it next in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to our React apps like user authentication, data persistence, and more. +While Local Storage is great, it's not ideal: it only stores data on the computer from which the user is accessing the page. This approach does not allow for the app to 'remember' anything when the same user tries to access it again from a different device. For that, you're going to need a real backend, which you'll learn all about next in our [NodeJS](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs) course. With Node, we'll be able to add a bunch of cool features to your apps like user authentication, data persistence, and more. ### Contribute From 6a40a4a0c2540ffa6598d067c9790223ec6a3ce4 Mon Sep 17 00:00:00 2001 From: Omar <55961349+OmarNaguib@users.noreply.github.com> Date: Sat, 9 Sep 2023 14:10:31 +0300 Subject: [PATCH 09/70] Fix name --- ...stack_javascript.md.md => conclusion_full_stack_javascript.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename react/conclusion/{conclusion_full_stack_javascript.md.md => conclusion_full_stack_javascript.md} (100%) diff --git a/react/conclusion/conclusion_full_stack_javascript.md.md b/react/conclusion/conclusion_full_stack_javascript.md similarity index 100% rename from react/conclusion/conclusion_full_stack_javascript.md.md rename to react/conclusion/conclusion_full_stack_javascript.md From 4f5da3a61229ac8c0ddf388a62c30f345afdefc5 Mon Sep 17 00:00:00 2001 From: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com> Date: Sat, 9 Sep 2023 14:15:23 +0100 Subject: [PATCH 10/70] Add lesson-note--tip class --- .../passing_data_between_components.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/react/getting_started_with_react/passing_data_between_components.md b/react/getting_started_with_react/passing_data_between_components.md index 99087ed1d02..470ce327473 100644 --- a/react/getting_started_with_react/passing_data_between_components.md +++ b/react/getting_started_with_react/passing_data_between_components.md @@ -1,6 +1,6 @@ ### Introduction -By now you should be starting to understand just how powerful React and reusable components can be, but you may be left wondering ‘How can I share information between components?’ or ‘Am I able to customize the behavior of my components each time I use them?'. In this lesson, we will learn about React props (short for properties) and how to use props to pass data between components. +By now you should be starting to understand just how powerful React and reusable components can be, but you may be left wondering ‘How can I share information between components?’ or ‘Am I able to customize the behavior of my components each time I use them?'. In this lesson, we will learn about React props (short for properties) and how to use props to pass data between components. ### Lesson overview @@ -34,7 +34,7 @@ export default function App() { ) } ~~~ -So far so good right? We have a beautiful reusable button that we can use as many times as we like, there is just one small problem. +So far so good right? We have a beautiful reusable button that we can use as many times as we like, there is just one small problem. What if we wanted the text within our second button to be “Don’t Click Me!’? Right now, we would have to create a second button component with this different text. @@ -61,11 +61,11 @@ export default function App() { ) } ~~~ -This may not seem like a huge deal right now, but what if we had 10 buttons, each one having different text, fonts, colors, sizes, and any other variation you can think of. Creating a new component for each of these button variations would very quickly lead to a LOT of code duplication. +This may not seem like a huge deal right now, but what if we had 10 buttons, each one having different text, fonts, colors, sizes, and any other variation you can think of. Creating a new component for each of these button variations would very quickly lead to a LOT of code duplication. Let's see how by using props, we can account for any number of variations with a *single* button component. -
+

"Missing in props validation"

You may notice squiggly lines under your props (for example under `color` and `fontSize` inside the Button component below). Hovering over these will tell you they are `missing in props validation`. For now, this can safely be ignored as it is just a default ESLint rule warning about prop types, something that will be covered later in the course.
@@ -154,7 +154,7 @@ export default function App() { ); } ~~~ -As you can see, we now only need to supply prop values to `Button` when rendering within `App` if they differ from the default values defined on `Button.defaultProps`. +As you can see, we now only need to supply prop values to `Button` when rendering within `App` if they differ from the default values defined on `Button.defaultProps`. You can also combine default props and prop destructuring. Here's how it looks in action. From 6877552b1dd2c5e2a3f88a1152f6fa43a2e5c98d Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 9 Sep 2023 14:49:11 -0700 Subject: [PATCH 11/70] draft lesson --- .../social_networking.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 getting_hired/preparing_for_job_search/social_networking.md diff --git a/getting_hired/preparing_for_job_search/social_networking.md b/getting_hired/preparing_for_job_search/social_networking.md new file mode 100644 index 00000000000..4781fb70a89 --- /dev/null +++ b/getting_hired/preparing_for_job_search/social_networking.md @@ -0,0 +1,81 @@ +### Introduction + +A robust social network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. +This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. + +One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. + +Building genuine connections with people takes time, however, so we recommend you start investing in this activity now. + +### What is a social network? + +Your social network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn help out. + +The network that will help you on your journey to becoming a software developer will mostly consist of people working in software development and adjacent roles, like recruitment or management. Take stock of your network in this field now. Chances are you might benefit from expanding it? + +### Why is a social network useful? + +You can probably think of instances where you were stuck on a task and asked someone for help. This was you exercising your network. You can do the same with your software developer network to help you with many things like gather information, make decisions, and find a job. + +When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to conduct an informational interview with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. + +Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). + +When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455) are not posted online. This means you are only seeing 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. + + +Think of it from the company’s perspective. Hiring is a pain. In a perfect world, a great candidate would show up instantly any time a new job opened up. This would save them going through the process of posting the job, screening applicants, marking technical assessments and conducting interviews. This all takes time and is very expensive. So it stands to reason why most companies would prefer to hire through the hidden jobs market. + +So, how do you tap into the hidden jobs market? Through your network. If your network sees you as a trusted individual with a particular skill set, you can be sure they will think of you when matching opportunities arise. You might ask around about potential jobs and receive a heads up of a new opportunity at someone’s company. Better still, you could be recommended for a particular role. Many companies give bonuses to staff who refer a candidate that gets hired. So, the incentive to network and pass names along goes both ways. + +This is not all to say you should refrain entirely from applying on posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the [Getting Hired](https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/getting-hired) course. + +### How to build a social network + +Just like building your technical skills, networking requires careful attention and a strategic approach. A local network allows you to build strong, in-person connections while a virtual network allows you to connect with people all over the world. Both are useful and a strategy that focuses on the two will be the most robust. + +#### Start Now +Your network will take time to build. The sooner you start to make connections, the better. Starting now means you will have more of a network to leverage when you need to rely on it. Consider proactively allocating a percentage of your web development study time to this activity. This can act as a nice breather between the mental workout of coding, and you may even combine networking and learning during activities like attending local meetups and conferences. + +#### Identify Your Options +Your time is limited and your options are endless. So, you should understand what options you have at your disposal and select one or two to start with. + +In-person networking opportunities will vary based on your location. Larger towns and cities will likely have well-established tech-related events and groups, whereas smaller communities may be more limited. To get a better sense of what’s going on around you, consider the following: + +* [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community) +* Check [MeetUp](https://www.meetup.com/) and/or Google for communities focused on a given technology +* Scour local business publications for notices on local conferences and tech events +* Talk to friends and family to see who might be a software developer you could be introduced to +* Follow local tech companies on social media to learn about their in-person events +* Sign up for newsletters focused on content in your local tech scene +* Start your own Meetup group focused on a particular topic, e.g. Ruby or JavaScript + +Your virtual networking options are much broader and there’s no shortage of platforms and communities to choose from. Consider the following to help you decide on where and how to focus your efforts: + +* [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. +* [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. +* [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. +* Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. + +### Build Genuine Connections + +The economy of social networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people ‘cold’ and ask them out of the blue to connect with you, or for a favor like ‘help me get this job in your company’ or ‘please be my mentor’. This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. + +Your best strategy is to start conversations with a genuine interest in the person and connect on a mutual interest. For example, you could review someone’s profile on LinkedIn and find something in common, or begin a conversation in-person with questions related to what the person does, how they got to where they are, and what challenges they face in their daily work. Make it about them, not you. Show that you are interested in them as a person, not that you want them to give you something. Actively listen to what they say and ask follow-up questions and even offer to help with something if you are in a position to do so. Think of the interaction like dating, you don’t ask someone to be your partner in the first question (do you? lol), so the same applies here. If your initial conversation goes well, then you can follow up with a request to connect. + +If you find it hard to talk to strangers in person and you are on your way to a local meetup or conference, consider having some predetermined things to talk about. Come up with a few generic questions such as “Where do you work?”, “What tech stack do you use at work?”, “How did you get into coding?”. Also, don’t forget to prepare to talk about yourself. Think of a 30-second elevator pitch describing who you are, what you do, and where you want to be in 12 months. This will help put your mind at ease because you will have something to say when your brain doesn’t feel like thinking in the moment. + +If you’re still not sure how to get started virtually, find one or two people who seem to be doing a good job at connecting with others and study their behavior. How often do they post or comment on other posts? What sort of language do they use? How do they treat others that interact with them? Chances are, if you adapt some of these behaviors to become your own you will also have more success connecting with others. + +### Maintain Your Network + +Your social network is a dynamic and organic entity. Much like a garden, it will take some maintenance and attention to keep it in shape. You can do this by asking and answering questions in online communities, sending messages to your connections, and attending in-person events or scheduling periodic coffee-chats with your closest connections. Ideally, this does not feel like a chore. Rather, it’s something you naturally do because you enjoy it and get value from the interactions. + +There is so much more to building a social network, but this lesson should give you a good start. Remember, it will take time, so start early and be genuine. Good luck! + +### Additional Resources + +This section contains helpful links to other content. It isn't required, so consider it supplemental. + +* How to use LinkedIn as a developer to get a job in tech - [video](https://www.youtube.com/watch?v=SG5Sb5WTV_g) +* How to Network: a Guide for Remote Software Developers & Engineers - [blog post](https://arc.dev/developer-blog/how-to-network-as-remote-developer/) From c0e0d8664be40e8810801a46427a1f5660033655 Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 9 Sep 2023 15:13:02 -0700 Subject: [PATCH 12/70] fix placement of bullet --- getting_hired/preparing_for_job_search/social_networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/social_networking.md b/getting_hired/preparing_for_job_search/social_networking.md index 4781fb70a89..d1bbed46991 100644 --- a/getting_hired/preparing_for_job_search/social_networking.md +++ b/getting_hired/preparing_for_job_search/social_networking.md @@ -42,7 +42,6 @@ Your time is limited and your options are endless. So, you should understand wha In-person networking opportunities will vary based on your location. Larger towns and cities will likely have well-established tech-related events and groups, whereas smaller communities may be more limited. To get a better sense of what’s going on around you, consider the following: -* [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community) * Check [MeetUp](https://www.meetup.com/) and/or Google for communities focused on a given technology * Scour local business publications for notices on local conferences and tech events * Talk to friends and family to see who might be a software developer you could be introduced to @@ -52,6 +51,7 @@ In-person networking opportunities will vary based on your location. Larger town Your virtual networking options are much broader and there’s no shortage of platforms and communities to choose from. Consider the following to help you decide on where and how to focus your efforts: +* [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community) * [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. * [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. From ba1e0aab00fa24f8eae4af35d577c19bf7f2c7f3 Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 9 Sep 2023 15:14:54 -0700 Subject: [PATCH 13/70] remove periods for consistency with other bullets --- getting_hired/preparing_for_job_search/social_networking.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/getting_hired/preparing_for_job_search/social_networking.md b/getting_hired/preparing_for_job_search/social_networking.md index d1bbed46991..b96786807c0 100644 --- a/getting_hired/preparing_for_job_search/social_networking.md +++ b/getting_hired/preparing_for_job_search/social_networking.md @@ -52,10 +52,10 @@ In-person networking opportunities will vary based on your location. Larger town Your virtual networking options are much broader and there’s no shortage of platforms and communities to choose from. Consider the following to help you decide on where and how to focus your efforts: * [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community) -* [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. -* [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. +* [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about +* [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. -* Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. +* Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good ### Build Genuine Connections From 69757f33c02b0457e08e6031b2b00eef30ea1a7c Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 9 Sep 2023 15:16:27 -0700 Subject: [PATCH 14/70] add periods for consistency with other bullets --- .../social_networking.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/getting_hired/preparing_for_job_search/social_networking.md b/getting_hired/preparing_for_job_search/social_networking.md index b96786807c0..efd0e4c6fe3 100644 --- a/getting_hired/preparing_for_job_search/social_networking.md +++ b/getting_hired/preparing_for_job_search/social_networking.md @@ -42,20 +42,20 @@ Your time is limited and your options are endless. So, you should understand wha In-person networking opportunities will vary based on your location. Larger towns and cities will likely have well-established tech-related events and groups, whereas smaller communities may be more limited. To get a better sense of what’s going on around you, consider the following: -* Check [MeetUp](https://www.meetup.com/) and/or Google for communities focused on a given technology -* Scour local business publications for notices on local conferences and tech events -* Talk to friends and family to see who might be a software developer you could be introduced to -* Follow local tech companies on social media to learn about their in-person events -* Sign up for newsletters focused on content in your local tech scene -* Start your own Meetup group focused on a particular topic, e.g. Ruby or JavaScript +* Check [MeetUp](https://www.meetup.com/) and/or Google for communities focused on a given technology. +* Scour local business publications for notices on local conferences and tech events. +* Talk to friends and family to see who might be a software developer you could be introduced to. +* Follow local tech companies on social media to learn about their in-person events. +* Sign up for newsletters focused on content in your local tech scene. +* Start your own Meetup group focused on a particular topic, e.g. Ruby or JavaScript. Your virtual networking options are much broader and there’s no shortage of platforms and communities to choose from. Consider the following to help you decide on where and how to focus your efforts: -* [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community) -* [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about -* [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content +* [Join the Odin community](https://www.theodinproject.com/lessons/foundations-join-the-odin-community). +* [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. +* [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. -* Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good +* Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. ### Build Genuine Connections From 9043027b1b7e9a5798fc3986e64efa99822bfdc9 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sun, 10 Sep 2023 09:38:43 +0100 Subject: [PATCH 15/70] Git Commits Lesson: Convert knowledge links to markdown (#26308) Because: * Html links will not open in new tab. --- git/foundations_git/commit_messages.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/git/foundations_git/commit_messages.md b/git/foundations_git/commit_messages.md index c83f81c8aca..94362b9f507 100644 --- a/git/foundations_git/commit_messages.md +++ b/git/foundations_git/commit_messages.md @@ -14,11 +14,11 @@ This section contains a general overview of topics that you will learn in this l Yes! Let me give you a quick list of reasons why: -- When you are applying for jobs, employers will look through your projects on GitHub and they will look through your commit history. Having good commits as a novice developer will help you stand out. +- When you are applying for jobs, employers will look through your projects on GitHub and they will look through your commit history. Having good commits as a novice developer will help you stand out. - Having a good commit message history will allow you (or other developers working on your code) to quickly see what changes were made and why. This is useful if a bug is found in the code that needs to be fixed! -- Having a good commit message history will also be helpful if you come back to a project you were working on after stepping away from it for a while. You likely won't remember your thought process and changes made when initially writing out the code. +- Having a good commit message history will also be helpful if you come back to a project you were working on after stepping away from it for a while. You likely won't remember your thought process and changes made when initially writing out the code. ### Bad vs. good commits @@ -28,19 +28,19 @@ When it comes to writing commits, it is crucial to know how to write them effect fix a bug ~~~ -Even though it describes what you did, the message is too vague, which leaves the other developers on your team confused. A good commit message will explain the **why** behind your changes. In other words, a commit message describes what problem your changes solve and how it solves them. +Even though it describes what you did, the message is too vague, which leaves the other developers on your team confused. A good commit message will explain the **why** behind your changes. In other words, a commit message describes what problem your changes solve and how it solves them. Effective commits consist of two separate parts: a subject, and a body: #### Subject -A brief summary of the change you made to the project. **Note:** GitHub has a 72-character limit so we recommend keeping your commits' subject to within this amount. +A brief summary of the change you made to the project. **Note:** GitHub has a 72-character limit so we recommend keeping your commits' subject to within this amount. ~~~ This is the change I made to the codebase. ~~~ #### Body -A concise yet clear description of what you did. +A concise yet clear description of what you did. ~~~ Describe the problem your commit solves and how. @@ -59,22 +59,22 @@ Ahh, that's better! :) Now, developers can gain a better understanding of this c * Provides a subject that specifies your code's action (e.g., "Add missing link and alt text to the company's logo") * Contains a body that provides a concise yet clear description of why the commit needed to be made (e.g., "Screen readers won't read the images to users with disabilities without this information") -* Separates the subject from the body with a new/blank line. This is a best practice we highly recommend following. It makes commit messages easier for other developers to read. +* Separates the subject from the body with a new/blank line. This is a best practice we highly recommend following. It makes commit messages easier for other developers to read. ### When to commit -A good way to view a commit is like a “snapshot” of your code at the moment that it was made. That version of your code up to that point will be saved for you to revert back to or look back at. +A good way to view a commit is like a “snapshot” of your code at the moment that it was made. That version of your code up to that point will be saved for you to revert back to or look back at. When writing code, it's considered best practice to commit every time you have a meaningful change in the code. This will create a timeline of your progress and show that your finished code didn't appear out of nowhere. -In other words, make a commit if you get a piece of code you are working on to function like you want it to, fix a typo, or fix a bug. As you gain experience, you will develop a better feel for what should be committed! +In other words, make a commit if you get a piece of code you are working on to function like you want it to, fix a typo, or fix a bug. As you gain experience, you will develop a better feel for what should be committed! There will come a time when you are working on a project and you FINALLY get something just right (this would be a good time to commit), and then maybe 30 seconds to a few days later it breaks. You have no idea what you changed, everything *looks* to be the same and you don’t remember editing that line, but alas, it isn’t working how you want it anymore. You’d be able to go back through your commit history and either revert your code back to the last commit you made when you first got that part working or go back and see what your code looked like at that point in time. -### Assignment +### Assignment
@@ -94,8 +94,8 @@ There will come a time when you are working on a project and you FINALLY get som This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -* What are two benefits of having well-written commit messages and a good commit history? -* How many characters should the subject line of your commit message be? +- [What are two benefits of having well-written commit messages and a good commit history?](https://cbea.ms/git-commit/#intro) +- [How many characters should the subject line of your commit message be?](https://cbea.ms/git-commit/#limit-50) ### Additional resources From 380ac8ab856018752d2657b9d158385dd3cde6dd Mon Sep 17 00:00:00 2001 From: Sushant Singh Chauhan Date: Sun, 10 Sep 2023 20:36:21 +0530 Subject: [PATCH 16/70] Updated list layout --- git/foundations_git/introduction_to_git.md | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/git/foundations_git/introduction_to_git.md b/git/foundations_git/introduction_to_git.md index 705308aea07..9376057f292 100644 --- a/git/foundations_git/introduction_to_git.md +++ b/git/foundations_git/introduction_to_git.md @@ -24,36 +24,36 @@ For now, let's learn what Git is and why it's so powerful! This section contains a general overview of topics that you will learn in this lesson. - - Explain what Git and GitHub are and the differences between the two. - - Describe the differences between Git and a text editor in terms of what they save and their record keeping. - - Describe why Git is useful for an individual developer and a team of developers. + - Explain what Git and GitHub are and the differences between the two. + - Describe the differences between Git and a text editor in terms of what they save and their record keeping. + - Describe why Git is useful for an individual developer and a team of developers. ### Assignment
- 1. Read Chapter 1.1 through 1.4 in [this book about version control](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) to learn the differences between local, centralized, and distributed version control systems. - 2. Watch [this video](https://www.youtube.com/watch?v=2ReR1YJrNOM) about what Git is and how it can improve the workflow of both an individual and a team of developers. - 3. Watch [this video](https://www.youtube.com/watch?v=1h9_cB9mPT8&feature=youtu.be&t=13s) for some history on Git and GitHub, and make sure you know the difference between the two. Git is a technology used in the command line while GitHub is a [website](https://github.com/) you can visit. - 4. If you haven't yet installed Git, visit the [Setting Up Git](https://www.theodinproject.com/lessons/foundations-setting-up-git) lesson. - 5. Take a look at The Odin Project's very own [GitHub repository](https://github.com/TheOdinProject/curriculum). This is where all the lessons are stored! While you're there, look at all our [contributors](https://github.com/TheOdinProject/curriculum/graphs/contributors) to gain an appreciation for how Git records all collaborative efforts and how GitHub visually represents this. + 1. Read Chapter 1.1 through 1.4 in [this book about version control](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) to learn the differences between local, centralized, and distributed version control systems. + 2. Watch [this video](https://www.youtube.com/watch?v=2ReR1YJrNOM) about what Git is and how it can improve the workflow of both an individual and a team of developers. + 3. Watch [this video](https://www.youtube.com/watch?v=1h9_cB9mPT8&feature=youtu.be&t=13s) for some history on Git and GitHub, and make sure you know the difference between the two. Git is a technology used in the command line while GitHub is a [website](https://github.com/) you can visit. + 4. If you haven't yet installed Git, visit the [Setting Up Git](https://www.theodinproject.com/lessons/foundations-setting-up-git) lesson. + 5. Take a look at The Odin Project's very own [GitHub repository](https://github.com/TheOdinProject/curriculum). This is where all the lessons are stored! While you're there, look at all our [contributors](https://github.com/TheOdinProject/curriculum/graphs/contributors) to gain an appreciation for how Git records all collaborative efforts and how GitHub visually represents this.
### Knowledge check This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -* What kind of program is Git? -* What are the differences between Git and a text editor in terms of what they save and their record keeping? -* Does Git work at a local or remote level? -* Does GitHub work at a local or remote level? -* Why is Git useful for developers? -* Why are Git and GitHub useful for a team of developers? +- What kind of program is Git? +- What are the differences between Git and a text editor in terms of what they save and their record keeping? +- Does Git work at a local or remote level? +- Does GitHub work at a local or remote level? +- Why is Git useful for developers? +- Why are Git and GitHub useful for a team of developers? ### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. -* [What is Git and GitHub?](https://content.red-badger.com/resources/what-is-git-and-github) -* [What is version control?](https://www.atlassian.com/git/tutorials/what-is-version-control) -* [What is Git](https://www.atlassian.com/git/tutorials/what-is-git) +- [What is Git and GitHub?](https://content.red-badger.com/resources/what-is-git-and-github) +- [What is version control?](https://www.atlassian.com/git/tutorials/what-is-version-control) +- [What is Git](https://www.atlassian.com/git/tutorials/what-is-git) From c1df7a548669e457aef4e0b89ea058efce4a9ab3 Mon Sep 17 00:00:00 2001 From: MaoShizhong <122839503+MaoShizhong@users.noreply.github.com> Date: Mon, 11 Sep 2023 03:13:37 +0100 Subject: [PATCH 17/70] Use arrow functions over traditional func exp (#26310) Fixed spacing between keywords and parens for consistency across file. --- .../authentication/authentication_basics.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nodeJS/authentication/authentication_basics.md b/nodeJS/authentication/authentication_basics.md index 9dd7dc4c493..5a781989d21 100644 --- a/nodeJS/authentication/authentication_basics.md +++ b/nodeJS/authentication/authentication_basics.md @@ -156,7 +156,7 @@ We need to add 3 functions to our app.js file, and then add an app.post for our #### Function one : setting up the LocalStrategy ~~~javascript passport.use( - new LocalStrategy(async(username, password, done) => { + new LocalStrategy(async (username, password, done) => { try { const user = await User.findOne({ username: username }); if (!user) { @@ -180,11 +180,11 @@ This function is what will be called when we use the `passport.authenticate()` f To make sure our user is logged in, and to allow them to _stay_ logged in as they move around our app, passport will use some data to create a cookie which is stored in the user's browser. These next two functions define what bit of information passport is looking for when it creates and then decodes the cookie. The reason they require us to define these functions is so that we can make sure that whatever bit of data it's looking for actually exists in our Database! For our purposes, the functions that are listed in the passport docs will work just fine. ~~~javascript -passport.serializeUser(function(user, done) { +passport.serializeUser((user, done) => { done(null, user.id); }); -passport.deserializeUser(async function(id, done) { +passport.deserializeUser(async (id, done) => { try { const user = await User.findById(id); done(null, user); @@ -270,7 +270,7 @@ As one last step... let's make that log out link actually work for us. As you ca ~~~javascript app.get("/log-out", (req, res, next) => { - req.logout(function (err) { + req.logout((err) => { if (err) { return next(err); } @@ -283,12 +283,12 @@ You should now be able to visit `/sign-up` to create a new user, then log-in usi #### A quick tip -In express, you can set and access various local variables throughout your entire app (even in views) with the `locals` object. We can use this knowledge to write ourselves a custom middleware that will simplify how we access our current user in our views. +In express, you can set and access various local variables throughout your entire app (even in views) with the `locals` object. We can use this knowledge to write ourselves a custom middleware that will simplify how we access our current user in our views. Middleware functions are simply functions that take the `req` and `res` objects, manipulate them, and pass them on through the rest of the app. ~~~javascript -app.use(function(req, res, next) { +app.use((req, res, next) => { res.locals.currentUser = req.user; next(); }); @@ -306,7 +306,7 @@ Once it's installed you need to require it at the top of your app.js and then we #### Storing hashed passwords: -Password hashes are the result of passing the user's password through a one-way hash function, which maps variable sized inputs to fixed size pseudo-random outputs. +Password hashes are the result of passing the user's password through a one-way hash function, which maps variable sized inputs to fixed size pseudo-random outputs. Edit your `app.post("/sign-up")` to use the bcrypt.hash function which works like this: @@ -320,7 +320,7 @@ bcrypt.hash("somePassword", 10, async (err, hashedPassword) => { The second argument is the length of the "salt" to use in the hashing function; salting a password means adding extra random characters to it, the password plus the extra random characters are then fed into the hashing function. Salting is used to make a password hash output unique, even for users who use the same password, and to protect against [rainbow table](https://en.wikipedia.org/wiki/Rainbow_table) and [dictionary](https://en.wikipedia.org/wiki/Dictionary_attack) attacks. Usually, the salt gets stored in the database in the clear next to the hashed value, but in our case, there is no need to do so because the hashing algorithm that `bcryptjs` uses includes the salt automatically with the hash. - + The hash function is somewhat slow, so all of the DB storage stuff needs to go inside the callback. Check to see if you've got this working by signing up a new user with a simple password, then go look at your DB entries to see how it's being stored. If you've done it right, your password should have been transformed into a really long random string. It's important to note that _how_ hashing works is beyond the scope of this lesson. To learn more about the subject consider reading [This wikipedia article](https://en.wikipedia.org/wiki/Cryptographic_hash_function). @@ -347,10 +347,10 @@ This section contains helpful links to other content. It isn't required, so cons - If you like video content, watch this [Youtube Playlist](https://www.youtube.com/playlist?list=PLYQSCk-qyTW2ewJ05f_GKHtTIzjynDgjK). You just need to watch the first 6 videos. -- [This video](https://www.youtube.com/watch?v=8ZtInClXe1Q) gives a broad overview of some of the different methods to store passwords in databases, and the risks of some of them. +- [This video](https://www.youtube.com/watch?v=8ZtInClXe1Q) gives a broad overview of some of the different methods to store passwords in databases, and the risks of some of them. -### Knowledge checks +### Knowledge checks This section contains questions for you to check your understanding of this lesson. If you’re having trouble answering the questions below on your own, review the material above to find the answer. - Which passportJS strategy did we use in this lesson? From b4c0548e43a32945b3e17b7e3d4d069378c0eb3b Mon Sep 17 00:00:00 2001 From: JakeBrowning90 <110778993+JakeBrowning90@users.noreply.github.com> Date: Sun, 10 Sep 2023 22:16:31 -0400 Subject: [PATCH 18/70] Update mocking_callbacks_and_components.md (#26311) Changed the example test file from'./FavoriteInput';" to './CustomButton';" to match the name of the example Component file. --- react/react_testing/mocking_callbacks_and_components.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/react_testing/mocking_callbacks_and_components.md b/react/react_testing/mocking_callbacks_and_components.md index c9cc42ea409..a0054aa7e2b 100644 --- a/react/react_testing/mocking_callbacks_and_components.md +++ b/react/react_testing/mocking_callbacks_and_components.md @@ -40,7 +40,7 @@ Nothing fancy. `CustomButton` is a simple component with a couple props passed i import { vi } from 'vitest' import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import CustomButton from "./FavoriteInput"; +import CustomButton from "./CustomButton"; describe("CustomButton", () => { it("should render a button with the text 'Click me'", () => { From b4704165c5963f8ccbc294a8455b698e635d8833 Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Mon, 11 Sep 2023 11:35:47 -0700 Subject: [PATCH 19/70] Reformatted the "Additional resources" section for added clarity. Injected a link into first paragraph, improved grammar, phrasing, and added an additional tutorial. --- foundations/javascript_basics/fundamentals-2.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index 8be368b6c01..6742c914507 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -84,6 +84,6 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. -- Regular expressions, commonly known as regex, are a tool that matches or locates patterns in strings for string validation. Although it shouldn't be your immediate solution this early on, you can still use this resource to understand how websites know that `myemail@com` isn't a valid email address. On top of that, other solutions to filter out strings exist, and regex is considered a slow operation. -- [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). -- [When to avoid regular expressions](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions). +- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its capabilities can make it a worthwhile addition to your arsenal. + - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). + - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). \ No newline at end of file From e6da60825586aa82b82b4adb2c51b3eac76ae81e Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Mon, 11 Sep 2023 11:40:34 -0700 Subject: [PATCH 20/70] Reformatted the "Additional resources" section for added clarity. Injected an MDN link into first paragraph, improved grammar & phrasing, and added supplemental links. --- foundations/javascript_basics/fundamentals-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index 6742c914507..9efa99540bb 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -84,6 +84,6 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. -- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its capabilities can make it a worthwhile addition to your arsenal. +- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile tool to your arsenal. - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). \ No newline at end of file From ef0b4befe29bd0ab995540ffc001a4b2ef8373bc Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Mon, 11 Sep 2023 11:43:48 -0700 Subject: [PATCH 21/70] Reformatted the "Additional resources" section for added clarity. Injected an MDN link into first paragraph, improved grammar & phrasing, and added supplemental links. --- foundations/javascript_basics/fundamentals-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index 9efa99540bb..c27fdca2121 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -84,6 +84,6 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. -- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile tool to your arsenal. +- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile addition to your arsenal. - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). \ No newline at end of file From 55ea25b094df4ab2cb71bd01776e7d80f61736b1 Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Mon, 11 Sep 2023 11:49:51 -0700 Subject: [PATCH 22/70] Reformatted the "Additional resources" section for added clarity. Injected an MDN link into first paragraph, improved grammar & phrasing, and added supplemental links. --- foundations/javascript_basics/fundamentals-2.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index c27fdca2121..6300d28572e 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -84,6 +84,7 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. -- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile addition to your arsenal. +- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile addition to your arsenal. + - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). - - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). \ No newline at end of file + \ No newline at end of file From 66e61640db6dacb4ee594933d60f78df3a51bb6b Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Mon, 11 Sep 2023 11:51:46 -0700 Subject: [PATCH 23/70] Reformatted the "Additional resources" section for added clarity. Injected an MDN link into first paragraph, improved grammar & phrasing, and added supplemental links. --- foundations/javascript_basics/fundamentals-2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index 6300d28572e..72e1da86dc2 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -85,6 +85,6 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. - [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile addition to your arsenal. - - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk). - - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD). + - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk) + - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD) \ No newline at end of file From b1ff8da0f0908a44925da2413a69513d6a9731fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Olejniczak?= <0stanislawolejniczak0@gmail.com> Date: Tue, 12 Sep 2023 02:37:05 +0200 Subject: [PATCH 24/70] Fix additional resources (#26315) --- react/the_react_ecosystem/fetching_data_in_react.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/react/the_react_ecosystem/fetching_data_in_react.md b/react/the_react_ecosystem/fetching_data_in_react.md index 4904f7ecd27..d9dfb37955e 100644 --- a/react/the_react_ecosystem/fetching_data_in_react.md +++ b/react/the_react_ecosystem/fetching_data_in_react.md @@ -247,8 +247,8 @@ This section contains questions for you to check your understanding of this less - Why should you manually throw errors in fetch requests? - How can you avoid waterfalling requests? -## Additional resources +### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. -- [TanStack Query documentation](https://tanstack.com/query/latest/docs/react/overview) is a library that handles all the necessary states and offers built-in support for major features, such as caching. +- [TanStack Query](https://tanstack.com/query/latest/docs/react/overview) is a library that handles all the necessary states and offers built-in support for major features, such as caching. From 49815fb729345b2976fdcd4f9b3b70bed2c2884d Mon Sep 17 00:00:00 2001 From: Fred Love Date: Mon, 11 Sep 2023 21:07:34 -0400 Subject: [PATCH 25/70] Remove duplicate link reading assignment (#26321) Two links in the first assignment link to same content. I removed the second one and replaced it with plain text. --- nodeJS/apis/api_basics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodeJS/apis/api_basics.md b/nodeJS/apis/api_basics.md index fa7f2b66210..e0f238ca235 100644 --- a/nodeJS/apis/api_basics.md +++ b/nodeJS/apis/api_basics.md @@ -53,7 +53,7 @@ For now, it is acceptable to just allow access from any origin. This makes devel
-1. [This article](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design) is a good resource for understanding and [organizing](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/#h-use-nouns-instead-of-verbs-in-endpoint-paths) RESTful APIs. If you want to code along with the first article, please note this includes the body-parser middleware to parse JSON data on the request body, however since Express 4.16.0 this parsing functionality has been incorporated directly into the express package itself. +1. [This article](https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design) is a good resource for understanding and organizing RESTful APIs. If you want to code along with the first article, please note this includes the body-parser middleware to parse JSON data on the request body, however since Express 4.16.0 this parsing functionality has been incorporated directly into the express package itself. 1. Read and code along with [this tutorial](https://www.robinwieruch.de/node-express-server-rest-api/) on setting up a REST API in Express. This is one of the best Express tutorials we've come across, it also talks about modular code organization, writing middleware, and links to some great extra info at the end.
From 4cf38f2714c27882ec5acae7755cedbfd3fa9a44 Mon Sep 17 00:00:00 2001 From: Hannah Lin Date: Tue, 12 Sep 2023 16:23:57 -0400 Subject: [PATCH 26/70] update git-basics lesson per newest styling guide --- git/foundations_git/git_basics.md | 68 ++++++++++++++++--------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/git/foundations_git/git_basics.md b/git/foundations_git/git_basics.md index 827a6f348cf..396958d375f 100644 --- a/git/foundations_git/git_basics.md +++ b/git/foundations_git/git_basics.md @@ -6,9 +6,9 @@ In this lesson, we'll cover common Git commands used to manage your projects and This section contains a general overview of topics that you will learn in this lesson. -- How to create a repository on GitHub. -- How to get files to and from GitHub. -- How to take "snapshots" of your code. +- How to create a repository on GitHub. +- How to get files to and from GitHub. +- How to take "snapshots" of your code. ### Assignment @@ -16,11 +16,11 @@ This section contains a general overview of topics that you will learn in this l #### Before you start! -- Github recently updated the way it names the default branch. This means you need to make sure you are using a recent version of git (2.28 or later). You can check your version by running: +- Github recently updated the way it names the default branch. This means you need to make sure you are using a recent version of git (2.28 or later). You can check your version by running: `git --version` -- If you haven't already, set your local default git branch to `main`. You can do so by running: +- If you haven't already, set your local default git branch to `main`. You can do so by running: `git config --global init.defaultBranch main` -- For more information on the change from `master` to `main` see [GitHub's Renaming Repository](https://github.com/github/renaming). +- For more information on the change from `master` to `main` see [GitHub's Renaming Repository](https://github.com/github/renaming). #### Create the repository @@ -135,23 +135,23 @@ When trying to make simple changes to the files in your repo, such as attempting This is a reference list of the most commonly used Git commands. (You might consider bookmarking this handy page.) Try to familiarize yourself with the commands so that you can eventually remember them all: -- Commands related to a remote repository: - - `git clone git@github.com:USER-NAME/REPOSITORY-NAME.git` - - `git push` or `git push origin main` (Both accomplish the same goal in this context) -- Commands related to the workflow: - - `git add .` - - `git commit -m "A message describing what you have done to make this snapshot different"` -- Commands related to checking status or log history - - `git status` - - `git log` +- Commands related to a remote repository: + - `git clone git@github.com:USER-NAME/REPOSITORY-NAME.git` + - `git push` or `git push origin main` (Both accomplish the same goal in this context) +- Commands related to the workflow: + - `git add .` + - `git commit -m "A message describing what you have done to make this snapshot different"` +- Commands related to checking status or log history + - `git status` + - `git log` The basic Git syntax is `program | action | destination`. For example, -- `git add .` is read as `git | add | .`, where the period represents everything in the current directory; -- `git commit -m "message"` is read as `git | commit -m | "message"`; and -- `git status` is read as `git | status | (no destination)`. +- `git add .` is read as `git | add | .`, where the period represents everything in the current directory; +- `git commit -m "message"` is read as `git | commit -m | "message"`; and +- `git status` is read as `git | status | (no destination)`. ### Git best practices @@ -195,22 +195,26 @@ For now, concentrate on using the basics of Git that you've learned here for all This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -- [How do you create a new repository on GitHub?](#new-github-repo) -- [How do you copy a repository onto your local machine from GitHub?](#github-to-local) -- [What is the default name of your remote connection?](#default-remote) -- [Explain what `origin` is in `git push origin main`.](#origin-push) -- [Explain what `main` is in `git push origin main`.](#main-push) -- [Explain the two-stage system that Git uses to save files.](#two-stages) -- [How do you check the status of your current repository?](#git-status) -- [How do you add files to the staging area in git?](#git-add) -- [How do you commit the files in the staging area and add a descriptive message?](#git-commit) -- [How do you push your changes to your repository on GitHub?](#git-push) -- [How do you look at the history of your previous commits?](#git-log) +- [Introduction](#introduction) +- [Lesson overview](#lesson-overview) +- [Assignment](#assignment) + - [Before you start!](#before-you-start) + - [Create the repository](#create-the-repository) + - [Use the Git workflow](#use-the-git-workflow) + - [Modify a file or two](#modify-a-file-or-two) + - [Push your work to GitHub](#push-your-work-to-github) +- [Note/Warning](#notewarning) +- [Cheatsheet](#cheatsheet) +- [Git best practices](#git-best-practices) +- [Changing the Git commit message editor](#changing-the-git-commit-message-editor) +- [Conclusion](#conclusion) +- [Knowledge check](#knowledge-check) +- [Additional resources](#additional-resources) ### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. -- [Complete Git and GitHub Tutorial from Basics to Advanced](https://www.youtube.com/watch?v=apGV9Kg7ics) - by Kunal Kushwaha -- [Git - Reference](https://git-scm.com/docs) -- [This article about adding locally hosted code to GitHub](https://docs.github.com/en/migrations/importing-source-code/using-the-command-line-to-import-source-code/adding-locally-hosted-code-to-github) will walk you through creating a git repository from a local folder and adding it to GitHub. +- [Complete Git and GitHub Tutorial from Basics to Advanced](https://www.youtube.com/watch?v=apGV9Kg7ics) - by Kunal Kushwaha +- [Git - Reference](https://git-scm.com/docs) +- [This article about adding locally hosted code to GitHub](https://docs.github.com/en/migrations/importing-source-code/using-the-command-line-to-import-source-code/adding-locally-hosted-code-to-github) will walk you through creating a git repository from a local folder and adding it to GitHub. From 4426995ede874743d1f3624e6c33eb478bf1dc77 Mon Sep 17 00:00:00 2001 From: Danylo Zymbalevskyi <107991460+danzym@users.noreply.github.com> Date: Wed, 13 Sep 2023 15:12:16 +0300 Subject: [PATCH 27/70] fix: fix of typo in javascript objects and object constructors lesson (#26325) --- .../objects_and_object_constructors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/organizing_your_javascript_code/objects_and_object_constructors.md b/javascript/organizing_your_javascript_code/objects_and_object_constructors.md index 935397dc2a3..390d0c86718 100644 --- a/javascript/organizing_your_javascript_code/objects_and_object_constructors.md +++ b/javascript/organizing_your_javascript_code/objects_and_object_constructors.md @@ -43,7 +43,7 @@ This section contains a general overview of topics that you will learn in this l - How to write an object constructor and instantiate the object. - Describe what a prototype is and how it can be used. - Explain prototypal inheritance. -- Understand the basic do's and don't's of prototypical inheritance. +- Understand the basic do's and don't's of prototypal inheritance. - Explain what `Object.create` does. - Explain what the `this` keyword is. @@ -373,7 +373,7 @@ This section contains questions for you to check your understanding of this less - [Write an object constructor and instantiate the object.](#object-constructors) - [Describe what a prototype is and how it can be used.](#the-prototype) - [Explain prototypal inheritance.](https://javascript.info/prototype-inheritance) -- [Understand the basic do's and don't's of prototypical inheritance.](#recommended-method-for-prototypal-inheritance) +- [Understand the basic do's and don't's of prototypal inheritance.](#recommended-method-for-prototypal-inheritance) - [Explain what `Object.create` does.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) - [How does `this` behave in different situations?](https://dmitripavlutin.com/gentle-explanation-of-this-in-javascript/) From 9bbfa0d75cb0bfb58b2bcdd05d047d84d0c0db81 Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Thu, 14 Sep 2023 00:40:49 +0300 Subject: [PATCH 28/70] Provide specific link (#26326) --- nodeJS/authentication/authentication_basics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodeJS/authentication/authentication_basics.md b/nodeJS/authentication/authentication_basics.md index 5a781989d21..3c551a93b0b 100644 --- a/nodeJS/authentication/authentication_basics.md +++ b/nodeJS/authentication/authentication_basics.md @@ -32,7 +32,7 @@ To begin, let's set up a very minimal express app with a single MongoDB model fo npm install express express-session mongoose passport passport-local ejs ~~~ -**Mongoose Update**: With the new 7.0.1 version of Mongoose callbacks are no longer supported when querying a database. A promise will be returned instead, meaning that you will now have to use async/await or promises to achieve the same results. If you need a refresher on async/await you can find it in the [Async And Await Lesson](https://www.theodinproject.com/lessons/node-path-javascript-async-and-await) from the JavaScript Course. As you progress through this lesson you will see a blend of using async/await with try/catch blocks as well as other functions that use callbacks, which you've seen as you've progressed through the NodeJS course. You can read more about this change [here](https://mongoosejs.com/docs/migrating_to_7.html). +**Mongoose Update**: With the new 7.0.1 version of Mongoose callbacks are no longer supported when querying a database. A promise will be returned instead, meaning that you will now have to use async/await or promises to achieve the same results. If you need a refresher on async/await you can find it in the [Async And Await Lesson](https://www.theodinproject.com/lessons/node-path-javascript-async-and-await) from the JavaScript Course. As you progress through this lesson you will see a blend of using async/await with try/catch blocks as well as other functions that use callbacks, which you've seen as you've progressed through the NodeJS course. You can read more about this change [here](https://mongoosejs.com/docs/migrating_to_7.html#dropped-callback-support). Next, let's create our `app.js`: From 07fa2f88b2eaac8136b2d6c911d09fdb6917b654 Mon Sep 17 00:00:00 2001 From: Ben R Date: Wed, 13 Sep 2023 17:19:57 -0700 Subject: [PATCH 29/70] change term from social network to professional network --- ..._networking.md => professional_networking.md} | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) rename getting_hired/preparing_for_job_search/{social_networking.md => professional_networking.md} (84%) diff --git a/getting_hired/preparing_for_job_search/social_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md similarity index 84% rename from getting_hired/preparing_for_job_search/social_networking.md rename to getting_hired/preparing_for_job_search/professional_networking.md index efd0e4c6fe3..bb52861768d 100644 --- a/getting_hired/preparing_for_job_search/social_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -1,19 +1,19 @@ ### Introduction -A robust social network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. +A robust professional network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. Building genuine connections with people takes time, however, so we recommend you start investing in this activity now. -### What is a social network? +### What is a professional network? -Your social network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn help out. +Your professional network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn help out. The network that will help you on your journey to becoming a software developer will mostly consist of people working in software development and adjacent roles, like recruitment or management. Take stock of your network in this field now. Chances are you might benefit from expanding it? -### Why is a social network useful? +### Why is a professional network useful? You can probably think of instances where you were stuck on a task and asked someone for help. This was you exercising your network. You can do the same with your software developer network to help you with many things like gather information, make decisions, and find a job. @@ -30,7 +30,7 @@ So, how do you tap into the hidden jobs market? Through your network. If your ne This is not all to say you should refrain entirely from applying on posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the [Getting Hired](https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/getting-hired) course. -### How to build a social network +### How to build a professional network Just like building your technical skills, networking requires careful attention and a strategic approach. A local network allows you to build strong, in-person connections while a virtual network allows you to connect with people all over the world. Both are useful and a strategy that focuses on the two will be the most robust. @@ -59,7 +59,7 @@ Your virtual networking options are much broader and there’s no shortage of pl ### Build Genuine Connections -The economy of social networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people ‘cold’ and ask them out of the blue to connect with you, or for a favor like ‘help me get this job in your company’ or ‘please be my mentor’. This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. +The economy of professional networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people ‘cold’ and ask them out of the blue to connect with you, or for a favor like ‘help me get this job in your company’ or ‘please be my mentor’. This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. Your best strategy is to start conversations with a genuine interest in the person and connect on a mutual interest. For example, you could review someone’s profile on LinkedIn and find something in common, or begin a conversation in-person with questions related to what the person does, how they got to where they are, and what challenges they face in their daily work. Make it about them, not you. Show that you are interested in them as a person, not that you want them to give you something. Actively listen to what they say and ask follow-up questions and even offer to help with something if you are in a position to do so. Think of the interaction like dating, you don’t ask someone to be your partner in the first question (do you? lol), so the same applies here. If your initial conversation goes well, then you can follow up with a request to connect. @@ -69,9 +69,9 @@ If you’re still not sure how to get started virtually, find one or two people ### Maintain Your Network -Your social network is a dynamic and organic entity. Much like a garden, it will take some maintenance and attention to keep it in shape. You can do this by asking and answering questions in online communities, sending messages to your connections, and attending in-person events or scheduling periodic coffee-chats with your closest connections. Ideally, this does not feel like a chore. Rather, it’s something you naturally do because you enjoy it and get value from the interactions. +Your professional network is a dynamic and organic entity. Much like a garden, it will take some maintenance and attention to keep it in shape. You can do this by asking and answering questions in online communities, sending messages to your connections, and attending in-person events or scheduling periodic coffee-chats with your closest connections. Ideally, this does not feel like a chore. Rather, it’s something you naturally do because you enjoy it and get value from the interactions. -There is so much more to building a social network, but this lesson should give you a good start. Remember, it will take time, so start early and be genuine. Good luck! +There is so much more to building a professional network, but this lesson should give you a good start. Remember, it will take time, so start early and be genuine. Good luck! ### Additional Resources From 31cbb12605e2f7308794b03f3fd14046187ba73f Mon Sep 17 00:00:00 2001 From: Ben R Date: Wed, 13 Sep 2023 17:22:41 -0700 Subject: [PATCH 30/70] fix links --- .../preparing_for_job_search/professional_networking.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index bb52861768d..8046460674d 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -21,14 +21,14 @@ When it comes to information gathering, search engines and AI can be very helpfu Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). -When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455) are not posted online. This means you are only seeing 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. +When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs are not posted online](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455). This means you are only seeing 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. Think of it from the company’s perspective. Hiring is a pain. In a perfect world, a great candidate would show up instantly any time a new job opened up. This would save them going through the process of posting the job, screening applicants, marking technical assessments and conducting interviews. This all takes time and is very expensive. So it stands to reason why most companies would prefer to hire through the hidden jobs market. So, how do you tap into the hidden jobs market? Through your network. If your network sees you as a trusted individual with a particular skill set, you can be sure they will think of you when matching opportunities arise. You might ask around about potential jobs and receive a heads up of a new opportunity at someone’s company. Better still, you could be recommended for a particular role. Many companies give bonuses to staff who refer a candidate that gets hired. So, the incentive to network and pass names along goes both ways. -This is not all to say you should refrain entirely from applying on posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the [Getting Hired](https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/getting-hired) course. +This is not all to say you should refrain entirely from applying on posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the Getting Hired course. ### How to build a professional network @@ -77,5 +77,5 @@ There is so much more to building a professional network, but this lesson should This section contains helpful links to other content. It isn't required, so consider it supplemental. -* How to use LinkedIn as a developer to get a job in tech - [video](https://www.youtube.com/watch?v=SG5Sb5WTV_g) -* How to Network: a Guide for Remote Software Developers & Engineers - [blog post](https://arc.dev/developer-blog/how-to-network-as-remote-developer/) +* [How to use LinkedIn as a developer to get a job in tech](https://www.youtube.com/watch?v=SG5Sb5WTV_g) +* [How to Network: a Guide for Remote Software Developers & Engineers](https://arc.dev/developer-blog/how-to-network-as-remote-developer/) From ac64e6f055b5386bad3900a4d9ad4a3e7c8dac07 Mon Sep 17 00:00:00 2001 From: Ben R Date: Wed, 13 Sep 2023 17:33:07 -0700 Subject: [PATCH 31/70] add short lesson overview at end of intro --- .../preparing_for_job_search/professional_networking.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 8046460674d..de8ad14eb1d 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -1,11 +1,10 @@ ### Introduction -A robust professional network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. -This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. +A robust professional network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. -Building genuine connections with people takes time, however, so we recommend you start investing in this activity now. +In this lesson we cover what a professional network is, how it might benefit you, and some strategies to consider when to building one. Making genuine connections with people takes time, however, so we recommend you start investing time and effort sooner than later. ### What is a professional network? From 4b0b5fd27a9c850018623dc88b50b5b91662c056 Mon Sep 17 00:00:00 2001 From: Na Date: Thu, 14 Sep 2023 10:01:57 -0400 Subject: [PATCH 32/70] Update Mocking Callbacks And Components I added a note to use vi.mock() instead of jest.mock() if people set up test using vitest. --- react/react_testing/mocking_callbacks_and_components.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/react/react_testing/mocking_callbacks_and_components.md b/react/react_testing/mocking_callbacks_and_components.md index a0054aa7e2b..1e5ef017996 100644 --- a/react/react_testing/mocking_callbacks_and_components.md +++ b/react/react_testing/mocking_callbacks_and_components.md @@ -127,6 +127,14 @@ jest.mock('../submission', () => ({ submission, isDashboardView }) => ( We only render the bare minimum to realize the validity of the component we're testing. Next, we set up our props with fake data and mocked functions. +
+ +#### Note + +The test here used `jest.mock()`. If you followed along and set up your test using vitest, you may use `vi.mock()` instead. See [vi.mock() API](https://vitest.dev/api/vi.html#vi-mock) + +
+ Let's move toward our first assertion. Don't worry too much about the `ProjectSubmissionContext.Provider`. In the context of this test, its purpose is to act as a route to pass in the `allSubmissionsPath` prop. We've already identified the three points of interest that we want to test. We divide them into three test suites for readability purposes using `describe`. In the first suite, we make some assertions if the user has a submission and then some assertions if the user does not. The other suites follow a similar pattern. From 547b29156d863eb04ec908a56c477cf65967bd4c Mon Sep 17 00:00:00 2001 From: jmilljr24 Date: Thu, 14 Sep 2023 18:24:30 -0400 Subject: [PATCH 33/70] Project: Kittens API: Update flickr api endpoint (#26318) * Update flickr api endpoint * Fix api_key and api_sig --- ruby_on_rails/apis/project_kittens_api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby_on_rails/apis/project_kittens_api.md b/ruby_on_rails/apis/project_kittens_api.md index 94fe16f5ce6..fdf71ccce32 100644 --- a/ruby_on_rails/apis/project_kittens_api.md +++ b/ruby_on_rails/apis/project_kittens_api.md @@ -8,7 +8,7 @@ In this warmup, you'll get a chance to poke around with an existing API from Fli 1. Head over to the [Flickr API Documentation Page](http://www.flickr.com/services/api/). You can just google `XYZ API docs` to locate these pages, which is usually much faster and easier than trying to find them by navigating the websites themselves. 1. Look around at the different methods available. They have a couple of different request formats, but check out the RESTful API format by clicking on the link on the left under "Request Formats" called [REST](http://www.flickr.com/services/api/request.rest.html). -1. This shows you the format that a typical API call would take -- you will make your request to the endpoint at `http://api.flickr.com/services/rest/` and include any required data in the GET query string or the POST body. +1. This shows you the format that a typical API call would take -- you will make your request to the endpoint at `https://www.flickr.com/services/rest/` and include any required data in the GET query string or the POST body. 1. Look around at the various methods. How would you upload a photo? How about getting your contacts list? Lots of these methods will require you to authenticate your application or user account first. 1. Check out the [Search method docs](http://www.flickr.com/services/api/flickr.photos.search.html). This request doesn't require you to authenticate, just provide an API key (which you would get by registering as a developer on their platform). Browse through all the arguments that can be used. 1. If you go to the bottom of the Search docs, you'll see a link to the [Search API Explorer](http://www.flickr.com/services/api/explore/flickr.photos.search). This tool lets you actually execute requests using Flickr's API key for illustrative purposes. You just enter the options you want and it will make the request for you. Try entering "puppies" under the "tags" argument, then scroll to the bottom. Change the response "Output" dropdown to JSON then click "Call Method". @@ -21,13 +21,13 @@ In this warmup, you'll get a chance to poke around with an existing API from Fli More interestingly, you can see the URL they used to make the request below that. Let's break it apart here to show the parameters more clearly: ~~~bash - http://api.flickr.com/services/rest/ + https://www.flickr.com/services/rest/ ?method=flickr.photos.search - &api_key=e0eb58bf4b3e29b253e86d6092e69dee + &api_key=bbee7f1e3a3f9cb847b87964d50bf4bc &tags=puppies &format=json &nojsoncallback=1 - &api_sig=200efb63cb01a3d141fff12585e1e20a + &api_sig=d207eb20abbce7c40437a01f759e1388 ~~~ 1. The URL contains the REST endpoint we looked at before, along with our search query and some other options like the API key and format. If you copy and paste that into your browser, you'll see the same batch of output. From c02122292db7c25eb8414dd23492f1f94a5da8d8 Mon Sep 17 00:00:00 2001 From: imHereToHaveFun <106017717+imHereToHaveFun@users.noreply.github.com> Date: Fri, 15 Sep 2023 01:32:52 +0300 Subject: [PATCH 34/70] Change broken link with it's web.archive.org (#26312) --- .../preparing_to_interview_and_interviewing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/applying_and_interviewing/preparing_to_interview_and_interviewing.md b/getting_hired/applying_and_interviewing/preparing_to_interview_and_interviewing.md index a5b1c351128..77850fc7b68 100644 --- a/getting_hired/applying_and_interviewing/preparing_to_interview_and_interviewing.md +++ b/getting_hired/applying_and_interviewing/preparing_to_interview_and_interviewing.md @@ -59,7 +59,7 @@ You'll need to read up on a variety of things that weren't focused on in the pre ### Coding test questions: * [8 Queens](http://jetheis.com/blog/2013/12/01/programming-interview-question-eight-queens/) is a classic problem. -* [Coding for Interviews: Know Thy Standard Libraries](http://blog.codingforinterviews.com/reading-code-standard-libraries/) may be a bit of overkill for a junior, but never hurts if you've got the time. +* [Coding for Interviews: Know Thy Standard Libraries](http://web.archive.org/web/20210617041720/http://blog.codingforinterviews.com/reading-code-standard-libraries/) may be a bit of overkill for a junior, but never hurts if you've got the time. * [Project Euler](http://projecteuler.net/) has more generic and challenging problems that must be solved efficiently (they can be very computationally intensive). * [Code Wars](https://www.codewars.com) has programming problems and examples of best practice. Join 'The Odin Project' clan for allies. * [HackerRank](https://www.hackerrank.com/) provides challenges, drills, and competitions on algorithms & data structures. From f38f2fcc2fcd6ebf9d81cb6a920684dc00be8820 Mon Sep 17 00:00:00 2001 From: Ben R Date: Thu, 14 Sep 2023 20:31:25 -0700 Subject: [PATCH 35/70] add link to article on informational interviews --- .../preparing_for_job_search/professional_networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index de8ad14eb1d..8f66437fed2 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -16,7 +16,7 @@ The network that will help you on your journey to becoming a software developer You can probably think of instances where you were stuck on a task and asked someone for help. This was you exercising your network. You can do the same with your software developer network to help you with many things like gather information, make decisions, and find a job. -When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to conduct an informational interview with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. +When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to [conduct an informational interview](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/) with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). From 856bb8d3169bfb6c4fed47ff113eb077e906a0fe Mon Sep 17 00:00:00 2001 From: laxcapy <136144210+laxcapy@users.noreply.github.com> Date: Sat, 16 Sep 2023 15:47:56 +1000 Subject: [PATCH 36/70] Fix to Level 3 Headings --- ruby_on_rails/testing/unit_testing.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby_on_rails/testing/unit_testing.md b/ruby_on_rails/testing/unit_testing.md index 5479e01ae32..51218c9f279 100644 --- a/ruby_on_rails/testing/unit_testing.md +++ b/ruby_on_rails/testing/unit_testing.md @@ -10,13 +10,13 @@ This section contains a general overview of topics that you will learn in this l * Why are unit tests important? * Unit tests in the context of Ruby on Rails. -## What are unit tests? +### What are unit tests? A unit test is testing a single unit of code to ensure that method/unit works as it is supposed to! In Ruby on Rails your models are one of the areas that should be covered with unit tests. These model tests specifically are used to test the logic behind your model objects. This can include validating user inputs from form submissions and other logic between models. Such as if you need to ensure your object method for generating discounts work properly. It's important as you scale your projects to ensure that the logic behind your models works as your project consistently expands. This helps make the project more maintainable as the tests provide a safety net to ensure existing functionality continues working as expected when models need to be expanded or modified. Earlier you used RSpec for testing projects in the Ruby section. While Ruby on Rails comes with it's own testing framework. RSpec is a very popular framework for testing even in Ruby on Rail's. As such we will be using RSpec for the Ruby on Rails testing section. -## Setting up RSpec +### Setting up RSpec Installing RSpec for rails is a relatively straightforward task. @@ -34,7 +34,7 @@ Next visit the [rspec-rails installation guide](https://github.com/rspec/rspec-r There you will find different folders for different areas of your application such as controllers, models, system, etc. When you use the command to generate a model, controller, etc. The spec file will be created in the corresponding folder to the object that you created. If you create a spec file manually, make sure you're creating it in the correct folder, such as a controller spec file within the controller folder. There will also be a rails_helper and spec_helper files. These RSpec files are where you can configure your test environment. -## Example test +### Example test Each model should have it's own spec file within the spec/models folder. This will be created when you use the following command. From 2aa40dd0698850ba0aa15ca4d557ff98e2af9b1d Mon Sep 17 00:00:00 2001 From: laxcapy <136144210+laxcapy@users.noreply.github.com> Date: Sat, 16 Sep 2023 15:49:35 +1000 Subject: [PATCH 37/70] Fix to Level 3 Headings --- ruby_on_rails/testing/model_testing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby_on_rails/testing/model_testing.md b/ruby_on_rails/testing/model_testing.md index 5683dbb44f4..555c836000b 100644 --- a/ruby_on_rails/testing/model_testing.md +++ b/ruby_on_rails/testing/model_testing.md @@ -10,11 +10,11 @@ This section contains a general overview of topics that you will learn in this l * How do I run a model test? * How to structure model testing? -## What are model tests? +### What are model tests? A model test is a unit test in the context of Ruby on Rails. When testing our models we usually want to focus on testing the business logic. Essentially what goes on behind each model that enables the user experience to work correctly. This could mean ensuring promotion tickets prices are correct, only correct form data is accepted, custom user verification etc. It's important to note that each model should have it's own file in the `spec/models` file. This is helpful for keeping your model tests organized and readable. -## Setting the test +### Setting the test The first tool that we are going to go over for setting up the data is [factory bot](https://github.com/thoughtbot/factory_bot). Factory bot is a gem that you can use to set up test data and create necessary data for your tests. Adding Factory bot is similar to adding other testing gems. Add the following line to the to the following section in your Gemfile. @@ -42,7 +42,7 @@ Make sure to require this file in `rails_helper.rb`. While you can require the f The last thing you might be wondering is how the test database clears itself in between it's tests. Rail's does this automatically for you, however if Rail's is not doing it for you make sure your following the instructions in the rails_helper.rb file and make sure to ask in the [Discord](https://discord.com/channels/505093832157691914/690591236922409012) first! If you are interested, you can learn more about database cleaning in the additional resources. -## Creating a factory +### Creating a factory Below is an example of a user factory. Notice that the factory will be a User class based off of the name of your factory. You can also define as many attributes as you want and it can be useful to focus on adding only the attributes you are testing and adding them as need be. @@ -61,7 +61,7 @@ end When creating a factory bot record you have the choice of using the `create(:user)` which returns a saved instance of the object from your database or `build(:user)` which returns an unsaved instance of an object. -## Example model test +### Example model test In the following example one of the things we often see when users sign up is that sites will ask for an email to send a user notifications for example. RSpec can help you test this by utilizing model tests. Let's take a look at what a requiring the presence of a user email would look like in a model and the corresponding tests. From d52413db3a7dab2c1a0f8f381136e7898b045fab Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Sat, 16 Sep 2023 18:18:20 +0300 Subject: [PATCH 38/70] Databases: Fix heading (#26330) * Remove space * Update databases/databases/databases_and_sql.md --------- Co-authored-by: Manon <81025586+ManonLef@users.noreply.github.com> --- databases/databases/databases_and_sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/databases/databases/databases_and_sql.md b/databases/databases/databases_and_sql.md index f133f55252a..53afa662f05 100644 --- a/databases/databases/databases_and_sql.md +++ b/databases/databases/databases_and_sql.md @@ -151,7 +151,7 @@ This section contains questions for you to check your understanding of this less - [In which situation would you use the `HAVING` function?](#having-function) - [Why can't I just use Ruby to process my database data?](#sql-is-faster-than-ruby) - ### Additional Resources +### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. - Odinite Hunter D made his excellent notes into a [Git Book on SQL](https://hunter-ducharme.gitbook.io/sql-basics) which you should totally check out if you want a decent resource. From 046231d915fe4d57bce3e428191f2a0cbb1737e6 Mon Sep 17 00:00:00 2001 From: Fred Love Date: Sat, 16 Sep 2023 11:32:01 -0400 Subject: [PATCH 39/70] Replace dead link with wayback machine result (#26331) --- nodeJS/apis/api_security.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nodeJS/apis/api_security.md b/nodeJS/apis/api_security.md index ffe771e1556..57569838d07 100644 --- a/nodeJS/apis/api_security.md +++ b/nodeJS/apis/api_security.md @@ -29,7 +29,7 @@ This strategy, while particularly useful with APIs can be used with a traditiona ### Additional resources This section contains helpful links to other content. It isn't required, so consider it supplemental. -- [This article](https://laptrinhx.com/a-practical-guide-for-jwt-authentication-using-node-js-and-express-917791379/) goes even further in depth than the one that we posted above. It provides a little greater understanding but is harder to follow. +- [This article](https://web.archive.org/web/20230207144457/https://laptrinhx.com/a-practical-guide-for-jwt-authentication-using-node-js-and-express-917791379/) goes even further in depth than the one that we posted above. It provides a little greater understanding but is harder to follow. - [This article](https://medium.com/@paul.allies/stateless-auth-with-express-passport-jwt-7a55ffae0a5c) covers the same thing as the above one, but is a little more concise. Might be a good reference for when you're setting this up on your own later. - Not everyone agrees that JWTs are the best way to store authentication data. [This video](https://www.youtube.com/watch?v=JdGOb7AxUo0) is one argument against using them, and some of the pitfalls that you may encounter with using them. @@ -39,4 +39,4 @@ This section contains questions for you to check your understanding of this less - What is a JSON web token? - What are two things a secure token will do? -- Where in the code is a secure token passed? \ No newline at end of file +- Where in the code is a secure token passed? From 9555ac10babf23b04bf307460b37893cb264180e Mon Sep 17 00:00:00 2001 From: Leo Wang Date: Sat, 16 Sep 2023 23:34:43 +0800 Subject: [PATCH 40/70] fix(git_basic): fix knowledge check content (#26334) Co-authored-by: Leo Wang --- git/foundations_git/git_basics.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/git/foundations_git/git_basics.md b/git/foundations_git/git_basics.md index 396958d375f..60db11f9551 100644 --- a/git/foundations_git/git_basics.md +++ b/git/foundations_git/git_basics.md @@ -195,21 +195,17 @@ For now, concentrate on using the basics of Git that you've learned here for all This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -- [Introduction](#introduction) -- [Lesson overview](#lesson-overview) -- [Assignment](#assignment) - - [Before you start!](#before-you-start) - - [Create the repository](#create-the-repository) - - [Use the Git workflow](#use-the-git-workflow) - - [Modify a file or two](#modify-a-file-or-two) - - [Push your work to GitHub](#push-your-work-to-github) -- [Note/Warning](#notewarning) -- [Cheatsheet](#cheatsheet) -- [Git best practices](#git-best-practices) -- [Changing the Git commit message editor](#changing-the-git-commit-message-editor) -- [Conclusion](#conclusion) -- [Knowledge check](#knowledge-check) -- [Additional resources](#additional-resources) +- [How do you create a new repository on GitHub?](#new-github-repo) +- [How do you copy a repository onto your local machine from GitHub?](#github-to-local) +- [What is the default name of your remote connection?](#default-remote) +- [Explain what `origin` is in `git push origin main`.](#origin-push) +- [Explain what `main` is in `git push origin main`.](#main-push) +- [Explain the two-stage system that Git uses to save files.](#two-stages) +- [How do you check the status of your current repository?](#git-status) +- [How do you add files to the staging area in git?](#git-add) +- [How do you commit the files in the staging area and add a descriptive message?](#git-commit) +- [How do you push your changes to your repository on GitHub?](#git-push) +- [How do you look at the history of your previous commits?](#git-log) ### Additional resources From 17814f5deceb2b07ca3d10ab2e09cf98744e437b Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 16 Sep 2023 10:47:25 -0700 Subject: [PATCH 41/70] move the informational interviews link to the Identify Your Options section --- .../preparing_for_job_search/professional_networking.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 8f66437fed2..234403b313a 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -16,7 +16,7 @@ The network that will help you on your journey to becoming a software developer You can probably think of instances where you were stuck on a task and asked someone for help. This was you exercising your network. You can do the same with your software developer network to help you with many things like gather information, make decisions, and find a job. -When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to [conduct an informational interview](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/) with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. +When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to conduct an informational interview with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). @@ -54,6 +54,7 @@ Your virtual networking options are much broader and there’s no shortage of pl * [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. * [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. +* [Conduct informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/) with developers who are in positions you want to be in. This is a great way to find out how they got there, what their daily work is like, and the challenges they face. This can be done remotely or in-person with your existing connections. * Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. ### Build Genuine Connections From 585b1f841b139b049fecb4287bf6b775c12cc963 Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 16 Sep 2023 11:08:46 -0700 Subject: [PATCH 42/70] add more context on informational interviews --- .../preparing_for_job_search/professional_networking.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 234403b313a..8093e91716e 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -54,9 +54,10 @@ Your virtual networking options are much broader and there’s no shortage of pl * [LinkedIn](https://www.linkedin.com/) - your profile acts like your virtual resume and first impressions are important. Put some time into [optimizing your profile](https://www.samanthaming.com/blog/tips-to-optimize-your-linkedin-profile-for-developers/). Then start following companies you would like to work at or find interesting, and individuals you can learn from. Engage with their content with questions and comments and consider creating your own content about your developer journey. Connect with people who engage with you and aim to make these connections genuine by looking at someone’s profile and finding something in common to talk about. * [X](https://twitter.com/) - this is a great platform to keep a finger on the pulse of a given domain. You can follow companies and individuals, engage with their posts, and create your own content. * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. -* [Conduct informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/) with developers who are in positions you want to be in. This is a great way to find out how they got there, what their daily work is like, and the challenges they face. This can be done remotely or in-person with your existing connections. * Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. +Once you have built up your network a little, a great way to find out good information quickly is through [informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/). An informational interview is the formal name for a chat with someone who is in a position you want to be in, or are interested in learning about. You get to ask them questions, such as "What path did you take to get to this point?", "What do you do in a typical work day?", "What advice would you give to someone like me?", and "Tell me about the challenges you face in your role". The questions you ask should help you find out if a particular role or company is the right fit for you and if you need to make any adjustments in your strategy. + ### Build Genuine Connections The economy of professional networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people ‘cold’ and ask them out of the blue to connect with you, or for a favor like ‘help me get this job in your company’ or ‘please be my mentor’. This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. From fa898279d05152caf36e3b37db108622b1e1c96c Mon Sep 17 00:00:00 2001 From: Manon <81025586+ManonLef@users.noreply.github.com> Date: Sun, 17 Sep 2023 01:43:18 +0200 Subject: [PATCH 43/70] Update mocking_callbacks_and_components.md --- react/react_testing/mocking_callbacks_and_components.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/react_testing/mocking_callbacks_and_components.md b/react/react_testing/mocking_callbacks_and_components.md index a0054aa7e2b..7a813ccd1e3 100644 --- a/react/react_testing/mocking_callbacks_and_components.md +++ b/react/react_testing/mocking_callbacks_and_components.md @@ -30,7 +30,7 @@ const CustomButton = ({ onClick}) => { export default CustomButton; ~~~ -Nothing fancy. `CustomButton` is a simple component with a couple props passed in. We're interested in the `onClick` prop. We have no idea what the function does. We have no idea how the function will affect the application. All we know is it must be called when user clicks the button. Let's test it. +Nothing fancy. `CustomButton` is a simple component with a prop passed in. We're interested in the `onClick` prop. We have no idea what the function does. We have no idea how the function will affect the application. All we know is it must be called when user clicks the button. Let's test it. Notice how we mock and test the `onClick` function: From ba2446b51cf22b1560364c66af05b1566b7514c2 Mon Sep 17 00:00:00 2001 From: Ben R Date: Sat, 16 Sep 2023 17:14:35 -0700 Subject: [PATCH 44/70] tweak informational interviews paragraph --- .../preparing_for_job_search/professional_networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 8093e91716e..5126434d311 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -56,7 +56,7 @@ Your virtual networking options are much broader and there’s no shortage of pl * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. * Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. -Once you have built up your network a little, a great way to find out good information quickly is through [informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/). An informational interview is the formal name for a chat with someone who is in a position you want to be in, or are interested in learning about. You get to ask them questions, such as "What path did you take to get to this point?", "What do you do in a typical work day?", "What advice would you give to someone like me?", and "Tell me about the challenges you face in your role". The questions you ask should help you find out if a particular role or company is the right fit for you and if you need to make any adjustments in your strategy. +A great way to find out reliable information, quickly, is through [informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/). An informational interview is the formal name for a chat with someone who is in a position you want to be in, or are interested in learning about. You get to ask them questions, such as "What path did you take to get to this point?", "What do you do in a typical work day?", "What advice would you give to someone like me?", and "Tell me about the challenges you face in your role". The questions you ask should help you find out if a particular role or company is the right fit for you and if you need to make any adjustments in your strategy. It is also a solid way to connect with the person you are 'interviewing' and it would be wise to add them to your network thereafter (e.g., LinkedIn). ### Build Genuine Connections From b1216d0cd45bc63f1784e91670095e9a48f50506 Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Sun, 17 Sep 2023 22:34:06 +0300 Subject: [PATCH 45/70] NodeJS, Express 102: Clarify models description (#26317) Clarify explanation of models --------- Co-authored-by: Rachel Moser <33227096+rlmoser99@users.noreply.github.com> --- nodeJS/express_and_mongoose/express_102_crud_and_mvc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodeJS/express_and_mongoose/express_102_crud_and_mvc.md b/nodeJS/express_and_mongoose/express_102_crud_and_mvc.md index 44a558121b9..46a0535cc78 100644 --- a/nodeJS/express_and_mongoose/express_102_crud_and_mvc.md +++ b/nodeJS/express_and_mongoose/express_102_crud_and_mvc.md @@ -30,7 +30,7 @@ The CRUD operations roughly correlate to the HTTP methods that you can employ in MVC is another common concept in web development and also something that is likely to come up in an interview question. MVC stands for _Model, View, Controller_ and refers to the architecture of your code. Basically, it is a way to organize your application by separating all of the actions into 3 main components: Models, Views and Controllers. -**Models** are the basic building blocks of your database. So for every entry in your DB (books, authors, etc. in our Library Project), you'll create a model that holds the details of that entry. Models define the types of information that get used by your views and controllers. +**Models** are the basic building blocks of your database. So for every type of entry in your DB (book, author, etc. in our Library Project), you'll create a model that will hold the details of that type of entry. Models define the types of information that get used by your views and controllers. **Views** are, of course, the component that generates the UI for your application. In our case, we've selected a templating engine that uses data supplied by a controller to display the desired information. From 6e4208bf4f866da2ce917510f6e88b1b68602b21 Mon Sep 17 00:00:00 2001 From: Brian Lister Date: Sun, 17 Sep 2023 15:27:55 -0500 Subject: [PATCH 46/70] Add descriptive text to html samples Fixes #26303 --- .../html_css/css-foundations/the-cascade.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/foundations/html_css/css-foundations/the-cascade.md b/foundations/html_css/css-foundations/the-cascade.md index 443fee242fb..0e13b247a24 100644 --- a/foundations/html_css/css-foundations/the-cascade.md +++ b/foundations/html_css/css-foundations/the-cascade.md @@ -18,7 +18,6 @@ So if you end up with some unexpected behavior like this it's either because of The cascade is what determines which rules actually get applied to our HTML. There are different factors that the cascade uses to determine this. We will examine three of these factors, which will hopefully help you avoid those frustrating "I hate CSS" moments. - #### Specificity A CSS declaration that is more specific will take precedence over less specific ones. Inline styles, which we went over in the previous lesson, have the highest specificity compared to selectors, while each type of selector has its own specificity level that contributes to how specific a declaration is. Other selectors contribute to specificity, but we're focusing only on the ones we've gone over so far: @@ -36,7 +35,7 @@ Consider the following HTML and CSS code:
-
+
Red text
~~~ @@ -60,7 +59,7 @@ Now, let's change things a little bit:
-
+
Blue text
~~~ ~~~css @@ -77,6 +76,16 @@ Now, let's change things a little bit: In the example above, despite rule 2 having more class selectors than ID selectors, rule 1 is more specific because ID beats class. In this case, the `color: blue;` declaration would take precedence. +And a bit more complex: + +~~~html + + +
+
Red text on yellow background
+
+~~~ + ~~~css /* rule 1 */ #subsection { @@ -218,4 +227,4 @@ This section contains helpful links to related content. It isn’t required, so * [CSS Specificity Explained](https://www.youtube.com/watch?v=c0kfcP_nD9E) from Kevin Powell goes through various specificity examples and gives some advice on avoiding wrestling with specificity. * [CSS Specificity Calculator](https://specificity.keegan.st/) allows you to fill in your own selectors and have their specificity calculated and visualized. * [Mozilla CSS Properties Reference](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) can be used to learn if a particular CSS property is inherited or not; simply look for the **Inherited** field inside the **Formal Definition** section. [Here's an example](https://developer.mozilla.org/en-US/docs/Web/CSS/color#formal_definition) for the CSS `color` property. -* [Interactive Scrim on the CSS Cascade.](https://scrimba.com/scrim/c9gwmnAR) \ No newline at end of file +* [Interactive Scrim on the CSS Cascade.](https://scrimba.com/scrim/c9gwmnAR) From f7c65a2c98ccf2c6e42f1d78dff4104a4fa86b86 Mon Sep 17 00:00:00 2001 From: Brian Lister Date: Sun, 17 Sep 2023 15:32:12 -0500 Subject: [PATCH 47/70] Update lists to comply with style guide --- .../html_css/css-foundations/the-cascade.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/foundations/html_css/css-foundations/the-cascade.md b/foundations/html_css/css-foundations/the-cascade.md index 0e13b247a24..b5d3df4f4d2 100644 --- a/foundations/html_css/css-foundations/the-cascade.md +++ b/foundations/html_css/css-foundations/the-cascade.md @@ -6,9 +6,9 @@ In the previous lesson, we covered basic CSS syntax and selectors. Now, it's tim This section contains a general overview of topics that you will learn in this lesson. -* What the cascade does. -* Specificity and combining CSS selectors. -* How inheritance affects certain properties. +- What the cascade does. +- Specificity and combining CSS selectors. +- How inheritance affects certain properties. ### The cascade of CSS @@ -201,14 +201,14 @@ For an element that has both the `alert` and `warning` classes, the cascade woul
-1. Go back to our [CSS exercises repository](https://github.com/TheOdinProject/css-exercises) and navigate to the `foundations` directory. Review the README and complete the final exercise: - - `06-cascade-fix` +1. Go back to our [CSS exercises repository](https://github.com/TheOdinProject/css-exercises) and navigate to the `foundations` directory. Review the README and complete the final exercise: + - `06-cascade-fix` Note: Solutions for these exercises can be found in the `solution` folder of each exercise. -2. Remember the Recipe page you created as practice from the HTML Foundations section? Well, it's rather *plain* looking, isn't it? Let's fix that by adding some CSS to it! - - How you actually style it is completely open, but you should use the external CSS method (for this practice and moving forward). You should also try to use several of the properties mentioned in the previous lesson (color, background color, typography properties, etc). Take some time to play around with the various properties to get a feel for what they do. For now, don't worry at all about making it look *good*. This is just to practice and get used to writing CSS, not to make something to show off on your resume. - - We haven't covered how to use a custom font for the `font-family` property yet, so for now take a look at [CSS Fonts](https://www.w3schools.com/Css/css_font.asp) for a list of generic font families to use, and [CSS Web Safe Fonts](https://www.w3schools.com/cssref/css_websafe_fonts.asp) for a list of fonts that are web safe. Web safe means that these are fonts that are installed on basically every computer or device (but be sure to still include a generic font family as a fallback). +2. Remember the Recipe page you created as practice from the HTML Foundations section? Well, it's rather *plain* looking, isn't it? Let's fix that by adding some CSS to it! + - How you actually style it is completely open, but you should use the external CSS method (for this practice and moving forward). You should also try to use several of the properties mentioned in the previous lesson (color, background color, typography properties, etc). Take some time to play around with the various properties to get a feel for what they do. For now, don't worry at all about making it look *good*. This is just to practice and get used to writing CSS, not to make something to show off on your resume. + - We haven't covered how to use a custom font for the `font-family` property yet, so for now take a look at [CSS Fonts](https://www.w3schools.com/Css/css_font.asp) for a list of generic font families to use, and [CSS Web Safe Fonts](https://www.w3schools.com/cssref/css_websafe_fonts.asp) for a list of fonts that are web safe. Web safe means that these are fonts that are installed on basically every computer or device (but be sure to still include a generic font family as a fallback).
@@ -216,15 +216,15 @@ For an element that has both the `alert` and `warning` classes, the cascade woul This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -* Between a rule that uses one class selector and a rule that uses three type selectors, which rule has the higher specificity? +- Between a rule that uses one class selector and a rule that uses three type selectors, which rule has the higher specificity? ### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. -* [The CSS Cascade](https://wattenberger.com/blog/css-cascade) is a great, interactive read that goes a little more in detail about other factors that affect what CSS rules actually end up being applied. -* [Changing the Font Family](https://www.digitalocean.com/community/tutorials/how-to-load-and-use-custom-fonts-with-css#finding-and-loading-a-font-file-from-a-hosted-service) describes a few different approaches to using custom fonts. -* [CSS Specificity Explained](https://www.youtube.com/watch?v=c0kfcP_nD9E) from Kevin Powell goes through various specificity examples and gives some advice on avoiding wrestling with specificity. -* [CSS Specificity Calculator](https://specificity.keegan.st/) allows you to fill in your own selectors and have their specificity calculated and visualized. -* [Mozilla CSS Properties Reference](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) can be used to learn if a particular CSS property is inherited or not; simply look for the **Inherited** field inside the **Formal Definition** section. [Here's an example](https://developer.mozilla.org/en-US/docs/Web/CSS/color#formal_definition) for the CSS `color` property. -* [Interactive Scrim on the CSS Cascade.](https://scrimba.com/scrim/c9gwmnAR) +- [The CSS Cascade](https://wattenberger.com/blog/css-cascade) is a great, interactive read that goes a little more in detail about other factors that affect what CSS rules actually end up being applied. +- [Changing the Font Family](https://www.digitalocean.com/community/tutorials/how-to-load-and-use-custom-fonts-with-css#finding-and-loading-a-font-file-from-a-hosted-service) describes a few different approaches to using custom fonts. +- [CSS Specificity Explained](https://www.youtube.com/watch?v=c0kfcP_nD9E) from Kevin Powell goes through various specificity examples and gives some advice on avoiding wrestling with specificity. +- [CSS Specificity Calculator](https://specificity.keegan.st/) allows you to fill in your own selectors and have their specificity calculated and visualized. +- [Mozilla CSS Properties Reference](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) can be used to learn if a particular CSS property is inherited or not; simply look for the **Inherited** field inside the **Formal Definition** section. [Here's an example](https://developer.mozilla.org/en-US/docs/Web/CSS/color#formal_definition) for the CSS `color` property. +- [Interactive Scrim on the CSS Cascade.](https://scrimba.com/scrim/c9gwmnAR) From 7a9c1dc72741ed02feb5ca2a04cb889fc54b5a69 Mon Sep 17 00:00:00 2001 From: Brian Lister Date: Sun, 17 Sep 2023 15:54:24 -0500 Subject: [PATCH 48/70] Add section on image height and width Fixes #26288 --- .../html-foundations/links-and-images.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/foundations/html_css/html-foundations/links-and-images.md b/foundations/html_css/html-foundations/links-and-images.md index 0db398b46f6..fcd5967a356 100644 --- a/foundations/html_css/html-foundations/links-and-images.md +++ b/foundations/html_css/html-foundations/links-and-images.md @@ -227,6 +227,22 @@ This is how the The Odin Project logo example we used earlier looks with an alt As a bit of practice, add an alt attribute to the dog image we added to the `odin-links-and-images` project. +### Image size attributes + +While not strictly required, specifying height and width +attributes in image tags helps the browser layout the page without causing the page to jump and flash. + +It is a good habit to always specify these attributes on every image, even when the image is the correct size or you are using CSS to modify it. + +Here is our Odin Project logo example with height and width tags included: + +

+ See the Pen + Image Height and Width Attributes by Brian Lister (@FabulousPBB) + on CodePen. +

+ + ### Assignment
From b65365af116a39ac40636ff476879bfd92079bb1 Mon Sep 17 00:00:00 2001 From: Brian Lister Date: Sun, 17 Sep 2023 15:57:37 -0500 Subject: [PATCH 49/70] Update lists to comply with style guide --- .../html-foundations/links-and-images.md | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/foundations/html_css/html-foundations/links-and-images.md b/foundations/html_css/html-foundations/links-and-images.md index fcd5967a356..319847d4892 100644 --- a/foundations/html_css/html-foundations/links-and-images.md +++ b/foundations/html_css/html-foundations/links-and-images.md @@ -8,19 +8,19 @@ In this lesson, we will learn how to create links and add some visual flair to o This section contains a general overview of topics that you will learn in this lesson. -* How to create links to pages on other websites on the internet -* How to create links to other pages on your own websites -* The difference between absolute and relative links -* How to display an image on a webpage using HTML +- How to create links to pages on other websites on the internet +- How to create links to other pages on your own websites +- The difference between absolute and relative links +- How to display an image on a webpage using HTML ### Preparation To get some practice using links and images throughout this lesson we need an HTML project to work with. -1. Create a new directory named `odin-links-and-images`. -2. Within that directory, create a new file named `index.html`. -3. Open the file in VS Code and fill in the usual HTML boilerplate. -4. Finally, add the following h1 to the body: +1. Create a new directory named `odin-links-and-images`. +2. Within that directory, create a new file named `index.html`. +3. Open the file in VS Code and fill in the usual HTML boilerplate. +4. Finally, add the following h1 to the body: ~~~html

Homepage

@@ -72,8 +72,8 @@ Note that you may be fine if you forget to add `rel="noopener noreferrer"` since Generally, there are two kinds of links we will create: -1. Links to pages on other websites on the internet -2. Links to pages located on our own websites +1. Links to pages on other websites on the internet +2. Links to pages located on our own websites #### Absolute links @@ -172,11 +172,11 @@ For example, using an absolute path we can display an image located on The Odin To use images that we have on our own websites, we can use a relative path. -1. Create a new directory named `images` within the `odin-links-and-images` project. +1. Create a new directory named `images` within the `odin-links-and-images` project. -2. Next, download [this image](https://unsplash.com/photos/Mv9hjnEUHR4/download?force=true&w=640) and move it into the images directory we just created. +2. Next, download [this image](https://unsplash.com/photos/Mv9hjnEUHR4/download?force=true&w=640) and move it into the images directory we just created. -3. Rename the image to `dog.jpg`. +3. Rename the image to `dog.jpg`. Finally add the image to the `index.html` file: @@ -204,9 +204,9 @@ What if we want to use the dog image in the about page? We would first have to g To break this down: -1. First, we are going to the parent directory of the pages directory which is `odin-links-and-images`. -2. Then, from the parent directory, we can go into the `images` directory. -3. Finally, we can access the `dog.jpg` file. +1. First, we are going to the parent directory of the pages directory which is `odin-links-and-images`. +2. Then, from the parent directory, we can go into the `images` directory. +3. Finally, we can access the `dog.jpg` file. Using the metaphor we used earlier, using `../` in a filepath is kind of like stepping out from the room you are currently in to the main hallway so you can go to another room. @@ -243,14 +243,15 @@ Here is our Odin Project logo example with height and width tags included:

+Go ahead and update the `odin-links-and-images` project with width and height tags on the dog image. ### Assignment
-1. [Watch Kevin Powell's HTML Links Video](https://www.youtube.com/watch?v=tsEQgGjSmkM&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=5). -2. [Watch Kevin Powell's HTML Images Video](https://www.youtube.com/watch?v=0xoztJCHpbQ&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=6). -3. [Watch Kevin Powell's File Structure Video](https://www.youtube.com/watch?v=ta3Oxx7Yqbo&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=7). -4. [Read about the four main image formats that can be used on the web](https://internetingishard.netlify.app/html-and-css/links-and-images/#image-formats). +1. [Watch Kevin Powell's HTML Links Video](https://www.youtube.com/watch?v=tsEQgGjSmkM&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=5). +2. [Watch Kevin Powell's HTML Images Video](https://www.youtube.com/watch?v=0xoztJCHpbQ&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=6). +3. [Watch Kevin Powell's File Structure Video](https://www.youtube.com/watch?v=ta3Oxx7Yqbo&list=PL4-IK0AVhVjM0xE0K2uZRvsM7LkIhsPT-&index=7). +4. [Read about the four main image formats that can be used on the web](https://internetingishard.netlify.app/html-and-css/links-and-images/#image-formats).
@@ -258,21 +259,21 @@ Here is our Odin Project logo example with height and width tags included: This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. -* [What element is used to create a link?](#anchor-elements) -* [What is an attribute?](#attribute) -* [What attribute tells links where to go to?](#where-to-go) -* [What security considerations must be taken if you wish to use the target attribute to open links in a new tab/window?](#target-security) -* [What is the difference between an absolute and relative link?](#absolute-and-relative-links) -* [Which element is used to display an image?](#images) -* [What two attributes do images always need to have?](#two-attributes) -* [How do you access a parent directory in a filepath?](#parent-filepath) -* [What are the four main image formats that you can use for images on the web?](https://internetingishard.netlify.app/html-and-css/links-and-images/#image-formats) +- [What element is used to create a link?](#anchor-elements) +- [What is an attribute?](#attribute) +- [What attribute tells links where to go to?](#where-to-go) +- [What security considerations must be taken if you wish to use the target attribute to open links in a new tab/window?](#target-security) +- [What is the difference between an absolute and relative link?](#absolute-and-relative-links) +- [Which element is used to display an image?](#images) +- [What two attributes do images always need to have?](#two-attributes) +- [How do you access a parent directory in a filepath?](#parent-filepath) +- [What are the four main image formats that you can use for images on the web?](https://internetingishard.netlify.app/html-and-css/links-and-images/#image-formats) ### Additional resources This section contains helpful links to related content. It isn’t required, so consider it supplemental. -- [Interneting is hard's treatment on HTML links and images](https://internetingishard.netlify.app/html-and-css/links-and-images) -- [What happened the day Google decided links including (`/`) were malware](https://www.itpro.co.uk/609724/google-apologises-after-blacklisting-entire-internet) -- [Chris Coyier's When to use target="_blank" on CSS-Tricks](https://css-tricks.com/use-target_blank/) +- [Interneting is hard's treatment on HTML links and images](https://internetingishard.netlify.app/html-and-css/links-and-images) +- [What happened the day Google decided links including (`/`) were malware](https://www.itpro.co.uk/609724/google-apologises-after-blacklisting-entire-internet) +- [Chris Coyier's When to use target="_blank" on CSS-Tricks](https://css-tricks.com/use-target_blank/) From 5bab31d9d7c2172f32158ecc5ee7be566ede60fd Mon Sep 17 00:00:00 2001 From: Oscar Mora Date: Sun, 17 Sep 2023 19:28:09 -0400 Subject: [PATCH 50/70] Replace Broken Link --- ruby_on_rails/introduction/web_refresher.md | 55 +++++++++++---------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/ruby_on_rails/introduction/web_refresher.md b/ruby_on_rails/introduction/web_refresher.md index 0566d2044a6..f2266ebe409 100644 --- a/ruby_on_rails/introduction/web_refresher.md +++ b/ruby_on_rails/introduction/web_refresher.md @@ -1,8 +1,9 @@ ### Introduction -To really understand how Rails works, you need to have a solid base in the guts of the web. You've already covered some of this in previous sections (and if you went through the Ruby curriculum you can just skim it), but this time you'll get a chance (in the project) to reach out and make some real web requests. +To really understand how Rails works, you need to have a solid base in the guts of the web. You've already covered some of this in previous sections (and if you went through the Ruby curriculum you can just skim it), but this time you'll get a chance (in the project) to reach out and make some real web requests. ### Lesson overview + This section contains a general overview of topics that you will learn in this lesson. - The basics of HTTP. @@ -16,21 +17,21 @@ This section contains a general overview of topics that you will learn in this l ### HTTP -HTTP is just a way of structuring the request-and-response conversation between your browser and the server. Actually, it's not even a conversation since it is stateless... it's more of an "ask and receive". The protocol outlines how that brief piece of dialogue should occur. +HTTP is just a way of structuring the request-and-response conversation between your browser and the server. Actually, it's not even a conversation since it is stateless... it's more of an "ask and receive". The protocol outlines how that brief piece of dialogue should occur. Check out these resources: 1. This [tutsplus post on HTTP](http://code.tutsplus.com/tutorials/http-the-protocol-every-web-developer-must-know-part-1--net-31177) describes what's going on with HTTP. 2. This [sniffer tool](http://testuri.org/sniffer) - try retrieving a couple of websites (like http://www.theodinproject.com) on your own. -3. This [great video](https://code.tutsplus.com/tutorials/how-the-web-works-http-and-the-web-server--cms-25971) on communications between http requests and the web server. +3. This [great video](https://code.tutsplus.com/how-to-become-a-web-developer--CRS-200371c/http-and-the-web-server) on communications between http requests and the web server. -One key component to pay attention to is the fact that the request and response both have header and (usually) body components. The header contains information about the request or response itself (meta data), including which website to send or return to and what the status of the response is. The body of the request can contain things like data submitted by a form or cookies or authentication tokens while the response will usually contain the HTML page you're trying to access. +One key component to pay attention to is the fact that the request and response both have header and (usually) body components. The header contains information about the request or response itself (meta data), including which website to send or return to and what the status of the response is. The body of the request can contain things like data submitted by a form or cookies or authentication tokens while the response will usually contain the HTML page you're trying to access. -The other key component is that each request uses one of four main "verbs" -- GET, POST, PUT, and DELETE. These days, you almost only see GET and POST requests (even if you're trying to do a delete of something they usually fake it using a POST request), but it's important to understand the difference between the verbs. +The other key component is that each request uses one of four main "verbs" -- GET, POST, PUT, and DELETE. These days, you almost only see GET and POST requests (even if you're trying to do a delete of something they usually fake it using a POST request), but it's important to understand the difference between the verbs. ### REST -REST (short for Representational state transfer) is a term that you'll see coming up again and again because it's a very powerful idea. It basically says that there are really only 7 different types of things that you usually want to do to an individual resource via the web and you can do them by mixing and matching the HTTP verbs we just covered. A "resource" usually means a "thing" in your database or a data model. In this case, we'll assume that resource is a blog Post model that you've set up: +REST (short for Representational state transfer) is a term that you'll see coming up again and again because it's a very powerful idea. It basically says that there are really only 7 different types of things that you usually want to do to an individual resource via the web and you can do them by mixing and matching the HTTP verbs we just covered. A "resource" usually means a "thing" in your database or a data model. In this case, we'll assume that resource is a blog Post model that you've set up: 1. GET all the posts (aka **"index"** the posts) 2. GET just one specific post (aka **"show"** that post) @@ -42,9 +43,9 @@ REST (short for Representational state transfer) is a term that you'll see comin The highlighted words correspond to standard Rails controller actions! -Why is this important? Because it gives you a very organized way of thinking about your resources. This is the way to model your requests and should be the ONLY way that those requests are done (e.g. you shouldn't be actually submitting the data for editing a post using a GET request... that should be a POST) If you have a hard time thinking of how those seven scenarios (or at least a subset of them) would apply to a resource you want to create in your database, you may need to rethink how your data is being set up. +Why is this important? Because it gives you a very organized way of thinking about your resources. This is the way to model your requests and should be the ONLY way that those requests are done (e.g. you shouldn't be actually submitting the data for editing a post using a GET request... that should be a POST) If you have a hard time thinking of how those seven scenarios (or at least a subset of them) would apply to a resource you want to create in your database, you may need to rethink how your data is being set up. -It's also important because Rails is structured to follow these conventions in a very straightforward way. As long as you're performing those actions, life is very easy for you and the request that you get from the browser can be easily routed through Rails' guts. +It's also important because Rails is structured to follow these conventions in a very straightforward way. As long as you're performing those actions, life is very easy for you and the request that you get from the browser can be easily routed through Rails' guts. It may seem simplistic to you up front to think of things this way, but once you've got a bit of complexity in your data model, you'll find that falling back on RESTful thinking can help untangle things for you. @@ -62,7 +63,7 @@ The URL is: https://www.google.com/search?q=what+is+a+url 3. What is the "Top Level Domain"? 4. What is the "Protocol"? -Once you understand what these components are, you can easily use Ruby's libraries to help you build your own and send requests. You also run into specific pieces like the "path" and "parameters" again and again when using Rails. +Once you understand what these components are, you can easily use Ruby's libraries to help you build your own and send requests. You also run into specific pieces like the "path" and "parameters" again and again when using Rails. Answers: @@ -73,11 +74,11 @@ Answers: ### MVC -You've heard about it again and again, but do you really know what MVC is? Errrrmmmmm, ummm.... +You've heard about it again and again, but do you really know what MVC is? Errrrmmmmm, ummm.... -MVC is all about organization and Rails is all about MVC. When you build a new Rails project, you get that giant mass of folders and files created. Though it seems like there is an overwhelming number of files inside your `app` directory, they are highly organized and specifically meant to separate the Model, View, and Controller. +MVC is all about organization and Rails is all about MVC. When you build a new Rails project, you get that giant mass of folders and files created. Though it seems like there is an overwhelming number of files inside your `app` directory, they are highly organized and specifically meant to separate the Model, View, and Controller. -The point of MVC is that the functions of a web application can be broken down into more or less distinct parts. Each part gets its own Ruby class. That's great for you the developer because, when you want to tweak a specific part of the code base or fix a bug, you know exactly which file to modify and where it is. +The point of MVC is that the functions of a web application can be broken down into more or less distinct parts. Each part gets its own Ruby class. That's great for you the developer because, when you want to tweak a specific part of the code base or fix a bug, you know exactly which file to modify and where it is. ### The path through MVC @@ -86,7 +87,7 @@ Once a request from a browser comes into your application, at the most basic lev 1. The router figures out which controller to send it to (e.g. for your blog, the Posts controller). 2. That controller asks the model (e.g. Post model) for data and any other tough questions it has. 3. Then that controller passes off whatever data it needs to the views (e.g. `index.html.erb`), which are basically just HTML templates that are waiting for those variables. -4. Once the proper view has been pumped full of the data it needs (like the current user's name), it gets sent back to the client that made the original request. Presto! +4. Once the proper view has been pumped full of the data it needs (like the current user's name), it gets sent back to the client that made the original request. Presto! Check out a more detailed version of MVC in [betterexplained.com's](http://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/) article. @@ -96,55 +97,56 @@ Just roll with it, you'll see it in action and learn to love it. ### APIs -When your computer or a server (which you're programming) wants to make a request to another website, it doesn't bother clicking on things in the browser, it asks that other website for data directly by using that website's API. An API is just an interface. Our web browser goes in the front door to display a bunch of info from Facebook, and our web server goes in the side door for the same data (much faster and more direct) via the API. +When your computer or a server (which you're programming) wants to make a request to another website, it doesn't bother clicking on things in the browser, it asks that other website for data directly by using that website's API. An API is just an interface. Our web browser goes in the front door to display a bunch of info from Facebook, and our web server goes in the side door for the same data (much faster and more direct) via the API. -So you want to get data from Google Maps to display on your webpage? You hit its API using the rules specified in its API documentation. Just about every big website makes some portion of its data available via an API and you can too quite easily using Rails. +So you want to get data from Google Maps to display on your webpage? You hit its API using the rules specified in its API documentation. Just about every big website makes some portion of its data available via an API and you can too quite easily using Rails. See this explanation (just the first page) on [What APIs are](http://money.howstuffworks.com/business-communications/how-to-leverage-an-api-for-conferencing1.htm) from howstuffworks. -Not all APIs are web-based. Plenty of them use the same HTTP format but are really just designed to pass data between services. In fact, that's how the components of Rails are all strung together -- they use HTTP to communicate with each other. +Not all APIs are web-based. Plenty of them use the same HTTP format but are really just designed to pass data between services. In fact, that's how the components of Rails are all strung together -- they use HTTP to communicate with each other. -You'll actually get a chance to build your own API a little later on, and Rails makes it really easy for you. There's nothing magical about it -- you just tell your controller that you want to respond to requests made by other servers instead of (or in addition to) normal web requests and then specify what exactly you'd like returned (since it probably won't be an HTML view). +You'll actually get a chance to build your own API a little later on, and Rails makes it really easy for you. There's nothing magical about it -- you just tell your controller that you want to respond to requests made by other servers instead of (or in addition to) normal web requests and then specify what exactly you'd like returned (since it probably won't be an HTML view). But we get ahead of ourselves a bit here... the main point is that you'll see "API" come up plenty of times and it's totally harmless and just means the way that two applications talk to each other. ### Cookies -You've heard about cookies. Cookies are basically a way for websites to remember who you are from one request to another. Remember -- every HTTP request is totally independent of each other. Meaning that when you go to the Home page of a website and then click on a link to their About page, the web server treats you as a completely new user. +You've heard about cookies. Cookies are basically a way for websites to remember who you are from one request to another. Remember -- every HTTP request is totally independent of each other. Meaning that when you go to the Home page of a website and then click on a link to their About page, the web server treats you as a completely new user. -...Unless they've given you some cookies (which they almost certainly have). Cookies are little bits of data that your browser sends to the website every time you make a request to it. From the perspective of the web server, it lets the server identify you as the same person who made any of a series of previous requests. It preserves the *state* of your session. +...Unless they've given you some cookies (which they almost certainly have). Cookies are little bits of data that your browser sends to the website every time you make a request to it. From the perspective of the web server, it lets the server identify you as the same person who made any of a series of previous requests. It preserves the _state_ of your session. Check out [allaboutcookies.org](http://www.allaboutcookies.org/) and read the first three sections for some more info about cookies. The [Wikipedia article on cookies](http://en.wikipedia.org/wiki/HTTP_cookie) may also be helpful reading. -Go to a website you normally frequent, open up your developer tools, and find the cookies. In Chrome, it's by clicking on "Application" tab then "cookies" on the leftmost menu. You'll see them as name-value pairs. Often there will be something like a "user_session" or "token" variable that is some unintelligible string of characters. +Go to a website you normally frequent, open up your developer tools, and find the cookies. In Chrome, it's by clicking on "Application" tab then "cookies" on the leftmost menu. You'll see them as name-value pairs. Often there will be something like a "user_session" or "token" variable that is some unintelligible string of characters. ### Sessions Cookies are important because they enable you to have a single continuous "session" while you're interacting with a website. It means you only have to log in once instead of for every single request (which you probably experienced from a broken website at some point in the late 90's). -Your browser includes all the cookies that a particular website has set along with its normal request and the server uses those strings to figure out which user you are and whether you are logged in, what your settings are (like if you've set up viewing preferences) and things like that. It's also why, when you clear cookies from your browser history, everything seems to get wiped out and go back to the default. +Your browser includes all the cookies that a particular website has set along with its normal request and the server uses those strings to figure out which user you are and whether you are logged in, what your settings are (like if you've set up viewing preferences) and things like that. It's also why, when you clear cookies from your browser history, everything seems to get wiped out and go back to the default. It's also how some ads seem to follow you from one website to another -- another name for them is "tracking cookies". ### Authentication -On the server side, you'll interact with cookies and session variables quite a bit. As mentioned above, one of the main uses of these is to determine who the user is, or "authentication". You'll basically retrieve the cookie that the user sends you, use it to find that user in your database, and (if the user exists) then you can display the customized web page for that user. +On the server side, you'll interact with cookies and session variables quite a bit. As mentioned above, one of the main uses of these is to determine who the user is, or "authentication". You'll basically retrieve the cookie that the user sends you, use it to find that user in your database, and (if the user exists) then you can display the customized web page for that user. It's pretty straightforward in theory, but some of the security implications get a bit hairy so luckily some nice folks created a very handy gem called ["Devise"](https://github.com/heartcombo/devise) which takes care of all this stuff for you. In this curriculum (a bit later on), you'll be creating your own authentication system before learning how to use Devise to take care of the heavy lifting. ### Authorization -Authorization is the partner concept to Authentication... Authentication lets you determine WHO the user is, but the idea behind authorization is that you might limit what the person can see based on their permission level. The most common case of this is actually the distinction between a random not-logged-in user and one who is logged in. Another common case of this is the difference between regular users of a website and the admin users who have special privileges. +Authorization is the partner concept to Authentication... Authentication lets you determine WHO the user is, but the idea behind authorization is that you might limit what the person can see based on their permission level. The most common case of this is actually the distinction between a random not-logged-in user and one who is logged in. Another common case of this is the difference between regular users of a website and the admin users who have special privileges. -On the server side, you will end up writing (or using) methods which restrict access to certain types of actions based on who the current user is (or whether the requester is logged in at all). Again, Devise will help you with this by providing some of these helper methods (like for checking whether any user is logged in or who the current user is) for you. +On the server side, you will end up writing (or using) methods which restrict access to certain types of actions based on who the current user is (or whether the requester is logged in at all). Again, Devise will help you with this by providing some of these helper methods (like for checking whether any user is logged in or who the current user is) for you. ### Conclusion -We'll dig into this stuff a bit later, but it's good to understand in the context of what we talked about before in regards to how requests are made because it brings a couple of extra layers onto these formerly-independent HTTP requests. Authentication systems allow you to establish sessions which preserve the user's state (like logged in status) across requests and helps you determine whether the user is authorized to do a particular thing. +We'll dig into this stuff a bit later, but it's good to understand in the context of what we talked about before in regards to how requests are made because it brings a couple of extra layers onto these formerly-independent HTTP requests. Authentication systems allow you to establish sessions which preserve the user's state (like logged in status) across requests and helps you determine whether the user is authorized to do a particular thing. ### Knowledge check + This section contains questions for you to check your understanding of this lesson on your own. If you’re having trouble answering a question, click it and review the material it links to. - What do you call an HTTP message that goes from client to server? @@ -157,7 +159,8 @@ This section contains questions for you to check your understanding of this less - What is the difference between "authentication" and "authorization"? ### Additional resources + This section contains helpful links to other content. It isn't required, so consider it supplemental. - [HTTP explained by Harvard's David Malan](http://www.youtube.com/watch?v=8KuO4r5CHjM) -- [HTTP Request/Response Basics](http://justahelp.blogspot.com/2013/09/http-requestresponse-basics.html) from Pralay Roy \ No newline at end of file +- [HTTP Request/Response Basics](http://justahelp.blogspot.com/2013/09/http-requestresponse-basics.html) from Pralay Roy From 9271ffd676ef7f5fb94b5b44130b2e98c1f4ab69 Mon Sep 17 00:00:00 2001 From: Yannis Date: Mon, 18 Sep 2023 01:07:43 +0100 Subject: [PATCH 51/70] Switch node lesson github links to official docs The following articles in the "Getting Started" lesson of the Node course are back online on the node docs and have had their links replaced: - Learn how to run Node.js scripts - Learn quickly about .env files - Then, let's start writing files - Finally, we'll learn how to read files - Let's get an introduction to NPM - Following along with the Event Emitter section --- .../introduction_to_nodeJS/getting_started.md | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/nodeJS/introduction_to_nodeJS/getting_started.md b/nodeJS/introduction_to_nodeJS/getting_started.md index c5f8d05347e..4f9e79c7292 100644 --- a/nodeJS/introduction_to_nodeJS/getting_started.md +++ b/nodeJS/introduction_to_nodeJS/getting_started.md @@ -1,4 +1,5 @@ ### Introduction + Like we learned in the introduction lesson, Node.js is really just JavaScript. So a basic understanding of JavaScript is necessary in order to understand Node. For this reason, it is highly recommended that you take our prerequisite [JavaScript course](https://www.theodinproject.com/paths/full-stack-javascript/courses/javascript) before continuing with this course. This lesson will take you through a tutorial that will teach you the basic modules and functions that you need to get up and running with Node.js. The project that comes at the end of this section will ask you to use Node to create a basic website that will include an `Index`, `About` and `Contact Me` page. So while learning the topics in this lesson, be on the lookout for things that might help you complete the project. @@ -6,20 +7,22 @@ This lesson will take you through a tutorial that will teach you the basic modul
### Important notice + Recently the NodeJS.dev team removed a large amount of content from their website. Several of those removed pages were linked to in this lesson. Until we find a replacement for that content we will be linking directly to the markdown files on their GitHub repository. The formatting may look a bit odd, but the content should still be just as good.
### Learning outcomes + By the end of this lesson, you should be able to do the following: - - Explain some things that Node.js is commonly used for. - - Create and use modules in Node.js (both built-in and user created). - - Set up a basic webserver with Node.js using the HTTP module. - - Read, create, update, and delete files from Node.js. - - Use the URL module to parse a url address and split it into readable parts. - - Understand how to use NPM. - - Create, fire and listen for your own events. +- Explain some things that Node.js is commonly used for. +- Create and use modules in Node.js (both built-in and user created). +- Set up a basic webserver with Node.js using the HTTP module. +- Read, create, update, and delete files from Node.js. +- Use the URL module to parse a url address and split it into readable parts. +- Understand how to use NPM. +- Create, fire and listen for your own events. ### Assignment @@ -27,26 +30,25 @@ By the end of this lesson, you should be able to do the following: - Let's dive in and start looking at Node server-side code! We will be hopping around lessons in the [NodeJS.dev](https://nodejs.dev/en/learn) docs which you should follow along. - Get Started - - Learn how to run Node.js scripts from the terminal in [this](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/command-line/node-run-cli.en.md) lesson. - - Learn quickly about .env files and how we use them [here](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/command-line/node-environment-variables.en.md)! This will become very important in the future when working with databases and other sensitive credentials! + - Learn how to run Node.js scripts from the terminal in [this](https://nodejs.dev/en/learn/run-nodejs-scripts-from-the-command-line/) lesson. + - Learn quickly about .env files and how we use them [here](https://nodejs.dev/en/learn/how-to-read-environment-variables-from-nodejs/)! This will become very important in the future when working with databases and other sensitive credentials! - HTTP Module - Learn [how to make HTTP requests with Node](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-web-server/node-make-http-requests.en.md). - File System - First, take a look at the [fs module](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-modules/node-module-fs.en.md) that we use heavily for working with files in Node. - - Then, let's start [writing files](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/manipulating-files/node-writing-files.en.md) in Node. - - Finally, we'll learn how to [read files](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/manipulating-files/node-reading-files.en.md). + - Then, let's start [writing files](https://nodejs.dev/en/learn/writing-files-with-nodejs/) in Node. + - Finally, we'll learn how to [read files](https://nodejs.dev/en/learn/reading-files-with-nodejs/). - The URL Class - Check out this [documentation](https://nodejs.org/api/url.html#url_the_whatwg_url_api) on the URL class. Play with the code samples to see how it works! - NPM - - Let's get an [introduction](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-package-manager/npm.en.md) to NPM. + - Let's get an [introduction](https://nodejs.dev/en/learn/an-introduction-to-the-npm-package-manager/) to NPM. - After that, it's time to quickly get introduced to the [package.json file](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-package-manager/package-json.en.md). - And the differences between [NPM global and local packages](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-package-manager/npm-packages-local-global.en.md). - Events - - Follow along the [Event Emitter](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/asynchronous-work/node-event-emitter.en.md) section. + - Follow along the [Event Emitter](https://nodejs.dev/en/learn/the-nodejs-event-emitter/) section. - Look into [this](https://github.com/nodejs/nodejs.dev/blob/aa4239e87a5adc992fdb709c20aebb5f6da77f86/content/learn/node-js-modules/node-module-events.en.md) section to see the `events` module. - - Optional Extra Credit! - - Although a bit outdated, the W3 Schools introduction to Node.js is super useful! Go to the [W3 Schools node tutorial](https://www.w3schools.com/nodejs/default.asp) and code along with the following lessons (which should be listed on the sidebar of their site). Specifically, work from the **Node.js Intro** through to **Node.js Events**. You can look at the **File Uploads** and **Email** sections if you're feeling particularly ambitious! **NOTE**: The URL module is very outdated. Refer to the earlier link if you run into issues in the Node.js URL Module from W3. + - Although a bit outdated, the W3 Schools introduction to Node.js is super useful! Go to the [W3 Schools node tutorial](https://www.w3schools.com/nodejs/default.asp) and code along with the following lessons (which should be listed on the sidebar of their site). Specifically, work from the **Node.js Intro** through to **Node.js Events**. You can look at the **File Uploads** and **Email** sections if you're feeling particularly ambitious! **NOTE**: The URL module is very outdated. Refer to the earlier link if you run into issues in the Node.js URL Module from W3.
@@ -54,14 +56,13 @@ By the end of this lesson, you should be able to do the following: This section contains questions for you to check your understanding of this lesson. If you’re having trouble answering the questions below on your own, review the material above to find the answer. - - What is a File System Module? How and why would you use it? - What is the command for installing a package locally in with npm? - What is the command for installing a package globally in with npm? - What is the difference between a global and local package install with npm? - ### Additional resources + This section contains helpful links to other content. It isn't required, so consider it supplemental. - This [crash course video](https://www.youtube.com/watch?v=fBNz5xF-Kx4) from TraversyMedia is a great code-along for getting into Node.js. It may seem repetitive after completing the assignment, but practice is repetition! From cd140600a11419175e1dc3db6397af0c3d2b4df0 Mon Sep 17 00:00:00 2001 From: satvator Date: Mon, 18 Sep 2023 17:29:12 +0530 Subject: [PATCH 52/70] Added 2 lines about 'HTML attributes' --- foundations/html_css/html-foundations/html-boilerplate.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/foundations/html_css/html-foundations/html-boilerplate.md b/foundations/html_css/html-foundations/html-boilerplate.md index 4b2f3e29d9f..b40b97c1832 100644 --- a/foundations/html_css/html-foundations/html-boilerplate.md +++ b/foundations/html_css/html-foundations/html-boilerplate.md @@ -49,6 +49,8 @@ Back in the `index.html` file, let's add the `` element by typing out its ~~~ +Noticed the word `lang` here? It represents an HTML attribute which is associated with the given HTML tag i.e. `` in this case.These attributes provide additional information about HTML elements.(More about `HTML attributes` in the following lesson) + #### What is the lang attribute? `lang` specifies the language of the text content in that element. This attribute is primarily used for improving accessibility of the webpage. It allows assistive technologies, for example screen readers, to adapt according to the language and invoke correct pronunciation. From 4c6492a2a1d8f904d3655ff4e00145bdfa9f5704 Mon Sep 17 00:00:00 2001 From: Ben R Date: Mon, 18 Sep 2023 15:49:28 -0700 Subject: [PATCH 53/70] add lesson overview --- .../professional_networking.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 5126434d311..61f931bc1f5 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -2,9 +2,15 @@ A robust professional network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. -One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. +One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. Making genuine connections with people takes time, however, so we recommend you start investing time and effort sooner than later. -In this lesson we cover what a professional network is, how it might benefit you, and some strategies to consider when to building one. Making genuine connections with people takes time, however, so we recommend you start investing time and effort sooner than later. +### Lesson overview + +This lesson covers the following topics: + +* What a professional network is +* How a professional network might benefit you +* Strategies and actions to consider when building and maintaining your professional network ### What is a professional network? From 2b0bb88d2ad43fdc284b5b0fc2b12dd0dc52e071 Mon Sep 17 00:00:00 2001 From: Ben R Date: Mon, 18 Sep 2023 15:57:10 -0700 Subject: [PATCH 54/70] fix typos and ommissions --- .../preparing_for_job_search/professional_networking.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index 61f931bc1f5..ab8edcaf89a 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -2,7 +2,7 @@ A robust professional network is an irreplaceable asset on your journey to becoming a web developer, and beyond. As social beings we are wired to connect with others, receive help, and give help. This is no different in the software ecosystem where countless communities take part in the mutually beneficial transactions of networking. -One significant benefit of your network is that it might help land you your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide for you. Making genuine connections with people takes time, however, so we recommend you start investing time and effort sooner than later. +One significant benefit of your network is that it might help you land your first job in software. This is not a guarantee, but it is the lived experience of many developers. As with all things, you get back what you put in, so the more developed your network is, the better your odds it will provide a benefit for you. Making genuine connections with people takes time, however, so we recommend you start investing time and effort sooner than later. ### Lesson overview @@ -14,7 +14,7 @@ This lesson covers the following topics: ### What is a professional network? -Your professional network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn help out. +Your professional network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn you can help out later. The network that will help you on your journey to becoming a software developer will mostly consist of people working in software development and adjacent roles, like recruitment or management. Take stock of your network in this field now. Chances are you might benefit from expanding it? @@ -33,7 +33,7 @@ Think of it from the company’s perspective. Hiring is a pain. In a perfect wor So, how do you tap into the hidden jobs market? Through your network. If your network sees you as a trusted individual with a particular skill set, you can be sure they will think of you when matching opportunities arise. You might ask around about potential jobs and receive a heads up of a new opportunity at someone’s company. Better still, you could be recommended for a particular role. Many companies give bonuses to staff who refer a candidate that gets hired. So, the incentive to network and pass names along goes both ways. -This is not all to say you should refrain entirely from applying on posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the Getting Hired course. +This is not all to say you should refrain entirely from applying to posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the Getting Hired course. ### How to build a professional network @@ -47,7 +47,7 @@ Your time is limited and your options are endless. So, you should understand wha In-person networking opportunities will vary based on your location. Larger towns and cities will likely have well-established tech-related events and groups, whereas smaller communities may be more limited. To get a better sense of what’s going on around you, consider the following: -* Check [MeetUp](https://www.meetup.com/) and/or Google for communities focused on a given technology. +* Check [MeetUp](https://www.meetup.com/), [LinkedIn](https://www.linkedin.com/), and/or Google for local communities focused on a given technology. * Scour local business publications for notices on local conferences and tech events. * Talk to friends and family to see who might be a software developer you could be introduced to. * Follow local tech companies on social media to learn about their in-person events. From 8789d59ec26568617735348dc6cda662b159b80a Mon Sep 17 00:00:00 2001 From: Ben R Date: Mon, 18 Sep 2023 15:59:48 -0700 Subject: [PATCH 55/70] add word --- .../preparing_for_job_search/professional_networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index ab8edcaf89a..ee77918ad88 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -26,7 +26,7 @@ When it comes to information gathering, search engines and AI can be very helpfu Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). -When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs are not posted online](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455). This means you are only seeing 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. +When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs are not posted online](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455). This means you are only seeing about 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. Think of it from the company’s perspective. Hiring is a pain. In a perfect world, a great candidate would show up instantly any time a new job opened up. This would save them going through the process of posting the job, screening applicants, marking technical assessments and conducting interviews. This all takes time and is very expensive. So it stands to reason why most companies would prefer to hire through the hidden jobs market. From cf3822fe89c2f626da64cb472c25fac606c9c025 Mon Sep 17 00:00:00 2001 From: Ben R Date: Mon, 18 Sep 2023 16:06:53 -0700 Subject: [PATCH 56/70] fix punctuation for consistency --- .../preparing_for_job_search/professional_networking.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index ee77918ad88..ca62d01ed41 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -62,11 +62,11 @@ Your virtual networking options are much broader and there’s no shortage of pl * [Discord](https://discord.com/) - there’s likely a discord channel dedicated to a given language or framework where you can ask questions and get help. You can sign up for Discord and search for what you are interested in e.g., NodeJS, Ruby on Rails, and request to join. * Open Source projects - when you have the skillset and confidence to contribute to open-source projects, you will be working directly with project maintainers and contributors. It is a great way to connect with other developers while working towards a common good. -A great way to find out reliable information, quickly, is through [informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/). An informational interview is the formal name for a chat with someone who is in a position you want to be in, or are interested in learning about. You get to ask them questions, such as "What path did you take to get to this point?", "What do you do in a typical work day?", "What advice would you give to someone like me?", and "Tell me about the challenges you face in your role". The questions you ask should help you find out if a particular role or company is the right fit for you and if you need to make any adjustments in your strategy. It is also a solid way to connect with the person you are 'interviewing' and it would be wise to add them to your network thereafter (e.g., LinkedIn). +A great way to find out reliable information, quickly, is through [informational interviews](https://blog.get-merit.com/break-into-tech-with-informational-interviewing/). An informational interview is the formal name for a chat with someone who is in a position you want to be in, or are interested in learning about. You get to ask them questions, such as "What path did you take to get to this point?", "What do you do in a typical work day?", "What advice would you give to someone like me?", and "Tell me about the challenges you face in your role". The questions you ask should help you find out if a particular role or company is the right fit for you and if you need to make any adjustments in your strategy. It is also a solid way to connect with the person you are "interviewing" and it would be wise to add them to your network thereafter (e.g., LinkedIn). ### Build Genuine Connections -The economy of professional networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people ‘cold’ and ask them out of the blue to connect with you, or for a favor like ‘help me get this job in your company’ or ‘please be my mentor’. This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. +The economy of professional networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people "cold" and ask them out of the blue to connect with you, or for a favor like "help me get this job in your company" or, "please be my mentor". This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. Your best strategy is to start conversations with a genuine interest in the person and connect on a mutual interest. For example, you could review someone’s profile on LinkedIn and find something in common, or begin a conversation in-person with questions related to what the person does, how they got to where they are, and what challenges they face in their daily work. Make it about them, not you. Show that you are interested in them as a person, not that you want them to give you something. Actively listen to what they say and ask follow-up questions and even offer to help with something if you are in a position to do so. Think of the interaction like dating, you don’t ask someone to be your partner in the first question (do you? lol), so the same applies here. If your initial conversation goes well, then you can follow up with a request to connect. From e54514d42c6a1a5aa23f6fbab648ac04d8ab509b Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Tue, 19 Sep 2023 03:19:43 +0300 Subject: [PATCH 57/70] Fix typo --- nodeJS/final_project/conclusion.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodeJS/final_project/conclusion.md b/nodeJS/final_project/conclusion.md index 81fc20672ea..1be41d1d515 100644 --- a/nodeJS/final_project/conclusion.md +++ b/nodeJS/final_project/conclusion.md @@ -60,4 +60,4 @@ This section contains helpful links to other content. It isn't required, so cons - [Introduction to using React with Typescript](https://profy.dev/article/react-typescript) * [Additional frameworks](https://expressjs.com/en/resources/frameworks.html) built on Express for building specific apps (ie. Feathers for chat applications) * More on APIs with this [fantastic intro video](https://www.youtube.com/watch?v=oBW_VNg4qD0) -* Learn More About DevOPs with [ this fantastic github repos](https://github.com/MichaelCade/90DaysOfDevOps) +* Learn More About DevOPs with [ this fantastic github repo](https://github.com/MichaelCade/90DaysOfDevOps) From b6b0b532c0198eaa9f6efa6786b52418dee3e3c1 Mon Sep 17 00:00:00 2001 From: Austin Sullivan Date: Mon, 18 Sep 2023 20:45:34 -0400 Subject: [PATCH 58/70] Add a note that PRs for assigned issues will be closed --- .github/PULL_REQUEST_TEMPLATE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 2b99ad4a49e..8da45f3caba 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,6 +15,8 @@ If this PR closes an open issue in this repo, replace the XXXXX below with the i If this PR closes an open issue in another TOP repo, replace the #XXXXX with the URL of the issue, e.g. Closes https://github.com/TheOdinProject/curriculum/issues/XXXXX If this PR does not close, but is related to another issue or PR, you can link it as above without the 'Closes' keyword, e.g. 'Related to #2013'. + +_Note:_ any pull request created for an issue that already has someone else assigned **will be closed without review**. --> Closes #XXXXX From 9c81196a6a92b2f56e152a401575e35227e03650 Mon Sep 17 00:00:00 2001 From: Clark Ocampo Date: Tue, 19 Sep 2023 12:59:31 -0700 Subject: [PATCH 59/70] Updated after TOP Curriculum PR review & change request. -Tempered text length and link density for improved learner readability. --- foundations/javascript_basics/fundamentals-2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foundations/javascript_basics/fundamentals-2.md b/foundations/javascript_basics/fundamentals-2.md index 72e1da86dc2..d1ef59baf46 100644 --- a/foundations/javascript_basics/fundamentals-2.md +++ b/foundations/javascript_basics/fundamentals-2.md @@ -84,7 +84,7 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to other content. It isn't required, so consider it supplemental. -- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, be [cautious](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions) about relying on regex too heavily at this stage. There are other various methods to process strings, and regex can be slower in comparison. Regardless, familiarizing yourself with some of its [capabilities](https://www.freecodecamp.org/news/a-quick-and-simple-guide-to-javascript-regular-expressions-48b46a68df29/) can make it a worthwhile addition to your arsenal. +- [Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions), commonly known as regex, is a tool that matches or locates patterns in strings for string validation. However, it's important to know [when you shouldn't use regular expressions](https://softwareengineering.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions). There are other various methods to process strings, and regex can be slower in comparison. - [Web Dev Simplified's Regular Expressions In 20 Minutes](https://www.youtube.com/watch?v=rhzKDrUiJVk) - - [The Net Ninja's Regular Expressions Tutorial](https://www.youtube.com/playlist?list=PL4cUxeGkcC9g6m_6Sld9Q4jzqdqHd2HiD) + \ No newline at end of file From dd9e7b27addbe4b88a328e068b742e7ccc868821 Mon Sep 17 00:00:00 2001 From: Ben R Date: Tue, 19 Sep 2023 18:21:04 -0700 Subject: [PATCH 60/70] fix typo --- .../preparing_for_job_search/professional_networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index ca62d01ed41..b1d7d258d4c 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -47,7 +47,7 @@ Your time is limited and your options are endless. So, you should understand wha In-person networking opportunities will vary based on your location. Larger towns and cities will likely have well-established tech-related events and groups, whereas smaller communities may be more limited. To get a better sense of what’s going on around you, consider the following: -* Check [MeetUp](https://www.meetup.com/), [LinkedIn](https://www.linkedin.com/), and/or Google for local communities focused on a given technology. +* Check [Meetup](https://www.meetup.com/), [LinkedIn](https://www.linkedin.com/), and/or Google for local communities focused on a given technology. * Scour local business publications for notices on local conferences and tech events. * Talk to friends and family to see who might be a software developer you could be introduced to. * Follow local tech companies on social media to learn about their in-person events. From dc1d1157474496549fa028c0c243f9c1dc878425 Mon Sep 17 00:00:00 2001 From: Nazmul Hasan RIVEN <45995219+nazmulhasanriven@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:37:41 +0600 Subject: [PATCH 61/70] Added the official website link of Normalize.css Since GitHub moved all GitHub pages websites from github.com to github.io. The official website/Download link provided in the Normalize.css article is not working anymore. So I've added the new official webpage link of Normalize.css in this section. --- .../intermediate_css_concepts/default_styles.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intermediate_html_css/intermediate_css_concepts/default_styles.md b/intermediate_html_css/intermediate_css_concepts/default_styles.md index afa5c0d7c81..4d0c579fe92 100644 --- a/intermediate_html_css/intermediate_css_concepts/default_styles.md +++ b/intermediate_html_css/intermediate_css_concepts/default_styles.md @@ -22,7 +22,7 @@ You don't _have_ to use a CSS reset. In many cases, you're going to end up undoi
1. [The Meyer Reset](https://meyerweb.com/eric/tools/css/reset/) is almost certainly the most popular. It's very simple and basically removes every default style. -2. [Normalize.css](http://nicolasgallagher.com/about-normalize-css/) is another popular one. It's a little different in that it doesn't remove all the default styles, but tweaks them slightly to ensure that browsers are consistent. Currently, the article's download link is dead. If you want to install normalize.css for your project, use the instructions found in the [normalize.css repository's](https://github.com/necolas/normalize.css) `README.md` file. If you are unsure which method to use, go with the NPM package install. +2. [Normalize.css](http://nicolasgallagher.com/about-normalize-css/) is another popular one. It's a little different in that it doesn't remove all the default styles, but tweaks them slightly to ensure that browsers are consistent. Currently, the article's download link is dead. If you want to install normalize.css for your project, download it from [normalize.css official website](https://necolas.github.io/normalize.css/) or use the instructions found in the [normalize.css repository's](https://github.com/necolas/normalize.css) `README.md` file. If you are unsure which method to use, go with the NPM package install. 3. [Reboot, Resets and Reasoning](https://css-tricks.com/reboot-resets-reasoning/) is a CSS tricks article that goes a little more in-depth, and mentions a few other popular resets. 4. Maybe more trivial than useful, this [Browser Default Styles](https://browserdefaultstyles.com/) site is fun to play with. From 26fdad42d3b9c030d0eeaa2f57933f8fdb48a474 Mon Sep 17 00:00:00 2001 From: Gopesh Khandelwal <76841067+gopesh3652@users.noreply.github.com> Date: Wed, 20 Sep 2023 16:01:00 +0530 Subject: [PATCH 62/70] Update computer_basics.md whilst --> while --- foundations/installations/computer_basics.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foundations/installations/computer_basics.md b/foundations/installations/computer_basics.md index cb94a62a0ec..1516f7ae062 100644 --- a/foundations/installations/computer_basics.md +++ b/foundations/installations/computer_basics.md @@ -1,6 +1,6 @@ ### Introduction -Needless to say, whilst learning to code, you'll be spending most of your time on a computer. Hence, understanding how to work with your computer is crucial. In this lesson, we'll introduce a resource which will quickly get you up to speed with some computer basics. +Needless to say, while learning to code, you'll be spending most of your time on a computer. Hence, understanding how to work with your computer is crucial. In this lesson, we'll introduce a resource which will quickly get you up to speed with some computer basics. ### Lesson overview @@ -40,4 +40,4 @@ This section contains questions for you to check your understanding of this less This section contains helpful links to related content. It isn’t required, so consider it supplemental. - Checkout [GCF's page on "What are accessibility features"](https://edu.gcfglobal.org/en/computerbasics/using-accessibility-features/1/) to learn how you can leverage these features to use your computer efficiently. -- If you feel like spending more time learning about this topic, check out [FreeCodeCamp's excellent course on computer basics](https://youtu.be/y2kg3MOk1sY) \ No newline at end of file +- If you feel like spending more time learning about this topic, check out [FreeCodeCamp's excellent course on computer basics](https://youtu.be/y2kg3MOk1sY) From 42e0c2a8d37cb26e91d1369376c071b8ab02e856 Mon Sep 17 00:00:00 2001 From: Tanjim605 Date: Wed, 20 Sep 2023 18:52:24 +0600 Subject: [PATCH 63/70] Assignment heading of links-and-images from html-foundations from html_css wasn't showing as heading in the website of theodinproject.com maybe for missing of an empty line before triple hash tag so I fixed it. --- foundations/html_css/html-foundations/links-and-images.md | 1 + 1 file changed, 1 insertion(+) diff --git a/foundations/html_css/html-foundations/links-and-images.md b/foundations/html_css/html-foundations/links-and-images.md index 319847d4892..111362c8db6 100644 --- a/foundations/html_css/html-foundations/links-and-images.md +++ b/foundations/html_css/html-foundations/links-and-images.md @@ -244,6 +244,7 @@ Here is our Odin Project logo example with height and width tags included: Go ahead and update the `odin-links-and-images` project with width and height tags on the dog image. + ### Assignment
From 34e012a59a0401cdd701070223f1bbfc4045c523 Mon Sep 17 00:00:00 2001 From: Sushant Singh Chauhan Date: Thu, 21 Sep 2023 18:48:32 +0530 Subject: [PATCH 64/70] Updated Lazy Numbering --- git/foundations_git/introduction_to_git.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/git/foundations_git/introduction_to_git.md b/git/foundations_git/introduction_to_git.md index 9376057f292..a5049237f15 100644 --- a/git/foundations_git/introduction_to_git.md +++ b/git/foundations_git/introduction_to_git.md @@ -33,10 +33,10 @@ This section contains a general overview of topics that you will learn in this l
1. Read Chapter 1.1 through 1.4 in [this book about version control](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) to learn the differences between local, centralized, and distributed version control systems. - 2. Watch [this video](https://www.youtube.com/watch?v=2ReR1YJrNOM) about what Git is and how it can improve the workflow of both an individual and a team of developers. - 3. Watch [this video](https://www.youtube.com/watch?v=1h9_cB9mPT8&feature=youtu.be&t=13s) for some history on Git and GitHub, and make sure you know the difference between the two. Git is a technology used in the command line while GitHub is a [website](https://github.com/) you can visit. - 4. If you haven't yet installed Git, visit the [Setting Up Git](https://www.theodinproject.com/lessons/foundations-setting-up-git) lesson. - 5. Take a look at The Odin Project's very own [GitHub repository](https://github.com/TheOdinProject/curriculum). This is where all the lessons are stored! While you're there, look at all our [contributors](https://github.com/TheOdinProject/curriculum/graphs/contributors) to gain an appreciation for how Git records all collaborative efforts and how GitHub visually represents this. + 1. Watch [this video](https://www.youtube.com/watch?v=2ReR1YJrNOM) about what Git is and how it can improve the workflow of both an individual and a team of developers. + 1. Watch [this video](https://www.youtube.com/watch?v=1h9_cB9mPT8&feature=youtu.be&t=13s) for some history on Git and GitHub, and make sure you know the difference between the two. Git is a technology used in the command line while GitHub is a [website](https://github.com/) you can visit. + 1. If you haven't yet installed Git, visit the [Setting Up Git](https://www.theodinproject.com/lessons/foundations-setting-up-git) lesson. + 1. Take a look at The Odin Project's very own [GitHub repository](https://github.com/TheOdinProject/curriculum). This is where all the lessons are stored! While you're there, look at all our [contributors](https://github.com/TheOdinProject/curriculum/graphs/contributors) to gain an appreciation for how Git records all collaborative efforts and how GitHub visually represents this.
### Knowledge check From b4ad1e4682068ed2d1f00d60eab763b84208a437 Mon Sep 17 00:00:00 2001 From: zhna123 Date: Thu, 21 Sep 2023 19:57:50 -0400 Subject: [PATCH 65/70] Updated Vitest mock notes --- react/react_testing/mocking_callbacks_and_components.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/react/react_testing/mocking_callbacks_and_components.md b/react/react_testing/mocking_callbacks_and_components.md index 1e5ef017996..ed4abae18c1 100644 --- a/react/react_testing/mocking_callbacks_and_components.md +++ b/react/react_testing/mocking_callbacks_and_components.md @@ -129,9 +129,9 @@ We only render the bare minimum to realize the validity of the component we're t
-#### Note +#### Note - Vitest mocks -The test here used `jest.mock()`. If you followed along and set up your test using vitest, you may use `vi.mock()` instead. See [vi.mock() API](https://vitest.dev/api/vi.html#vi-mock) +The test here used `jest.mock()`. If you followed along and set up your test using Vitest, you may use `vi.mock()` instead. See [`vi.mock()` API](https://vitest.dev/api/vi.html#vi-mock).
From bf062287d30b156414196f5080ec0e4ec2815cc7 Mon Sep 17 00:00:00 2001 From: Asartea <76259120+Asartea@users.noreply.github.com> Date: Fri, 22 Sep 2023 18:07:43 +0200 Subject: [PATCH 66/70] bump actions/checkout to v4 --- .github/workflows/testing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index cda00bc2b44..b3fc0b46c42 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -8,7 +8,7 @@ jobs: name: Check for spelling errors runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: codespell-project/actions-codespell@master with: check_filenames: true From ec7a1536c8f0ef289d03855b1e42bb5840a0fd56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Olejniczak?= <0stanislawolejniczak0@gmail.com> Date: Fri, 22 Sep 2023 20:11:18 +0200 Subject: [PATCH 67/70] Fix error throw statement --- react/more_react_concepts/reducing_state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/more_react_concepts/reducing_state.md b/react/more_react_concepts/reducing_state.md index 50b303fa865..98509a17ce7 100644 --- a/react/more_react_concepts/reducing_state.md +++ b/react/more_react_concepts/reducing_state.md @@ -33,7 +33,7 @@ function reducer(state, action) { return { count: action.value }; } default: { - throw new error("unknown action: " + action.type); + throw new Error("unknown action: " + action.type); } } } From cd954539277bb8ea7ca203570caf027068ed0c55 Mon Sep 17 00:00:00 2001 From: Ben R Date: Fri, 22 Sep 2023 11:52:31 -0700 Subject: [PATCH 68/70] additional changes --- .../professional_networking.md | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/getting_hired/preparing_for_job_search/professional_networking.md b/getting_hired/preparing_for_job_search/professional_networking.md index b1d7d258d4c..baab1b3000b 100644 --- a/getting_hired/preparing_for_job_search/professional_networking.md +++ b/getting_hired/preparing_for_job_search/professional_networking.md @@ -16,24 +16,29 @@ This lesson covers the following topics: Your professional network is not the people you follow on social media, nor is it necessarily your friends. It is the people with whom you have made a genuine connection, whether in-person or online, because you have a mutual interest and can gain more value through being connected than you would otherwise have alone. These are the people you can ask for help, and in turn you can help out later. -The network that will help you on your journey to becoming a software developer will mostly consist of people working in software development and adjacent roles, like recruitment or management. Take stock of your network in this field now. Chances are you might benefit from expanding it? +The network that will help you on your journey to becoming a software developer will mostly consist of people working in software development and adjacent roles, like recruitment or management. Take stock of your network in this field now. Chances are, you might benefit from expanding it. ### Why is a professional network useful? -You can probably think of instances where you were stuck on a task and asked someone for help. This was you exercising your network. You can do the same with your software developer network to help you with many things like gather information, make decisions, and find a job. +You can probably think of instances where you were stuck on a task and asked someone for help. This is an example of exercising your network. You can do the same with your software developer network to help you gather information, make decisions, and find a job. -When it comes to information gathering, search engines and AI can be very helpful. But for anything with a bit of nuance, it’s often easier to ask a real human. For example, you might want to conduct an informational interview with a senior developer to learn about what they do and how they broke into the industry. You might be seeking feedback on your portfolio. Or, looking to get some career progression advice. Interacting with someone who has experience in what you seek can be far more beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. +When it comes to information gathering, search engines and AI can be very helpful. But when more nuance is needed, it can be easier to ask a real human. For example: -Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering social proof. If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). +* You might want to conduct an informational interview with a senior developer to learn about what they do and how they broke into the industry. +* You might be seeking feedback on your portfolio. +* You may be looking to get some career progression advice. -When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs are not posted online](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455). This means you are only seeing about 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into the hidden jobs market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. +Interacting with someone who has experience in what you seek can be beneficial because you can form a dialogue, ask follow-up questions, and get real-time feedback. +Your network can also help you make decisions. Have you ever had decision paralysis? This is when you are presented with so many options, you cannot choose. This happens a lot in tech, especially for newcomers, given the sheer number of languages, frameworks and tools to choose from. Sometimes it’s easier to canvas the people you trust and take their recommendations. By doing this we are gathering "social proof". If someone we know recommends something, we are more likely to choose it (it’s also why you read reviews before buying stuff online!). + +When it comes to finding a job, your network can be the most valuable asset you have. Depending on the source, up to [80% of all jobs are not posted online](https://www.forbes.com/sites/dianatsai/2017/10/02/80-of-jobs-are-not-on-job-boards-heres-how-to-find-them/?sh=29ada3fcd455). This means you are only seeing about 20% of all open jobs when you are browsing job boards, and the rest are in the ‘hidden jobs market’. Now, these percentages may vary, but it’s a safe bet that the hidden jobs market is real, and likely significant. If your strategy does not attempt to tap into this market, you are undermining your chances of success and will be stuck competing with many applicants for fewer jobs. Think of it from the company’s perspective. Hiring is a pain. In a perfect world, a great candidate would show up instantly any time a new job opened up. This would save them going through the process of posting the job, screening applicants, marking technical assessments and conducting interviews. This all takes time and is very expensive. So it stands to reason why most companies would prefer to hire through the hidden jobs market. -So, how do you tap into the hidden jobs market? Through your network. If your network sees you as a trusted individual with a particular skill set, you can be sure they will think of you when matching opportunities arise. You might ask around about potential jobs and receive a heads up of a new opportunity at someone’s company. Better still, you could be recommended for a particular role. Many companies give bonuses to staff who refer a candidate that gets hired. So, the incentive to network and pass names along goes both ways. +So, how do you tap into the hidden jobs market? Through your network. If your network sees you as a trusted individual with a particular skill set, you can be sure they will think of you when matching opportunities arise. You might ask around about potential jobs and receive a heads up of a new opportunity at someone’s company. Better still, you could be recommended for a particular role. Many companies even give bonuses to staff who refer a candidate that gets hired, so the incentive to network and pass names along goes both ways. -This is not all to say you should refrain entirely from applying to posted jobs. These can still be worthwhile to pursue, but we recommend quality over quantity and seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the Getting Hired course. +This is not to say you should refrain entirely from applying to posted jobs. These are definitely still worthwhile to pursue, but it's still better to choose quality over quantity by seeking companies that you find interesting and have core values you identify with. You will be better off sending fewer, tailored applications over hundreds of the same application in a shotgun-like approach. We cover more on this in the Getting Hired course. ### How to build a professional network @@ -68,7 +73,7 @@ A great way to find out reliable information, quickly, is through [informational The economy of professional networking rewards authenticity and mutual respect. If you are going to ask a favor of someone, you are far more likely to get help if you have developed a genuine connection. That is to say, please do not approach people "cold" and ask them out of the blue to connect with you, or for a favor like "help me get this job in your company" or, "please be my mentor". This may be perceived as disrespectful. People are busy, and they reserve their limited time for helping those they know and respect. -Your best strategy is to start conversations with a genuine interest in the person and connect on a mutual interest. For example, you could review someone’s profile on LinkedIn and find something in common, or begin a conversation in-person with questions related to what the person does, how they got to where they are, and what challenges they face in their daily work. Make it about them, not you. Show that you are interested in them as a person, not that you want them to give you something. Actively listen to what they say and ask follow-up questions and even offer to help with something if you are in a position to do so. Think of the interaction like dating, you don’t ask someone to be your partner in the first question (do you? lol), so the same applies here. If your initial conversation goes well, then you can follow up with a request to connect. +Your best strategy is to start conversations with a genuine interest in the person and connect on a mutual interest. For example, you could review someone’s profile on LinkedIn and find something in common, or begin a conversation in-person with questions related to what the person does, how they got to where they are, and what challenges they face in their daily work. Make it about them, not you. Show that you are interested in them as a person, not that you want them to give you something. Actively listen to what they say and ask follow-up questions and even offer to help with something if you are in a position to do so. Think of the interaction like dating: you don’t ask someone to be your romantic partner in your first conversation, right? The same applies here. If your initial conversation goes well, then you can follow up with a request to connect. If you find it hard to talk to strangers in person and you are on your way to a local meetup or conference, consider having some predetermined things to talk about. Come up with a few generic questions such as “Where do you work?”, “What tech stack do you use at work?”, “How did you get into coding?”. Also, don’t forget to prepare to talk about yourself. Think of a 30-second elevator pitch describing who you are, what you do, and where you want to be in 12 months. This will help put your mind at ease because you will have something to say when your brain doesn’t feel like thinking in the moment. From 329c5140553c458e3c9c22d2b8c7615323586c8f Mon Sep 17 00:00:00 2001 From: Asartea <76259120+Asartea@users.noreply.github.com> Date: Sat, 23 Sep 2023 11:44:55 +0200 Subject: [PATCH 69/70] Bump stale to v8 --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index d90dcd5ca65..893034e7ca7 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -16,7 +16,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@v5 + - uses: actions/stale@v8 with: stale-issue-label: "Status: Stale" days-before-issue-stale: 30 From fa10fdbd728e1498e6f881f0dd6cd9defdf902e3 Mon Sep 17 00:00:00 2001 From: "Omar (onsmak)" <55961349+OmarNaguib@users.noreply.github.com> Date: Sun, 24 Sep 2023 05:08:23 +0300 Subject: [PATCH 70/70] Update project_etch_a_sketch.md --- foundations/javascript_basics/project_etch_a_sketch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/javascript_basics/project_etch_a_sketch.md b/foundations/javascript_basics/project_etch_a_sketch.md index ad445686793..b9b9176c0ed 100644 --- a/foundations/javascript_basics/project_etch_a_sketch.md +++ b/foundations/javascript_basics/project_etch_a_sketch.md @@ -1,6 +1,6 @@ ### Introduction -In this project, you'll be creating a pretty neat toy for your portfolio to flex your DOM manipulation skills. You're going to build a browser version of something between a sketchpad and an Etch-A-Sketch. +In this project, you'll be creating a pretty neat toy to flex your DOM manipulation skills. You're going to build a browser version of something between a sketchpad and an Etch-A-Sketch. This project should _not_ be easy for you. You'll probably have to Google frequently to get the right JavaScript methods and CSS to use – in fact, that's the point! You _can_ build this using the tools that you have already learned, and there are plenty of resources on the net for learning stuff that we haven't covered yet if you decide you need it. We'll walk you through the basic steps, but it will be up to you to actually implement them.