From 06fe5390baf037fb7f08ae540ff483d25db9d04c Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 24 Nov 2014 18:07:03 -0800 Subject: [PATCH 01/48] seems to attempt to write timestamp --- app.js | 3 +- controllers/challenges.js | 2 +- models/User.js | 1 + views/account/profile.jade | 4 + views/partials/challenges.jade | 248 ++++++++++++++++----------------- views/partials/navbar.jade | 2 +- 6 files changed, 133 insertions(+), 127 deletions(-) diff --git a/app.js b/app.js index 02bbb774fb..2f027fb525 100644 --- a/app.js +++ b/app.js @@ -163,8 +163,9 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink); * API examples routes. */ app.post('/completed_challenge', function(req, res) { - req.user.challengesCompleted.push(parseInt(req.body.cn)); + req.user.challengesHash[req.body.cn] = Math.round(+new Date()/1000); req.user.save(); + console.log(req.user.challengesHash); }); /** diff --git a/controllers/challenges.js b/controllers/challenges.js index 71b86c1bd1..e7f951f0cc 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -19,7 +19,7 @@ exports.returnChallenge = function(req, res, next) { video: c.video, time: c.time, steps: c.steps, - cc: req.user.challengesCompleted + cc: req.user.challengesHash }); }); }; \ No newline at end of file diff --git a/models/User.js b/models/User.js index d4a265ccc7..5bc9f8553e 100644 --- a/models/User.js +++ b/models/User.js @@ -14,6 +14,7 @@ var userSchema = new mongoose.Schema({ instagram: String, tokens: Array, challengesCompleted: { type: Array, default: [] }, + challengesHash: { type: Object, default: {} }, profile: { name: { type: String, default: '' }, diff --git a/views/account/profile.jade b/views/account/profile.jade index a7b443c7a0..69ef916bce 100644 --- a/views/account/profile.jade +++ b/views/account/profile.jade @@ -29,6 +29,10 @@ block content span.ion-edit | Update my profile + h1 Completed Challenges + ul + //each val, index in user.challengesHash + //li= index + ': ' + val h3 Danger Zone button.btn.btn-danger.confirm-deletion span.ion-trash-b diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 7f3cd3d740..78ff771a06 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -3,128 +3,128 @@ .panel-body ol(start='0') li - a(href="/challenges/0", class="#{ cc.indexOf(0) > -1 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp + a(href="/challenges/0", class="#{ cc.hasOwnProperty('0') ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp |   (1 min) - li - a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room - |   (5 mins) - li - a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet - |   (5 mins) - li - a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor - |   (5 mins) - li - a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website - |   (5 mins) - li - a(href="/challenges/5", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website - |   (10 mins) - li - a(href="/challenges/6", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track - |   (7 hrs) - li - a(href="/challenges/7", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen - |   (10 mins) - li - a(href="/challenges/8", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery - |   (4 hrs) - li - a(href="/challenges/9", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") jQuery Exercises - |   (3 hrs) - li - a(href="/challenges/10", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools - |   (2 hrs) - li - a(href="/challenges/11", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch - |   (10 mins) - li - a(href="/challenges/12", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations - |   (15 mins) - li - a(href="/challenges/13", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track - |   (10 hrs) - li - a(href="/challenges/14", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science - |   (24 hrs) - li - a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP - |   (30 mins) - li - a(href="/challenges/16", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions - |   (1 hr) - li - a(href="/challenges/17", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session - |   (30 mins | Pair) - li - a(href="/challenges/18", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - li - a(href="/challenges/19", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course - |   (1 hr) - li - a(href="/challenges/20", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course - |   (4 hrs | Pair) - li - a(href="/challenges/21", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course - |   (1 hrs | Pair) - li - a(href="/challenges/22", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - li - a.disabled(href="/challenges/23", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine - |   (5 hrs | Pair) - li - a.disabled(href="/challenges/24", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure - |   (5 hrs | Pair) - li - a.disabled(href="/challenges/25", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - li - a.disabled(href="/challenges/26", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Code School's Try Git - |   (30 mins) - li - a.disabled(href="/challenges/27", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Install Node.js - |   (1 hr) - li - a.disabled(href="/challenges/28", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Clone a Github Repo - |   (15 mins) - li - a.disabled(href="/challenges/29", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku - |   (15 mins) - li - a.disabled(href="/challenges/30", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS - |   (5 hrs) - li - a.disabled(href="/challenges/31", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Try MongoDB - |   (30 mins) - li - a.disabled(href="/challenges/32", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API - |   (1 hr) - li - a.disabled(href="/challenges/33", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Build your first API - |   (10 hrs | Pair) - li - a.disabled(href="/challenges/34", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping - |   (10 hrs | Pair) - li - a.disabled(href="/challenges/35", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS - |   (5 hrs) - li - a.disabled(href="/challenges/36", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/37", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/38", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/39", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project - |   (150 hrs | Pair) - li - a.disabled(href="/challenges/40", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project - |   (150 hrs | Pair) - li - a.disabled(href="/challenges/41", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview - |   (5 hrs) \ No newline at end of file + //li + // a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room + // |   (5 mins) + //li + // a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet + // |   (5 mins) + //li + // a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor + // |   (5 mins) + //li + // a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website + // |   (5 mins) + //li + // a(href="/challenges/5", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website + // |   (10 mins) + //li + // a(href="/challenges/6", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track + // |   (7 hrs) + //li + // a(href="/challenges/7", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen + // |   (10 mins) + //li + // a(href="/challenges/8", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery + // |   (4 hrs) + //li + // a(href="/challenges/9", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") jQuery Exercises + // |   (3 hrs) + //li + // a(href="/challenges/10", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools + // |   (2 hrs) + //li + // a(href="/challenges/11", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch + // |   (10 mins) + //li + // a(href="/challenges/12", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations + // |   (15 mins) + //li + // a(href="/challenges/13", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track + // |   (10 hrs) + //li + // a(href="/challenges/14", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science + // |   (24 hrs) + //li + // a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP + // |   (30 mins) + //li + // a(href="/challenges/16", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions + // |   (1 hr) + //li + // a(href="/challenges/17", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session + // |   (30 mins | Pair) + //li + // a(href="/challenges/18", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte + // |   (15 hrs | Pair) + //li + // a(href="/challenges/19", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course + // |   (1 hr) + //li + // a(href="/challenges/20", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course + // |   (4 hrs | Pair) + //li + // a(href="/challenges/21", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course + // |   (1 hrs | Pair) + //li + // a(href="/challenges/22", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte + // |   (15 hrs | Pair) + //li + // a.disabled(href="/challenges/23", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine + // |   (5 hrs | Pair) + //li + // a.disabled(href="/challenges/24", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure + // |   (5 hrs | Pair) + //li + // a.disabled(href="/challenges/25", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte + // |   (15 hrs | Pair) + //li + // a.disabled(href="/challenges/26", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Code School's Try Git + // |   (30 mins) + //li + // a.disabled(href="/challenges/27", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Install Node.js + // |   (1 hr) + //li + // a.disabled(href="/challenges/28", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Clone a Github Repo + // |   (15 mins) + //li + // a.disabled(href="/challenges/29", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku + // |   (15 mins) + //li + // a.disabled(href="/challenges/30", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS + // |   (5 hrs) + //li + // a.disabled(href="/challenges/31", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Try MongoDB + // |   (30 mins) + //li + // a.disabled(href="/challenges/32", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API + // |   (1 hr) + //li + // a.disabled(href="/challenges/33", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Build your first API + // |   (10 hrs | Pair) + //li + // a.disabled(href="/challenges/34", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping + // |   (10 hrs | Pair) + //li + // a.disabled(href="/challenges/35", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS + // |   (5 hrs) + //li + // a.disabled(href="/challenges/36", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat + // |   (50 hrs | Pair) + //li + // a.disabled(href="/challenges/37", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit + // |   (50 hrs | Pair) + //li + // a.disabled(href="/challenges/38", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest + // |   (50 hrs | Pair) + //li + // a.disabled(href="/challenges/39", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project + // |   (150 hrs | Pair) + //li + // a.disabled(href="/challenges/40", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project + // |   (150 hrs | Pair) + //li + // a.disabled(href="/challenges/41", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview + // |   (5 hrs) \ No newline at end of file diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index bfce8b0d1b..9fa4f46a35 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,7 +20,7 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - | #{user.profile.name || user.email || user.id} [ #{user.challengesCompleted.length} ]  + | #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  i.caret ul.dropdown-menu li From 1a0acdea82653adf0c6ab55d0174447834e7c850 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 24 Nov 2014 18:48:07 -0800 Subject: [PATCH 02/48] attempt to modify User.js --- models/User.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/User.js b/models/User.js index 5bc9f8553e..8add8e69e3 100644 --- a/models/User.js +++ b/models/User.js @@ -14,7 +14,7 @@ var userSchema = new mongoose.Schema({ instagram: String, tokens: Array, challengesCompleted: { type: Array, default: [] }, - challengesHash: { type: Object, default: {} }, + challengesHash: { type: {}, default: { '-1': 'void'} }, profile: { name: { type: String, default: '' }, From d973619f4a8474e28c3de6a4b93b6b08d4c11c95 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 25 Nov 2014 11:17:07 -0800 Subject: [PATCH 03/48] writes completed challenges to database --- app.js | 26 +++++++++++++++++++++++--- models/User.js | 2 +- views/partials/challenges.jade | 4 ++-- views/partials/navbar.jade | 2 +- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 2f027fb525..5f57bf1a4e 100644 --- a/app.js +++ b/app.js @@ -33,6 +33,10 @@ var userController = require('./controllers/user'); var apiController = require('./controllers/api'); var contactController = require('./controllers/contact'); +/** + * User model + */ +var User = require('./models/User'); /** * API keys and Passport configuration. */ @@ -163,9 +167,25 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink); * API examples routes. */ app.post('/completed_challenge', function(req, res) { - req.user.challengesHash[req.body.cn] = Math.round(+new Date()/1000); - req.user.save(); - console.log(req.user.challengesHash); + console.log(req.user); + + User.findById(req.user.id, function (err, user) { + if (err) { + console.log(err); + res.status(500); + return res.send('something went wrong'); + } + user.challengesHash[parseInt(req.body.cn)] = Math.round(+new Date()/1000); + user.save(function(err, newDats) { + if (err) { + console.log(err); + res.status(500); + return res.send('something went wrong'); + } + console.log('Suer', user); + res.status(200).send('saved'); + }); + }); }); /** diff --git a/models/User.js b/models/User.js index 8add8e69e3..00d31b3365 100644 --- a/models/User.js +++ b/models/User.js @@ -14,7 +14,7 @@ var userSchema = new mongoose.Schema({ instagram: String, tokens: Array, challengesCompleted: { type: Array, default: [] }, - challengesHash: { type: {}, default: { '-1': 'void'} }, + challengesHash: {}, profile: { name: { type: String, default: '' }, diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 78ff771a06..2d3e9c5b88 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -3,8 +3,8 @@ .panel-body ol(start='0') li - a(href="/challenges/0", class="#{ cc.hasOwnProperty('0') ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp - |   (1 min) + //a(href="/challenges/0", class="#{ cc.hasOwnProperty('0') ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp + //|   (1 min) //li // a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room // |   (5 mins) diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 9fa4f46a35..471aceef08 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,7 +20,7 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - | #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  + //| #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  i.caret ul.dropdown-menu li From 9b9554c47d61228facd3b1f081afd7af307e81f9 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 25 Nov 2014 11:31:35 -0800 Subject: [PATCH 04/48] update the hash to have default values --- models/User.js | 204 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 2 deletions(-) diff --git a/models/User.js b/models/User.js index 00d31b3365..5d9254a04e 100644 --- a/models/User.js +++ b/models/User.js @@ -14,8 +14,208 @@ var userSchema = new mongoose.Schema({ instagram: String, tokens: Array, challengesCompleted: { type: Array, default: [] }, - challengesHash: {}, - + challengesHash: { + 0: { + type: Number, + default: 0, + }, + 1: { + type: Number, + default: 0, + }, + 2: { + type: Number, + default: 0, + }, + 3: { + type: Number, + default: 0, + }, + 4: { + type: Number, + default: 0, + }, + 5: { + type: Number, + default: 0, + }, + 6: { + type: Number, + default: 0, + }, + 7: { + type: Number, + default: 0, + }, + 8: { + type: Number, + default: 0, + }, + 9: { + type: Number, + default: 0, + }, + 10: { + type: Number, + default: 0, + }, + 11: { + type: Number, + default: 0, + }, + 12: { + type: Number, + default: 0, + }, + 13: { + type: Number, + default: 0, + }, + 14: { + type: Number, + default: 0, + }, + 15: { + type: Number, + default: 0, + }, + 16: { + type: Number, + default: 0, + }, + 17: { + type: Number, + default: 0, + }, + 18: { + type: Number, + default: 0, + }, + 19: { + type: Number, + default: 0, + }, + 20: { + type: Number, + default: 0, + }, + 21: { + type: Number, + default: 0, + }, + 22: { + type: Number, + default: 0, + }, + 23: { + type: Number, + default: 0, + }, + 24: { + type: Number, + default: 0, + }, + 25: { + type: Number, + default: 0, + }, + 26: { + type: Number, + default: 0, + }, + 27: { + type: Number, + default: 0, + }, + 28: { + type: Number, + default: 0, + }, + 29: { + type: Number, + default: 0, + }, + 30: { + type: Number, + default: 0, + }, + 31: { + type: Number, + default: 0, + }, + 32: { + type: Number, + default: 0, + }, + 33: { + type: Number, + default: 0, + }, + 34: { + type: Number, + default: 0, + }, + 35: { + type: Number, + default: 0, + }, + 36: { + type: Number, + default: 0, + }, + 37: { + type: Number, + default: 0, + }, + 38: { + type: Number, + default: 0, + }, + 39: { + type: Number, + default: 0, + }, + 40: { + type: Number, + default: 0, + }, + 41: { + type: Number, + default: 0, + }, + 42: { + type: Number, + default: 0, + }, + 43: { + type: Number, + default: 0, + }, + 44: { + type: Number, + default: 0, + }, + 45: { + type: Number, + default: 0, + }, + 46: { + type: Number, + default: 0, + }, + 47: { + type: Number, + default: 0, + }, + 48: { + type: Number, + default: 0, + }, + 49: { + type: Number, + default: 0, + } + }, profile: { name: { type: String, default: '' }, gender: { type: String, default: '' }, From 645f363fc3d23fdb704dce38abcc160e64f1535b Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 25 Nov 2014 12:22:14 -0800 Subject: [PATCH 05/48] got sidenav looking right again --- views/partials/challenges.jade | 250 ++++++++++++++++----------------- views/partials/navbar.jade | 2 +- 2 files changed, 126 insertions(+), 126 deletions(-) diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 2d3e9c5b88..4d8d1c63db 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -3,128 +3,128 @@ .panel-body ol(start='0') li - //a(href="/challenges/0", class="#{ cc.hasOwnProperty('0') ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp - //|   (1 min) - //li - // a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room - // |   (5 mins) - //li - // a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet - // |   (5 mins) - //li - // a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor - // |   (5 mins) - //li - // a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website - // |   (5 mins) - //li - // a(href="/challenges/5", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website - // |   (10 mins) - //li - // a(href="/challenges/6", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track - // |   (7 hrs) - //li - // a(href="/challenges/7", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen - // |   (10 mins) - //li - // a(href="/challenges/8", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery - // |   (4 hrs) - //li - // a(href="/challenges/9", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") jQuery Exercises - // |   (3 hrs) - //li - // a(href="/challenges/10", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools - // |   (2 hrs) - //li - // a(href="/challenges/11", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch - // |   (10 mins) - //li - // a(href="/challenges/12", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations - // |   (15 mins) - //li - // a(href="/challenges/13", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track - // |   (10 hrs) - //li - // a(href="/challenges/14", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science - // |   (24 hrs) - //li - // a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP - // |   (30 mins) - //li - // a(href="/challenges/16", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions - // |   (1 hr) - //li - // a(href="/challenges/17", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session - // |   (30 mins | Pair) - //li - // a(href="/challenges/18", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte - // |   (15 hrs | Pair) - //li - // a(href="/challenges/19", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course - // |   (1 hr) - //li - // a(href="/challenges/20", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course - // |   (4 hrs | Pair) - //li - // a(href="/challenges/21", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course - // |   (1 hrs | Pair) - //li - // a(href="/challenges/22", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte - // |   (15 hrs | Pair) - //li - // a.disabled(href="/challenges/23", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine - // |   (5 hrs | Pair) - //li - // a.disabled(href="/challenges/24", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure - // |   (5 hrs | Pair) - //li - // a.disabled(href="/challenges/25", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte - // |   (15 hrs | Pair) - //li - // a.disabled(href="/challenges/26", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Code School's Try Git - // |   (30 mins) - //li - // a.disabled(href="/challenges/27", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Install Node.js - // |   (1 hr) - //li - // a.disabled(href="/challenges/28", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Clone a Github Repo - // |   (15 mins) - //li - // a.disabled(href="/challenges/29", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku - // |   (15 mins) - //li - // a.disabled(href="/challenges/30", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS - // |   (5 hrs) - //li - // a.disabled(href="/challenges/31", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Try MongoDB - // |   (30 mins) - //li - // a.disabled(href="/challenges/32", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API - // |   (1 hr) - //li - // a.disabled(href="/challenges/33", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Build your first API - // |   (10 hrs | Pair) - //li - // a.disabled(href="/challenges/34", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping - // |   (10 hrs | Pair) - //li - // a.disabled(href="/challenges/35", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS - // |   (5 hrs) - //li - // a.disabled(href="/challenges/36", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat - // |   (50 hrs | Pair) - //li - // a.disabled(href="/challenges/37", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit - // |   (50 hrs | Pair) - //li - // a.disabled(href="/challenges/38", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest - // |   (50 hrs | Pair) - //li - // a.disabled(href="/challenges/39", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project - // |   (150 hrs | Pair) - //li - // a.disabled(href="/challenges/40", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project - // |   (150 hrs | Pair) - //li - // a.disabled(href="/challenges/41", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview - // |   (5 hrs) \ No newline at end of file + a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp + |   (1 min) + li + a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room + |   (5 mins) + li + a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet + |   (5 mins) + li + a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Install Github's Atom Text Editor + |   (5 mins) + li + a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Modify and Redeploy Your Website + |   (5 mins) + li + a(href="/challenges/5", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Add Dynamic Content to your Website + |   (10 mins) + li + a(href="/challenges/6", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track + |   (7 hrs) + li + a(href="/challenges/7", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen + |   (10 mins) + li + a(href="/challenges/8", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Code School's Try jQuery + |   (4 hrs) + li + a(href="/challenges/9", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") jQuery Exercises + |   (3 hrs) + li + a(href="/challenges/10", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Code School's Discover DevTools + |   (2 hrs) + li + a(href="/challenges/11", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch + |   (10 mins) + li + a(href="/challenges/12", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Inject Life with CSS Transformations + |   (15 mins) + li + a(href="/challenges/13", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Codecademy's JavaScript track + |   (10 hrs) + li + a(href="/challenges/14", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science + |   (24 hrs) + li + a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP + |   (30 mins) + li + a(href="/challenges/16", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions + |   (1 hr) + li + a(href="/challenges/17", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Start Your First Pair Programming Session + |   (30 mins | Pair) + li + a(href="/challenges/18", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte + |   (15 hrs | Pair) + li + a(href="/challenges/19", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course + |   (1 hr) + li + a(href="/challenges/20", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Stanford's SQL Mini-course + |   (4 hrs | Pair) + li + a(href="/challenges/21", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Stanford's JSON Mini-course + |   (1 hrs | Pair) + li + a(href="/challenges/22", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte + |   (15 hrs | Pair) + li + a.disabled(href="/challenges/23", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Build an Interview Question Machine + |   (5 hrs | Pair) + li + a.disabled(href="/challenges/24", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Build a Text-based Adventure + |   (5 hrs | Pair) + li + a.disabled(href="/challenges/25", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte + |   (15 hrs | Pair) + li + a.disabled(href="/challenges/26", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Code School's Try Git + |   (30 mins) + li + a.disabled(href="/challenges/27", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Install Node.js + |   (1 hr) + li + a.disabled(href="/challenges/28", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Clone a Github Repo + |   (15 mins) + li + a.disabled(href="/challenges/29", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Deploy an app to Heroku + |   (15 mins) + li + a.disabled(href="/challenges/30", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS + |   (5 hrs) + li + a.disabled(href="/challenges/31", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Try MongoDB + |   (30 mins) + li + a.disabled(href="/challenges/32", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API + |   (1 hr) + li + a.disabled(href="/challenges/33", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Build your first API + |   (10 hrs | Pair) + li + a.disabled(href="/challenges/34", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping + |   (10 hrs | Pair) + li + a.disabled(href="/challenges/35", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS + |   (5 hrs) + li + a.disabled(href="/challenges/36", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Reverse Engineer SnapChat + |   (50 hrs | Pair) + li + a.disabled(href="/challenges/37", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Reverse Engineer Reddit + |   (50 hrs | Pair) + li + a.disabled(href="/challenges/38", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Reverse Engineer Pintrest + |   (50 hrs | Pair) + li + a.disabled(href="/challenges/39", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project + |   (150 hrs | Pair) + li + a.disabled(href="/challenges/40", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project + |   (150 hrs | Pair) + li + a.disabled(href="/challenges/41", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Crack the Coding Interview + |   (5 hrs) \ No newline at end of file diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 471aceef08..4170e392c6 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,7 +20,7 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - //| #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  + | #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  i.caret ul.dropdown-menu li From 456c8459671a2e7a528e0eb82bf62fd1c49b5d1e Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 26 Nov 2014 22:00:28 -0800 Subject: [PATCH 06/48] reached a stopping point, trying to fix a production bug --- app.js | 31 +++++++++++++------------------ controllers/home.js | 3 ++- views/partials/navbar.jade | 4 ++-- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app.js b/app.js index 5f57bf1a4e..947edb57cf 100644 --- a/app.js +++ b/app.js @@ -168,24 +168,19 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink); */ app.post('/completed_challenge', function(req, res) { console.log(req.user); - - User.findById(req.user.id, function (err, user) { - if (err) { - console.log(err); - res.status(500); - return res.send('something went wrong'); - } - user.challengesHash[parseInt(req.body.cn)] = Math.round(+new Date()/1000); - user.save(function(err, newDats) { - if (err) { - console.log(err); - res.status(500); - return res.send('something went wrong'); - } - console.log('Suer', user); - res.status(200).send('saved'); - }); - }); + req.user.challengesHash[parseInt(req.body.cn)] = Math.round(+new Date() / 1000); + req.user.challengesCompleted = function() { + var completed = []; + for (i = 0; i < h.length; i++) { + if (h[i] > 0) { + completed.push(i); + } + return completed; + } + } + req.user.save(); + console.log(req.user.challengesHash); + console.log(req.user.challengesCompleted); }); /** diff --git a/controllers/home.js b/controllers/home.js index f1bab63f94..b29d5ac698 100644 --- a/controllers/home.js +++ b/controllers/home.js @@ -6,7 +6,8 @@ exports.index = function(req, res) { if (req.user) { if (req.user.challengesCompleted.length > 0) { - nextChallenge = Math.max.apply(Math, req.user.challengesCompleted) + 1; + Object.values(req.user.challengesHash); + nextChallenge = Math.max.apply(Math, req.user.challengesHash) + 1; res.redirect("challenges/" + nextChallenge); } else { res.redirect("challenges/0"); diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 4170e392c6..486ad6d731 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,8 +20,8 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - | #{user.profile.name || user.email || user.id} [ #{Object.keys(user.challengesHash).length} ]  - i.caret + | #{user.profile.name || user.email || user.id} [ #{user.completedChallengeCount)} ]  + i.caret ul.dropdown-menu li a(href='/') From 07ba7e4fcbb6b77742200a6efbb8fee939b08990 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 4 Dec 2014 12:06:17 -0800 Subject: [PATCH 07/48] continue work on challengeshash --- app.js | 6 +++--- config/passport.js | 8 ++++---- controllers/challenges.js | 3 ++- controllers/home.js | 1 - views/partials/navbar.jade | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app.js b/app.js index 5fcd7d7c3c..0c7ab23611 100644 --- a/app.js +++ b/app.js @@ -165,20 +165,20 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink); * API examples routes. */ app.post('/completed_challenge', function(req, res) { - console.log(req.user); req.user.challengesHash[parseInt(req.body.cn)] = Math.round(+new Date() / 1000); req.user.challengesCompleted = function() { var completed = []; + var h = req.user.challengesHash; for (i = 0; i < h.length; i++) { + console.log(h[i] > 0) if (h[i] > 0) { + console.log(h[i]); completed.push(i); } return completed; } } req.user.save(); - console.log(req.user.challengesHash); - console.log(req.user.challengesCompleted); }); /** diff --git a/config/passport.js b/config/passport.js index 517462d41c..18816ac4e9 100644 --- a/config/passport.js +++ b/config/passport.js @@ -77,10 +77,10 @@ passport.use(new TwitterStrategy(secrets.twitter, function(req, accessToken, tok user.save(function(err) { done(err, user); }); - if (!user.email) { - res.redirect('/account'); - req.flash('errors', { msg: 'OK, you are signed in. Please add your email address to your profile.' }); - } + //if (!user.email) { + // res.redirect('/account'); + // req.flash('errors', { msg: 'OK, you are signed in. Please add your email address to your profile.' }); + //} }); } })); diff --git a/controllers/challenges.js b/controllers/challenges.js index e7f951f0cc..9d0b30291d 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -19,7 +19,8 @@ exports.returnChallenge = function(req, res, next) { video: c.video, time: c.time, steps: c.steps, - cc: req.user.challengesHash + cc: req.user.challengesCompleted, + ch: req.user.challengesHash }); }); }; \ No newline at end of file diff --git a/controllers/home.js b/controllers/home.js index b29d5ac698..df6ff23c8c 100644 --- a/controllers/home.js +++ b/controllers/home.js @@ -6,7 +6,6 @@ exports.index = function(req, res) { if (req.user) { if (req.user.challengesCompleted.length > 0) { - Object.values(req.user.challengesHash); nextChallenge = Math.max.apply(Math, req.user.challengesHash) + 1; res.redirect("challenges/" + nextChallenge); } else { diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 486ad6d731..f27bf1d06f 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,7 +20,7 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - | #{user.profile.name || user.email || user.id} [ #{user.completedChallengeCount)} ]  + | #{user.profile.name || user.email || user.id} [ #{user.challengesCompleted.length} ]  i.caret ul.dropdown-menu li From 177dc900cf2ec8f6f49b92a78edb9fac5ee25e19 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 5 Dec 2014 20:44:42 -0800 Subject: [PATCH 08/48] made parallel 'points' infrastructure --- app.js | 21 ++- controllers/challenges.js | 3 +- models/User.js | 251 +++++++-------------------------- public/js/main.js | 9 +- views/account/profile.jade | 3 +- views/partials/challenges.jade | 86 +++++------ views/partials/navbar.jade | 4 +- 7 files changed, 110 insertions(+), 267 deletions(-) diff --git a/app.js b/app.js index 0c7ab23611..49ca9c4976 100644 --- a/app.js +++ b/app.js @@ -163,21 +163,18 @@ app.get('/account/unlink/:provider', userController.getOauthUnlink); /** * API examples routes. + * accepts a post request. the challenge id req.body.challengeNumber + * and updates user.challengesHash & user.challengesCompleted + * */ app.post('/completed_challenge', function(req, res) { - req.user.challengesHash[parseInt(req.body.cn)] = Math.round(+new Date() / 1000); - req.user.challengesCompleted = function() { - var completed = []; - var h = req.user.challengesHash; - for (i = 0; i < h.length; i++) { - console.log(h[i] > 0) - if (h[i] > 0) { - console.log(h[i]); - completed.push(i); - } - return completed; - } + req.user.challengesHash[parseInt(req.body.challengeNumber)] = Math.round(+new Date() / 1000); + var ch = req.user.challengesHash; + var p = 0; + for (k in ch) { + if (ch[k] > 0) { p += 1} } + req.user.points = p; req.user.save(); }); diff --git a/controllers/challenges.js b/controllers/challenges.js index 9d0b30291d..e7f951f0cc 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -19,8 +19,7 @@ exports.returnChallenge = function(req, res, next) { video: c.video, time: c.time, steps: c.steps, - cc: req.user.challengesCompleted, - ch: req.user.challengesHash + cc: req.user.challengesHash }); }); }; \ No newline at end of file diff --git a/models/User.js b/models/User.js index d9598ffe77..eaa6ed8672 100644 --- a/models/User.js +++ b/models/User.js @@ -14,208 +14,59 @@ var userSchema = new mongoose.Schema({ instagram: String, linkedin: String, tokens: Array, + points: { type: Number, default: 0 }, challengesCompleted: { type: Array, default: [] }, challengesHash: { - 0: { - type: Number, - default: 0, - }, - 1: { - type: Number, - default: 0, - }, - 2: { - type: Number, - default: 0, - }, - 3: { - type: Number, - default: 0, - }, - 4: { - type: Number, - default: 0, - }, - 5: { - type: Number, - default: 0, - }, - 6: { - type: Number, - default: 0, - }, - 7: { - type: Number, - default: 0, - }, - 8: { - type: Number, - default: 0, - }, - 9: { - type: Number, - default: 0, - }, - 10: { - type: Number, - default: 0, - }, - 11: { - type: Number, - default: 0, - }, - 12: { - type: Number, - default: 0, - }, - 13: { - type: Number, - default: 0, - }, - 14: { - type: Number, - default: 0, - }, - 15: { - type: Number, - default: 0, - }, - 16: { - type: Number, - default: 0, - }, - 17: { - type: Number, - default: 0, - }, - 18: { - type: Number, - default: 0, - }, - 19: { - type: Number, - default: 0, - }, - 20: { - type: Number, - default: 0, - }, - 21: { - type: Number, - default: 0, - }, - 22: { - type: Number, - default: 0, - }, - 23: { - type: Number, - default: 0, - }, - 24: { - type: Number, - default: 0, - }, - 25: { - type: Number, - default: 0, - }, - 26: { - type: Number, - default: 0, - }, - 27: { - type: Number, - default: 0, - }, - 28: { - type: Number, - default: 0, - }, - 29: { - type: Number, - default: 0, - }, - 30: { - type: Number, - default: 0, - }, - 31: { - type: Number, - default: 0, - }, - 32: { - type: Number, - default: 0, - }, - 33: { - type: Number, - default: 0, - }, - 34: { - type: Number, - default: 0, - }, - 35: { - type: Number, - default: 0, - }, - 36: { - type: Number, - default: 0, - }, - 37: { - type: Number, - default: 0, - }, - 38: { - type: Number, - default: 0, - }, - 39: { - type: Number, - default: 0, - }, - 40: { - type: Number, - default: 0, - }, - 41: { - type: Number, - default: 0, - }, - 42: { - type: Number, - default: 0, - }, - 43: { - type: Number, - default: 0, - }, - 44: { - type: Number, - default: 0, - }, - 45: { - type: Number, - default: 0, - }, - 46: { - type: Number, - default: 0, - }, - 47: { - type: Number, - default: 0, - }, - 48: { - type: Number, - default: 0, - }, - 49: { - type: Number, - default: 0, - } + 0: { type: Number, default: 0 }, + 1: { type: Number, default: 0 }, + 2: { type: Number, default: 0 }, + 3: { type: Number, default: 0 }, + 4: { type: Number, default: 0 }, + 5: { type: Number, default: 0 }, + 6: { type: Number, default: 0 }, + 7: { type: Number, default: 0 }, + 8: { type: Number, default: 0 }, + 9: { type: Number, default: 0 }, + 10: { type: Number, default: 0 }, + 11: { type: Number, default: 0 }, + 12: { type: Number, default: 0 }, + 13: { type: Number, default: 0 }, + 14: { type: Number, default: 0 }, + 15: { type: Number, default: 0 }, + 16: { type: Number, default: 0 }, + 17: { type: Number, default: 0 }, + 18: { type: Number, default: 0 }, + 19: { type: Number, default: 0 }, + 20: { type: Number, default: 0 }, + 21: { type: Number, default: 0 }, + 22: { type: Number, default: 0 }, + 23: { type: Number, default: 0 }, + 24: { type: Number, default: 0 }, + 25: { type: Number, default: 0 }, + 26: { type: Number, default: 0 }, + 27: { type: Number, default: 0 }, + 28: { type: Number, default: 0 }, + 29: { type: Number, default: 0 }, + 30: { type: Number, default: 0 }, + 31: { type: Number, default: 0 }, + 32: { type: Number, default: 0 }, + 33: { type: Number, default: 0 }, + 34: { type: Number, default: 0 }, + 35: { type: Number, default: 0 }, + 36: { type: Number, default: 0 }, + 37: { type: Number, default: 0 }, + 38: { type: Number, default: 0 }, + 39: { type: Number, default: 0 }, + 40: { type: Number, default: 0 }, + 41: { type: Number, default: 0 }, + 42: { type: Number, default: 0 }, + 43: { type: Number, default: 0 }, + 44: { type: Number, default: 0 }, + 45: { type: Number, default: 0 }, + 46: { type: Number, default: 0 }, + 47: { type: Number, default: 0 }, + 48: { type: Number, default: 0 }, + 49: { type: Number, default: 0 } }, profile: { name: { type: String, default: '' }, diff --git a/public/js/main.js b/public/js/main.js index a4aed45a49..c4d98b043d 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -20,14 +20,11 @@ $(document).ready(function() { $('#complete-dialog').modal('show'); l = location.pathname.split('/'); cn = l[l.length - 1] + console.log(cn); $.ajax({ type: 'POST', - data: {cn: cn}, - url: '/completed_challenge/', - success: function(data) { - console.log('success'); - console.log(JSON.stringify(data)); - } + data: {challengeNumber: cn}, + url: '/completed_challenge/' }); }); diff --git a/views/account/profile.jade b/views/account/profile.jade index 45c77cd68d..4eaf6f71a9 100644 --- a/views/account/profile.jade +++ b/views/account/profile.jade @@ -35,8 +35,7 @@ block content h1 Completed Challenges ul - //each val, index in user.challengesHash - //li= index + ': ' + val + h3 Danger Zone button.btn.btn-danger.confirm-deletion span.ion-trash-b diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index c253483f00..127bf2e0c3 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -4,133 +4,133 @@ ol(start='0') h4 Web Design li - a(href="/challenges/0", class="#{ cc.indexOf(0) > -1 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp + a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp |   (1 min) li - a(href="/challenges/1", class="#{ cc.indexOf(1) > -1 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room + a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room |   (10 mins) li - a(href="/challenges/2", class="#{ cc.indexOf(2) > -1 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet + a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet |   (5 mins) li - a(href="/challenges/3", class="#{ cc.indexOf(3) > -1 ? 'strikethrough' : '' }") Install Github's Atom Text Editor + a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Install Github's Atom Text Editor |   (5 mins) li - a(href="/challenges/4", class="#{ cc.indexOf(4) > -1 ? 'strikethrough' : '' }") Modify and Redeploy Your Website + a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Modify and Redeploy Your Website |   (5 mins) li - a(href="/challenges/5", class="#{ cc.indexOf(5) > -1 ? 'strikethrough' : '' }") Add Dynamic Content to your Website + a(href="/challenges/5", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Add Dynamic Content to your Website |   (10 mins) li - a(href="/challenges/6", class="#{ cc.indexOf(6) > -1 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track + a(href="/challenges/6", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track |   (7 hrs) li - a(href="/challenges/7", class="#{ cc.indexOf(7) > -1 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen + a(href="/challenges/7", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen |   (10 mins) li - a(href="/challenges/8", class="#{ cc.indexOf(8) > -1 ? 'strikethrough' : '' }") Codecademy's jQuery track + a(href="/challenges/8", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Codecademy's jQuery track |   (3 hrs) li - a(href="/challenges/9", class="#{ cc.indexOf(9) > -1 ? 'strikethrough' : '' }") Code School's Try jQuery + a(href="/challenges/9", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Code School's Try jQuery |   (4 hrs) li - a(href="/challenges/10", class="#{ cc.indexOf(10) > -1 ? 'strikethrough' : '' }") Code School's Discover DevTools + a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Code School's Discover DevTools |   (2 hrs) li - a(href="/challenges/11", class="#{ cc.indexOf(11) > -1 ? 'strikethrough' : '' }") jQuery Exercises + a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") jQuery Exercises |   (1 hr) li - a(href="/challenges/12", class="#{ cc.indexOf(12) > -1 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch + a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch |   (10 mins) li - a(href="/challenges/13", class="#{ cc.indexOf(13) > -1 ? 'strikethrough' : '' }") Inject Life with CSS Transformations + a(href="/challenges/13", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Inject Life with CSS Transformations |   (15 mins) h4 Computer Science and JavaScript li - a(href="/challenges/14", class="#{ cc.indexOf(14) > -1 ? 'strikethrough' : '' }") Codecademy's JavaScript track + a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Codecademy's JavaScript track |   (10 hrs) li - a(href="/challenges/15", class="#{ cc.indexOf(15) > -1 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science + a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science |   (24 hrs) li - a(href="/challenges/16", class="#{ cc.indexOf(16) > -1 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP + a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP |   (30 mins) li - a(href="/challenges/17", class="#{ cc.indexOf(17) > -1 ? 'strikethrough' : '' }") Learn Regular Expressions + a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions |   (1 hr) li - a(href="/challenges/18", class="#{ cc.indexOf(18) > -1 ? 'strikethrough' : '' }") Start Your First Pair Programming Session + a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Start Your First Pair Programming Session |   (30 mins | Pair) li - a(href="/challenges/19", class="#{ cc.indexOf(19) > -1 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte + a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte |   (15 hrs | Pair) li - a(href="/challenges/20", class="#{ cc.indexOf(20) > -1 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course + a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course |   (1 hr) li - a(href="/challenges/21", class="#{ cc.indexOf(21) > -1 ? 'strikethrough' : '' }") Stanford's SQL Mini-course + a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Stanford's SQL Mini-course |   (4 hrs | Pair) li - a(href="/challenges/22", class="#{ cc.indexOf(22) > -1 ? 'strikethrough' : '' }") Stanford's JSON Mini-course + a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Stanford's JSON Mini-course |   (1 hrs | Pair) li - a(href="/challenges/23", class="#{ cc.indexOf(23) > -1 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte + a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte |   (15 hrs | Pair) li - a.disabled(href="/challenges/24", class="#{ cc.indexOf(24) > -1 ? 'strikethrough' : '' }") Build an Interview Question Machine + a.disabled(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Interview Question Machine |   (5 hrs | Pair) li - a.disabled(href="/challenges/25", class="#{ cc.indexOf(25) > -1 ? 'strikethrough' : '' }") Build a Text-based Adventure + a.disabled(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build a Text-based Adventure |   (5 hrs | Pair) li - a.disabled(href="/challenges/26", class="#{ cc.indexOf(26) > -1 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte + a.disabled(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte |   (15 hrs | Pair) h4 Full Stack JavaScript Development li - a.disabled(href="/challenges/27", class="#{ cc.indexOf(27) > -1 ? 'strikethrough' : '' }") Code School's Try Git + a.disabled(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Code School's Try Git |   (30 mins) li - a.disabled(href="/challenges/28", class="#{ cc.indexOf(28) > -1 ? 'strikethrough' : '' }") Install Node.js + a.disabled(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Install Node.js |   (1 hr) li - a.disabled(href="/challenges/29", class="#{ cc.indexOf(29) > -1 ? 'strikethrough' : '' }") Clone a Github Repo + a.disabled(href="/challenges/29", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Clone a Github Repo |   (15 mins) li - a.disabled(href="/challenges/30", class="#{ cc.indexOf(30) > -1 ? 'strikethrough' : '' }") Deploy an app to Heroku + a.disabled(href="/challenges/30", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Deploy an app to Heroku |   (15 mins) li - a.disabled(href="/challenges/31", class="#{ cc.indexOf(31) > -1 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS + a.disabled(href="/challenges/31", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS |   (5 hrs) li - a.disabled(href="/challenges/32", class="#{ cc.indexOf(32) > -1 ? 'strikethrough' : '' }") Try MongoDB + a.disabled(href="/challenges/32", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Try MongoDB |   (30 mins) li - a.disabled(href="/challenges/33", class="#{ cc.indexOf(33) > -1 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API + a.disabled(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API |   (1 hr) li - a.disabled(href="/challenges/34", class="#{ cc.indexOf(34) > -1 ? 'strikethrough' : '' }") Build your first API + a.disabled(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Build your first API |   (10 hrs | Pair) li - a.disabled(href="/challenges/35", class="#{ cc.indexOf(35) > -1 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping + a.disabled(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping |   (10 hrs | Pair) li - a.disabled(href="/challenges/36", class="#{ cc.indexOf(36) > -1 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS + a.disabled(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS |   (5 hrs) li - a.disabled(href="/challenges/37", class="#{ cc.indexOf(37) > -1 ? 'strikethrough' : '' }") Reverse Engineer SnapChat + a.disabled(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Reverse Engineer SnapChat |   (50 hrs | Pair) li - a.disabled(href="/challenges/38", class="#{ cc.indexOf(38) > -1 ? 'strikethrough' : '' }") Reverse Engineer Reddit + a.disabled(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Reverse Engineer Reddit |   (50 hrs | Pair) li - a.disabled(href="/challenges/39", class="#{ cc.indexOf(39) > -1 ? 'strikethrough' : '' }") Reverse Engineer Pintrest + a.disabled(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Reverse Engineer Pintrest |   (50 hrs | Pair) li - a.disabled(href="/challenges/40", class="#{ cc.indexOf(40) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project + a.disabled(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project |   (150 hrs | Pair) li - a.disabled(href="/challenges/41", class="#{ cc.indexOf(41) > -1 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project + a.disabled(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project |   (150 hrs | Pair) li - a.disabled(href="/challenges/42", class="#{ cc.indexOf(42) > -1 ? 'strikethrough' : '' }") Crack the Coding Interview + a.disabled(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Crack the Coding Interview |   (5 hrs) \ No newline at end of file diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index f27bf1d06f..b300af6021 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -20,8 +20,8 @@ img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') - | #{user.profile.name || user.email || user.id} [ #{user.challengesCompleted.length} ]  - i.caret + | #{user.profile.name || user.email || user.id} [ #{user.points} ] + i.caret ul.dropdown-menu li a(href='/') From bedddde945410b9f6a6ac3ca580fc39332d1ee66 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 5 Dec 2014 23:10:02 -0800 Subject: [PATCH 09/48] make the profile page look better --- controllers/user.js | 5 +- package.json | 7 +- public/css/main.less | 8 ++ views/account/profile.jade | 180 ++++++++++++++++++++++++++++++++++++- views/partials/faq.jade | 7 +- 5 files changed, 199 insertions(+), 8 deletions(-) diff --git a/controllers/user.js b/controllers/user.js index 44224a98b5..2f12bca1e6 100644 --- a/controllers/user.js +++ b/controllers/user.js @@ -5,6 +5,7 @@ var nodemailer = require('nodemailer'); var passport = require('passport'); var User = require('../models/User'); var secrets = require('../config/secrets'); +var moment = require('moment'); /** * GET /login @@ -118,7 +119,9 @@ exports.postSignup = function(req, res, next) { exports.getAccount = function(req, res) { res.render('account/profile', { - title: 'Manage your Free Code Camp Account' + title: 'Manage your Free Code Camp Account', + cc: req.user.challengesHash, + moment: moment }); }; diff --git a/package.json b/package.json index c5375c698a..78f57b4b14 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "connect-mongo": "^0.4.1", "cookie-parser": "^1.3.3", "csso": "^1.3.11", + "dateformat": "^1.0.11", "dotenv": "^0.4.0", "errorhandler": "^1.3.0", "express": "^4.10.4", @@ -34,11 +35,12 @@ "lastfm": "^0.9.2", "less": "^1.7.5", "lodash": "^2.4.1", - "newrelic": "^1.13.3", "lusca": "^1.0.2", "method-override": "^2.3.0", + "moment": "^2.8.4", "mongoose": "^3.8.19", "morgan": "^1.5.0", + "newrelic": "^1.13.3", "node-foursquare": "^0.2.1", "node-linkedin": "^0.3.4", "nodemailer": "^1.3.0", @@ -51,8 +53,9 @@ "passport-local": "^1.0.0", "passport-oauth": "^1.0.0", "passport-twitter": "^1.0.2", - "sitemap": "^0.7.4", "request": "^2.49.0", + "sitemap": "^0.7.4", + "strftime": "^0.8.2", "stripe": "^3.0.2", "tumblr.js": "^0.0.4", "twilio": "^1.9.0", diff --git a/public/css/main.less b/public/css/main.less index 1fe4a5b8be..81d9e00777 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -274,4 +274,12 @@ ul { .scroll-lock { overflow: hidden; height: 100%; +} + +.table { + margin-left: -16px; +} + +thead { + font-size: 150%; } \ No newline at end of file diff --git a/views/account/profile.jade b/views/account/profile.jade index 4eaf6f71a9..862668c834 100644 --- a/views/account/profile.jade +++ b/views/account/profile.jade @@ -34,8 +34,184 @@ block content | Update my profile h1 Completed Challenges - ul - + .col-xs-12 + table.table.table-striped + thead + tr + th Challenge + th Date Finished + if cc[0] > 0 + tr + td A One-minute Introduction to Free Code Camp + td=moment(cc[0], 'X').format("MMM DD, YYYY") + if cc[1] > 0 + tr + td Enter the Free Code Camp Chat Room + td=moment(cc[1], 'X').format("MMM DD, YYYY") + if cc[2] > 0 + tr + td Create a Website and Deploy it to the Internet + td=moment(cc[2], 'X').format("MMM DD, YYYY") + if cc[3] > 0 + tr + td Install Github's Atom Text Editor + td=moment(cc[3], 'X').format("MMM DD, YYYY") + if cc[4] > 0 + tr + td Modify and Redeploy Your Website + td=moment(cc[4], 'X').format("MMM DD, YYYY") + if cc[5] > 0 + tr + td Add Dynamic Content to your Website + td=moment(cc[5], 'X').format("MMM DD, YYYY") + if cc[6] > 0 + tr + td Codecademy's HTML & CSS track + td=moment(cc[6], 'X').format("MMM DD, YYYY") + if cc[7] > 0 + tr + td Experiment with HTML and CSS in CodePen + td=moment(cc[7], 'X').format("MMM DD, YYYY") + if cc[8] > 0 + tr + td Codecademy's jQuery track + td=moment(cc[8], 'X').format("MMM DD, YYYY") + if cc[9] > 0 + tr + td Code School's Try jQuery + td=moment(cc[9], 'X').format("MMM DD, YYYY") + if cc[10] > 0 + tr + td Code School's Discover DevTools + td=moment(cc[10], 'X').format("MMM DD, YYYY") + if cc[11] > 0 + tr + td jQuery Exercises + td=moment(cc[11], 'X').format("MMM DD, YYYY") + if cc[12] > 0 + tr + td Customize Bootstrap with Bootswatch + td=moment(cc[12], 'X').format("MMM DD, YYYY") + if cc[13] > 0 + tr + td Inject Life with CSS Transformations + td=moment(cc[13], 'X').format("MMM DD, YYYY") + if cc[14] > 0 + tr + td Codecademy's JavaScript track + td=moment(cc[14], 'X').format("MMM DD, YYYY") + if cc[15] > 0 + tr + td Stanford's Introduction to Computer Science + td=moment(cc[15], 'X').format("MMM DD, YYYY") + if cc[16] > 0 + tr + td Get Help The Hacker Way with RSAP + td=moment(cc[16], 'X').format("MMM DD, YYYY") + if cc[17] > 0 + tr + td Learn Regular Expressions + td=moment(cc[17], 'X').format("MMM DD, YYYY") + if cc[18] > 0 + tr + td Start Your First Pair Programming Session + td=moment(cc[18], 'X').format("MMM DD, YYYY") + if cc[19] > 0 + tr + td Easy Algorithm Scripting Challenges on Coderbyte + td=moment(cc[19], 'X').format("MMM DD, YYYY") + if cc[20] > 0 + tr + td Stanford's Relational Databases Mini-course + td=moment(cc[20], 'X').format("MMM DD, YYYY") + if cc[21] > 0 + tr + td Stanford's SQL Mini-course + td=moment(cc[21], 'X').format("MMM DD, YYYY") + if cc[22] > 0 + tr + td Stanford's JSON Mini-course + td=moment(cc[22], 'X').format("MMM DD, YYYY") + if cc[23] > 0 + tr + td Medium Algorithm Scripting Challenges on Coderbyte + td=moment(cc[23], 'X').format("MMM DD, YYYY") + if cc[24] > 0 + tr + td Build an Interview Question Machine + td=moment(cc[24], 'X').format("MMM DD, YYYY") + if cc[25] > 0 + tr + td Build a Text-based Adventure + td=moment(cc[25], 'X').format("MMM DD, YYYY") + if cc[26] > 0 + tr + td Hard Algorithm Scripting Challenges on Coderbyte + td=moment(cc[26], 'X').format("MMM DD, YYYY") + if cc[27] > 0 + tr + td Code School's Try Git + td=moment(cc[27], 'X').format("MMM DD, YYYY") + if cc[28] > 0 + tr + td Install Node.js + td=moment(cc[28], 'X').format("MMM DD, YYYY") + if cc[29] > 0 + tr + td Clone a Github Repo + td=moment(cc[29], 'X').format("MMM DD, YYYY") + if cc[30] > 0 + tr + td Deploy an app to Heroku + td=moment(cc[30], 'X').format("MMM DD, YYYY") + if cc[31] > 0 + tr + td Code School's Real-time web with Node.JS + td=moment(cc[31], 'X').format("MMM DD, YYYY") + if cc[32] > 0 + tr + td Try MongoDB + td=moment(cc[32], 'X').format("MMM DD, YYYY") + if cc[33] > 0 + tr + td Explore your Network with the LinkedIn API + td=moment(cc[33], 'X').format("MMM DD, YYYY") + if cc[34] > 0 + tr + td Build your first API + td=moment(cc[34], 'X').format("MMM DD, YYYY") + if cc[35] > 0 + tr + td Aggregate Data with Chron Jobs and Screen Scraping + td=moment(cc[35], 'X').format("MMM DD, YYYY") + if cc[36] > 0 + tr + td Code School's Shaping up with Angular.JS + td=moment(cc[36], 'X').format("MMM DD, YYYY") + if cc[37] > 0 + tr + td Reverse Engineer SnapChat + td=moment(cc[37], 'X').format("MMM DD, YYYY") + if cc[38] > 0 + tr + td Reverse Engineer Reddit + td=moment(cc[38], 'X').format("MMM DD, YYYY") + if cc[39] > 0 + tr + td Reverse Engineer Pintrest + td=moment(cc[39], 'X').format("MMM DD, YYYY") + if cc[40] > 0 + tr + td Help a Nonprofit: Team Project + td=moment(cc[40], 'X').format("MMM DD, YYYY") + if cc[41] > 0 + tr + td Help a Nonprofit: Solo Project + td=moment(cc[41], 'X').format("MMM DD, YYYY") + if cc[42] > 0 + tr + td Crack the Coding Interview + td=moment(cc[42], 'X').format("MMM DD, YYYY") h3 Danger Zone button.btn.btn-danger.confirm-deletion span.ion-trash-b diff --git a/views/partials/faq.jade b/views/partials/faq.jade index 1f7fe1b04a..e2cb2d9aa9 100644 --- a/views/partials/faq.jade +++ b/views/partials/faq.jade @@ -36,9 +36,10 @@ ul p.landing-p It takes about 1,000 hours of coding to develop the skills you'll need to get an entry level software engineering job. Many in-person coding bootcamps jam all this into 12 weeks of intensive study. Free Code Camp is fully online, and there will always be other people at your skill level that you can pair program with, so you can learn at your own pace. Here are some example coding schedules: table.table - th Time budgeted - th Hours per week - th Weeks to complete + thead + th Time budgeted + th Hours per week + th Weeks to complete tr.info td Weekends td 10 hours/week From b29ba117a3f986dfff1a0037b1fccfb3b8c14891 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 10 Dec 2014 22:26:09 -0800 Subject: [PATCH 10/48] increase size of advance buttons on challenge page --- public/css/main.less | 4 ++++ views/challenges/show.jade | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index c68e7cfc6f..c920ae3c6f 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -343,4 +343,8 @@ ul { .masonry-relative { position:relative; display: block; +} + +.btn-big { + font-size: 30px; } \ No newline at end of file diff --git a/views/challenges/show.jade b/views/challenges/show.jade index d222bcb3f4..a4aebcc728 100644 --- a/views/challenges/show.jade +++ b/views/challenges/show.jade @@ -9,7 +9,7 @@ block content h3.text-center span.ion-android-clock span Takes about #{time} - .btn.btn-primary.btn-large.btn-block.start-challenge Start the challenge + .btn.btn-primary.btn-big.btn-block.start-challenge Start the challenge .challenge-content.hidden-element .responsive-container iframe(src='//player.vimeo.com/video/#{video}', frameborder='0', webkitallowfullscreen='', mozallowfullscreen='', allowfullscreen='') @@ -18,7 +18,7 @@ block content ol for step in steps li!= step - .btn.btn-primary.btn-large.btn-block.completed-challenge I've completed this challenge + .btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge .ten-pixel-break .btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now .panel-footer.text-center From e05132842b072e61779728e992dace4bc1dd7210 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 10 Dec 2014 22:41:37 -0800 Subject: [PATCH 11/48] radically simplify the challenge show view and remove the animation --- views/challenges/show.jade | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/views/challenges/show.jade b/views/challenges/show.jade index a4aebcc728..c314801bfa 100644 --- a/views/challenges/show.jade +++ b/views/challenges/show.jade @@ -3,24 +3,18 @@ block content .row .col-sm-12.col-md-8.col-xs-12 .panel.panel-primary - .panel-heading Challenge: #{name} + .panel-heading #{name} (takes #{time}) .panel.panel-body - .challenge-brief - h3.text-center - span.ion-android-clock - span Takes about #{time} - .btn.btn-primary.btn-big.btn-block.start-challenge Start the challenge - .challenge-content.hidden-element - .responsive-container - iframe(src='//player.vimeo.com/video/#{video}', frameborder='0', webkitallowfullscreen='', mozallowfullscreen='', allowfullscreen='') - h3 Steps: - h4 - ol - for step in steps - li!= step - .btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge - .ten-pixel-break - .btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}') + h3 Steps: + h4 + ol + for step in steps + li!= step + .btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge + .ten-pixel-break + .btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now .panel-footer.text-center span Need a break? Check out our:  a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room From 8741dd098a8859f5fb7c4ebc7baf7000fdab2818 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 12:06:00 -0800 Subject: [PATCH 12/48] code to verify our website for pintrest --- views/partials/meta.jade | 1 + 1 file changed, 1 insertion(+) diff --git a/views/partials/meta.jade b/views/partials/meta.jade index 0579774f8f..5ff3b43576 100644 --- a/views/partials/meta.jade +++ b/views/partials/meta.jade @@ -5,6 +5,7 @@ meta(name='csrf-token', content=_csrf) meta(name='keywords', content='learn to code, learn how to code, code, coding, software engineer, software developer, mean stack, pair programming, node.js, angular.js, express.js, mongoDB, coding bootcamp') meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:title") meta(content="FreeCodeCamp", property="og:site_name") +meta(name='p:domain_verify', content='d0bc047a482c03c24f1168004c2a216a') meta(content="http://www.freecodecamp.com", property="og:url") meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:description") meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", property="og:image") From 5db002570d81e8d6396aaf950704ac82d360a362 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 15:36:46 -0800 Subject: [PATCH 13/48] update colors per Rybar suggestions --- public/css/lib/bootstrap/variables.less | 10 +++++----- public/css/main.less | 2 +- views/partials/navbar.jade | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/css/lib/bootstrap/variables.less b/public/css/lib/bootstrap/variables.less index ff944f5beb..652b6a7afe 100755 --- a/public/css/lib/bootstrap/variables.less +++ b/public/css/lib/bootstrap/variables.less @@ -14,8 +14,8 @@ @gray-light: lighten(@gray-base, 46.7%); // #777 @gray-lighter: lighten(@gray-base, 93.5%); // #eee -@brand-primary: #4e8c39; -@brand-success: #2F8DA3; +@brand-primary: #215f1e; +@brand-success: #457E86; @brand-info: #5bc0de; @brand-warning: #f0ad4e; @brand-danger: #d9534f; @@ -26,12 +26,12 @@ //## Settings for some of the most global styles. //** Background color for ``. -@body-bg: #c5b3a0; +@body-bg: #457E86; //** Global text color on ``. @text-color: @gray-dark; //** Global textual link color. -@link-color: #4e8c39; +@link-color: #215f1e; //** Link hover color set via `darken()` function. @link-hover-color: darken(@link-color, 15%); //** Link hover decoration. @@ -487,7 +487,7 @@ // //## Define colors for form feedback states and, by default, alerts. -@state-success-text: #3c763d; +@state-success-text: #215f1e; @state-success-bg: #dff0d8; @state-success-border: darken(spin(@state-success-bg, -10), 5%); diff --git a/public/css/main.less b/public/css/main.less index c920ae3c6f..0623f097fc 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -271,7 +271,7 @@ ul { } .navbar { - background-color: #502D16; + background-color: #4a2b0f; } .navbar-default .navbar-nav > li > a { diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index bfce8b0d1b..404db5997e 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -8,7 +8,7 @@ span.icon-bar span.icon-bar a.navbar-brand(href='/') - img.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg') + img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg') .collapse.navbar-collapse ul.nav.navbar-nav.navbar-right if !user From a7658d68b0c76c1786461ce39e65cd2e3cd715fc Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 17:50:53 -0800 Subject: [PATCH 14/48] start working on challenge notes --- seed_data/challenges.json | 740 +++++++++++++++++++++----------------- 1 file changed, 412 insertions(+), 328 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index e51e39a324..ab957fa02c 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -1,330 +1,414 @@ [ - { - "link": "a-one-minute-introduction-to-free-code-camp", - "name": "A one-minute introduction to Free Code Camp", - "challengeNumber": 0, - "video": "110729062", - "time": "1 minute", - "steps": ["Watch this video.", "When you're done, click the \"I've completed this challenge\" button to move on to your next challenge."] - }, - { - "link": "enter-the-free-code-camp-chat-room", - "name": "Enter the Free Code Camp Chat Room", - "challengeNumber": 1, - "video": "110753794", - "time": "5 minutes", - "steps": ["Register for the Free Code Camp chat room at https://www.hipchat.com/invite/178107/cc2f6ea4dfac9e48b9a88b305adae48a", "Introduce yourself to our chat room by typing: \"hello world!\""] - }, - { - "link": "create-and-deploy-a-website", - "name": "Create a Website and Deploy it to the Internet", - "challengeNumber": 2, - "video": "110753793", - "time": "5 minutes", - "steps": ["Download a template from http://startbootstrap.com", "Go to http://bitballoon.com", "Find the template you downloaded in your file manager (Finder on Mac, Windows Explorer on Windows)", "Drag the entire template directory onto BitBalloon to deploy it", "Once it's deployed, share the link to it in the Free Code Camp chat room."] - }, - { - "link": "install-github-atom-text-editor", - "name": "Install Github's Atom Text Editor", - "challengeNumber": 3, - "video": "110753792", - "time": "5 minutes", - "steps": ["Download the Atom editor at http://atom.io", "Unzip it and install Atom.", "Open up Atom.", "Now you have a dedicated text editor!"] - }, - { - "link": "modify-and-redeploy-your-website", - "name": "Modify and Redeploy Your Website", - "challengeNumber": 4, - "video": "110753791", - "time": "5 minutes", - "steps": ["Open up the template you downloaded from http://startbootstrap.com in your file manager (Finder on Mac and Windows Explorer on Windows).", "Open up the index.html file with Atom", "Find the title tag in the HTML and change it.", "Go to http://bitballoon.com", "Drag the entire template directory onto BitBalloon to deploy it", "Verify that the title has indeed changed."] - }, - { - "link": "start-a-pair-programming-session", - "name": "Start Your First Pair Programming Session", - "challengeNumber": 5, - "video": "111077664", - "time": "20 minutes", - "steps": ["Go to http://www.teamviewer.com/en/index.aspx and download Team Viewer", "Install it and launch it", "Go to the chat room and ask if anyone wants to pair program with you on your current challenge.", "If someone is interested, they will be your \"pair\" - the person you pair programming with.", "First, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", "You will need to share your randomly generated password with your pair as well.", "Once your pair connects, you will see a Team Viewer side menu. ", "Click the audio button that drops down.", "Click the headset icon and choose Voice over IP", "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", "When you are finished pair programming, click the X to end the session.", "Next, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password", "Enter it to start the session.", "Once the Team Viewer session starts, look at the the top of the screen, you will see 6 buttons. If you hover your cursor over audio/video.", "When you are finished pair programming, click the X to end the session."] - }, - { - "link": "add-dynamic-content-to-your-website", - "name": "Add Dynamic Content to your Website", - "challengeNumber": 6, - "video": "110753641", - "time": "10 minutes", - "steps": ["Go to http://www.powr.io", "From the dropdown menus, choose 'Contact Form' and 'HTML'", "Find the template you downloaded from http://startbootstrap.com in your file manager (Finder on Mac and Windows Explorer on Windows).", "Drag the file to Atom", "Copy the lines of HTML from the POWr tutorial to your index.html file, being careful to put them where they belong.", "Drag the entire template directory onto BitBalloon to deploy it", "Go to http://bitballoon.com", "Verify that the form works by filling it out and submitting it. You can then go back to POWr.io and view the new database record that the form created.", "Now add a the POWr.io Twitter feed to your portfolio website, then redeploy it to BitBalloon."] - }, - { - "link": "codecademy-html-and-css-track", - "name": "Codecademy's HTML & CSS Track", - "challengeNumber": 7, - "video": "110753640", - "time": "7 hours", - "steps": ["Go to http://www.codecademy.com/tracks/web and complete the course."] - }, - { - "link": "experiment-with-html-and-css-in-codepen", - "name": "Experiment with HTML and CSS in CodePen", - "challengeNumber": 8, - "video": "110752744", - "time": "10 minutes", - "steps": ["Go to http://www.newsweek.com/", "Change the window size. Note that Newsweek.com is using Responsive Design.", "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", "Select all the text, then copy it.", "Go to http://codepen.io/pen/", "Paste the HTML you copied from Newsweek.com into the HTML field of Codepen.", "You now have your own customizable version of the Newsweek.com webpage. See if you can change some of the text and images."] - }, - { - "link": "code-school-try-jquery-course", - "name": "Code School's Try jQuery Course", - "challengeNumber": 9, - "time": "4 hours", - "video": "110753638", - "steps": ["Go to https://www.codeschool.com/courses/try-jquery and complete the course."] - }, - { - "link": "jquery-exercises", - "name": "jQuery Exercises", - "challengeNumber": 10, - "time": "3 hours", - "video": "110752745", - "steps": ["Go to http://jqexercise.droppages.com/ and complete all of the exercises.", "The person who created it was not a native English speaker, so please excuse the spelling and grammar mistakes.", "This will be a lot more fun if you pair program with someone from the Free Code Camp chat room."] - }, - { - "link": "code-school-discover-devtools-course", - "name": "Code School's Discover DevTools", - "challengeNumber": 11, - "time": "2 hours", - "video": "110752743", - "steps": ["Go to http://discover-devtools.codeschool.com/ and complete the course."] - }, - { - "link": "customize-bootstrap-with-bootswatch", - "name": "Customize Bootstrap with Bootswatch", - "challengeNumber": 12, - "time": "10 minutes", - "video": "110752741", - "steps": ["Go to http://getbootstrap.com/components/", "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", "Select all the text, then copy it.", "Go to http://codepen.io/pen/", "Paste the HTML you copied from GetBootStrap.com into the HTML field of Codepen.","Go to http://bootswatch.com/", "Decide which theme you want to use.", "Click the down arrow next to the download button and choose 'bootstrap.css'", "Select all the text, then copy it.", "Go back to CodePen and paste the CSS you copied from Bootswatch.com into the CSS field of Codepen.", "Your Bootswatch CSS should now be applied to the HTML from the GetBootStrap page.", "This page is currently using a two-column layout, with the main content on the left and additional navigation on the right. See if you can make it a one-column layout."] - }, - { - "link": "", - "name": "Inject Life with CSS Transformations", - "challengeNumber": 13, - "time": "15 minutes", - "video": "110752740", - "steps": ["Go to http://daneden.github.io/animate.css/ and try out some of the CSS animations.", "Go to http://codepen.io/ossia/pen/bGegt.", "Press the \"Fork\" button. This will fork, meaning create a copy of, the CodePen.", "Click the gear in the CSS column.", "Click \"Add another resource\" and start typing \"animate.css\". Click on the dropdown results to autocomplete it.", "Now that you have Animate.css enabled, use jQuery and the \"toggleClass\" method to add an animated class to all h1 elements when you click the \"Press Me\" button."] - }, - { - "link": "inject-life-with-css-transformations", - "name": "Codecademy JavaScript Track", - "challengeNumber": 14, - "time": "10 hours", - "video": "110795564", - "steps": ["Go to http://www.codecademy.com/en/tracks/javascript-combined and complete the course."] - }, - { - "link": "codecademy-javascript-track", - "name": "Get Help the Hacker Way with RSAP", - "challengeNumber": 15, - "video": "", - "time": "30 minutes", - "steps": ["Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", "Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)", "Go to http://stackoverflow.com/ and view the recent questions.", "Go to http://webchat.freenode.net/ and create an IRC account.", "Join the #JavaScript chat room and introduce yourself as a Free Code Camp student.", "Now you have several ways of getting help when you're stuck."] - }, - { - "link": "easy-algorthim-scripting-challenges-on-coderbyte", - "name": "Easy Algorithm Scripting Challenges on Coderbyte", - "challengeNumber": 16, - "video": "", - "time": "15 hours", - "steps": ["Create a CoderByte account at http://coderbyte.com/sl/", "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."] - }, - { - "link": "harvard-introduction-to-computer-science-cs50-course", - "name": "Introduction to Computer Science", - "challengeNumber": 17, - "video": "", - "time": "150 hours", - "steps": ["Harvard's CS50 course is one of the most popular online courses of all time. It will give you a solid programming foundation. It will introduce you to important concepts in computer science like algorithms, databases, data structures.", "Go to https://www.edx.org/course/harvardx/harvardx-cs50x-introduction-computer-1022#.VDWSfSldWpQ and register for the course."] - }, - { - "link": "medium-algorthim-scripting-challenges-on-coderbyte", - "name": "Medium Algorithm Scripting Challenges on Coderbyte", - "challengeNumber": 18, - "video": "", - "time": "15 hours", - "steps": ["Go to http://coderbyte.com/CodingArea/Challenges/#medChals and start working through Coderbyte's medium algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."] - }, - { - "challengeNumber": 19, - "link": "medium-algorthim-scripting-challenges-on-coderbyte", - "name": "Stanford's Relational Databases Mini-course", - "video": "", - "time": "10 hours", - "steps": ["Go to https://class.stanford.edu/courses/DB/RDB/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."] - }, - { - "challengeNumber": 20, - "link": "stanfords-relational-databases-mini-course", - "name": "Stanford's JSON Mini-course", - "video": "", - "time": "2 hours", - "steps": ["Go to https://class.stanford.edu/courses/DB/JSON/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."] - }, - { - "link": "build-a-text-based-adventure", - "name": "Build a Text-based Adventure", - "challengeNumber": 21, - "video": "", - "time": "5 hours", - "steps": ["Go to http://www.amctv.com/shows/halt-and-catch-fire/colossal-cave-adventure and play the original text-based adventure (known simply as \"Adventure\".", "Using CodePen, create a text based adventure, using buttons instead of text input.", "Create a player object, and give the player an inventory of items.", "Create a definite beginning, end, and at least 10 different locations a player can go to and interact with"] - }, - { - "link": "hard-algorthim-scripting-challenges-on-coderbyte", - "name": "Hard Algorithm Scripting Challenges on Coderbyte", - "challengeNumber": 22, - "video": "", - "time": "15 hours", - "steps": ["Go to http://coderbyte.com/CodingArea/Challenges/#medChals and start working through Coderbyte's hard algorithm scripting challenges using JavaScript.", "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology."] - }, - { - "link": "stanfords-sql-mini-course", - "name": "Stanford's SQL Mini-course", - "challengeNumber": 23, - "video": "", - "time": "10 hours", - "steps": ["Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/about and register for this course.", "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges."] - }, - { - "link": "build-an-interview-question-machine", - "name": "Build an Interview Question Machine", - "challengeNumber": 24, - "video": "", - "time": "5 hours", - "steps": ["Using CodePen, create an interview question machine that will show an interview question, count down from 5, then shows the answer.", "Create a button the user can press to see the next question.", "Go to https://gist.github.com/QuincyLarson/b18d7366440af0f37054 to see an example list of interview questions (dealing with the time complexity of algorthims and duration of common computational tasks).", "Add the ability for users to say they got it right or wrong. If they got it right, don't show them that question any more."] - }, - { - "link": "code-school-try-git-course", - "name": "Code School's Try Git Course", - "challengeNumber": 25, - "video": "", - "time": "15 minutes", - "steps": ["Go to https://www.codeschool.com/courses/try-git and complete this short interactive course."] - }, - { - "link": "install-node-js", - "name": "Install Node.js", - "challengeNumber": 26, - "time": "15 minutes", - "video": "", - "steps": [] - }, - { - "link": "clone-a-github-repo", - "name": "Clone a Github Repo", - "challengeNumber": 27, - "video": "", - "time": "15 minutes", - "steps": [] - }, - { - "link": "deploy-an-app-to-heroku", - "name": "Deploy an app to Heroku", - "challengeNumber": 28, - "video": "", - "time": "15 minutes", - "steps": [] - }, - { - "link": "code-school-real-time-with-node-js-course", - "name": "Code School's Real-time web with Node.JS", - "challengeNumber": 29, - "video": "", - "time": "5 hours", - "steps": ["Go to https://www.codeschool.com/courses/real-time-web-with-node-js and work through the course.", "Note that this course is a paid course, but that if you can find time to finish the course within two consecutive days, you can use Code School's free two-day hall pass to complete it for free here: https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared"] - }, - { - "link": "try-mongodb", - "name": "Try MongoDB", - "challengeNumber": 30, - "video": "", - "time": "30 minutes", - "steps": ["Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial"] - }, - { - "link": "explore-your-network-with-the-linkedin-api", - "name": "Explore Your Network with the LinkedIn API", - "challengeNumber": 31, - "video": "", - "time": "2 hours", - "steps": ["Go to http://developers.linkedin.com/ and register a LinkedIn app.", "Using the API keys provided by LinkedIn, write a script that pulls your LinkedIn profile and and connections."] - }, - { - "link": "build-your-first-api", - "name": "Build Your First API", - "challengeNumber": 32, - "video": "", - "time": "5 hours", - "steps": [] - }, - { - "link": "aggregate-data-with-chron-jobs-and-screen-scraping", - "name": "Aggregate Data with Chron Jobs and Screen Scraping", - "challengeNumber": 33, - "video": "", - "time": "5 hours", - "steps": [] - }, - { - "link": "code-school-shaping-up-with-angular-js-course", - "name": "Codeschool's Shaping up with Angular.js", - "challengeNumber": 34, - "video": "", - "time": "5 hours", - "steps": ["Go to hhttps://www.codeschool.com//courses/shaping-up-with-angular-js and complete this free course."] - }, - { - "link": "reverse-engineer-snapchat", - "name": "Reverse Engineer Snapchat", - "challengeNumber": 35, - "video": "", - "time": "50 hours", - "steps": [] - }, - { - "link": "reverse-engineer-reddit", - "name": "Reverse Engineer Reddit", - "challengeNumber": 36, - "video": "", - "time": "50 hours", - "steps": [] - }, - { - "link": "reverse-engineer-pintrest", - "name": "Reverse Engineer Pintrest", - "challengeNumber": 37, - "video": "", - "time": "50 hours", - "steps": [] - }, - { - "link": "help-a-nonprofit-team-project", - "name": "Help a Nonprofit Team Project", - "challengeNumber": 38, - "video": "", - "time": "200 hours", - "steps": [] - }, - { - "link": "help-a-nonprofit-solo-project", - "name": "Help a Nonprofit Solo Project", - "challengeNumber": 39, - "video": "", - "time": "200 hours", - "steps": [] - }, - { - "link": "crack-the-coding-interview", - "name": "Crack the Coding Interview", - "challengeNumber": 40, - "video": "", - "time": "20 hours", - "steps": [] - } + { + "name": "A One-minute Introduction to Free Code Camp", + "time": 1, + "video": "", + "challengeNumber": 0, + "instructions": [ + "Watch this 1-minute video, or simply read this summary:", + "Our goal is to help you become an employable software engineer.", + "We're going to do this by pair programming on projects for nonprofits.", + "Pair programming is where two people code together on the same computer.", + "We're going to develop JavaScript skills, build portfolio projects, and meet a lot of people who can serve as useful connections during your job search.", + "We'll do this by coding fearlessly, by collaborating on projects, and - most importantly - by not giving up.", + "Click the \"I've completed this challenge\" button to move on to your next challenge." + ] + }, + { + "name": "Join the Free Code Camp Chat Room", + "time": 5, + "video": "", + "challengeNumber": 1, + "instructions": [ + "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", + "If you don't already have a GitHub account, create one real quick at https://www.github.com.", + "Be sure to update your biographical information and upload an image. A picture of your face works best. This is how people will see you in the chat room, so put your best foot forward.", + "Now enter the chat room by going to https://gitter.im/FreeCodeCamp/FreeCodeCamp and clicking the \"sign in with GitHub\" button.", + "Introduce yourself to our chat room by typing: \"hello world!\".", + "Tell your fellow Code Campers how you found Free Code Camp. Also tell them why you want to learn to code." + ] + }, + { + "name": "Join the Free Code Camp Subreddit", + "time": 5, + "video": "", + "challengeNumber": 2, + "instructions": [ + "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community.", + "If you don't already have a Reddit account, create one by clicking the \"login or register\" button in the upper right hand corner.", + "If, in the past, you've discovered a link that helped you with some aspect of learning to code, share it by submitting it to the subreddit. Click the \"Submit a new link\" button, paste the link into the url field, and press the \"suggest title\" button. You can update the suggested title if you need to. Then you're done.", + "Subscribe to the Free Code Camp subreddit by clicking \"Subscribe\". You might want to subscribe to these subreddits as well: http://www.reddit.com/r/learnprogramming/ and http://www.reddit.com/r/learnjavascript." + ] + }, + { + "name": "Build a Personal Website", + "time": 60, + "video": "", + "challengeNumber": 3, + "instructions": [ + "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", + "Go to https://dash.generalassemb.ly/projects/annas-website-1 and get started with your first project."] + }, + { + "name": "Build a Responsive Blog Theme", + "time": 60, + "video": "", + "challengeNumber": 4, + "instructions": [ + "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", + "Go to https://dash.generalassemb.ly/projects/jeffs-blog-1 and complete the second project." + ] + }, + { + "name": "Build a Small Business Website", + "time": 60, + "video": "", + "challengeNumber": 5, + "instructions": ["Ready for some more HTML and CSS fundamentals?", + "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] + }, + { + "name": "Tweak HTML and CSS in CodePen", + "time": 10, + "video": "", + "challengeNumber": 6, + "instructions": [ + "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", + "Go to http://www.newsweek.com/", + "Change the window size. Note that Newsweek.com is using Responsive Design.", + "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", + "Select all the text, then copy it.", + "Go to http://codepen.io/pen/", + "Paste the HTML you copied from Newsweek.com into the HTML field of Codepen.", + "You now have your own customizable version of the Newsweek.com website. See if you can change some of the text and images." + ] + }, + { + "name": "Build a CSS Robot", + "time": 60, + "video": "", + "challengeNumber": 7, + "instructions": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", + "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] + }, + { + "name": "Meet jQuery", + "time": 30, + "video": "", + "challengeNumber": 9, + "instructions": [ + "jQuery is a powerful tool for manipulating HTML elements.", + "It's a lot easier to use than JavaScript itself, so we'll learn it first.", + "It's also extremely popular with employers, so we're going to learn it well.", + "Code School has an excellent free course that will walk us through the basics of jQuery.", + "Go to http://try.jquery.com/levels/1/challenges/1 and complete the section." + ] + }, + { + "name": "Traverse the DOM", + "time": 30, + "video": "", + "challengeNumber": 10, + "instructions": [ + "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", + "Go to http://www.codecademy.com/tracks/web and complete the section.", + ] + }, + { + "name": "Work with the DOM", + "time": 30, + "video": "", + "challengeNumber": 11, + "instructions": [ + "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", + "Go to http://www.codecademy.com/tracks/web and complete the section." + ] + }, + { + "name": "Listen for DOM Elements", + "time": 30, + "video": "", + "challengeNumber": 12, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Use jQuery for Styling", + "time": 30, + "video": "", + "challengeNumber": 13, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Build a MadLibs Game", + "time": 60, + "video": "", + "challengeNumber": 14, + "instructions": ["Go to https://dash.generalassemb.ly/projects/mad-libs-1 and complete the section."] + }, + { + "name": "Discover Chrome's DevTools", + "time": 90, + "video": "", + "challengeNumber": 15, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Tackle jQuery Exercises", + "time": 60, + "video": "", + "challengeNumber": 16, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Customize Bootstrap with Bootswatch", + "time": 10, + "video": "", + "challengeNumber": 17, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Inject Life with CSS Transformations", + "time": 15, + "video": "", + "challengeNumber": 18, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Computer Graphics from Stanford", + "time": 120, + "video": "", + "challengeNumber": 19, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Loops from Stanford", + "time": 120, + "video": "", + "challengeNumber": 20, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Computer Hardware from Stanford", + "time": 120, + "video": "", + "challengeNumber": 21, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Computer Networking from Stanford", + "time": 120, + "video": "", + "challengeNumber": 22, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Boolean Logic from Stanford", + "time": 120, + "video": "", + "challengeNumber": 23, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Computer Security from Stanford", + "time": 120, + "video": "", + "challengeNumber": 24, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Build a Choose Your Own Adventure Game", + "time": 90, + "video": "", + "challengeNumber": 25, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Build Rock Paper Scissors", + "time": 90, + "video": "", + "challengeNumber": 26, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn JavaScript For and While Loops", + "time": 90, + "video": "", + "challengeNumber": 27, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn If and Then Statements", + "time": 90, + "video": "", + "challengeNumber": 28, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Build an Address Book", + "time": 90, + "video": "", + "challengeNumber": 29, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Build a Cash Register", + "time": 90, + "video": "", + "challengeNumber": 30, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Get Help The Hacker Way with RSAP", + "time": 30, + "video": "", + "challengeNumber": 31, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Regular Expressions", + "time": 60, + "video": "", + "challengeNumber": 32, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Start Pair Programming on Coderbyte problems", + "time": 30, + "video": "", + "challengeNumber": 33, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn Relational Databases from Stanford", + "time": 60, + "video": "", + "challengeNumber": 34, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Pair program on SQL Movie Rating Queries", + "time": 90, + "video": "", + "challengeNumber": 35, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Pair program on SQL Social Network Queries", + "time": 60, + "video": "", + "challengeNumber": 36, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Pair program on SQL Social Network Modification", + "time": 90, + "video": "", + "challengeNumber": 37, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Learn JSON from Stanford", + "time": 60, + "video": "", + "challengeNumber": 38, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Try Source Code Version Control with Git", + "time": 30, + "video": "", + "challengeNumber": 39, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Get started with Node.JS", + "time": 45, + "video": "", + "challengeNumber": 40, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Try Node.js Events", + "time": 45, + "video": "", + "challengeNumber": 41, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Try Node.js Streams", + "time": 45, + "video": "", + "challengeNumber": 42, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "See how Node.js Modules work", + "time": 45, + "video": "", + "challengeNumber": 43, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Start an Express.js Server", + "time": 45, + "video": "", + "challengeNumber": 44, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Use Socket.io", + "time": 45, + "video": "", + "challengeNumber": 45, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Use Redis to persist data", + "time": 45, + "video": "", + "challengeNumber": 46, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Try MongoDB", + "time": 30, + "video": "", + "challengeNumber": 47, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Install Express.js", + "time": 45, + "video": "", + "challengeNumber": 48, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Setup Express.js Middleware", + "time": 45, + "video": "", + "challengeNumber": 49, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Take advantage of Parameters", + "time": 45, + "video": "", + "challengeNumber": 50, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Add the Body Parser", + "time": 45, + "video": "", + "challengeNumber": 51, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + }, + { + "name": "Configure Routes in Express.js", + "time": 45, + "video": "", + "challengeNumber": 52, + "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + } ] \ No newline at end of file From 5de070aca414a62070afc862767d6f8ae973935b Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 17:59:01 -0800 Subject: [PATCH 15/48] more changes recommended by Ryan --- public/css/main.less | 7 ++++++- views/home.jade | 11 ++--------- views/partials/faq.jade | 11 ++++++++++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index 0623f097fc..bcb348a73c 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -154,6 +154,7 @@ ul { .nav-height { height: 50px; + border: none; } .landing-icon { @@ -172,6 +173,10 @@ ul { margin-top: -10px; } +.negative-15 { + margin-top: -15px; +} + .landing-p { font-size: 18px !important; } @@ -282,7 +287,7 @@ ul { } .hug-top { - margin-top: -40px; + margin-top: -35px; margin-bottom: -10px; } diff --git a/views/home.jade b/views/home.jade index 4f2f4316ca..47305dee19 100644 --- a/views/home.jade +++ b/views/home.jade @@ -1,6 +1,6 @@ extends layout block content - .jumbotron + .jumbotron.negative-15 .text-center h1.hug-top Code with Us h2 Let's learn to code by building projects for nonprofits @@ -37,11 +37,4 @@ block content br include partials/about-us br - include partials/faq - br - .jumbotron - .text-center - a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free) - br - br - a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something \ No newline at end of file + include partials/faq \ No newline at end of file diff --git a/views/partials/faq.jade b/views/partials/faq.jade index 02fe5a5225..52618260f8 100644 --- a/views/partials/faq.jade +++ b/views/partials/faq.jade @@ -69,4 +69,13 @@ p.landing-p Our name is Free Code Camp. We are a free code camp. If you had to pay us (or sign over future earnings), we'd have to change our name. And we are not going to do that. h2 Does Free Code Camp have an application process? ul - p.landing-p Unlike most bootcamps, anyone can study at Free Code Camp. We're not going to tell you that you can't become a software engineer. We believe the only person who should be able to tell you that is you. If you perservere, and keep working through our challenges and nonprofits' projects, you will become an employable software engineer. \ No newline at end of file + p.landing-p Unlike most bootcamps, anyone can study at Free Code Camp. We're not going to tell you that you can't become a software engineer. We believe the only person who should be able to tell you that is you. If you perservere, and keep working through our challenges and nonprofits' projects, you will become an employable software engineer. + br + br + .text-center + a.btn.btn-cta.signup-btn.cta.btn-primary(href="/login") Start learning to code (it's free) + br + br + a.btn.nonprofit-cta.btn-success(href="/nonprofits") I'm with a nonprofit and want help coding something + br + br \ No newline at end of file From de0d77d4e894351dd9f45a54891eb08a6e6c250a Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 20:44:21 -0800 Subject: [PATCH 16/48] continue work on challenges --- seed_data/challenges.json | 131 +++++++++++++++++++++++++++++++------- 1 file changed, 109 insertions(+), 22 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index ab957fa02c..526954a91a 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -101,7 +101,7 @@ "It's a lot easier to use than JavaScript itself, so we'll learn it first.", "It's also extremely popular with employers, so we're going to learn it well.", "Code School has an excellent free course that will walk us through the basics of jQuery.", - "Go to http://try.jquery.com/levels/1/challenges/1 and complete the section." + "Go to http://try.jquery.com/levels/1/challenges/1 and complete the first section." ] }, { @@ -111,7 +111,7 @@ "challengeNumber": 10, "instructions": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", - "Go to http://www.codecademy.com/tracks/web and complete the section.", + "Go to http://try.jquery.com/levels/2/challenges/1 and complete the second section." ] }, { @@ -121,7 +121,7 @@ "challengeNumber": 11, "instructions": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", - "Go to http://www.codecademy.com/tracks/web and complete the section." + "Go to http://try.jquery.com/levels/3/challenges/1 and complete the third section." ] }, { @@ -129,56 +129,99 @@ "time": 30, "video": "", "challengeNumber": 12, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", + "Go to http://try.jquery.com/levels/4/challenges/1 and complete the fourth section." + ] }, { "name": "Use jQuery for Styling", "time": 30, "video": "", "challengeNumber": 13, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", + "Go to http://try.jquery.com/levels/5/challenges/1 and complete the fifth section." + ] }, { "name": "Build a MadLibs Game", "time": 60, "video": "", "challengeNumber": 14, - "instructions": ["Go to https://dash.generalassemb.ly/projects/mad-libs-1 and complete the section."] + "instructions": [ + "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", + "If you aren't familiar with Mad Libs, they basically involve inserting random nouns, adjectives and verbs in to stories. The stories that result are often hilarious.", + "Go to httpsng://dash.generalassemb.ly/projects/mad-libs-1 and complete the fifth project." + ] }, { "name": "Discover Chrome's DevTools", "time": 90, "video": "", "challengeNumber": 15, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "It's time to learn the most powerful tool your browser has - the Development Tools!", + "If you aren't already using Chrome, you'll want to download it here. While it's true that Firefox has a tool called Firebug that is very similar to Chrome's DevTools, we will use Chrome for this challenge.", + "Note that this course, jointly produced by Google and Code School, is technologically impressive, but occasionally buggy. If you encounter a bug, just ignore it and keep going.", + "Go to http://discover-devtools.codeschool.com and complete this short course."] }, { "name": "Tackle jQuery Exercises", "time": 60, "video": "", "challengeNumber": 16, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", + "There are many correct ways to solve each of these exercises. After you complete the challenge, you can compare your solution with our solution by pressing the \"#solution-button\" button.", + "Go to http://freecodecamp.com/jquery-exercises and complete the exercises." + ] }, { "name": "Customize Bootstrap with Bootswatch", "time": 10, "video": "", "challengeNumber": 17, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to http://getbootstrap.com/components/", + "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", + "Select all the text, then copy it.", + "Go to http://codepen.io/pen/", + "Paste the HTML you copied from GetBootStrap.com into the HTML field of Codepen.", + "Go to http://bootswatch.com/", + "Decide which theme you want to use.", + "Click the down arrow next to the download button and choose 'bootstrap.css'", + "Select all the text, then copy it.", + "Go back to CodePen and paste the CSS you copied from Bootswatch.com into the CSS field of Codepen.", + "Your Bootswatch CSS should now be applied to the HTML from the GetBootStrap page.", + "This page is currently using a two-column layout, with the main content on the left and additional navigation on the right. See if you can make it a one-column layout." + ] }, { "name": "Inject Life with CSS Transformations", "time": 15, "video": "", "challengeNumber": 18, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to http://daneden.github.io/animate.css/ and try out some of the CSS animations.", + "Go to http://codepen.io/ossia/pen/bGegt.", + "Press the \"Fork\" button. This will fork, meaning create a copy of, the CodePen.", + "Click the gear in the CSS column.", + "Click \"Add another resource\" and start typing \"animate.css\". Click on the dropdown results to autocomplete it.", + "Now that you have Animate.css enabled, use jQuery and the \"toggleClass\" method to add an animated class to all h1 elements when you click the \"Press Me\" button." + ] }, { - "name": "Learn Computer Graphics from Stanford", + "name": "Learn Basic Computer Science Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 19, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", + "Note that Harvard also has an excellent introduction to computer science course called CS50, but it takes more than 100 hours to complete, and doesn't use JavaScript.", + "Despite being completely self-paced, Stanford's CS101 course is broken up into weeks. Each of the following challenges will address one of those weeks.", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z54/z1/ and complete the first week's course work." + ] }, { "name": "Learn Loops from Stanford", @@ -188,14 +231,14 @@ "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] }, { - "name": "Learn Computer Hardware from Stanford", + "name": "Learn Computer Hardware Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 21, "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] }, { - "name": "Learn Computer Networking from Stanford", + "name": "Learn Computer Networking Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 22, @@ -209,7 +252,7 @@ "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] }, { - "name": "Learn Computer Security from Stanford", + "name": "Learn Computer Security Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 24, @@ -262,21 +305,55 @@ "time": 30, "video": "", "challengeNumber": 31, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", + "Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)", + "Go to http://stackoverflow.com/ and view the recent questions.", + "Go to http://webchat.freenode.net/ and create an IRC account.", + "Join the #JavaScript chat room and introduce yourself as a Free Code Camp student.", + "Now you have several ways of getting help when you're stuck." + ] }, { "name": "Learn Regular Expressions", "time": 60, "video": "", "challengeNumber": 32, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", + "Check out http://www.regexr.com. It's a Regular Expression Sandbox.", + "Now go to http://www.regexone.com and complete the tutorial and exercises 1 - 6.", + "Note that you can click \"continue\" to move on to the next step as soon as all the tasks have green checkmarks beside them. You can often do this just by using the wildcard \"dot\" operator, but try to use the techniques that each lesson recommends." + ] }, { "name": "Start Pair Programming on Coderbyte problems", "time": 30, "video": "", "challengeNumber": 33, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to http://www.teamviewer.com/en/index.aspx and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.", + "Install it and launch it", + "Go to the chat room and ask if anyone wants to pair program with you on your current challenge.", + "If someone is interested, they will be your \"pair\" - the person you pair programming with.", + "First, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", + "You will need to share your randomly generated password with your pair as well.", + "Once your pair connects, you will see a Team Viewer side menu. ", + "Click the audio button that drops down.", + "Click the headset icon and choose Voice over IP", + "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", + "Now open up Atom and let them add their name somewhere to your bootstrap template in a place that will be visible in the browser, then redeploy it via BitBalloon.", + "When you are finished pair programming, click the X to end the session.", + "Next, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", + "Enter this id, and then password, to start the session.", + "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", + "Now ask them to open up Atom so you can add your name to their bootstrap template in a place that will be visible in the browser. Then they can redeploy it via BitBalloon.", + "When you are finished pair programming, click the X to end the session.", + "Congratulations! You have completed your first pair programming session. Now you can pair program through any of the remaining challenges. The more, the better!", + "Create a CoderByte account at http://coderbyte.com/sl/", + "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", + "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology." + ] }, { "name": "Learn Relational Databases from Stanford", @@ -297,7 +374,10 @@ "time": 60, "video": "", "challengeNumber": 36, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/about and register for this course.", + "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." + ] }, { "name": "Pair program on SQL Social Network Modification", @@ -311,21 +391,28 @@ "time": 60, "video": "", "challengeNumber": 38, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to https://class.stanford.edu/courses/DB/JSON/SelfPaced/about and register for this course.", + "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." + ] }, { "name": "Try Source Code Version Control with Git", "time": 30, "video": "", "challengeNumber": 39, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to https://www.codeschool.com/courses/try-git and complete this short interactive course." + ] }, { "name": "Get started with Node.JS", "time": 45, "video": "", "challengeNumber": 40, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "instructions": [ + "Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial." + ] }, { "name": "Try Node.js Events", From c72dfb32bd385a0e50ccbc6c55374575187982ae Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 21:24:44 -0800 Subject: [PATCH 17/48] add chromebook promo --- app.js | 1 + controllers/resources.js | 6 ++++++ views/chromebook.jade | 7 +++++++ .../{partials => }/programmer-interview-questions-app.jade | 0 .../{partials => }/text-based-adventure-tutorial-app.jade | 0 5 files changed, 14 insertions(+) create mode 100644 views/chromebook.jade rename views/{partials => }/programmer-interview-questions-app.jade (100%) rename views/{partials => }/text-based-adventure-tutorial-app.jade (100%) diff --git a/app.js b/app.js index 1fb0227703..337ff4769f 100644 --- a/app.js +++ b/app.js @@ -128,6 +128,7 @@ app.get('/learn-to-code', resourcesController.learnToCode); app.get('/privacy', resourcesController.privacy); app.get('/jquery-exercises', resourcesController.jqueryExercises); app.get('/text-based-adventure-tutorial-app', resourcesController.textBasedAdventureTutorial); +app.get('/chromebook', resourcesController.chromebook); app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp); app.get('/about', resourcesController.about); app.get('/login', userController.getLogin); diff --git a/controllers/resources.js b/controllers/resources.js index a1c435a8e9..d4844a83f4 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -15,6 +15,12 @@ exports.privacy = function(req, res) { }); } +exports.chromebook = function(req, res) { + res.render('chromebook', { + title: 'Win a Chromebook' + }); +} + exports.jqueryExercises = function(req, res) { res.render('jquery-exercises', { title: 'jQuery Exercises' diff --git a/views/chromebook.jade b/views/chromebook.jade new file mode 100644 index 0000000000..8025d19155 --- /dev/null +++ b/views/chromebook.jade @@ -0,0 +1,7 @@ +extends layout +block content + .jumbotron + script(src='//widget-prime.rafflecopter.com/launch.js') + a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway + + diff --git a/views/partials/programmer-interview-questions-app.jade b/views/programmer-interview-questions-app.jade similarity index 100% rename from views/partials/programmer-interview-questions-app.jade rename to views/programmer-interview-questions-app.jade diff --git a/views/partials/text-based-adventure-tutorial-app.jade b/views/text-based-adventure-tutorial-app.jade similarity index 100% rename from views/partials/text-based-adventure-tutorial-app.jade rename to views/text-based-adventure-tutorial-app.jade From d38e31d06513cb02c64143ed6919248c65dc5db5 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 11 Dec 2014 23:07:33 -0800 Subject: [PATCH 18/48] update the chromebook raffle page --- public/css/main.less | 31 +++---------------------------- views/chromebook.jade | 12 +++++++++--- 2 files changed, 12 insertions(+), 31 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index bcb348a73c..93457c6604 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -185,11 +185,6 @@ ul { color: @brand-success; } -.delay-half { - -webkit-animation-delay: 0.5s; - animation-delay: 0.5s; -} - .delay-1 { -webkit-animation-delay: 1s; animation-delay: 1s; @@ -200,24 +195,9 @@ ul { animation-delay: 2s; } -.delay-3 { - -webkit-animation-delay: 3s; - animation-delay: 3s; -} - -.delay-4 { - -webkit-animation-delay: 4s; - animation-delay: 4s; -} - -.delay-5 { - -webkit-animation-delay: 5s; - animation-delay: 5s; -} - -.delay-6 { - -webkit-animation-delay: 6s; - animation-delay: 6s; +.delay-10 { + -webkit-animation-delay: 10s; + animation-delay: 10s; } .fast-animation { @@ -225,11 +205,6 @@ ul { animation-duration: 0.5s; } -.slow-animation { - -webkit-animation-duration: 2s; - animation-duration: 2s; -} - .disabled { pointer-events: none; cursor: default; diff --git a/views/chromebook.jade b/views/chromebook.jade index 8025d19155..a16e21477f 100644 --- a/views/chromebook.jade +++ b/views/chromebook.jade @@ -1,7 +1,13 @@ extends layout block content - .jumbotron + .jumbotron.negative-15.text-center + h1.hug-top Win a Chromebook + h2 Quincy won a Chromebook at a San Francisco HTML5 meetup at Google. + h3 He wants to give it to someone who needs it. + img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11") script(src='//widget-prime.rafflecopter.com/launch.js') a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway - - + .animated.zoomInDown.delay-10 + p Finished signing up for the giveaway? + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br From f984d335f8d262230048a82f0d42f4f1ee93cd45 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 12 Dec 2014 09:40:57 -0800 Subject: [PATCH 19/48] update landing page to remove gitter --- views/partials/about-us.jade | 195 ++++++++++++++++------------------- 1 file changed, 89 insertions(+), 106 deletions(-) diff --git a/views/partials/about-us.jade b/views/partials/about-us.jade index 3a0d0b6474..aa069d3d26 100644 --- a/views/partials/about-us.jade +++ b/views/partials/about-us.jade @@ -1,97 +1,7 @@ .panel.panel-primary - .panel-heading.landing-panel-heading.text-center We are Free Code Camp + .panel-heading.landing-panel-heading.text-center What Our Code Campers are Saying .panel-body .landing-panel-body.text-center - .col-xs-12 - h2.text-center Our team - .fifteen-pixel-break - script. - $(function () { - var parent = $("#shuffle"); - var divs = parent.children(); - while (divs.length) { - parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]); - } - }); - #shuffle - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Nique Devereaux - h4.negative-10.text-nowrap Alliance Builder - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture") - h4.text-nowrap Tempe, Arizona - p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Berkeley Martinez - h4.negative-10.text-nowrap JavaScript Engineer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture") - h4.text-nowrap San Francisco, California - p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Mychael Zuniga - h4.negative-10.text-nowrap JavaScript Engineer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture") - h4.text-nowrap San Diego, California - p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Brian Ball - h4.negative-10.text-nowrap Product Manager - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture") - h4.text-nowrap San Francisco, California - p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Darryl Dixon - h4.negative-10.text-nowrap Community Builder - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture") - h4.text-nowrap Newport News, Virginia - p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Kathy O'Driscoll - h4.negative-10.text-nowrap Community Builder - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture") - h4.text-nowrap Los Angeles, California - p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Ryan Malm - h4.negative-10.text-nowrap Visual Designer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture") - h4.text-nowrap Omaha, Nebraska - p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Charles Watson - h4.negative-10.text-nowrap iOS Engineer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture") - h4.text-nowrap Minneapolis, Minnesota - p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Quincy Larson - h4.negative-10.text-nowrap Instructional Designer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture") - h4.text-nowrap San Francisco, California - p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Mark Howard - h4.negative-10.text-nowrap Digital Marketer - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture") - h4.text-nowrap San Diego, California - p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Nathan Leniz - h4.negative-10.text-nowrap Community Builder - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture") - h4.text-nowrap Seoul, South Korea - p.negative-10 "I learned to code for the games, and stayed for the algorithms." - .col-xs-12.col-sm-4.col-md-3.team-member - h3.negative-10.text-nowrap Jason Rueckert - h4.negative-10.text-nowrap Live Content Manager - img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture") - h4.text-nowrap Seattle, Washington - p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid." - .col-xs-12 - h2.text-center Our chat room - .embed-responsive.embed-responsive-4by3 - iframe(style="display: none;" onload="this.style.display='block';" src="https://gitter.im/FreeCodeCamp/FreeCodeCamp") - .col-xs-12 - h2.text-center What our students are saying .col-xs-12 .masonry-row .masonry-block @@ -220,21 +130,6 @@ | — Angel Jose (@ajose01) a(href='https://twitter.com/ajose01/status/532729251754033152') November 13, 2014 script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') - .masonry-block - .masonry-relative - blockquote.twitter-tweet(lang='en') - p - | no school today: with - a(href='https://twitter.com/BlueninjaSF') @blueninjaSF - | at - a(href='https://twitter.com/AWSloft') @awsloft - | working on - a(href='https://twitter.com/FreeCodeCamp') @freecodecamp - | - first website. check! - a(href='http://t.co/yJ8ycEti9B') pic.twitter.com/yJ8ycEti9B - | — brian ball (@brianball) - a(href='https://twitter.com/brianball/status/532243325290827777') November 11, 2014 - script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') .masonry-block .masonry-relative blockquote.twitter-tweet(lang='en') @@ -250,3 +145,91 @@ | — Deb Simon-Heinfeld (@debBlufftonAGS) a(href='https://twitter.com/debBlufftonAGS/status/532198725129867265') November 11, 2014 script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') + + +.panel.panel-primary + .panel-heading.landing-panel-heading.text-center Our Team of Volunteers + .panel-body + .landing-panel-body.text-center + .col-xs-12 + script. + $(function () { + var parent = $("#shuffle"); + var divs = parent.children(); + while (divs.length) { + parent.append(divs.splice(Math.floor(Math.random() * divs.length), 1)[0]); + } + }); + #shuffle + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Nique Devereaux + h4.negative-10.text-nowrap Alliance Builder + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nique-devereaux.jpg' alt="Nique Devereaux's picture") + h4.text-nowrap Tempe, Arizona + p.negative-10 "Gamer ever since Pong. Coder ever since I discovered how much I enjoy telling machines what to do." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Berkeley Martinez + h4.negative-10.text-nowrap JavaScript Engineer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/berkeley-martinez.jpg' alt="Berkeley Martinez's picture") + h4.text-nowrap San Francisco, California + p.negative-10 "Former mechanical engineer. Coding is pure creation. I can fly, but only once." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Mychael Zuniga + h4.negative-10.text-nowrap JavaScript Engineer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mychael-zuniga.jpg' alt="Mychael Zuniga's picture") + h4.text-nowrap San Diego, California + p.negative-10 "I'm a college student who turned to code as an avenue for creative expression. I love political science and economics." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Brian Ball + h4.negative-10.text-nowrap Product Manager + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/brian-ball.jpg' alt="Brian Ball's picture") + h4.text-nowrap San Francisco, California + p.negative-10 "I build products people use. I'm fascinated by how fast the internet is changing the world." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Darryl Dixon + h4.negative-10.text-nowrap Community Builder + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/darryl-dixon.jpg' alt="Darryl Dixon's picture") + h4.text-nowrap Newport News, Virginia + p.negative-10 "I'm a self-taught graphic designer. I'm learning web development here and want you to learn with me." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Kathy O'Driscoll + h4.negative-10.text-nowrap Community Builder + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/kathy-odriscoll.jpg' alt="Kathy O'Driscoll's picture") + h4.text-nowrap Los Angeles, California + p.negative-10 "Mother and grandmother. All my life I've dabbled in getting machines to do my bidding. Now it's becoming my career." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Ryan Malm + h4.negative-10.text-nowrap Visual Designer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/ryan-malm.jpg' alt="Ryan Malm's picture") + h4.text-nowrap Omaha, Nebraska + p.negative-10 "I love origami, piano, and playing minecraft with my kids. My JavaScript grows stronger every day." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Charles Watson + h4.negative-10.text-nowrap iOS Engineer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/charles-watson.jpg' alt="Charles Watson's picture") + h4.text-nowrap Minneapolis, Minnesota + p.negative-10 "I skipped college. I build iOS apps. I love the obstacles and puzzles that coding presents me." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Quincy Larson + h4.negative-10.text-nowrap Instructional Designer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/quincy-larson.jpg' alt="Quincy Larson's picture") + h4.text-nowrap San Francisco, California + p.negative-10 "I worked as a school director in China before learning to code. It's clear that everyone can - and should - learn to code." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Mark Howard + h4.negative-10.text-nowrap Digital Marketer + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/mark-howard.jpg' alt="Mark Howard's picture") + h4.text-nowrap San Diego, California + p.negative-10 "I enjoy helping people, at scale. Code is the best way to do that." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Nathan Leniz + h4.negative-10.text-nowrap Community Builder + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/nathan-leniz.jpg' alt="Nathan Leniz's picture") + h4.text-nowrap Seoul, South Korea + p.negative-10 "I learned to code for the games, and stayed for the algorithms." + .col-xs-12.col-sm-4.col-md-3.team-member + h3.negative-10.text-nowrap Jason Rueckert + h4.negative-10.text-nowrap Live Content Manager + img.profile-image(src='https://s3.amazonaws.com/freecodecamp/jason-rueckert.jpg' alt="Jason Rueckert's picture") + h4.text-nowrap Seattle, Washington + p.negative-10 "My high school job was testing basketball shoes for Nike. I learned code to work smarter, not harder. I have no thyroid." \ No newline at end of file From 3bfc37c1272540aeb82d348a9b439a141f9cbeda Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Fri, 12 Dec 2014 13:17:28 -0800 Subject: [PATCH 20/48] make significant progress on documentation for new challenges --- seed_data/challenges.json | 275 +++++++++++++++++++++++++------------- 1 file changed, 180 insertions(+), 95 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 526954a91a..f0348784a0 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -4,7 +4,7 @@ "time": 1, "video": "", "challengeNumber": 0, - "instructions": [ + "steps": [ "Watch this 1-minute video, or simply read this summary:", "Our goal is to help you become an employable software engineer.", "We're going to do this by pair programming on projects for nonprofits.", @@ -19,7 +19,7 @@ "time": 5, "video": "", "challengeNumber": 1, - "instructions": [ + "steps": [ "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", "If you don't already have a GitHub account, create one real quick at https://www.github.com.", "Be sure to update your biographical information and upload an image. A picture of your face works best. This is how people will see you in the chat room, so put your best foot forward.", @@ -33,7 +33,7 @@ "time": 5, "video": "", "challengeNumber": 2, - "instructions": [ + "steps": [ "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community.", "If you don't already have a Reddit account, create one by clicking the \"login or register\" button in the upper right hand corner.", "If, in the past, you've discovered a link that helped you with some aspect of learning to code, share it by submitting it to the subreddit. Click the \"Submit a new link\" button, paste the link into the url field, and press the \"suggest title\" button. You can update the suggested title if you need to. Then you're done.", @@ -45,7 +45,7 @@ "time": 60, "video": "", "challengeNumber": 3, - "instructions": [ + "steps": [ "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", "Go to https://dash.generalassemb.ly/projects/annas-website-1 and get started with your first project."] }, @@ -54,7 +54,7 @@ "time": 60, "video": "", "challengeNumber": 4, - "instructions": [ + "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", "Go to https://dash.generalassemb.ly/projects/jeffs-blog-1 and complete the second project." ] @@ -64,7 +64,7 @@ "time": 60, "video": "", "challengeNumber": 5, - "instructions": ["Ready for some more HTML and CSS fundamentals?", + "steps": ["Ready for some more HTML and CSS fundamentals?", "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] }, { @@ -72,7 +72,7 @@ "time": 10, "video": "", "challengeNumber": 6, - "instructions": [ + "steps": [ "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", "Go to http://www.newsweek.com/", "Change the window size. Note that Newsweek.com is using Responsive Design.", @@ -88,7 +88,7 @@ "time": 60, "video": "", "challengeNumber": 7, - "instructions": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", + "steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] }, { @@ -96,7 +96,7 @@ "time": 30, "video": "", "challengeNumber": 9, - "instructions": [ + "steps": [ "jQuery is a powerful tool for manipulating HTML elements.", "It's a lot easier to use than JavaScript itself, so we'll learn it first.", "It's also extremely popular with employers, so we're going to learn it well.", @@ -109,7 +109,7 @@ "time": 30, "video": "", "challengeNumber": 10, - "instructions": [ + "steps": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", "Go to http://try.jquery.com/levels/2/challenges/1 and complete the second section." ] @@ -119,7 +119,7 @@ "time": 30, "video": "", "challengeNumber": 11, - "instructions": [ + "steps": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", "Go to http://try.jquery.com/levels/3/challenges/1 and complete the third section." ] @@ -129,7 +129,7 @@ "time": 30, "video": "", "challengeNumber": 12, - "instructions": [ + "steps": [ "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", "Go to http://try.jquery.com/levels/4/challenges/1 and complete the fourth section." ] @@ -139,7 +139,7 @@ "time": 30, "video": "", "challengeNumber": 13, - "instructions": [ + "steps": [ "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", "Go to http://try.jquery.com/levels/5/challenges/1 and complete the fifth section." ] @@ -149,7 +149,7 @@ "time": 60, "video": "", "challengeNumber": 14, - "instructions": [ + "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", "If you aren't familiar with Mad Libs, they basically involve inserting random nouns, adjectives and verbs in to stories. The stories that result are often hilarious.", "Go to httpsng://dash.generalassemb.ly/projects/mad-libs-1 and complete the fifth project." @@ -160,18 +160,19 @@ "time": 90, "video": "", "challengeNumber": 15, - "instructions": [ + "steps": [ "It's time to learn the most powerful tool your browser has - the Development Tools!", "If you aren't already using Chrome, you'll want to download it here. While it's true that Firefox has a tool called Firebug that is very similar to Chrome's DevTools, we will use Chrome for this challenge.", "Note that this course, jointly produced by Google and Code School, is technologically impressive, but occasionally buggy. If you encounter a bug, just ignore it and keep going.", - "Go to http://discover-devtools.codeschool.com and complete this short course."] + "Go to http://discover-devtools.codeschool.com and complete this short course." + ] }, { "name": "Tackle jQuery Exercises", "time": 60, "video": "", "challengeNumber": 16, - "instructions": [ + "steps": [ "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", "There are many correct ways to solve each of these exercises. After you complete the challenge, you can compare your solution with our solution by pressing the \"#solution-button\" button.", "Go to http://freecodecamp.com/jquery-exercises and complete the exercises." @@ -182,7 +183,8 @@ "time": 10, "video": "", "challengeNumber": 17, - "instructions": [ + "steps": [ + "Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.", "Go to http://getbootstrap.com/components/", "Right-click an area of the page that doesn't have any HTML elements on it, then choose 'view page source'.", "Select all the text, then copy it.", @@ -202,7 +204,8 @@ "time": 15, "video": "", "challengeNumber": 18, - "instructions": [ + "steps": [ + "You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.", "Go to http://daneden.github.io/animate.css/ and try out some of the CSS animations.", "Go to http://codepen.io/ossia/pen/bGegt.", "Press the \"Fork\" button. This will fork, meaning create a copy of, the CodePen.", @@ -216,7 +219,7 @@ "time": 120, "video": "", "challengeNumber": 19, - "instructions": [ + "steps": [ "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", "Note that Harvard also has an excellent introduction to computer science course called CS50, but it takes more than 100 hours to complete, and doesn't use JavaScript.", "Despite being completely self-paced, Stanford's CS101 course is broken up into weeks. Each of the following challenges will address one of those weeks.", @@ -228,84 +231,120 @@ "time": 120, "video": "", "challengeNumber": 20, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] }, { "name": "Learn Computer Hardware Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 21, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { "name": "Learn Computer Networking Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 22, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic from Stanford", "time": 120, "video": "", "challengeNumber": 23, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security Concepts from Stanford", "time": 120, "video": "", "challengeNumber": 24, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "We're almost done with Stanford's Introduction to Computer Science course!", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/ and complete Week 6, the final week of the course."] }, { "name": "Build a Choose Your Own Adventure Game", - "time": 90, + "time": 60, "video": "", "challengeNumber": 25, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", + "We're going to work through Codecademy's famous interactive JavaScript course.", + "This course will teach us some JavaScript fundamentals while guiding us through the process of building interesting web apps, all within Codecademy's learner-friendly environment!", + "Go to http://www.codecademy.com/courses/getting-started-v2/0/1 and complete the section."] }, { "name": "Build Rock Paper Scissors", - "time": 90, + "time": 60, "video": "", "challengeNumber": 26, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1 and complete the section."] }, { "name": "Learn JavaScript For and While Loops", - "time": 90, + "time": 60, "video": "", "challengeNumber": 27, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\".", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web and complete both the both For and While loop section." + ] }, { "name": "Learn If and Then Statements", - "time": 90, + "time": 60, "video": "", "challengeNumber": 28, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Most human thought can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] + }, + { + "name": "Learn Control Flow", + "time": 60, + "video": "", + "challengeNumber": 29, + "steps": [ + "Now we're going to learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] + }, + { + "name": "Build a Contact List", + "time": 60, + "video": "", + "challengeNumber": 29, + "steps": [ + "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-9Sgpi/0/1 and complete the section."] }, { "name": "Build an Address Book", - "time": 90, + "time": 60, "video": "", "challengeNumber": 29, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Let's learn more about objects.", + "Go to http://www.codecademy.com/courses/spencer-sandbox/0/1 and complete the section."] }, { "name": "Build a Cash Register", - "time": 90, + "time": 60, "video": "", "challengeNumber": 30, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "In this final CodeCademy section, we'll learn even more about JavaScript objects.", + "Go to http://www.codecademy.com/courses/objects-ii/0/1 and complete this final section."] }, { "name": "Get Help The Hacker Way with RSAP", "time": 30, "video": "", "challengeNumber": 31, - "instructions": [ + "steps": [ "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", "Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)", "Go to http://stackoverflow.com/ and view the recent questions.", @@ -319,7 +358,7 @@ "time": 60, "video": "", "challengeNumber": 32, - "instructions": [ + "steps": [ "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", "Check out http://www.regexr.com. It's a Regular Expression Sandbox.", "Now go to http://www.regexone.com and complete the tutorial and exercises 1 - 6.", @@ -331,77 +370,115 @@ "time": 30, "video": "", "challengeNumber": 33, - "instructions": [ - "Go to http://www.teamviewer.com/en/index.aspx and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.", - "Install it and launch it", - "Go to the chat room and ask if anyone wants to pair program with you on your current challenge.", - "If someone is interested, they will be your \"pair\" - the person you pair programming with.", - "First, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", - "You will need to share your randomly generated password with your pair as well.", - "Once your pair connects, you will see a Team Viewer side menu. ", - "Click the audio button that drops down.", - "Click the headset icon and choose Voice over IP", - "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", - "Now open up Atom and let them add their name somewhere to your bootstrap template in a place that will be visible in the browser, then redeploy it via BitBalloon.", - "When you are finished pair programming, click the X to end the session.", - "Next, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", - "Enter this id, and then password, to start the session.", - "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", - "Now ask them to open up Atom so you can add your name to their bootstrap template in a place that will be visible in the browser. Then they can redeploy it via BitBalloon.", - "When you are finished pair programming, click the X to end the session.", - "Congratulations! You have completed your first pair programming session. Now you can pair program through any of the remaining challenges. The more, the better!", - "Create a CoderByte account at http://coderbyte.com/sl/", - "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", - "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology." + "steps": [ + "OK, we're finally ready to start pair programming!", + "Many people use Skype or Google Hangouts to pair program, but if you talk with professional software engineers, they will tell you that it's not really pair programming unless both people have the ability to use the keyboard and mouse.", + "The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. The only problem is that Screen Hero isn't currently free, and it's not yet available for Linux.", + "So in the spirit of keeping Free Code Camp 100% free, we've created directions for using a totally free tool called Team Viewer. It's not as user-friendly as Screen Hero, but it gets the job done (and works on Linux!).", + "If you want, You can skip these steps and simply install Screen Hero (which comes with a 14 day free trial) here: https://screenhero.com/download.html.", + "Otherwise, go to http://www.teamviewer.com/en/index.aspx and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.", + "Install it and launch it", + "Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.", + "If someone is interested, they will be your \"pair\" - the person you pair programming with.", + "First, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", + "You will need to share your randomly generated password with your pair as well.", + "Once your pair connects, you will see a Team Viewer side menu. ", + "Click the audio button that drops down.", + "Click the headset icon and choose Voice over IP", + "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", + "Now you can click the X to end the pair programming session.", + "Next, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", + "Enter this id, and then password, to start the session.", + "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", + "Now it's time to tackle CoderByte.", + "Create a CoderByte account at http://coderbyte.com/sl/", + "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", + "When you are finished pair programming, click the X to end the session.", + "Congratulations! You have completed your first pair programming session.", + "You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!", + "You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.", + "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology.", + "Mark this challenge as complete and move on." ] }, { "name": "Learn Relational Databases from Stanford", - "time": 60, + "time": 30, "video": "", "challengeNumber": 34, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.", + "Note that these lectures are non-interactive. Don't worry if you don't understand them very well - you will understand these concepts much better once you apply them in the SQL challenge.", + "Go to https://class.stanford.edu/courses/DB/RDB/SelfPaced/courseware/ch-introduction/seq-vid-introduction/ and watch the videos."] }, { "name": "Pair program on SQL Movie Rating Queries", "time": 90, "video": "", "challengeNumber": 35, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "With Stanford's SQL course, you can do SQL queries, right in your browser.", + "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_query_core/ and all nine of these queries.", + "You may find it helpful to watch the lectures or read the annotated slides.", + "If possible, you should pair program on these." + ] }, { "name": "Pair program on SQL Social Network Queries", "time": 60, "video": "", "challengeNumber": 36, - "instructions": [ - "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/about and register for this course.", - "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." + "steps": [ + "Now let's do some additional SQL queries to further cement these concepts in your mind.", + "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_query_core/ and answer all 9 of the SQL query questions.", + "You may find it helpful to watch the lectures or read the annotated slides.", + "If possible, you should pair program on these." + ] + }, + { + "name": "Pair program on SQL Movie-Rating Modification", + "time": 90, + "video": "", + "challengeNumber": 37, + "steps": [ + "Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.", + "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_mod/web and answer all 4 of the SQL modification questions.", + "You may find it helpful to watch the lectures or read the annotated slides.", + "If possible, you should pair program on these." ] }, { "name": "Pair program on SQL Social Network Modification", - "time": 90, + "time": 30, "video": "", "challengeNumber": 37, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Let's answer a couple more SQL modification questions to further practice these concepts.", + "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_mod/ and answer the first 2 SQL modification questions. You can optionally try to answer the third one, but even Jennifer Widom admitted that it is quite difficult.", + "You may find it helpful to watch the lectures or read the annotated slides.", + "If possible, you should pair program on these." + ] }, { "name": "Learn JSON from Stanford", "time": 60, "video": "", "challengeNumber": 38, - "instructions": [ - "Go to https://class.stanford.edu/courses/DB/JSON/SelfPaced/about and register for this course.", - "Be sure to watch the videos, in addition to doing the exercises, because they have embedded challenges." + "steps": [ + "Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.", + "JSON is simple and easy to read. And hey, it's literally how you'd write an object in JavaScript!", + "Go to https://class.stanford.edu/courses/DB/JSON/SelfPaced/courseware/ch-json_data/seq-quiz-json/ and er for this course.", + "You may find it helpful to watch the lectures or read the annotated slides." ] }, { - "name": "Try Source Code Version Control with Git", + "name": "Try Git, the popular Source Code Revision Control System", "time": 30, "video": "", "challengeNumber": 39, - "instructions": [ + "steps": [ + "Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.", + "Git is also a great way to share and contribute to open source software.", "Go to https://www.codeschool.com/courses/try-git and complete this short interactive course." ] }, @@ -410,8 +487,11 @@ "time": 45, "video": "", "challengeNumber": 40, - "instructions": [ - "Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial." + "steps": [ + "Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!", + "The first step is to familiarize ourselves Node.js, the JavaScript-based web server that most full-stack JavaScript apps use.", + "Code School has an excellent course on Node.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. The challenges immediately following these Node.js challenges also require a Code School course, so you may want to try to complete all these challenges in one two-day period. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", + "When you're ready, go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1 and complete the first chapter." ] }, { @@ -419,83 +499,88 @@ "time": 45, "video": "", "challengeNumber": 41, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Try Node.js Streams", "time": 45, "video": "", "challengeNumber": 42, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "See how Node.js Modules work", "time": 45, "video": "", "challengeNumber": 43, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Start an Express.js Server", "time": 45, "video": "", "challengeNumber": 44, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Use Socket.io", "time": 45, "video": "", "challengeNumber": 45, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to persist data", "time": 45, "video": "", "challengeNumber": 46, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] - }, - { - "name": "Try MongoDB", - "time": 30, - "video": "", - "challengeNumber": 47, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] }, { "name": "Install Express.js", "time": 45, "video": "", "challengeNumber": 48, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": [ + "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1 and complete the section."] }, { "name": "Setup Express.js Middleware", "time": 45, "video": "", "challengeNumber": 49, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Take advantage of Parameters", "time": 45, "video": "", "challengeNumber": 50, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "Add the Body Parser", "time": 45, "video": "", "challengeNumber": 51, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Configure Routes in Express.js", "time": 45, "video": "", "challengeNumber": 52, - "instructions": ["Go to http://www.codecademy.com/tracks/web and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] + }, + { + "name": "Try MongoDB", + "time": 30, + "video": "", + "challengeNumber": 47, + "steps": [ + "MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.", + "Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial." + ] } -] \ No newline at end of file +] From a73e0f00274617dba6db6c47220745a9c264b862 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sat, 13 Dec 2014 14:23:13 -0800 Subject: [PATCH 21/48] add angular challenges and standin video --- seed_data/challenges.json | 259 ++++++++++++++++++++++---------------- 1 file changed, 150 insertions(+), 109 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index f0348784a0..650bddcd76 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -1,11 +1,11 @@ [ { - "name": "A One-minute Introduction to Free Code Camp", - "time": 1, - "video": "", + "name": "A 3 Minute Introduction to Free Code Camp", + "time": 3, + "video": "114444711", "challengeNumber": 0, "steps": [ - "Watch this 1-minute video, or simply read this summary:", + "Watch this 3-minute video, or simply read this summary:", "Our goal is to help you become an employable software engineer.", "We're going to do this by pair programming on projects for nonprofits.", "Pair programming is where two people code together on the same computer.", @@ -17,7 +17,7 @@ { "name": "Join the Free Code Camp Chat Room", "time": 5, - "video": "", + "video": "114444711", "challengeNumber": 1, "steps": [ "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", @@ -31,7 +31,7 @@ { "name": "Join the Free Code Camp Subreddit", "time": 5, - "video": "", + "video": "114444711", "challengeNumber": 2, "steps": [ "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community.", @@ -43,7 +43,7 @@ { "name": "Build a Personal Website", "time": 60, - "video": "", + "video": "114444711", "challengeNumber": 3, "steps": [ "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", @@ -52,7 +52,7 @@ { "name": "Build a Responsive Blog Theme", "time": 60, - "video": "", + "video": "114444711", "challengeNumber": 4, "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", @@ -62,7 +62,7 @@ { "name": "Build a Small Business Website", "time": 60, - "video": "", + "video": "114444711", "challengeNumber": 5, "steps": ["Ready for some more HTML and CSS fundamentals?", "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] @@ -70,7 +70,7 @@ { "name": "Tweak HTML and CSS in CodePen", "time": 10, - "video": "", + "video": "114444711", "challengeNumber": 6, "steps": [ "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", @@ -86,7 +86,7 @@ { "name": "Build a CSS Robot", "time": 60, - "video": "", + "video": "114444711", "challengeNumber": 7, "steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] @@ -94,8 +94,8 @@ { "name": "Meet jQuery", "time": 30, - "video": "", - "challengeNumber": 9, + "video": "114444711", + "challengeNumber": 8, "steps": [ "jQuery is a powerful tool for manipulating HTML elements.", "It's a lot easier to use than JavaScript itself, so we'll learn it first.", @@ -107,8 +107,8 @@ { "name": "Traverse the DOM", "time": 30, - "video": "", - "challengeNumber": 10, + "video": "114444711", + "challengeNumber": 9, "steps": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", "Go to http://try.jquery.com/levels/2/challenges/1 and complete the second section." @@ -117,8 +117,8 @@ { "name": "Work with the DOM", "time": 30, - "video": "", - "challengeNumber": 11, + "video": "114444711", + "challengeNumber": 10, "steps": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", "Go to http://try.jquery.com/levels/3/challenges/1 and complete the third section." @@ -127,8 +127,8 @@ { "name": "Listen for DOM Elements", "time": 30, - "video": "", - "challengeNumber": 12, + "video": "114444711", + "challengeNumber": 11, "steps": [ "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", "Go to http://try.jquery.com/levels/4/challenges/1 and complete the fourth section." @@ -137,8 +137,8 @@ { "name": "Use jQuery for Styling", "time": 30, - "video": "", - "challengeNumber": 13, + "video": "114444711", + "challengeNumber": 12, "steps": [ "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", "Go to http://try.jquery.com/levels/5/challenges/1 and complete the fifth section." @@ -147,8 +147,8 @@ { "name": "Build a MadLibs Game", "time": 60, - "video": "", - "challengeNumber": 14, + "video": "114444711", + "challengeNumber": 13, "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", "If you aren't familiar with Mad Libs, they basically involve inserting random nouns, adjectives and verbs in to stories. The stories that result are often hilarious.", @@ -158,8 +158,8 @@ { "name": "Discover Chrome's DevTools", "time": 90, - "video": "", - "challengeNumber": 15, + "video": "114444711", + "challengeNumber": 14, "steps": [ "It's time to learn the most powerful tool your browser has - the Development Tools!", "If you aren't already using Chrome, you'll want to download it here. While it's true that Firefox has a tool called Firebug that is very similar to Chrome's DevTools, we will use Chrome for this challenge.", @@ -170,8 +170,8 @@ { "name": "Tackle jQuery Exercises", "time": 60, - "video": "", - "challengeNumber": 16, + "video": "114444711", + "challengeNumber": 15, "steps": [ "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", "There are many correct ways to solve each of these exercises. After you complete the challenge, you can compare your solution with our solution by pressing the \"#solution-button\" button.", @@ -181,8 +181,8 @@ { "name": "Customize Bootstrap with Bootswatch", "time": 10, - "video": "", - "challengeNumber": 17, + "video": "114444711", + "challengeNumber": 16, "steps": [ "Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.", "Go to http://getbootstrap.com/components/", @@ -202,8 +202,8 @@ { "name": "Inject Life with CSS Transformations", "time": 15, - "video": "", - "challengeNumber": 18, + "video": "114444711", + "challengeNumber": 17, "steps": [ "You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.", "Go to http://daneden.github.io/animate.css/ and try out some of the CSS animations.", @@ -217,8 +217,8 @@ { "name": "Learn Basic Computer Science Concepts from Stanford", "time": 120, - "video": "", - "challengeNumber": 19, + "video": "114444711", + "challengeNumber": 18, "steps": [ "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", "Note that Harvard also has an excellent introduction to computer science course called CS50, but it takes more than 100 hours to complete, and doesn't use JavaScript.", @@ -229,37 +229,37 @@ { "name": "Learn Loops from Stanford", "time": 120, - "video": "", - "challengeNumber": 20, + "video": "114444711", + "challengeNumber": 19, "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] }, { "name": "Learn Computer Hardware Concepts from Stanford", "time": 120, - "video": "", - "challengeNumber": 21, + "video": "114444711", + "challengeNumber": 20, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { "name": "Learn Computer Networking Concepts from Stanford", "time": 120, - "video": "", - "challengeNumber": 22, + "video": "114444711", + "challengeNumber": 21, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic from Stanford", "time": 120, - "video": "", - "challengeNumber": 23, + "video": "114444711", + "challengeNumber": 22, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security Concepts from Stanford", "time": 120, - "video": "", - "challengeNumber": 24, + "video": "114444711", + "challengeNumber": 23, "steps": [ "We're almost done with Stanford's Introduction to Computer Science course!", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/ and complete Week 6, the final week of the course."] @@ -267,8 +267,8 @@ { "name": "Build a Choose Your Own Adventure Game", "time": 60, - "video": "", - "challengeNumber": 25, + "video": "114444711", + "challengeNumber": 24, "steps": [ "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", "We're going to work through Codecademy's famous interactive JavaScript course.", @@ -278,8 +278,8 @@ { "name": "Build Rock Paper Scissors", "time": 60, - "video": "", - "challengeNumber": 26, + "video": "114444711", + "challengeNumber": 25, "steps": [ "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", "Go to http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1 and complete the section."] @@ -287,8 +287,8 @@ { "name": "Learn JavaScript For and While Loops", "time": 60, - "video": "", - "challengeNumber": 27, + "video": "114444711", + "challengeNumber": 26, "steps": [ "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\".", "Go to http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web and complete both the both For and While loop section." @@ -297,8 +297,8 @@ { "name": "Learn If and Then Statements", "time": 60, - "video": "", - "challengeNumber": 28, + "video": "114444711", + "challengeNumber": 27, "steps": [ "Most human thought can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] @@ -306,8 +306,8 @@ { "name": "Learn Control Flow", "time": 60, - "video": "", - "challengeNumber": 29, + "video": "114444711", + "challengeNumber": 28, "steps": [ "Now we're going to learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] @@ -315,7 +315,7 @@ { "name": "Build a Contact List", "time": 60, - "video": "", + "video": "114444711", "challengeNumber": 29, "steps": [ "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", @@ -324,8 +324,8 @@ { "name": "Build an Address Book", "time": 60, - "video": "", - "challengeNumber": 29, + "video": "114444711", + "challengeNumber": 30, "steps": [ "Let's learn more about objects.", "Go to http://www.codecademy.com/courses/spencer-sandbox/0/1 and complete the section."] @@ -333,8 +333,8 @@ { "name": "Build a Cash Register", "time": 60, - "video": "", - "challengeNumber": 30, + "video": "114444711", + "challengeNumber": 31, "steps": [ "In this final CodeCademy section, we'll learn even more about JavaScript objects.", "Go to http://www.codecademy.com/courses/objects-ii/0/1 and complete this final section."] @@ -342,8 +342,8 @@ { "name": "Get Help The Hacker Way with RSAP", "time": 30, - "video": "", - "challengeNumber": 31, + "video": "114444711", + "challengeNumber": 32, "steps": [ "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", "Try an intelligent Google query that involves JavaScript and filters for this year (since JavaScript changes)", @@ -356,8 +356,8 @@ { "name": "Learn Regular Expressions", "time": 60, - "video": "", - "challengeNumber": 32, + "video": "114444711", + "challengeNumber": 33, "steps": [ "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", "Check out http://www.regexr.com. It's a Regular Expression Sandbox.", @@ -368,8 +368,8 @@ { "name": "Start Pair Programming on Coderbyte problems", "time": 30, - "video": "", - "challengeNumber": 33, + "video": "114444711", + "challengeNumber": 34, "steps": [ "OK, we're finally ready to start pair programming!", "Many people use Skype or Google Hangouts to pair program, but if you talk with professional software engineers, they will tell you that it's not really pair programming unless both people have the ability to use the keyboard and mouse.", @@ -380,16 +380,18 @@ "Install it and launch it", "Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.", "If someone is interested, they will be your \"pair\" - the person you pair programming with.", - "First, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", + "First, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", + "Enter this id, and then password, to start the session.", + "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", + "Note that you can now control your pair's keyboard and mouse, enabling you to step in and code yourself on your pair's computer when desired", + "Now you can click the X to end the pair programming session.", + "Next, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", "You will need to share your randomly generated password with your pair as well.", "Once your pair connects, you will see a Team Viewer side menu. ", "Click the audio button that drops down.", "Click the headset icon and choose Voice over IP", "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", "Now you can click the X to end the pair programming session.", - "Next, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", - "Enter this id, and then password, to start the session.", - "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", "Now it's time to tackle CoderByte.", "Create a CoderByte account at http://coderbyte.com/sl/", "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", @@ -404,8 +406,8 @@ { "name": "Learn Relational Databases from Stanford", "time": 30, - "video": "", - "challengeNumber": 34, + "video": "114444711", + "challengeNumber": 35, "steps": [ "Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.", "Note that these lectures are non-interactive. Don't worry if you don't understand them very well - you will understand these concepts much better once you apply them in the SQL challenge.", @@ -414,8 +416,8 @@ { "name": "Pair program on SQL Movie Rating Queries", "time": 90, - "video": "", - "challengeNumber": 35, + "video": "114444711", + "challengeNumber": 36, "steps": [ "With Stanford's SQL course, you can do SQL queries, right in your browser.", "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_query_core/ and all nine of these queries.", @@ -426,8 +428,8 @@ { "name": "Pair program on SQL Social Network Queries", "time": 60, - "video": "", - "challengeNumber": 36, + "video": "114444711", + "challengeNumber": 37, "steps": [ "Now let's do some additional SQL queries to further cement these concepts in your mind.", "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_query_core/ and answer all 9 of the SQL query questions.", @@ -438,8 +440,8 @@ { "name": "Pair program on SQL Movie-Rating Modification", "time": 90, - "video": "", - "challengeNumber": 37, + "video": "114444711", + "challengeNumber": 38, "steps": [ "Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.", "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_movie_mod/web and answer all 4 of the SQL modification questions.", @@ -450,8 +452,8 @@ { "name": "Pair program on SQL Social Network Modification", "time": 30, - "video": "", - "challengeNumber": 37, + "video": "114444711", + "challengeNumber": 39, "steps": [ "Let's answer a couple more SQL modification questions to further practice these concepts.", "Go to https://class.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/seq-exercise-sql_social_mod/ and answer the first 2 SQL modification questions. You can optionally try to answer the third one, but even Jennifer Widom admitted that it is quite difficult.", @@ -462,8 +464,8 @@ { "name": "Learn JSON from Stanford", "time": 60, - "video": "", - "challengeNumber": 38, + "video": "114444711", + "challengeNumber": 40, "steps": [ "Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.", "JSON is simple and easy to read. And hey, it's literally how you'd write an object in JavaScript!", @@ -474,8 +476,8 @@ { "name": "Try Git, the popular Source Code Revision Control System", "time": 30, - "video": "", - "challengeNumber": 39, + "video": "114444711", + "challengeNumber": 41, "steps": [ "Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.", "Git is also a great way to share and contribute to open source software.", @@ -485,8 +487,8 @@ { "name": "Get started with Node.JS", "time": 45, - "video": "", - "challengeNumber": 40, + "video": "114444711", + "challengeNumber": 42, "steps": [ "Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!", "The first step is to familiarize ourselves Node.js, the JavaScript-based web server that most full-stack JavaScript apps use.", @@ -497,90 +499,129 @@ { "name": "Try Node.js Events", "time": 45, - "video": "", - "challengeNumber": 41, + "video": "114444711", + "challengeNumber": 43, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Try Node.js Streams", "time": 45, - "video": "", - "challengeNumber": 42, + "video": "114444711", + "challengeNumber": 44, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "See how Node.js Modules work", "time": 45, - "video": "", - "challengeNumber": 43, + "video": "114444711", + "challengeNumber": 45, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Start an Express.js Server", "time": 45, - "video": "", - "challengeNumber": 44, + "video": "114444711", + "challengeNumber": 46, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Use Socket.io", "time": 45, - "video": "", - "challengeNumber": 45, + "video": "114444711", + "challengeNumber": 47, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to persist data", "time": 45, - "video": "", - "challengeNumber": 46, + "video": "114444711", + "challengeNumber": 48, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] }, { - "name": "Install Express.js", + "name": "Dive Deeper into Express.js", "time": 45, - "video": "", - "challengeNumber": 48, + "video": "114444711", + "challengeNumber": 49, "steps": [ "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1 and complete the section."] }, { + "name": "Setup Express.js Middleware", "time": 45, - "video": "", - "challengeNumber": 49, + "video": "114444711", + "challengeNumber": 50, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Take advantage of Parameters", "time": 45, - "video": "", - "challengeNumber": 50, + "video": "114444711", + "challengeNumber": 51, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "Add the Body Parser", "time": 45, - "video": "", - "challengeNumber": 51, + "video": "114444711", + "challengeNumber": 52, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Configure Routes in Express.js", "time": 45, - "video": "", - "challengeNumber": 52, + "video": "114444711", + "challengeNumber": 53, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Try MongoDB", "time": 30, - "video": "", - "challengeNumber": 47, + "video": "114444711", + "challengeNumber": 54, "steps": [ "MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.", "Go to http://try.mongodb.org/ and work through their interactive MongoDB tutorial." ] + }, + { + "name": " Angular.js", + "time": 45, + "video": "114444711", + "challengeNumber": 55, + "steps": [ + "Code School has a short, free Angular.js course. This will give us a quick tour of Angular.js's mechanics and features.", + "In this course, we'll build a virtual shop entirely in Angular.js.", + "Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/1/section/1/video/1 and complete the section."] + }, + { + "name": "Apply Angular.js Directives", + "time": 45, + "video": "114444711", + "challengeNumber": 56, + "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1 and complete the section."] + }, + { + "name": "Power Forms with Angular.js", + "time": 45, + "video": "114444711", + "challengeNumber": 57, + "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1 and complete the section."] + }, + { + "name": "Customize Angular.js Directives", + "time": 45, + "video": "114444711", + "challengeNumber": 58, + "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1 and complete the section."] + }, + { + "name": "Create Angular.js Services", + "time": 45, + "video": "114444711", + "challengeNumber": 59, + "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1 and complete the section."] } ] From 675b0ebd47da0dc2bea9034aaaa801f4da4ac5c0 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sat, 13 Dec 2014 21:07:33 -0800 Subject: [PATCH 22/48] continue work on challenges --- seed_data/challenges.json | 120 +++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 650bddcd76..224a114a84 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -2,7 +2,7 @@ { "name": "A 3 Minute Introduction to Free Code Camp", "time": 3, - "video": "114444711", + "video": "114447214", "challengeNumber": 0, "steps": [ "Watch this 3-minute video, or simply read this summary:", @@ -17,7 +17,7 @@ { "name": "Join the Free Code Camp Chat Room", "time": 5, - "video": "114444711", + "video": "114447214", "challengeNumber": 1, "steps": [ "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", @@ -31,7 +31,7 @@ { "name": "Join the Free Code Camp Subreddit", "time": 5, - "video": "114444711", + "video": "114447214", "challengeNumber": 2, "steps": [ "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community.", @@ -43,7 +43,7 @@ { "name": "Build a Personal Website", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 3, "steps": [ "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", @@ -52,7 +52,7 @@ { "name": "Build a Responsive Blog Theme", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 4, "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", @@ -62,7 +62,7 @@ { "name": "Build a Small Business Website", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 5, "steps": ["Ready for some more HTML and CSS fundamentals?", "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] @@ -70,7 +70,7 @@ { "name": "Tweak HTML and CSS in CodePen", "time": 10, - "video": "114444711", + "video": "114447214", "challengeNumber": 6, "steps": [ "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", @@ -86,7 +86,7 @@ { "name": "Build a CSS Robot", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 7, "steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] @@ -94,7 +94,7 @@ { "name": "Meet jQuery", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 8, "steps": [ "jQuery is a powerful tool for manipulating HTML elements.", @@ -107,7 +107,7 @@ { "name": "Traverse the DOM", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 9, "steps": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", @@ -117,7 +117,7 @@ { "name": "Work with the DOM", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 10, "steps": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", @@ -127,7 +127,7 @@ { "name": "Listen for DOM Elements", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 11, "steps": [ "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", @@ -137,7 +137,7 @@ { "name": "Use jQuery for Styling", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 12, "steps": [ "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", @@ -147,7 +147,7 @@ { "name": "Build a MadLibs Game", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 13, "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", @@ -158,7 +158,7 @@ { "name": "Discover Chrome's DevTools", "time": 90, - "video": "114444711", + "video": "114447214", "challengeNumber": 14, "steps": [ "It's time to learn the most powerful tool your browser has - the Development Tools!", @@ -170,7 +170,7 @@ { "name": "Tackle jQuery Exercises", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 15, "steps": [ "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", @@ -181,7 +181,7 @@ { "name": "Customize Bootstrap with Bootswatch", "time": 10, - "video": "114444711", + "video": "114447214", "challengeNumber": 16, "steps": [ "Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.", @@ -202,7 +202,7 @@ { "name": "Inject Life with CSS Transformations", "time": 15, - "video": "114444711", + "video": "114447214", "challengeNumber": 17, "steps": [ "You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.", @@ -217,7 +217,7 @@ { "name": "Learn Basic Computer Science Concepts from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 18, "steps": [ "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", @@ -229,7 +229,7 @@ { "name": "Learn Loops from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 19, "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] @@ -237,28 +237,28 @@ { "name": "Learn Computer Hardware Concepts from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 20, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { "name": "Learn Computer Networking Concepts from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 21, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 22, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security Concepts from Stanford", "time": 120, - "video": "114444711", + "video": "114447214", "challengeNumber": 23, "steps": [ "We're almost done with Stanford's Introduction to Computer Science course!", @@ -267,7 +267,7 @@ { "name": "Build a Choose Your Own Adventure Game", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 24, "steps": [ "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", @@ -278,7 +278,7 @@ { "name": "Build Rock Paper Scissors", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 25, "steps": [ "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", @@ -287,7 +287,7 @@ { "name": "Learn JavaScript For and While Loops", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 26, "steps": [ "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\".", @@ -297,7 +297,7 @@ { "name": "Learn If and Then Statements", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 27, "steps": [ "Most human thought can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", @@ -306,7 +306,7 @@ { "name": "Learn Control Flow", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 28, "steps": [ "Now we're going to learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", @@ -315,7 +315,7 @@ { "name": "Build a Contact List", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 29, "steps": [ "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", @@ -324,7 +324,7 @@ { "name": "Build an Address Book", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 30, "steps": [ "Let's learn more about objects.", @@ -333,7 +333,7 @@ { "name": "Build a Cash Register", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 31, "steps": [ "In this final CodeCademy section, we'll learn even more about JavaScript objects.", @@ -342,7 +342,7 @@ { "name": "Get Help The Hacker Way with RSAP", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 32, "steps": [ "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", @@ -356,7 +356,7 @@ { "name": "Learn Regular Expressions", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 33, "steps": [ "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", @@ -368,7 +368,7 @@ { "name": "Start Pair Programming on Coderbyte problems", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 34, "steps": [ "OK, we're finally ready to start pair programming!", @@ -406,7 +406,7 @@ { "name": "Learn Relational Databases from Stanford", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 35, "steps": [ "Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.", @@ -416,7 +416,7 @@ { "name": "Pair program on SQL Movie Rating Queries", "time": 90, - "video": "114444711", + "video": "114447214", "challengeNumber": 36, "steps": [ "With Stanford's SQL course, you can do SQL queries, right in your browser.", @@ -428,7 +428,7 @@ { "name": "Pair program on SQL Social Network Queries", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 37, "steps": [ "Now let's do some additional SQL queries to further cement these concepts in your mind.", @@ -440,7 +440,7 @@ { "name": "Pair program on SQL Movie-Rating Modification", "time": 90, - "video": "114444711", + "video": "114447214", "challengeNumber": 38, "steps": [ "Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.", @@ -452,7 +452,7 @@ { "name": "Pair program on SQL Social Network Modification", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 39, "steps": [ "Let's answer a couple more SQL modification questions to further practice these concepts.", @@ -464,7 +464,7 @@ { "name": "Learn JSON from Stanford", "time": 60, - "video": "114444711", + "video": "114447214", "challengeNumber": 40, "steps": [ "Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.", @@ -476,7 +476,7 @@ { "name": "Try Git, the popular Source Code Revision Control System", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 41, "steps": [ "Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.", @@ -487,7 +487,7 @@ { "name": "Get started with Node.JS", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 42, "steps": [ "Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!", @@ -499,49 +499,49 @@ { "name": "Try Node.js Events", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 43, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Try Node.js Streams", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 44, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "See how Node.js Modules work", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 45, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Start an Express.js Server", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 46, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Use Socket.io", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 47, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to persist data", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 48, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] }, { "name": "Dive Deeper into Express.js", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 49, "steps": [ "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", @@ -551,35 +551,35 @@ "name": "Setup Express.js Middleware", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 50, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Take advantage of Parameters", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 51, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "Add the Body Parser", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 52, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Configure Routes in Express.js", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 53, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Try MongoDB", "time": 30, - "video": "114444711", + "video": "114447214", "challengeNumber": 54, "steps": [ "MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.", @@ -589,7 +589,7 @@ { "name": " Angular.js", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 55, "steps": [ "Code School has a short, free Angular.js course. This will give us a quick tour of Angular.js's mechanics and features.", @@ -599,28 +599,28 @@ { "name": "Apply Angular.js Directives", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 56, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1 and complete the section."] }, { "name": "Power Forms with Angular.js", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 57, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1 and complete the section."] }, { "name": "Customize Angular.js Directives", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 58, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1 and complete the section."] }, { "name": "Create Angular.js Services", "time": 45, - "video": "114444711", + "video": "114447214", "challengeNumber": 59, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1 and complete the section."] } From 1d56a2572a6e7c38b7455d68cc295c9406325427 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 14 Dec 2014 09:01:37 -0800 Subject: [PATCH 23/48] tweaked challenges --- controllers/challenges.js | 2 +- models/User.js | 12 +- public/css/main.less | 1 - seed_data/challenges.json | 54 +++--- views/partials/challenges.jade | 314 +++++++++++++++++++-------------- 5 files changed, 221 insertions(+), 162 deletions(-) diff --git a/controllers/challenges.js b/controllers/challenges.js index e7f951f0cc..3bf2046b1c 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -7,7 +7,7 @@ var _ = require('lodash'); exports.returnChallenge = function(req, res, next) { var challengeNumber = parseInt(req.params.challengeNumber) || 0; - if (challengeNumber > 41) { challengeNumber = 0; } + if (challengeNumber > 60) { challengeNumber = 0; } Challenge.findOne({challengeNumber: challengeNumber}, function (err, c) { if (err) { console.error('Challenge err: ', err); diff --git a/models/User.js b/models/User.js index eaa6ed8672..27794012a5 100644 --- a/models/User.js +++ b/models/User.js @@ -66,7 +66,17 @@ var userSchema = new mongoose.Schema({ 46: { type: Number, default: 0 }, 47: { type: Number, default: 0 }, 48: { type: Number, default: 0 }, - 49: { type: Number, default: 0 } + 49: { type: Number, default: 0 }, + 50: { type: Number, default: 0 }, + 51: { type: Number, default: 0 }, + 52: { type: Number, default: 0 }, + 53: { type: Number, default: 0 }, + 54: { type: Number, default: 0 }, + 55: { type: Number, default: 0 }, + 56: { type: Number, default: 0 }, + 57: { type: Number, default: 0 }, + 58: { type: Number, default: 0 }, + 59: { type: Number, default: 0 } }, profile: { name: { type: String, default: '' }, diff --git a/public/css/main.less b/public/css/main.less index 7787cc8b6b..0542c37eb6 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -275,7 +275,6 @@ ul { height: 100%; } -<<<<<<< HEAD .signup-btn.btn { background-color: #ffac33; background-image: linear-gradient(#ffcc4d, #ffac33); diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 224a114a84..aef9afa13e 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -1,11 +1,11 @@ [ { - "name": "A 3 Minute Introduction to Free Code Camp", - "time": 3, + "name": "Learn how Free Code Camp Works", + "time": 1, "video": "114447214", "challengeNumber": 0, "steps": [ - "Watch this 3-minute video, or simply read this summary:", + "Watch this 1-minute video, or simply read this summary:", "Our goal is to help you become an employable software engineer.", "We're going to do this by pair programming on projects for nonprofits.", "Pair programming is where two people code together on the same computer.", @@ -15,7 +15,7 @@ ] }, { - "name": "Join the Free Code Camp Chat Room", + "name": "Join Our Chat Room", "time": 5, "video": "114447214", "challengeNumber": 1, @@ -29,7 +29,7 @@ ] }, { - "name": "Join the Free Code Camp Subreddit", + "name": "Subscribe to Our Subreddit", "time": 5, "video": "114447214", "challengeNumber": 2, @@ -92,7 +92,7 @@ "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] }, { - "name": "Meet jQuery", + "name": "Get Started with jQuery", "time": 30, "video": "114447214", "challengeNumber": 8, @@ -200,7 +200,7 @@ ] }, { - "name": "Inject Life with CSS Transformations", + "name": "Inject Animation into CSS", "time": 15, "video": "114447214", "challengeNumber": 17, @@ -215,7 +215,7 @@ ] }, { - "name": "Learn Basic Computer Science Concepts from Stanford", + "name": "Learn Basic Computer Science", "time": 120, "video": "114447214", "challengeNumber": 18, @@ -227,7 +227,7 @@ ] }, { - "name": "Learn Loops from Stanford", + "name": "Learn Loops", "time": 120, "video": "114447214", "challengeNumber": 19, @@ -235,28 +235,28 @@ "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] }, { - "name": "Learn Computer Hardware Concepts from Stanford", + "name": "Learn Computer Hardware", "time": 120, "video": "114447214", "challengeNumber": 20, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { - "name": "Learn Computer Networking Concepts from Stanford", + "name": "Learn Computer Networking", "time": 120, "video": "114447214", "challengeNumber": 21, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { - "name": "Learn Boolean Logic from Stanford", + "name": "Learn Boolean Logic", "time": 120, "video": "114447214", "challengeNumber": 22, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { - "name": "Learn Computer Security Concepts from Stanford", + "name": "Learn Computer Security", "time": 120, "video": "114447214", "challengeNumber": 23, @@ -265,7 +265,7 @@ "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/ and complete Week 6, the final week of the course."] }, { - "name": "Build a Choose Your Own Adventure Game", + "name": "Build an Adventure Game", "time": 60, "video": "114447214", "challengeNumber": 24, @@ -340,7 +340,7 @@ "Go to http://www.codecademy.com/courses/objects-ii/0/1 and complete this final section."] }, { - "name": "Get Help The Hacker Way with RSAP", + "name": "Get Help The Hacker Way", "time": 30, "video": "114447214", "challengeNumber": 32, @@ -366,8 +366,8 @@ ] }, { - "name": "Start Pair Programming on Coderbyte problems", - "time": 30, + "name": "Pair Program on Coderbyte", + "time": 60, "video": "114447214", "challengeNumber": 34, "steps": [ @@ -414,7 +414,7 @@ "Go to https://class.stanford.edu/courses/DB/RDB/SelfPaced/courseware/ch-introduction/seq-vid-introduction/ and watch the videos."] }, { - "name": "Pair program on SQL Movie Rating Queries", + "name": "Pair Program to Query SQL 1", "time": 90, "video": "114447214", "challengeNumber": 36, @@ -426,7 +426,7 @@ ] }, { - "name": "Pair program on SQL Social Network Queries", + "name": "Pair Program to Query SQL 2", "time": 60, "video": "114447214", "challengeNumber": 37, @@ -438,7 +438,7 @@ ] }, { - "name": "Pair program on SQL Movie-Rating Modification", + "name": "Pair Program to Modify SQL 1", "time": 90, "video": "114447214", "challengeNumber": 38, @@ -450,7 +450,7 @@ ] }, { - "name": "Pair program on SQL Social Network Modification", + "name": "Pair Program to Modify SQL 2", "time": 30, "video": "114447214", "challengeNumber": 39, @@ -474,7 +474,7 @@ ] }, { - "name": "Try Git, the popular Source Code Revision Control System", + "name": "Manage Source Code with Git", "time": 30, "video": "114447214", "challengeNumber": 41, @@ -485,7 +485,7 @@ ] }, { - "name": "Get started with Node.JS", + "name": "Get Started with Node.js", "time": 45, "video": "114447214", "challengeNumber": 42, @@ -511,7 +511,7 @@ "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { - "name": "See how Node.js Modules work", + "name": "Learn how Node.js Modules Work", "time": 45, "video": "114447214", "challengeNumber": 45, @@ -532,7 +532,7 @@ "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { - "name": "Use Redis to persist data", + "name": "Use Redis to Persist Data", "time": 45, "video": "114447214", "challengeNumber": 48, @@ -556,7 +556,7 @@ "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { - "name": "Take advantage of Parameters", + "name": "Take Advantage of Parameters", "time": 45, "video": "114447214", "challengeNumber": 51, @@ -587,7 +587,7 @@ ] }, { - "name": " Angular.js", + "name": "Get Started with Angular.js", "time": 45, "video": "114447214", "challengeNumber": 55, diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 127bf2e0c3..86ba560054 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -2,135 +2,185 @@ .panel-heading Challenges .panel-body ol(start='0') - h4 Web Design - li - a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") A One-minute Introduction to Free Code Camp - |   (1 min) - li - a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Enter the Free Code Camp Chat Room - |   (10 mins) - li - a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Create a Website and Deploy it to the Internet - |   (5 mins) - li - a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Install Github's Atom Text Editor - |   (5 mins) - li - a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Modify and Redeploy Your Website - |   (5 mins) - li - a(href="/challenges/5", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Add Dynamic Content to your Website - |   (10 mins) - li - a(href="/challenges/6", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Codecademy's HTML & CSS track - |   (7 hrs) - li - a(href="/challenges/7", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Experiment with HTML and CSS in CodePen - |   (10 mins) - li - a(href="/challenges/8", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Codecademy's jQuery track - |   (3 hrs) - li - a(href="/challenges/9", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Code School's Try jQuery - |   (4 hrs) - li - a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Code School's Discover DevTools - |   (2 hrs) - li - a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") jQuery Exercises - |   (1 hr) - li - a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Customize Bootstrap with Bootswatch - |   (10 mins) - li - a(href="/challenges/13", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Inject Life with CSS Transformations - |   (15 mins) - h4 Computer Science and JavaScript - li - a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Codecademy's JavaScript track - |   (10 hrs) - li - a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Stanford's Introduction to Computer Science - |   (24 hrs) - li - a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Get Help The Hacker Way with RSAP - |   (30 mins) - li - a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions - |   (1 hr) - li - a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Start Your First Pair Programming Session - |   (30 mins | Pair) - li - a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Easy Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - li - a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Stanford's Relational Databases Mini-course - |   (1 hr) - li - a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Stanford's SQL Mini-course - |   (4 hrs | Pair) - li - a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Stanford's JSON Mini-course - |   (1 hrs | Pair) - li - a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Medium Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - li - a.disabled(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Interview Question Machine - |   (5 hrs | Pair) - li - a.disabled(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build a Text-based Adventure - |   (5 hrs | Pair) - li - a.disabled(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Hard Algorithm Scripting Challenges on Coderbyte - |   (15 hrs | Pair) - h4 Full Stack JavaScript Development - li - a.disabled(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Code School's Try Git - |   (30 mins) - li - a.disabled(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Install Node.js - |   (1 hr) - li - a.disabled(href="/challenges/29", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Clone a Github Repo - |   (15 mins) - li - a.disabled(href="/challenges/30", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Deploy an app to Heroku - |   (15 mins) - li - a.disabled(href="/challenges/31", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Code School's Real-time web with Node.JS - |   (5 hrs) - li - a.disabled(href="/challenges/32", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Try MongoDB - |   (30 mins) - li - a.disabled(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Explore your Network with the LinkedIn API - |   (1 hr) - li - a.disabled(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Build your first API - |   (10 hrs | Pair) - li - a.disabled(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Aggregate Data with Chron Jobs and Screen Scraping - |   (10 hrs | Pair) - li - a.disabled(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Code School's Shaping up with Angular.JS - |   (5 hrs) - li - a.disabled(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Reverse Engineer SnapChat - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Reverse Engineer Reddit - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Reverse Engineer Pintrest - |   (50 hrs | Pair) - li - a.disabled(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Team Project - |   (150 hrs | Pair) - li - a.disabled(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Help a Nonprofit: Solo Project - |   (150 hrs | Pair) - li - a.disabled(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Crack the Coding Interview - |   (5 hrs) \ No newline at end of file + li + a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") Learn how Free Code Camp Works + |   (1 minute) + li + a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Join Our Chat Room + |   (5 minutes) + li + a(href="/challenges/2", class="#{ cc[2] > 0 ? 'strikethrough' : '' }") Subscribe to Our Subreddit + |   (5 minutes) + li + a(href="/challenges/3", class="#{ cc[3] > 0 ? 'strikethrough' : '' }") Build a Personal Website + |   (60 minutes) + li + a(href="/challenges/4", class="#{ cc[4] > 0 ? 'strikethrough' : '' }") Build a Responsive Blog Theme + |   (60 minutes) + li + a(href="/challenges/5", class="#{ cc[5] > 0 ? 'strikethrough' : '' }") Build a Small Business Website + |   (60 minutes) + li + a(href="/challenges/6", class="#{ cc[6] > 0 ? 'strikethrough' : '' }") Tweak HTML and CSS in CodePen + |   (10 minutes) + li + a(href="/challenges/7", class="#{ cc[7] > 0 ? 'strikethrough' : '' }") Build a CSS Robot + |   (60 minutes) + li + a(href="/challenges/8", class="#{ cc[8] > 0 ? 'strikethrough' : '' }") Get Started with jQuery + |   (30 minutes) + li + a(href="/challenges/9", class="#{ cc[9] > 0 ? 'strikethrough' : '' }") Traverse the DOM + |   (30 minutes) + li + a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Work with the DOM + |   (30 minutes) + li + a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Listen for DOM Elements + |   (30 minutes) + li + a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Use jQuery for Styling + |   (30 minutes) + li + a(href="/challenges/13", class="#{ cc[13] > 0 ? 'strikethrough' : '' }") Build a MadLibs Game + |   (60 minutes) + li + a(href="/challenges/14", class="#{ cc[14] > 0 ? 'strikethrough' : '' }") Discover Chrome's DevTools + |   (90 minutes) + li + a(href="/challenges/15", class="#{ cc[15] > 0 ? 'strikethrough' : '' }") Tackle jQuery Exercises + |   (60 minutes) + li + a(href="/challenges/16", class="#{ cc[16] > 0 ? 'strikethrough' : '' }") Customize Bootstrap + |   (10 minutes) + li + a(href="/challenges/17", class="#{ cc[17] > 0 ? 'strikethrough' : '' }") Inject Animation into CSS + |   (15 minutes) + li + a(href="/challenges/18", class="#{ cc[18] > 0 ? 'strikethrough' : '' }") Learn Basic Computer Science + |   (120 minutes) + li + a(href="/challenges/19", class="#{ cc[19] > 0 ? 'strikethrough' : '' }") Learn Loops + |   (120 minutes) + li + a(href="/challenges/20", class="#{ cc[20] > 0 ? 'strikethrough' : '' }") Learn Computer Hardware + |   (120 minutes) + li + a(href="/challenges/21", class="#{ cc[21] > 0 ? 'strikethrough' : '' }") Learn Computer Networking + |   (120 minutes) + li + a(href="/challenges/22", class="#{ cc[22] > 0 ? 'strikethrough' : '' }") Learn Boolean Logic + |   (120 minutes) + li + a(href="/challenges/23", class="#{ cc[23] > 0 ? 'strikethrough' : '' }") Learn Computer Security + |   (120 minutes) + li + a(href="/challenges/24", class="#{ cc[24] > 0 ? 'strikethrough' : '' }") Build an Adventure Game + |   (60 minutes) + li + a(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build Rock Paper Scissors + |   (60 minutes) + li + a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn For and While Loops + |   (60 minutes) + li + a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn If and Then Statements + |   (60 minutes) + li + a(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Learn Control Flow + |   (60 minutes) + li + a(href="/challenges/29", class="#{ cc[29] > 0 ? 'strikethrough' : '' }") Build a Contact List + |   (60 minutes) + li + a(href="/challenges/30", class="#{ cc[30] > 0 ? 'strikethrough' : '' }") Build an Address Book + |   (60 minutes) + li + a(href="/challenges/31", class="#{ cc[31] > 0 ? 'strikethrough' : '' }") Build a Cash Register + |   (60 minutes) + li + a(href="/challenges/32", class="#{ cc[32] > 0 ? 'strikethrough' : '' }") Get Help the Hacker Way + |   (30 minutes) + li + a(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions + |   (60 minutes) + li + a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Start Pair Program on Coderbyte + |   (60 minutes) + li + a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Databases + |   (30 minutes) + li + a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL 1 + |   (90 minutes) + li + a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL 2 + |   (60 minutes) + li + a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL 1 + |   (90 minutes) + li + a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL 2 + |   (60 minutes) + li + a(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Learn JSON + |   (60 minutes) + li + a(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Manage Source Code with Git + |   (60 minutes) + li + a(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Get Started with Node.js + |   (45 minutes) + li + a(href="/challenges/43", class="#{ cc[43] > 0 ? 'strikethrough' : '' }") Try Node.js Events + |   (45 minutes) + li + a(href="/challenges/44", class="#{ cc[44] > 0 ? 'strikethrough' : '' }") Try Node.js Streams + |   (45 minutes) + li + a(href="/challenges/45", class="#{ cc[45] > 0 ? 'strikethrough' : '' }") Learn how Node.js Modules Work + |   (45 minutes) + li + a(href="/challenges/46", class="#{ cc[46] > 0 ? 'strikethrough' : '' }") Start an Express.js Server + |   (45 minutes) + li + a(href="/challenges/47", class="#{ cc[47] > 0 ? 'strikethrough' : '' }") Use Socket.io + |   (45 minutes) + li + a(href="/challenges/48", class="#{ cc[48] > 0 ? 'strikethrough' : '' }") Use Redis to Persist Data + |   (45 minutes) + li + a(href="/challenges/49", class="#{ cc[49] > 0 ? 'strikethrough' : '' }") Dive Deeper into Express.js + |   (45 minutes) + li + a(href="/challenges/50", class="#{ cc[50] > 0 ? 'strikethrough' : '' }") Set up Express.js Middleware + |   (45 minutes) + li + a(href="/challenges/51", class="#{ cc[51] > 0 ? 'strikethrough' : '' }") Take Advantage of Parameters + |   (45 minutes) + li + a(href="/challenges/52", class="#{ cc[52] > 0 ? 'strikethrough' : '' }") Add the Body Parser + |   (45 minutes) + li + a(href="/challenges/53", class="#{ cc[53] > 0 ? 'strikethrough' : '' }") Configure Routes in Express.js + |   (45 minutes) + li + a(href="/challenges/54", class="#{ cc[54] > 0 ? 'strikethrough' : '' }") Try MongoDB + |   (30 minutes) + li + a(href="/challenges/55", class="#{ cc[55] > 0 ? 'strikethrough' : '' }") Get Started with Angular.js + |   (45 minutes) + li + a(href="/challenges/56", class="#{ cc[56] > 0 ? 'strikethrough' : '' }") Apply Angular.js Directives + |   (45 minutes) + li + a(href="/challenges/57", class="#{ cc[57] > 0 ? 'strikethrough' : '' }") Power Forms with Angular.js + |   (45 minutes) + li + a(href="/challenges/58", class="#{ cc[58] > 0 ? 'strikethrough' : '' }") Customize Angular.js Directives + |   (45 minutes) + li + a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services + |   (45 minutes) + + a.btn.btn-primary.disabled(href="/done-with-first-100-hours") I've finished all Free Code Camp challenges and all 90 CoderByte Challenges \ No newline at end of file From 782218f0209e936354ce796e494df18660a67cb6 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 14 Dec 2014 22:01:57 -0800 Subject: [PATCH 24/48] update partials and data --- seed_data/challenges.json | 128 +++++++++++++++++---------------- views/challenges/show.jade | 2 +- views/partials/challenges.jade | 2 +- 3 files changed, 67 insertions(+), 65 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index aef9afa13e..9d467958cc 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -1,8 +1,8 @@ [ { "name": "Learn how Free Code Camp Works", - "time": 1, - "video": "114447214", + "time": 2, + "video": "114486344", "challengeNumber": 0, "steps": [ "Watch this 1-minute video, or simply read this summary:", @@ -17,7 +17,7 @@ { "name": "Join Our Chat Room", "time": 5, - "video": "114447214", + "video": "114486344", "challengeNumber": 1, "steps": [ "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", @@ -31,19 +31,21 @@ { "name": "Subscribe to Our Subreddit", "time": 5, - "video": "114447214", + "video": "114486344", "challengeNumber": 2, "steps": [ - "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community.", + "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community. Our chatroom is great for realtime discussions, but our subreddit is ideal for longer-term discussions and open-ended questions.", "If you don't already have a Reddit account, create one by clicking the \"login or register\" button in the upper right hand corner.", - "If, in the past, you've discovered a link that helped you with some aspect of learning to code, share it by submitting it to the subreddit. Click the \"Submit a new link\" button, paste the link into the url field, and press the \"suggest title\" button. You can update the suggested title if you need to. Then you're done.", + "Click on the \"Introduce yourself here\" discussion.", + "Here you can read through other Free Code Camp community members' self introductions.", + "Go ahead and type a brief self introduction of your own.", "Subscribe to the Free Code Camp subreddit by clicking \"Subscribe\". You might want to subscribe to these subreddits as well: http://www.reddit.com/r/learnprogramming/ and http://www.reddit.com/r/learnjavascript." ] }, { "name": "Build a Personal Website", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 3, "steps": [ "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", @@ -52,7 +54,7 @@ { "name": "Build a Responsive Blog Theme", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 4, "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", @@ -62,7 +64,7 @@ { "name": "Build a Small Business Website", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 5, "steps": ["Ready for some more HTML and CSS fundamentals?", "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] @@ -70,7 +72,7 @@ { "name": "Tweak HTML and CSS in CodePen", "time": 10, - "video": "114447214", + "video": "114486344", "challengeNumber": 6, "steps": [ "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", @@ -86,7 +88,7 @@ { "name": "Build a CSS Robot", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 7, "steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] @@ -94,7 +96,7 @@ { "name": "Get Started with jQuery", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 8, "steps": [ "jQuery is a powerful tool for manipulating HTML elements.", @@ -107,7 +109,7 @@ { "name": "Traverse the DOM", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 9, "steps": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", @@ -117,7 +119,7 @@ { "name": "Work with the DOM", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 10, "steps": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", @@ -127,7 +129,7 @@ { "name": "Listen for DOM Elements", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 11, "steps": [ "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", @@ -137,7 +139,7 @@ { "name": "Use jQuery for Styling", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 12, "steps": [ "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", @@ -147,7 +149,7 @@ { "name": "Build a MadLibs Game", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 13, "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", @@ -158,7 +160,7 @@ { "name": "Discover Chrome's DevTools", "time": 90, - "video": "114447214", + "video": "114486344", "challengeNumber": 14, "steps": [ "It's time to learn the most powerful tool your browser has - the Development Tools!", @@ -170,7 +172,7 @@ { "name": "Tackle jQuery Exercises", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 15, "steps": [ "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", @@ -181,7 +183,7 @@ { "name": "Customize Bootstrap with Bootswatch", "time": 10, - "video": "114447214", + "video": "114486344", "challengeNumber": 16, "steps": [ "Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.", @@ -202,7 +204,7 @@ { "name": "Inject Animation into CSS", "time": 15, - "video": "114447214", + "video": "114486344", "challengeNumber": 17, "steps": [ "You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.", @@ -217,7 +219,7 @@ { "name": "Learn Basic Computer Science", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 18, "steps": [ "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", @@ -229,7 +231,7 @@ { "name": "Learn Loops", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 19, "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] @@ -237,28 +239,28 @@ { "name": "Learn Computer Hardware", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 20, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { "name": "Learn Computer Networking", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 21, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 22, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security", "time": 120, - "video": "114447214", + "video": "114486344", "challengeNumber": 23, "steps": [ "We're almost done with Stanford's Introduction to Computer Science course!", @@ -267,7 +269,7 @@ { "name": "Build an Adventure Game", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 24, "steps": [ "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", @@ -278,7 +280,7 @@ { "name": "Build Rock Paper Scissors", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 25, "steps": [ "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", @@ -287,7 +289,7 @@ { "name": "Learn JavaScript For and While Loops", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 26, "steps": [ "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\".", @@ -297,7 +299,7 @@ { "name": "Learn If and Then Statements", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 27, "steps": [ "Most human thought can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", @@ -306,7 +308,7 @@ { "name": "Learn Control Flow", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 28, "steps": [ "Now we're going to learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", @@ -315,7 +317,7 @@ { "name": "Build a Contact List", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 29, "steps": [ "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", @@ -324,7 +326,7 @@ { "name": "Build an Address Book", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 30, "steps": [ "Let's learn more about objects.", @@ -333,7 +335,7 @@ { "name": "Build a Cash Register", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 31, "steps": [ "In this final CodeCademy section, we'll learn even more about JavaScript objects.", @@ -342,7 +344,7 @@ { "name": "Get Help The Hacker Way", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 32, "steps": [ "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", @@ -356,7 +358,7 @@ { "name": "Learn Regular Expressions", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 33, "steps": [ "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", @@ -368,7 +370,7 @@ { "name": "Pair Program on Coderbyte", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 34, "steps": [ "OK, we're finally ready to start pair programming!", @@ -406,7 +408,7 @@ { "name": "Learn Relational Databases from Stanford", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 35, "steps": [ "Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.", @@ -416,7 +418,7 @@ { "name": "Pair Program to Query SQL 1", "time": 90, - "video": "114447214", + "video": "114486344", "challengeNumber": 36, "steps": [ "With Stanford's SQL course, you can do SQL queries, right in your browser.", @@ -428,7 +430,7 @@ { "name": "Pair Program to Query SQL 2", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 37, "steps": [ "Now let's do some additional SQL queries to further cement these concepts in your mind.", @@ -440,7 +442,7 @@ { "name": "Pair Program to Modify SQL 1", "time": 90, - "video": "114447214", + "video": "114486344", "challengeNumber": 38, "steps": [ "Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.", @@ -452,7 +454,7 @@ { "name": "Pair Program to Modify SQL 2", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 39, "steps": [ "Let's answer a couple more SQL modification questions to further practice these concepts.", @@ -464,7 +466,7 @@ { "name": "Learn JSON from Stanford", "time": 60, - "video": "114447214", + "video": "114486344", "challengeNumber": 40, "steps": [ "Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.", @@ -476,7 +478,7 @@ { "name": "Manage Source Code with Git", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 41, "steps": [ "Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.", @@ -487,7 +489,7 @@ { "name": "Get Started with Node.js", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 42, "steps": [ "Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!", @@ -499,49 +501,49 @@ { "name": "Try Node.js Events", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 43, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Try Node.js Streams", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 44, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "Learn how Node.js Modules Work", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 45, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Start an Express.js Server", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 46, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Use Socket.io", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 47, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to Persist Data", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 48, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] }, { "name": "Dive Deeper into Express.js", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 49, "steps": [ "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", @@ -551,35 +553,35 @@ "name": "Setup Express.js Middleware", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 50, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] }, { "name": "Take Advantage of Parameters", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 51, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] }, { "name": "Add the Body Parser", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 52, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Configure Routes in Express.js", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 53, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Try MongoDB", "time": 30, - "video": "114447214", + "video": "114486344", "challengeNumber": 54, "steps": [ "MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.", @@ -589,7 +591,7 @@ { "name": "Get Started with Angular.js", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 55, "steps": [ "Code School has a short, free Angular.js course. This will give us a quick tour of Angular.js's mechanics and features.", @@ -599,28 +601,28 @@ { "name": "Apply Angular.js Directives", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 56, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1 and complete the section."] }, { "name": "Power Forms with Angular.js", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 57, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1 and complete the section."] }, { "name": "Customize Angular.js Directives", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 58, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1 and complete the section."] }, { "name": "Create Angular.js Services", "time": 45, - "video": "114447214", + "video": "114486344", "challengeNumber": 59, "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1 and complete the section."] } diff --git a/views/challenges/show.jade b/views/challenges/show.jade index c314801bfa..3a33d8db5e 100644 --- a/views/challenges/show.jade +++ b/views/challenges/show.jade @@ -3,7 +3,7 @@ block content .row .col-sm-12.col-md-8.col-xs-12 .panel.panel-primary - .panel-heading #{name} (takes #{time}) + .panel-heading #{name} (takes #{time} minutes) .panel.panel-body .embed-responsive.embed-responsive-16by9 iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}') diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 86ba560054..19bd85d9c6 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -4,7 +4,7 @@ ol(start='0') li a(href="/challenges/0", class="#{ cc[0] > 0 ? 'strikethrough' : '' }") Learn how Free Code Camp Works - |   (1 minute) + |   (2 minutes) li a(href="/challenges/1", class="#{ cc[1] > 0 ? 'strikethrough' : '' }") Join Our Chat Room |   (5 minutes) From 666953d12739e64a41b6d49f7c9cfbf624895c0e Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 14 Dec 2014 22:24:54 -0800 Subject: [PATCH 25/48] add the livecode and inbox.js routes and stand in text --- app.js | 2 ++ controllers/resources.js | 12 ++++++++++++ views/javascript-in-your-inbox.jade | 12 ++++++++++++ views/live-pair-programming.jade | 18 ++++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 views/javascript-in-your-inbox.jade create mode 100644 views/live-pair-programming.jade diff --git a/app.js b/app.js index 337ff4769f..5cfa40e553 100644 --- a/app.js +++ b/app.js @@ -127,6 +127,8 @@ app.get( app.get('/learn-to-code', resourcesController.learnToCode); app.get('/privacy', resourcesController.privacy); app.get('/jquery-exercises', resourcesController.jqueryExercises); +app.get('/live-pair-programming', resourcesController.livePairProgramming); +app.get('/javascript-in-your-inbox', resourcesController.javaScriptInYourInbox); app.get('/text-based-adventure-tutorial-app', resourcesController.textBasedAdventureTutorial); app.get('/chromebook', resourcesController.chromebook); app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp); diff --git a/controllers/resources.js b/controllers/resources.js index d4844a83f4..96a748b19c 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -27,6 +27,18 @@ exports.jqueryExercises = function(req, res) { }); } +exports.livePairProgramming = function(req, res) { + res.render('live-pair-programming', { + title: 'Live Pair Programming' + }); +} + +exports.javaScriptInYourInbox = function(req, res) { + res.render('javascript-in-your-inbox', { + title: 'JavaScript in your Inbox' + }); +} + exports.programmerInterviewQuestionsApp = function(req, res) { res.render('programmer-interview-questions-app', { title: 'programmer-interview-questions-app' diff --git a/views/javascript-in-your-inbox.jade b/views/javascript-in-your-inbox.jade new file mode 100644 index 0000000000..fdd64ba8a3 --- /dev/null +++ b/views/javascript-in-your-inbox.jade @@ -0,0 +1,12 @@ +extends layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Win a Chromebook + h2 Sign up for Inbox.js - JavaScript challenges in your inbox - and enter to win a Chromebook! + img.image-responsive(src="https://s3.amazonaws.com/freecodecamp/chromebook.jpg" alt="HP Chromebook 11") + script(src='//widget-prime.rafflecopter.com/launch.js') + a#rcwidget_a7khonhd.rcptr(href='http://www.rafflecopter.com/rafl/display/d70901b10/', rel='nofollow', data-raflid='d70901b10', data-theme='classic', data-template='') a Rafflecopter giveaway + .animated.zoomInDown.delay-10 + p Finished signing up for the giveaway? + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade new file mode 100644 index 0000000000..6d236b36a0 --- /dev/null +++ b/views/live-pair-programming.jade @@ -0,0 +1,18 @@ +extends layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Live Pair Programming + h2 Watch Quincy Larson and Berkeley True pair program on CoderByte challenges live Tuesday, December 16 at 6 p.m. Pacific Standard Time. + h3 Check back here for details. And follow   + a(href='http://twitter.com/intent/user?screen_name=FreeCodeCamp' target='_blank') @FreeCodeCamp + | ,   + a(href='http://twitter.com/intent/user?screen_name=ossia' target='_blank') @ossia + |   and   + a(href='http://twitter.com/intent/user?screen_name=BerkeleyTrue' target='_blank') @BerkeleyTrue + |   on Twitter. + p Got 3 minutes? Watch this funny video about pair programming, then start learning to code with us! + .embed-responsive.embed-responsive-16by9 + iframe.embed-responsive-item(width='560', height='315', src='//www.youtube.com/embed/dYBjVTMUQY0', frameborder='0', allowfullscreen='') + br + a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) + br \ No newline at end of file From b4914fa4971248b727b61a287dc16afc14e8f1d5 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 14 Dec 2014 22:26:29 -0800 Subject: [PATCH 26/48] small copy update to pair programming page --- views/live-pair-programming.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade index 6d236b36a0..3f7c086070 100644 --- a/views/live-pair-programming.jade +++ b/views/live-pair-programming.jade @@ -2,7 +2,7 @@ extends layout block content .jumbotron.negative-15.text-center h1.hug-top Live Pair Programming - h2 Watch Quincy Larson and Berkeley True pair program on CoderByte challenges live Tuesday, December 16 at 6 p.m. Pacific Standard Time. + h2 Watch Quincy Larson and Berkeley Martinez pair program on CoderByte challenges live Tuesday, December 16 from 6 p.m. to 7 p.m., Pacific Standard Time. h3 Check back here for details. And follow   a(href='http://twitter.com/intent/user?screen_name=FreeCodeCamp' target='_blank') @FreeCodeCamp | ,   From 80582b70bddae5ba4bc5b7e64715de3d038086b7 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 15 Dec 2014 14:17:20 -0800 Subject: [PATCH 27/48] make more updates to challenges and view --- seed_data/challenges.json | 49 +++++++++++++++++++++++----------- views/partials/challenges.jade | 12 ++++----- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 9d467958cc..4d5d02a59e 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -58,6 +58,9 @@ "challengeNumber": 4, "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", + "A responsive website will automatically adapt to changes in your browser's width. This means that you can make one version of a website that will look good on desktop, tablet and phone.", + "Later, we'll use Twitter's Bootstrap CSS framework to build responsive websites.", + "You can check it out here: http://getbootstrap.com/.", "Go to https://dash.generalassemb.ly/projects/jeffs-blog-1 and complete the second project." ] }, @@ -127,7 +130,7 @@ ] }, { - "name": "Listen for DOM Elements", + "name": "Listen for DOM Events", "time": 30, "video": "114486344", "challengeNumber": 11, @@ -154,7 +157,7 @@ "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", "If you aren't familiar with Mad Libs, they basically involve inserting random nouns, adjectives and verbs in to stories. The stories that result are often hilarious.", - "Go to httpsng://dash.generalassemb.ly/projects/mad-libs-1 and complete the fifth project." + "Go to https://dash.generalassemb.ly/projects/mad-libs-1 and complete the fifth project." ] }, { @@ -275,7 +278,9 @@ "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", "We're going to work through Codecademy's famous interactive JavaScript course.", "This course will teach us some JavaScript fundamentals while guiding us through the process of building interesting web apps, all within Codecademy's learner-friendly environment!", - "Go to http://www.codecademy.com/courses/getting-started-v2/0/1 and complete the section."] + "Go to http://www.codecademy.com/courses/getting-started-v2/0/1 and complete the section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-x9DnD/0/1." + ] }, { "name": "Build Rock Paper Scissors", @@ -284,26 +289,31 @@ "challengeNumber": 25, "steps": [ "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", - "Go to http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1 and complete the section."] + "Go to http://www.codecademy.com/courses/javascript-beginner-en-6LzGd/0/1 and complete the section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-Bthev-mskY8/0/1." + ] }, { - "name": "Learn JavaScript For and While Loops", + "name": "Learn JavaScript For Loops", "time": 60, "video": "114486344", "challengeNumber": 26, "steps": [ - "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\".", - "Go to http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web and complete both the both For and While loop section." + "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\". First, we'll learn the For Loop.", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-NhsaT/0/1web and complete both the both For and While loop section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-XEDZA/0/1." ] }, { - "name": "Learn If and Then Statements", + "name": "Learn While Loops", "time": 60, "video": "114486344", "challengeNumber": 27, "steps": [ - "Most human thought can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", - "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] + + "Go to http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1 and complete the section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1." + ] }, { "name": "Learn Control Flow", @@ -311,8 +321,11 @@ "video": "114486344", "challengeNumber": 28, "steps": [ - "Now we're going to learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", - "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section."] + "Much of human reasoning can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", + "We'll also learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", + "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-ZA2rb/0/1." + ] }, { "name": "Build a Contact List", @@ -321,7 +334,9 @@ "challengeNumber": 29, "steps": [ "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", - "Go to http://www.codecademy.com/courses/javascript-beginner-en-9Sgpi/0/1 and complete the section."] + "Go to http://www.codecademy.com/courses/javascript-beginner-en-9Sgpi/0/1 and complete the section.", + "Be sure to also complete this section: ." + ] }, { "name": "Build an Address Book", @@ -330,7 +345,9 @@ "challengeNumber": 30, "steps": [ "Let's learn more about objects.", - "Go to http://www.codecademy.com/courses/spencer-sandbox/0/1 and complete the section."] + "Go to http://www.codecademy.com/courses/spencer-sandbox/0/1 and complete the section.", + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-3bmfN/0/1." + ] }, { "name": "Build a Cash Register", @@ -339,7 +356,9 @@ "challengeNumber": 31, "steps": [ "In this final CodeCademy section, we'll learn even more about JavaScript objects.", - "Go to http://www.codecademy.com/courses/objects-ii/0/1 and complete this final section."] + "Go to http://www.codecademy.com/courses/objects-ii/0/1 and complete this section.", + "Be sure to also complete the final section: http://www.codecademy.com/courses/close-the-super-makert/0/1." + ] }, { "name": "Get Help The Hacker Way", diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 19bd85d9c6..34b718fb83 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -36,7 +36,7 @@ a(href="/challenges/10", class="#{ cc[10] > 0 ? 'strikethrough' : '' }") Work with the DOM |   (30 minutes) li - a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Listen for DOM Elements + a(href="/challenges/11", class="#{ cc[11] > 0 ? 'strikethrough' : '' }") Listen for DOM Events |   (30 minutes) li a(href="/challenges/12", class="#{ cc[12] > 0 ? 'strikethrough' : '' }") Use jQuery for Styling @@ -84,7 +84,7 @@ a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn For and While Loops |   (60 minutes) li - a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn If and Then Statements + a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn If and Else Statements |   (60 minutes) li a(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Learn Control Flow @@ -111,16 +111,16 @@ a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Databases |   (30 minutes) li - a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL 1 + a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt.1 |   (90 minutes) li - a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL 2 + a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt.2 |   (60 minutes) li - a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL 1 + a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt.1 |   (90 minutes) li - a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL 2 + a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt.2 |   (60 minutes) li a(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Learn JSON From ab1845cd03272de28f48be64d2f41f8e8047f916 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 15 Dec 2014 20:14:31 -0800 Subject: [PATCH 28/48] update challenge.json --- seed_data/challenges.json | 98 +++++++++++++++++----------------- views/partials/challenges.jade | 20 +++---- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 4d5d02a59e..f5a8604b3a 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -17,7 +17,7 @@ { "name": "Join Our Chat Room", "time": 5, - "video": "114486344", + "video": "114627322", "challengeNumber": 1, "steps": [ "Now we're going to join the Free Code Camp chat room. You can come here any time of day to hang out, ask questions, or find another Code Camper who's on the same challenge as you and wants to pair program.", @@ -31,7 +31,7 @@ { "name": "Subscribe to Our Subreddit", "time": 5, - "video": "114486344", + "video": "114578442", "challengeNumber": 2, "steps": [ "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community. Our chatroom is great for realtime discussions, but our subreddit is ideal for longer-term discussions and open-ended questions.", @@ -45,7 +45,7 @@ { "name": "Build a Personal Website", "time": 60, - "video": "114486344", + "video": "114627406", "challengeNumber": 3, "steps": [ "There are tons of interactive HTML and CSS tutorials out there, but Nathan Bashaw's Dash tutorials, which he built for General Assembly, are our favorite.", @@ -67,7 +67,7 @@ { "name": "Build a Small Business Website", "time": 60, - "video": "114486344", + "video": "114578438", "challengeNumber": 5, "steps": ["Ready for some more HTML and CSS fundamentals?", "Go to https://dash.generalassemb.ly/projects/eshas-restaurant-1 and complete the third project."] @@ -75,7 +75,7 @@ { "name": "Tweak HTML and CSS in CodePen", "time": 10, - "video": "114486344", + "video": "110752744", "challengeNumber": 6, "steps": [ "Now we're going to learn how to use a tool called CodePen, which lets you experiment with HTML and CSS, and even create single-page web applications, right in your browser!", @@ -91,7 +91,7 @@ { "name": "Build a CSS Robot", "time": 60, - "video": "114486344", + "video": "114578436", "challengeNumber": 7, "steps": ["Now let's learn some more CSS, and a small amount of a JavaScript-based tool called jQuery.", "Go to https://dash.generalassemb.ly/projects/cotbots-1 and complete the fourth project."] @@ -99,7 +99,7 @@ { "name": "Get Started with jQuery", "time": 30, - "video": "114486344", + "video": "114578435", "challengeNumber": 8, "steps": [ "jQuery is a powerful tool for manipulating HTML elements.", @@ -112,7 +112,7 @@ { "name": "Traverse the DOM", "time": 30, - "video": "114486344", + "video": "114591805", "challengeNumber": 9, "steps": [ "Now let's learn more about DOM traversal - that is, moving from one HTML element to the next.", @@ -122,7 +122,7 @@ { "name": "Work with the DOM", "time": 30, - "video": "114486344", + "video": "114591804", "challengeNumber": 10, "steps": [ "Let's learn some more advanced ways to use jQuery to manipulate the DOM.", @@ -132,7 +132,7 @@ { "name": "Listen for DOM Events", "time": 30, - "video": "114486344", + "video": "114591802", "challengeNumber": 11, "steps": [ "Now let's learn how to use jQuery Listeners. These will \"listen\" for something to happen, and then trigger a subsequent event", @@ -142,7 +142,7 @@ { "name": "Use jQuery for Styling", "time": 30, - "video": "114486344", + "video": "114591801", "challengeNumber": 12, "steps": [ "Finally, let's use jQuery to manipulate the way websites look, by changing the CSS of elements.", @@ -152,7 +152,7 @@ { "name": "Build a MadLibs Game", "time": 60, - "video": "114486344", + "video": "114591799", "challengeNumber": 13, "steps": [ "Now that we've built a foundation in jQuery, let's go back to Dash and do it's last challenge.", @@ -163,7 +163,7 @@ { "name": "Discover Chrome's DevTools", "time": 90, - "video": "114486344", + "video": "110752743", "challengeNumber": 14, "steps": [ "It's time to learn the most powerful tool your browser has - the Development Tools!", @@ -175,7 +175,7 @@ { "name": "Tackle jQuery Exercises", "time": 60, - "video": "114486344", + "video": "113173612", "challengeNumber": 15, "steps": [ "We've built some special jQuery challenges to help you reinforce your knowledge of this fundamental skill.", @@ -186,7 +186,7 @@ { "name": "Customize Bootstrap with Bootswatch", "time": 10, - "video": "114486344", + "video": "110752741", "challengeNumber": 16, "steps": [ "Let's learn a little more about Twitter's responsive CSS framework, Bootstrap, and how we can add some custom themes to it.", @@ -207,7 +207,7 @@ { "name": "Inject Animation into CSS", "time": 15, - "video": "114486344", + "video": "110752740", "challengeNumber": 17, "steps": [ "You may have noticed some sites have cool animations. Actually, animating DOM elements is pretty straightforward if you use a CSS library called Animate.css.", @@ -222,7 +222,7 @@ { "name": "Learn Basic Computer Science", "time": 120, - "video": "114486344", + "video": "114628241", "challengeNumber": 18, "steps": [ "Stanford has an excellent free online Computer Science curriculum. This interactive course uses a modified version of JavaScript. It will cover a lot of concepts quickly.", @@ -234,7 +234,7 @@ { "name": "Learn Loops", "time": 120, - "video": "114486344", + "video": "114597348", "challengeNumber": 19, "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] @@ -242,28 +242,28 @@ { "name": "Learn Computer Hardware", "time": 120, - "video": "114486344", + "video": "114597347", "challengeNumber": 20, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] }, { "name": "Learn Computer Networking", "time": 120, - "video": "114486344", + "video": "114604811", "challengeNumber": 21, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic", "time": 120, - "video": "114486344", + "video": "114604812", "challengeNumber": 22, "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security", "time": 120, - "video": "114486344", + "video": "114604813", "challengeNumber": 23, "steps": [ "We're almost done with Stanford's Introduction to Computer Science course!", @@ -272,7 +272,7 @@ { "name": "Build an Adventure Game", "time": 60, - "video": "114486344", + "video": "114604814", "challengeNumber": 24, "steps": [ "Now that you understand some Computer Science fundamentals, let's focus on programming JavaScript!", @@ -285,7 +285,7 @@ { "name": "Build Rock Paper Scissors", "time": 60, - "video": "114486344", + "video": "114604815", "challengeNumber": 25, "steps": [ "Now we'll learn how JavaScript functions work, and use them to build a simple Rock Paper Scissors game.", @@ -296,7 +296,7 @@ { "name": "Learn JavaScript For Loops", "time": 60, - "video": "114486344", + "video": "114614220", "challengeNumber": 26, "steps": [ "Let's learn more about the loops that make virtually all programs possible - the \"For Loop\" and \"While Loop\". First, we'll learn the For Loop.", @@ -305,14 +305,14 @@ ] }, { - "name": "Learn While Loops", + "name": "Learn JavaScript While Loops", "time": 60, - "video": "114486344", + "video": "114612889", "challengeNumber": 27, "steps": [ "Go to http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1 and complete the section.", - "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-ASGIv/0/1." + "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-mrTNH-6VIZ9/0/1." ] }, { @@ -321,7 +321,7 @@ "video": "114486344", "challengeNumber": 28, "steps": [ - "Much of human reasoning can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If-Then-Else Statements\".", + "Much of human reasoning can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If Statements\" and \"Else Statements\".", "We'll also learn some advanced \"Control Flow\" principals, such as ways we can exit loops early.", "Go to http://www.codecademy.com/courses/javascript-beginner-en-qDwp0/0/1 and complete the section.", "Be sure to also complete this section: http://www.codecademy.com/courses/javascript-beginner-en-ZA2rb/0/1." @@ -330,7 +330,7 @@ { "name": "Build a Contact List", "time": 60, - "video": "114486344", + "video": "114612887", "challengeNumber": 29, "steps": [ "Up to this point, you've been working mostly with strings and numbers. Now we're going to learn more complicated data structures, like \"Arrays\" and \"Objects\".", @@ -341,7 +341,7 @@ { "name": "Build an Address Book", "time": 60, - "video": "114486344", + "video": "114612885", "challengeNumber": 30, "steps": [ "Let's learn more about objects.", @@ -352,7 +352,7 @@ { "name": "Build a Cash Register", "time": 60, - "video": "114486344", + "video": "114612882", "challengeNumber": 31, "steps": [ "In this final CodeCademy section, we'll learn even more about JavaScript objects.", @@ -363,7 +363,7 @@ { "name": "Get Help The Hacker Way", "time": 30, - "video": "114486344", + "video": "111500801", "challengeNumber": 32, "steps": [ "Watch the video to learn the RSAP (Read, Search, Ask, Post) methodology for getting help.", @@ -377,7 +377,7 @@ { "name": "Learn Regular Expressions", "time": 60, - "video": "114486344", + "video": "112547802", "challengeNumber": 33, "steps": [ "You can use a Regular Expression, or \"Regex\", to select specific types of characters in text.", @@ -389,7 +389,7 @@ { "name": "Pair Program on Coderbyte", "time": 60, - "video": "114486344", + "video": "", "challengeNumber": 34, "steps": [ "OK, we're finally ready to start pair programming!", @@ -425,9 +425,9 @@ ] }, { - "name": "Learn Relational Databases from Stanford", + "name": "Learn Relational Database Theory", "time": 30, - "video": "114486344", + "video": "114629033", "challengeNumber": 35, "steps": [ "Before we learn SQL - and ultimately MongoDB - we need to establish a foundational knowledge of relational database theory. Stanford's Jennifer Widom has put together a short lecture series that does this.", @@ -435,9 +435,9 @@ "Go to https://class.stanford.edu/courses/DB/RDB/SelfPaced/courseware/ch-introduction/seq-vid-introduction/ and watch the videos."] }, { - "name": "Pair Program to Query SQL 1", + "name": "Pair Program to Query SQL pt 1", "time": 90, - "video": "114486344", + "video": "114621182", "challengeNumber": 36, "steps": [ "With Stanford's SQL course, you can do SQL queries, right in your browser.", @@ -447,9 +447,9 @@ ] }, { - "name": "Pair Program to Query SQL 2", + "name": "Pair Program to Query SQL pt 2", "time": 60, - "video": "114486344", + "video": "114621180", "challengeNumber": 37, "steps": [ "Now let's do some additional SQL queries to further cement these concepts in your mind.", @@ -459,9 +459,9 @@ ] }, { - "name": "Pair Program to Modify SQL 1", + "name": "Pair Program to Modify SQL pt 1", "time": 90, - "video": "114486344", + "video": "114621179", "challengeNumber": 38, "steps": [ "Now that you're able to use SQL to query a database, it's time to practice using SQL to modify the database itself.", @@ -471,9 +471,9 @@ ] }, { - "name": "Pair Program to Modify SQL 2", - "time": 30, - "video": "114486344", + "name": "Pair Program to Modify SQL pt 2", + "time": 60, + "video": "114621178", "challengeNumber": 39, "steps": [ "Let's answer a couple more SQL modification questions to further practice these concepts.", @@ -483,9 +483,9 @@ ] }, { - "name": "Learn JSON from Stanford", - "time": 60, - "video": "114486344", + "name": "Learn JSON", + "time": 30, + "video": "114621177", "challengeNumber": 40, "steps": [ "Now that you know a little about how databases store data, let's learn how computers usually share data back and forth over the web. Most modern Application Programming Interfaces (APIs) on the web use JavaScript Object Notation, or JSON.", diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index 34b718fb83..a1c22a5c66 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -81,10 +81,10 @@ a(href="/challenges/25", class="#{ cc[25] > 0 ? 'strikethrough' : '' }") Build Rock Paper Scissors |   (60 minutes) li - a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn For and While Loops + a(href="/challenges/26", class="#{ cc[26] > 0 ? 'strikethrough' : '' }") Learn JavaScript For Loops |   (60 minutes) li - a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn If and Else Statements + a(href="/challenges/27", class="#{ cc[27] > 0 ? 'strikethrough' : '' }") Learn JavaScript While Loops |   (60 minutes) li a(href="/challenges/28", class="#{ cc[28] > 0 ? 'strikethrough' : '' }") Learn Control Flow @@ -108,26 +108,26 @@ a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Start Pair Program on Coderbyte |   (60 minutes) li - a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Databases + a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Database Theory |   (30 minutes) li - a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt.1 + a(href="/challenges/36", class="#{ cc[36] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 1 |   (90 minutes) li - a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt.2 + a(href="/challenges/37", class="#{ cc[37] > 0 ? 'strikethrough' : '' }") Pair Program to Query SQL pt 2 |   (60 minutes) li - a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt.1 + a(href="/challenges/38", class="#{ cc[38] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 1 |   (90 minutes) li - a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt.2 + a(href="/challenges/39", class="#{ cc[39] > 0 ? 'strikethrough' : '' }") Pair Program to modify SQL pt 2 |   (60 minutes) li a(href="/challenges/40", class="#{ cc[40] > 0 ? 'strikethrough' : '' }") Learn JSON - |   (60 minutes) + |   (30 minutes) li a(href="/challenges/41", class="#{ cc[41] > 0 ? 'strikethrough' : '' }") Manage Source Code with Git - |   (60 minutes) + |   (30 minutes) li a(href="/challenges/42", class="#{ cc[42] > 0 ? 'strikethrough' : '' }") Get Started with Node.js |   (45 minutes) @@ -183,4 +183,4 @@ a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services |   (45 minutes) - a.btn.btn-primary.disabled(href="/done-with-first-100-hours") I've finished all Free Code Camp challenges and all 90 CoderByte Challenges \ No newline at end of file + a.btn.btn-primary.disabled(href="/done-with-first-100-hours") I've finished all Free Code Camp challenges and all the Easy and Medium CoderByte Challenges \ No newline at end of file From 91c829ac196ec01d4297ca84dcd1dc880a84e11e Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 15 Dec 2014 21:10:13 -0800 Subject: [PATCH 29/48] revise to have both screen hero and team viewer pair programming sections --- app.js | 2 +- controllers/resources.js | 40 +++++++++++++++++++++--- seed_data/challenges.json | 27 +++++----------- views/pair-program-with-team-viewer.jade | 27 ++++++++++++++++ 4 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 views/pair-program-with-team-viewer.jade diff --git a/app.js b/app.js index bda9e6393e..0168a5b8b8 100644 --- a/app.js +++ b/app.js @@ -131,8 +131,8 @@ app.get( app.get('/learn-to-code', resourcesController.learnToCode); app.get('/privacy', resourcesController.privacy); app.get('/jquery-exercises', resourcesController.jqueryExercises); -app.get('/text-based-adventure-tutorial-app', resourcesController.textBasedAdventureTutorial); app.get('/chromebook', resourcesController.chromebook); +app.get('/pair-program-with-team-viewer', resourcesController.pairProgramWithTeamViewer); app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp); app.get('/about', resourcesController.about); app.get('/login', userController.getLogin); diff --git a/controllers/resources.js b/controllers/resources.js index d4844a83f4..3232b76f24 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -29,16 +29,46 @@ exports.jqueryExercises = function(req, res) { exports.programmerInterviewQuestionsApp = function(req, res) { res.render('programmer-interview-questions-app', { - title: 'programmer-interview-questions-app' + title: 'Programmer Interview Questions App' }); } -exports.textBasedAdventureTutorial = function(req, res) { - res.render('text-based-adventure-tutorial-app', { - title: 'text-based-adventure-tutorial-app' +exports.pairProgramWithTeamViewer = function(req, res) { + res.render('pair-program-with-team-viewer', { + title: 'Challenge: Pair Program with Team Viewer', + name: "Pair Program with Team Viewer", + video: '', + time: 30, + steps: ["In the spirit of keeping Free Code Camp 100% free, we've created directions for using a totally free pair programming tool called Team Viewer. It's not as user-friendly as Screen Hero, but it gets the job done (and works on Linux!).", + "Go to http://www.teamviewer.com/en/index.aspx and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.", + "Install it and launch it", + "Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.", + "If someone is interested, they will be your \"pair\" - the person you pair programming with.", + "First, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", + "Enter this id, and then password, to start the session.", + "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", + "Note that you can now control your pair's keyboard and mouse, enabling you to step in and code yourself on your pair's computer when desired", + "Now you can click the X to end the pair programming session.", + "Next, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", + "You will need to share your randomly generated password with your pair as well.", + "Once your pair connects, you will see a Team Viewer side menu. ", + "Click the audio button that drops down.", + "Click the headset icon and choose Voice over IP", + "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", + "Now you can click the X to end the pair programming session.", + "Now it's time to tackle CoderByte.", + "Create a CoderByte account at http://coderbyte.com/sl/", + "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", + "When you are finished pair programming, click the X to end the session.", + "Congratulations! You have completed your first pair programming session.", + "You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!", + "You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.", + "Be sure to pair program on these challenges, and remember to apply the RSAP methodology.", + "Click the button below to return to the Pair Programming challenge, then mark it complete."], + cc: req.user.challengesHash + }); } - exports.about = function(req, res) { res.render('about', { title: 'Who We Are' diff --git a/seed_data/challenges.json b/seed_data/challenges.json index f5a8604b3a..cf784c9dae 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -394,33 +394,22 @@ "steps": [ "OK, we're finally ready to start pair programming!", "Many people use Skype or Google Hangouts to pair program, but if you talk with professional software engineers, they will tell you that it's not really pair programming unless both people have the ability to use the keyboard and mouse.", - "The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. The only problem is that Screen Hero isn't currently free, and it's not yet available for Linux.", - "So in the spirit of keeping Free Code Camp 100% free, we've created directions for using a totally free tool called Team Viewer. It's not as user-friendly as Screen Hero, but it gets the job done (and works on Linux!).", - "If you want, You can skip these steps and simply install Screen Hero (which comes with a 14 day free trial) here: https://screenhero.com/download.html.", - "Otherwise, go to http://www.teamviewer.com/en/index.aspx and download Team Viewer. Be sure not to download the beta version, which isn't compatible with the current stable version everyone else will be using.", - "Install it and launch it", + "The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. Note that Screen Hero isn't free, and isn't yet available for Linux. Screen Hero does come with a 14 day free trial, is free for students, and you can also use it for free if your pair has a 14-day trial or a paid subscription to it. Download Scree Hero here: https://screenhero.com/download.html.", + "If you are using Linux, or if your 14 day free trial for Screen Hero has expired and you don't want to pay $10 per month for it, go to https://www.freecodecamp.com/pair-program-with-team-viewer.html to learn how to use an alternative (but inferior) tool called Team Viewer.", "Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.", "If someone is interested, they will be your \"pair\" - the person you pair programming with.", - "First, you will pair program on your pair's computer. Ask your pair for his or her Team Viewer ID and password.", - "Enter this id, and then password, to start the session.", - "Once the Team Viewer session starts, look at the the top of the screen. You will see 6 buttons. If you hover your cursor over the buttons, they will slide down so that you can read them. Click the audio/video button. This will allow you to turn on Voice Over IP and unmute your microphone, opening up your voice channel.", - "Note that you can now control your pair's keyboard and mouse, enabling you to step in and code yourself on your pair's computer when desired", - "Now you can click the X to end the pair programming session.", - "Next, you will pair program on your computer. Copy your Team Viewer ID and paste it into the private chat, so that your pair can use it to connect with you.", - "You will need to share your randomly generated password with your pair as well.", - "Once your pair connects, you will see a Team Viewer side menu. ", - "Click the audio button that drops down.", - "Click the headset icon and choose Voice over IP", - "Click the microphone button to unmute your microphone. Once your pair does the same, you two will have an open voice channel.", - "Now you can click the X to end the pair programming session.", + "Private message your pair and ask for the email address he or she used to register Screen Hero.", + "Add them as a new contact in Screen Hero, then click the monitor-looking button to attempt to share your screen with them.", + "Once the Screen Hero session starts, your screen's margins will glow orange. You are now sharing your screen.", + "Your pair will have his or her own cursor, and will be able to type text on his or her and keyboard.", "Now it's time to tackle CoderByte.", "Create a CoderByte account at http://coderbyte.com/sl/", "Now go to http://coderbyte.com/CodingArea/Challenges/#easyChals and start working through Coderbyte's easy algorithm scripting challenges using JavaScript.", - "When you are finished pair programming, click the X to end the session.", + "When you are finished pair programming, end the session in Screen Hero session.", "Congratulations! You have completed your first pair programming session.", "You should pair program with different Code Campers until you've completed all the Easy, Medium and Hard CoderByte challenges. This is a big time investment, but the JavaScript practice you'll get, along with the scripting and algorithm experience, are well worth it!", "You can complete CoderByte problems while you continue to work through Free Code Camp's challenges.", - "Be sure to pair programming on these challenges, and remember to apply the RSAP methodology.", + "Be sure to pair program on these challenges, and remember to apply the RSAP methodology.", "Mark this challenge as complete and move on." ] }, diff --git a/views/pair-program-with-team-viewer.jade b/views/pair-program-with-team-viewer.jade new file mode 100644 index 0000000000..3e512b7379 --- /dev/null +++ b/views/pair-program-with-team-viewer.jade @@ -0,0 +1,27 @@ +extends ./layout +block content + .row + .col-sm-12.col-md-8.col-xs-12 + .panel.panel-primary + .panel-heading #{name} (takes #{time} minutes) + .panel.panel-body + //.embed-responsive.embed-responsive-16by9 + // iframe.embed-responsive-item(src='//player.vimeo.com/video/#{video}') + h3 Steps: + h4 + ol + for step in steps + li!= step + a.btn.btn-primary.btn-big.btn-block.completed-challenge(href='/challenges/34') Take me back to the Pair Programming Challenge + .panel-footer.text-center + span Need a break? Check out our:  + a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room + |  ,  + a(href="http://blog.freecodecamp.com", target="_blank") Blog + |  ,  + a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed + |  , or  + a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit + | . + .col-sm-12.col-md-4.col-xs-12 + include ./partials/challenges \ No newline at end of file From c8944884f1ce5a866facba3764b28496cc08c030 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 15 Dec 2014 22:11:13 -0800 Subject: [PATCH 30/48] make some changes to copy --- seed_data/challenges.json | 24 ++++++++++++++---------- views/partials/challenges.jade | 2 +- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index cf784c9dae..a2419e7490 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -6,12 +6,16 @@ "challengeNumber": 0, "steps": [ "Watch this 1-minute video, or simply read this summary:", - "Our goal is to help you become an employable software engineer.", - "We're going to do this by pair programming on projects for nonprofits.", - "Pair programming is where two people code together on the same computer.", - "We're going to develop JavaScript skills, build portfolio projects, and meet a lot of people who can serve as useful connections during your job search.", - "We'll do this by coding fearlessly, by collaborating on projects, and - most importantly - by not giving up.", - "Click the \"I've completed this challenge\" button to move on to your next challenge." + "Welcome to Free Code Camp. We're a community of busy people learning to code.", + "We built this community because learning to code is hard. But anyone who can stay motivated can learn to code. And the best way to stay motivated is to code with friends.", + "To maximize accessibility, all our challenges are self-paced, browser-based, and free.", + "All of us start with the same 100 hours of interactive coding challenges. These cover everything from Computer Science to SQL. They also cover in-demand JavaScript tools like jQuery, Node.js and MongoDB.", + "Once we have a basic understanding of web development, we'll spend another 900 hours putting that theory into practice. We'll build full stack solutions for nonprofits.", + "By the end of this process, we'll be good at coding. We'll have a portfolio of apps with happy users to prove it. We'll also have an alumni network of fellow coders and nonprofits ready to serve as references.", + "If you make it through Free Code Camp, you will be able to get a coding job. There are far more job openings out there than there are qualified coders to fill them.", + "Also, for every pure coding job, there are at least 5 additional jobs that require some coding skills. So even if you decide not to pursue coding as a career, you'll still walk away with a valuable job skill.", + "There are 3 keys to succeeding in our community: do the challenges, make friends, and find a routine.", + "Now it's time to join our chatroom. Click the \"I've completed this challenge\" button to move on to your next challenge." ] }, { @@ -387,15 +391,15 @@ ] }, { - "name": "Pair Program on Coderbyte", + "name": "Pair Program on CoderByte", "time": 60, - "video": "", + "video": "112547802", "challengeNumber": 34, "steps": [ "OK, we're finally ready to start pair programming!", "Many people use Skype or Google Hangouts to pair program, but if you talk with professional software engineers, they will tell you that it's not really pair programming unless both people have the ability to use the keyboard and mouse.", - "The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. Note that Screen Hero isn't free, and isn't yet available for Linux. Screen Hero does come with a 14 day free trial, is free for students, and you can also use it for free if your pair has a 14-day trial or a paid subscription to it. Download Scree Hero here: https://screenhero.com/download.html.", - "If you are using Linux, or if your 14 day free trial for Screen Hero has expired and you don't want to pay $10 per month for it, go to https://www.freecodecamp.com/pair-program-with-team-viewer.html to learn how to use an alternative (but inferior) tool called Team Viewer.", + "The most popular tool for pair programming is Screen Hero. Both programmers get their own mouse cursor. Note that Screen Hero isn't free, and isn't yet available for Linux. Screen Hero does come with a 14 day free trial, is free for students, and you can also use it for free if your pair has a 14-day trial or a paid subscription to it. Download Screen Hero here: https://screenhero.com/download.html.", + "If you are using Linux, or if your 14 day free trial for Screen Hero has expired and you don't want to pay $10 per month for it, go to https://www.freecodecamp.com/pair-program-with-team-viewer.html to learn how to use an alternative (but inferior) tool called Team Viewer.", "Go to the chat room and ask if anyone wants to pair program with you on a CoderByte challenge.", "If someone is interested, they will be your \"pair\" - the person you pair programming with.", "Private message your pair and ask for the email address he or she used to register Screen Hero.", diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index a1c22a5c66..d1e9069381 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -105,7 +105,7 @@ a(href="/challenges/33", class="#{ cc[33] > 0 ? 'strikethrough' : '' }") Learn Regular Expressions |   (60 minutes) li - a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Start Pair Program on Coderbyte + a(href="/challenges/34", class="#{ cc[34] > 0 ? 'strikethrough' : '' }") Pair Program on CoderByte |   (60 minutes) li a(href="/challenges/35", class="#{ cc[35] > 0 ? 'strikethrough' : '' }") Learn Relational Database Theory From 1d485f1b33881635dd1a8d6f08a677b34ffe99d2 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 09:06:20 -0800 Subject: [PATCH 31/48] update challenge copy --- seed_data/challenges.json | 76 +++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index a2419e7490..7e7c224d89 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -515,42 +515,60 @@ "time": 45, "video": "114486344", "challengeNumber": 43, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] + "steps": [ + "One of the reasons Node.js is so fast is that it is \"evented\" - it processes events in an asynchronous manner.", + "As a result, Node.js relies on asynchronous callbacks.", + "We'll learn more about how events and callbacks work in this exciting Code School lesson.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section." + ] }, { "name": "Try Node.js Streams", "time": 45, "video": "114486344", "challengeNumber": 44, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] + "steps": [ + "In this Code School lesson, we'll learn about streaming data back and forth between the client to the server.", + "We'll also learn about FS, or File System, an important Node.js module for streaming data.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section." + ] }, { "name": "Learn how Node.js Modules Work", "time": 45, "video": "114486344", "challengeNumber": 45, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] + "steps": [ + "One of the most exciting features of Node.js is NPM - Node Package Manager", + "With NPM, you quickly install any of thousands of Node.js modules into your app, and it will automatically handle the other modules that each module dependends upon downstream.", + "In this lesson, we'll learn how to include these modules in our Node.js app by requiring them as variables.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] }, { "name": "Start an Express.js Server", "time": 45, "video": "114486344", "challengeNumber": 46, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] + "steps": [ + "We'll complete Code School's Express.js course shortly after completing this course, but this challenge will give you a quick tour of the Express.js framework.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { "name": "Use Socket.io", "time": 45, "video": "114486344", "challengeNumber": 47, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] + "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to Persist Data", "time": 45, "video": "114486344", "challengeNumber": 48, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] + "steps": [ + "Redis is a key-value store, which is a type of non-relational database. It's one of the fastest and easiest ways to persist data.", + "Even though we'll ultimately use MongoDB and other technologies to persist data, Redis is quite easy to learn and is still worth learning.", + "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/7/video/1 and complete the section."] }, { "name": "Dive Deeper into Express.js", @@ -559,7 +577,7 @@ "challengeNumber": 49, "steps": [ "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", - "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/1/video/1 and complete the section."] + "Go to http://campus.codeschool.com/courses/building-blocks-of-express-js/level/1/video/1 and complete the section."] }, { @@ -567,28 +585,44 @@ "time": 45, "video": "114486344", "challengeNumber": 50, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/2/video/1 and complete the section."] + "steps": [ + "Express.js makes extensive use of middleware - a stack of functions that run sequentially in response to a specific event.", + "Let's learn how to incorporate modules and middleware into our Express.js app.", + "Go to http://campus.codeschool.com/courses/building-blocks-of-express-js/level/2/video/1 and complete the section." + ] }, { "name": "Take Advantage of Parameters", "time": 45, "video": "114486344", "challengeNumber": 51, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/3/video/1 and complete the section."] + "steps": [ + "Have you've ever noticed a question mark in your browser's address bar, followed by a series of string? Those are parameters. Parameters are an efficient way to pass information to the server between page loads.", + "We'll learn about parameters, along with a powerful Express.js feature called Dynamic Routing, in this exciting Code School lesson.", + "Go to http://campus.codeschool.com/courses/building-blocks-of-express-js/level/3/video/1 and complete the section." + ] }, { "name": "Add the Body Parser", "time": 45, "video": "114486344", "challengeNumber": 52, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/4/video/1 and complete the section."] + "steps": [ + "Now we'll add the Body Parser module to Express.js. Body Parser is a powerful middleware that helps with routing.", + "We'll also learn more about HTTP Requests, such as Post and Delete.", + "Go to http://campus.codeschool.com/courses/building-blocks-of-express-js/level/4/video/1 and complete the section." + ] }, { "name": "Configure Routes in Express.js", "time": 45, "video": "114486344", "challengeNumber": 53, - "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] + "steps": [ + "For this last Code School Express.js challenge, we'll refactor our routes.", + "Go to http://campus.codeschool.com/courses/building-blocks-of-express-js/level/5/video/1 and complete the section." + + ] }, { "name": "Try MongoDB", @@ -615,27 +649,39 @@ "time": 45, "video": "114486344", "challengeNumber": 56, - "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1 and complete the section."] + "steps": [ + "Directives serve as markers in your HTML. When Angular.js compiles your HTML, it will can alter the behavior of DOM elements based on the directives you've used.", + "Let's learn how these powerful directives work, and how to use them to make your web apps more dynamic", + "Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/2/section/1/video/1 and complete the section." + ] }, { "name": "Power Forms with Angular.js", "time": 45, "video": "114486344", "challengeNumber": 57, - "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1 and complete the section."] + "steps": [ + "One area where Angular.js really shines is its powerful web forms.", + "Learn how to create reactive Angular.js forms, including real-time form validation.", + "Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/3/section/1/video/1 and complete the section."] }, { "name": "Customize Angular.js Directives", "time": 45, "video": "114486344", "challengeNumber": 58, - "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1 and complete the section."] + "steps": [ + "Now we'll learn how to modify existing Angular.js directives, and even build directives of your own.", + "Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/4/section/1/video/1 and complete the section."] }, { "name": "Create Angular.js Services", "time": 45, "video": "114486344", "challengeNumber": 59, - "steps": ["Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1 and complete the section."] + "steps": [ + "Services are functions that you can use and reuse throughout your Angular.js app to get things done.", + "We'll learn how to use services in this final Code School Angular.js challenge.", + "Go to http://campus.codeschool.com/courses/shaping-up-with-angular-js/level/5/section/1/video/1 and complete the section."] } ] From e8d8b904612447e5ea994a63baf1af71bc6ad017 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 09:55:52 -0800 Subject: [PATCH 32/48] update challenges --- seed_data/challenges.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 7e7c224d89..f17ffc1cee 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -490,7 +490,7 @@ { "name": "Manage Source Code with Git", "time": 30, - "video": "114486344", + "video": "114635309", "challengeNumber": 41, "steps": [ "Revision Control Systems like Git ensure that, no matter how you experiment with your code, you can always roll back your app to a stable previous state.", @@ -501,7 +501,7 @@ { "name": "Get Started with Node.js", "time": 45, - "video": "114486344", + "video": "114686471", "challengeNumber": 42, "steps": [ "Now that we understand some Computer Science, JavaScript programming, and how Databases work, you're ready to move on to Full-stack JavaScript!", @@ -525,7 +525,7 @@ { "name": "Try Node.js Streams", "time": 45, - "video": "114486344", + "video": "114684209", "challengeNumber": 44, "steps": [ "In this Code School lesson, we'll learn about streaming data back and forth between the client to the server.", @@ -536,7 +536,7 @@ { "name": "Learn how Node.js Modules Work", "time": 45, - "video": "114486344", + "video": "114684213", "challengeNumber": 45, "steps": [ "One of the most exciting features of Node.js is NPM - Node Package Manager", @@ -547,23 +547,23 @@ { "name": "Start an Express.js Server", "time": 45, - "video": "114486344", + "video": "114684247", "challengeNumber": 46, "steps": [ "We'll complete Code School's Express.js course shortly after completing this course, but this challenge will give you a quick tour of the Express.js framework.", "Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/5/video/1 and complete the section."] }, { - "name": "Use Socket.io", + "name": "Use Socket.IO", "time": 45, - "video": "114486344", + "video": "114684530", "challengeNumber": 47, "steps": ["Go to http://campus.codeschool.com/courses/real-time-web-with-node-js/level/6/video/1 and complete the section."] }, { "name": "Use Redis to Persist Data", "time": 45, - "video": "114486344", + "video": "114684532", "challengeNumber": 48, "steps": [ "Redis is a key-value store, which is a type of non-relational database. It's one of the fastest and easiest ways to persist data.", @@ -573,7 +573,7 @@ { "name": "Dive Deeper into Express.js", "time": 45, - "video": "114486344", + "video": "114684533", "challengeNumber": 49, "steps": [ "Code School has one of the first comprehensive courses on Express.js. Note that this course requires a Code School subscription, but that you can get a free two-day membership to Code School by going to https://www.codeschool.com/hall_passes/213f3fedb6b9/claim_shared. If you've already used your Code School two-day membership, go to the Free Code Camp main chat room and ask how you can get some extra time to work through this course. Alternatively, you could subscribe to Code School for one month, then take your time in completing these challenges.", @@ -583,7 +583,7 @@ "name": "Setup Express.js Middleware", "time": 45, - "video": "114486344", + "video": "114684535", "challengeNumber": 50, "steps": [ "Express.js makes extensive use of middleware - a stack of functions that run sequentially in response to a specific event.", @@ -594,7 +594,7 @@ { "name": "Take Advantage of Parameters", "time": 45, - "video": "114486344", + "video": "114684537", "challengeNumber": 51, "steps": [ "Have you've ever noticed a question mark in your browser's address bar, followed by a series of string? Those are parameters. Parameters are an efficient way to pass information to the server between page loads.", @@ -605,7 +605,7 @@ { "name": "Add the Body Parser", "time": 45, - "video": "114486344", + "video": "114684720", "challengeNumber": 52, "steps": [ "Now we'll add the Body Parser module to Express.js. Body Parser is a powerful middleware that helps with routing.", @@ -616,7 +616,7 @@ { "name": "Configure Routes in Express.js", "time": 45, - "video": "114486344", + "video": "114684724", "challengeNumber": 53, "steps": [ "For this last Code School Express.js challenge, we'll refactor our routes.", @@ -627,7 +627,7 @@ { "name": "Try MongoDB", "time": 30, - "video": "114486344", + "video": "114685061", "challengeNumber": 54, "steps": [ "MongoDB is a popular NoSQL (Not Only SQL) database used by many JavaScript apps.", @@ -637,7 +637,7 @@ { "name": "Get Started with Angular.js", "time": 45, - "video": "114486344", + "video": "114684726", "challengeNumber": 55, "steps": [ "Code School has a short, free Angular.js course. This will give us a quick tour of Angular.js's mechanics and features.", @@ -647,7 +647,7 @@ { "name": "Apply Angular.js Directives", "time": 45, - "video": "114486344", + "video": "114684727", "challengeNumber": 56, "steps": [ "Directives serve as markers in your HTML. When Angular.js compiles your HTML, it will can alter the behavior of DOM elements based on the directives you've used.", @@ -658,7 +658,7 @@ { "name": "Power Forms with Angular.js", "time": 45, - "video": "114486344", + "video": "114684729", "challengeNumber": 57, "steps": [ "One area where Angular.js really shines is its powerful web forms.", @@ -668,7 +668,7 @@ { "name": "Customize Angular.js Directives", "time": 45, - "video": "114486344", + "video": "114685062", "challengeNumber": 58, "steps": [ "Now we'll learn how to modify existing Angular.js directives, and even build directives of your own.", @@ -677,7 +677,7 @@ { "name": "Create Angular.js Services", "time": 45, - "video": "114486344", + "video": "114685060", "challengeNumber": 59, "steps": [ "Services are functions that you can use and reuse throughout your Angular.js app to get things done.", From 059fe5f39bb5f3399dd76b81aeca2efa06859dd0 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 10:31:19 -0800 Subject: [PATCH 33/48] update to automatically redirect based on highest completed challenge hash value --- app.js | 28 +-- controllers/challenges.js | 2 +- controllers/home.js | 10 +- controllers/resources.js | 9 +- views/about.jade | 5 +- views/done-with-first-100-hours.jade | 6 + views/partials/challenges.jade | 2 +- views/text-based-adventure-tutorial-app.jade | 202 ------------------- 8 files changed, 28 insertions(+), 236 deletions(-) create mode 100644 views/done-with-first-100-hours.jade delete mode 100644 views/text-based-adventure-tutorial-app.jade diff --git a/app.js b/app.js index 0168a5b8b8..05c9ad8c27 100644 --- a/app.js +++ b/app.js @@ -133,7 +133,9 @@ app.get('/privacy', resourcesController.privacy); app.get('/jquery-exercises', resourcesController.jqueryExercises); app.get('/chromebook', resourcesController.chromebook); app.get('/pair-program-with-team-viewer', resourcesController.pairProgramWithTeamViewer); +app.get('/done-with-first-100-hours', resourcesController.doneWithFirst100Hours); app.get('/programmer-interview-questions-app', resourcesController.programmerInterviewQuestionsApp); + app.get('/about', resourcesController.about); app.get('/login', userController.getLogin); app.post('/login', userController.postLogin); @@ -243,28 +245,4 @@ app.listen(app.get('port'), function() { ); }); -module.exports = app; - -//app.get('/api', apiController.getApi); -//app.get('/api/lastfm', apiController.getLastfm); -//app.get('/api/nyt', apiController.getNewYorkTimes); -//app.get('/api/aviary', apiController.getAviary); -//app.get('/api/steam', apiController.getSteam); -//app.get('/api/stripe', apiController.getStripe); -//app.post('/api/stripe', apiController.postStripe); -//app.get('/api/scraping', apiController.getScraping); -//app.get('/api/twilio', apiController.getTwilio); -//app.post('/api/twilio', apiController.postTwilio); -//app.get('/api/clockwork', apiController.getClockwork); -//app.post('/api/clockwork', apiController.postClockwork); -//app.get('/api/foursquare', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFoursquare); -//app.get('/api/tumblr', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTumblr); -//app.get('/api/facebook', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getFacebook); -//app.get('/api/github', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getGithub); -//app.get('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getTwitter); -//app.post('/api/twitter', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postTwitter); -//app.get('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getVenmo); -//app.post('/api/venmo', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.postVenmo); -//app.get('/api/linkedin', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getLinkedin); -//app.get('/api/instagram', passportConf.isAuthenticated, passportConf.isAuthorized, apiController.getInstagram); -//app.get('/api/yahoo', apiController.getYahoo); +module.exports = app; \ No newline at end of file diff --git a/controllers/challenges.js b/controllers/challenges.js index 3bf2046b1c..382aa369a5 100644 --- a/controllers/challenges.js +++ b/controllers/challenges.js @@ -7,7 +7,7 @@ var _ = require('lodash'); exports.returnChallenge = function(req, res, next) { var challengeNumber = parseInt(req.params.challengeNumber) || 0; - if (challengeNumber > 60) { challengeNumber = 0; } + if (challengeNumber > 59) { challengeNumber = 0; } Challenge.findOne({challengeNumber: challengeNumber}, function (err, c) { if (err) { console.error('Challenge err: ', err); diff --git a/controllers/home.js b/controllers/home.js index df6ff23c8c..049a710008 100644 --- a/controllers/home.js +++ b/controllers/home.js @@ -5,9 +5,13 @@ exports.index = function(req, res) { if (req.user) { - if (req.user.challengesCompleted.length > 0) { - nextChallenge = Math.max.apply(Math, req.user.challengesHash) + 1; - res.redirect("challenges/" + nextChallenge); + ch = req.user.challengesHash; + if (req.user.challengesHash[0] > 0) { + var max = Object.keys(ch).reduce(function(max,key){ + return (max === undefined || ch[key] > ch[max]) ? +key : max; + }); + nextChallenge = max + 1; + res.redirect("challenges/" + nextChallenge); } else { res.redirect("challenges/0"); } diff --git a/controllers/resources.js b/controllers/resources.js index 3232b76f24..97e62df360 100644 --- a/controllers/resources.js +++ b/controllers/resources.js @@ -66,12 +66,17 @@ exports.pairProgramWithTeamViewer = function(req, res) { "Be sure to pair program on these challenges, and remember to apply the RSAP methodology.", "Click the button below to return to the Pair Programming challenge, then mark it complete."], cc: req.user.challengesHash - }); } exports.about = function(req, res) { res.render('about', { - title: 'Who We Are' + title: 'About Free Code Camp and Our Team of Volunteers' + }); +} + +exports.doneWithFirst100Hours = function(req, res) { + res.render('done-with-first-100-hours', { + title: 'Congratulations on finishing the first 100 hours of Free Code Camp!' }); } diff --git a/views/about.jade b/views/about.jade index b24f3a7fca..407bc4b624 100644 --- a/views/about.jade +++ b/views/about.jade @@ -1,4 +1,5 @@ extends layout block content - h1 About Free Code Camp - h2 this is a placeholder page. Our about us page is coming soon. \ No newline at end of file + include partials/about-us + br + include partials/faq \ No newline at end of file diff --git a/views/done-with-first-100-hours.jade b/views/done-with-first-100-hours.jade new file mode 100644 index 0000000000..38cfbd39f2 --- /dev/null +++ b/views/done-with-first-100-hours.jade @@ -0,0 +1,6 @@ +extends layout +block content + .jumbotron.negative-15.text-center + h1.hug-top Congratulations on finishing the first 100 hours of Free Code Camp! + h2 Now you're ready to continue your learning by building solutions for nonprofits! + h3 Private message Quincy Larson in the Free Code Camp Chatroom and he'll help you get started on your first project. \ No newline at end of file diff --git a/views/partials/challenges.jade b/views/partials/challenges.jade index d1e9069381..a4d259ae79 100644 --- a/views/partials/challenges.jade +++ b/views/partials/challenges.jade @@ -183,4 +183,4 @@ a(href="/challenges/59", class="#{ cc[59] > 0 ? 'strikethrough' : '' }") Create Angular.js Services |   (45 minutes) - a.btn.btn-primary.disabled(href="/done-with-first-100-hours") I've finished all Free Code Camp challenges and all the Easy and Medium CoderByte Challenges \ No newline at end of file + a.btn.btn-primary(href="/done-with-first-100-hours", class="#{ cc[59] > 0 ? '' : 'disabled' }") I've finished all Free Code Camp challenges and all the Easy and Medium CoderByte Challenges \ No newline at end of file diff --git a/views/text-based-adventure-tutorial-app.jade b/views/text-based-adventure-tutorial-app.jade deleted file mode 100644 index 966e8ba1e9..0000000000 --- a/views/text-based-adventure-tutorial-app.jade +++ /dev/null @@ -1,202 +0,0 @@ -extends layout -block content - script. - $(document).ready(function () { - var directions = { - 0: "To get started, open your Chrome DevTools. The #next-exercise button is disabled below. Try using jQuery's .attr() method to turn the disabled attribute to false.", - 1: "Move the .target element from #location1 to #location2.", - 2: "Change the background color of .target to red.", - 3: "Change the background color of the even-numbered targets to red.", - 4: "Change the background color of the target4 to red.", - 5: "Clone the target2 in #location1 so that it also exists in #location2.", - 6: "Remove the target3 from element from #location1.", - 7: "Check the following checkboxes using jQuery.", - 8: "Make the text input field read-only.", - 9: "Select the target2 option in the select box.", - 10: "Add the following css classes to .target: 'animated' and 'hinge'.", - 11: "Use jQuery to read the data of .target.", - 12: "Use 'length' to count the number of child elements in #location1, then display that value in #location2.", - 13: "There's an element hidden in #location1. Show it using jQuery, and then click on it." - }; - var hint = { - 0: "$('#next-exercise').attr('disabled', false);", - 1: "$('.target').appendTo('#location2');", - 2: "$('.target').css('background', 'red');", - 3: "$('.target:even').css('background', 'red');", - 4: "$('.target:nth-child(4)').css('background', 'red');", - 5: "$('.target:nth-child(2)').clone().appendTo($('#location2'));", - 6: "$('.target:nth-child(3)').remove();", - 7: "$('#location1 input').attr('checked', 'true')", - 8: "$('#location1 input').attr('readonly', 'true')", - 9: "$('#location1 select').val('target2');", - 10: "$('.target').addClass('animated hinge');", - 11: "$('.target').data();", - 12: "$('#location2').text($('#location1').children().length)", - 13: "$('#finished-button').show().click();" - }; - var elements = { - 0: "", - 1: "
.target
", - 2: "
.target
", - 3: "
target0
target1
target2
target3
target4
", - 4: "
target1
target2
target3
target4
target5
", - 5: "
target1
target2
target3
target4
target5
", - 6: "
target1
target2
target3
target4
target5
", - 7: "checkbox1
checkbox2", - 8: "", - 9: "", - 10: "
.target
", - 11: "
.target
", - 12: "
target1
target2
target3
target4
target5
", - 13: "
Finish!
" - }; - - function refreshEverything() { - $('#directions').text("Exercise " + currentExercise + ": " + directions[currentExercise]); - $('#location1').html(elements[currentExercise]); - $('#hint').text(hint[currentExercise]); - handleExerciseTransition(); - } - - $('#exercise-directory').on('click', 'li', event, function () { - currentExercise = $(this).index(); - event.preventDefault(); - refreshEverything(event); - }); - $('#next-exercise').on('click', event, function () { - ++currentExercise; - event.preventDefault(); - refreshEverything(event); - }); - $('#solution-button').on('click', function () { - $('#hint-modal').modal({backdrop: "static"}); - }); - $('#location1').on('click', '#finished-button', function () { - $('#finished-modal').modal({backdrop: "static"}); - }); - function handleExerciseTransition() { - if (currentExercise === 0) { - $('#next-exercise').attr('disabled', true); - } else { - $('#next-exercise').attr('disabled', false); - } - if (currentExercise === 2 || currentExercise === 6) { - $('#location2 .target').remove(); - } - if (currentExercise === 13) { - $('#location2').text(''); - $('#finished-button').hide(); - $('#next-exercise').attr('disabled', true); - } - } - - var currentExercise = 0; - refreshEverything(currentExercise); - }); - style. - #directions { - text-align: left; - font-size: 15px; - } - - .well { - text-align: left; - height: 200px; - } - - #exercise-directory { - font-size: 20px; - } - - #current-exercise { - text-size: 250px; - } - html. - - - From 7dc1b2fc9bc3537188cd70c018ff820b93ef68eb Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 10:45:00 -0800 Subject: [PATCH 34/48] update profile page --- views/account/profile.jade | 154 ++++++++++++++++++++++++++----------- 1 file changed, 111 insertions(+), 43 deletions(-) diff --git a/views/account/profile.jade b/views/account/profile.jade index 862668c834..4f883901cb 100644 --- a/views/account/profile.jade +++ b/views/account/profile.jade @@ -42,176 +42,244 @@ block content th Date Finished if cc[0] > 0 tr - td A One-minute Introduction to Free Code Camp + td Learn how Free Code Camp Works td=moment(cc[0], 'X').format("MMM DD, YYYY") if cc[1] > 0 tr - td Enter the Free Code Camp Chat Room + td Join Our Chat Room td=moment(cc[1], 'X').format("MMM DD, YYYY") if cc[2] > 0 tr - td Create a Website and Deploy it to the Internet + td Subscribe to Our Subreddit td=moment(cc[2], 'X').format("MMM DD, YYYY") if cc[3] > 0 tr - td Install Github's Atom Text Editor + td Build a Personal Website td=moment(cc[3], 'X').format("MMM DD, YYYY") if cc[4] > 0 tr - td Modify and Redeploy Your Website + td Build a Responsive Blog Theme td=moment(cc[4], 'X').format("MMM DD, YYYY") if cc[5] > 0 tr - td Add Dynamic Content to your Website + td Build a Small Business Website td=moment(cc[5], 'X').format("MMM DD, YYYY") if cc[6] > 0 tr - td Codecademy's HTML & CSS track + td Tweak HTML and CSS in CodePen td=moment(cc[6], 'X').format("MMM DD, YYYY") if cc[7] > 0 tr - td Experiment with HTML and CSS in CodePen + td Build a CSS Robot td=moment(cc[7], 'X').format("MMM DD, YYYY") if cc[8] > 0 tr - td Codecademy's jQuery track + td Get Started with jQuery td=moment(cc[8], 'X').format("MMM DD, YYYY") if cc[9] > 0 tr - td Code School's Try jQuery + td Traverse the DOM td=moment(cc[9], 'X').format("MMM DD, YYYY") if cc[10] > 0 tr - td Code School's Discover DevTools + td Work with the DOM td=moment(cc[10], 'X').format("MMM DD, YYYY") if cc[11] > 0 tr - td jQuery Exercises + td Listen for DOM Events td=moment(cc[11], 'X').format("MMM DD, YYYY") if cc[12] > 0 tr - td Customize Bootstrap with Bootswatch + td Use jQuery for Styling td=moment(cc[12], 'X').format("MMM DD, YYYY") if cc[13] > 0 tr - td Inject Life with CSS Transformations + td Build a MadLibs Game td=moment(cc[13], 'X').format("MMM DD, YYYY") if cc[14] > 0 tr - td Codecademy's JavaScript track + td Discover Chrome's DevTools td=moment(cc[14], 'X').format("MMM DD, YYYY") if cc[15] > 0 tr - td Stanford's Introduction to Computer Science + td Tackle jQuery Exercises td=moment(cc[15], 'X').format("MMM DD, YYYY") if cc[16] > 0 tr - td Get Help The Hacker Way with RSAP + td Customize Bootstrap td=moment(cc[16], 'X').format("MMM DD, YYYY") if cc[17] > 0 tr - td Learn Regular Expressions + td Inject Animation into CSS td=moment(cc[17], 'X').format("MMM DD, YYYY") if cc[18] > 0 tr - td Start Your First Pair Programming Session + td Learn Basic Computer Science td=moment(cc[18], 'X').format("MMM DD, YYYY") if cc[19] > 0 tr - td Easy Algorithm Scripting Challenges on Coderbyte + td Learn Loops td=moment(cc[19], 'X').format("MMM DD, YYYY") if cc[20] > 0 tr - td Stanford's Relational Databases Mini-course + td Learn Computer Hardware td=moment(cc[20], 'X').format("MMM DD, YYYY") if cc[21] > 0 tr - td Stanford's SQL Mini-course + td Learn Computer Networking td=moment(cc[21], 'X').format("MMM DD, YYYY") if cc[22] > 0 tr - td Stanford's JSON Mini-course + td Learn Boolean Logic td=moment(cc[22], 'X').format("MMM DD, YYYY") if cc[23] > 0 tr - td Medium Algorithm Scripting Challenges on Coderbyte + td Learn Computer Security td=moment(cc[23], 'X').format("MMM DD, YYYY") if cc[24] > 0 tr - td Build an Interview Question Machine + td Build an Adventure Game td=moment(cc[24], 'X').format("MMM DD, YYYY") if cc[25] > 0 tr - td Build a Text-based Adventure + td Build Rock Paper Scissors td=moment(cc[25], 'X').format("MMM DD, YYYY") if cc[26] > 0 tr - td Hard Algorithm Scripting Challenges on Coderbyte + td Learn JavaScript For Loops td=moment(cc[26], 'X').format("MMM DD, YYYY") if cc[27] > 0 tr - td Code School's Try Git + td Learn JavaScript While Loops td=moment(cc[27], 'X').format("MMM DD, YYYY") if cc[28] > 0 tr - td Install Node.js + td Learn Control Flow td=moment(cc[28], 'X').format("MMM DD, YYYY") if cc[29] > 0 tr - td Clone a Github Repo + td Build a Contact List td=moment(cc[29], 'X').format("MMM DD, YYYY") if cc[30] > 0 tr - td Deploy an app to Heroku + td Build an Address Book td=moment(cc[30], 'X').format("MMM DD, YYYY") if cc[31] > 0 tr - td Code School's Real-time web with Node.JS + td Build a Cash Register td=moment(cc[31], 'X').format("MMM DD, YYYY") if cc[32] > 0 tr - td Try MongoDB + td Get Help the Hacker Way td=moment(cc[32], 'X').format("MMM DD, YYYY") if cc[33] > 0 tr - td Explore your Network with the LinkedIn API + td Learn Regular Expressions td=moment(cc[33], 'X').format("MMM DD, YYYY") if cc[34] > 0 tr - td Build your first API + td Pair Program on CoderByte td=moment(cc[34], 'X').format("MMM DD, YYYY") if cc[35] > 0 tr - td Aggregate Data with Chron Jobs and Screen Scraping + td Learn Relational Database Theory td=moment(cc[35], 'X').format("MMM DD, YYYY") if cc[36] > 0 tr - td Code School's Shaping up with Angular.JS + td Pair Program to Query SQL pt 1 td=moment(cc[36], 'X').format("MMM DD, YYYY") if cc[37] > 0 tr - td Reverse Engineer SnapChat + td Pair Program to Query SQL pt 2 td=moment(cc[37], 'X').format("MMM DD, YYYY") if cc[38] > 0 tr - td Reverse Engineer Reddit + td Pair Program to modify SQL pt 1 td=moment(cc[38], 'X').format("MMM DD, YYYY") if cc[39] > 0 tr - td Reverse Engineer Pintrest + td Pair Program to modify SQL pt 2 td=moment(cc[39], 'X').format("MMM DD, YYYY") if cc[40] > 0 tr - td Help a Nonprofit: Team Project + td Learn JSON td=moment(cc[40], 'X').format("MMM DD, YYYY") if cc[41] > 0 tr - td Help a Nonprofit: Solo Project + td Manage Source Code with Git td=moment(cc[41], 'X').format("MMM DD, YYYY") if cc[42] > 0 tr - td Crack the Coding Interview + td Get Started with Node.js td=moment(cc[42], 'X').format("MMM DD, YYYY") + if cc[43] > 0 + tr + td Try Node.js Events + td=moment(cc[43], 'X').format("MMM DD, YYYY") + if cc[44] > 0 + tr + td Try Node.js Streams + td=moment(cc[44], 'X').format("MMM DD, YYYY") + if cc[45] > 0 + tr + td Learn how Node.js Modules Work + td=moment(cc[45], 'X').format("MMM DD, YYYY") + if cc[46] > 0 + tr + td Start an Express.js Server + td=moment(cc[46], 'X').format("MMM DD, YYYY") + if cc[47] > 0 + tr + td Use Socket.io + td=moment(cc[47], 'X').format("MMM DD, YYYY") + if cc[48] > 0 + tr + td Use Redis to Persist Data + td=moment(cc[48], 'X').format("MMM DD, YYYY") + if cc[49] > 0 + tr + td Dive Deeper into Express.js + td=moment(cc[49], 'X').format("MMM DD, YYYY") + if cc[50] > 0 + tr + td Set up Express.js Middleware + td=moment(cc[50], 'X').format("MMM DD, YYYY") + if cc[51] > 0 + tr + td Take Advantage of Parameters + td=moment(cc[51], 'X').format("MMM DD, YYYY") + if cc[52] > 0 + tr + td Add the Body Parser + td=moment(cc[52], 'X').format("MMM DD, YYYY") + if cc[53] > 0 + tr + td Configure Routes in Express.js + td=moment(cc[53], 'X').format("MMM DD, YYYY") + if cc[54] > 0 + tr + td Try MongoDB + td=moment(cc[54], 'X').format("MMM DD, YYYY") + if cc[55] > 0 + tr + td Get Started with Angular.js + td=moment(cc[55], 'X').format("MMM DD, YYYY") + if cc[56] > 0 + tr + td Apply Angular.js Directives + td=moment(cc[56], 'X').format("MMM DD, YYYY") + if cc[57] > 0 + tr + td Power Forms with Angular.js + td=moment(cc[57], 'X').format("MMM DD, YYYY") + if cc[58] > 0 + tr + td Customize Angular.js Directives + td=moment(cc[58], 'X').format("MMM DD, YYYY") + if cc[59] > 0 + tr + td Create Angular.js Services + td=moment(cc[59], 'X').format("MMM DD, YYYY") h3 Danger Zone button.btn.btn-danger.confirm-deletion span.ion-trash-b From 0fb55fd9ff3892caa1e25e13395cfba72d9054a5 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 12:38:27 -0800 Subject: [PATCH 35/48] update challenges.json --- seed_data/challenges.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index f17ffc1cee..20765f1164 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -58,7 +58,7 @@ { "name": "Build a Responsive Blog Theme", "time": 60, - "video": "114486344", + "video": "114578441", "challengeNumber": 4, "steps": [ "Next, let's learn about Responsive web design and continue learning about HTML and CSS.", @@ -322,7 +322,7 @@ { "name": "Learn Control Flow", "time": 60, - "video": "114486344", + "video": "114612888", "challengeNumber": 28, "steps": [ "Much of human reasoning can be broken down into what we call Boolean Logic. Lucky for us, computers can think the same way! Let's learn how to instruct our computers by writing \"If Statements\" and \"Else Statements\".", @@ -513,7 +513,7 @@ { "name": "Try Node.js Events", "time": 45, - "video": "114486344", + "video": "114684206", "challengeNumber": 43, "steps": [ "One of the reasons Node.js is so fast is that it is \"evented\" - it processes events in an asynchronous manner.", From 6aac48951ea59a809a50d43148ad16cd6b854308 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 16:38:33 -0800 Subject: [PATCH 36/48] update the challenges.json with more comprehensive CS101 descriptions and add line breaks for long urls and add some additional tweets --- public/css/main.less | 13 +++++++++++-- seed_data/challenges.json | 22 ++++++++++++++++++---- views/partials/about-us.jade | 21 +++++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index 0542c37eb6..93f4af5a03 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -5,8 +5,6 @@ @import "lib/animate.min.less"; @import url(http://fonts.googleapis.com/css?family=Lato:300); -@import url(http://fonts.googleapis.com/css?family=Lato:400); -@import url(http://fonts.googleapis.com/css?family=Lato:500); html,body,div,span,a,li,td,th { @@ -14,6 +12,17 @@ html,body,div,span,a,li,td,th { font-weight: 300; } +li { + white-space: pre; /* CSS 2.0 */ + white-space: pre-wrap; /* CSS 2.1 */ + white-space: pre-line; /* CSS 3.0 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: -moz-pre-wrap; /* Mozilla */ + white-space: -hp-pre-wrap; /* HP Printers */ + word-wrap: break-word; /* IE 5+ */ +} + html { position: relative; min-height: 100%; diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 20765f1164..86bd9bf992 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -240,7 +240,9 @@ "time": 120, "video": "114597348", "challengeNumber": 19, - "steps": ["Now let's tackle week 2 of Stanford's Intro to Computer Science course.", + "steps": [ + "Now let's tackle week 2 of Stanford's Intro to Computer Science course.", + "This will introduce us to loops, a fundamental feature of every programming language.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z100/a7a70ce6e4724c58862ee6007284face/ and complete Week 2."] }, { @@ -248,21 +250,31 @@ "time": 120, "video": "114597347", "challengeNumber": 20, - "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3."] + "steps": [ + "Week 3 of Stanford's Intro to Computer Science covers computer hardware and explains Moore's law of exponential growth in the price-performance of processors.", + "This challenge will also give you an understanding of how bits and bytes work.", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z143/z101/ and complete Week 3." + ] }, { "name": "Learn Computer Networking", "time": 120, "video": "114604811", "challengeNumber": 21, - "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] + "steps": [ + "Now that you've learned about computer hardware, it's time to learn about the software that runs on top of it.", + "Particularly important, you will learn about networks and TCP/IP - the protocol that powers the internet.", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z187/z144/ and complete Week 4."] }, { "name": "Learn Boolean Logic", "time": 120, "video": "114604812", "challengeNumber": 22, - "steps": ["Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] + "steps": [ + "Now we'll do some more table exercises and learn boolean logic.", + "We'll also learn the difference between digital data and analog data.", + "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z208/z188/ and complete Week 5."] }, { "name": "Learn Computer Security", @@ -271,6 +283,8 @@ "challengeNumber": 23, "steps": [ "We're almost done with Stanford's Introduction to Computer Science course!", + "We'll learn about one of the most important inventions of the 20th century - spreadsheets.", + "We'll also learn about Computer Security and some of the more common vulnerabilities software systems have.", "Go to https://class.stanford.edu/courses/Engineering/CS101/Summer2014/courseware/z229/z213/ and complete Week 6, the final week of the course."] }, { diff --git a/views/partials/about-us.jade b/views/partials/about-us.jade index aa069d3d26..85253b8160 100644 --- a/views/partials/about-us.jade +++ b/views/partials/about-us.jade @@ -4,6 +4,27 @@ .landing-panel-body.text-center .col-xs-12 .masonry-row + .masonry-block + .masonry-relative + blockquote.twitter-tweet(lang='en') + p + | My boss was impressed by the troubleshooting I learned through + a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp + | and I just got a raise! Sweet! + a(href='http://t.co/om7DqQoyAr') http://t.co/om7DqQoyAr + | — Alec Hansen (@AlecMHansen) + a(href='https://twitter.com/AlecMHansen/status/544975882771648512') December 16, 2014 + script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') + .masonry-block + .masonry-relative + blockquote.twitter-tweet(lang='en') + p + a(href='https://twitter.com/DrivenByTatiana') @DrivenByTatiana + a(href='https://twitter.com/FreeCodeCamp') @FreeCodeCamp + | - Cool. I'm currently working thru it to improve my JavaScript. The community is very welcoming! 😄 + | — a touch of curaré (@cynthialanel) + a(href='https://twitter.com/cynthialanel/status/544768565467807744') December 16, 2014 + script(async='', src='//platform.twitter.com/widgets.js', charset='utf-8') .masonry-block .masonry-relative blockquote.twitter-tweet(lang='en') From 22bfe0dec195985fe23a58b15e22c5410dd44784 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 16:44:03 -0800 Subject: [PATCH 37/48] fix a console error related to trying to use font weight 500 --- public/css/main.less | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index 93f4af5a03..55abb05ff2 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -5,7 +5,7 @@ @import "lib/animate.min.less"; @import url(http://fonts.googleapis.com/css?family=Lato:300); - +@import url(http://fonts.googleapis.com/css?family=Lato:400); html,body,div,span,a,li,td,th { font-family: 'Lato', sans-serif; @@ -46,7 +46,7 @@ h1, h2 { } .btn { - font-weight: 500; + font-weight: 400; } h1, h2, h3, h4, h5, h6, p, li { From 7149a5985c3761f0f233fcee317f07f5fbb941af Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 17:07:07 -0800 Subject: [PATCH 38/48] update sitemap --- public/sitemap.xml | 56 +++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/public/sitemap.xml b/public/sitemap.xml index 0929d660fd..086c89e390 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -6,20 +6,44 @@ http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> - - http://www.freecodecamp.com/ - daily - - - http://www.freecodecamp.com/login - daily - - - http://www.freecodecamp.com/nonprofits - daily - - - http://www.freecodecamp.com/learn-to-code - daily - + + http://www.freecodecamp.com/ + daily + + + http://www.freecodecamp.com/login + daily + + + http://www.freecodecamp.com/nonprofits + daily + + + http://www.freecodecamp.com/learn-to-code + daily + + + http://www.freecodecamp.com/about + daily + + + http://www.freecodecamp.com/chromebook + daily + + + http://www.freecodecamp.com/live-pair-programming + daily + + + http://www.freecodecamp.com/privacy + daily + + + http://www.freecodecamp.com/jquery-exercises + daily + + + http://www.freecodecamp.com/javascript-in-your-inbox + daily + \ No newline at end of file From c302c73ec10ec7afbd9dcc6adfdfec09deb383be Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 17:59:57 -0800 Subject: [PATCH 39/48] update live-pair --- views/live-pair-programming.jade | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade index 3f7c086070..bcf1ae1f6f 100644 --- a/views/live-pair-programming.jade +++ b/views/live-pair-programming.jade @@ -2,17 +2,17 @@ extends layout block content .jumbotron.negative-15.text-center h1.hug-top Live Pair Programming - h2 Watch Quincy Larson and Berkeley Martinez pair program on CoderByte challenges live Tuesday, December 16 from 6 p.m. to 7 p.m., Pacific Standard Time. - h3 Check back here for details. And follow   + h2 Watch Quincy Larson and Berkeley Martinez pair program on CoderByte challenges NOW (6 - 7 pm Pacific time): + br + a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live-12162014" target='_blank') Click here to watch! + h3 . And follow   a(href='http://twitter.com/intent/user?screen_name=FreeCodeCamp' target='_blank') @FreeCodeCamp | ,   a(href='http://twitter.com/intent/user?screen_name=ossia' target='_blank') @ossia |   and   a(href='http://twitter.com/intent/user?screen_name=BerkeleyTrue' target='_blank') @BerkeleyTrue |   on Twitter. - p Got 3 minutes? Watch this funny video about pair programming, then start learning to code with us! - .embed-responsive.embed-responsive-16by9 - iframe.embed-responsive-item(width='560', height='315', src='//www.youtube.com/embed/dYBjVTMUQY0', frameborder='0', allowfullscreen='') + p Got 3 minutes? Start learning to code with us! br a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) br \ No newline at end of file From 2c9fe6ea5a0b8b509941e75602f3102a2a3715b2 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Tue, 16 Dec 2014 18:36:00 -0800 Subject: [PATCH 40/48] update link --- views/live-pair-programming.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade index bcf1ae1f6f..54e8c6740b 100644 --- a/views/live-pair-programming.jade +++ b/views/live-pair-programming.jade @@ -4,7 +4,7 @@ block content h1.hug-top Live Pair Programming h2 Watch Quincy Larson and Berkeley Martinez pair program on CoderByte challenges NOW (6 - 7 pm Pacific time): br - a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live-12162014" target='_blank') Click here to watch! + a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Click here to watch! h3 . And follow   a(href='http://twitter.com/intent/user?screen_name=FreeCodeCamp' target='_blank') @FreeCodeCamp | ,   From bb64f5f2b530b893ea027f6c3b12d73a57bc5223 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 17 Dec 2014 10:22:59 -0800 Subject: [PATCH 41/48] minor updates to nonprofit page --- views/contact.jade | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/views/contact.jade b/views/contact.jade index f84db30054..ac7afc54ed 100644 --- a/views/contact.jade +++ b/views/contact.jade @@ -1,18 +1,18 @@ extends layout block content - .jumbotron - h1.animated.lightSpeedIn.text-center We'll code software solutions for your nonprofit, for free! + .jumbotron.negative-15 + h1.animated.lightSpeedIn.text-center.hug-top We'll code software solutions for your nonprofit, for free! .animated.fadeIn.delay-2.landing-panel-body h3 Our students will help you build that donor tracking system, community message board, or whatever your organization needs,  strong at no cost. h3 In exchange, we ask only that you: h4 ul - li • meet with them regularly to provide direction and answer questions. - li • clearly communicate your project's goals: what will this project solve, and for whom? - li • understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools) - li • keep your expectations high. Our students' goal is to produce work that's up to your standards. + li • Meet with them regularly to provide direction and answer questions + li • Clearly communicate your project's goals: what will this project solve, and for whom? + li • Understand that they will build your project using JavaScript frameworks (as opposed to older or proprietary tools) + li • Keep your expectations high. Our students' goal is to produce work that's up to your standards h3 If you're OK with these terms, great! We'd love to help you! Fill in this form and we'll get right back to you. form.form-horizontal(role='form', method='POST') input(type='hidden', name='_csrf', value=_csrf) From cead8d3d81629888fd3181bdede982efe0e9069d Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 17 Dec 2014 14:22:23 -0800 Subject: [PATCH 42/48] update the seed task to delete existing challenges first --- seed_data/seed_challenges.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/seed_data/seed_challenges.js b/seed_data/seed_challenges.js index 1be2ced7ff..b54e9c2f68 100644 --- a/seed_data/seed_challenges.js +++ b/seed_data/seed_challenges.js @@ -4,8 +4,12 @@ var secrets = require('../config/secrets'); var challenges = require('./challenges.json'); mongoose.connect(secrets.db); -Challenge.create(challenges, function(err, data) { +Challenge.remove({}, function(err, data){ if (err) console.log(err); - else console.log('Saved ', data ); - process.exit(0); -}); \ No newline at end of file + else console.log('Deleted ', data ); + Challenge.create(challenges, function(err, data) { + if (err) console.log(err); + else console.log('Saved ', data ); + process.exit(0); + }); +}); From a7dc7d4c5a868ac2290a8c72880342b569ed347b Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Wed, 17 Dec 2014 23:59:28 -0800 Subject: [PATCH 43/48] minor improvements to hamburger --- public/css/main.less | 5 +++++ views/live-pair-programming.jade | 11 ++--------- views/partials/navbar.jade | 18 +++++++++--------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index 55abb05ff2..06ee393bc5 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -344,4 +344,9 @@ ul { thead { font-size: 150%; +} + +.hamburger { + background-color: #ddd; + text-align: center; } \ No newline at end of file diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade index 54e8c6740b..c5162d4234 100644 --- a/views/live-pair-programming.jade +++ b/views/live-pair-programming.jade @@ -2,16 +2,9 @@ extends layout block content .jumbotron.negative-15.text-center h1.hug-top Live Pair Programming - h2 Watch Quincy Larson and Berkeley Martinez pair program on CoderByte challenges NOW (6 - 7 pm Pacific time): + h2 We live pair program every Tuesday from 6 p.m. to 7 p.m. (Pacific Time) br - a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Click here to watch! - h3 . And follow   - a(href='http://twitter.com/intent/user?screen_name=FreeCodeCamp' target='_blank') @FreeCodeCamp - | ,   - a(href='http://twitter.com/intent/user?screen_name=ossia' target='_blank') @ossia - |   and   - a(href='http://twitter.com/intent/user?screen_name=BerkeleyTrue' target='_blank') @BerkeleyTrue - |   on Twitter. + a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Watch our most recent pair programming video p Got 3 minutes? Start learning to code with us! br a.btn.btn-cta.signup-btn.btn-primary(href="/login") Start learning to code (it's free) diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 3e31478f2f..69abc7381e 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -3,10 +3,10 @@ .navbar-header if user button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse') - span.sr-only Toggle navigation - span.icon-bar - span.icon-bar - span.icon-bar + span.sr-only Toggle navigation + span.icon-bar + span.icon-bar + span.icon-bar a.navbar-brand(href='/') img.img-responsive.nav-logo(src='https://s3.amazonaws.com/freecodecamp/freecodecamp_logo.svg') .collapse.navbar-collapse @@ -15,23 +15,23 @@ a.btn.btn-primary.btn-nav.btn-sm(href='/login') Sign in else li.dropdown(class=title=='Account Management'?'active':undefined) - a.dropdown-toggle(href='#', data-toggle='dropdown') + a.dropdown-toggle.text-center(href='#', data-toggle='dropdown') if user.profile.picture img(src='#{user.profile.picture}') else img(src='#{user.gravatar(60)}') | #{user.profile.name || user.email || user.id} [ #{user.points} ] i.caret - ul.dropdown-menu - li + ul.dropdown-menu.text-right + li.hamburger a(href='/') span.ion-map | My Challenges - li + li.hamburger a(href='/account') span.ion-person | My Account - li + li.hamburger a(href='/logout') span.ion-log-out | Logout \ No newline at end of file From fd0250884b94077b8c455c74ae013c780e68ad76 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Thu, 18 Dec 2014 00:45:31 -0800 Subject: [PATCH 44/48] fix landing page images --- public/css/main.less | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/css/main.less b/public/css/main.less index 06ee393bc5..dc94d1e9be 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -305,9 +305,11 @@ ul { box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); } .profile-image { + border-radius: 10px; width: 200px; height: 200px; - border-radius: 10px; + padding-left: 5px; + padding-right: 5px; } .team-member { From 860171d5a55011b61b8466bf2213507557e3d2de Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sat, 20 Dec 2014 22:15:50 -0800 Subject: [PATCH 45/48] update meta files and make landing page look better with Retina --- public/css/main.less | 4 ++++ views/home.jade | 8 ++++---- views/layout.jade | 1 - views/partials/meta.jade | 10 +++++----- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index dc94d1e9be..16714feff5 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -351,4 +351,8 @@ thead { .hamburger { background-color: #ddd; text-align: center; +} + +.nowrap { + white-space: nowrap; } \ No newline at end of file diff --git a/views/home.jade b/views/home.jade index 47305dee19..fa627ad7f7 100644 --- a/views/home.jade +++ b/views/home.jade @@ -6,25 +6,25 @@ block content h2 Let's learn to code by building projects for nonprofits .row .col-xs-12.col-sm-12.col-md-3 - h3 Get Connected + h3.nowrap Get Connected .negative-45 span.landing-icon.ion-network.text-primary(title='Get great references and connections to help you get a job') .negative-45 p.landing-p Join a community of motivated professionals learning to code. .col-xs-12.col-sm-12.col-md-3 - h3 Learn JavaScript + h3.nowrap Learn JavaScript .negative-45 span.landing-icon.ion-settings.text-primary(title='Learn to code') .negative-45 p.landing-p Work together on Full Stack JavaScript coding challenges. .col-xs-12.col-sm-12.col-md-3 - h3 Build your Portfolio + h3.nowrap Build your Portfolio .negative-45 span.landing-icon.ion-social-github.text-primary(title='Build a portfolio of apps for nonprofits') .negative-45 p.landing-p Build apps that solve real problems for real people. .col-xs-12.col-sm-12.col-md-3 - h3 Help Nonprofits + h3.nowrap Help Nonprofits .negative-45 span.landing-icon.ion-ios7-people.text-primary(title='Help nonprofits') .negative-45 diff --git a/views/layout.jade b/views/layout.jade index 839ca31e18..eeb151f5eb 100644 --- a/views/layout.jade +++ b/views/layout.jade @@ -9,7 +9,6 @@ html meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(name='viewport', content='width=device-width, initial-scale=1.0') meta(name='csrf-token', content=_csrf) - title #{title} - Hackathon Starter != css('main') body diff --git a/views/partials/meta.jade b/views/partials/meta.jade index 5ff3b43576..8c9c07ffb1 100644 --- a/views/partials/meta.jade +++ b/views/partials/meta.jade @@ -3,25 +3,25 @@ meta(http-equiv='X-UA-Compatible', content='IE=edge') meta(name='viewport', content='width=device-width, initial-scale=1.0') meta(name='csrf-token', content=_csrf) meta(name='keywords', content='learn to code, learn how to code, code, coding, software engineer, software developer, mean stack, pair programming, node.js, angular.js, express.js, mongoDB, coding bootcamp') -meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:title") +meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:title") meta(content="FreeCodeCamp", property="og:site_name") meta(name='p:domain_verify', content='d0bc047a482c03c24f1168004c2a216a') meta(content="http://www.freecodecamp.com", property="og:url") -meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", property="og:description") +meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", property="og:description") meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", property="og:image") meta(content="article", property="og:type") meta(content="https://www.facebook.com/freecodecamp", property="article:publisher") meta(content="Responsive", property="article:section") //meta(content="44011818", property="fb:admins") //Google -meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="description") +meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="description") link(href="https://plus.google.com/114148836969274586544", rel="author") //Twitter meta(content="freecodecamp", name="twitter:creator") meta(content="http://www.freecodecamp.com", name="twitter:url") meta(content="freecodecamp", name="twitter:site") //meta(content="summary_large_image", name="twitter:card") -meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:title") +meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:title") meta(content="https://pbs.twimg.com/profile_images/522961310212833280/XE6vGAaO.jpeg", name="twitter:image:src") -meta(content="Learn to code at freecodecamp.com. Free Code Camp is a free coding bootcamp for busy people. Learn JavaScript, build a portfolio, and get great references - all by helping nonprofits!", name="twitter:description") +meta(content="Free Code Camp is a community of busy people learning to code by collaborating on projects for nonprofits. Learn Full-stack JavaScript, build a portfolio, and get great references with our coding bootcamp.", name="twitter:description") meta(content="a40ee5d5dba3bb091ad783ebd2b1383f", name="p:domain_verify") \ No newline at end of file From 46f217f548ab67b39f62b266eb1c46654c264e49 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 21 Dec 2014 15:43:07 -0800 Subject: [PATCH 46/48] update navigation to include links to chatroom and forum. --- public/css/main.less | 3 ++- views/account/login.jade | 6 +++--- views/challenges/show.jade | 4 +--- views/live-pair-programming.jade | 2 +- views/partials/navbar.jade | 14 ++++++++++++-- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/public/css/main.less b/public/css/main.less index 16714feff5..338278b65b 100644 --- a/public/css/main.less +++ b/public/css/main.less @@ -350,7 +350,8 @@ thead { .hamburger { background-color: #ddd; - text-align: center; + text-align: left; + font-size: 20px; } .nowrap { diff --git a/views/account/login.jade b/views/account/login.jade index 84f205c3f2..025c807488 100644 --- a/views/account/login.jade +++ b/views/account/login.jade @@ -5,12 +5,12 @@ block content a.btn.btn-lg.btn-block.btn-google-plus.btn-social(href='/auth/google') i.fa.fa-google-plus | Sign in with Google - //a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github') - // i.fa.fa-github - // | Sign in with GitHub a.btn.btn-lg.btn-block.btn-facebook.btn-social(href='/auth/facebook') i.fa.fa-facebook | Sign in with Facebook + a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github') + i.fa.fa-github + | Sign in with GitHub a.btn.btn-lg.btn-block.btn-linkedin.btn-social(href='/auth/linkedin') i.fa.fa-linkedin | Sign in with LinkedIn diff --git a/views/challenges/show.jade b/views/challenges/show.jade index 3a33d8db5e..a342169d48 100644 --- a/views/challenges/show.jade +++ b/views/challenges/show.jade @@ -20,10 +20,8 @@ block content a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room |  ,  a(href="http://blog.freecodecamp.com", target="_blank") Blog - |  ,  - a(href="https://twitter.com/freecodecamp", target="_blank") Twitter Feed |  , or  - a(href="https://reddit.com/r/freecodecamp", target="_blank") Subreddit + a(href="http://forum.freecodecamp.com", target="_blank") Forum | . #complete-dialog.modal .modal-dialog.animated.zoomIn.fast-animation diff --git a/views/live-pair-programming.jade b/views/live-pair-programming.jade index c5162d4234..ba77ace82b 100644 --- a/views/live-pair-programming.jade +++ b/views/live-pair-programming.jade @@ -2,7 +2,7 @@ extends layout block content .jumbotron.negative-15.text-center h1.hug-top Live Pair Programming - h2 We live pair program every Tuesday from 6 p.m. to 7 p.m. (Pacific Time) + h2 We live pair program every Tuesday from 6 p.m. to 7 p.m. (Pacific Time). Our next session is December 30th. br a.btn.btn-cta.signup-btn.btn-primary(href="http://www.crowdcast.io/e/freecodecamp-live_2" target='_blank') Watch our most recent pair programming video p Got 3 minutes? Start learning to code with us! diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 69abc7381e..20144d01f4 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -25,8 +25,18 @@ ul.dropdown-menu.text-right li.hamburger a(href='/') - span.ion-map - | My Challenges + span.ion-map + | My Challenges + - if (cc[1] > 0) + li.hamburger + a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank') + span.ion-coffee + | Chat Room + - if (cc[2] > 0) + li.hamburger + a(href='http://forum.freecodecamp.com/', target='_blank') + span.ion-planet + | Forum li.hamburger a(href='/account') span.ion-person From 14174ee453d8cc8291bf9654ce19a354f4205310 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Sun, 21 Dec 2014 17:52:17 -0800 Subject: [PATCH 47/48] conditional logic showing links to forum and chatroom --- views/challenges/show.jade | 17 +++++++++-------- views/partials/navbar.jade | 10 ++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/views/challenges/show.jade b/views/challenges/show.jade index a342169d48..902730d664 100644 --- a/views/challenges/show.jade +++ b/views/challenges/show.jade @@ -15,14 +15,15 @@ block content .btn.btn-primary.btn-big.btn-block.completed-challenge I've completed this challenge .ten-pixel-break .btn.btn-success.btn-large.btn-block.skip-challenge I want to skip this challenge for now - .panel-footer.text-center - span Need a break? Check out our:  - a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room - |  ,  - a(href="http://blog.freecodecamp.com", target="_blank") Blog - |  , or  - a(href="http://forum.freecodecamp.com", target="_blank") Forum - | . + - if (cc[2] > 0) + .panel-footer.text-center + span Need a break? Check out our:  + a(href="https://gitter.im/FreeCodeCamp/FreeCodeCamp", target="_blank") Chat Room + |  ,  + a(href="http://blog.freecodecamp.com", target="_blank") Blog + |  , or  + a(href="http://forum.freecodecamp.com", target="_blank") Forum + | . #complete-dialog.modal .modal-dialog.animated.zoomIn.fast-animation .modal-content diff --git a/views/partials/navbar.jade b/views/partials/navbar.jade index 20144d01f4..ea6aeeaf43 100644 --- a/views/partials/navbar.jade +++ b/views/partials/navbar.jade @@ -32,11 +32,21 @@ a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank') span.ion-coffee | Chat Room + - else + li.hamburger.disabled + a(href='https://gitter.im/FreeCodeCamp/FreeCodeCamp', target='_blank') + span.ion-coffee + | Chat Room (do Challenge 1 first) - if (cc[2] > 0) li.hamburger a(href='http://forum.freecodecamp.com/', target='_blank') span.ion-planet | Forum + - else + li.hamburger.disabled + a(href='http://forum.freecodecamp.com/', target='_blank') + span.ion-planet + | Forum (do Challenge 2 first) li.hamburger a(href='/account') span.ion-person From c06b8683c9d742ea21ad95377ced85e7e3002f09 Mon Sep 17 00:00:00 2001 From: Michael Q Larson Date: Mon, 22 Dec 2014 10:22:04 -0800 Subject: [PATCH 48/48] remove github auth again until I can figure out the issue --- seed_data/challenges.json | 14 +++++++++----- views/account/login.jade | 6 +++--- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/seed_data/challenges.json b/seed_data/challenges.json index 86bd9bf992..77161bfa46 100644 --- a/seed_data/challenges.json +++ b/seed_data/challenges.json @@ -29,21 +29,25 @@ "Be sure to update your biographical information and upload an image. A picture of your face works best. This is how people will see you in the chat room, so put your best foot forward.", "Now enter the chat room by going to https://gitter.im/FreeCodeCamp/FreeCodeCamp and clicking the \"sign in with GitHub\" button.", "Introduce yourself to our chat room by typing: \"hello world!\".", - "Tell your fellow Code Campers how you found Free Code Camp. Also tell them why you want to learn to code." + "Tell your fellow Code Campers how you found Free Code Camp. Also tell us why you want to learn to code.", + "Keep the chat room open while you work through the other challenges. That way you ask for help If you get stuck on a challenge. You can also socialize when you feel like taking a break." ] }, { - "name": "Subscribe to Our Subreddit", + "name": "Join our Forum", "time": 5, "video": "114578442", "challengeNumber": 2, "steps": [ - "Go to the Free Code Camp Subreddit: https://www.reddit.com/r/freecodecamp. You can come here to share and discuss additional coding resources, or ask questions to our entire community. Our chatroom is great for realtime discussions, but our subreddit is ideal for longer-term discussions and open-ended questions.", - "If you don't already have a Reddit account, create one by clicking the \"login or register\" button in the upper right hand corner.", + "Go to Free Code Camp's forum: http://forum.freecodecamp.com.", + "You can come here to share and discuss coding resources, ask questions to our entire community, and coordinate local Free Code Camp events.", + "Our chat room is great for realtime discussions, but our forum is ideal for longer-term discussions and open-ended questions.", + "Sign in with the Github account you created during Challenge 1.", "Click on the \"Introduce yourself here\" discussion.", "Here you can read through other Free Code Camp community members' self introductions.", "Go ahead and type a brief self introduction of your own.", - "Subscribe to the Free Code Camp subreddit by clicking \"Subscribe\". You might want to subscribe to these subreddits as well: http://www.reddit.com/r/learnprogramming/ and http://www.reddit.com/r/learnjavascript." + "Click on the \"Categories\" drop-down menu. You should see a category called \"Local Chapters\". Click that. If your city isn't already on the list, you can create a topic for it. Otherwise, you can also introduce yourself to the other Code Campers from your city.", + "Come back here daily to ask questions, engage in discussions, and share links to helpful coding tools." ] }, { diff --git a/views/account/login.jade b/views/account/login.jade index 025c807488..04983d112b 100644 --- a/views/account/login.jade +++ b/views/account/login.jade @@ -8,9 +8,9 @@ block content a.btn.btn-lg.btn-block.btn-facebook.btn-social(href='/auth/facebook') i.fa.fa-facebook | Sign in with Facebook - a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github') - i.fa.fa-github - | Sign in with GitHub + //a.btn.btn-lg.btn-block.btn-github.btn-social(href='/auth/github') + // i.fa.fa-github + // | Sign in with GitHub a.btn.btn-lg.btn-block.btn-linkedin.btn-social(href='/auth/linkedin') i.fa.fa-linkedin | Sign in with LinkedIn