From fa8af8ae054ed6cbf9a2d0c81106596ef55a0c91 Mon Sep 17 00:00:00 2001 From: benmcmahon100 Date: Mon, 6 Jul 2015 23:46:26 +0100 Subject: [PATCH 01/29] Fix for #1218 --- challenges/basic-html5-and-css.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenges/basic-html5-and-css.json b/challenges/basic-html5-and-css.json index ed77997c17..237a7e6d32 100644 --- a/challenges/basic-html5-and-css.json +++ b/challenges/basic-html5-and-css.json @@ -1800,7 +1800,7 @@ ], "tests": [ "assert($('form').children('button').length > 0, 'Your form should have a button inside it.')", - "assert($('button').attr('type') === 'submit', 'Your submit button should have be of input type \"submit\".')", + "assert($('button').attr('type') === 'submit', 'Your submit button should have the type \"submit\".')", "assert($('button').text().match(/submit/gi), 'Your submit button should have the text \"submit\".')", "assert(editor.match(/<\\/button>/g) && editor.match(/", - " ", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - "

How much money did you make last year (in USD)?

", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
View Data Source JSON  •  Recalculate", - "
", - "

Notes:

", - "
    ", - "
  1. For cash-up-front bootcamps, we assumed an APR of 6% and a term of 3 years.
  2. ", - "
  3. For wage-garnishing bootcamps, we assume 18% of first year wages at their advertised starting annual salary of around $100,000.
  4. ", - "
  5. We assume a cost of living of $500 for cities like San Francisco and New York City, and $400 per week for everywhere else.
  6. ", - "
  7. The most substantial cost for most people is lost wages. A 40-hour-per-week job at the US Federal minimum wage would pay at least $15,000 per year. You can read more about economic cost here.
  8. ", - "
  9. Free Code Camp. We don't charge tuition or garnish wages. We're fully online so you don't have to move. We're self-paced so you don't have to quit your job. Thus, your true cost of attending Free Code Camp will be $0.
  10. ", - "
", - "
", - "
", - "
", - "
", - "

Built by Suzanne Atkinson

", - "

Suzanne is an emergency medicine physician, triathlon coach and web developer from Pittsburgh. You should  follow her on Twitter.

", - "
", - "
", - "
", - "
", - "
", - " ", - "" - ] - }, { "id": "bd7158d9c435eddfaeb5bdef", "name": "Does Free Code Camp have an application process?", @@ -1162,5 +1004,253 @@ "

All campers who have already completed these challenges are retroactively eligible for the certificate!

", "" ] + }, + { + "id": "bd7156d9c436eddfadb5bd3b", + "name": "How can I watch Live Coding on the Free Code Camp Twitch.tv Channel?", + "dashedName": "how-can-i-watch-live-coding-on-the-free-code-camp-twitch-tv-channel", + "description": [ + "
", + "
", + "
Watch us code on our Twitch.tv channel
", + "
", + "
", + "
", + "

Watch the live stream below or on our  Twitch.tv channel.

", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + "
", + "

Check out our scheduled shows. You can add them to your calendar.

", + "
", + " ", + "
", + "
", + "

", + "
", + "
", + "

Here are some of our previous shows (you can full-screen them):

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/Z_43xApGB9Y

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/PvWHzcebjjQ

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/yHL6mEr-LGY

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/dolG-yRMcPs

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/YMz_vrK_KlQ

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/bbFVxaza8Ik

", + "
", + "
", + "
", + "
", + "
", + "
", + "
", + "
", + "
" + ] + }, + { + "id": "bd7159d9c436eddfaeb5bdef", + "name": "Can I Calculate the True Cost of a Bootcamp with a Coding Bootcamp Cost Calculator?", + "dashedName": "can-i-calculate-the-true-cost-of-a-bootcamp-with-a-coding-bootcamp-cost-calculator", + "description": [ + "", + "
", + "
", + "

Coding Bootcamp Cost Calculator

", + "

Coming from _______, and making $_______, your true costs will be:

", + "
", + "
", + "

Where do you live?

", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + "

How much money did you make last year (in USD)?

", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", + "
View Data Source JSON  •  Recalculate", + "
", + "

Notes:

", + "
    ", + "
  1. For cash-up-front bootcamps, we assumed an APR of 6% and a term of 3 years.
  2. ", + "
  3. For wage-garnishing bootcamps, we assume 18% of first year wages at their advertised starting annual salary of around $100,000.
  4. ", + "
  5. We assume a cost of living of $500 for cities like San Francisco and New York City, and $400 per week for everywhere else.
  6. ", + "
  7. The most substantial cost for most people is lost wages. A 40-hour-per-week job at the US Federal minimum wage would pay at least $15,000 per year. You can read more about economic cost here.
  8. ", + "
  9. Free Code Camp. We don't charge tuition or garnish wages. We're fully online so you don't have to move. We're self-paced so you don't have to quit your job. Thus, your true cost of attending Free Code Camp will be $0.
  10. ", + "
", + "
", + "
", + "
", + "
", + "

Built by Suzanne Atkinson

", + "

Suzanne is an emergency medicine physician, triathlon coach and web developer from Pittsburgh. You should  follow her on Twitter.

", + "
", + "
", + "
", + "
", + "
", + "
", + "
" + ] } ] From 003aa90f8b4fff213f09fe77eb76216c70db14ba Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sat, 11 Jul 2015 19:31:08 -0700 Subject: [PATCH 13/29] add hikes.json --- challenges/hikes.json | 812 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 801 insertions(+), 11 deletions(-) diff --git a/challenges/hikes.json b/challenges/hikes.json index 06f50a8dd9..4130d41409 100644 --- a/challenges/hikes.json +++ b/challenges/hikes.json @@ -1,21 +1,811 @@ { - "name": "Functional Programming", + "name": "Hikes", "order": 0.050, "challenges": [ { - "id": "bd7129d8c441eddfbeb5bddf", - "name": "Hike: Computer Security", - "dashedName": "waypoint-computer-security", - "difficulty": 0.01, - "challengeSeed": ["133186284"], + "id": "bd7128d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 1: The 4 Basic Parts of a Computer", + "dashedName": "hike-computer-basics-1-the-4-basic-parts-of-a-computer", + "difficulty": 9.01, + "challengeSeed": [ + "132542064" + ], "description": [ - "The basics of computer security, and how to make sure you protect your information. Let's cover computer security. The first thing we're going to talk about is something called a dictionary attack which has to do with your passwords. When creating your passwords, some sites require extremely specific and complicated passwords, which is actually a bit unnecessary. The type of attacks they're trying to gaurd you from are dictionary attacks. Dictionary attacks are programmed to try every word in the dictionary, or in its own database of common words and passwords, as the password for a large mass of usernames. If your password is Kangaroo, they're probably going to break into your account. Most passwords aren't this simple, but that doesn't matter. They attack such a massive amount of accounts that they only need a few passwords that are relatively simple. When creating a password, you want to use different cases, numbers, and symbols, but one of the most effective ways to create a good password is to throw some random letters in there (ex: kangarooSyCA67). Also, stay away from sequential numbers. Phishing, another thing to watch out for, is emails or webpages that mimic other valid sites to try and trick people into entering their personal information, though the site truly isn't connected to the site it's trying to mimic. In general, two ways to safeguard from these attacks are checking the address in the browser and to open a new browser and go to the website that is claiming to contact you. Let's also discuss encryption and HTTPS. If you are at Starbucks trying to access your bank account, you have reason to be suspicious that someone could see and take your information. You will want to look for a green HTTPS instead of HTTP at the beginning of the web address. That means that the site you're sending your information to is encrypting your passwords and other information, scrambling up data according to a code that only they know. In general, whenever you're showing private or sensitive information, check for HTTPS. A few other general tips: don't share passwords between important accounts. If a site you use gets hacked into, your password may be compromised regardless of its strength. Also, don't download strange files. If you don't recognise the file type like .pdf, .txt, .jpg, be wary. Some of these files you download can be very powerful and even run your computer from the inside. Lastly, keep your software updated, particularly software that interacts with the internet. One way that information can be compromised is when 'bad guys' find holes and gaps in security of older versions of softwares. Those bugs have been patched in newer versions, so if you keep everything updated, you'll avoid lots of problems. These are all very basic things you should know about how to keep your information safe on your computer." + "At the very least, a machine needs these four basic parts to be considered a computer.", + "Today we're going to talk about the basics of computer hardware.", + "Computers are made up of 4 basic parts: the input, output, CPU, and memory.", + "The input is what you're putting into the computer.", + "Think about mouse, keyboard, microphone, any way you're getting data into the computer.", + "The output is what you're watching on your monitor or listening to on your speakers.", + "These can both be any format like text, numbers, videos, images, what have you, it doesn't matter.", + "CPU stands for central processing unit, and that's what we all think of when we think of a computer.", + "It's what does the functions, it's what runs the software, it manipulates the data.", + "The memory is where we store data and information.", + "Now, the CPU has exclusive access to this memory.", + "You can't get to the memory from the input or the output without the use of the CPU.", + "So, just to review, we've got 4 basic parts of the computer: the input, the output, CPU, and memory." ], "challengeType": 6, "tests": [ - "Q1: Passwords should be shared with all of your accounts (F, don't reuse important passwords)", - "Q2: If you don't trust a site or an email, open a new browser and re-enter the intended location. (T)", - "Q3: Keeping software updated will help protect your computer and your information. (T)" + "The computer has 3 basic parts. (F, the computer has 4 basic parts: input, output, CPU, and memory)", + "CPU stands for Central Processing Unit. (T)", + "All parts can access the memory (F, only the CPU has access to the memory)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7127d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 2: More Computer Hardware", + "dashedName": "hike-computer-basics-2-more-computer-hardware", + "difficulty": 9.02, + "challengeSeed": [ + "132542458" + ], + "description": [ + "In this video we cover the basic functions of a motherboard, expansion slots, and power supply.", + "Let's quickly review - the 4 basic parts of a computer are the input, like the mouse or the keyboard, the output, which is seen on the monitor or heard on the speakers, the CPU, the central processing unit, and the memory.", + "Now memory can be short term memory, called RAM, or longer term memory.", + "That's usually as a hard drive, but it can also be a CD-ROM or a flash drive, anything like that.", + "In addition to those four basic parts, we have three more things we're going to discuss today: the motherboard, expansion cards, and power supply.", + "The motherboard is what connects everything.", + "While the data's flying around over here trying to figure out where to go, the motherboard helps route it so it goes to the right place.", + "Expansion cards are sound cards, video cards, that kind of thing that can really up your experience as a user.", + "Power supply is, as it sounds, what gets power to the computer.", + "It's usually that part that has a fan on it to keep it from overheating.", + "So let's do a quick review.", + "In addition to the four basic parts of input, output, CPU, and memory, we also usually have a motherboard, expansion cards, and a power supply." + ], + "challengeType": 6, + "tests": [ + "The power supply isn't a necessary part of a computer since it's not one of the 4 main parts. (F, the computer needs power!)", + "A motherboard connects all of the working parts in a computer. (T)", + "Memory is usually categorized into 3 parts. (F, only 2 parts, RAM and long term memory such as a hard drive)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7126d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 3: Intro to Binary Code", + "dashedName": "hike-computer-basics-3-intro-to-binary-code", + "difficulty": 9.03, + "challengeSeed": [ + "132542757" + ], + "description": [ + "What binary looks like, and what it can mean.", + "0's and 1's can turn be interpreted into far more complex data.", + "Today we're going to talk a little bit about binary code.", + "Binary code is a really simple computer language where there are only 1's and 0's, that are either on or off, 1 being on and 0 being off.", + "Those 1's and 0's can be pretty much anything, but generally they are just numbers, letters, and symbols.", + "We're going to go into how you decode a number in binary, but as you can probably guess, translating binary can be done with a quick google search.", + "The most important part of this is you undrestand the concept that even simple things like 1's and 0's can translate into something really complex that is the basis for all of the computer languages that exist today." + ], + "challengeType": 6, + "tests": [ + "1's and 0's are how we talk about little switches being on and off. (T)", + "1 means on, and 0 means off. (T)", + "There are some things which cannot be translated into binary. (F, everything can be expressed through binary code!)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7125d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 4: Decoding a Binary Number", + "dashedName": "hike-computer-basics-4-decoding-a-binary-number", + "difficulty": 9.04, + "challengeSeed": [ + "132543332" + ], + "description": [ + "In this video, we decode a number written in binary notation.", + "Let's talk about the binary numeral system, also known as a bunch of 1's and 0's over and over again.", + "We're going to start by labeling, staring backwards, how many numbers there are.", + "(In this video there are 7, but we start at 0, so we only get up to 6.) Pretty straightforward.", + "The next step is to take 2 to the power of whatever place it is, a 2 to the 0, 2 to the 1, all the way up to the largest placeholder.", + "Then, all we have to do is fill in some mathamatical blanks by completing the exponential 2 problems.", + "If there is a 1, we keep that number (the two to the exponent solution) and add it to other \"1\" or \"on\" numbers.", + "If it's a 0, we disregard it.", + "In this video, our number adds up to 75." + ], + "challengeType": 6, + "tests": [ + "1 === on and 0 ===off. (T)", + "Not all numbers can be expressed through binary numeral notation. (F, all numbers can!)", + "If we have the opportunity to include base 2 to every given power, we can create any number. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7124d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 5: How To Measure Data Size", + "dashedName": "hike-computer-basics-5-how-to-measure-data-size", + "difficulty": 9.05, + "challengeSeed": [ + "132543959" + ], + "description": [ + "How the size/amount of data is measured, starting from a bit and going all the way up to a petabyte.", + "Today we're going to be talking about Data Size.", + "The smallest size we can have is called a bit.", + "That bit can only be a 1 or a 0, and that goes back go binary we've been talking about.", + "After that, we've got a Nibble, which is 4 bits, which isn't common but it's adorable.", + "The Byte, which is very common, is 8 bits.", + "A lot of things are expressed in binary Bytes.", + "After we get past the tiny bit and the small Byte, we get bigger really fast.", + "The next step up is a Kilobyte, 1024 Bytes, or 1,048,576 bits.", + "After that there's Megabyte, or 1024 Bytes to the power of two.", + "Then it's Gigabyte, 1024 Bytes to the power of three; Terabyte, 1024 Bytes to the power of 4, and Petabyte, 1024 to the power of 5.", + "These get much bigger really quickly!" + ], + "challengeType": 6, + "tests": [ + "A Byte is the smallest possible amount of data. (F, a Byte is 8 bits)", + "A bit is the smallest possible amount of data (T)", + "A Kilobyte is 1024 Bytes. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7123d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 6: Measuring Data Speed", + "dashedName": "hike-computer-basics-6-measuring-data-speed", + "difficulty": 9.06, + "challengeSeed": [ + "132545171" + ], + "description": [ + "Data speed and data size are measured differently.", + "In this video, we cover how data speed is measured.", + "Let's talk about data speed.", + "Data speed, unlike data size, is usually measured in bits per second, whereas size is usually measured in Bits.", + "Once we start talking exponentially, that makes a really big difference.", + "How we talk about speed really depends on what we're talking about.", + "In audio download, we talk about kilobits per second.", + "In internet, we use megabits per second.", + "In network speed, we talk about Gigabits per second (one billion bits per second!).", + "The main takeaway here is that speed is usually measured in bits and size is measured in Bytes.", + "Additionally, if you have an internet speed that says however many bits per second, keep in mind they are talking about something 8 times less than Bytes, how you are thinking about data." + ], + "challengeType": 6, + "tests": [ + "Data speed is measured in bits. (T)", + "Data size is measured in bits. (F, size is Bytes and speed is bits)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7122d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 7: Binary Bytes", + "dashedName": "hike-computer-basics-7-binary-bytes", + "difficulty": 9.07, + "challengeSeed": [ + "132545417" + ], + "description": [ + "Binary does more than express numbers - through bytes, it can symbolize all alphanumeric symbols, which can then be interpreted into more complex code.", + "Let's talk about the most basic level that computer can understand other languages, like javascript.", + "THe most basic thing is a bit, up or down, 1 or 0.", + "After that ther'es a Byte, 8 bits.", + "All numbers (255 and less), letters, and symbols can be translated into Bytes that the computer can understand.", + "So, all of the numbers, letters, and symbols in your javascript can be translated.", + "There are a lot of languages that computers can work with, and what I want you to get away from this video is that all data in your computer boils down to binary Bytes." + ], + "challengeType": 6, + "tests": [ + "All digits, letters, and symbols have a binary Byte translation. (T)", + "It's good practice to memorize these. (F, you can just look these up as needed).", + "Everything can be expressed binarily, even pictures, sound, and video. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7121d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 8: Types of Computers", + "dashedName": "hike-computer-basics-8-types-of-computers", + "difficulty": 9.08, + "challengeSeed": [ + "132546182" + ], + "description": [ + "This video covers the basics of supercomputers, servers, workstations, PCs, and microcontrollers.", + "Let's discuss the different types of computers.", + "The biggest type is called a super computer, a computer with lots of CPUS that work on the same problem at the same time using a technique called parallel processing.", + "The next type is called a server.", + "A server holds and accesses lots of data or programs.", + "Free Code Camp is hosted on a server which stores all of that information.", + "Let's talk now about a workstation computer - a computer that may look similar to a personal computer, but has a lot more power and is a lot pricier.", + "Toy Story was built on workstation computers.", + "Now, personal computers are by far the most common.", + "Maybe you've heard \"I'm a Mac!\" or \"I'm a PC!\", something indicating they're different, but really my own personal MacBook is still a PC, a personal compter.", + "It's both a Mac and a PC.", + "The last type of computer we'll talk about is a microcontroller, the type of computer you might have in your car that is really good at a small specialized task, but wouldn't be used the same way a PC would be." + ], + "challengeType": 6, + "tests": [ + "The most common type of computer is a Personal Computer, a PC. (T)", + "What makes Supercomputers 'super' is when multiple CPUs work on one problem, called parallel processing. (T)", + "Microcontrollers and workstation computers can perform roughly the same tasks. (F, a microcontroller can only perform a small specialized task while a workstation computer has a lot of power, though also specialized.)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7120d8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 9: More on the Motherboard", + "dashedName": "hike-computer-basics-9-more-on-the-motherboard", + "difficulty": 9.09, + "challengeSeed": [ + "132547285" + ], + "description": [ + "A little more detail on what constitutes a motherboard and what functionalities are standard in PCs.", + "Today we're going to be talking more about the motherboard.", + "We mentioned it briefly in previous videos, but we'll give some more detail today.", + "What makes a motherboard is the connection between the CPU and the memory - if it doesn't do that, it's not a motherboard.", + "But, most motherboards do a lot more than that.", + "Primarily, they have expansion slots and ports.", + "Expansion slots are where you put anything that can increase the performance of a computer without putting more load on the CPU.", + "For example, a graphics or a sound card would up the user experience by giving better sound or video quality, but it wouldn't slow down the computer.", + "A Network Interface Card could also go in an expansion slot.", + "This would help your computer conncet with the networks around it, something we'll talk about more in upcoming videos.", + "PC and Express cards are primarily found in laptops, and Express cards are taking over due to their smaller size.", + "In addition to expansion slots, motherboards have ports.", + "On your computer, you probably know there's a place to connect USB, firewire, SD card, ethernet, even an audio plug-in to listen through headphones.", + "These are all considered ports, a place on the motherboard where you can connect the CPU to some outside source to either get or give information." + ], + "challengeType": 6, + "tests": [ + "A motherboard must connect the CPU, the memory, and the network. (F, a motherboard is a motherboard as long as it connects the CPU and the memory).", + "Expansion slots allow users to add capabilities to a computer. (T)", + "Ports help the computer access information. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712fd8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 10: Data Networks", + "dashedName": "hike-computer-basics-10-data-networks", + "difficulty": 9.10, + "challengeSeed": [ + "132547590" + ], + "description": [ + "This video covers the basics of local area networks, wide area networks, and virtual private networks.", + "In this video we talk about Data Networks.", + "You've heard of networks, like a water network, road network, cell phone network, or television network.", + "Today we'll talk about data networks, which are the networks that computers use.", + "The three types we'll cover are the Local Area Network (LAN), the Wide Area Network (WAN), and the Virtual Private Network (VPN).", + "A LAN is just a small group of computers that are connected together.", + "The most important thing about a LAN is that those computers are close together.", + "So, if you're using wifi at Starbucks or at your school, you're probably using a LAN that you can only connect to if you are physically close to it.", + "A WAN (Wide Area Network) is two or more LANs that are connected over long distances.", + "So, maybe a school in Colorado wants to connect to a school in Missouri.", + "They could use a WAN.", + "You might think that these are connected over the internet, and in the case of a VPN (Virtual Private Network, which is basically the same conceptionally as a WAN), you're right.", + "However, a WAN usually rents a cable from an internet company to creat the connection." + ], + "challengeType": 6, + "tests": [ + "You can connect to a LAN from far away. (F, to connect to a LAN you must be physically near to it).", + "VPNs (Virtual Private Networks) and WANs (Wide Area Networks) do just about the same thing. (T)", + "VPNs and WANs both use the internet to connect LANs. (F, while both connect LANs, VPNs use the internet and WANs use a rented cable)." + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712ed8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 11: IP Addresses", + "dashedName": "hike-computer-basics-11-ip-addresses", + "difficulty": 9.11, + "challengeSeed": [ + "132548071" + ], + "description": [ + "The Internet, part 1: IP Addresses.", + "Every device has an IP address.", + "IP addresses are assigned based on location, and are vital for the internet to work.", + "We're going to talk about the Internet: Part 1, How the Internet Works.", + "To know how the internet works, we're going to talk first about IP addresses.", + "You may be familliar with the fact that each of your devices has its own IP address, just like a house or an apartment has its own address.", + "The internet can't deliver data to a device unless it has an IP address.", + "Not only does your device have one, but so does the modem, the router, and every step along the way, which we'll get to later.", + "IP addresses are determined based on location, starting with 5 big international regions.", + "Moving from left to right, the numbers mean something specific about your location.", + "This number isn't specific enough that you could call 911, give them your IP address, and have them know where you live.", + "However, it is specific enough that you could google \"Where's the best ice cream near me\" and google could give you information close to your location.", + "This is done using your IP address." + ], + "challengeType": 6, + "tests": [ + "IP addresses are necessary to use and participate in the internet. (T)", + "IP addresses are determined and assigned based on location (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712dd8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 12: How the Internet Works", + "dashedName": "hike-computer-basics-12-how-the-internet-works", + "difficulty": 9.12, + "challengeSeed": [ + "132548579" + ], + "description": [ + "This is a brief and basic overview of how the internet works.", + "For a more in-depth explanation, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", + "Let's talk a little more about how the internet works.", + "We've already estabilished that every device and router on the intenet has its own IP address, which is assigned based on location.", + "Using these IP addresses, your device can talk to your modem, then to a router, which is set up by a web service.", + "The router would go to the domain name server, still just sending a request.", + "That server would send back the information that was requested, and it would go back to your device.", + "You might think this is fallable; if one step goes out, then the whole process is done.", + "But really, there are so many routers and so many routes that if even a big chunk goes out, that still won't really affect the functionality.", + "It's really amazing.", + "What I want you take away from this video is that your device, since it has an IP address, can send out a request for informatoin, and that information will get back to your device via servers and routers that comprise the internet.", + "Now, this explaination is really quite basic.", + "For more information, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm." + ], + "challengeType": 6, + "tests": [ + "Your computer sends a request for information. (T)", + "The Internet can be broken by a large chunk of routers and servers going down. (F, there are so many connections that even a large amount of routers and servers can stop functioning and your experience will still not be affected.)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712cd8c441eddfbeb5bddf", + "name": "Hike: Computer Basics 13: Software", + "dashedName": "hike-computer-basics-13-software", + "difficulty": 9.13, + "challengeSeed": [ + "132548908" + ], + "description": [ + "We discriminate between hardware and software, and also discuss the differences between an operating system and application software.", + "In this video, we'll discuss the basics of software.", + "We've already covered hardware, which are parts of the computer you can see and feel with your hands.", + "Software is the program or the programs that run on the hardware.", + "Software is the code that is written and imprinted onto hardware.", + "The two types of software we're going to talk about today are operating system software and applications.", + "There are three main operating systems: Windows, Mac, and Linux.", + "Applications comprise all other software, like your web browser, games, things like Photoshop, how you view your mail, editing documents, etc." + ], + "challengeType": 6, + "tests": [ + "Safari, Chrome, and Firefox are all examples of application software. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712bd8c441eddfbeb5bddf", + "name": "Hike: What Do Programmers Do?", + "dashedName": "hike-what-do-programmers-do", + "difficulty": 9.14, + "challengeSeed": [ + "133166912" + ], + "description": [ + "Programmers (a.k.a.", + "coders, developers, or software engineers) solve problems by turning big ideas into tiny steps that a computer can understand.", + "In this video, we'll discuss what programmers do.", + "Programmers can also be called coders, developers, or software engineers, and what all of these peple do is take ideas and turn them into functional code.", + "It's not just creating that code, but also maintaining it.", + "Let's look at how the computer looks at code, specifically javascript.", + "The computer looks at code one line at a time, and as you're writing code, you will notice numbers on the left hand side.", + "The computer literally goes down line by line, making sense of what each line has to say.", + "Everything is done sequentially, just straight down, so refrencing something that is below and hasn't happened yet will lead to a problem.", + "Computers just read straight down like you would read a book.", + "Programmers are the ones responsible for breaking their ideas down into the little tiny steps and writing them in a way that computers can understand them." + ], + "challengeType": 6, + "tests": [ + "Computers look at code one line at a time. (T)", + "Programmers and developers are totally different professions with very little in common. (F, those titles are so similar they could even describe the same job position.) ", + "Programmers take ideas and break them down into little tiny steps the computer can understand (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd712ad8c441eddfbeb5bddf", + "name": "Hike: Console and Logging", + "dashedName": "hike-console-and-logging", + "difficulty": 9.15, + "challengeSeed": [ + "133170880" + ], + "description": [ + "We discuss what (and where) the console is, why it's useful, and show a little of how it works.", + "The console: what it is, where you can find it, and what you use it for.", + "The console is very commonly used to display system adminstrative messages.", + "Your browser and your computer both have their own consoles.", + "Once you become famlliar with it, you will find it to be a very useful and powerful tool.", + "In Javascript, the console is used as a great tool for debugging and finding out where in your code there's a problem.", + "One of the most important terms you'll need to remember is \"console.log()\".", + "The process of doing this can be put anywhere in the lines of code to help find, identify, and ultimately fix specific issues.", + "Using the Chrome browser and the Chrome console, if we type in \"console.log(\"Free Code Camp rocks!\");\", the console will literally display \"Free Code Camp rocks!\".", + "This will also work with numbers and booleans, which are true/false statements.", + "When consoling words, it's important to put it inside of quotations so it recognizes it's a string." + ], + "challengeType": 6, + "tests": [ + "The console serves only small, unnecessary purposes. (F, The console's main purpose is to debug, which is a vital step in creating code).", + "You can console strings (sets of words), numbers, and booleans (true/false statements) (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7119d8c441eddfbeb5bddf", + "name": "Hike: Variables In Code", + "dashedName": "hike-variables-in-code", + "difficulty": 9.16, + "challengeSeed": [ + "133172920" + ], + "description": [ + "Variables are used frequently in Javascript and many other coding languages.", + "Here we show a few simple examples of how." + ], + "challengeType": 6, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7029d8c441eddfbeb5bddf", + "name": "Hike: Source Code", + "dashedName": "hike-source-code", + "difficulty": 9.17, + "challengeSeed": [ + "133177129" + ], + "description": [ + "In this video we discuss what source code is, interpreters and compilers, and what open source means.", + "Let's talk about source code: what source code is, where you'll see it, and how the computer makes sense of it.", + "Source code itself is the actual text document that the programmer creates: they type it up, it's letters, numbers, and symbols.", + "If you give that to somebody and have them look at that document on their computer, that's not going to help them view their email, it's not going to be a browser, it's just a text document.", + "The computer has to have a way of interpreting that and making something really powerful run from it.", + "There are two main ways this is done: either by an interpreter or a compiler.", + "Every browser has an interpreter, and that's how javascript is processed.", + "Other languages, like C++, are used with a compiler.", + "Unlike an interpreter, the compiler does all of its work on the programmer's end.", + "They send out their package, their product, and it's already been compiled, it can already run on a machine.", + "Javascript, however, and other interpreter languages, you just write the javascript and the browser on the user's end has the capability to interpret it so you don't need a compiler.", + "Everyone has an opinion to which is better (interpreter or compiler), but really each has their pros and cons, and it goes on a case by case basis.", + "They're better at different things.", + "Now, let's focus on what open source means.", + "Free Code Camp is open source, meaning that all of the documentation and source code is open and accessable.", + "You may be thinking, \"so what?\", but what's awesome is that if you want to change or improve Free Code Camp, you can write that improvement and maybe get it implemented.", + "It's a great way for websites and software to grow in a strong and fast way because of the community working together to improve it.", + "One unwritten rule of contributing to open source projects is that you should generally submit your improvements to also be open source, and by giving that improvement back to the public, you let others use your improvement as well." + ], + "challengeType": 6, + "tests": [ + "Source code is a text document. (T)", + "Javascript is a compiler language. (F, Javascript is an interpreter language)", + "Free Code Camp is open source. (T)" + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7129d8b441eddfbeb5bddf", + "name": "Hike: Routers and Packets", + "dashedName": "hike-routers-and-packets", + "difficulty": 9.18, + "challengeSeed": [ + "133181251" + ], + "description": [ + "In this video, we go into a little more detail about routers and packets, important concepts to understand about how the internet works.", + "Let's talk more about routers and how they relate to networking.", + "Routers are the things that connect different small area networks.", + "I want to give a metaphor for this: I'm a teacher and I work at a school.", + "Say I have a package that I need to get to someone who works in the district offices.", + "I don't know where she is, I don't know where her office is located, but I know her name.", + "I go to my secretary, like my first router, and I say \"Hey, I need to get this to so-and-so at the district office, can you please help me?\", and she'll say \"Sure, I don't know exactly where her office is either, but I know the next step, I can get it to the district\".", + "So she goes on and sends it to the secretary at the district office, the next router.", + "That secretary has no idea who I am or where I am, but she sees the name on the package and knows the end location.", + "What I'm trying to get across here is that each router only has to know its own little network, the stops right next to it.", + "It doesn't have to know the whole internet, but just its own connections.", + "It can take information and say, alright, I don't know exactly where that's going, but I'll pass it along in the right direction.", + "That's really all it takes.", + "Routers can be different sizes, different capacities, but what they do is know their own neighborhood, take the information, and pass it in the right direction.", + "Another thing we'll get into a little later is that the routers don't even have to have the full package of information.", + "If one comptuer is trying to send information to another, the data might get split up between different routers and that's okay.", + "The computers still know how to put the information back together correctly.", + "The little pieces of information that are sent are called packets.", + "Packets are actually little pieces of binary code (drawn on board).", + "This is an example of what packets might look like, a visual representation of the electrical current that the computer can translate into 1's and 0's, which we all know is binary that can represent literally any digital data.", + "These little packets are sent across through routers, and if a file is too large for one packet, it can be broken up into frames (smaller little packets).", + "The frames don't have to take the same route to the end destination.", + "They can take whichever route is open, whichever is fastest, and since they have the end IP address, all of the routers know where to send them.", + "Once they get to the end destination, that computer knows how to put all of the information back together." + ], + "challengeType": 6, + "tests": [ + "Routers have to know the whole internet. (F, routers just have to know the stops around them to send information in the right direction).", + "Packets are little peices of binary code. (T)", + "Packets have to be sent in one piece. (F, packets can be broken up into frames)." + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7129d8a441eddfbeb5bddf", + "name": "Hike: Hardware: Chips and Moore's Law", + "dashedName": "hike-chips-and-moores-law", + "difficulty": 9.19, + "challengeSeed": [ + "133182057" + ], + "description": [ + "We discuss what constitutes a chip and why technology gets cheaper every year.", + "In this video we are going to be talking about chips and something called Moore's Law.", + "You've probably noticed over the last 10 or so years, if you're going to go buy an MP3 player, you can get a lot more storage for a lot lower price.", + "You probably have even done the thing where you're at the store and you think, \"Well, I can get one now, or I could wait 6 months and see how far the price has dropped\", which might sound ridiculous but this is actually a trend that's been happening for a long time.", + "Let's talk about what makes a chip.", + "A chip is full of these little things called transistors, which are switches that can either be a 1 or a 0 (noticing a theme here?).", + "All of these transistors fit onto a chip, and that's how it stores information.", + "What makes these chips larger/faster is the amount of transistors on a single chip.", + "Moore's Law is the observation that the amount of transistors fit on each chip has doubled every two years since 1965.", + "This is important because it's making technology more affordable and accessible." + ], + "challengeType": 6, + "tests": [ + "Chips have transistors, little switches that can store a 1 or a 0. (T)", + "Moore's Law is the observation that technology doubles in speed every year. (F, Moore's Law is the observation that the number of transistors per chip doubles every 2 years).", + "Moore's Law has slowed down in recent years. (F, somehow this continues to be true)." + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7129d80441eddfbeb5bddf", + "name": "Hike: Analog vs Digital and File Compression", + "dashedName": "hike-analog-vs-digital-and-file-compression", + "difficulty": 9.20, + "challengeSeed": [ + "133182587" + ], + "description": [ + "How computers turn analog sound into digital files, and the pros and cons of data compression.", + "Let's discuss analog vs digital on a very basic level.", + "Most specifically, we'll talk about how computers interpret analog sound and turn it into a digital file.", + "An analog sound wave could look like anything, but for this example it's a wavy line.", + "The computer takes it and measures at lots of different points, turning them into numbers.", + "This is called sampling.", + "Later, the computer can take those numbers and turn them into sound again.", + "Let's also discuss data compression.", + "The benefit of compression is that it's a smaller file: it's easier to store, it's easier to send to someone else, and it just takes up less space.", + "One of the ways this is done in sound is that the sampling is taken less often.", + "Another way is that it takes the measurement from a median point instead of from 0, so the numbers recorded are smaller.", + "In images, it's done by measuring groups of pixels by 16 instead of individually.", + "The takeaway from this video is that you'll want to use digital files as they're a higher quality, and when you're looking at compression, you want to decide how far you are willing to go to ensure the user still has the best possible experience." + ], + "challengeType": 6, + "tests": [ + "Digital files can be made from analog sounds and analog sounds can be made from digital files. (T)", + "Compression is not worth it, because it lessens quality. (F, sometimes compression is a great idea. It depends on what you're trying to do and what your end goal for the product is)." + ], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7129d89441eddfbeb5bddf", + "name": "Hike: Computer Security", + "dashedName": "hike-computer-security", + "difficulty": 9.21, + "challengeSeed": [ + "133186284" + ], + "description": [ + "The basics of computer security, and how to make sure you protect your information.", + "Let's cover computer security.", + "The first thing we're going to talk about is something called a dictionary attack which has to do with your passwords.", + "When creating your passwords, some sites require extremely specific and complicated passwords, which is actually a bit unnecessary.", + "The type of attacks they're trying to gaurd you from are dictionary attacks.", + "Dictionary attacks are programmed to try every word in the dictionary, or in its own database of common words and passwords, as the password for a large mass of usernames.", + "If your password is Kangaroo, they're probably going to break into your account.", + "Most passwords aren't this simple, but that doesn't matter.", + "They attack such a massive amount of accounts that they only need a few passwords that are relatively simple.", + "When creating a password, you want to use different cases, numbers, and symbols, but one of the most effective ways to create a good password is to throw some random letters in there (ex: kangarooSyCA67).", + "Also, stay away from sequential numbers.", + "Phishing, another thing to watch out for, is emails or webpages that mimic other valid sites to try and trick people into entering their personal information, though the site truly isn't connected to the site it's trying to mimic.", + "In general, two ways to safeguard from these attacks are checking the address in the browser and to open a new browser and go to the website that is claiming to contact you.", + "Let's also discuss encryption and HTTPS.", + "If you are at Starbucks trying to access your bank account, you have reason to be suspicious that someone could see and take your information.", + "You will want to look for a green HTTPS instead of HTTP at the beginning of the web address.", + "That means that the site you're sending your information to is encrypting your passwords and other information, scrambling up data according to a code that only they know.", + "In general, whenever you're showing private or sensitive information, check for HTTPS.", + "A few other general tips: don't share passwords between important accounts.", + "If a site you use gets hacked into, your password may be compromised regardless of its strength.", + "Also, don't download strange files.", + "If you don't recognise the file type like .pdf, .txt, .jpg, be wary.", + "Some of these files you download can be very powerful and even run your computer from the inside.", + "Lastly, keep your software updated, particularly software that interacts with the internet.", + "One way that information can be compromised is when 'bad guys' find holes and gaps in security of older versions of softwares.", + "Those bugs have been patched in newer versions, so if you keep everything updated, you'll avoid lots of problems.", + "These are all very basic things you should know about how to keep your information safe on your computer." + ], + "challengeType": 6, + "tests": [ + "Passwords should be shared with all of your accounts (F, don't reuse important passwords)", + "If you don't trust a site or an email, open a new browser and re-enter the intended location. (T)", + "Keeping software updated will help protect your computer and your information. (T)" ], "nameCn": "", "descriptionCn": [], @@ -29,4 +819,4 @@ "descriptionPt": [] } ] -} +} \ No newline at end of file From f05255f87ba331b8249ca8eeea5bc47969745272 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sat, 11 Jul 2015 19:51:08 -0700 Subject: [PATCH 14/29] split field guides into separate categories --- field-guides/FYI.json | 310 +++++++++++++++++ field-guides/contact.json | 22 ++ .../orientation.json | 319 ++---------------- field-guides/outreach.json | 143 ++++++++ index.js | 30 +- 5 files changed, 514 insertions(+), 310 deletions(-) create mode 100644 field-guides/FYI.json create mode 100644 field-guides/contact.json rename field-guides.json => field-guides/orientation.json (81%) create mode 100644 field-guides/outreach.json diff --git a/field-guides/FYI.json b/field-guides/FYI.json new file mode 100644 index 0000000000..9aaaaa219e --- /dev/null +++ b/field-guides/FYI.json @@ -0,0 +1,310 @@ +[ + { + "id": "bd7158d9c436eddfaeb5bd3f", + "name": "Can I jump around in this guide?", + "dashedName": "can-i-jump-around-in-this-guide", + "category": "FYI", + "description": [ + "
", + "

This guide was designed as a reference for you. You shouldn't try to read it all today.

", + "

Feel free to come back any time and jump around, reading any articles that seem interesting to you at the time.

", + "

If you're currently doing our \"Browse our Field Guide\" Waypoint, go ahead and mark that challenge complete and move on to your next Waypoint.

", + "
" + ] + }, + { + "id": "bd7159d9c436eddfaeb5bdef", + "name": "Can I Calculate the True Cost of a Bootcamp with a Coding Bootcamp Cost Calculator?", + "dashedName": "can-i-calculate-the-true-cost-of-a-bootcamp-with-a-coding-bootcamp-cost-calculator", + "category": "FYI", + "description": [ + "", + "
", + "
", + "

Coding Bootcamp Cost Calculator

", + "

Coming from _______, and making $_______, your true costs will be:

", + "
", + "
", + "

Where do you live?

", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + "

How much money did you make last year (in USD)?

", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", + "
View Data Source JSON  •  Recalculate", + "
", + "

Notes:

", + "
    ", + "
  1. For cash-up-front bootcamps, we assumed an APR of 6% and a term of 3 years.
  2. ", + "
  3. For wage-garnishing bootcamps, we assume 18% of first year wages at their advertised starting annual salary of around $100,000.
  4. ", + "
  5. We assume a cost of living of $500 for cities like San Francisco and New York City, and $400 per week for everywhere else.
  6. ", + "
  7. The most substantial cost for most people is lost wages. A 40-hour-per-week job at the US Federal minimum wage would pay at least $15,000 per year. You can read more about economic cost here.
  8. ", + "
  9. Free Code Camp. We don't charge tuition or garnish wages. We're fully online so you don't have to move. We're self-paced so you don't have to quit your job. Thus, your true cost of attending Free Code Camp will be $0.
  10. ", + "
", + "
", + "
", + "
", + "
", + "

Built by Suzanne Atkinson

", + "

Suzanne is an emergency medicine physician, triathlon coach and web developer from Pittsburgh. You should  follow her on Twitter.

", + "
", + "
", + "
", + "
", + "
", + "
", + "
" + ] + }, + { + "id": "bd7158d9c442eddfaeb5bdef", + "name": "How do I best use the Global Control Shortcuts for Mac?", + "dashedName": "how-do-i-best-use-the-global-control-shortcuts-for-mac", + "category": "FYI", + "description": [ + "
", + "

These Global Control Shortcuts for Mac will save you hours by speeding up your typing.


", + "
", + "

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
  • ", + "
", + "

", + "
" + ] + }, + { + "id": "bd7158d9c445eddfaeb5bdef", + "name": "How can I get to Inbox Zero with Gmail shortcuts?", + "dashedName": "how-can-i-get-to-inbox-zero-with-gmail-shortcuts", + "category": "FYI", + "description": [ + "
", + "

These Gmail Shortcuts will save you hours and help you get to Inbox Zero.


", + "
", + " ", + "
", + "

The shortcuts:

", + "

", + "

    ", + "
  • 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
  • ", + "
", + "

", + "
" + ] + }, + { + "id": "bd7158d9c445eddfaeb5bdff", + "name": "How can I deploy a website without writing any code at all?", + "dashedName": "how-can-i-deploy-a-website-without-writing-any-code-at-all", + "category": "FYI", + "description": [ + "
", + "

It's possible to build dynamic, mobile-responsive websites without writing any code at all, in just a few minutes.


", + "
", + " ", + "
", + "

Here are the technologies we used here:

", + "

", + "

    ", + "
  • atom.io - a free code editor
  • ", + "
  • startbootstrap.com - a collection of free responsive (Bootstrap) templates
  • ", + "
  • powr.io - a collection of free JavaScript plugins
  • ", + "
  • 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.

", + "
" + ] + }, + { + "id": "bd7158d9c447eddfaeb5bdef", + "name": "How do I install Screenhero?", + "dashedName": "how-do-i-install-screenhero", + "category": "FYI", + "description": [ + "
", + "

Download for Mac

", + "

Download for Windows

", + "

You'll use Screenhero to pair program starting with http://freecodecamp.com/challenges/pair-program-on-bonfires

", + "
" + ] + }, + { + "id": "bd7158d9c436eddfaeb5dd3b", + "name": "What other resources does Free Code Camp recommend to nonprofits?", + "dashedName": "what-other-resources-does-free-code-camp-recommend-to-nonprofits", + "category": "FYI", + "description": [ + "
", + "

Here are some excellent resources for nonprofits.

", + "

Please note that Free Code Camp is not partnered with, nor do we receive a referral fee from, any of the following providers. We simply want to help guide you towards a solution for your organization.

", + "

Skills-based Volunteer Organizations:

", + "

http://www.volunteermatch.com

", + "

http://www.catchafire.org

", + "

Building a website:

", + "

http://www.wix.com/

", + "

https://wordpress.com/

", + "

Build it yourself for free with no code

", + "

Donor and Volunteer Management Systems

", + "

https://www.thedatabank.com/

", + "

http://www.donorsnap.com/

", + "

http://www.donorperfect.com/

", + "

https://www.blackbaud.com/fundraising-crm/etapestry-donor-management

", + "

http://www.z2systems.com

", + "

http://www.regpacks.com/volunteer-management

", + "

http://sumac.com

", + "

http://www.volgistics.com

", + "

Inventory Management Systems

", + "

https://www.ezofficeinventory.com/industries/non-profits

", + "

https://www.ordoro.com

", + "

http://www.unleashedsoftware.com

", + "

E-Learning platforms

", + "

http://www.dokeos.com

", + "

http://www.efrontlearning.net/

", + "

https://moodle.org/

", + "

https://sakaiproject.org/

", + "

Community Management

", + "

https://civicrm.org/

", + "

http://tcmgr.com/

", + "

Electronic Forms

", + "

http://www.google.com/forms

", + "

http://www.typeform.com

", + "
" + ] + } +] diff --git a/field-guides/contact.json b/field-guides/contact.json new file mode 100644 index 0000000000..16bbd732c6 --- /dev/null +++ b/field-guides/contact.json @@ -0,0 +1,22 @@ +[ + { + "id": "bd7158d9c436eddfaeb5bd3c", + "name": "How can I reach the Free Code Camp team to interview them for my publication?", + "dashedName": "how-can-i-reach-the-free-code-camp-team-to-interview-them-for-my-publication", + "category": "contact", + "description": [ + "
", + "

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:

", + "

", + "

    ", + "
  1. Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's @ossia on Twitter and @quincylarson on Gitter.
  2. ", + "
  3. Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Nathan Leniz. He's @terakilobyte on Twitter and @terakilobyte on Gitter.
  4. ", + "
  5. Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's @figitalboy on Twitter and @codenonprofit on Gitter.
  6. ", + "
  7. Want to get a camper's perspective on our community? Talk with Bianca Mihai (@biancamihai on Gitter and @bubuslubu on Twitter) or Suzanne Atkinson (@adventurebear on Gitter and @steelcitycoach on Twitter).", + "
", + "

", + "

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.

", + "
" + ] + } +] diff --git a/field-guides.json b/field-guides/orientation.json similarity index 81% rename from field-guides.json rename to field-guides/orientation.json index 47a8f60254..670b808d51 100644 --- a/field-guides.json +++ b/field-guides/orientation.json @@ -3,6 +3,7 @@ "id": "bd7158d9c441eddfaeb5bdef", "name": "How do I use this guide?", "dashedName": "how-do-i-use-this-guide", + "category": "orientation", "description": [ "
", "

This guide strives to provide clear answers to common questions about Free Code Camp, learning to code, and getting a coding job.

", @@ -15,6 +16,7 @@ "id": "bd7158d9c441eddfaeb5bdff", "name": "What exactly is Free Code Camp?", "dashedName": "what-exactly-is-free-code-camp", + "category": "orientation", "description": [ "
", "

We're a community of busy people who learn to code by building projects for nonprofits.

", @@ -33,6 +35,7 @@ "id": "bd7158d9c441eddfaeb5bd1f", "name": "Why do I need Free Code Camp?", "dashedName": "why-do-i-need-free-code-camp", + "category": "orientation", "description": [ "
", "

Learning to code is hard.

", @@ -51,6 +54,7 @@ "id": "bd7158d9c441eddfaeb5bd2f", "name": "What are the main advantages of Free Code Camp?", "dashedName": "what-are-the-main-advantages-of-free-code-camp", + "category": "orientation", "description": [ "
", "

Our main advantage is that we're accessible to busy adults who want to change careers. Specifically, we're:

", @@ -68,6 +72,7 @@ "id": "bd7158d9c441eddfaeb5bd3f", "name": "How does Free Code Camp work?", "dashedName": "how-does-free-code-camp-work", + "category": "orientation", "description": [ "
", "

Our free, self-paced, browser-based program takes about 1,600 hours to complete.", @@ -90,6 +95,7 @@ "id": "bd7158d9c441eddfaeb5bd4f", "name": "Will I really be able to get software engineering job after Free Code Camp?", "dashedName": "will-i-really-be-able-to-get-a-software-engineering-job-after-free-code-camp", + "category": "orientation", "description": [ "
", "

If you complete this program, you will be able to get a coding job. Many of our campers have already gotten coding jobs.

", @@ -110,6 +116,7 @@ "id": "bd7158d9c440eddfaeb5bdef", "name": "What will I learn, and in what sequence?", "dashedName": "what-will-i-learn-and-in-what-sequence", + "category": "orientation", "description": [ "
", "

First, you'll learn basic web design tools like:

", @@ -147,6 +154,7 @@ "id": "bd7158d9c434eddfaeb5bdef", "name": "How long does Free Code Camp take?", "dashedName": "how-long-does-free-code-camp-take", + "category": "orientation", "description": [ "
", "

It takes about 1,600 hours of coding to develop the skills you'll need to get an entry level software engineering job.

", @@ -185,6 +193,7 @@ "id": "bd7158d9c438eddfaeb5bdef", "name": "Why does Free Code Camp use JavaScript instead of Ruby or Python?", "dashedName": "why-does-free-code-camp-use-javascript-instead-of-ruby-or-python", + "category": "orientation", "description": [ "
", "

Like JavaScript, Ruby and Python are high-level scripting languages that can be used for full stack web development.

", @@ -199,6 +208,7 @@ "id": "bd7158d9c437eddfaeb5bdef", "name": "What is pair programming, and why is it special?", "dashedName": "what-is-pair-programming-and-why-is-it-special", + "category": "orientation", "description": [ "
", "

Pair programming is where two people code together on one computer.

", @@ -212,6 +222,7 @@ "id": "bd7158d9c436eddfaeb5bd2f", "name": "How do I get help when I get stuck?", "dashedName": "how-do-i-get-help-when-i-get-stuck", + "category": "orientation", "description": [ "
", "

When you get stuck, remember: RSAP.

", @@ -235,6 +246,7 @@ "id": "bd7158d9c435eddfaeb5bdcf", "name": "What are the Official Free Code Camp Chat Rooms?", "dashedName": "what-are-the-official-free-code-camp-chat-rooms", + "category": "orientation", "description": [ "
", "

We have 4 official chat rooms:

", @@ -260,22 +272,11 @@ "
" ] }, - { - "id": "bd7158d9c436eddfaeb5bd3f", - "name": "Can I jump around in this guide?", - "dashedName": "can-i-jump-around-in-this-guide", - "description": [ - "
", - "

This guide was designed as a reference for you. You shouldn't try to read it all today.

", - "

Feel free to come back any time and jump around, reading any articles that seem interesting to you at the time.

", - "

If you're currently doing our \"Browse our Field Guide\" Waypoint, go ahead and mark that challenge complete and move on to your next Waypoint.

", - "
" - ] - }, { "id": "bd7158d9c436eddfaeb5bdef", "name": "If Free Code Camp is free, how does it make money?", "dashedName": "if-free-code-camp-is-free-how-does-it-make-money", + "category": "orientation", "description": [ "
", "

We are completely free for both students and for nonprofits.

", @@ -289,6 +290,7 @@ "id": "bd7158d9c435eddfaeb5bdef", "name": "Does Free Code Camp have an application process?", "dashedName": "does-free-code-camp-have-an-application-process", + "category": "orientation", "description": [ "
", "

Unlike coding bootcamps, anyone can study at Free Code Camp.

", @@ -297,31 +299,11 @@ "
" ] }, - { - "id": "bd7158d9c436eddfaeb5bd3b", - "name": "How can I stream my live coding sessions on Free Code Camp's Twitch.tv channel?", - "dashedName": "how-can-i-stream-my-live-coding-sessions-on-free-code-camps-twitch-tv-channel", - "description": [ - "
", - "

If you're interested in coding JavaScript live in front of dozens of people on our popular twitch.tv channel, we'd love to have you.

", - "

Please follow these steps to get started:

", - "

", - "

    ", - "
  1. Follow this tutorial to set up your computer for streaming.
  2. ", - "
  3. Contact Jason Ruekert - he's @jsonify in Gitter. He's in charge of our Twitch.tv channel. Tell him what you'd like to stream, and when you're available to stream.
  4. ", - "
  5. Jason will pair with you using Screenhero to verify your computer is configured properly to stream.
  6. ", - "
", - "

", - "

Be respectful of your audience. Everything you stream should be related to coding JavaScript, and should be acceptable for children. (Yes, children do sometimes watch our Twitch stream to learn to code).

", - "

While you're streaming, keep the chat room open so you can respond to questions from your viewers. If someone follows Free Code Camp on Twitch, try to thank them.

", - "

If you do a good job, we'll invite you back to stream some more. Who knows, you might become one of our regular streamers!

", - "
" - ] - }, { "id": "bd7158d9c436eddfaeb5bd3d", "name": "How can I find other Free Code Camp campers in my city?", "dashedName": "how-can-i-find-other-free-code-camp-campers-in-my-city", + "category": "orientation", "description": [ "
", "

Find your city below and join their Facebook group and Gitter Chat. This is a great way to hang out with other coders, share insights, and pair program.

", @@ -584,174 +566,11 @@ "
" ] }, - { - "id": "bd7158d9c442eddfaeb5bdef", - "name": "How do I best use the Global Control Shortcuts for Mac?", - "dashedName": "how-do-i-best-use-the-global-control-shortcuts-for-mac", - "description": [ - "
", - "

These Global Control Shortcuts for Mac will save you hours by speeding up your typing.


", - "
", - "

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
  • ", - "
", - "

", - "
" - ] - }, - { - "id": "bd7158d9c445eddfaeb5bdef", - "name": "How can I get to Inbox Zero with Gmail shortcuts?", - "dashedName": "how-can-i-get-to-inbox-zero-with-gmail-shortcuts", - "description": [ - "
", - "

These Gmail Shortcuts will save you hours and help you get to Inbox Zero.


", - "
", - " ", - "
", - "

The shortcuts:

", - "

", - "

    ", - "
  • 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
  • ", - "
", - "

", - "
" - ] - }, - { - "id": "bd7158d9c445eddfaeb5bdff", - "name": "How can I deploy a website without writing any code at all?", - "dashedName": "how-can-i-deploy-a-website-without-writing-any-code-at-all", - "description": [ - "
", - "

It's possible to build dynamic, mobile-responsive websites without writing any code at all, in just a few minutes.


", - "
", - " ", - "
", - "

Here are the technologies we used here:

", - "

", - "

    ", - "
  • atom.io - a free code editor
  • ", - "
  • startbootstrap.com - a collection of free responsive (Bootstrap) templates
  • ", - "
  • powr.io - a collection of free JavaScript plugins
  • ", - "
  • 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.

", - "
" - ] - }, - { - "id": "bd7158d9c446eddfaeb5bdef", - "name": "How do Free Code Camp's Nonprofit Projects work?", - "dashedName": "how-do-free-code-camps-nonprofit-projects-work", - "description": [ - "
", - "

Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. Once you complete the Free Code Camp Waypoints, Bonfires, Ziplines and Basejumps, 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 three to five nonprofit projects. We estimate that the 900 hours of nonprofit projects you're going to complete, in addition to the 100 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:

", - "

", - "

    ", - "
  1. Your estimated time commitment (10, 20 or 40 hours per week)
  2. ", - "
  3. Your time zone
  4. ", - "
  5. The nonprofit projects you've chosen
  6. ", - "
  7. Prior coding experience (we'd like both campers to be able to contribute equally)
  8. ", - "
", - "

", - "

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:

", - "

", - "

    ", - "
  1. 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.
  2. ", - "
  3. We'll call the stakeholder to confirm once again that he or she agrees with our  terms  and has signed our  Nonprofit Project Stakeholder Pledge.
  4. ", - "
  5. We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder.
  6. ", - "
  7. If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project.
  8. ", - "
", - "

", - "

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 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.
  • ", - "
  • • Screenhero 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, 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  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.

", - "
" - ] - }, - { - "id": "bd7158d9c447eddfaeb5bdef", - "name": "How do I install Screenhero?", - "dashedName": "how-do-i-install-screenhero", - "description": [ - "
", - "

Download for Mac

", - "

Download for Windows

", - "

You'll use Screenhero to pair program starting with http://freecodecamp.com/challenges/pair-program-on-bonfires

", - "
" - ] - }, { "id": "bd7158d9c451eddfaeb5bded", "name": "What is the style guide for Bonfires?", "dashedName": "what-is-the-style-guide-for-bonfires", + "category": "orientation", "description": [ "
", "

Writing Bonfire challenges is a great way to exercise your own problem solving and testing abilities. Follow this process closely to maximize the chances of us accepting your bonfire.

", @@ -788,6 +607,7 @@ "id": "bd7158d9c451eddfaeb5bdee", "name": "What is the Free Code Camp Code of Conduct?", "dashedName": "what-is-the-free-code-camp-code-of-conduct", + "category": "orientation", "description": [ "
", "

Free Code Camp is friendly place to learn to code. We're committed to keeping it that way.

", @@ -813,6 +633,7 @@ "id": "bd7158d9c451eddfaeb5bdef", "name": "What is the Free Code Camp Privacy Policy?", "dashedName": "what-is-the-free-code-camp-privacy-policy", + "category": "orientation", "description": [ "
", "

Free Code Camp is committed to respecting the privacy of visitors to our websites and web applications. The guidelines below explain how we protect the privacy of visitors to FreeCodeCamp.com and its features.

", @@ -851,111 +672,11 @@ "
" ] }, - { - "id": "bd7158d9c436eddfaeb5bd3c", - "name": "How can I reach the Free Code Camp team to interview them for my publication?", - "dashedName": "how-can-i-reach-the-free-code-camp-team-to-interview-them-for-my-publication", - "description": [ - "
", - "

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:

", - "

", - "

    ", - "
  1. Want to talk to about Free Code Camp's curriculum or long-term vision? Reach out to Quincy Larson. He's @ossia on Twitter and @quincylarson on Gitter.
  2. ", - "
  3. Want to talk about Free Code Camp's open source codebase, infrastructure, or JavaScript in general? Talk to Nathan Leniz. He's @terakilobyte on Twitter and @terakilobyte on Gitter.
  4. ", - "
  5. Want to explore our efforts to empower nonprofits with code? Michael D. Johnson eats, sleeps and breathes that. He's @figitalboy on Twitter and @codenonprofit on Gitter.
  6. ", - "
  7. Want to get a camper's perspective on our community? Talk with Bianca Mihai (@biancamihai on Gitter and @bubuslubu on Twitter) or Suzanne Atkinson (@adventurebear on Gitter and @steelcitycoach on Twitter).", - "
", - "

", - "

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.

", - "
" - ] - }, - { - "id": "bd7158d9c436eddfaeb5dd3b", - "name": "What other resources does Free Code Camp recommend to nonprofits?", - "dashedName": "what-other-resources-does-free-code-camp-recommend-to-nonprofits", - "description": [ - "
", - "

Here are some excellent resources for nonprofits.

", - "

Please note that Free Code Camp is not partnered with, nor do we receive a referral fee from, any of the following providers. We simply want to help guide you towards a solution for your organization.

", - "

Skills-based Volunteer Organizations:

", - "

http://www.volunteermatch.com

", - "

http://www.catchafire.org

", - "

Building a website:

", - "

http://www.wix.com/

", - "

https://wordpress.com/

", - "

Build it yourself for free with no code

", - "

Donor and Volunteer Management Systems

", - "

https://www.thedatabank.com/

", - "

http://www.donorsnap.com/

", - "

http://www.donorperfect.com/

", - "

https://www.blackbaud.com/fundraising-crm/etapestry-donor-management

", - "

http://www.z2systems.com

", - "

http://www.regpacks.com/volunteer-management

", - "

http://sumac.com

", - "

http://www.volgistics.com

", - "

Inventory Management Systems

", - "

https://www.ezofficeinventory.com/industries/non-profits

", - "

https://www.ordoro.com

", - "

http://www.unleashedsoftware.com

", - "

E-Learning platforms

", - "

http://www.dokeos.com

", - "

http://www.efrontlearning.net/

", - "

https://moodle.org/

", - "

https://sakaiproject.org/

", - "

Community Management

", - "

https://civicrm.org/

", - "

http://tcmgr.com/

", - "

Electronic Forms

", - "

http://www.google.com/forms

", - "

http://www.typeform.com

", - "
" - ] - }, - { - "id": "bd7158d9c436eddfadb5bd3e", - "name": "How can I contribute to this guide?", - "dashedName": "how-can-i-contribute-to-this-guide", - "description": [ - "
", - "

Contributing to our field guide is a great way to establish your history on GitHub, add to your portfolio, and help other campers. If you have a question about JavaScript or programming in general that you'd like us to add to the field guide, here are two ways to get it into the guide:

", - "

", - "

    ", - "
  1. You can message @danraley on Gitter with your question.
  2. ", - "
  3. You can also contribute to this field guide directly via GitHub pull request, by cloning Free Code Camp's main repository and modifying field-guides.json.
  4. ", - "
", - "

", - "
" - ] - }, - { - "id": "bd7158d9c436eddfadb5bd32", - "name": "How can I help the Free Code Camp translation effort?", - "dashedName": "how-can-i-help-the-free-code-camp-translation-effort", - "description": [ - "
", - "

Our translation effort is driven by bilingual campers like you.

", - "

If you're able to help us, you can join our Trello board by sending @quincylarson your email address on Gitter.

", - "
" - ] - }, - { - "id": "bd7158d9c436eddfadb5bd31", - "name": "What if I speak a language that Free Code Camp does not yet support?", - "dashedName": "what-if-i-speak-a-language-that-free-code-camp-does-not-yet-support", - "description": [ - "
", - "

Translation is an all-or-nothing proposal.", - "

We won't be able to add new languages to Free Code Camp until all of our challenges are translated into that language.

", - "

In addition to translating these initially, we'll also need to maintain the translation as the challenges are gradually updated.

", - "

If you're able to help us, you can join our Trello board by sending @quincylarson your email address on Gitter.

", - "
" - ] - }, { "id": "bd7158d9c436eddfadb5bd30", "name": "Can I do Free Code Camp completely in my native language?", "dashedName": "can-i-do-free-code-camp-completely-in-my-native-language", + "category": "orientation", "description": [ "
", "

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.

", @@ -969,6 +690,7 @@ "id": "bd7158d9c436eddfadb5bd3c", "name": "What is the new Free Code Camp Mobile Experience?", "dashedName": "what-is-the-new-free-code-camp-mobile-experience", + "category": "orientation", "description": [ "
", "

We're building an on-the-go version of Free Code Camp.

", @@ -986,6 +708,7 @@ "id": "bd7158d9c436eddfadb5bd3b", "name": "What is the Free Code Camp Front End Development Certificate?", "dashedName": "what-is-the-free-code-camp-front-end-development-certificate", + "category": "orientation", "description": [ "
", "

We're creating a free Front End Development Certificate.

", diff --git a/field-guides/outreach.json b/field-guides/outreach.json new file mode 100644 index 0000000000..154c93d44c --- /dev/null +++ b/field-guides/outreach.json @@ -0,0 +1,143 @@ +[ + { + "id": "bd7158d9c436eddfaeb5bd3b", + "name": "How can I stream my live coding sessions on Free Code Camp's Twitch.tv channel?", + "dashedName": "how-can-i-stream-my-live-coding-sessions-on-free-code-camps-twitch-tv-channel", + "category": "outreach", + "description": [ + "
", + "

If you're interested in coding JavaScript live in front of dozens of people on our popular twitch.tv channel, we'd love to have you.

", + "

Please follow these steps to get started:

", + "

", + "

    ", + "
  1. Follow this tutorial to set up your computer for streaming.
  2. ", + "
  3. Contact Jason Ruekert - he's @jsonify in Gitter. He's in charge of our Twitch.tv channel. Tell him what you'd like to stream, and when you're available to stream.
  4. ", + "
  5. Jason will pair with you using Screenhero to verify your computer is configured properly to stream.
  6. ", + "
", + "

", + "

Be respectful of your audience. Everything you stream should be related to coding JavaScript, and should be acceptable for children. (Yes, children do sometimes watch our Twitch stream to learn to code).

", + "

While you're streaming, keep the chat room open so you can respond to questions from your viewers. If someone follows Free Code Camp on Twitch, try to thank them.

", + "

If you do a good job, we'll invite you back to stream some more. Who knows, you might become one of our regular streamers!

", + "
" + ] + }, + { + "id": "bd7158d9c446eddfaeb5bdef", + "name": "How do Free Code Camp's Nonprofit Projects work?", + "dashedName": "how-do-free-code-camps-nonprofit-projects-work", + "category": "outreach", + "description": [ + "
", + "

Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. Once you complete the Free Code Camp Waypoints, Bonfires, Ziplines and Basejumps, 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 three to five nonprofit projects. We estimate that the 900 hours of nonprofit projects you're going to complete, in addition to the 100 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:

", + "

", + "

    ", + "
  1. Your estimated time commitment (10, 20 or 40 hours per week)
  2. ", + "
  3. Your time zone
  4. ", + "
  5. The nonprofit projects you've chosen
  6. ", + "
  7. Prior coding experience (we'd like both campers to be able to contribute equally)
  8. ", + "
", + "

", + "

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:

", + "

", + "

    ", + "
  1. 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.
  2. ", + "
  3. We'll call the stakeholder to confirm once again that he or she agrees with our  terms  and has signed our  Nonprofit Project Stakeholder Pledge.
  4. ", + "
  5. We'll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder.
  6. ", + "
  7. If the stakeholder and both campers shows up promptly, and seem enthusiastic and professional, we'll start the project.
  8. ", + "
", + "

", + "

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 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 or Slack channel.

", + "

You should also ask questions in your project's Gitter or Slack 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.
  • ", + "
  • • Screenhero 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, 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  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.

", + "
" + ] + }, + { + "id": "bd7158d9c436eddfadb5bd3e", + "name": "How can I contribute to this guide?", + "dashedName": "how-can-i-contribute-to-this-guide", + "category": "outreach", + "description": [ + "
", + "

Contributing to our field guide is a great way to establish your history on GitHub, add to your portfolio, and help other campers. If you have a question about JavaScript or programming in general that you'd like us to add to the field guide, here are two ways to get it into the guide:

", + "

", + "

    ", + "
  1. You can message @danraley on Gitter with your question.
  2. ", + "
  3. You can also contribute to this field guide directly via GitHub pull request, by cloning Free Code Camp's main repository and modifying field-guides.json.
  4. ", + "
", + "

", + "
" + ] + }, + { + "id": "bd7158d9c436eddfadb5bd32", + "name": "How can I help the Free Code Camp translation effort?", + "dashedName": "how-can-i-help-the-free-code-camp-translation-effort", + "category": "outreach", + "description": [ + "
", + "

Our translation effort is driven by bilingual campers like you.", + "

If you're able to help us, you can join our Trello board by sending @quincylarson your email address on Gitter.

", + "
" + ] + }, + { + "id": "bd7158d9c436eddfadb5bd31", + "name": "What if I speak a language that Free Code Camp does not yet support?", + "dashedName": "what-if-i-speak-a-language-that-free-code-camp-does-not-yet-support", + "category": "outreach", + "description": [ + "
", + "

Translation is an all-or-nothing proposal.", + "

We won't be able to add new languages to Free Code Camp until all of our challenges are translated into that language.

", + "

In addition to translating these initially, we'll also need to maintain the translation as the challenges are gradually updated.

", + "

If you're able to help us, you can join our Trello board by sending @quincylarson your email address on Gitter.

", + "
" + ] + } +] diff --git a/index.js b/index.js index a4c5dcb2ec..7ca17f5174 100644 --- a/index.js +++ b/index.js @@ -4,16 +4,20 @@ require('dotenv').load(); var fs = require('fs'), path = require('path'), app = require('../server/server'), - fieldGuides = require('./field-guides.json'), nonprofits = require('./nonprofits.json'), jobs = require('./jobs.json'); +function getFilesFor(dir) { + return fs.readdirSync(path.join(__dirname, '/' + dir)); +} + var Challenge = app.models.Challenge; var FieldGuide = app.models.FieldGuide; var Nonprofit = app.models.Nonprofit; var Job = app.models.Job; var counter = 0; -var challenges = fs.readdirSync(path.join(__dirname, '/challenges')); +var challenges = getFilesFor('challenges'); +var fieldGuides = getFilesFor('field-guides'); var offerings = 3 + challenges.length; var CompletionMonitor = function() { @@ -33,10 +37,10 @@ Challenge.destroyAll(function(err, info) { } else { console.log('Deleted ', info); } - challenges.forEach(function (file) { + challenges.forEach(function(file) { Challenge.create( require('./challenges/' + file).challenges, - function (err) { + function(err) { if (err) { console.log(err); } else { @@ -54,14 +58,16 @@ FieldGuide.destroyAll(function(err, info) { } else { console.log('Deleted ', info); } - FieldGuide.create(fieldGuides, function(err, data) { - if (err) { - console.log(err); - } else { - console.log('Saved ', data); - } - CompletionMonitor(); - console.log('field guides'); + fieldGuides.forEach(function(file) { + FieldGuide.create(require('./field-guides/' + file), function(err, data) { + if (err) { + console.log(err); + } else { + console.log('Saved ', data); + } + CompletionMonitor(); + console.log('field guides'); + }); }); }); From ebfb8384b06b7e9957c5aab853f8148b0dbe295a Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sat, 11 Jul 2015 21:23:43 -0700 Subject: [PATCH 15/29] update hikes.json --- challenges/hikes.json | 111 ++++++++++++------------ field-guides/orientation.json | 158 ---------------------------------- 2 files changed, 55 insertions(+), 214 deletions(-) diff --git a/challenges/hikes.json b/challenges/hikes.json index 4130d41409..3952a7443b 100644 --- a/challenges/hikes.json +++ b/challenges/hikes.json @@ -27,9 +27,9 @@ ], "challengeType": 6, "tests": [ - "The computer has 3 basic parts. (F, the computer has 4 basic parts: input, output, CPU, and memory)", - "CPU stands for Central Processing Unit. (T)", - "All parts can access the memory (F, only the CPU has access to the memory)" + ["The computer has 3 basic parts.", false, "The computer has 4 basic parts: input, output, CPU, and memory"], + ["CPU stands for Central Processing Unit.", true], + ["All parts can access the memory", false, "Only the CPU has access to the memory"] ], "nameCn": "", "descriptionCn": [], @@ -66,9 +66,9 @@ ], "challengeType": 6, "tests": [ - "The power supply isn't a necessary part of a computer since it's not one of the 4 main parts. (F, the computer needs power!)", - "A motherboard connects all of the working parts in a computer. (T)", - "Memory is usually categorized into 3 parts. (F, only 2 parts, RAM and long term memory such as a hard drive)" + ["The power supply isn't a necessary part of a computer since it's not one of the 4 main parts.", false, "The computer needs power!"], + ["A motherboard connects all of the working parts in a computer.", true], + ["Memory is usually categorized into 3 parts.", false, "Only 2 parts, RAM and long term memory such as a hard drive"] ], "nameCn": "", "descriptionCn": [], @@ -100,9 +100,9 @@ ], "challengeType": 6, "tests": [ - "1's and 0's are how we talk about little switches being on and off. (T)", - "1 means on, and 0 means off. (T)", - "There are some things which cannot be translated into binary. (F, everything can be expressed through binary code!)" + ["1's and 0's are how we talk about little switches being on and off.", true], + ["1 means on, and 0 means off.", true], + ["There are some things which cannot be translated into binary.", false, "everything can be expressed through binary code!"] ], "nameCn": "", "descriptionCn": [], @@ -136,9 +136,9 @@ ], "challengeType": 6, "tests": [ - "1 === on and 0 ===off. (T)", - "Not all numbers can be expressed through binary numeral notation. (F, all numbers can!)", - "If we have the opportunity to include base 2 to every given power, we can create any number. (T)" + ["1 === on and 0 ===off", true], + ["Not all numbers can be expressed through binary numeral notation.", false, "All numbers can!"], + ["If we have the opportunity to include base 2 to every given power, we can create any number.", true] ], "nameCn": "", "descriptionCn": [], @@ -175,9 +175,9 @@ ], "challengeType": 6, "tests": [ - "A Byte is the smallest possible amount of data. (F, a Byte is 8 bits)", - "A bit is the smallest possible amount of data (T)", - "A Kilobyte is 1024 Bytes. (T)" + ["A Byte is the smallest possible amount of data.", false, "A Byte is 8 bits."], + ["A bit is the smallest possible amount of data.", true], + ["A Kilobyte is 1024 Bytes.", true] ], "nameCn": "", "descriptionCn": [], @@ -213,8 +213,8 @@ ], "challengeType": 6, "tests": [ - "Data speed is measured in bits. (T)", - "Data size is measured in bits. (F, size is Bytes and speed is bits)" + ["Data speed is measured in bits.", true], + ["Data size is measured in bits.", false, "Size is Bytes and speed is bits."] ], "nameCn": "", "descriptionCn": [], @@ -246,9 +246,9 @@ ], "challengeType": 6, "tests": [ - "All digits, letters, and symbols have a binary Byte translation. (T)", - "It's good practice to memorize these. (F, you can just look these up as needed).", - "Everything can be expressed binarily, even pictures, sound, and video. (T)" + ["All digits, letters, and symbols have a binary Byte translation.", true], + ["It's good practice to memorize these.", false, "You can just look these up as needed."], + ["Everything can be expressed binarily, even pictures, sound, and video", true] ], "nameCn": "", "descriptionCn": [], @@ -285,9 +285,9 @@ ], "challengeType": 6, "tests": [ - "The most common type of computer is a Personal Computer, a PC. (T)", - "What makes Supercomputers 'super' is when multiple CPUs work on one problem, called parallel processing. (T)", - "Microcontrollers and workstation computers can perform roughly the same tasks. (F, a microcontroller can only perform a small specialized task while a workstation computer has a lot of power, though also specialized.)" + ["The most common type of computer is a Personal Computer, a PC.", true], + ["What makes Supercomputers 'super' is when multiple CPUs work on one problem, called parallel processing.", true], + ["Microcontrollers and workstation computers can perform roughly the same tasks.", false, "A microcontroller can only perform a small specialized task while a workstation computer has a lot of power, though also specialized."] ], "nameCn": "", "descriptionCn": [], @@ -326,9 +326,9 @@ ], "challengeType": 6, "tests": [ - "A motherboard must connect the CPU, the memory, and the network. (F, a motherboard is a motherboard as long as it connects the CPU and the memory).", - "Expansion slots allow users to add capabilities to a computer. (T)", - "Ports help the computer access information. (T)" + ["A motherboard must connect the CPU, the memory, and the network.", false, "A motherboard is a motherboard as long as it connects the CPU and the memory."], + ["Expansion slots allow users to add capabilities to a computer.", true], + ["Ports help the computer access information.", true] ], "nameCn": "", "descriptionCn": [], @@ -366,9 +366,9 @@ ], "challengeType": 6, "tests": [ - "You can connect to a LAN from far away. (F, to connect to a LAN you must be physically near to it).", - "VPNs (Virtual Private Networks) and WANs (Wide Area Networks) do just about the same thing. (T)", - "VPNs and WANs both use the internet to connect LANs. (F, while both connect LANs, VPNs use the internet and WANs use a rented cable)." + ["You can connect to a LAN from far away.", false, "To connect to a LAN you must be physically near to it."], + ["VPNs (Virtual Private Networks) and WANs (Wide Area Networks) do just about the same thing.", true], + ["VPNs and WANs both use the internet to connect LANs.", false, "While both connect LANs, VPNs use the internet and WANs use a rented cable."] ], "nameCn": "", "descriptionCn": [], @@ -406,8 +406,8 @@ ], "challengeType": 6, "tests": [ - "IP addresses are necessary to use and participate in the internet. (T)", - "IP addresses are determined and assigned based on location (T)" + ["IP addresses are necessary to use and participate in the internet.", true], + ["IP addresses are determined and assigned based on location.", true] ], "nameCn": "", "descriptionCn": [], @@ -445,8 +445,8 @@ ], "challengeType": 6, "tests": [ - "Your computer sends a request for information. (T)", - "The Internet can be broken by a large chunk of routers and servers going down. (F, there are so many connections that even a large amount of routers and servers can stop functioning and your experience will still not be affected.)" + ["Your computer sends a request for information.", true], + ["The Internet can be broken by a large chunk of routers and servers going down.", false, "There are so many connections that even a large amount of routers and servers can stop functioning and your experience will still not be affected."] ], "nameCn": "", "descriptionCn": [], @@ -479,7 +479,7 @@ ], "challengeType": 6, "tests": [ - "Safari, Chrome, and Firefox are all examples of application software. (T)" + ["Safari, Chrome, and Firefox are all examples of application software.", true] ], "nameCn": "", "descriptionCn": [], @@ -501,8 +501,7 @@ "133166912" ], "description": [ - "Programmers (a.k.a.", - "coders, developers, or software engineers) solve problems by turning big ideas into tiny steps that a computer can understand.", + "Programmers (a.k.a. coders, developers, or software engineers) solve problems by turning big ideas into tiny steps that a computer can understand.", "In this video, we'll discuss what programmers do.", "Programmers can also be called coders, developers, or software engineers, and what all of these peple do is take ideas and turn them into functional code.", "It's not just creating that code, but also maintaining it.", @@ -515,9 +514,9 @@ ], "challengeType": 6, "tests": [ - "Computers look at code one line at a time. (T)", - "Programmers and developers are totally different professions with very little in common. (F, those titles are so similar they could even describe the same job position.) ", - "Programmers take ideas and break them down into little tiny steps the computer can understand (T)" + ["Computers look at code one line at a time", true], + ["Programmers and developers are totally different professions with very little in common.", false, "Those titles are so similar they could even describe the same job position."], + ["Programmers take ideas and break them down into little tiny steps the computer can understand", true] ], "nameCn": "", "descriptionCn": [], @@ -553,8 +552,8 @@ ], "challengeType": 6, "tests": [ - "The console serves only small, unnecessary purposes. (F, The console's main purpose is to debug, which is a vital step in creating code).", - "You can console strings (sets of words), numbers, and booleans (true/false statements) (T)" + ["The console serves only small, unnecessary purposes.", "The console's main purpose is to debug, which is a vital step in creating code."], + ["You can console strings (sets of words), numbers, and booleans (true/false statements)", true] ], "nameCn": "", "descriptionCn": [], @@ -622,9 +621,9 @@ ], "challengeType": 6, "tests": [ - "Source code is a text document. (T)", - "Javascript is a compiler language. (F, Javascript is an interpreter language)", - "Free Code Camp is open source. (T)" + ["Source code is a text document.", true], + ["Javascript is a compiler language.", false, "Javascript is an interpreter language"], + ["Free Code Camp is open source.", true] ], "nameCn": "", "descriptionCn": [], @@ -673,9 +672,9 @@ ], "challengeType": 6, "tests": [ - "Routers have to know the whole internet. (F, routers just have to know the stops around them to send information in the right direction).", - "Packets are little peices of binary code. (T)", - "Packets have to be sent in one piece. (F, packets can be broken up into frames)." + ["Routers have to know the whole internet.", false, "Routers just have to know the stops around them to send information in the right direction."], + ["Packets are little peices of binary code.", true], + ["Packets have to be sent in one piece.", false, "packets can be broken up into frames."] ], "nameCn": "", "descriptionCn": [], @@ -710,9 +709,9 @@ ], "challengeType": 6, "tests": [ - "Chips have transistors, little switches that can store a 1 or a 0. (T)", - "Moore's Law is the observation that technology doubles in speed every year. (F, Moore's Law is the observation that the number of transistors per chip doubles every 2 years).", - "Moore's Law has slowed down in recent years. (F, somehow this continues to be true)." + ["Chips have transistors, little switches that can store a 1 or a 0.", true], + ["Moore's Law is the observation that technology doubles in speed every year.", false, "Moore's Law is the observation that the number of transistors per chip doubles every 2 years)."], + ["Moore's Law has slowed down in recent years.", false, "Somehow this continues to be true."] ], "nameCn": "", "descriptionCn": [], @@ -750,8 +749,8 @@ ], "challengeType": 6, "tests": [ - "Digital files can be made from analog sounds and analog sounds can be made from digital files. (T)", - "Compression is not worth it, because it lessens quality. (F, sometimes compression is a great idea. It depends on what you're trying to do and what your end goal for the product is)." + ["Digital files can be made from analog sounds and analog sounds can be made from digital files.", true], + ["Compression is not worth it, because it lessens quality.", false, "Sometimes compression is a great idea. It depends on what you're trying to do and what your end goal for the product is."] ], "nameCn": "", "descriptionCn": [], @@ -803,9 +802,9 @@ ], "challengeType": 6, "tests": [ - "Passwords should be shared with all of your accounts (F, don't reuse important passwords)", - "If you don't trust a site or an email, open a new browser and re-enter the intended location. (T)", - "Keeping software updated will help protect your computer and your information. (T)" + ["Passwords should be shared with all of your accounts.", false, "Don't reuse important passwords"], + ["If you don't trust a site or an email, open a new browser and re-enter the intended location.", true], + ["Keeping software updated will help protect your computer and your information.", true] ], "nameCn": "", "descriptionCn": [], @@ -819,4 +818,4 @@ "descriptionPt": [] } ] -} \ No newline at end of file +} diff --git a/field-guides/orientation.json b/field-guides/orientation.json index 670b808d51..9cc4c41607 100644 --- a/field-guides/orientation.json +++ b/field-guides/orientation.json @@ -817,163 +817,5 @@ "
", "
" ] - }, - { - "id": "bd7159d9c436eddfaeb5bdef", - "name": "Can I Calculate the True Cost of a Bootcamp with a Coding Bootcamp Cost Calculator?", - "dashedName": "can-i-calculate-the-true-cost-of-a-bootcamp-with-a-coding-bootcamp-cost-calculator", - "description": [ - "", - "
", - "
", - "

Coding Bootcamp Cost Calculator

", - "

Coming from _______, and making $_______, your true costs will be:

", - "
", - "
", - "

Where do you live?

", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - "

How much money did you make last year (in USD)?

", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
View Data Source JSON  •  Recalculate", - "
", - "

Notes:

", - "
    ", - "
  1. For cash-up-front bootcamps, we assumed an APR of 6% and a term of 3 years.
  2. ", - "
  3. For wage-garnishing bootcamps, we assume 18% of first year wages at their advertised starting annual salary of around $100,000.
  4. ", - "
  5. We assume a cost of living of $500 for cities like San Francisco and New York City, and $400 per week for everywhere else.
  6. ", - "
  7. The most substantial cost for most people is lost wages. A 40-hour-per-week job at the US Federal minimum wage would pay at least $15,000 per year. You can read more about economic cost here.
  8. ", - "
  9. Free Code Camp. We don't charge tuition or garnish wages. We're fully online so you don't have to move. We're self-paced so you don't have to quit your job. Thus, your true cost of attending Free Code Camp will be $0.
  10. ", - "
", - "
", - "
", - "
", - "
", - "

Built by Suzanne Atkinson

", - "

Suzanne is an emergency medicine physician, triathlon coach and web developer from Pittsburgh. You should  follow her on Twitter.

", - "
", - "
", - "
", - "
", - "
", - "
", - "
" - ] } ] From 8f326b8c1120d99e3b260709e71f332928cf10fc Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sat, 11 Jul 2015 21:43:19 -0700 Subject: [PATCH 16/29] all field guides operational --- field-guides/FYI.json | 3 +- field-guides/orientation.json | 141 ++++++++++++++++------------------ 2 files changed, 68 insertions(+), 76 deletions(-) diff --git a/field-guides/FYI.json b/field-guides/FYI.json index 9aaaaa219e..cc54dd0681 100644 --- a/field-guides/FYI.json +++ b/field-guides/FYI.json @@ -20,8 +20,7 @@ "description": [ "", "
", - "
", - "

Coding Bootcamp Cost Calculator

", + "
", "

Coming from _______, and making $_______, your true costs will be:

", "
", "
", diff --git a/field-guides/orientation.json b/field-guides/orientation.json index 9cc4c41607..29f6fadfe1 100644 --- a/field-guides/orientation.json +++ b/field-guides/orientation.json @@ -733,83 +733,76 @@ "name": "How can I watch Live Coding on the Free Code Camp Twitch.tv Channel?", "dashedName": "how-can-i-watch-live-coding-on-the-free-code-camp-twitch-tv-channel", "description": [ - "
", - "
", - "
Watch us code on our Twitch.tv channel
", - "
", - "
", - "
", - "

Watch the live stream below or on our  Twitch.tv channel.

", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", - "
", - " ", - "
", - "
", - "
", + "
", + "
", + "

Watch the live stream below or on our  Twitch.tv channel.

", + "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + " ", "
", - "
", - "
", - "

Check out our scheduled shows. You can add them to your calendar.

", - "
", - " ", - "
", + "
", + "
", + "
", + " ", + "
", + "
", + "
", + "
", + "
", + "
", + "

Check out our scheduled shows. You can add them to your calendar.

", + "
", + " ", + "
", + "
", + "

", + "
", + "
", + "

Here are some of our previous shows (you can full-screen them):

", + "
", + "
", + "
", + " ", "
", - "

", - "
", - "
", - "

Here are some of our previous shows (you can full-screen them):

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/Z_43xApGB9Y

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/PvWHzcebjjQ

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/yHL6mEr-LGY

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/dolG-yRMcPs

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/YMz_vrK_KlQ

", - "
", - "
", - "
", - " ", - "
", - "

link:  http://www.youtube.com/watch/bbFVxaza8Ik

", - "
", - "
", + "

link:  http://www.youtube.com/watch/Z_43xApGB9Y

", + "
", + "
", + "
", + " ", "
", + "

link:  http://www.youtube.com/watch/PvWHzcebjjQ

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/yHL6mEr-LGY

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/dolG-yRMcPs

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/YMz_vrK_KlQ

", + "
", + "
", + "
", + " ", + "
", + "

link:  http://www.youtube.com/watch/bbFVxaza8Ik

", "
", "
", "
", From 2e909764276fc64fbc22197cf9a76a87a2ebd9db Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sun, 12 Jul 2015 11:36:10 -0700 Subject: [PATCH 17/29] more minor updates --- challenges/basejumps.json | 10 ++- challenges/basic-ziplines.json | 92 +++++++++++++++++++++++--- challenges/functional-programming.json | 3 +- challenges/intermediate-ziplines.json | 48 ++------------ 4 files changed, 98 insertions(+), 55 deletions(-) diff --git a/challenges/basejumps.json b/challenges/basejumps.json index 7ca97c87dc..f77c06d96a 100644 --- a/challenges/basejumps.json +++ b/challenges/basejumps.json @@ -59,6 +59,7 @@ "Set the config flag for your Heroku environment and add MongoLab for your MongoDB instance by running the following command: cd ~/workspace/dist && heroku config:set NODE_ENV=production && heroku addons:create mongolab.", "As you build your app, you should frequently commit changes to your codebase. Make sure you're in the ~/workspace directory by running cd ~/workspace. Then you can this code to stage the changes to your changes and commit them: git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a short summary of the changes you made to your code, such as \"added a records controller and corresponding routes\".", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Now you're ready to move on to your first Basejump. Click the \"I've completed this challenge\" and move on." ], "challengeType": 2, @@ -71,7 +72,7 @@ "difficulty": 2.01, "challengeSeed": ["128451852"], "description": [ - "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://voteplex.herokuapp.com/ and deploy it to Heroku.", + "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://votingapp.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", "As you build your app, you should frequently commit changes to your codebase. You can do this by running git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a brief summary of the changes you made to your code.", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", @@ -84,6 +85,7 @@ "Bonus User Story: As an unauthenticated user, I can see everyone's polls, but I can't vote on anything.", "Bonus User Story: As an unauthenticated or authenticated user, I can see the results of polls in chart form. (This could be implemented using Chart.js or Google Charts.)", "Bonus User Story: As an authenticated user, if I don't like the options on a poll, I can create a new option.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -116,6 +118,7 @@ "User Story: As an authenticated user, I can add myself to a bar to indicate I am going there tonight.", "User Story: As an authenticated user, I can remove myself from a bar if I no longer want to go there.", "Bonus User Story: As an unauthenticated user, when I login I should not have to search again.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -148,6 +151,7 @@ "User Story: As a user, I can add new stocks by their symbol name.", "User Story: As a user, I can remove stocks.", "Bonus User Story: As a user, I can see changes in real-time when any other user adds or removes a stock.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -180,6 +184,7 @@ "User Story: As an authenticated user, I can add a new book.", "User Story: As an authenticated user, I can update my settings to store my full name, city, and state.", "Bonus User Story: As an authenticated user, I can propose a trade and wait for the other user to accept the trade.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -203,7 +208,7 @@ "difficulty": 2.05, "challengeSeed": ["128451852"], "description": [ - "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://linkterest.herokuapp.com/ and deploy it to Heroku.", + "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://stark-lowlands-3680.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", "As you build your app, you should frequently commit changes to your codebase. You can do this by running git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a brief summary of the changes you made to your code.", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", @@ -215,6 +220,7 @@ "User Story: As an unauthenticated user, I can browse other users' walls of images.", "Bonus User Story: As an authenticated user, if I upload an image that is broken, it will be replaced by a placeholder image. (can use jQuery broken image detection)", "Hint: Masonry.js is a library that allows for Pinterest-style image grids.", + "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], diff --git a/challenges/basic-ziplines.json b/challenges/basic-ziplines.json index 716f6e3d87..d8d1ebab3e 100644 --- a/challenges/basic-ziplines.json +++ b/challenges/basic-ziplines.json @@ -38,20 +38,56 @@ "descriptionPt": [] }, { - "id": "bd7158d8c442eddfaeb5bd13", - "name": "Zipline: Build a Random Quote Machine", - "dashedName": "zipline-build-a-random-quote-machine", + "id": "bd7158d8c242eddfaeb5bd13", + "name": "Zipline: Build a Personal Portfolio Webpage", + "dashedName": "zipline-build-a-personal-portfolio-webpage", "difficulty": 1.01, "challengeSeed": ["126415122"], + "description": [ + "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/ThiagoFerreir4/full/eNMxEp.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", + "Rule #2: You may use whichever libraries or APIs you need.", + "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", + "Here are the user stories you must enable, and optional bonus user stories:", + "User Story: As a user, I can access all of the portfolio webpage's content just by scrolling.", + "User Story: As a user, I can click different buttons that will take me to the portfolio creator's different social media pages.", + "User Story: As a user, I can see thumbnail images of different projects the portfolio creator has built (if you don't haven't built any websites before, use placeholders.)", + "Bonus User Story: As a user, I navigate to different sections of the webpage by clicking buttons in the navigation.", + "Don't worry if you don't have anything to showcase on your portfolio yet - you will build several several apps on the next few CodePen challenges, and can come back and update your portfolio later.", + "There are many great portfolio templates out there, but for this challenge, you'll need to build a portfolio page yourself. Using Bootstrap will make this much easier for you.", + "Remember to use RSAP if you get stuck.", + "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", + "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" + ], + "challengeType": 3, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + }, + { + "id": "bd7158d8c442eddfaeb5bd13", + "name": "Zipline: Build a Random Quote Machine", + "dashedName": "zipline-build-a-random-quote-machine", + "difficulty": 1.02, + "challengeSeed": ["126415122"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/vEoVMw.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", "User Story: As a user, I can click a button to show me a new random quote.", "Bonus User Story: As a user, I can press a button to tweet out a quote.", - "Remember to use RSAP if you get stuck. Try using jQuery's $.getJSON() to consume APIs.", + "Note that you can either put your quotes into an array and show them at random, or use an API to get quotes, such as http://forismatic.com/en/api/.", + "Remember to use RSAP if you get stuck.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -72,11 +108,11 @@ "id": "bd7158d8c442eddfaeb5bd10", "name": "Zipline: Show the Local Weather", "dashedName": "zipline-show-the-local-weather", - "difficulty": 1.02, + "difficulty": 1.03, "challengeSeed": ["126415127"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/yNBJRj.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", @@ -84,7 +120,7 @@ "Bonus User Story: As a user, I can see an icon depending on the temperature..", "Bonus User Story: As a user, I see a different background image depending on the temperature (e.g. snowy mountain, hot desert).", "Bonus User Story: As a user, I can push a button to toggle between Fahrenheit and Celsius.", - "Remember to use RSAP if you get stuck. Try using jQuery's $.getJSON() to consume APIs.", + "Remember to use RSAP if you get stuck.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -105,11 +141,11 @@ "id": "bd7158d8c442eddfaeb5bd0f", "name": "Zipline: Build a Pomodoro Clock", "dashedName": "zipline-build-a-pomodoro-clock", - "difficulty": 1.03, + "difficulty": 1.04, "challengeSeed": ["126411567"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/RPbGxZ/.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", @@ -132,6 +168,42 @@ "descriptionEs": [], "namePt": "", "descriptionPt": [] + }, + { + "id": "bd7158d8c442eddfaeb5bd1f", + "name": "Zipline: Use the Twitch.tv JSON API", + "dashedName": "zipline-use-the-twitchtv-json-api", + "difficulty": 1.05, + "challengeSeed": ["126411564"], + "description": [ + "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/GJKRxZ.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", + "Rule #2: You may use whichever libraries or APIs you need.", + "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", + "Here are the user stories you must enable, and optional bonus user stories:", + "User Story: As a user, I can see whether Free Code Camp is currently streaming on Twitch.tv.", + "User Story: As a user, I can click the status output and be sent directly to the Free Code Camp's Twitch.tv channel.", + "User Story: As a user, if Free Code Camp is streaming, I can see additional details about what they are streaming.", + "Bonus User Story: As a user, I can search through the streams listed.", + "Hint: Here's an example call to Twitch.tv's JSON API: https://api.twitch.tv/kraken/streams/freecodecamp.", + "Hint: The relevant documentation about this API call is here: https://github.com/justintv/Twitch-API/blob/master/v3_resources/streams.md#get-streamschannel.", + "Hint: Here's an array of the Twitch.tv usernames of people who regularly stream coding: [\"freecodecamp\", \"storbeck\", \"terakilobyte\", \"habathcx\",\"RobotCaleb\",\"comster404\",\"brunofin\",\"thomasballinger\",\"noobs2ninjas\",\"beohoff\"]", + "Remember to use RSAP if you get stuck.", + "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", + "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" + ], + "challengeType": 3, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] } ] } diff --git a/challenges/functional-programming.json b/challenges/functional-programming.json index a7a60efdf9..467be534e9 100644 --- a/challenges/functional-programming.json +++ b/challenges/functional-programming.json @@ -10,9 +10,10 @@ "challengeSeed": ["129169463"], "description": [ "Functional programming holds the key to unlocking JavaScript's powerful asynchronous features.", - "Jafar Husain's 42-step interactive Functional Programming course will familiarize you with the various ways you can recombine these functions.", + "Jafar Husain's interactive Functional Programming course will familiarize you with the various ways you can recombine these functions.", "Functional programming in JavaScript involves using five key functions: \"map\", \"reduce\", \"filter\", \"concatAll\", and \"zip\".", "Click here to go to the challenge: http://jhusain.github.io/learnrx/.", + "You only need to complete the first 27 steps of this tutorial.", "This challenge will take several hours, but don't worry. Jafar's website will save your progress (using your browser's local storage) so you don't need to finish it in one sitting.", "If you've spent several minutes on one of these challenges, and still can't figure out its correct answer, you can click \"show answer\", then click \"run\" to advance to the next challenge. Be sure to read the correct answer and make sure you understand it before moving on." ], diff --git a/challenges/intermediate-ziplines.json b/challenges/intermediate-ziplines.json index 93f34e0971..1799c751f6 100644 --- a/challenges/intermediate-ziplines.json +++ b/challenges/intermediate-ziplines.json @@ -2,42 +2,6 @@ "name": "Intermediate Front End Development Projects", "order": 0.013, "challenges": [ - { - "id": "bd7158d8c442eddfaeb5bd1f", - "name": "Zipline: Use the Twitch.tv JSON API", - "dashedName": "zipline-use-the-twitchtv-json-api", - "difficulty": 1.01, - "challengeSeed": ["126411564"], - "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/GJKRxZ.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", - "Rule #2: You may use whichever libraries or APIs you need.", - "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", - "Here are the user stories you must enable, and optional bonus user stories:", - "User Story: As a user, I can see whether Free Code Camp is currently streaming on Twitch.tv.", - "User Story: As a user, I can click the status output and be sent directly to the Free Code Camp's Twitch.tv channel.", - "User Story: As a user, if Free Code Camp is streaming, I can see additional details about what they are streaming.", - "Bonus User Story: As a user, I can search through the streams listed.", - "Hint: Here's an example call to Twitch.tv's JSON API: https://api.twitch.tv/kraken/streams/freecodecamp.", - "Hint: The relevant documentation about this API call is here: https://github.com/justintv/Twitch-API/blob/master/v3_resources/streams.md#get-streamschannel.", - "Hint: Here's an array of the Twitch.tv usernames of people who regularly stream coding: [\"freecodecamp\", \"storbeck\", \"terakilobyte\", \"habathcx\",\"RobotCaleb\",\"comster404\",\"brunofin\",\"thomasballinger\",\"noobs2ninjas\",\"beohoff\"]", - "Remember to use RSAP if you get stuck. Try using jQuery's $.getJSON() to consume APIs.", - "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", - "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" - ], - "challengeType": 3, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], - "nameEs": "", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [] - }, { "id": "bd7158d8c442eddfaeb5bd18", "name": "Zipline: Stylize Stories on Camper News", @@ -46,7 +10,7 @@ "challengeSeed": ["126415129"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/Wveezv.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", @@ -55,7 +19,7 @@ "User Story: As a user, I can click a link to go directly to the post's discussion page.", "Bonus User Story: As a user, I can see how many upvotes each story has.", "Hint: Here's the Camper News Hot Stories API endpoint: http://www.freecodecamp.com/stories/hotStories.", - "Remember to use RSAP if you get stuck. Try using jQuery's $.getJSON() to consume APIs.", + "Remember to use RSAP if you get stuck.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -80,7 +44,7 @@ "challengeSeed": ["126415131"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/MwgQea.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", @@ -88,7 +52,7 @@ "Bonus User Story:As a user, I can click a button to see a random Wikipedia entry.", "Bonus User Story:As a user, when I type in the search box, I can see a dropdown menu with autocomplete options for matching Wikipedia entries.", "Hint: Here's an entry on using Wikipedia's API: http://www.mediawiki.org/wiki/API:Main_page.", - "Remember to use RSAP if you get stuck. Try using jQuery's $.getJSON() to consume APIs.", + "Remember to use RSAP if you get stuck.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" ], @@ -113,7 +77,7 @@ "challengeSeed": ["126411565"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/zxgaqw.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", @@ -145,7 +109,7 @@ "challengeSeed": ["126415123"], "description": [ "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/alex-dixon/full/JogOpQ/.", - "Rule #1: Don't look at the example project's code. Figure it out for yourself.", + "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", "Here are the user stories you must enable, and optional bonus user stories:", From 080e90f44620121dbe4367ec440b5633ba51dbb7 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sun, 12 Jul 2015 17:24:06 -0700 Subject: [PATCH 18/29] finish scripts and overall structure for new curriculum --- challenges/advanced-bonfires.json | 2 +- challenges/angularjs.json | 4 +- challenges/automated-testing.json | 48 ++++++++ challenges/basejumps.json | 2 +- challenges/git.json | 40 +++---- challenges/intermediate-ziplines.json | 2 +- challenges/mongodb.json | 36 +++--- challenges/nodejs-and-expressjs.json | 22 ++-- challenges/object-oriented-programming.json | 125 ++++---------------- 9 files changed, 124 insertions(+), 157 deletions(-) create mode 100644 challenges/automated-testing.json diff --git a/challenges/advanced-bonfires.json b/challenges/advanced-bonfires.json index f729bde4e2..b5adac4dfa 100644 --- a/challenges/advanced-bonfires.json +++ b/challenges/advanced-bonfires.json @@ -1,6 +1,6 @@ { "name": "Advanced Algorithm Scripting", - "order": 0.011, + "order": 0.012, "challenges": [ { "id": "aff0395860f5d3034dc0bfc9", diff --git a/challenges/angularjs.json b/challenges/angularjs.json index 30ad5d0cb0..0e1b5acc32 100644 --- a/challenges/angularjs.json +++ b/challenges/angularjs.json @@ -1,6 +1,6 @@ { - "name": "Angular JS", - "order": 0.012, + "name": "AngularJS", + "order": 0.016, "challenges": [ { "id": "bd7154d8c441eddfaeb5bdef", diff --git a/challenges/automated-testing.json b/challenges/automated-testing.json new file mode 100644 index 0000000000..cd7e9fb1ea --- /dev/null +++ b/challenges/automated-testing.json @@ -0,0 +1,48 @@ +{ + "name": "Automated Testing", + "order" : 0.011, + "challenges": [ + { + "id": "bd7253d8c341eddeaeb5bd0f", + "name": "Waypoint: Write Automated Tests for Safer Code", + "dashedName": "waypoint-write-automated-tests-for-safer-code", + "difficulty": 0.01, + "challengeSeed": ["126433450"], + "description": [ + "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", + "If you don't already have Cloud 9 account, create one now at http://c9.io.", + "Open up http://c9.io and sign in to your account.", + "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", + "Give your workspace a name.", + "Choose Node.js in the selection area below the name field.", + "Click the Create button.", + "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", + "Click the \"Start Editing\" button.", + "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", + "Install test-anything with this command: npm install -g test-anything", + "Now start the tutorial by running test-anything.", + "Note that you can resize the c9.io's windows by dragging their borders.", + "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", + "You can view this Node School module's source code on GitHub at https://github.com/finnp/test-anything.", + "Complete \"Log it out\"", + "Complete \"Tell me what is Wrong\"", + "Complete \"Tape it Together\"", + "Complete \"Call me Maybe\"", + "Complete \"To Err is Human, to Purr Feline\"", + "Once you've completed these steps, move on to our next challenge." + ], + "challengeType": 2, + "tests": [], + "nameCn": "", + "descriptionCn": [], + "nameFr": "", + "descriptionFr": [], + "nameRu": "", + "descriptionRu": [], + "nameEs": "", + "descriptionEs": [], + "namePt": "", + "descriptionPt": [] + } + ] +} diff --git a/challenges/basejumps.json b/challenges/basejumps.json index f77c06d96a..e20aec03ed 100644 --- a/challenges/basejumps.json +++ b/challenges/basejumps.json @@ -1,6 +1,6 @@ { "name": "Full Stack JavaScript Projects", - "order": 0.016, + "order": 0.018, "challenges": [ { "id": "bd7158d8c443eddfaeb5bcef", diff --git a/challenges/git.json b/challenges/git.json index 1b95b8a417..af337af655 100644 --- a/challenges/git.json +++ b/challenges/git.json @@ -1,9 +1,9 @@ { "name": "Git", - "order" : 0.015, + "order" : 0.013, "challenges": [ { - "id": "bd7153d8c341eddeaeb5bd0f", + "id": "bd7353d8c341eddeaeb5bd0f", "name": "Waypoint: Save your Code Revisions Forever with Git", "dashedName": "waypoint-save-your-code-revisions-forever-with-git", "difficulty": 0.01, @@ -19,29 +19,23 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", - "Now start the tutorial by running how-to-npm.", + "Install how-to-npm with this command: npm install -g git-it", + "Now start the tutorial by running git-it.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", - "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", - "Complete \"Install NPM\"", - "Complete \"Dev Environment\"", - "Complete \"Login\"", - "Complete \"Start a Project\"", - "Complete \"Install a Module\"", - "Complete \"Listing Dependencies\"", - "Complete \"NPM Test\"", - "Complete \"Package Niceties\"", - "Complete \"Publish\"", - "Complete \"Version\"", - "Complete \"Publish Again\"", - "Complete \"Dist Tag\"", - "Complete \"Dist Tag Removal\"", - "Complete \"Outdated\"", - "Complete \"Update\"", - "Complete \"RM\"", - "Complete \"Finale\"" + "You can view this Node School module's source code on GitHub at https://github.com/jlord/git-it.", + "Complete \"Get Git\"", + "Complete \"Repository\"", + "Complete \"Commit to it\"", + "Complete \"Githubbin\"", + "Complete \"Remote Control\"", + "Complete \"Forks and Clones\"", + "Complete \"Branches aren't just for Birds\"", + "Complete \"It's a Small World\"", + "Complete \"Pull, Never out of Date\"", + "Complete \"Requesting you Pull, Please\"", + "Complete \"Merge Tada!\"", + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], diff --git a/challenges/intermediate-ziplines.json b/challenges/intermediate-ziplines.json index 1799c751f6..4859ac93a6 100644 --- a/challenges/intermediate-ziplines.json +++ b/challenges/intermediate-ziplines.json @@ -1,6 +1,6 @@ { "name": "Intermediate Front End Development Projects", - "order": 0.013, + "order": 0.017, "challenges": [ { "id": "bd7158d8c442eddfaeb5bd18", diff --git a/challenges/mongodb.json b/challenges/mongodb.json index 6533904937..19592bf86a 100644 --- a/challenges/mongodb.json +++ b/challenges/mongodb.json @@ -1,9 +1,9 @@ { "name": "MongoDB", - "order" : 0.014, + "order" : 0.015, "challenges": [ { - "id": "bd7253d8c341eddeaeb5bd0f", + "id": "bd7243d8c341eddeaeb5bd0f", "name": "Waypoint: Store Data in MongoDB", "dashedName": "waypoint-store-data-in-mongodb", "difficulty": 0.01, @@ -19,29 +19,21 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", - "Now start the tutorial by running how-to-npm.", + "Install learnyoumongo with this command: npm install learnyoumongo -g", + "Now start the tutorial by running learnyoumongo.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", - "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", - "Complete \"Install NPM\"", - "Complete \"Dev Environment\"", - "Complete \"Login\"", - "Complete \"Start a Project\"", - "Complete \"Install a Module\"", - "Complete \"Listing Dependencies\"", - "Complete \"NPM Test\"", - "Complete \"Package Niceties\"", - "Complete \"Publish\"", - "Complete \"Version\"", - "Complete \"Publish Again\"", - "Complete \"Dist Tag\"", - "Complete \"Dist Tag Removal\"", - "Complete \"Outdated\"", + "You can view this Node School module's source code on GitHub at https://github.com/evanlucas/learnyoumongo.", + "Complete \"Mongod\"", + "Complete \"Connect\"", + "Complete \"Find\"", + "Complete \"Find Limit\"", + "Complete \"Insert\"", "Complete \"Update\"", - "Complete \"RM\"", - "Complete \"Finale\"" + "Complete \"Remove\"", + "Complete \"Count\"", + "Complete \"Aggregate\"", + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], diff --git a/challenges/nodejs-and-expressjs.json b/challenges/nodejs-and-expressjs.json index 8d8b237478..4d000b386d 100644 --- a/challenges/nodejs-and-expressjs.json +++ b/challenges/nodejs-and-expressjs.json @@ -1,6 +1,6 @@ { "name": "Node.js and Express.js", - "order" : 0.013, + "order" : 0.014, "challenges": [ { "id": "bd7153d8c441eddfaeb5bd0f", @@ -19,12 +19,13 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", + "Install how-to-npm with this command: npm install -g how-to-npm", "Now start the tutorial by running how-to-npm.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", + "You can view this Node School module's source code on GitHub at https://github.com/npm/how-to-npm.", "Complete \"Install NPM\"", "Complete \"Dev Environment\"", "Complete \"Login\"", @@ -41,7 +42,8 @@ "Complete \"Outdated\"", "Complete \"Update\"", "Complete \"RM\"", - "Complete \"Finale\"" + "Complete \"Finale\"", + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], @@ -73,10 +75,11 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Run this command: sudo npm install learnyounode -g", + "Run this command: sudo npm install -g learnyounode", "Now start this tutorial by running learnyounode", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", + "You can view this Node School module's source code on GitHub at https://github.com/workshopper/learnyounode.", "Complete \"Hello World\"", "Complete \"Baby Steps\"", "Complete \"My First I/O\"", @@ -84,7 +87,7 @@ "Complete \"Filtered LS\"", "Complete \"Make it Modular\"", "Complete \"HTTP Client\"", - "Once you've completed these first 7 challenges, move on to our next waypoint." + "Once you've completed these first 7 steps, move on to our next challenge." ], "challengeType": 2, "tests": [], @@ -109,10 +112,11 @@ "Let's continue the LearnYouNode Node School challenge. For this Waypoint, we'll do challenges 8 through 10.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", "Return to the c9.io workspace you created Now start this tutorial by running learnyounode", + "You can view this Node School module's source code on GitHub at https://github.com/workshopper/learnyounode.", "Complete \"HTTP Collect\"", "Complete \"Juggling Async\"", "Complete \"Time Server\"", - "Once you've completed these 3 challenges, move on to our next waypoint." + "Once you've completed these 3 steps, move on to our next challenge." ], "challengeType": 2, "tests": [], @@ -137,10 +141,11 @@ "Let's continue the LearnYouNode Node School challenge. For this Waypoint, we'll do challenges 11 through 13.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", "Return to the c9.io workspace you created for the previous LearnYouNode challenges and start the tutorial by running learnyounode", + "You can view this Node School module's source code on GitHub at https://github.com/workshopper/learnyounode.", "Complete \"HTTP File Server\"", "Complete \"HTTP Uppercaserer\"", "Complete \"HTTP JSON API Server\"", - "Once you've completed these final 3 challenges, move on to our next waypoint." + "Once you've completed these final 3 steps, move on to our next challenge." ], "challengeType": 2, "tests": [], @@ -178,13 +183,14 @@ "Now start this tutorial by running expressworks", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", + "You can view this Node School module's source code on GitHub at https://github.com/azat-co/expressworks.", "Complete \"Hello World\"", "Complete \"Jade\"", "Complete \"Good Old Form\"", "Complete \"Stylish CSS\"", "Complete \"Session and Cookie\"", "Complete \"JSON Me\"", - "Once you've completed these challenges, move on to our next waypoint." + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], diff --git a/challenges/object-oriented-programming.json b/challenges/object-oriented-programming.json index f1def966f6..7e4b87ef1b 100644 --- a/challenges/object-oriented-programming.json +++ b/challenges/object-oriented-programming.json @@ -4,8 +4,8 @@ "challenges": [ { "id": "bd7153d8c44eeddfaeb5bd0f", - "name": "Waypoint: Learn Scopes and Closures", - "dashedName": "waypoint-learn-scopes-and-closures", + "name": "Waypoint: Learn Scope Chains and Closures", + "dashedName": "waypoint-learn-scope-chains-and-closures", "difficulty": 0.01, "challengeSeed": ["126433450"], "description": [ @@ -19,29 +19,17 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", - "Now start the tutorial by running how-to-npm.", + "Install scope-chains-closures with this command: npm install -g scope-chains-closures", + "Now start the tutorial by running scope-chains-closures.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", - "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", - "Complete \"Install NPM\"", - "Complete \"Dev Environment\"", - "Complete \"Login\"", - "Complete \"Start a Project\"", - "Complete \"Install a Module\"", - "Complete \"Listing Dependencies\"", - "Complete \"NPM Test\"", - "Complete \"Package Niceties\"", - "Complete \"Publish\"", - "Complete \"Version\"", - "Complete \"Publish Again\"", - "Complete \"Dist Tag\"", - "Complete \"Dist Tag Removal\"", - "Complete \"Outdated\"", - "Complete \"Update\"", - "Complete \"RM\"", - "Complete \"Finale\"" + "You can view this Node School module's source code on GitHub at https://github.com/jesstelford/scope-chains-closures.", + "Complete \"Scopes\"", + "Complete \"Scope Chains\"", + "Complete \"Global Scope and Shadowing\"", + "Complete \"Closures\"", + "Complete \"Garbage Collection\"", + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], @@ -60,7 +48,7 @@ "id": "bd7153d8b44eeddfaeb5bd0f", "name": "Waypoint: Use Prototypes for Inheriting Properties", "dashedName": "waypoint-use-prototypes-for-inheriting-properties", - "difficulty": 0.01, + "difficulty": 0.02, "challengeSeed": ["126433450"], "description": [ "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", @@ -73,83 +61,22 @@ "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", "Click the \"Start Editing\" button.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", - "Now start the tutorial by running how-to-npm.", + "Install planet-proto with this command: npm install -g planetproto", + "Now start the tutorial by running planetproto.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", - "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", - "Complete \"Install NPM\"", - "Complete \"Dev Environment\"", - "Complete \"Login\"", - "Complete \"Start a Project\"", - "Complete \"Install a Module\"", - "Complete \"Listing Dependencies\"", - "Complete \"NPM Test\"", - "Complete \"Package Niceties\"", - "Complete \"Publish\"", - "Complete \"Version\"", - "Complete \"Publish Again\"", - "Complete \"Dist Tag\"", - "Complete \"Dist Tag Removal\"", - "Complete \"Outdated\"", - "Complete \"Update\"", - "Complete \"RM\"", - "Complete \"Finale\"" - ], - "challengeType": 2, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], - "nameEs": "", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [] - }, - { - "id": "bd7143d8c44eeddfaeb5bd0f", - "name": "Waypoint: Upgrade to ES6 the Latest JavaScript Version", - "dashedName": "waypoint-upgrade-to-es6-the-latest-javascript-version", - "difficulty": 0.01, - "challengeSeed": ["126433450"], - "description": [ - "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", - "If you don't already have Cloud 9 account, create one now at http://c9.io.", - "Open up http://c9.io and sign in to your account.", - "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", - "Give your workspace a name.", - "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", - "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install how-to-npm with this command: npm install how-to-npm -g", - "Now start the tutorial by running how-to-npm.", - "Note that you can resize the c9.io's windows by dragging their borders.", - "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "Note that you can only add dist tags to the specific version numbers published in steps 8 and 10. If you receive a 403 or 404 error, run how-to-npm and try again.", - "Also, if you experience a bug, and you think you understand the concept, you can skip a step by running how-to-npm verify skip in the terminal.", - "Complete \"Install NPM\"", - "Complete \"Dev Environment\"", - "Complete \"Login\"", - "Complete \"Start a Project\"", - "Complete \"Install a Module\"", - "Complete \"Listing Dependencies\"", - "Complete \"NPM Test\"", - "Complete \"Package Niceties\"", - "Complete \"Publish\"", - "Complete \"Version\"", - "Complete \"Publish Again\"", - "Complete \"Dist Tag\"", - "Complete \"Dist Tag Removal\"", - "Complete \"Outdated\"", - "Complete \"Update\"", - "Complete \"RM\"", - "Complete \"Finale\"" + "You can view this Node School module's source code on GitHub at https://github.com/sporto/planetproto.", + "Complete \"Simple Objects\"", + "Complete \"Proto\"", + "Complete \"Dynamic Lookups\"", + "Complete \"Property Assignments\"", + "Complete \"Arrays and Objects\"", + "Complete \"Object Create\"", + "Complete \"Dot New\"", + "Complete \"Constructor Functions\"", + "Complete \"Implicit This\"", + "Note that you can skip the last challenge.", + "Once you've completed these steps, move on to our next challenge." ], "challengeType": 2, "tests": [], From b8fd1181a29f96410b358b545a0c6ad1320308d1 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sun, 12 Jul 2015 17:35:13 -0700 Subject: [PATCH 19/29] update basejump demo urls --- challenges/basejumps.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/challenges/basejumps.json b/challenges/basejumps.json index e20aec03ed..69bd285081 100644 --- a/challenges/basejumps.json +++ b/challenges/basejumps.json @@ -109,7 +109,7 @@ "difficulty": 2.02, "challengeSeed": ["128451852"], "description": [ - "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://sociallife.herokuapp.com/ and deploy it to Heroku.", + "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://whatsgoinontonight.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", "As you build your app, you should frequently commit changes to your codebase. You can do this by running git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a brief summary of the changes you made to your code.", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", @@ -142,7 +142,7 @@ "difficulty": 2.03, "challengeSeed": ["128451852"], "description": [ - "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://stockjump.herokuapp.com/ and deploy it to Heroku.", + "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://stockstream.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", "As you build your app, you should frequently commit changes to your codebase. You can do this by running git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a brief summary of the changes you made to your code.", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", @@ -175,7 +175,7 @@ "difficulty": 2.04, "challengeSeed": ["128451852"], "description": [ - "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://bookoutpost.herokuapp.com/ and deploy it to Heroku.", + "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://bookjump.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", "As you build your app, you should frequently commit changes to your codebase. You can do this by running git commit -am \"your commit message\". Note that you should replace \"your commit message\" with a brief summary of the changes you made to your code.", "You can push these new commits to GitHub by running git push origin master, and to Heroku by running grunt --force && grunt buildcontrol:heroku.", From 636ef6d4f77d224430c79f36957af2d81ee23e57 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Sun, 12 Jul 2015 22:51:06 -0700 Subject: [PATCH 20/29] finish adding the nodeschool challenges --- challenges/advanced-bonfires.json | 2 +- challenges/angularjs.json | 2 +- challenges/automated-testing.json | 48 --------------------- challenges/basejumps.json | 6 +-- challenges/basic-ziplines.json | 10 ++--- challenges/git.json | 6 +-- challenges/intermediate-ziplines.json | 10 ++--- challenges/mongodb.json | 7 ++- challenges/nodejs-and-expressjs.json | 14 ++---- challenges/object-oriented-programming.json | 10 ++--- 10 files changed, 26 insertions(+), 89 deletions(-) delete mode 100644 challenges/automated-testing.json diff --git a/challenges/advanced-bonfires.json b/challenges/advanced-bonfires.json index b5adac4dfa..f729bde4e2 100644 --- a/challenges/advanced-bonfires.json +++ b/challenges/advanced-bonfires.json @@ -1,6 +1,6 @@ { "name": "Advanced Algorithm Scripting", - "order": 0.012, + "order": 0.011, "challenges": [ { "id": "aff0395860f5d3034dc0bfc9", diff --git a/challenges/angularjs.json b/challenges/angularjs.json index 0e1b5acc32..48207fb41f 100644 --- a/challenges/angularjs.json +++ b/challenges/angularjs.json @@ -1,6 +1,6 @@ { "name": "AngularJS", - "order": 0.016, + "order": 0.015, "challenges": [ { "id": "bd7154d8c441eddfaeb5bdef", diff --git a/challenges/automated-testing.json b/challenges/automated-testing.json deleted file mode 100644 index cd7e9fb1ea..0000000000 --- a/challenges/automated-testing.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "Automated Testing", - "order" : 0.011, - "challenges": [ - { - "id": "bd7253d8c341eddeaeb5bd0f", - "name": "Waypoint: Write Automated Tests for Safer Code", - "dashedName": "waypoint-write-automated-tests-for-safer-code", - "difficulty": 0.01, - "challengeSeed": ["126433450"], - "description": [ - "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", - "If you don't already have Cloud 9 account, create one now at http://c9.io.", - "Open up http://c9.io and sign in to your account.", - "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", - "Give your workspace a name.", - "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", - "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install test-anything with this command: npm install -g test-anything", - "Now start the tutorial by running test-anything.", - "Note that you can resize the c9.io's windows by dragging their borders.", - "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", - "You can view this Node School module's source code on GitHub at https://github.com/finnp/test-anything.", - "Complete \"Log it out\"", - "Complete \"Tell me what is Wrong\"", - "Complete \"Tape it Together\"", - "Complete \"Call me Maybe\"", - "Complete \"To Err is Human, to Purr Feline\"", - "Once you've completed these steps, move on to our next challenge." - ], - "challengeType": 2, - "tests": [], - "nameCn": "", - "descriptionCn": [], - "nameFr": "", - "descriptionFr": [], - "nameRu": "", - "descriptionRu": [], - "nameEs": "", - "descriptionEs": [], - "namePt": "", - "descriptionPt": [] - } - ] -} diff --git a/challenges/basejumps.json b/challenges/basejumps.json index 69bd285081..fcd35dce54 100644 --- a/challenges/basejumps.json +++ b/challenges/basejumps.json @@ -1,6 +1,6 @@ { "name": "Full Stack JavaScript Projects", - "order": 0.018, + "order": 0.017, "challenges": [ { "id": "bd7158d8c443eddfaeb5bcef", @@ -17,9 +17,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Never run this command on your local machine. But in your Cloud 9 terminal window, run: rm -rf * && echo \"export NODE_PATH=$NODE_PATH:/home/ubuntu/.nvm/v0.10.35/lib/node_modules\" >> ~/.bashrc && source ~/.bashrc && npm install -g yo grunt grunt-cli generator-angular-fullstack && yo angular-fullstack", "Yeoman will prompt you to answer some questions. Answer them like this:", diff --git a/challenges/basic-ziplines.json b/challenges/basic-ziplines.json index d8d1ebab3e..6fd0eb5572 100644 --- a/challenges/basic-ziplines.json +++ b/challenges/basic-ziplines.json @@ -44,7 +44,7 @@ "difficulty": 1.01, "challengeSeed": ["126415122"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/ThiagoFerreir4/full/eNMxEp.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/ThiagoFerreir4/full/eNMxEp.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -79,7 +79,7 @@ "difficulty": 1.02, "challengeSeed": ["126415122"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/vEoVMw.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/vEoVMw.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -111,7 +111,7 @@ "difficulty": 1.03, "challengeSeed": ["126415127"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/yNBJRj.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/AdventureBear/full/yNBJRj.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -144,7 +144,7 @@ "difficulty": 1.04, "challengeSeed": ["126411567"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/RPbGxZ/.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/RPbGxZ/.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -176,7 +176,7 @@ "difficulty": 1.05, "challengeSeed": ["126411564"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/GJKRxZ.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/GJKRxZ.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", diff --git a/challenges/git.json b/challenges/git.json index af337af655..201c34ede7 100644 --- a/challenges/git.json +++ b/challenges/git.json @@ -1,6 +1,6 @@ { "name": "Git", - "order" : 0.013, + "order" : 0.012, "challenges": [ { "id": "bd7353d8c341eddeaeb5bd0f", @@ -15,9 +15,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Install how-to-npm with this command: npm install -g git-it", "Now start the tutorial by running git-it.", diff --git a/challenges/intermediate-ziplines.json b/challenges/intermediate-ziplines.json index 4859ac93a6..e7d3e5e38d 100644 --- a/challenges/intermediate-ziplines.json +++ b/challenges/intermediate-ziplines.json @@ -1,6 +1,6 @@ { "name": "Intermediate Front End Development Projects", - "order": 0.017, + "order": 0.016, "challenges": [ { "id": "bd7158d8c442eddfaeb5bd18", @@ -9,7 +9,7 @@ "difficulty": 1.02, "challengeSeed": ["126415129"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/Wveezv.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/Wveezv.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -43,7 +43,7 @@ "difficulty": 1.03, "challengeSeed": ["126415131"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/MwgQea.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/MwgQea.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -76,7 +76,7 @@ "difficulty": 1.05, "challengeSeed": ["126411565"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/zxgaqw.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/GeoffStorbeck/full/zxgaqw.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", @@ -108,7 +108,7 @@ "difficulty": 1.06, "challengeSeed": ["126415123"], "description": [ - "Objective: Build a CodePen.io that successfully reverse-engineers this: http://codepen.io/alex-dixon/full/JogOpQ/.", + "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/alex-dixon/full/JogOpQ/.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", "Rule #2: You may use whichever libraries or APIs you need.", "Rule #3: Reverse engineer the example project's functionality, and also feel free to personalize it.", diff --git a/challenges/mongodb.json b/challenges/mongodb.json index 19592bf86a..cca5ee792c 100644 --- a/challenges/mongodb.json +++ b/challenges/mongodb.json @@ -1,6 +1,6 @@ { "name": "MongoDB", - "order" : 0.015, + "order" : 0.014, "challenges": [ { "id": "bd7243d8c341eddeaeb5bd0f", @@ -15,12 +15,11 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Install learnyoumongo with this command: npm install learnyoumongo -g", "Now start the tutorial by running learnyoumongo.", + "Whenever you run a command that includes mongod on c9.io, be sure to also use the --nojournal flag, like this: mongod --nojournal.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", "You can view this Node School module's source code on GitHub at https://github.com/evanlucas/learnyoumongo.", diff --git a/challenges/nodejs-and-expressjs.json b/challenges/nodejs-and-expressjs.json index 4d000b386d..10da3ae8c2 100644 --- a/challenges/nodejs-and-expressjs.json +++ b/challenges/nodejs-and-expressjs.json @@ -1,6 +1,6 @@ { "name": "Node.js and Express.js", - "order" : 0.014, + "order" : 0.013, "challenges": [ { "id": "bd7153d8c441eddfaeb5bd0f", @@ -15,9 +15,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Install how-to-npm with this command: npm install -g how-to-npm", "Now start the tutorial by running how-to-npm.", @@ -71,9 +69,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Run this command: sudo npm install -g learnyounode", "Now start this tutorial by running learnyounode", @@ -175,9 +171,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Run this command: git clone http://github.com/reddock/fcc_express && chmod 744 fcc_express/setup.sh && fcc_express/setup.sh && source ~/.profile", "Now start this tutorial by running expressworks", diff --git a/challenges/object-oriented-programming.json b/challenges/object-oriented-programming.json index 7e4b87ef1b..3b4c8f4d1f 100644 --- a/challenges/object-oriented-programming.json +++ b/challenges/object-oriented-programming.json @@ -15,9 +15,7 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", "Install scope-chains-closures with this command: npm install -g scope-chains-closures", "Now start the tutorial by running scope-chains-closures.", @@ -57,11 +55,9 @@ "Click on Create New Workspace at the top right of the c9.io page, then click on the \"Create a new workspace\" popup that appears below it the button after you click on it.", "Give your workspace a name.", "Choose Node.js in the selection area below the name field.", - "Click the Create button.", - "Wait for the workspace to finish processing and select it on the left sidebar, below the Create New Workspace button.", - "Click the \"Start Editing\" button.", + "Click the Create button. Then click into your new workspace.", "In the lower right hand corner you should see a terminal window. In this window use the following commands. You don't need to know what these mean at this point.", - "Install planet-proto with this command: npm install -g planetproto", + "Install planetproto with this command: npm install -g planetproto", "Now start the tutorial by running planetproto.", "Note that you can resize the c9.io's windows by dragging their borders.", "Make sure that you are always in your project's \"workspace\" directory. You can always navigate back to this directory by running this command: cd ~/workspace.", From 3e413488b6e1928d2b6632ec40d28ddef00a8b3c Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Mon, 13 Jul 2015 00:20:51 -0700 Subject: [PATCH 21/29] add videos to new challenges --- challenges/basejumps.json | 11 ++++++----- challenges/basic-ziplines.json | 2 +- challenges/git.json | 2 +- challenges/mongodb.json | 2 +- challenges/object-oriented-programming.json | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/challenges/basejumps.json b/challenges/basejumps.json index fcd35dce54..717a99a47d 100644 --- a/challenges/basejumps.json +++ b/challenges/basejumps.json @@ -68,7 +68,7 @@ "name": "Basejump: Build a Voting App", "dashedName": "basejump-build-a-voting-app", "difficulty": 2.01, - "challengeSeed": ["128451852"], + "challengeSeed": ["133315786"], "description": [ "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://votingapp.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", @@ -105,7 +105,7 @@ "name": "Basejump: Build a Nightlife Coordination App", "dashedName": "basejump-build-a-nightlife-coordination-app", "difficulty": 2.02, - "challengeSeed": ["128451852"], + "challengeSeed": ["133315781"], "description": [ "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://whatsgoinontonight.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", @@ -116,6 +116,7 @@ "User Story: As an authenticated user, I can add myself to a bar to indicate I am going there tonight.", "User Story: As an authenticated user, I can remove myself from a bar if I no longer want to go there.", "Bonus User Story: As an unauthenticated user, when I login I should not have to search again.", + "Hint: Try using the Yelp API to find venues in the cities your users search for.", "If you need further guidance on using Yeoman Angular-Fullstack Generator, check out: https://github.com/clnhll/guidetobasejumps.", "Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku. If you pair programmed with a friend, enter his or her Free Code Camp username as well so that you both get credit for completing it.", "If you'd like immediate feedback on your project, click this button and paste in a link to your Heroku project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" @@ -138,7 +139,7 @@ "name": "Basejump: Chart the Stock Market", "dashedName": "basejump-chart-the-stock-market", "difficulty": 2.03, - "challengeSeed": ["128451852"], + "challengeSeed": ["133315787"], "description": [ "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://stockstream.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", @@ -171,7 +172,7 @@ "name": "Basejump: Manage a Book Trading Club", "dashedName": "basejump-manage-a-book-trading-club", "difficulty": 2.04, - "challengeSeed": ["128451852"], + "challengeSeed": ["133316032"], "description": [ "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://bookjump.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", @@ -204,7 +205,7 @@ "name": "Basejump: Build a Pinterest Clone", "dashedName": "basejump-build-a-pinterest-clone", "difficulty": 2.05, - "challengeSeed": ["128451852"], + "challengeSeed": ["133315784"], "description": [ "Objective: Build a full stack JavaScript app that successfully reverse-engineers this: http://stark-lowlands-3680.herokuapp.com/ and deploy it to Heroku.", "Note that for each Basejump, you should create a new GitHub repository and a new Heroku project. If you can't remember how to do this, revisit http://freecodecamp.com/challenges/get-set-for-basejumps.", diff --git a/challenges/basic-ziplines.json b/challenges/basic-ziplines.json index 6fd0eb5572..b007d25b8f 100644 --- a/challenges/basic-ziplines.json +++ b/challenges/basic-ziplines.json @@ -42,7 +42,7 @@ "name": "Zipline: Build a Personal Portfolio Webpage", "dashedName": "zipline-build-a-personal-portfolio-webpage", "difficulty": 1.01, - "challengeSeed": ["126415122"], + "challengeSeed": ["133315782"], "description": [ "Objective: Build a CodePen.io app that successfully reverse-engineers this: http://codepen.io/ThiagoFerreir4/full/eNMxEp.", "Rule #1: Don't look at the example project's code on CodePen. Figure it out for yourself.", diff --git a/challenges/git.json b/challenges/git.json index 201c34ede7..025ab49029 100644 --- a/challenges/git.json +++ b/challenges/git.json @@ -7,7 +7,7 @@ "name": "Waypoint: Save your Code Revisions Forever with Git", "dashedName": "waypoint-save-your-code-revisions-forever-with-git", "difficulty": 0.01, - "challengeSeed": ["126433450"], + "challengeSeed": ["133316034"], "description": [ "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", "If you don't already have Cloud 9 account, create one now at http://c9.io.", diff --git a/challenges/mongodb.json b/challenges/mongodb.json index cca5ee792c..590fe3d6f2 100644 --- a/challenges/mongodb.json +++ b/challenges/mongodb.json @@ -7,7 +7,7 @@ "name": "Waypoint: Store Data in MongoDB", "dashedName": "waypoint-store-data-in-mongodb", "difficulty": 0.01, - "challengeSeed": ["126433450"], + "challengeSeed": ["133316035"], "description": [ "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", "If you don't already have Cloud 9 account, create one now at http://c9.io.", diff --git a/challenges/object-oriented-programming.json b/challenges/object-oriented-programming.json index 3b4c8f4d1f..11e3ad65e0 100644 --- a/challenges/object-oriented-programming.json +++ b/challenges/object-oriented-programming.json @@ -7,7 +7,7 @@ "name": "Waypoint: Learn Scope Chains and Closures", "dashedName": "waypoint-learn-scope-chains-and-closures", "difficulty": 0.01, - "challengeSeed": ["126433450"], + "challengeSeed": ["133316031"], "description": [ "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", "If you don't already have Cloud 9 account, create one now at http://c9.io.", @@ -47,7 +47,7 @@ "name": "Waypoint: Use Prototypes for Inheriting Properties", "dashedName": "waypoint-use-prototypes-for-inheriting-properties", "difficulty": 0.02, - "challengeSeed": ["126433450"], + "challengeSeed": ["133316036"], "description": [ "We'll build this Waypoint on Cloud 9, a powerful online code editor with a full Ubuntu Linux workspace, all running in the cloud.", "If you don't already have Cloud 9 account, create one now at http://c9.io.", From fa566e47624f195dc61b44d5311c30971cc0f163 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Mon, 13 Jul 2015 18:30:51 -0700 Subject: [PATCH 22/29] add title field to challenges --- index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 7ca17f5174..74860674cc 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,8 @@ var fs = require('fs'), nonprofits = require('./nonprofits.json'), jobs = require('./jobs.json'); +var challangesRegex = /^(bonfire:|waypoint:|zipline:|basejump:|hikes:)/i; + function getFilesFor(dir) { return fs.readdirSync(path.join(__dirname, '/' + dir)); } @@ -38,8 +40,15 @@ Challenge.destroyAll(function(err, info) { console.log('Deleted ', info); } challenges.forEach(function(file) { + var challenges = require('./challenges/' + file).challenges + .map(function(challenge) { + // NOTE(berks): add title for displaying in views + challenge.title = challenge.name.replace(challangesRegex, '').trim(); + return challenge; + }); + Challenge.create( - require('./challenges/' + file).challenges, + challenges, function(err) { if (err) { console.log(err); From 8d485a11716fa405a5ca29f133aafdb8fda42734 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Mon, 13 Jul 2015 18:35:15 -0700 Subject: [PATCH 23/29] fix type hike not hikes --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 74860674cc..84c47644ea 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,7 @@ var fs = require('fs'), nonprofits = require('./nonprofits.json'), jobs = require('./jobs.json'); -var challangesRegex = /^(bonfire:|waypoint:|zipline:|basejump:|hikes:)/i; +var challangesRegex = /^(bonfire:|waypoint:|zipline:|basejump:|hike:)/i; function getFilesFor(dir) { return fs.readdirSync(path.join(__dirname, '/' + dir)); From 3d7ff1dd639bcb766ea6c6ddf94c53e69438669e Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Thu, 16 Jul 2015 23:21:47 -0700 Subject: [PATCH 24/29] add transcript for missing hike --- challenges/hikes.json | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/challenges/hikes.json b/challenges/hikes.json index 3952a7443b..2e533923ce 100644 --- a/challenges/hikes.json +++ b/challenges/hikes.json @@ -576,10 +576,18 @@ ], "description": [ "Variables are used frequently in Javascript and many other coding languages.", - "Here we show a few simple examples of how." + "In this video, we're going to talk about variables in code.", + "Variables, just like in Algebra, are when you have a letter or a word and it represents something else.", + "Here we're doing var x = \"Briana\". When we reference \"x\" later on, it's going to know that's Briana.", + "When we console.log(x), it's going to output \"Briana\".", + "But be careful - if we put console.log(\"x\"), with the x in quotation marks, it will output the letter \"x\".", + "What I want you to take away from this video is that variables exist in code, and you can store everything from a simple string all the way up to a function, all within a simple name." ], "challengeType": 6, - "tests": [], + "tests": [ + ["Variables are useful in coding languages like JavaScript.", true], + ["Variables can't stand for anything that isn't a string, number, or boolean.", false, "Variables can stand for things ranging from simple to very complex"] + ], "nameCn": "", "descriptionCn": [], "nameFr": "", From 860c6d8101322d693b38193fcc369bb342735e6e Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Sun, 19 Jul 2015 10:36:26 -0700 Subject: [PATCH 25/29] add missing false in hikes challenge --- challenges/hikes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenges/hikes.json b/challenges/hikes.json index 2e533923ce..2b67379083 100644 --- a/challenges/hikes.json +++ b/challenges/hikes.json @@ -552,7 +552,7 @@ ], "challengeType": 6, "tests": [ - ["The console serves only small, unnecessary purposes.", "The console's main purpose is to debug, which is a vital step in creating code."], + ["The console serves only small, unnecessary purposes.", false, "The console's main purpose is to debug, which is a vital step in creating code."], ["You can console strings (sets of words), numbers, and booleans (true/false statements)", true] ], "nameCn": "", From 3df5319cc9c27793dfe8569b99030f5d76cb26dd Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Wed, 22 Jul 2015 00:02:08 -0700 Subject: [PATCH 26/29] update zipline copy with CodePen override warning --- challenges/basic-ziplines.json | 1 + 1 file changed, 1 insertion(+) diff --git a/challenges/basic-ziplines.json b/challenges/basic-ziplines.json index b007d25b8f..16053946ec 100644 --- a/challenges/basic-ziplines.json +++ b/challenges/basic-ziplines.json @@ -55,6 +55,7 @@ "Bonus User Story: As a user, I navigate to different sections of the webpage by clicking buttons in the navigation.", "Don't worry if you don't have anything to showcase on your portfolio yet - you will build several several apps on the next few CodePen challenges, and can come back and update your portfolio later.", "There are many great portfolio templates out there, but for this challenge, you'll need to build a portfolio page yourself. Using Bootstrap will make this much easier for you.", + "Note that CodePen.io overrides the Window.open() function, so if you want to open windows using jquery, you will need to target invisible anchor elements like this one: <a target='_blank'&rt;.", "Remember to use RSAP if you get stuck.", "When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. If you pair programmed, you should also include the Free Code Camp username of your pair.", "If you'd like immediate feedback on your project, click this button and paste in a link to your CodePen project. Otherwise, we'll review it before you start your nonprofit projects.

Click here then add your link to your tweet's text" From 3046c14196bcdbe4c926d3410c3f90cda4ec56f6 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Thu, 23 Jul 2015 16:14:45 -0700 Subject: [PATCH 27/29] fix 'id' not _id. fix spacing after semi colon --- challenges/basic-javascript.json | 192 +++++++++++++++---------------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/challenges/basic-javascript.json b/challenges/basic-javascript.json index ee5029e241..e5c072ee2a 100644 --- a/challenges/basic-javascript.json +++ b/challenges/basic-javascript.json @@ -3,11 +3,11 @@ "order": 0.005, "challenges": [ { - "_id":"bd7123c9c441eddfaeb4bdef", - "name":"Welcome To Comments", - "dashedName":"waypoint-welcome-to-comments", - "difficulty":"9.98", - "description":[ + "id": "bd7123c9c441eddfaeb4bdef", + "name": "Welcome To Comments", + "dashedName": "waypoint-welcome-to-comments", + "difficulty": "9.98", + "description": [ "", "A comment is a very useful line of code that is not actually ran by the machine executing it. With this property comments are the perfect way of creating notes to yourself or anyone else who reads your code describing what the code does", "It's an extremely important part in writing good, efficient and maintainable code and a requirement by most employers", @@ -18,18 +18,18 @@ "These comment out everything in between /* and */ ", "Try creating one of each now." ], - "tests":[ + "tests": [ "assert(editor.getValue().match(/(\\/\\*)...../g), 'Make sure you have at least one \/\\* \\*\/ style comment that has at least five letters in it');", "assert(editor.getValue().match(/(\\*\\/)/g), 'Make sure that you close the coment with a \\*\/');", "assert(editor.getValue().match(/(\\/\\/)...../g), 'Make sure that there is at least one \\/\\/ style comment with at least five letters in it');" ], - "challengeSeed":[ + "challengeSeed": [ ], "challengeType": 1 }, { - "_id": "bd7123c9c441eddfaeb5bdef", + "id": "bd7123c9c441eddfaeb5bdef", "name": "Unconditionally Loving Booleans", "dashedName": "waypoint-unconditionally-loving-booleans", "difficulty": "9.98001", @@ -55,7 +55,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c443eddfaeb5bdef", + "id": "bd7123c9c443eddfaeb5bdef", "name": "Start Using Variables", "dashedName": "waypoint-start-using-variables", "difficulty": "9.9801", @@ -83,7 +83,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c444eddfaeb5bdef", + "id": "bd7123c9c444eddfaeb5bdef", "name": "Define Your First and Last Name", "dashedName": "waypoint-define-your-first-and-last-name", "difficulty": "9.9802", @@ -111,7 +111,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c448eddfaeb5bdef", + "id": "bd7123c9c448eddfaeb5bdef", "name": "Check the Length Property of a String Variable", "dashedName": "waypoint-check-the-length-property-of-a-string-variable", "difficulty": "9.9809", @@ -142,7 +142,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c549eddfaeb5bdef", + "id": "bd7123c9c549eddfaeb5bdef", "name": "Use Bracket Notation to Find the First Character in a String", "dashedName": "waypoint-use-bracket-notation-to-find-the-first-character-in-a-string", "difficulty": "9.9810", @@ -174,7 +174,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c450eddfaeb5bdef", + "id": "bd7123c9c450eddfaeb5bdef", "name": "Use Bracket Notation to Find the Nth Character in a String", "dashedName": "waypoint-use-bracket-notation-to-find-the-nth-character-in-a-string", "difficulty": "9.9811", @@ -205,7 +205,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c451eddfaeb5bdef", + "id": "bd7123c9c451eddfaeb5bdef", "name": "Use Bracket Notation to Find the Last Character in a String", "dashedName": "waypoint-use-bracket-notation-to-find-the-last-character-in-a-string", "difficulty": "9.9812", @@ -235,7 +235,7 @@ "challengeType": 1 }, { - "_id": "bd7123c9c452eddfaeb5bdef", + "id": "bd7123c9c452eddfaeb5bdef", "name": "Use Bracket Notation to Find the Nth to Last Character in a String", "dashedName": "waypoint-use-bracket-notation-to-find-the-nth-to-last-character-in-a-string", "difficulty": "9.9813", @@ -265,7 +265,7 @@ "challengeType": 1 }, { - "_id": "bh1111c1c11feddfaeb3bdef", + "id": "bh1111c1c11feddfaeb3bdef", "name": "Magical Maths Addition", "dashedName": "waypoint-magical-maths-addition", "difficulty": "9.98141", @@ -289,7 +289,7 @@ "challengeType": 1 }, { - "_id": "bh1111c1c11feddfaeb4bdef", + "id": "bh1111c1c11feddfaeb4bdef", "name": "Magical Maths Subtraction", "dashedName": "waypoint-magical-maths-subtraction", "difficulty": "9.98142", @@ -313,7 +313,7 @@ "challengeType": 1 }, { - "_id": "bh1111c1c11feddfaeb5bdef", + "id": "bh1111c1c11feddfaeb5bdef", "name": "Magical Maths Multiplication", "dashedName": "waypoint-magical-maths-multiplication", "difficulty": "9.98143", @@ -337,7 +337,7 @@ "challengeType": 1 }, { - "_id": "bh1111c1c11feddfaeb6bdef", + "id": "bh1111c1c11feddfaeb6bdef", "name": "Magical Maths Division", "dashedName": "waypoint-magical-maths-division", "difficulty": "9.9814", @@ -361,7 +361,7 @@ "challengeType": 1 }, { - "_id": "bh1111c1c11feddfaeb4bdef", + "id": "bh1111c1c11feddfaeb4bdef", "name": "Creating Decimals", "dashedName": "waypoint-creating-decimals", "difficulty": "9.9815", @@ -386,7 +386,7 @@ "challengeType": 1 }, { - "_id": "bd7993c9c69feddfaeb7bdef", + "id": "bd7993c9c69feddfaeb7bdef", "name": "Working With Decimals", "dashedName": "waypoint-working-with-decimals", "difficulty": "9.98151", @@ -411,7 +411,7 @@ "challengeType": 1 }, { - "_id": "bd7993c9c69feddfaeb8bdef", + "id": "bd7993c9c69feddfaeb8bdef", "name": "An Array Of new Information", "dashedName": "waypoint-an-array-of-new-information", "difficulty": "9.9816", @@ -439,19 +439,19 @@ "challengeType": 1 }, { - "_id":"bh1111c1c11feddfaeb7bdef", - "name":"Nesting Arrays", - "dashedName":"waypoint-nesting-arrays", - "difficulty":"9.98161", - "description":[ + "id": "bh1111c1c11feddfaeb7bdef", + "name": "Nesting Arrays", + "dashedName": "waypoint-nesting-arrays", + "difficulty": "9.98161", + "description": [ "", "We are also able to create arrays within arrays. This technique is called nesting.", "Let's now go create a nested array called myArray" ], - "tests":[ + "tests": [ "assert((function(){if(typeof(myArray) !== 'undefined' && typeof(myArray) === 'object' && typeof(myArray[0]) !== 'undefined' && typeof(myArray) === 'object'){return(true);}else{return(false);}})(), 'myArray should contain at least one array');" ], - "challengeSeed":[ + "challengeSeed": [ "var myArray = [];", "", "", @@ -460,11 +460,11 @@ "challengeType": 1 }, { - "_id":"bg9997c9c79feddfaeb9bdef", - "name":"Accessing data with Indexes", - "dashedName":"waypoint-accessing-data-with-indexes", - "difficulty":"9.9817", - "description":[ + "id": "bg9997c9c79feddfaeb9bdef", + "name": "Accessing data with Indexes", + "dashedName": "waypoint-accessing-data-with-indexes", + "difficulty": "9.9817", + "description": [ "", "Once an array has been created we can access the data we have stored in them using indexes", "Indexes are written in the same way as bracket notation that we covered earlier", @@ -475,10 +475,10 @@ "
", "Create a var called data and set it to equal the first value of myArray" ], - "tests":[ + "tests": [ "assert((function(){if(typeof(myArray) != 'undefined' && typeof(data) != 'undefined' && myArray[0] == data){return(true);}else{return(false);}})(), 'the variable data should equal the first value of myArray');" ], - "challengeSeed":[ + "challengeSeed": [ "//var ourArray = [1,2,3]", "//var ourData = ourArray[0]//equals 1", "", @@ -491,7 +491,7 @@ "challengeType": 1 }, { - "_id": "bg9994c9c69feddfaeb9bdef", + "id": "bg9994c9c69feddfaeb9bdef", "name": "Manipulating Arrays With pop()", "dashedName": "waypoint-manipulating-arrays-with-pop", "difficulty": "9.9818", @@ -523,7 +523,7 @@ "challengeType": 1 }, { - "_id": "bg9995c9c69feddfaeb9bdef", + "id": "bg9995c9c69feddfaeb9bdef", "name": "Manipulating Arrays With push()", "dashedName": "waypoint-manipulating-arrays-with-push", "difficulty": "9.9818", @@ -546,7 +546,7 @@ "challengeType": 1 }, { - "_id": "bg9996c9c69feddfaeb9bdef", + "id": "bg9996c9c69feddfaeb9bdef", "name": "Manipulating Arrays With shift()", "dashedName": "waypoint-manipulating-arrays-with-shift", "difficulty": "9.9817", @@ -570,7 +570,7 @@ "challengeType": 1 }, { - "_id": "bg9997c9c69feddfaeb9bdef", + "id": "bg9997c9c69feddfaeb9bdef", "name": "Manipulating Arrays With unshift()", "dashedName": "waypoint-manipulating-arrays-with-unshift", "difficulty": "9.9818", @@ -593,11 +593,11 @@ "challengeType": 1 }, { - "_id":"bg9997c9c89feddfaeb9bdef", - "name":"Make it functional", - "dashedName":"waypoint-make-it-functional", - "difficulty":"9.9819", - "description":[ + "id": "bg9997c9c89feddfaeb9bdef", + "name": "Make it functional", + "dashedName": "waypoint-make-it-functional", + "difficulty": "9.9819", + "description": [ "", "In JavaScript we can divide up our code into separate and reusable parts called functions", "here's and example of a function", @@ -610,10 +610,10 @@ "functionName();", "Let's try creating and calling a function now." ], - "tests":[ + "tests": [ "assert(f==data);" ], - "challengeSeed":[ + "challengeSeed": [ "//var ourData = 'function called!';", "//function ourFunction(ourData) {/*ourData is being passed to this function as an argument*/", "//return(data);", @@ -634,19 +634,19 @@ "challengeType": 1 }, { - "_id":"bg9997c9c99feddfaeb9bdef", - "name":"Doing things inside functions", - "dashedName":"waypoint-doing-things-inside-functions", - "difficulty":"9.982", - "description":[ + "id": "bg9997c9c99feddfaeb9bdef", + "name": "Doing things inside functions", + "dashedName": "waypoint-doing-things-inside-functions", + "difficulty": "9.982", + "description": [ "", "A function that takes the value you give it and returns it isn't very useful! So now let's get our functions to do something!", "Starting from where we were last time let's make our function revers whatever we give it by chaining .split('') , .reverse() and .join('') " ], - "tests":[ + "tests": [ "assert(f==data.split('').reverse().join(''), 'myFunction should now return the reversed version of data (!dellaC noitcnuF)');" ], - "challengeSeed":[ + "challengeSeed": [ "//You can reverse strings like this", "//var notReversed = 'String';", "//var reversed = notReversed.split('').reverse().join('');", @@ -667,11 +667,11 @@ "challengeType": 1 }, { - "_id":"bg9997c9c99feddfaeb9bdef", - "name":"Keeping In The Scope Of Things", - "dashedName":"waypoint-keeping-in-the-scope-of-things", - "difficulty":"9.9821", - "description":[ + "id": "bg9997c9c99feddfaeb9bdef", + "name": "Keeping In The Scope Of Things", + "dashedName": "waypoint-keeping-in-the-scope-of-things", + "difficulty": "9.9821", + "description": [ "", "All variables are contained in something called a scope .", "A Scope defines where are variable can be accessed.", @@ -695,11 +695,11 @@ "", "Let's give this a go!" ], - "tests":[ + "tests": [ "assert(Global == access(Global), 'access should return your Global var');", "assert(Global != localChange(Global), 'localChange should return your Global var');" ], - "challengeSeed":[ + "challengeSeed": [ "//Create Your global variable with any value here", "var Global = _;", "", @@ -723,11 +723,11 @@ "challengeType": 1 }, { - "_id":"bg9998c9c99feddfaeb9bdef", - "name":"I Object!", - "dashedName":"waypoint-i-object", - "difficulty":"9.9822", - "description":[ + "id": "bg9998c9c99feddfaeb9bdef", + "name": "I Object!", + "dashedName": "waypoint-i-object", + "difficulty": "9.9822", + "description": [ "", "A very important data type in javascript is the Object ", " Objects a similar to arrays except that instead of using indexes to access and modify their data, Objects have what are called properties ", @@ -744,13 +744,13 @@ "Let's try to make a Object that represents a dog called myDog!" ], - "tests":[ + "tests": [ "assert((function(z){if(z.hasOwnProperty('name') && z.name != undefined && typeof(z.name) == 'string'){return(true);}else{return(false);}})(myDog), 'myDog should contain the property name and it should be a string');", "assert((function(z){if(z.hasOwnProperty('legs') && z.legs != undefined && typeof(z.legs) == 'number'){return(true);}else{return(false);}})(myDog), 'myDog should contain the property legs and it should be a number');", "assert((function(z){if(z.hasOwnProperty('tails') && z.tails != undefined && typeof(z.tails) == 'number'){return(true);}else{return(false);}})(myDog), 'myDog should contain the property tails and it should be a number');", "assert((function(z){if(z.hasOwnProperty('friends') && z.friends != undefined && Array.isArray(z.friends)){return(true);}else{return(false);}})(myDog), 'myDog should contain the property friends and it should be an array');" ], - "challengeSeed":[ + "challengeSeed": [ "//var ourDog = {", "// \"name\": \"Camper\"", "// \"legs\": 4", @@ -770,11 +770,11 @@ "challengeType": 1 }, { - "_id":"bg9999c9c99feddfaeb9bdef", - "name":"Manipulating Objects", - "dashedName":"waypoint-manipulating-objects", - "difficulty":"9.9823", - "description":[ + "id": "bg9999c9c99feddfaeb9bdef", + "name": "Manipulating Objects", + "dashedName": "waypoint-manipulating-objects", + "difficulty": "9.9823", + "description": [ "", "Now that we have an objects we need to know how to add and remove properties from it", "We add properties to objects like this", @@ -784,11 +784,11 @@ "Let's add the property bark", "" ], - "tests":[ + "tests": [ "assert(myDog.bark != undefined, 'The property tails should have been deleted');", "assert(myDog.tails == undefined, 'The property tails should have been deleted');" ], - "challengeSeed":[ + "challengeSeed": [ "//var ourDog = {", "//\"name\": \"Camper\"", "//\"legs\": 4", @@ -816,11 +816,11 @@ "challengeType": 1 }, { - "_id":"bh1111c1c11feddfaeb5bdef", - "name":"Looping with for", - "dashedName":"waypoint-looping-with-for", - "difficulty":"9.9824", - "description":[ + "id": "bh1111c1c11feddfaeb5bdef", + "name": "Looping with for", + "dashedName": "waypoint-looping-with-for", + "difficulty": "9.9824", + "description": [ "", "Loops are a critical part of any program! The next few challenges", "first we will be taking a look at the for loop", @@ -833,11 +833,11 @@ "ourArray now contains [0,1,2,3,4] ", "Let's try getting a for loop to work by pushing values to an array" ], - "tests":[ + "tests": [ "assert(editor.getValue().match(/for\\(/g), 'You should be using a for loop for this!');", "assert.deepEqual(myArray, [0,1,2,3,4], 'myArray should equal [0,1,2,3,4]');" ], - "challengeSeed":[ + "challengeSeed": [ "var myArray = [];", "//Push the numbers 0-4 to myArray", "", @@ -846,11 +846,11 @@ "challengeType": 1 }, { - "_id":"bh1111c1c11feddfaeb1bdef", - "name":"Looping with while", - "dashedName":"waypoint-looping-with-while", - "difficulty":"9.9825", - "description":[ + "id": "bh1111c1c11feddfaeb1bdef", + "name": "Looping with while", + "dashedName": "waypoint-looping-with-while", + "difficulty": "9.9825", + "description": [ "", "Loops are a critical part of any program! The next few challenges", "first we will be taking a look at the for loop", @@ -864,11 +864,11 @@ "", "Let's try getting a for loop to work by pushing values to an array" ], - "tests":[ + "tests": [ "assert(editor.getValue().match(/while\\(/g), 'You should be using a while loop for this!');", "assert.deepEqual(myArray, [0,1,2,3,4], 'myArray should equal [0,1,2,3,4]');" ], - "challengeSeed":[ + "challengeSeed": [ "var myArray = [];", "//Push the numbers 0-4 to myArray", "", @@ -877,11 +877,11 @@ "challengeType": 1 }, { - "_id":"bh1111c1c11feddfaeb2bdef", - "name":"Looping with do while", - "dashedName":"waypoint-looping-with-do-while", - "difficulty":"9.9826", - "description":[ + "id": "bh1111c1c11feddfaeb2bdef", + "name": "Looping with do while", + "dashedName": "waypoint-looping-with-do-while", + "difficulty": "9.9826", + "description": [ "", "Let's now take a look at the do - while loop", "", @@ -895,11 +895,11 @@ "A do - while has a very special difference when compared to the for and while loops. The do while loop is guaranteed to execute preform it's action once regardless of whether or not the condition inside the while is met!", "Let's try getting a do - while loop to work by pushing values to an array" ], - "tests":[ + "tests": [ "assert.deepEqual(myArray, [0,1,2,3,4], 'myArray should equal [0,1,2,3,4]');", "assert((function(){if(editor.getValue().match(/do/g) && editor.getValue(/while/g).match()){return(true);}else{return(false);}})(), 'You should be using a do while loop for this!');" ], - "challengeSeed":[ + "challengeSeed": [ "var myArray = [];", "//Push the numbers 0-4 to myArray", "", From 86532e0c0e270901efa77a245d475324c1641b47 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Thu, 23 Jul 2015 18:44:16 -0700 Subject: [PATCH 28/29] QA first dozen html challenges --- challenges/html5-and-css.json | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/challenges/html5-and-css.json b/challenges/html5-and-css.json index b58e74ff8d..d434232d16 100644 --- a/challenges/html5-and-css.json +++ b/challenges/html5-and-css.json @@ -8,11 +8,10 @@ "dashedName": "waypoint-say-hello-to-html-elements", "difficulty": 0.001, "description": [ - "Welcome to Free Code Camp's first coding challenge! Click on the button below for further instructions.", - "Awesome. Now you can read the rest of this challenge's instructions.", + "Welcome to Free Code Camp's first coding challenge!", "You can edit code in your text editor, which we've embedded into this web page.", "Do you see the code in your text editor that says <h1>Hello</h1>? That's an HTML element.", - "Most HTML elements have an opening tag and a closing tag. Opening tags look like this: <h1>. Closing tags look like this: </h1>. Note that the only difference between opening and closing tags is that closing tags have a slash after their opening angle bracket.", + "Most HTML elements have an opening tag and a closing tag. Opening tags look like this: <h1>. Closing tags look like this: </h1>. Note that the only difference between opening tags and closing tags is that closing tags have a slash after their opening angle bracket.", "Once you've completed each challenge, and all its tests are passing, the \"Go to my next challenge\" button will become enabled. Click it - or press control and enter at the same time - to advance to the next challenge.", "To enable the \"Go to my next challenge\" button on this exercise, change your h1 tag's text to say \"Hello World\" instead of \"Hello\"." ], @@ -240,11 +239,10 @@ "dashedName": "waypoint-fill-in-the-blank-with-placeholder-text", "difficulty": 0.007, "description": [ - "Replace the text inside your p element with the first few words of the provided \"Kitty Ipsum\" text.", "Web developers traditionally use \"Lorem Ipsum\" text as placeholder text. It's called \"Lorem Ipsum\" text because those are the first two words of a famous passage by Cicero of Ancient Rome.", "\"Lorem Ipsum\" text has been used as placeholder text by typesetters since the 16th century, and this tradition continues on the web.", "Well, 5 centuries is long enough. Since we're building a CatPhotoApp, let's use something called \"Kitty Ipsum\"!", - "Here are the first few words of \"Kitty Ipsum\" text, which you can copy and paste into the right position: Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff." + "Replace the text inside your p element with the first few words of this \"Kitty Ipsum\" text: Kitty ipsum dolor sit amet, shed everywhere shed everywhere stretching attack your ankles chase the red dot, hairball run catnip eat the grass sniff." ], "tests": [ "assert.isTrue((/Kitty(\\s)+ipsum(\\s)+dolor/gi).test($('p').text()), 'Your p element should contain the first few words of the provided \"Kitty Ipsum\" text.')" @@ -528,9 +526,9 @@ "dashedName": "waypoint-change-the-font-size-of-an-element", "difficulty": 0.013, "description": [ - "Create a second p element. Then, inside your <style> element, set the \"font-size\" of all p elements to 16 pixels.", + "Create a second p element with the following Kitty Ipsum text: Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.", + "Then, inside your <style> element, set the \"font-size\" of all p elements to 16 pixels.", "Font size is controlled by the \"font-size\" CSS attribute, like this: h1 { font-size: 30px; }.", - "First, create a second p element with the following Kitty Ipsum text: Purr jump eat the grass rip the couch scratched sunbathe, shed everywhere rip the couch sleep in the sink fluffy fur catnip scratched.", "See if you can figure out how to give both of your p elements the font-size of 16 pixels (16px). You can do this inside the same <style> tag that we created for your \"red-text\" class." ], "tests": [ @@ -676,15 +674,15 @@ "dashedName": "waypoint-specify-how-fonts-should-degrade", "difficulty": 0.016, "description": [ - "Make all your h2 elements use \"Lobster\" as their font family, but degrade to the \"Monospace\" font when the \"Lobster\" font isn't available.", - "You can leave \"Lobster\" your h2 element's font-family, and have it \"degrade\" to a different font when \"Lobster\" isn't available.", + "There are several default fonts that are available in all browsers. These include \"Monospace\", \"Serif\" and \"Sans-Serif\". Leave \"Lobster\" as the font-family for your h2 elements. Make them \"degrade\" to \"Monospace\" when \"Lobster\" isn't available.", "For example, if you wanted an element to use the \"Helvetica\" font, but also degrade to the \"Sans-Serif\" font when \"Helvetica\" wasn't available, you could use this CSS style: p { font-family: Helvetica, Sans-Serif; }.", - "There are several default fonts that are available in all browsers. These include \"Monospace\", \"Serif\" and \"Sans-Serif\". See if you can set your h2 elements to use \"Lobster\" and degrade to \"Monospace\".", - "Now try commenting out your call to Google Fonts, so that the \"Lobster\" font isn't available. Notice how it degrades to the \"Monospace\" font." + "Now comment out your call to Google Fonts, so that the \"Lobster\" font isn't available. Notice how it degrades to the \"Monospace\" font." ], "tests": [ "assert($('h2').css('font-family').match(/^\"?lobster/i), 'Your h2 element should use the font \"Lobster\".')", - "assert($('h2').css('font-family').match(/lobster\"?,monospace/i), 'Your h2 element should degrade to the font \"Monospace\" when \"Lobster\" is not available.')" + "assert($('h2').css('font-family').match(/lobster.*,.*monospace/i), 'Your h2 element should degrade to the font \"Monospace\" when \"Lobster\" is not available.')", + "assert(new RegExp('', 'gi').test(editor), 'Be sure to close your comment by deleting all trailing comment tags, i.e. -->.')" ], "challengeSeed": [ "", From 1ef15eb839d36b3b105561c4e9ba257474238704 Mon Sep 17 00:00:00 2001 From: Quincy Larson Date: Thu, 23 Jul 2015 22:24:51 -0700 Subject: [PATCH 29/29] additional refactor of HTML challenges --- challenges/html5-and-css.json | 83 +++++++++++++++++------------------ 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/challenges/html5-and-css.json b/challenges/html5-and-css.json index d434232d16..dbb0f037fe 100644 --- a/challenges/html5-and-css.json +++ b/challenges/html5-and-css.json @@ -732,7 +732,6 @@ "dashedName": "waypoint-add-images-to-your-website", "difficulty": 0.017, "description": [ - "Use an img element to add the image http://bit.ly/fcc-kittens to your website.", "You can add images to your website by using the img element, and point to an specific image's URL using the src attribute.", "An example of this would be <img src=\"www.your-image-source.com/your-image.jpg\"/>. Note that in most cases, img elements are self-closing.", "Try it with this image: http://bit.ly/fcc-kittens." @@ -788,9 +787,9 @@ "dashedName": "waypoint-size-your-images", "difficulty": 0.018, "description": [ - "Create a class called smaller-image and use it to resize the image so that it's only 100 pixels wide.", "CSS has an attribute called width that controls an element's width. Just like with fonts, we'll use pixels(px) to specify the image's width.", - "For example, if we wanted to create a CSS class called \"larger-image\" that gave HTML elements a width of 500 pixels, we'd use: <style> .larger-image { width: 500px; } </style>." + "For example, if we wanted to create a CSS class called \"larger-image\" that gave HTML elements a width of 500 pixels, we'd use: <style> .larger-image { width: 500px; } </style>.", + "Create a class called smaller-image and use it to resize the image so that it's only 100 pixels wide." ], "tests": [ "assert($('img').hasClass('smaller-image'), 'Your img element should have the class \"smaller-image\".')", @@ -844,9 +843,9 @@ "dashedName": "waypoint-add-borders-around-your-elements", "difficulty": 0.019, "description": [ - "Create a class called \"thick-green-border\" that puts a 10-pixel-wide green border with a style of \"solid\" around an HTML element, and apply that class to your cat photo.", "CSS borders have attributes like style, color and width.", - "For example, if we wanted to create a red, 5 pixel border around an HTML element, we could use this class: <style> .thin-red-border { border-color: red; border-width: 5px; border-style: solid; } </style>." + "For example, if we wanted to create a red, 5 pixel border around an HTML element, we could use this class: <style> .thin-red-border { border-color: red; border-width: 5px; border-style: solid; } </style>.", + "Create a class called \"thick-green-border\" that puts a 10-pixel-wide green border with a style of \"solid\" around an HTML element, and apply that class to your cat photo." ], "tests": [ "assert($('img').hasClass('smaller-image'), 'Your img element should have the class \"smaller-image\".')", @@ -907,9 +906,9 @@ "dashedName": "waypoint-add-rounded-corners-with-a-border-radius", "difficulty": 0.020, "description": [ - "Give your cat photo a border-radius of 10 pixels.", "Your cat photo currently has sharp corners. We can round out those corners with a CSS attribute called border-radius.", - "You can specify a border-radius with pixels. This will affect how rounded the corners are. Add this attribute to your thick-green-border class and set it to 10 pixels." + "You can specify a border-radius with pixels. This will affect how rounded the corners are. Add this attribute to your thick-green-border class and set it to 10 pixels.", + "Give your cat photo a border-radius of 10 pixels." ], "tests": [ "assert($('img').hasClass('thick-green-border'), 'Your image element should have the class \"thick-green-border\".')", @@ -973,8 +972,8 @@ "dashedName": "waypoint-make-circular-images-with-a-border-radius", "difficulty": 0.021, "description": [ - "Give your cat photo a border-radius of 50%.", - "In addition to pixels, you can also specify a border-radius using a percentage." + "In addition to pixels, you can also specify a border-radius using a percentage.", + "Give your cat photo a border-radius of 50%." ], "tests": [ "assert(parseInt($('img').css('border-top-left-radius')) > 48, 'Your image should have a border radius of 50 percent, making it perfectly circular.')", @@ -1038,10 +1037,11 @@ "dashedName": "waypoint-link-to-external-pages-with-anchor-elements", "difficulty": 0.022, "description": [ - "Create an a element, or \"anchor element\", that links to http://catphotoapp.com and has \"cat photos\" as its link text, or \"anchor text\".", - "Here's a diagram of an a element. In this case, it's used in the middle of a paragraph element, which means your link will appear in the middle of your sentence.", + "a elements or \"anchor\" elements, are used to link to content outside of the current page.", + "Here's a diagram of an a element. In this case, the a element is used in the middle of a paragraph element, which means the link will appear in the middle of a sentence.", "a diagram of how anchor tags are composed with the same text as on the following line", - "Here's an example: <p>Here's a <a href='http://freecodecamp.com'> link to Free Code Camp</a> for you to follow.</p>." + "Here's an example: <p>Here's a <a href='http://freecodecamp.com'> link to Free Code Camp</a> for you to follow.</p>.", + "Create an a element that links to http://catphotoapp.com and has \"cat photos\" as its \"anchor text\"." ], "tests": [ "assert((/cat photos/gi).test($('a').text()), 'Your a element should have the anchor text of \"cat photos\"')", @@ -1108,10 +1108,10 @@ "dashedName": "waypoint-wrap-an-anchor-element-within-a-paragraph", "difficulty": 0.023, "description": [ - "Now wrap your a element within a new p element so that the surrounding paragraph says \"click here for cat photos\", but where only \"cat photos\" is a link - the rest is plain text.", "Again, here's a diagram of an a element for your reference:", "a diagram of how anchor tags are composed with the same text as on the following line", - "Here's an example: <p>Here's a <a href='http://freecodecamp.com'> link to Free Code Camp</a> for you to follow.</p>." + "Here's an example: <p>Here's a <a href='http://freecodecamp.com'> link to Free Code Camp</a> for you to follow.</p>.", + "Now wrap your a element within a new p element so that the surrounding paragraph says \"click here for cat photos\", but where only \"cat photos\" is a link - the rest is plain text." ], "tests": [ "assert($('a').attr('href').match(/catphotoapp.com/gi).length > 0, 'You need an a element that links to \"catphotoapp.com\".')", @@ -1183,10 +1183,9 @@ "dashedName": "waypoint-make-dead-links-using-the-hash-symbol", "difficulty": 0.024, "description": [ - "Use the hash symbol (#) to turn your a element's link into a dead link.", "Sometimes you want to add a elements to your website before you know where they will link.", "This is also handy when you're changing the behavior of a link using jQuery, which we'll learn about later.", - "Replace your a element's href attribute with a hash symbol to turn it into a dead link." + "Replace your a element's href attribute with a hash symbol (#) to turn it into a dead link." ], "tests": [ "assert($('a').attr('href') === '#', 'Your anchor element should be a dead link with a href attribute set to \"#\".')" @@ -1253,7 +1252,6 @@ "dashedName": "waypoint-turn-an-image-into-a-link", "difficulty": 0.025, "description": [ - "Wrap your img element inside an a element with a dead link.", "You can make elements into links by wrapping them within an a element.", "Wrap your image within an a element. Here's an example: <a href='#'><img src='http://bit.ly/fcc-kittens2'/></a>.", "Remember to use the hash symbol (#) as your a element's href property in order to turn it into a dead link.", @@ -1327,11 +1325,11 @@ "dashedName": "waypoint-add-alt-text-to-an-image-for-accessibility", "difficulty": 0.026, "description": [ - "Add an alt attribute with the text \"A cute orange cat lying on its back\" to our cat photo.", "alt attributes, also known as \"alt text\", are what browsers will display if they fail to load the image. alt attributes are also important for blind or visually impaired users to understand what an image portrays. Search engines also look at alt attributes.", "In short, every image should have an alt attribute!", "alt attributes are a useful way to tell people (and web crawlers like Google) what is pictured in a photo. It's extremely important for helping blind or visually impaired people understand the content of your website.", - "You can add an alt attribute right in the img element like this: <img src=\"www.your-image-source.com/your-image.jpg\" alt=\"your alt text\"/>." + "You can add an alt attribute right in the img element like this: <img src=\"www.your-image-source.com/your-image.jpg\" alt=\"your alt text\"/>.", + "Add an alt attribute with the text \"A cute orange cat lying on its back\" to our cat photo." ], "tests": [ "assert($('img').filter(function(){ return /cat/gi.test(this.alt) }).length > 0, 'Your image element should have an alt attribute set to \"A cute orange cat lying on its back\".')" @@ -1399,10 +1397,10 @@ "dashedName": "waypoint-create-a-bulleted-unordered-list", "difficulty": 0.027, "description": [ - "Replace your p elements with an unordered list of three things that cats love.", "HTML has a special element for creating unordered lists, or bullet point-style lists.", "Unordered lists start with a <ul> element. Then they contain some number of <li> elements.", - "For example: <ul><li>milk</li><li>cheese</li></ul> would create a bulleted list of \"milk\" and \"cheese\"." + "For example: <ul><li>milk</li><li>cheese</li></ul> would create a bulleted list of \"milk\" and \"cheese\".", + "Replace your p elements with an unordered list of three things that cats love." ], "tests": [ "assert($('ul').length > 0, 'Create a ul element.')", @@ -1472,10 +1470,10 @@ "dashedName": "waypoint-create-an-ordered-list", "difficulty": 0.028, "description": [ - "Create an ordered list of the top 3 things cats hate the most.", "HTML has a special element for creating ordered lists, or numbered-style lists.", "Ordered lists start with a <ol> element. Then they contain some number of <li> elements.", - "For example: <ol><li>hydrogen</li><li>helium</li></ol> would create a numbered list of \"hydrogen\" and \"helium\"." + "For example: <ol><li>hydrogen</li><li>helium</li></ol> would create a numbered list of \"hydrogen\" and \"helium\".", + "Create an ordered list of the top 3 things cats hate the most." ], "tests": [ "assert($('ul').length > 0, 'You should have an ul element on your page.')", @@ -1552,9 +1550,10 @@ "dashedName": "waypoint-create-a-text-field", "difficulty": 0.029, "description": [ - "Now we'll create a web form. Create a text input under your lists.", + "Now let's create a web form.", "Text inputs are a convenient way to get input from your user.", - "You can create one like this: <input type='text'>. Note that input elements are self-closing." + "You can create one like this: <input type=\"text\">. Note that input elements are self-closing.", + "Create an input element of type \"text\" below your lists." ], "tests": [ "assert($('input').length > 0, 'Your app should have a text field input element.')" @@ -1630,9 +1629,9 @@ "dashedName": "waypoint-add-placeholder-text-to-a-text-field", "difficulty": 0.030, "description": [ - "Set the placeholder value of your text input to \"cat photo URL\".", "Your placeholder text is what appears in your text input before your user has inputed anything.", - "You can create placeholder text like so: <input type='text' placeholder='this is placeholder text'>." + "You can create placeholder text like so: <input type='text' placeholder='this is placeholder text'>.", + "Set the placeholder value of your text input to \"cat photo URL\"." ], "tests": [ "assert($('input[placeholder]').length > 0, 'Add a placeholder attribute text input element.')", @@ -1710,9 +1709,9 @@ "dashedName": "waypoint-create-a-form-element", "difficulty": 0.031, "description": [ - "Wrap your text field in a form element. Add the action=\"/submit-cat-photo\" attribute to this form element.", "You can build web forms that actually submit data to a server using nothing more than pure HTML. You can do this by specifying an action on your form element.", - "For example: <form action=\"/url-where-you-want-to-submit-form-data\"></form>." + "For example: <form action=\"/url-where-you-want-to-submit-form-data\"></form>.", + "Wrap your text field in a form element. Add the action=\"/submit-cat-photo\" attribute to this form element." ], "tests": [ "assert($('form') && $('form').children('input') && $('form').children('input').length > 0, 'Wrap your text input element within a form element.')", @@ -1792,9 +1791,9 @@ "dashedName": "waypoint-add-a-submit-button-to-a-form", "difficulty": 0.032, "description": [ - "Add a submit button to your form element with type \"submit\" and \"Submit\" as its text.", "Let's add a submit button to your form. Clicking this button will send the data from your form to the URL you specified with your form's action attribute.", - "Here's an example submit button: <button type='submit'>this button submits the form</button>." + "Here's an example submit button: <button type='submit'>this button submits the form</button>.", + "Add a submit button to your form element with type \"submit\" and \"Submit\" as its text." ], "tests": [ "assert($('form').children('button').length > 0, 'Your form should have a button inside it.')", @@ -1876,9 +1875,9 @@ "dashedName": "waypoint-use-html5-to-require-a-field", "difficulty": 0.033, "description": [ - "Make your text input a \"required\" field, so that your user can't submit the form without completing this field.", "You can require specific form fields so that your user will not be able to submit your form until he or she has filled them out.", - "For example, if you wanted to make a text input field required, you can just add the word \"required\" within your input element, you would use: <input type='text' required>." + "For example, if you wanted to make a text input field required, you can just add the word \"required\" within your input element, you would use: <input type='text' required>.", + "Make your text input a \"required\" field, so that your user can't submit the form without completing this field." ], "tests": [ "assert($('input').prop('required'), 'Your text input element should have the \"required\" attribute.')" @@ -1958,12 +1957,12 @@ "dashedName": "waypoint-create-a-set-of-radio-buttons", "difficulty": 0.034, "description": [ - "Add to your form a pair of radio buttons. Each radio button should be wrapped within its own label element. They should share a common name attribute. One should have the option of \"indoor\" and the other should have the option of \"outdoor\".", "You can use radio buttons for questions where you want the user to only give you one answer.", "Radio buttons are a type of input.", "Each of your radio buttons should be wrapped within its own label elements.", "All related radio buttons should have the same name attribute.", - "Here's an example of a radio button: <label><input type='radio' name='indoor-outdoor'> Indoor</label>." + "Here's an example of a radio button: <label><input type='radio' name='indoor-outdoor'> Indoor</label>.", + "Add to your form a pair of radio buttons. Each radio button should be wrapped within its own label element. They should share a common name attribute. One should have the option of \"indoor\" and the other should have the option of \"outdoor\"." ], "tests": [ "assert($('input[type=\"radio\"]').length > 1, 'Your page should have two radio button elements.')", @@ -2051,9 +2050,9 @@ "dashedName": "waypoint-create-a-set-of-checkboxes", "difficulty": 0.035, "description": [ - "Add to your form a set of three checkbox elements. Each checkbox should be wrapped within its own label element. All three should share the name attribute of \"personality\".", "Forms commonly use checkbox inputs for questions that may have more than one answer.", - "For example: <label><input type='checkbox' name='personality'> Loving</label>." + "For example: <label><input type='checkbox' name='personality'> Loving</label>.", + "Add to your form a set of three checkbox elements. Each checkbox should be wrapped within its own label element. All three should share the name attribute of \"personality\"." ], "tests": [ "assert($('input[type=\"checkbox\"]').length > 2, 'Your page should have three checkbox elements.')", @@ -2138,9 +2137,9 @@ "dashedName": "waypoint-check-radio-buttons-and-checkboxes-by-default", "difficulty": 0.037, "description": [ - "Set the first of your radio buttons and the first of your checkboxes to both be checked by default.", - "You set a checkbox or radio button to be checked by default using the checked attribute.", - "To do this, just add the word \"checked\" to the inside of an input element. For example, <input type='radio' name='test-name' checked>." + "You can set a checkbox or radio button to be checked by default using the checked attribute.", + "To do this, just add the word \"checked\" to the inside of an input element. For example, <input type='radio' name='test-name' checked>.", + "Set the first of your radio buttons and the first of your checkboxes to both be checked by default." ], "tests": [ "assert($('input[type=\"radio\"]').prop('checked'), 'Your first radio button on your form should be checked by default.');", @@ -2226,11 +2225,11 @@ "dashedName": "waypoint-wrap-many-elements-within-a-single-div-element", "difficulty": 0.038, "description": [ - "Wrap your \"Things cats love\" and \"Things cats hate\" lists all within a single div element.", "The div element, or \"Division\" element, is a general purpose container for other elements.", "The div element is probably the most commonly used HTML element of all. It's useful for passing the CSS of its own class declarations down to all the elements that it contains.", "Just like any other non-self-closing element, you can open a div element with <div> and close it on another line with </div>.", - "Try putting your opening div tag above your \"Things cats love\" p element and your closing div tag after your closing ol tag so that both of your lists are within one div." + "Try putting your opening div tag above your \"Things cats love\" p element and your closing div tag after your closing ol tag so that both of your lists are within one div.", + "Wrap your \"Things cats love\" and \"Things cats hate\" lists all within a single div element." ], "tests": [ "assert($('div').children('ol').length > 0, 'Wrap your ol element inside your div element.')",