Permalink
Please sign in to comment.
Showing
with
4,694 additions
and 4,694 deletions.
- +115 −115 10-Steps-To-Plan-Better-So-You-Can-Write-Less-Code.md
- +18 −18 5-Steps-to-organizing-a-successful-Campsite-event..md
- +8 −8 Academic-Honesty-Policy.md
- +12 −12 Accessing-the-database-from-your-frontend.md
- +12 −12 Adding-Environment-Variables.md
- +13 −13 Angular-Resources.md
- +84 −84 Arithmetic-Operators.md
- +24 −24 August-2015-Improvements.md
- +19 −19 August-Live-Stream.md
- +8 −8 Backend-file-structure.md
- +35 −35 Basejump-Resources.md
- +2 −2 Bobby-Tables.md
- +82 −82 Bonfire-Arguments-Optional.md
- +89 −89 Bonfire-Binary-Agents.md
- +36 −36 Bonfire-Boo-who.md
- +55 −55 Bonfire-Check-for-Palindromes.md
- +137 −137 Bonfire-Chunky-Monkey.md
- +36 −36 Bonfire-Confirm-the-Ending.md
- +80 −80 Bonfire-Convert-HTML-Entities.md
- +63 −63 Bonfire-DNA-Pairing.md
- +56 −56 Bonfire-Diff-Two-Arrays.md
- +57 −57 Bonfire-Drop-it.md
- +69 −69 Bonfire-Everything-be-True.md
- +92 −92 Bonfire-Exact-Change.md
- +89 −89 Bonfire-Factorialize-a-Number.md
- +48 −48 Bonfire-Falsy-Bouncer.md
- +100 −100 Bonfire-Friendly-Date-Ranges.md
- +59 −59 Bonfire-Map-the-Debris.md
- +37 −37 Bonfire-Meet-Bonfire.md
- +85 −85 Bonfire-Missing-letters.md
- +46 −46 Bonfire-Pig-Latin.md
- +94 −94 Bonfire-Return-Largest-Numbers-in-Arrays.md
- +33 −33 Bonfire-Reverse-a-String.md
- +42 −42 Bonfire-Search-and-Replace.md
- +38 −38 Bonfire-Seek-and-Destroy.md
- +110 −110 Bonfire-Smallest-Common-Multiple.md
- +51 −51 Bonfire-Sorted-Union.md
- +39 −39 Bonfire-Spinal-Tap-Case.md
- +38 −38 Bonfire-Style-Guide.md
- +60 −60 Bonfire-Sum-All-Numbers-in-a-Range.md
- +64 −64 Bonfire-Sum-All-Primes.md
- +91 −91 Bonfire-Symmetric-Difference.md
- +58 −58 Bonfire-Validate-US-Telephone-Numbers.md
- +93 −93 Bonfire-Where-art-thou.md
- +58 −58 Bonfire-Where-do-I-belong.md
- +48 −48 Bonfire-Wiki-Template.md
- +8 −8 Bonus-SocketIO.md
- +5 −5 Bootstrap.md
- +12 −12 Brownie-Points.md
- +10 −10 Camper-News.md
- +16 −16 Campsites.md
- +13 −13 Clear-Your-Browser's-Local-Storage.md
- +19 −19 Code-of-Conduct.md
- +20 −20 Coding-Help.md
- +260 −260 Contributions-Guide---with-Typo-Demo.md
- +6 −6 Create,-Upload-and-Link-Animated-GIF-Image.md
- +13 −13 Creating-a-New-Github-Issue.md
- +4 −4 Creating-a-new-API-endpoint.md
- +11 −11 Creating-a-new-directive.md
- +9 −9 Creating-a-new-route.md
- +8 −8 Develop-BaseJump-locally-and-run-on-c9.io.md
- +29 −29 Dynamic-URLs-using-$routeParams.md
- +2 −2 Edit-or-Delete-message.md
- +12 −12 Epilogue.md
- +13 −13 Fixing-exports.update.md
- +8 −8 For-loops-Explained.md
- +52 −52 Free-Code-Camp's-Privacy-Policy.md
- +8 −8 Free-Code-Camp-Deployment-Workflow.md
- +9 −9 Free-Code-Camp-Front-End-Development-Certificate.md
- +10 −10 Free-Code-Camp-Full-Stack-Development-Certificate.md
- +118 −118 Free-Code-Camp-JavaScript-Style-Guide.md
- +6 −6 Free-Code-Camp-completion-language-requirements.md
- +9 −9 Free-Code-Camp-logo.md
- +10 −10 Frontend-file-structure.md
- +8 −8 Functional-Programming---Higher-Order-Functions.md
- +14 −14 Get-info-about-the-current-user.md
- +13 −13 Getting-a-coding-job.md
- +8 −8 Git-Blame.md
- +8 −8 Git-Resources.md
- +8 −8 Gitter.md
- +3 −3 Grunt.md
- +30 −30 Guide-to-Basejumps-Table-of-Contents.md
- +33 −33 Guide-to-Submitting-Posts-to-Free-Code-Camp-Medium-Publication.md
- +11 −11 Help-I've-Found-a-Bug.md
- +12 −12 Help-Rooms.md
- +4 −4 Higher-Order-functions.md
- +15 −15 Home.md
- +15 −15 How-Free-Code-Camp-works.md
- +86 −86 How-FreeCodeCamp-Nonprofit-Projects-work.md
- +16 −16 How-GitHub-Issue-Moderators-AKA-Issue-Mods-Work.md
- +18 −18 How-JSONP-is-different-from-JSON.md
- +9 −9 How-Long-Free-Code-Camp-Takes.md
- +8 −8 How-to-Get-Help-on-Gitter.md
- +9 −9 How-to-add-Free-Code-Camp-to-my-LinkedIn-profile.md
- +14 −14 How-to-best-use-the-Global-Control-Shortcuts-for-Mac.md
- +29 −29 How-to-clear-specific-values-from-your-browser's-local-storage.md
- +32 −32 How-to-clone-the-FreeCodeCamp-website-on-a-Windows-pc.md
- +35 −35 How-to-create-a-Campsite-for-your-city.md
- +11 −11 How-to-deploy-a-website-without-writing-any-code-at-all.md
- +20 −20 How-to-get-help-when-you-get-stuck.md
- +96 −96 How-to-get-the-MEAN-stack-running-locally-on-OSX.md
- +16 −16 How-to-install-Screenhero.md
- +16 −16 How-to-know-who-is-in-charge-of-your-Campsite-on-Facebook.md
- +9 −9 How-to-share-your-workspace-selfie-with-FreeCodeCamp-on-instagram.md
- +20 −20 How-to-start-when-you-are-stuck-(I).md
- +29 −29 How-to-start-when-you-are-stuck-(II).md
- +13 −13 How-to-start-when-you-are-stuck-(III).md
- +18 −18 How-to-use-the-Free-Code-Camp-Wiki.md
- +20 −20 How-you-can-get-to-Inbox-Zero-with-Gmail-shortcuts.md
- +9 −9 How-you-can-help-to-stimulate-your-city's-Campsite-on-Facebook.md
- +7 −7 How-you-can-reach-the-Free-Code-Camp-team-to-interview-them-for-your-publication.md
- +29 −29 Html-and-CSS-Cheat-Sheet.md
- +8 −8 IIFE.md
- +6 −6 If-Free-Code-Camp-is-free,-how-does-it-make-money.md
- +8 −8 Intro-to-Yeoman-Angular-Fullstack-Basejumps.md
- +29 −29 JS-Regex-Resources.md
- +69 −69 JS-Resources.md
- +4 −4 JavaScript-Truth-Table.md
- +5 −5 Learn-the-basics-of-the-VIM-editor.md
- +7 −7 Linking-Your-Account-with-GitHub.md
- +524 −524 List-of-Free-Code-Camp-city-based-Campsites.md
230
10-Steps-To-Plan-Better-So-You-Can-Write-Less-Code.md
@@ -1,116 +1,116 @@ | ||
-##Learn how to plan your future project! | ||
- | ||
-*Blog post written by BiancaMihai - [GitHub](https://github.com/biancamihai) / [Twitter](https://twitter.com/intent/user?screen_name=bubuslubu)* | ||
- | ||
-An ounce of preparation is worth a pound of cure. That's true in medicine, and that's definitely true in software development. | ||
- | ||
-Here's a structured 10-step workflow that will guide you through the app planning process, with the goal of saving you from writing a lot of unnecessary code. | ||
- | ||
-Together, we'll plan out a simple "To-do" single-page web app. We'll also plan for an API backend for a future mobile app. | ||
- | ||
-###1) Create our Trello board | ||
- | ||
-[Trello](https://trello.com/) is a fun, free way to break your planning and development process into small tasks that can be tracked. | ||
- | ||
-![Image of Trello board](https://lh3.googleusercontent.com/EI4AQ4NINm3B2DHR_YIS29JyKVa5dTPiT3RtITylmndFlpshTHepsKuO8_1KQNfdPDSBjslDReHCuPFeH1GNrDtgOwTyq6ZtGf3DFBmq1AsAhPHKt_0pLXQLf0o4ZbDuKVj4-Bo) | ||
- | ||
- | ||
-[Here's what our Trello board will eventually look like](https://trello.com/b/O9MZcYyY/todo-app). I prefer to split my tasks into 3 columns (depending on the complexity of the project): | ||
- | ||
-* To Do - what is left to do | ||
-* In progress - tasks that people are currently working on | ||
-* Done - tasks that are done and ready for testing | ||
- | ||
-###2) Write user stories | ||
- | ||
-Here are some example user stories. These will guide how we think about our app's features and functionality. Note that they all follow a similar structure: as a <person> I can <do something>. | ||
- | ||
-* as a logged-in user I can see the list of my to-do's. | ||
-* as a logged-in user I can add a new to-do. | ||
-* as a logged-in user I can delete a to-do (only my to-do's - not other users'). | ||
-* as a logged-in user I can complete a to-do (only my to-do's - not other users'). | ||
-* as an anonymous user, I can register for a new account, recover my password, or log in to the app with an existing account. | ||
- | ||
-###3) Create our use case model | ||
- | ||
-Our use case model will help us visualize our user stories so we can better understand how to implement them. | ||
- | ||
-![Anonymous user case diagram] (https://lh5.googleusercontent.com/2v6iIMbCrLSKVfqttEToum7OA3YGQCBKWUHcSCB1KEbEcijXxQtKJKY6fhLXeecJiO27P4icOuPlkVc9_uNXolzlzNXOo_TPh09GZsAqRH-JISqPrpx0PZdtbHOr0RIuQUbTbaw) | ||
-![Authenticated user case diagram] (https://lh6.googleusercontent.com/3V6dVvAcyjqFkaOukimucYOX0CfwBBYNN9SvjmnVy40Pdhs4Wtrr34i3E-9pbV7tFsp4jHm77IFQvFupjq6OWyxqEgCzcQ995Ayh52Msczu6TfwKeNhL9PYHyxSgmPYA1TR6l6Q) | ||
- | ||
-###4) Create our activity diagram | ||
- | ||
-Our activity diagram will show the different paths our users can take through our app. | ||
- | ||
-![Activity diagram picture](https://lh6.googleusercontent.com/jAQL4myqWOPA3gk2iTpGyAQBrO6p1GlPe8BQQ1Se6a-Di40X3Zw1p0wfJewZUL-YyDmedYzX5Lxvo2GW2Qnr6I-6kuKe1sDb9_5F_n46cKoawWReWW_ZoZCIJO6Semc4fvsiuHc) | ||
- | ||
-A user accesses our to-do application. | ||
-* If the user is not logged in she will see our login page. | ||
-* If she already has an account, she can log in. | ||
-* If she has an account, but she forgot her password, she can recover her password. | ||
-* If she doesn't have an account, she can create one. | ||
-* Both "create an account" and "recover my password" will require email validation. A user can log in to our application only after she has confirmed her email address. | ||
-* If she is logged in, she will see her to-do list (this can be empty if she hasn't added any to-dos yet). | ||
-* A logged in user: | ||
- * is able to see her tasks list | ||
- * is able to mark a task from her list as completed | ||
- * is able to search within her task list | ||
- * is able to delete a task from her list | ||
- * can logout. | ||
-* The user can exit the application at any time. | ||
- | ||
-###5) Create our mockups | ||
- | ||
-Our mockups show what our app should look like. It's much faster to iterate on a mockup than it is to do so on working code. | ||
- | ||
-![Mockup picture](https://lh3.googleusercontent.com/GBFhmBkfr-xM5YSXlR0Fm9y8b24ivdRlUtRWQOHJ8skNxEgjTkAef0e5nZ-CcHKNUq2p4V4hgDuAm9LSEuvbovlVborH1ZioAUXVlEblWZ4hN_d2tGEpxhfTkKH9os2JS1pab4w) | ||
- | ||
-###6) Choose the right technologies for our project | ||
- | ||
-Because this is a single page app, we'll rely heavily - or in this case exclusively - on JavaScript. Let's use one of the most popular JavaScript stacks: the MEAN stack. One big benefit of the MEAN stack is that all of its components are free and open-source. There are also tons of resources available for learning the MEAN stack, and for debugging it when you inevitably encounter errors. | ||
- | ||
-You can have a [MEAN stack development environment](http://www.freecodecamp.com/challenges/waypoint-get-set-for-basejumps) up and running in the cloud in less than an hour, for free. | ||
- | ||
-Here are the components we'll use: | ||
-1. [MongoDB](http://mongodb.org/) for our database | ||
-2. [Node.js](http://nodejs.org/) and [Express.js](http://expressjs.com/) for implementing our API | ||
-3. [AngularJS](http://angularjs.org/), along with HTML and CSS (and Bootstrap) for our client-side application | ||
-4. [Mongoose](http://mongoosejs.com/) to connect our application to MongoDB | ||
- | ||
-###7) Design our database schema | ||
- | ||
-It's worth the effort to design a database schema, even for our simple application. | ||
- | ||
-We'll have two collections: our "Users" collection will house our user data, and our "ToDo" collection will house our tasks that need to be done. One user can have zero, one, or many tasks in her to-do list, so we will have a one-to-many (1:m) relationship between our two collections. | ||
- | ||
-![Database schema diagram](https://lh6.googleusercontent.com/5uSb_xnSSc5CWXJD0yyUGVJsL92RRZl3Bex_3wjuzl5Xr69Ks0j3od-yFju24SAd5wWMBNy9uqBrvOzdrUWluOkbcr4H5zFg-ZemJX3ZRWS12D42OowuvWnxA7wWIGrhhzaQ0aw) | ||
- | ||
-###8) Define our use cases | ||
- | ||
-1. What happens to the to-dos related to a user that deletes her account? When the user deletes her account the to-dos related to that user should also be deleted. | ||
-2. No to-do can be added without being attached to a confirmed user. | ||
-3. A to-do can only be deleted by its owner. | ||
-4. No user can be added with an empty username or password. | ||
-5. No to-do can be added with an empty task. | ||
- | ||
-Things to keep in mind: | ||
- | ||
-1. Use the Mongoose middleware to remove dependent documents like to-dos when a user deletes her account. | ||
-2. Use Mongoose validation rules on models to prevent empty fields from being added to our database. | ||
- | ||
-###9) Design and test our API | ||
- | ||
-I used a free product called Apiary [to document our API](http://docs.fcctodoapp.apiary.io/). | ||
- | ||
-Here's the syntax I used to [create this simple BluePrint](https://jsapi.apiary.io/apis/fcctodoapp.apib). | ||
- | ||
-I recommend you create an account and start playing with it. If you link your [GitHub](http://github.com/) account with Apiary, you can ensure your documentation always stays up to date. You'll also be able to test your data visually without the need for actually hitting your API endpoints. If you prefer to test your API from the command line, [here's an example of how to do this](http://docs.agendor.apiary.io/). | ||
- | ||
- | ||
-Later, once you've implemented your API with Node.js and Express.js, you'll just need to set your URL in Apiary. Then you can start testing your calls. Our current host url (http://fcctodoapp.apiblueprint.org/) will be replaced by your API's URL. | ||
- | ||
-![App demo picture](https://lh6.googleusercontent.com/hU3ilG_y9FqtL_zajQ_KOjWy8Qx590Go8nkNvA1j0oR50YJTpjJhL1lAPgjyeLTAS06tq6V62EcJrLQyT_TR2BK49DYiX6kksU6s9cqJDvvaS6jvepIM6uiO4JMbXuu-oXhdsas) | ||
- | ||
-###10) Start writing code! | ||
- | ||
+##Learn how to plan your future project! | ||
+ | ||
+*Blog post written by BiancaMihai - [GitHub](https://github.com/biancamihai) / [Twitter](https://twitter.com/intent/user?screen_name=bubuslubu)* | ||
+ | ||
+An ounce of preparation is worth a pound of cure. That's true in medicine, and that's definitely true in software development. | ||
+ | ||
+Here's a structured 10-step workflow that will guide you through the app planning process, with the goal of saving you from writing a lot of unnecessary code. | ||
+ | ||
+Together, we'll plan out a simple "To-do" single-page web app. We'll also plan for an API backend for a future mobile app. | ||
+ | ||
+###1) Create our Trello board | ||
+ | ||
+[Trello](https://trello.com/) is a fun, free way to break your planning and development process into small tasks that can be tracked. | ||
+ | ||
+![Image of Trello board](https://lh3.googleusercontent.com/EI4AQ4NINm3B2DHR_YIS29JyKVa5dTPiT3RtITylmndFlpshTHepsKuO8_1KQNfdPDSBjslDReHCuPFeH1GNrDtgOwTyq6ZtGf3DFBmq1AsAhPHKt_0pLXQLf0o4ZbDuKVj4-Bo) | ||
+ | ||
+ | ||
+[Here's what our Trello board will eventually look like](https://trello.com/b/O9MZcYyY/todo-app). I prefer to split my tasks into 3 columns (depending on the complexity of the project): | ||
+ | ||
+* To Do - what is left to do | ||
+* In progress - tasks that people are currently working on | ||
+* Done - tasks that are done and ready for testing | ||
+ | ||
+###2) Write user stories | ||
+ | ||
+Here are some example user stories. These will guide how we think about our app's features and functionality. Note that they all follow a similar structure: as a <person> I can <do something>. | ||
+ | ||
+* as a logged-in user I can see the list of my to-do's. | ||
+* as a logged-in user I can add a new to-do. | ||
+* as a logged-in user I can delete a to-do (only my to-do's - not other users'). | ||
+* as a logged-in user I can complete a to-do (only my to-do's - not other users'). | ||
+* as an anonymous user, I can register for a new account, recover my password, or log in to the app with an existing account. | ||
+ | ||
+###3) Create our use case model | ||
+ | ||
+Our use case model will help us visualize our user stories so we can better understand how to implement them. | ||
+ | ||
+![Anonymous user case diagram] (https://lh5.googleusercontent.com/2v6iIMbCrLSKVfqttEToum7OA3YGQCBKWUHcSCB1KEbEcijXxQtKJKY6fhLXeecJiO27P4icOuPlkVc9_uNXolzlzNXOo_TPh09GZsAqRH-JISqPrpx0PZdtbHOr0RIuQUbTbaw) | ||
+![Authenticated user case diagram] (https://lh6.googleusercontent.com/3V6dVvAcyjqFkaOukimucYOX0CfwBBYNN9SvjmnVy40Pdhs4Wtrr34i3E-9pbV7tFsp4jHm77IFQvFupjq6OWyxqEgCzcQ995Ayh52Msczu6TfwKeNhL9PYHyxSgmPYA1TR6l6Q) | ||
+ | ||
+###4) Create our activity diagram | ||
+ | ||
+Our activity diagram will show the different paths our users can take through our app. | ||
+ | ||
+![Activity diagram picture](https://lh6.googleusercontent.com/jAQL4myqWOPA3gk2iTpGyAQBrO6p1GlPe8BQQ1Se6a-Di40X3Zw1p0wfJewZUL-YyDmedYzX5Lxvo2GW2Qnr6I-6kuKe1sDb9_5F_n46cKoawWReWW_ZoZCIJO6Semc4fvsiuHc) | ||
+ | ||
+A user accesses our to-do application. | ||
+* If the user is not logged in she will see our login page. | ||
+* If she already has an account, she can log in. | ||
+* If she has an account, but she forgot her password, she can recover her password. | ||
+* If she doesn't have an account, she can create one. | ||
+* Both "create an account" and "recover my password" will require email validation. A user can log in to our application only after she has confirmed her email address. | ||
+* If she is logged in, she will see her to-do list (this can be empty if she hasn't added any to-dos yet). | ||
+* A logged in user: | ||
+ * is able to see her tasks list | ||
+ * is able to mark a task from her list as completed | ||
+ * is able to search within her task list | ||
+ * is able to delete a task from her list | ||
+ * can logout. | ||
+* The user can exit the application at any time. | ||
+ | ||
+###5) Create our mockups | ||
+ | ||
+Our mockups show what our app should look like. It's much faster to iterate on a mockup than it is to do so on working code. | ||
+ | ||
+![Mockup picture](https://lh3.googleusercontent.com/GBFhmBkfr-xM5YSXlR0Fm9y8b24ivdRlUtRWQOHJ8skNxEgjTkAef0e5nZ-CcHKNUq2p4V4hgDuAm9LSEuvbovlVborH1ZioAUXVlEblWZ4hN_d2tGEpxhfTkKH9os2JS1pab4w) | ||
+ | ||
+###6) Choose the right technologies for our project | ||
+ | ||
+Because this is a single page app, we'll rely heavily - or in this case exclusively - on JavaScript. Let's use one of the most popular JavaScript stacks: the MEAN stack. One big benefit of the MEAN stack is that all of its components are free and open-source. There are also tons of resources available for learning the MEAN stack, and for debugging it when you inevitably encounter errors. | ||
+ | ||
+You can have a [MEAN stack development environment](http://www.freecodecamp.com/challenges/waypoint-get-set-for-basejumps) up and running in the cloud in less than an hour, for free. | ||
+ | ||
+Here are the components we'll use: | ||
+1. [MongoDB](http://mongodb.org/) for our database | ||
+2. [Node.js](http://nodejs.org/) and [Express.js](http://expressjs.com/) for implementing our API | ||
+3. [AngularJS](http://angularjs.org/), along with HTML and CSS (and Bootstrap) for our client-side application | ||
+4. [Mongoose](http://mongoosejs.com/) to connect our application to MongoDB | ||
+ | ||
+###7) Design our database schema | ||
+ | ||
+It's worth the effort to design a database schema, even for our simple application. | ||
+ | ||
+We'll have two collections: our "Users" collection will house our user data, and our "ToDo" collection will house our tasks that need to be done. One user can have zero, one, or many tasks in her to-do list, so we will have a one-to-many (1:m) relationship between our two collections. | ||
+ | ||
+![Database schema diagram](https://lh6.googleusercontent.com/5uSb_xnSSc5CWXJD0yyUGVJsL92RRZl3Bex_3wjuzl5Xr69Ks0j3od-yFju24SAd5wWMBNy9uqBrvOzdrUWluOkbcr4H5zFg-ZemJX3ZRWS12D42OowuvWnxA7wWIGrhhzaQ0aw) | ||
+ | ||
+###8) Define our use cases | ||
+ | ||
+1. What happens to the to-dos related to a user that deletes her account? When the user deletes her account the to-dos related to that user should also be deleted. | ||
+2. No to-do can be added without being attached to a confirmed user. | ||
+3. A to-do can only be deleted by its owner. | ||
+4. No user can be added with an empty username or password. | ||
+5. No to-do can be added with an empty task. | ||
+ | ||
+Things to keep in mind: | ||
+ | ||
+1. Use the Mongoose middleware to remove dependent documents like to-dos when a user deletes her account. | ||
+2. Use Mongoose validation rules on models to prevent empty fields from being added to our database. | ||
+ | ||
+###9) Design and test our API | ||
+ | ||
+I used a free product called Apiary [to document our API](http://docs.fcctodoapp.apiary.io/). | ||
+ | ||
+Here's the syntax I used to [create this simple BluePrint](https://jsapi.apiary.io/apis/fcctodoapp.apib). | ||
+ | ||
+I recommend you create an account and start playing with it. If you link your [GitHub](http://github.com/) account with Apiary, you can ensure your documentation always stays up to date. You'll also be able to test your data visually without the need for actually hitting your API endpoints. If you prefer to test your API from the command line, [here's an example of how to do this](http://docs.agendor.apiary.io/). | ||
+ | ||
+ | ||
+Later, once you've implemented your API with Node.js and Express.js, you'll just need to set your URL in Apiary. Then you can start testing your calls. Our current host url (http://fcctodoapp.apiblueprint.org/) will be replaced by your API's URL. | ||
+ | ||
+![App demo picture](https://lh6.googleusercontent.com/hU3ilG_y9FqtL_zajQ_KOjWy8Qx590Go8nkNvA1j0oR50YJTpjJhL1lAPgjyeLTAS06tq6V62EcJrLQyT_TR2BK49DYiX6kksU6s9cqJDvvaS6jvepIM6uiO4JMbXuu-oXhdsas) | ||
+ | ||
+###10) Start writing code! | ||
+ | ||
This is the fun part, and it will take up most of your project's time. If you need help with this, join us and learn to code. |
36
5-Steps-to-organizing-a-successful-Campsite-event..md
@@ -1,18 +1,18 @@ | ||
-# In-person group programming sessions and events are fun! | ||
- | ||
-## This Wiki will help you with organizing a successful Campsite event. | ||
- | ||
-### With a little planning and communication having a successful Campsite event can be easy! Here are some steps to help you in doing this. | ||
-### | ||
- | ||
-* Determine the topic for the event (code and coffee, hack session, invite campers to another organization's event). | ||
- | ||
-* Find a suitable location. Campsite events should always take place in a public space (library, cafe, hackerspace). | ||
- | ||
-* Create an event on your Campsite's Facebook page for the event, and link to it on your Campsite Facebook Group page. | ||
- | ||
-* Follow-up with reminder posts for the event 1 week prior to the event and then again the day before the event. | ||
- | ||
-* On the day of the event arrive early, get setup, greet members, and kick the event off. Don't forget to thank everyone afterwards and extend invites to future meetups. | ||
- | ||
-**Try to take some pictures and post them on your Campsite's Facebook group page.** | ||
+# In-person group programming sessions and events are fun! | ||
+ | ||
+## This Wiki will help you with organizing a successful Campsite event. | ||
+ | ||
+### With a little planning and communication having a successful Campsite event can be easy! Here are some steps to help you in doing this. | ||
+### | ||
+ | ||
+* Determine the topic for the event (code and coffee, hack session, invite campers to another organization's event). | ||
+ | ||
+* Find a suitable location. Campsite events should always take place in a public space (library, cafe, hackerspace). | ||
+ | ||
+* Create an event on your Campsite's Facebook page for the event, and link to it on your Campsite Facebook Group page. | ||
+ | ||
+* Follow-up with reminder posts for the event 1 week prior to the event and then again the day before the event. | ||
+ | ||
+* On the day of the event arrive early, get setup, greet members, and kick the event off. Don't forget to thank everyone afterwards and extend invites to future meetups. | ||
+ | ||
+**Try to take some pictures and post them on your Campsite's Facebook group page.** |
16
Academic-Honesty-Policy.md
@@ -1,9 +1,9 @@ | ||
-Before we issue our verified certificate to a camper, he or she must accept our Academic Honesty Pledge, which reads: | ||
- | ||
-**I understand that plagiarism means copying someone else's work and presenting the work as if it were my own, without clearly attributing the original author.** | ||
- | ||
-**I understand that plagiarism is an act of intellectual dishonesty, and that people usually get kicked out of university or fired from their jobs if they get caught plagiarizing.** | ||
- | ||
-**Aside from using open source libraries such as jQuery and Bootstrap, and short snippets of code which are clearly attributed to their original author, 100% of the code in my Bonfires, Basejumps and Ziplines was written by me or along with another camper with whom I was pair programming in real time.** | ||
- | ||
+Before we issue our verified certificate to a camper, he or she must accept our Academic Honesty Pledge, which reads: | ||
+ | ||
+**I understand that plagiarism means copying someone else's work and presenting the work as if it were my own, without clearly attributing the original author.** | ||
+ | ||
+**I understand that plagiarism is an act of intellectual dishonesty, and that people usually get kicked out of university or fired from their jobs if they get caught plagiarizing.** | ||
+ | ||
+**Aside from using open source libraries such as jQuery and Bootstrap, and short snippets of code which are clearly attributed to their original author, 100% of the code in my Bonfires, Basejumps and Ziplines was written by me or along with another camper with whom I was pair programming in real time.** | ||
+ | ||
**I pledge that I did not plagiarize any of my Free Code Camp work, and that I am OK with any random auditing Free Code Camp may do to confirm this.** |
24
Accessing-the-database-from-your-frontend.md
@@ -1,13 +1,13 @@ | ||
-You must have noticed in **main.controller.js** how *things* were retrieved from the database and displayed: | ||
- | ||
-~~~javascript | ||
- $http.get('/api/things').success(function(awesomeThings){ | ||
- $scope.awesomeThings = awesomeThings; | ||
-}); | ||
- | ||
-~~~ | ||
- | ||
-What this does is call the api with a “get” request, which is then routed by **/server/api/thing/index.js** to the *exports.index* function in **thing.controller.js**. You’ll also notice in **main.controller.js** that there are included examples of *$http.post* and *$http.delete* functions too! How nice! | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Fixing-exports.update) | ||
+You must have noticed in **main.controller.js** how *things* were retrieved from the database and displayed: | ||
+ | ||
+~~~javascript | ||
+ $http.get('/api/things').success(function(awesomeThings){ | ||
+ $scope.awesomeThings = awesomeThings; | ||
+}); | ||
+ | ||
+~~~ | ||
+ | ||
+What this does is call the api with a “get” request, which is then routed by **/server/api/thing/index.js** to the *exports.index* function in **thing.controller.js**. You’ll also notice in **main.controller.js** that there are included examples of *$http.post* and *$http.delete* functions too! How nice! | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Fixing-exports.update) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Seed-data) |
24
Adding-Environment-Variables.md
@@ -1,13 +1,13 @@ | ||
-# In Windows | ||
- | ||
-### Via GUI | ||
- | ||
-1. Download [Varpanel](http://implbits.com/products/varpanel/). | ||
-2. Open Varpanel. | ||
-3. In PATH variable, add the relevant path (for example). | ||
- | ||
-![](http://i.imgur.com/RqgGcf5.gif) | ||
- | ||
-## Via Command Line | ||
- | ||
+# In Windows | ||
+ | ||
+### Via GUI | ||
+ | ||
+1. Download [Varpanel](http://implbits.com/products/varpanel/). | ||
+2. Open Varpanel. | ||
+3. In PATH variable, add the relevant path (for example). | ||
+ | ||
+![](http://i.imgur.com/RqgGcf5.gif) | ||
+ | ||
+## Via Command Line | ||
+ | ||
Refer to [this answer](http://superuser.com/a/284351/275797) on Super User. |
26
Angular-Resources.md
@@ -1,14 +1,14 @@ | ||
-A collection of helpful Angular resources | ||
- | ||
-### General Pages | ||
-* [Angular JS](https://angularjs.org/) - The Angular JS Homepage | ||
-* [Angular Style Guide](https://github.com/johnpapa/angular-styleguide) - Detailed best practices for Angular Development | ||
- | ||
-### Specific-topic Pages | ||
-* [Directives](http://www.sitepoint.com/practical-guide-angularjs-directives/) - Excellent guide going into detail on Angular Directives (Part 1) | ||
-* [Directives](http://www.sitepoint.com/practical-guide-angularjs-directives-part-two/) - Excellent guide going into detail on Angular Directives (Part 2) | ||
- | ||
-### Videos | ||
-* [Routing in Angular JS](https://www.youtube.com/watch?v=5uhZCc0j9RY) - Client Side Routing in 15 minutes | ||
-* [Angular ToDo App](https://www.youtube.com/watch?v=WuiHuZq_cg4) - An Angular ToDo app in 12 minutes | ||
+A collection of helpful Angular resources | ||
+ | ||
+### General Pages | ||
+* [Angular JS](https://angularjs.org/) - The Angular JS Homepage | ||
+* [Angular Style Guide](https://github.com/johnpapa/angular-styleguide) - Detailed best practices for Angular Development | ||
+ | ||
+### Specific-topic Pages | ||
+* [Directives](http://www.sitepoint.com/practical-guide-angularjs-directives/) - Excellent guide going into detail on Angular Directives (Part 1) | ||
+* [Directives](http://www.sitepoint.com/practical-guide-angularjs-directives-part-two/) - Excellent guide going into detail on Angular Directives (Part 2) | ||
+ | ||
+### Videos | ||
+* [Routing in Angular JS](https://www.youtube.com/watch?v=5uhZCc0j9RY) - Client Side Routing in 15 minutes | ||
+* [Angular ToDo App](https://www.youtube.com/watch?v=WuiHuZq_cg4) - An Angular ToDo app in 12 minutes | ||
* [Shaping Up with Angular.JS](https://www.codeschool.com/courses/shaping-up-with-angular-js) - A free Angular.JS tutorial |
168
Arithmetic-Operators.md
@@ -1,85 +1,85 @@ | ||
-JavaScript provides the user with five arithmetic operators: `+`, `-`, `*`, `/` and `%`. The operators are for addition, subtraction, multiplication, division and remainder respectively. | ||
- | ||
-### Addition | ||
-**Syntax** | ||
- | ||
-`a + b` | ||
- | ||
-**Usage** | ||
-```js | ||
-2 + 3 // returns 5 | ||
-true + 2 // interprets true as 1 and returns 3 | ||
-false + 5 // interprets false as 0 and returns 5 | ||
-true + "bar" // concatenates the boolean value and returns "truebar" | ||
-5 + "foo" // concatenates the string and the number and returns "5foo" | ||
-"foo" + "bar" // concatenates the strings and returns "foobar" | ||
-``` | ||
- | ||
-*Hint:* There is a handy [increment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()) operator that is a great shortcut when you're adding numbers by 1. | ||
- | ||
-### Subtraction | ||
-**Syntax** | ||
- | ||
-`a - b` | ||
- | ||
-**Usage** | ||
-```js | ||
-2 - 3 // returns -1 | ||
-3 - 2 // returns 1 | ||
-false - 5 // interprets false as 0 and returns -5 | ||
-true + 3 // interprets true as 1 and returns 4 | ||
-5 + "foo" // returns NaN (Not a Number) | ||
-``` | ||
- | ||
-*Hint:* There is a handy [decrement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement_(--)) operator that is a great shortcut when you're subtracting numbers by 1. | ||
- | ||
-### Multiplication | ||
-**Syntax** | ||
- | ||
-`a * b` | ||
- | ||
-**Usage** | ||
-```js | ||
-2 * 3 // returns 6 | ||
-3 * -2 // returns -6 | ||
-false * 5 // interprets false as 0 and returns 0 | ||
-true * 3 // interprets true as 1 and returns 3 | ||
-5 * "foo" // returns NaN (Not a Number) | ||
-Infinity * 0 // returns NaN | ||
-Infinity * Infinity // returns Infinity | ||
-``` | ||
- | ||
-### Division | ||
-**Syntax** | ||
- | ||
-`a / b` | ||
- | ||
-**Usage** | ||
-```js | ||
-3 / 2 // returns 1.5 | ||
-3.0 / 2/0 // returns 1.5 | ||
-3 / 0 // returns Infinity | ||
-3.0 / 0.0 // returns Infinity | ||
--3 / 0 // returns -Infinity | ||
-false / 5 // interprets false as 0 and returns 0 | ||
-true / 2 // interprets true a 1 and returns 0.5 | ||
-5 + "foo" // returns NaN (Not a Number) | ||
-Infinity / Infinity // returns NaN | ||
-``` | ||
- | ||
-### Remainder | ||
-**Syntax** | ||
- | ||
-`a % b` | ||
- | ||
-**Usage** | ||
-```js | ||
-3 % 2 // returns 1 | ||
-true % 5 // interprets true as 1 and returns 1 | ||
-false % 4 // interprets false as 0 and returns 0 | ||
-3 % "bar" // returns NaN | ||
-``` | ||
- | ||
-*!Important!* As you can see, you **cannot** perform any sort of operations on `Infinity`. | ||
- | ||
+JavaScript provides the user with five arithmetic operators: `+`, `-`, `*`, `/` and `%`. The operators are for addition, subtraction, multiplication, division and remainder respectively. | ||
+ | ||
+### Addition | ||
+**Syntax** | ||
+ | ||
+`a + b` | ||
+ | ||
+**Usage** | ||
+```js | ||
+2 + 3 // returns 5 | ||
+true + 2 // interprets true as 1 and returns 3 | ||
+false + 5 // interprets false as 0 and returns 5 | ||
+true + "bar" // concatenates the boolean value and returns "truebar" | ||
+5 + "foo" // concatenates the string and the number and returns "5foo" | ||
+"foo" + "bar" // concatenates the strings and returns "foobar" | ||
+``` | ||
+ | ||
+*Hint:* There is a handy [increment](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()) operator that is a great shortcut when you're adding numbers by 1. | ||
+ | ||
+### Subtraction | ||
+**Syntax** | ||
+ | ||
+`a - b` | ||
+ | ||
+**Usage** | ||
+```js | ||
+2 - 3 // returns -1 | ||
+3 - 2 // returns 1 | ||
+false - 5 // interprets false as 0 and returns -5 | ||
+true + 3 // interprets true as 1 and returns 4 | ||
+5 + "foo" // returns NaN (Not a Number) | ||
+``` | ||
+ | ||
+*Hint:* There is a handy [decrement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement_(--)) operator that is a great shortcut when you're subtracting numbers by 1. | ||
+ | ||
+### Multiplication | ||
+**Syntax** | ||
+ | ||
+`a * b` | ||
+ | ||
+**Usage** | ||
+```js | ||
+2 * 3 // returns 6 | ||
+3 * -2 // returns -6 | ||
+false * 5 // interprets false as 0 and returns 0 | ||
+true * 3 // interprets true as 1 and returns 3 | ||
+5 * "foo" // returns NaN (Not a Number) | ||
+Infinity * 0 // returns NaN | ||
+Infinity * Infinity // returns Infinity | ||
+``` | ||
+ | ||
+### Division | ||
+**Syntax** | ||
+ | ||
+`a / b` | ||
+ | ||
+**Usage** | ||
+```js | ||
+3 / 2 // returns 1.5 | ||
+3.0 / 2/0 // returns 1.5 | ||
+3 / 0 // returns Infinity | ||
+3.0 / 0.0 // returns Infinity | ||
+-3 / 0 // returns -Infinity | ||
+false / 5 // interprets false as 0 and returns 0 | ||
+true / 2 // interprets true a 1 and returns 0.5 | ||
+5 + "foo" // returns NaN (Not a Number) | ||
+Infinity / Infinity // returns NaN | ||
+``` | ||
+ | ||
+### Remainder | ||
+**Syntax** | ||
+ | ||
+`a % b` | ||
+ | ||
+**Usage** | ||
+```js | ||
+3 % 2 // returns 1 | ||
+true % 5 // interprets true as 1 and returns 1 | ||
+false % 4 // interprets false as 0 and returns 0 | ||
+3 % "bar" // returns NaN | ||
+``` | ||
+ | ||
+*!Important!* As you can see, you **cannot** perform any sort of operations on `Infinity`. | ||
+ | ||
Source: The amazing [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators). |
48
August-2015-Improvements.md
@@ -1,24 +1,24 @@ | ||
-## Sunday's Improvements | ||
-* replaced our getting-started videos with a simple 10-minute process (using GIFs instead of videos) | ||
-* doubled the number of our HTML5 and Bootstrap challenges | ||
-* replaced Codecademy's JavaScript and jQuery challenges with our own challenges | ||
-* added our own Object-oriented Programming and Functional Programming challenges | ||
-* added two new Zipline front end challenges (Personal Portfolio and Simon game), and moved our Ziplines to much earlier in our curriculum | ||
-* completely replaced our Field Guide with a searchable, and easily-editable open-source wiki | ||
-* made it so your Bonfire code is stored in your browser, so if you leave the page, your code will be there when you come back | ||
-* simplified our portfolio pages. You can now click a single button to mirror your Free Code Camp profile with your GitHub profile. Bonfire solutions are no longer shown here, but they'll eventually be accessible through our API. | ||
-* fixed some issues with Brownie Points and Streaks | ||
-* improved our Camper News page by removing the (mostly unused) comments and adding one-click upvoting | ||
-* added a Creative Commons license to literally all of our images and text | ||
-* thanks to Loopback, everything is now an API, and we will soon publish cool ways to interact with Free Code Camp's (non-sensitive) data | ||
- | ||
-## FAQ | ||
- | ||
-### The challenge I was most recently doing disappeared. | ||
-You can just keep going. If you have time to go back and try our new challenges, they should be a quick review for you. Otherwise, keep moving forward. | ||
- | ||
-### Why are you deploying all these improvements at once? | ||
-We've been working on some of the features for months on our Staging branch. Most of them were held up by a single task: our transition to [Loopback](http://loopback.io/). @BerkeleyTrue started working on this back in March. | ||
- | ||
-### Was deploying everything at once necessary? | ||
-Probably not. Going forward, we will deploy new code several times a day (as we did prior to the Loopback feature). We plan to start using a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) and other agile best practices as we reduce our [technical debt](https://en.wikipedia.org/wiki/Technical_debt). | ||
+## Sunday's Improvements | ||
+* replaced our getting-started videos with a simple 10-minute process (using GIFs instead of videos) | ||
+* doubled the number of our HTML5 and Bootstrap challenges | ||
+* replaced Codecademy's JavaScript and jQuery challenges with our own challenges | ||
+* added our own Object-oriented Programming and Functional Programming challenges | ||
+* added two new Zipline front end challenges (Personal Portfolio and Simon game), and moved our Ziplines to much earlier in our curriculum | ||
+* completely replaced our Field Guide with a searchable, and easily-editable open-source wiki | ||
+* made it so your Bonfire code is stored in your browser, so if you leave the page, your code will be there when you come back | ||
+* simplified our portfolio pages. You can now click a single button to mirror your Free Code Camp profile with your GitHub profile. Bonfire solutions are no longer shown here, but they'll eventually be accessible through our API. | ||
+* fixed some issues with Brownie Points and Streaks | ||
+* improved our Camper News page by removing the (mostly unused) comments and adding one-click upvoting | ||
+* added a Creative Commons license to literally all of our images and text | ||
+* thanks to Loopback, everything is now an API, and we will soon publish cool ways to interact with Free Code Camp's (non-sensitive) data | ||
+ | ||
+## FAQ | ||
+ | ||
+### The challenge I was most recently doing disappeared. | ||
+You can just keep going. If you have time to go back and try our new challenges, they should be a quick review for you. Otherwise, keep moving forward. | ||
+ | ||
+### Why are you deploying all these improvements at once? | ||
+We've been working on some of the features for months on our Staging branch. Most of them were held up by a single task: our transition to [Loopback](http://loopback.io/). @BerkeleyTrue started working on this back in March. | ||
+ | ||
+### Was deploying everything at once necessary? | ||
+Probably not. Going forward, we will deploy new code several times a day (as we did prior to the Loopback feature). We plan to start using a [continuous integration](https://en.wikipedia.org/wiki/Continuous_integration) and other agile best practices as we reduce our [technical debt](https://en.wikipedia.org/wiki/Technical_debt). |
38
August-Live-Stream.md
@@ -1,20 +1,20 @@ | ||
-### Free Code Camp's [August Live Stream] (https://youtu.be/UhoxoYrJ6Qs) was the largest yet. | ||
- | ||
-## The agenda included: | ||
- | ||
-- Opening words from Michael | ||
-- New front end challenges [3:00] (https://youtu.be/UhoxoYrJ6Qs?t=3m) | ||
-- Newly configured full-stack challenges | ||
-- New Nonprofit Projects [12:32] (https://youtu.be/UhoxoYrJ6Qs?t=12m32s) | ||
-- Wiki [22:49] (https://youtu.be/UhoxoYrJ6Qs?t=22m49s) | ||
-- New chat rooms [29:40] (https://youtu.be/UhoxoYrJ6Qs?t=29m40s) | ||
-- New Live Streams [35:34] (https://youtu.be/UhoxoYrJ6Qs?t=35m34s) | ||
-- New Internet Radio Station DJ'd by campers [36:30] (https://youtu.be/UhoxoYrJ6Qs?t=36m30s) | ||
-- FCC Bot [39:24] (https://youtu.be/UhoxoYrJ6Qs?t=39m24s) | ||
-- Matt Yamamoto Zipline Demo [54:24] (https://youtu.be/UhoxoYrJ6Qs?t=54m24s) | ||
-- Closing from Quincy [1:04:15] (https://youtu.be/UhoxoYrJ6Qs?t=1h4m15s) | ||
-- [Pull Request After Party with Quincy] (https://youtu.be/r0lCJ_TFYlI) | ||
- | ||
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=UhoxoYrJ6Qs | ||
-" target="_blank"><img src="https://www.evernote.com/l/AnvmsUWWNeJFNbfm7fDa7SRLmnbn7jafRL4B/image.png" | ||
+### Free Code Camp's [August Live Stream] (https://youtu.be/UhoxoYrJ6Qs) was the largest yet. | ||
+ | ||
+## The agenda included: | ||
+ | ||
+- Opening words from Michael | ||
+- New front end challenges [3:00] (https://youtu.be/UhoxoYrJ6Qs?t=3m) | ||
+- Newly configured full-stack challenges | ||
+- New Nonprofit Projects [12:32] (https://youtu.be/UhoxoYrJ6Qs?t=12m32s) | ||
+- Wiki [22:49] (https://youtu.be/UhoxoYrJ6Qs?t=22m49s) | ||
+- New chat rooms [29:40] (https://youtu.be/UhoxoYrJ6Qs?t=29m40s) | ||
+- New Live Streams [35:34] (https://youtu.be/UhoxoYrJ6Qs?t=35m34s) | ||
+- New Internet Radio Station DJ'd by campers [36:30] (https://youtu.be/UhoxoYrJ6Qs?t=36m30s) | ||
+- FCC Bot [39:24] (https://youtu.be/UhoxoYrJ6Qs?t=39m24s) | ||
+- Matt Yamamoto Zipline Demo [54:24] (https://youtu.be/UhoxoYrJ6Qs?t=54m24s) | ||
+- Closing from Quincy [1:04:15] (https://youtu.be/UhoxoYrJ6Qs?t=1h4m15s) | ||
+- [Pull Request After Party with Quincy] (https://youtu.be/r0lCJ_TFYlI) | ||
+ | ||
+<a href="http://www.youtube.com/watch?feature=player_embedded&v=UhoxoYrJ6Qs | ||
+" target="_blank"><img src="https://www.evernote.com/l/AnvmsUWWNeJFNbfm7fDa7SRLmnbn7jafRL4B/image.png" | ||
alt="Screen shot from our twitch feed on August 1 2015" width="560" height="315"border="10" /></a> |
16
Backend-file-structure.md
@@ -1,9 +1,9 @@ | ||
-Your app’s backend api that interacts with your database is located in **/server/api** | ||
-Let’s take a look at **/server/api/thing**: | ||
- | ||
-1. **index.js**: this file routes the $http API requests made from your app’s front-end to the appropriate function in **thing.controller.js ** | ||
-2. **thing.controller.js**: Here is where we actually deal with the database! Take a minute to look through here and figure out what’s going on. These functions will: return all items in a collection, return a single item from a collection when passed its id, post an item to a collection, update an item in the collection (this doesn’t really work as intended out of the box, we're going to fix that in a minute), and of course, delete an item from the collection. | ||
-3. **thing.model.js**: Here, the actual structure of a *thing* object is defined. You can add or remove any fields you want from the *thing* model, and as long as they’re syntactically correct they won’t break anything, even if there are *things* with different schemas in your database already. But! You don’t just have to edit the *thing* model to make a new type of collection, because generator-angular-fullstack can do it for you! | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Grunt) | ||
+Your app’s backend api that interacts with your database is located in **/server/api** | ||
+Let’s take a look at **/server/api/thing**: | ||
+ | ||
+1. **index.js**: this file routes the $http API requests made from your app’s front-end to the appropriate function in **thing.controller.js ** | ||
+2. **thing.controller.js**: Here is where we actually deal with the database! Take a minute to look through here and figure out what’s going on. These functions will: return all items in a collection, return a single item from a collection when passed its id, post an item to a collection, update an item in the collection (this doesn’t really work as intended out of the box, we're going to fix that in a minute), and of course, delete an item from the collection. | ||
+3. **thing.model.js**: Here, the actual structure of a *thing* object is defined. You can add or remove any fields you want from the *thing* model, and as long as they’re syntactically correct they won’t break anything, even if there are *things* with different schemas in your database already. But! You don’t just have to edit the *thing* model to make a new type of collection, because generator-angular-fullstack can do it for you! | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Grunt) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-API-endpoint) |
70
Basejump-Resources.md
@@ -1,36 +1,36 @@ | ||
-The curriculum lead-up to the first Basejump is not very comprehensive. Here are a number of common resources which other campers have found helpful. | ||
- | ||
-### Getting Started with Basejumps | ||
-* https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Intro-to-Yeoman-Angular-Fullstack-Basejumps - Lots of helpful tips and tricks for the Yeoman Angular Fullstack setup | ||
-* https://github.com/DaftMonk/generator-angular-fullstack#generators - Generator used by Yeoman, you can find syntax and what files it creates | ||
- | ||
-### APIs | ||
-* API for Charting the stock market: https://www.quandl.com/help/api | ||
- | ||
-### MEAN Stack Tutorials & Videos | ||
-* 5 Part Series on setting up a MEAN stack | ||
-https://www.youtube.com/watch?v=kHV7gOHvNdk | ||
- | ||
-* A MEAN tutorial that creates a simple Twitter clone | ||
-https://channel9.msdn.com/Series/MEAN-Stack-Jump-Start | ||
- | ||
-* Clementine is a stripped down MEAN stack, great for learning the fundamentals. | ||
-https://johnstonbl01.github.io/clementinejs/tutorials/tutorial-beginner.html | ||
- | ||
-* Authentication with Passport for the MEAN stack: | ||
-https://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs | ||
- | ||
-* An amazing list of resources for learning the MEAN stack: | ||
-https://github.com/ericdouglas/MEAN-Learning | ||
- | ||
-### Scotch IO Tutorials | ||
-* https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application | ||
-* https://scotch.io/tutorials/node-and-angular-to-do-app-application-organization-and-structure | ||
- | ||
-### Node/Express | ||
-* [Online Debugging for Node.js/Express](http://stackoverflow.com/a/16512303/1420506) | ||
- | ||
-### Cloud 9 Tricks | ||
-##### Speed up browser reloads | ||
-1. Open gruntfile.js and edit both instances of `livereload: true` to `livereload: false`. | ||
+The curriculum lead-up to the first Basejump is not very comprehensive. Here are a number of common resources which other campers have found helpful. | ||
+ | ||
+### Getting Started with Basejumps | ||
+* https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Intro-to-Yeoman-Angular-Fullstack-Basejumps - Lots of helpful tips and tricks for the Yeoman Angular Fullstack setup | ||
+* https://github.com/DaftMonk/generator-angular-fullstack#generators - Generator used by Yeoman, you can find syntax and what files it creates | ||
+ | ||
+### APIs | ||
+* API for Charting the stock market: https://www.quandl.com/help/api | ||
+ | ||
+### MEAN Stack Tutorials & Videos | ||
+* 5 Part Series on setting up a MEAN stack | ||
+https://www.youtube.com/watch?v=kHV7gOHvNdk | ||
+ | ||
+* A MEAN tutorial that creates a simple Twitter clone | ||
+https://channel9.msdn.com/Series/MEAN-Stack-Jump-Start | ||
+ | ||
+* Clementine is a stripped down MEAN stack, great for learning the fundamentals. | ||
+https://johnstonbl01.github.io/clementinejs/tutorials/tutorial-beginner.html | ||
+ | ||
+* Authentication with Passport for the MEAN stack: | ||
+https://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs | ||
+ | ||
+* An amazing list of resources for learning the MEAN stack: | ||
+https://github.com/ericdouglas/MEAN-Learning | ||
+ | ||
+### Scotch IO Tutorials | ||
+* https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application | ||
+* https://scotch.io/tutorials/node-and-angular-to-do-app-application-organization-and-structure | ||
+ | ||
+### Node/Express | ||
+* [Online Debugging for Node.js/Express](http://stackoverflow.com/a/16512303/1420506) | ||
+ | ||
+### Cloud 9 Tricks | ||
+##### Speed up browser reloads | ||
+1. Open gruntfile.js and edit both instances of `livereload: true` to `livereload: false`. | ||
2. Open server/config/express.js and comment out the line `app.use(require('connect-livereload')());` |
4
Bobby-Tables.md
@@ -1,2 +1,2 @@ | ||
-![Her daughter is named Help I'm trapped in a driver's license factory](https://imgs.xkcd.com/comics/exploits_of_a_mom.png) | ||
-*Source:[xkcd](https://xkcd.com/327/)* | ||
+![Her daughter is named Help I'm trapped in a driver's license factory](https://imgs.xkcd.com/comics/exploits_of_a_mom.png) | ||
+*Source:[xkcd](https://xkcd.com/327/)* |
164
Bonfire-Arguments-Optional.md
@@ -1,82 +1,82 @@ | ||
-![](http://i.imgur.com/63Iaec6.jpg) | ||
- | ||
-# Explanation: | ||
-It can be quite complicated to understand what needs to be done. There is always many ways to do something when coding but regardless of the algorithm used, we have to create a program that does the following: | ||
-- It has to add two numbers passed as parameters and return the sum. | ||
-- It has to check if any of the numbers are actual numbers, otherwise return **undefined** and stop the program right there. | ||
-- It has to check if it has one or two arguments passed. More re ignored. | ||
-- If it has only one then it has to return a function that used that number and expects another one, to then add it. | ||
- | ||
-## Hint: 1 | ||
-Every time you deal with an argument, you have to check if it is a number or not. For this a function that handles this task will save you repeated code. | ||
- | ||
-## Hint: 2 | ||
-When working on the case that it needs to return the function, it is wise to check if the first and only argument is a number again and base the code on that. | ||
- | ||
-## Hint: 3 | ||
-In the case that only one argument was passed, do not worry about how to prompt input for the second one, just make the function definition properly and things will work out the way they should. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function add() { | ||
- // Function to check if a number is actually a number | ||
- // and return undefined otherwise. | ||
- var checkNum = function(num) { | ||
- if (typeof num !== 'number') { | ||
- return undefined; | ||
- } else | ||
- return num; | ||
- }; | ||
- | ||
- // Check if we have two parameters, check if they are numbers | ||
- // handle the case where one is not | ||
- // returns the addition. | ||
- if (arguments.length > 1) { | ||
- var a = checkNum(arguments[0]); | ||
- var b = checkNum(arguments[1]); | ||
- if (a === undefined || b === undefined) { | ||
- return undefined; | ||
- } else { | ||
- return a + b; | ||
- } | ||
- } else { | ||
- // If only one parameter was found, returns a new function that expects two | ||
- // Store first argument before entering the new function scope | ||
- var c = arguments[0]; | ||
- | ||
- // Check the number again, must be outside the function to about returning an object | ||
- // instead of undefined. | ||
- if (checkNum(c)) { | ||
- // Return function that expect a second argument. | ||
- return function(arg2) { | ||
- // Check for non-numbers | ||
- if (c === undefined || checkNum(arg2) === undefined) { | ||
- return undefined; | ||
- } else { | ||
- // if numbers then add them. | ||
- return c + arg2; | ||
- } | ||
- }; | ||
- } | ||
- } | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- First, I create a function with the sole purpose of checking if a number is actually a number and returns undefined if it is not. It uses **typeof** to check. | ||
-- Check if we have two parameters, if so, then check if they are numbers or not using the **checkNum** function I created. | ||
-- If they are not **undefined** then add them and return the addition. If they any of them is undefined then return undefined. | ||
-- In the case that we only have one argument, then we return a new function that expects two parameters. For this we store the first argument before going into a new scope to avoid our arguments being overwritten. | ||
-- Still inside the big else, we need to check the argument we saved, if it is a number then we return the function expecting a second argument. | ||
-- Now inside the function we are returning, we have to check for non numbers again just as at the beginning using **checkNum** if undefined then return that, otherwise if numbers add them and return the addition. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/63Iaec6.jpg) | ||
+ | ||
+# Explanation: | ||
+It can be quite complicated to understand what needs to be done. There is always many ways to do something when coding but regardless of the algorithm used, we have to create a program that does the following: | ||
+- It has to add two numbers passed as parameters and return the sum. | ||
+- It has to check if any of the numbers are actual numbers, otherwise return **undefined** and stop the program right there. | ||
+- It has to check if it has one or two arguments passed. More re ignored. | ||
+- If it has only one then it has to return a function that used that number and expects another one, to then add it. | ||
+ | ||
+## Hint: 1 | ||
+Every time you deal with an argument, you have to check if it is a number or not. For this a function that handles this task will save you repeated code. | ||
+ | ||
+## Hint: 2 | ||
+When working on the case that it needs to return the function, it is wise to check if the first and only argument is a number again and base the code on that. | ||
+ | ||
+## Hint: 3 | ||
+In the case that only one argument was passed, do not worry about how to prompt input for the second one, just make the function definition properly and things will work out the way they should. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function add() { | ||
+ // Function to check if a number is actually a number | ||
+ // and return undefined otherwise. | ||
+ var checkNum = function(num) { | ||
+ if (typeof num !== 'number') { | ||
+ return undefined; | ||
+ } else | ||
+ return num; | ||
+ }; | ||
+ | ||
+ // Check if we have two parameters, check if they are numbers | ||
+ // handle the case where one is not | ||
+ // returns the addition. | ||
+ if (arguments.length > 1) { | ||
+ var a = checkNum(arguments[0]); | ||
+ var b = checkNum(arguments[1]); | ||
+ if (a === undefined || b === undefined) { | ||
+ return undefined; | ||
+ } else { | ||
+ return a + b; | ||
+ } | ||
+ } else { | ||
+ // If only one parameter was found, returns a new function that expects two | ||
+ // Store first argument before entering the new function scope | ||
+ var c = arguments[0]; | ||
+ | ||
+ // Check the number again, must be outside the function to about returning an object | ||
+ // instead of undefined. | ||
+ if (checkNum(c)) { | ||
+ // Return function that expect a second argument. | ||
+ return function(arg2) { | ||
+ // Check for non-numbers | ||
+ if (c === undefined || checkNum(arg2) === undefined) { | ||
+ return undefined; | ||
+ } else { | ||
+ // if numbers then add them. | ||
+ return c + arg2; | ||
+ } | ||
+ }; | ||
+ } | ||
+ } | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- First, I create a function with the sole purpose of checking if a number is actually a number and returns undefined if it is not. It uses **typeof** to check. | ||
+- Check if we have two parameters, if so, then check if they are numbers or not using the **checkNum** function I created. | ||
+- If they are not **undefined** then add them and return the addition. If they any of them is undefined then return undefined. | ||
+- In the case that we only have one argument, then we return a new function that expects two parameters. For this we store the first argument before going into a new scope to avoid our arguments being overwritten. | ||
+- Still inside the big else, we need to check the argument we saved, if it is a number then we return the function expecting a second argument. | ||
+- Now inside the function we are returning, we have to check for non numbers again just as at the beginning using **checkNum** if undefined then return that, otherwise if numbers add them and return the addition. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
178
Bonfire-Binary-Agents.md
@@ -1,90 +1,90 @@ | ||
-![](http://i.imgur.com/HSwaSFK.jpg) | ||
- | ||
-# Explanation: | ||
-This problem is very straight forward, you will get string that will represent a sentence in binary code, and you need to translate that into words. There is not direct way to do this so you will have to translate twice. | ||
- | ||
-You should first convert from **binary** to **decimal** and from decimal before translating those values into characters | ||
- | ||
-## Hint: 2 | ||
-Things are easier when focusing on smaller parts, divide the input to focus on one letter at the time. | ||
- | ||
-## Hint: 3 | ||
-Make sure that each time you transcode a character from binary to decimal, that you reset whatever variable you used to keep track of the ones. Also do not forget to turn everything back into one string. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function binaryAgent(str) { | ||
- biString = str.split(' '); | ||
- uniString = []; | ||
- | ||
-/*using the radix (or base) parameter in parseInt, we can convert the binary | ||
- number to a decimal number while simultaneously converting to a char*/ | ||
- | ||
- for(i=0;i < biString.length;i++){ | ||
- uniString.push(String.fromCharCode(parseInt(biString[i], 2))); | ||
- } | ||
-//we then simply join the string | ||
- return uniString.join(''); | ||
-} | ||
-``` | ||
-# Code Explanation: | ||
-- Separate the string into an array of strings separated by whitespace. | ||
-- Create some variables that will be needed along the way, the names are self explanatory for the most part. | ||
-- Iterate through each binary string in the new array. | ||
-- Convert to decimal by using parseInt(*binary*, 2) (with the second parameter we tell in which base our numbers currently are) | ||
-- At the end, we return out converted message. | ||
- | ||
-## Alternative Solution: | ||
- | ||
-```js | ||
-function binaryAgent(str) { | ||
- // Separate the binary code by space. | ||
- str = str.split(' '); | ||
- var power; | ||
- var decValue = 0; | ||
- var sentence = ''; | ||
- | ||
- // Check each binary number from the array. | ||
- for (var s = 0; s < str.length; s++) { | ||
- // Check each bit from binary number | ||
- for (var t = 0; t < str[s].length; t++) { | ||
- // This only takes into consideration the active ones. | ||
- if (str[s][t] == 1) { | ||
- // This is quivalent to 2 ** position | ||
- power = Math.pow(2, +str[s].length - t - 1); | ||
- decValue += power; | ||
- | ||
- // Record the decimal value by adding the number to the previous one. | ||
- } | ||
- } | ||
- | ||
- // After the binary number is converted to decimal, convert it to string and store | ||
- sentence += (String.fromCharCode(decValue)); | ||
- | ||
- // Reset decimal value for next binary number. | ||
- decValue = 0; | ||
- } | ||
- | ||
- return sentence; | ||
-} | ||
-``` | ||
-# Explanation for the second solution | ||
-- For each of these binary strings, check for the ones and ignore the zeroes. | ||
-- For those that are one or active then convert them to decimal, this takes into account the position and the right power it needs to be raised to. | ||
-- Store the power into the **power** variable by adding it to any previous ones on the variable **decValue**. This variable will add and add the powers of the active ones until the end of the loop and then return the decimal number. | ||
-- Convert the final decimal outside of the inner loop and then convert it to ASCII and saving it to **sentence** along with any other text string already converted and stored. | ||
-- Reset the variable **decValue** to avoid getting wrong decimals before continuing to the outer loop. | ||
- | ||
- | ||
- | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @JamesKee`** | ||
- | ||
+![](http://i.imgur.com/HSwaSFK.jpg) | ||
+ | ||
+# Explanation: | ||
+This problem is very straight forward, you will get string that will represent a sentence in binary code, and you need to translate that into words. There is not direct way to do this so you will have to translate twice. | ||
+ | ||
+You should first convert from **binary** to **decimal** and from decimal before translating those values into characters | ||
+ | ||
+## Hint: 2 | ||
+Things are easier when focusing on smaller parts, divide the input to focus on one letter at the time. | ||
+ | ||
+## Hint: 3 | ||
+Make sure that each time you transcode a character from binary to decimal, that you reset whatever variable you used to keep track of the ones. Also do not forget to turn everything back into one string. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function binaryAgent(str) { | ||
+ biString = str.split(' '); | ||
+ uniString = []; | ||
+ | ||
+/*using the radix (or base) parameter in parseInt, we can convert the binary | ||
+ number to a decimal number while simultaneously converting to a char*/ | ||
+ | ||
+ for(i=0;i < biString.length;i++){ | ||
+ uniString.push(String.fromCharCode(parseInt(biString[i], 2))); | ||
+ } | ||
+//we then simply join the string | ||
+ return uniString.join(''); | ||
+} | ||
+``` | ||
+# Code Explanation: | ||
+- Separate the string into an array of strings separated by whitespace. | ||
+- Create some variables that will be needed along the way, the names are self explanatory for the most part. | ||
+- Iterate through each binary string in the new array. | ||
+- Convert to decimal by using parseInt(*binary*, 2) (with the second parameter we tell in which base our numbers currently are) | ||
+- At the end, we return out converted message. | ||
+ | ||
+## Alternative Solution: | ||
+ | ||
+```js | ||
+function binaryAgent(str) { | ||
+ // Separate the binary code by space. | ||
+ str = str.split(' '); | ||
+ var power; | ||
+ var decValue = 0; | ||
+ var sentence = ''; | ||
+ | ||
+ // Check each binary number from the array. | ||
+ for (var s = 0; s < str.length; s++) { | ||
+ // Check each bit from binary number | ||
+ for (var t = 0; t < str[s].length; t++) { | ||
+ // This only takes into consideration the active ones. | ||
+ if (str[s][t] == 1) { | ||
+ // This is quivalent to 2 ** position | ||
+ power = Math.pow(2, +str[s].length - t - 1); | ||
+ decValue += power; | ||
+ | ||
+ // Record the decimal value by adding the number to the previous one. | ||
+ } | ||
+ } | ||
+ | ||
+ // After the binary number is converted to decimal, convert it to string and store | ||
+ sentence += (String.fromCharCode(decValue)); | ||
+ | ||
+ // Reset decimal value for next binary number. | ||
+ decValue = 0; | ||
+ } | ||
+ | ||
+ return sentence; | ||
+} | ||
+``` | ||
+# Explanation for the second solution | ||
+- For each of these binary strings, check for the ones and ignore the zeroes. | ||
+- For those that are one or active then convert them to decimal, this takes into account the position and the right power it needs to be raised to. | ||
+- Store the power into the **power** variable by adding it to any previous ones on the variable **decValue**. This variable will add and add the powers of the active ones until the end of the loop and then return the decimal number. | ||
+- Convert the final decimal outside of the inner loop and then convert it to ASCII and saving it to **sentence** along with any other text string already converted and stored. | ||
+- Reset the variable **decValue** to avoid getting wrong decimals before continuing to the outer loop. | ||
+ | ||
+ | ||
+ | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @JamesKee`** | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
72
Bonfire-Boo-who.md
@@ -1,36 +1,36 @@ | ||
-![](http://i.imgur.com/CgROCEF.jpg) | ||
- | ||
-# Problem Explanation: | ||
-- This program is very simple, the trick is to understand what a boolean primitive is. The programs requires a true or false answer. | ||
- | ||
-## Hint: 1 | ||
-- You will need to check for the type of the parameter to see if it is a boolean. | ||
- | ||
-## Hint: 2 | ||
-- To check for the type of a parameter, you can use `typeof` | ||
- | ||
-## Hint: 3 | ||
-- Since you must return true or false you can use if statements or just have it return the boolean used for the if statement. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function boo(bool) { | ||
- // Uses the operator typeof to check if is a boolean | ||
- // if yes then return true, if it is another type then return false | ||
- return typeof bool === 'boolean'; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments on code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/CgROCEF.jpg) | ||
+ | ||
+# Problem Explanation: | ||
+- This program is very simple, the trick is to understand what a boolean primitive is. The programs requires a true or false answer. | ||
+ | ||
+## Hint: 1 | ||
+- You will need to check for the type of the parameter to see if it is a boolean. | ||
+ | ||
+## Hint: 2 | ||
+- To check for the type of a parameter, you can use `typeof` | ||
+ | ||
+## Hint: 3 | ||
+- Since you must return true or false you can use if statements or just have it return the boolean used for the if statement. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function boo(bool) { | ||
+ // Uses the operator typeof to check if is a boolean | ||
+ // if yes then return true, if it is another type then return false | ||
+ return typeof bool === 'boolean'; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments on code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
110
Bonfire-Check-for-Palindromes.md
@@ -1,55 +1,55 @@ | ||
-![](http://i.imgur.com/ozDWKEi.jpg) | ||
- | ||
-# Explanation: | ||
-You have to check if the string you get as an input is a palindrome and return `true` if it is, and `false` otherwise. | ||
- | ||
-## Hint: 1 | ||
-You may use regular expressions (`RegExp`) to remove unwanted characters from the string. | ||
-- [http://devdocs.io/#q=js+RegExp](http://devdocs.io/#q=js+RegExp) | ||
- | ||
-## Hint: 2 | ||
-You may use `Array.prototype.split` and `Array.prototype.join` methods or `for` loop. | ||
-- [http://devdocs.io/#q=js+String+split](http://devdocs.io/#q=js+String+split) | ||
-- [http://devdocs.io/#q=js+Array+join](http://devdocs.io/#q=js+Array+join) | ||
-- [http://devdocs.io/#q=js+for](http://devdocs.io/#q=js+for) | ||
- | ||
-## Hint: 3 | ||
-You may lowercase the string using `String.prototype.toLowerCase`. | ||
-- [http://devdocs.io/#q=js+String+toLowerCase](http://devdocs.io/#q=js+String+toLowerCase) | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## First | ||
- | ||
-```js | ||
-function palindrome(str) { | ||
- var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase(); | ||
- var reverseStr = normalizedStr.split('').reverse().join(''); | ||
- return normalizedStr === reverseStr; | ||
-} | ||
-``` | ||
- | ||
-## Second | ||
- | ||
-```js | ||
-function palindrome(str) { | ||
- str = str.toLowerCase().replace(/[\W_]/g, ''); | ||
- for(var i = 0, len = str.length - 1; i < len/2; i++) { | ||
- if(str[i] !== str[len-i]) { | ||
- return false; | ||
- } | ||
- } | ||
- return true; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-We use regular expressions to replace any uppercase letter into a lowercase. Then we check if the string is the same as the reversed string using `split()` to split the original string by characters, then reverse and then join it back together. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @abhisekp` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/ozDWKEi.jpg) | ||
+ | ||
+# Explanation: | ||
+You have to check if the string you get as an input is a palindrome and return `true` if it is, and `false` otherwise. | ||
+ | ||
+## Hint: 1 | ||
+You may use regular expressions (`RegExp`) to remove unwanted characters from the string. | ||
+- [http://devdocs.io/#q=js+RegExp](http://devdocs.io/#q=js+RegExp) | ||
+ | ||
+## Hint: 2 | ||
+You may use `Array.prototype.split` and `Array.prototype.join` methods or `for` loop. | ||
+- [http://devdocs.io/#q=js+String+split](http://devdocs.io/#q=js+String+split) | ||
+- [http://devdocs.io/#q=js+Array+join](http://devdocs.io/#q=js+Array+join) | ||
+- [http://devdocs.io/#q=js+for](http://devdocs.io/#q=js+for) | ||
+ | ||
+## Hint: 3 | ||
+You may lowercase the string using `String.prototype.toLowerCase`. | ||
+- [http://devdocs.io/#q=js+String+toLowerCase](http://devdocs.io/#q=js+String+toLowerCase) | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## First | ||
+ | ||
+```js | ||
+function palindrome(str) { | ||
+ var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase(); | ||
+ var reverseStr = normalizedStr.split('').reverse().join(''); | ||
+ return normalizedStr === reverseStr; | ||
+} | ||
+``` | ||
+ | ||
+## Second | ||
+ | ||
+```js | ||
+function palindrome(str) { | ||
+ str = str.toLowerCase().replace(/[\W_]/g, ''); | ||
+ for(var i = 0, len = str.length - 1; i < len/2; i++) { | ||
+ if(str[i] !== str[len-i]) { | ||
+ return false; | ||
+ } | ||
+ } | ||
+ return true; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+We use regular expressions to replace any uppercase letter into a lowercase. Then we check if the string is the same as the reversed string using `split()` to split the original string by characters, then reverse and then join it back together. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @abhisekp` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
274
Bonfire-Chunky-Monkey.md
@@ -1,137 +1,137 @@ | ||
-![](http://i.imgur.com/RdrnNvA.png) | ||
- | ||
-# Explanation | ||
-Our goal for this bonfire is to split `arr` (first argument) into smaller chunks of arrays with the length provided by `size` (second argument). There are 4 green checks (objectives) our code needs to pass in order to complete this bonfire: | ||
-1. `(['a', 'b', 'c', 'd'], 2)` is expected to be `[['a', 'b'], ['c', 'd']]` | ||
-2. `([0, 1, 2, 3, 4, 5], 3)` is expected to be `[[0, 1, 2], [3, 4, 5]]` | ||
-3. `([0, 1, 2, 3, 4, 5], 2)` is expected to be `[[0, 1], [2, 3], [4, 5]]` | ||
-4. `([0, 1, 2, 3, 4, 5], 4)` is expected to be `[[0, 1, 2, 3], [4, 5]]` | ||
- | ||
-Click **More information** under the bonfire title and read the helpful links if you haven't yet. | ||
- | ||
-## How to approach the bonfire | ||
-The helpful links suggest to use `Array.push()` so let's start by first creating a new array to store the smaller arrays we will soon have like this: | ||
- | ||
-```js | ||
-var newArray = []; | ||
-``` | ||
- | ||
- Next we'll need a `for loop` to loop through `arr` then finally we need a method to do the actual splitting and we can use `Array.slice()` to do that. The key to this bonfire is understanding how a `for loop`, `size`, `Array.slice()` and `Array.push()` all work together. | ||
- | ||
-# How does a for loop and Array.slice() work | ||
-**For Loop** | ||
- | ||
-A `for loop` keeps looping until a condition evaluates to false for example if we had: | ||
- | ||
-```js | ||
-for (var i = 0; i < arr.length; i++) | ||
-``` | ||
- | ||
- `i` starts with a value of 0, `i` loops until `i` is no longer less than the length of `arr` and during each repeat loop, the value of `i` increases by 1 (one). If `arr.length` happens to be 4 then the `for loop` stops right before `i` reaches 4. | ||
- | ||
-**Array.slice() Method** | ||
- | ||
-`Array.slice()` method extracts a portion of an array and returns a copy into a new array. We can declare which element to start and which element to stop. For example, if `arr` is `['a', 'b', 'c', 'd']` and we used `arr.slice(1, 3);`, the `Array.slice()` method starts at element 1 and stops at element 3 then returns: | ||
- | ||
-```js | ||
-["b","c"] | ||
-``` | ||
- | ||
-_Notice how it captures the start element but doesn't capture the stop element._ | ||
- | ||
-# Using a for loop and Array.slice() together | ||
-If we use the following `for loop` while `size` is 2 (note: `size` = 2): | ||
- | ||
-```js | ||
-(var i = 0; i < arr.length; i += size) | ||
-``` | ||
- | ||
- The loop starts at element 0, loops once then `i += 2` which is another way of stating `i = i + 2` so now the new value of `i` becomes 2. What happens if we combine the following `arr.slice()` with the `for loop`? | ||
- | ||
-```js | ||
-arr.slice(i, i + size) | ||
-``` | ||
- | ||
-# Push the arrays out | ||
-We can combine the `Array.slice()` method with the `Array.push()` method inside the `for loop` like this: | ||
- | ||
-```js | ||
-for (var i = 0; i < arr.length; i += size) { | ||
-newArray.push(arr.slice(i, i + size)); | ||
-} | ||
-``` | ||
- | ||
- `arr.slice()` will start at element 0 and stop at element 2. Here's the fun part: once the `for loop`, loops again then the value of `i` becomes 2 while the `i` in the `arr.slice()` will also have a value of 2. The new `arr.slice()` becomes: | ||
- | ||
-```js | ||
-arr.slice(2, 2 + 2) | ||
-``` | ||
- | ||
- Now `arr.slice()` starts at the element 2 and stops at element 4 and in the next loop, `arr.slice()` will start at element 4 and stop at element 6. `newArray.push()` will push all the elements out into chunks of smaller arrays with the length of `size`. | ||
- | ||
-## Solution 1: | ||
- | ||
-```js | ||
-function chunk(arr, size) { | ||
- | ||
- var temp = []; | ||
- var result = []; | ||
- | ||
- for (var a = 0; a < arr.length; a++) { | ||
- if (a % size !== size - 1) | ||
- temp.push(arr[a]); | ||
- else { | ||
- temp.push(arr[a]); | ||
- result.push(temp); | ||
- temp = []; | ||
- } | ||
- } | ||
- | ||
- if (temp.length !== 0) | ||
- result.push(temp); | ||
- return result; | ||
-} | ||
-``` | ||
- | ||
-## Solution 2: | ||
- | ||
-```js | ||
-function chunk(arr, size) { | ||
- // Break it up | ||
- // It's already broken :( | ||
- arr = arr.slice(); | ||
- var arr2 = []; | ||
- for(var i = 0, len = arr.length; i < len; i+=size) { | ||
- arr2.push(arr.slice(0, size)); | ||
- arr = arr.slice(size); | ||
- } | ||
- return arr2; | ||
-} | ||
-``` | ||
- | ||
-## Solution 3: | ||
- | ||
-```js | ||
-function chunk(arr, size) { | ||
- | ||
- // Break it up. | ||
- | ||
- var newArr = []; | ||
- | ||
- for (var i = 0; i < arr.length; i += size) { | ||
- | ||
- newArr.push(arr.slice(i, i + size)); | ||
- | ||
- }; | ||
- | ||
- return newArr; | ||
-} | ||
- | ||
-chunk(["a", "b", "c", "d"], 2, ""); | ||
-``` | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @kirah1314 @Rafase282 @jsommamtek` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
- | ||
+![](http://i.imgur.com/RdrnNvA.png) | ||
+ | ||
+# Explanation | ||
+Our goal for this bonfire is to split `arr` (first argument) into smaller chunks of arrays with the length provided by `size` (second argument). There are 4 green checks (objectives) our code needs to pass in order to complete this bonfire: | ||
+1. `(['a', 'b', 'c', 'd'], 2)` is expected to be `[['a', 'b'], ['c', 'd']]` | ||
+2. `([0, 1, 2, 3, 4, 5], 3)` is expected to be `[[0, 1, 2], [3, 4, 5]]` | ||
+3. `([0, 1, 2, 3, 4, 5], 2)` is expected to be `[[0, 1], [2, 3], [4, 5]]` | ||
+4. `([0, 1, 2, 3, 4, 5], 4)` is expected to be `[[0, 1, 2, 3], [4, 5]]` | ||
+ | ||
+Click **More information** under the bonfire title and read the helpful links if you haven't yet. | ||
+ | ||
+## How to approach the bonfire | ||
+The helpful links suggest to use `Array.push()` so let's start by first creating a new array to store the smaller arrays we will soon have like this: | ||
+ | ||
+```js | ||
+var newArray = []; | ||
+``` | ||
+ | ||
+ Next we'll need a `for loop` to loop through `arr` then finally we need a method to do the actual splitting and we can use `Array.slice()` to do that. The key to this bonfire is understanding how a `for loop`, `size`, `Array.slice()` and `Array.push()` all work together. | ||
+ | ||
+# How does a for loop and Array.slice() work | ||
+**For Loop** | ||
+ | ||
+A `for loop` keeps looping until a condition evaluates to false for example if we had: | ||
+ | ||
+```js | ||
+for (var i = 0; i < arr.length; i++) | ||
+``` | ||
+ | ||
+ `i` starts with a value of 0, `i` loops until `i` is no longer less than the length of `arr` and during each repeat loop, the value of `i` increases by 1 (one). If `arr.length` happens to be 4 then the `for loop` stops right before `i` reaches 4. | ||
+ | ||
+**Array.slice() Method** | ||
+ | ||
+`Array.slice()` method extracts a portion of an array and returns a copy into a new array. We can declare which element to start and which element to stop. For example, if `arr` is `['a', 'b', 'c', 'd']` and we used `arr.slice(1, 3);`, the `Array.slice()` method starts at element 1 and stops at element 3 then returns: | ||
+ | ||
+```js | ||
+["b","c"] | ||
+``` | ||
+ | ||
+_Notice how it captures the start element but doesn't capture the stop element._ | ||
+ | ||
+# Using a for loop and Array.slice() together | ||
+If we use the following `for loop` while `size` is 2 (note: `size` = 2): | ||
+ | ||
+```js | ||
+(var i = 0; i < arr.length; i += size) | ||
+``` | ||
+ | ||
+ The loop starts at element 0, loops once then `i += 2` which is another way of stating `i = i + 2` so now the new value of `i` becomes 2. What happens if we combine the following `arr.slice()` with the `for loop`? | ||
+ | ||
+```js | ||
+arr.slice(i, i + size) | ||
+``` | ||
+ | ||
+# Push the arrays out | ||
+We can combine the `Array.slice()` method with the `Array.push()` method inside the `for loop` like this: | ||
+ | ||
+```js | ||
+for (var i = 0; i < arr.length; i += size) { | ||
+newArray.push(arr.slice(i, i + size)); | ||
+} | ||
+``` | ||
+ | ||
+ `arr.slice()` will start at element 0 and stop at element 2. Here's the fun part: once the `for loop`, loops again then the value of `i` becomes 2 while the `i` in the `arr.slice()` will also have a value of 2. The new `arr.slice()` becomes: | ||
+ | ||
+```js | ||
+arr.slice(2, 2 + 2) | ||
+``` | ||
+ | ||
+ Now `arr.slice()` starts at the element 2 and stops at element 4 and in the next loop, `arr.slice()` will start at element 4 and stop at element 6. `newArray.push()` will push all the elements out into chunks of smaller arrays with the length of `size`. | ||
+ | ||
+## Solution 1: | ||
+ | ||
+```js | ||
+function chunk(arr, size) { | ||
+ | ||
+ var temp = []; | ||
+ var result = []; | ||
+ | ||
+ for (var a = 0; a < arr.length; a++) { | ||
+ if (a % size !== size - 1) | ||
+ temp.push(arr[a]); | ||
+ else { | ||
+ temp.push(arr[a]); | ||
+ result.push(temp); | ||
+ temp = []; | ||
+ } | ||
+ } | ||
+ | ||
+ if (temp.length !== 0) | ||
+ result.push(temp); | ||
+ return result; | ||
+} | ||
+``` | ||
+ | ||
+## Solution 2: | ||
+ | ||
+```js | ||
+function chunk(arr, size) { | ||
+ // Break it up | ||
+ // It's already broken :( | ||
+ arr = arr.slice(); | ||
+ var arr2 = []; | ||
+ for(var i = 0, len = arr.length; i < len; i+=size) { | ||
+ arr2.push(arr.slice(0, size)); | ||
+ arr = arr.slice(size); | ||
+ } | ||
+ return arr2; | ||
+} | ||
+``` | ||
+ | ||
+## Solution 3: | ||
+ | ||
+```js | ||
+function chunk(arr, size) { | ||
+ | ||
+ // Break it up. | ||
+ | ||
+ var newArr = []; | ||
+ | ||
+ for (var i = 0; i < arr.length; i += size) { | ||
+ | ||
+ newArr.push(arr.slice(i, i + size)); | ||
+ | ||
+ }; | ||
+ | ||
+ return newArr; | ||
+} | ||
+ | ||
+chunk(["a", "b", "c", "d"], 2, ""); | ||
+``` | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @kirah1314 @Rafase282 @jsommamtek` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+ |
72
Bonfire-Confirm-the-Ending.md
@@ -1,37 +1,37 @@ | ||
-![](http://i.imgur.com/Z7vhddH.jpg) | ||
- | ||
-# Explanation: | ||
-The function is a whole Boolean operation. You need to return true if the first argument ends with the second argument. This means that for the problem script, it should return true for the `end('Bastian', 'n'); case.` | ||
- | ||
-## Hint: 1 | ||
-Take a look at how substr() works. You will be trying to get the last Nth characters. | ||
- | ||
-## Hint: 2 | ||
-To get the Nth-to-Last character you will use length() and turn it into a negative number. | ||
- | ||
-## Hint: 3 | ||
-Check that you have the proper syntax and that you use `===` to compare. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function end(str, target) { | ||
- if (str.substr(-target.length) === target) | ||
- return true; | ||
- else | ||
- return false; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-We use the subtring() with the negative value of the lengths of target. We could use -1 to get the last element but if the target is actually longer than one letter then the program will provide the wrong information. Then we return true or false as needed. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
- | ||
+![](http://i.imgur.com/Z7vhddH.jpg) | ||
+ | ||
+# Explanation: | ||
+The function is a whole Boolean operation. You need to return true if the first argument ends with the second argument. This means that for the problem script, it should return true for the `end('Bastian', 'n'); case.` | ||
+ | ||
+## Hint: 1 | ||
+Take a look at how substr() works. You will be trying to get the last Nth characters. | ||
+ | ||
+## Hint: 2 | ||
+To get the Nth-to-Last character you will use length() and turn it into a negative number. | ||
+ | ||
+## Hint: 3 | ||
+Check that you have the proper syntax and that you use `===` to compare. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function end(str, target) { | ||
+ if (str.substr(-target.length) === target) | ||
+ return true; | ||
+ else | ||
+ return false; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+We use the subtring() with the negative value of the lengths of target. We could use -1 to get the last element but if the target is actually longer than one letter then the program will provide the wrong information. Then we return true or false as needed. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
160
Bonfire-Convert-HTML-Entities.md
@@ -1,80 +1,80 @@ | ||
-![](http://i.imgur.com/g7sWL1I.jpg) | ||
- | ||
-# Problem Explanation: | ||
-- You have to create a program that will convert HTML entities from string to their corresponding HTML entities. There are only a few so you can use different methods. | ||
- | ||
-## Hint: 1 | ||
-- You can use regular Expressions however I didn't in this case. | ||
- | ||
-## Hint: 2 | ||
-- You will benefit form a chart with all the html entities so you know which ones are the right ones to put. | ||
- | ||
-## Hint: 3 | ||
-- You should separate the string and work with each character to convert the right ones and then join everything back up. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function convert(str) { | ||
- // Split by character to avoid problems. | ||
- | ||
- var temp = str.split(''); | ||
- | ||
- // Since we are only checking for a few HTML elements I used a switch | ||
- | ||
- for (var i = 0; i < temp.length; i++) { | ||
- switch (temp[i]) { | ||
- case '<': | ||
- temp[i] = '<'; | ||
- break; | ||
- case '&': | ||
- temp[i] = '&'; | ||
- break; | ||
- case '>': | ||
- temp[i] = '>'; | ||
- break; | ||
- case '"': | ||
- temp[i] = '"'; | ||
- break; | ||
- case "'": | ||
- temp[i] = '''; | ||
- break; | ||
- } | ||
- } | ||
- | ||
- temp = temp.join(''); | ||
- return temp; | ||
-} | ||
-``` | ||
- | ||
-##Another Solution | ||
-```js | ||
-function convert(str) { | ||
- | ||
- //map of key:value pairs | ||
- var html = { | ||
- "&":"&", | ||
- "<":"<", | ||
- ">":">", | ||
- "\"":""", | ||
- "\'":"'" | ||
- }; | ||
- str = str.replace(/&|<|>|"|'/gi, function(matched){ | ||
- return html[matched]; | ||
- }); | ||
- | ||
- return str; | ||
-} | ||
-``` | ||
-# Code Explanation: | ||
-- Read comments in code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** **`thanks @jhalls`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/g7sWL1I.jpg) | ||
+ | ||
+# Problem Explanation: | ||
+- You have to create a program that will convert HTML entities from string to their corresponding HTML entities. There are only a few so you can use different methods. | ||
+ | ||
+## Hint: 1 | ||
+- You can use regular Expressions however I didn't in this case. | ||
+ | ||
+## Hint: 2 | ||
+- You will benefit form a chart with all the html entities so you know which ones are the right ones to put. | ||
+ | ||
+## Hint: 3 | ||
+- You should separate the string and work with each character to convert the right ones and then join everything back up. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function convert(str) { | ||
+ // Split by character to avoid problems. | ||
+ | ||
+ var temp = str.split(''); | ||
+ | ||
+ // Since we are only checking for a few HTML elements I used a switch | ||
+ | ||
+ for (var i = 0; i < temp.length; i++) { | ||
+ switch (temp[i]) { | ||
+ case '<': | ||
+ temp[i] = '<'; | ||
+ break; | ||
+ case '&': | ||
+ temp[i] = '&'; | ||
+ break; | ||
+ case '>': | ||
+ temp[i] = '>'; | ||
+ break; | ||
+ case '"': | ||
+ temp[i] = '"'; | ||
+ break; | ||
+ case "'": | ||
+ temp[i] = '''; | ||
+ break; | ||
+ } | ||
+ } | ||
+ | ||
+ temp = temp.join(''); | ||
+ return temp; | ||
+} | ||
+``` | ||
+ | ||
+##Another Solution | ||
+```js | ||
+function convert(str) { | ||
+ | ||
+ //map of key:value pairs | ||
+ var html = { | ||
+ "&":"&", | ||
+ "<":"<", | ||
+ ">":">", | ||
+ "\"":""", | ||
+ "\'":"'" | ||
+ }; | ||
+ str = str.replace(/&|<|>|"|'/gi, function(matched){ | ||
+ return html[matched]; | ||
+ }); | ||
+ | ||
+ return str; | ||
+} | ||
+``` | ||
+# Code Explanation: | ||
+- Read comments in code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** **`thanks @jhalls`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
126
Bonfire-DNA-Pairing.md
@@ -1,63 +1,63 @@ | ||
-![](http://i.imgur.com/usiNBDU.jpg) | ||
- | ||
-# Problem Explanation: | ||
-- You will get a DNA strand sequence and you need to get the pair and return it as a 2D array of the base pairs. Keep in mind that the provided strand should be first always. | ||
- | ||
-## Hint: 1 | ||
-- There are two base case, A-T and C-G, these go both way. You can use regular expression, if statements of anything that you can think of. | ||
- | ||
-## Hint: 2 | ||
-- I would recommend using a switch, as it makes things a lot smoother. | ||
- | ||
-## Hint: 3 | ||
-- The result must be an array of arrays, so keep that in mind when pushing things. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function pair(str) { | ||
- // Return each strand as an array of two elements, the original and the pair. | ||
- var paired = []; | ||
- | ||
- // Function to check with strand to pair. | ||
- var search = function(char) { | ||
- switch (char) { | ||
- case 'A': | ||
- paired.push(['A', 'T']); | ||
- break; | ||
- case 'T': | ||
- paired.push(['T', 'A']); | ||
- break; | ||
- case 'C': | ||
- paired.push(['C', 'G']); | ||
- break; | ||
- case 'G': | ||
- paired.push(['G', 'C']); | ||
- break; | ||
- } | ||
- }; | ||
- | ||
- // Loops through the input and pair. | ||
- console.log(char); | ||
- for (var i = 0; i < str.length; i++) { | ||
- search(str[i]); | ||
- } | ||
- | ||
- return paired; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- The program is very simple, the best solution that I have come up with is to use a switch to catch all the possible four elements. Using if statements would take too much code. You could also use Regular Expressions. | ||
-- Since we have to the original and the pair, I decided to take all four cases instead of the base two. | ||
-- Create an empty array and use the `search` function to push the right values to the array and return them. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/usiNBDU.jpg) | ||
+ | ||
+# Problem Explanation: | ||
+- You will get a DNA strand sequence and you need to get the pair and return it as a 2D array of the base pairs. Keep in mind that the provided strand should be first always. | ||
+ | ||
+## Hint: 1 | ||
+- There are two base case, A-T and C-G, these go both way. You can use regular expression, if statements of anything that you can think of. | ||
+ | ||
+## Hint: 2 | ||
+- I would recommend using a switch, as it makes things a lot smoother. | ||
+ | ||
+## Hint: 3 | ||
+- The result must be an array of arrays, so keep that in mind when pushing things. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function pair(str) { | ||
+ // Return each strand as an array of two elements, the original and the pair. | ||
+ var paired = []; | ||
+ | ||
+ // Function to check with strand to pair. | ||
+ var search = function(char) { | ||
+ switch (char) { | ||
+ case 'A': | ||
+ paired.push(['A', 'T']); | ||
+ break; | ||
+ case 'T': | ||
+ paired.push(['T', 'A']); | ||
+ break; | ||
+ case 'C': | ||
+ paired.push(['C', 'G']); | ||
+ break; | ||
+ case 'G': | ||
+ paired.push(['G', 'C']); | ||
+ break; | ||
+ } | ||
+ }; | ||
+ | ||
+ // Loops through the input and pair. | ||
+ console.log(char); | ||
+ for (var i = 0; i < str.length; i++) { | ||
+ search(str[i]); | ||
+ } | ||
+ | ||
+ return paired; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- The program is very simple, the best solution that I have come up with is to use a switch to catch all the possible four elements. Using if statements would take too much code. You could also use Regular Expressions. | ||
+- Since we have to the original and the pair, I decided to take all four cases instead of the base two. | ||
+- Create an empty array and use the `search` function to push the right values to the array and return them. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
112
Bonfire-Diff-Two-Arrays.md
@@ -1,56 +1,56 @@ | ||
-![](http://i.imgur.com/HkEgef5.gif) | ||
- | ||
-# Explanation: | ||
-Check two arrays and return a new array that contains only the items that are not in either of the original arrays. | ||
- | ||
-## Hint: 1 | ||
-- Merge the list to make it easy to compare functions. | ||
- | ||
-## Hint: 2 | ||
-- Use filter to get the new array, you will need to create a callback function. | ||
- | ||
-## Hint: 3 | ||
-- The best way to go about the callback function is to check if the number from the new merged array is not in **both** original arrays and return it. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function diff(arr1, arr2) { | ||
- var newArr = arr1.concat(arr2); | ||
- | ||
- function check(item) { | ||
- if (arr1.indexOf(item) === -1 || arr2.indexOf(item) === -1) { | ||
- return item; | ||
- } | ||
- } | ||
- | ||
- return newArr.filter(check); | ||
-} | ||
-``` | ||
- | ||
-## Code Solution 2: | ||
- | ||
-```js | ||
-function diff(arr1, arr2) { | ||
- // Same, same; but different. | ||
- var newArr = arr1.filter(function (el) { | ||
- return arr2.indexOf(el) === -1; | ||
- | ||
- // concat the previous output of filter method | ||
- // with the next output of filter method | ||
- }).concat(arr2.filter(function (el) { | ||
- return arr1.indexOf(el) === -1; | ||
- })); | ||
- return newArr; | ||
-} | ||
-``` | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/HkEgef5.gif) | ||
+ | ||
+# Explanation: | ||
+Check two arrays and return a new array that contains only the items that are not in either of the original arrays. | ||
+ | ||
+## Hint: 1 | ||
+- Merge the list to make it easy to compare functions. | ||
+ | ||
+## Hint: 2 | ||
+- Use filter to get the new array, you will need to create a callback function. | ||
+ | ||
+## Hint: 3 | ||
+- The best way to go about the callback function is to check if the number from the new merged array is not in **both** original arrays and return it. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function diff(arr1, arr2) { | ||
+ var newArr = arr1.concat(arr2); | ||
+ | ||
+ function check(item) { | ||
+ if (arr1.indexOf(item) === -1 || arr2.indexOf(item) === -1) { | ||
+ return item; | ||
+ } | ||
+ } | ||
+ | ||
+ return newArr.filter(check); | ||
+} | ||
+``` | ||
+ | ||
+## Code Solution 2: | ||
+ | ||
+```js | ||
+function diff(arr1, arr2) { | ||
+ // Same, same; but different. | ||
+ var newArr = arr1.filter(function (el) { | ||
+ return arr2.indexOf(el) === -1; | ||
+ | ||
+ // concat the previous output of filter method | ||
+ // with the next output of filter method | ||
+ }).concat(arr2.filter(function (el) { | ||
+ return arr1.indexOf(el) === -1; | ||
+ })); | ||
+ return newArr; | ||
+} | ||
+``` | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
114
Bonfire-Drop-it.md
@@ -1,57 +1,57 @@ | ||
-![](http://i.imgur.com/goyTFy2.png) | ||
- | ||
-# Explanation: | ||
-Basically while the second argument is not true, you will have to remove the first element from the left of the array that was passed as the first argument. | ||
- | ||
-## Hint: 1 | ||
-You can use Array.shift() or filter that you should be more familiar with to solve this problem in a few lines of code. | ||
- | ||
-## Hint: 2 | ||
-Shift returns the element that was removed which we don't really need, all we need is the modified array that is left. | ||
- | ||
-## Hint: 3 | ||
-If you still can't figure out how to solve it with shift, then try solving it with filter, and check how filter works, if you become familiar with it, then you can make the code with shift. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution 1: | ||
- | ||
-```js | ||
-function drop(arr, func) { | ||
- // Drop them elements. | ||
- var times = arr.length; | ||
- for (var i = 0; i < times; i++) { | ||
- if (func(arr[0])) { | ||
- break; | ||
- } else { | ||
- arr.shift(); | ||
- } | ||
- } | ||
- return arr; | ||
-} | ||
-drop([1, 2, 3], function(n) {return n < 3; }); | ||
-``` | ||
-## Code Solution 2: | ||
-``` | ||
-function drop(arr, func) { | ||
- // Drop them elements. | ||
- | ||
- arr = arr.filter(func); | ||
- | ||
- return arr; | ||
-} | ||
- | ||
-drop([1, 2, 3, 4], function(n) {return n >= 3;}); | ||
-``` | ||
- | ||
- | ||
-# Code Explanation: | ||
-- Create a for loop to check each element. | ||
-- Then check for the function given if true then stop, otherwise remove that element. | ||
-- return the array. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @mhelmetag` | ||
+![](http://i.imgur.com/goyTFy2.png) | ||
+ | ||
+# Explanation: | ||
+Basically while the second argument is not true, you will have to remove the first element from the left of the array that was passed as the first argument. | ||
+ | ||
+## Hint: 1 | ||
+You can use Array.shift() or filter that you should be more familiar with to solve this problem in a few lines of code. | ||
+ | ||
+## Hint: 2 | ||
+Shift returns the element that was removed which we don't really need, all we need is the modified array that is left. | ||
+ | ||
+## Hint: 3 | ||
+If you still can't figure out how to solve it with shift, then try solving it with filter, and check how filter works, if you become familiar with it, then you can make the code with shift. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution 1: | ||
+ | ||
+```js | ||
+function drop(arr, func) { | ||
+ // Drop them elements. | ||
+ var times = arr.length; | ||
+ for (var i = 0; i < times; i++) { | ||
+ if (func(arr[0])) { | ||
+ break; | ||
+ } else { | ||
+ arr.shift(); | ||
+ } | ||
+ } | ||
+ return arr; | ||
+} | ||
+drop([1, 2, 3], function(n) {return n < 3; }); | ||
+``` | ||
+## Code Solution 2: | ||
+``` | ||
+function drop(arr, func) { | ||
+ // Drop them elements. | ||
+ | ||
+ arr = arr.filter(func); | ||
+ | ||
+ return arr; | ||
+} | ||
+ | ||
+drop([1, 2, 3, 4], function(n) {return n >= 3;}); | ||
+``` | ||
+ | ||
+ | ||
+# Code Explanation: | ||
+- Create a for loop to check each element. | ||
+- Then check for the function given if true then stop, otherwise remove that element. | ||
+- return the array. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @mhelmetag` |
138
Bonfire-Everything-be-True.md
@@ -1,69 +1,69 @@ | ||
-![](http://i.imgur.com/oKEJJJI.jpg) | ||
- | ||
-# Explanation: | ||
-The program needs to check if the second argument is a [truthy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-truthy) element, and it must check this for each object in the first argument. | ||
- | ||
-## Hint: 1 | ||
-Remember to iterate through the first argument to check each object. | ||
- | ||
-## Hint: 2 | ||
-Only if all of them are truth will we return true, so make sure all of them check. | ||
- | ||
-## Hint: 3 | ||
-You could use loops or callbacks functions, there are multiple ways to solve this problem. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function every(collection, pre) { | ||
- // Create a counter to check how many are true. | ||
- var counter = 0; | ||
- | ||
- // Check for each object | ||
- for (var c in collection) { | ||
- // If it has the same property or the same property value then add 1 | ||
- if (collection[c].hasOwnProperty(pre) || collection[c][pre] == pre) { | ||
- counter++; | ||
- } | ||
- } | ||
- | ||
- // Outside the loop, check to see if we got true for all of them and return true or false | ||
- if (counter == collection.length) { | ||
- return true; | ||
- } else | ||
- return false; | ||
-} | ||
- | ||
-every([{'user': 'Tinky-Winky', 'sex': 'male'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', | ||
-'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], 'sex'); | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- First I create a counter to check how many cases are actually true. | ||
-- Then check for each object if it it has the same property or the same property value. If true then add one to the counter. | ||
-- Outside the loop, I check to see if the counter variable has the same value as the length of **collection**, if true then return **true**, otherwise, return **false** | ||
- | ||
-## Alternative Code Solution: | ||
-```js | ||
-function every(collection, pre) { | ||
- // Does everyone have one of these? | ||
- return collection.every(function (element, index, array) { | ||
- return element.hasOwnProperty(pre); | ||
- }); | ||
-} | ||
- | ||
-every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex"); | ||
-``` | ||
-# Code Explanation: | ||
-- Uses the native "every" method to test whether all elements in the array pass the test. | ||
-- This link will help [Array.prototype.every()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 and @estevanmaito`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/oKEJJJI.jpg) | ||
+ | ||
+# Explanation: | ||
+The program needs to check if the second argument is a [truthy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-truthy) element, and it must check this for each object in the first argument. | ||
+ | ||
+## Hint: 1 | ||
+Remember to iterate through the first argument to check each object. | ||
+ | ||
+## Hint: 2 | ||
+Only if all of them are truth will we return true, so make sure all of them check. | ||
+ | ||
+## Hint: 3 | ||
+You could use loops or callbacks functions, there are multiple ways to solve this problem. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function every(collection, pre) { | ||
+ // Create a counter to check how many are true. | ||
+ var counter = 0; | ||
+ | ||
+ // Check for each object | ||
+ for (var c in collection) { | ||
+ // If it has the same property or the same property value then add 1 | ||
+ if (collection[c].hasOwnProperty(pre) || collection[c][pre] == pre) { | ||
+ counter++; | ||
+ } | ||
+ } | ||
+ | ||
+ // Outside the loop, check to see if we got true for all of them and return true or false | ||
+ if (counter == collection.length) { | ||
+ return true; | ||
+ } else | ||
+ return false; | ||
+} | ||
+ | ||
+every([{'user': 'Tinky-Winky', 'sex': 'male'}, {'user': 'Dipsy', 'sex': 'male'}, {'user': 'Laa-Laa', | ||
+'sex': 'female'}, {'user': 'Po', 'sex': 'female'}], 'sex'); | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- First I create a counter to check how many cases are actually true. | ||
+- Then check for each object if it it has the same property or the same property value. If true then add one to the counter. | ||
+- Outside the loop, I check to see if the counter variable has the same value as the length of **collection**, if true then return **true**, otherwise, return **false** | ||
+ | ||
+## Alternative Code Solution: | ||
+```js | ||
+function every(collection, pre) { | ||
+ // Does everyone have one of these? | ||
+ return collection.every(function (element, index, array) { | ||
+ return element.hasOwnProperty(pre); | ||
+ }); | ||
+} | ||
+ | ||
+every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex"); | ||
+``` | ||
+# Code Explanation: | ||
+- Uses the native "every" method to test whether all elements in the array pass the test. | ||
+- This link will help [Array.prototype.every()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every) | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 and @estevanmaito`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
184
Bonfire-Exact-Change.md
@@ -1,93 +1,93 @@ | ||
-# Problem Explanation: | ||
-- You have to create a program that will handle when the register does not have enough cash or will have no cash after the transaction. Other than that it needs to return an array of the change in the form of an array, so that will be a 2D array. | ||
- | ||
-## Hint: 1 | ||
-- Is easier to handle if you will have to close the register or if you will not have enough money to complete the transaction if you know beforehand how much money is on your register. For this it would be recommended to have a function get the information assigned to a variable. | ||
- | ||
-## Hint: 2 | ||
-- Life is easier when you get to know the value of each currency type in the register instead of how much money is composed of that particular currency. So be sure to watch out for that. | ||
- | ||
-## Hint: 3 | ||
-- You will have to get as much change from one type before moving to the next from greater value to lesser, and keep going until you have covered the whole change. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function drawer(price, cash, cid) { | ||
- | ||
- // Total Amount to return to client | ||
- var totalChange = +(cash - price).toFixed(2); | ||
- | ||
- //Standard currency Value | ||
- var stdCurr = [0.01, 0.05, 0.10, 0.25, 1, 5, 10, 20, 100]; | ||
- | ||
- //Name of current currency | ||
- var currType; | ||
- | ||
- // How many of the current standard currency | ||
- var stdCurrAmount; | ||
- var currCurrency; | ||
- | ||
- // Change to be returned in proper format. | ||
- var changeArr = []; | ||
- | ||
- var totalCash = +cid.map(function(money) { | ||
- // Gets 1D array of values | ||
- return money[1]; | ||
- }).reduce(function(cash1, cash2) { | ||
- // Reduces the values to one number | ||
- return cash1 + cash2; | ||
- | ||
- // Rounds to two decimal places | ||
- }).toFixed(2); | ||
- | ||
- // Handle the case where we don't have enough money or will be left without money. | ||
- if (totalChange > totalCash) { | ||
- return 'Insufficient Funds'; | ||
- } else if (totalChange === totalCash) { | ||
- return 'Closed'; | ||
- } | ||
- | ||
- // Loops array from right to left. | ||
- for (var i = +cid.length - 1; i >= 0; i--) { | ||
- // Gets the monetary value of the current array and the type. | ||
- currCurrency = +cid[i][1].toFixed(2); | ||
- currType = cid[i][0]; | ||
- | ||
- //If the currency is less than the change left to hand then get the right amount from the current type of change. | ||
- if (+stdCurr[i].toFixed(2) <= +totalChange.toFixed(2)) { | ||
- | ||
- stdCurrAmount = Math.floor(currCurrency / stdCurr[i]); | ||
- | ||
- if ((stdCurr[i] * stdCurrAmount) >= totalChange) { | ||
- stdCurrAmount = Math.floor(totalChange / stdCurr[i]); | ||
- } | ||
- | ||
- //Get the current currency to use and udate the amount left to hand out. | ||
- currCurrency = +(stdCurr[i] * stdCurrAmount).toFixed(2); | ||
- totalChange = +(totalChange - currCurrency).toFixed(2); | ||
- | ||
- // Update the values so we always have the current amount left in the register. | ||
- cid[i][1] = currCurrency; | ||
- | ||
- //Push the change right change to hand out | ||
- changeArr.push([currType, currCurrency]); | ||
- } | ||
- } | ||
- | ||
- return changeArr; | ||
-}; | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments in code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
+# Problem Explanation: | ||
+- You have to create a program that will handle when the register does not have enough cash or will have no cash after the transaction. Other than that it needs to return an array of the change in the form of an array, so that will be a 2D array. | ||
+ | ||
+## Hint: 1 | ||
+- Is easier to handle if you will have to close the register or if you will not have enough money to complete the transaction if you know beforehand how much money is on your register. For this it would be recommended to have a function get the information assigned to a variable. | ||
+ | ||
+## Hint: 2 | ||
+- Life is easier when you get to know the value of each currency type in the register instead of how much money is composed of that particular currency. So be sure to watch out for that. | ||
+ | ||
+## Hint: 3 | ||
+- You will have to get as much change from one type before moving to the next from greater value to lesser, and keep going until you have covered the whole change. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function drawer(price, cash, cid) { | ||
+ | ||
+ // Total Amount to return to client | ||
+ var totalChange = +(cash - price).toFixed(2); | ||
+ | ||
+ //Standard currency Value | ||
+ var stdCurr = [0.01, 0.05, 0.10, 0.25, 1, 5, 10, 20, 100]; | ||
+ | ||
+ //Name of current currency | ||
+ var currType; | ||
+ | ||
+ // How many of the current standard currency | ||
+ var stdCurrAmount; | ||
+ var currCurrency; | ||
+ | ||
+ // Change to be returned in proper format. | ||
+ var changeArr = []; | ||
+ | ||
+ var totalCash = +cid.map(function(money) { | ||
+ // Gets 1D array of values | ||
+ return money[1]; | ||
+ }).reduce(function(cash1, cash2) { | ||
+ // Reduces the values to one number | ||
+ return cash1 + cash2; | ||
+ | ||
+ // Rounds to two decimal places | ||
+ }).toFixed(2); | ||
+ | ||
+ // Handle the case where we don't have enough money or will be left without money. | ||
+ if (totalChange > totalCash) { | ||
+ return 'Insufficient Funds'; | ||
+ } else if (totalChange === totalCash) { | ||
+ return 'Closed'; | ||
+ } | ||
+ | ||
+ // Loops array from right to left. | ||
+ for (var i = +cid.length - 1; i >= 0; i--) { | ||
+ // Gets the monetary value of the current array and the type. | ||
+ currCurrency = +cid[i][1].toFixed(2); | ||
+ currType = cid[i][0]; | ||
+ | ||
+ //If the currency is less than the change left to hand then get the right amount from the current type of change. | ||
+ if (+stdCurr[i].toFixed(2) <= +totalChange.toFixed(2)) { | ||
+ | ||
+ stdCurrAmount = Math.floor(currCurrency / stdCurr[i]); | ||
+ | ||
+ if ((stdCurr[i] * stdCurrAmount) >= totalChange) { | ||
+ stdCurrAmount = Math.floor(totalChange / stdCurr[i]); | ||
+ } | ||
+ | ||
+ //Get the current currency to use and udate the amount left to hand out. | ||
+ currCurrency = +(stdCurr[i] * stdCurrAmount).toFixed(2); | ||
+ totalChange = +(totalChange - currCurrency).toFixed(2); | ||
+ | ||
+ // Update the values so we always have the current amount left in the register. | ||
+ cid[i][1] = currCurrency; | ||
+ | ||
+ //Push the change right change to hand out | ||
+ changeArr.push([currType, currCurrency]); | ||
+ } | ||
+ } | ||
+ | ||
+ return changeArr; | ||
+}; | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments in code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
178
Bonfire-Factorialize-a-Number.md
@@ -1,89 +1,89 @@ | ||
-# The problem | ||
-Return the factorial of the provided integer. If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n. | ||
- | ||
-Factorials are often represented with the shorthand notation n! | ||
- | ||
-For example: `5! = 1 * 2 * 3 * 4 * 5 = 120f` | ||
- | ||
-## Analysis | ||
-Return the factorial of the provided integer. If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n. Factorials are often represented with the shorthand notation n! For example: 5! = 1 _ 2 _ 3 _ 4 _ 5 = 120 | ||
- | ||
-## Outline | ||
-This one is simple, since the factorials of both 0 and 1 is just 1, you can go ahead and return 1. The IF function here is responsible for breaking the loop I created using a **recursive function**, first it checks if the number you gave the function is 0 or 1 and then returns 1 if the condition passed; since there's no ELSE, the rest of the function is executed. | ||
- | ||
-## Understanding recursion | ||
-Now, I put the references I studied to understand a _little bit_ of how recursion works, and it's when a function repeats itself. The first time I did this challenge I used a short but effective **while loop** but I wanted to make it shorter and more efficient, you know... because of reasons ;). Basically what this does is return the number you gave multiplied by the function itself but this time the value passed to the _num_ parameter is `num-1` which ultimately translates to 4. The very function is going to **run inside itself** haha, funny eh? It's like having functions that run inside themselves until they reach a very deep level (depends on how many times it runs itself). | ||
- | ||
-## Visualizing the flow | ||
-![Recursion](http://i61.tinypic.com/28auvsw.jpg) | ||
- | ||
-The first **returned** value can be visualized better if you think about those parenthesis operations you did in secondary school where you do the math inside every parenthesis, bracket and square bracket until you get a final result (a total). This time it's the same thing, look at the program flow: | ||
- | ||
-## During the first execution of the function: | ||
-[**num** = 5] | ||
- | ||
-Is 5 _equal_ to 1 or 0? **No** ---> Oki doki, let's continue... | ||
- | ||
-**Returns:** | ||
- | ||
-(**5** _ (_second execution_: **4** _ (_third execution_: **3** _ (_fourth execution_: **2** _ _fifth execution_: **1**)))) | ||
- | ||
-What it returns can be viewed as `(5*(4*(3*(2*1))))` or just `5 * 4 * 3 * 2 * 1`, and the function will return the result of that operation: `120`. Now, let's check what the rest of the executions do: | ||
- | ||
-## During the rest of the executions: | ||
-- **Second Execution**: _num_ = 5-1 = **4** -> is _num_ 0 or 1? No --> return the multiplication between 4 and the next result when _num_ is now 4-1. | ||
-- **Third Execution**: _num_ = 4 - 1 = **3** -> is _num_ 0 or 1? No --> return the multiplication between 3 and the next result when _num_ is now 3-1. | ||
-- **Fourth Execution**: _num_ = 3-1 = **2** -> is _num_ 0 or 1? No --> return the multiplication between 2 and the next result when _num_ is now 2-1. | ||
-- **Fifth Execution**: _num_ = 2-1 = **1** -> is _num_ 0 or 1? Yep --> return **1**. And this is where the recursion stops because there are no more executions. | ||
- | ||
-## :construction: My Solution is coming up! | ||
-Don't scroll down if you don't want to see it! | ||
- | ||
-![warning](http://www.yourdrum.com/yourdrum/images/2007/10/10/red_warning_sign_2.gif) | ||
- | ||
-``` | ||
- ,,, ,,, | ||
- ;" ^; ;' ", | ||
- ; s$$$$$$$s ; | ||
- , ss$$$$$$$$$$s ,' | ||
- ;s$$$$$$$$$$$$$$$ | ||
- $$$$$$$$$$$$$$$$$$ | ||
- $$$$P""Y$$$Y""W$$$$$ -{ Happy Camping! } | ||
- $$$$ p"$$$"q $$$$$ | ||
- $$$$ .$$$$$. $$$$ | ||
- $$DcaU$$$$$$$$$$ | ||
- "Y$$$"*"$$$Y" | ||
- "$b.$$" | ||
-``` | ||
- | ||
-## Code Solution: | ||
- | ||
-```javascript | ||
-function factorialize(num) { | ||
- if (num === 0 || num == 1) { return 1; } | ||
- return num * factorialize(num-1); | ||
-} | ||
- | ||
-factorialize(5); | ||
-``` | ||
- | ||
-```javascript | ||
-function factorialize(num) { | ||
- var factorial = 1; | ||
- for (var n = 2; n <= num; n++) { | ||
- factorial = factorial * n; | ||
- } | ||
- | ||
- return factorial; | ||
-} | ||
-``` | ||
- | ||
-# References | ||
-- **Recursion**: [https://www.codecademy.com/es/courses/javascript-lesson-205/0/1](https://www.codecademy.com/es/courses/javascript-lesson-205/0/1) | ||
-- **Factorialization**: [https://en.wikipedia.org/wiki/Factorial](https://en.wikipedia.org/wiki/Factorial) | ||
-- [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators) | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @ luishendrix92 @Rafase282` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# The problem | ||
+Return the factorial of the provided integer. If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n. | ||
+ | ||
+Factorials are often represented with the shorthand notation n! | ||
+ | ||
+For example: `5! = 1 * 2 * 3 * 4 * 5 = 120f` | ||
+ | ||
+## Analysis | ||
+Return the factorial of the provided integer. If the integer is represented with the letter n, a factorial is the product of all positive integers less than or equal to n. Factorials are often represented with the shorthand notation n! For example: 5! = 1 _ 2 _ 3 _ 4 _ 5 = 120 | ||
+ | ||
+## Outline | ||
+This one is simple, since the factorials of both 0 and 1 is just 1, you can go ahead and return 1. The IF function here is responsible for breaking the loop I created using a **recursive function**, first it checks if the number you gave the function is 0 or 1 and then returns 1 if the condition passed; since there's no ELSE, the rest of the function is executed. | ||
+ | ||
+## Understanding recursion | ||
+Now, I put the references I studied to understand a _little bit_ of how recursion works, and it's when a function repeats itself. The first time I did this challenge I used a short but effective **while loop** but I wanted to make it shorter and more efficient, you know... because of reasons ;). Basically what this does is return the number you gave multiplied by the function itself but this time the value passed to the _num_ parameter is `num-1` which ultimately translates to 4. The very function is going to **run inside itself** haha, funny eh? It's like having functions that run inside themselves until they reach a very deep level (depends on how many times it runs itself). | ||
+ | ||
+## Visualizing the flow | ||
+![Recursion](http://i61.tinypic.com/28auvsw.jpg) | ||
+ | ||
+The first **returned** value can be visualized better if you think about those parenthesis operations you did in secondary school where you do the math inside every parenthesis, bracket and square bracket until you get a final result (a total). This time it's the same thing, look at the program flow: | ||
+ | ||
+## During the first execution of the function: | ||
+[**num** = 5] | ||
+ | ||
+Is 5 _equal_ to 1 or 0? **No** ---> Oki doki, let's continue... | ||
+ | ||
+**Returns:** | ||
+ | ||
+(**5** _ (_second execution_: **4** _ (_third execution_: **3** _ (_fourth execution_: **2** _ _fifth execution_: **1**)))) | ||
+ | ||
+What it returns can be viewed as `(5*(4*(3*(2*1))))` or just `5 * 4 * 3 * 2 * 1`, and the function will return the result of that operation: `120`. Now, let's check what the rest of the executions do: | ||
+ | ||
+## During the rest of the executions: | ||
+- **Second Execution**: _num_ = 5-1 = **4** -> is _num_ 0 or 1? No --> return the multiplication between 4 and the next result when _num_ is now 4-1. | ||
+- **Third Execution**: _num_ = 4 - 1 = **3** -> is _num_ 0 or 1? No --> return the multiplication between 3 and the next result when _num_ is now 3-1. | ||
+- **Fourth Execution**: _num_ = 3-1 = **2** -> is _num_ 0 or 1? No --> return the multiplication between 2 and the next result when _num_ is now 2-1. | ||
+- **Fifth Execution**: _num_ = 2-1 = **1** -> is _num_ 0 or 1? Yep --> return **1**. And this is where the recursion stops because there are no more executions. | ||
+ | ||
+## :construction: My Solution is coming up! | ||
+Don't scroll down if you don't want to see it! | ||
+ | ||
+![warning](http://www.yourdrum.com/yourdrum/images/2007/10/10/red_warning_sign_2.gif) | ||
+ | ||
+``` | ||
+ ,,, ,,, | ||
+ ;" ^; ;' ", | ||
+ ; s$$$$$$$s ; | ||
+ , ss$$$$$$$$$$s ,' | ||
+ ;s$$$$$$$$$$$$$$$ | ||
+ $$$$$$$$$$$$$$$$$$ | ||
+ $$$$P""Y$$$Y""W$$$$$ -{ Happy Camping! } | ||
+ $$$$ p"$$$"q $$$$$ | ||
+ $$$$ .$$$$$. $$$$ | ||
+ $$DcaU$$$$$$$$$$ | ||
+ "Y$$$"*"$$$Y" | ||
+ "$b.$$" | ||
+``` | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```javascript | ||
+function factorialize(num) { | ||
+ if (num === 0 || num == 1) { return 1; } | ||
+ return num * factorialize(num-1); | ||
+} | ||
+ | ||
+factorialize(5); | ||
+``` | ||
+ | ||
+```javascript | ||
+function factorialize(num) { | ||
+ var factorial = 1; | ||
+ for (var n = 2; n <= num; n++) { | ||
+ factorial = factorial * n; | ||
+ } | ||
+ | ||
+ return factorial; | ||
+} | ||
+``` | ||
+ | ||
+# References | ||
+- **Recursion**: [https://www.codecademy.com/es/courses/javascript-lesson-205/0/1](https://www.codecademy.com/es/courses/javascript-lesson-205/0/1) | ||
+- **Factorialization**: [https://en.wikipedia.org/wiki/Factorial](https://en.wikipedia.org/wiki/Factorial) | ||
+- [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators) | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @ luishendrix92 @Rafase282` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
96
Bonfire-Falsy-Bouncer.md
@@ -1,48 +1,48 @@ | ||
-![](http://i.imgur.com/GluUbAz.jpg) | ||
- | ||
-# Problem Explanation: | ||
-Remove all [falsy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-falsy) values from an array. | ||
- | ||
-## Hint: 1 | ||
-Falsy is something which evaluates to FALSE. There are only six falsy values in JavaScript: undefined, null, NaN, 0, "" (empty string), and false of course. | ||
- | ||
-## Hint: 2 | ||
-We need to make sure we have all the falsy values to compare, we can know it, maybe with a function with all the falsy values... | ||
- | ||
-## Hint: 3 | ||
-Then we need to add a `filter()` with the falsy values function... | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Solution Code: | ||
- | ||
-```js | ||
-function bouncer(arr) { | ||
- // Don't show a false ID to this bouncer. | ||
- // I've a hammer fist. | ||
- | ||
- return arr.filter(Boolean); | ||
-} | ||
-``` | ||
- | ||
-```js | ||
-function bouncer(arr) { | ||
- function isTruthy(arg) { | ||
- return Boolean(arg); | ||
- } | ||
- | ||
- var filteredArray = arr.filter(isTruthy); | ||
- return filteredArray; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-The `Array.prototype.filter` method expects a function that returns a `Boolean` value which takes a single argument and returns `true` for [truthy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-truthy) value or `false` for [falsy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-falsy) value. Hence we pass the built-in `Boolean` function. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @renelis @abhisekp @Rafase282` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/GluUbAz.jpg) | ||
+ | ||
+# Problem Explanation: | ||
+Remove all [falsy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-falsy) values from an array. | ||
+ | ||
+## Hint: 1 | ||
+Falsy is something which evaluates to FALSE. There are only six falsy values in JavaScript: undefined, null, NaN, 0, "" (empty string), and false of course. | ||
+ | ||
+## Hint: 2 | ||
+We need to make sure we have all the falsy values to compare, we can know it, maybe with a function with all the falsy values... | ||
+ | ||
+## Hint: 3 | ||
+Then we need to add a `filter()` with the falsy values function... | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Solution Code: | ||
+ | ||
+```js | ||
+function bouncer(arr) { | ||
+ // Don't show a false ID to this bouncer. | ||
+ // I've a hammer fist. | ||
+ | ||
+ return arr.filter(Boolean); | ||
+} | ||
+``` | ||
+ | ||
+```js | ||
+function bouncer(arr) { | ||
+ function isTruthy(arg) { | ||
+ return Boolean(arg); | ||
+ } | ||
+ | ||
+ var filteredArray = arr.filter(isTruthy); | ||
+ return filteredArray; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+The `Array.prototype.filter` method expects a function that returns a `Boolean` value which takes a single argument and returns `true` for [truthy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-truthy) value or `false` for [falsy](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/js-falsy) value. Hence we pass the built-in `Boolean` function. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @renelis @abhisekp @Rafase282` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
200
Bonfire-Friendly-Date-Ranges.md
@@ -1,101 +1,101 @@ | ||
-# Problem Explanation: | ||
-- Create a program that will take two dates and convert them into a more easy to understand date such as `January 1st, 2017`. It will also check the difference between them, and handles cases with no difference, more than a day, more than a month, more than a year, and more than a month and less than a year respectively. | ||
- | ||
-## Hint: 1 | ||
-- Split the string into an array where you get the "YYYY", "MM", "DD" | ||
- | ||
-## Hint: 2 | ||
-- You need to handle the case for "st", "nd", and "th". Note that 13 is "th" not "rd". | ||
- | ||
-## Hint: 3 | ||
-- If you are using `Date()` to create instances of dates to work with, then use UTC time to avoid errors due to time zone difference between servers. | ||
- | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function friendly(str) { | ||
- | ||
- var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | ||
- | ||
- // COnverst a YYYY-MM-DD string into a date object. | ||
- function convertDate(str) { | ||
- // Split the dates to work independently. | ||
- var dateStr = str.split('-'); | ||
- | ||
- // Force the dates into Universal time to avoid issues due to timezones. | ||
- return (new Date(Date.UTC(dateStr[0], dateStr[1] - 1, dateStr[2]))); | ||
- | ||
- } | ||
- | ||
- // Handles the case of the day's endings. | ||
- function dateEnding(val) { | ||
- switch (val) { | ||
- case 1: | ||
- case 21: | ||
- case 31: | ||
- return val + 'st'; | ||
- case 2: | ||
- case 22: | ||
- return val + 'nd'; | ||
- case 3: | ||
- case 23: | ||
- return val + 'rd'; | ||
- default: | ||
- return val + 'th'; | ||
- } | ||
- } | ||
- | ||
- // Checks for the real difference in months to avoid errors | ||
- function monthDiff(date1, date2) { | ||
- var month2 = date2.getUTCFullYear() * 12 + date2.getUTCMonth(); | ||
- var month1 = date1.getUTCFullYear() * 12 + date1.getUTCMonth(); | ||
- return month2 - month1; | ||
- } | ||
- | ||
- // Get's the right month string. | ||
- function getMonth(date) { | ||
- return months[date.getUTCMonth()]; | ||
- } | ||
- | ||
- function displayDate() { | ||
- | ||
- // Handles same day | ||
- if (date2.getTime() - date1.getTime() === 0) { | ||
- return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()) + ', ' + date1.getUTCFullYear()]; | ||
- } | ||
- | ||
- // Handles same month | ||
- if (date1.getUTCMonth() === date2.getUTCMonth() && date1.getUTCFullYear() === date2.getUTCFullYear()) { | ||
- return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()), dateEnding(date2.getUTCDate())]; | ||
- } | ||
- | ||
- // Handles more than a month of difference, but less than 12 months | ||
- if (monthDiff(date1, date2) < 12) { | ||
- return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()), getMonth(date2) + ' ' + dateEnding(date2.getUTCDate())]; | ||
- } | ||
- | ||
- // Handles cases with more than 12 months apaprt. | ||
- return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()) + ', ' + date1.getUTCFullYear(), getMonth(date2) + ' ' + dateEnding(date2.getUTCDate()) + ', ' + date2.getUTCFullYear()]; | ||
- } | ||
- | ||
- var date1 = convertDate(str[0]); | ||
- var date2 = convertDate(str[1]); | ||
- | ||
- return displayDate(); | ||
- | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments in code | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph`** | ||
- | ||
+# Problem Explanation: | ||
+- Create a program that will take two dates and convert them into a more easy to understand date such as `January 1st, 2017`. It will also check the difference between them, and handles cases with no difference, more than a day, more than a month, more than a year, and more than a month and less than a year respectively. | ||
+ | ||
+## Hint: 1 | ||
+- Split the string into an array where you get the "YYYY", "MM", "DD" | ||
+ | ||
+## Hint: 2 | ||
+- You need to handle the case for "st", "nd", and "th". Note that 13 is "th" not "rd". | ||
+ | ||
+## Hint: 3 | ||
+- If you are using `Date()` to create instances of dates to work with, then use UTC time to avoid errors due to time zone difference between servers. | ||
+ | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function friendly(str) { | ||
+ | ||
+ var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | ||
+ | ||
+ // COnverst a YYYY-MM-DD string into a date object. | ||
+ function convertDate(str) { | ||
+ // Split the dates to work independently. | ||
+ var dateStr = str.split('-'); | ||
+ | ||
+ // Force the dates into Universal time to avoid issues due to timezones. | ||
+ return (new Date(Date.UTC(dateStr[0], dateStr[1] - 1, dateStr[2]))); | ||
+ | ||
+ } | ||
+ | ||
+ // Handles the case of the day's endings. | ||
+ function dateEnding(val) { | ||
+ switch (val) { | ||
+ case 1: | ||
+ case 21: | ||
+ case 31: | ||
+ return val + 'st'; | ||
+ case 2: | ||
+ case 22: | ||
+ return val + 'nd'; | ||
+ case 3: | ||
+ case 23: | ||
+ return val + 'rd'; | ||
+ default: | ||
+ return val + 'th'; | ||
+ } | ||
+ } | ||
+ | ||
+ // Checks for the real difference in months to avoid errors | ||
+ function monthDiff(date1, date2) { | ||
+ var month2 = date2.getUTCFullYear() * 12 + date2.getUTCMonth(); | ||
+ var month1 = date1.getUTCFullYear() * 12 + date1.getUTCMonth(); | ||
+ return month2 - month1; | ||
+ } | ||
+ | ||
+ // Get's the right month string. | ||
+ function getMonth(date) { | ||
+ return months[date.getUTCMonth()]; | ||
+ } | ||
+ | ||
+ function displayDate() { | ||
+ | ||
+ // Handles same day | ||
+ if (date2.getTime() - date1.getTime() === 0) { | ||
+ return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()) + ', ' + date1.getUTCFullYear()]; | ||
+ } | ||
+ | ||
+ // Handles same month | ||
+ if (date1.getUTCMonth() === date2.getUTCMonth() && date1.getUTCFullYear() === date2.getUTCFullYear()) { | ||
+ return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()), dateEnding(date2.getUTCDate())]; | ||
+ } | ||
+ | ||
+ // Handles more than a month of difference, but less than 12 months | ||
+ if (monthDiff(date1, date2) < 12) { | ||
+ return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()), getMonth(date2) + ' ' + dateEnding(date2.getUTCDate())]; | ||
+ } | ||
+ | ||
+ // Handles cases with more than 12 months apaprt. | ||
+ return [getMonth(date1) + ' ' + dateEnding(date1.getUTCDate()) + ', ' + date1.getUTCFullYear(), getMonth(date2) + ' ' + dateEnding(date2.getUTCDate()) + ', ' + date2.getUTCFullYear()]; | ||
+ } | ||
+ | ||
+ var date1 = convertDate(str[0]); | ||
+ var date2 = convertDate(str[1]); | ||
+ | ||
+ return displayDate(); | ||
+ | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments in code | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph`** | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
118
Bonfire-Map-the-Debris.md
@@ -1,59 +1,59 @@ | ||
-![](http://i.imgur.com/jSJ4E7L.jpg) | ||
- | ||
-# Problem Explanation: | ||
-The first thing to do is to get familiar with what the program is for, for this I would suggest you check the Wikipedia link as that is very important and from where you can also get the formula for the conversion. The hardest part are finding the formula, implementing it and for some modifying objects by the key. However, something that is not very clear is the fact that your program has to be able to check for any number of objects in the array which is what is tested on the second part. | ||
- | ||
-## Hint: 1 | ||
-The formula needed is: T = 2_pi _ sqrt(earthRadius + avgAlt to the cube / GM) | ||
- | ||
-## Hint: 2 | ||
-Use Math.round() to round up to the next whole number as requested. Using Math.ceil() will let you pass the first test but fail the second one. | ||
- | ||
-## Hint: 3 | ||
-Find out how to remove and add key to an object | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function orbitalPeriod(arr) { | ||
- var GM = 398600.4418; | ||
- var earthRadius = 6367.4447; | ||
- var a = 2 * Math.PI; | ||
- var newArr = []; | ||
- var getOrbPeriod = function(obj) { | ||
- var c = Math.pow(earthRadius + obj.avgAlt, 3); | ||
- var b = Math.sqrt(c / GM); | ||
- var orbPeriod = Math.round(a * b); | ||
- delete obj.avgAlt; | ||
- obj.orbitalPeriod = orbPeriod; | ||
- return obj; | ||
- }; | ||
- | ||
- for (var elem in arr) { | ||
- newArr.push(getOrbPeriod(arr[elem])); | ||
- } | ||
- | ||
- return newArr; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- The GM and `earthRadius` is given to us. | ||
-- To make the code easier to edit and read, I separated each part of the equation. | ||
-- Create a new array to store the `orbPeriods`. | ||
-- a is 2 times pi. The part that is a constant is on the global scope while the rest is part of a function. | ||
-- Create a function that will do the required work for any amount of objects. | ||
-- c is the power of `earthRadius` + the value of `avgAlt` to the cube. | ||
-- b is the square root of c divided by GM. | ||
-- Create `orbPeriod` to store the product of a & b, with the ceiling function applied to round up to the next whole number. | ||
-- Then we delete the key`avgAlt`, and add the new key and its value. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+![](http://i.imgur.com/jSJ4E7L.jpg) | ||
+ | ||
+# Problem Explanation: | ||
+The first thing to do is to get familiar with what the program is for, for this I would suggest you check the Wikipedia link as that is very important and from where you can also get the formula for the conversion. The hardest part are finding the formula, implementing it and for some modifying objects by the key. However, something that is not very clear is the fact that your program has to be able to check for any number of objects in the array which is what is tested on the second part. | ||
+ | ||
+## Hint: 1 | ||
+The formula needed is: T = 2_pi _ sqrt(earthRadius + avgAlt to the cube / GM) | ||
+ | ||
+## Hint: 2 | ||
+Use Math.round() to round up to the next whole number as requested. Using Math.ceil() will let you pass the first test but fail the second one. | ||
+ | ||
+## Hint: 3 | ||
+Find out how to remove and add key to an object | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function orbitalPeriod(arr) { | ||
+ var GM = 398600.4418; | ||
+ var earthRadius = 6367.4447; | ||
+ var a = 2 * Math.PI; | ||
+ var newArr = []; | ||
+ var getOrbPeriod = function(obj) { | ||
+ var c = Math.pow(earthRadius + obj.avgAlt, 3); | ||
+ var b = Math.sqrt(c / GM); | ||
+ var orbPeriod = Math.round(a * b); | ||
+ delete obj.avgAlt; | ||
+ obj.orbitalPeriod = orbPeriod; | ||
+ return obj; | ||
+ }; | ||
+ | ||
+ for (var elem in arr) { | ||
+ newArr.push(getOrbPeriod(arr[elem])); | ||
+ } | ||
+ | ||
+ return newArr; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- The GM and `earthRadius` is given to us. | ||
+- To make the code easier to edit and read, I separated each part of the equation. | ||
+- Create a new array to store the `orbPeriods`. | ||
+- a is 2 times pi. The part that is a constant is on the global scope while the rest is part of a function. | ||
+- Create a function that will do the required work for any amount of objects. | ||
+- c is the power of `earthRadius` + the value of `avgAlt` to the cube. | ||
+- b is the square root of c divided by GM. | ||
+- Create `orbPeriod` to store the product of a & b, with the ceiling function applied to round up to the next whole number. | ||
+- Then we delete the key`avgAlt`, and add the new key and its value. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
74
Bonfire-Meet-Bonfire.md
@@ -1,37 +1,37 @@ | ||
-# Explanation: | ||
-This is very simple, they just want you to get familiar with how their Bonfires work. | ||
- | ||
-## Hint: 1 | ||
-Read details. | ||
- | ||
-## Hint: 2 | ||
-Did you read all the details? | ||
- | ||
-## Hint: 3 | ||
-You need to change the return statement to what they ask. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function meetBonfire(argument) { | ||
- // Good luck! | ||
- console.log("you can read this function's argument in the developer tools", argument); | ||
- | ||
- return true; | ||
-} | ||
- | ||
-meetBonfire("You can do this!"); | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-All you had to do was change from false to true. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Explanation: | ||
+This is very simple, they just want you to get familiar with how their Bonfires work. | ||
+ | ||
+## Hint: 1 | ||
+Read details. | ||
+ | ||
+## Hint: 2 | ||
+Did you read all the details? | ||
+ | ||
+## Hint: 3 | ||
+You need to change the return statement to what they ask. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function meetBonfire(argument) { | ||
+ // Good luck! | ||
+ console.log("you can read this function's argument in the developer tools", argument); | ||
+ | ||
+ return true; | ||
+} | ||
+ | ||
+meetBonfire("You can do this!"); | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+All you had to do was change from false to true. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
170
Bonfire-Missing-letters.md
@@ -1,86 +1,86 @@ | ||
-# Problem Explanation: | ||
-- You will create a program that will find the missing letter from a string and add it. If there is not missing letter it will return undefined. There is currently no test case for it missing more than one letter, but if anything recursion can be implemented or a second or more calls to the same function as needed. Also the letters are always provided in order so there is no need to sort them. | ||
- | ||
-## Hint: 1 | ||
-- You will need to convert from character to ASCII code using the two methods provided in the description. | ||
- | ||
-## Hint: 2 | ||
-- You will have to check for the difference in ASCII code as they are in order. Using a chart would be very helpful. | ||
- | ||
-## Hint: 3 | ||
-- You will need to figure out where to insert the letter and how to do it, along with handling the case that there is not missing letter as it needs an specific return value. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
-First: | ||
- | ||
-```js | ||
-function fearNotLetter(str) { | ||
- // Create our variables. | ||
- var firstCharacter = str.charCodeAt(0); | ||
- var valueToReturn = ''; | ||
- var secondCharacter = ''; | ||
- | ||
- // Function to find the missing letters | ||
- var addCharacters = function(a, b) { | ||
- while (a - 1 > b) { | ||
- b++; | ||
- valueToReturn += String.fromCharCode(b); | ||
- } | ||
- | ||
- return valueToReturn; | ||
- }; | ||
- | ||
- // Check if letters are missing in between. | ||
- for (var index = 1; index < str.length; index++) { | ||
- secondCharacter = str.charCodeAt(index); | ||
- | ||
- // Check if the diference in code is greater than one. | ||
- if (secondCharacter - firstCharacter > 1) { | ||
- // Call function to missing letters | ||
- addCharacters(secondCharacter, firstCharacter); | ||
- } | ||
- | ||
- // Switch positions | ||
- firstCharacter = str.charCodeAt(index); | ||
- } | ||
- | ||
- // Check whether to return undefined or the missing letters. | ||
- if (valueToReturn === '') | ||
- return undefined; | ||
- else | ||
- return valueToReturn; | ||
-} | ||
-``` | ||
-```js | ||
-Second: | ||
- | ||
-function fearNotLetter(str) { | ||
- | ||
- for(var i = 0; i < str.length; i++) { | ||
- /* code of current character */ | ||
- var code = str.charCodeAt(i); | ||
- /* if code of current character is not equal to first charcter + no of iteration | ||
- hence character has been escaped*/ | ||
- if ( code !== str.charCodeAt(0) + i) { | ||
- /* if current character has escaped one character find previous char and return*/ | ||
- return String.fromCharCode(code-1); | ||
- } | ||
- } | ||
- return undefined; | ||
-} | ||
-``` | ||
- | ||
- | ||
-# Code Explanation: | ||
-- Read comments in code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
-**`thanks @rohitnwn`** | ||
- | ||
+# Problem Explanation: | ||
+- You will create a program that will find the missing letter from a string and add it. If there is not missing letter it will return undefined. There is currently no test case for it missing more than one letter, but if anything recursion can be implemented or a second or more calls to the same function as needed. Also the letters are always provided in order so there is no need to sort them. | ||
+ | ||
+## Hint: 1 | ||
+- You will need to convert from character to ASCII code using the two methods provided in the description. | ||
+ | ||
+## Hint: 2 | ||
+- You will have to check for the difference in ASCII code as they are in order. Using a chart would be very helpful. | ||
+ | ||
+## Hint: 3 | ||
+- You will need to figure out where to insert the letter and how to do it, along with handling the case that there is not missing letter as it needs an specific return value. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+First: | ||
+ | ||
+```js | ||
+function fearNotLetter(str) { | ||
+ // Create our variables. | ||
+ var firstCharacter = str.charCodeAt(0); | ||
+ var valueToReturn = ''; | ||
+ var secondCharacter = ''; | ||
+ | ||
+ // Function to find the missing letters | ||
+ var addCharacters = function(a, b) { | ||
+ while (a - 1 > b) { | ||
+ b++; | ||
+ valueToReturn += String.fromCharCode(b); | ||
+ } | ||
+ | ||
+ return valueToReturn; | ||
+ }; | ||
+ | ||
+ // Check if letters are missing in between. | ||
+ for (var index = 1; index < str.length; index++) { | ||
+ secondCharacter = str.charCodeAt(index); | ||
+ | ||
+ // Check if the diference in code is greater than one. | ||
+ if (secondCharacter - firstCharacter > 1) { | ||
+ // Call function to missing letters | ||
+ addCharacters(secondCharacter, firstCharacter); | ||
+ } | ||
+ | ||
+ // Switch positions | ||
+ firstCharacter = str.charCodeAt(index); | ||
+ } | ||
+ | ||
+ // Check whether to return undefined or the missing letters. | ||
+ if (valueToReturn === '') | ||
+ return undefined; | ||
+ else | ||
+ return valueToReturn; | ||
+} | ||
+``` | ||
+```js | ||
+Second: | ||
+ | ||
+function fearNotLetter(str) { | ||
+ | ||
+ for(var i = 0; i < str.length; i++) { | ||
+ /* code of current character */ | ||
+ var code = str.charCodeAt(i); | ||
+ /* if code of current character is not equal to first charcter + no of iteration | ||
+ hence character has been escaped*/ | ||
+ if ( code !== str.charCodeAt(0) + i) { | ||
+ /* if current character has escaped one character find previous char and return*/ | ||
+ return String.fromCharCode(code-1); | ||
+ } | ||
+ } | ||
+ return undefined; | ||
+} | ||
+``` | ||
+ | ||
+ | ||
+# Code Explanation: | ||
+- Read comments in code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+**`thanks @rohitnwn`** | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
92
Bonfire-Pig-Latin.md
@@ -1,46 +1,46 @@ | ||
-# Problem Explanation: | ||
-- You need to create a program that will translate from English to Pig Latin. Check the instructions for converting to Pig Latin from the initial description or the wiki page. It might not be obvious but you need to remove all the consonants up to the first vowel in the case there letter does not start with a vowel. | ||
- | ||
-## Hint: 1 | ||
-- You will probably want to use regular expressions. This will allow you to convert the words easily. | ||
- | ||
-## Hint: 2 | ||
-- If the first character is a vowel, then take that whole word and add 'way' at the end. Otherwise comes the tricky part, take the consonant(s) before the first vowel and move it to the end and add 'ay'. This is where I had trouble since it was not clear that it was not just the first consonant but all of them before the first vowel. | ||
- | ||
-## Hint: 3 | ||
-- You will need to use everything you know about string manipulation to get the last part right. However, it can be done with `substr` alone. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function translate(str) { | ||
- // Create variables to be used | ||
- var pigLatin = ''; | ||
- var regex = /[aeiou]/gi; | ||
- // Check if the first character is a vowel | ||
- if (str[0].match(regex)) { | ||
- pigLatin = str + 'way'; | ||
- } else { | ||
- // Find how many consonants before the firs vowel. | ||
- var vowelIndice = str.indexOf(str.match(regex)[0]); | ||
- // Take the string from the first vowel to the last char | ||
- // then add the consonants that were previously omitted and add the ending. | ||
- pigLatin = str.substr(vowelIndice) + str.substr(0, vowelIndice) + 'ay'; | ||
- } | ||
- | ||
- return pigLatin; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments on code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+- You need to create a program that will translate from English to Pig Latin. Check the instructions for converting to Pig Latin from the initial description or the wiki page. It might not be obvious but you need to remove all the consonants up to the first vowel in the case there letter does not start with a vowel. | ||
+ | ||
+## Hint: 1 | ||
+- You will probably want to use regular expressions. This will allow you to convert the words easily. | ||
+ | ||
+## Hint: 2 | ||
+- If the first character is a vowel, then take that whole word and add 'way' at the end. Otherwise comes the tricky part, take the consonant(s) before the first vowel and move it to the end and add 'ay'. This is where I had trouble since it was not clear that it was not just the first consonant but all of them before the first vowel. | ||
+ | ||
+## Hint: 3 | ||
+- You will need to use everything you know about string manipulation to get the last part right. However, it can be done with `substr` alone. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function translate(str) { | ||
+ // Create variables to be used | ||
+ var pigLatin = ''; | ||
+ var regex = /[aeiou]/gi; | ||
+ // Check if the first character is a vowel | ||
+ if (str[0].match(regex)) { | ||
+ pigLatin = str + 'way'; | ||
+ } else { | ||
+ // Find how many consonants before the firs vowel. | ||
+ var vowelIndice = str.indexOf(str.match(regex)[0]); | ||
+ // Take the string from the first vowel to the last char | ||
+ // then add the consonants that were previously omitted and add the ending. | ||
+ pigLatin = str.substr(vowelIndice) + str.substr(0, vowelIndice) + 'ay'; | ||
+ } | ||
+ | ||
+ return pigLatin; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments on code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
188
Bonfire-Return-Largest-Numbers-in-Arrays.md
@@ -1,95 +1,95 @@ | ||
-# Explanation: | ||
-You will get an array that contains sub arrays of numbers and you need to return an array with the largest number from each of the sub arrays. | ||
- | ||
-## Hint: 1 | ||
-You will need to keep track of the array with the answer and the largest number of each sub-array. | ||
- | ||
-## Hint: 2 | ||
-You can work with multidimensional arrays by `Array[Index][SubIndex]` | ||
- | ||
-## Hint: 3 | ||
-Pay close attention to the timing of the storing of variables when working with loops | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solutions ahead!** | ||
- | ||
-## Solution 1: | ||
- | ||
-```js | ||
-function largestOfFour(arr) { | ||
- var results = []; | ||
- for (var n = 0; n < arr.length; n++) { | ||
- var largestNumber = 0; | ||
- for (var sb = 0; sb < arr[n].length; sb++) { | ||
- if (arr[n][sb] > largestNumber) { | ||
- largestNumber = arr[n][sb]; | ||
- } | ||
- } | ||
- | ||
- results[n] = largestNumber; | ||
- } | ||
- | ||
- return results; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Create a variable to store the results as an array. | ||
-- Create an outer loop to iterate through the main array. | ||
-- Before going into the inner loop, create a variable to hold the largest number. This must be outside the inner loop. | ||
-- Create another for loop to work with the sub-arrays. | ||
-- Check if the element of the sub array is larger than the current largest number. If so, then save the number. | ||
-- After the inner loop, save the largest number in the variable for the results. | ||
- | ||
-## Solution 2: | ||
- | ||
-```js | ||
-function largestOfFour(arr) { | ||
- // You can do this! | ||
- // Yes, I can. :P | ||
- return arr.map(Function.apply.bind(Math.max, null)); | ||
-} | ||
- | ||
-largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- The `Function.apply.bind(Math.max, null)` makes a new function accepting the `arr.map` values i.e. the inner arrays. | ||
- | ||
-Now the new function needs to find the max of the input inner array. | ||
-- So we want to create a function that does the work of `Math.max` and accepts input as an array. | ||
- | ||
-e.g. wouldn't be nice if the `Math.max` would be accepting inputs like this: | ||
-`Math.max([9, 43, 20, 6]); // 43`. | ||
-- To do the work of accepting params as array, there is this `Function.apply` method but it *invokes* the *context* function. | ||
- | ||
-i.e. `Math.max.apply(null, [9, 43, 20, 6]); // 43` would invoke the `Max.max` method. | ||
- | ||
-> Here we're passing `null` as the *context* of the `Function.apply` method as `Math.max` doesn't need any context. | ||
- | ||
-But that's not useful for `arr.map` which accepts a function value. So we create a function value using `Function.bind` method. | ||
-- Since, `Function.apply` is a static *method* of `Function` Object, so we can call `Function.prototype.bind` on `Function.apply` i.e. `Function.apply.bind`. | ||
- | ||
-Now we pass the *context* for `Function.apply.bind` call i.e. `Math.max` method as the 1st argument which would give us the functionality of `Math.max` method. | ||
-- Since `Function.apply` method takes a context as it's 1st argument, hence, we need to pass a bogus *context* for `Function.apply` method. | ||
- - So, we pass `null` as the 2nd param to `Function.apply.bind` which gives a *context* to the `Math.max` method. | ||
- - Since, `Math.max` is independent of any *context*, hence, it ignores the bogus *context* given by `Function.apply` method call. | ||
- | ||
-**So in the end we get a function (using `Function.bind` method) that works like `Math.max` but accepts params as an array like `Function.apply`** :smiley: | ||
- | ||
-*comprendido*? :neutral_face: | ||
- | ||
-> NOTE: This is an advanced solution. NOT FOR BEGINNERS. | ||
- | ||
-**Reference:-** | ||
-- http://devdocs.io/#q=js+Math+max | ||
-- http://devdocs.io/#q=js+Array+map | ||
-- http://devdocs.io/#q=js+Function+apply | ||
-- http://devdocs.io/#q=js+Function+bind | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @abhisekp` | ||
- | ||
+# Explanation: | ||
+You will get an array that contains sub arrays of numbers and you need to return an array with the largest number from each of the sub arrays. | ||
+ | ||
+## Hint: 1 | ||
+You will need to keep track of the array with the answer and the largest number of each sub-array. | ||
+ | ||
+## Hint: 2 | ||
+You can work with multidimensional arrays by `Array[Index][SubIndex]` | ||
+ | ||
+## Hint: 3 | ||
+Pay close attention to the timing of the storing of variables when working with loops | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solutions ahead!** | ||
+ | ||
+## Solution 1: | ||
+ | ||
+```js | ||
+function largestOfFour(arr) { | ||
+ var results = []; | ||
+ for (var n = 0; n < arr.length; n++) { | ||
+ var largestNumber = 0; | ||
+ for (var sb = 0; sb < arr[n].length; sb++) { | ||
+ if (arr[n][sb] > largestNumber) { | ||
+ largestNumber = arr[n][sb]; | ||
+ } | ||
+ } | ||
+ | ||
+ results[n] = largestNumber; | ||
+ } | ||
+ | ||
+ return results; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Create a variable to store the results as an array. | ||
+- Create an outer loop to iterate through the main array. | ||
+- Before going into the inner loop, create a variable to hold the largest number. This must be outside the inner loop. | ||
+- Create another for loop to work with the sub-arrays. | ||
+- Check if the element of the sub array is larger than the current largest number. If so, then save the number. | ||
+- After the inner loop, save the largest number in the variable for the results. | ||
+ | ||
+## Solution 2: | ||
+ | ||
+```js | ||
+function largestOfFour(arr) { | ||
+ // You can do this! | ||
+ // Yes, I can. :P | ||
+ return arr.map(Function.apply.bind(Math.max, null)); | ||
+} | ||
+ | ||
+largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- The `Function.apply.bind(Math.max, null)` makes a new function accepting the `arr.map` values i.e. the inner arrays. | ||
+ | ||
+Now the new function needs to find the max of the input inner array. | ||
+- So we want to create a function that does the work of `Math.max` and accepts input as an array. | ||
+ | ||
+e.g. wouldn't be nice if the `Math.max` would be accepting inputs like this: | ||
+`Math.max([9, 43, 20, 6]); // 43`. | ||
+- To do the work of accepting params as array, there is this `Function.apply` method but it *invokes* the *context* function. | ||
+ | ||
+i.e. `Math.max.apply(null, [9, 43, 20, 6]); // 43` would invoke the `Max.max` method. | ||
+ | ||
+> Here we're passing `null` as the *context* of the `Function.apply` method as `Math.max` doesn't need any context. | ||
+ | ||
+But that's not useful for `arr.map` which accepts a function value. So we create a function value using `Function.bind` method. | ||
+- Since, `Function.apply` is a static *method* of `Function` Object, so we can call `Function.prototype.bind` on `Function.apply` i.e. `Function.apply.bind`. | ||
+ | ||
+Now we pass the *context* for `Function.apply.bind` call i.e. `Math.max` method as the 1st argument which would give us the functionality of `Math.max` method. | ||
+- Since `Function.apply` method takes a context as it's 1st argument, hence, we need to pass a bogus *context* for `Function.apply` method. | ||
+ - So, we pass `null` as the 2nd param to `Function.apply.bind` which gives a *context* to the `Math.max` method. | ||
+ - Since, `Math.max` is independent of any *context*, hence, it ignores the bogus *context* given by `Function.apply` method call. | ||
+ | ||
+**So in the end we get a function (using `Function.bind` method) that works like `Math.max` but accepts params as an array like `Function.apply`** :smiley: | ||
+ | ||
+*comprendido*? :neutral_face: | ||
+ | ||
+> NOTE: This is an advanced solution. NOT FOR BEGINNERS. | ||
+ | ||
+**Reference:-** | ||
+- http://devdocs.io/#q=js+Math+max | ||
+- http://devdocs.io/#q=js+Array+map | ||
+- http://devdocs.io/#q=js+Function+apply | ||
+- http://devdocs.io/#q=js+Function+bind | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 @abhisekp` | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
66
Bonfire-Reverse-a-String.md
@@ -1,33 +1,33 @@ | ||
-# Problem Explanation: | ||
-You need to take the string and reverse it so if you had originally 'hello', it will turn into 'olleh'. Because you will need to split it, you will be working with Arrays too. | ||
- | ||
-## Hint: 1 | ||
-- You should split the string by characters. | ||
- | ||
-## Hint: 2 | ||
-- Find out about the built in function to reverse a string. | ||
- | ||
-## Hint: 3 | ||
-- Once you have split and reversed, do not forget to join them back into one string. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function reverseString(str) { | ||
- var strReverse = str.split('').reverse().join(''); | ||
- return strReverse; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-This is a straightforward code. We create a variable that will hold the string split by characters, and then reversed and put back together. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+You need to take the string and reverse it so if you had originally 'hello', it will turn into 'olleh'. Because you will need to split it, you will be working with Arrays too. | ||
+ | ||
+## Hint: 1 | ||
+- You should split the string by characters. | ||
+ | ||
+## Hint: 2 | ||
+- Find out about the built in function to reverse a string. | ||
+ | ||
+## Hint: 3 | ||
+- Once you have split and reversed, do not forget to join them back into one string. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function reverseString(str) { | ||
+ var strReverse = str.split('').reverse().join(''); | ||
+ return strReverse; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+This is a straightforward code. We create a variable that will hold the string split by characters, and then reversed and put back together. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
84
Bonfire-Search-and-Replace.md
@@ -1,42 +1,42 @@ | ||
-# Problem Explanation: | ||
-- You will create a program that takes a sentence, then search for a word in it and replaces it for a new one while preserving the uppercase if there is one. | ||
- | ||
-## Hint: 1 | ||
-- Find the index where `before` is in the string. | ||
- | ||
-## Hint: 2 | ||
-- Check first letter case. | ||
- | ||
-## Hint: 3 | ||
-- Strings are immutable, you will need to save the edits on another variable, even if you must reuse the same one just to make it look like the changes where done using just that one variable. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function myReplace(str, before, after) { | ||
- // Find index where before is on string | ||
- var index = str.indexOf(before); | ||
- // Check to see if the first letter is uppercase or not | ||
- if (str[index] === str[index].toUpperCase()) { | ||
- // Change the after word to be capitalized before we use it. | ||
- after = after.charAt(0).toUpperCase() + after.slice(1); | ||
- } | ||
- // Now replace the original str with the edited one. | ||
- str = str.replace(before, after); | ||
- | ||
- return str; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments on program. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+- You will create a program that takes a sentence, then search for a word in it and replaces it for a new one while preserving the uppercase if there is one. | ||
+ | ||
+## Hint: 1 | ||
+- Find the index where `before` is in the string. | ||
+ | ||
+## Hint: 2 | ||
+- Check first letter case. | ||
+ | ||
+## Hint: 3 | ||
+- Strings are immutable, you will need to save the edits on another variable, even if you must reuse the same one just to make it look like the changes where done using just that one variable. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function myReplace(str, before, after) { | ||
+ // Find index where before is on string | ||
+ var index = str.indexOf(before); | ||
+ // Check to see if the first letter is uppercase or not | ||
+ if (str[index] === str[index].toUpperCase()) { | ||
+ // Change the after word to be capitalized before we use it. | ||
+ after = after.charAt(0).toUpperCase() + after.slice(1); | ||
+ } | ||
+ // Now replace the original str with the edited one. | ||
+ str = str.replace(before, after); | ||
+ | ||
+ return str; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments on program. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
76
Bonfire-Seek-and-Destroy.md
@@ -1,38 +1,38 @@ | ||
-# Explanation: | ||
-This problem is a bit tricky because you have to familiarize yourself with Arguments, as you will have to work with two **or more** but on the script you only see two. Many people hardcode this program for three arguments. You will remove any number from the first argument that is the same as any other other arguments. | ||
- | ||
-## Hint: 1 | ||
-You need to work with `arguments` as if it was a regular array. The best way is to convert it into one. | ||
- | ||
-## Hint: 2 | ||
-You need to filter, this also means you need to create a callback function, one that checks if the element is on the `indexOf()` | ||
- | ||
-## Hint: 3 | ||
-To convert `arguments` into an array use this code `var args = Array.prototype.slice.call(arguments);` | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function destroyer(arr) { | ||
- var args = Array.prototype.slice.call(arguments); | ||
- args.splice(0, 1); | ||
- return arr.filter(function(element) { | ||
- return args.indexOf(element) === -1; | ||
- }); | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- The first line will turn the `arguments` variable into a full array instead of the limited array it currently is. | ||
-- Next I remove the first argument since I don't need, since I only want the other arguments passed besides the first which is the array we are going to compare against. | ||
-- Then use the `filter()` to filter out the elements that are on the array and keep the ones that are not. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Explanation: | ||
+This problem is a bit tricky because you have to familiarize yourself with Arguments, as you will have to work with two **or more** but on the script you only see two. Many people hardcode this program for three arguments. You will remove any number from the first argument that is the same as any other other arguments. | ||
+ | ||
+## Hint: 1 | ||
+You need to work with `arguments` as if it was a regular array. The best way is to convert it into one. | ||
+ | ||
+## Hint: 2 | ||
+You need to filter, this also means you need to create a callback function, one that checks if the element is on the `indexOf()` | ||
+ | ||
+## Hint: 3 | ||
+To convert `arguments` into an array use this code `var args = Array.prototype.slice.call(arguments);` | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function destroyer(arr) { | ||
+ var args = Array.prototype.slice.call(arguments); | ||
+ args.splice(0, 1); | ||
+ return arr.filter(function(element) { | ||
+ return args.indexOf(element) === -1; | ||
+ }); | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- The first line will turn the `arguments` variable into a full array instead of the limited array it currently is. | ||
+- Next I remove the first argument since I don't need, since I only want the other arguments passed besides the first which is the array we are going to compare against. | ||
+- Then use the `filter()` to filter out the elements that are on the array and keep the ones that are not. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
220
Bonfire-Smallest-Common-Multiple.md
@@ -1,110 +1,110 @@ | ||
-# Explanation: | ||
-This particular problem can be confusing because most people look for the smallest common multiple of the two number but forget the keyword **range.** This means that if you get `[1,5]` then you have to check for the smallest common multiple for all these numbers [1,2,3,4,5] that is evenly divisible by all of them. | ||
- | ||
-## Hint: 1 | ||
-Create an array with all the numbers that are missing from the original array to make it easier to check when having to check for even division. | ||
- | ||
-## Hint: 2 | ||
-You can use modulo `%` to check if the reminder is 0, which means it is evenly divisible. | ||
- | ||
-## Hint: 3 | ||
-If you sort the array from greater to lowest then you can check for the first two numbers as it is more likely to the the smallest common multiple than the lower numbers. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function smallestCommons(arr) { | ||
- // Sort array from greater to lowest | ||
- // This line of code was from Adam Doyle (http://github.com/Adoyle2014) | ||
- arr.sort(function(a, b) { | ||
- return b - a; | ||
- }); | ||
- | ||
- // Create new array and add all values from greater to smaller from the original array. | ||
- var newArr = []; | ||
- for (var i = arr[0]; i >= arr[1]; i--) { | ||
- newArr.push(i); | ||
- } | ||
- | ||
- // Variables needed declared outside the loops. | ||
- var quot = 0; | ||
- var loop = 1; | ||
- var n; | ||
- | ||
- // run code while n is not the same as the array length. | ||
- do { | ||
- quot = newArr[0] * loop * newArr[1]; | ||
- for (n = 2; n < newArr.length; n++) { | ||
- if (quot % newArr[n] !== 0) { | ||
- break; | ||
- } | ||
- } | ||
- | ||
- loop++; | ||
- } while (n !== newArr.length); | ||
- | ||
- return quot; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Because the possibility of the smallest common denominator being among the two biggest numbers, it makes sense to check those first, so sort the array. | ||
-- Create a new array to sore all the numbers. | ||
-- Use a descending for loop to add the numbers from the biggest to the smallest in the new array. | ||
-- Declare the variables for the quotient, the number of loops and the variable that we will use in a for loop on another scope, this will allow us access outside the loop. | ||
-- Use a do while loop to check what we need while **n** is not the same length as the new array. | ||
-- In the **do** part, we are going to multiply the very first number, times the number of loops, times the second number. | ||
-- The loop part will allows us to increase the number beyond the greatest number we have without having to change the algorithm. | ||
-- We enter a for loop that will go from n being 2 and going up by one while it is smaller than the array with all the numbers. | ||
-- If the quotient is not even then stop the loop. If it is even then it check for the next elements in the array until it is not even or we find our answer. | ||
-- Outside the loop, increase the value of loop. | ||
-- At the end of the loop return the quotient. | ||
- | ||
-If the array only has two elements then the for loop never gets used and the return value is the product of said numbers. Otherwise, from the third element and until n is the same and the array length check if the remainder of the quotient and the third value of the array is not 0, if it is not 0 then stop loop increases and then we start over. If the remainder was 0 then keep checking until the end of the array. | ||
- | ||
-# Alternate solution: | ||
- | ||
-Note: The solution above requires over 2,000 loops to calculate the test case smallestCommons([1,13]), and over 4 million loops to calculate smallestCommons([1,25]). The alternate code below evaluates smallestCommons([1,13]) in around 20 loops and smallestCommons([1,25]) in 40, by using a more efficient algorithm. | ||
- | ||
-```js | ||
-function smallestCommons(arr) { | ||
- for(i = Math.max(...arr); i >= Math.min(...arr); i--) arr.push(i); | ||
- | ||
- return arr.slice(2).reduce(function(x,y){ | ||
- var a = x, b = y, t = 0; | ||
- while(a % b){a = a % b; t = a; a = b; b = t;} | ||
- return x / b * y; | ||
- }); | ||
-} | ||
- | ||
-``` | ||
- | ||
-If you have trouble understanding the .reduce() method, you can compare it to this code, which essentially does the same thing: | ||
- | ||
-``` | ||
-function smallestCommons(arr) { | ||
- for(i = Math.max(...arr); i >= Math.min(...arr); i--) arr.push(i); | ||
- | ||
- var lcm = arr[2], a = 0, b = 0, t = 0; | ||
- | ||
- for (i = 3; i < arr.length; i++){ | ||
- a = lcm, b = arr[i]; | ||
- while(a % b){a = a % b; t = a; a = b; b = t;} | ||
- lcm = lcm / b * arr[i]; | ||
- } | ||
- | ||
- return lcm; | ||
-} | ||
-``` | ||
- | ||
-This code is based on the [Euclidean algorithm](https://en.wikipedia.org/wiki/Euclidean_algorithm) for finding smallest common multiples. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @Adoyle2014`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Explanation: | ||
+This particular problem can be confusing because most people look for the smallest common multiple of the two number but forget the keyword **range.** This means that if you get `[1,5]` then you have to check for the smallest common multiple for all these numbers [1,2,3,4,5] that is evenly divisible by all of them. | ||
+ | ||
+## Hint: 1 | ||
+Create an array with all the numbers that are missing from the original array to make it easier to check when having to check for even division. | ||
+ | ||
+## Hint: 2 | ||
+You can use modulo `%` to check if the reminder is 0, which means it is evenly divisible. | ||
+ | ||
+## Hint: 3 | ||
+If you sort the array from greater to lowest then you can check for the first two numbers as it is more likely to the the smallest common multiple than the lower numbers. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function smallestCommons(arr) { | ||
+ // Sort array from greater to lowest | ||
+ // This line of code was from Adam Doyle (http://github.com/Adoyle2014) | ||
+ arr.sort(function(a, b) { | ||
+ return b - a; | ||
+ }); | ||
+ | ||
+ // Create new array and add all values from greater to smaller from the original array. | ||
+ var newArr = []; | ||
+ for (var i = arr[0]; i >= arr[1]; i--) { | ||
+ newArr.push(i); | ||
+ } | ||
+ | ||
+ // Variables needed declared outside the loops. | ||
+ var quot = 0; | ||
+ var loop = 1; | ||
+ var n; | ||
+ | ||
+ // run code while n is not the same as the array length. | ||
+ do { | ||
+ quot = newArr[0] * loop * newArr[1]; | ||
+ for (n = 2; n < newArr.length; n++) { | ||
+ if (quot % newArr[n] !== 0) { | ||
+ break; | ||
+ } | ||
+ } | ||
+ | ||
+ loop++; | ||
+ } while (n !== newArr.length); | ||
+ | ||
+ return quot; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Because the possibility of the smallest common denominator being among the two biggest numbers, it makes sense to check those first, so sort the array. | ||
+- Create a new array to sore all the numbers. | ||
+- Use a descending for loop to add the numbers from the biggest to the smallest in the new array. | ||
+- Declare the variables for the quotient, the number of loops and the variable that we will use in a for loop on another scope, this will allow us access outside the loop. | ||
+- Use a do while loop to check what we need while **n** is not the same length as the new array. | ||
+- In the **do** part, we are going to multiply the very first number, times the number of loops, times the second number. | ||
+- The loop part will allows us to increase the number beyond the greatest number we have without having to change the algorithm. | ||
+- We enter a for loop that will go from n being 2 and going up by one while it is smaller than the array with all the numbers. | ||
+- If the quotient is not even then stop the loop. If it is even then it check for the next elements in the array until it is not even or we find our answer. | ||
+- Outside the loop, increase the value of loop. | ||
+- At the end of the loop return the quotient. | ||
+ | ||
+If the array only has two elements then the for loop never gets used and the return value is the product of said numbers. Otherwise, from the third element and until n is the same and the array length check if the remainder of the quotient and the third value of the array is not 0, if it is not 0 then stop loop increases and then we start over. If the remainder was 0 then keep checking until the end of the array. | ||
+ | ||
+# Alternate solution: | ||
+ | ||
+Note: The solution above requires over 2,000 loops to calculate the test case smallestCommons([1,13]), and over 4 million loops to calculate smallestCommons([1,25]). The alternate code below evaluates smallestCommons([1,13]) in around 20 loops and smallestCommons([1,25]) in 40, by using a more efficient algorithm. | ||
+ | ||
+```js | ||
+function smallestCommons(arr) { | ||
+ for(i = Math.max(...arr); i >= Math.min(...arr); i--) arr.push(i); | ||
+ | ||
+ return arr.slice(2).reduce(function(x,y){ | ||
+ var a = x, b = y, t = 0; | ||
+ while(a % b){a = a % b; t = a; a = b; b = t;} | ||
+ return x / b * y; | ||
+ }); | ||
+} | ||
+ | ||
+``` | ||
+ | ||
+If you have trouble understanding the .reduce() method, you can compare it to this code, which essentially does the same thing: | ||
+ | ||
+``` | ||
+function smallestCommons(arr) { | ||
+ for(i = Math.max(...arr); i >= Math.min(...arr); i--) arr.push(i); | ||
+ | ||
+ var lcm = arr[2], a = 0, b = 0, t = 0; | ||
+ | ||
+ for (i = 3; i < arr.length; i++){ | ||
+ a = lcm, b = arr[i]; | ||
+ while(a % b){a = a % b; t = a; a = b; b = t;} | ||
+ lcm = lcm / b * arr[i]; | ||
+ } | ||
+ | ||
+ return lcm; | ||
+} | ||
+``` | ||
+ | ||
+This code is based on the [Euclidean algorithm](https://en.wikipedia.org/wiki/Euclidean_algorithm) for finding smallest common multiples. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @Adoyle2014`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
102
Bonfire-Sorted-Union.md
@@ -1,51 +1,51 @@ | ||
-# Problem Explanation: | ||
-- The program has to return a new array of unique values from two original arrays in the order they show up. So there is not sorting required, and no duplicates. | ||
- | ||
-## Hint: 1 | ||
-- Since you have no idea how many parameters were passed, it would be best to loop through the `arguments` before looping through the arrays. | ||
- | ||
-## Hint: 2 | ||
-- I used loops, you can use something else like map, reduce or others if you want. | ||
- | ||
-## Hint: 3 | ||
-- You will have to check if the current value is already on the array to be returned for every value. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function unite(arr1, arr2, arr3) { | ||
- // Creates an empty array to store our final result. | ||
- var finalArray = []; | ||
- | ||
- // Loop through the arguments object to truly made the program work with two or more arrays | ||
- // instead of 3. | ||
- for (var i = 0; i < arguments.length; i++) { | ||
- var arrayArguments = arguments[i]; | ||
- | ||
- // Loops through the array at hand | ||
- for (var j = 0; j < arrayArguments.length; j++) { | ||
- var indexValue = arrayArguments[j]; | ||
- | ||
- // Checks if the value is already on the final array. | ||
- if (finalArray.indexOf(indexValue) < 0) { | ||
- finalArray.push(indexValue); | ||
- } | ||
- } | ||
- } | ||
- | ||
- return finalArray; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Check comments in code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+- The program has to return a new array of unique values from two original arrays in the order they show up. So there is not sorting required, and no duplicates. | ||
+ | ||
+## Hint: 1 | ||
+- Since you have no idea how many parameters were passed, it would be best to loop through the `arguments` before looping through the arrays. | ||
+ | ||
+## Hint: 2 | ||
+- I used loops, you can use something else like map, reduce or others if you want. | ||
+ | ||
+## Hint: 3 | ||
+- You will have to check if the current value is already on the array to be returned for every value. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function unite(arr1, arr2, arr3) { | ||
+ // Creates an empty array to store our final result. | ||
+ var finalArray = []; | ||
+ | ||
+ // Loop through the arguments object to truly made the program work with two or more arrays | ||
+ // instead of 3. | ||
+ for (var i = 0; i < arguments.length; i++) { | ||
+ var arrayArguments = arguments[i]; | ||
+ | ||
+ // Loops through the array at hand | ||
+ for (var j = 0; j < arrayArguments.length; j++) { | ||
+ var indexValue = arrayArguments[j]; | ||
+ | ||
+ // Checks if the value is already on the final array. | ||
+ if (finalArray.indexOf(indexValue) < 0) { | ||
+ finalArray.push(indexValue); | ||
+ } | ||
+ } | ||
+ } | ||
+ | ||
+ return finalArray; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Check comments in code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
78
Bonfire-Spinal-Tap-Case.md
@@ -1,39 +1,39 @@ | ||
-# Problem Explanation: | ||
-- Convert the given string to an all lowercase sentence joined by dashes. | ||
- | ||
-## Hint: 1 | ||
-- Create a regex to for all white spaces and underscores. | ||
- | ||
-## Hint: 2 | ||
-- You will also have to make everything lowercase. | ||
- | ||
-## Hint: 3 | ||
-- The tricky part is getting the regex part to work, once you do that then just turn the uppercase to lowercase and replace spaces with underscores using `replace()` | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function spinalCase(str) { | ||
- // Create a variable for the white space and underscores. | ||
- var regex = /\s+|_+/g; | ||
- | ||
- // Replace low-upper case to low-space-uppercase | ||
- str = str.replace(/([a-z])([A-Z])/g, '$1 $2'); | ||
- | ||
- // Replace space and underscore with - | ||
- return str.replace(regex, '-').toLowerCase(); | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments in code. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+- Convert the given string to an all lowercase sentence joined by dashes. | ||
+ | ||
+## Hint: 1 | ||
+- Create a regex to for all white spaces and underscores. | ||
+ | ||
+## Hint: 2 | ||
+- You will also have to make everything lowercase. | ||
+ | ||
+## Hint: 3 | ||
+- The tricky part is getting the regex part to work, once you do that then just turn the uppercase to lowercase and replace spaces with underscores using `replace()` | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function spinalCase(str) { | ||
+ // Create a variable for the white space and underscores. | ||
+ var regex = /\s+|_+/g; | ||
+ | ||
+ // Replace low-upper case to low-space-uppercase | ||
+ str = str.replace(/([a-z])([A-Z])/g, '$1 $2'); | ||
+ | ||
+ // Replace space and underscore with - | ||
+ return str.replace(regex, '-').toLowerCase(); | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments in code. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
76
Bonfire-Style-Guide.md
@@ -1,38 +1,38 @@ | ||
-_work in progress_ | ||
- | ||
-# Bonfire Style Guide | ||
-Writing Bonfire challenges is a great way to exercise your own problem solving and testing abilities. It is a simple three step process. | ||
-1. Fill out the [generator](http://www.freecodecamp.com/bonfire-challenge-generator) form and test your challenge. | ||
-2. Once you have confirmed a working bonfire challenge in the generator, copy and paste the the fields into the [JSON generator.](http://www.freecodecamp.com/bonfire-json-generator) | ||
-3. Copy the JSON, fork the freecodecamp repository, and submit a pull request with your addition to the [bonfires.json.](https://github.com/FreeCodeCamp/freecodecamp/blob/master/seed_data/bonfires.json) | ||
- | ||
-## Name | ||
-Name your challenge | ||
- | ||
-## Difficulty | ||
-Attempt to rate difficulty compared against existing bonfire challenges. | ||
- | ||
-_TODO: add basic quantifiers for each difficulty level_ | ||
- | ||
-## Description | ||
-Separate paragraphs with a line break. Only the first paragraph is visible prior to a user clicking the "More information" button. | ||
- | ||
-All necessary information must be included in the first paragraph. Write this first paragraph as succinct as possible. Subsequent paragraphs should offer hints or details if needed. | ||
- | ||
-If your subject matter warrants deeper understanding, you may link to Wikipedia. | ||
- | ||
-## Challenge Seed | ||
-This is important. | ||
- | ||
-## ~~Challenge Entry Point~~ (deprecated) | ||
-_Leave this field blank. It will soon be removed from the generator._ | ||
- | ||
-## Tests | ||
-These tests are what bring your challenge to life. Without them, we cannot confirm the accuracy of a user's submitted answer. Choose your tests wisely. | ||
- | ||
-Bonfire tests are written using the [Chai.js](http://chaijs.com/) assertion library. Please use the `should` and `expect` syntax for end user readability. As an example of what not do to, many of the original Bonfire challenges are written with `assert` syntax and many of the test cases are difficult to read. | ||
- | ||
-If your bonfire question has a lot of edge cases, you will need to write many tests for full coverage. If you find yourself writing more tests than you desire, you may consider simplifying the requirements of your bonfire challenge. For difficulty level 1 through 3, you will generally only need 2 to 4 tests. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @brandenbyers @Rafase282` | ||
+_work in progress_ | ||
+ | ||
+# Bonfire Style Guide | ||
+Writing Bonfire challenges is a great way to exercise your own problem solving and testing abilities. It is a simple three step process. | ||
+1. Fill out the [generator](http://www.freecodecamp.com/bonfire-challenge-generator) form and test your challenge. | ||
+2. Once you have confirmed a working bonfire challenge in the generator, copy and paste the the fields into the [JSON generator.](http://www.freecodecamp.com/bonfire-json-generator) | ||
+3. Copy the JSON, fork the freecodecamp repository, and submit a pull request with your addition to the [bonfires.json.](https://github.com/FreeCodeCamp/freecodecamp/blob/master/seed_data/bonfires.json) | ||
+ | ||
+## Name | ||
+Name your challenge | ||
+ | ||
+## Difficulty | ||
+Attempt to rate difficulty compared against existing bonfire challenges. | ||
+ | ||
+_TODO: add basic quantifiers for each difficulty level_ | ||
+ | ||
+## Description | ||
+Separate paragraphs with a line break. Only the first paragraph is visible prior to a user clicking the "More information" button. | ||
+ | ||
+All necessary information must be included in the first paragraph. Write this first paragraph as succinct as possible. Subsequent paragraphs should offer hints or details if needed. | ||
+ | ||
+If your subject matter warrants deeper understanding, you may link to Wikipedia. | ||
+ | ||
+## Challenge Seed | ||
+This is important. | ||
+ | ||
+## ~~Challenge Entry Point~~ (deprecated) | ||
+_Leave this field blank. It will soon be removed from the generator._ | ||
+ | ||
+## Tests | ||
+These tests are what bring your challenge to life. Without them, we cannot confirm the accuracy of a user's submitted answer. Choose your tests wisely. | ||
+ | ||
+Bonfire tests are written using the [Chai.js](http://chaijs.com/) assertion library. Please use the `should` and `expect` syntax for end user readability. As an example of what not do to, many of the original Bonfire challenges are written with `assert` syntax and many of the test cases are difficult to read. | ||
+ | ||
+If your bonfire question has a lot of edge cases, you will need to write many tests for full coverage. If you find yourself writing more tests than you desire, you may consider simplifying the requirements of your bonfire challenge. For difficulty level 1 through 3, you will generally only need 2 to 4 tests. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @brandenbyers @Rafase282` |
120
Bonfire-Sum-All-Numbers-in-a-Range.md
@@ -1,60 +1,60 @@ | ||
-# Problem Explanation: | ||
-- You need to create a program that will take an array of two numbers who are not necessarily in order, and then add not just those numbers but any numbers in between. For example, [3,1] will be the same as `1+2+3` and not just `3+1` | ||
- | ||
-## Hint: 1 | ||
-- Use `Math.max()` to find the maximum value of two numbers. | ||
- | ||
-## Hint: 2 | ||
-- Use `Math.min()` to find the minimum value of two numbers. | ||
- | ||
-## Hint: 3 | ||
-- Remember to that you must add all the numbers in between so this would require a way to get those numbers. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution 1: | ||
- | ||
-```js | ||
-function sumAll(arr) { | ||
- var max = Math.max(arr[0], arr[1]); | ||
- var min = Math.min(arr[0], arr[1]); | ||
- var temp = 0; | ||
- for (var i=min; i <= max; i++){ | ||
- temp += i; | ||
- } | ||
- return(temp); | ||
-} | ||
- | ||
-sumAll([1, 4]); | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- First create a variable to store the max number between two. | ||
-- The same as before for the Smallest number. | ||
-- We create a temporary variable to add the numbers. | ||
- | ||
-Since the numbers might not be always in order, using max() and min() will help organize. | ||
- | ||
-## Code Solution 2: | ||
-```js | ||
-function sumAll(arr) { | ||
- // Buckle up everything to one! | ||
- | ||
- // Using ES6 arrow function (one-liner) | ||
- var sortedArr = arr.sort((a,b) => a-b); | ||
- var firstNum = arr[0]; | ||
- var lastNum = arr[1]; | ||
- // Using Arithmetic Progression summing formula | ||
- // https://en.wikipedia.org/wiki/Arithmetic_progression#Sum | ||
- var sum = (lastNum - firstNum + 1) * (firstNum + lastNum) / 2; | ||
- return sum; | ||
-} | ||
-``` | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @abhisekp`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+- You need to create a program that will take an array of two numbers who are not necessarily in order, and then add not just those numbers but any numbers in between. For example, [3,1] will be the same as `1+2+3` and not just `3+1` | ||
+ | ||
+## Hint: 1 | ||
+- Use `Math.max()` to find the maximum value of two numbers. | ||
+ | ||
+## Hint: 2 | ||
+- Use `Math.min()` to find the minimum value of two numbers. | ||
+ | ||
+## Hint: 3 | ||
+- Remember to that you must add all the numbers in between so this would require a way to get those numbers. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution 1: | ||
+ | ||
+```js | ||
+function sumAll(arr) { | ||
+ var max = Math.max(arr[0], arr[1]); | ||
+ var min = Math.min(arr[0], arr[1]); | ||
+ var temp = 0; | ||
+ for (var i=min; i <= max; i++){ | ||
+ temp += i; | ||
+ } | ||
+ return(temp); | ||
+} | ||
+ | ||
+sumAll([1, 4]); | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- First create a variable to store the max number between two. | ||
+- The same as before for the Smallest number. | ||
+- We create a temporary variable to add the numbers. | ||
+ | ||
+Since the numbers might not be always in order, using max() and min() will help organize. | ||
+ | ||
+## Code Solution 2: | ||
+```js | ||
+function sumAll(arr) { | ||
+ // Buckle up everything to one! | ||
+ | ||
+ // Using ES6 arrow function (one-liner) | ||
+ var sortedArr = arr.sort((a,b) => a-b); | ||
+ var firstNum = arr[0]; | ||
+ var lastNum = arr[1]; | ||
+ // Using Arithmetic Progression summing formula | ||
+ // https://en.wikipedia.org/wiki/Arithmetic_progression#Sum | ||
+ var sum = (lastNum - firstNum + 1) * (firstNum + lastNum) / 2; | ||
+ return sum; | ||
+} | ||
+``` | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @abhisekp`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
128
Bonfire-Sum-All-Primes.md
@@ -1,64 +1,64 @@ | ||
-# Explanation: | ||
-The explanation for this problem is very simple. You will generate a list of prime numbers up to the number you are given as a parameter. Then you need to add them all up and return that value. The tricky part is on generating the list of prime numbers. I suggest you find a code or a good math algorithm that you can turn into code. | ||
- | ||
-## Hint: 1 | ||
-Generate a list of all the numbers up to and including the one you got as a parameter. This will be needed to determine which numbers are prime or not. | ||
- | ||
-## Hint: 2 | ||
-Check this [link](http://stackoverflow.com/questions/11966520/how-to-find-prime-numbers-between-0-100) if you prefer to find a solution for finding primes, or try learning and implementing your own [Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) | ||
- | ||
-## Hint: 3 | ||
-This problem is hard if you have to create your own code to check for primes, so don't feel bad if you had to use someone's code for that bit. Either way, you are most likely using array, so once you generate an array of primes, then just add them all up and return the number you get. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function sumPrimes(num) { | ||
- var res = 0; | ||
- | ||
- // FUnction to get the primes up to max in an array | ||
- function getPrimes(max) { | ||
- var sieve = []; | ||
- var i; | ||
- var j; | ||
- var primes = []; | ||
- for (i = 2; i <= max; ++i) { | ||
- if (!sieve[i]) { | ||
- // i has not been marked -- it is prime | ||
- primes.push(i); | ||
- for (j = i << 1; j <= max; j += i) { | ||
- sieve[j] = true; | ||
- } | ||
- } | ||
- } | ||
- | ||
- return primes; | ||
- } | ||
- | ||
- // Add the primes | ||
- var primes = getPrimes(num); | ||
- for (var p = 0; p < primes.length; p++) { | ||
- res += primes[p]; | ||
- } | ||
- | ||
- return res; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Create a function that generates the numbers from 1 to **num** and check if they are prime along the way. | ||
-- Declare the variables that will be needed. | ||
-- Start with 2, if it has not been marked and added to the sieve array then it is a prime and we add it to the prime array. | ||
-- Add the others to the sieve array. | ||
-- Return the primes | ||
-- Loop through the returned array and add all the elements to then return the final value. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Explanation: | ||
+The explanation for this problem is very simple. You will generate a list of prime numbers up to the number you are given as a parameter. Then you need to add them all up and return that value. The tricky part is on generating the list of prime numbers. I suggest you find a code or a good math algorithm that you can turn into code. | ||
+ | ||
+## Hint: 1 | ||
+Generate a list of all the numbers up to and including the one you got as a parameter. This will be needed to determine which numbers are prime or not. | ||
+ | ||
+## Hint: 2 | ||
+Check this [link](http://stackoverflow.com/questions/11966520/how-to-find-prime-numbers-between-0-100) if you prefer to find a solution for finding primes, or try learning and implementing your own [Sieve of Eratosthenes](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) | ||
+ | ||
+## Hint: 3 | ||
+This problem is hard if you have to create your own code to check for primes, so don't feel bad if you had to use someone's code for that bit. Either way, you are most likely using array, so once you generate an array of primes, then just add them all up and return the number you get. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function sumPrimes(num) { | ||
+ var res = 0; | ||
+ | ||
+ // FUnction to get the primes up to max in an array | ||
+ function getPrimes(max) { | ||
+ var sieve = []; | ||
+ var i; | ||
+ var j; | ||
+ var primes = []; | ||
+ for (i = 2; i <= max; ++i) { | ||
+ if (!sieve[i]) { | ||
+ // i has not been marked -- it is prime | ||
+ primes.push(i); | ||
+ for (j = i << 1; j <= max; j += i) { | ||
+ sieve[j] = true; | ||
+ } | ||
+ } | ||
+ } | ||
+ | ||
+ return primes; | ||
+ } | ||
+ | ||
+ // Add the primes | ||
+ var primes = getPrimes(num); | ||
+ for (var p = 0; p < primes.length; p++) { | ||
+ res += primes[p]; | ||
+ } | ||
+ | ||
+ return res; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Create a function that generates the numbers from 1 to **num** and check if they are prime along the way. | ||
+- Declare the variables that will be needed. | ||
+- Start with 2, if it has not been marked and added to the sieve array then it is a prime and we add it to the prime array. | ||
+- Add the others to the sieve array. | ||
+- Return the primes | ||
+- Loop through the returned array and add all the elements to then return the final value. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
182
Bonfire-Symmetric-Difference.md
@@ -1,91 +1,91 @@ | ||
-# Problem Explanation: | ||
-Symmetric Difference is the difference between **two** sets. | ||
- | ||
-So in the Symmetric Difference Bonfire you would work through the arrays of numbers something like this - | ||
- | ||
-`sym(A, B, C)` Translates to `sym(sym(A,B),C)` | ||
- | ||
-Or in plain English - First find the Symmetric Difference of Set A and Set B. Then find the Symmetric Difference of this new set and Set C. | ||
- | ||
-So - | ||
- | ||
-`sym([1, 2, 5], [2, 3, 5], [3, 4, 5])` | ||
- | ||
-would equal | ||
- | ||
-`[1,4,5]` | ||
- | ||
-Here's a nice video tutorial (with an awful fake British accent!) - | ||
- | ||
-[YouTube - Symmetric Difference](https://www.youtube.com/watch?v=PxffSUQRkG4) | ||
- | ||
-## Hint: 1 | ||
-The arguments object is not an Array. It is similar to an Array, but does not have any Array properties except length. For example, it does not have the pop method. However it can be converted to a real Array: | ||
- | ||
-`var args = Array.prototype.slice.call(arguments);` | ||
- | ||
-## Hint: 2 | ||
-Write a function that returns the symmetric difference of array1 and array2. | ||
- | ||
-`yourFunction([1, 2, 3], [2, 4, 6])` must return `[1, 3, 4, 6]` | ||
- | ||
-## Hint: 3 | ||
-Use `Array.prototype.reduce` along with yourFunction to repeat the process on multiple arguments | ||
- | ||
-Something a bit strange about the definition of symmetric difference is that if one identical item occurs in three different sets, it is a member of the symmetric difference. An example is easier to explain: | ||
-``` | ||
-a = [1, 2, 5] | ||
-b = [2, 3, 5] | ||
-c = [3, 4, 5] | ||
- | ||
-sym(a, b) = [1, 3] | ||
-sym([1, 3], c) = [1, 4, 5] | ||
-``` | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function sym() { | ||
- | ||
- // Convert the argument object into a proper array | ||
- var args = Array.prototype.slice.call(arguments); | ||
- | ||
- // Return the symmetric difference of 2 arrays | ||
- var getDiff = function(arr1, arr2) { | ||
- | ||
- // Returns items in arr1 that don't exist in arr2 | ||
- function filterFunction(arr1, arr2) { | ||
- return arr1.filter(function(item) { | ||
- return arr2.indexOf(item) === -1; | ||
- }); | ||
- } | ||
- | ||
- // Run filter function on each array against the other then get unique values | ||
- return filterFunction(arr1, arr2) | ||
- .concat(filterFunction(arr2, arr1)) | ||
- .filter(function(item, idx, arr) { | ||
- // Keep any items that are unique - the index of the current item === index of the first occurrence in the array | ||
- return arr.indexOf(item) === idx; | ||
- }); | ||
- }; | ||
- | ||
- // Reduce all arguments getting the difference of them | ||
- return args.reduce(getDiff, []); | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Read comments in code. | ||
- | ||
-# Related Links | ||
-- [Symmetric Difference](https://en.wikipedia.org/wiki/Symmetric_difference) | ||
-- [Array.reduce()](http://devdocs.io/javascript/global_objects/array/reduce) | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph @jjmax75`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Problem Explanation: | ||
+Symmetric Difference is the difference between **two** sets. | ||
+ | ||
+So in the Symmetric Difference Bonfire you would work through the arrays of numbers something like this - | ||
+ | ||
+`sym(A, B, C)` Translates to `sym(sym(A,B),C)` | ||
+ | ||
+Or in plain English - First find the Symmetric Difference of Set A and Set B. Then find the Symmetric Difference of this new set and Set C. | ||
+ | ||
+So - | ||
+ | ||
+`sym([1, 2, 5], [2, 3, 5], [3, 4, 5])` | ||
+ | ||
+would equal | ||
+ | ||
+`[1,4,5]` | ||
+ | ||
+Here's a nice video tutorial (with an awful fake British accent!) - | ||
+ | ||
+[YouTube - Symmetric Difference](https://www.youtube.com/watch?v=PxffSUQRkG4) | ||
+ | ||
+## Hint: 1 | ||
+The arguments object is not an Array. It is similar to an Array, but does not have any Array properties except length. For example, it does not have the pop method. However it can be converted to a real Array: | ||
+ | ||
+`var args = Array.prototype.slice.call(arguments);` | ||
+ | ||
+## Hint: 2 | ||
+Write a function that returns the symmetric difference of array1 and array2. | ||
+ | ||
+`yourFunction([1, 2, 3], [2, 4, 6])` must return `[1, 3, 4, 6]` | ||
+ | ||
+## Hint: 3 | ||
+Use `Array.prototype.reduce` along with yourFunction to repeat the process on multiple arguments | ||
+ | ||
+Something a bit strange about the definition of symmetric difference is that if one identical item occurs in three different sets, it is a member of the symmetric difference. An example is easier to explain: | ||
+``` | ||
+a = [1, 2, 5] | ||
+b = [2, 3, 5] | ||
+c = [3, 4, 5] | ||
+ | ||
+sym(a, b) = [1, 3] | ||
+sym([1, 3], c) = [1, 4, 5] | ||
+``` | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function sym() { | ||
+ | ||
+ // Convert the argument object into a proper array | ||
+ var args = Array.prototype.slice.call(arguments); | ||
+ | ||
+ // Return the symmetric difference of 2 arrays | ||
+ var getDiff = function(arr1, arr2) { | ||
+ | ||
+ // Returns items in arr1 that don't exist in arr2 | ||
+ function filterFunction(arr1, arr2) { | ||
+ return arr1.filter(function(item) { | ||
+ return arr2.indexOf(item) === -1; | ||
+ }); | ||
+ } | ||
+ | ||
+ // Run filter function on each array against the other then get unique values | ||
+ return filterFunction(arr1, arr2) | ||
+ .concat(filterFunction(arr2, arr1)) | ||
+ .filter(function(item, idx, arr) { | ||
+ // Keep any items that are unique - the index of the current item === index of the first occurrence in the array | ||
+ return arr.indexOf(item) === idx; | ||
+ }); | ||
+ }; | ||
+ | ||
+ // Reduce all arguments getting the difference of them | ||
+ return args.reduce(getDiff, []); | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Read comments in code. | ||
+ | ||
+# Related Links | ||
+- [Symmetric Difference](https://en.wikipedia.org/wiki/Symmetric_difference) | ||
+- [Array.reduce()](http://devdocs.io/javascript/global_objects/array/reduce) | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph @jjmax75`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
116
Bonfire-Validate-US-Telephone-Numbers.md
@@ -1,59 +1,59 @@ | ||
-# Problem Explanation: | ||
-- The task is not that hard to understand, implementing it is the hardest part. You have a to validate an US phone number. This means there is a certain amount of numbers required, while you don't need to put the country code, you will still need the area code and use one of the few formats allowed. | ||
- | ||
-## Hint: 1 | ||
-- There is no way around it, you will need to brush up your regular expressions skills. | ||
- | ||
-## Hint: 2 | ||
-- Try using a site like [http://regexpal.com/](http://regexpal.com/) to test the regex live while you create it. | ||
- | ||
-## Hint: 3 | ||
-- Start by trying to get it to validate each format from the example, each one should take a new line, once you get to select them all, then add examples that should not be selected and make sure they are not selected. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function telephoneCheck(str) { | ||
- // Comprehensive regex from @dting | ||
- var re = /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$/; | ||
- | ||
- return re.test(str); | ||
-} | ||
-``` | ||
- | ||
-```js | ||
-function telephoneCheck(str) { | ||
- // Good luck! | ||
- var re = /^1?[\(\s]*\d{3}[-\)\s]*\d{3}[-\s]?\d{4}$/; | ||
- | ||
- return re.test(str); | ||
-} | ||
-``` | ||
- | ||
-```js | ||
-function telephoneCheck(str) { | ||
-//provided by jhalls | ||
- var regex = /^1?\s?(\(\d{3}\)|\d{3})?\s?-?\d{3}-?\s?\d{4}$/; | ||
- | ||
- if (str.match(regex)) { | ||
- return true; | ||
- } | ||
- | ||
- else { | ||
- return false; | ||
- } | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- While the answer works, there is a much shorter regex that will satisfy this problem. However the code provide is very good and robust when it comes to validating US phone numbers client side, a much better way would be to implement this library [libphonenumber.](https://github.com/googlei18n/libphonenumber) | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph @dting @jhalls`** | ||
- | ||
+# Problem Explanation: | ||
+- The task is not that hard to understand, implementing it is the hardest part. You have a to validate an US phone number. This means there is a certain amount of numbers required, while you don't need to put the country code, you will still need the area code and use one of the few formats allowed. | ||
+ | ||
+## Hint: 1 | ||
+- There is no way around it, you will need to brush up your regular expressions skills. | ||
+ | ||
+## Hint: 2 | ||
+- Try using a site like [http://regexpal.com/](http://regexpal.com/) to test the regex live while you create it. | ||
+ | ||
+## Hint: 3 | ||
+- Start by trying to get it to validate each format from the example, each one should take a new line, once you get to select them all, then add examples that should not be selected and make sure they are not selected. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function telephoneCheck(str) { | ||
+ // Comprehensive regex from @dting | ||
+ var re = /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})$/; | ||
+ | ||
+ return re.test(str); | ||
+} | ||
+``` | ||
+ | ||
+```js | ||
+function telephoneCheck(str) { | ||
+ // Good luck! | ||
+ var re = /^1?[\(\s]*\d{3}[-\)\s]*\d{3}[-\s]?\d{4}$/; | ||
+ | ||
+ return re.test(str); | ||
+} | ||
+``` | ||
+ | ||
+```js | ||
+function telephoneCheck(str) { | ||
+//provided by jhalls | ||
+ var regex = /^1?\s?(\(\d{3}\)|\d{3})?\s?-?\d{3}-?\s?\d{4}$/; | ||
+ | ||
+ if (str.match(regex)) { | ||
+ return true; | ||
+ } | ||
+ | ||
+ else { | ||
+ return false; | ||
+ } | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- While the answer works, there is a much shorter regex that will satisfy this problem. However the code provide is very good and robust when it comes to validating US phone numbers client side, a much better way would be to implement this library [libphonenumber.](https://github.com/googlei18n/libphonenumber) | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @Rafase282 @guyjoseph @dting @jhalls`** | ||
+ | ||
> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
186
Bonfire-Where-art-thou.md
@@ -1,94 +1,94 @@ | ||
-![](http://i.imgur.com/IUY2p6Y.jpg) | ||
- | ||
-# Problem Explanation | ||
-Write an algorithm that will take an `array` for the first argument and return an `array` with all the `object`s that matches all the properties and values in the `Object` passed as second parameter. | ||
- | ||
-## Hint: 1 | ||
-You may use `for` loop or the `Array.prototype.filter` method. | ||
-- [http://devdocs.io/#q=js+for](http://devdocs.io/#q=js+for) | ||
-- [http://devdocs.io/#q=js+Array+filter](http://devdocs.io/#q=js+Array+filter) | ||
- | ||
-## Hint: 2 | ||
-Try to use `Object.prototype.hasOwnProperty` method to know if the property name exists in an object (as its own property). | ||
-- [http://devdocs.io/#q=js+Object+hasOwnProperty](http://devdocs.io/#q=js+Object+hasOwnProperty) | ||
- | ||
-## Hint: 3 | ||
-Check equivalence of `Object` in `collection` with `Object` passed as second parameter to `where` function. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
-### First | ||
- | ||
-```js | ||
-function where(collection, source) { | ||
- // "What's in a name? that which we call a rose | ||
- // By any other name would smell as sweet.” | ||
- // -- by William Shakespeare, Romeo and Juliet | ||
- var srcKeys = Object.keys(source); | ||
- | ||
- // filter the collection | ||
- return collection.filter(function (obj) { | ||
- for(var i = 0; i < srcKeys.length; i++) { | ||
- // check if obj in collection doesn't have the key | ||
- // or if it does have the key, | ||
- // then check if the property value doesn't match the value in source | ||
- if(!obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] !== source[srcKeys[i]]) { | ||
- return false; | ||
- } | ||
- } | ||
- return true; | ||
- }); | ||
-} | ||
-``` | ||
- | ||
-### Second | ||
- | ||
-```js | ||
-function where(collection, source) { | ||
- // "What's in a name? that which we call a rose | ||
- // By any other name would smell as sweet.” | ||
- // -- by William Shakespeare, Romeo and Juliet | ||
- var srcKeys = Object.keys(source); | ||
- | ||
- // filter the collection | ||
- return collection.filter(function (obj) { | ||
- // return a Boolean value for `filter` method | ||
- return srcKeys.every(function (key) { | ||
- // reduce to Boolean value to be returned for `every` method | ||
- return obj.hasOwnProperty(key) && obj[key] === source[key]; | ||
- }); | ||
- }); | ||
-} | ||
-``` | ||
- | ||
-### Third | ||
- | ||
-```js | ||
-function where(collection, source) { | ||
- // "What's in a name? that which we call a rose | ||
- // By any other name would smell as sweet.” | ||
- // -- by William Shakespeare, Romeo and Juliet | ||
- var srcKeys = Object.keys(source); | ||
- | ||
- // filter the collection | ||
- return collection.filter(function (obj) { | ||
- // return a Boolean value for filter callback using reduce method | ||
- return srcKeys.reduce(function (res, key) { | ||
- // reduce to Boolean value to be returned by reduce method | ||
- return obj.hasOwnProperty(key) && obj[key] === source[key]; | ||
- }, false); | ||
- }); | ||
-} | ||
-``` | ||
- | ||
-## Code Explanation: | ||
-> Please read the comments in the source code. | ||
- | ||
-Check this http://repl.it/BFZQ/19 for pretty debugging and code explanation | ||
- | ||
-# Credits: | ||
+![](http://i.imgur.com/IUY2p6Y.jpg) | ||
+ | ||
+# Problem Explanation | ||
+Write an algorithm that will take an `array` for the first argument and return an `array` with all the `object`s that matches all the properties and values in the `Object` passed as second parameter. | ||
+ | ||
+## Hint: 1 | ||
+You may use `for` loop or the `Array.prototype.filter` method. | ||
+- [http://devdocs.io/#q=js+for](http://devdocs.io/#q=js+for) | ||
+- [http://devdocs.io/#q=js+Array+filter](http://devdocs.io/#q=js+Array+filter) | ||
+ | ||
+## Hint: 2 | ||
+Try to use `Object.prototype.hasOwnProperty` method to know if the property name exists in an object (as its own property). | ||
+- [http://devdocs.io/#q=js+Object+hasOwnProperty](http://devdocs.io/#q=js+Object+hasOwnProperty) | ||
+ | ||
+## Hint: 3 | ||
+Check equivalence of `Object` in `collection` with `Object` passed as second parameter to `where` function. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+### First | ||
+ | ||
+```js | ||
+function where(collection, source) { | ||
+ // "What's in a name? that which we call a rose | ||
+ // By any other name would smell as sweet.” | ||
+ // -- by William Shakespeare, Romeo and Juliet | ||
+ var srcKeys = Object.keys(source); | ||
+ | ||
+ // filter the collection | ||
+ return collection.filter(function (obj) { | ||
+ for(var i = 0; i < srcKeys.length; i++) { | ||
+ // check if obj in collection doesn't have the key | ||
+ // or if it does have the key, | ||
+ // then check if the property value doesn't match the value in source | ||
+ if(!obj.hasOwnProperty(srcKeys[i]) || obj[srcKeys[i]] !== source[srcKeys[i]]) { | ||
+ return false; | ||
+ } | ||
+ } | ||
+ return true; | ||
+ }); | ||
+} | ||
+``` | ||
+ | ||
+### Second | ||
+ | ||
+```js | ||
+function where(collection, source) { | ||
+ // "What's in a name? that which we call a rose | ||
+ // By any other name would smell as sweet.” | ||
+ // -- by William Shakespeare, Romeo and Juliet | ||
+ var srcKeys = Object.keys(source); | ||
+ | ||
+ // filter the collection | ||
+ return collection.filter(function (obj) { | ||
+ // return a Boolean value for `filter` method | ||
+ return srcKeys.every(function (key) { | ||
+ // reduce to Boolean value to be returned for `every` method | ||
+ return obj.hasOwnProperty(key) && obj[key] === source[key]; | ||
+ }); | ||
+ }); | ||
+} | ||
+``` | ||
+ | ||
+### Third | ||
+ | ||
+```js | ||
+function where(collection, source) { | ||
+ // "What's in a name? that which we call a rose | ||
+ // By any other name would smell as sweet.” | ||
+ // -- by William Shakespeare, Romeo and Juliet | ||
+ var srcKeys = Object.keys(source); | ||
+ | ||
+ // filter the collection | ||
+ return collection.filter(function (obj) { | ||
+ // return a Boolean value for filter callback using reduce method | ||
+ return srcKeys.reduce(function (res, key) { | ||
+ // reduce to Boolean value to be returned by reduce method | ||
+ return obj.hasOwnProperty(key) && obj[key] === source[key]; | ||
+ }, false); | ||
+ }); | ||
+} | ||
+``` | ||
+ | ||
+## Code Explanation: | ||
+> Please read the comments in the source code. | ||
+ | ||
+Check this http://repl.it/BFZQ/19 for pretty debugging and code explanation | ||
+ | ||
+# Credits: | ||
If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @abhisekp @dting` |
116
Bonfire-Where-do-I-belong.md
@@ -1,58 +1,58 @@ | ||
-# Explanation: | ||
-This can be a tricky problem to understand. You need to find where in the array a number should be inserted by order, and return the index where it should go. | ||
- | ||
-## Hint: 1 | ||
-The first thing to do is sort the array from lower to bigger, just to make the code easier. This is where sort comes in, it needs a callback function so you have to create it. | ||
- | ||
-## Hint: 2 | ||
-Once the array is sorted, then just check for the first number that is bigger and return the index. | ||
- | ||
-## Hint: 3 | ||
-If there is no index for that number then you will have to deal with that case too. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-function where(arr, num) { | ||
- arr.sort(function(a, b) { | ||
- return a - b; | ||
- }); | ||
- | ||
- for (var a = 0; a < arr.length; a++) { | ||
- if (arr[a] >= num) | ||
- return parseInt(a); | ||
- } | ||
- | ||
- return arr.length; | ||
-} | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- First I sort the array using `.sort(callbackFuntion)` to sort it by lowest to highest, from left to right. | ||
-- Then I use a for loop to compare the items in the array starting from the smallest one. When an item on the array is greater than the number we are comparing against, then we return the index as an integer. | ||
- | ||
-## Code Solution 2: | ||
- | ||
-```js | ||
-function where(arr, num) { | ||
- arr.push(num); | ||
- arr.sort(function(a, b) | ||
- {return a-b} | ||
- ); | ||
- return arr.indexOf(num); | ||
- } | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- First insert the number into the array using the `Array.push()` method. | ||
-- Then use the numerical sort method to sort the elements of the array. in the end just return the index value of the number that was push earlier using the `Array.indexOf()` method. | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 and @rahul1992` | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+# Explanation: | ||
+This can be a tricky problem to understand. You need to find where in the array a number should be inserted by order, and return the index where it should go. | ||
+ | ||
+## Hint: 1 | ||
+The first thing to do is sort the array from lower to bigger, just to make the code easier. This is where sort comes in, it needs a callback function so you have to create it. | ||
+ | ||
+## Hint: 2 | ||
+Once the array is sorted, then just check for the first number that is bigger and return the index. | ||
+ | ||
+## Hint: 3 | ||
+If there is no index for that number then you will have to deal with that case too. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+function where(arr, num) { | ||
+ arr.sort(function(a, b) { | ||
+ return a - b; | ||
+ }); | ||
+ | ||
+ for (var a = 0; a < arr.length; a++) { | ||
+ if (arr[a] >= num) | ||
+ return parseInt(a); | ||
+ } | ||
+ | ||
+ return arr.length; | ||
+} | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- First I sort the array using `.sort(callbackFuntion)` to sort it by lowest to highest, from left to right. | ||
+- Then I use a for loop to compare the items in the array starting from the smallest one. When an item on the array is greater than the number we are comparing against, then we return the index as an integer. | ||
+ | ||
+## Code Solution 2: | ||
+ | ||
+```js | ||
+function where(arr, num) { | ||
+ arr.push(num); | ||
+ arr.sort(function(a, b) | ||
+ {return a-b} | ||
+ ); | ||
+ return arr.indexOf(num); | ||
+ } | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- First insert the number into the array using the `Array.push()` method. | ||
+- Then use the numerical sort method to sort the elements of the array. in the end just return the index value of the number that was push earlier using the `Array.indexOf()` method. | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: `Thanks @Rafase282 and @rahul1992` | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) |
96
Bonfire-Wiki-Template.md
@@ -1,49 +1,49 @@ | ||
-**Foundational Agile Principles:** | ||
- | ||
-**_Individuals and interactions_** over processes and tools | ||
- | ||
-**_Working software _**over comprehensive | ||
- | ||
-_**Customer collaboration**_ over contract negotiation | ||
- | ||
-_**Responding to change **_ over following a plan | ||
- | ||
- | ||
- | ||
- | ||
-## User-Stories | ||
-User stories help us tie the needs of our users directly to features we implement in a | ||
-conversational format. They **always** follow this syntax: _“As a User/Stakeholder , I need/want to be able to Do Something”_. This can result in some awkward stories for the “obvious” features like _“As a user, I need to be able to trust that my credit card information is secure.”_, but it is imperative that ALL features tie back to a story in order to allow us to effectively break the work down into manageable pieces. | ||
- | ||
-## Sprints | ||
-A “Sprint” is a short (1-3 weeks) development cycle during which a number of stories or subtasks are targeted for completion by the end of the sprint. The idea behind “Sprinting” is to allow us to **deliver** a story to the project champion for feedback/approval. This iterative workflow ensures we get continuous buy-in from the project champion and we are delivering functionality that both works, and is valuable. | ||
- | ||
-## SCRUM | ||
-At a basic level, SCRUM helps us stay focused and informed about what the status is on each assigned task as well as break down communication barriers. In many professional settings the work day begins with a “Daily Scrum”. We will be following a weekly scrum to align with our sprints. A common scrum failure is to attempt to problem solve during a scrum. Troubleshooting and brainstorming should always be done as a separate task from SCRUM. | ||
- | ||
-## Spoiler Alert! | ||
-[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
- | ||
-**Solution ahead!** | ||
- | ||
-## Code Solution: | ||
- | ||
-```js | ||
-code here | ||
-``` | ||
- | ||
-# Code Explanation: | ||
-- Explain your code here | ||
- | ||
-# Credits: | ||
-If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @username1 @username2 @yourusername`** | ||
- | ||
-> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
- | ||
-## Here you can add any other information that is helpful or related. | ||
-- Right here. | ||
- | ||
-### Important notes about this template. | ||
-- This template can also be used for regular pages. | ||
-- The author part has been removed. This is a collaboration page, while people can see who contributed by checking the revision, using the code for the credits will also benefits the contributors and your name will be there, so there is no longer any need to add your picture or links. | ||
+**Foundational Agile Principles:** | ||
+ | ||
+**_Individuals and interactions_** over processes and tools | ||
+ | ||
+**_Working software _**over comprehensive | ||
+ | ||
+_**Customer collaboration**_ over contract negotiation | ||
+ | ||
+_**Responding to change **_ over following a plan | ||
+ | ||
+ | ||
+ | ||
+ | ||
+## User-Stories | ||
+User stories help us tie the needs of our users directly to features we implement in a | ||
+conversational format. They **always** follow this syntax: _“As a User/Stakeholder , I need/want to be able to Do Something”_. This can result in some awkward stories for the “obvious” features like _“As a user, I need to be able to trust that my credit card information is secure.”_, but it is imperative that ALL features tie back to a story in order to allow us to effectively break the work down into manageable pieces. | ||
+ | ||
+## Sprints | ||
+A “Sprint” is a short (1-3 weeks) development cycle during which a number of stories or subtasks are targeted for completion by the end of the sprint. The idea behind “Sprinting” is to allow us to **deliver** a story to the project champion for feedback/approval. This iterative workflow ensures we get continuous buy-in from the project champion and we are delivering functionality that both works, and is valuable. | ||
+ | ||
+## SCRUM | ||
+At a basic level, SCRUM helps us stay focused and informed about what the status is on each assigned task as well as break down communication barriers. In many professional settings the work day begins with a “Daily Scrum”. We will be following a weekly scrum to align with our sprints. A common scrum failure is to attempt to problem solve during a scrum. Troubleshooting and brainstorming should always be done as a separate task from SCRUM. | ||
+ | ||
+## Spoiler Alert! | ||
+[![687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/thumb/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif)](https://files.gitter.im/FreeCodeCamp/Wiki/nlOm/687474703a2f2f7777772e796f75726472756d2e636f6d2f796f75726472756d2f696d616765732f323030372f31302f31302f7265645f7761726e696e675f7369676e5f322e676966.gif) | ||
+ | ||
+**Solution ahead!** | ||
+ | ||
+## Code Solution: | ||
+ | ||
+```js | ||
+code here | ||
+``` | ||
+ | ||
+# Code Explanation: | ||
+- Explain your code here | ||
+ | ||
+# Credits: | ||
+If you found this page useful, you can give thanks by copying and pasting this on the main chat: **`thanks @username1 @username2 @yourusername`** | ||
+ | ||
+> **NOTE:** Please add your username only if you have added any **relevant main contents** to the wiki page. (Please don't remove any existing usernames.) | ||
+ | ||
+## Here you can add any other information that is helpful or related. | ||
+- Right here. | ||
+ | ||
+### Important notes about this template. | ||
+- This template can also be used for regular pages. | ||
+- The author part has been removed. This is a collaboration page, while people can see who contributed by checking the revision, using the code for the credits will also benefits the contributors and your name will be there, so there is no longer any need to add your picture or links. | ||
- If you have suggestions or comments about this template then feel free to contact [@Rafase282 in Gitter](https://gitter.im/Rafase282) |
16
Bonus-SocketIO.md
@@ -1,9 +1,9 @@ | ||
-If you've gotten to the Stock Charting basejump you may have noticed that the bonus criteria is to have your stock list live update across clients. This can be accomplished with SocketIO, but that’s not all SocketIO can do. Remember earlier, I mentioned that when using *$http.post* you had to update your local array with the database's version of the item you were posting? SocketIO keeps a user’s browser environment synced with your database in realtime. This has two practical upshots: | ||
- | ||
-1. You no longer have to manually update your local data with database data; it is all managed automatically | ||
-2. You can push database changes live to users on different machines all at the same time | ||
- | ||
-Even better, if you just include SocketIO when prompted during the yeoman angular-fullstack setup, there is absolutely no work involved to include it. It works out of the box, has a working demo on the **main/** route, and you can learn how to use it yourself by simply looking at how they include it in **main.controller.js** (so I won’t go any further into detail). | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/isLoggedInAsync()) | ||
+If you've gotten to the Stock Charting basejump you may have noticed that the bonus criteria is to have your stock list live update across clients. This can be accomplished with SocketIO, but that’s not all SocketIO can do. Remember earlier, I mentioned that when using *$http.post* you had to update your local array with the database's version of the item you were posting? SocketIO keeps a user’s browser environment synced with your database in realtime. This has two practical upshots: | ||
+ | ||
+1. You no longer have to manually update your local data with database data; it is all managed automatically | ||
+2. You can push database changes live to users on different machines all at the same time | ||
+ | ||
+Even better, if you just include SocketIO when prompted during the yeoman angular-fullstack setup, there is absolutely no work involved to include it. It works out of the box, has a working demo on the **main/** route, and you can learn how to use it yourself by simply looking at how they include it in **main.controller.js** (so I won’t go any further into detail). | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/isLoggedInAsync()) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Epilogue) |
10
Bootstrap.md
@@ -1,5 +1,5 @@ | ||
-A frontend [CSS](https://github.com/bothelpers/kbase/wiki/css) framework. | ||
- | ||
-You can find out more [here](http://getbootstrap.com/) | ||
- | ||
-> related: css, frameworks | ||
+A frontend [CSS](https://github.com/bothelpers/kbase/wiki/css) framework. | ||
+ | ||
+You can find out more [here](http://getbootstrap.com/) | ||
+ | ||
+> related: css, frameworks |
24
Brownie-Points.md
@@ -1,13 +1,13 @@ | ||
-The number beside your picture on Free Code Camp tells you how many Brownie Points you have. | ||
- | ||
-![A user profile picture next to a with Brownie Points score](http://i.imgur.com/SsvbkDH.png) | ||
- | ||
-There are three ways you can get Brownie Points: | ||
- | ||
-1. Complete challenges - you get one point per challenge you complete | ||
-1. Post relevant links on [Camper News](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Camper-News) - you get 1 point for posting a link, and another point for each upvote your link gets | ||
-1. Help other campers in chat - each time you help another camper and they thank you (by typing "thanks @yourname"), you will get a point | ||
- | ||
-> Brownie Points help you look like the kind of person who codes a lot, shares relevant links, and helps people. | ||
- | ||
+The number beside your picture on Free Code Camp tells you how many Brownie Points you have. | ||
+ | ||
+![A user profile picture next to a with Brownie Points score](http://i.imgur.com/SsvbkDH.png) | ||
+ | ||
+There are three ways you can get Brownie Points: | ||
+ | ||
+1. Complete challenges - you get one point per challenge you complete | ||
+1. Post relevant links on [Camper News](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Camper-News) - you get 1 point for posting a link, and another point for each upvote your link gets | ||
+1. Help other campers in chat - each time you help another camper and they thank you (by typing "thanks @yourname"), you will get a point | ||
+ | ||
+> Brownie Points help you look like the kind of person who codes a lot, shares relevant links, and helps people. | ||
+ | ||
*They also add to your [Streak](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/streak/).* |
20
Camper-News.md
@@ -1,11 +1,11 @@ | ||
-Camper News is a link sharing tool, based on popular collaborative filtering systems like Reddit and Hacker News. | ||
- | ||
-![Screenshot of Camper News](https://www.evernote.com/l/AlwvYXoOf89EbYXWEXRfUw-_yHdBwx2jLr8B/image.png) | ||
- | ||
-Camper News is intentionally simple. You can: | ||
- | ||
-1. Browse and search through the camper-submitted links | ||
-1. Upvote links | ||
-1. Submit links of your own | ||
- | ||
+Camper News is a link sharing tool, based on popular collaborative filtering systems like Reddit and Hacker News. | ||
+ | ||
+![Screenshot of Camper News](https://www.evernote.com/l/AlwvYXoOf89EbYXWEXRfUw-_yHdBwx2jLr8B/image.png) | ||
+ | ||
+Camper News is intentionally simple. You can: | ||
+ | ||
+1. Browse and search through the camper-submitted links | ||
+1. Upvote links | ||
+1. Submit links of your own | ||
+ | ||
Our links are ranked in order of "hotness", which is a combination of each link's upvote count, and how recently the link was submitted. |
32
Campsites.md
@@ -1,16 +1,16 @@ | ||
-![Photograph from a Toronto Campsite Coffee-and-Code Session](https://scontent.fphl1-1.fna.fbcdn.net/hphotos-xpf1/v/t1.0-0/p180x540/11053192_10207110849188137_979591694702042102_n.jpg?oh=608f68b3232d80608939091680efc4b9&oe=568AE433) | ||
- | ||
-Free Code Camp Campsites represent a localized experience of our community. These Facebook groups are the place to organize Coffee-and-Code style events, pair program locally in hack sessions, or share news about other coding-related events in your area. | ||
- | ||
-Whether you live in a major metropolitan area, or a small town, we encourage you to join or create your campsite to meet other busy people learning to code. | ||
- | ||
-Here are some helpful links: | ||
- | ||
-[Complete Alphabetical List of Campsites](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/List-of-Free-Code-Camp-city-based-Campsites) | ||
- | ||
-[How to Create a New Campsite for your City](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-create-a-Campsite-for-your-city) | ||
- | ||
-[Jumpstart Your Campsite with Coffee-and-Code](http://blog.freecodecamp.com/2015/09/jump-start-your-local-campsite-with-coffee-and-code.html) | ||
- | ||
-[5 Steps to a Successful Meetup](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/5-Steps-to-organizing-a-successful-Campsite-event.) | ||
- | ||
+![Photograph from a Toronto Campsite Coffee-and-Code Session](https://scontent.fphl1-1.fna.fbcdn.net/hphotos-xpf1/v/t1.0-0/p180x540/11053192_10207110849188137_979591694702042102_n.jpg?oh=608f68b3232d80608939091680efc4b9&oe=568AE433) | ||
+ | ||
+Free Code Camp Campsites represent a localized experience of our community. These Facebook groups are the place to organize Coffee-and-Code style events, pair program locally in hack sessions, or share news about other coding-related events in your area. | ||
+ | ||
+Whether you live in a major metropolitan area, or a small town, we encourage you to join or create your campsite to meet other busy people learning to code. | ||
+ | ||
+Here are some helpful links: | ||
+ | ||
+[Complete Alphabetical List of Campsites](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/List-of-Free-Code-Camp-city-based-Campsites) | ||
+ | ||
+[How to Create a New Campsite for your City](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-create-a-Campsite-for-your-city) | ||
+ | ||
+[Jumpstart Your Campsite with Coffee-and-Code](http://blog.freecodecamp.com/2015/09/jump-start-your-local-campsite-with-coffee-and-code.html) | ||
+ | ||
+[5 Steps to a Successful Meetup](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/5-Steps-to-organizing-a-successful-Campsite-event.) | ||
+ |
26
Clear-Your-Browser's-Local-Storage.md
@@ -1,14 +1,14 @@ | ||
-Removing all your locally stored challenges will solve many problems related to the browser crashing on FreeCodeCamp | ||
- | ||
-In Chrome: | ||
-* On 'freecodecamp.com' open your console | ||
- * Windows: Ctrl + Shift + J | ||
- * Mac OS: Cmd + Opt + J | ||
-* Go to resources tab(chrome). | ||
- * There click on the localStorage link in the nav bar on the right. | ||
-* Delete all the entries on the right side. | ||
-* See if this solves your issue | ||
- | ||
-![](https://cloud.githubusercontent.com/assets/6775919/9448820/911626ee-4a53-11e5-98c9-b2bf4ca50816.png) | ||
- | ||
+Removing all your locally stored challenges will solve many problems related to the browser crashing on FreeCodeCamp | ||
+ | ||
+In Chrome: | ||
+* On 'freecodecamp.com' open your console | ||
+ * Windows: Ctrl + Shift + J | ||
+ * Mac OS: Cmd + Opt + J | ||
+* Go to resources tab(chrome). | ||
+ * There click on the localStorage link in the nav bar on the right. | ||
+* Delete all the entries on the right side. | ||
+* See if this solves your issue | ||
+ | ||
+![](https://cloud.githubusercontent.com/assets/6775919/9448820/911626ee-4a53-11e5-98c9-b2bf4ca50816.png) | ||
+ | ||
Alternatively, if you are having issues with a specific challenge freezing your browser, [find the name of that challenge in local storage and delete just that one](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-clear-specific-values-from-your-browser's-local-storage). |
38
Code-of-Conduct.md
@@ -1,20 +1,20 @@ | ||
-Free Code Camp is friendly place to learn to code. We're committed to keeping it that way. | ||
- | ||
-All campers are required to agree with the following code of conduct. We'll enforce this code. We're expecting cooperation from all campers in ensuring a friendly environment for everybody. | ||
- | ||
-In short: be nice to your fellow campers. | ||
- | ||
-Remember these 3 things and your fellow campers will like you: | ||
-- Compliment your fellow campers when they do good work. Congratulate them when they accomplish something (like completing one of our certifications or getting a job). | ||
-- Critique the work, not the camper doing it. | ||
-- Only argue about something if it's important to the greater discussion. | ||
- | ||
-Free Code Camp should be a harassment-free experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, national origin, or religion (or lack thereof). | ||
- | ||
-We do not tolerate harassment of campers in any form, anywhere on Free Code Camp's online media (Gitter, Twitch, Facebook, etc.) or during pair programming. Harassment includes sexual language and imagery, deliberate intimidation, stalking, unwelcome sexual attention, libel, and any malicious hacking or social engineering. | ||
- | ||
-If a camper engages in harassing behavior, our team will take any action we deem appropriate, up to and including banning them from Free Code Camp. | ||
- | ||
-We want everyone to feel safe and respected. If you are being harassed or notice that someone else is being harassed, say something! Message @quincylarson, @brianamarie and @codenonprofit in Gitter (preferably with a screen shot of the offending language) so we can take fast action. | ||
- | ||
+Free Code Camp is friendly place to learn to code. We're committed to keeping it that way. | ||
+ | ||
+All campers are required to agree with the following code of conduct. We'll enforce this code. We're expecting cooperation from all campers in ensuring a friendly environment for everybody. | ||
+ | ||
+In short: be nice to your fellow campers. | ||
+ | ||
+Remember these 3 things and your fellow campers will like you: | ||
+- Compliment your fellow campers when they do good work. Congratulate them when they accomplish something (like completing one of our certifications or getting a job). | ||
+- Critique the work, not the camper doing it. | ||
+- Only argue about something if it's important to the greater discussion. | ||
+ | ||
+Free Code Camp should be a harassment-free experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, national origin, or religion (or lack thereof). | ||
+ | ||
+We do not tolerate harassment of campers in any form, anywhere on Free Code Camp's online media (Gitter, Twitch, Facebook, etc.) or during pair programming. Harassment includes sexual language and imagery, deliberate intimidation, stalking, unwelcome sexual attention, libel, and any malicious hacking or social engineering. | ||
+ | ||
+If a camper engages in harassing behavior, our team will take any action we deem appropriate, up to and including banning them from Free Code Camp. | ||
+ | ||
+We want everyone to feel safe and respected. If you are being harassed or notice that someone else is being harassed, say something! Message @quincylarson, @brianamarie and @codenonprofit in Gitter (preferably with a screen shot of the offending language) so we can take fast action. | ||
+ | ||
If you have questions about this code of conduct, email us at [team@freecodecamp.com](mailto:team@freecodecamp.com). |
40
Coding-Help.md
@@ -1,21 +1,21 @@ | ||
-# Coding Help | ||
-I started this list while doing bonfires, noticing a few things that were common issues / questions but I think most of them are going to be useful to people coding in general. If you've got some tips to help people code I'd love to hear them. | ||
- | ||
-1. If you don't know where to start, write some pseudocode. Plan out the logic you're trying to implement in your native language before you try to put it into code. | ||
- | ||
-2. Comment your code! Can't stress that one enough, if you get lost or take a break then come back you need to know what your code is trying to do. It will also reinforce what the code means to you, and help other people understand what your code does if you get stuck and ask for help. If you've got a any other tips for campers I'd love to see them! | ||
- | ||
-3. Use the chrome javascript debugger console in conjunction with something like netbeans IDE or sublime text to write your code. Both are free to download. <br /> | ||
-The free code camp window is great but you can get a lot more feedback on your code's behaviour by using chrome's JS debugger and a bunch of **console.log(myVariableGoesHere);** <br /> | ||
-https://developer.chrome.com/devtools/docs/console <br /> | ||
-http://www.sublimetext.com/ <br /> | ||
-https://netbeans.org/downloads/ | ||
- | ||
-4. Posting your code in gitter is as simple as adding a line consisting of only | ||
-> \`\`\` | ||
-> | ||
-> Then your code on the next lines, followed by a final | ||
-> | ||
-> \`\`\` | ||
- | ||
+# Coding Help | ||
+I started this list while doing bonfires, noticing a few things that were common issues / questions but I think most of them are going to be useful to people coding in general. If you've got some tips to help people code I'd love to hear them. | ||
+ | ||
+1. If you don't know where to start, write some pseudocode. Plan out the logic you're trying to implement in your native language before you try to put it into code. | ||
+ | ||
+2. Comment your code! Can't stress that one enough, if you get lost or take a break then come back you need to know what your code is trying to do. It will also reinforce what the code means to you, and help other people understand what your code does if you get stuck and ask for help. If you've got a any other tips for campers I'd love to see them! | ||
+ | ||
+3. Use the chrome javascript debugger console in conjunction with something like netbeans IDE or sublime text to write your code. Both are free to download. <br /> | ||
+The free code camp window is great but you can get a lot more feedback on your code's behaviour by using chrome's JS debugger and a bunch of **console.log(myVariableGoesHere);** <br /> | ||
+https://developer.chrome.com/devtools/docs/console <br /> | ||
+http://www.sublimetext.com/ <br /> | ||
+https://netbeans.org/downloads/ | ||
+ | ||
+4. Posting your code in gitter is as simple as adding a line consisting of only | ||
+> \`\`\` | ||
+> | ||
+> Then your code on the next lines, followed by a final | ||
+> | ||
+> \`\`\` | ||
+ | ||
5. Ask for help in gitter! I can personally relate to staring at a problem for hours, then seeing the solution as soon as I try to explain it to someone, or having someone say something like "typo on line 6" as soon as they see it. |
520
Contributions-Guide---with-Typo-Demo.md
@@ -1,260 +1,260 @@ | ||
- | ||
-# Detailed Guide to Contributions. | ||
-=================================== | ||
- Guide first posted at [Sean Campbell's Blog](https://natacseanc.wordpress.com/2015/09/07/beginners-guide-to-easy-contributions-to-free-code-camp/) | ||
- | ||
-The first 2 steps are *setting up* the environment. | ||
- | ||
-### Step 1: Fork, Clone, Upstream Setup | ||
- | ||
-First - fork the [Free Code Camp repo](https://github.com/FreeCodeCamp/FreeCodeCamp) to your GitHub account. Done by clicking the fork button at the top right of the page. You see a little animated image of the 'forking'. From there move to terminal. Running the commands below will create a copy of the Free Code Camp repo you just forked. | ||
- | ||
-```bash | ||
-git clone https://github.com/[USERNAME]/freecodecamp # put in your [USERNAME] | ||
-cd freecodecamp | ||
-git remote add upstream https://github.com/FreeCodeCamp/FreeCodeCamp | ||
-``` | ||
- | ||
-The first line clones the repo to your local machine; making a directory called `freecodecamp` in the current folder you are in. Then move inside that folder with `cd freecodecamp`. The last line adds the original Free Code Camp repo as a remote upstream. This allows you to pull in the changes that are made to the main project to keep you local copy up to date. This is done by running... | ||
- | ||
-```bash | ||
-git fetch upstream | ||
-``` | ||
- | ||
-If there were changes then run the commands below to merge; if nothing happens then skip these 2 commands. | ||
- | ||
-```bash | ||
-git checkout staging # make sure I am on staging branch | ||
-git merge upstream/staging # merge the changing to my local machine | ||
-``` | ||
- | ||
-Your local `staging` branch is up to date with the [Free Code Camp repo](https://github.com/FreeCodeCamp/FreeCodeCamp) now. | ||
- | ||
-### Step 2: Follow README.md Instructions for more Setup. | ||
- | ||
-This guide stresses importance of reading the [README.md](https://github.com/FreeCodeCamp/FreeCodeCamp#contributing) on contributing. Please have [ESlinter](http://eslint.org/docs/user-guide/integrations.html) running, as the warning are there to help you. | ||
- | ||
-### Prerequisites | ||
- | ||
-- [MongoDB](http://www.mongodb.org/downloads) | ||
-- [Node.js](http://nodejs.org) | ||
-- [ESlinter](http://eslint.org/docs/user-guide/integrations.html) | ||
- | ||
- | ||
-These commands are straight from the FCC directions on the README.md | ||
- | ||
- | ||
-```bash | ||
-# Install NPM dependencies | ||
-npm install | ||
- | ||
-# Install bower globally | ||
-npm install -g bower | ||
- | ||
-# Install Bower dependencies | ||
-bower install | ||
- | ||
-# Install Gulp globally | ||
-npm install -g gulp | ||
- | ||
-# Create a .env file | ||
-touch .env | ||
-``` | ||
- | ||
-What goes in the .env file?? Well first if you do not have a [Mandrill account](https://mandrill.com/signup/?_ga=1.36983655.693747097.1440924471) you will need to set one up. | ||
-Mandrill is an email service that is beyond the scope of this guide. A quick note; this file will not be included when pushing to GitHub as it will be listed in the `.gitignore` file. | ||
- | ||
-#### .env file contents | ||
- | ||
-``` | ||
- | ||
-MONGOHQ_URL='mongodb://localhost:27017/freecodecamp' // do not change | ||
- | ||
-FACEBOOK_ID=stuff | ||
-FACEBOOK_SECRET=stuff | ||
- | ||
-GITHUB_ID=stuff | ||
-GITHUB_SECRET=stuff | ||
- | ||
-GOOGLE_ID=stuff | ||
-GOOGLE_SECRET=stuff | ||
- | ||
-LINKEDIN_ID=stuff | ||
-LINKEDIN_SECRET=stuff | ||
- | ||
-MANDRILL_PASSWORD=stuff // Your mandrill password | ||
-MANDRILL_USER=stuff // Your mandrill username | ||
- | ||
-TRELLO_KEY=stuff | ||
-TRELLO_SECRET=stuff | ||
- | ||
-TWITTER_KEY=stuff | ||
-TWITTER_SECRET=stuff | ||
-TWITTER_TOKEN=stuff | ||
-TWITTER_TOKEN_SECRET=stuff | ||
- | ||
-BLOGGER_KEY=stuff | ||
- | ||
-SESSION_SECRET=secretstuff // any word you like in small case I believe. | ||
-COOKIE_SECRET='this is a secret' | ||
- | ||
-PEER=stuff | ||
-DEBUG=true | ||
- | ||
-``` | ||
- | ||
-### Setup is complete - next - the workflow of contributions | ||
-============================================================= | ||
- | ||
-# Start of issue fixing | ||
- | ||
-### Part 3: Start MongoDB | ||
- | ||
-Open up two terminal windows, one to run the mongodb: | ||
- | ||
-```bash | ||
-mongod | ||
-``` | ||
- | ||
-Then minimize this terminal and move to the other which will be the one to complete the workflow. | ||
- | ||
-```bash | ||
-# run mongodb | ||
-mongo | ||
- | ||
-# switch to the free code camp database | ||
-use freecodecamp | ||
- | ||
-# exit mongo | ||
-press Crtl + d | ||
-``` | ||
-### Step 4: Finding Issue in the Code Base | ||
- | ||
-The issue on GitHub will look something like this. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/issue1.png"><img class="alignnone wp-image-161" src="https://natacseanc.files.wordpress.com/2015/09/issue1.png?w=300" alt="issue" width="456" height="205" /></a> | ||
- | ||
- | ||
-To find out what file the challenge will be in go to the FCC Map to find out which section the challenge is a part of; the example is [Learn how Script Tags and Document Ready Work](http://freecodecamp.com/challenges/waypoint-learn-how-script-tags-and-document-ready-work) and it is a part of the jQuery section. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/section.png"><img class="alignnone size-medium wp-image-164" src="https://natacseanc.files.wordpress.com/2015/09/section.png?w=300" alt="section" width="300" height="262" /></a> | ||
- | ||
-The actual data for each challenge is located in the `seed/challenges/` directory. In this folder there are `.json` files. Each file is named for the section of challenges. So for this demo you need to be in the `jQuery.json` file. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/files.png"><img src="https://natacseanc.files.wordpress.com/2015/09/files.png?w=287" alt="files" width="287" height="300" class="alignnone size-medium wp-image-171" /></a> | ||
- | ||
-The file itself is of an object that has a `challenges` attribute which is a list of challenge objects. These have key/value pairs of the title, description, test, and other info that is needed for the other code to build the actual challenge.<a href="https://natacseanc.files.wordpress.com/2015/09/json1.png"><img class="alignnone size-large wp-image-159" src="https://natacseanc.files.wordpress.com/2015/09/json1.png?w=809" alt="JSON" width="809" height="665" /></a> | ||
- | ||
- | ||
-To fix a simple typo in the test output you should do a search for the challenge then navigate to the `"test":` key to find the error. The test is explained in the next part. Any text wrapped in the `<code>` tags will appear in the red text that you see in the challenge description or test output. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/codetag.png"><img class="alignnone size-full wp-image-140" src="https://natacseanc.files.wordpress.com/2015/09/codetag.png" alt="codeTag" width="384" height="206" /></a> | ||
- | ||
-### Step 5: Making the Change | ||
- | ||
-Go to your terminal and run the command below to make sure that nothing has changed to the main code base | ||
- | ||
-```bash | ||
-git fetch upstream | ||
-``` | ||
- | ||
-If there was a change then merge in like Step 1. Create a branch that explains the change ie `fix/typo-jquery-challenge-test`. Include a brief description of the changes you have made. Include `closes #1337` for each issue that this pull request intends to close. | ||
- | ||
-```bash | ||
-# create and move to branch | ||
-git checkout -b fix/typo-jquery-challange-test | ||
-``` | ||
- | ||
-Open the `jQuery.json` file; the issue that you is that there is parenthesis in the test output that should not be there. Each test has two parts to the `assert()` method. The first is the test(s), the second part which is separated by a comma is the output description. Please note this picture shows after the change has been made. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/test.png"><img class="alignnone size-full wp-image-131" src="https://natacseanc.files.wordpress.com/2015/09/test.png" alt="test" width="809" height="18" /></a> | ||
- | ||
-The test is the `editor.match(/\\.parent\\(\\)\\.css/g)`, where the description section is `'You should use the <code>.parent()</code> function to modify this element.'`. The issue is that in the description section there are actual `(` and `)`. Meaning the code used to be. | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/testbad.png"><img class="alignnone size-full wp-image-130" src="https://natacseanc.files.wordpress.com/2015/09/testbad.png" alt="testbad" width="809" height="17" /></a> | ||
- | ||
-This causes the strange outputs that occur in the tests. By using the right [character code](http://character-code.com/) you will be able to replace the parenthesis and the period. At this point save the file but do **not** stage or commit anything with Git yet; you **will want** to run the app locally and see if the changes worked! | ||
- | ||
-### Step 6: Run Free Code Camp App Locally | ||
- | ||
-Mental check that part 3 was done if not do it now. Then: | ||
- | ||
-```bash | ||
-# Seed database with the challenges | ||
-node seed/ | ||
- | ||
-# start the application | ||
-gulp | ||
-``` | ||
- | ||
-The gulp command will take a second or too then there will be a IP address that I right click and open in my browser. Now I will navigate to that challenge to verify the changes were what I expected. This is the purple local URL: | ||
- | ||
-<a href="https://natacseanc.files.wordpress.com/2015/09/ipadress.png"><img class="alignnone size-full wp-image-137" src="https://natacseanc.files.wordpress.com/2015/09/ipadress.png" alt="ipadress" width="674" height="100" /></a> | ||
- | ||
-### Step 7: Creating Pull Request | ||
- | ||
-After making changes and verification of you work run: | ||
- | ||
-```bash | ||
-# check status for piece of mind to see unstaged changes | ||
-git status | ||
- | ||
-#check if anything changed in upstream | ||
-git fetch upstream | ||
-# ASSUMING no changes I can proceed. | ||
-# if there are changes see Appendix A about stash. | ||
-# DO NOT continue if there are changes as you may create conflicts | ||
- | ||
-# stage the file | ||
-git add [FILENAME] | ||
- | ||
-# commit changes | ||
-git commit | ||
-``` | ||
- | ||
-You can have [Git open up Sublime when you want to commit a message.](https://help.github.com/articles/associating-text-editors-with-git/). This allows and encourages meaningful commit messages. Make a title on the first line then go into more detail on new lines. So for this demo the message would be something like: | ||
- | ||
-``` | ||
-fix typo on [CHALLENGE] | ||
- | ||
-there were unnecessary parenthesis in the test outputs | ||
-closes #1337 | ||
-``` | ||
- | ||
-You are able to auto [close the issue when the PR is merged into the code base](https://help.github.com/articles/closing-issues-via-commit-messages/). Save and close the commit message file; brings you back to the terminal | ||
- | ||
-```bash | ||
-git push -u origin fix/typo-jquery-test | ||
-# where the part after origin is what ever you called the local branch | ||
-``` | ||
- | ||
-Now the changes are on both you local machine and you GitHub account. Opening up a browser you can navigate to the forked copy on your GitHub account. There will be a green button just above the listing of files on the right that read Compare & Pull Request. | ||
- | ||
-<img class="alignnone size-full wp-image-139" src="https://natacseanc.files.wordpress.com/2015/09/compare.png" alt="compare" width="500" height="203" /> | ||
- | ||
-Clicking this takes you to the screen where you can review the changes once again and finalize the commit message. Then wait for the code to be merged in or possibly some tips on how to improve the changes. | ||
- | ||
-<img class="alignnone size-full wp-image-132" src="https://natacseanc.files.wordpress.com/2015/09/pr.png" alt="pr" width="600" height="489" /> | ||
- | ||
-Guide written by: [@natac13](https://github.com/natac13) on Twitter [@natac1311](https://twitter.com/?lang=en) | ||
- | ||
-### Appendix A: Stash | ||
- | ||
-Short explanation on what happens if during the time you were making changes there were some merged into the [`upstream`](https://github.com/FreeCodeCamp/FreeCodeCamp). Meaning your local copy is not up to date. This puts you right **before** adding any files to be *staged* or *committed*. So: | ||
- | ||
-```bash | ||
-# check changes to upstream | ||
-git fetch upstream | ||
-# changes have happened | ||
- | ||
-# stash your changes | ||
-git stash | ||
- | ||
-# merge upstream into the working branch | ||
-git merge upstream/staging | ||
- | ||
-# reapply you changes | ||
-git stash apply | ||
-``` | ||
- | ||
-You are now back up to date with your changes ready to be staged and committed. [Git docs on stash](https://git-scm.com/book/en/v1/Git-Tools-Stashing). | ||
+ | ||
+# Detailed Guide to Contributions. | ||
+=================================== | ||
+ Guide first posted at [Sean Campbell's Blog](https://natacseanc.wordpress.com/2015/09/07/beginners-guide-to-easy-contributions-to-free-code-camp/) | ||
+ | ||
+The first 2 steps are *setting up* the environment. | ||
+ | ||
+### Step 1: Fork, Clone, Upstream Setup | ||
+ | ||
+First - fork the [Free Code Camp repo](https://github.com/FreeCodeCamp/FreeCodeCamp) to your GitHub account. Done by clicking the fork button at the top right of the page. You see a little animated image of the 'forking'. From there move to terminal. Running the commands below will create a copy of the Free Code Camp repo you just forked. | ||
+ | ||
+```bash | ||
+git clone https://github.com/[USERNAME]/freecodecamp # put in your [USERNAME] | ||
+cd freecodecamp | ||
+git remote add upstream https://github.com/FreeCodeCamp/FreeCodeCamp | ||
+``` | ||
+ | ||
+The first line clones the repo to your local machine; making a directory called `freecodecamp` in the current folder you are in. Then move inside that folder with `cd freecodecamp`. The last line adds the original Free Code Camp repo as a remote upstream. This allows you to pull in the changes that are made to the main project to keep you local copy up to date. This is done by running... | ||
+ | ||
+```bash | ||
+git fetch upstream | ||
+``` | ||
+ | ||
+If there were changes then run the commands below to merge; if nothing happens then skip these 2 commands. | ||
+ | ||
+```bash | ||
+git checkout staging # make sure I am on staging branch | ||
+git merge upstream/staging # merge the changing to my local machine | ||
+``` | ||
+ | ||
+Your local `staging` branch is up to date with the [Free Code Camp repo](https://github.com/FreeCodeCamp/FreeCodeCamp) now. | ||
+ | ||
+### Step 2: Follow README.md Instructions for more Setup. | ||
+ | ||
+This guide stresses importance of reading the [README.md](https://github.com/FreeCodeCamp/FreeCodeCamp#contributing) on contributing. Please have [ESlinter](http://eslint.org/docs/user-guide/integrations.html) running, as the warning are there to help you. | ||
+ | ||
+### Prerequisites | ||
+ | ||
+- [MongoDB](http://www.mongodb.org/downloads) | ||
+- [Node.js](http://nodejs.org) | ||
+- [ESlinter](http://eslint.org/docs/user-guide/integrations.html) | ||
+ | ||
+ | ||
+These commands are straight from the FCC directions on the README.md | ||
+ | ||
+ | ||
+```bash | ||
+# Install NPM dependencies | ||
+npm install | ||
+ | ||
+# Install bower globally | ||
+npm install -g bower | ||
+ | ||
+# Install Bower dependencies | ||
+bower install | ||
+ | ||
+# Install Gulp globally | ||
+npm install -g gulp | ||
+ | ||
+# Create a .env file | ||
+touch .env | ||
+``` | ||
+ | ||
+What goes in the .env file?? Well first if you do not have a [Mandrill account](https://mandrill.com/signup/?_ga=1.36983655.693747097.1440924471) you will need to set one up. | ||
+Mandrill is an email service that is beyond the scope of this guide. A quick note; this file will not be included when pushing to GitHub as it will be listed in the `.gitignore` file. | ||
+ | ||
+#### .env file contents | ||
+ | ||
+``` | ||
+ | ||
+MONGOHQ_URL='mongodb://localhost:27017/freecodecamp' // do not change | ||
+ | ||
+FACEBOOK_ID=stuff | ||
+FACEBOOK_SECRET=stuff | ||
+ | ||
+GITHUB_ID=stuff | ||
+GITHUB_SECRET=stuff | ||
+ | ||
+GOOGLE_ID=stuff | ||
+GOOGLE_SECRET=stuff | ||
+ | ||
+LINKEDIN_ID=stuff | ||
+LINKEDIN_SECRET=stuff | ||
+ | ||
+MANDRILL_PASSWORD=stuff // Your mandrill password | ||
+MANDRILL_USER=stuff // Your mandrill username | ||
+ | ||
+TRELLO_KEY=stuff | ||
+TRELLO_SECRET=stuff | ||
+ | ||
+TWITTER_KEY=stuff | ||
+TWITTER_SECRET=stuff | ||
+TWITTER_TOKEN=stuff | ||
+TWITTER_TOKEN_SECRET=stuff | ||
+ | ||
+BLOGGER_KEY=stuff | ||
+ | ||
+SESSION_SECRET=secretstuff // any word you like in small case I believe. | ||
+COOKIE_SECRET='this is a secret' | ||
+ | ||
+PEER=stuff | ||
+DEBUG=true | ||
+ | ||
+``` | ||
+ | ||
+### Setup is complete - next - the workflow of contributions | ||
+============================================================= | ||
+ | ||
+# Start of issue fixing | ||
+ | ||
+### Part 3: Start MongoDB | ||
+ | ||
+Open up two terminal windows, one to run the mongodb: | ||
+ | ||
+```bash | ||
+mongod | ||
+``` | ||
+ | ||
+Then minimize this terminal and move to the other which will be the one to complete the workflow. | ||
+ | ||
+```bash | ||
+# run mongodb | ||
+mongo | ||
+ | ||
+# switch to the free code camp database | ||
+use freecodecamp | ||
+ | ||
+# exit mongo | ||
+press Crtl + d | ||
+``` | ||
+### Step 4: Finding Issue in the Code Base | ||
+ | ||
+The issue on GitHub will look something like this. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/issue1.png"><img class="alignnone wp-image-161" src="https://natacseanc.files.wordpress.com/2015/09/issue1.png?w=300" alt="issue" width="456" height="205" /></a> | ||
+ | ||
+ | ||
+To find out what file the challenge will be in go to the FCC Map to find out which section the challenge is a part of; the example is [Learn how Script Tags and Document Ready Work](http://freecodecamp.com/challenges/waypoint-learn-how-script-tags-and-document-ready-work) and it is a part of the jQuery section. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/section.png"><img class="alignnone size-medium wp-image-164" src="https://natacseanc.files.wordpress.com/2015/09/section.png?w=300" alt="section" width="300" height="262" /></a> | ||
+ | ||
+The actual data for each challenge is located in the `seed/challenges/` directory. In this folder there are `.json` files. Each file is named for the section of challenges. So for this demo you need to be in the `jQuery.json` file. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/files.png"><img src="https://natacseanc.files.wordpress.com/2015/09/files.png?w=287" alt="files" width="287" height="300" class="alignnone size-medium wp-image-171" /></a> | ||
+ | ||
+The file itself is of an object that has a `challenges` attribute which is a list of challenge objects. These have key/value pairs of the title, description, test, and other info that is needed for the other code to build the actual challenge.<a href="https://natacseanc.files.wordpress.com/2015/09/json1.png"><img class="alignnone size-large wp-image-159" src="https://natacseanc.files.wordpress.com/2015/09/json1.png?w=809" alt="JSON" width="809" height="665" /></a> | ||
+ | ||
+ | ||
+To fix a simple typo in the test output you should do a search for the challenge then navigate to the `"test":` key to find the error. The test is explained in the next part. Any text wrapped in the `<code>` tags will appear in the red text that you see in the challenge description or test output. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/codetag.png"><img class="alignnone size-full wp-image-140" src="https://natacseanc.files.wordpress.com/2015/09/codetag.png" alt="codeTag" width="384" height="206" /></a> | ||
+ | ||
+### Step 5: Making the Change | ||
+ | ||
+Go to your terminal and run the command below to make sure that nothing has changed to the main code base | ||
+ | ||
+```bash | ||
+git fetch upstream | ||
+``` | ||
+ | ||
+If there was a change then merge in like Step 1. Create a branch that explains the change ie `fix/typo-jquery-challenge-test`. Include a brief description of the changes you have made. Include `closes #1337` for each issue that this pull request intends to close. | ||
+ | ||
+```bash | ||
+# create and move to branch | ||
+git checkout -b fix/typo-jquery-challange-test | ||
+``` | ||
+ | ||
+Open the `jQuery.json` file; the issue that you is that there is parenthesis in the test output that should not be there. Each test has two parts to the `assert()` method. The first is the test(s), the second part which is separated by a comma is the output description. Please note this picture shows after the change has been made. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/test.png"><img class="alignnone size-full wp-image-131" src="https://natacseanc.files.wordpress.com/2015/09/test.png" alt="test" width="809" height="18" /></a> | ||
+ | ||
+The test is the `editor.match(/\\.parent\\(\\)\\.css/g)`, where the description section is `'You should use the <code>.parent()</code> function to modify this element.'`. The issue is that in the description section there are actual `(` and `)`. Meaning the code used to be. | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/testbad.png"><img class="alignnone size-full wp-image-130" src="https://natacseanc.files.wordpress.com/2015/09/testbad.png" alt="testbad" width="809" height="17" /></a> | ||
+ | ||
+This causes the strange outputs that occur in the tests. By using the right [character code](http://character-code.com/) you will be able to replace the parenthesis and the period. At this point save the file but do **not** stage or commit anything with Git yet; you **will want** to run the app locally and see if the changes worked! | ||
+ | ||
+### Step 6: Run Free Code Camp App Locally | ||
+ | ||
+Mental check that part 3 was done if not do it now. Then: | ||
+ | ||
+```bash | ||
+# Seed database with the challenges | ||
+node seed/ | ||
+ | ||
+# start the application | ||
+gulp | ||
+``` | ||
+ | ||
+The gulp command will take a second or too then there will be a IP address that I right click and open in my browser. Now I will navigate to that challenge to verify the changes were what I expected. This is the purple local URL: | ||
+ | ||
+<a href="https://natacseanc.files.wordpress.com/2015/09/ipadress.png"><img class="alignnone size-full wp-image-137" src="https://natacseanc.files.wordpress.com/2015/09/ipadress.png" alt="ipadress" width="674" height="100" /></a> | ||
+ | ||
+### Step 7: Creating Pull Request | ||
+ | ||
+After making changes and verification of you work run: | ||
+ | ||
+```bash | ||
+# check status for piece of mind to see unstaged changes | ||
+git status | ||
+ | ||
+#check if anything changed in upstream | ||
+git fetch upstream | ||
+# ASSUMING no changes I can proceed. | ||
+# if there are changes see Appendix A about stash. | ||
+# DO NOT continue if there are changes as you may create conflicts | ||
+ | ||
+# stage the file | ||
+git add [FILENAME] | ||
+ | ||
+# commit changes | ||
+git commit | ||
+``` | ||
+ | ||
+You can have [Git open up Sublime when you want to commit a message.](https://help.github.com/articles/associating-text-editors-with-git/). This allows and encourages meaningful commit messages. Make a title on the first line then go into more detail on new lines. So for this demo the message would be something like: | ||
+ | ||
+``` | ||
+fix typo on [CHALLENGE] | ||
+ | ||
+there were unnecessary parenthesis in the test outputs | ||
+closes #1337 | ||
+``` | ||
+ | ||
+You are able to auto [close the issue when the PR is merged into the code base](https://help.github.com/articles/closing-issues-via-commit-messages/). Save and close the commit message file; brings you back to the terminal | ||
+ | ||
+```bash | ||
+git push -u origin fix/typo-jquery-test | ||
+# where the part after origin is what ever you called the local branch | ||
+``` | ||
+ | ||
+Now the changes are on both you local machine and you GitHub account. Opening up a browser you can navigate to the forked copy on your GitHub account. There will be a green button just above the listing of files on the right that read Compare & Pull Request. | ||
+ | ||
+<img class="alignnone size-full wp-image-139" src="https://natacseanc.files.wordpress.com/2015/09/compare.png" alt="compare" width="500" height="203" /> | ||
+ | ||
+Clicking this takes you to the screen where you can review the changes once again and finalize the commit message. Then wait for the code to be merged in or possibly some tips on how to improve the changes. | ||
+ | ||
+<img class="alignnone size-full wp-image-132" src="https://natacseanc.files.wordpress.com/2015/09/pr.png" alt="pr" width="600" height="489" /> | ||
+ | ||
+Guide written by: [@natac13](https://github.com/natac13) on Twitter [@natac1311](https://twitter.com/?lang=en) | ||
+ | ||
+### Appendix A: Stash | ||
+ | ||
+Short explanation on what happens if during the time you were making changes there were some merged into the [`upstream`](https://github.com/FreeCodeCamp/FreeCodeCamp). Meaning your local copy is not up to date. This puts you right **before** adding any files to be *staged* or *committed*. So: | ||
+ | ||
+```bash | ||
+# check changes to upstream | ||
+git fetch upstream | ||
+# changes have happened | ||
+ | ||
+# stash your changes | ||
+git stash | ||
+ | ||
+# merge upstream into the working branch | ||
+git merge upstream/staging | ||
+ | ||
+# reapply you changes | ||
+git stash apply | ||
+``` | ||
+ | ||
+You are now back up to date with your changes ready to be staged and committed. [Git docs on stash](https://git-scm.com/book/en/v1/Git-Tools-Stashing). |
12
Create,-Upload-and-Link-Animated-GIF-Image.md
@@ -1,7 +1,7 @@ | ||
-1. Download [LICEcap](http://www.cockos.com/licecap/) and install. | ||
-2. Open and start recording to create animated GIF. | ||
-3. Upload the `.gif` file in [EZGIF.com](http://ezgif.com/optimize). | ||
- - Crop, Resize and Optimize as many times or as required. | ||
-4. Download animated GIF. | ||
-5. Upload image to [imgur.com](http://imgur.com). | ||
+1. Download [LICEcap](http://www.cockos.com/licecap/) and install. | ||
+2. Open and start recording to create animated GIF. | ||
+3. Upload the `.gif` file in [EZGIF.com](http://ezgif.com/optimize). | ||
+ - Crop, Resize and Optimize as many times or as required. | ||
+4. Download animated GIF. | ||
+5. Upload image to [imgur.com](http://imgur.com). | ||
6. Link image using `![image title](http://i.imgur.com/RqgGcf5.gif)`. |
26
Creating-a-New-Github-Issue.md
@@ -1,14 +1,14 @@ | ||
-Before submitting an issue try [Searching for Your Issue on Github](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Searching-for-Your-Issue-on-Github) | ||
- | ||
-Crafting a good issue will make it much easier for the dev team to replicate and resolve your problem. Follow these steps to do it right: | ||
- | ||
-1. Go to FreeCodeCamp's [Github Issues](https://github.com/FreeCodeCamp/FreeCodeCamp/issues) page and click on `New Issue`. | ||
-* **Have a useful title** | ||
- * Write a meaningful title that describes the issue. Some good examples are `Logging in from the News and Field Guide pages doesn't redirect properly (using e-mail)` and `Typo: "for" instead of "while" loop`; bad examples include `A bug, HELP!!!11` and `I found this bug in a waypoint`. | ||
- * Keep the title relatively short, the description is for further information. One example is to shorten long waypoint names, so instead of writing `Test case bug in 'Waypoint: Check Radio Buttons and Checkboxes by Default'`, you might want to write `Test case bug in 'Radio Buttons' waypoint`. | ||
-* In the body, **provide a link** to the page on which you encountered this issue. | ||
-* **Describe the problem** and **provide steps** so that a developer can try to replicate the issue. Include your operating system and browser version. | ||
- * When referencing other issues or pull requests, simply write #issue/pr-number. | ||
-* Paste in any relevant code using proper [Code Formatting](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/code-formatting) | ||
-* **Take a screenshot** of the issue and include it in the post. | ||
+Before submitting an issue try [Searching for Your Issue on Github](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Searching-for-Your-Issue-on-Github) | ||
+ | ||
+Crafting a good issue will make it much easier for the dev team to replicate and resolve your problem. Follow these steps to do it right: | ||
+ | ||
+1. Go to FreeCodeCamp's [Github Issues](https://github.com/FreeCodeCamp/FreeCodeCamp/issues) page and click on `New Issue`. | ||
+* **Have a useful title** | ||
+ * Write a meaningful title that describes the issue. Some good examples are `Logging in from the News and Field Guide pages doesn't redirect properly (using e-mail)` and `Typo: "for" instead of "while" loop`; bad examples include `A bug, HELP!!!11` and `I found this bug in a waypoint`. | ||
+ * Keep the title relatively short, the description is for further information. One example is to shorten long waypoint names, so instead of writing `Test case bug in 'Waypoint: Check Radio Buttons and Checkboxes by Default'`, you might want to write `Test case bug in 'Radio Buttons' waypoint`. | ||
+* In the body, **provide a link** to the page on which you encountered this issue. | ||
+* **Describe the problem** and **provide steps** so that a developer can try to replicate the issue. Include your operating system and browser version. | ||
+ * When referencing other issues or pull requests, simply write #issue/pr-number. | ||
+* Paste in any relevant code using proper [Code Formatting](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/code-formatting) | ||
+* **Take a screenshot** of the issue and include it in the post. | ||
* Click `Submit New Issue` and you are done! You will be automatically subscribed to notifications for any updates or future comments. |
8
Creating-a-new-API-endpoint.md
@@ -1,5 +1,5 @@ | ||
- >> yo angular-fullstack:endpoint whatsit | ||
- Using this line, you get Yeoman to automatically generate another API endpoint and new kind of collection for your database. Now we have *things* as well as *whatsits*! Feel free to open up **/server/api/whatsit/whatsit.model.js** and define your whatsit however you like. | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Backend-file-structure) | ||
+ >> yo angular-fullstack:endpoint whatsit | ||
+ Using this line, you get Yeoman to automatically generate another API endpoint and new kind of collection for your database. Now we have *things* as well as *whatsits*! Feel free to open up **/server/api/whatsit/whatsit.model.js** and define your whatsit however you like. | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Backend-file-structure) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Fixing-exports.update) |
22
Creating-a-new-directive.md
@@ -1,12 +1,12 @@ | ||
-Do you remember custom directives from the shaping up with angular course? You can also make a custom directive! | ||
- | ||
- >> yo angular-fullstack:directive newdirective | ||
- | ||
-And if you need an html template for your custom directive (maybe you’re just making a directive to clean up your HTML code), tell it to make an html file when it prompts you to and you'll be able to include the contents of that template anywhere in your app with: | ||
- | ||
-~~~html | ||
-<newdirective></newdirective> | ||
-~~~ | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-route) | ||
+Do you remember custom directives from the shaping up with angular course? You can also make a custom directive! | ||
+ | ||
+ >> yo angular-fullstack:directive newdirective | ||
+ | ||
+And if you need an html template for your custom directive (maybe you’re just making a directive to clean up your HTML code), tell it to make an html file when it prompts you to and you'll be able to include the contents of that template anywhere in your app with: | ||
+ | ||
+~~~html | ||
+<newdirective></newdirective> | ||
+~~~ | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-route) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Grunt) |
18
Creating-a-new-route.md
@@ -1,10 +1,10 @@ | ||
- >> yo angular-fullstack:route newpage | ||
- Typing the above into your command-line will generate a **newpage/** route for your app! It automatically generates all the necessary files within your **/client/app/newpage** folder, like your **/client/app/main** folder, with a **newpage.controller.js**, **newpage.controller.spec.js**, **newpage.js**, and **newpage.html**. These all pretty much behave like the ones in the **main/** route. If you’re accessing the database in your newpage controller, you’ll want to add *$http* to the list of dependencies in **newpage.controller.js** the same way it’s included in **main.controller.js**: | ||
- | ||
-~~~javascript | ||
-angular.module('myApp') | ||
- .controller('MainCtrl', function ($scope, $http) { ... | ||
-~~~ | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Frontend-file-structure) | ||
+ >> yo angular-fullstack:route newpage | ||
+ Typing the above into your command-line will generate a **newpage/** route for your app! It automatically generates all the necessary files within your **/client/app/newpage** folder, like your **/client/app/main** folder, with a **newpage.controller.js**, **newpage.controller.spec.js**, **newpage.js**, and **newpage.html**. These all pretty much behave like the ones in the **main/** route. If you’re accessing the database in your newpage controller, you’ll want to add *$http* to the list of dependencies in **newpage.controller.js** the same way it’s included in **main.controller.js**: | ||
+ | ||
+~~~javascript | ||
+angular.module('myApp') | ||
+ .controller('MainCtrl', function ($scope, $http) { ... | ||
+~~~ | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Frontend-file-structure) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-directive) |
16
Develop-BaseJump-locally-and-run-on-c9.io.md
@@ -1,8 +1,8 @@ | ||
-If you like me develop basejump locally and want it run on c9, this may help you. | ||
- | ||
-1. push your project to github | ||
-2. create a new workspace in c9 and set 'Clone from Git or Mercurial URL (optional)' with your github repository URL. After submit your create page, c9 will clone your project for you. | ||
-3. run `echo "export NODE_PATH=$NODE_PATH:/home/ubuntu/.nvm/v0.10.35/lib/node_modules" >> ~/.bashrc && source ~/.bashrc` in your c9 terminal window | ||
-4. run `bower install && sudo npm install` | ||
-5. run `mkdir data && echo 'mongod --bind_ip=$IP --dbpath=data --nojournal --rest "$@"' > mongod && chmod a+x mongod && ./mongod` | ||
-6. run `grunt serve` in another terminal window | ||
+If you like me develop basejump locally and want it run on c9, this may help you. | ||
+ | ||
+1. push your project to github | ||
+2. create a new workspace in c9 and set 'Clone from Git or Mercurial URL (optional)' with your github repository URL. After submit your create page, c9 will clone your project for you. | ||
+3. run `echo "export NODE_PATH=$NODE_PATH:/home/ubuntu/.nvm/v0.10.35/lib/node_modules" >> ~/.bashrc && source ~/.bashrc` in your c9 terminal window | ||
+4. run `bower install && sudo npm install` | ||
+5. run `mkdir data && echo 'mongod --bind_ip=$IP --dbpath=data --nojournal --rest "$@"' > mongod && chmod a+x mongod && ./mongod` | ||
+6. run `grunt serve` in another terminal window |
58
Dynamic-URLs-using-$routeParams.md
@@ -1,30 +1,30 @@ | ||
-What if you have a lot of users posting *things* to your website? Maybe your users want to have a profile, or a wall, of the *things* they’ve posted, and they want to be able to share it with their friends with a url? You can do that, no biggie! | ||
- | ||
-Let’s say you used | ||
- | ||
- >> yo angular-fullstack:route wall | ||
- | ||
-to generate a <a href="#">http://myapp.wherever.com/wall/</a> route for your users. You want a link to <a href="#">http://myapp.wherever.com/wall/someUsername</a> to show a specific user’s *things*. | ||
-Browse to **/client/app/wall/wall.js** and notice that it detects what URL the user is requesting before acting on it: | ||
- | ||
-~~~javascript | ||
-$routeProvider.when('/wall', … | ||
-~~~ | ||
-You can customize that path to catch when a user is trying to see a profile associated with a specific username like so: | ||
- | ||
-~~~javascript | ||
-$routeProvider.when('/wall/:username', … | ||
-~~~ | ||
-The colon before "username" indicates that this is a variable, which is then passed to the *$routeParams* module. In **wall.controller.js**, include *$routeParams*: | ||
- | ||
-~~~javascript | ||
-.controller('WallCtrl', function ($scope, $routeParams) { … | ||
-~~~ | ||
-Then later on in **wall.controller.js**, you can see what username was requested in the URL by referring to the variable generated by *$routeProvider* using something like | ||
- | ||
-~~~javascript | ||
-var wallOwner = $routeParams.username; | ||
-~~~ | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Quick-tip:-keep-data-in-sync) | ||
+What if you have a lot of users posting *things* to your website? Maybe your users want to have a profile, or a wall, of the *things* they’ve posted, and they want to be able to share it with their friends with a url? You can do that, no biggie! | ||
+ | ||
+Let’s say you used | ||
+ | ||
+ >> yo angular-fullstack:route wall | ||
+ | ||
+to generate a <a href="#">http://myapp.wherever.com/wall/</a> route for your users. You want a link to <a href="#">http://myapp.wherever.com/wall/someUsername</a> to show a specific user’s *things*. | ||
+Browse to **/client/app/wall/wall.js** and notice that it detects what URL the user is requesting before acting on it: | ||
+ | ||
+~~~javascript | ||
+$routeProvider.when('/wall', … | ||
+~~~ | ||
+You can customize that path to catch when a user is trying to see a profile associated with a specific username like so: | ||
+ | ||
+~~~javascript | ||
+$routeProvider.when('/wall/:username', … | ||
+~~~ | ||
+The colon before "username" indicates that this is a variable, which is then passed to the *$routeParams* module. In **wall.controller.js**, include *$routeParams*: | ||
+ | ||
+~~~javascript | ||
+.controller('WallCtrl', function ($scope, $routeParams) { … | ||
+~~~ | ||
+Then later on in **wall.controller.js**, you can see what username was requested in the URL by referring to the variable generated by *$routeProvider* using something like | ||
+ | ||
+~~~javascript | ||
+var wallOwner = $routeParams.username; | ||
+~~~ | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Quick-tip:-keep-data-in-sync) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/More-useful-APIs) |
4
Edit-or-Delete-message.md
@@ -1,3 +1,3 @@ | ||
-> Editing or Deleting a previous message within 10 mins. of posting | ||
- | ||
+> Editing or Deleting a previous message within 10 mins. of posting | ||
+ | ||
![How to delete message](http://i.imgur.com/gDivlLJ.gif) |
24
Epilogue.md
@@ -1,13 +1,13 @@ | ||
-If you have any issues not covered in this guide: | ||
- | ||
-1. google google google google duckduckgo | ||
-2. bug @freecodecamp and me (@clnhll) on twitter | ||
-3. did you miss a semicolon? a comma? | ||
-4. make a big loud stink in the freecodecamp help gitter. | ||
- | ||
-If you notice any inaccuracies or bad coding practices in this guide, please let me know ASAP! | ||
- | ||
-I believe in you! | ||
--[clnhll](https://github.com/clnhll) | ||
- | ||
+If you have any issues not covered in this guide: | ||
+ | ||
+1. google google google google duckduckgo | ||
+2. bug @freecodecamp and me (@clnhll) on twitter | ||
+3. did you miss a semicolon? a comma? | ||
+4. make a big loud stink in the freecodecamp help gitter. | ||
+ | ||
+If you notice any inaccuracies or bad coding practices in this guide, please let me know ASAP! | ||
+ | ||
+I believe in you! | ||
+-[clnhll](https://github.com/clnhll) | ||
+ | ||
[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Bonus:-SocketIO) |
26
Fixing-exports.update.md
@@ -1,14 +1,14 @@ | ||
-As it turns out, in **thing.controller.js** as well as in any other endpoints you may generate, the *exports.update* function that is called when you make an *$http.put* call from your frontend to modify an existing database object is broken. This is a <a href="https://github.com/DaftMonk/generator-angular-fullstack/issues/310">known issue</a>, and can be fixed by changing the following line: | ||
- | ||
-~~~javascript | ||
-// Updates an existing thing in the DB. | ||
-exports.update = function(req, res) { | ||
-... | ||
- var updated = _.extend(thing, req.body); | ||
- // change _.merge to _.extend | ||
-... | ||
- }; | ||
-~~~ | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-API-endpoint) | ||
+As it turns out, in **thing.controller.js** as well as in any other endpoints you may generate, the *exports.update* function that is called when you make an *$http.put* call from your frontend to modify an existing database object is broken. This is a <a href="https://github.com/DaftMonk/generator-angular-fullstack/issues/310">known issue</a>, and can be fixed by changing the following line: | ||
+ | ||
+~~~javascript | ||
+// Updates an existing thing in the DB. | ||
+exports.update = function(req, res) { | ||
+... | ||
+ var updated = _.extend(thing, req.body); | ||
+ // change _.merge to _.extend | ||
+... | ||
+ }; | ||
+~~~ | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-API-endpoint) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Accessing-the-database-from-your-frontend) |
16
For-loops-Explained.md
@@ -1,8 +1,8 @@ | ||
-## For Loops | ||
- | ||
-The for statement creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement or a set of statements executed in the loop. | ||
- | ||
->Yeah that didn't make too much sense to me. Let's simplify this. | ||
- | ||
-### Why we need for loops? | ||
- | ||
+## For Loops | ||
+ | ||
+The for statement creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement or a set of statements executed in the loop. | ||
+ | ||
+>Yeah that didn't make too much sense to me. Let's simplify this. | ||
+ | ||
+### Why we need for loops? | ||
+ |
104
Free-Code-Camp's-Privacy-Policy.md
@@ -1,53 +1,53 @@ | ||
-Free Code Camp is committed to respecting the privacy of visitors to our web sites and web applications. The guidelines below explain how we protect the privacy of visitors to FreeCodeCamp.com and its features. | ||
- | ||
-### Personally Identifiable Information | ||
- | ||
-Free Code Camp protects the identity of visitors to FreeCodeCamp.com by limiting the collection of personally identifiable information. | ||
- | ||
-Free Code Camp does not knowingly collect or solicit personally identifiable information from or about children under 13, except as permitted by law. If we discover we have received any information from a child under 13 in violation of this policy, we will delete that information immediately. If you believe Free Code Camp has any information from or about anyone under 13, please email us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
- | ||
-All personally identifiable information you provide to us is used by Free Code Camp and its team to process and manage your account, analyze the demographic of our users, or to deliver services through the site. | ||
- | ||
-If you choose to provide personally identifiable information to us, you may receive occasional emails from us that are relevant to Free Code Camp, getting a job, or learning to code in general. | ||
-Free Code Camp may also use other third-party providers to facilitate the delivery of the services described above, and these third-party providers may be supplied with or have access to personally identifiable information for the sole purpose of providing these services, to you on behalf of Free Code Camp. | ||
- | ||
-Free Code Camp may also disclose personally identifiable information in special legal circumstances. For instance, such information may be used where it is necessary to protect our copyright or intellectual property rights, or if the law requires us to do so. | ||
- | ||
-### Anonymous Information | ||
-Anonymous aggregated data may be provided to other organizations we associate with for statistical purposes. For example, we may report to an organization that a certain percentage of our site's visitors are adults between the ages of 25 and 35. | ||
- | ||
-### Cookies and Beacons—Use by Free Code Camp; Opting Out | ||
-We use cookies and software logs to monitor the use of FreeCodeCamp.com and to gather non-personal information about visitors to the site. Cookies are small files that Free Code Camp transfers to the hard drives of visitors for record-keeping purposes. These monitoring systems allow us to track general information about our visitors, such as the type of browsers (for example, Firefox or Internet Explorer), the operating systems (for instance, Windows or Macintosh), or the Internet providers (for instance, Comcast) they use. This information is used for statistical and market research purposes to tailor content to usage patterns and to provide services requested by our customers. To delete these cookies, please see your browser's privacy settings. | ||
- | ||
-A beacon is an electronic file object (typically a transparent image) placed in the code of a Web page. We use third party beacons to monitor the traffic patterns of visitors from one Free Code Camp.com page to another and to improve site performance. | ||
-None of the information we gather in this way can be used to identify any individual who visits our site. | ||
- | ||
-### Security | ||
- | ||
-Any personally identifiable information collected through this site is stored on limited-access servers. We will maintain safeguards to protect these servers and the information they store. | ||
- | ||
-### Surveys | ||
-We may occasionally conduct on-line surveys. All surveys are voluntary and you may decline to participate. | ||
- | ||
-### Copyright | ||
-All of the content on FreeCodeCamp.com is copyrighted by Free Code Camp. If you'd like to redistribute it beyond simply sharing it through social media, please contact us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
- | ||
-### Contacting Us | ||
-If you have questions about Free Code Camp, or to correct, update, or remove personally identifiable information, please email us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
- | ||
-### Links to Other Web sites | ||
-Free Code Camp's sites each contain links to other Web sites. Free Code Camp is not responsible for the privacy practices or content of these third-party Web sites. We urge all FreeCodeCamp.com visitors to follow safe Internet practices: Do not supply Personally Identifiable Information to these Web sites unless you have verified their security and privacy policies. | ||
- | ||
-### Data Retention | ||
-We retain your information for as long as necessary to permit us to use it for the purposes that we have communicated to you and comply with applicable law or regulations. | ||
- | ||
-### Business Transfers | ||
-As we continue to develop our business, we might sell or buy subsidiaries, or business units. In such transactions, customer information generally is one of the transferred business assets but remains subject to the promises made in any pre-existing Privacy Policy (unless, of course, the customer consents otherwise). Also, in the unlikely event that Free Code Camp, or substantially all of its assets are acquired, customer information will be one of the transferred assets, and will remain subject to our Privacy Policy. | ||
- | ||
-### Your California Privacy Rights | ||
-If you are a California resident, you are entitled to prevent sharing of your personal information with third parties for their own marketing purposes through a cost-free means. If you send a request to the address above, Free Code Camp will provide you with a California Customer Choice Notice that you may use to opt-out of such information sharing. To receive this notice, submit a written request to <a href="mailto:team@freecodecamp.com" target="_blank">team@freecodecamp.com</a>, specifying that you seek your "California Customer Choice Notice." Please allow at least thirty (30) days for a response. | ||
- | ||
-### Acceptance of Privacy Policy Terms and Conditions | ||
-By using this site, you signify your agreement to the terms and conditions of this FreeCodeCamp.com Privacy Policy. If you do not agree to these terms, please do not use this site. We reserve the right, at our sole discretion, to change, modify, add, or remove portions of this policy at any time. All amended terms automatically take effect 30 days after they are initially posted on the site. Please check this page periodically for any modifications. Your continued use of FreeCodeCamp.com following the posting of any changes to these terms shall mean that you have accepted those changes. | ||
- | ||
+Free Code Camp is committed to respecting the privacy of visitors to our web sites and web applications. The guidelines below explain how we protect the privacy of visitors to FreeCodeCamp.com and its features. | ||
+ | ||
+### Personally Identifiable Information | ||
+ | ||
+Free Code Camp protects the identity of visitors to FreeCodeCamp.com by limiting the collection of personally identifiable information. | ||
+ | ||
+Free Code Camp does not knowingly collect or solicit personally identifiable information from or about children under 13, except as permitted by law. If we discover we have received any information from a child under 13 in violation of this policy, we will delete that information immediately. If you believe Free Code Camp has any information from or about anyone under 13, please email us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
+ | ||
+All personally identifiable information you provide to us is used by Free Code Camp and its team to process and manage your account, analyze the demographic of our users, or to deliver services through the site. | ||
+ | ||
+If you choose to provide personally identifiable information to us, you may receive occasional emails from us that are relevant to Free Code Camp, getting a job, or learning to code in general. | ||
+Free Code Camp may also use other third-party providers to facilitate the delivery of the services described above, and these third-party providers may be supplied with or have access to personally identifiable information for the sole purpose of providing these services, to you on behalf of Free Code Camp. | ||
+ | ||
+Free Code Camp may also disclose personally identifiable information in special legal circumstances. For instance, such information may be used where it is necessary to protect our copyright or intellectual property rights, or if the law requires us to do so. | ||
+ | ||
+### Anonymous Information | ||
+Anonymous aggregated data may be provided to other organizations we associate with for statistical purposes. For example, we may report to an organization that a certain percentage of our site's visitors are adults between the ages of 25 and 35. | ||
+ | ||
+### Cookies and Beacons—Use by Free Code Camp; Opting Out | ||
+We use cookies and software logs to monitor the use of FreeCodeCamp.com and to gather non-personal information about visitors to the site. Cookies are small files that Free Code Camp transfers to the hard drives of visitors for record-keeping purposes. These monitoring systems allow us to track general information about our visitors, such as the type of browsers (for example, Firefox or Internet Explorer), the operating systems (for instance, Windows or Macintosh), or the Internet providers (for instance, Comcast) they use. This information is used for statistical and market research purposes to tailor content to usage patterns and to provide services requested by our customers. To delete these cookies, please see your browser's privacy settings. | ||
+ | ||
+A beacon is an electronic file object (typically a transparent image) placed in the code of a Web page. We use third party beacons to monitor the traffic patterns of visitors from one Free Code Camp.com page to another and to improve site performance. | ||
+None of the information we gather in this way can be used to identify any individual who visits our site. | ||
+ | ||
+### Security | ||
+ | ||
+Any personally identifiable information collected through this site is stored on limited-access servers. We will maintain safeguards to protect these servers and the information they store. | ||
+ | ||
+### Surveys | ||
+We may occasionally conduct on-line surveys. All surveys are voluntary and you may decline to participate. | ||
+ | ||
+### Copyright | ||
+All of the content on FreeCodeCamp.com is copyrighted by Free Code Camp. If you'd like to redistribute it beyond simply sharing it through social media, please contact us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
+ | ||
+### Contacting Us | ||
+If you have questions about Free Code Camp, or to correct, update, or remove personally identifiable information, please email us at [team@freecodecamp.com](mailto:team@freecodecamp.com). | ||
+ | ||
+### Links to Other Web sites | ||
+Free Code Camp's sites each contain links to other Web sites. Free Code Camp is not responsible for the privacy practices or content of these third-party Web sites. We urge all FreeCodeCamp.com visitors to follow safe Internet practices: Do not supply Personally Identifiable Information to these Web sites unless you have verified their security and privacy policies. | ||
+ | ||
+### Data Retention | ||
+We retain your information for as long as necessary to permit us to use it for the purposes that we have communicated to you and comply with applicable law or regulations. | ||
+ | ||
+### Business Transfers | ||
+As we continue to develop our business, we might sell or buy subsidiaries, or business units. In such transactions, customer information generally is one of the transferred business assets but remains subject to the promises made in any pre-existing Privacy Policy (unless, of course, the customer consents otherwise). Also, in the unlikely event that Free Code Camp, or substantially all of its assets are acquired, customer information will be one of the transferred assets, and will remain subject to our Privacy Policy. | ||
+ | ||
+### Your California Privacy Rights | ||
+If you are a California resident, you are entitled to prevent sharing of your personal information with third parties for their own marketing purposes through a cost-free means. If you send a request to the address above, Free Code Camp will provide you with a California Customer Choice Notice that you may use to opt-out of such information sharing. To receive this notice, submit a written request to <a href="mailto:team@freecodecamp.com" target="_blank">team@freecodecamp.com</a>, specifying that you seek your "California Customer Choice Notice." Please allow at least thirty (30) days for a response. | ||
+ | ||
+### Acceptance of Privacy Policy Terms and Conditions | ||
+By using this site, you signify your agreement to the terms and conditions of this FreeCodeCamp.com Privacy Policy. If you do not agree to these terms, please do not use this site. We reserve the right, at our sole discretion, to change, modify, add, or remove portions of this policy at any time. All amended terms automatically take effect 30 days after they are initially posted on the site. Please check this page periodically for any modifications. Your continued use of FreeCodeCamp.com following the posting of any changes to these terms shall mean that you have accepted those changes. | ||
+ | ||
If you have any questions or concerns, please send an email to [team@freecodecamp.com](mailto:team@freecodecamp.com). |
16
Free-Code-Camp-Deployment-Workflow.md
@@ -1,9 +1,9 @@ | ||
-1. All code is written and pushed to a branch on the developers' own fork of Free Code Camp. | ||
-1. Developers create pull requests, pulling code from their branch to Free Code Camp's staging branch. | ||
-1. Someone other than the person who submitted the pull request QA's the pull request and accepts it if everything is perfect. Otherwise they close the pull request with an explanation of why it isn't perfect, and the developer opens another pull request once they've fixed things. | ||
-1. Staging is deployed to beta.freecodecamp.com by @berkeleytrue, @benmcmahon100 or @quincylarson periodically. | ||
-1. Master is deployed to freecodecamp.com once the staging itself is fully QA'd. | ||
- | ||
-Notes: | ||
-- Currently freecodecamp.com and beta.freecodecamp.com share a database, so we must be careful about seeding data and manipulating it on beta. | ||
+1. All code is written and pushed to a branch on the developers' own fork of Free Code Camp. | ||
+1. Developers create pull requests, pulling code from their branch to Free Code Camp's staging branch. | ||
+1. Someone other than the person who submitted the pull request QA's the pull request and accepts it if everything is perfect. Otherwise they close the pull request with an explanation of why it isn't perfect, and the developer opens another pull request once they've fixed things. | ||
+1. Staging is deployed to beta.freecodecamp.com by @berkeleytrue, @benmcmahon100 or @quincylarson periodically. | ||
+1. Master is deployed to freecodecamp.com once the staging itself is fully QA'd. | ||
+ | ||
+Notes: | ||
+- Currently freecodecamp.com and beta.freecodecamp.com share a database, so we must be careful about seeding data and manipulating it on beta. | ||
- This is subject to change once we get better test coverage and continuous integration working. |
18
Free-Code-Camp-Front-End-Development-Certificate.md
@@ -1,10 +1,10 @@ | ||
-### Here's how to earn our verified Front End Development Certificate: | ||
- | ||
-![An image of a sample Front End Development Certificate](http://i.imgur.com/UrU2ki8.png) | ||
- | ||
-1. Complete all of our current Basic Bonfires | ||
-1. Complete all of our current Basic Ziplines | ||
-1. Complete all of our current Intermediate Bonfires | ||
-1. Complete all of our current Intermediate Ziplines | ||
- | ||
+### Here's how to earn our verified Front End Development Certificate: | ||
+ | ||
+![An image of a sample Front End Development Certificate](http://i.imgur.com/UrU2ki8.png) | ||
+ | ||
+1. Complete all of our current Basic Bonfires | ||
+1. Complete all of our current Basic Ziplines | ||
+1. Complete all of our current Intermediate Bonfires | ||
+1. Complete all of our current Intermediate Ziplines | ||
+ | ||
Once you've completed all of the above, you can complete our "Claim your Front End Development Certificate" challenge, which will require you to sign our Academic Honesty Pledge. Then we will instantly issue your verified certificate, which will become accessible from your portfolio page. |
20
Free-Code-Camp-Full-Stack-Development-Certificate.md
@@ -1,11 +1,11 @@ | ||
-In order to participate in our nonprofit projects, you first need to earn our Full Stack Development Certificate. This certificate signifies that you've completed the first 800 hours of our curriculum. | ||
- | ||
-![An image of a sample Front End Development Certificate](http://i.imgur.com/Dlv4qSZ.png) | ||
- | ||
-### Here's how to earn our verified Full Stack Development Certificate: | ||
- | ||
-1. Complete all our current Bonfire Challenges | ||
-1. Complete all our current Zipline Challenges | ||
-1. Complete all our current Basejump Challenges | ||
- | ||
+In order to participate in our nonprofit projects, you first need to earn our Full Stack Development Certificate. This certificate signifies that you've completed the first 800 hours of our curriculum. | ||
+ | ||
+![An image of a sample Front End Development Certificate](http://i.imgur.com/Dlv4qSZ.png) | ||
+ | ||
+### Here's how to earn our verified Full Stack Development Certificate: | ||
+ | ||
+1. Complete all our current Bonfire Challenges | ||
+1. Complete all our current Zipline Challenges | ||
+1. Complete all our current Basejump Challenges | ||
+ | ||
Once you've completed all of the above, you can complete our "Claim your Full Stack Development Certificate" challenge, which will require you to sign our Academic Honesty Pledge. Then we will instantly issue your verified certificate, which will become accessible from your portfolio page. |
236
Free-Code-Camp-JavaScript-Style-Guide.md
@@ -1,119 +1,119 @@ | ||
-# Free Code Camp Style Guide | ||
-<small>or How Cool People Write JavaScript.</small> | ||
- | ||
- | ||
-## indent | ||
- #alwaysUseTwoSpaces | ||
- | ||
- no hard tabs, ever. No really, just don't do it. | ||
- | ||
-## curly braces | ||
-Always use curly braces when using the keywords `if/else/else if`. This prevents a lot of ambiguity and will prevent syntax errors in some edge cases. | ||
- | ||
-Bad: | ||
-```js | ||
-if (foo) bar(); | ||
-``` | ||
-Good: | ||
-```js | ||
-if (foo) { bar(); } | ||
-#curlyBracesEverywhere! | ||
- | ||
-## space after `function` keyword expect in anonymous functions. | ||
-Good: | ||
-```js | ||
-var foo = function() { | ||
- // ... | ||
-}; | ||
- | ||
-function foo() { | ||
-} | ||
- | ||
-``` | ||
-Bad: | ||
-```js | ||
-var foo = function () { | ||
- // ... | ||
-}; | ||
- | ||
-function foo () | ||
-{ | ||
- // ... | ||
-} | ||
-``` | ||
-## comments | ||
- | ||
- * no inline comments | ||
- * single space after `//` | ||
- * Do not use multiline comment `/* */`, we are reserving these for use with jsDocs. | ||
- | ||
-## keywords | ||
- | ||
- * space immediately after if, else, while, etc | ||
- * opening curly brace should always be on the same line. | ||
- | ||
-Good: | ||
-```js | ||
-if (true) { | ||
- // do the thing | ||
-} | ||
-``` | ||
- | ||
-Bad: | ||
-```js | ||
-if(true) | ||
-{ | ||
- // do the thing | ||
-} | ||
-``` | ||
- | ||
-## Else | ||
-Avoid else and "end early". In JavaScript there is often a lot of indenting (usually when dealing with async code and named "callback hell"). Anything you can do reduce the number of indents should be done. One thing is to [avoid the else](http://blog.timoxley.com/post/47041269194/avoid-else-return-early) keyword. | ||
- | ||
-This also has the side effect of making code cleaner and easier to read. | ||
- | ||
-Bad: | ||
-```js | ||
-someAsynFunc(function(err, data) { | ||
- if (err) { | ||
- callback(err); | ||
- } else { | ||
- // do stuff with data | ||
- } | ||
-}); | ||
-``` | ||
- | ||
-Good: | ||
-```js | ||
-someAsynFunc(function(err, data) { | ||
- if (err) { | ||
- return callback(err); | ||
- } | ||
- // do stuff with data | ||
- // saves one indent | ||
-}); | ||
-``` | ||
- | ||
-## Long Strings | ||
- | ||
-Long multiline strings should be in one of two forms: | ||
- | ||
-```js | ||
-var longString = | ||
- ‘long strings should ‘ + | ||
- ‘be in this form, with the ‘ + | ||
- ‘operator ending the line’; | ||
-``` | ||
-```js | ||
-var foo = 'bar'; | ||
- | ||
-var longString = [ | ||
- 'long strings with variables such as ', | ||
- foo, | ||
- 'should ', | ||
- 'be in this form, an array of strings ', | ||
- 'that are joined with the join array instance method', | ||
-].join(''); | ||
-``` | ||
- | ||
+# Free Code Camp Style Guide | ||
+<small>or How Cool People Write JavaScript.</small> | ||
+ | ||
+ | ||
+## indent | ||
+ #alwaysUseTwoSpaces | ||
+ | ||
+ no hard tabs, ever. No really, just don't do it. | ||
+ | ||
+## curly braces | ||
+Always use curly braces when using the keywords `if/else/else if`. This prevents a lot of ambiguity and will prevent syntax errors in some edge cases. | ||
+ | ||
+Bad: | ||
+```js | ||
+if (foo) bar(); | ||
+``` | ||
+Good: | ||
+```js | ||
+if (foo) { bar(); } | ||
+#curlyBracesEverywhere! | ||
+ | ||
+## space after `function` keyword expect in anonymous functions. | ||
+Good: | ||
+```js | ||
+var foo = function() { | ||
+ // ... | ||
+}; | ||
+ | ||
+function foo() { | ||
+} | ||
+ | ||
+``` | ||
+Bad: | ||
+```js | ||
+var foo = function () { | ||
+ // ... | ||
+}; | ||
+ | ||
+function foo () | ||
+{ | ||
+ // ... | ||
+} | ||
+``` | ||
+## comments | ||
+ | ||
+ * no inline comments | ||
+ * single space after `//` | ||
+ * Do not use multiline comment `/* */`, we are reserving these for use with jsDocs. | ||
+ | ||
+## keywords | ||
+ | ||
+ * space immediately after if, else, while, etc | ||
+ * opening curly brace should always be on the same line. | ||
+ | ||
+Good: | ||
+```js | ||
+if (true) { | ||
+ // do the thing | ||
+} | ||
+``` | ||
+ | ||
+Bad: | ||
+```js | ||
+if(true) | ||
+{ | ||
+ // do the thing | ||
+} | ||
+``` | ||
+ | ||
+## Else | ||
+Avoid else and "end early". In JavaScript there is often a lot of indenting (usually when dealing with async code and named "callback hell"). Anything you can do reduce the number of indents should be done. One thing is to [avoid the else](http://blog.timoxley.com/post/47041269194/avoid-else-return-early) keyword. | ||
+ | ||
+This also has the side effect of making code cleaner and easier to read. | ||
+ | ||
+Bad: | ||
+```js | ||
+someAsynFunc(function(err, data) { | ||
+ if (err) { | ||
+ callback(err); | ||
+ } else { | ||
+ // do stuff with data | ||
+ } | ||
+}); | ||
+``` | ||
+ | ||
+Good: | ||
+```js | ||
+someAsynFunc(function(err, data) { | ||
+ if (err) { | ||
+ return callback(err); | ||
+ } | ||
+ // do stuff with data | ||
+ // saves one indent | ||
+}); | ||
+``` | ||
+ | ||
+## Long Strings | ||
+ | ||
+Long multiline strings should be in one of two forms: | ||
+ | ||
+```js | ||
+var longString = | ||
+ ‘long strings should ‘ + | ||
+ ‘be in this form, with the ‘ + | ||
+ ‘operator ending the line’; | ||
+``` | ||
+```js | ||
+var foo = 'bar'; | ||
+ | ||
+var longString = [ | ||
+ 'long strings with variables such as ', | ||
+ foo, | ||
+ 'should ', | ||
+ 'be in this form, an array of strings ', | ||
+ 'that are joined with the join array instance method', | ||
+].join(''); | ||
+``` | ||
+ | ||
...more to come |
12
Free-Code-Camp-completion-language-requirements.md
@@ -1,7 +1,7 @@ | ||
-The last 800 hours of free code camp involve building projects for nonprofits. These nonprofit projects will involve lots of meetings, correspondence, and pair programming, all of which will be conducted in English. | ||
- | ||
-You will need to be good enough with English to be able to participate in these meetings. | ||
- | ||
-We are translating our challenges into native languages so that you can focus on learning to code, rather than focusing on learning English. | ||
- | ||
+The last 800 hours of free code camp involve building projects for nonprofits. These nonprofit projects will involve lots of meetings, correspondence, and pair programming, all of which will be conducted in English. | ||
+ | ||
+You will need to be good enough with English to be able to participate in these meetings. | ||
+ | ||
+We are translating our challenges into native languages so that you can focus on learning to code, rather than focusing on learning English. | ||
+ | ||
Many non-native English speakers have succeeded in our nonprofit project program. With some effort, you can, too. |
18
Free-Code-Camp-logo.md
@@ -1,9 +1,9 @@ | ||
-### Free Code Camp's logo | ||
- | ||
-![Free Code Camp's logo](https://i.vimeocdn.com/video/520129377_1280x720.jpg) | ||
- | ||
-It uses the typeface 'saxmono'. | ||
- | ||
-Like most of Free Code Camp's design assets, it was created by [@rybar](https://gitter.im/rybar) with help from [@iheartkode](https://gitter.im/iheartkode). | ||
- | ||
-You can download all of our assets, which are Creative Commons licensed, from our [Free Code Camp Assets repository](https://github.com/FreeCodeCamp/FCCAssets). | ||
+### Free Code Camp's logo | ||
+ | ||
+![Free Code Camp's logo](https://i.vimeocdn.com/video/520129377_1280x720.jpg) | ||
+ | ||
+It uses the typeface 'saxmono'. | ||
+ | ||
+Like most of Free Code Camp's design assets, it was created by [@rybar](https://gitter.im/rybar) with help from [@iheartkode](https://gitter.im/iheartkode). | ||
+ | ||
+You can download all of our assets, which are Creative Commons licensed, from our [Free Code Camp Assets repository](https://github.com/FreeCodeCamp/FCCAssets). |
20
Frontend-file-structure.md
@@ -1,11 +1,11 @@ | ||
-First things first: All your user-facing files and angular files are in **/client/app/** | ||
- | ||
-1. **app.js**: defines your app and includes some basic app-wide functions, you probably don’t really need to mess with it unless you’re trying to add more dependencies to your app. We’re not gonna worry about that right now. | ||
-2. **app.css**: an app-wide stylesheet, you can put styles here if you want but I’d recommend you put them in **main/main.css**, as these styles are also app-wide. | ||
-3. **main/**: this folder contains what the user sees first when they load up your site. **main.html** is the page template, **main.js** routes the user to **main.html** when the user goes to the top level directory of your website—that is, <a href="#">http://yourapp.wherever.itis/</a> with no <a href="#">/other/url/hierarchy</a>. You’ll also learn soon that you can define your app’s <a href="#">/url/heirarchy/fairly/arbitrarily</a>. You won’t really need to edit **main.js** or **main.controller.spec.js**, so let's not worry about those right now. If you look through the **main.html** file you’ll see it uses *ng-repeat* to show *things* in *awesomeThings*. Where does it get *awesomeThings*? | ||
-4. **main/main.controller.js**: all of the javascript functions you want to use to interact directly with the user go here! You’ll put functions here to interact with your API, refresh views for your user, etc. Here, *awesomeThings* are pulled from your database and added to the local scope so your HTML view can display them! How cool! We’ll get to adding custom objects to your database in a minute. | ||
- | ||
-Great! Now you know how to interact with the user! But what if you want your app to have another page that does something else? Maybe **main.html** shows the home page, but you want a page that shows a form to add a poll? maybe <a href="#">http://yourapp.wherever.itis/newpage</a>? This is where the yeoman generator comes in handy. | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Guide-to-Basejumps-Table-of-Contents/) | ||
+First things first: All your user-facing files and angular files are in **/client/app/** | ||
+ | ||
+1. **app.js**: defines your app and includes some basic app-wide functions, you probably don’t really need to mess with it unless you’re trying to add more dependencies to your app. We’re not gonna worry about that right now. | ||
+2. **app.css**: an app-wide stylesheet, you can put styles here if you want but I’d recommend you put them in **main/main.css**, as these styles are also app-wide. | ||
+3. **main/**: this folder contains what the user sees first when they load up your site. **main.html** is the page template, **main.js** routes the user to **main.html** when the user goes to the top level directory of your website—that is, <a href="#">http://yourapp.wherever.itis/</a> with no <a href="#">/other/url/hierarchy</a>. You’ll also learn soon that you can define your app’s <a href="#">/url/heirarchy/fairly/arbitrarily</a>. You won’t really need to edit **main.js** or **main.controller.spec.js**, so let's not worry about those right now. If you look through the **main.html** file you’ll see it uses *ng-repeat* to show *things* in *awesomeThings*. Where does it get *awesomeThings*? | ||
+4. **main/main.controller.js**: all of the javascript functions you want to use to interact directly with the user go here! You’ll put functions here to interact with your API, refresh views for your user, etc. Here, *awesomeThings* are pulled from your database and added to the local scope so your HTML view can display them! How cool! We’ll get to adding custom objects to your database in a minute. | ||
+ | ||
+Great! Now you know how to interact with the user! But what if you want your app to have another page that does something else? Maybe **main.html** shows the home page, but you want a page that shows a form to add a poll? maybe <a href="#">http://yourapp.wherever.itis/newpage</a>? This is where the yeoman generator comes in handy. | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Guide-to-Basejumps-Table-of-Contents/) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-route) |
16
Functional-Programming---Higher-Order-Functions.md
@@ -1,9 +1,9 @@ | ||
-### Links to help with functional programming! | ||
- | ||
-####Workshops | ||
-(https://github.com/timoxley/functional-javascript-workshop) | ||
- | ||
-A node package workshop. More can be found at [nodeschool](http://nodeschool.io/) | ||
- | ||
-####Reading and videos | ||
+### Links to help with functional programming! | ||
+ | ||
+####Workshops | ||
+(https://github.com/timoxley/functional-javascript-workshop) | ||
+ | ||
+A node package workshop. More can be found at [nodeschool](http://nodeschool.io/) | ||
+ | ||
+####Reading and videos | ||
(https://github.com/timoxley/functional-javascript-workshop) |
28
Get-info-about-the-current-user.md
@@ -1,15 +1,15 @@ | ||
-You may have noticed if you opened up **/client/app/admin/admin.controller.js** that it calls the *Auth* module like so: | ||
- | ||
-~~~javascript | ||
-.controller('AdminCtrl', function ($scope, $http, Auth … | ||
-~~~ | ||
-You can include Auth in your other controllers the same way. It’s pretty useful to have *Auth* available in your controller to detect if a user is logged in, or to get information about the current user. In the body of your controller you can add | ||
- | ||
-~~~javascript | ||
-$scope.getCurrentUser = Auth.getCurrentUser; | ||
-$scope.isLoggedIn = Auth.isLoggedIn; | ||
-~~~ | ||
-And then you can use *isLoggedIn()* or *getCurrentUser()* in the HTML view for your controller! | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/More-useful-APIs) | ||
+You may have noticed if you opened up **/client/app/admin/admin.controller.js** that it calls the *Auth* module like so: | ||
+ | ||
+~~~javascript | ||
+.controller('AdminCtrl', function ($scope, $http, Auth … | ||
+~~~ | ||
+You can include Auth in your other controllers the same way. It’s pretty useful to have *Auth* available in your controller to detect if a user is logged in, or to get information about the current user. In the body of your controller you can add | ||
+ | ||
+~~~javascript | ||
+$scope.getCurrentUser = Auth.getCurrentUser; | ||
+$scope.isLoggedIn = Auth.isLoggedIn; | ||
+~~~ | ||
+And then you can use *isLoggedIn()* or *getCurrentUser()* in the HTML view for your controller! | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/More-useful-APIs) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Restrict-a-page-to-authenticated-users) |
26
Getting-a-coding-job.md
@@ -1,14 +1,14 @@ | ||
-Free Code Camp will help you prepare for a coding job. | ||
- | ||
-![](https://www.evernote.com/shard/s116/sh/55c128c7-5d99-41cc-b03d-b3de22611c8d/b43e467b3889f646fec34bb4c161e2a2/deep/0/What's-wrong-with-this-picture----Code.org.png) | ||
- | ||
-Here are the facts: | ||
- | ||
-- There are hundreds of thousands of unfilled coding jobs. | ||
-- Employers and the US government have joined together to promote nontraditional coding programs like Free Code Camp. | ||
-- Full stack JavaScript is one of best paying skill sets, and has a ton of job openings. | ||
-- The best proof that you're an employable developer is a portfolio filled with real apps that real people are using. | ||
- | ||
-You'll still need to develop basic interviewing skills and soft skills (if you've been working a knowledge-worker type job for a few years, you probably already have these). | ||
- | ||
+Free Code Camp will help you prepare for a coding job. | ||
+ | ||
+![](https://www.evernote.com/shard/s116/sh/55c128c7-5d99-41cc-b03d-b3de22611c8d/b43e467b3889f646fec34bb4c161e2a2/deep/0/What's-wrong-with-this-picture----Code.org.png) | ||
+ | ||
+Here are the facts: | ||
+ | ||
+- There are hundreds of thousands of unfilled coding jobs. | ||
+- Employers and the US government have joined together to promote nontraditional coding programs like Free Code Camp. | ||
+- Full stack JavaScript is one of best paying skill sets, and has a ton of job openings. | ||
+- The best proof that you're an employable developer is a portfolio filled with real apps that real people are using. | ||
+ | ||
+You'll still need to develop basic interviewing skills and soft skills (if you've been working a knowledge-worker type job for a few years, you probably already have these). | ||
+ | ||
You'll also need to work hard to network with coders in your city. You can do this by joining [your city's Campsite](https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites) and participating in as many events as possible. |
16
Git-Blame.md
@@ -1,9 +1,9 @@ | ||
-> Shows what revision and author last modified each line of a file and blame them. | ||
- | ||
-:point_right: :no_good: — :see_no_evil: :hear_no_evil: :speak_no_evil: | ||
- | ||
-![](http://i.imgur.com/Ywpucz6.png) | ||
- | ||
-**Reference:** https://git-scm.com/docs/git-blame | ||
- | ||
+> Shows what revision and author last modified each line of a file and blame them. | ||
+ | ||
+:point_right: :no_good: — :see_no_evil: :hear_no_evil: :speak_no_evil: | ||
+ | ||
+![](http://i.imgur.com/Ywpucz6.png) | ||
+ | ||
+**Reference:** https://git-scm.com/docs/git-blame | ||
+ | ||
## [](http://i.imgur.com/xancoby.png) |
16
Git-Resources.md
@@ -1,9 +1,9 @@ | ||
-> Resources for working with Git VCS | ||
- | ||
-# Books and Tutorials | ||
-- [Pro Git](https://git-scm.com/book) | ||
-- [Become a git guru - Atlassian](https://www.atlassian.com/git/tutorials/) | ||
- | ||
-# Other Resources | ||
-- [Git Ready](http://gitready.com) | ||
+> Resources for working with Git VCS | ||
+ | ||
+# Books and Tutorials | ||
+- [Pro Git](https://git-scm.com/book) | ||
+- [Become a git guru - Atlassian](https://www.atlassian.com/git/tutorials/) | ||
+ | ||
+# Other Resources | ||
+- [Git Ready](http://gitready.com) | ||
- [Hub](https://hub.github.com/) |
16
Gitter.md
@@ -1,9 +1,9 @@ | ||
-### Gitter is a chat room system popular with open source projects. | ||
- | ||
-![A screenshot from Gitter](https://www.evernote.com/l/AntJzLbImEFNbaLfG7YQnWWBbqLliTKTYeoB/image.png) | ||
- | ||
-[Gitter.im](https://gitter.im) is a rapidly growing startup based in London. | ||
- | ||
-Free Code Camp has hundreds of Gitter rooms. These are accessible through Gitter's website, as well as [desktop and mobile apps](https://gitter.im/apps). | ||
- | ||
+### Gitter is a chat room system popular with open source projects. | ||
+ | ||
+![A screenshot from Gitter](https://www.evernote.com/l/AntJzLbImEFNbaLfG7YQnWWBbqLliTKTYeoB/image.png) | ||
+ | ||
+[Gitter.im](https://gitter.im) is a rapidly growing startup based in London. | ||
+ | ||
+Free Code Camp has hundreds of Gitter rooms. These are accessible through Gitter's website, as well as [desktop and mobile apps](https://gitter.im/apps). | ||
+ | ||
Gitter allows you to share [formatted code](https://github.com/FreeCodeCamp/freecodecamp/wiki/Pasting-Code-in-Gitter) with fellow campers. |
6
Grunt.md
@@ -1,4 +1,4 @@ | ||
-Whenever you create a new route or directive, you have to use `control+c` in your *grunt* terminal window to quit the grunt process and re-run `grunt serve` for your new route/directive to be included in your project's **index.html**. Sometimes *grunt* can be a little finnicky and refuses to run if it thinks something is wrong with your project. Obviously you should try to fix the problem, but grunt's errors aren't very helpful so don't worry too much—grunt usually will still run totally fine with the command `grunt serve --force`. | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-directive) | ||
+Whenever you create a new route or directive, you have to use `control+c` in your *grunt* terminal window to quit the grunt process and re-run `grunt serve` for your new route/directive to be included in your project's **index.html**. Sometimes *grunt* can be a little finnicky and refuses to run if it thinks something is wrong with your project. Obviously you should try to fix the problem, but grunt's errors aren't very helpful so don't worry too much—grunt usually will still run totally fine with the command `grunt serve --force`. | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-directive) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Backend-file-structure) |
60
Guide-to-Basejumps-Table-of-Contents.md
@@ -1,31 +1,31 @@ | ||
-###Table of contents | ||
-* Part 1: Frontend | ||
- - [Frontend file structure](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Frontend-file-structure) | ||
- - [Creating a new route](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-route) | ||
- - [Creating a new directive](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-directive) | ||
- - [Grunt](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Grunt) | ||
-* Part 2: Backend | ||
- - [Backend file structure](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Backend-file-structure) | ||
- - [Creating a new API endpoint](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-API-endpoint) | ||
- - [Fixing exports.update](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Fixing-exports.update) | ||
-* Part 3: Interfacing Between Frontend & Backend | ||
- - [Accessing the database from your frontend](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Accessing-the-database-from-your-frontend) | ||
- - [Seed Data](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Seed-data) | ||
- - [Quick tip: keep data in sync](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Quick-tip:-keep-data-in-sync) | ||
-* Part 4: Dynamic URLs using $routeParams, more useful APIs | ||
- - [Dynamic URLS using $routeParams](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Dynamic-URLs-using-$routeParams) | ||
- - [More Useful APIs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/More-useful-APIs) | ||
-* Part 5: Auth, isLoggedInAsync() | ||
- - [Get info about the current user](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Get-info-about-the-current-user) | ||
- - [Restrict a page to authenticated users](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Restrict-a-page-to-authenticated-users) | ||
- - [isLoggedInAsync()](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/isLoggedInAsync()) | ||
-* [Bonus: SocketIO](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Bonus:-SocketIO) | ||
-* [Epilogue](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Epilogue) | ||
- | ||
-###Legend | ||
-**/bolded/names/with.extensions** are directories and files in the project file structure | ||
-<a href="#">highlighted.items/are/hypothetical</a> URLs that allow access to different pages in your app | ||
-*italicizedItems* are function and object names within your code | ||
- | ||
-[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Intro-to-Yeoman-Angular-Fullstack-Basejumps) | ||
+###Table of contents | ||
+* Part 1: Frontend | ||
+ - [Frontend file structure](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Frontend-file-structure) | ||
+ - [Creating a new route](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-route) | ||
+ - [Creating a new directive](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-directive) | ||
+ - [Grunt](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Grunt) | ||
+* Part 2: Backend | ||
+ - [Backend file structure](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Backend-file-structure) | ||
+ - [Creating a new API endpoint](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-new-API-endpoint) | ||
+ - [Fixing exports.update](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Fixing-exports.update) | ||
+* Part 3: Interfacing Between Frontend & Backend | ||
+ - [Accessing the database from your frontend](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Accessing-the-database-from-your-frontend) | ||
+ - [Seed Data](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Seed-data) | ||
+ - [Quick tip: keep data in sync](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Quick-tip:-keep-data-in-sync) | ||
+* Part 4: Dynamic URLs using $routeParams, more useful APIs | ||
+ - [Dynamic URLS using $routeParams](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Dynamic-URLs-using-$routeParams) | ||
+ - [More Useful APIs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/More-useful-APIs) | ||
+* Part 5: Auth, isLoggedInAsync() | ||
+ - [Get info about the current user](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Get-info-about-the-current-user) | ||
+ - [Restrict a page to authenticated users](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Restrict-a-page-to-authenticated-users) | ||
+ - [isLoggedInAsync()](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/isLoggedInAsync()) | ||
+* [Bonus: SocketIO](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Bonus:-SocketIO) | ||
+* [Epilogue](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Epilogue) | ||
+ | ||
+###Legend | ||
+**/bolded/names/with.extensions** are directories and files in the project file structure | ||
+<a href="#">highlighted.items/are/hypothetical</a> URLs that allow access to different pages in your app | ||
+*italicizedItems* are function and object names within your code | ||
+ | ||
+[PREVIOUS](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Intro-to-Yeoman-Angular-Fullstack-Basejumps) | ||
[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Frontend-file-structure) |
66
Guide-to-Submitting-Posts-to-Free-Code-Camp-Medium-Publication.md
@@ -1,34 +1,34 @@ | ||
-Thousands of people read our [Medium publication](https://medium.freecodecamp.com). Here's how to submit posts, and what we look for in posts that we ultimately publish. | ||
- | ||
-1. Create a Medium account | ||
-1. Add a headshot and bio | ||
-1. Email team@freecodecamp.com to request to become a writer for our publication | ||
-1. Start submitting posts to us for us to review and potentially publish | ||
- | ||
-##Content tips: | ||
- | ||
-- Read through articles that have already been published on our publication and write about things we haven't covered yet. | ||
-- Autobiographical posts need a unique perspective or a non-obvious takeaway. | ||
-- Technical articles are welcome, and should be written so that most people who have only been coding for a year can still understand them | ||
-- Humorous posts do quite well with our community, and even serious articles can be lightened up with humor | ||
-- [7 minutes is technically the optimal post length](https://medium.com/data-lab/the-optimal-post-is-7-minutes-74b9f41509b#.jxmxzdrfa), but don't dilute your content to reach that length | ||
-- Keep your tone positive, and keep any criticism you may have metered and objective | ||
-- Good writing takes time. A 7-minute medium post takes me (Quincy Larson) around 4 - 6 hours | ||
- | ||
- | ||
-##Style tips: | ||
- | ||
-- Feature a large, exciting image at the top of the page | ||
-- Break up text with good, relevant images throughout | ||
-- Break points down and use headlines and sub headlines where necessary | ||
-- Avoid the "wall of text" affect by keeping paragraphs between 1 - 4 sentences | ||
-- Use exclamation points and ellipsis sparingly | ||
-- Avoid profanity and any statements that Lisa (the character from The Simpsons) would find offensive | ||
-- Avoid using more than one conjunction in a sentence | ||
-- Re-read your post to make sure there aren't any obvious typos | ||
- | ||
-##Our goal is to publish as many camper submissions as possible while maintaining a baseline level of quality. | ||
- | ||
-We get a lot of submissions. Please don't take offense if we don't publish your submission immediately. Instead, [message @QuincyLarson in Gitter](https://gitter.im/quincylarson) and I can give you the status of your submission and quick feedback. | ||
- | ||
+Thousands of people read our [Medium publication](https://medium.freecodecamp.com). Here's how to submit posts, and what we look for in posts that we ultimately publish. | ||
+ | ||
+1. Create a Medium account | ||
+1. Add a headshot and bio | ||
+1. Email team@freecodecamp.com to request to become a writer for our publication | ||
+1. Start submitting posts to us for us to review and potentially publish | ||
+ | ||
+##Content tips: | ||
+ | ||
+- Read through articles that have already been published on our publication and write about things we haven't covered yet. | ||
+- Autobiographical posts need a unique perspective or a non-obvious takeaway. | ||
+- Technical articles are welcome, and should be written so that most people who have only been coding for a year can still understand them | ||
+- Humorous posts do quite well with our community, and even serious articles can be lightened up with humor | ||
+- [7 minutes is technically the optimal post length](https://medium.com/data-lab/the-optimal-post-is-7-minutes-74b9f41509b#.jxmxzdrfa), but don't dilute your content to reach that length | ||
+- Keep your tone positive, and keep any criticism you may have metered and objective | ||
+- Good writing takes time. A 7-minute medium post takes me (Quincy Larson) around 4 - 6 hours | ||
+ | ||
+ | ||
+##Style tips: | ||
+ | ||
+- Feature a large, exciting image at the top of the page | ||
+- Break up text with good, relevant images throughout | ||
+- Break points down and use headlines and sub headlines where necessary | ||
+- Avoid the "wall of text" affect by keeping paragraphs between 1 - 4 sentences | ||
+- Use exclamation points and ellipsis sparingly | ||
+- Avoid profanity and any statements that Lisa (the character from The Simpsons) would find offensive | ||
+- Avoid using more than one conjunction in a sentence | ||
+- Re-read your post to make sure there aren't any obvious typos | ||
+ | ||
+##Our goal is to publish as many camper submissions as possible while maintaining a baseline level of quality. | ||
+ | ||
+We get a lot of submissions. Please don't take offense if we don't publish your submission immediately. Instead, [message @QuincyLarson in Gitter](https://gitter.im/quincylarson) and I can give you the status of your submission and quick feedback. | ||
+ | ||
Happy writing and coding! |
22
Help-I've-Found-a-Bug.md
@@ -1,12 +1,12 @@ | ||
-Thank you for taking the effort to report an issue with FreeCodeCamp. | ||
- | ||
-If you think you've found a bug on FreeCodeCamp, please follow these steps to resolve your problem: | ||
- | ||
-1. If the page seems broken in any way, try to do a [Hard Refresh](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Refresh-Your-Browser-Cache) of the page. This will update any old code that may have been cached in your browser. | ||
- * If your code crashes your browser, also try [Clearing Your Browser's Local Storage](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Clear-Your-Browser's-Local-Storage). | ||
- | ||
-2. [Ask for Help on Gitter](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-Get-Help-on-Gitter). You can usually get a quick response from a helpful community member there. | ||
- | ||
-3. If your problem has baffled everyone in Gitter, try [Searching for Your Issue on GitHub](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Searching-for-Your-Issue-on-Github) for anyone who has posted about a similar issue. If someone has, you can upvote the issue by replying to it with "+1" as your message. | ||
- | ||
+Thank you for taking the effort to report an issue with FreeCodeCamp. | ||
+ | ||
+If you think you've found a bug on FreeCodeCamp, please follow these steps to resolve your problem: | ||
+ | ||
+1. If the page seems broken in any way, try to do a [Hard Refresh](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Refresh-Your-Browser-Cache) of the page. This will update any old code that may have been cached in your browser. | ||
+ * If your code crashes your browser, also try [Clearing Your Browser's Local Storage](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Clear-Your-Browser's-Local-Storage). | ||
+ | ||
+2. [Ask for Help on Gitter](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-Get-Help-on-Gitter). You can usually get a quick response from a helpful community member there. | ||
+ | ||
+3. If your problem has baffled everyone in Gitter, try [Searching for Your Issue on GitHub](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Searching-for-Your-Issue-on-Github) for anyone who has posted about a similar issue. If someone has, you can upvote the issue by replying to it with "+1" as your message. | ||
+ | ||
3. If you can't find any relevant issues on GitHub, then [Create a New Issue](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Creating-a-New-Github-Issue) and our development team will take a look at your problem. |
24
Help-Rooms.md
@@ -1,13 +1,13 @@ | ||
-There are official help rooms for each major section of FCC content: | ||
- | ||
-| Chat Room | Description | | ||
-| --- | --- | | ||
-| [Help](https://gitter.im/freecodecamp/Help) | get help with our Waypoint challenges from your fellow campers | | ||
-| [HelpBonfires](https://gitter.im/freecodecamp/HelpBonfires) | get help with our Bonfire challenges from your fellow campers | | ||
-| [HelpZiplines](https://gitter.im/freecodecamp/HelpZiplines) | get help with our Zipline challenges from your fellow campers | | ||
-| [HelpBasejumps](https://gitter.im/freecodecamp/HelpBasejumps) | get help with our Basejump challenges from your fellow campers | | ||
-| [NonprofitProjects](https://gitter.im/freecodecamp/NonprofitProjects) | get help with your Nonprofit Projects from your fellow campers | | ||
-| [CodeReview](https://gitter.im/freecodecamp/CodeReview) | get constructive criticism and advice on finished code from your fellow campers | | ||
-| [YouCanDoThis](https://gitter.im/freecodecamp/YouCanDoThis) | learning to code is hard - share your feelings and get moral support here | | ||
- | ||
+There are official help rooms for each major section of FCC content: | ||
+ | ||
+| Chat Room | Description | | ||
+| --- | --- | | ||
+| [Help](https://gitter.im/freecodecamp/Help) | get help with our Waypoint challenges from your fellow campers | | ||
+| [HelpBonfires](https://gitter.im/freecodecamp/HelpBonfires) | get help with our Bonfire challenges from your fellow campers | | ||
+| [HelpZiplines](https://gitter.im/freecodecamp/HelpZiplines) | get help with our Zipline challenges from your fellow campers | | ||
+| [HelpBasejumps](https://gitter.im/freecodecamp/HelpBasejumps) | get help with our Basejump challenges from your fellow campers | | ||
+| [NonprofitProjects](https://gitter.im/freecodecamp/NonprofitProjects) | get help with your Nonprofit Projects from your fellow campers | | ||
+| [CodeReview](https://gitter.im/freecodecamp/CodeReview) | get constructive criticism and advice on finished code from your fellow campers | | ||
+| [YouCanDoThis](https://gitter.im/freecodecamp/YouCanDoThis) | learning to code is hard - share your feelings and get moral support here | | ||
+ | ||
Choose the right room for your question! |
8
Higher-Order-functions.md
@@ -1,4 +1,4 @@ | ||
-Functions that are higher! | ||
- | ||
-https://www.youtube.com/watch?v=BMUiFMZr7vk | ||
- | ||
+Functions that are higher! | ||
+ | ||
+https://www.youtube.com/watch?v=BMUiFMZr7vk | ||
+ |
30
Home.md
@@ -1,16 +1,16 @@ | ||
-##Welcome to the Free Code Camp Wiki! | ||
- | ||
-Our open source community's Wiki focuses on answering your questions about learning to code and getting a coding job. We also cover in detail our: | ||
-- Curriculum | ||
-- Local Campsite Communities | ||
-- Nonprofit Projects | ||
- | ||
-![An illustration of CamperBot](http://i.imgur.com/gyJwzkx.png) | ||
- | ||
-The best way to access this wiki is via [CamperBot](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/camperbot), located in our Gitter channels. CamperBot is a community designed tool useful for accessing our wiki content without ever leaving Gitter. | ||
- | ||
-To contribute a wiki article for any of the bonfires, please use this [template](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Bonfire-Wiki-Template). This is essential for [@CamperBot](https://github.com/camperbot) to retrieve the article. Bonfire articles that do not use this template will be removed. | ||
- | ||
-If you have questions about contributing to the Free Code Camp Wiki message [@Rafase282 in Gitter](https://gitter.im/Rafase282). | ||
- | ||
+##Welcome to the Free Code Camp Wiki! | ||
+ | ||
+Our open source community's Wiki focuses on answering your questions about learning to code and getting a coding job. We also cover in detail our: | ||
+- Curriculum | ||
+- Local Campsite Communities | ||
+- Nonprofit Projects | ||
+ | ||
+![An illustration of CamperBot](http://i.imgur.com/gyJwzkx.png) | ||
+ | ||
+The best way to access this wiki is via [CamperBot](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/camperbot), located in our Gitter channels. CamperBot is a community designed tool useful for accessing our wiki content without ever leaving Gitter. | ||
+ | ||
+To contribute a wiki article for any of the bonfires, please use this [template](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Bonfire-Wiki-Template). This is essential for [@CamperBot](https://github.com/camperbot) to retrieve the article. Bonfire articles that do not use this template will be removed. | ||
+ | ||
+If you have questions about contributing to the Free Code Camp Wiki message [@Rafase282 in Gitter](https://gitter.im/Rafase282). | ||
+ | ||
We look forward to collaborating with you on expanding and improving this wiki! |
30
How-Free-Code-Camp-works.md
@@ -1,15 +1,15 @@ | ||
-Free Code Camp offers you a free, self-paced, browser-based program that takes about 1,600 hours to complete. | ||
- | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-waypoints.jpg) | ||
- | ||
-## how it works | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-bonfires.jpg) | ||
- | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-ziplines.jpg) | ||
- | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-basejumps.jpg) | ||
- | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-nonprofit-projects.jpg) | ||
- | ||
-![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-full.jpg) | ||
- | ||
+Free Code Camp offers you a free, self-paced, browser-based program that takes about 1,600 hours to complete. | ||
+ | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-waypoints.jpg) | ||
+ | ||
+## how it works | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-bonfires.jpg) | ||
+ | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-ziplines.jpg) | ||
+ | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-basejumps.jpg) | ||
+ | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-nonprofit-projects.jpg) | ||
+ | ||
+![An image of a table showing the different segments of Free Code Camp](https://s3.amazonaws.com/freecodecamp/curriculum-diagram-full.jpg) | ||
+ |
172
How-FreeCodeCamp-Nonprofit-Projects-work.md
@@ -1,87 +1,87 @@ | ||
-Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. Once you've earned both your Front End Development Certification and your Full Stack Development Certification, you'll begin this process. | ||
- | ||
-## Starting with the end in mind | ||
- | ||
-Our goal at Free Code Camp is to help you land a job as a junior software developer (or, if you prefer, a 'pivot job' that leads your current career in a more technical direction). | ||
- | ||
-You'll continue to work on nonprofit projects until you've built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects you're going to complete, in addition to the 800 hours of challenges you've already completed, will be enough to qualify you for your first coding job. This will produce a much broader portfolio than a traditional coding bootcamp, which generally only has one or two capstone projects. | ||
- | ||
-## Choosing your first Nonprofit Project | ||
- | ||
-We've categorized all the nonprofit projects by estimated time investment per camper: 100 hours, 200 hours, and 300 hours. These are only rough estimates. | ||
- | ||
-Example: if you and the camper you're paired up with (your pair) each stated you could work 20 hours per week. If the project is a 100 hour per camper project, you should be able to complete it in about 5 weeks. | ||
-Our Nonprofit Project team will match you and your pair based on: | ||
- | ||
-- Your estimated time commitment (10, 20 or 40 hours per week) | ||
-- Your time zone | ||
-- The nonprofit projects you've chosen | ||
-- Prior coding experience (we'd like both campers to be able to contribute equally) | ||
- | ||
- | ||
-We won't take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace. | ||
- | ||
-You'll only work on one project at a time. Once you start a nonprofit project, we'll remove you from all other nonprofit project you've expressed interest in. There's a good chance those projects will no longer be available when you finish your current project, anyway. Don't worry, though - we get new nonprofit project requests every day, so there will be plenty more projects for you to consider after you finish your current one. | ||
- | ||
-### Finalizing the Project | ||
- | ||
-Before you can start working on the project, our team of Nonprofit Project Coordinators will go through the following process: | ||
- | ||
-- We'll wait until there are two campers who have chosen the same project and look like they're a good match for one another based on the factors mentioned above. | ||
-- We'll call the stakeholder to confirm once again that he or she agrees with our [terms](http://freecodecamp.com/nonprofits) and has signed our [Nonprofit Project Stakeholder Pledge] (http://goo.gl/forms/0YKkd9bpcR). | ||
-- We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. | ||
-- If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project. | ||
- | ||
-This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time. | ||
- | ||
-### Nonprofit Stakeholders | ||
- | ||
-Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a "stakeholder" - an authorative person who understands the organization and its needs for this particular project. | ||
- | ||
-Stakeholders have a deep understanding of their organizations' needs. Campers will work with them to figure out the best solutions to these needs. | ||
- | ||
-When you and your pair partner first speak with your nonprofit stakeholder, you'll: | ||
- | ||
-- talk at length to better understand their needs. | ||
-- create a new Trello board and use it to prioritize what needs to be built. | ||
-- and establish deadlines based on your weekly time commitment, and how long you think each task will take. | ||
- | ||
-It's notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help. | ||
- | ||
-You'll continue to meet with your stakeholder at least twice a month in your project's Gitter channel. | ||
-You should also ask questions in your project's Gitter channel as they come up throughout the week, and your stakeholder can answer them asynchronously. | ||
- | ||
-Getting "blocked" on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter. | ||
- | ||
-Ultimately, the project will be considered complete once both the stakeholder's needs have been met, and you and your pair are happy with the project. Then you can add it to your portfolio! | ||
- | ||
-### Working with your Pair | ||
- | ||
-You and your pair will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time. | ||
- | ||
-Here are our recommended ways of collaborating: | ||
- | ||
-- Gitter has robust private messaging functionality. It's the main way our team communicates, and we recommend it over email. | ||
-- Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them. | ||
-- Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn't real pair programming. | ||
-- Write clear and readable code, commit messages, branch names, and pull request messages. | ||
- | ||
-### Hosting Apps | ||
- | ||
-Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you'll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It's free, easy to use, and has both browser and command line interfaces. It's owned by Salesforce and used by a ton of companies, so it's accountable and unlikely to go away. | ||
- | ||
-If you need help convincing your stakeholder that Heroku is the ideal platform, we'll be happy to talk with them. | ||
- | ||
-### Maintaining Apps | ||
- | ||
-Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical "super user"). | ||
- | ||
-While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you'll want it to remain in good shape for curious future employers. | ||
- | ||
-### Pledging to finish the project | ||
- | ||
-Your nonprofit stakeholder, your pair partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you'll become ineligible to ever be assigned another one. | ||
- | ||
-To confirm that you understand the seriousness of this commitment, we require that all campers [sign this pledge](http://goo.gl/forms/ZMn96z2QqY) before starting on their nonprofit projects. | ||
- | ||
+Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. Once you've earned both your Front End Development Certification and your Full Stack Development Certification, you'll begin this process. | ||
+ | ||
+## Starting with the end in mind | ||
+ | ||
+Our goal at Free Code Camp is to help you land a job as a junior software developer (or, if you prefer, a 'pivot job' that leads your current career in a more technical direction). | ||
+ | ||
+You'll continue to work on nonprofit projects until you've built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects you're going to complete, in addition to the 800 hours of challenges you've already completed, will be enough to qualify you for your first coding job. This will produce a much broader portfolio than a traditional coding bootcamp, which generally only has one or two capstone projects. | ||
+ | ||
+## Choosing your first Nonprofit Project | ||
+ | ||
+We've categorized all the nonprofit projects by estimated time investment per camper: 100 hours, 200 hours, and 300 hours. These are only rough estimates. | ||
+ | ||
+Example: if you and the camper you're paired up with (your pair) each stated you could work 20 hours per week. If the project is a 100 hour per camper project, you should be able to complete it in about 5 weeks. | ||
+Our Nonprofit Project team will match you and your pair based on: | ||
+ | ||
+- Your estimated time commitment (10, 20 or 40 hours per week) | ||
+- Your time zone | ||
+- The nonprofit projects you've chosen | ||
+- Prior coding experience (we'd like both campers to be able to contribute equally) | ||
+ | ||
+ | ||
+We won't take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace. | ||
+ | ||
+You'll only work on one project at a time. Once you start a nonprofit project, we'll remove you from all other nonprofit project you've expressed interest in. There's a good chance those projects will no longer be available when you finish your current project, anyway. Don't worry, though - we get new nonprofit project requests every day, so there will be plenty more projects for you to consider after you finish your current one. | ||
+ | ||
+### Finalizing the Project | ||
+ | ||
+Before you can start working on the project, our team of Nonprofit Project Coordinators will go through the following process: | ||
+ | ||
+- We'll wait until there are two campers who have chosen the same project and look like they're a good match for one another based on the factors mentioned above. | ||
+- We'll call the stakeholder to confirm once again that he or she agrees with our [terms](http://freecodecamp.com/nonprofits) and has signed our [Nonprofit Project Stakeholder Pledge] (http://goo.gl/forms/0YKkd9bpcR). | ||
+- We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. | ||
+- If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project. | ||
+ | ||
+This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time. | ||
+ | ||
+### Nonprofit Stakeholders | ||
+ | ||
+Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a "stakeholder" - an authorative person who understands the organization and its needs for this particular project. | ||
+ | ||
+Stakeholders have a deep understanding of their organizations' needs. Campers will work with them to figure out the best solutions to these needs. | ||
+ | ||
+When you and your pair partner first speak with your nonprofit stakeholder, you'll: | ||
+ | ||
+- talk at length to better understand their needs. | ||
+- create a new Trello board and use it to prioritize what needs to be built. | ||
+- and establish deadlines based on your weekly time commitment, and how long you think each task will take. | ||
+ | ||
+It's notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help. | ||
+ | ||
+You'll continue to meet with your stakeholder at least twice a month in your project's Gitter channel. | ||
+You should also ask questions in your project's Gitter channel as they come up throughout the week, and your stakeholder can answer them asynchronously. | ||
+ | ||
+Getting "blocked" on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter. | ||
+ | ||
+Ultimately, the project will be considered complete once both the stakeholder's needs have been met, and you and your pair are happy with the project. Then you can add it to your portfolio! | ||
+ | ||
+### Working with your Pair | ||
+ | ||
+You and your pair will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time. | ||
+ | ||
+Here are our recommended ways of collaborating: | ||
+ | ||
+- Gitter has robust private messaging functionality. It's the main way our team communicates, and we recommend it over email. | ||
+- Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them. | ||
+- Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn't real pair programming. | ||
+- Write clear and readable code, commit messages, branch names, and pull request messages. | ||
+ | ||
+### Hosting Apps | ||
+ | ||
+Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you'll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It's free, easy to use, and has both browser and command line interfaces. It's owned by Salesforce and used by a ton of companies, so it's accountable and unlikely to go away. | ||
+ | ||
+If you need help convincing your stakeholder that Heroku is the ideal platform, we'll be happy to talk with them. | ||
+ | ||
+### Maintaining Apps | ||
+ | ||
+Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical "super user"). | ||
+ | ||
+While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you'll want it to remain in good shape for curious future employers. | ||
+ | ||
+### Pledging to finish the project | ||
+ | ||
+Your nonprofit stakeholder, your pair partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you'll become ineligible to ever be assigned another one. | ||
+ | ||
+To confirm that you understand the seriousness of this commitment, we require that all campers [sign this pledge](http://goo.gl/forms/ZMn96z2QqY) before starting on their nonprofit projects. | ||
+ | ||
There will likely be times of confusion or frustration. This is normal in software development. The most important thing is that you do not give up and instead persevere through these setbacks. As Steve Jobs famously said, "Real artists ship." And you are going to ship one successful nonprofit project after another until you feel ready to take the next step in your promising career. |
32
How-GitHub-Issue-Moderators-AKA-Issue-Mods-Work.md
@@ -1,16 +1,16 @@ | ||
-GitHub Issue Moderators, or "issue mods", are volunteers who have the ability to close issues and accept or deny pull requests. | ||
- | ||
-In order to become an issue mod, you must first prove your helpfulness by leaving useful comments on outstanding issues, and submitting pull requests of your own to fix these issues. | ||
- | ||
-If you've been doing these things, and want the additional power/responsibility that comes with helping Free Code Camp as an issue mod, please contact [@berkeleytrue](https://gitter.im/berkeleytrue) in Gitter. | ||
- | ||
-If you are approved, we will add you to a GitHub Team, `Issue mods`. | ||
- | ||
-Though you will have write access to Free Code Camp's repository, **you should never write directly to the Free Code Camp repository**. All code should enter Free Code Camp's codebase in the form of a pull request. | ||
- | ||
-Please note that we will frequently remove issue mods whom we think are inactive. If you are removed, please do not take this personally - we can add you back to the team, just message us and let us know you're still active. | ||
- | ||
-Also note, the number of issue moderators will always remain small due to the nature of Github permissions. | ||
- | ||
-Happy Coding! | ||
- | ||
+GitHub Issue Moderators, or "issue mods", are volunteers who have the ability to close issues and accept or deny pull requests. | ||
+ | ||
+In order to become an issue mod, you must first prove your helpfulness by leaving useful comments on outstanding issues, and submitting pull requests of your own to fix these issues. | ||
+ | ||
+If you've been doing these things, and want the additional power/responsibility that comes with helping Free Code Camp as an issue mod, please contact [@berkeleytrue](https://gitter.im/berkeleytrue) in Gitter. | ||
+ | ||
+If you are approved, we will add you to a GitHub Team, `Issue mods`. | ||
+ | ||
+Though you will have write access to Free Code Camp's repository, **you should never write directly to the Free Code Camp repository**. All code should enter Free Code Camp's codebase in the form of a pull request. | ||
+ | ||
+Please note that we will frequently remove issue mods whom we think are inactive. If you are removed, please do not take this personally - we can add you back to the team, just message us and let us know you're still active. | ||
+ | ||
+Also note, the number of issue moderators will always remain small due to the nature of Github permissions. | ||
+ | ||
+Happy Coding! | ||
+ |
36
How-JSONP-is-different-from-JSON.md
@@ -1,19 +1,19 @@ | ||
-## JSONP is just JSON wrapped in a callback function. | ||
- | ||
-JSONP is useful for making cross domain requests, which are often otherwise forbidden by browsers for security reasons. | ||
- | ||
-``` | ||
- // an example of JSON | ||
- {"weapon":"nunchucks","headband":"yellow"} | ||
- | ||
- // an example of JSONP | ||
- myCallback({"weapon":"nunchucks","headband":"yellow"}); | ||
-``` | ||
- | ||
-Then to access the data stored in your JSONP, you define the callback function: | ||
- | ||
-``` | ||
-myCallback = function(data){ | ||
- alert(data.weapon); | ||
-}; | ||
+## JSONP is just JSON wrapped in a callback function. | ||
+ | ||
+JSONP is useful for making cross domain requests, which are often otherwise forbidden by browsers for security reasons. | ||
+ | ||
+``` | ||
+ // an example of JSON | ||
+ {"weapon":"nunchucks","headband":"yellow"} | ||
+ | ||
+ // an example of JSONP | ||
+ myCallback({"weapon":"nunchucks","headband":"yellow"}); | ||
+``` | ||
+ | ||
+Then to access the data stored in your JSONP, you define the callback function: | ||
+ | ||
+``` | ||
+myCallback = function(data){ | ||
+ alert(data.weapon); | ||
+}; | ||
``` |
18
How-Long-Free-Code-Camp-Takes.md
@@ -1,10 +1,10 @@ | ||
-It takes about 1,600 hours to complete Free Code Camp. | ||
- | ||
-Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules: | ||
- | ||
-Time budgeted | Hours per week | Weeks to complete | ||
---- | --- | --- | ||
-Weekends | 10 hours/week | 160 weeks (36 months) | ||
-Nights and Weekends | 20 hours/week | 80 weeks (18 months) | ||
-Full time | 40 hours/week | 40 weeks (9 months) | ||
+It takes about 1,600 hours to complete Free Code Camp. | ||
+ | ||
+Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules: | ||
+ | ||
+Time budgeted | Hours per week | Weeks to complete | ||
+--- | --- | --- | ||
+Weekends | 10 hours/week | 160 weeks (36 months) | ||
+Nights and Weekends | 20 hours/week | 80 weeks (18 months) | ||
+Full time | 40 hours/week | 40 weeks (9 months) | ||
Traditional Bootcamp Pacing | 80 hours/week | 20 weeks (5 months) |
16
How-to-Get-Help-on-Gitter.md
@@ -1,9 +1,9 @@ | ||
-Sorry that you are stuck. Luckily there are many campers who hang out on Gitter and can help you resolve most issues! Follow these simple steps to get help fast: | ||
- | ||
-1. Go to the [Help Room](https://gitter.im/FreeCodeCamp/Help) | ||
- * If the problem is code related, paste the problematic code in the chat room with the [Proper Formatting](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/code-formatting) and a description of the issue. | ||
- * If the problem seems to be with the site itself, post a screenshot of the issue or describe it well. | ||
- | ||
-2. Remember that the people there are campers just like you, so be courteous! | ||
- | ||
+Sorry that you are stuck. Luckily there are many campers who hang out on Gitter and can help you resolve most issues! Follow these simple steps to get help fast: | ||
+ | ||
+1. Go to the [Help Room](https://gitter.im/FreeCodeCamp/Help) | ||
+ * If the problem is code related, paste the problematic code in the chat room with the [Proper Formatting](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/code-formatting) and a description of the issue. | ||
+ * If the problem seems to be with the site itself, post a screenshot of the issue or describe it well. | ||
+ | ||
+2. Remember that the people there are campers just like you, so be courteous! | ||
+ | ||
3. If your problem has baffled everyone in Gitter, try [Searching for Your Issue on Github](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Searching-for-Your-Issue-on-Github) for anyone who has posted about a similar issue. |
18
How-to-add-Free-Code-Camp-to-my-LinkedIn-profile.md
@@ -1,10 +1,10 @@ | ||
-LinkedIn recognizes Free Code Camp as a university. | ||
- | ||
-You can explore our alumni activity [here](https://www.linkedin.com/edu/school?id=166029). | ||
- | ||
-You should add Free Code Camp to your LinkedIn profile. Here's how: | ||
- | ||
-- Follow this link: [https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp](https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp) | ||
-- Follow these instructions:![](https://www.evernote.com/l/AHRnpH-PN-JPQa9_u8FSOzejNG-tX40h1fkB/image.png) | ||
- | ||
+LinkedIn recognizes Free Code Camp as a university. | ||
+ | ||
+You can explore our alumni activity [here](https://www.linkedin.com/edu/school?id=166029). | ||
+ | ||
+You should add Free Code Camp to your LinkedIn profile. Here's how: | ||
+ | ||
+- Follow this link: [https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp](https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp) | ||
+- Follow these instructions:![](https://www.evernote.com/l/AHRnpH-PN-JPQa9_u8FSOzejNG-tX40h1fkB/image.png) | ||
+ | ||
Once you complete our curriculum (or complete at least one Nonprofit Project and then get a coding job), we will issue you an official Full Stack Web Development certificate that you can also add to your LinkedIn profile. |
28
How-to-best-use-the-Global-Control-Shortcuts-for-Mac.md
@@ -1,15 +1,15 @@ | ||
-These Global Control Shortcuts for Mac will save you hours by speeding up your typing. | ||
- | ||
-https://player.vimeo.com/video/107073108 | ||
- | ||
-These global shortcuts work everywhere on a Mac: | ||
- | ||
-- Control + F = Forward | ||
-- Control + B = Backward | ||
-- Control + N = Next Line | ||
-- Control + P = Previous Line | ||
-- Control + H = Backspace | ||
-- Control + D = Delete | ||
-- Control + A = Beginning of Line | ||
-- Control + E = End of Line | ||
+These Global Control Shortcuts for Mac will save you hours by speeding up your typing. | ||
+ | ||
+https://player.vimeo.com/video/107073108 | ||
+ | ||
+These global shortcuts work everywhere on a Mac: | ||
+ | ||
+- Control + F = Forward | ||
+- Control + B = Backward | ||
+- Control + N = Next Line | ||
+- Control + P = Previous Line | ||
+- Control + H = Backspace | ||
+- Control + D = Delete | ||
+- Control + A = Beginning of Line | ||
+- Control + E = End of Line | ||
- Control + K = Kill line |
58
How-to-clear-specific-values-from-your-browser's-local-storage.md
@@ -1,30 +1,30 @@ | ||
-Removing specific values from your browser's local storage will solve many problems related to the browser crashing or freezing on FreeCodeCamp. | ||
- | ||
-This solves, as example, a common problem with browser hanging out in a challenge's page after saving a response with an infinite loop. | ||
- | ||
-When this happens, you must delete the value in `localStorage` storing that response. | ||
- | ||
-In Chrome: | ||
-* On **freecodecamp.com**, open your developer tools. | ||
- * More tools > Developer tools (or `Ctrl` + `Shift` + `I` (Windows), `Cmd` + `Opt` + `I` (Mac)) | ||
-* Navigate to the `Resources` tab | ||
-* Expand the `Local Storage` item in the left pane | ||
-* Select `http://www.freecodecamp.com` | ||
-* Find the challenge you wish to delete data in the right pane | ||
- ![Finding a key in localStorage Chrome Developer Tools](http://i.imgur.com/O57tcuN.png) | ||
-* Right click the desired challenge and select `Delete` | ||
- | ||
-In Firefox: | ||
-* On **freecodecamp.com**, open your web console with | ||
- * `Ctrl` + `Shift` + `K` | ||
-* From there, using directly the console: | ||
- * Type `console.log(localStorage);` and hit `Enter`. | ||
- * Click in `Storage` link. | ||
- ![Print the localStorage Object from web console and show the Storage](http://i.imgur.com/AsflWtv.png) | ||
- * The **Storage** panel will appear at right. | ||
- * Filter the results to find the bonfire, zipline or waypoint causing the problem. | ||
- * When located, mouse over it and click the `x` at right. | ||
- ![Click the x for deleting the value entry.](http://i.imgur.com/3URr4jQ.png) | ||
- * Once removed, check if the problem was solved. Refresh or close and open the browser if necessary. | ||
- | ||
+Removing specific values from your browser's local storage will solve many problems related to the browser crashing or freezing on FreeCodeCamp. | ||
+ | ||
+This solves, as example, a common problem with browser hanging out in a challenge's page after saving a response with an infinite loop. | ||
+ | ||
+When this happens, you must delete the value in `localStorage` storing that response. | ||
+ | ||
+In Chrome: | ||
+* On **freecodecamp.com**, open your developer tools. | ||
+ * More tools > Developer tools (or `Ctrl` + `Shift` + `I` (Windows), `Cmd` + `Opt` + `I` (Mac)) | ||
+* Navigate to the `Resources` tab | ||
+* Expand the `Local Storage` item in the left pane | ||
+* Select `http://www.freecodecamp.com` | ||
+* Find the challenge you wish to delete data in the right pane | ||
+ ![Finding a key in localStorage Chrome Developer Tools](http://i.imgur.com/O57tcuN.png) | ||
+* Right click the desired challenge and select `Delete` | ||
+ | ||
+In Firefox: | ||
+* On **freecodecamp.com**, open your web console with | ||
+ * `Ctrl` + `Shift` + `K` | ||
+* From there, using directly the console: | ||
+ * Type `console.log(localStorage);` and hit `Enter`. | ||
+ * Click in `Storage` link. | ||
+ ![Print the localStorage Object from web console and show the Storage](http://i.imgur.com/AsflWtv.png) | ||
+ * The **Storage** panel will appear at right. | ||
+ * Filter the results to find the bonfire, zipline or waypoint causing the problem. | ||
+ * When located, mouse over it and click the `x` at right. | ||
+ ![Click the x for deleting the value entry.](http://i.imgur.com/3URr4jQ.png) | ||
+ * Once removed, check if the problem was solved. Refresh or close and open the browser if necessary. | ||
+ | ||
**Note:** This can also be done with the [Storage Inspector](https://developer.mozilla.org/en-US/docs/Tools/Storage_Inspector), but seems like Firefox hangs out when there are so many values. |
64
How-to-clone-the-FreeCodeCamp-website-on-a-Windows-pc.md
@@ -1,32 +1,32 @@ | ||
-# How to clone and setup the FreeCodeCamp website on a Windows pc | ||
-This list works with the FreeCodeCamp site and have been tested on this Angular tutorial [https://docs.angularjs.org/tutorial](https://docs.angularjs.org/tutorial) as well. Setting up the dev environment on a Windows pc is easy although it will give a ton of errors first in the process. The important part is to correct these errors. | ||
-## Toolchain | ||
-1. Git bash [https://msysgit.github.io/](https://msysgit.github.io/) | ||
-2. Node.js [https://nodejs.org/](https://nodejs.org/) | ||
-3. MongoDB [https://www.mongodb.org/downloads](https://www.mongodb.org/downloads) | ||
-4. Python 2.7.10 [https://www.python.org/downloads/release/python-2710/](https://www.python.org/downloads/release/python-2710/) | ||
- | ||
-Install the 4 downloaded prerequsites. When installing Python and Node it is important to check | ||
- the option add to the path variable. The Node installer does that by default. It is optional to add Mongo to the path. Python should be installed in a subfolder in %programfiles% | ||
- | ||
-1. Open a command prompt with admin rights | ||
-2. Verify that Node is in th path with node -v | ||
-3. Verify that npm is in the path with npm -v | ||
-5. `npm install npm -g` | ||
- `npm install bower -g` | ||
- `npm install gulp -g` | ||
- `npm install node-gyp -g` | ||
- `npm install babel -g` | ||
-6. If you want to spare the time in explorer finding Mongo when it has to be started create a .cmd file on your desktop and write the path to Mongo. Probably %programfiles%\MongoDB\Server\3.0\bin\mongod.exe. | ||
-7. Create the default folder for mongo to store databases: C:\data\db | ||
- | ||
-**Every command from now on has to be executed from Git Bash. npm install and bower install is downloading components from Git repos and MUST have access to the Git commands** | ||
- | ||
-1. Follow the instructions here [https://github.com/FreeCodeCamp/freecodecamp](https://github.com/FreeCodeCamp/freecodecamp) and clone the project. | ||
-2. Run `npm install` This will produce some warnings and maybe some errors. The warnings and some of the errors can be disregarded. Stackoverflow has large | ||
-resources to solve the errors if they still come up the 2. time you run npm install. | ||
-3. Run `bower install`, `npm install` again and `bower install`again | ||
-4. Start mongo from the desktop shortcut and run `node seed`. You should now see a lot of activity in the window where you started mongo. | ||
-5. Run `gulp` and note what port it starts the site on. (Should be 3000) Open localhost:3000 (or whatever port it started) | ||
- | ||
-**you're good to go** | ||
+# How to clone and setup the FreeCodeCamp website on a Windows pc | ||
+This list works with the FreeCodeCamp site and have been tested on this Angular tutorial [https://docs.angularjs.org/tutorial](https://docs.angularjs.org/tutorial) as well. Setting up the dev environment on a Windows pc is easy although it will give a ton of errors first in the process. The important part is to correct these errors. | ||
+## Toolchain | ||
+1. Git bash [https://msysgit.github.io/](https://msysgit.github.io/) | ||
+2. Node.js [https://nodejs.org/](https://nodejs.org/) | ||
+3. MongoDB [https://www.mongodb.org/downloads](https://www.mongodb.org/downloads) | ||
+4. Python 2.7.10 [https://www.python.org/downloads/release/python-2710/](https://www.python.org/downloads/release/python-2710/) | ||
+ | ||
+Install the 4 downloaded prerequsites. When installing Python and Node it is important to check | ||
+ the option add to the path variable. The Node installer does that by default. It is optional to add Mongo to the path. Python should be installed in a subfolder in %programfiles% | ||
+ | ||
+1. Open a command prompt with admin rights | ||
+2. Verify that Node is in th path with node -v | ||
+3. Verify that npm is in the path with npm -v | ||
+5. `npm install npm -g` | ||
+ `npm install bower -g` | ||
+ `npm install gulp -g` | ||
+ `npm install node-gyp -g` | ||
+ `npm install babel -g` | ||
+6. If you want to spare the time in explorer finding Mongo when it has to be started create a .cmd file on your desktop and write the path to Mongo. Probably %programfiles%\MongoDB\Server\3.0\bin\mongod.exe. | ||
+7. Create the default folder for mongo to store databases: C:\data\db | ||
+ | ||
+**Every command from now on has to be executed from Git Bash. npm install and bower install is downloading components from Git repos and MUST have access to the Git commands** | ||
+ | ||
+1. Follow the instructions here [https://github.com/FreeCodeCamp/freecodecamp](https://github.com/FreeCodeCamp/freecodecamp) and clone the project. | ||
+2. Run `npm install` This will produce some warnings and maybe some errors. The warnings and some of the errors can be disregarded. Stackoverflow has large | ||
+resources to solve the errors if they still come up the 2. time you run npm install. | ||
+3. Run `bower install`, `npm install` again and `bower install`again | ||
+4. Start mongo from the desktop shortcut and run `node seed`. You should now see a lot of activity in the window where you started mongo. | ||
+5. Run `gulp` and note what port it starts the site on. (Should be 3000) Open localhost:3000 (or whatever port it started) | ||
+ | ||
+**you're good to go** |
70
How-to-create-a-Campsite-for-your-city.md
@@ -1,36 +1,36 @@ | ||
-If you didn't see your city on [our list of Campsites](https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites), you should create your own Facebook group for your city. | ||
- | ||
-Please follow these steps: | ||
-- Sign in to Facebook. | ||
-- Click the down arrow in the upper right corner of the screen, then choose "Create Group" from the options. | ||
- | ||
-![A screenshot of Facebook showing the drop down menu that appears when you click the down arrow, with an arrow pointing to the "Create Group" option](https://www.evernote.com/shard/s116/sh/d01bb2bc-6260-4987-bedf-b2ce4c31972f/3eecbcff3109036cf90b69589360f407/deep/0/Facebook.png) | ||
-- Set the group name as "Free Code Camp" plus the proper name of your city. Avoid using slang terms such as "Philly" for "Philadelphia". If your city is not the biggest city that uses its name, also include the state or province. For example, the Free Code Camp group in Paris, France should be called "Free Code Camp Paris". The Free Code Camp group in Paris, Texas should be called "Free Code Camp Paris, Texas". | ||
-- Set your group to public. | ||
-- You'll need to add at least one friend from your city to this group in order to create the group. | ||
- | ||
-![A screenshot of the Facebook group creation modal saying that your group name should be Free Code Camp plus your city name, that your group should be public, and that you need to invite at least one Facebook friend.](https://www.evernote.com/shard/s116/sh/4ed3197c-db1b-4103-a040-b42482ad232a/6c34948ebe12c57f0b7a54d7b2222ab3/deep/0/Facebook.png) | ||
-- Choose the graduation cap icon to indicate that this group is related to a school. | ||
- | ||
-![a screenshot telling you to choose the graduation icon, which is on the forth row of icons, seven icons from the left.](https://www.evernote.com/shard/s116/sh/00e461b3-e0a8-4ecd-9cbf-8b0ae9de75d1/59c4e9f25672b1b2ca2d7e6b06d55e0b/deep/0/Facebook.png) | ||
-- Click the "..." menu, then click "Edit group settings" in the dropdown menu. | ||
- | ||
-![a screenshot telling you to click the "..." button then choose the "Edit group settings" option](https://www.evernote.com/shard/s116/sh/ae9a22e2-19a5-4309-b46c-f05a6be5644c/0870b25572d37d4d650cca1a0d59e407/deep/0/Free-Code-Camp-Testland.png) | ||
-- Set the group's privacy setting to public. | ||
-- Set your group's membership approval to where any member can add or approve members ![a screenshot showing the Facebook settings panel and where you can click to set the group to public and allow all members to be able to add or approve members> | ||
-- Click the "Customize Address" button. | ||
- | ||
-![A screen shot showing you the group description box on the Facebook page.](https://www.evernote.com/l/AHTs6Ec_hylKyYWVhpZonOHPn8j8I5ydgv4B/image.png) | ||
-- Enter "free.code.camp.your.city.name" with each word separated by periods. | ||
- | ||
-![a screenshot telling you to enter free.code.camp.your.city.name with each word seperated by periods.](https://www.evernote.com/shard/s116/sh/357b1bd9-7c40-4f72-8a9a-d918e632a5e8/c4714ca59360b2517dfffe90c60b1556/deep/0/Free-Code-Camp-Testland.png) | ||
-- Please feel free to personalize your city's group description, but be sure to include a link to Free Code Camp: "http://www.freecodecamp.com". | ||
- | ||
-![A screen shot showing you the group description box on the Facebook page.](https://www.evernote.com/shard/s116/sh/e13808ea-f084-46f1-95bc-63db524383d5/0586484d44360e73e9acda956dad7f6a/deep/0/Free-Code-Camp-Testland.png) | ||
-- Click the "Upload a photo button. To start out, you'll probably just want to use Free Code Camp's banner (download it [here](https://s3.amazonaws.com/freecodecamp/wide-social-banner.png)), or a scenic shot of your city. Later you can update this with a picture from one of your city's Free Code Camp events. | ||
- | ||
-![A screenshot showing the "Upload a photo" button.](https://www.evernote.com/shard/s116/sh/fabe226a-5a26-4508-b015-1dac35192a21/37f8119dc57845a31e972217714b038b/deep/0/Free-Code-Camp-Testland.png) | ||
-- [message @quincylarson in Gitter](https://gitter.im/QuincyLarson) with a link to your city's group page. He'll include it on this list. | ||
-- Join our [Local Leaders Facebook group](https://www.facebook.com/groups/freecodecampers/), where we share ideas about involving campers in your city. | ||
- | ||
+If you didn't see your city on [our list of Campsites](https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites), you should create your own Facebook group for your city. | ||
+ | ||
+Please follow these steps: | ||
+- Sign in to Facebook. | ||
+- Click the down arrow in the upper right corner of the screen, then choose "Create Group" from the options. | ||
+ | ||
+![A screenshot of Facebook showing the drop down menu that appears when you click the down arrow, with an arrow pointing to the "Create Group" option](https://www.evernote.com/shard/s116/sh/d01bb2bc-6260-4987-bedf-b2ce4c31972f/3eecbcff3109036cf90b69589360f407/deep/0/Facebook.png) | ||
+- Set the group name as "Free Code Camp" plus the proper name of your city. Avoid using slang terms such as "Philly" for "Philadelphia". If your city is not the biggest city that uses its name, also include the state or province. For example, the Free Code Camp group in Paris, France should be called "Free Code Camp Paris". The Free Code Camp group in Paris, Texas should be called "Free Code Camp Paris, Texas". | ||
+- Set your group to public. | ||
+- You'll need to add at least one friend from your city to this group in order to create the group. | ||
+ | ||
+![A screenshot of the Facebook group creation modal saying that your group name should be Free Code Camp plus your city name, that your group should be public, and that you need to invite at least one Facebook friend.](https://www.evernote.com/shard/s116/sh/4ed3197c-db1b-4103-a040-b42482ad232a/6c34948ebe12c57f0b7a54d7b2222ab3/deep/0/Facebook.png) | ||
+- Choose the graduation cap icon to indicate that this group is related to a school. | ||
+ | ||
+![a screenshot telling you to choose the graduation icon, which is on the forth row of icons, seven icons from the left.](https://www.evernote.com/shard/s116/sh/00e461b3-e0a8-4ecd-9cbf-8b0ae9de75d1/59c4e9f25672b1b2ca2d7e6b06d55e0b/deep/0/Facebook.png) | ||
+- Click the "..." menu, then click "Edit group settings" in the dropdown menu. | ||
+ | ||
+![a screenshot telling you to click the "..." button then choose the "Edit group settings" option](https://www.evernote.com/shard/s116/sh/ae9a22e2-19a5-4309-b46c-f05a6be5644c/0870b25572d37d4d650cca1a0d59e407/deep/0/Free-Code-Camp-Testland.png) | ||
+- Set the group's privacy setting to public. | ||
+- Set your group's membership approval to where any member can add or approve members ![a screenshot showing the Facebook settings panel and where you can click to set the group to public and allow all members to be able to add or approve members> | ||
+- Click the "Customize Address" button. | ||
+ | ||
+![A screen shot showing you the group description box on the Facebook page.](https://www.evernote.com/l/AHTs6Ec_hylKyYWVhpZonOHPn8j8I5ydgv4B/image.png) | ||
+- Enter "free.code.camp.your.city.name" with each word separated by periods. | ||
+ | ||
+![a screenshot telling you to enter free.code.camp.your.city.name with each word seperated by periods.](https://www.evernote.com/shard/s116/sh/357b1bd9-7c40-4f72-8a9a-d918e632a5e8/c4714ca59360b2517dfffe90c60b1556/deep/0/Free-Code-Camp-Testland.png) | ||
+- Please feel free to personalize your city's group description, but be sure to include a link to Free Code Camp: "http://www.freecodecamp.com". | ||
+ | ||
+![A screen shot showing you the group description box on the Facebook page.](https://www.evernote.com/shard/s116/sh/e13808ea-f084-46f1-95bc-63db524383d5/0586484d44360e73e9acda956dad7f6a/deep/0/Free-Code-Camp-Testland.png) | ||
+- Click the "Upload a photo button. To start out, you'll probably just want to use Free Code Camp's banner (download it [here](https://s3.amazonaws.com/freecodecamp/wide-social-banner.png)), or a scenic shot of your city. Later you can update this with a picture from one of your city's Free Code Camp events. | ||
+ | ||
+![A screenshot showing the "Upload a photo" button.](https://www.evernote.com/shard/s116/sh/fabe226a-5a26-4508-b015-1dac35192a21/37f8119dc57845a31e972217714b038b/deep/0/Free-Code-Camp-Testland.png) | ||
+- [message @quincylarson in Gitter](https://gitter.im/QuincyLarson) with a link to your city's group page. He'll include it on this list. | ||
+- Join our [Local Leaders Facebook group](https://www.facebook.com/groups/freecodecampers/), where we share ideas about involving campers in your city. | ||
+ | ||
If you don't have a Facebook account, we strongly recommend you create one, even if it's just for the purpose of coordinating with campers in your city through this group. |
22
How-to-deploy-a-website-without-writing-any-code-at-all.md
@@ -1,12 +1,12 @@ | ||
-It's possible to build dynamic, mobile-responsive websites without writing any code at all, in just a few minutes. | ||
- | ||
-https://player.vimeo.com/video/115194017 | ||
- | ||
-Here are the technologies we used here: | ||
- | ||
-- [atom.io](http://www.atom.io/) a free code editor | ||
-- [startbootstrap.com](http://www.startbootstrap.com/) a collection of free responsive (Bootstrap) templates | ||
-- [powr.io](http://www.powr.io/) a collection of free JavaScript plugins | ||
-- [bitballoon.com](http://www.bitballoon.com/) a tool for drag and drop website deployment | ||
- | ||
+It's possible to build dynamic, mobile-responsive websites without writing any code at all, in just a few minutes. | ||
+ | ||
+https://player.vimeo.com/video/115194017 | ||
+ | ||
+Here are the technologies we used here: | ||
+ | ||
+- [atom.io](http://www.atom.io/) a free code editor | ||
+- [startbootstrap.com](http://www.startbootstrap.com/) a collection of free responsive (Bootstrap) templates | ||
+- [powr.io](http://www.powr.io/) a collection of free JavaScript plugins | ||
+- [bitballoon.com](http://www.bitballoon.com/) a tool for drag and drop website deployment | ||
+ | ||
You will quickly reach the limits of what you can do without actually coding, but it's nice to be able to rapidly build working prototype websites like this. |
40
How-to-get-help-when-you-get-stuck.md
@@ -1,21 +1,21 @@ | ||
-When you get stuck, remember: Read-Search-Ask. | ||
- | ||
-1) **Read** the documentation or error | ||
-2) **Search** Google | ||
-3) **Ask** your friends for help | ||
- | ||
-This is the most time-efficient way to handle being stuck, and it's the most respectful of other people's time, too. | ||
- | ||
-Most of the time, you'll solve your problem after just one or two steps of this algorithm. | ||
- | ||
-We have a special chat room just for getting help: <a href='https://gitter.im/freecodecamp/help/' target='_blank'>https://gitter.im/freecodecamp/help/</a> | ||
- | ||
-Camper Bianca Mihai has also written a 3 article series on what she does when she gets stuck: | ||
- | ||
-[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(I)) | ||
- | ||
-[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(II)) | ||
- | ||
-[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(III)) | ||
- | ||
+When you get stuck, remember: Read-Search-Ask. | ||
+ | ||
+1) **Read** the documentation or error | ||
+2) **Search** Google | ||
+3) **Ask** your friends for help | ||
+ | ||
+This is the most time-efficient way to handle being stuck, and it's the most respectful of other people's time, too. | ||
+ | ||
+Most of the time, you'll solve your problem after just one or two steps of this algorithm. | ||
+ | ||
+We have a special chat room just for getting help: <a href='https://gitter.im/freecodecamp/help/' target='_blank'>https://gitter.im/freecodecamp/help/</a> | ||
+ | ||
+Camper Bianca Mihai has also written a 3 article series on what she does when she gets stuck: | ||
+ | ||
+[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(I)) | ||
+ | ||
+[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(II)) | ||
+ | ||
+[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/How-to-start-when-you-are-stuck-(III)) | ||
+ | ||
Learning to code is hard. But it's a lot easier if you ask for help when you need it! |
192
How-to-get-the-MEAN-stack-running-locally-on-OSX.md
@@ -1,97 +1,97 @@ | ||
-## Requirements | ||
-To install MongoDB, you should have Mac OS X 10.6 (Snow Leopard) or above. To find out which version of OS X you own, click the icon in the top left corner of your screen and select `About This Mac`. | ||
- | ||
-:warning: **WARNING:** do a Time Machine backup before carrying out any of the following steps! | ||
- | ||
-## Step 1: installing MongoDB | ||
-The easiest way to install MongoDB on OS X is using [HomeBrew](http://brew.sh/). If you haven't used HomeBrew before, simply execute the following command in a Terminal window: | ||
-```sh | ||
-ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" | ||
-``` | ||
-After HomeBrew is successfully installed, follow up with this command: | ||
-```sh | ||
-brew update && brew install mongodb | ||
-``` | ||
-HomeBrew will automatically install all the dependencies for you. | ||
- | ||
-## Step 2: installing Node.js | ||
-Again, we'll let HomeBrew do the heavy lifting: | ||
-```sh | ||
-brew install node | ||
-``` | ||
-The npm executable is already included in the Node.js package. | ||
- | ||
-Before continuing, let's make sure Node.js modules can be found by others (:warning: **CAUTION**: it's best to copy and paste these commands, as you'd lose the original contents of your `.bashrc` file if you typed `>` in place of `>>`): | ||
-```sh | ||
-echo 'export NODE_PATH="./node_modules:/usr/local/lib/node_modules"' >> ~/.bashrc && source ~/.bashrc | ||
-``` | ||
-To check if the configuration is in effect, execute: | ||
-```sh | ||
-echo $NODE_PATH | ||
-``` | ||
-You should see `./node_modules:/usr/local/lib/node_modules` printed out below your command. | ||
- | ||
-If you use a different shell than Bash, simply replace `~/.bashrc` with your shell configuration file. | ||
- | ||
-## Step 3: installing fullstack tools | ||
-```sh | ||
-npm install -g express yo grunt grunt-cli generator-angular-fullstack bower | ||
-``` | ||
- | ||
-## Step 4: generating a fullstack app | ||
-Make a directory for your Basejump projects. Assuming your desktop is your de facto workspace: | ||
-```sh | ||
-mkdir ~/Desktop/basejumps && cd ~/Desktop/basejumps | ||
-``` | ||
-Now that all the preparations are in place, it's time for the main event: | ||
-```sh | ||
-yo angular-fullstack | ||
-``` | ||
-Answer the questions according to checklist items #13-23 of [Waypoint: Get Set for Basejumps](http://www.freecodecamp.com/challenges/waypoint-get-set-for-basejumps). Consult #24-27 if you run into errors. This will download ~350MB worth of files into your current directory. | ||
- | ||
-Before going any further, we need to fix a [known issue](https://github.com/clnhll/guidetobasejumps#fixing-exportsupdate) in some generated files: | ||
-```sh | ||
-echo "sed -i '' -e 's/_.merge/_.extend/' server/api/*/*.controller.js" > \ | ||
-fix-exports-update.sh && chmod +x fix-exports-update.sh && \ | ||
-./fix-exports-update.sh | ||
-``` | ||
-You need to run `./fix-exports-update.sh` every time you generate a new API endpoint (until they fix this upstream, that is). | ||
- | ||
-## Step 5: initialising local Git repository | ||
-Tell Git not to track your database: | ||
-```sh | ||
-echo "data" >> .gitignore | ||
-``` | ||
- | ||
-Turn the directory in which your application is located into a Git repository by running the following commands: | ||
-```sh | ||
-git init && git add . && git commit -am 'initial commit' | ||
-``` | ||
- | ||
-## Step 6: starting MongoDB | ||
-To start MongoDB for the first time in your app's directory, run the following commands in your terminal: | ||
-```sh | ||
-mkdir data && echo 'mongod --config /usr/local/etc/mongod.conf --dbpath=data --rest "$@" --httpinterface' > mongod.sh && chmod a+x mongod.sh && ./mongod.sh | ||
-``` | ||
-From this point on you can simply start MongoDB by executing `./mongod.sh`. A few things to note: | ||
-* The `.conf` file directs `mongod` to write messages to a log file instead of stdout. To view the log, run the following in a separate Terminal tab: `less /usr/local/var/log/mongodb/mongo.log`. | ||
-* Since we're not on Cloud9, we don't need the `--nojournal` option. Journaling lets you recover the database in case of a `mongod` crash. | ||
-* You have to make a clean database for each project. If you copied the `data` directory over from an earlier project, `mongod` will fail to start. If that's the case, just `rm -rf data && mkdir data && ./mongod.sh`. | ||
- | ||
-## Step 7: starting Grunt | ||
-Open a new Terminal tab by pressing `⌘T`, and run the following command: | ||
-```sh | ||
-grunt serve | ||
-``` | ||
-Grunt should automatically open your new Angular site's index page as soon as it finishes starting up. | ||
- | ||
-Now you should be able to follow the rest of the Waypoint instructions to push to GitHub and Heroku. Just ignore the part about SSH key (#33-36) and replace `~/workspace` with your app directory's path. | ||
- | ||
-*** | ||
- | ||
-##### Footnote | ||
-The above steps were tested under the following configuration: | ||
-* OS X 10.10.5 | ||
-* zsh 5.0.8 (x86_64-apple-darwin14.3.0) | ||
-* node v0.12.7 | ||
+## Requirements | ||
+To install MongoDB, you should have Mac OS X 10.6 (Snow Leopard) or above. To find out which version of OS X you own, click the icon in the top left corner of your screen and select `About This Mac`. | ||
+ | ||
+:warning: **WARNING:** do a Time Machine backup before carrying out any of the following steps! | ||
+ | ||
+## Step 1: installing MongoDB | ||
+The easiest way to install MongoDB on OS X is using [HomeBrew](http://brew.sh/). If you haven't used HomeBrew before, simply execute the following command in a Terminal window: | ||
+```sh | ||
+ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" | ||
+``` | ||
+After HomeBrew is successfully installed, follow up with this command: | ||
+```sh | ||
+brew update && brew install mongodb | ||
+``` | ||
+HomeBrew will automatically install all the dependencies for you. | ||
+ | ||
+## Step 2: installing Node.js | ||
+Again, we'll let HomeBrew do the heavy lifting: | ||
+```sh | ||
+brew install node | ||
+``` | ||
+The npm executable is already included in the Node.js package. | ||
+ | ||
+Before continuing, let's make sure Node.js modules can be found by others (:warning: **CAUTION**: it's best to copy and paste these commands, as you'd lose the original contents of your `.bashrc` file if you typed `>` in place of `>>`): | ||
+```sh | ||
+echo 'export NODE_PATH="./node_modules:/usr/local/lib/node_modules"' >> ~/.bashrc && source ~/.bashrc | ||
+``` | ||
+To check if the configuration is in effect, execute: | ||
+```sh | ||
+echo $NODE_PATH | ||
+``` | ||
+You should see `./node_modules:/usr/local/lib/node_modules` printed out below your command. | ||
+ | ||
+If you use a different shell than Bash, simply replace `~/.bashrc` with your shell configuration file. | ||
+ | ||
+## Step 3: installing fullstack tools | ||
+```sh | ||
+npm install -g express yo grunt grunt-cli generator-angular-fullstack bower | ||
+``` | ||
+ | ||
+## Step 4: generating a fullstack app | ||
+Make a directory for your Basejump projects. Assuming your desktop is your de facto workspace: | ||
+```sh | ||
+mkdir ~/Desktop/basejumps && cd ~/Desktop/basejumps | ||
+``` | ||
+Now that all the preparations are in place, it's time for the main event: | ||
+```sh | ||
+yo angular-fullstack | ||
+``` | ||
+Answer the questions according to checklist items #13-23 of [Waypoint: Get Set for Basejumps](http://www.freecodecamp.com/challenges/waypoint-get-set-for-basejumps). Consult #24-27 if you run into errors. This will download ~350MB worth of files into your current directory. | ||
+ | ||
+Before going any further, we need to fix a [known issue](https://github.com/clnhll/guidetobasejumps#fixing-exportsupdate) in some generated files: | ||
+```sh | ||
+echo "sed -i '' -e 's/_.merge/_.extend/' server/api/*/*.controller.js" > \ | ||
+fix-exports-update.sh && chmod +x fix-exports-update.sh && \ | ||
+./fix-exports-update.sh | ||
+``` | ||
+You need to run `./fix-exports-update.sh` every time you generate a new API endpoint (until they fix this upstream, that is). | ||
+ | ||
+## Step 5: initialising local Git repository | ||
+Tell Git not to track your database: | ||
+```sh | ||
+echo "data" >> .gitignore | ||
+``` | ||
+ | ||
+Turn the directory in which your application is located into a Git repository by running the following commands: | ||
+```sh | ||
+git init && git add . && git commit -am 'initial commit' | ||
+``` | ||
+ | ||
+## Step 6: starting MongoDB | ||
+To start MongoDB for the first time in your app's directory, run the following commands in your terminal: | ||
+```sh | ||
+mkdir data && echo 'mongod --config /usr/local/etc/mongod.conf --dbpath=data --rest "$@" --httpinterface' > mongod.sh && chmod a+x mongod.sh && ./mongod.sh | ||
+``` | ||
+From this point on you can simply start MongoDB by executing `./mongod.sh`. A few things to note: | ||
+* The `.conf` file directs `mongod` to write messages to a log file instead of stdout. To view the log, run the following in a separate Terminal tab: `less /usr/local/var/log/mongodb/mongo.log`. | ||
+* Since we're not on Cloud9, we don't need the `--nojournal` option. Journaling lets you recover the database in case of a `mongod` crash. | ||
+* You have to make a clean database for each project. If you copied the `data` directory over from an earlier project, `mongod` will fail to start. If that's the case, just `rm -rf data && mkdir data && ./mongod.sh`. | ||
+ | ||
+## Step 7: starting Grunt | ||
+Open a new Terminal tab by pressing `⌘T`, and run the following command: | ||
+```sh | ||
+grunt serve | ||
+``` | ||
+Grunt should automatically open your new Angular site's index page as soon as it finishes starting up. | ||
+ | ||
+Now you should be able to follow the rest of the Waypoint instructions to push to GitHub and Heroku. Just ignore the part about SSH key (#33-36) and replace `~/workspace` with your app directory's path. | ||
+ | ||
+*** | ||
+ | ||
+##### Footnote | ||
+The above steps were tested under the following configuration: | ||
+* OS X 10.10.5 | ||
+* zsh 5.0.8 (x86_64-apple-darwin14.3.0) | ||
+* node v0.12.7 | ||
* npm 2.11.3 |
32
How-to-install-Screenhero.md
@@ -1,17 +1,17 @@ | ||
-[Download for Mac](http://links.screenhero.com/e/c/eyJlbWFpbF9pZCI6Ik1qQTNNem9XQkNJQ1pBQUNjd0FYQVZrVEdnRkxNamtfX0JWZEdGVEpSZkVCWlRwbFpXRTBNamM0WVMxaE56SmlMVEV4WlRRdE9HUXpZUzFpWXpVNE1HRTJNalkxTldNNk1UUTJNVEEyQUE9PSIsInBvc2l0aW9uIjowLCJocmVmIjoiaHR0cDovL2RsLnNjcmVlbmhlcm8uY29tL3NtYXJ0ZG93bmxvYWQvZklYQU1UUUJBTEtQQkhQTC9TY3JlZW5oZXJvLnppcD9zb3VyY2U9d2ViIn0=) | ||
- | ||
-[Download for Windows](http://links.screenhero.com/e/c/eyJlbWFpbF9pZCI6Ik1qQTNNem9XQkNJQ1pBQUNjd0FYQVZrVEdnRkxNamtfX0JWZEdGVEpSZkVCWlRwbFpXRTBNamM0WVMxaE56SmlMVEV4WlRRdE9HUXpZUzFpWXpVNE1HRTJNalkxTldNNk1UUTJNVEEyQUE9PSIsInBvc2l0aW9uIjoxLCJocmVmIjoiaHR0cDovL2RsLnNjcmVlbmhlcm8uY29tL3NtYXJ0ZG93bmxvYWQvZklYQU1UUUJBTEtQQkhQTC9TY3JlZW5oZXJvLXNldHVwLmV4ZSJ9) | ||
- | ||
-You'll use Screenhero to pair program on the Bonfires and Zipline challenges. | ||
- | ||
-Here are other alternatives to Screenhero as suggested by our fellow campers: | ||
- | ||
-* TeamViewer (also works for Linux) | ||
-* Skype + ScreenLeap | ||
-* Codeshare.io | ||
-* Kobra.io | ||
-* Google Hangouts | ||
-* jsbin | ||
-* Cloud 9 | ||
-* Appear.in | ||
+[Download for Mac](http://links.screenhero.com/e/c/eyJlbWFpbF9pZCI6Ik1qQTNNem9XQkNJQ1pBQUNjd0FYQVZrVEdnRkxNamtfX0JWZEdGVEpSZkVCWlRwbFpXRTBNamM0WVMxaE56SmlMVEV4WlRRdE9HUXpZUzFpWXpVNE1HRTJNalkxTldNNk1UUTJNVEEyQUE9PSIsInBvc2l0aW9uIjowLCJocmVmIjoiaHR0cDovL2RsLnNjcmVlbmhlcm8uY29tL3NtYXJ0ZG93bmxvYWQvZklYQU1UUUJBTEtQQkhQTC9TY3JlZW5oZXJvLnppcD9zb3VyY2U9d2ViIn0=) | ||
+ | ||
+[Download for Windows](http://links.screenhero.com/e/c/eyJlbWFpbF9pZCI6Ik1qQTNNem9XQkNJQ1pBQUNjd0FYQVZrVEdnRkxNamtfX0JWZEdGVEpSZkVCWlRwbFpXRTBNamM0WVMxaE56SmlMVEV4WlRRdE9HUXpZUzFpWXpVNE1HRTJNalkxTldNNk1UUTJNVEEyQUE9PSIsInBvc2l0aW9uIjoxLCJocmVmIjoiaHR0cDovL2RsLnNjcmVlbmhlcm8uY29tL3NtYXJ0ZG93bmxvYWQvZklYQU1UUUJBTEtQQkhQTC9TY3JlZW5oZXJvLXNldHVwLmV4ZSJ9) | ||
+ | ||
+You'll use Screenhero to pair program on the Bonfires and Zipline challenges. | ||
+ | ||
+Here are other alternatives to Screenhero as suggested by our fellow campers: | ||
+ | ||
+* TeamViewer (also works for Linux) | ||
+* Skype + ScreenLeap | ||
+* Codeshare.io | ||
+* Kobra.io | ||
+* Google Hangouts | ||
+* jsbin | ||
+* Cloud 9 | ||
+* Appear.in | ||
* [tmate](http://tmate.io) + some communication tool, e.g, Google Hangouts, Skype, [appear.in](http://appear.in) |
32
How-to-know-who-is-in-charge-of-your-Campsite-on-Facebook.md
@@ -1,17 +1,17 @@ | ||
-Local communities are ever-changing, and there can be more than one Volunteer Community Manager for your city. To become an Admin in the Facebook group, follow the steps below. | ||
- | ||
-How to find out who is an Admin for your Campsite: | ||
- | ||
-* First, click the Members tab below the cover photo. Then the click on the dropdown box that says "all members"** | ||
- | ||
-![](http://i.imgur.com/qLx6kVZ.png?1) | ||
- | ||
-* Next, use the drop down box to select "Admins"** | ||
- | ||
-![](http://i.imgur.com/pfB2pDP.png?1) | ||
- | ||
-* You should now be able to see who is designated as an Admin for your Campsite. | ||
- | ||
-![](http://i.imgur.com/AwoYT01.png?1) | ||
- | ||
+Local communities are ever-changing, and there can be more than one Volunteer Community Manager for your city. To become an Admin in the Facebook group, follow the steps below. | ||
+ | ||
+How to find out who is an Admin for your Campsite: | ||
+ | ||
+* First, click the Members tab below the cover photo. Then the click on the dropdown box that says "all members"** | ||
+ | ||
+![](http://i.imgur.com/qLx6kVZ.png?1) | ||
+ | ||
+* Next, use the drop down box to select "Admins"** | ||
+ | ||
+![](http://i.imgur.com/pfB2pDP.png?1) | ||
+ | ||
+* You should now be able to see who is designated as an Admin for your Campsite. | ||
+ | ||
+![](http://i.imgur.com/AwoYT01.png?1) | ||
+ | ||
Message this person to introduce yourself and let them know you're interested in being an admin. After this, go schedule your first meetup. |
18
How-to-share-your-workspace-selfie-with-FreeCodeCamp-on-instagram.md
@@ -1,9 +1,9 @@ | ||
-# FreeCodecamp is on instagram! Here is how to take a workspace selfie and share it with us. | ||
- | ||
-## Take a selfie of you at your workspace with Free Code Camp open. | ||
- | ||
-![](https://www.evernote.com/l/AkpdrY2nGrtBO69RoxdNq8rluri5K7B367YB/image.png) | ||
- | ||
-## Share it on Instagram, Twitter or Facebook with the hashtag #freecodecamp. | ||
- | ||
-## Social media not your thing? No problem! Email your workspace selfie to team@freecodecamp.com | ||
+# FreeCodecamp is on instagram! Here is how to take a workspace selfie and share it with us. | ||
+ | ||
+## Take a selfie of you at your workspace with Free Code Camp open. | ||
+ | ||
+![](https://www.evernote.com/l/AkpdrY2nGrtBO69RoxdNq8rluri5K7B367YB/image.png) | ||
+ | ||
+## Share it on Instagram, Twitter or Facebook with the hashtag #freecodecamp. | ||
+ | ||
+## Social media not your thing? No problem! Email your workspace selfie to team@freecodecamp.com |
40
How-to-start-when-you-are-stuck-(I).md
@@ -1,21 +1,21 @@ | ||
-**[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(II))** | ||
- | ||
-**[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(III))** | ||
- | ||
-You are a camper just like me, you get to an exercise and you get stuck … just like anyone else. You have no idea how to start, you stare at your editor and you think you must have a problem, surely you are not developer material … well you’re wrong! Perhaps you are just like me? I’m a visual person, I like a drawing better than a text. Everytime the same problem put down in a schema makes more sense to me than if you gave me a text. So … what do I do when I have problems solving/understanding an exercise? I start to draw. After I have my drawing in place if I need more to translate it to code I can also write it in pseudocode. After that transposing it to code should not be very hard. | ||
- | ||
-### So what are this flowcharts (the drawings) and pseudocode? | ||
- | ||
-During my first semester in college, we had a course about introduction to algorithms. This is where we first learned about this stuff. We learned that a good algorithm and good logical programing is developed using flowcharts and pseudocode. | ||
- | ||
-A **flowchart** represents your program flow from top to bottom. Each command is represented on this. Depending on the nature of the command there are different shapes you can use. A few of them that I mostly use (you can google more on this, google is your friend when you know what to google for) are: | ||
- | ||
-![](http://biancamihai.github.io/img/flowchart-theory.png) | ||
- | ||
-More information about this you can find here https://en.wikipedia.org/wiki/Flowchart. | ||
- | ||
-**Pseudocode** is an informal language that helps developers write algorithms. It is a text-based design tool and it uses a human readable language. It’s a structured english text that describes an algorithm. | ||
- | ||
-Every bonfire in Free Code Camp curriculum can be solved using pseudocode and after that translated using javascript in a functional javascript code. | ||
- | ||
+**[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(II))** | ||
+ | ||
+**[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(III))** | ||
+ | ||
+You are a camper just like me, you get to an exercise and you get stuck … just like anyone else. You have no idea how to start, you stare at your editor and you think you must have a problem, surely you are not developer material … well you’re wrong! Perhaps you are just like me? I’m a visual person, I like a drawing better than a text. Everytime the same problem put down in a schema makes more sense to me than if you gave me a text. So … what do I do when I have problems solving/understanding an exercise? I start to draw. After I have my drawing in place if I need more to translate it to code I can also write it in pseudocode. After that transposing it to code should not be very hard. | ||
+ | ||
+### So what are this flowcharts (the drawings) and pseudocode? | ||
+ | ||
+During my first semester in college, we had a course about introduction to algorithms. This is where we first learned about this stuff. We learned that a good algorithm and good logical programing is developed using flowcharts and pseudocode. | ||
+ | ||
+A **flowchart** represents your program flow from top to bottom. Each command is represented on this. Depending on the nature of the command there are different shapes you can use. A few of them that I mostly use (you can google more on this, google is your friend when you know what to google for) are: | ||
+ | ||
+![](http://biancamihai.github.io/img/flowchart-theory.png) | ||
+ | ||
+More information about this you can find here https://en.wikipedia.org/wiki/Flowchart. | ||
+ | ||
+**Pseudocode** is an informal language that helps developers write algorithms. It is a text-based design tool and it uses a human readable language. It’s a structured english text that describes an algorithm. | ||
+ | ||
+Every bonfire in Free Code Camp curriculum can be solved using pseudocode and after that translated using javascript in a functional javascript code. | ||
+ | ||
**[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(II))** |
58
How-to-start-when-you-are-stuck-(II).md
@@ -1,30 +1,30 @@ | ||
-**[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(I))** | ||
- | ||
-**[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(III))** | ||
- | ||
-Let’s try an example. If we take a look at one of the Free Code Camp exercices, and let’s choose a more simple one: [find the longest word in a string](http://www.freecodecamp.com/challenges/bonfire-find-the-longest-word-in-a-string). We can start and draw a flowchart for it and write a first solution in pseudocode. | ||
- | ||
-![](http://biancamihai.github.io/img/bonfire-1.png) | ||
- | ||
-So what does Free Code Camp want from us with this problem? Well it wants as to create a function that gets a string as a parameter and returns an integer. This integer should represent the length of the longest word in this string. Usually you can solve a problem on Free Code Camp by just looking at the **More information** text. In this case Free code camp is giving us some very good tips: | ||
- | ||
- Return the length of the longest word in the provided sentence. | ||
- Your response should be a number. | ||
- Remember to use RSAP if you get stuck. Try to pair program. Write your own code. | ||
- Here are some helpful links: String.split(), String.length | ||
- | ||
-If we take a look at the Free Code Camp suggestions we’ll see that String.split() can be used to split a string into an array and String.length gives us the length of a string. This helps us think of an algorithm. What if we split the string into an array, we loop through it and using the length attribute we find out the length of the longest word. Hmm, doesn’t seem very complicated but how to start this? Well ... take a look at the image below. | ||
- | ||
-![](http://biancamihai.github.io/img/flowchart.png) | ||
- | ||
-If we follow the schema AND/OR the pseudocode, writing the function that gives us the length of the longest word in a string shouldn’t be very hard now … in any language … not just in javascript. | ||
- | ||
-![](http://biancamihai.github.io/img/bonfire-2.png) | ||
- | ||
-Now that we have this first working version, we can try and rewrite it using a for loop. Or we can take a look at forEach and if we really want to go wild we can rewrite this using the functional programming way. So let’s challenge ourselves to write a “one line” solution for the problem. | ||
- | ||
-Searching through the MDN documentation you’ll find out that you can use the max function on arrays and that there is a map function that helps us change the current array. Hmm … that should should help us … right? Yes! the idea remains the same, you get a string, split it into an array and you return an integer but here is how: | ||
- | ||
-![](http://biancamihai.github.io/img/bonfire-3.png) | ||
- | ||
+**[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(I))** | ||
+ | ||
+**[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(III))** | ||
+ | ||
+Let’s try an example. If we take a look at one of the Free Code Camp exercices, and let’s choose a more simple one: [find the longest word in a string](http://www.freecodecamp.com/challenges/bonfire-find-the-longest-word-in-a-string). We can start and draw a flowchart for it and write a first solution in pseudocode. | ||
+ | ||
+![](http://biancamihai.github.io/img/bonfire-1.png) | ||
+ | ||
+So what does Free Code Camp want from us with this problem? Well it wants as to create a function that gets a string as a parameter and returns an integer. This integer should represent the length of the longest word in this string. Usually you can solve a problem on Free Code Camp by just looking at the **More information** text. In this case Free code camp is giving us some very good tips: | ||
+ | ||
+ Return the length of the longest word in the provided sentence. | ||
+ Your response should be a number. | ||
+ Remember to use RSAP if you get stuck. Try to pair program. Write your own code. | ||
+ Here are some helpful links: String.split(), String.length | ||
+ | ||
+If we take a look at the Free Code Camp suggestions we’ll see that String.split() can be used to split a string into an array and String.length gives us the length of a string. This helps us think of an algorithm. What if we split the string into an array, we loop through it and using the length attribute we find out the length of the longest word. Hmm, doesn’t seem very complicated but how to start this? Well ... take a look at the image below. | ||
+ | ||
+![](http://biancamihai.github.io/img/flowchart.png) | ||
+ | ||
+If we follow the schema AND/OR the pseudocode, writing the function that gives us the length of the longest word in a string shouldn’t be very hard now … in any language … not just in javascript. | ||
+ | ||
+![](http://biancamihai.github.io/img/bonfire-2.png) | ||
+ | ||
+Now that we have this first working version, we can try and rewrite it using a for loop. Or we can take a look at forEach and if we really want to go wild we can rewrite this using the functional programming way. So let’s challenge ourselves to write a “one line” solution for the problem. | ||
+ | ||
+Searching through the MDN documentation you’ll find out that you can use the max function on arrays and that there is a map function that helps us change the current array. Hmm … that should should help us … right? Yes! the idea remains the same, you get a string, split it into an array and you return an integer but here is how: | ||
+ | ||
+![](http://biancamihai.github.io/img/bonfire-3.png) | ||
+ | ||
**[How to start when you are stuck (III)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(III))** |
26
How-to-start-when-you-are-stuck-(III).md
@@ -1,14 +1,14 @@ | ||
-**[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(I))** | ||
- | ||
-**[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(II))** | ||
- | ||
-### Tips | ||
- | ||
-* Always look at your logs, keep your console open. You can spot errors faster this way. To open the console log on chrome: click right -> inspect -> console There are so many errors that come from typos and so much time lost that you can save just by developing this very simple habit | ||
-* Pair with other programmers as much as you can | ||
-* Read the documentation. You can install a very helpful [MDN Chrome Extension](https://chrome.google.com/webstore/detail/mdn-search/ffpifaemeofjmncjdbegmbpcdaemkeoc) and use it as much and often as you need to | ||
-* Follow the help tips provided by Free Code Camp in the “More informations” section. The answer is there! | ||
-* Try to solve the problem in more than one way, always try to make it better, more readable, a lower complexity time, less memory | ||
-* If none of the above steps work, ask for help :) | ||
- | ||
+**[How to start when you are stuck (I)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(I))** | ||
+ | ||
+**[How to start when you are stuck (II)](https://github.com/FreeCodeCamp/freecodecamp/wiki/How-to-start-when-you-are-stuck-(II))** | ||
+ | ||
+### Tips | ||
+ | ||
+* Always look at your logs, keep your console open. You can spot errors faster this way. To open the console log on chrome: click right -> inspect -> console There are so many errors that come from typos and so much time lost that you can save just by developing this very simple habit | ||
+* Pair with other programmers as much as you can | ||
+* Read the documentation. You can install a very helpful [MDN Chrome Extension](https://chrome.google.com/webstore/detail/mdn-search/ffpifaemeofjmncjdbegmbpcdaemkeoc) and use it as much and often as you need to | ||
+* Follow the help tips provided by Free Code Camp in the “More informations” section. The answer is there! | ||
+* Try to solve the problem in more than one way, always try to make it better, more readable, a lower complexity time, less memory | ||
+* If none of the above steps work, ask for help :) | ||
+ | ||
![](http://biancamihai.github.io/img/console.png) |
36
How-to-use-the-Free-Code-Camp-Wiki.md
@@ -1,18 +1,18 @@ | ||
-The Free Code Camp wiki exists to provide clear answers to common questions about Free Code Camp, learning to code, and getting a coding job. Please feel free to add relevant content to the wiki. Just be sure to search for a topic and see if it already exists before starting a new page. | ||
- | ||
-Individual Wiki's can be accessed from the main page, or from other linked Wiki pages. | ||
- | ||
-You can also access them from Gitter using Camperbot | ||
- | ||
-- #### **`help $topic`** | ||
- find related materials to that topic, usually a page from the [wiki] | ||
- (https://github.com/FreeCodeCamp/freecodecamp/wiki) | ||
- examples: `help css` `help bootstrap` | ||
- | ||
-- #### `topics` | ||
- show the list of topics. | ||
- | ||
-- #### `find $topic` | ||
- this will search for entries that include `$topic` in the title. We'll add fulltext search in | ||
- future. | ||
- examples: `find wiki` | ||
+The Free Code Camp wiki exists to provide clear answers to common questions about Free Code Camp, learning to code, and getting a coding job. Please feel free to add relevant content to the wiki. Just be sure to search for a topic and see if it already exists before starting a new page. | ||
+ | ||
+Individual Wiki's can be accessed from the main page, or from other linked Wiki pages. | ||
+ | ||
+You can also access them from Gitter using Camperbot | ||
+ | ||
+- #### **`help $topic`** | ||
+ find related materials to that topic, usually a page from the [wiki] | ||
+ (https://github.com/FreeCodeCamp/freecodecamp/wiki) | ||
+ examples: `help css` `help bootstrap` | ||
+ | ||
+- #### `topics` | ||
+ show the list of topics. | ||
+ | ||
+- #### `find $topic` | ||
+ this will search for entries that include `$topic` in the title. We'll add fulltext search in | ||
+ future. | ||
+ examples: `find wiki` |
40
How-you-can-get-to-Inbox-Zero-with-Gmail-shortcuts.md
@@ -1,21 +1,21 @@ | ||
-> These Gmail Shortcuts will save you hours and help you get to Inbox Zero. | ||
- | ||
-See https://player.vimeo.com/video/115194016 | ||
- | ||
-### Gmail Shortcuts | ||
-| shortcut | description | | ||
-|---------- |------------: | | ||
-| j | move down | | ||
-| k | move up | | ||
-| o | open | | ||
-| r | reply | | ||
-| a | reply all | | ||
-| f | forward | | ||
-| c | compose | | ||
-| x | select | | ||
-| e | archive | | ||
-| ! | mark spam | | ||
-| z | undo | | ||
-| \# | *delete | | ||
- | ||
+> These Gmail Shortcuts will save you hours and help you get to Inbox Zero. | ||
+ | ||
+See https://player.vimeo.com/video/115194016 | ||
+ | ||
+### Gmail Shortcuts | ||
+| shortcut | description | | ||
+|---------- |------------: | | ||
+| j | move down | | ||
+| k | move up | | ||
+| o | open | | ||
+| r | reply | | ||
+| a | reply all | | ||
+| f | forward | | ||
+| c | compose | | ||
+| x | select | | ||
+| e | archive | | ||
+| ! | mark spam | | ||
+| z | undo | | ||
+| \# | *delete | | ||
+ | ||
\* This may not work on some EU Mac keyboards where # is accessed with, `ALT + 3`. Workaround [here](http://toodlepip.co.uk/2010/blog-2010-09-gmail-delete-key-shortcut-uk-apple-users/). |
18
How-you-can-help-to-stimulate-your-city's-Campsite-on-Facebook.md
@@ -1,10 +1,10 @@ | ||
- | ||
-## A great way to stimulate your Campsite is by asking questions. | ||
-**You can ask questions like** | ||
-* What is everyone working on this week? | ||
-* How did you approach a specific waypoint, bonfire, zipline, basejump? | ||
-* Would anyone be interested in meeting up to pair program together this week? | ||
-* Did everyone hear about "insert recent announcement" | ||
-* What are some parts of free code camp you'd like to give additional focus to? | ||
- | ||
+ | ||
+## A great way to stimulate your Campsite is by asking questions. | ||
+**You can ask questions like** | ||
+* What is everyone working on this week? | ||
+* How did you approach a specific waypoint, bonfire, zipline, basejump? | ||
+* Would anyone be interested in meeting up to pair program together this week? | ||
+* Did everyone hear about "insert recent announcement" | ||
+* What are some parts of free code camp you'd like to give additional focus to? | ||
+ | ||
**You can also provide useful links for other members to relevant resources that you find helpful.** |
14
How-you-can-reach-the-Free-Code-Camp-team-to-interview-them-for-your-publication.md
@@ -1,8 +1,8 @@ | ||
-We're happy to do a quick interview for your publication or show. Here's whom you should contact about what, and how to best reach them: | ||
- | ||
-- Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's [@ossia on Twitter](https://twitter.com/ossia)</a> and @quincylarson on Gitter. | ||
-- Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Berkeley Martinez. He's [@berkeleytrue on Twitter](https://twitter.com/berkeleytrue) and @berkeleytrue on Gitter. | ||
-- Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's [@figitalboy on Twitter](https://twitter.com/figitalboy) and @codenonprofit on Gitter. | ||
-- Want to get a camper's perspective on our community? Talk with Bianca Mihai. She's [@bubuslubu on Twitter](https://twitter.com/bubuslubu) and @biancamihai on Gitter. Or you can talk with Suzanne Atkinson. She's [@steelcitycoach on Twitter](https://twitter.com/SteelCityCoach) and @adventurebear on Gitter. | ||
- | ||
+We're happy to do a quick interview for your publication or show. Here's whom you should contact about what, and how to best reach them: | ||
+ | ||
+- Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's [@ossia on Twitter](https://twitter.com/ossia)</a> and @quincylarson on Gitter. | ||
+- Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Berkeley Martinez. He's [@berkeleytrue on Twitter](https://twitter.com/berkeleytrue) and @berkeleytrue on Gitter. | ||
+- Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's [@figitalboy on Twitter](https://twitter.com/figitalboy) and @codenonprofit on Gitter. | ||
+- Want to get a camper's perspective on our community? Talk with Bianca Mihai. She's [@bubuslubu on Twitter](https://twitter.com/bubuslubu) and @biancamihai on Gitter. Or you can talk with Suzanne Atkinson. She's [@steelcitycoach on Twitter](https://twitter.com/SteelCityCoach) and @adventurebear on Gitter. | ||
+ | ||
We strive to be helpful and transparent in everything we do. We'll do what we can to help you share our community with your audience. |
58
Html-and-CSS-Cheat-Sheet.md
@@ -1,30 +1,30 @@ | ||
-# This a page that (hopefully) in time will grow to cover the basic and simple HTML and CSS solutions. | ||
-### Please add to your alternate solutions if you know a different way. | ||
- | ||
-## <hr> making a `<hr>` horizontal rule smaller | ||
- hr { | ||
- width: 75%; | ||
- margin-left: auto; | ||
- margin-right: auto; | ||
- } | ||
-<hr> | ||
-### Giving a `<div>` non scrolling background | ||
- | ||
- | ||
- #divName { | ||
- padding-top: 50px; | ||
- height: 500px; | ||
- color: #fff; | ||
- background-image: url("your_url.jpg"); | ||
- background-repeat: no-repeat; | ||
- background-attachment: fixed; | ||
- background-size: 100%; | ||
- } | ||
-try different values to see the how it affects the div<br> | ||
-and over in the html<br> | ||
- `<div id="divName" class="container-fluid">` | ||
-<hr> | ||
-### Center a horizontal list | ||
- | ||
-http://csswizardry.com/2011/01/create-a-centred-horizontal-navigation/ | ||
+# This a page that (hopefully) in time will grow to cover the basic and simple HTML and CSS solutions. | ||
+### Please add to your alternate solutions if you know a different way. | ||
+ | ||
+## <hr> making a `<hr>` horizontal rule smaller | ||
+ hr { | ||
+ width: 75%; | ||
+ margin-left: auto; | ||
+ margin-right: auto; | ||
+ } | ||
+<hr> | ||
+### Giving a `<div>` non scrolling background | ||
+ | ||
+ | ||
+ #divName { | ||
+ padding-top: 50px; | ||
+ height: 500px; | ||
+ color: #fff; | ||
+ background-image: url("your_url.jpg"); | ||
+ background-repeat: no-repeat; | ||
+ background-attachment: fixed; | ||
+ background-size: 100%; | ||
+ } | ||
+try different values to see the how it affects the div<br> | ||
+and over in the html<br> | ||
+ `<div id="divName" class="container-fluid">` | ||
+<hr> | ||
+### Center a horizontal list | ||
+ | ||
+http://csswizardry.com/2011/01/create-a-centred-horizontal-navigation/ | ||
<hr> |
16
IIFE.md
@@ -1,9 +1,9 @@ | ||
-> IIFE — initialism for Immediately Invoked Function Expression | ||
- | ||
-Keep your data inside the [closure](https://github.com/freecodecamp/freecodecamp/wiki/js-closures)! | ||
- | ||
-```js | ||
-(function(){ | ||
- //add your magic here | ||
-})(); | ||
+> IIFE — initialism for Immediately Invoked Function Expression | ||
+ | ||
+Keep your data inside the [closure](https://github.com/freecodecamp/freecodecamp/wiki/js-closures)! | ||
+ | ||
+```js | ||
+(function(){ | ||
+ //add your magic here | ||
+})(); | ||
``` |
12
If-Free-Code-Camp-is-free,-how-does-it-make-money.md
@@ -1,7 +1,7 @@ | ||
-We will always be completely free for both students and for nonprofits. | ||
- | ||
-Our name is Free Code Camp. We are a free code camp. If you had to pay us (or sign over future earnings), we'd have to change our name. And we are not going to do that. | ||
- | ||
-Everyone working on our community and our open source projects is a volunteer. | ||
- | ||
+We will always be completely free for both students and for nonprofits. | ||
+ | ||
+Our name is Free Code Camp. We are a free code camp. If you had to pay us (or sign over future earnings), we'd have to change our name. And we are not going to do that. | ||
+ | ||
+Everyone working on our community and our open source projects is a volunteer. | ||
+ | ||
We plan to eventually cover our operational costs by earning job placement bonuses from companies who hire our graduates. Note that we will not actually garnish any wages from our graduates - employers are already paying recruiters thousands of dollars to find successful candidates. Employers will simply pay the recruitment bonus to Free Code Camp instead of paying a recruiter. |
16
Intro-to-Yeoman-Angular-Fullstack-Basejumps.md
@@ -1,9 +1,9 @@ | ||
-> Hey FreeCodeCampers! This guide is here to help you navigate creating your first basejump. When I encountered the first basejump, I had no idea what was going on and spent weeks learning all of these things myself. Everything here is stuff I wish I had known coming into the basejumps. Oh and by the way, if you have a question that isn't answered by this guide, that's an issue, and you should report it as an issue to this repository! —[@clnhll](http://twitter.com/clnhll) | ||
- | ||
-Yeoman is a tool that allows you to generate barebones apps based on different software stacks using “generator” packages made by developers who want to make your life easier. These packages streamline your time developing and deploying websites using your platform of choice. We’re using a full-stack MEAN (MongoDB, ExpressJS, AngularJS, NodeJS) generator called generator-angular-fullstack by DaftMonk (https://github.com/DaftMonk/generator-angular-fullstack). | ||
- | ||
-Once you’ve completed the Waypoint: Get Set for Basejumps, use this guide to navigate the base structure of your new app and learn how to interact with the database as well as the user. | ||
- | ||
-[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Guide-to-Basejumps-Table-of-Contents) | ||
- | ||
+> Hey FreeCodeCampers! This guide is here to help you navigate creating your first basejump. When I encountered the first basejump, I had no idea what was going on and spent weeks learning all of these things myself. Everything here is stuff I wish I had known coming into the basejumps. Oh and by the way, if you have a question that isn't answered by this guide, that's an issue, and you should report it as an issue to this repository! —[@clnhll](http://twitter.com/clnhll) | ||
+ | ||
+Yeoman is a tool that allows you to generate barebones apps based on different software stacks using “generator” packages made by developers who want to make your life easier. These packages streamline your time developing and deploying websites using your platform of choice. We’re using a full-stack MEAN (MongoDB, ExpressJS, AngularJS, NodeJS) generator called generator-angular-fullstack by DaftMonk (https://github.com/DaftMonk/generator-angular-fullstack). | ||
+ | ||
+Once you’ve completed the Waypoint: Get Set for Basejumps, use this guide to navigate the base structure of your new app and learn how to interact with the database as well as the user. | ||
+ | ||
+[NEXT](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Guide-to-Basejumps-Table-of-Contents) | ||
+ | ||
Sourced from (https://github.com/clnhll/guidetobasejumps) with permission. |
58
JS-Regex-Resources.md
@@ -1,30 +1,30 @@ | ||
-> Links to useful RegEx resources. | ||
- | ||
-* **Getting Started Tutorial:** http://regexone.com (FCC recommended) | ||
-* **RegEx 101:** https://regex101.com | ||
- | ||
-See also: :clipboard: [**Tutorials**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-tutorial--guides) | :syringe: [**Testing**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-testing-ground) | :soccer: [Games](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-gameplay) | :newspaper: [Blogs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-blog) | :package: [Software](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-software-aids) | ||
- | ||
-## RegEx Tutorial & Guides | ||
-* **RegEx Tutorial:** http://www.regular-expressions.info/tutorial.html (detailed explanation) | ||
-* **RegEx Cheatsheet:** http://www.cheatography.com/davechild/cheat-sheets/regular-expressions | ||
-* **MDN RegEx Guide:** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions | ||
-* **StackOverflow RegEx FAQ:** http://stackoverflow.com/a/22944075/1262108 | ||
-* **RegEx Video Tutorial:** https://www.youtube.com/watch?v=EkluES9Rvak | ||
- | ||
-## RegEx Testing Ground | ||
-* **RegEx Visualizer:** https://www.debuggex.com/?flavor=javascript | ||
-* **RegEx Challenges in Hackerrank:** https://www.hackerrank.com/domains/algorithms/regex (practice) | ||
-* **RegEx Regexplained:** https://leaverou.github.io/regexplained/ | ||
- | ||
-## RegEx Gameplay | ||
-* **RegEx Golf:** http://regex.alf.nu | ||
-* **RegEx Crossword:** http://regexcrossword.com | ||
- | ||
-## RegEx Blog | ||
-* **Rex Egg:** http://www.rexegg.com | ||
- | ||
-## RegEx Software Aids | ||
-* **RegExBuddy:** http://www.regexbuddy.com (proprietary) | ||
-* **Expresso:** http://www.ultrapico.com/expresso.htm (free) | ||
+> Links to useful RegEx resources. | ||
+ | ||
+* **Getting Started Tutorial:** http://regexone.com (FCC recommended) | ||
+* **RegEx 101:** https://regex101.com | ||
+ | ||
+See also: :clipboard: [**Tutorials**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-tutorial--guides) | :syringe: [**Testing**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-testing-ground) | :soccer: [Games](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-gameplay) | :newspaper: [Blogs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-blog) | :package: [Software](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Regex-Resources#regex-software-aids) | ||
+ | ||
+## RegEx Tutorial & Guides | ||
+* **RegEx Tutorial:** http://www.regular-expressions.info/tutorial.html (detailed explanation) | ||
+* **RegEx Cheatsheet:** http://www.cheatography.com/davechild/cheat-sheets/regular-expressions | ||
+* **MDN RegEx Guide:** https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions | ||
+* **StackOverflow RegEx FAQ:** http://stackoverflow.com/a/22944075/1262108 | ||
+* **RegEx Video Tutorial:** https://www.youtube.com/watch?v=EkluES9Rvak | ||
+ | ||
+## RegEx Testing Ground | ||
+* **RegEx Visualizer:** https://www.debuggex.com/?flavor=javascript | ||
+* **RegEx Challenges in Hackerrank:** https://www.hackerrank.com/domains/algorithms/regex (practice) | ||
+* **RegEx Regexplained:** https://leaverou.github.io/regexplained/ | ||
+ | ||
+## RegEx Gameplay | ||
+* **RegEx Golf:** http://regex.alf.nu | ||
+* **RegEx Crossword:** http://regexcrossword.com | ||
+ | ||
+## RegEx Blog | ||
+* **Rex Egg:** http://www.rexegg.com | ||
+ | ||
+## RegEx Software Aids | ||
+* **RegExBuddy:** http://www.regexbuddy.com (proprietary) | ||
+* **Expresso:** http://www.ultrapico.com/expresso.htm (free) | ||
* **RegEx Coach:** http://www.weitz.de/regex-coach/ (free) |
138
JS-Resources.md
@@ -1,70 +1,70 @@ | ||
-### Tutorials | ||
-- [JavaScript for Cats](http://jsforcats.com/) | ||
-- [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://github.com/DrBoolean/mostly-adequate-guide) | ||
-- [Eloquent Javascript](http://www.eloquentjavascript.net) ([*annotated*](https://watchandcode.com/courses/eloquent-javascript-the-annotated-version)) | ||
-- [Speaking Javascript](http://speakingjs.com/es5/) | ||
-- [Exploring ES6](http://exploringjs.com/es6/) | ||
-- [Udemy - Javascript Understanding the Weird Parts (*first 3.5 hrs*)](https://www.youtube.com/watch?v=Bv_5Zv5c-Ts) | ||
- | ||
-### References | ||
-- [DevDocs](http://devdocs.io) | ||
-- [OverAPI JavaScript Cheat Sheet](http://overapi.com/javascript/) | ||
-- [ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) | ||
- | ||
-Find javascript libraries at http://jster.net | ||
- | ||
-See Also: :loop: [**Quick JS**](https://github.com/freecodecamp/freecodecamp/wiki/js-resources#quick-js) | :watch: [**Challenges**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#challenges) | :wrench: [**Exercises**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#exercises) | :clipboard: [Editors](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#editors) | :newspaper: [Blogs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#blogs) | :books: [Books](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#books) | ||
- | ||
-## []() | ||
- | ||
-### Quick JS | ||
-- [REPL](https://repl.it/languages/Javascript) ([*node*](https://repl.it/languages/iojs/)) | ||
-- [JSBin](http://jsbin.com) | ||
-- [CodePen](http://codepen.io) | ||
-- [CoderPad (*pair programming*)](http://coderpad.io) ([*Get Demo access forever*](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#coderpad-demo-access-forever) :smile: ) | ||
-- [C9 (*IDE*, *pair programming*)](http://c9.io) | ||
-- [Object Playground (*visualize objects*)](http://www.objectplayground.com/) | ||
-- [Plunker](http://plnkr.co) | ||
- | ||
-### Challenges | ||
-- [Code Wars](http://codewars.com) | ||
-- [Hacker Rank](https://hackerrank.com) | ||
-- [Coding Game](http://codingame.com) | ||
- | ||
-### Exercises | ||
-- [Codility](https://codility.com/programmers/lessons/) | ||
-- [Coderbyte](http://coderbyte.com) | ||
-- [Exercism](http://exercism.io) | ||
- | ||
-### Editors | ||
-- [Brackets](http://brackets.io) | ||
-- [Atom](http://atom.io) | ||
- | ||
-### Blogs | ||
-- [Perfection Kills](http://perfectionkills.com) | ||
-- [2ality](http://www.2ality.com/) | ||
- | ||
-### Books | ||
-- [Secrets of the JavaScript Ninja](https://www.manning.com/books/secrets-of-the-javascript-ninja) | ||
-- [Programming JavaScript Applications](http://ericleads.com/javascript-applications/) | ||
-- [Maintainable JavaScript](http://shop.oreilly.com/product/0636920025245.do) | ||
-- [Learning JavaScript Design Patterns](http://addyosmani.com/resources/essentialjsdesignpatterns/book/) | ||
-- [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) | ||
-- [JSDoc](http://usejsdoc.org/) | ||
- | ||
----- | ||
- | ||
-### CoderPad Demo Access Forever | ||
-[![](http://i.imgur.com/PQQjg9k.gif)](http://i.imgur.com/PQQjg9k.gif) | ||
- | ||
-- [Eloquent Javascript](http://www.eloquentjavascript.net) | ||
-Fantastic, thorough introduction to the basics and features of Javascript, complete with in-browser interactive code | ||
- | ||
-- [Eloquent Javascript - The Annotated Version](https://watchandcode.com/courses/eloquent-javascript-the-annotated-version) | ||
-An annotated version of the above Eloquent Javascript with additional helpful comments and discussions to help clarify some sections that might be confusing to newcomers to programming | ||
- | ||
-* [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://github.com/DrBoolean/mostly-adequate-guide) | ||
-Quite in-depth guide to Functional Programming in Javascript | ||
- | ||
----- | ||
+### Tutorials | ||
+- [JavaScript for Cats](http://jsforcats.com/) | ||
+- [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://github.com/DrBoolean/mostly-adequate-guide) | ||
+- [Eloquent Javascript](http://www.eloquentjavascript.net) ([*annotated*](https://watchandcode.com/courses/eloquent-javascript-the-annotated-version)) | ||
+- [Speaking Javascript](http://speakingjs.com/es5/) | ||
+- [Exploring ES6](http://exploringjs.com/es6/) | ||
+- [Udemy - Javascript Understanding the Weird Parts (*first 3.5 hrs*)](https://www.youtube.com/watch?v=Bv_5Zv5c-Ts) | ||
+ | ||
+### References | ||
+- [DevDocs](http://devdocs.io) | ||
+- [OverAPI JavaScript Cheat Sheet](http://overapi.com/javascript/) | ||
+- [ECMA-262](http://www.ecma-international.org/publications/standards/Ecma-262.htm) | ||
+ | ||
+Find javascript libraries at http://jster.net | ||
+ | ||
+See Also: :loop: [**Quick JS**](https://github.com/freecodecamp/freecodecamp/wiki/js-resources#quick-js) | :watch: [**Challenges**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#challenges) | :wrench: [**Exercises**](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#exercises) | :clipboard: [Editors](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#editors) | :newspaper: [Blogs](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#blogs) | :books: [Books](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#books) | ||
+ | ||
+## []() | ||
+ | ||
+### Quick JS | ||
+- [REPL](https://repl.it/languages/Javascript) ([*node*](https://repl.it/languages/iojs/)) | ||
+- [JSBin](http://jsbin.com) | ||
+- [CodePen](http://codepen.io) | ||
+- [CoderPad (*pair programming*)](http://coderpad.io) ([*Get Demo access forever*](https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/JS-Resources#coderpad-demo-access-forever) :smile: ) | ||
+- [C9 (*IDE*, *pair programming*)](http://c9.io) | ||
+- [Object Playground (*visualize objects*)](http://www.objectplayground.com/) | ||
+- [Plunker](http://plnkr.co) | ||
+ | ||
+### Challenges | ||
+- [Code Wars](http://codewars.com) | ||
+- [Hacker Rank](https://hackerrank.com) | ||
+- [Coding Game](http://codingame.com) | ||
+ | ||
+### Exercises | ||
+- [Codility](https://codility.com/programmers/lessons/) | ||
+- [Coderbyte](http://coderbyte.com) | ||
+- [Exercism](http://exercism.io) | ||
+ | ||
+### Editors | ||
+- [Brackets](http://brackets.io) | ||
+- [Atom](http://atom.io) | ||
+ | ||
+### Blogs | ||
+- [Perfection Kills](http://perfectionkills.com) | ||
+- [2ality](http://www.2ality.com/) | ||
+ | ||
+### Books | ||
+- [Secrets of the JavaScript Ninja](https://www.manning.com/books/secrets-of-the-javascript-ninja) | ||
+- [Programming JavaScript Applications](http://ericleads.com/javascript-applications/) | ||
+- [Maintainable JavaScript](http://shop.oreilly.com/product/0636920025245.do) | ||
+- [Learning JavaScript Design Patterns](http://addyosmani.com/resources/essentialjsdesignpatterns/book/) | ||
+- [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript) | ||
+- [JSDoc](http://usejsdoc.org/) | ||
+ | ||
+---- | ||
+ | ||
+### CoderPad Demo Access Forever | ||
+[![](http://i.imgur.com/PQQjg9k.gif)](http://i.imgur.com/PQQjg9k.gif) | ||
+ | ||
+- [Eloquent Javascript](http://www.eloquentjavascript.net) | ||
+Fantastic, thorough introduction to the basics and features of Javascript, complete with in-browser interactive code | ||
+ | ||
+- [Eloquent Javascript - The Annotated Version](https://watchandcode.com/courses/eloquent-javascript-the-annotated-version) | ||
+An annotated version of the above Eloquent Javascript with additional helpful comments and discussions to help clarify some sections that might be confusing to newcomers to programming | ||
+ | ||
+* [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://github.com/DrBoolean/mostly-adequate-guide) | ||
+Quite in-depth guide to Functional Programming in Javascript | ||
+ | ||
+---- | ||
> *Edit this page to add your own suggested reading here* |
8
JavaScript-Truth-Table.md
@@ -1,5 +1,5 @@ | ||
-![A table showing which JavaScript arguments are true and false.](http://i.stack.imgur.com/35MpY.png) | ||
- | ||
-This is why you should always use `===` and `!==`. | ||
- | ||
+![A table showing which JavaScript arguments are true and false.](http://i.stack.imgur.com/35MpY.png) | ||
+ | ||
+This is why you should always use `===` and `!==`. | ||
+ | ||
Source: https://dorey.github.io/JavaScript-Equality-Table/ |
10
Learn-the-basics-of-the-VIM-editor.md
@@ -1,6 +1,6 @@ | ||
-Follow these steps to learn the basics of the powerful VIM command line text editor: | ||
- | ||
-1. Start Terminal on a Mac or Command Prompt on Windows. | ||
-2. Type: vimtutor [ENTER]. | ||
-3. Press [ENTER] again and the VIM tutor is displayed. | ||
+Follow these steps to learn the basics of the powerful VIM command line text editor: | ||
+ | ||
+1. Start Terminal on a Mac or Command Prompt on Windows. | ||
+2. Type: vimtutor [ENTER]. | ||
+3. Press [ENTER] again and the VIM tutor is displayed. | ||
4. Complete the tutor by reading and following each of the 7 lessons. |
14
Linking-Your-Account-with-GitHub.md
@@ -1,8 +1,8 @@ | ||
-In August 2015, we pushed some changes that caused trouble for many of our campers. | ||
- | ||
-If you are unable to link your GitHub account to your current account, here is what we recommend doing: | ||
- | ||
-1) Sign out with your current account and try signing in with GitHub. | ||
-2) Check your challenge map. Your account should have no progress. Delete that account here: http://freecodecamp.com/account | ||
-3) Sign into Free Code Camp the way you normally do (Facebook, email, etc). You should see your original progress. | ||
+In August 2015, we pushed some changes that caused trouble for many of our campers. | ||
+ | ||
+If you are unable to link your GitHub account to your current account, here is what we recommend doing: | ||
+ | ||
+1) Sign out with your current account and try signing in with GitHub. | ||
+2) Check your challenge map. Your account should have no progress. Delete that account here: http://freecodecamp.com/account | ||
+3) Sign into Free Code Camp the way you normally do (Facebook, email, etc). You should see your original progress. | ||
3) Now add GitHub to that account, and you should be all set. |
1,048
List-of-Free-Code-Camp-city-based-Campsites.md
@@ -1,525 +1,525 @@ | ||
-##Hundreds of cities around the world have Free Code Camp Facebook groups, called Campsites. | ||
- | ||
-Campers at these Campsites share links, hang out together, and organize local Coffee-n-Code events. | ||
- | ||
-If your city isn't listed here, you should [[create a Campsite for your city|How-to-create-a-Campsite-for-your-city]]. | ||
- | ||
-[Aarhus](//www.facebook.com/groups/FreeCodeCampAarhus) | ||
-[Abu Dhabi](//www.facebook.com/groups/free.code.camp.abu.dhabi/) | ||
-[Abuja](https://www.facebook.com/groups/abuja.free.code.camp/) | ||
-[Accra](//www.facebook.com/groups/free.code.camp.accra/) | ||
-[Addis Abeda](https://www.facebook.com/groups/free.code.camp.addis.abeba/) | ||
-[Adelaide](//www.facebook.com/groups/free.code.camp.adelaide/) | ||
-[Ahmedabad](//www.facebook.com/groups/free.code.camp.ahmedabad/) | ||
-[Aichi](//www.facebook.com/groups/free.code.camp.aichi/) | ||
-[Alameda](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
-[Albany](//www.facebook.com/groups/free.code.camp.albany.ny/) | ||
-[Albuquerque](//www.facebook.com/groups/free.code.camp.albuquerque/) | ||
-[Algiers](//www.facebook.com/groups/free.code.camp.Algiers/) | ||
-[Allahabad](//www.facebook.com/groups/free.code.camp.allahabad/) | ||
-[Almeria](//www.facebook.com/groups/free.code.camp.almeria/) | ||
-[Americana](//www.facebook.com/groups/free.code.camp.americana/) | ||
-[Ames](//www.facebook.com/groups/free.code.camp.ames.iowa/) | ||
-[Amman](//www.facebook.com/groups/free.code.camp.amman/) | ||
-[Amsterdam](//www.facebook.com/groups/free.code.camp.amsterdam/) | ||
-[Anacortes](//www.facebook.com/groups/free.code.camp.anacortes/) | ||
-[Ankara](//www.facebook.com/groups/free.code.camp.ankara/) | ||
-[Ann Arbor](//www.facebook.com/groups/free.code.camp.ann.arbor/) | ||
-[Appleton](//www.facebook.com/groups/free.code.camp.appleton/) | ||
-[Apucarana](//www.facebook.com/groups/free.code.camp.your.apucarana.parana/) | ||
-[Aracaju](//www.facebook.com/groups/free.code.camp.aracaju/) | ||
-[Asheville](//www.facebook.com/groups/free.code.camp.asheville/) | ||
-[Astana](https://www.facebook.com/groups/free.code.camp.astana/) | ||
-[Asuncion](//www.facebook.com/groups/free.code.camp.asuncion/) | ||
-[Athens, Ohio](//www.facebook.com/groups/free.code.camp.athens.ohio/) | ||
-[Athens](//www.facebook.com/groups/free.code.camp.athens.greece/) | ||
-[Atlanta](//www.facebook.com/groups/free.code.camp.atlanta/) | ||
-[Auburn, ME]( //www.facebook.com/groups/free.code.camp.auburn.maine/) | ||
-[Auckland](//www.facebook.com/groups/awesome.code.camp/) | ||
-[Austin](//www.facebook.com/groups/free.code.camp.austin/) | ||
-[Bakersfield](//www.facebook.com/groups/free.code.camp.bakersfield.california/) | ||
-[Baku](//www.facebook.com/groups/free.code.camp.baku/) | ||
-[Bali](//www.facebook.com/groups/free.code.camp.bali/) | ||
-[Baltimore](//www.facebook.com/groups/free.code.camp.baltimore/) | ||
-[Bandung](//www.facebook.com/groups/free.code.camp.bandung/) | ||
-[Bangkok](//www.facebook.com/groups/free.code.camp.bangkok/) | ||
-[Banja Luka](//www.facebook.com/groups/free.code.camp.banja.luka/) | ||
-[Barcelona](//www.facebook.com/groups/free.code.camp.barcelona/) | ||
-[Barranquilla](//www.facebook.com/groups/free.code.camp.barranquilla.co/) | ||
-[Barrie](//www.facebook.com/groups/free.code.camp.Barrie.Ontario/) | ||
-[Barrie](//www.facebook.com/groups/free.code.camp.Barrie.Ontario/) | ||
-[Batticaloa](//www.facebook.com/groups/free.code.camp.batticaloa/) | ||
-[Beijing](//www.facebook.com/groups/free.code.camp.beijing/) | ||
-[Beirut](//www.facebook.com/groups/free.code.camp.beirut/) | ||
-[Belem](//www.facebook.com/groups/free.code.camp.belem/) | ||
-[Belgrade](//www.facebook.com/groups/free.code.camp.belgrade/) | ||
-[Belize City](//www.facebook.com/groups/free.code.camp.belize.city/) | ||
-[Belize](//www.facebook.com/groups/free.code.camp.belize/) | ||
-[Bellevue](//www.facebook.com/groups/free.code.camp.bellevue/) | ||
-[Bellingham](//www.facebook.com/groups/free.code.camp.bellingham/) | ||
-[Belo Horizonte](//www.facebook.com/groups/free.code.camp.belo.horizonte/) | ||
-[Bengaluru](//www.facebook.com/groups/free.code.camp.bengaluru/) | ||
-[Berkeley](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
-[Berlin](//www.facebook.com/groups/free.code.camp.berlin/) | ||
-[Bhaktapur](//www.facebook.com/groups/free.code.camp.bhaktapur/) | ||
-[Bhubaneswar](//www.facebook.com/groups/free.code.camp.bhubaneswar/) | ||
-[Bialystok](//www.facebook.com/groups/free.code.camp.bialystok/) | ||
-[Big Rapids](//www.facebook.com/groups/free.code.camp.bigrapids/) | ||
-[Bijeljina](//www.facebook.com/groups/free.code.camp.bijeljina/) | ||
-[Birmingham, Alabama](//www.facebook.com/groups/free.code.camp.oxford.al/) | ||
-[Birmingham](//www.facebook.com/groups/free.code.camp.birmingham.uk/) | ||
-[Bishkek](//www.facebook.com/groups/free.code.camp.bishkek/) | ||
-[Bismarck, ND](//www.facebook.com/groups/free.code.camp.bismarck.north.dakota/) | ||
-[Bloomington, IL](//www.facebook.com/groups/free.code.camp.bloomington.normal/) | ||
-[Bloomington, IN](//www.facebook.com/groups/free.code.camp.bloomington.in/) | ||
-[Bogota](//www.facebook.com/groups/free.code.camp.bogota/) | ||
-[Boise](//www.facebook.com/groups/free.code.camp.boise) | ||
-[Boston](//www.facebook.com/groups/free.code.camp.boston/) | ||
-[Boulder](//www.facebook.com/groups/free.code.camp.boulder/) | ||
-[Braga](//www.facebook.com/groups/free.code.camp.braga/) | ||
-[Brasilia](//www.facebook.com/groups/free.code.camp.brasilia/) | ||
-[Brasov](//www.facebook.com/groups/free.code.camp.brasov) | ||
-[Bratislava](//www.facebook.com/groups/free.code.camp.bratislava/) | ||
-[Brighton](//www.facebook.com/groups/free.code.camp.brighton/) | ||
-[Brisbane](//www.facebook.com/groups/free.code.camp.brisbane/) | ||
-[Brno](//www.facebook.com/groups/free.code.camp.brno/) | ||
-[Brooksville](https://www.facebook.com/groups/free.code.camp.brooksville.florida/) | ||
-[Brussels](//www.facebook.com/groups/free.code.camp.brussels/) | ||
-[Bryan College Station](//www.facebook.com/groups/free.code.camp.bryan.college.station/) | ||
-[Bucaramanga](//www.facebook.com/groups/free.code.camp.bucaramanga/) | ||
-[Bucharest](//www.facebook.com/groups/free.code.camp.bucharest/) | ||
-[Budapest](//www.facebook.com/groups/free.code.camp.budapest/) | ||
-[Buenos Aires](//www.facebook.com/groups/free.code.camp.buenos.aires/) | ||
-[Buffalo](//www.facebook.com/groups/free.code.camp.buffalo/) | ||
-[Bury St Edmunds](//www.facebook.com/groups/free.code.camp.Bury.St.Edmunds/) | ||
-[Busan](//www.facebook.com/groups/free.code.camp.busan/) | ||
-[Bushkill](https://www.facebook.com/groups/Free.Code.Camp.Bushkill.PA/) | ||
-[Butte, MN]( //www.facebook.com/groups/free.code.camp.butte.montana/) | ||
-[Buzau](https://www.facebook.com/groups/free.code.camp.buzau/) | ||
-[Bydgoszcz](//www.facebook.com/groups/free.code.camp.bydgoszcz/) | ||
-[Cagayandeoro City](https://www.facebook.com/groups/free.code.camp.cagayandeoro.city/) | ||
-[Cairo](//www.facebook.com/groups/free.code.camp.cairo/) | ||
-[Calabar](//www.facebook.com/groups/free.code.camp.calabar/) | ||
-[Calgary](//www.facebook.com/groups/free.code.camp.calgary/) | ||
-[Cali](//www.facebook.com/groups/free.code.camp.cali/) | ||
-[Cambridge, ON](https://www.facebook.com/groups/free.code.camp.Cambridge.ON.Canada/) | ||
-[Campinas](//www.facebook.com/groups/free.code.camp.campinas/) | ||
-[Canberra](//www.facebook.com/groups/free.code.camp.canberra/) | ||
-[Cape Cod](//www.facebook.com/groups/free.code.camp.cape.cod/) | ||
-[Cape Town](//www.facebook.com/groups/free.code.camp.cape.town/) | ||
-[Caracas](//www.facebook.com/groups/free.code.camp.caracas/) | ||
-[Cardiff](//www.facebook.com/groups/free.code.camp.cardiff/) | ||
-[Casablanca](//www.facebook.com/groups/free.code.camp.casablanca/) | ||
-[Catania](//www.facebook.com/groups/free.code.camp.catania/) | ||
-[Cebu](https://www.facebook.com/groups/free.code.camp.cebu/) | ||
-[Cedar Rapids](//www.facebook.com/groups/free.code.camp.cedar.rapids/) | ||
-[Central Mississippi](//www.facebook.com/groups/free.code.camp.central.mississippi/) | ||
-[Centralia, WA] (//www.facebook.com/groups/free.code.camp.olympia/) | ||
-[Champaign-Urbana](//www.facebook.com/groups/free.code.camp.champaign.urbana/) | ||
-[Charleston, WV](https://www.facebook.com/groups/free.code.camp.charleston.wv) | ||
-[Charlotte](//www.facebook.com/groups/free.code.camp.charlotte.nc/) | ||
-[Chattanooga](//www.facebook.com/groups/free.code.camp.chattanooga/) | ||
-[Chennai](//www.facebook.com/groups/free.code.camp.chennai/) | ||
-[Chernivtsi](//www.facebook.com/groups/free.code.camp.chernivtsi.chernivetska.oblast.u/) | ||
-[Chiang Mai](//www.facebook.com/groups/free.code.camp.chiang.mai/) | ||
-[Chicago](//www.facebook.com/groups/free.code.camp.chicago/) | ||
-[Chisinau](https://www.facebook.com/groups/free.code.camp.Chisinau/) | ||
-[Christchurch](//www.facebook.com/groups/free.code.camp.christchurch/) | ||
-[Cincinnati](//www.facebook.com/groups/free.code.camp.cincinnati/) | ||
-[Clarksville](//www.facebook.com/groups/free.code.camp.clarksville.TN/) | ||
-[Cleveland](//www.facebook.com/groups/free.code.camp.cleveland/) | ||
-[Cluj](//www.facebook.com/groups/free.code.camp.cluj) | ||
-[Coattage Grove](//www.facebook.com/groups/free.code.camp.cottagegrove/) | ||
-[Coatzacoalcos](//www.facebook.com/groups/free.code.camp.coatzacoalcos/) | ||
-[Coimbatore](//www.facebook.com/groups/free.code.camp.coimbatore) | ||
-[Colombo](//www.facebook.com/groups/free.code.camp.colombo/) | ||
-[Colorado Springs](//www.facebook.com/groups/freecodecampcoloradosprings/) | ||
-[Columbus](//www.facebook.com/groups/free.code.camp.columbus/) | ||
-[Coventry](//www.facebook.com/groups/free.code.camp.coventry/) | ||
-[Cuenca](//www.facebook.com/groups/free.code.camp.cuenca/) | ||
-[Culiacan](//www.facebook.com/groups/free.code.camp.culiacan/) | ||
-[Curitiba](//www.facebook.com/groups/free.code.camp.curitiba/) | ||
-[Da Nang](//www.facebook.com/groups/free.code.camp.your.Da.Nang/) | ||
-[Dallas](//www.facebook.com/groups/free.code.camp.dallas/) | ||
-[Delhi](//www.facebook.com/groups/free.code.camp.delhi/) | ||
-[Denver](//www.facebook.com/groups/free.code.camp.denver/) | ||
-[Derby](//www.facebook.com/groups/free.code.camp.derby/) | ||
-[Des Moines](//www.facebook.com/groups/free.code.camp.des.moines/) | ||
-[Detroit](//www.facebook.com/groups/free.code.camp.detroit/) | ||
-[Dhaka](//www.facebook.com/groups/free.code.camp.dhaka/) | ||
-[Dnipropetrovsk](//www.facebook.com/groups/free.code.camp.dnipropetrovsk) | ||
-[Doha](//www.facebook.com/groups/free.code.camp.doha/) | ||
-[Dubai](//www.facebook.com/groups/free.code.camp.dubai/) | ||
-[Dublin](//www.facebook.com/groups/free.code.camp.dublin/) | ||
-[Duluth](//www.facebook.com/groups/free.code.camp.duluth/) | ||
-[Durango](//www.facebook.com/groups/free.code.camp.durango/) | ||
-[Edinburgh](//www.facebook.com/groups/free.code.camp.edinburgh/) | ||
-[Edmonton](//www.facebook.com/groups/free.code.camp.edmonton/) | ||
-[El Paso](//www.facebook.com/groups/free.code.camp.el.paso) | ||
-[Eugene](//www.facebook.com/groups/free.code.camp.eugene/) | ||
-[Evansville](//www.facebook.com/groups/free.code.camp.evansville.in/) | ||
-[Farmville](//www.facebook.com/groups/free.code.camp.farmville.va/) | ||
-[Fayetteville](//www.facebook.com/groups/free.code.camp.fayetteville.arkansas/) | ||
-[Ferizaj](//www.facebook.com/groups/free.code.camp.ferizaj/) | ||
-[Firenze](//www.facebook.com/groups/free.code.camp.firenze/) | ||
-[Flagstaff](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
-[Florianopolis](//www.facebook.com/groups/free.code.camp.florianopolis/) | ||
-[Floyd, VA](//www.facebook.com/groups/free.code.camp.floyd.virginia/) | ||
-[Folsom](//www.facebook.com/groups/free.code.camp.folsom) | ||
-[Fort Collins](//www.facebook.com/groups/free.code.camp.fort.collins/) | ||
-[Fort Worth](https://www.facebook.com/groups/freecodecampfortworth/) | ||
-[Fortaleza](//www.facebook.com/groups/free.code.group.fortaleza/) | ||
-[Frankfort](//www.facebook.com/groups/free.code.camp.frankfort.kentucky/) | ||
-[Frankfurt](//www.facebook.com/groups/free.code.camp.frankfurt.main/) | ||
-[Frederick, MD](//www.facebook.com/groups/free.code.camp.frederick.md) | ||
-[Fredericksburg](//www.facebook.com/groups/free.code.camp.fredericksburg/) | ||
-[Freehold](//www.facebook.com/groups/free.code.camp.freehold/) | ||
-[Fremont](//www.facebook.com/groups/free.code.camp.fremont/) | ||
-[Fresno](//www.facebook.com/groups/free.code.camp.fresno/) | ||
-[Fuengirola](//www.facebook.com/groups/free.code.camp.fuengirola/) | ||
-[Gainesville, FL](//www.facebook.com/groups/free.code.camp.gainesville.fla/) | ||
-[Galveston](//www.facebook.com/groups/free.code.camp.galveston/) | ||
-[Gdańsk](//www.facebook.com/groups/free.code.camp.trojmiasto/) | ||
-[Gdynia](//www.facebook.com/groups/free.code.camp.trojmiasto) | ||
-[Geneva](//www.facebook.com/groups/free.code.camp.geneva/) | ||
-[Glendora](//www.facebook.com/groups/free.code.camp.Glendora.California/) | ||
-[Goiania](//www.facebook.com/groups/free.code.camp.goiania/) | ||
-[Granada](//www.facebook.com/groups/free.code.camp.granada/) | ||
-[Grand Rapids](//www.facebook.com/groups/free.code.camp.grand.rapids/) | ||
-[Greenville](//www.facebook.com/groups/free.code.camp.Greenville/) | ||
-[Guacara](//www.facebook.com/groups/free.code.camp.guacara/) | ||
-[Guadalajara](//www.facebook.com/groups/fcc.guadalajara) | ||
-[Guarapuava](//www.facebook.com/groups/free.code.camp.guarapuava/) | ||
-[Guatemala City](//www.facebook.com/groups/free.code.camp.guatemala/) | ||
-[Gujrat City](https://www.facebook.com/groups/free.code.camp.gujrat/) | ||
-[Guntur](//www.facebook.com/groups/free.code.camp.guntur/) | ||
-[Gurgaon](//www.facebook.com/groups/free.code.camp.gurgaon/) | ||
-[Göttingen](//www.facebook.com/groups/free.code.camp.goettingen/) | ||
-[Hagerstown](//www.facebook.com/groups/free.code.camp.hagerstown/) | ||
-[Haifa]( //www.facebook.com/groups/free.code.camp.Haifa/) | ||
-[Halifax](//www.facebook.com/groups/free.code.camp.halifax/) | ||
-[Hamburg](//www.facebook.com/groups/free.code.camp.hamburg/) | ||
-[Hampton Roads](//www.facebook.com/groups/free.code.camp.hamptonroads/) | ||
-[Hanoi](//www.facebook.com/groups/free.code.camp.hanoi/) | ||
-[Harare](//www.facebook.com/groups/free.code.camp.harare/) | ||
-[Harrisburg, PA](//www.facebook.com/groups/free.code.camp.harrisburg.pa/) | ||
-[Hartford](//www.facebook.com/groups/free.code.camp.hartford.connecticut/) | ||
-[Hazelton, BC](https://www.facebook.com/groups/free.code.camp.hazelton.britishcolumbia/) | ||
-[Hermosillo](//www.facebook.com/groups/free.code.camp.Hermosillo/) | ||
-[Hickory](//www.facebook.com/groups/free.code.camp.hickory.nc) | ||
-[Ho Chi Minh City](//www.facebook.com/groups/free.code.camp.hochiminhcity/) | ||
-[Hobart](//www.facebook.com/groups/free.code.camp.hobart/) | ||
-[Hong Kong](//www.facebook.com/groups/free.code.camp.hk/) | ||
-[Houston](//www.facebook.com/groups/free.code.camp.houston/) | ||
-[Hove](//www.facebook.com/groups/free.code.camp.hove) | ||
-[Huntsville](//www.facebook.com/groups/free.code.camp.huntsville/) | ||
-[Hyderabad](//www.facebook.com/groups/free.code.camp.hyderabad/) | ||
-[Iasi](//www.facebook.com/groups/free.code.camp.iasi.romania/) | ||
-[idaho Falls](//www.facebook.com/groups/free.code.camp.idaho.falls.idaho/) | ||
-[Indianapolis](//www.facebook.com/groups/free.code.camp.indianapolis.in/) | ||
-[Indore](https://www.facebook.com/groups/free.code.camp.Indore/) | ||
-[Ipswich](//www.facebook.com/groups/free.code.camp.ipswich.qld/) | ||
-[Irkutsk](//www.facebook.com/groups/free.code.camp.irkutsk/) | ||
-[Isfahan](//www.facebook.com/groups/free.code.camp.isfahan/) | ||
-[Islamabad](//www.facebook.com/groups/free.code.camp.islamabad/) | ||
-[Istanbul](//www.facebook.com/groups/free.code.camp.istanbul/) | ||
-[Ivano Frankivsk](//www.facebook.com/groups/free.code.camp.ivano.frankivsk/) | ||
-[Izmir](//www.facebook.com/groups/free.code.camp.izmir) | ||
-[Jacarei](//www.facebook.com/groups/free.code.camp.sao.paulo.jacarei/) | ||
-[Jackson, MS](//www.facebook.com/groups/free.code.camp.jackson.ms) | ||
-[Jacksonville](//www.facebook.com/groups/free.code.camp.jacksonville/) | ||
-[Jaffna](//www.facebook.com/groups/free.code.camp.jaffna/) | ||
-[Jaipur](//www.facebook.com/groups/free.code.camp.jaipur/) | ||
-[Jakarta](//www.facebook.com/groups/free.code.camp.jakarta/) | ||
-[Jamnagar](//www.facebook.com/groups/free.code.camp.jamnagar.guj.in/) | ||
-[Jerusalem](//www.facebook.com/groups/free.code.camp.jerusalem/) | ||
-[Joao Pessoa](//www.facebook.com/groups/free.code.camp.joao.pessoa/) | ||
-[Johannesburg](//www.facebook.com/groups/free.code.camp.johannesburg/) | ||
-[Johor](//facebook.com/groups/free.code.camp.nusajaya.malaysia/) | ||
-[Joinville](//www.facebook.com/groups/free.code.camp.joinville/) | ||
-[Juarezchi](//www.facebook.com/groups/free.code.camp.juarezchi/) | ||
-[Kaduna](//www.facebook.com/groups/free.code.camp.kaduna/) | ||
-[Kalamazoo](//www.facebook.com/groups/free.code.camp.kalamazoo/) | ||
-[Kampala](//www.facebook.com/groups/free.code.camp.kampala/) | ||
-[Kansas City](//www.facebook.com/groups/free.code.camp.kansascity/) | ||
-[Karachi](//www.facebook.com/groups/free.code.camp.karachi/) | ||
-[Kathmandu](//www.facebook.com/groups/free.code.camp.kathmandu/) | ||
-[Kemerovo](//www.facebook.com/groups/free.code.camp.kemerovo/) | ||
-[Kerch](//www.facebook.com/groups/free.code.camp.kerch/) | ||
-[Kiev](//www.facebook.com/groups/free.code.camp.kiev/) | ||
-[Killeen](//www.facebook.com/groups/free.code.camp.killeen.texas/) | ||
-[Kingston, Jamaica](//www.facebook.com/groups/free.code.camp.kingston.jamaica/) | ||
-[Kingston, ON](//www.facebook.com/groups/free.code.camp.kingston.ontario/) | ||
-[Kisumu](//www.facebook.com/groups/free.code.camp.Kisumu/) | ||
-[Knoxville](//www.facebook.com/groups/free.code.camp.knoxville.tn/) | ||
-[Koblenz](//www.facebook.com/groups/free.code.camp.koblenz/) | ||
-[Koeln](//www.facebook.com/groups/free.code.camp.koeln/) | ||
-[Kolkata](//www.facebook.com/groups/free.code.camp.kolkata/) | ||
-[Kosice](//www.facebook.com/groups/free.code.camp.kosice/) | ||
-[Kosovo](//www.facebook.com/groups/free.code.camp.kosovo/) | ||
-[Kozhikode](//www.facebook.com/groups/free.code.camp.kozhikode/) | ||
-[Krasnodar](//www.facebook.com/groups/free.code.camp.krasnodar/) | ||
-[Kryvyi Rih](//www.facebook.com/groups/free.code.camp.kryvyi.rih/) | ||
-[Kuala Lumpur](//www.facebook.com/groups/free.code.camp.malaysia.kl/) | ||
-[Kulsary](https://www.facebook.com/groups/free.code.camp.kulsary/) | ||
-[La Crosse](//www.facebook.com/groups/free.code.camp.la.crosse) | ||
-[La Paz](//www.facebook.com/groups/free.code.camp.La.Paz/) | ||
-[Lae](//www.facebook.com/groups/free.code.camp.papua.new.guinea.lae/) | ||
-[Lagos](//www.facebook.com/groups/free.code.camp.lagos/) | ||
-[Lahore](//www.facebook.com/groups/free.code.camp.lahore/) | ||
-[Lakeland](//www.facebook.com/groups/Free.Code.Camp.Lakeland.Florida/) | ||
-[Las Cruces](//www.facebook.com/groups/free.code.camp.lc.nm/) | ||
-[Las Vegas](//www.facebook.com/groups/free.code.camp.las.vegas.nv/) | ||
-[Lawrence](//www.facebook.com/groups/free.code.camp.lawrence) | ||
-[Leeds](//www.facebook.com/groups/free.code.camp.leeds/) | ||
-[Leesburg](//www.facebook.com/groups/free.code.camp.leesburg/) | ||
-[Leesville](//www.facebook.com/groups/free.code.camp.leesville.la/) | ||
-[Lehi](//www.facebook.com/groups/free.code.camp.lehi/) | ||
-[Lexington](//www.facebook.com/groups/free.code.camp.lexington/) | ||
-[Lima](//www.facebook.com/groups/Free.Code.Camp.Lima/) | ||
-[Limassol](//www.facebook.com/groups/free.code.camp.limassol/) | ||
-[Lincoln, NE](//www.facebook.com/groups/free.code.camp.lincoln/) | ||
-[Lindsay](//www.facebook.com/groups/free.code.camp.lindsay/) | ||
-[Lisbon](//www.facebook.com/groups/free.code.camp.lisbon/) | ||
-[Little Rock](//www.facebook.com/groups/free.code.camp.little.rock/) | ||
-[Lodz](//www.facebook.com/groups/free.code.camp.lodz/) | ||
-[London, ON](//www.facebook.com/groups/free.code.camp.london.on/) | ||
-[London](//www.facebook.com/groups/free.code.camp.london/) | ||
-[Los Alamos](//www.facebook.com/groups/free.code.camp.los.alamos.nm/) | ||
-[Los Angeles](//www.facebook.com/groups/free.code.camp.los.angeles/) | ||
-[Louisville](//www.facebook.com/groups/free.code.camp.Louisville) | ||
-[Luanda](//www.facebook.com/groups/free.code.camp.luanda/) | ||
-[Lubbock](//www.facebook.com/groups/free.code.camp.lubbock/) | ||
-[Lviv](//www.facebook.com/groups/free.code.camp.lviv/) | ||
-[Lynchburg](//www.facebook.com/groups/free.code.camp.LYH/) | ||
-[Madison](//www.facebook.com/groups/free.code.camp.madison.wisconsin/) | ||
-[Madrid](//www.facebook.com/groups/free.code.camp.madrid/) | ||
-[Makati](//www.facebook.com/groups/free.code.camp.makati/) | ||
-[Male](//www.facebook.com/groups/freecodemv/) | ||
-[Managua](//www.facebook.com/groups/free.code.camp.managua/) | ||
-[Manchester, UK](//www.facebook.com/groups/free.code.camp.manchester/) | ||
-[Mangalore](//www.facebook.com/groups/free.code.camp.mangalore/) | ||
-[Manila](//www.facebook.com/groups/free.code.camp.manila/) | ||
-[Mansoura](https://www.facebook.com/groups/free.code.camp.mansoura/) | ||
-[Melbourne](//www.facebook.com/groups/free.code.camp.Melbourne/) | ||
-[Mexico City](//www.facebook.com/groups/free.code.camp.mexico.df/) | ||
-[Miami](//www.facebook.com/groups/free.code.camp.miami/) | ||
-[Mianwali](//www.facebook.com/groups/free.code.camp.mianwali/) | ||
-[Milan](//www.facebook.com/groups/free.code.camp.milan/) | ||
-[Milwaukee](//www.facebook.com/groups/free.code.camp.milwaukee/) | ||
-[Minneapolis](//www.facebook.com/groups/free.code.camp.minneapolis/) | ||
-[Minsk](//www.facebook.com/groups/free.code.camp.Minsk/) | ||
-[Mississippi Gulf Coast](//www.facebook.com/groups/free.code.camp.msgulfcoast/) | ||
-[Missoula](//www.facebook.com/groups/free.code.camp.missoula/) | ||
-[Modesto](//www.facebook.com/groups/free.code.camp.modesto/) | ||
-[Monterrey](//www.facebook.com/groups/free.code.camp.monterrey/) | ||
-[Montevideo](//www.facebook.com/groups/free.code.camp.montevideo/) | ||
-[Montgomery](//www.facebook.com/groups/free.code.camp.montgomery.alabama/) | ||
-[Montreal](//www.facebook.com/groups/free.code.camp.montreal/) | ||
-[Moosejaw](//www.facebook.com/groups/free.code.camp.moosejaw) | ||
-[Morgan City](//www.facebook.com/groups/free.code.camp.morgan.ciry.la/) | ||
-[Morgantown](https://www.facebook.com/groups/free.code.camp.morgantown/) | ||
-[Moscow](//www.facebook.com/groups/free.code.camp.moscow/) | ||
-[Moss Point](//www.facebook.com/groups/free.code.camp.moss.point.mississippi/) | ||
-[Multan](//www.facebook.com/groups/free.code.camp.multan) | ||
-[Mumbai](//www.facebook.com/groups/frre.code.camp.mumbai/) | ||
-[Munich](//www.facebook.com/groups/free.code.camp.munich/) | ||
-[Munster](//www.facebook.com/groups/free.code.camp.cork.munster/) | ||
-[Muskegon](https://www.facebook.com/groups/free.code.camp.muskegon/) | ||
-[Mykolaiv](https://www.facebook.com/groups/free.code.camp.mykolaiv/) | ||
-[Mysore](//www.facebook.com/groups/free.code.camp.mysore/) | ||
-[Nairobi](//www.facebook.com/groups/free.code.camp.nairobi/) | ||
-[Nantes](//www.facebook.com/groups/free.code.camp.nantes/) | ||
-[Napa](//www.facebook.com/groups/free.code.camp.napa/) | ||
-[Napoli](//www.facebook.com/groups/free.code.camp.napoli) | ||
-[Nashik](//www.facebook.com/groups/free.code.camp.your.nashik/) | ||
-[Nashville](//www.facebook.com/groups/free.code.camp.nashville/) | ||
-[Natal](https://www.facebook.com/groups/free.code.camp.natal) | ||
-[Nazareth](//www.facebook.com/groups/Free.Code.Camp.Nazareth.Israel/) | ||
-[New Brunswick](//www.facebook.com/groups/free.code.camp.new.brunswick.new.jersey/) | ||
-[New Haven](//www.facebook.com/groups/free.code.camp.new.haven/) | ||
-[New Orleans](//www.facebook.com/groups/free.code.camp.neworleans/) | ||
-[New Paltz](//www.facebook.com/groups/free.code.camp.new.paltz/) | ||
-[New Westminster](//www.facebook.com/groups/free.code.camp.new.westminster/) | ||
-[New York City](//www.facebook.com/groups/free.code.camp.new.york.city/) | ||
-[Nicosia](//www.facebook.com/groups/free.code.camp.nicosia/) | ||
-[Noida](//www.facebook.com/groups/free.code.camp.noida/) | ||
-[Norfolk](//www.facebook.com/groups/free.code.camp.norfolk) | ||
-[Normal](//www.facebook.com/groups/free.code.camp.bloomington.normal/) | ||
-[North Mississippi](//www.facebook.com/groups/free.code.camp.north.mississippi/) | ||
-[North Platte](//www.facebook.com/groups/free.code.camp.north.platte/) | ||
-[Nusajaya](//facebook.com/groups/free.code.camp.nusajaya.malaysia//) | ||
-[Oakland](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
-[Oklahoma City](//www.facebook.com/groups/free.code.camp.oklahoma.city/) | ||
-[Olympia](//www.facebook.com/groups/free.code.camp.olympia/) | ||
-[Omaha](//www.facebook.com/groups/free.code.camp.omaha/) | ||
-[Omsk](//www.facebook.com/groups/free.code.camp.omsk/) | ||
-[Oradell](https://www.facebook.com/groups/free.code.camp.oradell/) | ||
-[Orange County](//www.facebook.com/groups/free.code.camp.orange.county/) | ||
-[Orenburg](//www.facebook.com/groups/free.code.camp.orenburg/) | ||
-[Orlando](//www.facebook.com/groups/free.code.camp.orlando/) | ||
-[Ottawa](//www.facebook.com/groups/free.code.camp.ottawa/) | ||
-[Owatonna](//www.facebook.com/groups/free.code.camp.owatonna/) | ||
-[Panama City](//www.facebook.com/groups/free.code.camp.panama.city) | ||
-[Parana](//www.facebook.com/groups/free.code.camp.your.apucarana.parana/) | ||
-[Paris](//www.facebook.com/groups/free.code.camp.paris/) | ||
-[Pasadena](//www.facebook.com/groups/free.code.camp.pasadena.ca/) | ||
-[Pasto](//www.facebook.com/groups/free.code.camp.pasto/) | ||
-[Penang](//www.facebook.com/groups/free.code.camp.penang/) | ||
-[Perlis](//www.facebook.com/groups/free.code.camp.perlis.malaysia) | ||
-[Perth](//www.facebook.com/groups/free.code.camp.perth/) | ||
-[Perugia](//www.facebook.com/groups/free.code.camp.perugia.it/) | ||
-[Philadelphia](//www.facebook.com/groups/free.code.camp.philadelphia/) | ||
-[Phnom Penh](//www.facebook.com/groups/free.code.camp.phnompenh.cambodia/) | ||
-[Phoenix](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
-[Pittsburgh](//www.facebook.com/groups/free.code.camp.pittsburgh.pa/) | ||
-[Poitiers](//www.facebook.com/groups/free.code.camp.poitiers/) | ||
-[Pondicherry](//www.facebook.com/groups/free.code.camp.pondicherry/) | ||
-[Port Harcourt](//www.facebook.com/groups/free.code.camp.port.harcourt/) | ||
-[Portland](//www.facebook.com/groups/free.code.camp.portland/) | ||
-[Porto Alegre](//www.facebook.com/groups/free.code.camp.porto.alegre.rs/) | ||
-[Porto](//www.facebook.com/groups/free.code.camp.porto/) | ||
-[Prague](//www.facebook.com/groups/free.code.camp.prague/) | ||
-[Prescott](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
-[Pristina](//www.facebook.com/groups/free.code.camp.pristina/) | ||
-[Providence](//www.facebook.com/groups/free.code.camp.providence/) | ||
-[Provo](//www.facebook.com/groups/free.code.camp.provo/) | ||
-[Puebla](//www.facebook.com/groups/free.code.camp.pueblaMX/) | ||
-[Pueblo](//www.facebook.com/groups/free.code.camp.pueblo/) | ||
-[Pune](//www.facebook.com/groups/free.code.camp.pune/) | ||
-[Quibdo](//www.facebook.com/groups/free.code.camp.quibdo/) | ||
-[Raleigh](//www.facebook.com/groups/free.code.camp.raleigh/) | ||
-[Ranchi](//www.facebook.com/groups/free.code.camp.ranchi/) | ||
-[Reading](//www.facebook.com/groups/free.code.camp.reading/) | ||
-[Recife](//www.facebook.com/groups/free.code.camp.recife) | ||
-[Redmond, OR](//www.facebook.com/groups/free.code.camp.remond.oregon/) | ||
-[Reno](//www.facebook.com/groups/free.code.camp.reno/) | ||
-[Reykjavik](//www.facebook.com/groups/free.code.camp.reykjavik/) | ||
-[Rice Lake](//www.facebook.com/groups/free.code.camp.rice.lake.wi/) | ||
-[Richmond](//www.facebook.com/groups/free.code.camp.richmond/) | ||
-[Riga](//www.facebook.com/groups/free.code.camp.riga/) | ||
-[Rio de Janeiro](//www.facebook.com/groups/free.code.camp.rio.de.janeiro/) | ||
-[Riverside, CA](//www.facebook.com/groups/free.code.camp.riverside.ca/) | ||
-[Riyadh](//www.facebook.com/groups/free.code.camp.Riyadh/) | ||
-[Rochester, NY](//www.facebook.com/groups/free.code.camp.Rochester.New.York/) | ||
-[Roma](//www.facebook.com/groups/free.code.camp.roma/) | ||
-[Rotterdam](//www.facebook.com/groups/free.code.camp.rotterdam/) | ||
-[Sacramento](//www.facebook.com/groups/free.code.camp.sacramento/) | ||
-[Sahiwal](//www.facebook.com/groups/1505677729748974/) | ||
-[Saint George](//www.facebook.com/groups/free.code.camp.saint.george/) | ||
-[Saint Louis](//www.facebook.com/groups/free.code.camp.saint.louis/) | ||
-[Saint Paul](//www.facebook.com/groups/free.code.camp.saint.paul.mn/) | ||
-[Saint Petersburg](https://www.facebook.com/groups/free.code.camp.saint.petersburg/) | ||
-[Salamanca](//www.facebook.com/groups/free.code.camp.salamanca/) | ||
-[Salisbury, MD](//www.facebook.com/groups/free.code.camp.salisbury.maryland/) | ||
-[Salt Lake City](//www.facebook.com/groups/free.code.camp.salt.lake.city/) | ||
-[Salvador](//www.facebook.com/groups/free.code.camp.salvador/) | ||
-[San Antonio](//www.facebook.com/groups/free.code.camp.san.antonio) | ||
-[San Bernardino](//www.facebook.com/groups/free.code.camp.san.bernardino/) | ||
-[San Diego](//www.facebook.com/groups/free.code.camp.san.diego/) | ||
-[San Francisco](//www.facebook.com/groups/free.code.camp.san.francisco) | ||
-[San Jose, Costa Rica](//www.facebook.com/groups/free.code.camp.san.jose.costa.rica/) | ||
-[San Jose](//www.facebook.com/groups/free.code.camp.san.jose) | ||
-[San Juan](//www.facebook.com/groups/free.code.camp.sanjuan.pr/) | ||
-[Santa Barbara](//www.facebook.com/groups/free.code.camp.santa.barbara/) | ||
-[Santa Clarita](//www.facebook.com/groups/free.code.camp.santa.clarita/) | ||
-[Santa Cruz](//www.facebook.com/groups/free.code.camp.SC/) | ||
-[Santa Luis Obispo](//www.facebook.com/groups/free.code.camp.SLO/) | ||
-[Santiago](//www.facebook.com/groups/free.code.camp.santiago/) | ||
-[Santo Domingo](//www.facebook.com/groups/free.code.camp.dr/) | ||
-[Sao Paulo](//www.facebook.com/groups/free.code.camp.sao.paulo/) | ||
-[Sarajevo](//www.facebook.com/groups/free.code.camp.sarajevo) | ||
-[Sarasota](https://www.facebook.com/groups/free.code.camp.sarasota.florida/) | ||
-[Sasebo](//www.facebook.com/groups/free.code.camp.sasebo/) | ||
-[Savannah](//www.facebook.com/groups/free.code.camp.savannah/) | ||
-[Scottsdale](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
-[Seattle](//www.facebook.com/groups/free.code.camp.seattle/) | ||
-[Sedona](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
-[Seoul](//www.facebook.com/groups/free.code.camp.seoul/) | ||
-[Shanghai](//www.facebook.com/groups/free.code.camp.Shanghai/) | ||
-[Sheffield](//www.facebook.com/groups/free.code.camp.sheffield/) | ||
-[Shenzhen](//www.facebook.com/groups/free.code.camp.shenzhen/) | ||
-[Sidoarjo](//www.facebook.com/groups/free.code.camp.sidoarjo/) | ||
-[Sierra Vista](//www.facebook.com/groups/free.code.camp.sierra.vista/) | ||
-[Silverspring](//www.facebook.com/groups/free.code.camp.silverspring/) | ||
-[Singapore](//www.facebook.com/groups/free.code.camp.singapore/) | ||
-[Skopje](//www.facebook.com/groups/free.code.camp.skopje/) | ||
-[Sofia](//www.facebook.com/groups/free.code.camp.sofia/) | ||
-[Solo](//www.facebook.com/groups/free.code.camp.solo/) | ||
-[Sopot](//www.facebook.com/groups/free.code.camp.trojmiasto/) | ||
-[Sorocaba](https://www.facebook.com/groups/free.code.camp.sorocaba.sp/) | ||
-[South Bend](//www.facebook.com/groups/free.code.camp.south.bend/) | ||
-[Spartanburg](//www.facebook.com/groups/free.code.camp.spartanburg/) | ||
-[Spokane](//www.facebook.com/groups/free.code.camp.spokane/) | ||
-[Springfield, MO](//www.facebook.com/groups/free.code.camp.springfield.missouri/) | ||
-[Srinagar](//www.facebook.com/groups/free.code.camp.srinagar/) | ||
-[St Cloud](//www.facebook.com/groups/free.code.camp.stcloud/) | ||
-[Stockholm](//www.facebook.com/groups/free.code.camp.stockholm.sweden/) | ||
-[Stroke-on-Trent](//www.facebook.com/groups/free.code.camp.stoke.on.trent/) | ||
-[Struga](//www.facebook.com/groups/free.code.camp.struga/) | ||
-[Stuttgart](//www.facebook.com/groups/free.code.camp.stuttgart/) | ||
-[Subotica](//www.facebook.com/groups/free.code.camp.subotica/) | ||
-[Surabaya](//www.facebook.com/groups/free.code.camp.surabaya/) | ||
-[Surigao](//www.facebook.com/groups/free.code.camp.surigao/) | ||
-[Surrey](//www.facebook.com/groups/free.code.camp.surrey/) | ||
-[Sydney, Nova Scotia](//www.facebook.com/groups/free.code.camp.sydney.ns/) | ||
-[Sydney](//www.facebook.com/groups/free.code.camp.sydney.au/) | ||
-[Szczecin](//www.facebook.com/groups/free.code.camp.szczecin/) | ||
-[Taipei](//www.facebook.com/groups/free.code.camp.taipei/) | ||
-[Tallahassee](//www.facebook.com/groups/free.code.camp.tallahassee.florida/) | ||
-[Tallinn](//www.facebook.com/groups/free.code.camp.tallinn/) | ||
-[Tampa Bay](//www.facebook.com/groups/free.code.camp.tampa/) | ||
-[Targu Mures](https://www.facebook.com/groups/free.code.camp.targu.mures/) | ||
-[Tashkent](//www.facebook.com/groups/free.code.camp.tashkent/) | ||
-[Tegucigalpa](//www.facebook.com/groups/free.code.camp.Honduras/) | ||
-[Tehran](//www.facebook.com/groups/free.code.camp.tehran/) | ||
-[Tel Aviv](//www.facebook.com/groups/free.code.camp.Tel.Aviv/) | ||
-[Temecula](//www.facebook.com/groups/free.code.camp.temecula/) | ||
-[Tempe](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
-[Thessaloniki](//www.facebook.com/groups/free.code.camp.thessaloniki/) | ||
-[Ticino](//www.facebook.com/groups/free.code.camp.ticino/) | ||
-[Tijuana](//www.facebook.com/groups/free.code.camp.tijuana/) | ||
-[Timisoara](//www.facebook.com/groups/free.code.camp.timisoara/) | ||
-[Tirana](//www.facebook.com/groups/free.code.camp.tirana/) | ||
-[Tiraspol](https://www.facebook.com/groups/free.code.camp.tiraspol/) | ||
-[Tokyo](//www.facebook.com/groups/free.code.camp.tokyo/) | ||
-[Tom's River](//www.facebook.com/groups/free.code.camp.toms.river/) | ||
-[Torino](//www.facebook.com/groups/free.code.camp.torino/) | ||
-[Toronto](//www.facebook.com/groups/free.code.camp.to/) | ||
-[Tri-Cities Washington](//www.facebook.com/groups/free.code.camp.tricitieswa/) | ||
-[Trivandrum](//www.facebook.com/groups/freecodecamp.trivandrum/) | ||
-[Trondheim](//www.facebook.com/groups/free.code.camp.trondheim/) | ||
-[Tucson](//www.facebook.com/groups/free.code.camp.tucson/) | ||
-[Tulsa](//www.facebook.com/groups/free.code.camp.tulsa/) | ||
-[Tunis](//www.facebook.com/groups/free.code.camp.tunisia/) | ||
-[Tupelo MS](https://www.facebook.com/groups/148780962143254/) | ||
-[Ulaanbaatar](https://www.facebook.com/groups/free.code.camp.your.ulaanbaatar/) | ||
-[University Center](//www.facebook.com/groups/free.code.camp.university.center/) | ||
-[Valdosta](//www.facebook.com/groups/free.code.camp.valdosta/) | ||
-[Valencia](//www.facebook.com/groups/free.code.camp.vlc/) | ||
-[Vancouver](//www.facebook.com/groups/free.code.camp.vancouver.bc.canada/) | ||
-[Verde Valley](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
-[Victoria](//www.facebook.com/groups/free.code.camp.victoria.bc/) | ||
-[Vilnius](//www.facebook.com/groups/free.code.camp.vilnius.lt/) | ||
-[Virginia Beach](//www.facebook.com/groups/free.code.camp.virginia.beach/) | ||
-[Vitória](//www.facebook.com/groups/free.code.camp.vitoria.e.regiao.metropolitana.es/) | ||
-[Vladivostok](//www.facebook.com/groups/free.code.camp.vladivostok/) | ||
-[Warrington](//www.facebook.com/groups/free.code.camp.warrington/) | ||
-[Warsaw](//www.facebook.com/groups/free.code.camp.warsaw/) | ||
-[Washington, DC](//www.facebook.com/groups/free.code.camp.washington.dc/) | ||
-[Waterford](//www.facebook.com/groups/free.code.camp.waterford/) | ||
-[Wichita](//www.facebook.com/groups/free.code.camp.wichita/) | ||
-[Wilmington, NC](https://www.facebook.com/groups/free.code.camp.wilmington.nc/) | ||
-[Winnipeg](//www.facebook.com/groups/free.code.camp.winnipeg/) | ||
-[Wuerzburg](//www.facebook.com/groups/free.code.camp.wuerzburg/) | ||
-[Yangon](//www.facebook.com/groups/free.code.camp.myanmar) | ||
-[Yaounde](//www.facebook.com/groups/free.code.camp.yaounde) | ||
-[Yaroslavl](//www.facebook.com/groups/free.code.camp.yaroslavl/) | ||
-[Yekaterinburg](//www.facebook.com/groups/free.code.camp.yekaterinburg) | ||
-[Yerevan](//www.facebook.com/groups/free.code.camp.armenia/) | ||
-[Zacatecas](//www.facebook.com/groups/free.code.camp.zacatecas/) | ||
-[Zacatecas](https://www.facebook.com/groups/free.code.camp.zacatecas/) | ||
-[Zagreb](//www.facebook.com/groups/free.code.camp.zagreb/) | ||
-[Zhytomyr](https://www.facebook.com/groups/free.code.camp.zhytomyr/) | ||
-[Znojmo](//www.facebook.com/groups/free.code.camp.znojmo/) | ||
+##Hundreds of cities around the world have Free Code Camp Facebook groups, called Campsites. | ||
+ | ||
+Campers at these Campsites share links, hang out together, and organize local Coffee-n-Code events. | ||
+ | ||
+If your city isn't listed here, you should [[create a Campsite for your city|How-to-create-a-Campsite-for-your-city]]. | ||
+ | ||
+[Aarhus](//www.facebook.com/groups/FreeCodeCampAarhus) | ||
+[Abu Dhabi](//www.facebook.com/groups/free.code.camp.abu.dhabi/) | ||
+[Abuja](https://www.facebook.com/groups/abuja.free.code.camp/) | ||
+[Accra](//www.facebook.com/groups/free.code.camp.accra/) | ||
+[Addis Abeda](https://www.facebook.com/groups/free.code.camp.addis.abeba/) | ||
+[Adelaide](//www.facebook.com/groups/free.code.camp.adelaide/) | ||
+[Ahmedabad](//www.facebook.com/groups/free.code.camp.ahmedabad/) | ||
+[Aichi](//www.facebook.com/groups/free.code.camp.aichi/) | ||
+[Alameda](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
+[Albany](//www.facebook.com/groups/free.code.camp.albany.ny/) | ||
+[Albuquerque](//www.facebook.com/groups/free.code.camp.albuquerque/) | ||
+[Algiers](//www.facebook.com/groups/free.code.camp.Algiers/) | ||
+[Allahabad](//www.facebook.com/groups/free.code.camp.allahabad/) | ||
+[Almeria](//www.facebook.com/groups/free.code.camp.almeria/) | ||
+[Americana](//www.facebook.com/groups/free.code.camp.americana/) | ||
+[Ames](//www.facebook.com/groups/free.code.camp.ames.iowa/) | ||
+[Amman](//www.facebook.com/groups/free.code.camp.amman/) | ||
+[Amsterdam](//www.facebook.com/groups/free.code.camp.amsterdam/) | ||
+[Anacortes](//www.facebook.com/groups/free.code.camp.anacortes/) | ||
+[Ankara](//www.facebook.com/groups/free.code.camp.ankara/) | ||
+[Ann Arbor](//www.facebook.com/groups/free.code.camp.ann.arbor/) | ||
+[Appleton](//www.facebook.com/groups/free.code.camp.appleton/) | ||
+[Apucarana](//www.facebook.com/groups/free.code.camp.your.apucarana.parana/) | ||
+[Aracaju](//www.facebook.com/groups/free.code.camp.aracaju/) | ||
+[Asheville](//www.facebook.com/groups/free.code.camp.asheville/) | ||
+[Astana](https://www.facebook.com/groups/free.code.camp.astana/) | ||
+[Asuncion](//www.facebook.com/groups/free.code.camp.asuncion/) | ||
+[Athens, Ohio](//www.facebook.com/groups/free.code.camp.athens.ohio/) | ||
+[Athens](//www.facebook.com/groups/free.code.camp.athens.greece/) | ||
+[Atlanta](//www.facebook.com/groups/free.code.camp.atlanta/) | ||
+[Auburn, ME]( //www.facebook.com/groups/free.code.camp.auburn.maine/) | ||
+[Auckland](//www.facebook.com/groups/awesome.code.camp/) | ||
+[Austin](//www.facebook.com/groups/free.code.camp.austin/) | ||
+[Bakersfield](//www.facebook.com/groups/free.code.camp.bakersfield.california/) | ||
+[Baku](//www.facebook.com/groups/free.code.camp.baku/) | ||
+[Bali](//www.facebook.com/groups/free.code.camp.bali/) | ||
+[Baltimore](//www.facebook.com/groups/free.code.camp.baltimore/) | ||
+[Bandung](//www.facebook.com/groups/free.code.camp.bandung/) | ||
+[Bangkok](//www.facebook.com/groups/free.code.camp.bangkok/) | ||
+[Banja Luka](//www.facebook.com/groups/free.code.camp.banja.luka/) | ||
+[Barcelona](//www.facebook.com/groups/free.code.camp.barcelona/) | ||
+[Barranquilla](//www.facebook.com/groups/free.code.camp.barranquilla.co/) | ||
+[Barrie](//www.facebook.com/groups/free.code.camp.Barrie.Ontario/) | ||
+[Barrie](//www.facebook.com/groups/free.code.camp.Barrie.Ontario/) | ||
+[Batticaloa](//www.facebook.com/groups/free.code.camp.batticaloa/) | ||
+[Beijing](//www.facebook.com/groups/free.code.camp.beijing/) | ||
+[Beirut](//www.facebook.com/groups/free.code.camp.beirut/) | ||
+[Belem](//www.facebook.com/groups/free.code.camp.belem/) | ||
+[Belgrade](//www.facebook.com/groups/free.code.camp.belgrade/) | ||
+[Belize City](//www.facebook.com/groups/free.code.camp.belize.city/) | ||
+[Belize](//www.facebook.com/groups/free.code.camp.belize/) | ||
+[Bellevue](//www.facebook.com/groups/free.code.camp.bellevue/) | ||
+[Bellingham](//www.facebook.com/groups/free.code.camp.bellingham/) | ||
+[Belo Horizonte](//www.facebook.com/groups/free.code.camp.belo.horizonte/) | ||
+[Bengaluru](//www.facebook.com/groups/free.code.camp.bengaluru/) | ||
+[Berkeley](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
+[Berlin](//www.facebook.com/groups/free.code.camp.berlin/) | ||
+[Bhaktapur](//www.facebook.com/groups/free.code.camp.bhaktapur/) | ||
+[Bhubaneswar](//www.facebook.com/groups/free.code.camp.bhubaneswar/) | ||
+[Bialystok](//www.facebook.com/groups/free.code.camp.bialystok/) | ||
+[Big Rapids](//www.facebook.com/groups/free.code.camp.bigrapids/) | ||
+[Bijeljina](//www.facebook.com/groups/free.code.camp.bijeljina/) | ||
+[Birmingham, Alabama](//www.facebook.com/groups/free.code.camp.oxford.al/) | ||
+[Birmingham](//www.facebook.com/groups/free.code.camp.birmingham.uk/) | ||
+[Bishkek](//www.facebook.com/groups/free.code.camp.bishkek/) | ||
+[Bismarck, ND](//www.facebook.com/groups/free.code.camp.bismarck.north.dakota/) | ||
+[Bloomington, IL](//www.facebook.com/groups/free.code.camp.bloomington.normal/) | ||
+[Bloomington, IN](//www.facebook.com/groups/free.code.camp.bloomington.in/) | ||
+[Bogota](//www.facebook.com/groups/free.code.camp.bogota/) | ||
+[Boise](//www.facebook.com/groups/free.code.camp.boise) | ||
+[Boston](//www.facebook.com/groups/free.code.camp.boston/) | ||
+[Boulder](//www.facebook.com/groups/free.code.camp.boulder/) | ||
+[Braga](//www.facebook.com/groups/free.code.camp.braga/) | ||
+[Brasilia](//www.facebook.com/groups/free.code.camp.brasilia/) | ||
+[Brasov](//www.facebook.com/groups/free.code.camp.brasov) | ||
+[Bratislava](//www.facebook.com/groups/free.code.camp.bratislava/) | ||
+[Brighton](//www.facebook.com/groups/free.code.camp.brighton/) | ||
+[Brisbane](//www.facebook.com/groups/free.code.camp.brisbane/) | ||
+[Brno](//www.facebook.com/groups/free.code.camp.brno/) | ||
+[Brooksville](https://www.facebook.com/groups/free.code.camp.brooksville.florida/) | ||
+[Brussels](//www.facebook.com/groups/free.code.camp.brussels/) | ||
+[Bryan College Station](//www.facebook.com/groups/free.code.camp.bryan.college.station/) | ||
+[Bucaramanga](//www.facebook.com/groups/free.code.camp.bucaramanga/) | ||
+[Bucharest](//www.facebook.com/groups/free.code.camp.bucharest/) | ||
+[Budapest](//www.facebook.com/groups/free.code.camp.budapest/) | ||
+[Buenos Aires](//www.facebook.com/groups/free.code.camp.buenos.aires/) | ||
+[Buffalo](//www.facebook.com/groups/free.code.camp.buffalo/) | ||
+[Bury St Edmunds](//www.facebook.com/groups/free.code.camp.Bury.St.Edmunds/) | ||
+[Busan](//www.facebook.com/groups/free.code.camp.busan/) | ||
+[Bushkill](https://www.facebook.com/groups/Free.Code.Camp.Bushkill.PA/) | ||
+[Butte, MN]( //www.facebook.com/groups/free.code.camp.butte.montana/) | ||
+[Buzau](https://www.facebook.com/groups/free.code.camp.buzau/) | ||
+[Bydgoszcz](//www.facebook.com/groups/free.code.camp.bydgoszcz/) | ||
+[Cagayandeoro City](https://www.facebook.com/groups/free.code.camp.cagayandeoro.city/) | ||
+[Cairo](//www.facebook.com/groups/free.code.camp.cairo/) | ||
+[Calabar](//www.facebook.com/groups/free.code.camp.calabar/) | ||
+[Calgary](//www.facebook.com/groups/free.code.camp.calgary/) | ||
+[Cali](//www.facebook.com/groups/free.code.camp.cali/) | ||
+[Cambridge, ON](https://www.facebook.com/groups/free.code.camp.Cambridge.ON.Canada/) | ||
+[Campinas](//www.facebook.com/groups/free.code.camp.campinas/) | ||
+[Canberra](//www.facebook.com/groups/free.code.camp.canberra/) | ||
+[Cape Cod](//www.facebook.com/groups/free.code.camp.cape.cod/) | ||
+[Cape Town](//www.facebook.com/groups/free.code.camp.cape.town/) | ||
+[Caracas](//www.facebook.com/groups/free.code.camp.caracas/) | ||
+[Cardiff](//www.facebook.com/groups/free.code.camp.cardiff/) | ||
+[Casablanca](//www.facebook.com/groups/free.code.camp.casablanca/) | ||
+[Catania](//www.facebook.com/groups/free.code.camp.catania/) | ||
+[Cebu](https://www.facebook.com/groups/free.code.camp.cebu/) | ||
+[Cedar Rapids](//www.facebook.com/groups/free.code.camp.cedar.rapids/) | ||
+[Central Mississippi](//www.facebook.com/groups/free.code.camp.central.mississippi/) | ||
+[Centralia, WA] (//www.facebook.com/groups/free.code.camp.olympia/) | ||
+[Champaign-Urbana](//www.facebook.com/groups/free.code.camp.champaign.urbana/) | ||
+[Charleston, WV](https://www.facebook.com/groups/free.code.camp.charleston.wv) | ||
+[Charlotte](//www.facebook.com/groups/free.code.camp.charlotte.nc/) | ||
+[Chattanooga](//www.facebook.com/groups/free.code.camp.chattanooga/) | ||
+[Chennai](//www.facebook.com/groups/free.code.camp.chennai/) | ||
+[Chernivtsi](//www.facebook.com/groups/free.code.camp.chernivtsi.chernivetska.oblast.u/) | ||
+[Chiang Mai](//www.facebook.com/groups/free.code.camp.chiang.mai/) | ||
+[Chicago](//www.facebook.com/groups/free.code.camp.chicago/) | ||
+[Chisinau](https://www.facebook.com/groups/free.code.camp.Chisinau/) | ||
+[Christchurch](//www.facebook.com/groups/free.code.camp.christchurch/) | ||
+[Cincinnati](//www.facebook.com/groups/free.code.camp.cincinnati/) | ||
+[Clarksville](//www.facebook.com/groups/free.code.camp.clarksville.TN/) | ||
+[Cleveland](//www.facebook.com/groups/free.code.camp.cleveland/) | ||
+[Cluj](//www.facebook.com/groups/free.code.camp.cluj) | ||
+[Coattage Grove](//www.facebook.com/groups/free.code.camp.cottagegrove/) | ||
+[Coatzacoalcos](//www.facebook.com/groups/free.code.camp.coatzacoalcos/) | ||
+[Coimbatore](//www.facebook.com/groups/free.code.camp.coimbatore) | ||
+[Colombo](//www.facebook.com/groups/free.code.camp.colombo/) | ||
+[Colorado Springs](//www.facebook.com/groups/freecodecampcoloradosprings/) | ||
+[Columbus](//www.facebook.com/groups/free.code.camp.columbus/) | ||
+[Coventry](//www.facebook.com/groups/free.code.camp.coventry/) | ||
+[Cuenca](//www.facebook.com/groups/free.code.camp.cuenca/) | ||
+[Culiacan](//www.facebook.com/groups/free.code.camp.culiacan/) | ||
+[Curitiba](//www.facebook.com/groups/free.code.camp.curitiba/) | ||
+[Da Nang](//www.facebook.com/groups/free.code.camp.your.Da.Nang/) | ||
+[Dallas](//www.facebook.com/groups/free.code.camp.dallas/) | ||
+[Delhi](//www.facebook.com/groups/free.code.camp.delhi/) | ||
+[Denver](//www.facebook.com/groups/free.code.camp.denver/) | ||
+[Derby](//www.facebook.com/groups/free.code.camp.derby/) | ||
+[Des Moines](//www.facebook.com/groups/free.code.camp.des.moines/) | ||
+[Detroit](//www.facebook.com/groups/free.code.camp.detroit/) | ||
+[Dhaka](//www.facebook.com/groups/free.code.camp.dhaka/) | ||
+[Dnipropetrovsk](//www.facebook.com/groups/free.code.camp.dnipropetrovsk) | ||
+[Doha](//www.facebook.com/groups/free.code.camp.doha/) | ||
+[Dubai](//www.facebook.com/groups/free.code.camp.dubai/) | ||
+[Dublin](//www.facebook.com/groups/free.code.camp.dublin/) | ||
+[Duluth](//www.facebook.com/groups/free.code.camp.duluth/) | ||
+[Durango](//www.facebook.com/groups/free.code.camp.durango/) | ||
+[Edinburgh](//www.facebook.com/groups/free.code.camp.edinburgh/) | ||
+[Edmonton](//www.facebook.com/groups/free.code.camp.edmonton/) | ||
+[El Paso](//www.facebook.com/groups/free.code.camp.el.paso) | ||
+[Eugene](//www.facebook.com/groups/free.code.camp.eugene/) | ||
+[Evansville](//www.facebook.com/groups/free.code.camp.evansville.in/) | ||
+[Farmville](//www.facebook.com/groups/free.code.camp.farmville.va/) | ||
+[Fayetteville](//www.facebook.com/groups/free.code.camp.fayetteville.arkansas/) | ||
+[Ferizaj](//www.facebook.com/groups/free.code.camp.ferizaj/) | ||
+[Firenze](//www.facebook.com/groups/free.code.camp.firenze/) | ||
+[Flagstaff](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
+[Florianopolis](//www.facebook.com/groups/free.code.camp.florianopolis/) | ||
+[Floyd, VA](//www.facebook.com/groups/free.code.camp.floyd.virginia/) | ||
+[Folsom](//www.facebook.com/groups/free.code.camp.folsom) | ||
+[Fort Collins](//www.facebook.com/groups/free.code.camp.fort.collins/) | ||
+[Fort Worth](https://www.facebook.com/groups/freecodecampfortworth/) | ||
+[Fortaleza](//www.facebook.com/groups/free.code.group.fortaleza/) | ||
+[Frankfort](//www.facebook.com/groups/free.code.camp.frankfort.kentucky/) | ||
+[Frankfurt](//www.facebook.com/groups/free.code.camp.frankfurt.main/) | ||
+[Frederick, MD](//www.facebook.com/groups/free.code.camp.frederick.md) | ||
+[Fredericksburg](//www.facebook.com/groups/free.code.camp.fredericksburg/) | ||
+[Freehold](//www.facebook.com/groups/free.code.camp.freehold/) | ||
+[Fremont](//www.facebook.com/groups/free.code.camp.fremont/) | ||
+[Fresno](//www.facebook.com/groups/free.code.camp.fresno/) | ||
+[Fuengirola](//www.facebook.com/groups/free.code.camp.fuengirola/) | ||
+[Gainesville, FL](//www.facebook.com/groups/free.code.camp.gainesville.fla/) | ||
+[Galveston](//www.facebook.com/groups/free.code.camp.galveston/) | ||
+[Gdańsk](//www.facebook.com/groups/free.code.camp.trojmiasto/) | ||
+[Gdynia](//www.facebook.com/groups/free.code.camp.trojmiasto) | ||
+[Geneva](//www.facebook.com/groups/free.code.camp.geneva/) | ||
+[Glendora](//www.facebook.com/groups/free.code.camp.Glendora.California/) | ||
+[Goiania](//www.facebook.com/groups/free.code.camp.goiania/) | ||
+[Granada](//www.facebook.com/groups/free.code.camp.granada/) | ||
+[Grand Rapids](//www.facebook.com/groups/free.code.camp.grand.rapids/) | ||
+[Greenville](//www.facebook.com/groups/free.code.camp.Greenville/) | ||
+[Guacara](//www.facebook.com/groups/free.code.camp.guacara/) | ||
+[Guadalajara](//www.facebook.com/groups/fcc.guadalajara) | ||
+[Guarapuava](//www.facebook.com/groups/free.code.camp.guarapuava/) | ||
+[Guatemala City](//www.facebook.com/groups/free.code.camp.guatemala/) | ||
+[Gujrat City](https://www.facebook.com/groups/free.code.camp.gujrat/) | ||
+[Guntur](//www.facebook.com/groups/free.code.camp.guntur/) | ||
+[Gurgaon](//www.facebook.com/groups/free.code.camp.gurgaon/) | ||
+[Göttingen](//www.facebook.com/groups/free.code.camp.goettingen/) | ||
+[Hagerstown](//www.facebook.com/groups/free.code.camp.hagerstown/) | ||
+[Haifa]( //www.facebook.com/groups/free.code.camp.Haifa/) | ||
+[Halifax](//www.facebook.com/groups/free.code.camp.halifax/) | ||
+[Hamburg](//www.facebook.com/groups/free.code.camp.hamburg/) | ||
+[Hampton Roads](//www.facebook.com/groups/free.code.camp.hamptonroads/) | ||
+[Hanoi](//www.facebook.com/groups/free.code.camp.hanoi/) | ||
+[Harare](//www.facebook.com/groups/free.code.camp.harare/) | ||
+[Harrisburg, PA](//www.facebook.com/groups/free.code.camp.harrisburg.pa/) | ||
+[Hartford](//www.facebook.com/groups/free.code.camp.hartford.connecticut/) | ||
+[Hazelton, BC](https://www.facebook.com/groups/free.code.camp.hazelton.britishcolumbia/) | ||
+[Hermosillo](//www.facebook.com/groups/free.code.camp.Hermosillo/) | ||
+[Hickory](//www.facebook.com/groups/free.code.camp.hickory.nc) | ||
+[Ho Chi Minh City](//www.facebook.com/groups/free.code.camp.hochiminhcity/) | ||
+[Hobart](//www.facebook.com/groups/free.code.camp.hobart/) | ||
+[Hong Kong](//www.facebook.com/groups/free.code.camp.hk/) | ||
+[Houston](//www.facebook.com/groups/free.code.camp.houston/) | ||
+[Hove](//www.facebook.com/groups/free.code.camp.hove) | ||
+[Huntsville](//www.facebook.com/groups/free.code.camp.huntsville/) | ||
+[Hyderabad](//www.facebook.com/groups/free.code.camp.hyderabad/) | ||
+[Iasi](//www.facebook.com/groups/free.code.camp.iasi.romania/) | ||
+[idaho Falls](//www.facebook.com/groups/free.code.camp.idaho.falls.idaho/) | ||
+[Indianapolis](//www.facebook.com/groups/free.code.camp.indianapolis.in/) | ||
+[Indore](https://www.facebook.com/groups/free.code.camp.Indore/) | ||
+[Ipswich](//www.facebook.com/groups/free.code.camp.ipswich.qld/) | ||
+[Irkutsk](//www.facebook.com/groups/free.code.camp.irkutsk/) | ||
+[Isfahan](//www.facebook.com/groups/free.code.camp.isfahan/) | ||
+[Islamabad](//www.facebook.com/groups/free.code.camp.islamabad/) | ||
+[Istanbul](//www.facebook.com/groups/free.code.camp.istanbul/) | ||
+[Ivano Frankivsk](//www.facebook.com/groups/free.code.camp.ivano.frankivsk/) | ||
+[Izmir](//www.facebook.com/groups/free.code.camp.izmir) | ||
+[Jacarei](//www.facebook.com/groups/free.code.camp.sao.paulo.jacarei/) | ||
+[Jackson, MS](//www.facebook.com/groups/free.code.camp.jackson.ms) | ||
+[Jacksonville](//www.facebook.com/groups/free.code.camp.jacksonville/) | ||
+[Jaffna](//www.facebook.com/groups/free.code.camp.jaffna/) | ||
+[Jaipur](//www.facebook.com/groups/free.code.camp.jaipur/) | ||
+[Jakarta](//www.facebook.com/groups/free.code.camp.jakarta/) | ||
+[Jamnagar](//www.facebook.com/groups/free.code.camp.jamnagar.guj.in/) | ||
+[Jerusalem](//www.facebook.com/groups/free.code.camp.jerusalem/) | ||
+[Joao Pessoa](//www.facebook.com/groups/free.code.camp.joao.pessoa/) | ||
+[Johannesburg](//www.facebook.com/groups/free.code.camp.johannesburg/) | ||
+[Johor](//facebook.com/groups/free.code.camp.nusajaya.malaysia/) | ||
+[Joinville](//www.facebook.com/groups/free.code.camp.joinville/) | ||
+[Juarezchi](//www.facebook.com/groups/free.code.camp.juarezchi/) | ||
+[Kaduna](//www.facebook.com/groups/free.code.camp.kaduna/) | ||
+[Kalamazoo](//www.facebook.com/groups/free.code.camp.kalamazoo/) | ||
+[Kampala](//www.facebook.com/groups/free.code.camp.kampala/) | ||
+[Kansas City](//www.facebook.com/groups/free.code.camp.kansascity/) | ||
+[Karachi](//www.facebook.com/groups/free.code.camp.karachi/) | ||
+[Kathmandu](//www.facebook.com/groups/free.code.camp.kathmandu/) | ||
+[Kemerovo](//www.facebook.com/groups/free.code.camp.kemerovo/) | ||
+[Kerch](//www.facebook.com/groups/free.code.camp.kerch/) | ||
+[Kiev](//www.facebook.com/groups/free.code.camp.kiev/) | ||
+[Killeen](//www.facebook.com/groups/free.code.camp.killeen.texas/) | ||
+[Kingston, Jamaica](//www.facebook.com/groups/free.code.camp.kingston.jamaica/) | ||
+[Kingston, ON](//www.facebook.com/groups/free.code.camp.kingston.ontario/) | ||
+[Kisumu](//www.facebook.com/groups/free.code.camp.Kisumu/) | ||
+[Knoxville](//www.facebook.com/groups/free.code.camp.knoxville.tn/) | ||
+[Koblenz](//www.facebook.com/groups/free.code.camp.koblenz/) | ||
+[Koeln](//www.facebook.com/groups/free.code.camp.koeln/) | ||
+[Kolkata](//www.facebook.com/groups/free.code.camp.kolkata/) | ||
+[Kosice](//www.facebook.com/groups/free.code.camp.kosice/) | ||
+[Kosovo](//www.facebook.com/groups/free.code.camp.kosovo/) | ||
+[Kozhikode](//www.facebook.com/groups/free.code.camp.kozhikode/) | ||
+[Krasnodar](//www.facebook.com/groups/free.code.camp.krasnodar/) | ||
+[Kryvyi Rih](//www.facebook.com/groups/free.code.camp.kryvyi.rih/) | ||
+[Kuala Lumpur](//www.facebook.com/groups/free.code.camp.malaysia.kl/) | ||
+[Kulsary](https://www.facebook.com/groups/free.code.camp.kulsary/) | ||
+[La Crosse](//www.facebook.com/groups/free.code.camp.la.crosse) | ||
+[La Paz](//www.facebook.com/groups/free.code.camp.La.Paz/) | ||
+[Lae](//www.facebook.com/groups/free.code.camp.papua.new.guinea.lae/) | ||
+[Lagos](//www.facebook.com/groups/free.code.camp.lagos/) | ||
+[Lahore](//www.facebook.com/groups/free.code.camp.lahore/) | ||
+[Lakeland](//www.facebook.com/groups/Free.Code.Camp.Lakeland.Florida/) | ||
+[Las Cruces](//www.facebook.com/groups/free.code.camp.lc.nm/) | ||
+[Las Vegas](//www.facebook.com/groups/free.code.camp.las.vegas.nv/) | ||
+[Lawrence](//www.facebook.com/groups/free.code.camp.lawrence) | ||
+[Leeds](//www.facebook.com/groups/free.code.camp.leeds/) | ||
+[Leesburg](//www.facebook.com/groups/free.code.camp.leesburg/) | ||
+[Leesville](//www.facebook.com/groups/free.code.camp.leesville.la/) | ||
+[Lehi](//www.facebook.com/groups/free.code.camp.lehi/) | ||
+[Lexington](//www.facebook.com/groups/free.code.camp.lexington/) | ||
+[Lima](//www.facebook.com/groups/Free.Code.Camp.Lima/) | ||
+[Limassol](//www.facebook.com/groups/free.code.camp.limassol/) | ||
+[Lincoln, NE](//www.facebook.com/groups/free.code.camp.lincoln/) | ||
+[Lindsay](//www.facebook.com/groups/free.code.camp.lindsay/) | ||
+[Lisbon](//www.facebook.com/groups/free.code.camp.lisbon/) | ||
+[Little Rock](//www.facebook.com/groups/free.code.camp.little.rock/) | ||
+[Lodz](//www.facebook.com/groups/free.code.camp.lodz/) | ||
+[London, ON](//www.facebook.com/groups/free.code.camp.london.on/) | ||
+[London](//www.facebook.com/groups/free.code.camp.london/) | ||
+[Los Alamos](//www.facebook.com/groups/free.code.camp.los.alamos.nm/) | ||
+[Los Angeles](//www.facebook.com/groups/free.code.camp.los.angeles/) | ||
+[Louisville](//www.facebook.com/groups/free.code.camp.Louisville) | ||
+[Luanda](//www.facebook.com/groups/free.code.camp.luanda/) | ||
+[Lubbock](//www.facebook.com/groups/free.code.camp.lubbock/) | ||
+[Lviv](//www.facebook.com/groups/free.code.camp.lviv/) | ||
+[Lynchburg](//www.facebook.com/groups/free.code.camp.LYH/) | ||
+[Madison](//www.facebook.com/groups/free.code.camp.madison.wisconsin/) | ||
+[Madrid](//www.facebook.com/groups/free.code.camp.madrid/) | ||
+[Makati](//www.facebook.com/groups/free.code.camp.makati/) | ||
+[Male](//www.facebook.com/groups/freecodemv/) | ||
+[Managua](//www.facebook.com/groups/free.code.camp.managua/) | ||
+[Manchester, UK](//www.facebook.com/groups/free.code.camp.manchester/) | ||
+[Mangalore](//www.facebook.com/groups/free.code.camp.mangalore/) | ||
+[Manila](//www.facebook.com/groups/free.code.camp.manila/) | ||
+[Mansoura](https://www.facebook.com/groups/free.code.camp.mansoura/) | ||
+[Melbourne](//www.facebook.com/groups/free.code.camp.Melbourne/) | ||
+[Mexico City](//www.facebook.com/groups/free.code.camp.mexico.df/) | ||
+[Miami](//www.facebook.com/groups/free.code.camp.miami/) | ||
+[Mianwali](//www.facebook.com/groups/free.code.camp.mianwali/) | ||
+[Milan](//www.facebook.com/groups/free.code.camp.milan/) | ||
+[Milwaukee](//www.facebook.com/groups/free.code.camp.milwaukee/) | ||
+[Minneapolis](//www.facebook.com/groups/free.code.camp.minneapolis/) | ||
+[Minsk](//www.facebook.com/groups/free.code.camp.Minsk/) | ||
+[Mississippi Gulf Coast](//www.facebook.com/groups/free.code.camp.msgulfcoast/) | ||
+[Missoula](//www.facebook.com/groups/free.code.camp.missoula/) | ||
+[Modesto](//www.facebook.com/groups/free.code.camp.modesto/) | ||
+[Monterrey](//www.facebook.com/groups/free.code.camp.monterrey/) | ||
+[Montevideo](//www.facebook.com/groups/free.code.camp.montevideo/) | ||
+[Montgomery](//www.facebook.com/groups/free.code.camp.montgomery.alabama/) | ||
+[Montreal](//www.facebook.com/groups/free.code.camp.montreal/) | ||
+[Moosejaw](//www.facebook.com/groups/free.code.camp.moosejaw) | ||
+[Morgan City](//www.facebook.com/groups/free.code.camp.morgan.ciry.la/) | ||
+[Morgantown](https://www.facebook.com/groups/free.code.camp.morgantown/) | ||
+[Moscow](//www.facebook.com/groups/free.code.camp.moscow/) | ||
+[Moss Point](//www.facebook.com/groups/free.code.camp.moss.point.mississippi/) | ||
+[Multan](//www.facebook.com/groups/free.code.camp.multan) | ||
+[Mumbai](//www.facebook.com/groups/frre.code.camp.mumbai/) | ||
+[Munich](//www.facebook.com/groups/free.code.camp.munich/) | ||
+[Munster](//www.facebook.com/groups/free.code.camp.cork.munster/) | ||
+[Muskegon](https://www.facebook.com/groups/free.code.camp.muskegon/) | ||
+[Mykolaiv](https://www.facebook.com/groups/free.code.camp.mykolaiv/) | ||
+[Mysore](//www.facebook.com/groups/free.code.camp.mysore/) | ||
+[Nairobi](//www.facebook.com/groups/free.code.camp.nairobi/) | ||
+[Nantes](//www.facebook.com/groups/free.code.camp.nantes/) | ||
+[Napa](//www.facebook.com/groups/free.code.camp.napa/) | ||
+[Napoli](//www.facebook.com/groups/free.code.camp.napoli) | ||
+[Nashik](//www.facebook.com/groups/free.code.camp.your.nashik/) | ||
+[Nashville](//www.facebook.com/groups/free.code.camp.nashville/) | ||
+[Natal](https://www.facebook.com/groups/free.code.camp.natal) | ||
+[Nazareth](//www.facebook.com/groups/Free.Code.Camp.Nazareth.Israel/) | ||
+[New Brunswick](//www.facebook.com/groups/free.code.camp.new.brunswick.new.jersey/) | ||
+[New Haven](//www.facebook.com/groups/free.code.camp.new.haven/) | ||
+[New Orleans](//www.facebook.com/groups/free.code.camp.neworleans/) | ||
+[New Paltz](//www.facebook.com/groups/free.code.camp.new.paltz/) | ||
+[New Westminster](//www.facebook.com/groups/free.code.camp.new.westminster/) | ||
+[New York City](//www.facebook.com/groups/free.code.camp.new.york.city/) | ||
+[Nicosia](//www.facebook.com/groups/free.code.camp.nicosia/) | ||
+[Noida](//www.facebook.com/groups/free.code.camp.noida/) | ||
+[Norfolk](//www.facebook.com/groups/free.code.camp.norfolk) | ||
+[Normal](//www.facebook.com/groups/free.code.camp.bloomington.normal/) | ||
+[North Mississippi](//www.facebook.com/groups/free.code.camp.north.mississippi/) | ||
+[North Platte](//www.facebook.com/groups/free.code.camp.north.platte/) | ||
+[Nusajaya](//facebook.com/groups/free.code.camp.nusajaya.malaysia//) | ||
+[Oakland](//www.facebook.com/groups/free.code.camp.berkeley/) | ||
+[Oklahoma City](//www.facebook.com/groups/free.code.camp.oklahoma.city/) | ||
+[Olympia](//www.facebook.com/groups/free.code.camp.olympia/) | ||
+[Omaha](//www.facebook.com/groups/free.code.camp.omaha/) | ||
+[Omsk](//www.facebook.com/groups/free.code.camp.omsk/) | ||
+[Oradell](https://www.facebook.com/groups/free.code.camp.oradell/) | ||
+[Orange County](//www.facebook.com/groups/free.code.camp.orange.county/) | ||
+[Orenburg](//www.facebook.com/groups/free.code.camp.orenburg/) | ||
+[Orlando](//www.facebook.com/groups/free.code.camp.orlando/) | ||
+[Ottawa](//www.facebook.com/groups/free.code.camp.ottawa/) | ||
+[Owatonna](//www.facebook.com/groups/free.code.camp.owatonna/) | ||
+[Panama City](//www.facebook.com/groups/free.code.camp.panama.city) | ||
+[Parana](//www.facebook.com/groups/free.code.camp.your.apucarana.parana/) | ||
+[Paris](//www.facebook.com/groups/free.code.camp.paris/) | ||
+[Pasadena](//www.facebook.com/groups/free.code.camp.pasadena.ca/) | ||
+[Pasto](//www.facebook.com/groups/free.code.camp.pasto/) | ||
+[Penang](//www.facebook.com/groups/free.code.camp.penang/) | ||
+[Perlis](//www.facebook.com/groups/free.code.camp.perlis.malaysia) | ||
+[Perth](//www.facebook.com/groups/free.code.camp.perth/) | ||
+[Perugia](//www.facebook.com/groups/free.code.camp.perugia.it/) | ||
+[Philadelphia](//www.facebook.com/groups/free.code.camp.philadelphia/) | ||
+[Phnom Penh](//www.facebook.com/groups/free.code.camp.phnompenh.cambodia/) | ||
+[Phoenix](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
+[Pittsburgh](//www.facebook.com/groups/free.code.camp.pittsburgh.pa/) | ||
+[Poitiers](//www.facebook.com/groups/free.code.camp.poitiers/) | ||
+[Pondicherry](//www.facebook.com/groups/free.code.camp.pondicherry/) | ||
+[Port Harcourt](//www.facebook.com/groups/free.code.camp.port.harcourt/) | ||
+[Portland](//www.facebook.com/groups/free.code.camp.portland/) | ||
+[Porto Alegre](//www.facebook.com/groups/free.code.camp.porto.alegre.rs/) | ||
+[Porto](//www.facebook.com/groups/free.code.camp.porto/) | ||
+[Prague](//www.facebook.com/groups/free.code.camp.prague/) | ||
+[Prescott](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
+[Pristina](//www.facebook.com/groups/free.code.camp.pristina/) | ||
+[Providence](//www.facebook.com/groups/free.code.camp.providence/) | ||
+[Provo](//www.facebook.com/groups/free.code.camp.provo/) | ||
+[Puebla](//www.facebook.com/groups/free.code.camp.pueblaMX/) | ||
+[Pueblo](//www.facebook.com/groups/free.code.camp.pueblo/) | ||
+[Pune](//www.facebook.com/groups/free.code.camp.pune/) | ||
+[Quibdo](//www.facebook.com/groups/free.code.camp.quibdo/) | ||
+[Raleigh](//www.facebook.com/groups/free.code.camp.raleigh/) | ||
+[Ranchi](//www.facebook.com/groups/free.code.camp.ranchi/) | ||
+[Reading](//www.facebook.com/groups/free.code.camp.reading/) | ||
+[Recife](//www.facebook.com/groups/free.code.camp.recife) | ||
+[Redmond, OR](//www.facebook.com/groups/free.code.camp.remond.oregon/) | ||
+[Reno](//www.facebook.com/groups/free.code.camp.reno/) | ||
+[Reykjavik](//www.facebook.com/groups/free.code.camp.reykjavik/) | ||
+[Rice Lake](//www.facebook.com/groups/free.code.camp.rice.lake.wi/) | ||
+[Richmond](//www.facebook.com/groups/free.code.camp.richmond/) | ||
+[Riga](//www.facebook.com/groups/free.code.camp.riga/) | ||
+[Rio de Janeiro](//www.facebook.com/groups/free.code.camp.rio.de.janeiro/) | ||
+[Riverside, CA](//www.facebook.com/groups/free.code.camp.riverside.ca/) | ||
+[Riyadh](//www.facebook.com/groups/free.code.camp.Riyadh/) | ||
+[Rochester, NY](//www.facebook.com/groups/free.code.camp.Rochester.New.York/) | ||
+[Roma](//www.facebook.com/groups/free.code.camp.roma/) | ||
+[Rotterdam](//www.facebook.com/groups/free.code.camp.rotterdam/) | ||
+[Sacramento](//www.facebook.com/groups/free.code.camp.sacramento/) | ||
+[Sahiwal](//www.facebook.com/groups/1505677729748974/) | ||
+[Saint George](//www.facebook.com/groups/free.code.camp.saint.george/) | ||
+[Saint Louis](//www.facebook.com/groups/free.code.camp.saint.louis/) | ||
+[Saint Paul](//www.facebook.com/groups/free.code.camp.saint.paul.mn/) | ||
+[Saint Petersburg](https://www.facebook.com/groups/free.code.camp.saint.petersburg/) | ||
+[Salamanca](//www.facebook.com/groups/free.code.camp.salamanca/) | ||
+[Salisbury, MD](//www.facebook.com/groups/free.code.camp.salisbury.maryland/) | ||
+[Salt Lake City](//www.facebook.com/groups/free.code.camp.salt.lake.city/) | ||
+[Salvador](//www.facebook.com/groups/free.code.camp.salvador/) | ||
+[San Antonio](//www.facebook.com/groups/free.code.camp.san.antonio) | ||
+[San Bernardino](//www.facebook.com/groups/free.code.camp.san.bernardino/) | ||
+[San Diego](//www.facebook.com/groups/free.code.camp.san.diego/) | ||
+[San Francisco](//www.facebook.com/groups/free.code.camp.san.francisco) | ||
+[San Jose, Costa Rica](//www.facebook.com/groups/free.code.camp.san.jose.costa.rica/) | ||
+[San Jose](//www.facebook.com/groups/free.code.camp.san.jose) | ||
+[San Juan](//www.facebook.com/groups/free.code.camp.sanjuan.pr/) | ||
+[Santa Barbara](//www.facebook.com/groups/free.code.camp.santa.barbara/) | ||
+[Santa Clarita](//www.facebook.com/groups/free.code.camp.santa.clarita/) | ||
+[Santa Cruz](//www.facebook.com/groups/free.code.camp.SC/) | ||
+[Santa Luis Obispo](//www.facebook.com/groups/free.code.camp.SLO/) | ||
+[Santiago](//www.facebook.com/groups/free.code.camp.santiago/) | ||
+[Santo Domingo](//www.facebook.com/groups/free.code.camp.dr/) | ||
+[Sao Paulo](//www.facebook.com/groups/free.code.camp.sao.paulo/) | ||
+[Sarajevo](//www.facebook.com/groups/free.code.camp.sarajevo) | ||
+[Sarasota](https://www.facebook.com/groups/free.code.camp.sarasota.florida/) | ||
+[Sasebo](//www.facebook.com/groups/free.code.camp.sasebo/) | ||
+[Savannah](//www.facebook.com/groups/free.code.camp.savannah/) | ||
+[Scottsdale](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
+[Seattle](//www.facebook.com/groups/free.code.camp.seattle/) | ||
+[Sedona](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
+[Seoul](//www.facebook.com/groups/free.code.camp.seoul/) | ||
+[Shanghai](//www.facebook.com/groups/free.code.camp.Shanghai/) | ||
+[Sheffield](//www.facebook.com/groups/free.code.camp.sheffield/) | ||
+[Shenzhen](//www.facebook.com/groups/free.code.camp.shenzhen/) | ||
+[Sidoarjo](//www.facebook.com/groups/free.code.camp.sidoarjo/) | ||
+[Sierra Vista](//www.facebook.com/groups/free.code.camp.sierra.vista/) | ||
+[Silverspring](//www.facebook.com/groups/free.code.camp.silverspring/) | ||
+[Singapore](//www.facebook.com/groups/free.code.camp.singapore/) | ||
+[Skopje](//www.facebook.com/groups/free.code.camp.skopje/) | ||
+[Sofia](//www.facebook.com/groups/free.code.camp.sofia/) | ||
+[Solo](//www.facebook.com/groups/free.code.camp.solo/) | ||
+[Sopot](//www.facebook.com/groups/free.code.camp.trojmiasto/) | ||
+[Sorocaba](https://www.facebook.com/groups/free.code.camp.sorocaba.sp/) | ||
+[South Bend](//www.facebook.com/groups/free.code.camp.south.bend/) | ||
+[Spartanburg](//www.facebook.com/groups/free.code.camp.spartanburg/) | ||
+[Spokane](//www.facebook.com/groups/free.code.camp.spokane/) | ||
+[Springfield, MO](//www.facebook.com/groups/free.code.camp.springfield.missouri/) | ||
+[Srinagar](//www.facebook.com/groups/free.code.camp.srinagar/) | ||
+[St Cloud](//www.facebook.com/groups/free.code.camp.stcloud/) | ||
+[Stockholm](//www.facebook.com/groups/free.code.camp.stockholm.sweden/) | ||
+[Stroke-on-Trent](//www.facebook.com/groups/free.code.camp.stoke.on.trent/) | ||
+[Struga](//www.facebook.com/groups/free.code.camp.struga/) | ||
+[Stuttgart](//www.facebook.com/groups/free.code.camp.stuttgart/) | ||
+[Subotica](//www.facebook.com/groups/free.code.camp.subotica/) | ||
+[Surabaya](//www.facebook.com/groups/free.code.camp.surabaya/) | ||
+[Surigao](//www.facebook.com/groups/free.code.camp.surigao/) | ||
+[Surrey](//www.facebook.com/groups/free.code.camp.surrey/) | ||
+[Sydney, Nova Scotia](//www.facebook.com/groups/free.code.camp.sydney.ns/) | ||
+[Sydney](//www.facebook.com/groups/free.code.camp.sydney.au/) | ||
+[Szczecin](//www.facebook.com/groups/free.code.camp.szczecin/) | ||
+[Taipei](//www.facebook.com/groups/free.code.camp.taipei/) | ||
+[Tallahassee](//www.facebook.com/groups/free.code.camp.tallahassee.florida/) | ||
+[Tallinn](//www.facebook.com/groups/free.code.camp.tallinn/) | ||
+[Tampa Bay](//www.facebook.com/groups/free.code.camp.tampa/) | ||
+[Targu Mures](https://www.facebook.com/groups/free.code.camp.targu.mures/) | ||
+[Tashkent](//www.facebook.com/groups/free.code.camp.tashkent/) | ||
+[Tegucigalpa](//www.facebook.com/groups/free.code.camp.Honduras/) | ||
+[Tehran](//www.facebook.com/groups/free.code.camp.tehran/) | ||
+[Tel Aviv](//www.facebook.com/groups/free.code.camp.Tel.Aviv/) | ||
+[Temecula](//www.facebook.com/groups/free.code.camp.temecula/) | ||
+[Tempe](//www.facebook.com/groups/free.code.camp.tempe.phoenix.scottsdale/) | ||
+[Thessaloniki](//www.facebook.com/groups/free.code.camp.thessaloniki/) | ||
+[Ticino](//www.facebook.com/groups/free.code.camp.ticino/) | ||
+[Tijuana](//www.facebook.com/groups/free.code.camp.tijuana/) | ||
+[Timisoara](//www.facebook.com/groups/free.code.camp.timisoara/) | ||
+[Tirana](//www.facebook.com/groups/free.code.camp.tirana/) | ||
+[Tiraspol](https://www.facebook.com/groups/free.code.camp.tiraspol/) | ||
+[Tokyo](//www.facebook.com/groups/free.code.camp.tokyo/) | ||
+[Tom's River](//www.facebook.com/groups/free.code.camp.toms.river/) | ||
+[Torino](//www.facebook.com/groups/free.code.camp.torino/) | ||
+[Toronto](//www.facebook.com/groups/free.code.camp.to/) | ||
+[Tri-Cities Washington](//www.facebook.com/groups/free.code.camp.tricitieswa/) | ||
+[Trivandrum](//www.facebook.com/groups/freecodecamp.trivandrum/) | ||
+[Trondheim](//www.facebook.com/groups/free.code.camp.trondheim/) | ||
+[Tucson](//www.facebook.com/groups/free.code.camp.tucson/) | ||
+[Tulsa](//www.facebook.com/groups/free.code.camp.tulsa/) | ||
+[Tunis](//www.facebook.com/groups/free.code.camp.tunisia/) | ||
+[Tupelo MS](https://www.facebook.com/groups/148780962143254/) | ||
+[Ulaanbaatar](https://www.facebook.com/groups/free.code.camp.your.ulaanbaatar/) | ||
+[University Center](//www.facebook.com/groups/free.code.camp.university.center/) | ||
+[Valdosta](//www.facebook.com/groups/free.code.camp.valdosta/) | ||
+[Valencia](//www.facebook.com/groups/free.code.camp.vlc/) | ||
+[Vancouver](//www.facebook.com/groups/free.code.camp.vancouver.bc.canada/) | ||
+[Verde Valley](//www.facebook.com/groups/free.code.camp.northern.arizona/) | ||
+[Victoria](//www.facebook.com/groups/free.code.camp.victoria.bc/) | ||
+[Vilnius](//www.facebook.com/groups/free.code.camp.vilnius.lt/) | ||
+[Virginia Beach](//www.facebook.com/groups/free.code.camp.virginia.beach/) | ||
+[Vitória](//www.facebook.com/groups/free.code.camp.vitoria.e.regiao.metropolitana.es/) | ||
+[Vladivostok](//www.facebook.com/groups/free.code.camp.vladivostok/) | ||
+[Warrington](//www.facebook.com/groups/free.code.camp.warrington/) | ||
+[Warsaw](//www.facebook.com/groups/free.code.camp.warsaw/) | ||
+[Washington, DC](//www.facebook.com/groups/free.code.camp.washington.dc/) | ||
+[Waterford](//www.facebook.com/groups/free.code.camp.waterford/) | ||
+[Wichita](//www.facebook.com/groups/free.code.camp.wichita/) | ||
+[Wilmington, NC](https://www.facebook.com/groups/free.code.camp.wilmington.nc/) | ||
+[Winnipeg](//www.facebook.com/groups/free.code.camp.winnipeg/) | ||
+[Wuerzburg](//www.facebook.com/groups/free.code.camp.wuerzburg/) | ||
+[Yangon](//www.facebook.com/groups/free.code.camp.myanmar) | ||
+[Yaounde](//www.facebook.com/groups/free.code.camp.yaounde) | ||
+[Yaroslavl](//www.facebook.com/groups/free.code.camp.yaroslavl/) | ||
+[Yekaterinburg](//www.facebook.com/groups/free.code.camp.yekaterinburg) | ||
+[Yerevan](//www.facebook.com/groups/free.code.camp.armenia/) | ||
+[Zacatecas](//www.facebook.com/groups/free.code.camp.zacatecas/) | ||
+[Zacatecas](https://www.facebook.com/groups/free.code.camp.zacatecas/) | ||
+[Zagreb](//www.facebook.com/groups/free.code.camp.zagreb/) | ||
+[Zhytomyr](https://www.facebook.com/groups/free.code.camp.zhytomyr/) | ||
+[Znojmo](//www.facebook.com/groups/free.code.camp.znojmo/) | ||
[Zurich](//www.facebook.com/groups/free.code.camp.zurich/) |
0
Map.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
More-useful-APIs.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
October-2015-Improvements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
October-2015-Summit-Agenda.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Official-Free-Code-Camp-Chat-Rooms.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Other-resources-that-Free-Code-Camp-recommends-to-nonprofits.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Pair-programming-and-why-it-is-special.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Programming-Fundamental.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Promises.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Pseudoclassical-class-definition-OOp.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Pull-Request-Contribute.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Quick-tip-keep-data-in-sync.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
RTFM.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Refresh-Your-Browser-Cache.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Registering-your-Nonprofit-to-Raise-Donations-through-Free-Code-Camp-Commit.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Restrict-a-page-to-authenticated-users.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Searching-for-Your-Issue-on-Github.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Seed-data.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Select-Issues-for-Contributing-Using-Labels.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Slack.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Spanish-Translation-Terminology.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Start-Here.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Streaks.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Stream-Your-Coding-Sessions-on-Twitch.tv.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Stuck-getting-started-on-Zipline:-Build-a-personal-profile..md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Test-issue-with-Bonfire-truncate-a-string.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
The-main-advantages-of-Free-Code-Camp.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Tips-on-How-To-Become-A-Good-Pair-Programmer.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Translating-Free-Code-Camp-into-Your-Native-Language.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Trying-to-understand-the-solution-for-FCCs-sorted-union-using-callback-function.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Twitch.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Using-Github-Pages-for-your-front-end-development-projects.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Access-Array-Data-with-Indexes.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Alt-Text-to-an-Image-for-Accessibility.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Borders-Around-your-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Different-Padding-to-Each-Side-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Elements-within-your-Bootstrap-Wells.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Font-Awesome-Icons-to-all-of-our-Buttons.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Font-Awesome-Icons-to-our-Buttons.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-ID-Attributes-to-Bootstrap-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Images-to-your-Website.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Placeholder-Text-to-a-Text-Field.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Rounded-Corners-with-a-Border-Radius.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-Two-Numbers-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-a-Submit-Button-to-a-Form.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Add-your-JavaScript-Slot-Machine-Slots.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Adjust-the-Margin-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Adjusting-the-Padding-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Apply-the-Default-Bootstrap-Button-Style.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Bring-your-JavaScript-Slot-Machine-to-Life.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Build-JavaScript-Objects.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Call-out-Optional-Actions-with-Button-Info.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Center-Text-with-Bootstrap.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Change-the-CSS-of-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Change-the-Color-of-Text.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Check-Radio-Buttons-and-Checkboxes-by-Default.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Check-the-Length-Property-of-a-String-Variable.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Clone-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Comment-out-HTML.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Comment-your-JavaScript-Code.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Concatenate-Strings-with-.concat.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Condense-arrays-with-reduce.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Construct-JavaScript-Objects-with-Functions.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-Bootstrap-Wells.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-Decimal-Numbers-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Block-Element-Bootstrap-Button.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Bootstrap-Button.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Bootstrap-Headline.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Bootstrap-Row.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Bulleted-Unordered-List.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Class-to-Target-with-jQuery-Selectors.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Custom-Heading.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Form-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-JavaScript-Slot-Machine.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Set-of-Checkboxes.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Set-of-Radio-Buttons.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-a-Text-Field.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Create-an-Ordered-List.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Declare-JavaScript-Objects-as-Variables.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Declare-JavaScript-Variables.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Declare-String-Variables.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Delete-your-jQuery-Functions.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Disable-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Ditch-Custom-CSS-for-Bootstrap.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Divide-One-Number-by-Another-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Fill-in-the-Blank-with-Placeholder-Text.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Filter-Arrays-with-filter.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Find-Numbers-with-Regular-Expressions.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Find-White-Space-with-Regular-Expressions.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Generate-Random-Fractions-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Generate-Random-Whole-Numbers-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Generate-Random-Whole-Numbers-within-a-Range.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Give-Each-Element-a-Unique-ID.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Give-a-Background-Color-to-a-Div-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Give-your-JavaScript-Slot-Machine-some-stylish-images.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Headline-with-the-h2-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-House-our-page-within-a-Bootstrap-Container-Fluid-Div.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Inform-with-the-Paragraph-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Inherit-Styles-from-the-Body-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Invert-Regular-Expression-Matches-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Iterate-over-Arrays-with-map.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Iterate-with-JavaScript-For-Loops.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Iterate-with-JavaScript-While-Loops.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Join-Strings-with-.join.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Label-Bootstrap-Buttons.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Label-Bootstrap-Wells.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Learn-how-Script-Tags-and-Document-Ready-Work.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Line-up-Form-Elements-Responsively-with-Bootstrap.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Link-to-External-Pages-with-Anchor-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Make-Circular-Images-with-a-Border-Radius.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Make-Dead-Links-using-the-Hash-Symbol.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Make-Images-Mobile-Responsive.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Make-Instances-of-Objects-with-a-Constructor-Function.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Make-Object-Properties-Private.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Manipulate-Arrays-With-pop().md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Manipulate-Arrays-With-push().md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Manipulate-Arrays-With-shift().md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Manipulate-Arrays-With-unshift().md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Manipulate-JavaScript-Objects.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Modify-Array-Data-With-Indexes.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Multiply-Two-Numbers-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Nest-Many-Elements-within-a-Single-Div-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Nest-one-Array-within-Another-Array.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Override-All-Other-Styles-by-using-Important.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Override-Class-Declarations-by-Styling-ID-Attributes.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Perform-Arithmetic-Operations-on-Decimals-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Prioritize-One-Style-Over-Another.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Remove-Classes-from-an-element-with-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Remove-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Responsively-Style-Checkboxes.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Responsively-Style-Radio-Buttons.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Reverse-Arrays-with-reverse.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Say-Hello-to-HTML-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Set-the-ID-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Sift-through-Text-with-Regular-Expressions.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Size-your-Images.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Sort-Arrays-with-sort.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Specify-How-Fonts-Should-Degrade.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Split-Strings-with-split.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Split-your-Bootstrap-Row.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Store-Multiple-Values-in-one-Variable-using-JavaScript-Arrays.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Style-Multiple-Elements-with-a-CSS-Class.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Style-Text-Inputs-as-Form-Controls.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Subtract-One-Number-from-Another-with-JavaScript.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-Elements-by-Class-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-Elements-by-ID-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-Even-Numbered-Elements-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-HTML-Elements-with-Selectors-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-a-Specific-Child-of-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-the-Children-of-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-the-Parent-of-an-Element-Using-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Target-the-same-element-with-multiple-jQuery-Selectors.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Taste-the-Bootstrap-Button-Color-Rainbow.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Uncomment-HTML.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Understand-Boolean-Values.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Abbreviated-Hex-Code.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Bracket-Notation-to-Find-the-First-Character-in-a-String.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Bracket-Notation-to-Find-the-Last-Character-in-a-String.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Bracket-Notation-to-Find-the-Nth-Character-in-a-String.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Bracket-Notation-to-Find-the-Nth-to-Last-Character-in-a-String.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-CSS-Selectors-to-Style-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Clockwise-Notation-to-Specify-the-Margin-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Clockwise-Notation-to-Specify-the-Padding-of-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Comments-to-Clarify-Code.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Conditional-Logic-with-If-Else-Statements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-HTML5-to-Require-a-Field.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Hex-Code-for-Specific-Colors.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Hex-Code-to-Color-Elements-Blue.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Hex-Code-to-Color-Elements-Green.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Hex-Code-to-Color-Elements-Red.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Hex-Code-to-Mix-Colors.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-RGB-values-to-Color-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Responsive-Design-with-Bootstrap-Fluid-Containers.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-Spans-for-Inline-Elements.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-a-CSS-Class-to-Style-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-an-ID-Attribute-to-Style-an-Element.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-appendTo-to-Move-Elements-with-jQuery.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-jQuery-to-Modify-the-Entire-Page.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0
Waypoint-Use-the-Bootstrap-Grid-to-Put-Elements-Side-By-Side.md
Sorry, we could not display the changes to this file because there were too many other changes to display.
0 comments on commit
e3bce7f