diff --git a/api-server/common/models/user.json b/api-server/common/models/user.json index 226178cba8..ac64bd32c1 100644 --- a/api-server/common/models/user.json +++ b/api-server/common/models/user.json @@ -167,6 +167,16 @@ "description": "Camper is information security and quality assurance certified", "default": false }, + "isQaCert": { + "type": "boolean", + "description": "Camper is quality assurance certified", + "default": false + }, + "isInfosecCert": { + "type": "boolean", + "description": "Camper is information security certified", + "default": false + }, "is2018FullStackCert": { "type": "boolean", "description": "Camper is full stack certified (2018)", diff --git a/api-server/server/boot/certificate.js b/api-server/server/boot/certificate.js index 75ceae9ce2..5c722cf0b3 100644 --- a/api-server/server/boot/certificate.js +++ b/api-server/server/boot/certificate.js @@ -19,6 +19,8 @@ import { dataVis2018Id, apisMicroservicesId, infosecQaId, + infosecId, + qaId, fullStackId, sciCompPyId, dataAnalysisPyId, @@ -107,6 +109,8 @@ function createCertTypeIds(app) { Challenge ), [certTypes.infosecQa]: getIdsForCert$(infosecQaId, Challenge), + [certTypes.qa]: getIdsForCert$(qaId, Challenge), + [certTypes.infosec]: getIdsForCert$(infosecId, Challenge), [certTypes.fullStack]: getIdsForCert$(fullStackId, Challenge), [certTypes.sciCompPy]: getIdsForCert$(sciCompPyId, Challenge), [certTypes.dataAnalysisPy]: getIdsForCert$(dataAnalysisPyId, Challenge), @@ -133,6 +137,8 @@ const certIds = { [certTypes.dataVis2018]: dataVis2018Id, [certTypes.apisMicroservices]: apisMicroservicesId, [certTypes.infosecQa]: infosecQaId, + [certTypes.qa]: qaId, + [certTypes.infosec]: infosecId, [certTypes.fullStack]: fullStackId, [certTypes.sciCompPy]: sciCompPyId, [certTypes.dataAnalysisPy]: dataAnalysisPyId, @@ -150,6 +156,8 @@ const certText = { [certTypes.dataVis2018]: 'Data Visualization', [certTypes.apisMicroservices]: 'APIs and Microservices', [certTypes.infosecQa]: 'Information Security and Quality Assurance', + [certTypes.qa]: 'Quality Assurance', + [certTypes.infosec]: 'Information Security', [certTypes.sciCompPy]: 'Scientific Computing with Python', [certTypes.dataAnalysisPy]: 'Data Analysis with Python', [certTypes.machineLearningPy]: 'Machine Learning with Python' @@ -166,6 +174,8 @@ const completionHours = { [certTypes.dataVis2018]: 300, [certTypes.apisMicroservices]: 300, [certTypes.infosecQa]: 300, + [certTypes.qa]: 300, + [certTypes.infosec]: 300, [certTypes.sciCompPy]: 400, [certTypes.dataAnalysisPy]: 400, [certTypes.machineLearningPy]: 400 @@ -193,6 +203,8 @@ function sendCertifiedEmail( isDataVisCert, isApisMicroservicesCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isSciCompPyCert, isDataAnalysisPyCert, isMachineLearningPyCert @@ -207,6 +219,8 @@ function sendCertifiedEmail( !isDataVisCert || !isApisMicroservicesCert || !isInfosecQaCert || + !isQaCert || + !isInfosecCert || !isSciCompPyCert || !isDataAnalysisPyCert || !isMachineLearningPyCert @@ -237,6 +251,8 @@ function getUserIsCertMap(user) { is2018DataVisCert = false, isApisMicroservicesCert = false, isInfosecQaCert = false, + isQaCert = false, + isInfosecCert = false, isFrontEndCert = false, isBackEndCert = false, isDataVisCert = false, @@ -253,6 +269,8 @@ function getUserIsCertMap(user) { is2018DataVisCert, isApisMicroservicesCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndCert, isBackEndCert, isDataVisCert, @@ -380,6 +398,8 @@ function createShowCert(app) { is2018DataVisCert: true, isApisMicroservicesCert: true, isInfosecQaCert: true, + isQaCert: true, + isInfosecCert: true, isSciCompPyCert: true, isDataAnalysisPyCert: true, isMachineLearningPyCert: true, diff --git a/api-server/server/boot/user.js b/api-server/server/boot/user.js index 64a25f5c0c..3e6e87f73a 100644 --- a/api-server/server/boot/user.js +++ b/api-server/server/boot/user.js @@ -162,6 +162,8 @@ function postResetProgress(req, res, next) { isJsAlgoDataStructCert: false, isApisMicroservicesCert: false, isInfosecQaCert: false, + isQaCert: false, + isInfosecCert: false, is2018FullStackCert: false, isFrontEndCert: false, isBackEndCert: false, diff --git a/api-server/server/utils/certTypes.json b/api-server/server/utils/certTypes.json index 09c7b8dedd..1c1ef50858 100644 --- a/api-server/server/utils/certTypes.json +++ b/api-server/server/utils/certTypes.json @@ -8,6 +8,8 @@ "jsAlgoDataStruct": "isJsAlgoDataStructCert", "apisMicroservices": "isApisMicroservicesCert", "infosecQa": "isInfosecQaCert", + "qa": "isQaCert", + "infosec": "isInfosecCert", "fullStack": "isFullStackCert", "sciCompPy": "isSciCompPyCert", "dataAnalysisPy": "isDataAnalysisPyCert", diff --git a/api-server/server/utils/commit-goals.json b/api-server/server/utils/commit-goals.json index 18b999ac25..c4630405a7 100644 --- a/api-server/server/utils/commit-goals.json +++ b/api-server/server/utils/commit-goals.json @@ -8,6 +8,8 @@ "dataVisCert": "Data Visualisation Certification", "apisMicroservicesCert": "APIs and Microservices Certification", "infosecQaCert": "Information Security and Quality Assurance Certification", + "qaCert": "Quality Assurance Certification", + "infosecCert": "Information Security Certification", "sciCompPyCert": "Scientific Computing with Python Certification", "dataAnalysisPyCert": "Data Analysis with Python Certification", "machineLearningPyCert": "Machine Learning with Python Certification" diff --git a/api-server/server/utils/commit.js b/api-server/server/utils/commit.js index 2052e0104e..8687a194ef 100644 --- a/api-server/server/utils/commit.js +++ b/api-server/server/utils/commit.js @@ -18,6 +18,8 @@ export function completeCommitment$(user) { isDataVisCert, isApisMicroservicesCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isSciCompPyCert, isDataAnalysisPyCert, isMachineLearningPyCert @@ -40,6 +42,8 @@ export function completeCommitment$(user) { (isDataVisCert && goal === commitGoals.dataVisCert) || (isApisMicroservicesCert && goal === commitGoals.apisMicroservicesCert) || (isInfosecQaCert && goal === commitGoals.infosecQaCert) || + (isQaCert && goal === commitGoals.QaCert) || + (isInfosecCert && goal === commitGoals.infosecCert) || (isSciCompPyCert && goal === commitGoals.sciCompPyCert) || (isDataAnalysisPyCert && goal === commitGoals.dataAnalysisPyCert) || (isMachineLearningPyCert && goal === commitGoals.machineLearningPyCert) diff --git a/api-server/server/utils/constantStrings.json b/api-server/server/utils/constantStrings.json index c3c97adfd4..b69f3e5a64 100644 --- a/api-server/server/utils/constantStrings.json +++ b/api-server/server/utils/constantStrings.json @@ -11,6 +11,8 @@ "jsAlgoDataStructId": "561abd10cb81ac38a17513bc", "apisMicroservicesId": "561add10cb82ac38a17523bc", "infosecQaId": "561add10cb82ac38a17213bc", + "qaId": "5e611829481575a52dc59c0e", + "infosecId": "5e6021435ac9d0ecd8b94b00", "fullStackId": "561add10cb82ac38a17213bd", "sciCompPyId": "5e44431b903586ffb414c951", "dataAnalysisPyId": "5e46fc95ac417301a38fb934", diff --git a/api-server/server/utils/getDynamicPropsForUser.js b/api-server/server/utils/getDynamicPropsForUser.js index 446ae85083..4a2f844de6 100644 --- a/api-server/server/utils/getDynamicPropsForUser.js +++ b/api-server/server/utils/getDynamicPropsForUser.js @@ -4,6 +4,8 @@ function getCompletedCertCount(user) { 'is2018DataVisCert', 'isFrontEndLibsCert', 'isInfosecQaCert', + 'isQaCert', + 'isInfosecCert', 'isJsAlgoDataStructCert', 'isRespWebDesignCert', 'isSciCompPyCert', diff --git a/api-server/server/utils/publicUserProps.js b/api-server/server/utils/publicUserProps.js index 4a3e64ebb2..3df57d0638 100644 --- a/api-server/server/utils/publicUserProps.js +++ b/api-server/server/utils/publicUserProps.js @@ -23,6 +23,8 @@ export const publicUserProps = [ 'isFrontEndLibsCert', 'isHonest', 'isInfosecQaCert', + 'isQaCert', + 'isInfosecCert', 'isJsAlgoDataStructCert', 'isRespWebDesignCert', 'isSciCompPyCert', diff --git a/api-server/server/utils/superBlockCertTypeMap.js b/api-server/server/utils/superBlockCertTypeMap.js index 50204f1e77..43825f51c0 100644 --- a/api-server/server/utils/superBlockCertTypeMap.js +++ b/api-server/server/utils/superBlockCertTypeMap.js @@ -13,6 +13,8 @@ const superBlockCertTypeMap = { 'data-visualization': certTypes.dataVis2018, 'apis-and-microservices': certTypes.apisMicroservices, 'information-security-and-quality-assurance': certTypes.infosecQa, + 'quality-assurance': certTypes.qa, + 'information-security': certTypes.infosec, 'full-stack': certTypes.fullStack, 'scientific-computing-with-python': certTypes.sciCompPy, 'data-analysis-with-python': certTypes.dataAnalysisPy, diff --git a/api-server/server/utils/user-stats.js b/api-server/server/utils/user-stats.js index c2bc198f21..08027cf8b3 100644 --- a/api-server/server/utils/user-stats.js +++ b/api-server/server/utils/user-stats.js @@ -143,6 +143,8 @@ function getCompletedCertCount(user) { 'is2018DataVisCert', 'isFrontEndLibsCert', 'isInfosecQaCert', + 'isQaCert', + 'isInfosecCert', 'isJsAlgoDataStructCert', 'isRespWebDesignCert', 'isSciCompPyCert', diff --git a/client/src/client-only-routes/ShowSettings.js b/client/src/client-only-routes/ShowSettings.js index 9583355bfa..02b3347f66 100644 --- a/client/src/client-only-routes/ShowSettings.js +++ b/client/src/client-only-routes/ShowSettings.js @@ -60,6 +60,8 @@ const propTypes = { isFullStackCert: PropTypes.bool, isHonest: PropTypes.bool, isInfosecQaCert: PropTypes.bool, + isQaCert: PropTypes.bool, + isInfosecCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool, isSciCompPyCert: PropTypes.bool, @@ -132,6 +134,8 @@ export function ShowSettings(props) { isDataVisCert, isFrontEndCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndLibsCert, isFullStackCert, isRespWebDesignCert, @@ -245,9 +249,11 @@ export function ShowSettings(props) { isFrontEndLibsCert={isFrontEndLibsCert} isFullStackCert={isFullStackCert} isHonest={isHonest} + isInfosecCert={isInfosecCert} isInfosecQaCert={isInfosecQaCert} isJsAlgoDataStructCert={isJsAlgoDataStructCert} isMachineLearningPyCert={isMachineLearningPyCert} + isQaCert={isQaCert} isRespWebDesignCert={isRespWebDesignCert} isSciCompPyCert={isSciCompPyCert} username={username} diff --git a/client/src/components/landing/index.js b/client/src/components/landing/index.js index 06fd1eb3f9..04d7a15ca0 100644 --- a/client/src/components/landing/index.js +++ b/client/src/components/landing/index.js @@ -40,7 +40,7 @@ const AsFeaturedSection = () => ( export const Landing = ({ edges }) => { const superBlocks = uniq(edges.map(element => element.node.superBlock)); - const interviewPrep = superBlocks.splice(9, 1); + const interviewPrep = superBlocks.splice(10, 1); return ( diff --git a/client/src/components/settings/Certification.js b/client/src/components/settings/Certification.js index cb09a7a0b3..d7b2242df8 100644 --- a/client/src/components/settings/Certification.js +++ b/client/src/components/settings/Certification.js @@ -50,9 +50,11 @@ const propTypes = { isFrontEndLibsCert: PropTypes.bool, isFullStackCert: PropTypes.bool, isHonest: PropTypes.bool, + isInfosecCert: PropTypes.bool, isInfosecQaCert: PropTypes.bool, isJsAlgoDataStructCert: PropTypes.bool, isMachineLearningPyCert: PropTypes.bool, + isQaCert: PropTypes.bool, isRespWebDesignCert: PropTypes.bool, isSciCompPyCert: PropTypes.bool, updateLegacyCert: PropTypes.func.isRequired, @@ -70,6 +72,8 @@ const isCertSelector = ({ isDataVisCert, isFrontEndCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndLibsCert, isFullStackCert, isRespWebDesignCert, @@ -84,6 +88,8 @@ const isCertSelector = ({ isDataVisCert, isFrontEndCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndLibsCert, isFullStackCert, isRespWebDesignCert, @@ -99,6 +105,8 @@ const isCertMapSelector = createSelector( isApisMicroservicesCert, isJsAlgoDataStructCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndLibsCert, isRespWebDesignCert, isDataVisCert, @@ -114,6 +122,8 @@ const isCertMapSelector = createSelector( 'Data Visualization': is2018DataVisCert, "API's and Microservices": isApisMicroservicesCert, 'Information Security And Quality Assurance': isInfosecQaCert, + 'Quality Assurance': isQaCert, + 'Information Security': isInfosecCert, 'Scientific Computing with Python': isSciCompPyCert, 'Data Analysis with Python': isDataAnalysisPyCert, 'Machine Learning with Python': isMachineLearningPyCert, @@ -462,7 +472,7 @@ export class CertificationSettings extends Component { is2018DataVisCert, isApisMicroservicesCert, isFrontEndLibsCert, - isInfosecQaCert, + isQaCert, isJsAlgoDataStructCert, isRespWebDesignCert } = this.props; @@ -471,7 +481,7 @@ export class CertificationSettings extends Component { is2018DataVisCert && isApisMicroservicesCert && isFrontEndLibsCert && - isInfosecQaCert && + isQaCert && isJsAlgoDataStructCert && isRespWebDesignCert; @@ -509,7 +519,7 @@ export class CertificationSettings extends Component {
  • Front End Libraries
  • Data Visualization
  • APIs and Microservices
  • -
  • Information Security and Quality Assurance
  • +
  • Quality Assurance
  • diff --git a/client/src/components/settings/Certification.test.js b/client/src/components/settings/Certification.test.js index 970bdf86c1..35970bf43c 100644 --- a/client/src/components/settings/Certification.test.js +++ b/client/src/components/settings/Certification.test.js @@ -189,6 +189,8 @@ const defaultTestProps = { isFullStackCert: false, isHonest: false, isInfosecQaCert: false, + isQaCert: false, + isInfosecCert: false, isJsAlgoDataStructCert: false, isRespWebDesignCert: false, isSciCompPyCert: false, diff --git a/client/src/pages/learn/information-security-and-quality-assurance/index.md b/client/src/pages/learn/information-security-and-quality-assurance/index.md deleted file mode 100644 index 98ab65693e..0000000000 --- a/client/src/pages/learn/information-security-and-quality-assurance/index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Information Security and Quality Assurance -superBlock: Information Security and Quality Assurance ---- -## Introduction to Information Security and Quality Assurance - -This is a stub introduction for Information Security and Quality Assurance diff --git a/client/src/pages/learn/information-security-and-quality-assurance/information-security-and-quality-assurance-projects/index.md b/client/src/pages/learn/information-security-and-quality-assurance/information-security-and-quality-assurance-projects/index.md deleted file mode 100644 index c94f1376d1..0000000000 --- a/client/src/pages/learn/information-security-and-quality-assurance/information-security-and-quality-assurance-projects/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Introduction to the Information Security and Quality Assurance Projects -block: Information Security and Quality Assurance Projects -superBlock: Information Security and Quality Assurance ---- -## Introduction to the Information Security and Quality Assurance Projects - -Now it’s time to put your newly learned skills to work! By working on these projects, you will have the opportunity of applying all the skills, principles, and concepts from the Information Security and Quality Assurance sections. - -In this section you get the chance to: -* Build a Metric-Imperial Converter -* Build an Issue Tracker -* Build a Personal Library -* Build a Stock Price Checker -* Build an Anonymous Message Board -* Port Scanner -* Packet Capturer - -When you are done, you will have plenty of Information Security & Quality Assurance projects under your belt along with a certification that you can show off to friends, family, and employers. Have fun and remember to use the [Read-Search-Ask](https://www.freecodecamp.org/forum/t/how-to-get-help-when-you-are-stuck/19514) method if you get stuck. diff --git a/client/src/pages/learn/information-security/index.md b/client/src/pages/learn/information-security/index.md new file mode 100644 index 0000000000..b8a8dd5929 --- /dev/null +++ b/client/src/pages/learn/information-security/index.md @@ -0,0 +1,7 @@ +--- +title: Information Security +superBlock: Information Security +--- +## Introduction to Information Security + +This is a stub introduction for Information Security diff --git a/client/src/pages/learn/information-security/information-security-projects/index.md b/client/src/pages/learn/information-security/information-security-projects/index.md new file mode 100644 index 0000000000..13e778a842 --- /dev/null +++ b/client/src/pages/learn/information-security/information-security-projects/index.md @@ -0,0 +1,17 @@ +--- +title: Introduction to the Information Security Projects +block: Information Security Projects +superBlock: Information Security +--- +## Introduction to the Information Security Projects + +Now it’s time to put your newly learned skills to work! By working on these projects, you will have the opportunity of applying all the skills, principles, and concepts from the Information Security sections. + +In this section you get the chance to: +* Build a Stock Price Checker +* Build an Anonymous Message Board +* Secure Real Time Multiplayer Game +* Port Scanner +* Packet Capturer + +When you are done, you will have plenty of Information Security projects under your belt along with a certification that you can show off to friends, family, and employers. Have fun and remember to use the [Read-Search-Ask](https://www.freecodecamp.org/forum/t/how-to-get-help-when-you-are-stuck/19514) method if you get stuck. diff --git a/client/src/pages/learn/information-security-and-quality-assurance/information-security-with-helmetjs/index.md b/client/src/pages/learn/information-security/information-security-with-helmetjs/index.md similarity index 96% rename from client/src/pages/learn/information-security-and-quality-assurance/information-security-with-helmetjs/index.md rename to client/src/pages/learn/information-security/information-security-with-helmetjs/index.md index 59e2060cb2..559f4845f5 100644 --- a/client/src/pages/learn/information-security-and-quality-assurance/information-security-with-helmetjs/index.md +++ b/client/src/pages/learn/information-security/information-security-with-helmetjs/index.md @@ -1,7 +1,7 @@ --- title: Introduction to Information Security with HelmetJS Challenges block: Information Security with HelmetJS -superBlock: Information Security and Quality Assurance +superBlock: Information Security --- ## Introduction to Information Security with HelmetJS Challenges diff --git a/client/src/pages/learn/information-security-and-quality-assurance/advanced-node-and-express/index.md b/client/src/pages/learn/quality-assurance/advanced-node-and-express/index.md similarity index 96% rename from client/src/pages/learn/information-security-and-quality-assurance/advanced-node-and-express/index.md rename to client/src/pages/learn/quality-assurance/advanced-node-and-express/index.md index d27ca425ba..d732513f24 100644 --- a/client/src/pages/learn/information-security-and-quality-assurance/advanced-node-and-express/index.md +++ b/client/src/pages/learn/quality-assurance/advanced-node-and-express/index.md @@ -1,7 +1,7 @@ --- title: Introduction to the Advanced Node and Express Challenges block: Advanced Node and Express -superBlock: Information Security and Quality Assurance +superBlock: Quality Assurance --- ## Introduction to Advanced Node and Express Challenges diff --git a/client/src/pages/learn/quality-assurance/index.md b/client/src/pages/learn/quality-assurance/index.md new file mode 100644 index 0000000000..49d769b723 --- /dev/null +++ b/client/src/pages/learn/quality-assurance/index.md @@ -0,0 +1,7 @@ +--- +title: Quality Assurance +superBlock: Quality Assurance +--- +## Introduction to Quality Assurance + +This is a stub introduction for Quality Assurance diff --git a/client/src/pages/learn/information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/index.md b/client/src/pages/learn/quality-assurance/quality-assurance-and-testing-with-chai/index.md similarity index 95% rename from client/src/pages/learn/information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/index.md rename to client/src/pages/learn/quality-assurance/quality-assurance-and-testing-with-chai/index.md index f9760d0b57..1dafb6053b 100644 --- a/client/src/pages/learn/information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/index.md +++ b/client/src/pages/learn/quality-assurance/quality-assurance-and-testing-with-chai/index.md @@ -1,7 +1,7 @@ --- title: Introduction to the Quality Assurance with Chai Challenges block: Quality Assurance and Testing with Chai -superBlock: Information Security and Quality Assurance +superBlock: Quality Assurance --- ## Introduction to Quality Assurance with Chai Challenges diff --git a/client/src/pages/learn/quality-assurance/quality-assurance-projects/index.md b/client/src/pages/learn/quality-assurance/quality-assurance-projects/index.md new file mode 100644 index 0000000000..18c512ef20 --- /dev/null +++ b/client/src/pages/learn/quality-assurance/quality-assurance-projects/index.md @@ -0,0 +1,17 @@ +--- +title: Introduction to the Quality Assurance Projects +block: Quality Assurance Projects +superBlock: Quality Assurance +--- +## Introduction to the Quality Assurance Projects + +Now it’s time to put your newly learned skills to work! By working on these projects, you will have the opportunity of applying all the skills, principles, and concepts from the Quality Assurance sections. + +In this section you get the chance to: +* Build a Metric-Imperial Converter +* Build an Issue Tracker +* Build a Personal Library +* Sudoku Solver +* American British Translator + +When you are done, you will have plenty of Quality Assurance projects under your belt along with a certification that you can show off to friends, family, and employers. Have fun and remember to use the [Read-Search-Ask](https://www.freecodecamp.org/forum/t/how-to-get-help-when-you-are-stuck/19514) method if you get stuck. diff --git a/client/src/pages/learn/scientific-computing-with-python/lectures-python-for-everybody/index.md b/client/src/pages/learn/scientific-computing-with-python/lectures-python-for-everybody/index.md new file mode 100644 index 0000000000..7ae064f32c --- /dev/null +++ b/client/src/pages/learn/scientific-computing-with-python/lectures-python-for-everybody/index.md @@ -0,0 +1,12 @@ +--- +title: Introduction to Python for Everybody +block: Python for Everybody +superBlock: Scientific Computing with Python +--- +## Introduction to Python for Everybody + +Python for Everybody is a video course that teaches the basics of programming computers using Python 3. + +The course was created by Dr. Charles Severance (a.k.a. Dr. Chuck). He is a Clinical Professor at the University of Michigan School of Information, where he teaches various technology-oriented courses including programming, database design, and Web development. + + diff --git a/client/src/redux/index.js b/client/src/redux/index.js index a37f0807d3..f7729b40ef 100644 --- a/client/src/redux/index.js +++ b/client/src/redux/index.js @@ -213,6 +213,8 @@ export const certificatesByNameSelector = username => state => { isJsAlgoDataStructCert, isApisMicroservicesCert, isInfosecQaCert, + isQaCert, + isInfosecCert, isFrontEndCert, isBackEndCert, isDataVisCert, @@ -229,6 +231,8 @@ export const certificatesByNameSelector = username => state => { isJsAlgoDataStructCert || isApisMicroservicesCert || isInfosecQaCert || + isQaCert || + isInfosecCert || isFullStackCert || isSciCompPyCert || isDataAnalysisPyCert || @@ -270,6 +274,16 @@ export const certificatesByNameSelector = username => state => { title: 'Information Security and Quality Assurance Certification', showURL: 'information-security-and-quality-assurance' }, + { + show: isQaCert, + title: ' Quality Assurance Certification', + showURL: 'information-security-and-quality-assurance' + }, + { + show: isInfosecCert, + title: 'Information Security Certification', + showURL: 'information-security-and-quality-assurance' + }, { show: isSciCompPyCert, title: 'Scientific Computing with Python Certification', diff --git a/client/src/resources/certProjectMap.js b/client/src/resources/certProjectMap.js index da8d642e81..946dc6a16f 100644 --- a/client/src/resources/certProjectMap.js +++ b/client/src/resources/certProjectMap.js @@ -7,9 +7,8 @@ const feLibsBase = '/learn/front-end-libraries/front-end-libraries-projects'; const dataVisBase = '/learn/data-visualization/data-visualization-projects'; const apiMicroBase = '/learn/apis-and-microservices/apis-and-microservices-projects'; -const infoSecBase = - '/learn/information-security-and-quality-assurance/' + - 'information-security-and-quality-assurance-projects'; +const qaBase = 'learn/quality-assurance/quality-assurance-projects'; +const infoSecBase = '/learn/information-security/information-security-projects'; const sciCompPyBase = '/learn/scientific-computing-with-python/' + 'scientific-computing-with-python-projects'; @@ -371,48 +370,68 @@ export const projectMap = { superBlock: 'apis-and-microservices' } ], - 'Information Security And Quality Assurance': [ + 'Quality Assurance': [ { id: '587d8249367417b2b2512c41', title: 'Metric-Imperial Converter', - link: `${infoSecBase}/metric-imperial-converter`, - superBlock: 'information-security-and-quality-assurance' + link: `${qaBase}/metric-imperial-converter`, + superBlock: 'quality-assurance' }, { id: '587d8249367417b2b2512c42', title: 'Issue Tracker', - link: `${infoSecBase}/issue-tracker`, - superBlock: 'information-security-and-quality-assurance' + link: `${qaBase}/issue-tracker`, + superBlock: 'quality-assurance' }, { id: '587d824a367417b2b2512c43', title: 'Personal Library', - link: `${infoSecBase}/personal-library`, - superBlock: 'information-security-and-quality-assurance' + link: `${qaBase}/personal-library`, + superBlock: 'quality-assurance' }, + { + id: '5e601bf95ac9d0ecd8b94afd', + title: 'Sudoku Solver', + link: `${qaBase}/sudoku-solver`, + superBlock: 'quality-assurance' + }, + { + id: '5e601c0d5ac9d0ecd8b94afe', + title: 'American British Translator', + link: `${qaBase}/american-british-translator`, + superBlock: 'quality-assurance' + } + ], + 'Information Security': [ { id: '587d824a367417b2b2512c44', title: 'Stock Price Checker', link: `${infoSecBase}/stock-price-checker`, - superBlock: 'information-security-and-quality-assurance' + superBlock: 'information-security' }, { id: '587d824a367417b2b2512c45', title: 'Anonymous Message Board', link: `${infoSecBase}/anonymous-message-board`, - superBlock: 'information-security-and-quality-assurance' + superBlock: 'information-security' }, { id: '5e46f979ac417301a38fb932', title: 'Port Scanner', link: `${infoSecBase}/port-scanner`, - superBlock: 'information-security-and-quality-assurance' + superBlock: 'information-security' }, { id: '5e46f983ac417301a38fb933', title: 'SHA-1 Password Cracker', link: `${infoSecBase}/sha-1-password-cracker`, - superBlock: 'information-security-and-quality-assurance' + superBlock: 'information-security' + }, + { + id: '5e601c775ac9d0ecd8b94aff', + title: 'Real Time Multiplayer Game', + link: `${infoSecBase}/real-time-multiplayer-game`, + superBlock: 'information-security' } ], 'Scientific Computing with Python': [ diff --git a/client/src/templates/Challenges/components/CompletionVideoModal.js b/client/src/templates/Challenges/components/CompletionVideoModal.js new file mode 100644 index 0000000000..ff30e4b9dc --- /dev/null +++ b/client/src/templates/Challenges/components/CompletionVideoModal.js @@ -0,0 +1,301 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import noop from 'lodash/noop'; +import { connect } from 'react-redux'; +import { createSelector } from 'reselect'; +import { Button, Modal } from '@freecodecamp/react-bootstrap'; +import { useStaticQuery, graphql } from 'gatsby'; +import SanitizedSpan from '../components/SanitizedSpan'; + +import Login from '../../../components/Header/components/Login'; + +import './completion-modal.css'; + +import { + closeModal, + submitChallenge, + completedChallengesIds, + isCompletionModalOpenSelector, + challengeFilesSelector, + challengeMetaSelector, + lastBlockChalSubmitted +} from '../redux'; + +import { isSignedInSelector, executeGA } from '../../../redux'; + +const mapStateToProps = createSelector( + challengeFilesSelector, + challengeMetaSelector, + completedChallengesIds, + isCompletionModalOpenSelector, + isSignedInSelector, + (files, { title, id }, completedChallengesIds, isOpen, isSignedIn) => ({ + files, + title, + id, + completedChallengesIds, + isOpen, + isSignedIn + }) +); + +const mapDispatchToProps = function(dispatch) { + const dispatchers = { + close: () => dispatch(closeModal('completion')), + submitChallenge: () => { + dispatch(submitChallenge()); + }, + lastBlockChalSubmitted: () => { + dispatch(lastBlockChalSubmitted()); + }, + executeGA + }; + return () => dispatchers; +}; + +const propTypes = { + answers: PropTypes.array, + blockName: PropTypes.string, + close: PropTypes.func.isRequired, + completedChallengesIds: PropTypes.array, + currentBlockIds: PropTypes.array, + executeGA: PropTypes.func, + files: PropTypes.object.isRequired, + id: PropTypes.string, + isOpen: PropTypes.bool, + isSignedIn: PropTypes.bool.isRequired, + lastBlockChalSubmitted: PropTypes.func, + question: PropTypes.string, + solution: PropTypes.number, + submitChallenge: PropTypes.func.isRequired, + title: PropTypes.string +}; + +export function getCompletedPercent( + completedChallengesIds = [], + currentBlockIds = [], + currentChallengeId +) { + completedChallengesIds = completedChallengesIds.includes(currentChallengeId) + ? completedChallengesIds + : [...completedChallengesIds, currentChallengeId]; + + const completedChallengesInBlock = completedChallengesIds.filter(id => { + return currentBlockIds.includes(id); + }); + + const completedPercent = Math.round( + (completedChallengesInBlock.length / currentBlockIds.length) * 100 + ); + + return completedPercent > 100 ? 100 : completedPercent; +} + +export class CompletionModalInner extends Component { + constructor(props) { + super(props); + this.handleSubmit = this.handleSubmit.bind(this); + this.handleKeypress = this.handleKeypress.bind(this); + } + + state = { + downloadURL: null, + completedPercent: 0, + selectedOption: 0, + answer: 1, + showWrong: false + }; + + static getDerivedStateFromProps(props, state) { + const { files, isOpen } = props; + if (!isOpen) { + return null; + } + const { downloadURL } = state; + if (downloadURL) { + URL.revokeObjectURL(downloadURL); + } + let newURL = null; + if (Object.keys(files).length) { + const filesForDownload = Object.keys(files) + .map(key => files[key]) + .reduce((allFiles, { path, contents }) => { + const beforeText = `** start of ${path} **\n\n`; + const afterText = `\n\n** end of ${path} **\n\n`; + allFiles += + files.length > 1 ? beforeText + contents + afterText : contents; + return allFiles; + }, ''); + const blob = new Blob([filesForDownload], { + type: 'text/json' + }); + newURL = URL.createObjectURL(blob); + } + + const { completedChallengesIds, currentBlockIds, id, isSignedIn } = props; + let completedPercent = isSignedIn + ? getCompletedPercent(completedChallengesIds, currentBlockIds, id) + : 0; + return { downloadURL: newURL, completedPercent: completedPercent }; + } + + handleKeypress(e) { + if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { + e.preventDefault(); + // Since Hotkeys also listens to Ctrl + Enter we have to stop this event + // getting to it. + e.stopPropagation(); + this.handleSubmit(); + } + } + + handleSubmit() { + if (this.props.solution - 1 === this.state.selectedOption) { + this.setState({ + showWrong: false + }); + this.props.submitChallenge(); + this.checkBlockCompletion(); + } else { + this.setState({ + showWrong: true + }); + } + } + + // check block completion for donation + checkBlockCompletion() { + if ( + this.state.completedPercent === 100 && + !this.props.completedChallengesIds.includes(this.props.id) + ) { + this.props.lastBlockChalSubmitted(); + } + } + + componentWillUnmount() { + if (this.state.downloadURL) { + URL.revokeObjectURL(this.state.downloadURL); + } + this.props.close(); + } + + handleOptionChange = changeEvent => { + console.log(this.state.selectedOption); + this.setState({ + selectedOption: parseInt(changeEvent.target.value, 10) + }); + }; + + render() { + const { close, isOpen, isSignedIn, question, answers } = this.props; + + if (isOpen) { + executeGA({ type: 'modal', data: '/completion-modal' }); + } + + return ( + + + Video Quiz + + + +
    + {answers.map((option, index) => ( +
    + +
    + ))} +
    +
    + Wrong. Try again. +
    +
    + + {isSignedIn ? null : ( + + Sign in to save your progress + + )} + + +
    + ); + } +} + +CompletionModalInner.propTypes = propTypes; + +const useCurrentBlockIds = blockName => { + const { + allChallengeNode: { edges } + } = useStaticQuery(graphql` + query getCurrentBlockNodesVid { + allChallengeNode(sort: { fields: [superOrder, order, challengeOrder] }) { + edges { + node { + fields { + blockName + } + id + } + } + } + } + `); + + const currentBlockIds = edges + .filter(edge => edge.node.fields.blockName === blockName) + .map(edge => edge.node.id); + return currentBlockIds; +}; + +const CompletionModal = props => { + const currentBlockIds = useCurrentBlockIds(props.blockName || ''); + return ; +}; + +CompletionModal.displayName = 'CompletionModal'; +CompletionModal.propTypes = propTypes; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(CompletionModal); diff --git a/client/src/templates/Challenges/components/SanitizedSpan.js b/client/src/templates/Challenges/components/SanitizedSpan.js new file mode 100644 index 0000000000..5b7e3d1094 --- /dev/null +++ b/client/src/templates/Challenges/components/SanitizedSpan.js @@ -0,0 +1,19 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import sanitizeHtml from 'sanitize-html'; + +const propTypes = { + text: PropTypes.string.isRequired +}; + +function SanitizedSpan({ text = '' }) { + const sanitizedText = sanitizeHtml(text, { + allowedTags: ['b', 'i', 'em', 'strong', 'code', 'wbr', 'br', 'pre'] + }); + return ; +} + +SanitizedSpan.displayName = 'SanitizedSpan'; +SanitizedSpan.propTypes = propTypes; + +export default SanitizedSpan; diff --git a/client/src/templates/Challenges/components/SanitizedSpan.test.js b/client/src/templates/Challenges/components/SanitizedSpan.test.js new file mode 100644 index 0000000000..6bc764173f --- /dev/null +++ b/client/src/templates/Challenges/components/SanitizedSpan.test.js @@ -0,0 +1,41 @@ +/* global expect */ + +import React from 'react'; +import { render } from '@testing-library/react'; + +import SanitizedSpan from './SanitizedSpan'; + +describe('', () => { + it('matches the snapshot', () => { + const { container } = render( + dangerous code + more text
    danger`} + /> + ); + + expect(container).toMatchSnapshot(); + }); + + it('removes scripts, images, etc', () => { + const { queryByAltText, queryByText } = render( + dangerous code + more text danger`} + /> + ); + + expect(queryByText('dangerous code', { ignore: false })).toBeNull(); + expect(queryByAltText('danger')).toBeNull(); + }); + + it('leaves in line breaks', () => { + const { container } = render( + + more text`} + /> + ); + expect(container.querySelector('br')).not.toBeNull(); + }); +}); diff --git a/client/src/templates/Challenges/components/__snapshots__/SanitizedSpan.test.js.snap b/client/src/templates/Challenges/components/__snapshots__/SanitizedSpan.test.js.snap new file mode 100644 index 0000000000..b1e3fbbde9 --- /dev/null +++ b/client/src/templates/Challenges/components/__snapshots__/SanitizedSpan.test.js.snap @@ -0,0 +1,14 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` matches the snapshot 1`] = ` +
    + + some text + more + + text +
    + +
    +
    +`; diff --git a/client/src/templates/Challenges/components/completion-modal.css b/client/src/templates/Challenges/components/completion-modal.css index cfd8e325f3..a532e368ae 100644 --- a/client/src/templates/Challenges/components/completion-modal.css +++ b/client/src/templates/Challenges/components/completion-modal.css @@ -11,6 +11,14 @@ justify-content: space-evenly; } +.video-modal-body { + min-height: 400px; + display: flex; + flex-direction: column; + justify-content: space-evenly; + padding-left: 30px; +} + .completion-challenge-details { display: flex; flex-direction: column; diff --git a/client/src/templates/Challenges/video/Show.js b/client/src/templates/Challenges/video/Show.js new file mode 100644 index 0000000000..6f3616323c --- /dev/null +++ b/client/src/templates/Challenges/video/Show.js @@ -0,0 +1,205 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { Button, Grid, Col, Row } from '@freecodecamp/react-bootstrap'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import { graphql } from 'gatsby'; +import Helmet from 'react-helmet'; +import YouTube from 'react-youtube'; + +import { ChallengeNode } from '../../../redux/propTypes'; +import { + challengeMounted, + updateChallengeMeta, + openModal, + updateProjectFormValues +} from '../redux'; + +import LearnLayout from '../../../components/layouts/Learn'; +import ChallengeTitle from '../components/Challenge-Title'; +import ChallengeDescription from '../components/Challenge-Description'; +import Spacer from '../../../components/helpers/Spacer'; +import CompletionVideoModal from '../components/CompletionVideoModal'; +import HelpModal from '../components/HelpModal'; +import Hotkeys from '../components/Hotkeys'; + +const mapStateToProps = () => ({}); +const mapDispatchToProps = dispatch => + bindActionCreators( + { + updateChallengeMeta, + challengeMounted, + updateProjectFormValues, + openCompletionModal: () => openModal('completion') + }, + dispatch + ); + +const propTypes = { + challengeMounted: PropTypes.func.isRequired, + data: PropTypes.shape({ + challengeNode: ChallengeNode + }), + description: PropTypes.string, + openCompletionModal: PropTypes.func.isRequired, + pageContext: PropTypes.shape({ + challengeMeta: PropTypes.object + }), + updateChallengeMeta: PropTypes.func.isRequired, + updateProjectFormValues: PropTypes.func.isRequired +}; + +export class Project extends Component { + constructor(props) { + super(props); + this.state = { + subtitles: '' + }; + } + + componentDidMount() { + const { + challengeMounted, + data: { + challengeNode: { title, challengeType } + }, + pageContext: { challengeMeta }, + updateChallengeMeta + } = this.props; + updateChallengeMeta({ ...challengeMeta, title, challengeType }); + challengeMounted(challengeMeta.id); + this._container.focus(); + } + + componentDidUpdate(prevProps) { + const { + data: { + challengeNode: { title: prevTitle } + } + } = prevProps; + const { + challengeMounted, + data: { + challengeNode: { title: currentTitle, challengeType } + }, + pageContext: { challengeMeta }, + updateChallengeMeta + } = this.props; + if (prevTitle !== currentTitle) { + updateChallengeMeta({ + ...challengeMeta, + title: currentTitle, + challengeType + }); + challengeMounted(challengeMeta.id); + } + } + + render() { + const { + data: { + challengeNode: { + fields: { blockName }, + title, + description, + videoId, + question: { text, answers, solution } + } + }, + openCompletionModal, + pageContext: { + challengeMeta: { introPath, nextChallengePath, prevChallengePath } + } + } = this.props; + const blockNameTitle = `${blockName} - ${title}`; + + return ( + (this._container = c)} + introPath={introPath} + nextChallengePath={nextChallengePath} + prevChallengePath={prevChallengePath} + > + + + + + + + {blockNameTitle} + + + + + + + + + + + + + + ); + } +} + +Project.displayName = 'Project'; +Project.propTypes = propTypes; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(Project); + +export const query = graphql` + query VideoChallenge($slug: String!) { + challengeNode(fields: { slug: { eq: $slug } }) { + videoId + title + description + challengeType + fields { + blockName + slug + } + question { + text + answers + solution + } + } + } +`; diff --git a/client/utils/blockNameify.js b/client/utils/blockNameify.js index b6c606a173..cc17641f7d 100644 --- a/client/utils/blockNameify.js +++ b/client/utils/blockNameify.js @@ -14,13 +14,12 @@ const preFormattedBlockNames = { 'apis-and-microservices': 'APIs and Microservices', 'apis-and-microservices-projects': 'APIs and Microservices Projects', 'scientific-computing-with-python': 'Scientific Computing with Python', - 'scientific-computing-with-python-projects': - 'Scientific Computing with Python Projects', + 'scientific-computing-with-python-projects': 'Certification Projects', 'data-analysis-with-python': 'Data Analysis with Python', - 'data-analysis-with-python-projects': 'Data Analysis with Python Projects', + 'data-analysis-with-python-projects': 'Certification Projects', 'machine-learning-with-python': 'Machine Learning with Python', - 'machine-learning-with-python-projects': - 'Machine Learning with Python Projects' + 'machine-learning-with-python-projects': 'Certification Projects', + 'information-security-projects': 'Certification Projects' }; const noFormatting = ['and', 'for', 'of', 'the', 'up', 'with']; diff --git a/client/utils/challengeTypes.js b/client/utils/challengeTypes.js index 2fa480c22e..f026be0557 100644 --- a/client/utils/challengeTypes.js +++ b/client/utils/challengeTypes.js @@ -10,6 +10,7 @@ const step = 7; const quiz = 8; const invalid = 9; const pythonProject = 10; +const video = 11; // individual exports exports.backend = backend; @@ -29,7 +30,8 @@ exports.challengeTypes = { modern, step, quiz, - invalid + invalid, + video }; // turn challengeType to file ext @@ -45,11 +47,12 @@ exports.viewTypes = { [bonfire]: 'classic', [frontEndProject]: 'frontend', [backEndProject]: 'backend', - [pythonProject]: 'backend', + [pythonProject]: 'frontend', [modern]: 'modern', [step]: 'step', [quiz]: 'quiz', - [backend]: 'backend' + [backend]: 'backend', + [video]: 'video' }; // determine the type of submit function to use for the challenge on completion @@ -68,7 +71,8 @@ exports.submitTypes = { [step]: 'step', [quiz]: 'quiz', [backend]: 'backend', - [modern]: 'tests' + [modern]: 'tests', + [video]: 'tests' }; // determine which help forum questions should be posted to @@ -109,8 +113,8 @@ exports.helpCategory = { 'information-security-with-helmetjs': 'JavaScript', 'quality-assurance-and-testing-with-chai': 'JavaScript', 'advanced-node-and-express': 'JavaScript', - 'information-security-and-quality-assurance-projects': - 'Certification Projects', + 'quality-assurance-projects': 'Certification Projects', + 'information-security-projects': 'Certification Projects', algorithms: 'JavaScript', 'data-structures': 'JavaScript', 'take-home-projects': 'Certification Projects', diff --git a/client/utils/gatsby/challengePageCreator.js b/client/utils/gatsby/challengePageCreator.js index 1a1fec145a..93afb092f9 100644 --- a/client/utils/gatsby/challengePageCreator.js +++ b/client/utils/gatsby/challengePageCreator.js @@ -23,12 +23,17 @@ const superBlockIntro = path.resolve( __dirname, '../../src/templates/Introduction/SuperBlockIntro.js' ); +const video = path.resolve( + __dirname, + '../../src/templates/Challenges/video/Show.js' +); const views = { backend, classic, modern: classic, - frontend + frontend, + video // quiz: Quiz }; diff --git a/curriculum/challenges/_meta/advanced-node-and-express/meta.json b/curriculum/challenges/_meta/advanced-node-and-express/meta.json index d6ed17c98a..92ad9392bc 100644 --- a/curriculum/challenges/_meta/advanced-node-and-express/meta.json +++ b/curriculum/challenges/_meta/advanced-node-and-express/meta.json @@ -1,11 +1,11 @@ { "name": "Advanced Node and Express", "dashedName": "advanced-node-and-express", - "order": 3, + "order": 2, "time": "5 hours", "template": "", "required": [], - "superBlock": "information-security-and-quality-assurance", + "superBlock": "quality-assurance", "superOrder": 6, "challengeOrder": [ [ diff --git a/curriculum/challenges/_meta/algorithms/meta.json b/curriculum/challenges/_meta/algorithms/meta.json index f1f47561fb..f814f4ed05 100644 --- a/curriculum/challenges/_meta/algorithms/meta.json +++ b/curriculum/challenges/_meta/algorithms/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "coding-interview-prep", - "superOrder": 10, + "superOrder": 11, "challengeOrder": [ [ "a3f503de51cf954ede28891d", diff --git a/curriculum/challenges/_meta/apis-and-microservices-certificate/meta.json b/curriculum/challenges/_meta/apis-and-microservices-certificate/meta.json index 7bbcb32541..4be9c9bc2f 100644 --- a/curriculum/challenges/_meta/apis-and-microservices-certificate/meta.json +++ b/curriculum/challenges/_meta/apis-and-microservices-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561add10cb82ac38a17523bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/apis-and-microservices-certificate.json" + "fileName": "12-certificates/apis-and-microservices-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/data-analysis-with-python-certificate/meta.json b/curriculum/challenges/_meta/data-analysis-with-python-certificate/meta.json index 48b995ef73..4aee5eed58 100644 --- a/curriculum/challenges/_meta/data-analysis-with-python-certificate/meta.json +++ b/curriculum/challenges/_meta/data-analysis-with-python-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "5e46fc95ac417301a38fb934", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/data-analysis-with-python-certificate.json" + "fileName": "12-certificates/data-analysis-with-python-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/data-structures/meta.json b/curriculum/challenges/_meta/data-structures/meta.json index a8db975080..1b9479fc82 100644 --- a/curriculum/challenges/_meta/data-structures/meta.json +++ b/curriculum/challenges/_meta/data-structures/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "coding-interview-prep", - "superOrder": 10, + "superOrder": 11, "challengeOrder": [ [ "587d8253367417b2b2512c6a", diff --git a/curriculum/challenges/_meta/data-visualization-certificate/meta.json b/curriculum/challenges/_meta/data-visualization-certificate/meta.json index 9a38c7ee7c..8d81886b1e 100644 --- a/curriculum/challenges/_meta/data-visualization-certificate/meta.json +++ b/curriculum/challenges/_meta/data-visualization-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 10, + "superOrder": 12, "challengeOrder": [ [ "5a553ca864b52e1d8bceea14", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/data-visualization-certificate.json" + "fileName": "12-certificates/data-visualization-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/front-end-libraries-certificate/meta.json b/curriculum/challenges/_meta/front-end-libraries-certificate/meta.json index ede3d426ea..089c493216 100644 --- a/curriculum/challenges/_meta/front-end-libraries-certificate/meta.json +++ b/curriculum/challenges/_meta/front-end-libraries-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561acd10cb82ac38a17513bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/front-end-libraries-certificate.json" + "fileName": "12-certificates/front-end-libraries-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/information-security-and-quality-assurance-projects/meta.json b/curriculum/challenges/_meta/information-security-and-quality-assurance-projects/meta.json index 7430e42904..448557a6dd 100644 --- a/curriculum/challenges/_meta/information-security-and-quality-assurance-projects/meta.json +++ b/curriculum/challenges/_meta/information-security-and-quality-assurance-projects/meta.json @@ -1,12 +1,12 @@ { "name": "Information Security and Quality Assurance Projects", "dashedName": "information-security-and-quality-assurance-projects", - "order": 4, + "order": 0, "time": "150 hours", "template": "", "required": [], "superBlock": "information-security-and-quality-assurance", - "superOrder": 6, + "superOrder": 13, "challengeOrder": [ [ "587d8249367417b2b2512c41", @@ -27,16 +27,8 @@ [ "587d824a367417b2b2512c45", "Anonymous Message Board" - ], - [ - "5e46f979ac417301a38fb932", - "Port Scanner" - ], - [ - "5e46f983ac417301a38fb933", - "SHA-1 Password Cracker" ] ], "helpRoom": "HelpBackend", - "fileName": "06-information-security-and-quality-assurance/quality-assurance-and-information-security-projects.json" + "fileName": "12-information-security-and-quality-assurance/quality-assurance-and-information-security-projects.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/information-security-certificate/meta.json b/curriculum/challenges/_meta/information-security-certificate/meta.json new file mode 100644 index 0000000000..e01447a453 --- /dev/null +++ b/curriculum/challenges/_meta/information-security-certificate/meta.json @@ -0,0 +1,18 @@ +{ + "name": "Information Security Certificate", + "dashedName": "information-security-certificate", + "order": 9, + "time": "", + "template": "", + "required": [], + "superBlock": "certificates", + "superOrder": 12, + "challengeOrder": [ + [ + "5e6021435ac9d0ecd8b94b00", + "Information Security Certificate" + ] + ], + "isPrivate": true, + "fileName": "12-certificates/information-security-certificate.json" +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/information-security-projects/meta.json b/curriculum/challenges/_meta/information-security-projects/meta.json new file mode 100644 index 0000000000..b2d9def043 --- /dev/null +++ b/curriculum/challenges/_meta/information-security-projects/meta.json @@ -0,0 +1,34 @@ +{ + "name": "Information Security Projects", + "dashedName": "information-security-projects", + "order": 2, + "time": "150 hours", + "template": "", + "required": [], + "superBlock": "information-security", + "superOrder": 9, + "challengeOrder": [ + [ + "587d824a367417b2b2512c44", + "Stock Price Checker" + ], + [ + "587d824a367417b2b2512c45", + "Anonymous Message Board" + ], + [ + "5e601c775ac9d0ecd8b94aff", + "Real Time Multiplayer Game" + ], + [ + "5e46f979ac417301a38fb932", + "Port Scanner" + ], + [ + "5e46f983ac417301a38fb933", + "SHA-1 Password Cracker" + ] + ], + "helpRoom": "HelpBackend", + "fileName": "09-information-security/information-security-projects.json" +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json b/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json index 6c46e694a5..e7465b3027 100644 --- a/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json +++ b/curriculum/challenges/_meta/information-security-with-helmetjs/meta.json @@ -5,8 +5,8 @@ "time": "5 hours", "template": "", "required": [], - "superBlock": "information-security-and-quality-assurance", - "superOrder": 6, + "superBlock": "information-security", + "superOrder": 9, "challengeOrder": [ [ "587d8247367417b2b2512c36", diff --git a/curriculum/challenges/_meta/information-securtiy-and-quality-assurance-certificate/meta.json b/curriculum/challenges/_meta/information-securtiy-and-quality-assurance-certificate/meta.json index 75adb23ff9..a7178f8bb9 100644 --- a/curriculum/challenges/_meta/information-securtiy-and-quality-assurance-certificate/meta.json +++ b/curriculum/challenges/_meta/information-securtiy-and-quality-assurance-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561add10cb82ac38a17213bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/information-security-and-quality-assurance-certificate.json" + "fileName": "12-certificates/information-security-and-quality-assurance-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-certificate/meta.json b/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-certificate/meta.json index a75e5cba7c..4ddc046006 100644 --- a/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-certificate/meta.json +++ b/curriculum/challenges/_meta/javascript-algorithms-and-data-structures-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561abd10cb81ac38a17513bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/javascript-algorithms-and-data-structures-certificate.json" + "fileName": "12-certificates/javascript-algorithms-and-data-structures-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/lectures-python-for-everybody/meta.json b/curriculum/challenges/_meta/lectures-python-for-everybody/meta.json new file mode 100644 index 0000000000..a6ec349965 --- /dev/null +++ b/curriculum/challenges/_meta/lectures-python-for-everybody/meta.json @@ -0,0 +1,262 @@ +{ + "name": "Python for Everybody", + "dashedName": "lectures-python-for-everybody", + "order": 1, + "time": "15 hours", + "superBlock": "scientific-computing-with-python", + "superOrder": 7, + "challengeOrder": [ + [ + "5e6a54a558d3af90110a60a0", + "Introduction A" + ], + [ + "5e6a54af58d3af90110a60a1", + "Introduction B" + ], + [ + "5e6a54ba58d3af90110a60a2", + "Introduction C" + ], + [ + "5e6a54c358d3af90110a60a3", + "Introduction D" + ], + [ + "5e7b9f050b6c005b0e76f056", + "Expressions A" + ], + [ + "5e7b9f050b6c005b0e76f057", + "Expressions B" + ], + [ + "5e7b9f050b6c005b0e76f058", + "Conditional A" + ], + [ + "5e7b9f060b6c005b0e76f059", + "Conditional B" + ], + [ + "5e7b9f060b6c005b0e76f05a", + "Functions A" + ], + [ + "5e7b9f060b6c005b0e76f05b", + "Functions B" + ], + [ + "5e7b9f060b6c005b0e76f05c", + "Iterations A" + ], + [ + "5e7b9f070b6c005b0e76f05d", + "Iterations B" + ], + [ + "5e7b9f070b6c005b0e76f05e", + "Iterations C" + ], + [ + "5e7b9f070b6c005b0e76f05f", + "Iterations D" + ], + [ + "5e7b9f070b6c005b0e76f060", + "Strings A" + ], + [ + "5e7b9f070b6c005b0e76f061", + "Strings B" + ], + [ + "5e7b9f080b6c005b0e76f062", + "Files A" + ], + [ + "5e7b9f080b6c005b0e76f063", + "Files B" + ], + [ + "5e7b9f080b6c005b0e76f064", + "Lists A" + ], + [ + "5e7b9f090b6c005b0e76f065", + "Lists B" + ], + [ + "5e7b9f090b6c005b0e76f066", + "Lists C" + ], + [ + "5e7b9f090b6c005b0e76f067", + "Dictionaries A" + ], + [ + "5e7b9f090b6c005b0e76f068", + "Dictionaries B" + ], + [ + "5e7b9f0a0b6c005b0e76f069", + "Dictionaries C" + ], + [ + "5e7b9f0a0b6c005b0e76f06c", + "Tuples A" + ], + [ + "5e7b9f0b0b6c005b0e76f06d", + "Tuples B" + ], + [ + "5e7b9f0b0b6c005b0e76f06e", + "RegEx A" + ], + [ + "5e7b9f0b0b6c005b0e76f06f", + "RegEx B" + ], + [ + "5e7b9f0b0b6c005b0e76f070", + "RegEx C" + ], + [ + "5e7b9f0c0b6c005b0e76f071", + "HTTP A" + ], + [ + "5e7b9f0c0b6c005b0e76f072", + "HTTP B" + ], + [ + "5e7b9f0c0b6c005b0e76f073", + "HTTP C" + ], + [ + "5e7b9f0c0b6c005b0e76f074", + "HTTP D" + ], + [ + "5e7b9f0d0b6c005b0e76f075", + "HTTP E" + ], + [ + "5e7b9f0d0b6c005b0e76f076", + "HTTP F" + ], + [ + "5e7b9f0e0b6c005b0e76f07a", + "Web Services A" + ], + [ + "5e7b9f0e0b6c005b0e76f07b", + "Web Services B" + ], + [ + "5e7b9f0e0b6c005b0e76f07c", + "Web Services C" + ], + [ + "5e7b9f140b6c005b0e76f07d", + "Web Services D" + ], + [ + "5e7b9f140b6c005b0e76f07e", + "Web Services E" + ], + [ + "5e7b9f150b6c005b0e76f07f", + "Web Services F" + ], + [ + "5e7b9f150b6c005b0e76f080", + "Web Services G" + ], + [ + "5e7b9f160b6c005b0e76f085", + "Objects A" + ], + [ + "5e7b9f160b6c005b0e76f086", + "Objects B" + ], + [ + "5e7b9f170b6c005b0e76f087", + "Objects C" + ], + [ + "5e7b9f170b6c005b0e76f088", + "Objects D" + ], + [ + "5e7b9f170b6c005b0e76f08a", + "Databases A" + ], + [ + "5e7b9f170b6c005b0e76f08b", + "Databases B" + ], + [ + "5e7b9f180b6c005b0e76f08c", + "Databases C" + ], + [ + "5e7b9f180b6c005b0e76f08d", + "Databases D" + ], + [ + "5e7b9f180b6c005b0e76f08e", + "Databases E" + ], + [ + "5e7b9f180b6c005b0e76f08f", + "Databases F" + ], + [ + "5e7b9f190b6c005b0e76f090", + "Databases G" + ], + [ + "5e7b9f690b6c005b0e76f095", + "Viz A" + ], + [ + "5e7b9f6a0b6c005b0e76f096", + "Viz B" + ], + [ + "5e7b9f6a0b6c005b0e76f097", + "Viz C" + ], + [ + "5e7b9f6a0b6c005b0e76f098", + "Viz Geodata" + ], + [ + "5e7b9f6a0b6c005b0e76f099", + "Viz Gmane Model" + ], + [ + "5e7b9f6b0b6c005b0e76f09a", + "Viz Gmane Spider" + ], + [ + "5e7b9f6b0b6c005b0e76f09b", + "Viz Gmane Viz" + ], + [ + "5e7b9f6b0b6c005b0e76f09c", + "Viz Page Rank" + ], + [ + "5e7b9f6b0b6c005b0e76f09d", + "Viz Page Spider" + ], + [ + "5e7b9f6c0b6c005b0e76f09e", + "Viz Page Viz" + ] + ] +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/legacy-back-end-certificate/meta.json b/curriculum/challenges/_meta/legacy-back-end-certificate/meta.json index e093f1fd2c..c5f0dec62e 100644 --- a/curriculum/challenges/_meta/legacy-back-end-certificate/meta.json +++ b/curriculum/challenges/_meta/legacy-back-end-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "660add10cb82ac38a17513be", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/legacy-back-end-certificate.json" + "fileName": "12-certificates/legacy-back-end-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/legacy-data-visualization-certificate/meta.json b/curriculum/challenges/_meta/legacy-data-visualization-certificate/meta.json index 5549873878..46381347b8 100644 --- a/curriculum/challenges/_meta/legacy-data-visualization-certificate/meta.json +++ b/curriculum/challenges/_meta/legacy-data-visualization-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561add10cb82ac39a17513bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/legacy-data-visualization-certificate.json" + "fileName": "12-certificates/legacy-data-visualization-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/legacy-front-end-certificate/meta.json b/curriculum/challenges/_meta/legacy-front-end-certificate/meta.json index 5ecb9589a8..aeef54566d 100644 --- a/curriculum/challenges/_meta/legacy-front-end-certificate/meta.json +++ b/curriculum/challenges/_meta/legacy-front-end-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561add10cb82ac38a17513be", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/legacy-front-end-certificate.json" + "fileName": "12-certificates/legacy-front-end-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/machine-learning-with-python-certificate/meta.json b/curriculum/challenges/_meta/machine-learning-with-python-certificate/meta.json index c8f67879a8..d32f5c7911 100644 --- a/curriculum/challenges/_meta/machine-learning-with-python-certificate/meta.json +++ b/curriculum/challenges/_meta/machine-learning-with-python-certificate/meta.json @@ -1,12 +1,12 @@ { "name": "Machine Learning with Python Certificate", "dashedName": "machine-learning-with-python-certificate", - "order": 9, + "order": 10, "time": "", "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "5e46fc95ac417301a38fb935", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/machine-learning-with-python-certificate.json" + "fileName": "12-certificates/machine-learning-with-python-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json b/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json index 18ccf97528..b9b62482a8 100644 --- a/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json +++ b/curriculum/challenges/_meta/machine-learning-with-python-projects/meta.json @@ -4,7 +4,7 @@ "order": 1, "time": "150 hours", "superBlock": "machine-learning-with-python", - "superOrder": 9, + "superOrder": 10, "challengeOrder": [ [ "5e46f8d6ac417301a38fb92d", diff --git a/curriculum/challenges/_meta/project-euler/meta.json b/curriculum/challenges/_meta/project-euler/meta.json index d9da50a86b..5978655aaa 100644 --- a/curriculum/challenges/_meta/project-euler/meta.json +++ b/curriculum/challenges/_meta/project-euler/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "coding-interview-prep", - "superOrder": 10, + "superOrder": 11, "challengeOrder": [ [ "5900f36e1000cf542c50fe80", diff --git a/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json b/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json index 582b191f63..25440cb4b2 100644 --- a/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json +++ b/curriculum/challenges/_meta/quality-assurance-and-testing-with-chai/meta.json @@ -1,11 +1,11 @@ { "name": "Quality Assurance and Testing with Chai", "dashedName": "quality-assurance-and-testing-with-chai", - "order": 2, + "order": 1, "time": "5 hours", "template": "", "required": [], - "superBlock": "information-security-and-quality-assurance", + "superBlock": "quality-assurance", "superOrder": 6, "challengeOrder": [ [ @@ -106,5 +106,5 @@ ] ], "helpRoom": "Help", - "fileName": "06-information-security-and-quality-assurance/testing-with-chai.json" + "fileName": "06-quality-assurance/quality-assurance-and-testing-with-chai.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/quality-assurance-certificate/meta.json b/curriculum/challenges/_meta/quality-assurance-certificate/meta.json new file mode 100644 index 0000000000..8e14a591b2 --- /dev/null +++ b/curriculum/challenges/_meta/quality-assurance-certificate/meta.json @@ -0,0 +1,18 @@ +{ + "name": "Quality Assurance Certificate", + "dashedName": "quality-assurance-certificate", + "order": 6, + "time": "", + "template": "", + "required": [], + "superBlock": "certificates", + "superOrder": 12, + "challengeOrder": [ + [ + "5e611829481575a52dc59c0e", + "Quality Assurance Certificate" + ] + ], + "isPrivate": true, + "fileName": "12-certificates/quality-assurance-certificate.json" +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/quality-assurance-projects/meta.json b/curriculum/challenges/_meta/quality-assurance-projects/meta.json new file mode 100644 index 0000000000..a461f93cd9 --- /dev/null +++ b/curriculum/challenges/_meta/quality-assurance-projects/meta.json @@ -0,0 +1,34 @@ +{ + "name": "Quality Assurance Projects", + "dashedName": "quality-assurance-projects", + "order": 3, + "time": "150 hours", + "template": "", + "required": [], + "superBlock": "quality-assurance", + "superOrder": 6, + "challengeOrder": [ + [ + "587d8249367417b2b2512c41", + "Metric-Imperial Converter" + ], + [ + "587d8249367417b2b2512c42", + "Issue Tracker" + ], + [ + "587d824a367417b2b2512c43", + "Personal Library" + ], + [ + "5e601bf95ac9d0ecd8b94afd", + "Sudoku Solver" + ], + [ + "5e601c0d5ac9d0ecd8b94afe", + "American British Translator" + ] + ], + "helpRoom": "HelpBackend", + "fileName": "06-quality-assurance/quality-assurance-projects.json" +} \ No newline at end of file diff --git a/curriculum/challenges/_meta/responsive-web-design-certificate/meta.json b/curriculum/challenges/_meta/responsive-web-design-certificate/meta.json index a9eb3ef9d5..cd3dc62b03 100644 --- a/curriculum/challenges/_meta/responsive-web-design-certificate/meta.json +++ b/curriculum/challenges/_meta/responsive-web-design-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "561add10cb82ac38a17513bc", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/responsive-web-design-certificate.json" + "fileName": "12-certificates/responsive-web-design-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/rosetta-code/meta.json b/curriculum/challenges/_meta/rosetta-code/meta.json index 72d3a4adb8..72ded7105e 100644 --- a/curriculum/challenges/_meta/rosetta-code/meta.json +++ b/curriculum/challenges/_meta/rosetta-code/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "coding-interview-prep", - "superOrder": 10, + "superOrder": 11, "challengeOrder": [ [ "594810f028c0303b75339acb", diff --git a/curriculum/challenges/_meta/scientific-computing-with-python-certificate/meta.json b/curriculum/challenges/_meta/scientific-computing-with-python-certificate/meta.json index 6061948139..5394a3f108 100644 --- a/curriculum/challenges/_meta/scientific-computing-with-python-certificate/meta.json +++ b/curriculum/challenges/_meta/scientific-computing-with-python-certificate/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "certificates", - "superOrder": 11, + "superOrder": 12, "challengeOrder": [ [ "5e44431b903586ffb414c951", @@ -14,5 +14,5 @@ ] ], "isPrivate": true, - "fileName": "11-certificates/scientific-computing-with-python-certificate.json" + "fileName": "12-certificates/scientific-computing-with-python-certificate.json" } \ No newline at end of file diff --git a/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json b/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json index c8364546ce..44bb1877f2 100644 --- a/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json +++ b/curriculum/challenges/_meta/scientific-computing-with-python-projects/meta.json @@ -1,7 +1,7 @@ { "name": "Scientific Computing with Python Projects", "dashedName": "scientific-computing-with-python-projects", - "order": 1, + "order": 2, "time": "150 hours", "superBlock": "scientific-computing-with-python", "superOrder": 7, diff --git a/curriculum/challenges/_meta/take-home-projects/meta.json b/curriculum/challenges/_meta/take-home-projects/meta.json index a030946632..45088e3cd4 100644 --- a/curriculum/challenges/_meta/take-home-projects/meta.json +++ b/curriculum/challenges/_meta/take-home-projects/meta.json @@ -6,7 +6,7 @@ "template": "", "required": [], "superBlock": "coding-interview-prep", - "superOrder": 10, + "superOrder": 11, "challengeOrder": [ [ "bd7158d8c442eddfaeb5bd10", diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/announce-new-users.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/announce-new-users.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/announce-new-users.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/announce-new-users.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/authentication-strategies.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/authentication-strategies.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/authentication-strategies.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/authentication-strategies.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/authentication-with-socket.io.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/authentication-with-socket.io.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/authentication-with-socket.io.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/clean-up-your-project-with-modules.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/communicate-by-emitting.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/communicate-by-emitting.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/communicate-by-emitting.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/create-new-middleware.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/create-new-middleware.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/create-new-middleware.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/create-new-middleware.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/handle-a-disconnect.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/handle-a-disconnect.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/handle-a-disconnect.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/hashing-your-passwords.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/hashing-your-passwords.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/hashing-your-passwords.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/how-to-put-a-profile-together.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/how-to-use-passport-strategies.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implement-the-serialization-of-a-passport-user.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implement-the-serialization-of-a-passport-user.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implement-the-serialization-of-a-passport-user.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implement-the-serialization-of-a-passport-user.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-ii.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-ii.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-ii.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-ii.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication-iii.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/implementation-of-social-authentication.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/logging-a-user-out.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/logging-a-user-out.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/logging-a-user-out.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/logging-a-user-out.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/registration-of-new-users.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/registration-of-new-users.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/registration-of-new-users.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/registration-of-new-users.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/send-and-display-chat-messages.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/serialization-of-a-user-object.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-a-template-engine.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-a-template-engine.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-a-template-engine.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-a-template-engine.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-passport.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-passport.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-passport.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-passport.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-the-environment.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-the-environment.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/set-up-the-environment.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/set-up-the-environment.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.english.md b/curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.english.md rename to curriculum/challenges/english/06-quality-assurance/advanced-node-and-express/use-a-template-engines-powers.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/assert-deep-equality-with-.deepequal-and-.notdeepequal.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/compare-the-properties-of-two-elements.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/learn-how-javascript-assertions-work.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iii---put-method.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-an-api-response-using-chai-http-iv---put-method.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http-ii.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-on-api-endpoints-using-chai-http.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser-ii.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser-ii.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser-ii.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser-ii.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/run-functional-tests-using-a-headless-browser.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-for-truthiness.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-string-contains-a-substring.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-falls-within-a-specific-range.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-a-string.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-an-array.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-value-is-of-a-specific-data-structure-type.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-a-variable-or-function-is-defined.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-array-contains-an-item.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-has-a-property.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-an-object-is-an-instance-of-a-constructor.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/test-if-one-value-is-below-or-at-least-as-large-as-another.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-assert.isok-and-assert.isnotok.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-regular-expressions-to-test-a-string.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-double-equals-to-assert-equality.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-and-testing-with-chai/use-the-triple-equals-to-assert-strict-equality.english.md diff --git a/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/american-british-translator.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/american-british-translator.english.md new file mode 100644 index 0000000000..5f4f6b6cd2 --- /dev/null +++ b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/american-british-translator.english.md @@ -0,0 +1,47 @@ +--- +id: 5e601c0d5ac9d0ecd8b94afe +title: American British Translator +challengeType: 4 +isRequired: true +forumTopicId: 301571 +--- + +## Description +
    +COMING SOON + +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: test + testString: 'test' +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```js +/** + Backend challenges don't need solutions, + because they would need to be tested against a full working project. + Please check our contributing guidelines to learn more. +*/ +``` + +
    diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/issue-tracker.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/issue-tracker.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/issue-tracker.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/issue-tracker.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/metric-imperial-converter.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/metric-imperial-converter.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/metric-imperial-converter.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/personal-library.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/personal-library.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/personal-library.english.md rename to curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/personal-library.english.md diff --git a/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/sudoku-solver.english.md b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/sudoku-solver.english.md new file mode 100644 index 0000000000..77fd171b2b --- /dev/null +++ b/curriculum/challenges/english/06-quality-assurance/quality-assurance-projects/sudoku-solver.english.md @@ -0,0 +1,47 @@ +--- +id: 5e601bf95ac9d0ecd8b94afd +title: Sudoku Solver +challengeType: 4 +isRequired: true +forumTopicId: 301571 +--- + +## Description +
    +COMING SOON +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: test + testString: 'test' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```js +/** + Backend challenges don't need solutions, + because they would need to be tested against a full working project. + Please check our contributing guidelines to learn more. +*/ +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-a.english.md new file mode 100644 index 0000000000..758856c045 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-a.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f050b6c005b0e76f058 +title: Conditional A +challengeType: 11 +isRequired: true +videoId: gz_IfIsZQtc +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which code is indented correctly to print "Yes" if 0 = x and y = 10?' + answers: + - '
    if 0 = x:
    if y = 10:
    print("Yes.")
    ' + - '
    if 0 = x:
    if y = 10:
    print("Yes.")
    ' + - '
    if 0 = x:
    if y = 10:
    print("Yes.")
    ' + - '
    if 0 = x:
    if y = 10:
    print("Yes.")
    ' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-b.english.md new file mode 100644 index 0000000000..8b4b684881 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/conditional-b.english.md @@ -0,0 +1,41 @@ +--- +id: 5e7b9f060b6c005b0e76f059 +title: Conditional B +challengeType: 11 +isRequired: true +videoId: HdL82tAZR20 +--- + +## Description +
    +More resources: +- Exercise 1 +- Exercise 2 +
    + +## Tests +
    + +```yml +question: + text: 'Given the following code:
    +1 |temp = "5 degrees"
    +2 |cel = 0
    +3 |try:
    +4 | fahr = float(temp)
    +5 | cel = (fahr - 32.0) * 5.0 / 9.0
    +6 |except:
    +7 | print("temp should be a number")
    +8 |print(cel)
    +
    +Which line would cause the script to immediately stop because of an error?' + answers: + - '1' + - '4' + - '6' + - '7' + - 'None' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/database-email.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/database-email.english.md new file mode 100644 index 0000000000..deb5336a9a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/database-email.english.md @@ -0,0 +1,27 @@ +--- +id: 5e6a54a558d3af90110a60a0 +title: Introduction A +challengeType: 11 +isRequired: true +videoId: 3muQV-Im3Z0 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Who should learn to program?' + answers: + - 'College students.' + - 'People who want to become software developers.' + - 'Everyone.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-a.english.md new file mode 100644 index 0000000000..7b24b852f6 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-a.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f170b6c005b0e76f08a +title: Databases A +challengeType: 11 +isRequired: true +videoId: QlNod5-kFpA +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which is NOT a primary data structures in a database?' + answers: + - 'index' + - 'table' + - 'row' + - 'column' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-b.english.md new file mode 100644 index 0000000000..d6cc37eb81 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-b.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f170b6c005b0e76f08b +title: Databases B +challengeType: 11 +isRequired: true +videoId: MQ5z4bdF92U +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What SQL command would you use to retrieve alL users that have the email address quincy@freecodecamp.org?' + answers: + - 'SELECT Users WHERE email="quincy@freecodecamp.org"' + - 'SELECT Users WHERE email IS "quincy@freecodecamp.org"' + - 'SELECT ALL Users WHERE email="quincy@freecodecamp.org"' + - 'SELECT * FROM Users WHERE email IS "quincy@freecodecamp.org"' + - 'SELECT * FROM Users WHERE email="quincy@freecodecamp.org"' + solution: 5 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-c.english.md new file mode 100644 index 0000000000..6d393b204b --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-c.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f180b6c005b0e76f08c +title: Databases C +challengeType: 11 +isRequired: true +videoId: AqdfbrpkbHk +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is the best practice for how many times a peice of string data should be stored in a database?' + answers: + - '0' + - '1' + - '2' + - '3' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-d.english.md new file mode 100644 index 0000000000..6647595800 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-d.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f180b6c005b0e76f08d +title: Databases D +challengeType: 11 +isRequired: true +videoId: -orenCNdC2Q +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is a foreign key?' + answers: + - 'A key that is not supposed to be there.' + - 'A key that uses non-latin characters.' + - 'A number that points to the primary key of an associated row in a different table.' + - 'A key that the "real world" might use to look up a row.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-e.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-e.english.md new file mode 100644 index 0000000000..223e2ff63a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-e.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f180b6c005b0e76f08e +title: Databases E +challengeType: 11 +isRequired: true +videoId: A-t18zKJvmo +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What does the INSERT command do in SQL?' + answers: + - 'It defines a new row by listing the fields we want to include followed by the values we want placed in the new row.' + - 'It defines a new column by listing the rows we want to include followed by the values we want placed in the new column.' + - 'It defines a new table by listing the rows and fields we want to include followed by the values that we want placed in the table.' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-f.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-f.english.md new file mode 100644 index 0000000000..756599fadc --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-f.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f180b6c005b0e76f08f +title: Databases F +challengeType: 11 +isRequired: true +videoId: jvDw3D9GKac +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'When using a JOIN clause in an SQL statement, what does ON do?' + answers: + - 'It indicates what tables to perform the JOIN on.' + - 'It specifies the fields to use for the JOIN.' + - 'It indicates how the two tables are to be joined.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-g.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-g.english.md new file mode 100644 index 0000000000..12a5302c10 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/databases-g.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f190b6c005b0e76f090 +title: Databases G +challengeType: 11 +isRequired: true +videoId: z-SBYcvEQOc +--- + +## Description +
    +More resources: +- Exercise: Email +- Exercise: Roster +- Exercise: Tracks +- Exercise: Twfriends +- Exercise: Twspider +
    + +## Tests +
    + +```yml +question: + text: 'Which is an example of a many-to-many relationship?' + answers: + - 'teacher to student' + - 'customer to order' + - 'book to pages' + - 'city to country' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-a.english.md new file mode 100644 index 0000000000..dacf1bdada --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-a.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f090b6c005b0e76f067 +title: Dictionaries A +challengeType: 11 +isRequired: true +videoId: dnzvfimrRMg +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What does dict equal after running this code? +
    dict = {"Fri": 20, "Thu": 6, "Sat": 1}
    +dict["Thu"] = 13
    +dict["Sat"] = 2
    +dict["Sun"] = 9
    ' + answers: + - "{'Fri': 20, 'Thu': 6, 'Sat': 1}" + - "{'Fri': 20, 'Thu': 6, 'Sat': 1, 'Thu': 13, 'Sat': 2, 'Sun': 9}" + - "{'Sun': 9}" + - "{'Thu': 13, 'Sat': 2, 'Sun': 9}" + - "{'Fri': 20, 'Thu': 13, 'Sat': 2, 'Sun': 9}" + solution: 5 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-b.english.md new file mode 100644 index 0000000000..3f019581f1 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-b.english.md @@ -0,0 +1,31 @@ +--- +id: 5e7b9f090b6c005b0e76f068 +title: Dictionaries B +challengeType: 11 +isRequired: true +videoId: f17xPfIXct0 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the following code print? +
    counts = { 'quincy' : 1 , 'mrugesh' : 42, 'beau': 100, '0': 10}
    +print(counts.get('kris', 0))
    " + answers: + - '1' + - 'quincy' + - '0' + - '10' + - '[will return error]' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-c.english.md new file mode 100644 index 0000000000..c8ea0c74a8 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/dictionaries-c.english.md @@ -0,0 +1,31 @@ +--- +id: 5e7b9f0a0b6c005b0e76f069 +title: Dictionaries C +challengeType: 11 +isRequired: true +videoId: EEmekKiKG70 +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: "What will the following code print? +
    counts = { 'chuck' : 1 , 'annie' : 42, 'jan': 100}
    +for key in counts:
    if counts[key] > 10 :
    print(key, counts[key])
    " + answers: + - 'annie 42
    jan 100
    ' + - 'chuck 1
    annie 42
    jan 100' + - 'chuck 1' + - '[Error]' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-a.english.md new file mode 100644 index 0000000000..64ddeba5da --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-a.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f050b6c005b0e76f056 +title: Expressions A +challengeType: 11 +isRequired: true +videoId: nELR-uyyrok +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is the symbol is used in an assignment statement?' + answers: + - '~' + - '&' + - '=' + - '|' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-b.english.md new file mode 100644 index 0000000000..65f7e20827 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/expressions-b.english.md @@ -0,0 +1,31 @@ +--- +id: 5e7b9f050b6c005b0e76f057 +title: Expressions B +challengeType: 11 +isRequired: true +videoId: dKgUaIa5ATg +--- + +## Description +
    +More resources: +- Exercise 1 +- Exercise 2 +
    + +## Tests +
    + +```yml +question: + text: 'What will print out after running this code:
    width = 15
    height = 12.0
    print(height/3)
    ' + answers: + - '39' + - '4' + - '4.0' + - '5.0' + - '5' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-a.english.md new file mode 100644 index 0000000000..e5c5ce347e --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f080b6c005b0e76f062 +title: Files A +challengeType: 11 +isRequired: true +videoId: Fo1tW09KIwo +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is used to indicate a new line in a string?' + answers: + - '\n' + - '{new_line}' + - '{n}' + - '/n' + - '/new' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-b.english.md new file mode 100644 index 0000000000..cb9e17dd80 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/files-b.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f080b6c005b0e76f063 +title: Files B +challengeType: 11 +isRequired: true +videoId: cIA0EokbaHE +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: "What does the word 'continue' do in the middle of a loop." + answers: + - 'skips to the code directly after the loop' + - 'skips to the next line in the code' + - 'skips to the next iteration of the loop' + - 'skips the next block of code' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-a.english.md new file mode 100644 index 0000000000..e4bd8e74ff --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f060b6c005b0e76f05a +title: Functions A +challengeType: 11 +isRequired: true +videoId: 3JGF-n3tDPU +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is the purpose of the "def" keyword in Python?' + answers: + - 'It is slang that means "the following code is really cool"' + - 'It indicates the start of a function' + - 'It indicates that the following indented section of code is to be stored for later' + - 'b and c are both true' + - 'None of the above' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-b.english.md new file mode 100644 index 0000000000..6edaf8fe56 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/functions-b.english.md @@ -0,0 +1,36 @@ +--- +id: 5e7b9f060b6c005b0e76f05b +title: Functions B +challengeType: 11 +isRequired: true +videoId: nLDychdBwUg +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: 'What will the following Python program print out? +
    def fred():
    print("Zap")

    def jane():
    print("ABC")
    +
    +jane()
    +fred()
    +jane()
    +
    ' + answers: + - 'Zap ABC jane fred jane' + - 'Zap ABC Zap' + - 'ABC Zap jane' + - 'ABC Zap ABC' + - 'Zap Zap Zap' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-a.english.md new file mode 100644 index 0000000000..f3072ee5fa --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-a.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f0c0b6c005b0e76f071 +title: HTTP A +challengeType: 11 +isRequired: true +videoId: _kJvneKVdNM +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What Python library gives access to TCP Sockets?' + answers: + - 'tcp' + - 'socket' + - 'http' + - 'port' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-b.english.md new file mode 100644 index 0000000000..f5dfe8842f --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-b.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f0c0b6c005b0e76f072 +title: HTTP B +challengeType: 11 +isRequired: true +videoId: c6vZGescaSc +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What type of HTTP is request is usually used to access a website?' + answers: + - 'POST' + - 'GET' + - 'WEB' + - 'ACCESS' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-c.english.md new file mode 100644 index 0000000000..1fbfcc6a10 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-c.english.md @@ -0,0 +1,36 @@ +--- +id: 5e7b9f0c0b6c005b0e76f073 +title: HTTP C +challengeType: 11 +isRequired: true +videoId: zjyT9DaAjx4 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What does the following code create? +
    +import socket
    +
    +mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    +mysock.connect(('data.pr4e.org', 80))
    +cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()
    +mysock.send(cmd)
    +
    while True:
    data = mysock.recv(512)
    if len(data) < 1:
    break
    print(data.decode(),end='')

    mysock.close()
    " + answers: + - 'simple web server' + - 'simple email client' + - 'simple todo list' + - 'simple web browser' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-d.english.md new file mode 100644 index 0000000000..f88ea0f10a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-d.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f0c0b6c005b0e76f074 +title: HTTP D +challengeType: 11 +isRequired: true +videoId: Pv_pJgVu8WI +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which type of encoding do most websites use?' + answers: + - 'UTF-8' + - 'UTF-16' + - 'UTF-32' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-e.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-e.english.md new file mode 100644 index 0000000000..c903f6b69a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-e.english.md @@ -0,0 +1,31 @@ +--- +id: 5e7b9f0d0b6c005b0e76f075 +title: HTTP E +challengeType: 11 +isRequired: true +videoId: 7lFM1T_CxBs +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the output of the following code be like: +
    import urllib.request
    +
    +fhand = urllib.request.urlopen('http://data.pr4e.org/romeo.txt')
    +for line in fhand:
    print(line.decode().strip())
    " + answers: + - 'Just contents of "romeo.txt".' + - 'A header and the contents of "romeo.txt"' + - 'A header, a footer, and the contents of "romeo.txt"' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-f.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-f.english.md new file mode 100644 index 0000000000..d5cbceb68b --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/http-f.english.md @@ -0,0 +1,34 @@ +--- +id: 5e7b9f0d0b6c005b0e76f076 +title: HTTP F +challengeType: 11 +isRequired: true +videoId: Uyioq2q4cEg +--- + +## Description +
    +More resources: +- Exercise: socket1 +- Exercise: urllib +- Exercise: urllinks +
    + +## Tests +
    + +```yml +question: + text: 'What Python library is used for parsing HTML documents and extracting data from HTML documents.' + answers: + - 'socket' + - 'http' + - 'BeautifulSoup' + - 'PrettyBiscuit' + - 'WonderfulSalad' + - 'HttpParser' + - 'GrunkleStan' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-a.english.md new file mode 100644 index 0000000000..c9adccadcf --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e6a54a558d3af90110a60a0 +title: Introduction A +challengeType: 11 +isRequired: true +videoId: 3muQV-Im3Z0 +--- + +## Description +
    +More resources: +- Install Python on Windows +- Install Python on MacOS +
    + +## Tests +
    + +```yml +question: + text: 'Who should learn to program?' + answers: + - 'College students.' + - 'People who want to become software developers.' + - 'Everyone.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-b.english.md new file mode 100644 index 0000000000..bc0b1d2204 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-b.english.md @@ -0,0 +1,50 @@ +--- +id: 5e6a54af58d3af90110a60a1 +title: Introduction B +challengeType: 11 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: 'It should pass all Python tests.' + testString: '' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```py + # Python challenges don't need solutions, + # because they would need to be tested against a full working project. + # Please check our contributing guidelines to learn more. +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-c.english.md new file mode 100644 index 0000000000..a5809b386a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-c.english.md @@ -0,0 +1,39 @@ +--- +id: 5e6a54ba58d3af90110a60a2 +title: Introduction C +challengeType: 11 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will print out after running these two lines of code: +
    x = 6
    print(x)
    ' + answers: + - 'x' + - '6' + - 'x = 6' + - '(x)' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-d.english.md new file mode 100644 index 0000000000..f598e0165f --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/introduction-d.english.md @@ -0,0 +1,30 @@ +--- +id: 5e6a54c358d3af90110a60a3 +title: Introduction D +challengeType: 11 +isRequired: true +videoId: aRY_xjL35v0 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will the following program print out: +
    x = 43
    +x = x + 1
    +print(x)
    ' + answers: + - 'College students.' + - 'People who want to become software developers.' + - 'Everyone.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-a.english.md new file mode 100644 index 0000000000..d955e3565c --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-a.english.md @@ -0,0 +1,31 @@ +--- +id: 5e7b9f060b6c005b0e76f05c +title: Iterations A +challengeType: 11 +isRequired: true +videoId: dLA-szNRnUY +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will the following code print out: +
    +n = 0
    +while True:
    if n == 3:
    break
    print(n)
    n = n + 1
    ' + answers: + - '0
    1
    2' + - '0
    1
    2
    3' + - '1
    2' + - '1
    2
    3' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-b.english.md new file mode 100644 index 0000000000..e4d44e8f6e --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-b.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f070b6c005b0e76f05d +title: Iterations B +challengeType: 11 +isRequired: true +videoId: hiRTRAqNlpE +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'How many lines will the following code print? +
    for i in [2,1,5]:
    print(i)
    ' + answers: + - '1' + - '2' + - '3' + - '5' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-c.english.md new file mode 100644 index 0000000000..bab9edb8bd --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-c.english.md @@ -0,0 +1,38 @@ +--- +id: 5e7b9f070b6c005b0e76f05e +title: Iterations C +challengeType: 11 +isRequired: true +videoId: AelGAcoMXbI +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Below is code to find the smallest value from a list of values. One line has an error that will cause the code to not work as expected. Which line is it? +
    +1|smallest = None
    +2|print("Before:", smallest)
    +3|for itervar in [3, 41, 12, 9, 74, 15]:
    +4| if smallest is None or itervar ⋖ smallest:
    +5| smallest = itervar
    +6| break
    +7| print("Loop:", itervar, smallest)
    +8|print("Smallest:", smallest)
    +
    ' + answers: + - '3' + - '4' + - '6' + - '7' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-d.english.md new file mode 100644 index 0000000000..e7073690d2 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/iterations-d.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f070b6c005b0e76f05f +title: Iterations D +challengeType: 11 +isRequired: true +videoId: 9Wtqo6vha1M +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: 'Which of these evaluates to False?' + answers: + - '0 == 0.0' + - '0 is 0.0' + - '0 is not 0.0' + - '0 = 0.0' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-a.english.md new file mode 100644 index 0000000000..d8abe94106 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-a.english.md @@ -0,0 +1,30 @@ +--- +id: 5e7b9f080b6c005b0e76f064 +title: Lists A +challengeType: 11 +isRequired: true +videoId: Y0cvfDpYC_c +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is the value of x after running this code: +
    fruit = "banana"
    +x = fruit[1]
    ' + answers: + - 'banana' + - 'a' + - 'b' + - 'True' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-b.english.md new file mode 100644 index 0000000000..afa1275cc3 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-b.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f090b6c005b0e76f065 +title: Lists B +challengeType: 11 +isRequired: true +videoId: lCnHfTHkhbE +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which method is used to add an item at the end of a list?' + answers: + - 'insert' + - 'push' + - 'append' + - 'new' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-c.english.md new file mode 100644 index 0000000000..492750ee96 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/lists-c.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f090b6c005b0e76f066 +title: Lists C +challengeType: 11 +isRequired: true +videoId: lxcFa7ldCi0 +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: "What does n equal in this code? +
    words = 'His e-mail is q-lar@freecodecamp.org'
    +pieces = words.split()
    +parts = pieces[3].split('-')
    +n = parts[1]
    " + answers: + - 'mail' + - 'q' + - 'lar' + - 'lar@freecodecamp.org' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-a.english.md new file mode 100644 index 0000000000..f91a127a76 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-a.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f160b6c005b0e76f085 +title: Objects A +challengeType: 11 +isRequired: true +videoId: uJxGeTYy0us +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which is NOT true about objects in Python?' + answers: + - 'Objects get created and used' + - 'Objects are bits of code and data' + - 'Objects hide detail' + - 'Objects are one of the five standard data types' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-b.english.md new file mode 100644 index 0000000000..85c1df95ca --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-b.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f160b6c005b0e76f086 +title: Objects B +challengeType: 11 +isRequired: true +videoId: FiABKEuaSJ8 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will the following program print: +
    class PartyAnimal:
    x = 0

    def party(self) :
    self.x = self.x + 2
    print(self.x)
    +
    +an = PartyAnimal()
    +an.party()
    +an.party()
    ' + answers: + - 'So far 1
    So far 2' + - '0
    0' + - '2
    2' + - '1
    2' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-c.english.md new file mode 100644 index 0000000000..61f8f5ea8f --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-c.english.md @@ -0,0 +1,36 @@ +--- +id: 5e7b9f170b6c005b0e76f087 +title: Objects C +challengeType: 11 +isRequired: true +videoId: p1r3h_AMMIM +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the following program print: +
    +class PartyAnimal:
    x = 0
    name = ''
    def __init__(self, nam):
    self.name = nam
    print(self.name,'constructed')

    def party(self):
    self.x = self.x + 1
    print(self.name,'party count',self.x)
    +
    +q = PartyAnimal('Quincy')
    +m = PartyAnimal('Miya')
    +
    +q.party()
    +m.party()
    +q.party()" + answers: + - 'Quincy constructed
    Miya constructed
    Quincy party count 1
    Miya party count 2
    Quincy party count 3' + - 'Quincy constructed
    Miya constructed
    Quincy party count 1
    Miya party count 1
    Quincy party count 2' + - 'Quincy constructed
    Quincy party count 1
    Quincy party count 2
    Miya constructed
    Miya party count 1' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-d.english.md new file mode 100644 index 0000000000..31c1695ad7 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/objects-d.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f170b6c005b0e76f088 +title: Objects D +challengeType: 11 +isRequired: true +videoId: FBL3alYrxRM +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is inheritance in object-oriented programming?' + answers: + - 'A new class created when a parent class is extended.' + - 'A constructed instance of a class.' + - 'The ability to create a new class by extending an existing class.' + - 'A method that is called at the moment when a class is being used to construct an object. ' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-a.english.md new file mode 100644 index 0000000000..2dab004544 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f0b0b6c005b0e76f06e +title: RegEx A +challengeType: 11 +isRequired: true +videoId: Yud_COr6pZo +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Which regex matches a white space character?' + answers: + - '\S' + - '\s' + - '.' + - '\_' + - '\.' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-b.english.md new file mode 100644 index 0000000000..1f06bc2a7e --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-b.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f0b0b6c005b0e76f06f +title: RegEx B +challengeType: 11 +isRequired: true +videoId: LaCZnTbQGkE +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the following program print: +
    +import re
    +s = 'A message from csev@umich.edu to cwen@iupui.edu about meeting @2PM'
    +lst = re.findall('\\S+@\\S+', s)
    +print(lst)
    " + answers: + - "['csev@umich.edu', 'cwen@iupui.edu']" + - "['csev@umich.edu']" + - "['umich.edu', 'iupui.edu']" + - "['csev@', 'cwen@']" + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-c.english.md new file mode 100644 index 0000000000..7ce5dbef00 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/regex-c.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f0b0b6c005b0e76f070 +title: RegEx C +challengeType: 11 +isRequired: true +videoId: xCjFU9G6x48 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will search for a "$" in a regular expression?' + answers: + - '$' + - '\dollar\' + - '\$' + - '!$' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-a.english.md new file mode 100644 index 0000000000..448df6148a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f070b6c005b0e76f060 +title: Strings A +challengeType: 11 +isRequired: true +videoId: LYZj207fKpQ +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What will the following code print? +
    for n in "banana":
    print(n)
    ' + answers: + - 'n
    n' + - '0
    1' + - '0
    1
    2
    3
    4
    5' + - 'b
    a
    n
    a
    n
    a' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-b.english.md new file mode 100644 index 0000000000..1931fa9957 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/strings-b.english.md @@ -0,0 +1,32 @@ +--- +id: 5e7b9f070b6c005b0e76f061 +title: Strings B +challengeType: 11 +isRequired: true +videoId: KgT_fYLXnyk +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: 'What is the value of i in the following code? +
    word = "bananana"
    +i = word.find("na")
    ' + answers: + - 'nanana' + - '2' + - '3' + - 'True' + - 'na' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-a.english.md new file mode 100644 index 0000000000..94aa04ccac --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f0a0b6c005b0e76f06c +title: Tuples A +challengeType: 11 +isRequired: true +videoId: 3Lxpladfh2k +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the following code print? +
    d = dict()
    d['quincy'] = 1
    d['beau'] = 5
    d['kris'] = 9
    for (k,i) in d.items():
    print(k, i)
    " + answers: + - 'k i
    k i
    k i' + - 'quincy 0
    beau 1
    kris 2' + - 'quincy 1
    beau 5
    kris 9' + - '1 quincy
    5 beau
    9 kris' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-b.english.md new file mode 100644 index 0000000000..206aaed11a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/tuples-b.english.md @@ -0,0 +1,30 @@ +--- +id: 5e7b9f0b0b6c005b0e76f06d +title: Tuples B +challengeType: 11 +isRequired: true +videoId: dZXzBXUxxCs +--- + +## Description +
    +More resources: +- Exercise +
    + +## Tests +
    + +```yml +question: + text: 'Which does the same thing as the following code: +
    lst = []
    for key, val in counts.items():
    newtup = (val, key)
    lst.append(newtup)

    lst = sorted(lst, reverse=True)
    print(lst)
    '
    +  answers:
    +    - 'print( sorted( [ (k,v) for k,v in counts.items() ] ) )'
    +    - 'print( [ (k,v) for k,v in counts.items().sorted() ] )'
    +    - 'print( sorted( [ (k,v) for k,v in counts.keys() ] ) )'
    +    - 'print( [ (k,v) for k,v in counts.values().sort() ] )'
    +  solution: 1
    +```
    +
    +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-a.english.md new file mode 100644 index 0000000000..099c8f3c17 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f690b6c005b0e76f095 +title: Viz A +challengeType: 11 +isRequired: true +videoId: e3lydkH0prw +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'Most data needs to be ______ before using it.' + answers: + - 'converted to JSON format' + - 'graphed' + - 'cleaned' + - 'memorized' + - 'turned into song' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-b.english.md new file mode 100644 index 0000000000..adbe60ca47 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-b.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f6a0b6c005b0e76f096 +title: Viz B +challengeType: 11 +isRequired: true +videoId: 3muQV-Im3Z0 +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'How does the page rank algorithm work?' + answers: + - 'It determines which pages are most highly connected.' + - 'It ranks pages based on view counts.' + - 'It figures out which pages contain the most important content.' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-c.english.md new file mode 100644 index 0000000000..ec65d8573d --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/viz-c.english.md @@ -0,0 +1,35 @@ +--- +id: 5e7b9f6a0b6c005b0e76f097 +title: Viz C +challengeType: 11 +isRequired: true +videoId: RYdW660KkaQ +--- + +## Description +
    +More resources: +- Exercise: Geodata +- Exercise: Gmane Model +- Exercise: Gmane Spider +- Exercise: Gmane Viz +- Exercise: Page Rank +- Exercise: Page Spider +- Exercise: Page Viz +
    + +## Tests +
    + +```yml +question: + text: 'Which is a common JavaScript visualization library?' + answers: + - 'DataViz.js' + - 'D3' + - 'Lowcharts' + - 'DATA6' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-a.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-a.english.md new file mode 100644 index 0000000000..b351797125 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-a.english.md @@ -0,0 +1,29 @@ +--- +id: 5e7b9f0e0b6c005b0e76f07a +title: Web Services A +challengeType: 11 +isRequired: true +videoId: oNl1OVDPGKE +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What are the two most common ways to send data over the internet?' + answers: + - 'JSON and TXT' + - 'JSON and XML' + - 'XML and TXT' + - 'XML and PHP' + - 'PHP and TXT' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-b.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-b.english.md new file mode 100644 index 0000000000..27166ebe62 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-b.english.md @@ -0,0 +1,33 @@ +--- +id: 5e7b9f0e0b6c005b0e76f07b +title: Web Services B +challengeType: 11 +isRequired: true +videoId: _pZ0srbg7So +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is wrong with the following XML? +
    <person>
    +<name>Chuck</name>
    +<phone type="intl">
    +1 734 303 4456
    +<email hide="yes" />
    +</person>
    ' + answers: + - 'Email tag is missing closing tag.' + - 'Spacing will cause XML to be invalid.' + - 'Phone tag is missing closing tag.' + - 'Plain text should be encoded using UTF-8.' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-c.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-c.english.md new file mode 100644 index 0000000000..54afab9a8a --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-c.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f0e0b6c005b0e76f07c +title: Web Services C +challengeType: 11 +isRequired: true +videoId: yWU9kTxW-nc +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What is XSD?' + answers: + - 'The W3C Schema specification for XML.' + - 'The standard JSON schema from MOZ.' + - 'Extensible Situational Driver' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-d.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-d.english.md new file mode 100644 index 0000000000..b5ea79a31c --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-d.english.md @@ -0,0 +1,35 @@ +--- +id: 5e7b9f140b6c005b0e76f07d +title: Web Services D +challengeType: 11 +isRequired: true +videoId: ZJE-U56BppM +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: "What will the following code print? +
    import json
    +
    +data = '''
    [
    { 'id' : '001',
    'x' : '2',
    'name' : 'Quincy'
    } ,
    { 'id' : '009',
    'x' : '7',
    'name' : 'Mrugesh'
    }
    ]'''
    +
    +info = json.loads(data)
    +print(info[1]['name'])
    " + answers: + - 'Quincy' + - 'Mrugesh' + - '001' + - '009' + - '[Error]' + solution: 2 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-e.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-e.english.md new file mode 100644 index 0000000000..a45825c358 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-e.english.md @@ -0,0 +1,27 @@ +--- +id: 5e7b9f140b6c005b0e76f07e +title: Web Services E +challengeType: 11 +isRequired: true +videoId: muerlsCHExI +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'With a services oriented approach to developing web apps, where is the data located.' + answers: + - 'Spread across many computer systems connected via the internet or internal network.' + - 'Within different services on the main web server.' + - 'On a separate database server.' + solution: 1 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-f.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-f.english.md new file mode 100644 index 0000000000..997265aec3 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-f.english.md @@ -0,0 +1,28 @@ +--- +id: 5e7b9f150b6c005b0e76f07f +title: Web Services F +challengeType: 11 +isRequired: true +videoId: oUNn1psfBJg +--- + +## Description +
    + +
    + +## Tests +
    + +```yml +question: + text: 'What does API stand for?' + answers: + - 'Application Portable Intelligence' + - 'Accociate Programming International' + - 'Application Program Interface' + - 'Action Portable Interface' + solution: 3 +``` + +
    diff --git a/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-g.english.md b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-g.english.md new file mode 100644 index 0000000000..7f2d7233d2 --- /dev/null +++ b/curriculum/challenges/english/07-scientific-computing-with-python/lectures-python-for-everybody/web-services-g.english.md @@ -0,0 +1,32 @@ +--- +id: 5e7b9f150b6c005b0e76f080 +title: Web Services G +challengeType: 11 +isRequired: true +videoId: pI-g0lI8ngs +--- + +## Description +
    +More resources: +- Exercise: GeoJSON +- Exercise: JSON +- Exercise: Twitter +- Exercise: XML +
    + +## Tests +
    + +```yml +question: + text: 'When making a request from the Twitter API, what information must always be sent with the request?' + answers: + - 'Twitter username' + - 'date range' + - 'search term' + - 'key' + solution: 4 +``` + +
    diff --git a/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-a.english.md b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-a.english.md new file mode 100644 index 0000000000..d272f53fe7 --- /dev/null +++ b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-a.english.md @@ -0,0 +1,50 @@ +--- +id: 5e6a54a558d3af90110a60a0 +title: Introduction A +challengeType: 10 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: 'It should pass all Python tests.' + testString: '' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```py + # Python challenges don't need solutions, + # because they would need to be tested against a full working project. + # Please check our contributing guidelines to learn more. +``` + +
    diff --git a/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-b.english.md b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-b.english.md new file mode 100644 index 0000000000..a0550d7f0a --- /dev/null +++ b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-b.english.md @@ -0,0 +1,50 @@ +--- +id: 5e6a54af58d3af90110a60a1 +title: Introduction B +challengeType: 10 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: 'It should pass all Python tests.' + testString: '' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```py + # Python challenges don't need solutions, + # because they would need to be tested against a full working project. + # Please check our contributing guidelines to learn more. +``` + +
    diff --git a/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-c.english.md b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-c.english.md new file mode 100644 index 0000000000..2444675506 --- /dev/null +++ b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-c.english.md @@ -0,0 +1,50 @@ +--- +id: 5e6a54ba58d3af90110a60a2 +title: Introduction C +challengeType: 10 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: 'It should pass all Python tests.' + testString: '' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```py + # Python challenges don't need solutions, + # because they would need to be tested against a full working project. + # Please check our contributing guidelines to learn more. +``` + +
    diff --git a/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-d.english.md b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-d.english.md new file mode 100644 index 0000000000..5b23ba51a0 --- /dev/null +++ b/curriculum/challenges/english/08-data-analysis-with-python/lectures-python-for-everybody/introduction-d.english.md @@ -0,0 +1,50 @@ +--- +id: 5e6a54c358d3af90110a60a3 +title: Introduction D +challengeType: 10 +isRequired: true +--- + +## Description +
    +In this challenge you must analyze demographic data using Pandas. You are given a dataset of demographic data that was extracted from the 1994 Census database. + +You can access the full project description and starter code on repl.it. + +After going to that link, fork the project. Once you complete the project based on the instructions in 'README.md', submit your project link below. + +We are still developing the interactive instructional part of the data analysis with Python curriculum. For now, you will have to use other resources to learn how to pass this challenge. +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: 'It should pass all Python tests.' + testString: '' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```py + # Python challenges don't need solutions, + # because they would need to be tested against a full working project. + # Please check our contributing guidelines to learn more. +``` + +
    diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/anonymous-message-board.english.md b/curriculum/challenges/english/09-information-security/information-security-projects/anonymous-message-board.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/anonymous-message-board.english.md rename to curriculum/challenges/english/09-information-security/information-security-projects/anonymous-message-board.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/port-scanner.english.md b/curriculum/challenges/english/09-information-security/information-security-projects/port-scanner.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/port-scanner.english.md rename to curriculum/challenges/english/09-information-security/information-security-projects/port-scanner.english.md diff --git a/curriculum/challenges/english/09-information-security/information-security-projects/real-time-multiplayer-game.english.md b/curriculum/challenges/english/09-information-security/information-security-projects/real-time-multiplayer-game.english.md new file mode 100644 index 0000000000..b67a46cd70 --- /dev/null +++ b/curriculum/challenges/english/09-information-security/information-security-projects/real-time-multiplayer-game.english.md @@ -0,0 +1,47 @@ +--- +id: 5e601c775ac9d0ecd8b94aff +title: Real Time Multiplayer Game +challengeType: 4 +isRequired: true +forumTopicId: 301572 +--- + +## Description +
    +COMING SOON +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - text: test + testString: 'test' + +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```js +/** + Backend challenges don't need solutions, + because they would need to be tested against a full working project. + Please check our contributing guidelines to learn more. +*/ +``` + +
    diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/sha-1-password-cracker.english.md b/curriculum/challenges/english/09-information-security/information-security-projects/sha-1-password-cracker.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/sha-1-password-cracker.english.md rename to curriculum/challenges/english/09-information-security/information-security-projects/sha-1-password-cracker.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/stock-price-checker.english.md b/curriculum/challenges/english/09-information-security/information-security-projects/stock-price-checker.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-and-quality-assurance-projects/stock-price-checker.english.md rename to curriculum/challenges/english/09-information-security/information-security-projects/stock-price-checker.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/ask-browsers-to-access-your-site-via-https-only-with-helmet.hsts.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/avoid-inferring-the-response-mime-type-with-helmet.nosniff.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/configure-helmet-using-the-parent-helmet-middleware.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/disable-client-side-caching-with-helmet.nocache.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/disable-client-side-caching-with-helmet.nocache.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/disable-client-side-caching-with-helmet.nocache.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/disable-client-side-caching-with-helmet.nocache.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/disable-dns-prefetching-with-helmet.dnsprefetchcontrol.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-asynchronously.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hash-and-compare-passwords-synchronously.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hide-potentially-dangerous-information-using-helmet.hidepoweredby.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hide-potentially-dangerous-information-using-helmet.hidepoweredby.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/hide-potentially-dangerous-information-using-helmet.hidepoweredby.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/hide-potentially-dangerous-information-using-helmet.hidepoweredby.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/install-and-require-helmet.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/install-and-require-helmet.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/install-and-require-helmet.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/install-and-require-helmet.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-clickjacking-with-helmet.frameguard.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/mitigate-the-risk-of-cross-site-scripting-xss-attacks-with-helmet.xssfilter.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-cross-site-scripting-xss-attacks-with-helmet.xssfilter.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/mitigate-the-risk-of-cross-site-scripting-xss-attacks-with-helmet.xssfilter.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/mitigate-the-risk-of-cross-site-scripting-xss-attacks-with-helmet.xssfilter.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/prevent-ie-from-opening-untrusted-html-with-helmet.ienoopen.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/prevent-ie-from-opening-untrusted-html-with-helmet.ienoopen.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/prevent-ie-from-opening-untrusted-html-with-helmet.ienoopen.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/prevent-ie-from-opening-untrusted-html-with-helmet.ienoopen.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/set-a-content-security-policy-with-helmet.contentsecuritypolicy.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/set-a-content-security-policy-with-helmet.contentsecuritypolicy.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/set-a-content-security-policy-with-helmet.contentsecuritypolicy.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/set-a-content-security-policy-with-helmet.contentsecuritypolicy.english.md diff --git a/curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/understand-bcrypt-hashes.english.md b/curriculum/challenges/english/09-information-security/information-security-with-helmetjs/understand-bcrypt-hashes.english.md similarity index 100% rename from curriculum/challenges/english/06-information-security-and-quality-assurance/information-security-with-helmetjs/understand-bcrypt-hashes.english.md rename to curriculum/challenges/english/09-information-security/information-security-with-helmetjs/understand-bcrypt-hashes.english.md diff --git a/curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/book-recommendation-engine-using-knn.english.md b/curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/book-recommendation-engine-using-knn.english.md similarity index 100% rename from curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/book-recommendation-engine-using-knn.english.md rename to curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/book-recommendation-engine-using-knn.english.md diff --git a/curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/cat-and-dog-image-classifier.english.md b/curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/cat-and-dog-image-classifier.english.md similarity index 100% rename from curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/cat-and-dog-image-classifier.english.md rename to curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/cat-and-dog-image-classifier.english.md diff --git a/curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/linear-regression-health-costs-calculator.english.md b/curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/linear-regression-health-costs-calculator.english.md similarity index 100% rename from curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/linear-regression-health-costs-calculator.english.md rename to curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/linear-regression-health-costs-calculator.english.md diff --git a/curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/neural-network-sms-text-classifier.md b/curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/neural-network-sms-text-classifier.md similarity index 100% rename from curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/neural-network-sms-text-classifier.md rename to curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/neural-network-sms-text-classifier.md diff --git a/curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.english.md b/curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.english.md similarity index 100% rename from curriculum/challenges/english/09-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.english.md rename to curriculum/challenges/english/11-machine-learning-with-python/machine-learning-with-python-projects/rock-paper-scissors.english.md diff --git a/curriculum/challenges/english/11-certificates/apis-and-microservices-certificate/apis-and-microservices-certificate.english.md b/curriculum/challenges/english/12-certificates/apis-and-microservices-certificate/apis-and-microservices-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/apis-and-microservices-certificate/apis-and-microservices-certificate.english.md rename to curriculum/challenges/english/12-certificates/apis-and-microservices-certificate/apis-and-microservices-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/data-analysis-with-python-certificate/data-analysis-with-python-certificate.english.md b/curriculum/challenges/english/12-certificates/data-analysis-with-python-certificate/data-analysis-with-python-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/data-analysis-with-python-certificate/data-analysis-with-python-certificate.english.md rename to curriculum/challenges/english/12-certificates/data-analysis-with-python-certificate/data-analysis-with-python-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/data-visualization-certificate/data-visualization-certificate.english.md b/curriculum/challenges/english/12-certificates/data-visualization-certificate/data-visualization-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/data-visualization-certificate/data-visualization-certificate.english.md rename to curriculum/challenges/english/12-certificates/data-visualization-certificate/data-visualization-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/front-end-libraries-certificate/front-end-libraries-certificate.english.md b/curriculum/challenges/english/12-certificates/front-end-libraries-certificate/front-end-libraries-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/front-end-libraries-certificate/front-end-libraries-certificate.english.md rename to curriculum/challenges/english/12-certificates/front-end-libraries-certificate/front-end-libraries-certificate.english.md diff --git a/curriculum/challenges/english/12-certificates/information-security-certificate/information-security-certificate.english.md b/curriculum/challenges/english/12-certificates/information-security-certificate/information-security-certificate.english.md new file mode 100644 index 0000000000..824cd9f64a --- /dev/null +++ b/curriculum/challenges/english/12-certificates/information-security-certificate/information-security-certificate.english.md @@ -0,0 +1,49 @@ +--- +id: 5e6021435ac9d0ecd8b94b00 +title: 'Information Security Certificate' +challengeType: 7 +isPrivate: true +--- + +## Description +
    + +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - id: 587d824a367417b2b2512c44 + title: Stock Price Checker + - id: 587d824a367417b2b2512c45 + title: Anonymous Message Board + - id: 5e46f979ac417301a38fb932 + title: Port Scanner + - id: 5e601c775ac9d0ecd8b94aff + title: Real Time Multiplayer Game + - id: 5e46f983ac417301a38fb933 + title: SHA-1 Password Cracker +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```js +// solution required +``` + +
    diff --git a/curriculum/challenges/english/11-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md b/curriculum/challenges/english/12-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md similarity index 86% rename from curriculum/challenges/english/11-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md rename to curriculum/challenges/english/12-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md index ad69f32119..dbc35f1a1e 100644 --- a/curriculum/challenges/english/11-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md +++ b/curriculum/challenges/english/12-certificates/information-securtiy-and-quality-assurance-certificate/information-securtiy-and-quality-assurance-certificate.english.md @@ -31,10 +31,6 @@ tests: title: Stock Price Checker - id: 587d824a367417b2b2512c45 title: Anonymous Message Board - - id: 5e46f979ac417301a38fb932 - title: Port Scanner - - id: 5e46f983ac417301a38fb933 - title: SHA-1 Password Cracker ``` diff --git a/curriculum/challenges/english/11-certificates/javascript-algorithms-and-data-structures-certificate/javascript-algorithms-and-data-structures-certificate.english.md b/curriculum/challenges/english/12-certificates/javascript-algorithms-and-data-structures-certificate/javascript-algorithms-and-data-structures-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/javascript-algorithms-and-data-structures-certificate/javascript-algorithms-and-data-structures-certificate.english.md rename to curriculum/challenges/english/12-certificates/javascript-algorithms-and-data-structures-certificate/javascript-algorithms-and-data-structures-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/legacy-back-end-certificate/legacy-back-end-certificate.english.md b/curriculum/challenges/english/12-certificates/legacy-back-end-certificate/legacy-back-end-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/legacy-back-end-certificate/legacy-back-end-certificate.english.md rename to curriculum/challenges/english/12-certificates/legacy-back-end-certificate/legacy-back-end-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/legacy-data-visualization-certificate/legacy-data-visualization-certificate.english.md b/curriculum/challenges/english/12-certificates/legacy-data-visualization-certificate/legacy-data-visualization-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/legacy-data-visualization-certificate/legacy-data-visualization-certificate.english.md rename to curriculum/challenges/english/12-certificates/legacy-data-visualization-certificate/legacy-data-visualization-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/legacy-front-end-certificate/legacy-front-end-certificate.english.md b/curriculum/challenges/english/12-certificates/legacy-front-end-certificate/legacy-front-end-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/legacy-front-end-certificate/legacy-front-end-certificate.english.md rename to curriculum/challenges/english/12-certificates/legacy-front-end-certificate/legacy-front-end-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/machine-learning-with-python-certificate/machine-learning-with-python-certificate.english.md b/curriculum/challenges/english/12-certificates/machine-learning-with-python-certificate/machine-learning-with-python-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/machine-learning-with-python-certificate/machine-learning-with-python-certificate.english.md rename to curriculum/challenges/english/12-certificates/machine-learning-with-python-certificate/machine-learning-with-python-certificate.english.md diff --git a/curriculum/challenges/english/12-certificates/quality-assurance-certificate/quality-assurance-certificate.english.md b/curriculum/challenges/english/12-certificates/quality-assurance-certificate/quality-assurance-certificate.english.md new file mode 100644 index 0000000000..35fe85912f --- /dev/null +++ b/curriculum/challenges/english/12-certificates/quality-assurance-certificate/quality-assurance-certificate.english.md @@ -0,0 +1,49 @@ +--- +id: 5e611829481575a52dc59c0e +title: 'Quality Assurance Certificate' +challengeType: 7 +isPrivate: true +--- + +## Description +
    + +
    + +## Instructions +
    + +
    + +## Tests +
    + +```yml +tests: + - id: 587d8249367417b2b2512c41 + title: Metric-Imperial Converter + - id: 587d8249367417b2b2512c42 + title: Issue Tracker + - id: 587d824a367417b2b2512c43 + title: Personal Library + - id: 5e601bf95ac9d0ecd8b94afd + title: Sudoku Solver + - id: 5e601c0d5ac9d0ecd8b94afe + title: American British Translator +``` + +
    + +## Challenge Seed +
    + +
    + +## Solution +
    + +```js +// solution required +``` + +
    diff --git a/curriculum/challenges/english/11-certificates/responsive-web-design-certificate/responsive-web-design-certificate.english.md b/curriculum/challenges/english/12-certificates/responsive-web-design-certificate/responsive-web-design-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/responsive-web-design-certificate/responsive-web-design-certificate.english.md rename to curriculum/challenges/english/12-certificates/responsive-web-design-certificate/responsive-web-design-certificate.english.md diff --git a/curriculum/challenges/english/11-certificates/scientific-computing-with-python-certificate/scientific-computing-with-python-certificate.english.md b/curriculum/challenges/english/12-certificates/scientific-computing-with-python-certificate/scientific-computing-with-python-certificate.english.md similarity index 100% rename from curriculum/challenges/english/11-certificates/scientific-computing-with-python-certificate/scientific-computing-with-python-certificate.english.md rename to curriculum/challenges/english/12-certificates/scientific-computing-with-python-certificate/scientific-computing-with-python-certificate.english.md diff --git a/curriculum/schema/challengeSchema.js b/curriculum/schema/challengeSchema.js index a64ad56a60..f7846817cd 100644 --- a/curriculum/schema/challengeSchema.js +++ b/curriculum/schema/challengeSchema.js @@ -52,6 +52,14 @@ function getSchemaForLang(lang) { isRequired: Joi.bool(), name: Joi.string(), order: Joi.number(), + // video challenges only: + question: Joi.object().keys({ + text: Joi.string().required(), + answers: Joi.array() + .items(Joi.string()) + .required(), + solution: Joi.number().required() + }), required: Joi.array().items( Joi.object().keys({ link: Joi.string(), diff --git a/package.json b/package.json index 545070c4bb..53ae80c19e 100644 --- a/package.json +++ b/package.json @@ -117,5 +117,6 @@ "hooks": { "pre-commit": "lint-staged" } - } + }, + "dependencies": {} } diff --git a/tools/scripts/seed/seedAuthUser.js b/tools/scripts/seed/seedAuthUser.js index 74b9a43a41..adb75b7d9b 100644 --- a/tools/scripts/seed/seedAuthUser.js +++ b/tools/scripts/seed/seedAuthUser.js @@ -63,6 +63,8 @@ MongoClient.connect(MONGOHQ_URL, { useNewUrlParser: true }, function( isJsAlgoDataStructCert: false, isApisMicroservicesCert: false, isInfosecQaCert: false, + isQaCert: false, + isInfosecCert: false, is2018FullStackCert: false, isSciCompPyCert: false, isDataAnalysisPyCert: false, diff --git a/utils/index.js b/utils/index.js index a1893c6e4e..f25aee60db 100644 --- a/utils/index.js +++ b/utils/index.js @@ -6,6 +6,8 @@ const idToTitle = new Map( '5a553ca864b52e1d8bceea14': 'Data Visualization', '561acd10cb82ac38a17513bc': 'Front End Libraries', '561add10cb82ac38a17213bc': 'Information Security and Quality Assurance', + '5e611829481575a52dc59c0e': 'Quality Assurance', + '5e6021435ac9d0ecd8b94b00': 'Information Security', '561abd10cb81ac38a17513bc': 'JavaScript Algorithms and Data Structures', '561add10cb82ac38a17513bc': 'Responsive Web Design', '660add10cb82ac38a17513be': 'Legacy Back End',