Permalink
...
Comparing changes
Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
FreeCodeCamp/FreeCodeCamp
0muhammed/FreeCodeCamp
4356s/FreeCodeCamp
AEA2002/FreeCodeCamp
APark12/freecodecamp
Abdeltwab/FreeCodeCamp
Abousrea/FreeCodeCamp
AjithPanneerselvam/FreeCodeCamp
AkiraLaine/FreeCodeCamp
Anirudh257/FreeCodeCamp
AsuralomeusInc/FreeCodeCamp
Awdesh/FreeCodeCamp
Baaliisu/FreeCodeCamp
Buzzlightyear90/freecodecamp
CavemanStudios/freecodecamp
ChapmanCPSC370/FreeCodeCamp
CleverTrout/freecodecamp
CodeGuyB/FreeCodeCamp
CoderCal/FreeCodeCamp
DanceInWind/FreeCodeCamp
Danielweber7624/freecodecamp
Darlene1/freecodecamp
DustinTriplett/FreeCodeCamp
ESOComputing/freecodecamp
EmreAkkiray/FreeCodeCamp
ExEcute0/FreeCodeCamp
FlashB/freecodecamp
Fortiskrito/FreeCodeCamp
Freecodnix18-9/FreeCodeCamp
GJSmith3rd/freecodecamp
GangstaCoder/freecodecamp
Gatorguns/freecodecamp
Hippohaha7/FreeCodeCamp
Hiteshgen9/FreeCodeCamp
Hunta01/FreeCodeCamp
J-the-Fsharp-Dev/freecodecamp
Jennibear/freecodecamp
JerJohn15/FreeCodeCamp
JoelBond/freecodecamp
Joniqs/FreeCodeCamp
KrishMunot/FreeCodeCamp
LalainaRazafi/FreeCodeCamp
LohithBlaze/FreeCodeCamp
LuisJaquez/FreeCodeCamp
M1kep/FreeCodeCamp
MDA3/freecodecamp
MDBama100/freecodecamp
MH72/freecodecamp
MarceSanto/FreeCodeCamp
Mimi2k15/FreeCodeCamp
Moizes92/FreeCodeCamp
Moses1987/FreeCodeCamp
MurrayBakerWebDeveloper/FreeCodeCamp
Nalla3/FreeCodeCamp
NicoCrow/FreeCodeCamp
OmarElebiary/FreeCodeCamp
QuincyLarson/freecodecamp
RedNixTV/FreeCodeCamp
RihamMahmoud/freecodecamp
RohitChan5/FreeCodeCamp
Ronaiza/FreeCodeCamp
RubyRed1/FreeCodeCamp
SachinSPawar/FreeCodeCamp
Sargonzi/FreeCodeCamp
Saymon85/FreeCodeCamp
ScreamingCow/FreeCodeCamp
Shekharrajak/freecodecamp
SiddharthSasikumar/FreeCodeCamp
Talcim/FreeCodeCamp
TalesMGodois/FreeCodeCamp
Taonanyasha/freecodecamp
TeejayParker/freecodecamp
The-Perihelion/freecodecamp
Ukutu/FreeCodeCamp
Viqar/FreeCodeCamp
Wumingla/FreeCodeCamp
Yuni-/freecodecamp
ZebGirouard/freecodecamp
abdulhannanali/freecodecamp
aerophile/FreeCodeCamp
amench30/freecodecamp
amirghafouri/FreeCodeCamp
aperson11/FreeCodeCamp
aprekas/freecodecamp
asadexpert/FreeCodeCamp
asoliman74/FreeCodeCamp
atsuyim/FreeCodeCamp
banannie22/freecodecamp
benschac/FreeCodeCamp
bethuel11/freecodecamp
bkahraman2011/FreeCodeCamp
blidodi/FreeCodeCamp
brenothales/FreeCodeCamp
brrrzrgamer/FreeCodeCamp
brunatf/FreeCodeCamp
canapio/FreeCodeCamp
charutiwari04/FreeCodeCamp
chrissyseas/freecodecamp
clydegold8/FreeCodeCamp
constantinminea/FreeCodeCamp
corderogerardo/freecodecamp
cyberwizardinstitute/freecodecamp
daewu/freecodecamp
danmkang/FreeCodeCamp
dasburo/freecodecamp
devonwilson1/FreeCodeCamp
dhrubajrk/freecodecamp
digicyc/freecodecamp
dokkillo/FreeCodeCamp
dougshamoo/freecodecamp
droro/FreeCodeCamp
efren0409/FreeCodeCamp
ekas/FreeCodeCamp
eleanorz/freecodecamp
engabouzaid/FreeCodeCamp
erkand-imeri/FreeCodeCamp
feng003/FreeCodeCamp
ferittuncer/FreeCodeCamp
flyfamilyguy/FreeCodeCamp
forresst/FreeCodeCamp
freecodecamper2/freecodecamp
gabazine/freecodecamp
gillettelevi5/FreeCodeCamp
greyhammer/FreeCodeCamp
gulzaar/FreeCodeCamp
guocq/FreeCodeCamp
haiiev/FreeCodeCamp
haironfire/freecodecamp
hammadcapricorn/freecodecamp
hgryoo/FreeCodeCamp
ian-splintercell-splinter/FreeCodeCamp
illgetya/freecodecamp
indila/FreeCodeCamp
iza86/FreeCodeCamp
jackvsworld/freecodecamp
jayweezy247/FreeCodeCamp
jobao-tk/freecodecamp
johndhs/FreeCodeCamp
jones-codes/FreeCodeCamp
judyspacely/freecodecamp
khumar-musayeva/FreeCodeCamp
kod3r/freecodecamp
kris4de/freecodecamp
kteagrel/freecodecamp
kuric/FreeCodeCamp
kylejbennett/FreeCodeCamp
lavandosovich/FreeCodeCamp
lianzisong/FreeCodeCamp
lionelx1/FreeCodeCamp
ltegman/FreeCodeCamp
luizfilipemacedo/freecodecamp
lushboy76/freecodecamp
manbearkyle/freecodecamp
manohartn/FreeCodeCamp
martinkwan/freecodecamp
marvelp/freecodecamp
mattjl/freecodecamp
maxsong11/FreeCodeCamp
meylia/FreeCodeCamp
min7choi/FreeCodeCamp
mitrostziavarasgr/freecodecamp
mohsinr/FreeCodeCamp
mubassirhayat/freecodecamp
nikodonnell/FreeCodeCamp
nishant8BITS/FreeCodeCamp
nygil123/FreeCodeCamp
ovidelu2006/freecodecamp
pavelkarkh/freecodecamp
pdubbwon/FreeCodeCamp
pepsifraek/FreeCodeCamp
pursh2002/freecodecamp
pygmalion666/FreeCodeCamp
rrac/FreeCodeCamp
sadell/FreeCodeCamp
sanjaykumarsn/FreeCodeCamp
sanjayramesh005/freecodecamp
sdkumar1993/FreeCodeCamp
seanh99/freecodecamp
shaaz89/FreeCodeCamp
shaikhatik0786/FreeCodeCamp
shazeel1/FreeCodeCamp
sparksong/FreeCodeCamp
stephaao/FreeCodeCamp
stugel/freecodecamp
sushiyea/freecodecamp
toro68/FreeCodeCamp
tportela/freecodecamp
username1001/FreeCodeCamp
vinitraj96/freecodecamp
vmr1981/FreeCodeCamp
walejandromt/FreeCodeCamp
webdev1001/FreeCodeCamp
wforfun/freecodecamp
xianSkyKing/FreeCodeCamp
yabhis/FreeCodeCamp
yang33895/FreeCodeCamp
yirenzhi/freecodecamp
yuanweikafeijsj/FreeCodeCamp
zurh/FreeCodeCamp
zzzzzzx/FreeCodeCamp
Nothing to show
Choose a base branch
feature/add-nonprofit-project-description
feature/language-routing
feature/loopLocker
feature/new-social-challenges
feature/react-challenges
feature/reduce-user-query-load
feature/settings-page
greenkeeper-eslint-2.4.0
greenkeeper-frameguard-1.1.0
greenkeeper-gulp-jsonlint-1.1.2
localized-desc-and-name
master
new/video-challenges
staging
Nothing to show
Choose a Head Repository
FreeCodeCamp/FreeCodeCamp
0muhammed/FreeCodeCamp
4356s/FreeCodeCamp
AEA2002/FreeCodeCamp
APark12/freecodecamp
Abdeltwab/FreeCodeCamp
Abousrea/FreeCodeCamp
AjithPanneerselvam/FreeCodeCamp
AkiraLaine/FreeCodeCamp
Anirudh257/FreeCodeCamp
AsuralomeusInc/FreeCodeCamp
Awdesh/FreeCodeCamp
Baaliisu/FreeCodeCamp
Buzzlightyear90/freecodecamp
CavemanStudios/freecodecamp
ChapmanCPSC370/FreeCodeCamp
CleverTrout/freecodecamp
CodeGuyB/FreeCodeCamp
CoderCal/FreeCodeCamp
DanceInWind/FreeCodeCamp
Danielweber7624/freecodecamp
Darlene1/freecodecamp
DustinTriplett/FreeCodeCamp
ESOComputing/freecodecamp
EmreAkkiray/FreeCodeCamp
ExEcute0/FreeCodeCamp
FlashB/freecodecamp
Fortiskrito/FreeCodeCamp
Freecodnix18-9/FreeCodeCamp
GJSmith3rd/freecodecamp
GangstaCoder/freecodecamp
Gatorguns/freecodecamp
Hippohaha7/FreeCodeCamp
Hiteshgen9/FreeCodeCamp
Hunta01/FreeCodeCamp
J-the-Fsharp-Dev/freecodecamp
Jennibear/freecodecamp
JerJohn15/FreeCodeCamp
JoelBond/freecodecamp
Joniqs/FreeCodeCamp
KrishMunot/FreeCodeCamp
LalainaRazafi/FreeCodeCamp
LohithBlaze/FreeCodeCamp
LuisJaquez/FreeCodeCamp
M1kep/FreeCodeCamp
MDA3/freecodecamp
MDBama100/freecodecamp
MH72/freecodecamp
MarceSanto/FreeCodeCamp
Mimi2k15/FreeCodeCamp
Moizes92/FreeCodeCamp
Moses1987/FreeCodeCamp
MurrayBakerWebDeveloper/FreeCodeCamp
Nalla3/FreeCodeCamp
NicoCrow/FreeCodeCamp
OmarElebiary/FreeCodeCamp
QuincyLarson/freecodecamp
RedNixTV/FreeCodeCamp
RihamMahmoud/freecodecamp
RohitChan5/FreeCodeCamp
Ronaiza/FreeCodeCamp
RubyRed1/FreeCodeCamp
SachinSPawar/FreeCodeCamp
Sargonzi/FreeCodeCamp
Saymon85/FreeCodeCamp
ScreamingCow/FreeCodeCamp
Shekharrajak/freecodecamp
SiddharthSasikumar/FreeCodeCamp
Talcim/FreeCodeCamp
TalesMGodois/FreeCodeCamp
Taonanyasha/freecodecamp
TeejayParker/freecodecamp
The-Perihelion/freecodecamp
Ukutu/FreeCodeCamp
Viqar/FreeCodeCamp
Wumingla/FreeCodeCamp
Yuni-/freecodecamp
ZebGirouard/freecodecamp
abdulhannanali/freecodecamp
aerophile/FreeCodeCamp
amench30/freecodecamp
amirghafouri/FreeCodeCamp
aperson11/FreeCodeCamp
aprekas/freecodecamp
asadexpert/FreeCodeCamp
asoliman74/FreeCodeCamp
atsuyim/FreeCodeCamp
banannie22/freecodecamp
benschac/FreeCodeCamp
bethuel11/freecodecamp
bkahraman2011/FreeCodeCamp
blidodi/FreeCodeCamp
brenothales/FreeCodeCamp
brrrzrgamer/FreeCodeCamp
brunatf/FreeCodeCamp
canapio/FreeCodeCamp
charutiwari04/FreeCodeCamp
chrissyseas/freecodecamp
clydegold8/FreeCodeCamp
constantinminea/FreeCodeCamp
corderogerardo/freecodecamp
cyberwizardinstitute/freecodecamp
daewu/freecodecamp
danmkang/FreeCodeCamp
dasburo/freecodecamp
devonwilson1/FreeCodeCamp
dhrubajrk/freecodecamp
digicyc/freecodecamp
dokkillo/FreeCodeCamp
dougshamoo/freecodecamp
droro/FreeCodeCamp
efren0409/FreeCodeCamp
ekas/FreeCodeCamp
eleanorz/freecodecamp
engabouzaid/FreeCodeCamp
erkand-imeri/FreeCodeCamp
feng003/FreeCodeCamp
ferittuncer/FreeCodeCamp
flyfamilyguy/FreeCodeCamp
forresst/FreeCodeCamp
freecodecamper2/freecodecamp
gabazine/freecodecamp
gillettelevi5/FreeCodeCamp
greyhammer/FreeCodeCamp
gulzaar/FreeCodeCamp
guocq/FreeCodeCamp
haiiev/FreeCodeCamp
haironfire/freecodecamp
hammadcapricorn/freecodecamp
hgryoo/FreeCodeCamp
ian-splintercell-splinter/FreeCodeCamp
illgetya/freecodecamp
indila/FreeCodeCamp
iza86/FreeCodeCamp
jackvsworld/freecodecamp
jayweezy247/FreeCodeCamp
jobao-tk/freecodecamp
johndhs/FreeCodeCamp
jones-codes/FreeCodeCamp
judyspacely/freecodecamp
khumar-musayeva/FreeCodeCamp
kod3r/freecodecamp
kris4de/freecodecamp
kteagrel/freecodecamp
kuric/FreeCodeCamp
kylejbennett/FreeCodeCamp
lavandosovich/FreeCodeCamp
lianzisong/FreeCodeCamp
lionelx1/FreeCodeCamp
ltegman/FreeCodeCamp
luizfilipemacedo/freecodecamp
lushboy76/freecodecamp
manbearkyle/freecodecamp
manohartn/FreeCodeCamp
martinkwan/freecodecamp
marvelp/freecodecamp
mattjl/freecodecamp
maxsong11/FreeCodeCamp
meylia/FreeCodeCamp
min7choi/FreeCodeCamp
mitrostziavarasgr/freecodecamp
mohsinr/FreeCodeCamp
mubassirhayat/freecodecamp
nikodonnell/FreeCodeCamp
nishant8BITS/FreeCodeCamp
nygil123/FreeCodeCamp
ovidelu2006/freecodecamp
pavelkarkh/freecodecamp
pdubbwon/FreeCodeCamp
pepsifraek/FreeCodeCamp
pursh2002/freecodecamp
pygmalion666/FreeCodeCamp
rrac/FreeCodeCamp
sadell/FreeCodeCamp
sanjaykumarsn/FreeCodeCamp
sanjayramesh005/freecodecamp
sdkumar1993/FreeCodeCamp
seanh99/freecodecamp
shaaz89/FreeCodeCamp
shaikhatik0786/FreeCodeCamp
shazeel1/FreeCodeCamp
sparksong/FreeCodeCamp
stephaao/FreeCodeCamp
stugel/freecodecamp
sushiyea/freecodecamp
toro68/FreeCodeCamp
tportela/freecodecamp
username1001/FreeCodeCamp
vinitraj96/freecodecamp
vmr1981/FreeCodeCamp
walejandromt/FreeCodeCamp
webdev1001/FreeCodeCamp
wforfun/freecodecamp
xianSkyKing/FreeCodeCamp
yabhis/FreeCodeCamp
yang33895/FreeCodeCamp
yirenzhi/freecodecamp
yuanweikafeijsj/FreeCodeCamp
zurh/FreeCodeCamp
zzzzzzx/FreeCodeCamp
Nothing to show
Choose a head branch
feature/add-nonprofit-project-description
feature/language-routing
feature/loopLocker
feature/new-social-challenges
feature/react-challenges
feature/reduce-user-query-load
feature/settings-page
greenkeeper-eslint-2.4.0
greenkeeper-frameguard-1.1.0
greenkeeper-gulp-jsonlint-1.1.2
localized-desc-and-name
master
new/video-challenges
staging
Nothing to show
19
contributors
Commits on Feb 20, 2016
QuincyLarson |
add an explanation of how our nonprofit projects work
|
389ea75
|
Commits on Mar 12, 2016
SaintPeter |
Add solution to Exact Change
|
9d0cadb
|
||||
SaintPeter |
Change nameXX properties to title XX properties
|
6e7d5db
|
Commits on Mar 15, 2016
Commits on Mar 16, 2016
Commits on Mar 17, 2016
Commits on Mar 18, 2016
drk7891 |
Fixed challenge typo
|
5b75652
|
||||
erictleung |
Make Chunky Monkey function name unique
|
f8b8a29
|
Commits on Mar 19, 2016
kalunlee136 |
added links for clarification on Make Objects Properties Private chal…
…lenge. fixed grammar from previous PR. This closes #7282. |
d021574
|
Commits on Mar 20, 2016
AkiraLaine |
changed http to https in HTML5 & CSS3
reverted freecatphotoapp links to http reverted all freecatphotoapp links to http fixed more issues |
668e47f
|
||||
SaintPeter |
Merge pull request #7569 from paycoguy/fix/accessing-nested-arrays
Updated example code for Accessing Nested Arrays in JSON to match challenge code |
9cf2b49
|
||||
SaintPeter |
Merge pull request #7579 from erictleung/fix/unique-function-name-for…
…-repeat-a-string Make Repeat a String function name unique |
1b67e47
|
||||
SaintPeter |
Merge pull request #7595 from erictleung/fix/unique-function-name-for…
…-truncate-a-string Make Truncate a String function unique & clarify |
acc31b2
|
||||
SaintPeter |
Merge pull request #7615 from drk7891/fix/array-name-typo
Fixed challenge typo |
56c6b66
|
||||
SaintPeter |
Merge pull request #7619 from erictleung/fix/unique-function-name-for…
…-chunky-monkey Make Chunky Monkey function name unique |
c564045
|
||||
raisedadead |
Merge pull request #7613 from AkiraLaine/fix/http-requests
changed http to https in HTML5 & CSS3 |
842b026
|
Commits on Mar 21, 2016
N0bl3 |
Translation of Bootstrap challenges in french
|
14399c2
|
||||
kalunlee136 |
opens links in a new tab
|
88e49c2
|
||||
AkiraLaine |
Merge pull request #7625 from N0bl3/add/FR-responsive-design_with-boo…
…tstrap Add/FR translation responsive design with bootstrap |
b2e5057
|
||||
raisedadead |
Merge pull request #7620 from kalunlee136/add-link-to-make-object-pro…
…perties-challenge feature/added links for Objects Properties Private challenge |
cf9c82e
|
Unified
Split
Showing
with
2,876 additions
and 2,436 deletions.
- +4 −0 client/less/main.less
- +3 −3 client/main.js
- +2 −3 common/app/routes/Hikes/components/Lecture.jsx
- +1 −1 common/app/routes/Jobs/components/JobTotal.jsx
- +1 −1 common/app/routes/Jobs/components/Jobs.jsx
- +8 −0 common/models/user.json
- +269 −269 seed/challenges/00-getting-started/getting-started.json
- +34 −31 seed/challenges/01-front-end-development-certification/advanced-bonfires.json
- +11 −11 seed/challenges/01-front-end-development-certification/advanced-ziplines.json
- +127 −127 seed/challenges/01-front-end-development-certification/basic-bonfires.json
- +146 −146 seed/challenges/01-front-end-development-certification/basic-javascript.json
- +67 −67 seed/challenges/01-front-end-development-certification/basic-ziplines.json
- +246 −39 seed/challenges/01-front-end-development-certification/bootstrap.json
- +10 −10 seed/challenges/01-front-end-development-certification/front-end-development-certificate.json
- +21 −21 seed/challenges/01-front-end-development-certification/gear-up-for-success.json
- +1,064 −1,065 seed/challenges/01-front-end-development-certification/html5-and-css.json
- +105 −105 seed/challenges/01-front-end-development-certification/intermediate-bonfires.json
- +13 −14 seed/challenges/01-front-end-development-certification/intermediate-ziplines.json
- +18 −18 seed/challenges/01-front-end-development-certification/jquery.json
- +14 −14 seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json
- +16 −15 ...challenges/01-front-end-development-certification/object-oriented-and-functional-programming.json
- +1 −3 seed/challenges/02-data-visualization-certification/d3.json
- +10 −10 seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
- +20 −20 seed/challenges/02-data-visualization-certification/data-visualization-projects.json
- +20 −20 seed/challenges/02-data-visualization-certification/react-projects.json
- +1 −2 seed/challenges/02-data-visualization-certification/react.json
- +1 −2 seed/challenges/02-data-visualization-certification/sass.json
- +44 −45 seed/challenges/03-back-end-development-certification/api-projects.json
- +2 −2 seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json
- +10 −10 seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
- +10 −10 seed/challenges/03-back-end-development-certification/dynamic-web-applications.json
- +1 −1 seed/challenges/03-back-end-development-certification/git.json
- +1 −1 seed/challenges/03-back-end-development-certification/mongodb.json
- +5 −5 seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json
- +8 −8 seed/challenges/04-video-challenges/bigonotation.json
- +36 −39 seed/challenges/04-video-challenges/chromedevtools.json
- +63 −50 seed/challenges/04-video-challenges/computer-basics.json
- +6 −6 seed/challenges/04-video-challenges/dom.json
- +22 −23 seed/challenges/04-video-challenges/jslingo.json
- +2 −1 server/boot/challenge.js
- +46 −10 server/boot/randomAPIs.js
- +79 −24 server/boot/user.js
- +5 −5 server/resources/labs.json
- +80 −80 server/resources/testimonials.json
- +6 −6 server/utils/commit.json
- +129 −0 server/views/account/settings.jade
- +9 −80 server/views/account/show.jade
- +1 −1 server/views/certificate/back-end.jade
- +1 −1 server/views/certificate/data-vis.jade
- +1 −1 server/views/certificate/front-end.jade
- +1 −1 server/views/certificate/full-stack.jade
- +1 −1 server/views/commit/pledge.jade
- +3 −3 server/views/home.jade
- +5 −0 server/views/resources/about.jade
- +61 −0 server/views/resources/how-nonprofit-projects-work.jade
- +3 −3 server/views/resources/nonprofits.jade
- +1 −1 server/views/resources/shop.jade
- +1 −1 server/views/wiki/show.jade
View
4
client/less/main.less
@@ -170,6 +170,10 @@ ul { | ||
margin-top: 15px; | ||
} | ||
+.positive-20 { | ||
+ margin-top: 20px; | ||
+} | ||
+ | ||
.positive-15-bottom { | ||
margin-bottom: 15px; | ||
} | ||
View
6
client/main.js
@@ -298,12 +298,12 @@ $(document).ready(function() { | ||
} | ||
function expandBlock(item) { | ||
- $(item).addClass('in'); | ||
+ $(item).addClass('in').css('height', 'auto'); | ||
expandCaret(item); | ||
} | ||
function collapseBlock(item) { | ||
- $(item).removeClass('in'); | ||
+ $(item).removeClass('in').css('height', 'auto'); | ||
collapseCaret(item); | ||
} | ||
@@ -389,7 +389,7 @@ $(document).ready(function() { | ||
if (!main.isWikiAsideLoad) { | ||
var lang = window.location.toString().match(/\/\w{2}\//); | ||
lang = (lang) ? lang[0] : '/en/'; | ||
- var wikiURL = 'http://freecodecamp.github.io/wiki' + lang; | ||
+ var wikiURL = '//freecodecamp.github.io/wiki' + lang; | ||
var wikiAside = $('<iframe>'); | ||
wikiAside.attr({ | ||
src: wikiURL, | ||
View
5
common/app/routes/Hikes/components/Lecture.jsx
@@ -57,9 +57,8 @@ export class Lecture extends React.Component { | ||
return transcript.map((line, index) => ( | ||
<p | ||
className='lead text-left' | ||
- key={ dashedName + index }> | ||
- { line } | ||
- </p> | ||
+ key={ dashedName + index } | ||
+ dangerouslySetInnerHTML={{__html: line}} /> | ||
)); | ||
} | ||
View
2
common/app/routes/Jobs/components/JobTotal.jsx
@@ -287,7 +287,7 @@ export class JobTotal extends PureComponent { | ||
<img | ||
alt='An array of credit cards' | ||
border='0' | ||
- src='http://i.imgur.com/Q2SdSZG.png' | ||
+ src='//i.imgur.com/Q2SdSZG.png' | ||
style={{ | ||
width: '100%' | ||
}} /> | ||
View
2
common/app/routes/Jobs/components/Jobs.jsx
@@ -115,7 +115,7 @@ export class Jobs extends PureComponent { | ||
engineer through Free Code Camp | ||
`} | ||
className='img-responsive testimonial-image-jobs img-center' | ||
- src='http://i.imgur.com/tGcAA8H.jpg' /> | ||
+ src='//i.imgur.com/tGcAA8H.jpg' /> | ||
</Col> | ||
<Col | ||
md={ 10 } | ||
View
8
common/models/user.json
@@ -110,6 +110,14 @@ | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
+ "sendNotificationEmail": { | ||
+ "type": "boolean", | ||
+ "default": true | ||
+ }, | ||
+ "sendQuincyEmail": { | ||
+ "type": "boolean", | ||
+ "default": true | ||
+ }, | ||
"isLocked": { | ||
"type": "boolean", | ||
"default": false, | ||
View
538
seed/challenges/00-getting-started/getting-started.json
@@ -9,73 +9,73 @@ | ||
"title": "Learn how Free Code Camp Works", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/6ibIavQ.jpg", | ||
+ "//i.imgur.com/6ibIavQ.jpg", | ||
"A picture of Free Code Camp's 4 benefits: Get connected, Learn JavaScript, Build your Portfolio, Help nonprofits", | ||
"Welcome to Free Code Camp. We're an open source community of busy people who learn to code and help nonprofits.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Elb3dfj.jpg", | ||
+ "//i.imgur.com/Elb3dfj.jpg", | ||
"A screenshot of some of our campers coding together in Toronto.", | ||
"<bold>Learning to code is hard.</bold> To succeed, you'll need lots of practice and support. That's why we've created a rigorous curriculum and supportive community.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/D7Y5luw.jpg", | ||
+ "//i.imgur.com/D7Y5luw.jpg", | ||
"A graph of the rate of job growth against growth in computer science degree graduates. There are 1.4 million jobs and only 400 thousand people to fill them.", | ||
"There are thousands of coding jobs currently going unfilled, and the demand for coders grows every year.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WD3STY6.jpg", | ||
+ "//i.imgur.com/WD3STY6.jpg", | ||
"Photos of three campers who've gotten jobs after learning to code at Free Code Camp.", | ||
"Free Code Camp is a proven path to your first coding job. In fact, no one has actually completed our entire program, because campers get jobs before they're able to.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vLNso6h.jpg", | ||
+ "//i.imgur.com/vLNso6h.jpg", | ||
"An illustration showing that you will learn HTML5, CSS3, JavaScript, Databases, Git, Node.js, React and D3.", | ||
"We have hundreds of optional coding challenges that will teach you fundamental web development technologies like HTML5, Node.js and databases.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/UVB9hxp.jpg", | ||
+ "//i.imgur.com/UVB9hxp.jpg", | ||
"An image of a camper at a cafe building projects on Free Code Camp.", | ||
"We believe humans learn best by doing. So you'll spend most of your time actually building projects. We'll give you a list of specifications (agile user stories), and you'll figure out how to build apps that fulfill those specifications.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/pbW7K5S.jpg", | ||
+ "//i.imgur.com/pbW7K5S.jpg", | ||
"An image of showing our front end, back end, and data visualization certifications (400 hours each), our nonprofit projects (800 hours), and interview prep (80 hours) for a total of 2,080 hours of coding experience.", | ||
"Our curriculum is divided into 4 certifications. These certifications are standardized, and instantly verifiable by your freelance clients and future employers. Like everything else at Free Code Camp, these certifications are free. We recommend doing them in order, but you are free to jump around. The first three certifications take 400 hours each, and the final certification takes 800 hours, and involves building real-life projects for nonprofits.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/k8btNUB.jpg", | ||
+ "//i.imgur.com/k8btNUB.jpg", | ||
"A screenshot of our Front End Development Certificate", | ||
"To earn our verified Front End Development Certification, you'll build 10 projects using HTML, CSS, jQuery, and JavaScript.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Et3iD74.jpg", | ||
+ "//i.imgur.com/Et3iD74.jpg", | ||
"A screenshot of our Data Visualization Certificate", | ||
"To earn our Data Visualization Certification, you'll build 10 projects using React, Sass and D3.js.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/8v3t84p.jpg", | ||
+ "//i.imgur.com/8v3t84p.jpg", | ||
"A screenshot of our Back End Development Certificate", | ||
"To earn our Back End Development Certification, you'll build 10 projects using Node.js, Express, and MongoDB. You'll use Git and Heroku to deploy them to the cloud.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/yXyxbDd.jpg", | ||
+ "//i.imgur.com/yXyxbDd.jpg", | ||
"A screen shot of our nonprofit project directory.", | ||
"After you complete all three of these certificates, you'll team up with another camper and use agile software development methodologies to build two real-life projects for nonprofits. You'll also add functionality to two legacy code nonprofit projects. By the time you finish, you'll have a portfolio of real apps that people use every day.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/PDGQ9ZM.jpg", | ||
+ "//i.imgur.com/PDGQ9ZM.jpg", | ||
"An image of campers building projects together in a cafe in Seoul.", | ||
"If you complete all 2,080 hours worth of challenges and projects, you'll earn our Full Stack Development Certification. We'll offer you free coding interview practice. We even offer a job board where employers specifically hire campers who've earned Free Code Camp certifications.", | ||
"" | ||
@@ -85,211 +85,267 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Aprende como funciona Free Code Camp", | ||
+ "titleFr": "Apprenez comment FreeCodeCamp fonctionne", | ||
+ "descriptionFr": [ | ||
+ [ | ||
+ "//i.imgur.com/6ibIavQ.jpg", | ||
+ "Une idée des avantages de Free Code Camp: restez connecté , apprenez le JavaScript , construisez votre portfolio , Aidez les organismes sans but lucratif", | ||
+ "Bienvenue sur Free Code Camp . Nous sommes une communauté opensource de gens passionnés qui apprend à coder et aide les organisations à but non lucratif.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/Elb3dfj.jpg", | ||
+ "Une capture d'écran de certains de nos développeurs réunis à Toronto.", | ||
+ "<bold>Apprendre à code est dur.</bold> Pour réussir, vous aurez besoin de beaucoup de pratique et de soutien. Voilà pourquoi nous avons créé un programme rigoureux et une communauté de soutien.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/D7Y5luw.jpg", | ||
+ "Un graphique de la vitesse de croissance de l'emploi face à la croissance du nombre de diplômés en études d'informatique . Il y a 1,4 million d'emplois et seulement 400 000 personnes pour les occuper.", | ||
+ "Il y a des milliers d'emplois de développeurs actuellement vacants, et la demande pour les développeurs augmente chaque année.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/WD3STY6.jpg", | ||
+ "Photos de trois développeurs qui ont obtenu un emploi après l'apprentissage de code au Free Code Camp.", | ||
+ "Free Code Camp est une voie éprouvée pour obtenir votre premier job de développeur. En fait , personne n'a jamais accompli l'ensemble de notre programme , car nos développeurs ont trouvé un emploi avant qu'ils ne soient en mesure de le finir notre parcours.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/vLNso6h.jpg", | ||
+ "Une illustration montrant que vous allez apprendre HTML5 , CSS3 , JavaScript , bases de données , Git , Node.js , React et D3.", | ||
+ "Nous avons des centaines de défis de codage optionnels qui vous apprendront les fondamentaux du développement web comme HTML5 , Node.js et les bases de données.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/UVB9hxp.jpg", | ||
+ "Une image d'un développeur dans un café projets sur Camp Code Free.", | ||
+ "Nous croyons que les êtres humains apprennent mieux par la pratique . De sorte que vous passerez la plupart de votre temps à construire efficacement des projets. Nous allons vous donner une liste de spécifications ( des témoignages d'utilisateurs agiles ) , et vous allez comprendre comment construire des applications qui répondent à ces spécifications.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/pbW7K5S.jpg", | ||
+ "Une image pour montrer notre front-end, back end, et data visualisation certificat ( 400 heures chacun) , nos projets à but non lucratif (800 heures) , et l'interview de préparation ( 80 heures ) pour un total de 2080 heures d'expérience de codage.", | ||
+ "Notre programme est divisé en 4 certifications . Ces certifications sont standardisés , et immédiatement vérifiable par vos clients indépendants et les futurs employeurs . Comme tout le reste au Code Camp gratuit, ces certifications sont gratuits. Nous vous recommandons de les faire dans l'ordre, mais vous êtes libre d'en sauter . Les trois premièrs certifications prennent 400 heures chacune , et la certification finale prend 800 heures , et implique la construction de projets concrets pour les organisations caritatives.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/k8btNUB.jpg", | ||
+ "Une capture d'écran de notre certificat développeur Front-End", | ||
+ "Pour réussir notre certificat Front-End vérifié, vous allez construire 10 projets utilisant HTML , CSS , jQuery et JavaScript.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/Et3iD74.jpg", | ||
+ "Une capture d'écran de notre certificat de visualisation de données", | ||
+ "Pour gagner notre certification de visualisation de données , vous allez construire 10 projets utilisant Réagir, Sass et D3.js.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/8v3t84p.jpg", | ||
+ "Une capture d'écran de notre certificat Back-End", | ||
+ "Pour gagner notre certification de développeur Back-End, vous allez construire 10 projets utilisant Node.js , Express, et MongoDB . Vous allez utiliser Git et Heroku de les déployer dans le cloud.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/yXyxbDd.jpg", | ||
+ "Une capture d'écran de notre répertoire de projet à but non lucratif.", | ||
+ "Après avoir effectué tous les trois de ces certificats , vous faites équipe avec un autre développeur et utilisez agiles méthodologies de développement de logiciel pour construire deux projets de la vie réelle pour les organismes sans but lucratif . Vous aurez également d'ajouter des fonctionnalités à deux projets à but non lucratif de code hérité. Au moment où vous avez terminé, vous aurez un portefeuille de véritables applications que les gens utilisent tous les jours.", | ||
+ "" | ||
+ ], | ||
+ [ | ||
+ "//i.imgur.com/PDGQ9ZM.jpg", | ||
+ "Une image de campeurs construction des projets ensemble dans un café de Séoul ", | ||
+ "Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.", | ||
+ "" | ||
+ ] | ||
+ ], | ||
+ "titleEs": "Aprende como funciona Free Code Camp", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/6ibIavQ.jpg", | ||
+ "//i.imgur.com/6ibIavQ.jpg", | ||
"Una imagen de los 4 beneficios de Free Code Camp: Conéctate, Aprende JavaScript, Construye tu Portafolio, Ayuda organizaciones sin ánimo de lucro", | ||
"Bienvenido a Free Code Camp. Somos una comunidad de código abierto formada por personas ocupadas quienes aprenden a programar y ayudan a organizaciones sin ánimo de lucro.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Elb3dfj.jpg", | ||
+ "//i.imgur.com/Elb3dfj.jpg", | ||
"Una imagen de algunos de nuestros campistas programando juntos en Toronto.", | ||
"<bold>Aprender a programar es difícil.</bold> Para tener éxito, necesitarás mucha práctica y apoyo. Por eso es que hemos creado un riguroso currículo y una comunidad de apoyo.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/D7Y5luw.jpg", | ||
+ "//i.imgur.com/D7Y5luw.jpg", | ||
"Una gráfica del crecimiento de trabajos en comparación con los graduados en un pregrado de ciencias de la computación. Hay 1.4 millones de empleos y solo 400 mil personas para ocuparlos.", | ||
"Actualmente, hay miles de trabajos de programación sin ocupar, y la demanda de programadores crece cada año.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WD3STY6.jpg", | ||
+ "//i.imgur.com/WD3STY6.jpg", | ||
"Fotos de tres campistas quienes obtuvieron trabajos después de aprender a programar en Free Code Camp.", | ||
"Free Code Camp es un camino probado para que obtengas tu primer trabajo de programación. De hecho, nadie actualmente ha completado nuestro programa entero, porque los campistas obtienen trabajos antes de poder hacerlo.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vLNso6h.jpg", | ||
+ "//i.imgur.com/vLNso6h.jpg", | ||
"Una ilustración mostrando que aprenderás HTML5, CSS3, JavaScript, Bases de Datos, Git, Node.js, react y D3.", | ||
"Tenemos cientos de desafíos de programación opcionales que te enseñarán las tecnologías fundamentales para el desarrollo web como HTML5, Node.js y bases de datos.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/UVB9hxp.jpg", | ||
+ "//i.imgur.com/UVB9hxp.jpg", | ||
"Una foto de un campista en un café construyendo proyectos con Free Code Camp.", | ||
"Creemos que los humanos aprender mejor haciendo. Así que en realidad emplearás la mayoría de tu tiempo construyendo proyectos. Te daremos una lista de especificaciones (historias de usuario ágiles), y te las ingeniarás para construir aplicaciones que cumplan esas especificaciones.", | ||
"" | ||
], | ||
- [ | ||
- "http://i.imgur.com/pbW7K5S.jpgk", | ||
+ [ | ||
+ "//i.imgur.com/pbW7K5S.jpgk", | ||
"Una imagen de los tiempos de nuestras certificaciones para desarrollo de interfaces, desarrollo al lado del servidor y visualización de datos (400 horas cada uno), para nuestros proyectos sin ánimo de lucro (800 horas) y preparación para entrevistas (80 horas) que dan un total de 2,080 horas e experiencia programando.", | ||
"Nuestro currículo se divide en 4 certificaciones. Estas certificaciones están estandarizadas, y son verificables al instante por sus clientes como trabajador independiente y por sus futuros empleadores. Tal como todo lo demás en Free Code Camp, estas certificaciones son gratuitas. Recomendamos hacerlas en orden, pero usted es libre de saltar de una a otra. Las primeras tres certificaciones requieren 400 horas cada una, y la certificación final requiere 800 horas, e involucra construir proyectos de la vida real para organizaciones sin ánimo de lucro.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/k8btNUB.jpg", | ||
+ "//i.imgur.com/k8btNUB.jpg", | ||
"Una imagen de nuestro Certificado de Desarrollo de Interfaces", | ||
"Para obtener nuestra certificación verificada de Desarrollo de Interfaces, construirás 10 proyectos usando HTML, CSS, jQuery y JavaScript.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Et3iD74.jpg", | ||
+ "//i.imgur.com/Et3iD74.jpg", | ||
"Una imagen de nuestro Certificado de Visualización de Datos", | ||
"Para obtener nuestra certificación en Visualización de Datos, construirás 10 proyectos usando React, Sass y D3.js.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/8v3t84p.jpg", | ||
+ "//i.imgur.com/8v3t84p.jpg", | ||
"Una imagen de nuestro Certificado de Desarrollo al Lado del Servidor", | ||
"Para obtener nuestro Certificado de Desarrollo al Lado del Servidor, construirás 10 proyectos empleando Node.js, Express y MongoDB. Usarás Git y Heroku para desplegarlos en la nube.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/yXyxbDd.jpg", | ||
+ "//i.imgur.com/yXyxbDd.jpg", | ||
"Una imagen de nuestro directorio de organizaciones sin ánimo de lucro.", | ||
"Después de completar todos los tres certificados, harás equipo con otro campista y usarás metodologías de desarrollo ágil para construir dos proyectos de la vida real para organizaciones sin ánimo de lucro. También añadirás funcionalidad a dos proyectos de fuentes legadas de organizaciones sin ánimo de lucro. Cuando termines esto, tendrás un portafolio de aplicaciones reales que la gente usa a diario. ", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/PDGQ9ZM.jpg", | ||
+ "//i.imgur.com/PDGQ9ZM.jpg", | ||
"Una imagen de nuestros campistas construyendo proyectos juntos en un café en Seoul.", | ||
"Si completas todas las 2,080 horas de desafíos y proyectos, obtendrás un Certificado de Desarrollo de Pila Completa. Te ofreceremos gratuitamente una práctica en entrevistas para desarrolladores. Incluso ofrecemos un directorio de trabajos donde los empleadores contratan específicamente campistas que han recibido certificaciones de Free Code Camp.", | ||
"" | ||
] | ||
- ], | ||
- "nameFr": "Apprenez comment FreeCodeCamp fonctionne", | ||
- "descriptionFr": [ | ||
- [ | ||
- "http://i.imgur.com/6ibIavQ.jpg", | ||
- "Une idée des avantages de Free Code Camp: restez connecté , apprenez le JavaScript , construisez votre portfolio , Aidez les organismes sans but lucratif", | ||
- "Bienvenue sur Free Code Camp . Nous sommes une communauté opensource de gens passionnés qui apprend à coder et aide les organisations à but non lucratif.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/Elb3dfj.jpg", | ||
- "Une capture d'écran de certains de nos développeurs réunis à Toronto.", | ||
- "<bold>Apprendre à code est dur.</bold> Pour réussir, vous aurez besoin de beaucoup de pratique et de soutien. Voilà pourquoi nous avons créé un programme rigoureux et une communauté de soutien.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/D7Y5luw.jpg", | ||
- "Un graphique de la vitesse de croissance de l'emploi face à la croissance du nombre de diplômés en études d'informatique . Il y a 1,4 million d'emplois et seulement 400 000 personnes pour les occuper.", | ||
- "Il y a des milliers d'emplois de développeurs actuellement vacants, et la demande pour les développeurs augmente chaque année.", | ||
- "" | ||
- ], | ||
+ ] | ||
+ }, | ||
+ { | ||
+ "id": "560add37cb82ac38a17513bf", | ||
+ "descriptionJa": [ | ||
[ | ||
- "http://i.imgur.com/WD3STY6.jpg", | ||
- "Photos de trois développeurs qui ont obtenu un emploi après l'apprentissage de code au Free Code Camp.", | ||
- "Free Code Camp est une voie éprouvée pour obtenir votre premier job de développeur. En fait , personne n'a jamais accompli l'ensemble de notre programme , car nos développeurs ont trouvé un emploi avant qu'ils ne soient en mesure de le finir notre parcours.", | ||
+ "//i.imgur.com/EAR7Lvh.jpg", | ||
+ "Gitterチャットルームの一場面です。", | ||
+ "コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vLNso6h.jpg", | ||
- "Une illustration montrant que vous allez apprendre HTML5 , CSS3 , JavaScript , bases de données , Git , Node.js , React et D3.", | ||
- "Nous avons des centaines de défis de codage optionnels qui vous apprendront les fondamentaux du développement web comme HTML5 , Node.js et les bases de données.", | ||
- "" | ||
+ "//i.imgur.com/n6GeSEm.gif", | ||
+ "この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。", | ||
+ "\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意: もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>", | ||
+ "https://github.com/join" | ||
], | ||
[ | ||
- "http://i.imgur.com/UVB9hxp.jpg", | ||
- "Une image d'un développeur dans un café projets sur Camp Code Free.", | ||
- "Nous croyons que les êtres humains apprennent mieux par la pratique . De sorte que vous passerez la plupart de votre temps à construire efficacement des projets. Nous allons vous donner une liste de spécifications ( des témoignages d'utilisateurs agiles ) , et vous allez comprendre comment construire des applications qui répondent à ces spécifications.", | ||
- "" | ||
+ "//i.imgur.com/hFqAEr8.gif", | ||
+ "この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。", | ||
+ "GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます", | ||
+ "https://github.com/settings/profile" | ||
], | ||
[ | ||
- "http://i.imgur.com/pbW7K5S.jpg", | ||
- "Une image pour montrer notre front-end, back end, et data visualisation certificat ( 400 heures chacun) , nos projets à but non lucratif (800 heures) , et l'interview de préparation ( 80 heures ) pour un total de 2080 heures d'expérience de codage.", | ||
- "Notre programme est divisé en 4 certifications . Ces certifications sont standardisés , et immédiatement vérifiable par vos clients indépendants et les futurs employeurs . Comme tout le reste au Code Camp gratuit, ces certifications sont gratuits. Nous vous recommandons de les faire dans l'ordre, mais vous êtes libre d'en sauter . Les trois premièrs certifications prennent 400 heures chacune , et la certification finale prend 800 heures , et implique la construction de projets concrets pour les organisations caritatives.", | ||
- "" | ||
+ "//i.imgur.com/pYk0wOk.gif", | ||
+ "この gif は GitHub のレポジトリへのスターをつける方法です。", | ||
+ "オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。", | ||
+ "https://github.com/freecodecamp/freecodecamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/k8btNUB.jpg", | ||
- "Une capture d'écran de notre certificat développeur Front-End", | ||
- "Pour réussir notre certificat Front-End vérifié, vous allez construire 10 projets utilisant HTML , CSS , jQuery et JavaScript.", | ||
- "" | ||
+ "//i.imgur.com/OmRmLB4.gif", | ||
+ "この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。", | ||
+ "あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。", | ||
+ "https://gitter.im/FreeCodeCamp/FreeCodeCamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/Et3iD74.jpg", | ||
- "Une capture d'écran de notre certificat de visualisation de données", | ||
- "Pour gagner notre certification de visualisation de données , vous allez construire 10 projets utilisant Réagir, Sass et D3.js.", | ||
+ "//i.imgur.com/Ecs5XAd.gif", | ||
+ "この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。", | ||
+ "私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/8v3t84p.jpg", | ||
- "Une capture d'écran de notre certificat Back-End", | ||
- "Pour gagner notre certification de développeur Back-End, vous allez construire 10 projets utilisant Node.js , Express, et MongoDB . Vous allez utiliser Git et Heroku de les déployer dans le cloud.", | ||
+ "//i.imgur.com/T0bGJPe.gif", | ||
+ "この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。", | ||
+ "私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/yXyxbDd.jpg", | ||
- "Une capture d'écran de notre répertoire de projet à but non lucratif.", | ||
- "Après avoir effectué tous les trois de ces certificats , vous faites équipe avec un autre développeur et utilisez agiles méthodologies de développement de logiciel pour construire deux projets de la vie réelle pour les organismes sans but lucratif . Vous aurez également d'ajouter des fonctionnalités à deux projets à but non lucratif de code hérité. Au moment où vous avez terminé, vous aurez un portefeuille de véritables applications que les gens utilisent tous les jours.", | ||
+ "//i.imgur.com/vDTMJSh.gif", | ||
+ "この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。", | ||
+ "私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/PDGQ9ZM.jpg", | ||
- "Une image de campeurs construction des projets ensemble dans un café de Séoul ", | ||
- "Si vous finissez les 2.080 heures de défis et projets, vous gagnerez notre certification complète Stack développement . Nous vous offrons gratuitement la pratique d'entrevue de codage . Nous offrons même un accès à notre si d'emploi où les employeurs embauchent spécifiquement les développeurs qui ont obtenu des certificats de Free Code Camp.", | ||
- "" | ||
+ "//i.imgur.com/WvQvNGN.gif", | ||
+ "この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。", | ||
+ "チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。", | ||
+ "https://gitter.im/apps" | ||
] | ||
- ] | ||
- }, | ||
- { | ||
- "id": "560add37cb82ac38a17513bf", | ||
+ ], | ||
"title": "Create a GitHub Account and Join our Chat Rooms", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/EAR7Lvh.jpg", | ||
+ "//i.imgur.com/EAR7Lvh.jpg", | ||
"A screenshot of our one of our Gitter chat rooms.", | ||
"Before we start coding, let's join Free Code Camp's chat rooms. You can come here any time of day to hang out, ask questions, or find another camper to pair program with. First you'll need a GitHub account.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/n6GeSEm.gif", | ||
+ "//i.imgur.com/n6GeSEm.gif", | ||
"A gif showing you to click the link below to go to GitHub. Fill in the necessary fields and click submit. Then check your email inbox for an email from GitHub so you can verify your account.", | ||
"Click the \"Open link in new tab\" button below to open up GitHub. Create a GitHub account by filling in the form. Be sure to use your real email address - GitHub will keep this private. Then check your email inbox for an email from GitHub. Open it and click the \"verify email address\" button inside it. <br><div class=\"small\">Note: If you already have a GitHub account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>", | ||
"https://github.com/join" | ||
], | ||
[ | ||
- "http://i.imgur.com/hFqAEr8.gif", | ||
+ "//i.imgur.com/hFqAEr8.gif", | ||
"A gif showing you how to click the profile image in the upper right hand corner of GitHub. Upload a photo of yourself or you will continue to use the automatically generated pixel art. Then fill in the remaining form fields and click submit.", | ||
"Click the pixel art in the upper right hand corner of GitHub, then choose settings. Upload a picture of yourself. A picture of your face works best. This is how your fellow campers will see you in our chat rooms, so look your best. You can add your city and your name if you want.", | ||
"https://github.com/settings/profile" | ||
], | ||
[ | ||
- "http://i.imgur.com/pYk0wOk.gif", | ||
+ "//i.imgur.com/pYk0wOk.gif", | ||
"A gif showing how you can star a GitHub repo.", | ||
"Open Free Code Camp's open-source repository. This is where our volunteer team collaborates on building Free Code Camp. You can \"star\" our repository. \"Starring\" is the GitHub equivalent of \"liking\" something.", | ||
"https://github.com/freecodecamp/freecodecamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/OmRmLB4.gif", | ||
+ "//i.imgur.com/OmRmLB4.gif", | ||
"A gif showing you how to click the link below to go to our chat room and click the \"sign in with GitHub\" button. Then you can click into the text input field and type a message to your fellow campers.", | ||
"Now that you have a GitHub account, you can join our main chat room by logging in with GitHub. Introduce yourself by saying \"Hello world!\" Tell your fellow campers how you found Free Code Camp. Also tell us why you want to learn to code.", | ||
"https://gitter.im/FreeCodeCamp/FreeCodeCamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/Ecs5XAd.gif", | ||
+ "//i.imgur.com/Ecs5XAd.gif", | ||
"A gif showing you how you can click the settings button in the upper right hand corner and modify your notification settings.", | ||
"Our chat rooms are extremely active. You should change your settings so you're only notified if someone mentions you.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/T0bGJPe.gif", | ||
+ "//i.imgur.com/T0bGJPe.gif", | ||
"A gif showing how you can click on a user profile image to initiate a private message with that user.", | ||
"Please note that all of our chat rooms are visible to the public. If you need to share sensitive information, such as an email address or phone number, do it in a private message.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vDTMJSh.gif", | ||
+ "//i.imgur.com/vDTMJSh.gif", | ||
"A gif showing that you can tab back and forth between challenges and our chat rooms.", | ||
"Keep our chat room open while you work through our challenges. That way, you can ask for help if you get stuck. You can also socialize with other campers when you feel like taking a break.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WvQvNGN.gif", | ||
+ "//i.imgur.com/WvQvNGN.gif", | ||
"A gif showing how you can click the link below to download a native chat room app for your computer.", | ||
"You can also download the chat room app to your computer or phone.", | ||
"https://gitter.im/apps" | ||
@@ -298,186 +354,130 @@ | ||
"challengeSeed": [], | ||
"tests": [], | ||
"type": "Waypoint", | ||
- "challengeType": 7, | ||
- "nameEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat", | ||
- "descriptionEs": [ | ||
- [ | ||
- "http://i.imgur.com/EAR7Lvh.jpg", | ||
- "Una imagen de una de nuestras salas de chat en Gitter.", | ||
- "Ahora únete a las salas de chat de Free Code Camp. Puedes venir aquí en cualquier momento para charlar, hacer preguntas, o encontrar otro campista para programar juntos. Primero necesitarás una cuenta de GitHub.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/n6GeSEm.gif", | ||
- "Una imagen mostrándote como pulsar en el enlace inferior para ir a GitHub, llenar los campos necesarios y enviarlos.", | ||
- "Crea una cuenta en GitHub. Asegúrate de usar tu dirección de correo real - GitHub mantendrá esto en privado.", | ||
- "https://github.com/join" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/hFqAEr8.gif", | ||
- "Un gif mostrándote como pulsar en la imagen de perfil en la esquina superior derecha de GitHub. Sube una foto tuya o continuaras usando la imagen de píxeles generada automáticamente. Entonces llena los campos restantes y haz clic en enviar.", | ||
- "En la esquina superior derecha pulsa sobre la imagen de píxeles, entonces selecciona configuraciones. Sube una imagen tuya. Una foto de tu cara es mejor. Así es como tus compañeros campistas te verán en nuestras salas de chat, así que toma tu mejor ángulo. Puedes añadir tu ciudad y tu nombre si lo deseas.", | ||
- "https://github.com/settings/profile" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/pYk0wOk.gif", | ||
- "Un gif mostrándote como puedes dar una estrella a un repositorio de GitHub.", | ||
- "Ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".", | ||
- "Si quieres, ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".", | ||
- "https://github.com/freecodecamp/freecodecamp" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/OmRmLB4.gif", | ||
- "Un gif mostrándote como pulsar en el enlace inferior para ir a nuestra sala de chat y pulsar en el botón de \"iniciar sesión con GitHub\". Entonces puedes pulsar en el próximo campo de texto y escribir un mensaje a tus compañeros campistas.", | ||
- "Ahora que tienes una cuenta de GitHub, puedes unirte a nuestro chat principal al iniciar sesión con GitHub. Preséntate diciendo \"Hello world!\" Cuéntales a los tus compañeros campistas como encontraste Free Code Camp. Además cuéntanos porque deseas aprender a programar.", | ||
- "https://gitter.im/FreeCodeCamp/FreeCodeCamp" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/Ecs5XAd.gif", | ||
- "Un gif mostrándote como puedes pulsar en el botón de configuraciones en la esquina superior derecha y modificar tus configuraciones de notificaciones.", | ||
- "Nuestras salas de chat son extremadamente activas. Deberías cambiar tus configuraciones para ser notificado únicamente si alguien te menciona.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/T0bGJPe.gif", | ||
- "Un gif mostrándote como puedes pulsar en la imagen de perfil de un usuario para iniciar una conversación privada con ese usuario.", | ||
- "Por favor nota que todas nuestras salas de chat son visibles para el público. Si necesitas compartir información privada, como una dirección de correo o un número de teléfono, hazlo en un mensaje privado.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/vDTMJSh.gif", | ||
- "Un gif mostrándote que puedes cambiar entre desafíos y nuestras salas de chat.", | ||
- "Mantén nuestra sala de chat abierta mientras trabajas en nuestros desafíos. De esta manera, puedes pedir ayuda si quedas atascado. Además puedes socializar con otros campistas cuando quieras tomar un descanso.", | ||
- "" | ||
- ], | ||
- [ | ||
- "http://i.imgur.com/WvQvNGN.gif", | ||
- "Un gif mostrándote como puedes pulsar abajo para descargar una aplicación de chat nativa para tu computadora.", | ||
- "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.", | ||
- "https://gitter.im/apps" | ||
- ] | ||
- ], | ||
- "nameFr": "Créer un compte GitHub et rejoignez nos Salons de chat", | ||
+ "titleFr": "Créer un compte GitHub et rejoignez nos Salons de chat", | ||
"descriptionFr": [ | ||
[ | ||
- "http://i.imgur.com/EAR7Lvh.jpg", | ||
+ "//i.imgur.com/EAR7Lvh.jpg", | ||
"Une capture d'écran de notre l'un de nos Gitter salles de chat.", | ||
"Avant de commencer à coder, nous allons rejoindre les salles de chat de Camp Code Free . Vous pouvez venir ici tout moment de la journée pour se détendre , poser des questions , ou trouver un autre camping de jumeler programme avec. D'abord, vous aurez besoin d'un compte GitHub.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/n6GeSEm.gif", | ||
+ "//i.imgur.com/n6GeSEm.gif", | ||
"Un gif vous montrant à cliquer sur le lien ci-dessous pour aller à GitHub . Remplissez les champs nécessaires et cliquez sur soumettre . Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub sorte que vous pouvez vérifier votre compte.", | ||
"Cliquez sur le \"lien Ouvrir dans une nouvelle touche de tabulation\" ci-dessous pour ouvrir GitHub. Créer un compte GitHub en remplissant le formulaire . Assurez-vous d'utiliser votre adresse email réelle - GitHub gardera cette privé. Ensuite, vérifiez votre boîte de réception pour un courriel de GitHub. Ouvrez-le et cliquez sur \"l'adresse email sur vérifier\" l'intérieur. <br><div class=\"small\">Remarque: Si vous avez déjà un compte GitHub , vous pouvez sauter cette étape en cliquant sur \"Ouvrir le lien dans un nouvel onglet\", fermeture le nouvel onglet qui ouvre, puis en cliquant \"aller à ma prochaine étape\". Nous avons retiré notre bouton de \"l'étape de saut\" , car beaucoup de gens il suffit de cliquer à plusieurs reprises sans faire ces étapes importantes.</div>", | ||
"https://github.com/join" | ||
], | ||
[ | ||
- "http://i.imgur.com/hFqAEr8.gif", | ||
+ "//i.imgur.com/hFqAEr8.gif", | ||
"Un gif vous montrant comment cliquez sur l' image de profil dans le coin supérieur droit de GitHub. Télécharger une photo de vous-même ou vous allez continuer à utiliser l'art de pixel généré automatiquement . Ensuite, remplissez les champs du formulaire restants et cliquez sur soumettre.", | ||
"Cliquez sur le pixel art dans le coin supérieur droit de GitHub , puis choisissez les paramètres . Télécharger une photo de vous-même. Une photo de votre visage qui fonctionne le mieux . Voici comment les autres campeurs vous voir dans nos salles de chat , donc regarder votre meilleur . Vous pouvez ajouter votre ville et votre nom si vous voulez.", | ||
"https://github.com/settings/profile" | ||
], | ||
[ | ||
- "http://i.imgur.com/pYk0wOk.gif", | ||
+ "//i.imgur.com/pYk0wOk.gif", | ||
"Un gif montrant comment vous pouvez activer un repo GitHub.", | ||
"Ouvrez open-source du dépôt central de Camp Code Free . Ceci est où notre équipe de bénévoles collabore à la construction de Camp Code Free. Vous pouvez \"star\" notre référentiel. Mettant en \"vedette\" est la GitHub équivalent de \"goût\" quelque chose.", | ||
"https://github.com/freecodecamp/freecodecamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/OmRmLB4.gif", | ||
+ "//i.imgur.com/OmRmLB4.gif", | ||
"Un gif vous montrant comment Cliquez sur le lien ci-dessous pour accéder à notre salle de chat et cliquez sur \"Se connecter avec\" bouton GitHub. Puis vous pouvez cliquer dans le champ de saisie de texte et saisissez un message à vos amis campeurs.", | ||
"Maintenant que vous avez une GitHub compte, vous pouvez vous joindre à notre principale salle de chat en vous connectant à GitHub. Présentez-vous en disant \"Hello World!\" avertissez votre amis campeurs comment vous avez trouvé Libre Code Camp. Aussi nous dire pourquoi vous voulez apprendre à code.", | ||
"https://gitter.im/FreeCodeCamp/FreeCodeCamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/Ecs5XAd.gif", | ||
+ "//i.imgur.com/Ecs5XAd.gif", | ||
"Un gif vous montrant comment vous pouvez cliquez sur le bouton Réglages dans le coin supérieur droit et modifier vos paramètres de notification.", | ||
"Nos salles de chat sont extrêmement actifs. Vous devez modifier vos paramètres pour vous're notifié que si quelqu'un vous mentionne.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/T0bGJPe.gif", | ||
+ "//i.imgur.com/T0bGJPe.gif", | ||
"Un gif montrant comment vous pouvez cliquer sur une image de profil utilisateur pour lancer un message privé avec cet utilisateur.", | ||
"Veuillez noter que tous nos salons de chat sont visibles pour le public. Si vous avez besoin de partager des informations sensibles, comme un numéro de téléphone ou l'adresse e-mail, faites-le dans un message privé.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vDTMJSh.gif", | ||
+ "//i.imgur.com/vDTMJSh.gif", | ||
"Un gif montrant que vous pouvez Tab et retour entre défis et nos salles de chat.", | ||
"Garder notre salle de discussion ouverte pendant que vous travaillez à travers nos défis. De cette façon, vous pouvez demander de l'aide si vous êtes coincé. Vous pouvez également socialiser avec d'autres campeurs lorsque vous sentez comme prendre une pause.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WvQvNGN.gif", | ||
+ "//i.imgur.com/WvQvNGN.gif", | ||
"Un gif montrant comment vous pouvez cliquer sur le lien ci-dessous pour télécharger un natif salle de chat app pour votre ordinateur.", | ||
"Vous pouvez également télécharger la salle de chat app pour votre ordinateur ou votre téléphone.", | ||
"https://gitter.im/apps" | ||
] | ||
], | ||
- "nameJa": "Githubアカウントを作成し、チャットに参加しましょう", | ||
- "descriptionJa": [ | ||
+ "titleEs": "Crea una Cuenta de GitHub y Únete a nuestras Salas de Chat", | ||
+ "descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/EAR7Lvh.jpg", | ||
- "Gitterチャットルームの一場面です。", | ||
- "コーディングを始める前に、Free Code Camp のチャットルームに参加してください。いつでも、雑談や質問ができたりペアプログラミングをするための仲間を見つけ流ことができます。最初に Github アカウントが必要です。", | ||
+ "//i.imgur.com/EAR7Lvh.jpg", | ||
+ "Una imagen de una de nuestras salas de chat en Gitter.", | ||
+ "Ahora únete a las salas de chat de Free Code Camp. Puedes venir aquí en cualquier momento para charlar, hacer preguntas, o encontrar otro campista para programar juntos. Primero necesitarás una cuenta de GitHub.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/n6GeSEm.gif", | ||
- "この gif は Github を開始するまでの流れを表しています。必要な欄に情報を入れて登録をしてください。そして Github からあなたのメールアドレス宛にメールが届きますのでアカウントを承認してください。", | ||
- "\"Open link in new tab\"をクリックして Github を開いてください。 必要な欄に情報を入力して GitHub アカウントを作ってください。実際に使われている email アドレスかを確認してください( GitHub にはこの情報が保存されます )。メールアドレス宛に GitHub からメールが来たことを確認してください。 メールにある\"verify email address\"をクリックして開いてください。<br><div class=\"small\">注意: もしすでに GitHub アカウントを持っていたら、あなたは \"Open link in new tab\" をクリックすることでこのステップを飛ばすことができます、新しく開かれたタブを閉じて \"go to my next step\" をクリックしてください。私たちはこの大事なステップが飛ばされてしまうのを防ぐために \"このステップを飛ばす\" ボタンは削除してあります。</div>", | ||
+ "//i.imgur.com/n6GeSEm.gif", | ||
+ "Una imagen mostrándote como pulsar en el enlace inferior para ir a GitHub, llenar los campos necesarios y enviarlos.", | ||
+ "Crea una cuenta en GitHub. Asegúrate de usar tu dirección de correo real - GitHub mantendrá esto en privado.", | ||
"https://github.com/join" | ||
], | ||
[ | ||
- "http://i.imgur.com/hFqAEr8.gif", | ||
- "この gif は Github の右上にあるプロフィール画像をクリックする方法です。あなたの写真をアップロードするか、自動で生成されるピクセルアートを利用してください。そして、残りの欄に情報を入力し submit ボタンを押してください。", | ||
- "GitHub の右上に表示されているピクセルアートをクリックしてください、そして settings を選んでください。あなたの画像をアップロードしてください。画像はあなたの顔が写っていると良いです。他のキャンパーズの仲間たちがチャットルームであなたを見かけるようになります。住んでいる場所や名前を登録することもできます", | ||
+ "//i.imgur.com/hFqAEr8.gif", | ||
+ "Un gif mostrándote como pulsar en la imagen de perfil en la esquina superior derecha de GitHub. Sube una foto tuya o continuaras usando la imagen de píxeles generada automáticamente. Entonces llena los campos restantes y haz clic en enviar.", | ||
+ "En la esquina superior derecha pulsa sobre la imagen de píxeles, entonces selecciona configuraciones. Sube una imagen tuya. Una foto de tu cara es mejor. Así es como tus compañeros campistas te verán en nuestras salas de chat, así que toma tu mejor ángulo. Puedes añadir tu ciudad y tu nombre si lo deseas.", | ||
"https://github.com/settings/profile" | ||
], | ||
[ | ||
- "http://i.imgur.com/pYk0wOk.gif", | ||
- "この gif は GitHub のレポジトリへのスターをつける方法です。", | ||
- "オープンソースの Free Code Camp のレポジトリを開いてください。これは私たちボランティアチームの協力者が Free Code Camp で作っているものです。あなたは \"star\" を私たちのリポジトリに付けることができます。\"star を付けること\"は GitHub での \"いいね\" と一緒です。", | ||
+ "//i.imgur.com/pYk0wOk.gif", | ||
+ "Un gif mostrándote como puedes dar una estrella a un repositorio de GitHub.", | ||
+ "Ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".", | ||
+ "Si quieres, ve al repositorio de código libre de Free Code Camp y dale una \"estrella\". Las \"estrellas\" son el equivalente en GitHub de los \"me gusta\".", | ||
"https://github.com/freecodecamp/freecodecamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/OmRmLB4.gif", | ||
- "この git は私たちのチャットルームへのリンクをクリックして、\"sign in with GitHub\" ボタンをクリックしています。そして、テキストを入力してキャンパーズの仲間へメッセージを送る方法を表しています。", | ||
- "あなたは Github のアカウントを持っているので、私たちのチャットルームへ GitHub を利用してログインできます。\"Hellow world!\" と言って自己紹介をし、あなたがどうやって Free Code Camp を見つけたかや何故プログラミングを学びたいのかを私たちに話してください。", | ||
+ "//i.imgur.com/OmRmLB4.gif", | ||
+ "Un gif mostrándote como pulsar en el enlace inferior para ir a nuestra sala de chat y pulsar en el botón de \"iniciar sesión con GitHub\". Entonces puedes pulsar en el próximo campo de texto y escribir un mensaje a tus compañeros campistas.", | ||
+ "Ahora que tienes una cuenta de GitHub, puedes unirte a nuestro chat principal al iniciar sesión con GitHub. Preséntate diciendo \"Hello world!\" Cuéntales a los tus compañeros campistas como encontraste Free Code Camp. Además cuéntanos porque deseas aprender a programar.", | ||
"https://gitter.im/FreeCodeCamp/FreeCodeCamp" | ||
], | ||
[ | ||
- "http://i.imgur.com/Ecs5XAd.gif", | ||
- "この gif は右上の settings ボタンを押すことで、通知の設定を変更する方法を表しています。", | ||
- "私たちのチャットルームはとても活発です。あなたは誰かがあなたに対してメンションを送った時にだけ通知してもらうように設定を変更した方が良いでしょう。", | ||
+ "//i.imgur.com/Ecs5XAd.gif", | ||
+ "Un gif mostrándote como puedes pulsar en el botón de configuraciones en la esquina superior derecha y modificar tus configuraciones de notificaciones.", | ||
+ "Nuestras salas de chat son extremadamente activas. Deberías cambiar tus configuraciones para ser notificado únicamente si alguien te menciona.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/T0bGJPe.gif", | ||
- "この gif はどうやって該当するユーザに向けて個人的なメーッセージを送れるようにするかを表しています。", | ||
- "私たちのチャットルームは全て公開されているので、もしあなたが個人的な情報(メールアドレスや電話番号)を共有したい場合には、プライベートメッセージを利用してください。", | ||
+ "//i.imgur.com/T0bGJPe.gif", | ||
+ "Un gif mostrándote como puedes pulsar en la imagen de perfil de un usuario para iniciar una conversación privada con ese usuario.", | ||
+ "Por favor nota que todas nuestras salas de chat son visibles para el público. Si necesitas compartir información privada, como una dirección de correo o un número de teléfono, hazlo en un mensaje privado.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/vDTMJSh.gif", | ||
- "この gif はチャレンジとチャットルームへの行き来がタブを戻すことでできることを表しています。", | ||
- "私たちのチャレンジを通して作業をしている間はチャットルームを開いておくと良いでしょう。そうすることで、必要な時に助けを求めることができます。あなたは休憩をしているかのように他のキャンパーズと関わりを持てるでしょう。", | ||
+ "//i.imgur.com/vDTMJSh.gif", | ||
+ "Un gif mostrándote que puedes cambiar entre desafíos y nuestras salas de chat.", | ||
+ "Mantén nuestra sala de chat abierta mientras trabajas en nuestros desafíos. De esta manera, puedes pedir ayuda si quedas atascado. Además puedes socializar con otros campistas cuando quieras tomar un descanso.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WvQvNGN.gif", | ||
- "この gif は、チャットルームアプリをあなたのコンピュータに直接インストールするためにダウンロードする方法を表しています。", | ||
- "チャットルームのアプリをスマホや自分のパソコンにダウンロードして使うことができます。", | ||
+ "//i.imgur.com/WvQvNGN.gif", | ||
+ "Un gif mostrándote como puedes pulsar abajo para descargar una aplicación de chat nativa para tu computadora.", | ||
+ "También puedes descargar la aplicación de chat para tu computadora o teléfono móvil.", | ||
"https://gitter.im/apps" | ||
] | ||
- ] | ||
+ ], | ||
+ "titleJa": "Githubアカウントを作成し、チャットに参加しましょう", | ||
+ "challengeType": 7 | ||
}, | ||
{ | ||
"id": "560add56cb82ac38a17513c0", | ||
"title": "Configure your Code Portfolio", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/tP2ccTE.gif", | ||
+ "//i.imgur.com/tP2ccTE.gif", | ||
"A gif showing how you can click your profile image in your upper right hand corner to your code portfolio and connect GitHub.", | ||
"Check out your code portfolio. Click your picture in your upper right hand corner. To activate your code portfolio, you'll need to link your GitHub account with Free Code Camp. Your code portfolio shows your progress and how many Brownie Points you have. You can get Brownie Points by completing challenges and by helping other campers in our chat rooms. If you get Brownie Points on several days in a row, you'll get a streak.", | ||
"" | ||
@@ -487,10 +487,10 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Configura tu portafolio de código", | ||
+ "titleEs": "Configura tu portafolio de código", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/tP2ccTE.gif", | ||
+ "//i.imgur.com/tP2ccTE.gif", | ||
"Un gif mostrándote como puedes pulsar en tu imagen de perfil en la esquina superior derecha conectar tu portafolio y GitHub.", | ||
"Dale un vistazo de tu portafolio de código. Pulsa en tu imagen en la esquina superior derecha. Para activar tu portafolio de código, necesitaras conectar tu cuenta de GitHub con Free Code Camp. Tu portafolio de código muestra tu progreso y cuantos Puntos Cafés tienes. Puedes obtener Puntos Cafés completando desafíos y ayudando a otros campistas en nuestras salas de chat. Si obtienes Puntos Cafés varios días consecutivos, obtendrás una racha.", | ||
"" | ||
@@ -502,13 +502,13 @@ | ||
"title": "Join a Campsite in Your City", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/XugIMb4.jpg", | ||
+ "//i.imgur.com/XugIMb4.jpg", | ||
"A picture of some of our campers meeting in a local cafe.", | ||
"Our Campsites are Facebook groups that help you meet other campers in your city. You can use these groups to plan and attend casual \"coffee-and-code\" events, where you meet other campers at a café and code together.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/fTFMjwf.gif", | ||
+ "//i.imgur.com/fTFMjwf.gif", | ||
"A gif showing how you can click the link below, find your city on the list of Campsites, then click on the Facebook link for your city and join your city's Facebook group.", | ||
"Find your city on this list and click it. This will take you to your city's Campsite's Facebook group. Click the \"Join group\" button to apply to join your city's Facebook group. Someone from the campsite should approve you shortly. If your city isn't on this list, scroll to the bottom of the wiki article for instructions for how you can create your city's Campsite.", | ||
"https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites" | ||
@@ -518,29 +518,29 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Únete a un Campamento en Tu Ciudad", | ||
+ "titleFr": "Configurer votre code portefeuille", | ||
+ "descriptionFr": [ | ||
+ [ | ||
+ "//i.imgur.com/tP2ccTE.gif", | ||
+ "Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.", | ||
+ "Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.", | ||
+ "" | ||
+ ] | ||
+ ], | ||
+ "titleEs": "Únete a un Campamento en Tu Ciudad", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/NAOFJWN.jpg", | ||
+ "//i.imgur.com/NAOFJWN.jpg", | ||
"Una imagen de algunos de nuestros campistas compartiendo en un café local. 3 hombres y 3 mujeres están sentados alrededor de una mesa con portátiles afuera, y están sonriendo y programando.", | ||
"Nuestros Campamentos te ayudan a programar con otros campistas en tu ciudad. Puedes coordinar grupos de estudio o atender eventos de programación locales juntos.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/fTFMjwf.gif", | ||
+ "//i.imgur.com/fTFMjwf.gif", | ||
"Un gif mostrándote como puedes pulsar en el enlace inferior, encontrar tu ciudad en la lista de Campamentos, entonces haz clic en el enlace de Facebook para tu ciudad y unirte al grupo de Facebook de tu ciudad.", | ||
"Encuentra tu ciudad en esta lista y haz clic en esta. Esto te llevara al grupo de Facebook del Campamento de tu ciudad. Da clic en el botón de \"Unirse al grupo\" para unirte a el grupo. Alguien del mismo campamento debería aprobarte en breve. Si tu ciudad no esta en esta lista, ve al final del articulo de la wiki para ver instrucciones de como crear un campamento para tu ciudad.", | ||
"https://github.com/FreeCodeCamp/freecodecamp/wiki/List-of-Free-Code-Camp-city-based-Campsites" | ||
] | ||
- ], | ||
- "nameFr": "Configurer votre code portefeuille", | ||
- "descriptionFr": [ | ||
- [ | ||
- "http://i.imgur.com/tP2ccTE.gif", | ||
- "Un gif montrant comment vous pouvez cliquez sur l'image de votre profil dans votre coin supérieur droit à votre code portefeuille et connectez GitHub.", | ||
- "Vérifiez votre code portefeuille. Cliquez sur votre photo dans votre coin supérieur droit. Pour activer votre code portefeuille, vous'll nécessité de lier votre compte avec code sans GitHub Camp. Votre code portefeuille affiche votre progression et combien de bons points vous avez. Vous pouvez obtenir de bons points par remplir les défis et en aidant d'autres campeurs dans nos salles de chat. Si vous obtenez Brownie Points sur plusieurs jours d'affilée, vous'll obtenez une rayure.", | ||
- "" | ||
- ] | ||
] | ||
}, | ||
{ | ||
@@ -548,49 +548,49 @@ | ||
"title": "Learn What to Do If You Get Stuck", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/lzKvwU2.jpg", | ||
+ "//i.imgur.com/lzKvwU2.jpg", | ||
"The text \"Coding is hard.\"", | ||
"Coding is hard. You will get stuck. Even experienced coders get stuck. The key is knowing how to get unstuck.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/sfsidp6.jpg", | ||
+ "//i.imgur.com/sfsidp6.jpg", | ||
"The text \"It takes time to get good at coding.\"", | ||
"It takes time to get good at coding. You wouldn't expect to beat a chess master after playing for 3 months. Don't expect to build the next Facebook after coding for 3 months.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EoTfOyC.jpg", | ||
+ "//i.imgur.com/EoTfOyC.jpg", | ||
"An image of some of our campers coding together in Montreal.", | ||
"Keep practicing coding every day and hanging out with other people who code, and you will become a job-ready coder.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EWWZBag.jpg", | ||
+ "//i.imgur.com/EWWZBag.jpg", | ||
"An image with the text \"1. Read the error 2. Search Google 3. Ask for help.", | ||
"Any time you get stuck or don't know what to do next: Read-Search-Ask.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/99BfAcK.jpg", | ||
+ "//i.imgur.com/99BfAcK.jpg", | ||
"An image showing jQuery documentation", | ||
"First, read the documentation or error message. A key skill that good coders have is the ability to interpret and then follow instructions.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/GxvrsFb.gif", | ||
+ "//i.imgur.com/GxvrsFb.gif", | ||
"A gif showing you how to do an advanced Google search. First, we enter the query \"jquery doesn't run when my page loads\". Then we click search tools button and change the \"Any time\" select box to \"within the last year\". Then we click on a result and read through the article and find our answer.", | ||
"If that didn't help, search Google. Good Google queries take a lot of practice. When you search Google, you usually want to include the language or framework you're using. You also want to limit the results to a recent period.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/LZYU7p2.gif", | ||
+ "//i.imgur.com/LZYU7p2.gif", | ||
"A gif showing us following the link below to go to the help chat room and ask \"jquery doesn't run when my page loads\".", | ||
"If that didn't help, ask your friends. If you have trouble, you can ask your fellow campers in our help chat room.", | ||
"https://gitter.im/FreeCodeCamp/Help" | ||
], | ||
[ | ||
- "http://i.imgur.com/ZRgXraT.gif", | ||
+ "//i.imgur.com/ZRgXraT.gif", | ||
"A gif showing us scrolling through our challenge map.", | ||
"Now you're ready to start coding. The \"Map\" button in your upper right hand corner will show you our challenge map. We recommend that you complete these from top to bottom, at a sustainable pace. Our open source community is constantly improving our challenges, so don't be surprised if they change or move around. Don't worry about going back - just keep moving forward. You can always go to your most recent challenge by clicking the \"Learn\" button.", | ||
"" | ||
@@ -600,105 +600,105 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Aprende que hacer si te quedas atascado", | ||
- "descriptionEs": [ | ||
+ "titleFr": "Apprenez quoi faire quand vous êtes bloqué ?", | ||
+ "descriptionFr": [ | ||
[ | ||
- "http://i.imgur.com/lzKvwU2.jpg", | ||
- "El texto \"Programar es difícil.\"", | ||
- "Programar es difícil. Quedarás atascado. Incluso programadores experimentados quedan atascados. La clave es saber como desatascarse.", | ||
+ "//i.imgur.com/lzKvwU2.jpg", | ||
+ "Le texte \"Coder est difficile.\"", | ||
+ "Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/sfsidp6.jpg", | ||
- "El texto \"Volverse bueno programando requiere tiempo.\"", | ||
- "Volverse bueno programando requiere tiempo. No esperarías derrotar a un maestro del ajedrez después de jugar por 3 meses. No esperes crear el próximo Facebook después de programar 3 meses.", | ||
+ "//i.imgur.com/sfsidp6.jpg", | ||
+ "Le texte \"Etre un bon développeur prend du temps.\"", | ||
+ "Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EoTfOyC.jpg", | ||
- "Una imagen de algunos de nuestros campistas programando juntos en Montreal.", | ||
- "Sigue practicando programación cada día y sal con otras personas que programen, y te volverás un programador listo para un trabajo.", | ||
+ "//i.imgur.com/EoTfOyC.jpg", | ||
+ "Une image de quelques uns de nos développeurs codant ensemble à Montreal.", | ||
+ "Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EWWZBag.jpg", | ||
- "Una imagen con el texto \"1. Lee el error 2. Busca en Google 3. Pide ayuda.", | ||
- "En cualquier momento en el que te quedes atascado o no sepas que hacer a continuación: Lee-Busca-Pregunta.", | ||
+ "//i.imgur.com/EWWZBag.jpg", | ||
+ "Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.", | ||
+ "Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/99BfAcK.jpg", | ||
- "Una imagen mostrando la documentación de jQuery", | ||
- "Primero, lee la documentación o el mensaje de error. Una habilidad clave que los buenos programadores poseen es el poder interpretar y seguir instrucciones.", | ||
+ "//i.imgur.com/99BfAcK.jpg", | ||
+ "Une image montrant la document jQuery", | ||
+ "Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/GxvrsFb.gif", | ||
- "Un gif mostrándote como hacer una búsqueda avanzada en Google. Primero, escribimos la consulta \"jquery no corre cuando mi página carga\". Entonces damos clic en el botón de herramientas y cambiamos la selección de \"En cualquier momento\" a \"en el último año\". Entonces hacemos clic en un resultado o leemos a través del artículo y encontramos nuestra respuesta.", | ||
- "Si eso no ayudo, busca en Google. Realizar buenas búsquedas en Google requiere mucha práctica. Cuando buscas en Google, usualmente querrás incluir el lenguaje o entorno (framework) que estás usando. También querrás limitar los resultados a un período reciente.", | ||
+ "//i.imgur.com/GxvrsFb.gif", | ||
+ "Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.", | ||
+ "Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/LZYU7p2.gif", | ||
- "Un gif mostrándonos como seguir el enlace inferior para ir a nuestra sala de chat de ayuda y preguntar \"jquery no corre cuando mi página carga\".", | ||
- "Si eso no te ayudó, pregúntale a tus amigos. Si tienes problemas, puedes preguntar a tus compañeros campistas en nuestra sala de chat.", | ||
+ "//i.imgur.com/LZYU7p2.gif", | ||
+ "Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".", | ||
+ "Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.", | ||
"https://gitter.im/FreeCodeCamp/Help" | ||
], | ||
[ | ||
- "http://i.imgur.com/ZRgXraT.gif", | ||
- "Un gif mostrándonos nuestro mapa de desafíos.", | ||
- "Ahora estas listo para empezar a programar. El botón de \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".", | ||
+ "//i.imgur.com/ZRgXraT.gif", | ||
+ "Une image vous montrant le cursus de notre carte des défis.", | ||
+ "Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".", | ||
"" | ||
] | ||
], | ||
- "nameFr": "Apprenez quoi faire quand vous êtes bloqué ?", | ||
- "descriptionFr": [ | ||
+ "titleEs": "Aprende que hacer si te quedas atascado", | ||
+ "descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/lzKvwU2.jpg", | ||
- "Le texte \"Coder est difficile.\"", | ||
- "Coder est difficile. Vous serez bloqué un jour ou l'autre. Même les développeurs expérimentés peuvent être bloqués. La solution est de savoir comment se débloquer.", | ||
+ "//i.imgur.com/lzKvwU2.jpg", | ||
+ "El texto \"Programar es difícil.\"", | ||
+ "Programar es difícil. Quedarás atascado. Incluso programadores experimentados quedan atascados. La clave es saber como desatascarse.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/sfsidp6.jpg", | ||
- "Le texte \"Etre un bon développeur prend du temps.\"", | ||
- "Etre un bon développeur prend du temps. Vous ne pouvez pas vous attendre à battre un maitre des echecs aprés 3 mois d'apprentissage. Ne vous attendez pas de construire le prochain Facebook aprés 3 mois de coding.", | ||
+ "//i.imgur.com/sfsidp6.jpg", | ||
+ "El texto \"Volverse bueno programando requiere tiempo.\"", | ||
+ "Volverse bueno programando requiere tiempo. No esperarías derrotar a un maestro del ajedrez después de jugar por 3 meses. No esperes crear el próximo Facebook después de programar 3 meses.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EoTfOyC.jpg", | ||
- "Une image de quelques uns de nos développeurs codant ensemble à Montreal.", | ||
- "Continuez de développer tous les jours et fréquentez d'autres développeurs et vous deviendrez un développeur prêt à l'emploi.", | ||
+ "//i.imgur.com/EoTfOyC.jpg", | ||
+ "Una imagen de algunos de nuestros campistas programando juntos en Montreal.", | ||
+ "Sigue practicando programación cada día y sal con otras personas que programen, y te volverás un programador listo para un trabajo.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/EWWZBag.jpg", | ||
- "Une image avec le texte \"1. Lisez l'erreur 2. Cherchez sur Google 3. Demandez de l'aide.", | ||
- "Chaque fois que vous êtes bloqué ou que vous ne savez pas quoi faire : Lisez-Cherchez-Demandez.", | ||
+ "//i.imgur.com/EWWZBag.jpg", | ||
+ "Una imagen con el texto \"1. Lee el error 2. Busca en Google 3. Pide ayuda.", | ||
+ "En cualquier momento en el que te quedes atascado o no sepas que hacer a continuación: Lee-Busca-Pregunta.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/99BfAcK.jpg", | ||
- "Une image montrant la document jQuery", | ||
- "Lisez d'abord la documentation ou les messages d'erreurs. Le principal atout que les bon développeurs ont est la capacité d'interpréter et ensuite de suivre les instructions.", | ||
+ "//i.imgur.com/99BfAcK.jpg", | ||
+ "Una imagen mostrando la documentación de jQuery", | ||
+ "Primero, lee la documentación o el mensaje de error. Una habilidad clave que los buenos programadores poseen es el poder interpretar y seguir instrucciones.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/GxvrsFb.gif", | ||
- "Une image vous montrant comment fiare des recherches avancées sur Google. On commence par rentrer la requète \"jquery ne fonctionne pas lors du chargement de ma page\". Puis nous cliquons sur la barre de recherche et changeons la case à cocher \"Any time\" cochons la case \"au cours de l'année précédente\". Puis nous cliquons sur le résultat et lisons l'article et trouvons notre réponse.", | ||
- "Si cela ne vous aide pas, recherchez sur Google. De bonnes recherches sur Google demande pas mal de pratique. Quand vous recherchez sur Google, vous devez inclure le langage ou le framework que vous utilisez. Vous voulez aussi limiter vos résultats a une période récente.", | ||
+ "//i.imgur.com/GxvrsFb.gif", | ||
+ "Un gif mostrándote como hacer una búsqueda avanzada en Google. Primero, escribimos la consulta \"jquery no corre cuando mi página carga\". Entonces damos clic en el botón de herramientas y cambiamos la selección de \"En cualquier momento\" a \"en el último año\". Entonces hacemos clic en un resultado o leemos a través del artículo y encontramos nuestra respuesta.", | ||
+ "Si eso no ayudo, busca en Google. Realizar buenas búsquedas en Google requiere mucha práctica. Cuando buscas en Google, usualmente querrás incluir el lenguaje o entorno (framework) que estás usando. También querrás limitar los resultados a un período reciente.", | ||
"" | ||
], | ||
- [ | ||
- "http://i.imgur.com/LZYU7p2.gif", | ||
- "Une image vous montrant le lien ci-dessous pour rejoindre le char et demander \"jquery ne fonctionne pas lors du chargement de ma page\".", | ||
- "Si cela ne vous aide pas, demande à vos amis. Si vous avez des difficultés, vous pouvez demander aux autres développeurs sur le chat.", | ||
+ [ | ||
+ "//i.imgur.com/LZYU7p2.gif", | ||
+ "Un gif mostrándonos como seguir el enlace inferior para ir a nuestra sala de chat de ayuda y preguntar \"jquery no corre cuando mi página carga\".", | ||
+ "Si eso no te ayudó, pregúntale a tus amigos. Si tienes problemas, puedes preguntar a tus compañeros campistas en nuestra sala de chat.", | ||
"https://gitter.im/FreeCodeCamp/Help" | ||
], | ||
[ | ||
- "http://i.imgur.com/ZRgXraT.gif", | ||
- "Une image vous montrant le cursus de notre carte des défis.", | ||
- "Maintenant vous être prêt pour commencer à coder. Le boutton \"Map\" situé en haut à droite de votre écran vous montrera notre carte des défis. Nous vous recommandons de les completer du début jusqu'à la fin, régulièrement. Notre communauté open source continue de d'améliorer nos défis, ne soyez donc pas surpris si ils changent ou évoluent. Ce n'est pas la peine de revenir en arrière, continuez à progresser. Vous pouvez toujours accéder à nos derniers défis juste en cliquant sur le boutton \"Learn\".", | ||
+ "//i.imgur.com/ZRgXraT.gif", | ||
+ "Un gif mostrándonos nuestro mapa de desafíos.", | ||
+ "Ahora estas listo para empezar a programar. El botón de \"Mapa\" en tu esquina superior derecha te mostrará nuestro mapa de desafíos. Te recomendaos que completes los desafíos de arriba hacía abajo, a un ritmo sostenible. Nuestra comunidad de código abierto esta constantemente mejorando nuestros desafíos, así que no te sorprendas si cambian o se mueven alrededor. No te preocupes por volver hacia atrás - solo continúa avanzando. Siempre puedes ir a tu desafío más reciente pulsando el botón de \"Aprender\".", | ||
"" | ||
] | ||
] | ||
View
65
seed/challenges/01-front-end-development-certification/advanced-bonfires.json
@@ -58,7 +58,7 @@ | ||
"RegExp" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Valida Números Telefónicos de los EEUU", | ||
+ "titleEs": "Valida Números Telefónicos de los EEUU", | ||
"descriptionEs": [ | ||
"Haz que la función devuelva true (verdadero) si el texto introducido es un número válido en los EEUU.", | ||
"El usuario debe llenar el campo del formulario de la forma que desee siempre y cuando sea un número válido en los EEUU. Los números mostrados a continuación tienen formatos válidos en los EEUU:", | ||
@@ -103,7 +103,7 @@ | ||
"Symmetric Difference" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Diferencia simétrica", | ||
+ "titleEs": "Diferencia simétrica", | ||
"descriptionEs": [ | ||
"Crea una función que acepte dos o más arreglos y que devuelva un arreglo conteniendo la diferenia simétrica entre ambos", | ||
"En Matemáticas, el término 'diferencia simétrica' se refiere a los elementos en dos conjuntos que están en el primer conjunto o en el segundo, pero no en ambos.", | ||
@@ -140,6 +140,9 @@ | ||
"", | ||
"checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]]);" | ||
], | ||
+ "solutions": [ | ||
+ "var denom = [\n\t{ name: 'ONE HUNDRED', val: 100.00},\n\t{ name: 'TWENTY', val: 20.00},\n\t{ name: 'TEN', val: 10.00},\n\t{ name: 'FIVE', val: 5.00},\n\t{ name: 'ONE', val: 1.00},\n\t{ name: 'QUARTER', val: 0.25},\n\t{ name: 'DIME', val: 0.10},\n\t{ name: 'NICKEL', val: 0.05},\n\t{ name: 'PENNY', val: 0.01}\n];\n\nfunction checkCashRegister(price, cash, cid) {\n var change = cash - price;\n var register = cid.reduce(function(acc, curr) {\n acc.total += curr[1];\n acc[curr[0]] = curr[1];\n return acc;\n }, {total: 0});\n if(register.total === change) {\n return 'Closed';\n }\n if(register.total < change) {\n return 'Insufficient Funds';\n }\n var change_arr = denom.reduce(function(acc, curr) {\n var value = 0;\n while(register[curr.name] > 0 && change >= curr.val) {\n change -= curr.val;\n register[curr.name] -= curr.val;\n value += curr.val;\n change = Math.round(change * 100) / 100;\n }\n if(value > 0) {\n acc.push([ curr.name, value ]);\n }\n return acc;\n }, []);\n if(change_arr.length < 1 || change > 0) {\n return \"Insufficient Funds\";\n }\n return change_arr;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.isArray(checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]]), 'message: <code>checkCashRegister(19.50, 20.00, [[\"PENNY\", 1.01], [\"NICKEL\", 2.05], [\"DIME\", 3.10], [\"QUARTER\", 4.25], [\"ONE\", 90.00], [\"FIVE\", 55.00], [\"TEN\", 20.00], [\"TWENTY\", 60.00], [\"ONE HUNDRED\", 100.00]])</code> should return an array.');", | ||
"assert.isString(checkCashRegister(19.50, 20.00, [[\"PENNY\", 0.01], [\"NICKEL\", 0], [\"DIME\", 0], [\"QUARTER\", 0], [\"ONE\", 0], [\"FIVE\", 0], [\"TEN\", 0], [\"TWENTY\", 0], [\"ONE HUNDRED\", 0]]), 'message: <code>checkCashRegister(19.50, 20.00, [[\"PENNY\", 0.01], [\"NICKEL\", 0], [\"DIME\", 0], [\"QUARTER\", 0], [\"ONE\", 0], [\"FIVE\", 0], [\"TEN\", 0], [\"TWENTY\", 0], [\"ONE HUNDRED\", 0]])</code> should return a string.');", | ||
@@ -155,7 +158,7 @@ | ||
"Global Object" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Cambio exacto", | ||
+ "titleEs": "Cambio exacto", | ||
"descriptionEs": [ | ||
"Crea una función que simule una caja registradora que acepte el precio de compra como el primer argumento, la cantidad recibida como el segundo argumento, y la cantidad de dinero disponible en la registradora (cid) como tercer argumento", | ||
"cid es un arreglo bidimensional que lista la cantidad de dinero disponible", | ||
@@ -168,11 +171,11 @@ | ||
"id": "a56138aff60341a09ed6c480", | ||
"title": "Inventory Update", | ||
"description": [ | ||
- "Compare and update inventory stored in a 2d array against a second 2d array of a fresh delivery. Update current inventory item quantity, and if an item cannot be found, add the new item and quantity into the inventory array in alphabetical order.", | ||
+ "Compare and update the inventory stored in a 2D array against a second 2D array of a fresh delivery. Update the current existing inventory item quantities (in <code>arr1</code>). If an item cannot be found, add the new item and quantity into the inventory array. The returned inventory array should be in alphabetical order by item.", | ||
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function inventory(arr1, arr2) {", | ||
+ "function updateInventory(arr1, arr2) {", | ||
" // All inventory must be accounted for or you're fired!", | ||
" return arr1;", | ||
"}", | ||
@@ -192,25 +195,25 @@ | ||
" [7, \"Toothpaste\"]", | ||
"];", | ||
"", | ||
- "inventory(curInv, newInv);" | ||
+ "updateInventory(curInv, newInv);" | ||
], | ||
"solutions": [ | ||
- "function inventory(arr1, arr2) {\n arr2.forEach(function(item) {\n createOrUpdate(arr1, item);\n });\n // All inventory must be accounted for or you're fired!\n return arr1;\n}\n\nfunction createOrUpdate(arr1, item) {\n var index = -1;\n while (++index < arr1.length) {\n if (arr1[index][1] === item[1]) {\n arr1[index][0] += item[0];\n return;\n }\n if (arr1[index][1] > item[1]) {\n break;\n }\n }\n arr1.splice(index, 0, item);\n}\n\n// Example inventory lists\nvar curInv = [\n [21, 'Bowling Ball'],\n [2, 'Dirty Sock'],\n [1, 'Hair Pin'],\n [5, 'Microphone']\n];\n\nvar newInv = [\n [2, 'Hair Pin'],\n [3, 'Half-Eaten Apple'],\n [67, 'Bowling Ball'],\n [7, 'Toothpaste']\n];\n\ninventory(curInv, newInv);\n" | ||
+ "function updateInventory(arr1, arr2) {\n arr2.forEach(function(item) {\n createOrUpdate(arr1, item);\n });\n // All inventory must be accounted for or you're fired!\n return arr1;\n}\n\nfunction createOrUpdate(arr1, item) {\n var index = -1;\n while (++index < arr1.length) {\n if (arr1[index][1] === item[1]) {\n arr1[index][0] += item[0];\n return;\n }\n if (arr1[index][1] > item[1]) {\n break;\n }\n }\n arr1.splice(index, 0, item);\n}\n\n// Example inventory lists\nvar curInv = [\n [21, 'Bowling Ball'],\n [2, 'Dirty Sock'],\n [1, 'Hair Pin'],\n [5, 'Microphone']\n];\n\nvar newInv = [\n [2, 'Hair Pin'],\n [3, 'Half-Eaten Apple'],\n [67, 'Bowling Ball'],\n [7, 'Toothpaste']\n];\n\nupdateInventory(curInv, newInv);\n" | ||
], | ||
"tests": [ | ||
- "assert.isArray(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), 'message: <code>inventory()</code> should return an array.');", | ||
- "assert.equal(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length, 6, 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length</code> should return an array with a length of 6.');", | ||
- "assert.deepEqual(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]], 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]]</code>.');", | ||
- "assert.deepEqual(inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], []), [[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], 'message: <code>inventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [])</code> should return <code>[[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]]</code>.');", | ||
- "assert.deepEqual(inventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]], 'message: <code>inventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]]</code>.');", | ||
- "assert.deepEqual(inventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]]), [[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]], 'message: <code>inventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]])</code> should return <code>[[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]]</code>.');" | ||
+ "assert.isArray(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), 'message: <code>updateInventory()</code> should return an array.');", | ||
+ "assert.equal(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length, 6, 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]).length</code> should return an array with a length of 6.');", | ||
+ "assert.deepEqual(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]], 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[88, \"Bowling Ball\"], [2, \"Dirty Sock\"], [3, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [5, \"Microphone\"], [7, \"Toothpaste\"]]</code>.');", | ||
+ "assert.deepEqual(updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], []), [[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], 'message: <code>updateInventory([[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]], [])</code> should return <code>[[21, \"Bowling Ball\"], [2, \"Dirty Sock\"], [1, \"Hair Pin\"], [5, \"Microphone\"]]</code>.');", | ||
+ "assert.deepEqual(updateInventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]]), [[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]], 'message: <code>updateInventory([], [[2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [67, \"Bowling Ball\"], [7, \"Toothpaste\"]])</code> should return <code>[[67, \"Bowling Ball\"], [2, \"Hair Pin\"], [3, \"Half-Eaten Apple\"], [7, \"Toothpaste\"]]</code>.');", | ||
+ "assert.deepEqual(updateInventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]]), [[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]], 'message: <code>updateInventory([[0, \"Bowling Ball\"], [0, \"Dirty Sock\"], [0, \"Hair Pin\"], [0, \"Microphone\"]], [[1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [1, \"Bowling Ball\"], [1, \"Toothpaste\"]])</code> should return <code>[[1, \"Bowling Ball\"], [0, \"Dirty Sock\"], [1, \"Hair Pin\"], [1, \"Half-Eaten Apple\"], [0, \"Microphone\"], [1, \"Toothpaste\"]]</code>.');" | ||
], | ||
"type": "bonfire", | ||
"MDNlinks": [ | ||
"Global Array Object" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Actualizando el inventario", | ||
+ "titleEs": "Actualizando el inventario", | ||
"descriptionEs": [ | ||
"Compara y actualiza el inventario actual, almacenado en un arreglo bidimensional, contra otro arreglo bidimensional de inventario nuevo. Actualiza las cantidades en el inventario actual y, en caso de recibir una nueva mercancía, añade su nombre y la cantidad recibida al arreglo del inventario en orden alfabético.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
@@ -249,7 +252,7 @@ | ||
"RegExp" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Sin repeticiones, por favor", | ||
+ "titleEs": "Sin repeticiones, por favor", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva el número total de permutaciones de las letras en la cadena de texto provista, en las cuales no haya letras consecutivas repetidas", | ||
"Por ejemplo, 'aab' debe retornar 2 porque, del total de 6 permutaciones posibles, solo 2 de ellas no tienen repetida la misma letra (en este caso 'a').", | ||
@@ -265,28 +268,28 @@ | ||
"Do not display information that is redundant or that can be inferred by the user: if the date range ends in less than a year from when it begins, do not display the ending year. If the range ends in the same month that it begins, do not display the ending year or month.", | ||
"Additionally, if the date range begins in the current year and ends within one year, the year should not be displayed at the beginning of the friendly range.", | ||
"Examples:", | ||
- "<code>friendly([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>", | ||
- "<code>friendly([\"2016-07-01\", \"2018-07-04\"])</code> should return <code>[\"July 1st, 2016\", \"July 4th, 2018\"]</code>.", | ||
+ "<code>makeFriendlyDates([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>", | ||
+ "<code>makeFriendlyDates([\"2016-07-01\", \"2018-07-04\"])</code> should return <code>[\"July 1st, 2016\", \"July 4th, 2018\"]</code>.", | ||
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function friendly(arr) {", | ||
+ "function makeFriendlyDates(arr) {", | ||
" return arr;", | ||
"}", | ||
"", | ||
- "friendly(['2016-07-01', '2016-07-04']);" | ||
+ "makeFriendlyDates(['2016-07-01', '2016-07-04']);" | ||
], | ||
"solutions": [ | ||
- "function friendly(str) {\n var thisYear = new Date().getFullYear();\n var dates = str.map(function(s) {return s.split('-').map(Number);});\n var start = dates[0];\n var end = dates[1];\n if (str[0] === str[1]) {\n return [readable(start)];\n }\n if (start[0] !== end[0]) {\n if (start[0] + 1 === end[0]){\n if (start[1] > end[1]){\n end[0] = undefined;\n }\n if (start[1] === end[1] && start[2] > end[2]){\n end[0] = undefined;\n }\n if (start[0] === thisYear){\n start[0] = undefined;\n }\n }\n return dates.map(readable);\n }\n end[0] = undefined;\n if (start[0] === thisYear){\n start[0] = undefined;\n }\n if (start[1] === end[1]) {\n end[1] = undefined;\n }\n return dates.map(readable);\n}\n\nfunction readable(arr) {\n var ordD = arr[2] + nth(arr[2]);\n if (!arr[1]) {\n return ordD;\n }\n return MONTH[arr[1]] + \" \" + ordD + (!arr[0] ? \"\" : \", \" + arr[0]);\n}\n\nvar MONTH = {1: \"January\",\n 2: \"February\",\n 3: \"March\",\n 4: \"April\",\n 5: \"May\",\n 6: \"June\",\n 7: \"July\",\n 8: \"August\",\n 9: \"September\",\n 10: \"October\",\n 11: \"November\",\n 12: \"December\"};\n\nfunction nth(d) {\n if(d>3 && d<21) return 'th';\n switch (d % 10) {\n case 1: return \"st\";\n case 2: return \"nd\";\n case 3: return \"rd\";\n default: return \"th\";\n }\n}" | ||
+ "function makeFriendlyDates(str) {\n var thisYear = new Date().getFullYear();\n var dates = str.map(function(s) {return s.split('-').map(Number);});\n var start = dates[0];\n var end = dates[1];\n if (str[0] === str[1]) {\n return [readable(start)];\n }\n if (start[0] !== end[0]) {\n if (start[0] + 1 === end[0]){\n if (start[1] > end[1]){\n end[0] = undefined;\n }\n if (start[1] === end[1] && start[2] > end[2]){\n end[0] = undefined;\n }\n if (start[0] === thisYear){\n start[0] = undefined;\n }\n }\n return dates.map(readable);\n }\n end[0] = undefined;\n if (start[0] === thisYear){\n start[0] = undefined;\n }\n if (start[1] === end[1]) {\n end[1] = undefined;\n }\n return dates.map(readable);\n}\n\nfunction readable(arr) {\n var ordD = arr[2] + nth(arr[2]);\n if (!arr[1]) {\n return ordD;\n }\n return MONTH[arr[1]] + \" \" + ordD + (!arr[0] ? \"\" : \", \" + arr[0]);\n}\n\nvar MONTH = {1: \"January\",\n 2: \"February\",\n 3: \"March\",\n 4: \"April\",\n 5: \"May\",\n 6: \"June\",\n 7: \"July\",\n 8: \"August\",\n 9: \"September\",\n 10: \"October\",\n 11: \"November\",\n 12: \"December\"};\n\nfunction nth(d) {\n if(d>3 && d<21) return 'th';\n switch (d % 10) {\n case 1: return \"st\";\n case 2: return \"nd\";\n case 3: return \"rd\";\n default: return \"th\";\n }\n}" | ||
], | ||
"tests": [ | ||
- "assert.deepEqual(friendly(['2016-07-01', '2016-07-04']), ['July 1st','4th'], 'message: <code>friendly([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>.');", | ||
- "assert.deepEqual(friendly(['2016-12-01', '2017-02-03']), ['December 1st','February 3rd'], 'message: <code>friendly([\"2016-12-01\", \"2017-02-03\"])</code> should return <code>[\"December 1st\",\"February 3rd\"]</code>.');", | ||
- "assert.deepEqual(friendly(['2016-12-01', '2018-02-03']), ['December 1st, 2016','February 3rd, 2018'], 'message: <code>friendly([\"2016-12-01\", \"2018-02-03\"])</code> should return <code>[\"December 1st, 2016\",\"February 3rd, 2018\"]</code>.');", | ||
- "assert.deepEqual(friendly(['2017-03-01', '2017-05-05']), ['March 1st, 2017','May 5th'], 'message: <code>friendly([\"2017-03-01\", \"2017-05-05\"])</code> should return <code>[\"March 1st, 2017\",\"May 5th\"]</code>');", | ||
- "assert.deepEqual(friendly(['2018-01-13', '2018-01-13']), ['January 13th, 2018'], 'message: <code>friendly([\"2018-01-13\", \"2018-01-13\"])</code> should return <code>[\"January 13th, 2018\"]</code>.');", | ||
- "assert.deepEqual(friendly(['2022-09-05', '2023-09-04']), ['September 5th, 2022','September 4th'], 'message: <code>friendly([\"2022-09-05\", \"2023-09-04\"])</code> should return <code>[\"September 5th, 2022\",\"September 4th\"]</code>.');", | ||
- "assert.deepEqual(friendly(['2022-09-05', '2023-09-05']), ['September 5th, 2022','September 5th, 2023'], 'message: <code>friendly([\"2022-09-05\", \"2023-09-05\"])</code> should return <code>[\"September 5th, 2022\",\"September 5th, 2023\"]</code>.');" | ||
+ "assert.deepEqual(makeFriendlyDates(['2016-07-01', '2016-07-04']), ['July 1st','4th'], 'message: <code>makeFriendlyDates([\"2016-07-01\", \"2016-07-04\"])</code> should return <code>[\"July 1st\",\"4th\"]</code>.');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2016-12-01', '2017-02-03']), ['December 1st','February 3rd'], 'message: <code>makeFriendlyDates([\"2016-12-01\", \"2017-02-03\"])</code> should return <code>[\"December 1st\",\"February 3rd\"]</code>.');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2016-12-01', '2018-02-03']), ['December 1st, 2016','February 3rd, 2018'], 'message: <code>makeFriendlyDates([\"2016-12-01\", \"2018-02-03\"])</code> should return <code>[\"December 1st, 2016\",\"February 3rd, 2018\"]</code>.');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2017-03-01', '2017-05-05']), ['March 1st, 2017','May 5th'], 'message: <code>makeFriendlyDates([\"2017-03-01\", \"2017-05-05\"])</code> should return <code>[\"March 1st, 2017\",\"May 5th\"]</code>');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2018-01-13', '2018-01-13']), ['January 13th, 2018'], 'message: <code>makeFriendlyDates([\"2018-01-13\", \"2018-01-13\"])</code> should return <code>[\"January 13th, 2018\"]</code>.');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2022-09-05', '2023-09-04']), ['September 5th, 2022','September 4th'], 'message: <code>makeFriendlyDates([\"2022-09-05\", \"2023-09-04\"])</code> should return <code>[\"September 5th, 2022\",\"September 4th\"]</code>.');", | ||
+ "assert.deepEqual(makeFriendlyDates(['2022-09-05', '2023-09-05']), ['September 5th, 2022','September 5th, 2023'], 'message: <code>makeFriendlyDates([\"2022-09-05\", \"2023-09-05\"])</code> should return <code>[\"September 5th, 2022\",\"September 5th, 2023\"]</code>.');" | ||
], | ||
"type": "bonfire", | ||
"MDNlinks": [ | ||
@@ -295,7 +298,7 @@ | ||
"parseInt()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Rangos de fechas amigables", | ||
+ "titleEs": "Rangos de fechas amigables", | ||
"descriptionEs": [ | ||
"Convierte un rango de fecha que conste de dos fechas en formato AAAA-MM-DD a un formato más legible", | ||
"", | ||
@@ -345,7 +348,7 @@ | ||
"Details of the Object Model" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Crea una Persona", | ||
+ "titleEs": "Crea una Persona", | ||
"descriptionEs": [ | ||
"Completa el constructor de objetos con los métodos especificados en las pruebas.", | ||
"Los métodos son: getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), y setFullName(firstAndLast). ", | ||
@@ -386,7 +389,7 @@ | ||
"Math.pow()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Ubica los escombros", | ||
+ "titleEs": "Ubica los escombros", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva un nuevo arreglo que transforme la altitud promedio del elemento en su período orbital.", | ||
"El arreglo debe contener objetos en el formato <code>{name: 'name', avgAlt: avgAlt}</code>.", | ||
@@ -427,7 +430,7 @@ | ||
"Array.reduce()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "En parejas", | ||
+ "titleEs": "En parejas", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva la suma de todos los índices de los elementos de 'arr' que pueden ser emparejados con otro elemento de tal forma que la suma de ambos equivalga al valor del segundo argumento, 'arg'. Si varias combinaciones son posibles, devuelve la menor suma de índices. Una vez un elemento ha sido usado, no puede ser usado de nuevo para emparejarlo con otro elemento.", | ||
"Por ejemplo, pairwise([1, 4, 2, 3, 0, 5], 7) debe devolver 11 porque 4, 2, 3 y 5 pueden ser emparejados para obtener una suma de 7", | ||
View
22
seed/challenges/01-front-end-development-certification/advanced-ziplines.json
@@ -24,7 +24,6 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Crea una calculadora JavaScript", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/zrRzMR' target='_blank'>http://codepen.io/FreeCodeCamp/full/zrRzMR</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -36,7 +35,8 @@ | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen. ", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea una calculadora JavaScript" | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd0f", | ||
@@ -57,7 +57,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
- "nameRu": "Создайте таймер Pomodoro", | ||
+ "isRequired": true, | ||
+ "challengeType": 3, | ||
+ "titleRu": "Создайте таймер Pomodoro", | ||
"descriptionRu": [ | ||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.", | ||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -71,7 +73,7 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.", | ||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>" | ||
], | ||
- "nameEs": "Crea un reloj pomodoro", | ||
+ "titleEs": "Crea un reloj pomodoro", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemPZX' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemPZX</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -82,9 +84,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.", | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true, | ||
- "challengeType": 3 | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7158d8c442eedfaeb5bd1c", | ||
@@ -106,7 +106,6 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Crea un juego de Tic Tac Toe", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpvw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpvw</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -118,7 +117,8 @@ | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea un juego de Tic Tac Toe" | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd1c", | ||
@@ -146,7 +146,6 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Construye un juego de Simon", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/Em-Ant/full/QbRyqq/' target='_blank'>http://codepen.io/Em-Ant/full/QbRyqq/</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -164,7 +163,8 @@ | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Construye un juego de Simon" | ||
} | ||
] | ||
} |
View
254
seed/challenges/01-front-end-development-certification/basic-bonfires.json
@@ -9,25 +9,25 @@ | ||
"title": "Get Set for our Algorithm Challenges", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/sJkp30a.png", | ||
+ "//i.imgur.com/sJkp30a.png", | ||
"An image of a algorithm challenge showing directions, tests, and the code editor.", | ||
"Our algorithm challenges will teach you how to think like a programmer.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/d8LuRNh.png", | ||
+ "//i.imgur.com/d8LuRNh.png", | ||
"A mother bird kicks a baby bird out of her nest.", | ||
"Our previous challenges introduced you to programming concepts. But for these algorithm challenges, you'll now need to apply what you learned to solve open-ended problems.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WBetuBa.jpg", | ||
+ "//i.imgur.com/WBetuBa.jpg", | ||
"A programmer punching through his laptop screen in frustration.", | ||
"Our algorithm challenges are hard. Some of them may take you several hours to solve. You will get frustrated. But don't quit.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/p2TpOQd.jpg", | ||
+ "//i.imgur.com/p2TpOQd.jpg", | ||
"A cute dog jumping over a hurdle and winking and pointing his paw at you.", | ||
"When you get stuck, just use the Read-Search-Ask methodology.<br>Don't worry - you've got this.", | ||
"" | ||
@@ -37,34 +37,34 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Prepárate para nuestros Desafíos sobre Algoritmos", | ||
- "descriptionEs": [ | ||
+ "descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/sJkp30a.png", | ||
+ "//i.imgur.com/sJkp30a.png", | ||
"Una imagen de un desafio sobre algoritmos que presenta instrucciones, pruebas y el editor de código.", | ||
"Nuestros desafios sobre algoritmos te enseñarán como pensar como un programador.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/d8LuRNh.png", | ||
+ "//i.imgur.com/d8LuRNh.png", | ||
"Una mamá pájaro saca un bebé pájaro fuer de su nido.", | ||
"Nuestros desafios anteriores te introdujeron a los conceptos de programación. Pero para estos desafios sobre algoritmos, ahora necesitarás aplicar lo que has aprendido y resolver problemas de respuesta abierta", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WBetuBa.jpg", | ||
+ "//i.imgur.com/WBetuBa.jpg", | ||
"Un programador frustado golpeando la pantalla de su computador.", | ||
"Nuestros desafíos sobre algortimos son difíciles. Algunos pueden requerir muchas horas para resolverse. Podrás frustarte, pero no te rindas.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/p2TpOQd.jpg", | ||
+ "//i.imgur.com/p2TpOQd.jpg", | ||
"Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.", | ||
"Cuando te atasques, usa la metodología Leer-Buscar-Preguntar.<br>No te preocupes - ya lo has entendido.", | ||
"" | ||
] | ||
], | ||
- "isRequired": false | ||
+ "isRequired": false, | ||
+ "titleEs": "Prepárate para nuestros Desafíos sobre Algoritmos" | ||
}, | ||
{ | ||
"id": "a202eed8fc186c8434cb6d61", | ||
@@ -82,10 +82,6 @@ | ||
"", | ||
"reverseString(\"hello\");" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n" | ||
- ], | ||
"tests": [ | ||
"assert(typeof reverseString(\"hello\") === \"string\", 'message: <code>reverseString(\"hello\")</code> should return a string.');", | ||
"assert(reverseString(\"hello\") === \"olleh\", 'message: <code>reverseString(\"hello\")</code> should become <code>\"olleh\"</code>.');", | ||
@@ -93,6 +89,10 @@ | ||
"assert(reverseString(\"Greetings from Earth\") === \"htraE morf sgniteerG\", 'message: <code>reverseString(\"Greetings from Earth\")</code> should return <code>\"htraE morf sgniteerG\"</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function reverseString(str) {\n return str.split('').reverse().join(\"\");\n}\n\nreverseString('hello');\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Global String Object", | ||
"String.split()", | ||
@@ -100,7 +100,7 @@ | ||
"Array.join()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Invierte el texto", | ||
+ "titleEs": "Invierte el texto", | ||
"descriptionEs": [ | ||
"Invierte la cadena de texto que se te provee", | ||
"Puede que necesites convertir la cadena de texto en un arreglo antes de que puedas invertirla", | ||
@@ -125,10 +125,6 @@ | ||
"", | ||
"factorialize(5);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function factorialize(num) {\n return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n" | ||
- ], | ||
"tests": [ | ||
"assert(typeof factorialize(5) === 'number', 'message: <code>factorialize(5)</code> should return a number.');", | ||
"assert(factorialize(5) === 120, 'message: <code>factorialize(5)</code> should return 120.');", | ||
@@ -137,11 +133,15 @@ | ||
"assert(factorialize(0) === 1, 'message: <code>factorialize(0)</code> should return 1.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function factorialize(num) {\n return num < 1 ? 1 : num * factorialize(num-1);\n}\n\nfactorialize(5);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Arithmetic Operators" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Factoriza un número", | ||
+ "titleEs": "Factoriza un número", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva el factorial del número entero que se te provee", | ||
"El factorial de un número entero positivo n es la multiplicación de todos los enteros positivos menores o iguales a n", | ||
@@ -170,10 +170,6 @@ | ||
"", | ||
"palindrome(\"eye\");" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function palindrome(str) {\n var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n var aux = string.split('');\n if (aux.join('') === aux.reverse().join('')){\n return true;\n }\n\n return false;\n}" | ||
- ], | ||
"tests": [ | ||
"assert(typeof palindrome(\"eye\") === \"boolean\", 'message: <code>palindrome(\"eye\")</code> should return a boolean.');", | ||
"assert(palindrome(\"eye\") === true, 'message: <code>palindrome(\"eye\")</code> should return true.');", | ||
@@ -188,12 +184,16 @@ | ||
"assert(palindrome(\"0_0 (: /-\\ :) 0-0\") === true, 'message: <code>palindrome(\"0_0 (: /-\\ :) 0-0\")</code> should return true.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function palindrome(str) {\n var string = str.toLowerCase().split(/[^A-Za-z0-9]/gi).join('');\n var aux = string.split('');\n if (aux.join('') === aux.reverse().join('')){\n return true;\n }\n\n return false;\n}" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.replace()", | ||
"String.toLowerCase()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Verifica si es palíndromo", | ||
+ "titleEs": "Verifica si es palíndromo", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva <code>true</code> si una cadena de texto dada es un palíndromo, y que devuelva <code>false</code> en caso contrario", | ||
"Un palíndromo es una palabra u oración que se escribe de la misma forma en ambos sentidos, sin tomar en cuenta signos de puntuación, espacios y sin distinguir entre mayúsculas y minúsculas.", | ||
@@ -217,10 +217,6 @@ | ||
"", | ||
"findLongestWord(\"The quick brown fox jumped over the lazy dog\");" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function findLongestWord(str) {\n return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n" | ||
- ], | ||
"tests": [ | ||
"assert(typeof findLongestWord(\"The quick brown fox jumped over the lazy dog\") === \"number\", 'message: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return a number.');", | ||
"assert(findLongestWord(\"The quick brown fox jumped over the lazy dog\") === 6, 'message: <code>findLongestWord(\"The quick brown fox jumped over the lazy dog\")</code> should return 6.');", | ||
@@ -230,12 +226,16 @@ | ||
"assert(findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\") === 19, 'message: <code>findLongestWord(\"What if we try a super-long word such as otorhinolaryngology\")</code> should return 19.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function findLongestWord(str) {\n return str.split(' ').sort(function(a, b) { return b.length - a.length;})[0].length;\n}\n\nfindLongestWord('The quick brown fox jumped over the lazy dog');\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.split()", | ||
"String.length" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Encuentra la palabra más larga", | ||
+ "titleEs": "Encuentra la palabra más larga", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva la longitud de la palabra más larga en una frase dada", | ||
"El resultado debe ser un número", | ||
@@ -257,10 +257,6 @@ | ||
"", | ||
"titleCase(\"I'm a little tea pot\");" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function titleCase(str) {\n return str.split(' ').map(function(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n" | ||
- ], | ||
"tests": [ | ||
"assert(typeof titleCase(\"I'm a little tea pot\") === \"string\", 'message: <code>titleCase(\"I'm a little tea pot\")</code> should return a string.');", | ||
"assert(titleCase(\"I'm a little tea pot\") === \"I'm A Little Tea Pot\", 'message: <code>titleCase(\"I'm a little tea pot\")</code> should return \"I'm A Little Tea Pot\".');", | ||
@@ -268,11 +264,15 @@ | ||
"assert(titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\") === \"Here Is My Handle Here Is My Spout\", 'message: <code>titleCase(\"HERE IS MY HANDLE HERE IS MY SPOUT\")</code> should return \"Here Is My Handle Here Is My Spout\".');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function titleCase(str) {\n return str.split(' ').map(function(word) {\n return word.charAt(0).toUpperCase() + word.substring(1).toLowerCase();\n }).join(' ');\n}\n\ntitleCase(\"I'm a little tea pot\");\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.split()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Aplica formato de título", | ||
+ "titleEs": "Aplica formato de título", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva la cadena de texto que recibe con la primera letra de cada palabra en mayúscula. Asegúrate de que el resto de las letras sean minúsculas", | ||
"Para este ejercicio, también debes poner en mayúscula conectores como \"the\" y \"of\".", | ||
@@ -295,21 +295,21 @@ | ||
"", | ||
"largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function largestOfFour(arr) {\n return arr.map(function(subArr) {\n return Math.max.apply(null, subArr);\n });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n" | ||
- ], | ||
"tests": [ | ||
"assert(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]).constructor === Array, 'message: <code>largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return an array.');", | ||
"assert.deepEqual(largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]), [27,5,39,1001], 'message: <code>largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])</code> should return <code>[27,5,39,1001]</code>.');", | ||
"assert.deepEqual(largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]), [9,35,97,1000000], 'message: <code>largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])</code> should return <code>[9, 35, 97, 1000000]</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function largestOfFour(arr) {\n return arr.map(function(subArr) {\n return Math.max.apply(null, subArr);\n });\n}\n\nlargestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Comparison Operators" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Devuelve el mayor entero de cada arreglo", | ||
+ "titleEs": "Devuelve el mayor entero de cada arreglo", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva un arreglo que contenga el mayor de los números de cada sub-arreglo que recibe. Para simplificar las cosas, el arreglo que recibirá tendrá exactamente 4 sub-arreglos", | ||
"Recuerda que puedes iterar a través de un arreglo con un búcle simple, y acceder a cada miembro utilizando la sintaxis arr[i].", | ||
@@ -321,37 +321,37 @@ | ||
"id": "acda2fb1324d9b0fa741e6b5", | ||
"title": "Confirm the Ending", | ||
"description": [ | ||
- "Check if a string (first argument) ends with the given target string (second argument).", | ||
+ "Check if a string (first argument, <code>str</code>) ends with the given target string (second argument, <code>target</code>).", | ||
"Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function end(str, target) {", | ||
+ "function confirmEnding(str, target) {", | ||
" // \"Never give up and good luck will find you.\"", | ||
" // -- Falcor", | ||
" return str;", | ||
"}", | ||
"", | ||
- "end(\"Bastian\", \"n\");" | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function end(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n" | ||
+ "confirmEnding(\"Bastian\", \"n\");" | ||
], | ||
"tests": [ | ||
- "assert(end(\"Bastian\", \"n\") === true, 'message: <code>end(\"Bastian\", \"n\")</code> should return true.');", | ||
- "assert(end(\"Connor\", \"n\") === false, 'message: <code>end(\"Connor\", \"n\")</code> should return false.');", | ||
- "assert(end(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\") === false, 'message: <code>end(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\")</code> should return false.');", | ||
- "assert(end(\"He has to give me a new name\", \"name\") === true, 'message: <code>end(\"He has to give me a new name\", \"name\")</code> should return true.');", | ||
- "assert(end(\"He has to give me a new name\", \"me\") === true, 'message: <code>end(\"He has to give me a new name\", \"me\")</code> should return true.');", | ||
- "assert(end(\"He has to give me a new name\", \"na\") === false, 'message: <code>end(\"He has to give me a new name\", \"na\")</code> should return false.');", | ||
- "assert(end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: <code>end(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');" | ||
+ "assert(confirmEnding(\"Bastian\", \"n\") === true, 'message: <code>confirmEnding(\"Bastian\", \"n\")</code> should return true.');", | ||
+ "assert(confirmEnding(\"Connor\", \"n\") === false, 'message: <code>confirmEnding(\"Connor\", \"n\")</code> should return false.');", | ||
+ "assert(confirmEnding(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\") === false, 'message: <code>confirmEnding(\"Walking on water and developing software from a specification are easy if both are frozen\", \"specification\")</code> should return false.');", | ||
+ "assert(confirmEnding(\"He has to give me a new name\", \"name\") === true, 'message: <code>confirmEnding(\"He has to give me a new name\", \"name\")</code> should return true.');", | ||
+ "assert(confirmEnding(\"He has to give me a new name\", \"me\") === true, 'message: <code>confirmEnding(\"He has to give me a new name\", \"me\")</code> should return true.');", | ||
+ "assert(confirmEnding(\"He has to give me a new name\", \"na\") === false, 'message: <code>confirmEnding(\"He has to give me a new name\", \"na\")</code> should return false.');", | ||
+ "assert(confirmEnding(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\") === false, 'message: <code>confirmEnding(\"If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing\", \"mountain\")</code> should return false.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function confirmEnding(str, target) {\n return str.substring(str.length-target.length) === target;\n};\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.substr()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Confirma la terminación", | ||
+ "titleEs": "Confirma la terminación", | ||
"descriptionEs": [ | ||
"Verifica si una cadena de texto (primer argumento) termina con otra cadena de texto (segundo argumento).", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
@@ -365,31 +365,31 @@ | ||
"Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function repeat(str, num) {", | ||
+ "function repeatStringNumTimes(str, num) {", | ||
" // repeat after me", | ||
" return str;", | ||
"}", | ||
"", | ||
- "repeat(\"abc\", 3);" | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function repeat(str, num) {\n if (num < 0) return '';\n return num === 1 ? str : str + repeat(str, num-1);\n}\n\nrepeat('abc', 3);\n" | ||
+ "repeatStringNumTimes(\"abc\", 3);" | ||
], | ||
"tests": [ | ||
- "assert(repeat(\"*\", 3) === \"***\", 'message: <code>repeat(\"*\", 3)</code> should return <code>\"***\"</code>.');", | ||
- "assert(repeat(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeat(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');", | ||
- "assert(repeat(\"abc\", 4) === \"abcabcabcabc\", 'message: <code>repeat(\"abc\", 4)</code> should return <code>\"abcabcabcabc\"</code>.');", | ||
- "assert(repeat(\"abc\", 1) === \"abc\", 'message: <code>repeat(\"abc\", 1)</code> should return <code>\"abc\"</code>.');", | ||
- "assert(repeat(\"*\", 8) === \"********\", 'message: <code>repeat(\"*\", 8)</code> should return <code>\"********\"</code>.');", | ||
- "assert(repeat(\"abc\", -2) === \"\", 'message: <code>repeat(\"abc\", -2)</code> should return <code>\"\"</code>.');" | ||
+ "assert(repeatStringNumTimes(\"*\", 3) === \"***\", 'message: <code>repeatStringNumTimes(\"*\", 3)</code> should return <code>\"***\"</code>.');", | ||
+ "assert(repeatStringNumTimes(\"abc\", 3) === \"abcabcabc\", 'message: <code>repeatStringNumTimes(\"abc\", 3)</code> should return <code>\"abcabcabc\"</code>.');", | ||
+ "assert(repeatStringNumTimes(\"abc\", 4) === \"abcabcabcabc\", 'message: <code>repeatStringNumTimes(\"abc\", 4)</code> should return <code>\"abcabcabcabc\"</code>.');", | ||
+ "assert(repeatStringNumTimes(\"abc\", 1) === \"abc\", 'message: <code>repeatStringNumTimes(\"abc\", 1)</code> should return <code>\"abc\"</code>.');", | ||
+ "assert(repeatStringNumTimes(\"*\", 8) === \"********\", 'message: <code>repeatStringNumTimes(\"*\", 8)</code> should return <code>\"********\"</code>.');", | ||
+ "assert(repeatStringNumTimes(\"abc\", -2) === \"\", 'message: <code>repeatStringNumTimes(\"abc\", -2)</code> should return <code>\"\"</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function repeatStringNumTimes(str, num) {\n if (num < 0) return '';\n return num === 1 ? str : str + repeatStringNumTimes(str, num-1);\n}\n\nrepeatStringNumTimes('abc', 3);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Global String Object" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Repite el texto Repite el texto", | ||
+ "titleEs": "Repite el texto Repite el texto", | ||
"descriptionEs": [ | ||
"Repite una cadena de texto dada (primer argumento) <code>num</code> veces (segundo argumento). Retorna una cadena de texto vacía si <code>num</code> es un número negativo.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
@@ -399,37 +399,37 @@ | ||
"id": "ac6993d51946422351508a41", | ||
"title": "Truncate a string", | ||
"description": [ | ||
- "Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a \"...\" ending.", | ||
- "Note that the three dots at the end add to the string length.", | ||
- "If the <code>num</code> is less than or equal to 3, then the length of the three dots is not added to the string length.", | ||
+ "Truncate a string (first argument) if it is longer than the given maximum string length (second argument). Return the truncated string with a <code>...</code> ending.", | ||
+ "Note that inserting the three dots to the end will add to the string length.", | ||
+ "However, if the given maximum string length <code>num</code> is less than or equal to 3, then the addition of the three dots does not add to the string length in determining the truncated string.", | ||
"Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function truncate(str, num) {", | ||
+ "function truncateString(str, num) {", | ||
" // Clear out that junk in your trunk", | ||
" return str;", | ||
"}", | ||
"", | ||
- "truncate(\"A-tisket a-tasket A green and yellow basket\", 11);" | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function truncate(str, num) {\n if(str.length > num ) {\n if(num > 3) {\n return str.slice(0, num - 3) + '...';\n } else {\n return str.slice(0,num) + '...';\n }\n } \n return str;\n}" | ||
+ "truncateString(\"A-tisket a-tasket A green and yellow basket\", 11);" | ||
], | ||
"tests": [ | ||
- "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');", | ||
- "assert(truncate(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncate(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');", | ||
- "assert(truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) === \"A-tisket a-tasket A green and yellow basket\", 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length)</code> should return \"A-tisket a-tasket A green and yellow basket\".');", | ||
- "assert(truncate('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket', 'message: <code>truncate(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length + 2)</code> should return \"A-tisket a-tasket A green and yellow basket\".');", | ||
- "assert(truncate(\"A-\", 1) === \"A...\", 'message: <code>truncate(\"A-\", 1)</code> should return \"A...\".');", | ||
- "assert(truncate(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncate(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');" | ||
+ "assert(truncateString(\"A-tisket a-tasket A green and yellow basket\", 11) === \"A-tisket...\", 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", 11)</code> should return \"A-tisket...\".');", | ||
+ "assert(truncateString(\"Peter Piper picked a peck of pickled peppers\", 14) === \"Peter Piper...\", 'message: <code>truncateString(\"Peter Piper picked a peck of pickled peppers\", 14)</code> should return \"Peter Piper...\".');", | ||
+ "assert(truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length) === \"A-tisket a-tasket A green and yellow basket\", 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length)</code> should return \"A-tisket a-tasket A green and yellow basket\".');", | ||
+ "assert(truncateString('A-tisket a-tasket A green and yellow basket', 'A-tisket a-tasket A green and yellow basket'.length + 2) === 'A-tisket a-tasket A green and yellow basket', 'message: <code>truncateString(\"A-tisket a-tasket A green and yellow basket\", \"A-tisket a-tasket A green and yellow basket\".length + 2)</code> should return \"A-tisket a-tasket A green and yellow basket\".');", | ||
+ "assert(truncateString(\"A-\", 1) === \"A...\", 'message: <code>truncateString(\"A-\", 1)</code> should return \"A...\".');", | ||
+ "assert(truncateString(\"Absolutely Longer\", 2) === \"Ab...\", 'message: <code>truncateString(\"Absolutely Longer\", 2)</code> should return \"Ab...\".');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function truncateString(str, num) {\n if(str.length > num ) {\n if(num > 3) {\n return str.slice(0, num - 3) + '...';\n } else {\n return str.slice(0,num) + '...';\n }\n } \n return str;\n}" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.slice()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Trunca una cadena de texto", | ||
+ "titleEs": "Trunca una cadena de texto", | ||
"descriptionEs": [ | ||
"Trunca una cadena de texto (primer argumento) si su longitud es mayor que un máximo de caracteres dado (segundo argumento). Devuelve la cadena de texto truncada con una terminación \"...\".", | ||
"Ten en cuenta que los tres puntos al final también se cuentan dentro de la longitud de la cadena de texto.", | ||
@@ -445,32 +445,32 @@ | ||
"Remember to use <a href=\"//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck\" target=\"_blank\">Read-Search-Ask</a> if you get stuck. Write your own code." | ||
], | ||
"challengeSeed": [ | ||
- "function chunk(arr, size) {", | ||
+ "function chunkArrayInGroups(arr, size) {", | ||
" // Break it up.", | ||
" return arr;", | ||
"}", | ||
"", | ||
- "chunk([\"a\", \"b\", \"c\", \"d\"], 2);" | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function chunk(arr, size) {\n var out = [];\n for (var i = 0; i < arr.length; i+=size) {\n out.push(arr.slice(i,i+size));\n }\n return out;\n}\n\nchunk(['a', 'b', 'c', 'd'], 2);\n" | ||
+ "chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2);" | ||
], | ||
"tests": [ | ||
- "assert.deepEqual(chunk([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: <code>chunk([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');", | ||
- "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');", | ||
- "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.');", | ||
- "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]], 'message: <code>chunk([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.');", | ||
- "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.');", | ||
- "assert.deepEqual(chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunk([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');" | ||
+ "assert.deepEqual(chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2), [[\"a\", \"b\"], [\"c\", \"d\"]], 'message: <code>chunkArrayInGroups([\"a\", \"b\", \"c\", \"d\"], 2)</code> should return <code>[[\"a\", \"b\"], [\"c\", \"d\"]]</code>.');", | ||
+ "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3), [[0, 1, 2], [3, 4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5]]</code>.');", | ||
+ "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2), [[0, 1], [2, 3], [4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)</code> should return <code>[[0, 1], [2, 3], [4, 5]]</code>.');", | ||
+ "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4), [[0, 1, 2, 3], [4, 5]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5]]</code>.');", | ||
+ "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3), [[0, 1, 2], [3, 4, 5], [6]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)</code> should return <code>[[0, 1, 2], [3, 4, 5], [6]]</code>.');", | ||
+ "assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [[0, 1, 2, 3], [4, 5, 6, 7], [8]], 'message: <code>chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)</code> should return <code>[[0, 1, 2, 3], [4, 5, 6, 7], [8]]</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function chunkArrayInGroups(arr, size) {\n var out = [];\n for (var i = 0; i < arr.length; i+=size) {\n out.push(arr.slice(i,i+size));\n }\n return out;\n}\n\nchunkArrayInGroups(['a', 'b', 'c', 'd'], 2);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Array.push()", | ||
"Array.slice()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "En mil pedazos", | ||
+ "titleEs": "En mil pedazos", | ||
"descriptionEs": [ | ||
"Escribe una función que parta un arreglo (primer argumento) en fragmentos de una longitud dada (segundo argumento) y los devuelva en forma de un arreglo bidimensional.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
@@ -492,10 +492,6 @@ | ||
"", | ||
"slasher([1, 2, 3], 2);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function slasher(arr, howMany) {\n // it doesn't always pay to be first\n return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n" | ||
- ], | ||
"tests": [ | ||
"assert.deepEqual(slasher([1, 2, 3], 2), [3], 'message: <code>slasher([1, 2, 3], 2)</code> should return <code>[3]</code>.');", | ||
"assert.deepEqual(slasher([1, 2, 3], 0), [1, 2, 3], 'message: <code>slasher([1, 2, 3], 0)</code> should return <code>[1, 2, 3]</code>.');", | ||
@@ -505,12 +501,16 @@ | ||
"assert.deepEqual(slasher([1, 2, 'chicken', 3, 'potatoes', 'cheese', 4], 5), ['cheese', 4], 'message: <code>slasher([1, 2, \"chicken\", 3, \"potatoes\", \"cheese\", 4], 5)</code> should return <code>[\"cheese\", 4]</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function slasher(arr, howMany) {\n // it doesn't always pay to be first\n return arr.slice(howMany);\n}\n\nslasher([1, 2, 3], 2);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Array.slice()", | ||
"Array.splice()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Vuélale la cabeza", | ||
+ "titleEs": "Vuélale la cabeza", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva los elementos restantes de un arreglo después de eliminar <code>n</code> elementos de la cabeza.", | ||
"Por cabeza nos referimos al inicio de un arreglo, comenzando por el índice 0.", | ||
@@ -534,10 +534,6 @@ | ||
"", | ||
"mutation([\"hello\", \"hey\"]);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function mutation(arr) {\n var hash = Object.create(null);\n arr[0].toLowerCase().split('').forEach(function(c) {\n hash[c] = true;\n });\n return !arr[1].toLowerCase().split('').filter(function(c) {\n return !hash[c];\n }).length;\n}\n\nmutation(['hello', 'hey']);\n" | ||
- ], | ||
"tests": [ | ||
"assert(mutation([\"hello\", \"hey\"]) === false, 'message: <code>mutation([\"hello\", \"hey\"])</code> should return false.');", | ||
"assert(mutation([\"hello\", \"Hello\"]) === true, 'message: <code>mutation([\"hello\", \"Hello\"])</code> should return true.');", | ||
@@ -549,11 +545,15 @@ | ||
"assert(mutation([\"hello\", \"neo\"]) === false, 'message: <code>mutation([\"hello\", \"neo\"])</code> should return false.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function mutation(arr) {\n var hash = Object.create(null);\n arr[0].toLowerCase().split('').forEach(function(c) {\n hash[c] = true;\n });\n return !arr[1].toLowerCase().split('').filter(function(c) {\n return !hash[c];\n }).length;\n}\n\nmutation(['hello', 'hey']);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"String.indexOf()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Mutaciones", | ||
+ "titleEs": "Mutaciones", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva <code>true</code> si la cadena de texto del primer elemento de un arreglo contiene todas las letras de la cadena de texto del segundo elemento del arreglo.", | ||
"Por ejemplo, <code>[\"hello\", \"Hello\"]</code>, debe devolver <code>true</code> porque todas las letras en la segunda cadena de texto están presentes en la primera, sin distinguir entre mayúsculas y minúsculas.", | ||
@@ -578,10 +578,6 @@ | ||
"", | ||
"bouncer([7, \"ate\", \"\", false, 9]);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function bouncer(arr) {\n // Don't show a false ID to this bouncer.\n return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n" | ||
- ], | ||
"tests": [ | ||
"assert.deepEqual(bouncer([7, \"ate\", \"\", false, 9]), [7, \"ate\", 9], 'message: <code>bouncer([7, \"ate\", \"\", false, 9])</code> should return <code>[7, \"ate\", 9]</code>.');", | ||
"assert.deepEqual(bouncer([\"a\", \"b\", \"c\"]), [\"a\", \"b\", \"c\"], 'message: <code>bouncer([\"a\", \"b\", \"c\"])</code> should return <code>[\"a\", \"b\", \"c\"]</code>.');", | ||
@@ -589,12 +585,16 @@ | ||
"assert.deepEqual(bouncer([1, null, NaN, 2, undefined]), [1, 2], 'message: <code>bouncer([1, null, NaN, 2, undefined])</code> should return <code>[1, 2]</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function bouncer(arr) {\n // Don't show a false ID to this bouncer.\n return arr.filter(function(e) {return e;});\n}\n\nbouncer([7, 'ate', '', false, 9]);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Boolean Objects", | ||
"Array.filter()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Detector de mentiras", | ||
+ "titleEs": "Detector de mentiras", | ||
"descriptionEs": [ | ||
"Remueve todos los valores falsy de un arreglo dado", | ||
"En javascript, los valores falsy son los siguientes: <code>false</code>, <code>null</code>, <code>0</code>, <code>\"\"</code>, <code>undefined</code>, y <code>NaN</code>.", | ||
@@ -616,10 +616,6 @@ | ||
"", | ||
"destroyer([1, 2, 3, 1, 2, 3], 2, 3);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function destroyer(arr) {\n var hash = Object.create(null);\n [].slice.call(arguments, 1).forEach(function(e) {\n hash[e] = true;\n });\n // Remove all the values\n return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n" | ||
- ], | ||
"tests": [ | ||
"assert.deepEqual(destroyer([1, 2, 3, 1, 2, 3], 2, 3), [1, 1], 'message: <code>destroyer([1, 2, 3, 1, 2, 3], 2, 3)</code> should return <code>[1, 1]</code>.');", | ||
"assert.deepEqual(destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3), [1, 5, 1], 'message: <code>destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)</code> should return <code>[1, 5, 1]</code>.');", | ||
@@ -628,12 +624,16 @@ | ||
"assert.deepEqual(destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53), [\"hamburger\"], 'message: <code>destroyer([\"tree\", \"hamburger\", 53], \"tree\", 53)</code> should return <code>[\"hamburger\"]</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function destroyer(arr) {\n var hash = Object.create(null);\n [].slice.call(arguments, 1).forEach(function(e) {\n hash[e] = true;\n });\n // Remove all the values\n return arr.filter(function(e) { return !(e in hash);});\n}\n\ndestroyer([1, 2, 3, 1, 2, 3], 2, 3);\n" | ||
+ ], | ||
"MDNlinks": [ | ||
"Arguments object", | ||
"Array.filter()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Buscar y destruir", | ||
+ "titleEs": "Buscar y destruir", | ||
"descriptionEs": [ | ||
"Se te proveerá un arreglo inicial (el primer argumento en la función <code>destroyer</code>), seguido por uno o más argumentos. Elimina todos los elementos del arreglo inicial que tengan el mismo valor que el resto de argumentos.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
@@ -656,10 +656,6 @@ | ||
"", | ||
"where([40, 60], 50);" | ||
], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function where(arr, num) {\n arr = arr.sort(function(a, b){return a-b;});\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] >= num)\n {\n return i;\n }\n }\n return arr.length;\n}" | ||
- ], | ||
"tests": [ | ||
"assert(where([10, 20, 30, 40, 50], 35) === 3, 'message: <code>where([10, 20, 30, 40, 50], 35)</code> should return <code>3</code>.');", | ||
"assert(where([10, 20, 30, 40, 50], 30) === 2, 'message: <code>where([10, 20, 30, 40, 50], 30)</code> should return <code>2</code>.');", | ||
@@ -670,11 +666,15 @@ | ||
"assert(where([2, 5, 10], 15) === 3, 'message: <code>where([2, 5, 10], 15)</code> should return <code>3</code>.');" | ||
], | ||
"type": "bonfire", | ||
+ "isRequired": true, | ||
+ "solutions": [ | ||
+ "function where(arr, num) {\n arr = arr.sort(function(a, b){return a-b;});\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] >= num)\n {\n return i;\n }\n }\n return arr.length;\n}" | ||
+ ], | ||
"MDNlinks": [ | ||
"Array.sort()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "¿Cuál es mi asiento?", | ||
+ "titleEs": "¿Cuál es mi asiento?", | ||
"descriptionEs": [ | ||
"Devuelve el menor índice en el que un valor (segundo argumento) debe ser insertado en un arreglo (primer argumento) una vez ha sido ordenado.", | ||
"Por ejemplo, where([1,2,3,4], 1.5) debe devolver 1 porque el segundo argumento de la función (1.5) es mayor que 1 (con índice 0 en el arreglo), pero menor que 2 (con índice 1).", | ||
@@ -692,8 +692,6 @@ | ||
"All letters will be uppercase. Do not transform any non-alphabetic character (i.e. spaces, punctuation), but do pass them on.", | ||
"Remember to use <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> if you get stuck. Try to pair program. Write your own code." | ||
], | ||
- "isRequired": true, | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"function rot13(str) { // LBH QVQ VG!", | ||
" ", | ||
@@ -721,14 +719,16 @@ | ||
"String.fromCharCode()" | ||
], | ||
"challengeType": 5, | ||
- "nameEs": "Cifrado César", | ||
+ "titleEs": "Cifrado César", | ||
"descriptionEs": [ | ||
"Uno de los <dfn>cifrados</dfn> más simples y ampliamente conocidos es el <code>cifrado César</code>, también llamado <code>cifrado por desplazamiento</code>. En un <code>cifrado por desplazamiento</code> los significados de las letras se desplazan por una cierta cantidad.", | ||
"Un uso moderno común es el cifrado <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> , donde los valores de las letras se desplazan 13 espacios. De esta forma 'A' ↔ 'N', 'B' ↔ 'O' y así.", | ||
"Crea una función que tome una cadena de texto cifrada en <a href=\"https://en.wikipedia.org/wiki/ROT13\" target='_blank'>ROT13</a> como argumento y que devuelva la cadena de texto decodificada.", | ||
"Todas las letras que se te pasen van a estar en mayúsculas. No transformes ningún caracter no-alfabético (por ejemplo: espacios, puntuación). Simplemente pásalos intactos.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ] | ||
+ ], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016" | ||
} | ||
] | ||
} |
View
292
seed/challenges/01-front-end-development-certification/basic-javascript.json
@@ -31,7 +31,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Agrega comentarios a tu código JavaScript", | ||
+ "titleEs": "Agrega comentarios a tu código JavaScript", | ||
"descriptionEs": [ | ||
"Los comentarios son líneas de código que el computador ignorará intencionalmente. Los comentarios son una gran forma de dejarte notas a ti mismo y a otras personas que luego tendrán que averiguar lo que hace que el código. ", | ||
"Vamos a echar un vistazo a las dos maneras en las que puedes agregar tus comentarios en JavaScript.", | ||
@@ -76,7 +76,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Declara variables en JavaScript", | ||
+ "titleEs": "Declara variables en JavaScript", | ||
"descriptionEs": [ | ||
"Cuando almacenamos datos en una <code>estructura de datos</code>, la llamamos una <code>variable</code>. Estas variables no son diferentes de las variables x e y que utilizas en matemáticas. ", | ||
"Vamos a crear nuestra primera variable y a llamarla \"myName\".", | ||
@@ -122,7 +122,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Almacenar valores con el operador igual", | ||
+ "titleEs": "Almacenar valores con el operador igual", | ||
"descriptionEs": [ | ||
"En JavaScript, puedes almacenar un valor en una variable con la <dfn>asignación</dfn> o con el operador <code>igual</code> (<code>=</code>).", | ||
"<code>miVariable = 5;</code>", | ||
@@ -164,7 +164,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Inicializar variables con el operador igual", | ||
+ "titleEs": "Inicializar variables con el operador igual", | ||
"descriptionEs": [ | ||
"Es común <dfn>inicializar</dfn> una variable a un valor inicial en la misma línea que es declarada.", | ||
"<code>var miVar = 0;</code>", | ||
@@ -209,7 +209,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Entendiendo variables sin inicializar", | ||
+ "titleEs": "Entendiendo variables sin inicializar", | ||
"descriptionEs": [ | ||
"Cuando las variables de JavaScript son declaradas, ellas tienen un valor inicial de <code>undefined</code>. Si tu haces una operación matematica sobre una variable <code>undefined</code> tu resultado sera <code>NaN</code> el cual significa <dfn>\"Not a Number\"</dfn> es decir \"No es un número\". Si tu concatenas una cadena con una variable <code>undefined</code>, vas a obtener una <dfn>cadena</dfn> literal de <code>\"undefined\"</code>.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -254,7 +254,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Entendiendo la distinción en variables", | ||
+ "titleEs": "Entendiendo la distinción en variables", | ||
"descriptionEs": [ | ||
"En JavaScript todas las variables y nombres de funciones distinguen entre mayúsculas y minúsculas. Esto significa que la capitalización importa.", | ||
"<code>MIVAR</code> no es lo mismo que <code>MiVar</code> o <code>mivar</code>. Esto hace posible tener múltiples variables distintas con el mismo nombre pero de diferente manera. Es fuertemente recomendado por el bien de la claridad, que tu <em>no</em> uses esta característica del lenguaje.", | ||
@@ -296,7 +296,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Suma dos números con JavaScript", | ||
+ "titleEs": "Suma dos números con JavaScript", | ||
"descriptionEs": [ | ||
"Intentemos sumar dos números con JavaScript.", | ||
"JavaScript utiliza el símbolo <code>+</code> para la adición.", | ||
@@ -334,7 +334,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Resta un número de otro con JavaScript", | ||
+ "titleEs": "Resta un número de otro con JavaScript", | ||
"descriptionEs": [ | ||
"También podemos restar un número de otro.", | ||
"JavaScript utiliza el símbolo <code>-</code> de sustracción", | ||
@@ -371,7 +371,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Multiplica dos números con JavaScript", | ||
+ "titleEs": "Multiplica dos números con JavaScript", | ||
"descriptionEs": [ | ||
"También podemos multiplicar un número por otro.", | ||
"JavaScript utiliza el símbolo <code>*</code> de la multiplicación.", | ||
@@ -408,7 +408,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Divide un número por otro con JavaScript", | ||
+ "titleEs": "Divide un número por otro con JavaScript", | ||
"descriptionEs": [ | ||
"También podemos dividir un número por otro.", | ||
"JavaScript utiliza el símbolo <code>/</code> para dividir.", | ||
@@ -448,7 +448,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Incrementa un número con JavaScript", | ||
+ "titleEs": "Incrementa un número con JavaScript", | ||
"descriptionEs": [ | ||
"Tu puedes fácilmente <dfn>incrementar</dfn> o agregar uno a una variable con el operador <code>++</code>.", | ||
"<code>i++</code>", | ||
@@ -492,7 +492,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Decrementar un número con JavaScript", | ||
+ "titleEs": "Decrementar un número con JavaScript", | ||
"descriptionEs": [ | ||
"Fácilmente puedes <dfn>decrementar</dfn> o disminuir una variable por uno con el operador <code>--</code>.", | ||
"<code>i--;</code>", | ||
@@ -531,7 +531,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Crea números decimales con JavaScript", | ||
+ "titleEs": "Crea números decimales con JavaScript", | ||
"descriptionEs": [ | ||
"Podemos almacenar números decimales en variables también. Los números decimales a veces son referidos como números de <dfn>punto flotante</dfn> o <dfn>flotantes</dfn>.", | ||
"<strong>Nota</strong><br>No todos los números reales pueden ser exactamente representados en <dfn>punto flotante</dfn>. Esto puede conducir a errores de redondeo. <a href=\"https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems\" target=\"_blank\">Detalles aquí</a>.", | ||
@@ -565,7 +565,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Multiplicar dos decimales con JavaScript", | ||
+ "titleEs": "Multiplicar dos decimales con JavaScript", | ||
"descriptionEs": [ | ||
"En JavaScript, también puedes realizar cálculos con números decimales, al igual que con números enteros.", | ||
"Vamos a multiplicar dos números decimales para obtener su producto.", | ||
@@ -598,7 +598,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Divide un número decimal por otro con JavaScript", | ||
+ "titleEs": "Divide un número decimal por otro con JavaScript", | ||
"descriptionEs": [ | ||
"Ahora vamos a dividir un decimal por otro.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -637,7 +637,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Encontrar un cociente en JavaScript", | ||
+ "titleEs": "Encontrar un cociente en JavaScript", | ||
"descriptionEs": [ | ||
"El operador <dfn>residuo</dfn> <code>%</code> da el residuo de la división de dos números.", | ||
"<strong>Ejemplo</strong>", | ||
@@ -689,7 +689,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Asignación con más", | ||
+ "titleEs": "Asignación con más", | ||
"descriptionEs": [ | ||
"En programación, es común usar asignaciones para modificar el contenido de una variable. Recuerda que todo lo de la derecha del signo igual es evaluado primero, así podemos decir que:", | ||
"<code>miVar = miVar + 5;</code>", | ||
@@ -740,7 +740,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Asignación con menos", | ||
+ "titleEs": "Asignación con menos", | ||
"descriptionEs": [ | ||
"Al igual que el operador <code>+=</code>, <code>-=</code> substrae un número de una variable.", | ||
"<code>miVar = miVar - 5;</code>", | ||
@@ -790,7 +790,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Asignación con veces igual", | ||
+ "titleEs": "Asignación con veces igual", | ||
"descriptionEs": [ | ||
"El operador <code>*=</code> multiplica una variable por un número.", | ||
"<code>miVar = miVar * 5;</code>", | ||
@@ -839,7 +839,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Asignación con división", | ||
+ "titleEs": "Asignación con división", | ||
"descriptionEs": [ | ||
"El operador <code>/=</code> divide una variable por otro número.", | ||
"<code>miVar = miVar / 5;</code>", | ||
@@ -887,7 +887,7 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Convierte celsius a fahrenheit", | ||
+ "titleEs": "Convierte celsius a fahrenheit", | ||
"descriptionEs": [ | ||
"Para probar tu aprendizaje, crearás una solucion \"desde cero\". Coloca tu código entre las líneas indicadas y este será probado contra multiples casos de prueba.", | ||
"El algoritmo para convertir de Celsius a Fahrenheit consiste en multiplicar la temperatura en grados Celsius por 9/5 y al resultado agregarle 32.", | ||
@@ -926,7 +926,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Declara variables tipo cadena", | ||
+ "titleEs": "Declara variables tipo cadena", | ||
"descriptionEs": [ | ||
"En el reto anterior, se utilizó el código <code>myName var = \"su nombre\"</code>. Esto es lo que llamamos una variable tipo <code>cadena</code>. No es nada más que una \"cadena\" de caracteres. Las cadenas en JavaScript siempre se encierran entre comillas. ", | ||
"Ahora vamos a crear dos nuevas variables tipo cadena: <code>myFirstName</code> y <code>myLastName</code> y asignarles los valores de tu nombre y tu apellido, respectivamente." | ||
@@ -969,7 +969,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Escapar comillas en cadenas de texto", | ||
+ "titleEs": "Escapar comillas en cadenas de texto", | ||
"descriptionEs": [ | ||
"Cuando estás definiendo una cadena debes iniciar y terminar con apóstrofes o comillas. ¿Qué pasa cuando necesitas una comilla: <code>\"</code> o <code>'</code> dentro de tu cadena?", | ||
"En JavaScript, tu puedes <dfn>escapar</dfn> unas comillas para diferenciarlas de las comillas del final de la cadena colocando una <dfn>barra invertida</dfn> (<code>\\</code>) antes de la cita.", | ||
@@ -1011,7 +1011,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Citando cadenas con comillas simples", | ||
+ "titleEs": "Citando cadenas con comillas simples", | ||
"descriptionEs": [ | ||
"Los valores de <dfn>Cadenas</dfn> en JavaScript pueden ser escritos con comillas o apóstrofes, siempre y cuando inicien y terminen con el mismo tipo de cita. A diferencia de algunos lenguajes, apóstrofes y comillas son funcionalmente identicas en JavaScript.", | ||
"<code>\"Esta cadena tiene \\\"comillas\\\" en esta\"</code>", | ||
@@ -1051,7 +1051,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Secuencias de escape en cadenas", | ||
+ "titleEs": "Secuencias de escape en cadenas", | ||
"descriptionEs": [ | ||
"Las comillas no son el único caracter que puede ser <dfn>escapado</dfn> dentro de una cadena. Aquí ahí una tabla de secuencias de escape comunes:", | ||
"<table class=\"table table-striped\"><thead><tr><th>Código</th><th>Salida</th></tr></thead><tbody><tr><td>\\'</td><td>apostrofe</td></tr><tr><td>\\\"</td><td>comilla</td></tr><tr><td>\\\\</td><td>barra invertida</td></tr><tr><td>\\n</td><td>nueva línea</td></tr><tr><td>\\r</td><td>retorno de carro</td></tr><tr><td>\\t</td><td>tabulación</td></tr><tr><td>\\b</td><td>retroceso</td></tr><tr><td>\\f</td><td>salto de página</td></tr></tbody></table>", | ||
@@ -1102,7 +1102,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Concatenar cadenas con el operador más", | ||
+ "titleEs": "Concatenar cadenas con el operador más", | ||
"descriptionEs": [ | ||
"En JavaScript, cuando el operador <code>+</code> es usado con un valor de <code>Cadena</code>, este es llamado el operador <dfn>concatenación</dfn>. Tu puedes construir una nueva cadena de otras cadenas <dfn>concatenandolas</dfn> juntas.", | ||
"<strong>Ejemplo</strong>", | ||
@@ -1151,7 +1151,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Concatenar cadenas con el operador mas igual", | ||
+ "titleEs": "Concatenar cadenas con el operador mas igual", | ||
"descriptionEs": [ | ||
"Nosotros también podemos usar el operador <code>+=</code> para <dfn>concatenar</dfn> una cadena al final de una variable de cadena existente. Esto puede ser muy útil para romper una cadena larga sobre varias líneas.", | ||
"<strong>Nota</strong><br>Cuidado con los espacios. La concatenación no agrega espacios entre cadenas concatenadas, así que necesitarás añadirlos tu mismo.", | ||
@@ -1204,7 +1204,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Construir cadenas con variables", | ||
+ "titleEs": "Construir cadenas con variables", | ||
"descriptionEs": [ | ||
"A veces necesitarás construir una cadena, al estilo <a href=\"https://en.wikipedia.org/wiki/Mad_Libs\" target=\"_blank\">Mad Libs</a>. Mediante el uso del operador concatenación (<code>+</code>), puedes insertar una o más variables dentro de una cadena que estés construyendo.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -1257,7 +1257,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Anexando variables a cadenas", | ||
+ "titleEs": "Anexando variables a cadenas", | ||
"descriptionEs": [ | ||
"Al igual que podemos construir una cadena en múltiples líneas a partir de cadenas <dfn>literales</dfn>, nosotros podemos ademas anexar variables a una cadena usando el operador más igual (<code>+=</code>).", | ||
"<h4>Instructiones</h4>", | ||
@@ -1303,7 +1303,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena", | ||
+ "titleEs": "Comprueba la propiedad longitud (length) de una variable tipo cadena", | ||
"descriptionEs": [ | ||
"Las <code>estructuras de datos</code> tienen <code>propiedades</code>. Por ejemplo, las <code>cadenas</code> tienen una propiedad llamada <code>.length </code> que te dirá cuántos caracteres hay en la cadena.", | ||
"Por ejemplo, si creamos una variable <code>var firstName=\"Charles\"</code>, podemos averiguar la longitud de la cadena \"Charles\" usando la propiedad <code>firstName.length</code>. ", | ||
@@ -1348,7 +1348,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena", | ||
+ "titleEs": "Usa la notación de corchetes para encontrar el primer carácter de una cadena", | ||
"descriptionEs": [ | ||
"La <code>notación de corchetes</code> es una forma de obtener el caracter en un <code>índice</code> específico de una cadena.", | ||
"Los computadoras no empiezan a contar desde 1 como hacen los humanos. Comienzan en 0 ", | ||
@@ -1392,7 +1392,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Comprender la inmutabilidad de cadenas", | ||
+ "titleEs": "Comprender la inmutabilidad de cadenas", | ||
"descriptionEs": [ | ||
"En JavaScript, los valores de las <code>Cadenas</code> son <dfn>inmutables</dfn>, lo cual significa que ellos no pueden ser alterados una vez creados.", | ||
"Por ejemplo, el siguiente código:", | ||
@@ -1438,7 +1438,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena", | ||
+ "titleEs": "Usar la notación de corchetes para encontrar el n-ésimo caracter en una cadena", | ||
"descriptionEs": [ | ||
"También puede usar <code>notación de corchetes</code> para obtener el caracter en otras posiciones dentro de una cadena.", | ||
"Recuerda que los computadores empiezan a contar a 0, por lo que el primer caracter es en realidad el caracter cero.", | ||
@@ -1482,7 +1482,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usa notación de corchetes para encontrar el último caracter de una cadena", | ||
+ "titleEs": "Usa notación de corchetes para encontrar el último caracter de una cadena", | ||
"descriptionEs": [ | ||
"Con el fin de conseguir la última letra de una cadena, puedes restar uno a la longitud de la cadena.", | ||
"Por ejemplo, si <code>var firstName = \"Charles\"</code>, se puede obtener la última letra usando <code>firstName[firstName.length - 1]</code>. ", | ||
@@ -1526,7 +1526,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena", | ||
+ "titleEs": "Usa notación de corchetes para encontrar el n-ésimo último caracter de una cadena", | ||
"descriptionEs": [ | ||
"Puede utilizar el mismo principio utilizamos para recuperar el último caracter de una cadena para recuperar el n-ésimo último caracter.", | ||
"Por ejemplo, se puede obtener el valor de la tercera última letra de la cadena <code>var firstName = \"Charles\"</code> utilizando <code>firstName[firstName.length - 3]</code> ", | ||
@@ -1572,7 +1572,7 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Espacios en blanco de palabras", | ||
+ "titleEs": "Espacios en blanco de palabras", | ||
"descriptionEs": [ | ||
"Ahora usaremos nuestro conocimiento de cadenas para construir un juego de palabras estilo \"<a href='https://en.wikipedia.org/wiki/Mad_Libs' target='_blank'>Mad Libs</a>\" que llamaremos \"Espacios en Blanco de Palabras\". Vas a crear unas oraciones estilo (opcionalmente graciosa) \"Llena los espacios en blanco\".", | ||
"Necesitarás usar operadores de cadenas para construir una nueva cadena <code>result</code>, usando las variables previstas: <code>myNoun</code>, <code>myAdjective</code>, <code>myVerb</code> y <code>myAdverb</code>.", | ||
@@ -1611,7 +1611,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript", | ||
+ "titleEs": "Almacena múltiples valores en una variable utilizando vectores en JavaScript", | ||
"descriptionEs": [ | ||
"Con las variables tipo <code>vector</code> (o en inglés <code>array</code>) podemos almacenar diversos datos en un solo lugar.", | ||
"Empiezas la declaración de un vector con un corchete de apertura, y terminas con un corchete de cierre, y pones una coma entre cada entrada, así: <code>var sandwich = [\"mantequilla de maní\", \"jalea\" , \"pan\"]</code>. ", | ||
@@ -1647,7 +1647,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Anida un vector dentro de otro vector", | ||
+ "titleEs": "Anida un vector dentro de otro vector", | ||
"descriptionEs": [ | ||
"También puedes anidar vectores dentro de otros vectores, como este: <code>[[\"Bulls\", 23], [\"White Sox\", 45]]</code>.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -1687,7 +1687,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Accede a los datos de un vector mediante índices", | ||
+ "titleEs": "Accede a los datos de un vector mediante índices", | ||
"descriptionEs": [ | ||
"Podemos acceder a los datos dentro de los vectores usando <code>índices</code>.", | ||
"Los índices del vector se escriben en la misma notación con corchetes usado con cadenas, excepto que en lugar de especificar un caracter, especifican un elemento del vector.", | ||
@@ -1733,7 +1733,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Modifica datos de un vector usando índices", | ||
+ "titleEs": "Modifica datos de un vector usando índices", | ||
"descriptionEs": [ | ||
"También podemos modificar los datos almacenados en vectores usando índices.", | ||
"Por ejemplo:", | ||
@@ -1774,7 +1774,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a vectores multi-dimensionales con índices", | ||
+ "titleEs": "Acceder a vectores multi-dimensionales con índices", | ||
"descriptionEs": [ | ||
"Una manera de pensar un vector <dfn>multi-dimensional</dfn>, es como un <em>vector de vectores</em>. Cuando usas corchetes para acceder a tu vector, el primer conjunto de brackets se refiere a las entradas en el vector más externo y cada nivel subsecuente de brackets se refiere al siguiente nivel de vectores internos.", | ||
"<strong>Ejemplo</strong>", | ||
@@ -1817,7 +1817,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Manipula vectores con push()", | ||
+ "titleEs": "Manipula vectores con push()", | ||
"descriptionEs": [ | ||
"No sólo se pueden sacar datos del final de un vector con <code>pop()</code>, también puedes empujar (<code>push()</code>) datos al final del vector.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -1861,7 +1861,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Manipula vectores con pop()", | ||
+ "titleEs": "Manipula vectores con pop()", | ||
"descriptionEs": [ | ||
"Otra forma de cambiar los datos en un vector es con la función <code>.pop()</code>.", | ||
"<code>.pop()</code> se utiliza para \"sacar\" el valor final de un vector. Podemos almacenar el valor \"sacado\" asignando <code>pop</code> a una variable por ejemplo durante su declaración.", | ||
@@ -1905,7 +1905,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Manipula vectores con shift()", | ||
+ "titleEs": "Manipula vectores con shift()", | ||
"descriptionEs": [ | ||
"<code>pop()</code> siempre elimina el último elemento de un vector. ¿Qué pasa si quieres quitar el primero?", | ||
"Ahí es donde entra <code>.shift()</code>. Funciona igual que <code>.pop ()</code>, excepto que elimina el primer elemento en lugar del pasado. ", | ||
@@ -1948,7 +1948,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Manipula vectores con unshift()", | ||
+ "titleEs": "Manipula vectores con unshift()", | ||
"descriptionEs": [ | ||
"No sólo se puedes <code>correr</code> (shift) elementos del comienzo de un vector, también puedes <code>descorrerlos</code> (unshift) al comienzo.", | ||
"<code>unshift()</code> funciona exactamente igual que <code>push()</code>, pero en lugar de añadir el elemento al final del vector, <code>unshift()</code> añade el elemento al comienzo del vector. ", | ||
@@ -2010,7 +2010,7 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Lista de compras", | ||
+ "titleEs": "Lista de compras", | ||
"descriptionEs": [ | ||
"Crea una lista de compras en la variable <code>myList</code>. La lista tiene que ser un vector multidimensional conteniendo varios sub-vectores.", | ||
"El primer elemento en cada sub-vector debe contener una cadena con el nombre del elemento. El segundo elemento debe ser un número representando la cantidad i. e.", | ||
@@ -2082,7 +2082,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Escribe código JavaScript reutilizable con funciones", | ||
+ "titleEs": "Escribe código JavaScript reutilizable con funciones", | ||
"descriptionEs": [ | ||
"En JavaScript, podemos dividir nuestro código en partes reutilizables llamadas funciones.", | ||
"He aquí un ejemplo de una función:", | ||
@@ -2162,7 +2162,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Pasando valores a funciones con argumentos", | ||
+ "titleEs": "Pasando valores a funciones con argumentos", | ||
"descriptionEs": [ | ||
"Los <dfn>parámetros</dfn> son variables que actúan como marcadores de lugar para los valores que han de ser entrada para una función cuando esta es llamada. Cuando una función es definida, es típicamente definida con uno o más parámetros. Los valores actuales que son entrada (or <dfn>\"pasados\"</dfn>) dentro de una función cuando esta es llamada son concidos como <dfn>argumentos</dfn>.", | ||
"Aquí hay una función con dos parámetros, <code>param1</code> y <code>param2</code>:", | ||
@@ -2246,7 +2246,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Alcance global y funciones", | ||
+ "titleEs": "Alcance global y funciones", | ||
"descriptionEs": [ | ||
"En JavaScript, <dfn>alcance</dfn> se referiere a la visibilidad de variables. Las variables que definas fuera de un bloque de una función tienen alcance <dfn>Global</dfn>. Esto significa que ellas pueden ser vistas en todas partes en tu código JavaScript.", | ||
"Las variables que pueden ser usadas sin la palabra clave <code>var</code> son automáticamente creadas en el alcance <code>global</code>. Esto puede tener consecuencias no deseadas en otras partes de tu código o cuando se ejecuta una función de nuevo. Tu siempre deberías declarar tus variables con <code>var</code>.", | ||
@@ -2317,7 +2317,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Alcance local y funciones", | ||
+ "titleEs": "Alcance local y funciones", | ||
"descriptionEs": [ | ||
"Las variables que son declaradas dentro de una función, así como los parámetros de la función tienen alcance <dfn>local</dfn>. Eso significa que solo son visibles dentro de esa función.", | ||
"Aquí está una función <code>myTest</code> con una variable local llamada <code>loc</code>.", | ||
@@ -2364,7 +2364,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Alcance global vs. local en funciones", | ||
+ "titleEs": "Alcance global vs. local en funciones", | ||
"descriptionEs": [ | ||
"Es posible tener variables <dfn>locales</dfn> y <dfn>globales</dfn> con el mismo nombre. Cuando tu haces esto, la variable <code>local</code> toma precedencia sobre la variable <code>global</code>.", | ||
"En este ejemplo:", | ||
@@ -2410,7 +2410,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Retorna un valor desde una función con return", | ||
+ "titleEs": "Retorna un valor desde una función con return", | ||
"descriptionEs": [ | ||
"Podemos pasar valores a una función mediante los <dfn>argumentos</dfn>. Puedes usar una sentencia <code>return</code> para enviar un valor de vuelta de una función.", | ||
"<strong>Ejemplo</strong>", | ||
@@ -2465,7 +2465,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Asignación con un valor retornado", | ||
+ "titleEs": "Asignación con un valor retornado", | ||
"descriptionEs": [ | ||
"Si recuerdas de nuestra discusión de <a href=\"waypoint-storing-values-with-the-equal-operator\" target=\"_blank\">Almacenar Valores con el Operador Igual</a>, todo a la derecha del signo igual es resuelto antes que el valor sea asignado. Esto significa que nosotros podemos tomar el valor de retorno de una función y asignarlo a una variable.", | ||
"Supongamos que tenemos una función pre-definida <code>suma</code> la cual suma dos números, entonces: ", | ||
@@ -2532,11 +2532,11 @@ | ||
"assert(queue([],1) === 1, 'message: <code>queue([], 1)</code> should return <code>1</code>');", | ||
"assert(queue([2],1) === 2, 'message: <code>queue([2], 1)</code> should return <code>2</code>');", | ||
"assert(queue([5,6,7,8,9],1) === 5, 'message: <code>queue([5,6,7,8,9], 1)</code> should return <code>5</code>');", | ||
- "queue(testArr, 10); assert(testArr[4] === 10, 'message: After <code>queue(testArr, 10)</code>, <code>myArr[4]</code> should be <code>10</code>');" | ||
+ "queue(testArr, 10); assert(testArr[4] === 10, 'message: After <code>queue(testArr, 10)</code>, <code>testArr[4]</code> should be <code>10</code>');" | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Hacer cola", | ||
+ "titleEs": "Hacer cola", | ||
"descriptionEs": [ | ||
"En Ciencias de la Computación una <dfn>cola</dfn> es una <dfn>Estructura de Datos</dfn> abstracta donde los elementos son mantenidos en orden. Nuevos elementos pueden ser agregados en la parte trasera de la <code>cola</code> y los elementos viejos son quitados desde el frente de la <code>cola</code>.", | ||
"Escribe una función <code>queue</code> la cual toma un vector (<code>arr</code>) y un número (<code>item</code>) como argumentos. Agrega el número al final del vector, entonces retira el primer elemento del vector. La función queue debe entonces devolver el elemento que se ha eliminado." | ||
@@ -2573,7 +2573,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Entiende los valores booleanos", | ||
+ "titleEs": "Entiende los valores booleanos", | ||
"descriptionEs": [ | ||
"En informática las <code>estructuras de datos</code> son cosas que contienen datos. JavaScript tiene siete de estas. Por ejemplo, la estructura de datos <code>Número</code> contiene números. ", | ||
"Vamos a aprender acerca de la estructura de datos más básica de todas: el <code>Boolean</code>. Los booleanos sólo puede contener el valor verdadero o el valor falso. Son básicamente pequeños interruptores de encendido y apagado. ", | ||
@@ -2630,7 +2630,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usa lógica condicional con instrucciones if y else", | ||
+ "titleEs": "Usa lógica condicional con instrucciones if y else", | ||
"descriptionEs": [ | ||
"Podemos usar instrucciones <code>if</code> (\"if\" es \"si\" en español) en JavaScript para ejecutar código sólo cuando cierta condición se cumpla.", | ||
"Las instrucciones <code>if</code> requieren evaluar algún tipo de condición booleana.", | ||
@@ -2682,7 +2682,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador de igualdad", | ||
+ "titleEs": "La comparación con el operador de igualdad", | ||
"descriptionEs": [ | ||
"Hay muchos <dfn>Operadores de Comparación</dfn> en JavaScript. Todos estos operadores retornan un valor booleano <code>true</code>(verdadero) o <code>false</code>(falso).", | ||
"El operador más básico es el operador de igualdad <code>==</code>. El operador de igualdad compara dos valores y retorna <code>true</code> si son equivalentes o <code>false</code> si no lo son. Nota que la igualdad es diferente de la asignación (<code>=</code>), la cual asigna el valor a la derecha del operador a la variable en la izquierda.", | ||
@@ -2729,7 +2729,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador de estricta igualdad", | ||
+ "titleEs": "La comparación con el operador de estricta igualdad", | ||
"descriptionEs": [ | ||
"Igualdad estricta (<code>===</code>) es la contraparte del operador de igualdad (<code>==</code>). Diferente al operador de igualdad, igualdad estricta prueba los <code>tipos de datos</code> y el valor de los elementos comparados.", | ||
"<strong>Ejemplos</strong>", | ||
@@ -2775,7 +2775,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador de desigualdad", | ||
+ "titleEs": "La comparación con el operador de desigualdad", | ||
"descriptionEs": [ | ||
"El operador de desigualdad (<code>!=</code>) es el opuesto al operador de igualdad. Esto significa \"No Igual a\" y retorna <code>false</code> cuando igualdad retornaría <code>true</code> y <em>viceversa</em>. Como el operador de igualdad, el operador de desigualdad convertirá tipos de datos mientras compara.", | ||
"<strong>Ejemplos</strong>", | ||
@@ -2824,9 +2824,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador de estricta desigualdad", | ||
+ "titleEs": "La comparación con el operador de estricta desigualdad", | ||
"descriptionEs": [ | ||
- "El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.", | ||
+ "El operador de estricta desigualdad (<code>!==</code>) es el opuesto al operador de estricta igualdad. Esto significa \"Estrictamente no Igual\" y retorna <code>false</code>(falso) donde igualdad estricta retornaría <code>true</code>(verdadero) y <em>viceversa</em>. Estricta desigualdad no convertirá tipos de datos.", | ||
"<strong>Ejemplos</strong>", | ||
"<blockquote>3 !== 3 // false<br>3 !== '3' // true<br>4 !== 3 // true</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -2876,9 +2876,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador mayor que", | ||
+ "titleEs": "La comparación con el operador mayor que", | ||
"descriptionEs": [ | ||
- "El operador mayor que (<code>></code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
+ "El operador mayor que (<code>></code>) compara los valores de dos números. Si el número a la izquierda es mayor que el número a la derecha, este returna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
"Al igual que el operador de igualdad, el operador mayor que convertirá tipos de datos de valores mientras los compara.", | ||
"<strong>Ejemplos</strong>", | ||
"<blockquote> 5 > 3 // true<br> 7 > '3' // true<br> 2 > 3 // false<br>'1' > 9 // false</blockquote>", | ||
@@ -2929,9 +2929,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador mayor o ogual", | ||
+ "titleEs": "La comparación con el operador mayor o ogual", | ||
"descriptionEs": [ | ||
- "El operador <code>mayor o igual </code> (<code>>=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
+ "El operador <code>mayor o igual </code> (<code>>=</code>) compara los valores de dos números. Si el número de la izquierda es mayor o igual a el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
"Como el operador de igualdad, el operador <code>mayor o igual</code> convertirá tipos de datos mientras está comparando.", | ||
"<strong>Ejemplos</strong>", | ||
"<blockquote> 6 >= 6 // true<br> 7 >= '3' // true<br> 2 >= 3 // false<br>'7' >= 9 // false</blockquote>", | ||
@@ -2980,9 +2980,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador menor que", | ||
+ "titleEs": "La comparación con el operador menor que", | ||
"descriptionEs": [ | ||
- "El operador <dfn>menor que</dfn> (<code><</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.", | ||
+ "El operador <dfn>menor que</dfn> (<code><</code>) compara los valores de dos números. Si el número a la izquierda es menor que el número de la derecha, este retorna <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso). Como el operador de igualdad, el operador <dfn>menor que</dfn> convierte tipos de datos mientra compara.", | ||
"<strong>Ejemplos</strong>", | ||
"<blockquote> 2 < 5 // true<br>'3' < 7 // true<br> 5 < 5 // false<br> 3 < 2 // false<br>'8' < 4 // false</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -3032,9 +3032,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador menor o igual", | ||
+ "titleEs": "La comparación con el operador menor o igual", | ||
"descriptionEs": [ | ||
- "El operador <code>menor o igual</code> (<code><=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.", | ||
+ "El operador <code>menor o igual</code> (<code><=</code>) compara los valores de dos números. Si el número a la izquierda es menor o igual que el número de la derecha, este retorna <code>true</code>(verdadero). Si el número a la izquierda es mayor que el número de la derecha, este retorna <code>false</code>(falso). Al igual que el operador de igualdad, <code>menor o igual</code> convierte tipos de datos.", | ||
"<strong>Ejemplos</strong>", | ||
"<blockquote> 4 <= 5 // true<br>'7' <= 7 // true<br> 5 <= 5 // true<br> 3 <= 2 // false<br>'8' <= 4 // false</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -3088,9 +3088,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador lógico y", | ||
+ "titleEs": "La comparación con el operador lógico y", | ||
"descriptionEs": [ | ||
- "A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.", | ||
+ "A veces necesitarás probar más de una cosa a la vez. El operador <dfn>lógico y</dfn> (<code>&&</code>) retorna <code>true</code>(verdadero) si y solo si los <dfn>operandos</dfn> a la izquierda y derecha de este son verdaderos.", | ||
"El mismo efecto podría lograrse anidando una sentencia if dentro de otro if:", | ||
"<blockquote>if (num > 5) {<br> if (num < 10) {<br> return \"Yes\";<br> }<br>}<br>return \"No\";</blockquote>", | ||
"solo retornará \"Yes\" si <code>num</code> está entre <code>6</code> y <code>9</code> (6 y 9 incluidos). La misma lógica puede ser escrita como:", | ||
@@ -3148,9 +3148,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "La comparación con el operador lógico o", | ||
+ "titleEs": "La comparación con el operador lógico o", | ||
"descriptionEs": [ | ||
- "El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
+ "El operador <dfn>lógico o</dfn> (<code>||</code>) retorna <code>true</code>(verdadero) si cualquiera de los <dfn>operandos</dfn> es <code>true</code>(verdadero). De otra manera, este retorna <code>false</code>(falso).", | ||
"El patrón de abajo debería ser familiar de los puntos de referencia anteriores:", | ||
"<blockquote>if (num > 10) {<br> return \"No\";<br>}<br>if (num < 5) {<br> return \"No\";<br>}<br>return \"Yes\";</blockquote>", | ||
"retornará \"Yes\" solo si <code>num</code> está entre <code>5</code> y <code>10</code> (5 y 10 incluidos). La misma lógica puede ser escrita como:", | ||
@@ -3204,9 +3204,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Introducción de las sentencias else", | ||
+ "titleEs": "Introducción de las sentencias else", | ||
"descriptionEs": [ | ||
- "Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.", | ||
+ "Cuando una condición de una sentencia <code>if</code> es verdadera, el siguiente bloque de código es ejecutado. ¿Y cuando esa condición es falsa? Normalmente nada pasaría. Con una sentencia <code>else</code>(además), un bloque alternativo de código puede ser ejecutado.", | ||
"<blockquote>if (num > 10) {<br> return \"Más grande que 10\";<br>} else {<br> return \"10 o Menos\";<br>}</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
"Combina las sentencias <code>if</code> dentro de una sola sentencia <code>if/else</code>." | ||
@@ -3253,9 +3253,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Introducción de las sentencias else if", | ||
+ "titleEs": "Introducción de las sentencias else if", | ||
"descriptionEs": [ | ||
- "Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.", | ||
+ "Si tienes múltiples condiciones que deben abordarse, puedes encadenar sentencias <code>if</code> juntas con sentencias <code>else if</code>.", | ||
"<blockquote>if (num > 15) {<br> return \"Más grande que 15\";<br>} else if (num < 5) {<br> return \"Más pequeño que 5\";<br>} else {<br> return \"Entre 5 y 15\";<br>}</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
"Convierte la lógica para usar sentencias <code>else if</code>." | ||
@@ -3301,9 +3301,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Orden lógico en sentencias else if", | ||
+ "titleEs": "Orden lógico en sentencias else if", | ||
"descriptionEs": [ | ||
- "El orden es importante en las sentencia <code>if</code> y <code>else if</code>.", | ||
+ "El orden es importante en las sentencia <code>if</code> y <code>else if</code>.", | ||
"El ciclo es ejecutado de arriba hacia abajo por lo que tendrás que ser cuidadoso de cual sentencia va primero.", | ||
"Toma estas dos funciones como ejemplo.", | ||
"Aquí está la primera:", | ||
@@ -3359,9 +3359,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Encadenamiento de sentencias else if", | ||
+ "titleEs": "Encadenamiento de sentencias else if", | ||
"descriptionEs": [ | ||
- "Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:", | ||
+ "Las sentencias <code>if/else</code>(si/de lo contrario) pueden ser encadenadas juntas por una lógica compleja. Aquí está el <dfn>pseudocódigo</dfn> de múltiples sentencias <code>if</code> / <code>else if</code> encadenadas:", | ||
"<blockquote>if (<em>condicion1</em>) {<br> <em>sentencias1</em><br>} else if (<em>condicion2</em>) {<br> <em>sentencias2</em><br>} else if (<em>condicion3</em>) {<br> <em>sentencias3</em><br>. . .<br>} else {<br> <em>sentenciasN</em><br>}</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
"Escribe sentencias <code>if</code>/<code>else if</code> encadenadas para cumplir las siguientes condiciones:", | ||
@@ -3408,9 +3408,9 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Código de golf", | ||
+ "titleEs": "Código de golf", | ||
"descriptionEs": [ | ||
- "En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.", | ||
+ "En el juego de <a href='https://en.wikipedia.org/wiki/Golf' target='_blank'>golf</a> cada hoyo tiene un <dfn>par</dfn> promedio para el número de <dfn>golpes</dfn> necesarios para meter la pelota. Dependiendo de que tan lejos por encima o por debajo del <code>par</code> estén tus <code>golpes</code>, habrá un sobrenombre diferente.", | ||
"Tu función pasará un <code>par</code> y el número de <code>golpes</code>, y retornará una cadena de acuerdo a esta tabla (basada en el orden de prioridad - arriba (lo más alto) hacia abajo (lo más bajo)):", | ||
"<table class=\"table table-striped\"><thead><tr><th>Golpes</th><th>Retorna</th></tr></thead><tbody><tr><td>1</td><td>\"Hole-in-one!\"</td></tr><tr><td><= par - 2</td><td>\"Eagle\"</td></tr><tr><td>par - 1</td><td>\"Birdie\"</td></tr><tr><td>par</td><td>\"Par\"</td></tr><tr><td>par + 1</td><td>\"Bogey\"</td></tr><tr><td>par + 2</td><td>\"Double Bogey\"</td></tr><tr><td>>= par + 3</td><td>\"Go Home!\"</td></tr></tbody></table>", | ||
"Tanto <code>par</code> como <code>golpes</code> siempre serán numéricos y positivos." | ||
@@ -3456,9 +3456,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Seleccionar desde diferentes opciones con la sentencia switch", | ||
+ "titleEs": "Seleccionar desde diferentes opciones con la sentencia switch", | ||
"descriptionEs": [ | ||
- "Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.", | ||
+ "Si tienes varias opciones para elegir, usa una sentencia <code>switch</code>. Una sentencia <code>switch</code> prueba un valor y puede tener varias sentencias <code>case</code> las cuales definen varios posibles valores. Las sentencias son ejecutadas desde el primer valor <code>case</code> igualado hasta que se encuentr un <code>break</code>.", | ||
"Aquí hay un <dfn>pseudocódigo</dfn> de ejemplo:", | ||
"<blockquote>switch (num) {<br> case valor1:<br> sentencia1;<br> break;<br> case valor2:<br> sentencia2;<br> break;<br>...<br> case valorN:<br> sentenciaN;<br> break;<br>}</blockquote>", | ||
"Los valores <code>case</code> son probados con estricta igualdad (<code>===</code>). El <code>break</code> le dice a JavaScript que pare la ejecución del bloque de sentencias en el que está. Si se omite <code>break</code>, se ejecutará la siguiente sentencia.", | ||
@@ -3506,9 +3506,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Agregar una opción por omisión (default) en una sentencia switch", | ||
+ "titleEs": "Agregar una opción por omisión (default) en una sentencia switch", | ||
"descriptionEs": [ | ||
- "En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.", | ||
+ "En una sentencia <code>switch</code> puede que no seas capaz de especificar todos los posibles valores en las sentencias <code>case</code>. En su lugar, puedes agregar la sentencia <code>default</code> la cual será ejecutada si no es encontrada ninguna coincidencia con alguna sentencia <code>case</code>. Piensa en esto como la última sentencia <code>else</code> en una cadena <code>if/else</code>.", | ||
"Una sentencia <code>default</code> debería ser el último caso.", | ||
"<blockquote>switch (num) {<br> case valor1:<br> sentencia1;<br> break;<br> case valor2:<br> sentencia2;<br> break;<br>...<br> default:<br> sentenciaDefault;<br>}</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -3560,9 +3560,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Múltiples opciones idénticas en una sentencias switch", | ||
+ "titleEs": "Múltiples opciones idénticas en una sentencias switch", | ||
"descriptionEs": [ | ||
- "Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:", | ||
+ "Si la sentencia <code>break</code> es omitida de una sentencia <code>case</code> de un <code>switch</code>, las siguientes sentencias <code>case</code> son ejecutadas hasta que sea encontrado un <code>break</code>. Si tienes multiples entradas con la misma salida, puede representarlas en una sentencia <code>switch</code> así:", | ||
"<blockquote>switch(val) {<br> case 1:<br> case 2:<br> case 3:<br> result = \"1, 2, or 3\";<br> break;<br> case 4:<br> result = \"4 alone\";<br>}</blockquote>", | ||
"Los casos 1, 2, y 3 producirán el mismo resultado.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -3624,9 +3624,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Reemplazar cadenas if else con switch", | ||
+ "titleEs": "Reemplazar cadenas if else con switch", | ||
"descriptionEs": [ | ||
- "Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:", | ||
+ "Si tienes varias opciones para elegir, una sentencia <code>switch</code> puede ser más fácil de escribir que varias sentencias <code>if</code>/<code>if else</code> anidadas. Lo siguiente:", | ||
"<blockquote>if (val === 1) {<br> respuesta = \"a\";<br>} else if (val === 2) {<br> respuesta = \"b\";<br>} else {<br> respuesta = \"c\";<br>}</blockquote>", | ||
"puede ser reemplazado con:", | ||
"<blockquote>switch (val) {<br> case 1:<br> respuesta = \"a\";<br> break;<br> case 2:<br> respuesta = \"b\";<br> break;<br> default:<br> respuesta = \"c\";<br>}</blockquote>", | ||
@@ -3673,9 +3673,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Retornar valores booleanos desde funciones", | ||
+ "titleEs": "Retornar valores booleanos desde funciones", | ||
"descriptionEs": [ | ||
- "Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).", | ||
+ "Tal vez recuerdes de <a href=\"waypoint-comparison-with-the-equality-operator\" target=\"_blank\">La comparación con el operador de igualdad</a> que todos los operadores de comparación retornan un valor booleano <code>true</code> (verdadero) o <code>false</code> (falso).", | ||
"Un <dfn>anti-patrón</dfn> común es usar una sentencia <code>if/else</code> para hacer una comparación y entonces retornar <code>true</code> o <code>false</code>:", | ||
"<blockquote>function sonIguales(a,b) {<br> if (a === b) {<br> return true;<br> } else {<br> return false;<br> }<br>}</blockquote>", | ||
"Ya que <code>===</code> returna <code>true</code> (verdadero) o <code>false</code> (falso), podemos simplemente retornar el resultado de la comparación:", | ||
@@ -3728,9 +3728,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Retornar un patrón temprano para funciones", | ||
+ "titleEs": "Retornar un patrón temprano para funciones", | ||
"descriptionEs": [ | ||
- "Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.", | ||
+ "Cuando se alcanza una sentencia <code>return</code>, la ejecución de la presente función se detiene y el control la retorna a la ubicación de la llamada.", | ||
"<strong>Ejemplo</strong>", | ||
"<blockquote>function miFuncion() {<br> console.log(\"Hola\");<br> return \"Mundo\";<br> console.log(\"chaochao\")<br>}<br>miFuncion();</blockquote>", | ||
"Esta presenta en consola \"Hola\", retorna \"Mundo\", pero <code>\"chaochao\"</code> nunca se presenta, porque la función sale con la sentencia <code>return</code>.", | ||
@@ -3779,9 +3779,9 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Contar cartas", | ||
+ "titleEs": "Contar cartas", | ||
"descriptionEs": [ | ||
- "En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.", | ||
+ "En el juego de casino Blackjack, un jugador puede conseguir ventaja sobre la casa manteniendo un registro del número relativo de cartas altas y bajas restantes en la baraja. Esto es llamado <a href='https://en.wikipedia.org/wiki/Card_counting' target='_blank'>Conteo de Cartas</a>.", | ||
"Tener más cartas altas restantes en la baraja favorece al jugador. A cada carta se le asigna un valor de acuerdo a la tabla de abajo. Cuando el conteo es positivo, el jugador debe apostar alto. Cuando el conteo es cero o negativo, el jugador debe apostar bajo.", | ||
"<table class=\"table table-striped\"><thead><tr><th>Valor</th><th>Cartas</th></tr></thead><tbody><tr><td>+1</td><td>2, 3, 4, 5, 6</td></tr><tr><td>0</td><td>7, 8, 9</td></tr><tr><td>-1</td><td>10, 'J', 'Q', 'K','A'</td></tr></tbody></table>", | ||
"Vas a escribir una función de conteo de cartas. Esta recibirá un parametro <code>card</code> (carta) e incrementa o decrementa la variable <code>count</code> (conteo) global de acuerdo al valor de la carta (ver tabla). La función retornará entonces una cadena con el presente conteo y la cadena <code>\"Bet\"</code> si el conteo es positivo o <code>\"Hold\"</code> si el conteo es cero o negativo. El presente conteo y la desición del jugador (<code>\"Bet\"</code> o <code>\"Hold\"</code>) deben quedar separada por un único espacio.", | ||
@@ -3834,7 +3834,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Construye objetos en JavaScript", | ||
+ "titleEs": "Construye objetos en JavaScript", | ||
"descriptionEs": [ | ||
"Es posible que haya oído el término <code>objeto</code> antes.", | ||
"Los objetos son similares a los <code>vectores</code>, excepto que en lugar de utilizar los índices para acceder y modificar sus datos, pueden accederse mediante lo que se llama <code>propiedades</code>.", | ||
@@ -3890,9 +3890,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a propiedades de objetos con el operador punto", | ||
+ "titleEs": "Acceder a propiedades de objetos con el operador punto", | ||
"descriptionEs": [ | ||
- "Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.", | ||
+ "Hay dos maneras de acceder a las propiedades de un objeto: con el operador punto (<code>.</code>) y con la notación corchete (<code>[]</code>), similar al caso de un vector.", | ||
"El operador punto es el que usas cuando de antemano sabes el nombre de la propiedad que estás intentando acceder.", | ||
"Aquí está un ejemplo del uso del operador punto (<code>.</code>) para leer una propiedad de un objeto:", | ||
"<blockquote>var miObj = {<br> prop1: \"val1\",<br> prop2: \"val2\"<br>};<br>var prop1val = miObj.prop1; // val1<br>var prop2val = miObj.prop2; // val2</blockquote>", | ||
@@ -3940,9 +3940,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a las propiedades de objetos con la notación corchete", | ||
+ "titleEs": "Acceder a las propiedades de objetos con la notación corchete", | ||
"descriptionEs": [ | ||
- "La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.", | ||
+ "La segunda manera de acceder a las propiedades de un objeto es con la notación corchete (<code>[]</code>). Si el nombre de la propiedad del objeto que estás intentando acceder tiene un espacio, necesitarás usar la notación corchete.", | ||
"Aquí está un ejemplo del uso de la notación corchete para leer una propiedad de un objeto:", | ||
"<blockquote>var miObj = {<br> \"Nombre con espacio\": \"Kirk\",<br> \"Mas espacio\": \"Spock\"<br>};<br>miObj[\"Nombre con espacio\"]; // Kirk<br>miObj['Mas espacio']; // Spock</blockquote>", | ||
"Nota que los nombres de propiedades con espacios tienen que estar entre comillas (apóstrofes o comillas).", | ||
@@ -3991,9 +3991,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a propiedades de objetos con variables", | ||
+ "titleEs": "Acceder a propiedades de objetos con variables", | ||
"descriptionEs": [ | ||
- "Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.", | ||
+ "Otro uso de la notación corchete sobre objetos es usar una variable para acceder a una propiedad. Esto puede ser muy útil en iteraciones sobre la lista de propiedades de un objetos o para hacer operaciones de búsqueda.", | ||
"Aquí está un ejemplo del uso de una variable para acceder a una propiedad:", | ||
"<blockquote>var algunaProp = \"propNombre\";<br>var miObj = {<br> propNombre: \"Algún valor\"<br >}<br>miObj[algunaProp]; // \"Algún valor\"</blockquote>", | ||
"Aquí hay uno más:", | ||
@@ -4052,7 +4052,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Actualiza las propiedades de un objeto en JavaScript", | ||
+ "titleEs": "Actualiza las propiedades de un objeto en JavaScript", | ||
"descriptionEs": [ | ||
"Después de que hayas creado un objeto de JavaScript, puedes actualizar sus propiedades en cualquier momento, tal y como harías con cualquier otra variable.", | ||
"Por ejemplo, echemos un vistazo a <code>ourDog</code>:", | ||
@@ -4116,7 +4116,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Añade nuevas propiedades a un objeto JavaScript", | ||
+ "titleEs": "Añade nuevas propiedades a un objeto JavaScript", | ||
"descriptionEs": [ | ||
"Puedes añadir nuevas propiedades a objetos existente de la misma forma que usarías para modificarlos.", | ||
"Así es como añadimos una propiedad <code>\"bark\"</code> (ladra) a nuestro objeto <code>ourDog</code>:", | ||
@@ -4172,7 +4172,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Elimina propiedades de un objeto JavaScript", | ||
+ "titleEs": "Elimina propiedades de un objeto JavaScript", | ||
"descriptionEs": [ | ||
"También podemos eliminar propiedades de los objetos de esta manera:", | ||
"<code>delete ourDog.bark;</code>", | ||
@@ -4239,9 +4239,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usar objetos para búsquedas", | ||
+ "titleEs": "Usar objetos para búsquedas", | ||
"descriptionEs": [ | ||
- "Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.", | ||
+ "Los objetos pueden ser considerados como un almacenamiento llave/valor, como un diccionario. Si tienes datos tabulados, puedes almacenarlos en un objeto para después \"buscar\" valores, en lugar de emplear una sentencia <code>switch</code> o una secuencia de <code>if/else</code>. Esto es más útil cuando sabes que tus datos de entrada son limitados a un cierto rango.", | ||
"Aquí está un ejemplo de una simple búsqueda inversa de alfabeto:", | ||
"<blockquote>var alfa = {<br> 1:\"Z\",<br> 2:\"Y\",<br> 3:\"X\",<br> 4:\"W\",<br> ...<br> 24:\"C\",<br> 25:\"B\",<br> 26:\"A\"<br>};<br>alfa[2]; // \"Y\"<br>alfa[24]; // \"C\"<br><br>var valor = 2;<br>alfa[valor]; // \"Y\"</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4289,9 +4289,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Probar si un objeto tiene cierta propiedad", | ||
+ "titleEs": "Probar si un objeto tiene cierta propiedad", | ||
"descriptionEs": [ | ||
- "A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.", | ||
+ "A veces es útil revisar si cierta propiedad existe o no en un objeto dado. Podemos usar el método de objetos <code>.hasOwnProperty(nomprop)</code> para determinar si un objeto tiene la propiedad <code>nomprop</code>. <code>.hasOwnProperty()</code> retorna <code>true</code> o <code>false</code> si la propiedad es encontrada o no.", | ||
"<strong>Ejemplo</strong>", | ||
"<blockquote>var miObj = {<br> arriba: \"sombrero\",<br> abajo: \"pantalones\"<br>};<br>miObj.hasOwnProperty(\"arriba\"); // true<br>miObj.hasOwnProperty(\"medio\"); // false</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4346,9 +4346,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)", | ||
+ "titleEs": "Introducción a la notación de objetos de JavaScript (JSON - JavaScript Object Notation)", | ||
"descriptionEs": [ | ||
- "La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.", | ||
+ "La notación de objetos de JavaScript o <code>JSON</code> usa el formato de objetos de JavaScript para almacenar datos. JSON es flexible porque permite <dfn>Estructuras de Datos</dfn> con combinaciones arbitrarias de <dfn>cadenas</dfn>, <dfn>números</dfn>, <dfn>booleanos</dfn>, <dfn>vectores</dfn> y <dfn>objetos</dfn>.", | ||
"Aquí está un ejemplo de un objeto JSON:", | ||
"<blockquote>var nuestraMusica = [<br> {<br> \"artista\": \"Daft Punk\",<br> \"titulo\": \"Homework\",<br> \"año_publicacion\": 1997,<br> \"formatos\": [ <br> \"CD\", <br> \"Cassette\", <br> \"LP\" ],<br> \"oro\": true<br> }<br>];</blockquote>", | ||
"Este es un vector de objetos con diversos <dfn>metadatos</dfn> acerca de un álbum musical. Además tiene anidado un vector <code>formatos</code>. En el vector de nivel superior, pueden añadirse otros registros del álbum.", | ||
@@ -4404,9 +4404,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a objetos anidados en JSON", | ||
+ "titleEs": "Acceder a objetos anidados en JSON", | ||
"descriptionEs": [ | ||
- "Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.", | ||
+ "Las propiedades y sub-propiedades de los objetos JSON pueden ser accesadas mediante encadenamiento de la notación punto o corchete.", | ||
"Aquí está un objeto JSON anidado:", | ||
"<blockquote>var nuestroAlmacen = {<br> \"escritorio\": {<br> \"cajon\": \"grapadora\"<br> },<br> \"armario\": {<br> \"cajón superior\": { <br> \"legajador1\": \"un archivo\",<br> \"legajador2\": \"secretos\"<br> },<br> \"cajón inferior\": \"gaseosa\"<br> }<br>}<br>nuestroAlmacen.armario[\"cajón superior\"].legajador2; // \"secretos\"<br>nuestroAlmacen.escritorio.cajon; // \"grapadora\"</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4419,7 +4419,7 @@ | ||
"description": [ | ||
"As we have seen in earlier examples, JSON objects can contain both nested objects and nested arrays. Similar to accessing nested objects, Array bracket notation can be chained to access nested arrays.", | ||
"Here is an example of how to access a nested array:", | ||
- "<blockquote>var ourPets = { <br> \"cats\": [<br> \"Meowzer\",<br> \"Fluffy\",<br> \"Kit-Cat\"<br> ],<br> \"dogs\": [<br> \"Spot\",<br> \"Bowser\",<br> \"Frankie\"<br> ]<br>};<br>ourPets.cats[1]; // \"Fluffy\"<br>ourPets.dogs[0]; // \"Spot\"</blockquote>", | ||
+ "<blockquote>var ourPets = [<br> {<br> animalType: \"cat\",<br> names: [<br> \"Meowzer\",<br> \"Fluffy\",<br> \"Kit-Cat\"<br> ]<br> },<br> {<br> animalType: \"dog\",<br> names: [<br> \"Spot\",<br> \"Bowser\",<br> \"Frankie\"<br> ]<br> }<br>];<br>ourPets[0].names[1]; // \"Fluffy\"<br>ourPets[1].names[0]; // \"Spot\"</blockquote>", | ||
"<h4>Instructions</h4>", | ||
"Retrieve the second tree from the variable <code>myPlants</code> using object dot and array bracket notation." | ||
], | ||
@@ -4467,9 +4467,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Acceder a vectores anidados en JSON", | ||
+ "titleEs": "Acceder a vectores anidados en JSON", | ||
"descriptionEs": [ | ||
- "Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.", | ||
+ "Como hemos visto en ejemplos anteriores, los objetos JSON pueden contener objetos anidados y vectores anidados. De forma similar a acceder a objetos anidados, la notación corchete en vectores puede ser encadenada para acceder a vectores anidados.", | ||
"Aquí está un ejemplo de como acceder a un vector anidado:", | ||
"<blockquote>var nuestrasMascotas = { <br> \"gatos\": [<br> \"Maullador\",<br> \"Blandito\",<br> \"Kit-Cat\"<br> ],<br> \"perros\": [<br> \"Mancha\",<br> \"Bowser\",<br> \"Frankie\"<br> ]<br>};<br>nuestrasMascotas.cats[1]; // \"Blandito\"<br>nuestrasMascotas.dogs[0]; // \"Mancha\"</blockquote>", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4545,9 +4545,9 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Colección de registros", | ||
+ "titleEs": "Colección de registros", | ||
"descriptionEs": [ | ||
- "Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.", | ||
+ "Se te da un objeto JSON que representa (una pequeña parte de) tu colección de grabaciones. Cada álbum es identificado por un número id único y tiene varias propiedades. No todos los álbumes tienen la información completa.", | ||
"Escribe una función que reciba un <code>id</code>, una propiedad (<code>prop</code>) y un valor (<code>value</code>).", | ||
"Para el <code>id</code> dado, en la colección <code>collection</code>:", | ||
"Si el valor <code>value</code> no está en blanco (<code>value !== \"\"</code>) y <code>prop</code> no es <code>\"tracks\"</code> entonces actualiza o establece el valor de la propiedad <code>prop</code>.", | ||
@@ -4601,7 +4601,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Iterar en JavaScript con ciclos for", | ||
+ "titleEs": "Iterar en JavaScript con ciclos for", | ||
"descriptionEs": [ | ||
"Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.", | ||
"El tipo más común de bucle de JavaScript se llama \"ciclo for\"porque se ejecuta \"por\" (for) un número específico de veces.", | ||
@@ -4659,7 +4659,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Itera por los números pares con un ciclo for", | ||
+ "titleEs": "Itera por los números pares con un ciclo for", | ||
"descriptionEs": [ | ||
"Los ciclos <code>for</code> no siempre iteran incrementado de a uno. Cambiando nuestra <code>expresión final</code>, podemos contar los números pares.", | ||
"Vamos a empezar con <code>i = 0</code> e iterar mientras <code>i <10</code>. Vamos a incrementar <code>i</code> de a 2 en cada iteración <code>i + = 2</code>. ", | ||
@@ -4712,7 +4712,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Cuenta hacia atrás con un ciclo for", | ||
+ "titleEs": "Cuenta hacia atrás con un ciclo for", | ||
"descriptionEs": [ | ||
"Un ciclo también puede contar hacia atrás, siempre y cuando definamos las condiciones adecuadas.", | ||
"Para contar hacia atrás de dos en dos, tendremos que cambiar nuestra <code>inicialización</code>, la <code>condición</code> y la <code>última-expresión</code>.", | ||
@@ -4768,9 +4768,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Iterar a través de un vector con un ciclo for", | ||
+ "titleEs": "Iterar a través de un vector con un ciclo for", | ||
"descriptionEs": [ | ||
- "Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:", | ||
+ "Una tarea común en JavaScript es iterar a traves del contenido de un vector. Una manera de hacerlo es con un ciclo <code>for</code>. Este código imprimirá cada elemento del vector <code>arr</code> en la consola:", | ||
"<blockquote>var arr = [10,9,8,7,6];<br>for (var i=0; i < arr.length; i++) {<br> console.log(arr[i]);<br>}</blockquote>", | ||
"Recuerda que los vectores tienen numeración que comienza en cero, la cual significa que el último índice del vector es su longitud - 1. Nuestra <dfn>condición</dfn> para este ciclo es <code>i < arr.length</code>, que lo detendrá cuando <code>i</code> sea la longitud - 1.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4814,9 +4814,9 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Anidar ciclos for", | ||
+ "titleEs": "Anidar ciclos for", | ||
"descriptionEs": [ | ||
- "Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:", | ||
+ "Si tienes una matriz multi-dimensional, puedes usar la misma lógica del punto anterior para iterar a través de un vector y cualquier sub-vector. Aquí está un ejemplo:", | ||
"<blockquote>var arr = [<br> [1,2], [3,4], [5,6]<br>];<br>for (var i=0; i < arr.length; i++) {<br> for (var j=0; j < arr[i].length; j++) {<br> console.log(arr[i][j]);<br> }<br>}</blockquote>", | ||
"Esto imprime cada sub-elemento en <code>arr</code> uno a la vez. Nota que en el ciclo interior, estamos comprobando la longitud <code>.length</code> de <code>arr[i]</code>, ya que <code>arr[i]</code> es por si mismo un vector.", | ||
"<h4>Instrucciones</h4>", | ||
@@ -4854,7 +4854,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Iterar con JavaScript con ciclos while", | ||
+ "titleEs": "Iterar con JavaScript con ciclos while", | ||
"descriptionEs": [ | ||
"Puede ejecutar el mismo código varias veces mediante el uso de un ciclo.", | ||
"Otro tipo de ciclo de JavaScript se llama un ciclo \"while\", ya que se ejecuta, \"mientras que\" algo sea cierto y se detiene una vez que ya no sea así.", | ||
@@ -4933,9 +4933,9 @@ | ||
], | ||
"type": "checkpoint", | ||
"challengeType": 1, | ||
- "nameEs": "Búsqueda de perfiles", | ||
+ "titleEs": "Búsqueda de perfiles", | ||
"descriptionEs": [ | ||
- "Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.", | ||
+ "Tenemos un vector de objetos que representan diferentes personas en nuestra lista de contactos.", | ||
"Una función <code>lookUp</code> que recibe el nombre (<code>firstName</code>) y una propiedad (<code>prop</code>) como argumentos ya ha sido escrita previamente para ti.", | ||
"La función debe comprobar si <code>firstName</code> es un nombre (<code>firstName</code>) de algún contacto y si la propiedad dada (<code>prop</code>) es una propiedad de ese contacto.", | ||
"Si ambos son verdaderos, entonces retorna el valor (<code>value</code>) de esa propiedad.", | ||
@@ -4977,7 +4977,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Generar fracciones al azar con JavaScript", | ||
+ "titleEs": "Generar fracciones al azar con JavaScript", | ||
"descriptionEs": [ | ||
"Los números aleatorios son útiles para crear un comportamiento aleatorio.", | ||
"JavaScript tiene una función <code>Math.random()</code> que genera un número decimal aleatorio.", | ||
@@ -5023,7 +5023,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Genera números aleatorios enteros con JavaScript", | ||
+ "titleEs": "Genera números aleatorios enteros con JavaScript", | ||
"descriptionEs": [ | ||
"Es muy bueno que podamos generar números decimales al azar, pero es aún más útil si lo utilizamos para generar números enteros aleatorios.", | ||
"En primer lugar, vamos a usar <code>Math.random()</code> para generar un decimal aleatorio.", | ||
@@ -5096,7 +5096,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Genera números aleatorios enteros dentro de un rango", | ||
+ "titleEs": "Genera números aleatorios enteros dentro de un rango", | ||
"descriptionEs": [ | ||
"En lugar de generar un número aleatorio entre cero y un número dado como lo hicimos antes, podemos generar un número aleatorio que caiga dentro de un rango de dos números específicos.", | ||
"Para ello, vamos a definir un número mínimo <code>min</code> y un número máximo <code>max</code>.", | ||
@@ -5157,7 +5157,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Examina un texto con expresiones regulares", | ||
+ "titleEs": "Examina un texto con expresiones regulares", | ||
"descriptionEs": [ | ||
"Las <code>expresiones regulares</code> se utilizan para encontrar ciertas palabras o patrones dentro de <code>cadenas</code>.", | ||
"Por ejemplo, si quisiéramos encontrar la palabra <code>el</code> en la cadena <code>El perro persiguió al gato el lunes</code>, podríamos utilizar la siguiente <code>expresión regular</code>: <code>/el/gi</code> ", | ||
@@ -5211,7 +5211,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Encuentra números con expresiones regulares", | ||
+ "titleEs": "Encuentra números con expresiones regulares", | ||
"descriptionEs": [ | ||
"Podemos usar selectores especiales en las <code>expresiones regulares</code> para seleccionar un determinado tipo de valor.", | ||
"Uno de estos selectores es el de dígitos <code>\\d</code> que se utiliza para hacer coincidir números en una cadena.", | ||
@@ -5260,7 +5260,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Encuentra espacios en blanco con las expresiones regulares", | ||
+ "titleEs": "Encuentra espacios en blanco con las expresiones regulares", | ||
"descriptionEs": [ | ||
"También podemos utilizar selectores de expresiones regulares como <code>\\s</code> para encontrar un espacio en blanco en una cadena.", | ||
"Los espacios en blanco son <code>\" \"</code> (espacio), <code>\\r</code> (el retorno de carro), <code>\\n</code> (nueva línea), <code>\\t</code> (tabulador), y <code>\\f</code> (el avance de página). ", | ||
@@ -5307,7 +5307,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Hacer coincidir con una expresión regular invertida", | ||
+ "titleEs": "Hacer coincidir con una expresión regular invertida", | ||
"descriptionEs": [ | ||
"Puedes invertir las coincidencias de un selector usando su versión en mayúsculas.", | ||
"Por ejemplo, <code>\\s</code> coincidirá con cualquier espacio en blanco, mientras que <code>\\S</code> coincidirá con todo lo que no sea espacio en blanco.", | ||
@@ -5332,7 +5332,7 @@ | ||
" var slotTwo;", | ||
" var slotThree;", | ||
" ", | ||
- " var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];", | ||
+ " var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];", | ||
" ", | ||
" // Only change code below this line.", | ||
" ", | ||
@@ -5472,7 +5472,7 @@ | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
"isBeta": true, | ||
- "nameEs": "Crea una máquina tragamonedas en JavaScript", | ||
+ "titleEs": "Crea una máquina tragamonedas en JavaScript", | ||
"descriptionEs": [ | ||
"Ahora vamos a tratar de combinar algunas de las cosas que hemos aprendido para crear la lógica de una máquina tragamonedas.", | ||
"Para esto tendremos que generar tres números aleatorios entre <code>1</code> y <code>3</code> que representen los valores posibles de cada casilla.", | ||
@@ -5502,7 +5502,7 @@ | ||
" var slotTwo;", | ||
" var slotThree;", | ||
" ", | ||
- " var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];", | ||
+ " var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];", | ||
" ", | ||
" slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
" slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
@@ -5643,7 +5643,7 @@ | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
"isBeta": true, | ||
- "nameEs": "Añade casillas a tu tragamonedas JavaScript", | ||
+ "titleEs": "Añade casillas a tu tragamonedas JavaScript", | ||
"descriptionEs": [ | ||
"Ahora que cada una de nuestras casillas genera números aleatorios, tenemos que comprobar si todos quedan con el mismo número.", | ||
"Si es así, debemos notificar a nuestros usuarios que han ganado y debemos retornar <code>null</code>.", | ||
@@ -5674,7 +5674,7 @@ | ||
" var slotTwo;", | ||
" var slotThree;", | ||
" ", | ||
- " var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];", | ||
+ " var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];", | ||
" ", | ||
" slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
" slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
@@ -5824,7 +5824,7 @@ | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
"isBeta": true, | ||
- "nameEs": "Da vida a tu máquina tragamonedas en JavaScript", | ||
+ "titleEs": "Da vida a tu máquina tragamonedas en JavaScript", | ||
"descriptionEs": [ | ||
"Ahora podemos detectar una victoria. Logremos que la máquina tragamonedas funcione. ", | ||
"Usemos un <code>selector</code> de jQuery <code>$(\".slot\")</code> para seleccionar todas las casillas.", | ||
@@ -5851,7 +5851,7 @@ | ||
" var slotTwo;", | ||
" var slotThree;", | ||
" ", | ||
- " var images = [\"http://i.imgur.com/9H17QFk.png\", \"http://i.imgur.com/9RmpXTy.png\", \"http://i.imgur.com/VJnmtt5.png\"];", | ||
+ " var images = [\"//i.imgur.com/9H17QFk.png\", \"//i.imgur.com/9RmpXTy.png\", \"//i.imgur.com/VJnmtt5.png\"];", | ||
" ", | ||
" slotOne = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
" slotTwo = Math.floor(Math.random() * (3 - 1 + 1)) + 1;", | ||
@@ -6010,7 +6010,7 @@ | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
"isBeta": true, | ||
- "nameEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo", | ||
+ "titleEs": "Dale a tu máquina tragamonedas JavaScript algunas imágenes con estilo", | ||
"descriptionEs": [ | ||
"Ahora añadamos algunas imágenes en nuestras casillas.", | ||
"Ya hemos creado las imágenes por ti en una matriz llamada <code>images</code>. Podemos utilizar diferentes índices para tomara cada una de estas. ", | ||
View
134
seed/challenges/01-front-end-development-certification/basic-ziplines.json
@@ -9,37 +9,37 @@ | ||
"title": "Get Set for our Front End Development Projects", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/OAD6SJz.png", | ||
+ "//i.imgur.com/OAD6SJz.png", | ||
"An image of a Simon game, one our front end projects.", | ||
"Our front end development projects will give you a chance to apply the front end skills you've developed up to this point. We'll use a popular browser-based code editor called CodePen.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WBetuBa.jpg", | ||
+ "//i.imgur.com/WBetuBa.jpg", | ||
"A programmer punching through his laptop screen in frustration.", | ||
"These projects are hard. It takes most campers several days to build each project. You will get frustrated. But don't quit. This gets easier with practice.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/p2TpOQd.jpg", | ||
+ "//i.imgur.com/p2TpOQd.jpg", | ||
"A cute dog jumping over a hurdle and winking and pointing his paw at you.", | ||
"When you get stuck, just use the Read-Search-Ask methodology. Don't worry - you've got this.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G1saeDt.gif", | ||
+ "//i.imgur.com/G1saeDt.gif", | ||
"A gif showing how to create a Codepen account.", | ||
"For our front end project challenges, we'll use a popular browser-based code editor called CodePen. Click the \"Open link in new tab\" button below to open CodePen's signup page. Fill out the form and click \"Sign up\". <br><div class=\"small\">Note: If you already have a CodePen account, you can skip this step by clicking \"Open link in new tab\", closing the new tab that opens, then clicking \"go to my next step\". We removed our \"skip step\" button because many people would just click it repeatedly without doing these important steps.</div>", | ||
"http://codepen.io/signup/free" | ||
], | ||
[ | ||
- "http://i.imgur.com/U4y9RJ1.gif", | ||
+ "//i.imgur.com/U4y9RJ1.gif", | ||
"A gif showing that you can type \"hello world\" will output \"hello world\" in the preview window. You can also drag windows to resize them, and change their orientation.", | ||
"In the HTML box, create an h1 element with the text \"Hello World\". You can drag the frames around to resize them. You can also click the \"Change View\" button and change the orientation of the frames.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G9KFQDL.gif", | ||
+ "//i.imgur.com/G9KFQDL.gif", | ||
"A gif showing the process of adding Bootstrap to your pen.", | ||
"Click the gear in the upper left hand corner of the CSS box, then scroll down to \"Quick add\" and choose Bootstrap. Now give your h1 element the class of \"text-primary\" to change its color and prove that Bootstrap is now available.", | ||
"" | ||
@@ -48,91 +48,90 @@ | ||
"challengeSeed": [], | ||
"tests": [], | ||
"type": "Waypoint", | ||
+ "isRequired": false, | ||
"challengeType": 7, | ||
- "nameEs": "Prepárate para los Proyectos de Desarrollo de Interfaces", | ||
- "descriptionEs": [ | ||
+ "titleRu": "Приготовьтесь к разработке фронтенд проектов", | ||
+ "descriptionRu": [ | ||
[ | ||
- "http://i.imgur.com/OAD6SJz.png", | ||
- "Una imagen del juego Simón, uno de nuestros proyectos de interfaz.", | ||
- "Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento. Usaremos un editor de código basado en el navegador llamado CodePen.", | ||
+ "//i.imgur.com/OAD6SJz.png", | ||
+ "Игра Саймона - один из фронтенд проектов.", | ||
+ "Наши фронтенд проекты дадут вам шанс применить полученные к этому моменту знания по фронтенд разработке. Мы будем использовать популярный браузерный редактор кода - CodePen.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WBetuBa.jpg", | ||
- "Un programador frustado golpeando la pantalla de su computador.", | ||
- "Nuestros desafíos sobre algoritmos son difíciles. Algunos pueden requerir muchas horas para resolverse. Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.", | ||
+ "//i.imgur.com/WBetuBa.jpg", | ||
+ "Программист от отчаяния кулаком пробивает экран своего ноутбука.", | ||
+ "Это трудные проекты. Разработка каждого занимает у большинства кэмперов несколько дней. У вас может возникнуть чувство отчаяния. Несмотря на это не сдавайтесь. С практикой этот процесс станет проще.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/p2TpOQd.jpg", | ||
- "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.", | ||
- "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes - lo tienes resuelto.", | ||
+ "//i.imgur.com/p2TpOQd.jpg", | ||
+ "Милый пес, прыгающий через препятствие, указывает на вас лапой и подмигивает.", | ||
+ "Если что-то не получается, воспользуйтесь Read-Search-Ask. Не волнуйтесь - вы сможете это сделать.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G1saeDt.gif", | ||
- "Un gif que muestra cómo crear una cuenta en Codepen.", | ||
- "Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>", | ||
+ "//i.imgur.com/G1saeDt.gif", | ||
+ "Гифка показывающая как зарегистрироваться на CodePen.", | ||
+ "Для заданий по фронтенд разработке, мы будем использовать популярный браузерный редактор кода под названием CodePen. Откройте страницу регистрации на сайте CodePen, нажав на расположенную чуть ниже кнопку \"Open link in new tab\". Заполните форму и нажмите \"Sign up\". <br><div class=\"small\">Замечание: Если у вас уже есть аккаунт CodePen, то этот шаг можно пропустить: нажмите на кнопку \"Open link in new tab\", закройте появившуюся вкладку и затем кликните \"go to my next step\". Мы убрали кнопку \"skip step\", ввиду того что большинство людей просто нажимали бы ее несколько раз подряд и пропускали бы эти важные инструкции.</div>", | ||
"http://codepen.io/signup/free" | ||
], | ||
[ | ||
- "http://i.imgur.com/U4y9RJ1.gif", | ||
- "Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.", | ||
- "En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.", | ||
+ "//i.imgur.com/U4y9RJ1.gif", | ||
+ "Гифка показывающая набор в редакторе заголовка с текстом \"hello world\", который затем отображается в окошке предпросмотра. А также указывающая как изменить размер окон редактора или поменять их расположение.", | ||
+ "В окошке HTML создайте элемент h1 с текстом \"Hello World\". Ухватив края окон можно изменить их размер. А нажав на кнопку \"Change View\" поменять их расположение.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G9KFQDL.gif", | ||
- "Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.", | ||
- "Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.", | ||
+ "//i.imgur.com/G9KFQDL.gif", | ||
+ "Гифка показывающая как в CodePen добавить к проекту Bootstrap.", | ||
+ "Нажмите на звездочку в левом верхнем углу окошка CSS, найдите внизу поле \"Quick add\" и выберите в нем Bootstrap. Добавьте к элементу h1 класс \"text-primary\", чтобы изменить его цвет и удостовериться, что Bootstrap подключен.", | ||
"" | ||
] | ||
], | ||
- "nameRu": "Приготовьтесь к разработке фронтенд проектов", | ||
- "descriptionRu": [ | ||
+ "titleEs": "Prepárate para los Proyectos de Desarrollo de Interfaces", | ||
+ "descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/OAD6SJz.png", | ||
- "Игра Саймона - один из фронтенд проектов.", | ||
- "Наши фронтенд проекты дадут вам шанс применить полученные к этому моменту знания по фронтенд разработке. Мы будем использовать популярный браузерный редактор кода - CodePen.", | ||
+ "//i.imgur.com/OAD6SJz.png", | ||
+ "Una imagen del juego Simón, uno de nuestros proyectos de interfaz.", | ||
+ "Nuestros proyectos de desarrollo de interfaces te darán oportunidad de aplicar las habilidades con interfaces que has desarrollado hasta este momento. Usaremos un editor de código basado en el navegador llamado CodePen.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/WBetuBa.jpg", | ||
- "Программист от отчаяния кулаком пробивает экран своего ноутбука.", | ||
- "Это трудные проекты. Разработка каждого занимает у большинства кэмперов несколько дней. У вас может возникнуть чувство отчаяния. Несмотря на это не сдавайтесь. С практикой этот процесс станет проще.", | ||
+ "//i.imgur.com/WBetuBa.jpg", | ||
+ "Un programador frustado golpeando la pantalla de su computador.", | ||
+ "Nuestros desafíos sobre algoritmos son difíciles. Algunos pueden requerir muchas horas para resolverse. Podrás frustarte, pero no te rindas. Se vuelve fácil con práctica.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/p2TpOQd.jpg", | ||
- "Милый пес, прыгающий через препятствие, указывает на вас лапой и подмигивает.", | ||
- "Если что-то не получается, воспользуйтесь Read-Search-Ask. Не волнуйтесь - вы сможете это сделать.", | ||
+ "//i.imgur.com/p2TpOQd.jpg", | ||
+ "Un tierno perro que salta sobre un obstáculo, pica el ojo y te apunta con su pata.", | ||
+ "Cuando te atasques, usa la metodología Leer-Buscar-Preguntar. No te preocupes - lo tienes resuelto.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G1saeDt.gif", | ||
- "Гифка показывающая как зарегистрироваться на CodePen.", | ||
- "Для заданий по фронтенд разработке, мы будем использовать популярный браузерный редактор кода под названием CodePen. Откройте страницу регистрации на сайте CodePen, нажав на расположенную чуть ниже кнопку \"Open link in new tab\". Заполните форму и нажмите \"Sign up\". <br><div class=\"small\">Замечание: Если у вас уже есть аккаунт CodePen, то этот шаг можно пропустить: нажмите на кнопку \"Open link in new tab\", закройте появившуюся вкладку и затем кликните \"go to my next step\". Мы убрали кнопку \"skip step\", ввиду того что большинство людей просто нажимали бы ее несколько раз подряд и пропускали бы эти важные инструкции.</div>", | ||
+ "//i.imgur.com/G1saeDt.gif", | ||
+ "Un gif que muestra cómo crear una cuenta en Codepen.", | ||
+ "Para nuestros desafíos de interfaces, usaremos un editor de código basado en el navegador que es muy famoso llamado Codepen. Pulsa en el botón de abajo \"Open link in new tab\" para abrir la página de registro de CodePen. Rellena el formulario y pulsa \"Sign up\". <br><div class=\"small\">Nota: Si ya tienes una cuenta de CodePen, puedes omitir este paso pulsando \"Open link in new tab\", cierra la nueva pestaña que se abre, entonces pulsa \"go to my next step\". Eliminamos nuestro botón \"skip step\" porque mucha gente solamente pulsa el botón sin realizar estos importantes pasos.</div>", | ||
"http://codepen.io/signup/free" | ||
], | ||
[ | ||
- "http://i.imgur.com/U4y9RJ1.gif", | ||
- "Гифка показывающая набор в редакторе заголовка с текстом \"hello world\", который затем отображается в окошке предпросмотра. А также указывающая как изменить размер окон редактора или поменять их расположение.", | ||
- "В окошке HTML создайте элемент h1 с текстом \"Hello World\". Ухватив края окон можно изменить их размер. А нажав на кнопку \"Change View\" поменять их расположение.", | ||
+ "//i.imgur.com/U4y9RJ1.gif", | ||
+ "Un gif que muestra que puedes escribir \"hello world\" en el editor, lo cual escribirá \"hello world\" en la ventana de vista previa. También puedes mover las ventanas para cambiar su tamaño, y cambiar su orientación.", | ||
+ "En la ventana de HTML, crea un elemento h1 con el texto \"Hola mundo\". Puedes arrastrar los bordes de las ventanas para cambiar su tamaño. También puedes pulsar el botón de \"Change View\" para cambiar la orientación de las ventanas.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/G9KFQDL.gif", | ||
- "Гифка показывающая как в CodePen добавить к проекту Bootstrap.", | ||
- "Нажмите на звездочку в левом верхнем углу окошка CSS, найдите внизу поле \"Quick add\" и выберите в нем Bootstrap. Добавьте к элементу h1 класс \"text-primary\", чтобы изменить его цвет и удостовериться, что Bootstrap подключен.", | ||
+ "//i.imgur.com/G9KFQDL.gif", | ||
+ "Un gif que muestra el proceso de agregar Bootstrap a tu proyecto.", | ||
+ "Pulsa el engrane en la esquina superior izquierda de la ventana de CSS, luego ve hacia abajo hasta donde dice \"Quick add\" y elige Bootstrap. Ahora dale a tu elemento h1 la clase \"text-primary\" para cambiar su color y verificar que Bootstrap está activado.", | ||
"" | ||
] | ||
- ], | ||
- "isRequired": false | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd18", | ||
"title": "Build a Tribute Page", | ||
- "releasedOn": "January 1, 2016", | ||
"description": [ | ||
"<strong>Objective:</strong> Build a <a href='http://codepen.io' target='_blank'>CodePen.io</a> app that is functionally similar to this: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.", | ||
"<strong>Rule #1:</strong> Don't look at the example project's code. Figure it out for yourself.", | ||
@@ -143,24 +142,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
+ "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"154927651" | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameEs": "Construye una página Tributo", | ||
- "descriptionEs": [ | ||
- "<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>", | ||
- "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
- "<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.", | ||
- "<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.", | ||
- "<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.", | ||
- "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.", | ||
- "Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ", | ||
- "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "nameRu": "Создайте страницу посвященную тому что вас вдохновляет", | ||
+ "titleRu": "Создайте страницу посвященную тому что вас вдохновляет", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -171,7 +161,17 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "isRequired": true | ||
+ "titleEs": "Construye una página Tributo", | ||
+ "descriptionEs": [ | ||
+ "<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcionalmente sea similar a esta: <a href='http://codepen.io/FreeCodeCamp/full/wMQrXV' target='_blank'>http://codepen.io/FreeCodeCamp/full/wMQrXV</a>", | ||
+ "<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
+ "<strong>Regla #2:</strong> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería que necesites. Dale tu estilo personal.", | ||
+ "<strong>Historia de usuario:</strong> Puedo ver una página tributo con una imagen y texto.", | ||
+ "<strong>Historia de usuario:</strong> Puedo pulsar en un enlace que me llevará a un sitio web externo con mayor información sobre el tema.", | ||
+ "Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.", | ||
+ "Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ", | ||
+ "Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7158d8c242eddfaeb5bd13", | ||
@@ -196,7 +196,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
- "nameRu": "Создайте сайт-портфолио", | ||
+ "isRequired": true, | ||
+ "challengeType": 3, | ||
+ "titleRu": "Создайте сайт-портфолио", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a> которое функционально соответствует вот этому: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -212,7 +214,7 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Construye una página web para tu portafolio", | ||
+ "titleEs": "Construye una página web para tu portafolio", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/VemmoX/' target='_blank'>http://codepen.io/FreeCodeCamp/full/VemmoX/</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -227,9 +229,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.", | ||
"Cuando hayas terminado, pulsa el botón \"I've completed this challenge\" e incluye un link a tu CodePen. ", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiéndolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true, | ||
- "challengeType": 3 | ||
+ ] | ||
} | ||
] | ||
} |
View
285
seed/challenges/01-front-end-development-certification/bootstrap.json
@@ -79,7 +79,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap", | ||
+ "titleEs": "Usa diseño adaptativo con los contenedores fluidos de Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora vamos de vuelta a nuestra aplicación de fotos de gatos. Esta vez, vamos a darle estilo utilizando la infraestructura CSS del popular Bootstrap.", | ||
"Bootstrap determina qué tan ancha es la pantalla y adapta correspondientemente el tamaño de tus elementos HTML - por eso es que se llama <code>Diseño adaptativo</code> (responsive design).", | ||
@@ -88,6 +88,16 @@ | ||
"<code><link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/></code>", | ||
"En este caso, lo hemos agregado a esta página por ti.", | ||
"Para iniciar, debemos anidar todo nuestro HTML en un elemento <code>div</code> con la clase <code>container-fluid</code>." | ||
+ ], | ||
+ "nameFr": "Un design adaptatif (responsive design) utilisant les conteneurs fluides de Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Revenons à notre application de photos de chats. Cette fois-ci, nous allons lui donner un style grâce au renommé framework CSS Bootstrap.", | ||
+ "Bootstrap saura reconnaître la largeur de notre écran et s'y adapter en redimensionnant les éléments HTML - d'où le nom <code>Responsive Design</code> (design adaptatif).", | ||
+ "Avec le design responsive, il n'y a pas besoin de créer de version mobile de votre site. Il restera bien sur tous les appareils quelle que soit la taille de leurs écrans.", | ||
+ "Vous pouvez ajouter Bootstrap à n'importe quelle application simplement en incluant le code suivant en haut de votre HTML:", | ||
+ "<code><link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css\"/></code>", | ||
+ "Ici, nous l'avons déjà ajouté à la page pour vous dans l'arrière-boutique.", | ||
+ "Pour commencer, nous devons envelopper nos éléments HTML dans un élément <code>div</code> possédant la classe <code>container-fluid</code>" | ||
] | ||
}, | ||
{ | ||
@@ -165,11 +175,19 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Haz que las imágenes sean adaptativas en dispositivos móviles", | ||
+ "titleEs": "Haz que las imágenes sean adaptativas en dispositivos móviles", | ||
"descriptionEs": [ | ||
"Primero, agrega una nueva imagen debajo que la que ya existe. Haz que su atributo <code>src</code> sea <code>http://bit.ly/fcc-running-cats</code>.", | ||
"Sería genial si esta imagen fuera exactamente del tamaño de la pantalla de nuestro teléfono.", | ||
"Afortunadamente, con Bootstrap, todo lo que tenemos que hacer es agregar la clase <code>img-responsive</code> a tu imagen. Hazlo, y verás que la imagen se ajustará perfectamente al ancho de tu página." | ||
+ ], | ||
+ "nameFr": "Rendre des images adaptatives aux appareils mobiles", | ||
+ "descriptionFr": [ | ||
+ "It would be great if this image could be exactly the width of our phone's screen.", | ||
+ "Fortunately, with Bootstrap, all we need to do is add the <code>img-responsive</code> class to your image. Do this, and the image should perfectly fit the width of your page.", | ||
+ "D'abord, ajoutez une nouvelle image en dessous de celle qui eiste dejà. Changez l'attribut <code>src</src> en <code>http://bit.ly/fcc-running-cats</code>.", | ||
+ "Ce serait absolument super si notre image pouvait être exactement de la largeur de l'écran du téléphone.", | ||
+ "Heureusement, avec Bootstrap, il faut seulement ajouter la classe <code>img-responsive</code> à notre image. Faites le, et l'image devrait s'ajuster parfaitement à la largeur de la page." | ||
] | ||
}, | ||
{ | ||
@@ -245,11 +263,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Centra el texto con Bootstrap", | ||
+ "titleEs": "Centra el texto con Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora que estamos usando Bootstrap, podemos centrar nuestro elemento de encabezado para hacerlo verse mejor. Todo lo que necesitamos hacer es agregar la clase <code>text-center</code> a nuestro elemento <code>h2</code>.", | ||
"Recuerda que puedes agregar varias clases a un mismo elemento separando cada una de ellas con un espacio, de esta forma:", | ||
"<code><h2 class=\"red-text text-center\">your text</h2></code>" | ||
+ ], | ||
+ "nameFr": "Centrer du texte avec Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Maintenant que wous utilisons Bootstrap, nous pouvons centrer notre entête pour qu'il ait une meilleure apparence. Nous devons seulement ajouter la classe <code>text-center</code> à notre élément <code>h2</code>.", | ||
+ "Souvenez vous que vous pouvez utiliser plusieurs classes pour un même élément en les séparant avec un espace, comme ceci:", | ||
+ "<code><h2 class=\"red-text text-center\">Votre texte</h2></code>" | ||
] | ||
}, | ||
{ | ||
@@ -326,10 +350,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea un botón con Bootstrap", | ||
+ "titleEs": "Crea un botón con Bootstrap", | ||
"descriptionEs": [ | ||
"Bootstrap tiene sus propios estilos para elementos <code>button</code>, los cuales se ven mejor que los estilos simples de HTML.", | ||
"Crea un nuevo elemento <code>button</code> debajo de tu foto grande del gatito. Dale la clase <code>btn</code> y el texto \"Like\"." | ||
+ ], | ||
+ "nameFr": "Créer un bouton avec Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap possède ses propres styles pour les éléments <code>button</code>, qui sont beaucoup plus beaux que ceux issus du HTML seul.", | ||
+ "Créez un nouvel élément <code>button</code> en dessous de votre grande photo de chaton. Donnez lui comme classe <code>btn</code> et comme texte \"Like\"." | ||
] | ||
}, | ||
{ | ||
@@ -338,7 +367,7 @@ | ||
"description": [ | ||
"Normally, your <code>button</code> elements are only as wide as the text that they contain. By making them block elements, your button will stretch to fill your page's entire horizontal space and any elements following it will flow onto a \"new line\" below the block.", | ||
"This image illustrates the difference between <code>inline</code> elements and <code>block-level</code> elements:", | ||
- "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>", | ||
+ "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>", | ||
"Note that these buttons still need the <code>btn</code> class.", | ||
"Add Bootstrap's <code>btn-block</code> class to your Bootstrap button." | ||
], | ||
@@ -409,13 +438,21 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea un elemento botón de bloque con Bootstrap", | ||
+ "titleEs": "Crea un elemento botón de bloque con Bootstrap", | ||
"descriptionEs": [ | ||
"Normalmente, tus elementos <code>button</code> son sólo tan anchos como el texto que contienen. Al convertir un botón en elemento a nivel de bloque, este se estirará para llenar todo el espacio horizontal y cualquier elemento que lo siga se desplazará a una \"nueva línea\" debajo del bloque.", | ||
"Esta imagen es un ejemplo de la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):", | ||
- "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira hasta llenar todo el espacio horizontal.'></a>", | ||
+ "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira hasta llenar todo el espacio horizontal.'></a>", | ||
"Ten en cuenta que estos botones todavía necesitan la clase <code>btn</code>.", | ||
"Agrega la clase de Bootstrap <code>btn-block</code> a tu botón Bootstrap." | ||
+ ], | ||
+ "nameFr": "Créer un bouton bloc Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Normalement, vos éléments <code>button</code> sont aussi large que le texte qu'ils contiennent. En les transformants en éléments blocs, vos boutons vont s'ajuster pour remplir l'intégralité de l'espace horizontal de la page et tous les éléments qui le suivront se placeront sur une \"nouvelle ligne\" en dessous du bloc.", | ||
+ "Cette image illustre la différence entre éléments <code>inline</code> (sans briser la ligne) et éléments <code>block-level</code> (en blocs)", | ||
+ "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Cliquez pour agrandir\" alt=\"Un bouton \"inline\" est aussi petit que le texte qu'il contient. Dans cette image, il est centré. En dessous de celui-ci il y a un bouton \"block-level\" , qui s'étire et remplit l'espace horizontal.'></a>", | ||
+ "Notez que ces boutons ont toujours besoin de la classe <code>btn</code>", | ||
+ "Ajoutez la classe Bootstrap <code>btn-block</code> à votre bouton Bootstrap." | ||
] | ||
}, | ||
{ | ||
@@ -493,11 +530,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap", | ||
+ "titleEs": "Prueba el arcoíris de colores para botones que te ofrece Bootstrap", | ||
"descriptionEs": [ | ||
"La clase <code>btn-primary</code> es el color principal que utilizarás en tu aplicación. Es útil resaltar las acciones que quieres que tu usuario ejecute.", | ||
"Agrega la clase <code>btn-primary</code> de Bootstrap a tu botón.", | ||
"Ten en mente que este botón todavía necesita las clases <code>btn</code> y <code>btn-block</code>." | ||
+ ], | ||
+ "nameFr": "Goutez à l'arc en ciel de couleurs des boutons de Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "La classe <code>btn-primary</code> est la couleur principale que vous utiliserez dans votre application. Elle est utile pour mettre en valeur les actions que vous voulez faire réaliser par vos utilisateurs.", | ||
+ "Ajoutez la classe Bootstrap <code>btn-primary</code> à votre bouton.", | ||
+ "Notez que ce bouton a toujours besoin des classes <code>btn</code> et <code>btn-block</code>" | ||
] | ||
}, | ||
{ | ||
@@ -576,11 +619,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Señala acciones opcionales con botones informativos", | ||
+ "titleEs": "Señala acciones opcionales con botones informativos", | ||
"descriptionEs": [ | ||
"Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-info</code> se utiliza para llamar la atención a acciones opcionales que el usuario puede tomar.", | ||
"Crea un nuevo botón a nivel de bloque de Bootstrap debajo de tu botón de \"Like\" con el texto \"Info\", y agrégale las clases de Bootstrap <code>btn-info</code> y <code>btn-block</code>.", | ||
"Ten en mente que estos botones todavía necesitan las clases <code>btn</code> y <code>btn-block</code>." | ||
+ ], | ||
+ "nameFr": "Indiquez les actions optionelles avec des boutons informatifs", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap est livré avec plusieurs couleurs prédéfinies pour les boutons. La classe <code>btn-info</code> est utilisée pour indiquer des actions optionelles pour vos utilisateurs.", | ||
+ "Créez un nouveau bouton Bootstrap bloc en dessous de votre bouton \"Like\" avec le texte \"Info\" et donnez lui les classes Bootstrap <code>btn-info</code> et <code>btn-block</code>.", | ||
+ "Notez que ces boutons ont toujours besoins des classes <code>btn</code> and <code>btn-block</code>." | ||
] | ||
}, | ||
{ | ||
@@ -660,11 +709,18 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Advierte a tus usuarios sobre acciones peligrosas", | ||
+ "titleEs": "Advierte a tus usuarios sobre acciones peligrosas", | ||
"descriptionEs": [ | ||
"Bootstrap incluye varios colores pre-definidos para botones. La clase <code>btn-danger</code> es el color de botón que usarías para notificar a los usuarios que el botón ejecuta una acción destructiva, como por ejemplo eliminar la foto de un gato.", | ||
"Crea un botón con el texto \"Delete\" y dale la clase <code>btn-danger</code>.", | ||
"Recuerda que estos botones todavía requieren las clases <code>btn</codez> y <code>btn-block</code>." | ||
+ ], | ||
+ "nameFr": "Prévenez vos utilisateurs d'une action dangereuse", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap est livré avec plusieurs couleurs prédéfinies pour les boutons. La classe <code>btn-danger</code> est utilisée pour indiquer aux utilisateurs que le bouton actionne un processus destructif comme supprimer une photo de chat.", | ||
+ "Créez un bouton ayant le texte \"Delete\" et donnez lui la classe <code>btn-danger</code>.", | ||
+ "Notez que ces boutons ont toujours besoins des classes <code>btn</code> and <code>btn-block</code>." | ||
+ | ||
] | ||
}, | ||
{ | ||
@@ -673,7 +729,7 @@ | ||
"description": [ | ||
"Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a <code>div</code> element.", | ||
"Here's a diagram of how Bootstrap's 12-column grid layout works:", | ||
- "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>", | ||
+ "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>", | ||
"Note that in this illustration, the <code>col-md-*</code> class is being used. Here, <code>md</code> means medium, and <code>*</code> is a number specifying how many columns wide the element should be. In this case, the column width of an element on a medium-sized screen, such as a laptop, is being specified.", | ||
"In the Cat Photo App that we're building, we'll use <code>col-xs-*</code>, where <code>xs</code> means extra small (like an extra-small mobile phone screen), and <code>*</code> is the number of columns specifying how many columns wide the element should be.", | ||
"Put the <code>Like</code>, <code>Info</code> and <code>Delete</code> buttons side-by-side by nesting all three of them within one <code><div class=\"row\"></code> element, then each of them within a <code><div class=\"col-xs-4\"></code> element.", | ||
@@ -749,15 +805,25 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado", | ||
+ "titleEs": "Usa la cuadrícula de Bootstrap para poner elementos lado a lado", | ||
"descriptionEs": [ | ||
"Bootstrap utiliza un sistema de cuadrícula adaptativa que facilita el poner elementos en fila y especificar la anchura relativa de cada elemento. La mayoría de las clases de Bootstrap pueden ser aplicadas a un elemento <code>div</code>.", | ||
"Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:", | ||
- "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>", | ||
+ "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>", | ||
"En esta ilustración se está utilizando la clase <code>col-md-*</code>. Aquí, <code>md</code> significa mediano, y <code>*</code> es un número que especifica la cantidad de columnas debe tomar el ancho del elemento. En este caso, se especifica el ancho de columna de un elemento en una pantalla de tamaño mediano, como una laptop.", | ||
"En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.", | ||
"Pon los botones de <code>Like</code>, <code>Info</code> y <code>Delete</code> lado a lado. Esto se hace anidando los tres botones dentro de un elemento <code><div class=\"row\"></code>, y luego cada uno de ellos dentro de un elemento <code><div class=\"col-xs-4\"></code>.", | ||
"La clase <code>row</code> se aplica al elemento <code>div</code>, dentro del cual van anidados los botones." | ||
+ ], | ||
+ "nameFr": "Utilisez la grille de Bootstrap pour mettre les éléments côte-à-côte.", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap utilise un système de grille adaptative, qui rend plus simple le placement des éléments en rangées et la spécification de la largeur relative de chaque élément. La plupart des classes de Bootstrap peuvent être associés à un élément <code>div</code>", | ||
+ "Voici un diagramme décrivant le fonctionnement du système de grille à 12 colonnes:", | ||
+ "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Cliquer pour agrandir\" alt=\"Une image illustrant le système de grille Bootstrap\"></a>", | ||
+ "Notez que dans cet exemple, nous avons utilisé la classe <code>col-md-*</code>. Ici, <code>md</code> signifie medium, et <code>*</code> donne le nombre de colonnes en largeur de l'élément. Dans le cas présenté, on a défini la largeur en colonnes d' un élément sur un écrand de taille medium, comme un ordinateur portable.", | ||
+ "Dans l'application de photos de chats que nous sommes en train de construire, nous utiliserons <code>col-xs-*</code>, où <code>xs</code> signifie extrêmement petit (comme un écran de téléphone mobile), et <code>*</code> est le nombre de colonnes en largeur de l'élément.", | ||
+ "Mettez les boutons <code>Like</code>, <code>info</code> et <code>Delete</code> côte-à-côte en les enveloppant tous dans un élément <code><div class=\"row\"></code>, puis chacun d'entre eux dans un élément <code><div class=\"col-xs-4\"></code> element.", | ||
+ "La classe <code>row</code> est donnée à un <code>div</code>, et les boutons peuvent être insérés à l'intérieur de celui-ci." | ||
] | ||
}, | ||
{ | ||
@@ -849,13 +915,21 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Reemplaza el CSS personalizado por Bootstrap", | ||
+ "titleEs": "Reemplaza el CSS personalizado por Bootstrap", | ||
"descriptionEs": [ | ||
"Podemos limpiar nuestro código y hacer que nuestra aplicación de fotos de gatos se vea más convencional, usando los estilos pre-construidos de Bootstrap, en lugar de los estilos personalizados que creamos antes.", | ||
"No te preocupes, luego habrá más tiempo para personalizar nuestro CSS.", | ||
"Elimina las declaraciones CSS <code>.red-text</code>, <code>p</code>, y <code>.smaller-image</code> de tu elemento <code>style</code>, de forma que las únicas declaraciones que queden en tu elemento <code>style</code> sean <code>h2</code> y <code>thick-green-border</code>.", | ||
"Luego elimina el elemento <code>p</code> que contiene un enlace nulo. Después, elimina la clase <code>red-text</code> de tu elemento <code>h2</code> y reemplázalo con la clase <code>text-primary</code> de Bootstrap.", | ||
"Por último, elimina la clase \"smaller-image\" de tu primer elemento <code>img</code> y reemplázalo con la clase <code>img-responsive</code>." | ||
+ ], | ||
+ "nameFr": "Remplacez le CSS personnalisé par les styles Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Nous pouvons nettoyer notre code et rendre le look de notre appli Cat Photos plus conventionnel en utilisant les styles intégrés à Bootstrap à la place des styles personnalisés que nous avons créés auparavant.", | ||
+ "Ne vous inquiétez pas - nous auront beaucoup de temps pour personnaliser notre CSS plus tard.", | ||
+ "Supprimez les déclarations CSS <code>.red-text</code>, <code>p</code>, et <code>.smaller-image</code> de votre élément <code>style</code> pour que les seules déclarations restantes dans l'élément <code>style</code> soient <code>h2</code> et <code>thick-green-border</code>.", | ||
+ "Ensuite supprimez l'élément <code>p</code> contenant un lien fantôme. Puis enlevez la classe <code>red-text</code> de votre élément <code>h2</code> et remplacez la par la classe Bootstrap <code>text-primary</code>", | ||
+ "Enfin, enlevez la classe \"smaller-image\" dde votre premier élément <code>img</code> et remplacez le par la classe <code>img-responsive</code>." | ||
] | ||
}, | ||
{ | ||
@@ -864,7 +938,7 @@ | ||
"description": [ | ||
"You can use spans to create inline elements. Remember when we used the <code>btn-block</code> class to make the button fill the entire row?", | ||
"This image illustrates the difference between <code>inline</code> elements and <code>block-level</code> elements:", | ||
- "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>", | ||
+ "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Click to enlarge\" alt=\"An \"inline\" button is as small as the text it contains. In this image, it's centered. Below it is a \"block-level\" button, which stretches to fill the entire horizontal space.'></a>", | ||
"By using the <code>span</code> element, you can put several elements together, and even style different parts of the same element differently.", | ||
"Nest the word \"love\" in your \"Things cats love\" element below within a <code>span</code> element. Then give that <code>span</code> the class <code>text-danger</code> to make the text red.", | ||
"Here's how you would do this with the \"Top 3 things cats hate\" element:", | ||
@@ -935,15 +1009,25 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa span para elementos en línea", | ||
+ "titleEs": "Usa span para elementos en línea", | ||
"descriptionEs": [ | ||
"Puedes utilizar span para crear elementos en línea. ¿Recuerdas cuando usamos la clase <code>btn-block</code> para hacer que el botón llenara toda la línea?", | ||
"Esta imagen ilustra la diferencia entre elementos en línea (<code>inline</code>) y elementos a nivel de bloque (<code>block-level</code>):", | ||
- "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira para llenar todo el espacio horizontal.'></a>", | ||
+ "<a href=\"//i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/O32cDWE.png\" title=\"Pulsa para agrandar\" alt=\"Un botón \"en línea\" es tan pequeño como el texto que contiene. En esta imagen, está centrado. Debajo de este hay un botón \"a nivel de bloque\", que se estira para llenar todo el espacio horizontal.'></a>", | ||
"Al usar el elemento <code>span</code>, puedes poner varios elementos juntos, e incluso darle diferentes estilos a partes diferentes del mismo elemento.", | ||
"Anida la palabra \"love\" en tu elemento \"Things cats love\" dentro de un elemento <code>span</code>. Luego, asigna a ese elemento <code>span</code> la clase <code>text-danger</code> para hacer que el texto sea rojo.", | ||
"Así es como lo harías con el elemento \"Top 3 things cats hate\":", | ||
"<code><p>Top 3 things cats <span class = \"text-danger\">hate:</span></p></code>" | ||
+ ], | ||
+ "nameFr": "Utiliser Spans pour les éléments \"Inline\"", | ||
+ "descriptionFr": [ | ||
+ "Vous pouvez utiliser les spans pour créer des éléments inline. Vous rappelez vous quand nous avions utilisé la classe <code>btn-block</code> pour remplir la rangée entière?", | ||
+ "Cette image illustre la différence entre les éléments <code>inline</code> (en ligne) et les éléments <code>block-level</code> (de blocs):", | ||
+ "<a href=\"http://i.imgur.com/O32cDWE.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/O32cDWE.png\" title=\"Cliquez pour élargir\" alt=\"Un bouton \"inline\" est aussi petit que le texte qu'il contient. Dans cette image, c'est centré. En dessous il y a un bouton \"block-level\", qui s'étire à tout l'espace horizontal.'></a>", | ||
+ "En utilisant un élément <code>span</code>, vous pouvez mettre ensemble plusieurs éléments, et même donner un style différent à plusieurs parties d'un même élément", | ||
+ "Nichez le mot \"love\" dans votre élément \"Things cats love\" en dessous dans un élément <code>span</code>; Ensuite donnez à ce <code>span</code> la classe <code>text-danger</code> pour rendre le texte rouge.", | ||
+ "Il faudrait que vous fassiez ainsi pour l'élément \"Top 3 things cats hate\":", | ||
+ "<code><p>Top 3 things cats <span class = \"text-danger\">hate:</span></p></code>" | ||
] | ||
}, | ||
{ | ||
@@ -953,7 +1037,7 @@ | ||
"We will make a simple heading for our Cat Photo App by putting the title and relaxing cat image in the same row.", | ||
"Remember, Bootstrap uses a responsive grid system, which makes it easy to put elements into rows and specify each element's relative width. Most of Bootstrap's classes can be applied to a <code>div</code> element.", | ||
"Here's a diagram of how Bootstrap's 12-column grid layout works:", | ||
- "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>", | ||
+ "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Click to enlarge\" alt=\"an image illustrating Bootstrap's grid system\"></a>", | ||
"Note that in this illustration, the <code>col-md-*</code> class is being used. Here, <code>md</code> means medium, and <code>*</code> is a number specifying how many columns wide the element should be. In this case, the column width of an element on a medium-sized screen, such as a laptop, is being specified.", | ||
"In the Cat Photo App that we're building, we'll use <code>col-xs-*</code>, where <code>xs</code> means extra small (like an extra-small mobile phone screen), and <code>*</code> is the number of columns specifying how many columns wide the element should be.", | ||
"Nest your first image and your <code>h2</code> element within a single <code><div class=\"row\"></code> element. Nest your <code>h2</code> element within a <code><div class=\"col-xs-8\"></code> and your image in a <code><div class=\"col-xs-4\"></code> so that they are on the same line.", | ||
@@ -1023,16 +1107,27 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea un encabezado personalizado", | ||
+ "titleEs": "Crea un encabezado personalizado", | ||
"descriptionEs": [ | ||
"Crearemos un encabezado simple para nuestra aplicación de fotos de gatos poniendo el título y la relajante imagen del gato en la misma línea.", | ||
"Recuerda, Bootstrap usa un sistema de cuadrícula adaptativo, el cual facilita poner elementos en filas y especificar el ancho relativo de cada elemento. La mayoría de las clases de Bootstrap pueden aplicarse a un elemento <code>div</code>.", | ||
"Aquí hay un diagrama del funcionamiento de la cuadrícula de 12 columnas Bootstrap:", | ||
- "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Pulsa para agrandar\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>", | ||
+ "<a href=\"//i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"//i.imgur.com/FaYuui8.png\" title=\"Pulsa para agrandar\" alt=\"una imagen que muestra el sistema de cuadrícula de Bootstrap\"></a>", | ||
"En esta ilustración se está utilizando la clase <code>col-md-*</code>. Aquí, <code>md</code> significa mediano, y <code>*</code> es un número que especifica el número de columnas que debe tomar el ancho del elemento. En este caso, se especifica el ancho de columna de un elemento en una pantalla de tamaño mediano, como un computador portátil.", | ||
"En la aplicación de fotos de gatos que estamos construyendo, usaremos <code>col-xs-*</code>, donde <code>xs</code> significa extra pequeño (como una pantalla extra-pequeña de un teléfono), y <code>*</code> especifica el número de columnas que debe tomar el ancho del elemento.", | ||
"Anida tu primera imagen y tu elemento <code>h2</code> dentro de un solo elemento <code><div class=\"row\"></code>. Anida tu texto <code>h2</code> dentro de un <code><div class=\"col-xs-8\"></code> y tu imagen en un <code><div class=\"col-xs-4\"></code> de tal forma que estén en la misma línea.", | ||
"¿Te diste cuenta de que la imagen es ahora justamente del tamaño apropiado para el texto?" | ||
+ ], | ||
+ "nameFr": "Créer un entête personalisé", | ||
+ "descriptionFr": [ | ||
+ "Notice how the image is now just the right size to fit along the text?", | ||
+ "Nous allons réaliser un entête tout simple pour notre appli Cat Photo App en plaçant le titre et l'image de chat relaxante dans la même rangée.", | ||
+ "Rappelez-vous, Bootstrap utilise un système de grille adaptative, qui rend facile le placement des éléments en rangées et la définition de la largeur relative de chaque élément. La plupart des classes de Bootstrap peuvent être appliquées à un élément <code>div</code>.", | ||
+ "Voici un diagramme du fonctionnement de la grille à 12 colonnes de Bootstrap:", | ||
+ "<a href=\"http://i.imgur.com/FaYuui8.png\" data-lightbox=\"img-enlarge\"><img class=\"img-responsive\" src=\"http://i.imgur.com/FaYuui8.png\" title=\"Cliquer pour élargir\" alt=\"Une image illlustrant le système de grille de Bootstrap\"></a>", | ||
+ "Notez que dans cet exemple, on utilise la classe <code>col-md-*</code>. Ici <code>md</code> signifie medium, et <code>*</code> est un nombre spécifiant le nombre de colonnes en largeur que l'élément devrait avoir.", | ||
+ "Enveloppez votre première image et votre élément <code>h2</code> dans un seul élément <code><div class=\"row\"></code>. Mettez l'élément <code>h2</code> dans un <code><div class=\"col-xs-8\"></code> et votre image dans un <code><div class=\"col-xs-4\"></code> pour qu'ils soient sur la même ligne.", | ||
+ "Voyez vous comme l'image est maintenant exactement ajustée à la bonne taille pour être à côté du texte?" | ||
] | ||
}, | ||
{ | ||
@@ -1114,7 +1209,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Agrega iconos de Font Awesome a los botones", | ||
+ "titleEs": "Agrega iconos de Font Awesome a los botones", | ||
"descriptionEs": [ | ||
"Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.", | ||
"Puedes añadir Font Awesome a cualquier aplicación sólo incluyendo y agregando el siguiente código al comienzo de tu HTML:", | ||
@@ -1123,6 +1218,16 @@ | ||
"El elemento <code>i</code> originalmente era usado para hacer textos en itálicas, pero ahora comunmente se usa para iconos. Le agregas clases de Font Awesome al elemento <code>i</code> para convertirlo en un ícono, por ejemplo:", | ||
"<code><i class=\"fa fa-info-circle\"></i></code>", | ||
"Usa Font Awesome para agregar un icono de \"pulgar arriba\" <code>thumbs-up</code> a tu botón de like dándole un elemento <code>i</code> con las clases <code>fa</code> y <code>fa-thumbs-up</code>." | ||
+ ], | ||
+ "nameFr": "Ajouter des icônes Font Awesome à nos boutons", | ||
+ "descriptionFr": [ | ||
+ "Font Awesome est une librairie d'icônes très pratique. Ces icones sont des images vectorielles, stockées en format <code>.svg</code>. Ces icônes sont traités exactemeent comme des polices. Vous pouvez choisir leur taille en pixel, et ils prendront la taille de police de leur élémment parent HTML.", | ||
+ "Vous poyvez ajouter Font Awesome à n'importe quell application en ajoutant le code suivant en haut de votre HTML:", | ||
+ "<code><link rel=\"stylesheet\" href=\"//maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css\"/></code>", | ||
+ "Ici, nous l'avons déjà ajouté pour vous dans le back-office.", | ||
+ "La balise <code>i</code> eétait utilisé à la base pour mettre les autres éléments en italique, mais maintenant elle est utilisée pour les icones. Vous ajoutez des classes Font Awesome à un élément <code>i</code> pour les les transformer en icones, par exemple:", | ||
+ "<code><i class=\"fa fa-info-circle\"></i></code>", | ||
+ "Utilisez Font Awesome pour ajouter un icone <code>thumbs-up</code> à votre bouton de like en lui donnant un élément <code>i</code> ayant les classes <code>fa</code> et <code>fa-thumbs-up</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1198,10 +1303,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Agrega Font Awesome a todos los botones", | ||
+ "titleEs": "Agrega Font Awesome a todos los botones", | ||
"descriptionEs": [ | ||
"Font Awesome es una librería de iconos muy conveniente. Estos iconos son imágenes vectoriales, almacenadas en formato <code>.svg</code>, y son tratados como si fueran fuentes. Puedes especificar su tamaño usando pixeles, y tomarán el tamaño de fuente de su elemento HTML padre.", | ||
"Utiliza Font Awesome para agregar un icono <code>info-circle</code> a tu botón informativo y un icono <code>trash</code> a tu botón de eliminar." | ||
+ ], | ||
+ "nameFr": "Ajoutez des icones Font Awesome à tous nos boutons", | ||
+ "descriptionFr": [ | ||
+ "Font Awesome est une librairie d'icônes très pratique. Ces icones sont des images vectorielles, stockées en format <code>.svg</code>. Ces icônes sont traités exactemeent comme des polices. Vous pouvez choisir leur taille en pixel, et ils prendront la taille de police de leur élémment parent HTML.", | ||
+ "Utilisez Font Awesome pour ajouter un icone <code>info-circle</code> à votre bouton d'info et un icone <code>trash</code> à votre bouton de suppression." | ||
] | ||
}, | ||
{ | ||
@@ -1277,10 +1387,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea botones de opción con estilo adaptativo", | ||
+ "titleEs": "Crea botones de opción con estilo adaptativo", | ||
"descriptionEs": [ | ||
"¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.", | ||
"Anida todos los botones de opción dentro de un elemento <code><div class=\"row\"></code>. Luego, anida cada uno de ellos dentro de un elemento <code><div class=\"col-xs-6\"></code>." | ||
+ ], | ||
+ "nameFr": "Donnez un style responsive à vos boutons radio", | ||
+ "descriptionFr": [ | ||
+ "Vous pouvez utiliser la classe Bootstrap <code>col-xs-*</code> sur des éléments <code>form</code>. Comme ça, nos boutons radio serons disposés régulierement dans la page, quelle que soit la largeur de l'écran.", | ||
+ "Nichez tous vous boutons radio dans un élément <code><div class=\"row\"></code>. Ensuite, nichezchacun d'entre eux dans un élément <code><div class=\"col-xs-6\"></code>" | ||
] | ||
}, | ||
{ | ||
@@ -1363,10 +1478,16 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea casillas de selección con estilo adaptativo", | ||
+ "titleEs": "Crea casillas de selección con estilo adaptativo", | ||
"descriptionEs": [ | ||
"¡Puedes utilizar las clases <code>col-xs-*</code> de Bootstrap en elementos <code>form</code> también! De esta forma, nuestros botones de opción estarán igualmente distribuidos en la página, sin importar qué tan ancha es la resolución de la pantalla.", | ||
"Anida todas las casillas de selección en un elemento <code><div class=\"row\"></code>. Luego, anida cada una de ellas en un elemento <code><div class=\"col-xs-4\"></code>." | ||
+ ], | ||
+ "nameFr": "Donnez un style responsive à vos checkbox (cases de séléction)", | ||
+ "descriptionFr": [ | ||
+ "Vous pouvez aussi utiliser la classe Bootstrap <code>col-xs-*</code> sur des éléments <code>form</code>! Comme ça, nos boutons radio serons disposés régulierement dans la page, quelle que soit la largeur de l'écran.", | ||
+ "You can use Bootstrap's <code>col-xs-*</code> classes on <code>form</code> elements, too! This way, our checkboxes will be evenly spread out across the page, regardless of how wide the screen resolution is.", | ||
+ "Nichez toustes vos checkbox dans un élément <code><div class=\"row\"></code>. Ensuite nichez chacun d'entre eux dans un élément <code><div class=\"col-xs-4\"></code>" | ||
] | ||
}, | ||
{ | ||
@@ -1458,10 +1579,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Estiliza cajas de texto como controles de formulario", | ||
+ "titleEs": "Estiliza cajas de texto como controles de formulario", | ||
"descriptionEs": [ | ||
"Puedes agregar el icono <code>fa-paper-plane</code> de Font Awesome incluyendo <code><i class=\"fa fa-paper-plane\"></i></code> dentro de tu elemento <code>button</code> de envío.", | ||
"Dale a la entrada de texto de tu formulario la clase <code>form-control</code>. Dale al botón de envío de tu formulario las clases <code>btn btn-primary</code>. También, incluye en ese botón el icono <code>fa-paper-plane</code> de Font Awesome." | ||
+ ], | ||
+ "nameFr": "Donnez un style similaire au contrôles de formulaires à des zones de texte", | ||
+ "descriptionFr": [ | ||
+ "Vous pouvez ajouter l'icone Font Awesome <code>fa-paper-plane</code> en ajoutant <code><i class=\"fa fa-paper-plane\"></i></code> à l'intérieur de votre <code>button</code> de soumission du formulaire.", | ||
+ "Donnez aux entrées texte de votre formulaire une classe <code>form-control</code>. Donnez à votre bouton de soumission de formulaire les classes <code>btn btn-primary</code>. Donnez lui aussi un icone Font Awesome <code>fa-paper-plane</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1554,11 +1680,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap", | ||
+ "titleEs": "Alínea elementos de formulario de forma adaptativa con Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora vamos a poner el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario en la misma línea. Lo haremos de la misma forma que lo hicimos anteriormente: usando un elemento <code>div</code> con la clase <code>row</code>, y otros elementos <code>div</code> dentro de ese, usando la clase <code>col-xs-*</code>.", | ||
"Anida ambos, el elemento <code>input</code> y el elemento <code>button</code> que dice submit de tu formulario dentro de un <code>div</code> con la clase <code>row</code>. Anida el elemento <code>input</code> de tu formulario dentro de un div con cla clase <code>col-xs-7</code>. Anida el elemento <code>button</code> que dice submit de tu formulario en un elemento <code>div</code> con la clase <code>col-xs-5</code>.", | ||
"¡Este es el último desafío que haremos con nuestra aplicación de fotos de gato por ahora. Esperamos que hayas disfrutado aprender acerca de Font Awesome, Bootstrap y diseño adaptativo!" | ||
+ ], | ||
+ "nameFr": "Aligner les éléments de formulaire de façon responsive avec Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Maintenant mettons sur la même ligne l'élément <code>input</code> et le <code>button</code> de soumission du formulaire. Nous procéderons de la même façon que précedemment: en utilisant un élément <code>div</code> avec la classe <code>row</code>, et un un autre div à l'intérieur qui aura la classe <code>col-xs-*</code>.", | ||
+ "Nichez à la fois l'<code>input</code> texte de votre formulaire et le <code>button</code> de soumission de formulaire à l'intérieur d'un <code>div</code> avec la classe <code>row</code>. Nichez l'<code>input</code> texte du formulaire dans un div ayant la classe <code>col-xs-7</code>. Nichez votre <code>button</code> de soumission de formulaire dans un div ayant la classe <code>col-xs-5</code>.", | ||
+ "C'est le dernier challenge qui concerne notre application de photos de chats. Nous espérons que vous avez aimé apprendre Font Awesome, Bootstrap et du design adaptatif!" | ||
] | ||
}, | ||
{ | ||
@@ -1584,12 +1716,19 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea un encabezado con Bootstrap", | ||
+ "titleEs": "Crea un encabezado con Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora vamos a comenzar un proyecto desde cero para practicar nuestras habilidades con HTML, CSS y Bootstrap.", | ||
"Crearemos un área de juego con jQuery, el cual utilizaremos en nuestros desafíos con jQuery.", | ||
"Para empezar, crea un elemento <code>h3</code>, con el texto <code>jQuery Playground</code>.", | ||
"Ponle color a tu elemento <code>h3</code> con la clase <code>text-primary</code> de Bootstrap, y céntrala con la clase <code>text-center</code> de Bootstrap." | ||
+ ], | ||
+ "nameFr": "Créer un entête Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Maintenons, créons queqlque chose à partir de zéro pour pratiquer nos connaissances acquises sur HTML, CSS et Bootstrap.", | ||
+ "Nous allons construire un terrain de jeu pour jQuery, que nous allons bientôt utiliser dans les challenges jQuery.", | ||
+ "Pour commencer, créez un élément <code>h3</code>, contenant le texte <code>jQuery Playground</code>.", | ||
+ "Colorez notre élément <code>h3</code> avec la classe Bootstrap <code>text-primary</code>, et centrez le en utilisant la classe Bootstrap <code>text-center</code>" | ||
] | ||
}, | ||
{ | ||
@@ -1611,10 +1750,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap", | ||
+ "titleEs": "Aloja la página dentro de un elemento Div contenedor fluido de Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora asegurémonos de que todo el contenido en nuestra página pueda adaptarse a dispositivos móviles.", | ||
"Anida tu elemento <code>h3</code> dentro de un elemento <code>div</code> con la clase <code>container-fluid</code>." | ||
+ ], | ||
+ "nameFr": "Loger notre page dans un conteneur Bootstrap Fluid Div", | ||
+ "descriptionFr": [ | ||
+ "Maintenant, assurons nous que tout le contenu de la page est mobile-responsive (adaptatif au téléphones mobiles).", | ||
+ "Nichons notre element <code>h3</code> à l'intérieur d'un élément <code>div</code> ayant la classe <code>container-fluid</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1639,10 +1783,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea una fila en Bootstrap", | ||
+ "titleEs": "Crea una fila en Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora crearemos una fila de Bootstrap con nuestros elementos en línea.", | ||
"Crea un elemento <code>div</code> debajo de la etiqueta <code>h3</code>, con la clase <code>row</code>." | ||
+ ], | ||
+ "nameFr": "Créer une rangée (row) Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Maintenant nous allons créer une rangée (row) Bootstrap pour nos éléments inline.", | ||
+ "Créez un élément <code>div</code> en dessous de la balise <code>h3</code>, avec une classe <code>row</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1667,10 +1816,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Parte tu fila en Bootstrap", | ||
+ "titleEs": "Parte tu fila en Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora que tenemos una fila en Bootstrap, vamos a partirla en dos columnas para alojar nuestros elementos.", | ||
"Crea dos elementos <code>div</code> dentro de tu fila, ambos con la clase <code>col-xs-6</code>." | ||
+ ], | ||
+ "nameFr": "Séparer une rangée Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Maintenant que nous avons une rangée Bootstrap, séparons la en deux colonnes pour placer nos éléments.", | ||
+ "Créez deux éléments <code>div</code>dans votre rangée, chacun ayant la classe <code>col-xs-6</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1700,10 +1854,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea pozos en Bootstrap", | ||
+ "titleEs": "Crea pozos en Bootstrap", | ||
"descriptionEs": [ | ||
"Bootstrap tiene una clase llamada <code>well</code> que crea una sensación visual de profundidad para tus columnas.", | ||
"Anida un elemento <code>div</code> con la clase <code>well</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>col-xs-6</code>." | ||
+ ], | ||
+ "nameFr": "Créez un \"puit\" (well) Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap possède une classe appelée <code>well</code> qui peux créer une certaine profondeur pour vos colonnes.", | ||
+ "Nichez un élément <code>div</code> avec la classe <code>well</code> dans chacun de vos éléments <code>col-xs-6</code> <code>div</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1741,10 +1900,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Agrega elementos dentro de los pozos de Bootstrap", | ||
+ "titleEs": "Agrega elementos dentro de los pozos de Bootstrap", | ||
"descriptionEs": [ | ||
"Ahora estamos a una profundidad de varios elementos <code>div</code> dentro de cada columna de nuestra fila. No iremos más profundo que esto. Ahora podemos agregar nuestros elementos <code>button</code>.", | ||
"Anida tres elementos <code>button</code> dentro de cada uno de tus elementos <code>div</code> que tienen la clase <code>well</code>." | ||
+ ], | ||
+ "nameFr": "Ajouter des éléments dans un puit Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Nous avons maintenant plusieurs niveaux de profondeur d'éléments <code>div</code> dans chaque colonne de notre rangée. Ceci est suffisant pour le moment. Maintenant nous pouvons ajouter nos éléments <code>button</code>.", | ||
+ "Nichez trois éléments <code>button</code> dans chaque élément <code>well</code> <code>div</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1781,10 +1945,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Aplica el estilo de botón predeterminado de Bootstrap", | ||
+ "titleEs": "Aplica el estilo de botón predeterminado de Bootstrap", | ||
"descriptionEs": [ | ||
"Bootstrap tiene otra clase de botón llamada <code>btn-default</code>.", | ||
"Aplica las clases <code>btn</code> y <code>btn-default</code> a cada uno de tus elementos <code>button</code>." | ||
+ ], | ||
+ "nameFr": "Appliquer le style de bouton par défaut de Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Bootstrap possède une autre classe de bouton appelée <code>btn-default</code>.", | ||
+ "Appliquez les deux classes <code>btn</code> et <code>btn-default</code> à chacun de vos éléments <code>button</code>" | ||
] | ||
}, | ||
{ | ||
@@ -1820,10 +1989,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Crea una clase para usar con selectores de jQuery", | ||
+ "titleEs": "Crea una clase para usar con selectores de jQuery", | ||
"descriptionEs": [ | ||
"No todas las clases necesitan tener un código CSS correspondiente. A veces creamos clases sólo con el propósito de seleccionar esos elementos más fácilmente usando jQuery.", | ||
"Dale a cada uno de tus elementos <code>button</code> la clase <code>target</code>." | ||
+ ], | ||
+ "nameFr": "Créez une classe à cibler avec les sélécteurs jQuery", | ||
+ "descriptionFr": [ | ||
+ "Toutes les classes ne nécéssitent pas d'avoir un code CSS qui leur correspondent. Parfois ous créons des classes dans le seul but de pouvoir sélectionner ces éléments plus facilement en utilisant jQuery.", | ||
+ "Donnez à chacun de vos éléments <code>button</code> la classe <code>target</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1864,7 +2038,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap", | ||
+ "titleEs": "Asígnales atributos de identificación (id) a tus elementos de Bootstrap", | ||
"descriptionEs": [ | ||
"Recuerda que, además de los atributos de clase, también puedes darle a cada uno de tus elementos un atributo <code>id</code>.", | ||
"Cada id debe ser único para un elemento específico y ser usado solamente una vez por página.", | ||
@@ -1872,6 +2046,15 @@ | ||
"Recuerda que puedes darle a un elemento un id como el siguiente:", | ||
"<code><div class=\"well\" id=\"center-well\"></code>", | ||
"Dale al pozo de la izquireda el id <code>left-well</code>. Al pozo de la derecha, dale un id <code>right-well</code>." | ||
+ ], | ||
+ "nameFr": "Ajouter des attributs ID à vos éléments Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Rappelez vous qu'en plus des attributs classes, vous pouvez donnez à chacun de vos éléments un attribut <code>id</code>.", | ||
+ "Chaque id doit être unique pour un élément donné et utilisé une seule fois par page.", | ||
+ "Donnons un id unique à chacun de nos éléments <code>div</code> de classe <code>well</code>.", | ||
+ "Rappelez vous que vous pouvez donner un id à un élément ainsi :", | ||
+ "<code><div class=\"well\" id=\"center-well\"></code>", | ||
+ "Donnez au puit sur la gauche un id de <code>left-well</code>. Donnez au puit sur la droite un id de <code>right-well</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1913,11 +2096,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Etiqueta tus pozos de Bootstrap", | ||
+ "titleEs": "Etiqueta tus pozos de Bootstrap", | ||
"descriptionEs": [ | ||
"Para que todo esté más claro, vamos a ponerle a todos nuestros pozos una etiqueta que sea igual a su id.", | ||
"Sobre tu pozo de la izquierda, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#left-well</code>.", | ||
"Ahora, sobre tu pozo de la derecha, dentro de su elemento <code>div</code> que tiene la clase <code>col-xs-6</code>, agrega un elemento <code>h4</code> con el texto <code>#right-well</code>." | ||
+ ], | ||
+ "nameFr": "Donner un nom aux puits Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "Au nom de la clarté, donnons un nom à nos deux puits en accord avec leur ids", | ||
+ "Au dessus de votre puit de gauche, à l'intérieur de ses éléments <code>col-xs-6</code> <code>div</code>, ajoutez un élément <code>h4</code> ayant le texte <code>#left-well</code>.", | ||
+ "Au dessus de votre puit de droite, à l'intérieur de ses éléments <code>col-xs-6</code> <code>div</code>, ajoutez un élément <code>h4</code> ayant le texte <code>#right-well</code>." | ||
] | ||
}, | ||
{ | ||
@@ -1961,11 +2150,17 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Dale a cada elemento un ID único", | ||
+ "titleEs": "Dale a cada elemento un ID único", | ||
"descriptionEs": [ | ||
"También quisiéramos referirnos a cada botón por su id utilizando jQuery.", | ||
"Dale a cada uno de tus botones un id único, comenzando con <code>target1</code> y terminando con <code>target6</code>.", | ||
"Asegúrate que <code>target1</code> a <code>target3</code> queden en <code>#left-well</code>, mientras que <code>target4</code> a <code>target6</code> queden en <code>#right-well</code>." | ||
+ ], | ||
+ "nameFr": "Donner à chaque élément un ID unique", | ||
+ "descriptionFr": [ | ||
+ "Nous désirerons aussi pouvoir être capable d'utiliser jQuery pour cibler chaque bouton suivant son id unique.", | ||
+ "Donnez à chaque bouton un id unique, commençant par <code>target1</code> et finissant par <code>target6</code>.", | ||
+ "Assurez vous que <code>target1</code> à <code>target3</code> sont dans le <code>#left-well</code>, et que <code>target4</code> à <code>target6</code> sont dans le <code>#right-well</code>." | ||
] | ||
}, | ||
{ | ||
@@ -2008,10 +2203,15 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Etiqueta los botones con Bootstrap", | ||
+ "titleEs": "Etiqueta los botones con Bootstrap", | ||
"descriptionEs": [ | ||
"De la misma forma en que etiquetamos nuestros pozos, ahora vamos a etiquetar nuestros botones.", | ||
"Dale a cada uno de tus elementos <code>button</code> un texto que corresponda con su <code>id</code>." | ||
+ ], | ||
+ "nameFr": "Donnez un nom à vos boutons Bootstrap", | ||
+ "descriptionFr": [ | ||
+ "De la même façon que nous avons donné un nom à nos puits, nous voulons nommer nos boutons.", | ||
+ "Donnez à chaque élément <code>button</code> un texte qui corresponde à son <code>id</code>." | ||
] | ||
}, | ||
{ | ||
@@ -2054,12 +2254,19 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa elementos para explicar tu código", | ||
+ "titleEs": "Usa elementos para explicar tu código", | ||
"descriptionEs": [ | ||
"Cuando comencemos a usar jQuery, modificarmemos los elementos HTML sin necesidad de hacer cambios reales en el código HTML.", | ||
"Vamos a asegurar que cualquier persona sepa que no debe modificar nada en este código directamente.", | ||
"Recuerda que puedes iniciar un comentario usando <code><!--</code> y terminarlo usando <code>--></code>", | ||
"Agrega un comentario al inicio de tu código HTML que diga <code>Only change code above this line.</code>" | ||
+ ], | ||
+ "nameFr": "Utiliser des commentaires pour clarifier son code", | ||
+ "descriptionFr": [ | ||
+ "Quand nous commencerons à utiliser jQuery, nous modifierons les éléments HTML sans avoir besoin de les changer directement dans le fichier HTML.", | ||
+ "Assurons nous que tout le monde sache qu'ils ne devraient pas modifier quoi que ce soit dans le code HTML.", | ||
+ "Rappelez vous que vous pouvez commencer un commentaire avec <code><!--</code> et le finir avec <code>--></code>", | ||
+ "Ajoutez un commentaire en haut de l'HTML qui annonce <code>Only change code above this line.</code> (Changez seulement le code au dessus de cette ligne.)" | ||
] | ||
} | ||
] | ||
View
20
.../challenges/01-front-end-development-certification/front-end-development-certificate.json
@@ -8,25 +8,25 @@ | ||
"title": "Claim Your Front End Development Certificate", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/k8btNUB.jpg", | ||
+ "//i.imgur.com/k8btNUB.jpg", | ||
"An image of our Front End Development Certificate", | ||
"This challenge will give you your verified Front End Development Certificate. Before we issue your certificate, we must verify that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them", | ||
"By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/14F2Van.jpg", | ||
+ "//i.imgur.com/14F2Van.jpg", | ||
"An image of the text \"Front End Development Certificate requirements\"", | ||
"Let's confirm that you have completed all of our basic and intermediate algorithm scripting challenges, and all our basic, intermediate, and advanced front end development projects. Click the button below to verify this.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"An image of the word \"Congratulations\"", | ||
"Congratulations! We've added your Front End Development Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.", | ||
"" | ||
@@ -240,33 +240,33 @@ | ||
], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Reclama tu certificado de Desarrollo de interfaces", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/k8btNUB.jpg", | ||
+ "//i.imgur.com/k8btNUB.jpg", | ||
"Una imagen que muestra nuestro certificado de Desarrollo de interfaces", | ||
"Este desafío te otorga tu certificado autenticado de Desarrollo de interfaces. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los desafíos básicos e intermedios de diseño de algoritmos, y todos los proyectos básicos e intermedios de desarrollo de interfaces. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.", | ||
"Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/14F2Van.jpg", | ||
+ "//i.imgur.com/14F2Van.jpg", | ||
"Una imagen del texto \"Front End Development Certificate requirements\"", | ||
"Confirmemos que has completado todos nuestros desafíos básicos e intermedios de diseño de algoritmos, y todos nuestros proyectos básicos e intermedios de desarrollo de interfaces. Pulsa el botón siguiente para hacer la verificación.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"Una imagen de la palabra \"Congratulations\"", | ||
"¡Felicitaciones! Hemos agregado tu certificado de Desarrollo de interfaces a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.", | ||
"" | ||
] | ||
- ] | ||
+ ], | ||
+ "titleEs": "Reclama tu certificado de Desarrollo de interfaces" | ||
} | ||
] | ||
} |
View
42
seed/challenges/01-front-end-development-certification/gear-up-for-success.json
@@ -8,7 +8,7 @@ | ||
"title": "Join our LinkedIn Alumni Network", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/vJyiXzU.gif", | ||
+ "//i.imgur.com/vJyiXzU.gif", | ||
"A gif showing how you can click the link below and fill in the necessary fields to add your Free Code Camp studies to your LinkedIn profile.", | ||
"LinkedIn recognizes Free Code Camp as a university. You can gain access to our large alumni network by adding Free Code Camp to your LinkedIn profile's education section. Set your graduation date as next year. For \"Degree\", type \"Full Stack Web Development Certification\". For \"Field of study\", type \"Computer Software Engineering\". Then click \"Save Changes\".", | ||
"https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp" | ||
@@ -18,10 +18,10 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Únete a nuestra red de alumnos en LinkedIn", | ||
+ "titleEs": "Únete a nuestra red de alumnos en LinkedIn", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/vJyiXzU.gif", | ||
+ "//i.imgur.com/vJyiXzU.gif", | ||
"Un gif mostrando como puedes pulsar el enlace de abajo y llenar todos los campos necesarios para agregar los estudios de Free Code Camp a tu perfil de LinkedIn", | ||
"LinkedIn reconoce a Free Code Camp como una universidad. Puedes obtener acceso a nuestra larga red de alumnos agregando Free Code Camp a la sección de educación de tu LinkedIn. Define tu fecha de graduación para el siguiente año. En el campo \"Grado\", escribe \"Certificación de Desarrollo Web Full Stack\". En \"Campo de estudio\", escribe \"Ingeniería de Software\". Después pulsa \"Guardar Cambios\".", | ||
"https://www.linkedin.com/profile/edit-education?school=Free+Code+Camp" | ||
@@ -33,21 +33,21 @@ | ||
"title": "Join our Subreddit", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/DYjJuCG.gif", | ||
+ "//i.imgur.com/DYjJuCG.gif", | ||
"A gif showing how you can create a Reddit account and join Free Code Camp's subreddit.", | ||
"Our community has its own subreddit on Reddit. This is a convenient way to ask questions and share links with our entire community. If you don't already have a Reddit account, you can create one in a few seconds - you don't even need an email address. Then you can click the \"subscribe\" button to join our subreddit. You may also want to subscribe to some of the other subreddits listed in our sidebar.", | ||
"https://reddit.com/r/freecodecamp" | ||
] | ||
], | ||
+ "releasedOn": "February 10, 2016", | ||
"challengeSeed": [], | ||
"tests": [], | ||
- "releasedOn": "February 10, 2016", | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Unete a nuestro Subreddit", | ||
+ "titleEs": "Unete a nuestro Subreddit", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/DYjJuCG.gif", | ||
+ "//i.imgur.com/DYjJuCG.gif", | ||
"Un gif mostrando como puedes crear una cuenta de Reddit y unirte a Free Code Camp subreddit.", | ||
"Nuestra comunidad tiene su propio subreddit en Reddit. Esta es una manera conveniente de hacer preguntas y compartir enlaces con toda nuestra comunidad. Si aún no dispones de una cuenta de Reddit, puedes crear una en unos segundos - ni siquiera necesitas una dirección de correo electrónico. A continuación, puedes pulsar el botón \"subscribe\" para unirte a nuestro subreddit. También puedes suscribirte a otros subreddits que estan listados en la barra lateral.", | ||
"https://reddit.com/r/freecodecamp" | ||
@@ -59,33 +59,33 @@ | ||
"title": "Read Coding News on our Medium Publication", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/FxSOL4a.gif", | ||
+ "//i.imgur.com/FxSOL4a.gif", | ||
"A gif showing how you can create a Medium account.", | ||
"Our community has a Medium publication where we write lots of articles about software development. If you don't already have a Medium account, you can follow the link and either sign in using social network, or by entering an email (they'll send you an email that you can click-through to create your account.) Once you select a topic of interest, you can continue through the steps.", | ||
"https://www.medium.com" | ||
], | ||
[ | ||
- "http://i.imgur.com/zhhywSX.gif", | ||
+ "//i.imgur.com/zhhywSX.gif", | ||
"A gif showing how you can click the \"follow\" button to follow Free Code Camp's publication.", | ||
"Once you're logged in, you can go to Free Code Camp's Medium publication and click \"follow\". Our campers publish several articles each week.", | ||
"https://medium.freecodecamp.com" | ||
] | ||
], | ||
+ "releasedOn": "February 10, 2016", | ||
"challengeSeed": [], | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "releasedOn": "February 10, 2016", | ||
- "nameEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium", | ||
+ "titleEs": "Lee noticias de codificación en nuestros canal de publicaciones Medium", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/FxSOL4a.gif", | ||
+ "//i.imgur.com/FxSOL4a.gif", | ||
"Un gif mostrando cómo crear una cuenta en Medium.", | ||
"Nuestra comunidad tiene un canal de publicaciones Medium, donde escribimos un montón de artículos sobre desarrollo de software. Si aún no dispones de una cuenta Medium, puedes seguir el enlace y registrarte usando una red social o ingresando un correo electrónico (enviarán un correo electrónico que debes abrirlo para crear tu cuenta.) Selecciona un tema de interés, puedes continuar a través de los pasos.", | ||
"https://www.medium.com" | ||
], | ||
[ | ||
- "http://i.imgur.com/zhhywSX.gif", | ||
+ "//i.imgur.com/zhhywSX.gif", | ||
"Un gif mostrando cómo puedes pulsar el botón \"follow\" para seguir las publicaciones de Free Code Camp.", | ||
"Una vez que inicias sesión, puedes ir al canal de publicaciones de Free Code Camp Medium y pulsar \"follow\". Nuestros campistas publican varios artículos cada semana.", | ||
"https://medium.freecodecamp.com" | ||
@@ -97,21 +97,21 @@ | ||
"title": "Watch us Code Live on Twitch.tv", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/8rtyRY1.gif", | ||
+ "//i.imgur.com/8rtyRY1.gif", | ||
"A gif showing how you can sign up for Twitch.tv and follow our channel.", | ||
"Our campers frequently code live on Twitch.tv, a popular streaming website. You can create an account in less than a minute, then follow Free Code Camp's channel. When you follow, you'll get the option of receiving an email notification each time one of our campers goes live. You can then join dozens of other campers and watch them code, and interact in a chat room. This is a fun, casual way to learn by watching people build projects.", | ||
"https://twitch.tv/freecodecamp" | ||
] | ||
], | ||
+ "releasedOn": "February 10, 2016", | ||
"challengeSeed": [], | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "releasedOn": "February 10, 2016", | ||
- "nameEs": "Miranos programar en vivo por Twitch.tv", | ||
+ "titleEs": "Miranos programar en vivo por Twitch.tv", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/8rtyRY1.gif", | ||
+ "//i.imgur.com/8rtyRY1.gif", | ||
"Un gif mostrando cómo resgistrarse en Twitch.tv y seguir nuestro canal.", | ||
"Nuestros campistas programan en vivo con frecuencia en Twitch.tv, un sitio web popular de streaming. Puedes crear una cuenta en menos de un minuto, luego, sigue al canal de Free Code Camp. Cuando sigas al canal, verás la opción de recibir una notificación por correo electrónico cada vez que uno de nuestros campistas esté en vivo. Puedes unirte a docenas de otros campistas y verlos programar, e interactuar en una sala de chat. Esta es una manera divertida e informal de aprender observando a las personas a construir proyectos.", | ||
"https://twitch.tv/freecodecamp" | ||
@@ -123,7 +123,7 @@ | ||
"title": "Commit to a Goal and a Nonprofit", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/Og1ifsn.gif", | ||
+ "//i.imgur.com/Og1ifsn.gif", | ||
"A gif showing how you can commit to a goal for your Free Code Camp studies and pledge a monthly donation to a nonprofit to give you external motivation to reach that goal.", | ||
"You can set a goal and pledge to donate to a nonprofit each month until you achieve that goal. This will give you external motivation in your quest to learn to code, as well as an opportunity to help nonprofits right away. Choose your goal, then choose a monthly donation. When you click \"commit\", the nonprofit's donation page will open in a new tab. This is completely optional, and you can change your commitment or stop it at any time.", | ||
"/commit" | ||
@@ -133,10 +133,10 @@ | ||
"tests": [], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Comprométete con una meta y con una organización sin fines de lucro", | ||
+ "titleEs": "Comprométete con una meta y con una organización sin fines de lucro", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/Og1ifsn.gif", | ||
+ "//i.imgur.com/Og1ifsn.gif", | ||
"Un gif mostrando como te puedes comprometer con una meta para tus estudios de Free Code Camp y prometer una donación mensual a una organización sin fines de lucro para darte motivación externa de alcanzar esa meta.", | ||
"Puedes poner una meta y prometer donar mensualmente a una organización sin fines de lucro hasta que alcances tu meta. Esto te dará motivación externa en tu aventura de aprender a programar, así como una oportunidad para ayudar inmediatamente a organizaciones sin fines de lucro. Elige tu meta, después elige tu donativo mensual. Cuando pulses \"commit\", la página de donación de la organización sin fines de lucro se abrirá en una nueva pestaña. Esto es completamente opcional, y puedes cambiar tu compromiso o detenerlo en cualquier momento.", | ||
"/comprometerse" | ||
@@ -144,4 +144,4 @@ | ||
] | ||
} | ||
] | ||
-} | ||
+} |
View
2,129
seed/challenges/01-front-end-development-certification/html5-and-css.json
1,064 additions,
1,065 deletions
not shown because the diff is too large. Please use a local Git client to view these changes.
View
210
seed/challenges/01-front-end-development-certification/intermediate-bonfires.json
@@ -19,6 +19,9 @@ | ||
"", | ||
"sumAll([1, 4]);" | ||
], | ||
+ "solutions": [ | ||
+ "function sumAll(arr) {\n var sum = 0;\n arr.sort(function(a,b) {return a-b;});\n for (var i = arr[0]; i <= arr[1]; i++) {\n sum += i; \n }\n return sum;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert(typeof sumAll([1, 4]) === 'number', 'message: <code>sumAll([1, 4])</code> should return a number.');", | ||
"assert.deepEqual(sumAll([1, 4]), 10, 'message: <code>sumAll([1, 4])</code> should return 10.');", | ||
@@ -32,16 +35,13 @@ | ||
"Math.min()", | ||
"Array.reduce()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Suma todos los números en un rango", | ||
+ "titleEs": "Suma todos los números en un rango", | ||
"descriptionEs": [ | ||
"Te pasaremos un vector que contiene dos números. Crea una función que devuelva la suma de esos dos números y todos los números entre ellos.", | ||
"El número menor no siempre será el primer elemento en el vector.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function sumAll(arr) {\n var sum = 0;\n arr.sort(function(a,b) {return a-b;});\n for (var i = arr[0]; i <= arr[1]; i++) {\n sum += i; \n }\n return sum;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -60,6 +60,9 @@ | ||
"", | ||
"diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);" | ||
], | ||
+ "solutions": [ | ||
+ "function diff(arr1, arr2) {\n var newArr = [];\n var h1 = Object.create(null);\n arr1.forEach(function(e) {\n h1[e] = e;\n });\n \n var h2 = Object.create(null);\n arr2.forEach(function(e) {\n h2[e] = e;\n });\n \n Object.keys(h1).forEach(function(e) {\n if (!(e in h2)) newArr.push(h1[e]);\n });\n Object.keys(h2).forEach(function(e) {\n if (!(e in h1)) newArr.push(h2[e]);\n });\n // Same, same; but different.\n return newArr;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert(typeof diff([1, 2, 3, 5], [1, 2, 3, 4, 5]) === \"object\", 'message: <code>diff([1, 2, 3, 5], [1, 2, 3, 4, 5])</code> should return an array.');", | ||
"assert.sameMembers(diff([\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]), [\"pink wool\"], 'message: <code>[\"diorite\", \"andesite\", \"grass\", \"dirt\", \"pink wool\", \"dead shrub\"], [\"diorite\", \"andesite\", \"grass\", \"dirt\", \"dead shrub\"]</code> should return <code>[\"pink wool\"]</code>.');", | ||
@@ -78,15 +81,12 @@ | ||
"Array.indexOf()", | ||
"Array.concat()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Obtén la diferencia entre dos vectores", | ||
+ "titleEs": "Obtén la diferencia entre dos vectores", | ||
"descriptionEs": [ | ||
"Crea una función que compare dos vectores y que devuelva un nuevo vector que contenga los elementos que sólo se encuentre en uno de los vectores dados, pero no en ambos En otras palabras, devuelve la diferencia simétrica entre los dos vectores.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function diff(arr1, arr2) {\n var newArr = [];\n var h1 = Object.create(null);\n arr1.forEach(function(e) {\n h1[e] = e;\n });\n \n var h2 = Object.create(null);\n arr2.forEach(function(e) {\n h2[e] = e;\n });\n \n Object.keys(h1).forEach(function(e) {\n if (!(e in h2)) newArr.push(h1[e]);\n });\n Object.keys(h2).forEach(function(e) {\n if (!(e in h1)) newArr.push(h2[e]);\n });\n // Same, same; but different.\n return newArr;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -104,6 +104,9 @@ | ||
"", | ||
"convert(36);" | ||
], | ||
+ "solutions": [ | ||
+ "function convert(num) {\n var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n var res = [];\n ref.forEach(function(p) {\n while (num >= p[1]) {\n res.push(p[0]);\n num -= p[1];\n }\n });\n return res.join('');\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(convert(2), \"II\", 'message: <code>convert(2)</code> should return \"II\".');", | ||
"assert.deepEqual(convert(3), \"III\", 'message: <code>convert(3)</code> should return \"III\".');", | ||
@@ -138,16 +141,13 @@ | ||
"Array.indexOf()", | ||
"Array.join()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Convertior de números romanos", | ||
+ "titleEs": "Convertior de números romanos", | ||
"descriptionEs": [ | ||
"Convierte el número dado en numeral romano.", | ||
"Todos los <a href=\"http://www.mathsisfun.com/roman-numerals.html\" target=\"_blank\">numerales romanos</a> en las respuestas deben estar en mayúsculas.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function convert(num) {\n var ref = [['M', 1000], ['CM', 900], ['D', 500], ['CD', 400], ['C', 100], ['XC', 90], ['L', 50], ['XL', 40], ['X', 10], ['IX', 9], ['V', 5], ['IV', 4], ['I', 1]];\n var res = [];\n ref.forEach(function(p) {\n while (num >= p[1]) {\n res.push(p[0]);\n num -= p[1];\n }\n });\n return res.join('');\n}" | ||
] | ||
}, | ||
{ | ||
@@ -167,6 +167,9 @@ | ||
"", | ||
"where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" });" | ||
], | ||
+ "solutions": [ | ||
+ "function where(collection, source) {\n var arr = [];\n var keys = Object.keys(source);\n collection.forEach(function(e) {\n if(keys.every(function(key) {return e[key] === source[key];})) {\n arr.push(e); \n }\n });\n return arr;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" }), [{ first: \"Tybalt\", last: \"Capulet\" }], 'message: <code>where([{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }], { last: \"Capulet\" })</code> should return <code>[{ first: \"Tybalt\", last: \"Capulet\" }]</code>.');", | ||
"assert.deepEqual(where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 }), [{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], 'message: <code>where([{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }], { \"a\": 1 })</code> should return <code>[{ \"a\": 1 }, { \"a\": 1 }, { \"a\": 1, \"b\": 2 }]</code>.');", | ||
@@ -179,16 +182,13 @@ | ||
"Object.hasOwnProperty()", | ||
"Object.keys()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "¿Dónde estás que no te veo?", | ||
+ "titleEs": "¿Dónde estás que no te veo?", | ||
"descriptionEs": [ | ||
"Crea una función que busque en un vector de objetos (primer argumento) y devuelva un vector con todos los objetos que compartan el valor indicado para una propiedad dada (segundo argumento). Cada pareja de propiedad y valor debe estar presente en el objeto de la colección para ser incluido en el vector devuelto por la función", | ||
"Por ejemplo, si el primer argumento es <code>[{ first: \"Romeo\", last: \"Montague\" }, { first: \"Mercutio\", last: null }, { first: \"Tybalt\", last: \"Capulet\" }]</code>, y el segundo argumento es <code>{ last: \"Capulet\" }</code>, entonces tu función debe devolver el tercer objeto del vector en el primer argumento, ya que contiene la propiedad y el valor indicados en el segundo argumento.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function where(collection, source) {\n var arr = [];\n var keys = Object.keys(source);\n collection.forEach(function(e) {\n if(keys.every(function(key) {return e[key] === source[key];})) {\n arr.push(e); \n }\n });\n return arr;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -209,6 +209,9 @@ | ||
"", | ||
"myReplace(\"A quick brown fox jumped over the lazy dog\", \"jumped\", \"leaped\");" | ||
], | ||
+ "solutions": [ | ||
+ "function myReplace(str, before, after) {\n if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n after = after.charAt(0).toUpperCase() + after.substring(1);\n } else {\n after = after.charAt(0).toLowerCase() + after.substring(1);\n }\n return str.replace(before, after);\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(myReplace(\"Let us go to the store\", \"store\", \"mall\"), \"Let us go to the mall\", 'message: <code>myReplace(\"Let us go to the store\", \"store\", \"mall\")</code> should return \"Let us go to the mall\".');", | ||
"assert.deepEqual(myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\"), \"He is Sitting on the couch\", 'message: <code>myReplace(\"He is Sleeping on the couch\", \"Sleeping\", \"sitting\")</code> should return \"He is Sitting on the couch\".');", | ||
@@ -222,8 +225,9 @@ | ||
"String.replace()", | ||
"Array.join()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Buscar y reemplazar", | ||
+ "titleEs": "Buscar y reemplazar", | ||
"descriptionEs": [ | ||
"Crea una función que busque un fragmento en una frase dada y lo reemplace por otro fragmento, devolviendo la nueva frase.", | ||
"El primer argumento es la frase en la que se ejecutará la búsqueda y el reemplazo", | ||
@@ -231,10 +235,6 @@ | ||
"El tercer argumento es lo que reemplazará a la palabra indicada en el segundo argumento", | ||
"NOTA: Debes respetar mayúsculas y minúsculas de la palabra original cuando ejecutes el reemplazo. Por ejemplo, si quisieras reemplazar la palabra \"Libro\" con la palabra \"perro\", deberías insertar en vez la palabra \"Perro\"", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function myReplace(str, before, after) {\n if (before.charAt(0) === before.charAt(0).toUpperCase()) {\n after = after.charAt(0).toUpperCase() + after.substring(1);\n } else {\n after = after.charAt(0).toLowerCase() + after.substring(1);\n }\n return str.replace(before, after);\n}" | ||
] | ||
}, | ||
{ | ||
@@ -253,6 +253,9 @@ | ||
"", | ||
"translate(\"consonant\");" | ||
], | ||
+ "solutions": [ | ||
+ "function translate(str) {\n if (isVowel(str.charAt(0))) return str + \"way\";\n var front = [];\n str = str.split('');\n while (str.length && !isVowel(str[0])) {\n front.push(str.shift());\n }\n return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(translate(\"california\"), \"aliforniacay\", 'message: <code>translate(\"california\")</code> should return \"aliforniacay\".');", | ||
"assert.deepEqual(translate(\"paragraphs\"), \"aragraphspay\", 'message: <code>translate(\"paragraphs\")</code> should return \"aragraphspay\".');", | ||
@@ -268,17 +271,14 @@ | ||
"String.substr()", | ||
"String.split()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Latín de los cerdos", | ||
+ "titleEs": "Latín de los cerdos", | ||
"descriptionEs": [ | ||
"Traduce la cadena de texto que se te provee al Latín de los cerdos (Pig Latin)", | ||
"<a href=\"http://en.wikipedia.org/wiki/Pig_Latin\" target=\"_blank\">Pig Latin</a> toma la primera consonante (o grupo de consonantes) de una palabra en inglés, la mueve al final de la palabra y agrega un \"ay\".", | ||
"Si la palabra comienza con una vocal, simplemente añade \"way\" al final.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function translate(str) {\n if (isVowel(str.charAt(0))) return str + \"way\";\n var front = [];\n str = str.split('');\n while (str.length && !isVowel(str[0])) {\n front.push(str.shift());\n }\n return [].concat(str, front).join('') + 'ay';\n}\n\nfunction isVowel(c) {\n return ['a', 'e', 'i', 'o', 'u'].indexOf(c.toLowerCase()) !== -1;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -299,6 +299,9 @@ | ||
"", | ||
"pair(\"GCG\");" | ||
], | ||
+ "solutions": [ | ||
+ "var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(pair(\"ATCGA\"),[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]], 'message: <code>pair(\"ATCGA\")</code> should return <code>[[\"A\",\"T\"],[\"T\",\"A\"],[\"C\",\"G\"],[\"G\",\"C\"],[\"A\",\"T\"]]</code>.');", | ||
"assert.deepEqual(pair(\"TTGAG\"),[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]], 'message: <code>pair(\"TTGAG\")</code> should return <code>[[\"T\",\"A\"],[\"T\",\"A\"],[\"G\",\"C\"],[\"A\",\"T\"],[\"G\",\"C\"]]</code>.');", | ||
@@ -309,8 +312,9 @@ | ||
"Array.push()", | ||
"String.split()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Emparejando bases de ADN", | ||
+ "titleEs": "Emparejando bases de ADN", | ||
"descriptionEs": [ | ||
"A la cadena de ADN que se te pasa le hace falta una hebra. Toma cada una de las letras, obtén su pareja correspondiente y devuelve los resultados en un segundo vector", | ||
"<a href=\"http://es.wikipedia.org/wiki/Apareamiento_de_bases\" target=\"_blank\">Parejas de bases</a> son pares de AT y CG. Encuentra el elemento que hace falta para cada una de las letras que se te presentan.", | ||
@@ -318,10 +322,6 @@ | ||
"Por ejemplo, si te pasáramos la cadena GCG, tu función debería devolver el vector: [[\"G\", \"C\"], [\"C\",\"G\"],[\"G\", \"C\"]]", | ||
"Cada letra que se te provee y su pareja deben estar contenidos en un vector, y cada uno de estos vectores debe estar contenidos en un vector.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "var lookup = Object.create(null);\nlookup.A = 'T';\nlookup.T = 'A';\nlookup.C = 'G';\nlookup.G = 'C';\n\nfunction pair(str) {\n return str.split('').map(function(p) {return [p, lookup[p]];});\n}" | ||
] | ||
}, | ||
{ | ||
@@ -339,6 +339,9 @@ | ||
"", | ||
"fearNotLetter(\"abce\");" | ||
], | ||
+ "solutions": [ | ||
+ "function fearNotLetter(str) {\n var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n for (var i = 1; i < s.length; i++) {\n if (s[i]-1 != s[i-1]) {\n return String.fromCharCode(s[i]-1);\n }\n }\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(fearNotLetter(\"abce\"), \"d\", 'message: <code>fearNotLetter(\"abce\")</code> should return \"d\".');", | ||
"assert.deepEqual(fearNotLetter(\"abcdefghjklmno\"), \"i\", 'message: <code>fearNotLetter(\"abcdefghjklmno\")</code> should return \"i\".');", | ||
@@ -350,16 +353,13 @@ | ||
"String.charCodeAt()", | ||
"String.fromCharCode()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Letras perdidas", | ||
+ "titleEs": "Letras perdidas", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva la letra que falta en el rango de letras que se le pasa", | ||
"Si todas las letras en el rango están presentes, la función debe devolver undefined.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function fearNotLetter(str) {\n var s = str.split('').map(function(c) {return c.charCodeAt(0);});\n for (var i = 1; i < s.length; i++) {\n if (s[i]-1 != s[i-1]) {\n return String.fromCharCode(s[i]-1);\n }\n }\n}" | ||
] | ||
}, | ||
{ | ||
@@ -378,6 +378,9 @@ | ||
"", | ||
"boo(null);" | ||
], | ||
+ "solutions": [ | ||
+ "function boo(bool) {\n // What is the new fad diet for ghost developers? The Boolean.\n return typeof bool === \"boolean\";\n}\n\nboo(null);" | ||
+ ], | ||
"tests": [ | ||
"assert.strictEqual(boo(true), true, 'message: <code>boo(true)</code> should return true.');", | ||
"assert.strictEqual(boo(false), true, 'message: <code>boo(false)</code> should return true.');", | ||
@@ -394,16 +397,13 @@ | ||
"MDNlinks": [ | ||
"Boolean Objects" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "¡Bu!", | ||
+ "titleEs": "¡Bu!", | ||
"descriptionEs": [ | ||
"Crea una función que verifique si el valor que se le pasa es de tipo booleano. Haz que la función devuelva true o false según corresponda.", | ||
"Los primitivos booleanos primitivos son: true y false", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function boo(bool) {\n // What is the new fad diet for ghost developers? The Boolean.\n return typeof bool === \"boolean\";\n}\n\nboo(null);" | ||
] | ||
}, | ||
{ | ||
@@ -423,6 +423,9 @@ | ||
"", | ||
"unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);" | ||
], | ||
+ "solutions": [ | ||
+ "function unite(arr1, arr2, arr3) {\n return [].slice.call(arguments).reduce(function(a, b) {\n return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n }, []);\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(unite([1, 3, 2], [5, 2, 1, 4], [2, 1]), [1, 3, 2, 5, 4], 'message: <code>unite([1, 3, 2], [5, 2, 1, 4], [2, 1])</code> should return <code>[1, 3, 2, 5, 4]</code>.');", | ||
"assert.deepEqual(unite([1, 3, 2], [1, [5]], [2, [4]]), [1, 3, 2, [5], [4]], 'message: <code>unite([1, 3, 2], [1, [5]], [2, [4]])</code> should return <code>[1, 3, 2, [5], [4]]</code>.');", | ||
@@ -434,18 +437,15 @@ | ||
"Arguments object", | ||
"Array.reduce()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Intersección ordenada", | ||
+ "titleEs": "Intersección ordenada", | ||
"descriptionEs": [ | ||
"Escribe una función que tome dos o más vectores y que devuelva un nuevo vector con los valores únicos en el orden de aparición de los vectores que se te pasaron", | ||
"En otra palabras, todos los valores presentes en todos los vectores deben aparecer en el vector final en su orden original, pero sin duplicados.", | ||
"Los valores únicos deben aparecer en el orden original, pero el vector final no necesariamente debe mostrar los elementos en orden numérico.", | ||
"Puedes usar de referencia las pruebas de verificación si necesitas ejemplos.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function unite(arr1, arr2, arr3) {\n return [].slice.call(arguments).reduce(function(a, b) {\n return [].concat(a, b.filter(function(e) {return a.indexOf(e) === -1;}));\n }, []);\n}" | ||
] | ||
}, | ||
{ | ||
@@ -463,6 +463,9 @@ | ||
"", | ||
"convert(\"Dolce & Gabbana\");" | ||
], | ||
+ "solutions": [ | ||
+ "var MAP = { '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''};\n\nfunction convert(str) {\n return str.replace(/[&<>\"']/g, function(c) {\n return MAP[c];\n });\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.match(convert(\"Dolce & Gabbana\"), /Dolce & Gabbana/, 'message: <code>convert(\"Dolce & Gabbana\")</code> should return <code>Dolce &​amp; Gabbana</code>.');", | ||
"assert.match(convert(\"Hamburgers < Pizza < Tacos\"), /Hamburgers < Pizza < Tacos/, 'message: <code>convert(\"Hamburgers < Pizza < Tacos\")</code> should return <code>Hamburgers &​lt; Pizza &​lt; Tacos</code>.');", | ||
@@ -477,15 +480,12 @@ | ||
"RegExp", | ||
"HTML Entities" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Convierte entidades HTML", | ||
+ "titleEs": "Convierte entidades HTML", | ||
"descriptionEs": [ | ||
"Convierte los caracteres <code>&</code>, <code><<code>, <code>><code>, <code>\"<code>' (comilla), y <code>'<code> (apóstrofe), contenidos en la cadena de texto que se te pasa, en sus entidades HTML correspondientes", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "var MAP = { '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''};\n\nfunction convert(str) {\n return str.replace(/[&<>\"']/g, function(c) {\n return MAP[c];\n });\n}" | ||
] | ||
}, | ||
{ | ||
@@ -504,6 +504,9 @@ | ||
"", | ||
"spinalCase('This Is Spinal Tap');" | ||
], | ||
+ "solutions": [ | ||
+ "function spinalCase(str) {\n // \"It's such a fine line between stupid, and clever.\"\n // --David St. Hubbins\n str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(spinalCase(\"This Is Spinal Tap\"), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"This Is Spinal Tap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');", | ||
"assert.strictEqual(spinalCase('thisIsSpinalTap'), \"this-is-spinal-tap\", 'message: <code>spinalCase(\"thisIsSpinalTap\")</code> should return <code>\"this-is-spinal-tap\"</code>.');", | ||
@@ -515,15 +518,12 @@ | ||
"RegExp", | ||
"String.replace()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "separado-por-guiones", | ||
+ "titleEs": "separado-por-guiones", | ||
"descriptionEs": [ | ||
"Convierte la cadena de texto que se te pasa al formato spinal case. Spinal case es cuando escribes todas las palabras en-minúsculas-unidas-por-guiones.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function spinalCase(str) {\n // \"It's such a fine line between stupid, and clever.\"\n // --David St. Hubbins\n str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n return str.toLowerCase().replace(/\\ |\\_/g, '-');\n}" | ||
] | ||
}, | ||
{ | ||
@@ -542,6 +542,9 @@ | ||
"", | ||
"sumFibs(4);" | ||
], | ||
+ "solutions": [ | ||
+ "function sumFibs(num) {\n var a = 1; \n var b = 1;\n var s = 0;\n while (a <= num) {\n if (a % 2 !== 0) { \n s += a; \n }\n a = [b, b=b+a][0];\n }\n return s;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert(typeof sumFibs(1) === \"number\", 'message: <code>sumFibs(1)</code> should return a number.');", | ||
"assert.deepEqual(sumFibs(1000), 1785, 'message: <code>sumFibs(1000)</code> should return 1785.');", | ||
@@ -554,17 +557,14 @@ | ||
"MDNlinks": [ | ||
"Remainder" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Suma todos los números de Fibonacci que son impares", | ||
+ "titleEs": "Suma todos los números de Fibonacci que son impares", | ||
"descriptionEs": [ | ||
"Crea una función que devuelva la suma de todos los números impares en la secuencia de Fibonacci hasta el número que se le pasa como argumento, incluyéndolo en caso de ser un número de la secuencia.", | ||
"Los primeros números de la secuencia son 1, 1, 2, 3, 5 y 8, y cada número siguiente es la suma de los dos números anteriores.", | ||
"Por ejemplo, si se te pasa el número 4, la función deberá devolver 5, ya que los números impares menores que 4 son 1, 1 y 3.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function sumFibs(num) {\n var a = 1; \n var b = 1;\n var s = 0;\n while (a <= num) {\n if (a % 2 !== 0) { \n s += a; \n }\n a = [b, b=b+a][0];\n }\n return s;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -583,6 +583,9 @@ | ||
"", | ||
"sumPrimes(10);" | ||
], | ||
+ "solutions": [ | ||
+ "function eratosthenesArray(n) {\n var primes = [];\n if (n > 2) {\n var half = n>>1;\n var sieve = Array(half);\n for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n if (!sieve[i]) {\n for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n sieve[j] = true;\n }\n }\n }\n primes.push(2);\n for (var p = 1; p < half; p++) {\n if (!sieve[p]) primes.push(2*p+1);\n }\n }\n return primes;\n}\n\nfunction sumPrimes(num) {\n return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(typeof sumPrimes(10), 'number', 'message: <code>sumPrimes(10)</code> should return a number.');", | ||
"assert.deepEqual(sumPrimes(10), 17, 'message: <code>sumPrimes(10)</code> should return 17.');", | ||
@@ -593,17 +596,14 @@ | ||
"For Loops", | ||
"Array.push()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Suma todos los números primos", | ||
+ "titleEs": "Suma todos los números primos", | ||
"descriptionEs": [ | ||
"Suma todos los números primos hasta, e incluyendo, el número que se te pasa", | ||
"Números primos son todos aquellos que sólo son divisibles entre 1 y entre sí mismos. Por ejemplo, el número 2 es primo porque solo es divisible por 1 y por 2. Por el contrario, el número 1 no es primo, ya que sólo puede dividirse por sí mismo", | ||
"El número que se le provee a la función no puede ser primo", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function eratosthenesArray(n) {\n var primes = [];\n if (n > 2) {\n var half = n>>1;\n var sieve = Array(half);\n for (var i = 1, limit = Math.sqrt(n)>>1; i <= limit; i++) {\n if (!sieve[i]) {\n for (var step = 2*i+1, j = (step*step)>>1; j < half; j+=step) {\n sieve[j] = true;\n }\n }\n }\n primes.push(2);\n for (var p = 1; p < half; p++) {\n if (!sieve[p]) primes.push(2*p+1);\n }\n }\n return primes;\n}\n\nfunction sumPrimes(num) {\n return eratosthenesArray(num+1).reduce(function(a,b) {return a+b;}, 0);\n}\n\nsumPrimes(10);" | ||
] | ||
}, | ||
{ | ||
@@ -623,6 +623,9 @@ | ||
"", | ||
"smallestCommons([1,5]);" | ||
], | ||
+ "solutions": [ | ||
+ "function gcd(a, b) {\n while (b !== 0) {\n a = [b, b = a % b][0];\n }\n return a;\n}\n\nfunction lcm(a, b) {\n return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n arr.sort(function(a,b) {return a-b;});\n var rng = [];\n for (var i = arr[0]; i <= arr[1]; i++) {\n rng.push(i);\n }\n return rng.reduce(lcm);\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(typeof smallestCommons([1, 5]), 'number', 'message: <code>smallestCommons([1, 5])</code> should return a number.');", | ||
"assert.deepEqual(smallestCommons([1, 5]), 60, 'message: <code>smallestCommons([1, 5])</code> should return 60.');", | ||
@@ -633,17 +636,14 @@ | ||
"MDNlinks": [ | ||
"Smallest Common Multiple" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Mínimo común múltiplo", | ||
+ "titleEs": "Mínimo común múltiplo", | ||
"descriptionEs": [ | ||
"En el ejercicio se te provee un vector con dos números. Crea una función que encuentre el número más pequeño que sea divisible entre ambos números, así como entre todos los números enteros entre ellos.", | ||
"Tu función debe aceptar como argumento un vector con dos números, los cuales no necesariamente estarán en orden.", | ||
"Por ejemplo, si se te pasan los números 1 y 3, deberás encontrar el mínimo común múltiplo de 1 y 3 que es divisible por todos los números <em>entre</em> 1 y 3.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function gcd(a, b) {\n while (b !== 0) {\n a = [b, b = a % b][0];\n }\n return a;\n}\n\nfunction lcm(a, b) {\n return (a * b) / gcd(a, b);\n}\n\nfunction smallestCommons(arr) {\n arr.sort(function(a,b) {return a-b;});\n var rng = [];\n for (var i = arr[0]; i <= arr[1]; i++) {\n rng.push(i);\n }\n return rng.reduce(lcm);\n}" | ||
] | ||
}, | ||
{ | ||
@@ -661,6 +661,9 @@ | ||
"", | ||
"find([1, 2, 3, 4], function(num){ return num % 2 === 0; });" | ||
], | ||
+ "solutions": [ | ||
+ "function find(arr, func) {\n var num;\n arr.some(function(e) {\n if (func(e)) {\n num = e;\n return true;\n }\n });\n return num;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.strictEqual(find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }), 8, 'message: <code>find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })</code> should return 8.');", | ||
"assert.strictEqual(find([1, 3, 5, 9], function(num) { return num % 2 === 0; }), undefined, 'message: <code>find([1, 3, 5, 9], function(num) { return num % 2 === 0; })</code> should return undefined.');" | ||
@@ -669,15 +672,12 @@ | ||
"MDNlinks": [ | ||
"Array.filter()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Buscando la verdad", | ||
+ "titleEs": "Buscando la verdad", | ||
"descriptionEs": [ | ||
"Crea una función que busque dentro de un vector (primer argumento) y que devuelva el primer elemento que pase una prueba de verdad (segundo argumento).", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function find(arr, func) {\n var num;\n arr.some(function(e) {\n if (func(e)) {\n num = e;\n return true;\n }\n });\n return num;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -696,6 +696,9 @@ | ||
"", | ||
"drop([1, 2, 3], function(n) {return n < 3; });" | ||
], | ||
+ "solutions": [ | ||
+ "function drop(arr, func) {\n // Drop them elements.\n while (arr.length && !func(arr[0])) {\n arr.shift();\n }\n return arr;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(drop([1, 2, 3, 4], function(n) {return n >= 3;}), [3, 4], 'message: <code>drop([1, 2, 3, 4], function(n) {return n >= 3;})</code> should return <code>[3, 4]</code>.');", | ||
"assert.deepEqual(drop([0, 1, 0, 1], function(n) {return n === 1;}), [1, 0, 1], 'message: <code>drop([0, 1, 0, 1], function(n) {return n === 1;})</code> should return <code>[1, 0, 1]</code>.');", | ||
@@ -710,16 +713,13 @@ | ||
"Array.shift()", | ||
"Array.slice()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "¡Fuera de aquí!", | ||
+ "titleEs": "¡Fuera de aquí!", | ||
"descriptionEs": [ | ||
"Toma los elementos contenidos en el vector que se te provee en el primer argumento de la función y elimínalos uno por uno, hasta que la función provista en el segundo argumento devuelva true.", | ||
"Retorna el resto del vector, de lo contrario retorna un vector vacío.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function drop(arr, func) {\n // Drop them elements.\n while (arr.length && !func(arr[0])) {\n arr.shift();\n }\n return arr;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -737,6 +737,9 @@ | ||
"", | ||
"steamroller([1, [2], [3, [[4]]]]);" | ||
], | ||
+ "solutions": [ | ||
+ "function steamroller(arr) {\n if (!Array.isArray(arr)) {\n return [arr];\n }\n var out = [];\n arr.forEach(function(e) {\n steamroller(e).forEach(function(v) {\n out.push(v);\n });\n });\n return out;\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(steamroller([[[\"a\"]], [[\"b\"]]]), [\"a\", \"b\"], 'message: <code>steamroller([[[\"a\"]], [[\"b\"]]])</code> should return <code>[\"a\", \"b\"]</code>.');", | ||
"assert.deepEqual(steamroller([1, [2], [3, [[4]]]]), [1, 2, 3, 4], 'message: <code>steamroller([1, [2], [3, [[4]]]])</code> should return <code>[1, 2, 3, 4]</code>.');", | ||
@@ -747,15 +750,12 @@ | ||
"MDNlinks": [ | ||
"Array.isArray()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Aplanadora", | ||
+ "titleEs": "Aplanadora", | ||
"descriptionEs": [ | ||
"Aplana el vector anidado que se te provee. Tu función debe poder aplanar vectores de cualquier forma.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function steamroller(arr) {\n if (!Array.isArray(arr)) {\n return [arr];\n }\n var out = [];\n arr.forEach(function(e) {\n steamroller(e).forEach(function(v) {\n out.push(v);\n });\n });\n return out;\n}" | ||
] | ||
}, | ||
{ | ||
@@ -773,6 +773,9 @@ | ||
"", | ||
"binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\");" | ||
], | ||
+ "solutions": [ | ||
+ "function binaryAgent(str) {\n return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(binaryAgent('01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111'), \"Aren't bonfires fun!?\", 'message: <code>binaryAgent(\"01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111\")</code> should return \"Aren't bonfires fun!?\"');", | ||
"assert.deepEqual(binaryAgent('01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001'), \"I love FreeCodeCamp!\", 'message: <code>binaryAgent(\"01001001 00100000 01101100 01101111 01110110 01100101 00100000 01000110 01110010 01100101 01100101 01000011 01101111 01100100 01100101 01000011 01100001 01101101 01110000 00100001\")</code> should return \"I love FreeCodeCamp!\"');" | ||
@@ -782,16 +785,13 @@ | ||
"String.charCodeAt()", | ||
"String.fromCharCode()" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Mensaje secreto", | ||
+ "titleEs": "Mensaje secreto", | ||
"descriptionEs": [ | ||
"Haz que la función devuelva el mensaje en inglés escondido en el código binario de la cadena de texto que se le pasa.", | ||
"La cadena de texto binaria estará separada por espacios.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function binaryAgent(str) {\n return str.split(' ').map(function(s) { return parseInt(s, 2); }).map(function(b) { return String.fromCharCode(b);}).join('');\n}" | ||
] | ||
}, | ||
{ | ||
@@ -810,6 +810,9 @@ | ||
"", | ||
"every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\");" | ||
], | ||
+ "solutions": [ | ||
+ "function every(collection, pre) {\n // Does everyone have one of these?\n return collection.every(function(e) { return e[pre]; });\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), true, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\", \"sex\": \"male\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return true.');", | ||
"assert.strictEqual(every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\"), false, 'message: <code>every([{\"user\": \"Tinky-Winky\", \"sex\": \"male\"}, {\"user\": \"Dipsy\"}, {\"user\": \"Laa-Laa\", \"sex\": \"female\"}, {\"user\": \"Po\", \"sex\": \"female\"}], \"sex\")</code> should return false.');", | ||
@@ -821,17 +824,14 @@ | ||
"assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": undefined}], \"single\")</code> should return false');", | ||
"assert.strictEqual(every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\"), false, 'message: <code>every([{\"single\": \"double\"}, {\"single\": NaN}], \"single\")</code> should return false');" | ||
], | ||
+ "isRequired": true, | ||
"type": "bonfire", | ||
"challengeType": 5, | ||
- "nameEs": "Que todo sea verdadero", | ||
+ "titleEs": "Que todo sea verdadero", | ||
"descriptionEs": [ | ||
"Verifica si la función en el segundo argumento devuelve true para todos los elementos de la colección en el primer argumento.", | ||
"Recuerda que puedes accesar a las propiedades de un objeto, ya sea a través de la notación por punto o de la notación por corchete usando [].", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function every(collection, pre) {\n // Does everyone have one of these?\n return collection.every(function(e) { return e[pre]; });\n}" | ||
] | ||
}, | ||
{ | ||
@@ -853,6 +853,9 @@ | ||
"", | ||
"add(2,3);" | ||
], | ||
+ "solutions": [ | ||
+ "function add() {\n var a = arguments[0];\n if (toString.call(a) !== '[object Number]') return; \n if (arguments.length === 1) {\n return function(b) {\n if (toString.call(b) !== '[object Number]') return;\n return a + b;\n };\n }\n var b = arguments[1];\n if (toString.call(b) !== '[object Number]') return; \n return a + arguments[1];\n}" | ||
+ ], | ||
"tests": [ | ||
"assert.deepEqual(add(2, 3), 5, 'message: <code>add(2, 3)</code> should return 5.');", | ||
"assert.deepEqual(add(2)(3), 5, 'message: <code>add(2)(3)</code> should return 5.');", | ||
@@ -865,8 +868,9 @@ | ||
"Closures", | ||
"Arguments object" | ||
], | ||
+ "isRequired": true, | ||
"challengeType": 5, | ||
- "nameEs": "Argumentos opcionales", | ||
+ "titleEs": "Argumentos opcionales", | ||
"descriptionEs": [ | ||
"Crea una función que sume dos argumentos. Si sólo se le pasa un argumento a la función, haz que devuelva otra función que acepte un argumento y que devuelva la suma correspondiente.", | ||
"Por ejemplo, <code>add(2, 3)</code> debe devolver <code>5</code>, y <code>add(2)</code> debe devolver una función.", | ||
@@ -875,10 +879,6 @@ | ||
"<code>sumTwoAnd(3)</code> devuelve <code>5</code>.", | ||
"Si alguno de los argumentos no es un número válido, haz que devuelva undefined.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado. Intenta programar en pareja. Escribe tu propio código." | ||
- ], | ||
- "isRequired": true, | ||
- "solutions": [ | ||
- "function add() {\n var a = arguments[0];\n if (toString.call(a) !== '[object Number]') return; \n if (arguments.length === 1) {\n return function(b) {\n if (toString.call(b) !== '[object Number]') return;\n return a + b;\n };\n }\n var b = arguments[1];\n if (toString.call(b) !== '[object Number]') return; \n return a + arguments[1];\n}" | ||
] | ||
} | ||
] | ||
View
27
seed/challenges/01-front-end-development-certification/intermediate-ziplines.json
@@ -22,7 +22,6 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
- "nameRu": "Создайте генератор случайных цитат", | ||
"descriptionRu": [ | ||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.", | ||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -36,7 +35,6 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.", | ||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>" | ||
], | ||
- "nameEs": "Crea una máquina de frases aleatorias", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELoPJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELoPJ</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -48,7 +46,9 @@ | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
"isRequired": true, | ||
- "challengeType": 3 | ||
+ "challengeType": 3, | ||
+ "titleRu": "Создайте генератор случайных цитат", | ||
+ "titleEs": "Crea una máquina de frases aleatorias" | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd10", | ||
@@ -71,7 +71,6 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameRu": "Покажите местную погоду", | ||
"descriptionRu": [ | ||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.", | ||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -86,7 +85,6 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.", | ||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>" | ||
], | ||
- "nameEs": "Muestra el clima local", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/bELRjV' target='_blank'>http://codepen.io/FreeCodeCamp/full/bELRjV</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -94,12 +92,14 @@ | ||
"<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.", | ||
"<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.", | ||
"<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.", | ||
- "Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.", | ||
+ "Recomendamos utilizar <a href='http://openweathermap.org/current#geo' target='_blank'>Open Weather API</a>. Al utilizarlo tendrás que crear una llave API gratuita. Normalmente debes evitar exponer llaves de API en CodePen, pero por el momento no hemos encontrado un API de clima que no requiera llave.", | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Leer-Buscar-Preguntar</a> si te sientes atascado.", | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleRu": "Покажите местную погоду", | ||
+ "titleEs": "Muestra el clima local" | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd19", | ||
@@ -123,13 +123,11 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Crea un buscador de Wikipedia", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/pgNRvJ' target='_blank'>http://codepen.io/FreeCodeCamp/full/pgNRvJ</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
"<span class='text-info'>Regla #2:</span> Satisface las siguientes <a href='http://en.wikipedia.org/wiki/User_story' target='_blank'>historias de usuario</a>. Usa cualquier librería o APIs que necesites. Dale tu estilo personal.", | ||
- | ||
- "<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.", | ||
+ "<span class='text-info'>Historia de usuario:</span> Pedo obtener información acerca del clima en mi localización actual.", | ||
"<span class='text-info'>Historia de usuario:</span> Puedo ver un icono diferente o una imagen de fondo diferente (e.g. montaña con nieve, desierto caliente) dependiendo del clima.", | ||
"<span class='text-info'>Historia de usuario:</span> Puedo pulsar un botón para cambiar la unidad de temperatura de grados Fahrenheit a Celsius y viceversa.", | ||
"<span class='text-info'>Historia de usuario:</span> Puedo buscar entradas en Wikipedia en un cuadro de búsqueda y ver las entradas de Wikipedia resultantes.", | ||
@@ -141,7 +139,8 @@ | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea un buscador de Wikipedia" | ||
}, | ||
{ | ||
"id": "bd7158d8c442eddfaeb5bd1f", | ||
@@ -167,7 +166,6 @@ | ||
"tests": [], | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameRu": "Используйте Twitch.tv JSON API", | ||
"descriptionRu": [ | ||
"<span class='text-info'>Задание:</span> Создайте <a href='http://codepen.io' target='_blank'>CodePen.io</a> который успешно копирует вот этот: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.", | ||
"<span class='text-info'>Правило #1:</span> Не подсматривайте код приведенного на CodePen примера. Напишите его самостоятельно.", | ||
@@ -186,7 +184,6 @@ | ||
"Когда выполните задание кликните кнопку \"I've completed this challenge\" и добавьте ссылку на ваш CodePen. Если вы программировали с кем-то в паре, также добавьте имя вашего напарника.", | ||
"Если вы хотите получить немедленную оценку вашего проекта, нажмите эту кнопку и добавьте ссылку на ваш CodePen. В противном случае мы проверим его перед тем как вы приступите к проектам для некоммерческих организаций.<br><br><a class='btn btn-primary btn-block' href='https://twitter.com/intent/tweet?text=Check%20out%20the%20project%20I%20just%20built%20with%20%40FreeCodeCamp:%20%0A%20%23LearnToCode%20%23JavaScript' target='_blank'>Click here then add your link to your tweet's text</a>" | ||
], | ||
- "nameEs": "Usa el API JSON de Twitch.tv", | ||
"descriptionEs": [ | ||
"<span class='text-info'>Objetivo:</span> Crea una aplicación con <a href='http://codepen.io' target='_blank'>CodePen.io</a> cuya funcionalidad sea similar a la de esta: <a href='http://codepen.io/FreeCodeCamp/full/adBpOw' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBpOw</a>.", | ||
"<span class='text-info'>Regla #1:</span> No veas el código del proyecto de ejemplo en CodePen. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -202,7 +199,9 @@ | ||
"Cuando hayas terminado, pulsa el botón de \"I've completed this challenge\" e incluye un enlace a tu CodePen.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleRu": "Используйте Twitch.tv JSON API", | ||
+ "titleEs": "Usa el API JSON de Twitch.tv" | ||
} | ||
] | ||
} |
View
36
seed/challenges/01-front-end-development-certification/jquery.json
@@ -50,7 +50,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.", | ||
+ "titleEs": "Aprende cómo funcionan las etiquetas de programa y la función de documento listo.", | ||
"descriptionEs": [ | ||
"Ahora estamos listos para aprender jQuery, la herramienta de JavaScript más popular de todos los tiempos. No te preocupes por JavaScript en si --lo cubriremos pronto.", | ||
"Antes de que podamos comenzar a usar jQuery, tenemos que añadir algunas cosas a nuestro HTML.", | ||
@@ -109,7 +109,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige elementos HTML usando selectores y jQuery", | ||
+ "titleEs": "Elige elementos HTML usando selectores y jQuery", | ||
"descriptionEs": [ | ||
"Ya tenemos una <code>función de documento listo</code>.", | ||
"Ahora vamos a escribir nuestra primera instrucción jQuery. Todas las funciones de jQuery comienzan con un <code>$</code>, al que suele referirse como <code>operador dólar</code>, o simplemente como <code>bling</code>. ", | ||
@@ -168,7 +168,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige elementos por su clase usando jQuery", | ||
+ "titleEs": "Elige elementos por su clase usando jQuery", | ||
"descriptionEs": [ | ||
"¿Viste como hicimos rebotar todos tus elementos <code>button</code>? Los seleccionamos con <code>$(\"button\")</code>, y luego les añadimos algunas clases CSS con <code>.addClass(\"animated bounce\");.</code> ", | ||
"Acabas de usar la función <code>addClass()</code> de jQuery, que te permite añadir clases a los elementos.", | ||
@@ -230,7 +230,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige elementos por ID usando jQuery", | ||
+ "titleEs": "Elige elementos por ID usando jQuery", | ||
"descriptionEs": [ | ||
"También puedes elegir un elemento por su atributo id.", | ||
"Primero selecciona tu elemento <code>button</code> con el id <code>target3</code> mediante el uso del selector <code>$(\"#target3\")</code>.", | ||
@@ -290,7 +290,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elimina tus funciones jQuery", | ||
+ "titleEs": "Elimina tus funciones jQuery", | ||
"descriptionEs": [ | ||
"Estas animaciones eran divertidas al principio, pero ahora se están volviendo una distracción.", | ||
"Elimina esas tres funciones jQuery de tu <code>función de documento listo</code>, pero deja intacta la declaración de la <code>función de documento listo</code>." | ||
@@ -348,7 +348,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige un mismo elemento con múltiples selectores jQuery", | ||
+ "titleEs": "Elige un mismo elemento con múltiples selectores jQuery", | ||
"descriptionEs": [ | ||
"Ahora ya sabes tres formas de seleccionar elementos: por tipo <code>$(\"button\")</code>, por clase <code>$(\".btn\")</code>, y por identificación <code>$(\"#target1\")</code>. ", | ||
"Aunque es posible agregar varias clases en una sola llamada a <code>.addClass()</code>, vamos a añadirlas al mismo elemento de tres maneras diferentes.", | ||
@@ -408,7 +408,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elimina clases de un elemento con jQuery", | ||
+ "titleEs": "Elimina clases de un elemento con jQuery", | ||
"descriptionEs": [ | ||
"De la misma manera que puedes agregar clases a un elemento con la función <code>addClass()</code> de jQuery, puedes eliminarlas con la función <code>removeClass()</code>.", | ||
"He aquí cómo puedes hacerlo para un botón específico:", | ||
@@ -469,7 +469,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Cambia el CSS de un elemento usando jQuery", | ||
+ "titleEs": "Cambia el CSS de un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"También podemos cambiar el CSS de un elemento HTML directamente con jQuery.", | ||
"jQuery tiene una función llamada <code>.css()</code> que te permite cambiar el CSS de un elemento.", | ||
@@ -530,7 +530,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Desactiva un elemento usando jQuery", | ||
+ "titleEs": "Desactiva un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"También puedes cambiar propiedades que no son CSS de los elementos HTML con jQuery. Por ejemplo, puedes desactivar los botones. ", | ||
"Al deshabilitar un botón, se volverá gris y no podrá pulsarse.", | ||
@@ -591,7 +591,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Cambia el texto de un elemento usando jQuery", | ||
+ "titleEs": "Cambia el texto de un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Con jQuery, puedes cambiar el texto que está entre las etiquetas de apertura y cierre de un elemento. Incluso puedes cambiar marcado HTML.", | ||
"jQuery tiene una función llamada <code>.html()</code> que te permite añadir etiquetas HTML y texto dentro de un elemento. Cualquier contenido que estuviese previamente dentro del elemento será remplazado por completo con el contenido que proveas usando esta función.", | ||
@@ -648,7 +648,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elimina un elemento usando jQuery", | ||
+ "titleEs": "Elimina un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Ahora quitemos un elemento HTML de tu página usando jQuery.", | ||
"jQuery tiene una función llamada <code>.remove()</code> que eliminará un elemento HTML por completo", | ||
@@ -706,7 +706,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa appendTo para mover elementos con jQuery", | ||
+ "titleEs": "Usa appendTo para mover elementos con jQuery", | ||
"descriptionEs": [ | ||
"Ahora intentemos mover elementos de un <code>div</code> a otro.", | ||
"jQuery tiene una función llamada <code>appendTo()</code> que te permite seleccionar elementos HTML y anexarlos a otro elemento.", | ||
@@ -768,7 +768,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Clona un elemento usando jQuery", | ||
+ "titleEs": "Clona un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Además de mover elementos, puedes copiarlos de un sitio a otro.", | ||
"jQuery tiene una función llamada <code>clone()</code> que hace una copia de un elemento.", | ||
@@ -835,7 +835,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige el padre de un elemento usando jQuery", | ||
+ "titleEs": "Elige el padre de un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Cada elemento HTML tiene un elemento <code>padre</code> del cual <code>hereda</code> propiedades.", | ||
"Por ejemplo, tu elemento <code>h3</code> <code>jQuery Playground</code> tiene el elemento padre <code><div class=\"container-fluid\"></code>, que a su vez tiene el padre <code>body</code>. ", | ||
@@ -900,7 +900,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige los hjos de un elemento usando jQuery", | ||
+ "titleEs": "Elige los hjos de un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Muchos elementos HTML tienen <code>hijos</code>, los cuales <code>heredan</code> sus propiedades de sus elementos padres", | ||
"Por ejemplo, cada elemento HTML es un hijo de tu elemento <code>body</code>, y tu elemento <code>h3</code> \"jQuery Playground\" es un hijo de tu elemento <code><div class=\"container-fluid\"></code>.", | ||
@@ -966,7 +966,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige un hijo específico de un elemento usando jQuery", | ||
+ "titleEs": "Elige un hijo específico de un elemento usando jQuery", | ||
"descriptionEs": [ | ||
"Seguramente habrás entendido porque los atributos id son tan convenientes para elegir con selectores jQuery. Pero no siempre contarás con estos agradables identificadores para trabajar. ", | ||
"Afortunadamente, jQuery tiene algunos otros trucos para elegir los elementos adecuados.", | ||
@@ -1033,7 +1033,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Elige elementos con numeración par usando jQuery", | ||
+ "titleEs": "Elige elementos con numeración par usando jQuery", | ||
"descriptionEs": [ | ||
"También puedes elegir todos los elementos con numeración par.", | ||
"He aquí cómo elegirías todos los elementos impares con clase <code>target</code> y como les agregarías unas clases:", | ||
@@ -1096,7 +1096,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Usa jQuery para modificar la página entera", | ||
+ "titleEs": "Usa jQuery para modificar la página entera", | ||
"descriptionEs": [ | ||
"Hemos terminado de jugar en nuestro patio de recreo jQuery. ¡Vamos a derribarlo!", | ||
"jQuery también puede elegir el elemento <code>body</code>.", | ||
View
28
seed/challenges/01-front-end-development-certification/json-apis-and-ajax.json
@@ -49,7 +49,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Activa eventos de pulsación con jQuery", | ||
+ "titleEs": "Activa eventos de pulsación con jQuery", | ||
"descriptionEs": [ | ||
"En esta sección, vamos a aprender cómo obtener datos de las APIs. Las APIs - o interfaces de programación de aplicaciones - son herramientas que utilizan los computadores para comunicarse entre sí.", | ||
"También aprenderemos cómo actualizar HTML con los datos que obtenemos de estas API usando una tecnología llamada Ajax.", | ||
@@ -58,7 +58,7 @@ | ||
"Antes de poder hacer esto, tenemos que implementar un <code>evento de pulsación</code> dentro de nuestra función <code>$(document).ready()</code>, añadiendo este código:", | ||
"<blockquote>$(\"#getMessage\").on(\"click\", function(){</br></br>});</blockquote>" | ||
], | ||
- "namePt": "Ativando eventos de clique com jQuery", | ||
+ "titlePt": "Ativando eventos de clique com jQuery", | ||
"descriptionPt": [ | ||
"Nesta sessão, vamos aprender como obter dados de uma API. As APIS - Interface de Programação de Aplicativos - são ferramentas usadas pelos computadores para se comunicarem entre si.", | ||
"Também aprenderemos como utilizar o HTML com os dados obtidos de uma API usando uma tecnologia chamada Ajax", | ||
@@ -112,14 +112,14 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Cambia texto con eventos de pulsación", | ||
+ "titleEs": "Cambia texto con eventos de pulsación", | ||
"descriptionEs": [ | ||
"Cuando nuestro evento de pulsación ocurre, podemos utilizar jQuery para actualizar un elemento HTML.", | ||
"Hagamos que cuando un usuario pulse el botón \"Get Message\", el texto del elemento con la clase <code>message</code> cambie para decir \"Here is the message\".", | ||
"Podemos hacerlo añadiendo el siguiente código dentro de nuestro evento de pulsación:", | ||
"<code>$(\".message\").html(\"Here is the message\");</code>" | ||
], | ||
- "namePt": "Mundando texto com eventos de clique", | ||
+ "titlePt": "Mundando texto com eventos de clique", | ||
"descriptionPt": [ | ||
"Quando nosso evento de clique ocorre, podemos utilizar o jQuery para atualixar um elemento HTML", | ||
"Vamos fazer que quando um usuário clicar no botão \"Get Message\", o texto do elemento com a classe <code>message</code> passe a dizer \"Here is the message\".", | ||
@@ -183,7 +183,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Obtén JSON con el método getJSON de jQuery", | ||
+ "titleEs": "Obtén JSON con el método getJSON de jQuery", | ||
"descriptionEs": [ | ||
"También puedes solicitar los datos de una fuente externa. Aquí es donde entran en juego las API. ", | ||
"Recuerda que las API - o interfaces de programación de aplicaciones - son herramientas que utilizan los ordenadores para comunicarse entre sí.", | ||
@@ -195,7 +195,7 @@ | ||
"<blockquote>$.getJSON(\"/json/cats.json\", function(json) {</code></br> $(\".message\").html(JSON.stringify(json));</br>});</blockquote>", | ||
"Una vez lo añadas, pulsa el botón \"Get Message\". Tu función Ajax sustituirá el texto \"The message will go here\" con la salida JSON en bruto de la API de fotos de gato de Free Code Camp." | ||
], | ||
- "namePt": "Obter um JSON com o método getJSON do jQuery", | ||
+ "titlePt": "Obter um JSON com o método getJSON do jQuery", | ||
"descriptionPt": [ | ||
"Também é possivel solicitar os dados de uma fonte externa. É aqui onde as API's entram em jogo. ", | ||
"Lembre que as API's - Interface de Programação de Aplicativos - são ferramentas que os computadores usam para se comunicar entre si.", | ||
@@ -263,7 +263,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Convierte datos JSON a datos HTML", | ||
+ "titleEs": "Convierte datos JSON a datos HTML", | ||
"descriptionEs": [ | ||
"Ahora que estamos obteniendo datos de una API JSON, mostremóslos en nuestro HTML.", | ||
"Podemos usar el método <code>.forEach()</code> para recorrer nuestros datos y modificar nuestros elementos HTML.", | ||
@@ -272,7 +272,7 @@ | ||
"Aquí está el código que hace esto:", | ||
"<blockquote>json.forEach(function(val) {</br> var keys = Object.keys(val);</br> html += \"<div class = 'cat'>\";</br> keys.forEach(function(key) {</br> html += \"<b>\" + key + \"</b>: \" + val[key] + \"<br>\";</br> });</br> html += \"</div><br>\";</br>});</blockquote>" | ||
], | ||
- "namePt": "Converter dados JSON para HTML", | ||
+ "titlePt": "Converter dados JSON para HTML", | ||
"descriptionPt": [ | ||
"Agora que estamos obtendo os dados de uma API JSON, vamos mostra-los em nosso HTML", | ||
"Podemos usar o método <code>.forEach()</code> para percorrer os nossos dados e modificar o elementos HTML.", | ||
@@ -344,14 +344,14 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Presenta imágenes de fuentes de datos", | ||
+ "titleEs": "Presenta imágenes de fuentes de datos", | ||
"descriptionEs": [ | ||
"Hemos visto en las dos últimas lecciones que cada objeto en nuestro vector JSON contiene una llave <code>imageLink</code> con un valor que corresponde a la url de la imagen de un gato.", | ||
"Cuando estamos recorriendo estos objetos, usemos esta propiedad <code>imageLink</code> para visualizar la imagen en un elemento <code>img</code>.", | ||
"Aquí está el código que hace esto:", | ||
"<code>html += \"<img src = '\" + val.imageLink + \"'>\";</code>" | ||
], | ||
- "namePt": "Apresentar as imagens da fonte de dados", | ||
+ "titlePt": "Apresentar as imagens da fonte de dados", | ||
"descriptionPt": [ | ||
"Como temos visto nas ultimas lições, cada objeto em nosso array JSON contém a chave <code>imageLink</code> com um valor que corresponde a url da imagem de um gato.", | ||
"Quando estamos percorrendo por estes objetos, usamos a propriedade <code>imageLink</code> para visualizar a imagem em um elemento <code>img</code>.", | ||
@@ -423,14 +423,14 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Pre-filtra JSON", | ||
+ "titleEs": "Pre-filtra JSON", | ||
"descriptionEs": [ | ||
"Si no queremos presentar cada foto de gato que obtengamos de la API JSON de fotos de gato de Free Code Camp, podemos pre-filtrar el json antes de iterar a través de este.", | ||
"Vamos a filtrar el gato cuya llave \"id\" tiene un valor de 1.", | ||
"Aquí está el código para hacer esto:", | ||
"<blockquote>json = json.filter(function(val) {</br> return (val.id !== 1);</br>});</blockquote>" | ||
], | ||
- "namePt": "Pré-filtro JSON", | ||
+ "titlePt": "Pré-filtro JSON", | ||
"descriptionPt": [ | ||
"Se não queremos apresentar cada foto de gato que obtemos da API JSON de fotos de gatos do Free Code Camp, podemos realizar um pré-filtro o JSON antes de iterar através dele.", | ||
"Vamos filtrar o gato cuja a chave \"id\" tenha o valor 1.", | ||
@@ -467,7 +467,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 0, | ||
- "nameEs": "Recibir datos de Geo-localización", | ||
+ "titleEs": "Recibir datos de Geo-localización", | ||
"descriptionEs": [ | ||
"Otra cosa interesante que podemos hacer es acceder a la ubicación actual de nuestros usuarios. Todos los navegadores han incorporado un geo-localizador que nos puede dar esta información. ", | ||
"El navegador puede obtener la longitud y latitud actual de nuestros usuarios.", | ||
@@ -476,7 +476,7 @@ | ||
"Aquí hay un código que hace esto:", | ||
"<blockquote>if (navigator.geolocation) {</br> navigator.geolocation.getCurrentPosition(function(position) {</br> $(\"#data\").html(\"latitude: \" + position.coords.latitude + \"<br>longitude: \" + position.coords.longitude);</br> });</br>}</blockquote>" | ||
], | ||
- "namePt": "Receber dados de Geo-localização", | ||
+ "titlePt": "Receber dados de Geo-localização", | ||
"descriptionPt": [ | ||
"Outra coisa interessante que podemos fazer é acessar a atual localização do nosso usuário. Todos os navegadores tem implementado um geo-localizador que pode nos fornecer essa informação.", | ||
"O navegador pode obter a longitude e latitude atual de nossos usuários", | ||
View
31
...es/01-front-end-development-certification/object-oriented-and-functional-programming.json
@@ -46,7 +46,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Declara objetos de JavaScript como variables", | ||
+ "titleEs": "Declara objetos de JavaScript como variables", | ||
"descriptionEs": [ | ||
"Antes de sumergirnos en Programación Orientada a Objetos, vamos a revisar los objetos de JavaScript.", | ||
"Dale a tu objeto <code>motorBike</code> un atributo <code>wheels</code>, otro llamado <code>motors</code> y otro <code>seats</code> y asignales números." | ||
@@ -92,7 +92,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Construye objetos de JavaScript con funciones", | ||
+ "titleEs": "Construye objetos de JavaScript con funciones", | ||
"descriptionEs": [ | ||
"También podemos crear objetos utilizando funciones <code>constructoras</code>.", | ||
"A cada función <code>constructora</code> se le da un nombre comenzando en mayúsculas para que quede claro que es una <code>constructora</code>.", | ||
@@ -150,7 +150,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Crea instancias de objetos con funciones constructoras", | ||
+ "titleEs": "Crea instancias de objetos con funciones constructoras", | ||
"descriptionEs": [ | ||
"¡Ahora usemos esa gran <code>constructora</code> que hicimos en la última lección!", | ||
"Para utilizar una función <code>constructora</code> la llamamos con la palabra reservada <code>new</code> al frente, como:", | ||
@@ -208,7 +208,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Crea objetos únicos pasando parámetros a la constructora", | ||
+ "titleEs": "Crea objetos únicos pasando parámetros a la constructora", | ||
"descriptionEs": [ | ||
"La <code>constructora</code> que tenemos es fabulosa, pero ¿qué hacer si no queremos crear siempre el mismo objeto?", | ||
"Para solucionar esto podemos añadir<code>parámetros</code>en nuestra <code>constructora</code>. Hacemos esto como en el siguiente ejemplo: ", | ||
@@ -234,13 +234,14 @@ | ||
"title": "Make Object Properties Private", | ||
"description": [ | ||
"Objects have their own attributes, called <code>properties</code>, and their own functions, called <code>methods</code>.", | ||
- "In the previous challenges, we used the <code>this</code> keyword to reference <code>public properties</code> of the current object.", | ||
+ "In the <a href='/challenges/make-instances-of-objects-with-a-constructor-function' target='_blank'>previous challenges</a>, we used the <code>this</code> keyword to reference <code>public properties</code> of the current object.", | ||
"We can also create <code>private properties</code> and <code>private methods</code>, which aren't accessible from outside the object.", | ||
"To do this, we create the variable inside the <code>constructor</code> using the <code>var</code> keyword we're familiar with, instead of creating it as a <code>property</code> of <code>this</code>.", | ||
"This is useful for when we need to store information about an object but we want to control how it is used by outside code.", | ||
"For example, what if we want to store the <code>speed</code> our car is traveling at but we only want outside code to be able to modify it by accelerating or decelerating, so the speed changes in a controlled way?", | ||
"In the editor you can see an example of a <code>Car</code> <code>constructor</code> that implements this pattern.", | ||
- "Now try it yourself! Modify the <code>Bike</code> <code>constructor</code> to have a <code>private property</code> called <code>gear</code> and two <code>public methods</code> called <code>getGear</code> and <code>setGear</code> to get and set that value." | ||
+ "Now try it yourself! Modify the <code>Bike</code> <code>constructor</code> to have a <code>private property</code> called <code>gear</code> and two <code>public methods</code> called <code>getGear</code> and <code>setGear</code> to get and set that value.", | ||
+ "<a href='https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this' target='_blank'>Further explanation on <code>this</code> keyword</a>" | ||
], | ||
"challengeSeed": [ | ||
"var Car = function() {", | ||
@@ -287,7 +288,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Crea propiedades privadas de un objeto", | ||
+ "titleEs": "Crea propiedades privadas de un objeto", | ||
"descriptionEs": [ | ||
"Los objetos tienen sus propios atributos, llamados <code>propiedades</code>, y sus propias funciones, llamadas<code>métodos</code>.", | ||
"En los desafíos anteriores, se utilizó la palabra reservada <code>this</code> para referenciar <code>propiedades públicas</code>del objeto actual.", | ||
@@ -328,7 +329,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Iterar sobre vectores con .map", | ||
+ "titleEs": "Iterar sobre vectores con .map", | ||
"descriptionEs": [ | ||
"El método <code>map</code> es una manera conveniente de iterar sobre vectores. He aquí un ejemplo de uso: ", | ||
"<code>var porCuatro = vectorAntiguo.map(function(val){</code>", | ||
@@ -368,7 +369,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Condensa vectores con .reduce", | ||
+ "titleEs": "Condensa vectores con .reduce", | ||
"descriptionEs": [ | ||
"El método <code>reduce</code> de un vector, se utiliza para iterar a través del vector y condensarlo en un valor.", | ||
"Para usar <code>reduce</code> tu le pasas una función de devolución de llamada cuyos argumentos sean un acumulador (en este caso, <code>valorPrevio</code>) y el valor actual (<code>valorActual</code>). ", | ||
@@ -410,7 +411,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Filtrar vectores con .filter", | ||
+ "titleEs": "Filtrar vectores con .filter", | ||
"descriptionEs": [ | ||
"El método <code>filter</code> se utiliza para iterar a través de un vector y filtrar los elementos que hagan falsa un condición determinada.", | ||
"<code>filter</code> recibe una función de devolución de llamada que a su vez recibe como argumento el valor actual (que hemos llamado <code>val</code>).", | ||
@@ -452,7 +453,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Ordena vectores con .sort", | ||
+ "titleEs": "Ordena vectores con .sort", | ||
"descriptionEs": [ | ||
"Puedes utilizar el método <code>sort</code> para ordenar alfabética o numéricamente los valores de un vector.", | ||
"A diferencia de los métodos de vector que hemos visto,<code>sort</code>en realidad altera el vector en su lugar. Sin embargo, también devuelve este vector ordenado. ", | ||
@@ -493,7 +494,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Invierte vectores con .reverse", | ||
+ "titleEs": "Invierte vectores con .reverse", | ||
"descriptionEs": [ | ||
"Puedes utilizar el método <code>reverse</code> para invertir los elementos en un vector.", | ||
"<code>reverse</code> es otro método de vector que altera el vector mismo, y también devuelve el vector invertido.", | ||
@@ -533,7 +534,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Concatena vectores con .concat", | ||
+ "titleEs": "Concatena vectores con .concat", | ||
"descriptionEs": [ | ||
"<code>concat</code> se puede utilizar para combinar el contenido de dos vectores en uno solo.", | ||
"<code>concat</code> recibe un vector como argumento y devuelve un nuevo vector con los elementos del vector que recibe concatenados al final.", | ||
@@ -569,7 +570,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Divide cadenas con .split", | ||
+ "titleEs": "Divide cadenas con .split", | ||
"descriptionEs": [ | ||
"Puedes utilizar el método <code>split</code> para dividir una cadena en un vector.", | ||
"<code>split</code> utiliza el argumento que recibe como delimitador para determinar en qué puntos debe dividir la cadena.", | ||
@@ -604,7 +605,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Une cadenas con .join", | ||
+ "titleEs": "Une cadenas con .join", | ||
"descriptionEs": [ | ||
"Podemos usar el método <code>join</code> para unir los elementos de un vector en una cadena, separándolos con el delimitador que proporciones como argumento.", | ||
"El siguiente es un ejemplo del uso de <code>join</code> para unir todos los elementos de un vector en una cadena con todos los elementos separados entre si por palabra` Na`: ", | ||
View
4
seed/challenges/02-data-visualization-certification/d3.json
@@ -13,9 +13,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 3, | ||
- "nameEs": "Desafios para aprender D3", | ||
- "descriptionEs": [] | ||
- | ||
+ "titleEs": "Desafios para aprender D3" | ||
} | ||
] | ||
} |
View
20
seed/challenges/02-data-visualization-certification/data-visualization-certificate.json
@@ -8,25 +8,25 @@ | ||
"title": "Claim Your Data Visualization Certificate", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/Et3iD74.jpg", | ||
+ "//i.imgur.com/Et3iD74.jpg", | ||
"An image of our Data Visualization Certificate", | ||
"This challenge will give you your verified Data Visualization Certificate. Before we issue your certificate, we must verify that you have completed all of our React and D3.js projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them", | ||
"By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/14F2Van.jpg", | ||
+ "//i.imgur.com/14F2Van.jpg", | ||
"An image of the text \"Data Visualization Certificate requirements\"", | ||
"Let's confirm that you have completed our React and D3.js projects. Click the button below to verify this.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"An image of the word \"Congratulations\"", | ||
"Congratulations! We've added your Data Visualization Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.", | ||
"" | ||
@@ -92,33 +92,33 @@ | ||
], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Reclama tu certificado de Visualización de datos", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/Et3iD74.jpg", | ||
+ "//i.imgur.com/Et3iD74.jpg", | ||
"Una imagen que muestra nuestro certificado de Visualización de datos", | ||
"Este desafío te otorga tu certificado autenticado de Visualización de datos. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los proyectos con React y D3.js. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.", | ||
"Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/14F2Van.jpg", | ||
+ "//i.imgur.com/14F2Van.jpg", | ||
"Una imagen del texto \"Data Visualization Certificate requirements\"", | ||
"Confirmemos que has completado todos nuestros proyectos en React y D3.js. Pulsa el botón siguiente para hacer la verificación.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"Una imagen de la palabra \"Congratulations\"", | ||
"¡Felicitaciones! Hemos agregado tu certificado de Visualización de datos a tu portafolio. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.", | ||
"" | ||
] | ||
- ] | ||
+ ], | ||
+ "titleEs": "Reclama tu certificado de Visualización de datos" | ||
} | ||
] | ||
} |
View
40
seed/challenges/02-data-visualization-certification/data-visualization-projects.json
@@ -19,14 +19,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324699" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Visualiza datos utilizando un gráfico de barras", | ||
+ "titleEs": "Visualiza datos utilizando un gráfico de barras", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/adBBWd' target='_blank'>http://codepen.io/FreeCodeCamp/full/adBBWd</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -38,8 +39,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7178d8c242eddfaeb5bd13", | ||
@@ -56,14 +56,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324700" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Visualiza datos utilizando un gráfico de dispersión", | ||
+ "titleEs": "Visualiza datos utilizando un gráfico de dispersión", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/GoNNEy' target='_blank'>http://codepen.io/FreeCodeCamp/full/GoNNEy</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -75,8 +76,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7188d8c242eddfaeb5bd13", | ||
@@ -94,14 +94,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324701" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Visualiza datos utilizando un mapa de calor", | ||
+ "titleEs": "Visualiza datos utilizando un mapa de calor", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/rxWWGa' target='_blank'>http://codepen.io/FreeCodeCamp/full/rxWWGa</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -114,8 +115,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7198d8c242eddfaeb5bd13", | ||
@@ -135,14 +135,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324458" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas", | ||
+ "titleEs": "Muestra asociaciones utilizando un gráfico de fuerzas dirigidas", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/KVNNXY' target='_blank'>http://codepen.io/FreeCodeCamp/full/KVNNXY</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -157,8 +158,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7108d8c242eddfaeb5bd13", | ||
@@ -176,14 +176,15 @@ | ||
"When you are finished, click the \"I've completed this challenge\" button and include a link to your CodePen. ", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324698" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "zipline", | ||
"challengeType": 3, | ||
- "nameEs": "Mapea datos a lo largo del Globo", | ||
+ "titleEs": "Mapea datos a lo largo del Globo", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/mVEJag' target='_blank'>http://codepen.io/FreeCodeCamp/full/mVEJag</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -196,8 +197,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
} | ||
] | ||
} |
View
40
seed/challenges/02-data-visualization-certification/react-projects.json
@@ -26,8 +26,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameRu": "Создайте предпросмотрщик языка разметки Markdown", | ||
+ "titleRu": "Создайте предпросмотрщик языка разметки Markdown", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.", | ||
@@ -41,7 +42,7 @@ | ||
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Crea un visualizador de lenguaje de marcado (Markdown)", | ||
+ "titleEs": "Crea un visualizador de lenguaje de marcado (Markdown)", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/obYYqW' target='_blank'>http://codepen.io/FreeCodeCamp/full/obYYqW</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -54,8 +55,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7156d8c242eddfaeb5bd13", | ||
@@ -80,8 +80,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameRu": "Создайте таблицу Кемперов-Лидеров", | ||
+ "titleRu": "Создайте таблицу Кемперов-Лидеров", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.", | ||
@@ -96,7 +97,7 @@ | ||
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Crea un marcador para los campistas", | ||
+ "titleEs": "Crea un marcador para los campistas", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/qbqqJm/' target='_blank'>http://codepen.io/FreeCodeCamp/full/qbqqJm/</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -110,8 +111,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7155d8c242eddfaeb5bd13", | ||
@@ -138,8 +138,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameRu": "Создайте хранилище рецептов", | ||
+ "titleRu": "Создайте хранилище рецептов", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.", | ||
@@ -155,7 +156,7 @@ | ||
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Crea una caja de recetas", | ||
+ "titleEs": "Crea una caja de recetas", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/LGbbqj' target='_blank'>http://codepen.io/FreeCodeCamp/full/LGbbqj</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -170,8 +171,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7154d8c242eddfaeb5bd13", | ||
@@ -199,8 +199,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameRu": "Создайте игру \"Жизнь\"", | ||
+ "titleRu": "Создайте игру \"Жизнь\"", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.", | ||
@@ -218,7 +219,7 @@ | ||
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Crea un Juego de la vida", | ||
+ "titleEs": "Crea un Juego de la vida", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOrZ' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOrZ</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -235,8 +236,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7153d8c242eddfaeb5bd13", | ||
@@ -265,8 +265,9 @@ | ||
], | ||
"tests": [], | ||
"type": "zipline", | ||
+ "isRequired": true, | ||
"challengeType": 3, | ||
- "nameRu": "Создайте Roguelike-подобную игру Подземелье", | ||
+ "titleRu": "Создайте Roguelike-подобную игру Подземелье", | ||
"descriptionRu": [ | ||
"<strong>Задание:</strong> Создайте приложение <a href='http://codepen.io' target='_blank'>CodePen.io</a>, функционал которого схож с этим: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.", | ||
"<strong>Правило #1:</strong> Не подсматривайте код приложения-примера. Напишите его самостоятельно.", | ||
@@ -285,7 +286,7 @@ | ||
"Когда закончите, нажмите кнопку \"I've completed this challenge\" и укажите ссылку на вашу работу на CodePen.", | ||
"Вы можете получить отзыв о вашем проекте от коллег, поделившись ссылкой на него в нашем <a href='//gitter.im/freecodecamp/codereview' target='_blank'>чате для рассмотрения кода</a>. Также вы можете поделиться ею через Twitter и на странице Free Code Camp вашего города на Facebook." | ||
], | ||
- "nameEs": "Crea un juego de dragones al estilo Rogue", | ||
+ "titleEs": "Crea un juego de dragones al estilo Rogue", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación en <a href='http://codepen.io' target='_blank'>CodePen.io</a> que funcione de forma similar al siguiente ejemplo: <a href='http://codepen.io/FreeCodeCamp/full/dGOOEJ/' target='_blank'>http://codepen.io/FreeCodeCamp/full/dGOOEJ/</a>.", | ||
"<strong>Regla #1:</strong> No veas el código del proyecto de ejemplo. Encuentra la forma de hacerlo por tu cuenta.", | ||
@@ -303,8 +304,7 @@ | ||
"Recuerda utilizar <a href='//github.com/FreeCodeCamp/freecodecamp/wiki/How-to-get-help-when-you-get-stuck' target='_blank'>Read-Search-Ask</a> si te sientes atascado.", | ||
"Cuando termines, haz clic en el botón de \"I've completed this challenge\" e incluye el vínculo de tu proyecto en CodePen. ", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
- ], | ||
- "isRequired": true | ||
+ ] | ||
} | ||
] | ||
} |
View
3
seed/challenges/02-data-visualization-certification/react.json
@@ -13,8 +13,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 3, | ||
- "nameEs": "Desafios para aprender React", | ||
- "descriptionEs": [] | ||
+ "titleEs": "Desafios para aprender React" | ||
} | ||
] | ||
} |
View
3
seed/challenges/02-data-visualization-certification/sass.json
@@ -13,8 +13,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 3, | ||
- "nameEs": "Desafios para aprender Sass", | ||
- "descriptionEs": [] | ||
+ "titleEs": "Desafios para aprender Sass" | ||
} | ||
] | ||
} |
View
89
seed/challenges/03-back-end-development-certification/api-projects.json
@@ -9,85 +9,85 @@ | ||
"title": "Get Set for our Back End Development Projects", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/4IZjWZ3.gif", | ||
+ "//i.imgur.com/4IZjWZ3.gif", | ||
"A gif showing how to create a c9.io account.", | ||
"We recommend building our full stack Basejump challenges on c9.io, a powerful browser-based development environment. This will save you hours of time that you would spend configuring your local computer to run Node.js and MongoDB - time you could instead spend coding. <br>Create a c9.io account by clicking the GitHub symbol in the upper right hand corner of the c9.io page. Click the big plus symbol to create a new workspace. Enter your email address when prompted.", | ||
"http://c9.io" | ||
], | ||
[ | ||
- "http://i.imgur.com/F7i5Hhi.gif", | ||
+ "//i.imgur.com/F7i5Hhi.gif", | ||
"A gif showing how to fill out the new workspace form", | ||
"Instead of starting from scratch, we recommend using Clementine.js, a full stack JavaScript \"boilerplate\" that already has some basic code written for you. Clementine.js has a detailed tutorial you can go through to build it yourself, but for now let's just clone its code. On c9.io, give your workspace a name, then leave \"Template\" as custom and create your workspace from this GitHub url: <code>https://github.com/johnstonbl01/clementinejs-fcc.git</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/42m1vyr.gif", | ||
+ "//i.imgur.com/42m1vyr.gif", | ||
"A gif showing you how to show hidden files.", | ||
"Click the gear in the upper right corner of c9.io's file structure. Select \"show hidden files\".", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/qrE8xaK.gif", | ||
+ "//i.imgur.com/qrE8xaK.gif", | ||
"A gif showing you how to create a new file.", | ||
"Right click and create a new file called <code>.env</code>.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/jkQX9SQ.gif", | ||
+ "//i.imgur.com/jkQX9SQ.gif", | ||
"A gif showing you how to prep your environmental variables in your .env file.", | ||
"Open your .env file and paste this into it, then save it: <br><code>GITHUB_KEY=<br>GITHUB_SECRET=<br>MONGO_URI=mongodb://localhost:27017/clementinejs<br>PORT=8080<br>APP_URL=http://localhost:8080/</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/f3DE7zB.gif", | ||
+ "//i.imgur.com/f3DE7zB.gif", | ||
"A gif showing you how to open c9.io's preview window.", | ||
"Open up your application in a preview tab by clicking window > share > application > open.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Ip0qUdQ.gif", | ||
+ "//i.imgur.com/Ip0qUdQ.gif", | ||
"A gif showing you how to create a GitHub app using c9.io's preview URL.", | ||
"Create a GitHub app for authentication and choose an \"Application name\". For the homepage URL, paste the URL from your preview tab. You'll also paste the URL from your preview tab into \"Authorization callback URL\", then add to it: <code>auth/github/callback</code>", | ||
"https://github.com/settings/applications/new" | ||
], | ||
[ | ||
- "http://i.imgur.com/qCUVRFb.gif", | ||
+ "//i.imgur.com/qCUVRFb.gif", | ||
"A gif showing you how to transfer GitHub's key and secret over to your .env file, as well as your c9.io URL.", | ||
"GitHub will create an app and present you with a Client ID and a Client Secret. Set your .env file's GITHUB_KEY equal to the Client ID, and set your .env file's GITHUB_SECRET equal to the Client Secret. Copy the URL from your preview tab and paste it into your .env file as your APP_URL.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/2a20Vah.gif", | ||
+ "//i.imgur.com/2a20Vah.gif", | ||
"A gif showing you how to start mongoDB in c9.io's terminal.", | ||
"In your terminal, start MongoDB by entering <code>mongod --smallfiles</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/dC55pWk.gif", | ||
+ "//i.imgur.com/dC55pWk.gif", | ||
"A gif showing you how to open a new tab in c9.io's terminal.", | ||
"Open a new terminal tab with the + button above your terminal, then run <code>npm install</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/54OC2Ro.gif", | ||
+ "//i.imgur.com/54OC2Ro.gif", | ||
"A gif showing you how to navigate to your preview tab and sign in to your new Clementine.js app.", | ||
"Run <code>node server.js</code> to start the server. Refresh your preview tab. You should see the Clementine.js logo. Click \"sign in\" and accept GitHub's prompt to authorize the application.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/2IJfyvN.gif", | ||
+ "//i.imgur.com/2IJfyvN.gif", | ||
"A gif showing you how to click the button to trigger an AJAX action with Clementine.js and how to look at your user profile from the GitHub authentication data.", | ||
"Click the \"click me\" button and you'll see that it increments the number clicks. Click the profile button and you'll see that it has your GitHub information.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/bjO5pnq.gif", | ||
+ "//i.imgur.com/bjO5pnq.gif", | ||
"A gif showing you how to create a new GitHub repository and push your code up to it.", | ||
"Create a new GitHub repository. Then copy its .git URL. <br>Return to c9.io's terminal and set your GitHub remote URL: <code>git remote set-url origin</code> followed by the URL you copied from GitHub. <br>Run <code>git push origin master</code>. <br>Now tab back to GitHub and refresh, and you'll see that your code is now on GitHub.", | ||
"https://github.com/new" | ||
], | ||
[ | ||
- "http://i.imgur.com/Qn0K65B.gif", | ||
+ "//i.imgur.com/Qn0K65B.gif", | ||
"A gif showing you how to add add-ons to Heroku.", | ||
"We will soon add instructions for getting Clementine running on Heroku. For now, develop your Basejumps right on c9.io.", | ||
"" | ||
@@ -98,88 +98,88 @@ | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
"isRequired": false, | ||
- "nameEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor", | ||
+ "titleEs": "Prepárate para nuestros Proyectos de Desarrollo en el lado del servidor", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/4IZjWZ3.gif", | ||
+ "//i.imgur.com/4IZjWZ3.gif", | ||
"Una imagen gif que te muestra cómo crear una cuenta en c9.io.", | ||
"Te recomendamos resolver nuestros desafíos de pila completa (full stack) en c9.io, un poderoso ambiente de desarrollo basado en tu navegador. Esto te ahorrará muchas horas que utilizarías configurando tu computadora para correr Node.js y MongoDB - tiempo que podrías utilizar escribiendo código. <br>Crea una cuenta en c9.io pulsando el símbolo de GitHub en la esquina superior derecha de la página de c9.io. Pulsa el botón con el símbolo de suma para crear una área de trabajo nueva. Introduce tu dirección de correo electrónico cuando se te solicite.", | ||
"http://c9.io" | ||
], | ||
[ | ||
- "http://i.imgur.com/F7i5Hhi.gif", | ||
+ "//i.imgur.com/F7i5Hhi.gif", | ||
"Una imagen gif que te muestra cómo llenar el formulario para crear un área de trabajo nueva", | ||
"En vez de iniciar desde cero, recomendamos utilizar Clementine.js, un modelo (<em>bolierplate</em>) de JavaScript pila completa (full stack) que viene con código básico ya escrito para ti. Clementine.js tiene un tutorial detallado que puedes seguir para construirlo por ti mismo, pero por ahora simplemente vamos a clonarlo. En c9.io, dale un nombre a tu área de trabajo, luego deja \"Plantilla\" (\"Template\") como personalizado y crea tu espacio de trabajo usando el siguiente url de Github: <code>https://github.com/johnstonbl01/clementinejs-fcc.git</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/42m1vyr.gif", | ||
+ "//i.imgur.com/42m1vyr.gif", | ||
"Una imagen gif que te muestra cómo mostrar los archivos ocultos.", | ||
"Pulsa el engrane en la esquina superior derecha del árbol de archivos de c9.io. Selecciona \"show hidden files\".", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/qrE8xaK.gif", | ||
+ "//i.imgur.com/qrE8xaK.gif", | ||
"Una imagen gif que te muestra cómo crear un archivo nuevo.", | ||
"Haciendo clic derecho, crea un nuevo archivo llamado <code>.env</code>.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/jkQX9SQ.gif", | ||
+ "//i.imgur.com/jkQX9SQ.gif", | ||
"Una imagen gif que te muestra cómo preparar tus variables de ambiente en tu archivo .env.", | ||
"Abre tu archivo .env pega el siguiente código, y luego guárdalo: <br><code>GITHUB_KEY=<br>GITHUB_SECRET=<br>MONGO_URI=mongodb://localhost:27017/clementinejs<br>PORT=8080<br>APP_URL=http://localhost:8080/</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/f3DE7zB.gif", | ||
+ "//i.imgur.com/f3DE7zB.gif", | ||
"Una imagen gif que te muestra cómo abir la vista previa de la ventana de c9.io.", | ||
"Abre tu aplicación en una pestaña de vista previa pulsando window > share > application > open.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/Ip0qUdQ.gif", | ||
+ "//i.imgur.com/Ip0qUdQ.gif", | ||
"Una imagen gif que te muestra cómo crear una aplicación de GitHub usando la URL de vista previa de c9.io.", | ||
"Crea una aplicación de GitHub para autenticación y elige un \"Nombre de aplicación\". Para la URL de inicio (homepage), pega la URL de tu pestaña de vista previa. También debes pegar la URL de tu pestaña de vista previa en <code>Authorization callback URL</code>, agrégale: <code>auth/github/callback</code>", | ||
"https://github.com/settings/applications/new" | ||
], | ||
[ | ||
- "http://i.imgur.com/qCUVRFb.gif", | ||
+ "//i.imgur.com/qCUVRFb.gif", | ||
"Una imagen gif que te muestra cómo transferir tu llave (key) y tu código secreto (secret) de GitHub a tu archivo .env, así como tu URL de c9.io.", | ||
"GitHub creará una aplicación y te entregará un ID de cliente (Client ID) y un Código secreto de cliente (Client Secret). Haz que el GITHUB_KEY en tu archivo .env sea igual al ID de cliente, y haz que tu GITHUB_SECRET en el archivo .env sea igual al Código secreto de cliente. Copia la URL de tu pestaña de vista previa y pégala en tu archivo .env como tu APP_URL.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/2a20Vah.gif", | ||
+ "//i.imgur.com/2a20Vah.gif", | ||
"Una imagen gif que te muestra cómo iniciar mongoDB en la terminal de c9.io.", | ||
"En tu terminal, inicia MongoDB con el siguiente comando: <code>mongod --smallfiles</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/dC55pWk.gif", | ||
+ "//i.imgur.com/dC55pWk.gif", | ||
"Una imagen gif que te muestra cómo abrir una nueva pestaña en la terminal de c9.io.", | ||
"Abre una nueva pestaña de terminal pulsando el botón de + sobre tu terminal, luego ejecuta <code>npm install</code>", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/54OC2Ro.gif", | ||
+ "//i.imgur.com/54OC2Ro.gif", | ||
"Una imagen gif que te muestra cómo navegar a tu pestaña de vista previa e ingresar a tu nueva aplicación Clementine.js.", | ||
"Ejecuta <code>node server.js</code> para iniciar el servidor. Actualiza tu pestaña de vista previa. Deberías poder ver el logo de Clementine.js. Pulsa \"sign in\" y acepta la solicitud de GitHub para autorizar la aplicación.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/2IJfyvN.gif", | ||
+ "//i.imgur.com/2IJfyvN.gif", | ||
"Una imagen gif que te muestra cómo pulsar un botón para desencadenar una acción AJAX con Clementine.js y cómo ver tu perfil de usuario en los datos de autenticación provistos por GitHub.", | ||
"Pulsa el botón que dice \"click me\" y verás que se incrementa el número de clics. Pulsa el botón de perfil (profile) y verás la información de tu perfil de GitHub.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/bjO5pnq.gif", | ||
+ "//i.imgur.com/bjO5pnq.gif", | ||
"Una imagen gif que te muestra cómo crear un nuevo repositorio de GitHub GitHub y empujar allí tu código.", | ||
"Crea un nuevo repositorio en GitHub. Luego copia su ULR .git. <br>Regresa a tu terminal de c9.io y establece tu URL remota de GitHub: <code>git remote set-url origin</code> seguido de la URL que copiaste de GitHub. <br>Ejecuta <code>git push origin master</code>. <br>Ahora ve de regreso a la página de GitHub y actualízala. Verás que tu código ahora está ahora en GitHub.", | ||
"https://github.com/new" | ||
], | ||
[ | ||
- "http://i.imgur.com/Qn0K65B.gif", | ||
+ "//i.imgur.com/Qn0K65B.gif", | ||
"Una imagen gif que te muestra cómo agregar complementos a Heroku.", | ||
"Pronto agregaremos instrucciones para hacer que Clementine corra en Heroku. Por ahora, desarrolla tus Basejumps en c9.io.", | ||
"" | ||
@@ -199,15 +199,15 @@ | ||
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324691" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "isRequired": true, | ||
- "nameEs": "Microservicio de Marca Temporal", | ||
+ "titleEs": "Microservicio de Marca Temporal", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://timestamp-ms.herokuapp.com/' target='_blank'>https://timestamp-ms.herokuapp.com/</a> y despliegala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -230,15 +230,15 @@ | ||
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324460" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "isRequired": true, | ||
- "nameEs": "Microservicio para analizar el encabezado de una petición", | ||
+ "titleEs": "Microservicio para analizar el encabezado de una petición", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/whoami/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/whoami/</a> y despliegala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -261,15 +261,15 @@ | ||
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324692" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "isRequired": true, | ||
- "nameEs": "Microservicio para acortar URLs", | ||
+ "titleEs": "Microservicio para acortar URLs", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://shurli.herokuapp.com/' target='_blank'>https://shurli.herokuapp.com/</a> y despliegala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -280,7 +280,6 @@ | ||
"Una vez que hayas terminado de implementar estas historias de usuarios, pulsa el botón \"I've completed this challenge\" e introduce los URLs de tu repositorio en GitHub y de tu aplicación en vivo en Heroku.", | ||
"Puedes obtener retroalimentación sobre tu proyecto por parte de otros campistas, compartiendolo en nuestra <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Sala de chat para revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
] | ||
- | ||
}, | ||
{ | ||
"id": "bd7158d8c443edefaeb5bdee", | ||
@@ -295,15 +294,15 @@ | ||
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324461" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "isRequired": true, | ||
- "nameEs": "Capa de abstracción para buscar imágenes", | ||
+ "titleEs": "Capa de abstracción para buscar imágenes", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Desarolla una aplicación de Pila Completa en JavaScript que te permite buscar imágenes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/imagesearch/lolcats%20funny?offset=10</a> y examinar las búsquedas recientes como esta: <a href='https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/api/latest/imagesearch/</a>. Después, despliegala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -328,15 +327,15 @@ | ||
"Once you've finished implementing these user stories, click the \"I've completed this challenge\" button and enter the URLs for both your GitHub repository and your live app running on Heroku.", | ||
"You can get feedback on your project from fellow campers by sharing it in our <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Code Review Chatroom</a>. You can also share it on Twitter and your city's Campsite (on Facebook)." | ||
], | ||
- "releasedOn": "January 1, 2016", | ||
"challengeSeed": [ | ||
"150324457" | ||
], | ||
"tests": [], | ||
+ "isRequired": true, | ||
+ "releasedOn": "January 1, 2016", | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "isRequired": true, | ||
- "nameEs": "Microservicio de metadatos de archivos", | ||
+ "titleEs": "Microservicio de metadatos de archivos", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Desarrolla una aplicación de Pila Completa en JavaScript que sea funcionalmente similar a esta: <a href='https://cryptic-ridge-9197.herokuapp.com/' target='_blank'>https://cryptic-ridge-9197.herokuapp.com/</a> y despliegala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, deberías crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas como hacer esto, vuelve a visitar <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com//challenges/get-set-for-our-back-end-development-projects</a>.", | ||
View
4
seed/challenges/03-back-end-development-certification/automated-testing-and-debugging.json
@@ -23,7 +23,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Utiliza la consola de JavaScript", | ||
+ "titleEs": "Utiliza la consola de JavaScript", | ||
"descriptionEs": [ | ||
"Tanto Chrome como Firefox tienen excelentes consolas JavaScript, también conocidas como DevTools, para depurar tu código JavaScript.", | ||
"Puedes encontrar las Herramientas para desarrolladores (<code>Developer tools</code>) en el menú de Chrome o la Consola web (<code>Web Console</code>) en el menú de FireFox. Si estás utilizando un navegador diferente, o un dispositivo móvil, nuestra recomendación es que cambies a la versión de escritorio de Firefox o Chrome.", | ||
@@ -56,7 +56,7 @@ | ||
], | ||
"type": "waypoint", | ||
"challengeType": 1, | ||
- "nameEs": "Usando typeof", | ||
+ "titleEs": "Usando typeof", | ||
"descriptionEs": [ | ||
"Puedes usar <code>typeof</code> para verificar la <code>estructura de datos</code>, o el tipo, de una variable.", | ||
"Ten en cuenta que, en JavaScript, los vectores son técnicamente un tipo de objeto.", | ||
View
20
seed/challenges/03-back-end-development-certification/back-end-development-certificate.json
@@ -8,25 +8,25 @@ | ||
"title": "Claim Your Back End Development Certificate", | ||
"description": [ | ||
[ | ||
- "http://i.imgur.com/8v3t84p.jpg", | ||
+ "//i.imgur.com/8v3t84p.jpg", | ||
"An image of our Back End Development Certificate", | ||
"This challenge will give you your verified Back End Development Certificate. Before we issue your certificate, we must verify that you have completed all of the back end development projects. You must also accept our Academic Honesty Pledge. Click the button below to start this process.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"The definition of plagiarism: Plagiarism (noun) - copying someone else’s work and presenting it as your own without crediting them", | ||
"By clicking below, you pledge that all of your submitted code A) is code you or your pair personally wrote, or B) comes from open source libraries like jQuery, or C) has been clearly attributed to its original authors. You also give us permission to audit your challenge solutions and revoke your certificate if we discover evidence of plagiarism.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/2qn7tHp.jpg", | ||
+ "//i.imgur.com/2qn7tHp.jpg", | ||
"An image of the text \"Back End Development Certificate requirements\"", | ||
"Let's confirm that you have completed our back end development projects. Click the button below to verify this.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"An image of the word \"Congratulations\"", | ||
"Congratulations! We've added your Back End Development Certificate to your portfolio page. Unless you choose to hide your solutions, this certificate will remain publicly visible and verifiable.", | ||
"" | ||
@@ -92,33 +92,33 @@ | ||
], | ||
"type": "Waypoint", | ||
"challengeType": 7, | ||
- "nameEs": "Reclama tu certificado de desarrollo del lado del servidor", | ||
"descriptionEs": [ | ||
[ | ||
- "http://i.imgur.com/8v3t84p.jpg", | ||
+ "//i.imgur.com/8v3t84p.jpg", | ||
"Una imagen que muestra nuestro certificado de desarrollo del lado del servidor", | ||
"Este desafío te otorga tu certificado autenticado de desarrollo del lado del servidor. Antes de que podamos emitir tu certificado, debemos verificar que has completado todos los proyectos de desarrollo del lado del servidor. También debes aceptar nuestro Juramento de honestidad académica. Pulsa el botón siguiente para iniciar este proceso.", | ||
"" | ||
], | ||
[ | ||
- "http://i.imgur.com/HArFfMN.jpg", | ||
+ "//i.imgur.com/HArFfMN.jpg", | ||
"Plagio (nombre): acción y efecto de plagiar. Plagiar (verbo) - copiar en lo sustancial obras ajenas, dándolas como propias.", | ||
"Al pulsar el botón siguiente, juras que todo el código en tus soluciones a los desafíos A) es código que tú o tu compañero escribieron personalmente, o B) proviene de librerías de código abierto como jQuery, o C) ha sido claramente atribuido a sus autores originales. También nos otorgas el permiso para auditar tus soluciones a los desafíos y revocar tu certificado si encontramos evidencia de plagio.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/2qn7tHp.jpg", | ||
+ "//i.imgur.com/2qn7tHp.jpg", | ||
"Una imagen del texto \"Back End Development Certificate requirements\"", | ||
"Confirmemos que has completado todos nuestros proyectos de desarrollo del lado del servidor. Pulsa el botón siguiente para hacer la verificación.", | ||
"#" | ||
], | ||
[ | ||
- "http://i.imgur.com/16SIhHO.jpg", | ||
+ "//i.imgur.com/16SIhHO.jpg", | ||
"Una imagen de la palabra \"Congratulations\"", | ||
"¡Felicitaciones! Hemos agregado tu certificado de desarrollo del lado del servidor. A menos que elijas no mostrar tus soluciones, este certificado será públicamente visible y verificable.", | ||
"" | ||
] | ||
- ] | ||
+ ], | ||
+ "titleEs": "Reclama tu certificado de desarrollo del lado del servidor" | ||
} | ||
] | ||
} |
View
20
seed/challenges/03-back-end-development-certification/dynamic-web-applications.json
@@ -28,7 +28,6 @@ | ||
"tests": [], | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "nameEs": "Crea una aplicación de votaciones", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='https://fcc-voting-arthow4n.herokuapp.com/' target='_blank'>https://fcc-voting-arthow4n.herokuapp.com/</a> y despliégala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -44,7 +43,8 @@ | ||
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea una aplicación de votaciones" | ||
}, | ||
{ | ||
"id": "bd7158d8c443eddfaeb5bdff", | ||
@@ -67,7 +67,6 @@ | ||
"tests": [], | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "nameEs": "Crea una aplicación de coordinación de vida nocturna", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://whatsgoinontonight.herokuapp.com/' target='_blank'>http://whatsgoinontonight.herokuapp.com/</a> y despliégala en Heroku.", | ||
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -80,7 +79,8 @@ | ||
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea una aplicación de coordinación de vida nocturna" | ||
}, | ||
{ | ||
"id": "bd7158d8c443eddfaeb5bd0e", | ||
@@ -102,7 +102,6 @@ | ||
"tests": [], | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "nameEs": "Grafica el mercado de acciones", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://watchstocks.herokuapp.com/' target='_blank'>http://watchstocks.herokuapp.com/</a> y despliégalo en Heroku.", | ||
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -114,7 +113,8 @@ | ||
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Grafica el mercado de acciones" | ||
}, | ||
{ | ||
"id": "bd7158d8c443eddfaeb5bd0f", | ||
@@ -136,7 +136,6 @@ | ||
"tests": [], | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "nameEs": "Administra un club de intercambio de libros", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://bookjump.herokuapp.com/' target='_blank'>http://bookjump.herokuapp.com/</a> y despliégalo en Heroku.", | ||
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -148,7 +147,8 @@ | ||
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Administra un club de intercambio de libros" | ||
}, | ||
{ | ||
"id": "bd7158d8c443eddfaeb5bdee", | ||
@@ -173,7 +173,6 @@ | ||
"tests": [], | ||
"type": "basejump", | ||
"challengeType": 4, | ||
- "nameEs": "Crea un clon de Pinterest", | ||
"descriptionEs": [ | ||
"<strong>Objetivo:</strong> Construye una aplicación de pila completa (full stack) en JavaScript que funcione de forma similar al siguiente proyecto: <a href='http://pintech.herokuapp.com/' target='_blank'>http://pintech.herokuapp.com/</a> y despliégalo en Heroku.", | ||
"Ten en cuenta que para cada proyecto, debes crear un nuevo repositorio en GitHub y un nuevo proyecto en Heroku. Si no recuerdas cómo hacerlo, visita de nuevo <a href='/challenges/get-set-for-our-back-end-development-projects'>http://freecodecamp.com/challenges/get-set-for-our-back-end-development-projects</a>.", | ||
@@ -188,7 +187,8 @@ | ||
"Una vez hayas terminado de implementar estas historias de usuario, pulsa el botón de \"I've completed this challenge\" e incluye las URLs de tu repositorio GitHub y de tu aplicación corriendo en Heroku.", | ||
"Puedes obtener retroalimentación acerca de tu proyecto de parte de tus compañeros campistas compartiéndolo en nuestro <a href='//gitter.im/freecodecamp/codereview' target='_blank'>Cuarto de revisión de código</a>. También puedes compartirlo en Twitter y en el campamento de tu ciudad (en Facebook)." | ||
], | ||
- "isRequired": true | ||
+ "isRequired": true, | ||
+ "titleEs": "Crea un clon de Pinterest" | ||
} | ||
] | ||
} |
View
2
seed/challenges/03-back-end-development-certification/git.json
@@ -40,7 +40,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Guarda las revisiones de tu código por siempre con Git", | ||
+ "titleEs": "Guarda las revisiones de tu código por siempre con Git", | ||
"descriptionEs": [ | ||
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.", | ||
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.", | ||
View
2
seed/challenges/03-back-end-development-certification/mongodb.json
@@ -39,7 +39,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Guarda tus datos en MongoDB", | ||
+ "titleEs": "Guarda tus datos en MongoDB", | ||
"descriptionEs": [ | ||
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.", | ||
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.", | ||
View
10
seed/challenges/03-back-end-development-certification/nodejs-and-expressjs.json
@@ -42,7 +42,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Administrando paquetes con NPM", | ||
+ "titleEs": "Administrando paquetes con NPM", | ||
"descriptionEs": [ | ||
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.", | ||
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.", | ||
@@ -105,7 +105,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Inicia un servidor en Node.js", | ||
+ "titleEs": "Inicia un servidor en Node.js", | ||
"descriptionEs": [ | ||
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.", | ||
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.", | ||
@@ -149,7 +149,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Continuemos trabajando con servidores en Node.js", | ||
+ "titleEs": "Continuemos trabajando con servidores en Node.js", | ||
"descriptionEs": [ | ||
"Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.", | ||
"Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.", | ||
@@ -180,7 +180,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Terminemos de trabajar con servidores en Node.js", | ||
+ "titleEs": "Terminemos de trabajar con servidores en Node.js", | ||
"descriptionEs": [ | ||
"Sigamos con el desafío de LearnYouNode de Node School. Para este Waypoint, trabajaremos con las lecciones 11 a 13.", | ||
"Asegúrate de que siempre te encuentres en el directorio \"workspace\" de tu proyecto. Puedes regresar a este directorio cuando quieras usando el comando: <code>cd ~/workspace</code>.", | ||
@@ -225,7 +225,7 @@ | ||
"tests": [], | ||
"type": "waypoint", | ||
"challengeType": 2, | ||
- "nameEs": "Creando Web Apps con Express.js", | ||
+ "titleEs": "Creando Web Apps con Express.js", | ||
"descriptionEs": [ | ||
"Haremos este desafío en Cloud 9, un poderoso editor en línea con un ambiente de trabajo Ubuntu Linux completo, corriendo totalmente en la nube.", | ||
"Si todavía no tienes una cuenta en Cloud 9, crea una ahora en <a href='http://c9.io' target='_blank'>http://c9.io</a>.", | ||
View
16
seed/challenges/04-video-challenges/bigonotation.json
@@ -32,7 +32,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?", | ||
"descriptionEs": [ | ||
"La complejidad temporal es una forma de discutir cunto tiempo toma un algoritmo específico. Esto es útil al ajustar software para que opere tan rápido como sea posible.", | ||
"Cuando escribes código, debes tener en cuenta cuanto se va a demorar su ejecución. Nadie quiere crear un producto que fruste a los usuarios por su lentitud.", | ||
@@ -42,7 +41,8 @@ | ||
"Además, pueden haber preguntas en entrevistas sobre la notación O mayúscula y de complejidad temporal.", | ||
"Tu empleador podrá querer saber que el código que escribes no tardará demasiado en cargar en la página de los usuarios, y el conocimiento de la notación O mayúscula muestra que reconoces esto mientras escribies tu código.", | ||
"Lo que esperamos que te quede de este video es que la notación O mayúscula te ayuda a identificar cuando podría haber problemas (en ocasiones problemas MAYÚSCULOS) en velocidad y memoria cuando tu sitio o aplicación crezcan." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Notación O mayúscula: ¿Qué es y porque te debe interesar?" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31517a", | ||
@@ -63,9 +63,9 @@ | ||
"If your algorithm slows down exponentially with the input, you're going to want to look for a more efficient way to solve that problem.", | ||
"Whenever you’re coding loops within loops, you want to be especially mindful of time complexity.", | ||
"Big O Cheat Sheet is the place to look once you can classify your algorithm, like as a 'merge-sort' or a 'quick-sort'.", | ||
- "bigocheatsheet.com/", | ||
+ "<a href='http://bigocheatsheet.com/' target='_blank'>bigocheatsheet.com/</a>", | ||
"Princeton Coursera course is NOT for the faint of heart. With examples and practice in Java, this course will cover iterating over data specifically with Java, sorting, and searching algorithms.", | ||
- "coursera.org/course/algs4partI" | ||
+ "<a href='http://coursera.org/course/algs4partI' target='_blank'>coursera.org/course/algs4partI</a>" | ||
], | ||
"challengeSeed": [ | ||
"139877627" | ||
@@ -84,7 +84,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Notación O mayúscula: Unos pocos ejemplos", | ||
"descriptionEs": [ | ||
"La complejidad en tiempo comunmente se estima contando la cantidad de operaciones elementales que un algoritmo efectua (una operación elemental es una cuya ejecución requiere una cantidad de tiempo fijo).", | ||
"La complejidad temporal se clasifica por la naturaleza de la función T(n) donde T representa una función matemática para el tiempo que tarda el algoritmo y n representa la cantidad de elementos sobre los que actua el algoritmo.", | ||
@@ -101,10 +100,11 @@ | ||
"Si tu algoritmo se hace más lento de manera exponencial a medida que aumenta la entrada, querrás buscar una forma más eficiente de resolver el problema.", | ||
"Siempre que programes ciclos dentro de ciclos, querrás ser especialmente cuidadoso de la complejidad temporal.", | ||
"La hoja de copialina de la notación O mayúscula es el lugar donde mirar para clasificar tu algoritmo, como el de un 'ordenamiento por mezcla' o un 'ordenamiento rápido'.", | ||
- "bigocheatsheet.com/", | ||
+ "<a href='http://bigocheatsheet.com/' target='_blank'>bigocheatsheet.com/</a>", | ||
"El curso de Coursera de Princeton no es para débiles de corazón. Con ejemplos y prácticas en Java, este curso cubre iteración sobre los datos especifcamente algoritmos de ordenamiento y búsqueda.", | ||
- "coursera.org/course/algs4partI" | ||
- ] | ||
+ "<a href='http://coursera.org/course/algs4partI' target='_blank'>coursera.org/course/algs4partI</a>" | ||
+ ], | ||
+ "titleEs": "Notación O mayúscula: Unos pocos ejemplos" | ||
} | ||
] | ||
} |
View
75
seed/challenges/04-video-challenges/chromedevtools.json
@@ -7,14 +7,14 @@ | ||
"id": "56b15f15632298c12f315184", | ||
"title": "Chrome Dev Tools: Elements", | ||
"description": [ | ||
- "This is basic info and a mini-lesson on the Elements tab of Chrome Dev Tools. Check out more in-depth documentation here: developers.google.com/web/tools/iterate/inspect-styles/basics", | ||
+ "This is basic info and a mini-lesson on the Elements tab of Chrome Dev Tools. Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/iterate/inspect-styles/basics' target='_blank'>developers.google.com/web/tools/iterate/inspect-styles/basics</a>", | ||
"We will be using the webpage mckellen.com/ per suggestion of Free Code Camp user kmiasko.", | ||
"If you right click and select 'Inspect element', you can have access to the elements tab. You can change text, background color, text color, and any other CSS or HTML you'd like!", | ||
"These changes don't set up automatically, so don't use this as an IDE or a place to create or edit anything you want to save. You can set up something called 'persistent authoring' to save.", | ||
"Cascade, inherit, and other CSS rules still apply, so keep that in mind as you play around. Additionally, overridden styles will be shown as having a strike through them.", | ||
"It should also be noted that all of the code you're seeing in this 'tree' is current HTML, not the original when the page loaded. If you use JavaScript or jQuery to change something, it will be updated on this tree.", | ||
"Padding, border, and margins are easily inspected and edited using the colorful box on the right or bottom side.", | ||
- "Please check out the Chrome Dev Tools documentation at developers.google.com/web/tools/chrome-devtools/" | ||
+ "Please check out the Chrome Dev Tools documentation at <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>http://developers.google.com/web/tools/chrome-devtools/</a>" | ||
], | ||
"challengeSeed": [ | ||
"137186237" | ||
@@ -32,17 +32,17 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Elementos", | ||
"descriptionEs": [ | ||
- "Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: developers.google.com/web/tools/iterate/inspect-styles/basics ", | ||
+ "Esta es información básica y una mini-lección sobre la pestaña Elements en las herramientas de desarrollo de Chrome. Echa un vistazo a la documentación más detallada aquí: <a href='http://developers.google.com/web/tools/iterate/inspect-styles/basics' target='_blank'>developers.google.com/web/tools/iterate/inspect-styles/basics</a>", | ||
"Vamos a utilizar la página web mckellen.com/ por sugerencia del usuario de FreeCodeCamp kmiasko.", | ||
"Si pulsas con el botón derecho y seleccionas 'Inspeccionar elemento', tendrás acceso a la pestaña elements. ¡Puedes cambiar el texto, el color de fondo, el color de texto y cualquier otra propiedad CSS o elemento HTML que desees!", | ||
"Estos cambios no se establecen de forma automática, por lo que no debes usar el inspector como un IDE o como un lugar para crear o editar cualquier cosa que desees guardar. Puedes configurar algo que se llama 'autoría persistente' para salvar.", | ||
"Las reglas de CSS como cascada, herencia y otras se aplican, así que tenlo en cuenta a medida que juegas. Además, los estilos anulados se muestran con un tachado sobre ellos. ", | ||
"También hay que señalar que todo el código que veas en ese 'árbol' es código HTML actual, no el original que había cuando se cargó la página. Si utilizas jQuery o JavaScript para cambiar algo, esté árbol se actualizará.", | ||
"El relleno, los bordes y los márgenes se inspeccionan fácilmente y puedes editarlos usando la caja con colores que encontrarás al lado derecho o en la parte de abajo.", | ||
- "Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en developers.google.com/web/tools/chrome-devtools/" | ||
- ] | ||
+ "Por favor, echa un vistazo a la documentación de las herramientas de desarrollo de Chrome en <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>http://developers.google.com/web/tools/chrome-devtools/</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Elementos" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315183", | ||
@@ -54,7 +54,7 @@ | ||
"If you look at the line on the side, you'll notice a pattern of colors. Those colors each represent a different type of content in the request.", | ||
"The longer the line is a certain color, the longer that type of content took in that request. Ultimately, you want short lines, and if any request has long lines, you know what may be slowing down the web page.", | ||
"If you click a request in the log, you can get even more detailed information.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/network-performance/resource-loading" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/network-performance/resource-loading' target='_blank'>developers.google.com/web/tools/profile-performance/network-performance/resource-loading</a>" | ||
], | ||
"challengeSeed": [ | ||
"137187539" | ||
@@ -71,7 +71,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: red", | ||
"descriptionEs": [ | ||
"La pestaña network (red) ayuda a responder preguntas como '¿Qué elemento o parte de la página fue el más demorado?' o '¿Qué inició una petición?'", | ||
"El panel de red registra información detallada sobre cuánto tarda en cargar cada elemento de su página o aplicación.", | ||
@@ -79,8 +78,9 @@ | ||
"Si te fijas en la línea al lado derecho, te darás cuenta de un patrón de colores. Cada color representa un tipo diferente de contenido en la solicitud. ", | ||
"Cuanto más larga sea la línea de un color determinado, tanto más tiempo tomó ese tipo de contenido en la solicitud. En últimas quieres líneas cortas, y si cualquier solicitud tiene largas líneas, sabes que puede estar ralentizando la página web.", | ||
"Si pulsas sobre una solicitud en la bitácora, podrás obtener información más detallada.", | ||
- "Consulta más documentación detallada aquí: developers.google.com/web/tools/profile-performance/network-performance/resource-loading" | ||
- ] | ||
+ "Consulta más documentación detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/network-performance/resource-loading' target='_blank'>developers.google.com/web/tools/profile-performance/network-performance/resource-loading</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: red" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315182", | ||
@@ -93,7 +93,7 @@ | ||
"By slowing everything down and giving yourself a chance to examine what's happening at every spot you've set, you can keep track of exactly what's happening in the page or app.", | ||
"Once all of the breakpoints are set, you can step through the code and examine the state of your page or app at every breakpoint.", | ||
"Just like with elements, you can live-edit through Dev Tools, but remember to save those changes however you can so your progress isn't lost.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/javascript/breakpoints/" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/javascript/breakpoints/' target='_blank'>developers.google.com/web/tools/javascript/breakpoints/</a>" | ||
], | ||
"challengeSeed": [ | ||
"137188025" | ||
@@ -111,7 +111,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Fuentes", | ||
"descriptionEs": [ | ||
"La pestaña 'fuentes' es más útil para la depuración de JavaScript. Cuanto más grande sea tu proyecto, tanto más difícil resulta encontrar exactamente dónde se produce un problema. ", | ||
"Puedes seleccionar diferentes partes del código para ser 'puntos de interrupción', puestos de control que detendrán la ejecución del código en ese preciso momento. ", | ||
@@ -120,8 +119,9 @@ | ||
"Al reducir la velocidad de todo y darte la oportunidad de examinar lo que está sucediendo en cada punto que hayas configurado, podrás controlar exactamente lo que está sucediendo en la página o aplicación.", | ||
"Una vez has establecido todos los puntos de interrupción, puedes recorrer el código y examinar el estado de tu página o aplicación en cada punto de interrupción.", | ||
"Al igual que con los elementos, puedes editar en vivo mediante las herramientas de desarrollo, pero recuerda que debes guardar esos cambios para que no pierdas tu progreso.", | ||
- "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/breakpoints/" | ||
- ] | ||
+ "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/javascript/breakpoints/' target='_blank'>developers.google.com/web/tools/javascript/breakpoints/</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Fuentes" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315181", | ||
@@ -134,7 +134,7 @@ | ||
"All of this will help you to better understand what's happening in the browser, particularly which events require more browser memory than others.", | ||
"When you're using timeline, remember to use this 'clear' button and to start recording before you load the page, depending on what you want to capture.", | ||
"You'll notice that when you record JS events, clicking on the title or 'function call' on the left will take you to the document and line of that function using the resource panel.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool' target='_blank'>developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool</a>" | ||
], | ||
"challengeSeed": [ | ||
"137188786" | ||
@@ -152,7 +152,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Línea de tiempo", | ||
"descriptionEs": [ | ||
"El panel Línea de tiempo te permite grabar y analizar toda la actividad en tu aplicación mientras se ejecuta. Es el mejor lugar para comenzar a investigar los problemas de rendimiento que percibas en tu aplicación. ", | ||
"Al igual que usas el panel de red para averiguar cuánto tiempo toman las partes de la página para comunicarse con el Internet y utilizas fuentes para averiguar dónde algo se daña, puedes utilizar la línea de tiempo para averiguar con más detalle lo que está pasando y el tiempo que tarda.", | ||
@@ -161,10 +160,9 @@ | ||
"Todo esto te ayudará a entender mejor lo que está pasando en el navegador, en particular cuáles eventos requieren más memoria del navegador.", | ||
"Cuando uses la línea de tiempo, recuerda que debes utilizar el botón 'limpiar' (clear) para iniciar la grabación y antes de cargar la página, dependiendo de lo que desees capturar.", | ||
"Te darás cuenta de que cuando grabas eventos JS, al pulsar en el título o en una 'llamada a una función' al lado izquierdo, te llevará al documento y a la línea de esa función en el panel de recursos. ", | ||
- "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool" | ||
- ] | ||
- | ||
- | ||
+ "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool' target='_blank'>developers.google.com/web/tools/profile-performance/evaluate-performance/timeline-tool</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Línea de tiempo" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315180", | ||
@@ -174,7 +172,7 @@ | ||
"There are three types of profiles you can collect: CPU profile, HEAP snapshot, and HEAP profile. HEAP profiles have more to do with memory usage, while a CPU profile has more to do with JavaScript performance.", | ||
"A profiler called V8 is used while your code runs to pinpoint what in the JavaScript takes the most time, making it easy to optimize your code.", | ||
"Each of these profiles can be viewed on the left, and you can take multiple profiles of each. Overall, the profiles tab is helpful when optimizing code.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/profile-performance/rendering-tools/js-execution' target='_blank'>developers.google.com/web/tools/profile-performance/rendering-tools/js-execution</a>" | ||
], | ||
"challengeSeed": [ | ||
"137189330" | ||
@@ -192,14 +190,14 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Perfiles", | ||
"descriptionEs": [ | ||
"El panel Perfiles te permite perfilar el tiempo de ejecución y el uso de memoria de una aplicación web o de una página. Esto se aplica principalmente a la ejecución de JavaScript en su página o aplicación. ", | ||
"Hay tres tipos de perfiles que se pueden recolectar: el perfil de la CPU, instantáneas de la memoria con estructura montón (Heap), y el perfil de la memoria con estructura montón. Los perfiles de memoria en estructura montón tienen más que ver con el uso de memoria, mientras que un perfil de la CPU tiene más que ver con el rendimiento de JavaScript. ", | ||
"Un perfilador llamado V8 se usa mientras se ejecuta el código para identificar lo que en el JavaScript toma mucho tiempo, facilitándote de esta forma optimizar tu código.", | ||
"Cada uno de estos perfiles se puede ver a la izquierda, y se puede tomar múltiples perfiles de cada uno. En general, la pestaña de perfiles es muy útil cuando deseas optimizar tu código. ", | ||
- "Revisa documentación más detallada aquí: developers.google.com/web/tools/profile-performance/rendering-tools/js-execution" | ||
- ] | ||
+ "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/profile-performance/rendering-tools/js-execution' target='_blank'>developers.google.com/web/tools/profile-performance/rendering-tools/js-execution</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Perfiles" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31517f", | ||
@@ -208,7 +206,7 @@ | ||
"The Resources panel lets you inspect resources that are loaded in the inspected page including IndexedDB or Web SQL databases, local and session storage, cookies, Application Cache, images, fonts, and style sheets.", | ||
"You can view and edit all of this information within the browser.", | ||
"As you get into more advanced web building, play around with the resources panel and see how it can help you understand the requirements of your app and page in real time.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/iterate/manage-data/index" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/iterate/manage-data/index' target='_blank'>developers.google.com/web/tools/iterate/manage-data/index</a>" | ||
], | ||
"challengeSeed": [ | ||
"137193676" | ||
@@ -221,13 +219,13 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Recursos", | ||
"descriptionEs": [ | ||
"El panel de Recursos te permite inspeccionar los recursos que se cargan en la página, incluyendo IndexedDB o bases de datos SQL Web, almacenamiento local y de sesión, las galletas (cookies), memoria caché de aplicaciones, imágenes, fuentes y hojas de estilo.", | ||
"Puedes ver y editar toda esta información dentro del navegador.", | ||
"A medida que vayas construyendo aplicaciones web más avanzadas, juega con el panel de recursos y verás cómo te ayudará a entender los requisitos de tu aplicación y de tu página en tiempo real.", | ||
- "Revisa documentación más detallada aquí: developers.google.com/web/tools/iterate/manage-data/index" | ||
- ] | ||
+ "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/iterate/manage-data/index' target='_blank'>developers.google.com/web/tools/iterate/manage-data/index</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Recursos" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31517e", | ||
@@ -256,7 +254,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Las auditorías", | ||
"descriptionEs": [ | ||
"La herramienta de auditoría te guía para mejorar tu página paso a paso.", | ||
"En este vídeo, se utiliza esta herramienta con un generador de citas aleatorias desarrollado como uno de los proyectos de desarrollo de interfaces.", | ||
@@ -264,7 +261,8 @@ | ||
"Es importante tenerlas en cuenta para contextualizarlos con el resto de conocimiento que tienes de tu sitio.", | ||
"A veces, puede ser que sea lo acertado, pero en ocasiones, por tu situación las sugerencias que da son equivocadas.", | ||
"Usa esta herramienta cuando desees mejorar tu sitio o aplicación, pero no sepas por dónde empezar." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Las auditorías" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31517d", | ||
@@ -276,7 +274,7 @@ | ||
"You should know that messages stack up, and you can clear them by typing and entering 'clear()'. You can also save the log by selecting 'Preserve Log'.", | ||
"There are different commands that will log differently, like console.log() for basic logging, console.error() & console.warn() for 'eye catching stuff'.", | ||
"The console can track exceptions, which basically means when something goes wrong. It can even pause the code during those exceptions, a function that you might remember from the 'Source' tab.", | ||
- "Check out more in-depth documentation here: developers.google.com/web/tools/javascript/console/" | ||
+ "Check out more in-depth documentation here: <a href='http://developers.google.com/web/tools/javascript/console/' target='_blank'>developers.google.com/web/tools/javascript/console/</a>" | ||
], | ||
"challengeSeed": [ | ||
"137194773" | ||
@@ -294,7 +292,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Consola", | ||
"descriptionEs": [ | ||
"El panel de la consola ofrece dos funciones principales: registro de datos de diagnóstico en el proceso de desarrollo y proporcionar un intérprete de órdenes que puedes utilizar para interactuar con el documento y las Herramientas de desarrollo", | ||
"Al utilizar la consola, puedes ver los datos en bruto o estructurados mediante instrucciones estándar JS y órdenes específicas para la consola.", | ||
@@ -302,15 +299,16 @@ | ||
"Debes saber que los mensajes se apilan y que puedes limpiarlos escribiendo <code>clear()</code>. También puedes guardar la bitácora seleccionando 'Preserve Log'. ", | ||
"Hay diferentes órdenes que registrarán en bitácoras de manera diferente, como console.log() para registrar información básica, console.error() y console.warn() para registrar en bitácoras 'información llamativa'.", | ||
"La consola puede realizar un seguimiento de excepciones, que básicamente registra cuando algo sale mal. Puede incluso hacer una pausa en el código durante esas excepciones, función que posiblemente recuerdes de la pestaña 'Fuente'. ", | ||
- "Revisa documentación más detallada aquí: developers.google.com/web/tools/javascript/console/" | ||
- ] | ||
+ "Revisa documentación más detallada aquí: <a href='http://developers.google.com/web/tools/javascript/console/' target='_blank'>developers.google.com/web/tools/javascript/console/</a>" | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Consola" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31517c", | ||
"title": "Chrome Dev Tools: Summary", | ||
"description": [ | ||
"1.) Chrome Dev Tools are awesome, and the more you can dive in and try to use them, the faster your skill level will grow.", | ||
- "2.) Use the documentation, even if you've never read documentation before: developers.google.com/web/tools/chrome-devtools/", | ||
+ "2.) Use the documentation, even if you've never read documentation before: <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>developers.google.com/web/tools/chrome-devtools/</a>", | ||
"3.) Once you start to get comfortable in one tab, stretch yourself. Working effectively with all of the tabs will serve you exponentially more than sticking in your comfort zone." | ||
], | ||
"challengeSeed": [ | ||
@@ -324,13 +322,12 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Herramientas de desarrollo de Chrome: Resumen", | ||
"descriptionEs": [ | ||
", Las herramientas de desarrollo de Chrome son impresionantes, y cuanto más te puedas sumergir y tratar de utilizarlas, más rápido aumentará tu nivel. ", | ||
- ", Utiliza la documentación, incluso si nunca has leído documentación antes: developers.google.com/web/tools/chrome-devtools/ ", | ||
+ ", Utiliza la documentación, incluso si nunca has leído documentación antes: <a href='http://developers.google.com/web/tools/chrome-devtools/' target='_blank'>developers.google.com/web/tools/chrome-devtools/</a> ", | ||
", Una vez que comiences a sentirte cómodo en una pestaña, rétate aprendiendo a usar una diferente. Trabajar eficazmente con todas las pestañas te servirá exponencialmente más que pegarte en tu zona de confort." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Herramientas de desarrollo de Chrome: Resumen" | ||
} | ||
] | ||
} | ||
- |
View
113
seed/challenges/04-video-challenges/computer-basics.json
@@ -42,7 +42,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador", | ||
"descriptionEs": [ | ||
"Una máquina necesita por lo menos cuatro partes básicas para ser considerada un computador.", | ||
"Hoy vamos a hablar acerca de conceptos básicos de hardware.", | ||
@@ -57,7 +56,8 @@ | ||
"Ahora, la CPU tiene acceso exclusivo a esta memoria.", | ||
"No se puede llegar a la memoria desde la entrada o desde la salida sin el uso de la CPU.", | ||
"Por lo tanto, sólo para repasar, tenemos 4 partes básicas de la computadora: los dispositivos de entrada, los dispositivos de salida, la CPU y la memoria." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentes básicos del computador: Las 4 partes básicas de un computador" | ||
}, | ||
{ | ||
"id": "bd7127d8c441eddfbeb5bddf", | ||
@@ -97,7 +97,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Más Hardware", | ||
"descriptionEs": [ | ||
"En este video cubrimos las funciones básicas de una placa base, tarjetas de expansión, y la fuente de poder.", | ||
"Vamos a revisar rápidamente - las 4 partes básicas de un computador son dispositivos de entrada, como el ratón o el teclado, dispositivos de salida, monitor o altavoces, la CPU, la unidad central de procesamiento, y la memoria.", | ||
@@ -111,7 +110,8 @@ | ||
"Por lo general es la parte que tiene un ventilador en él para evitar que se sobrecaliente.", | ||
"Así que vamos a hacer un repaso rápido.", | ||
"Además de las cuatro partes básicas dispositivos de entrada, dispositivos de salida, CPU, y la memoria, también por lo general tenemos una placa base, las tarjetas de expansión, y una fuente de poder." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Más Hardware" | ||
}, | ||
{ | ||
"id": "bd7129d8a441eddfbeb5bddf", | ||
@@ -149,7 +149,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Chips y la Ley de Moore", | ||
"descriptionEs": [ | ||
"Discutiremos lo que constituye un chip y por qué la tecnología se vuelve más barata cada año.", | ||
"En este video vamos a estar hablando sobre chips y algo que se llama la Ley de Moore.", | ||
@@ -161,7 +160,8 @@ | ||
"Lo que hace que estos chips sean más grandes o más rápidos es la cantidad de transistores en un solo chip.", | ||
"La Ley de Moore es la observación de que la cantidad de transistores que caben en un chip se ha duplicado cada dos años desde 1965.", | ||
"Esto es importante porque hace que la tecnología sea más económica y accesible." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Chips y la Ley de Moore" | ||
}, | ||
{ | ||
"id": "bd7126d8c441eddfbeb5bddf", | ||
@@ -195,7 +195,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Introducción a código binario", | ||
"descriptionEs": [ | ||
"Cómo se ve lo binario, y lo que puede significar.", | ||
"Los 0s y 1s pueden interpretarse como datos mucho más complejos.", | ||
@@ -204,7 +203,8 @@ | ||
"Aquellos 1s y 0s pueden ser casi cualquier cosa, pero por lo general son sólo números, letras y símbolos.", | ||
"Vamos a revisar cómo decodificar un número en binario, pero como podrás adivinar, la traducción binaria se puede hacer con una rápida búsqueda en Google.", | ||
"La parte más importante de esto es que entiendas el concepto de que incluso cosas simples como 1s y 0s se pueden traducir en algo muy complejo, que es la base para todos los lenguajes de programación existentes en la actualidad." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Introducción a código binario" | ||
}, | ||
{ | ||
"id": "bd7125d8c441eddfbeb5bddf", | ||
@@ -240,7 +240,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: decodificar un número binario", | ||
"descriptionEs": [ | ||
"En este vídeo, decodificaremos un número escrito en notación binaria.", | ||
"Hablemos sobre el sistema de numeración binario, también conocido como un montón de 1s y 0s una y otra vez.", | ||
@@ -251,7 +250,8 @@ | ||
"Si hay un 1, dejamos el número (2 a la potencia de la posición) y lo agregamos a los números de otras posiciones que estén en \"1\" o \"encendidas\".", | ||
"Si es un 0, hacemos caso omiso del número de esa posición.", | ||
"En este video, la suma de los números da 75." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: decodificar un número binario" | ||
}, | ||
{ | ||
"id": "bd7124d8c441eddfbeb5bddf", | ||
@@ -290,7 +290,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos", | ||
"descriptionEs": [ | ||
"¿Cómo se mide el tamaño/cantidad de datos, a partir de un bit y continuando hasta un petabyte.", | ||
"Hoy vamos a estar hablando de tamaño de los datos.", | ||
@@ -304,7 +303,8 @@ | ||
"Después de eso no hay Megabyte, o 1024 bytes a la potencia de dos.", | ||
"Entonces es Gigabyte, 1024 Bytes a la tercera potencia; Terabyte, 1024 bytes a la cuarta potencia y petabyte que es 1024 a la quinta potencia.", | ||
"!Crecieron realmente rápidamente!" | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Cómo medir el tamaño de los datos" | ||
}, | ||
{ | ||
"id": "bd7123d8c441eddfbeb5bddf", | ||
@@ -338,7 +338,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: medición de la velocidad de datos", | ||
"descriptionEs": [ | ||
"La velocidad de datos y el tamaño de los datos se miden de manera diferente.", | ||
"En este video, cubrimos cómo se mide la velocidad de los datos.", | ||
@@ -351,7 +350,8 @@ | ||
"En la velocidad de red, hablamos de gigabits por segundo (¡mil millones de bits por segundo!).", | ||
"La conclusión principal es que la velocidad se mide generalmente en bits mientras que el tamaño se mide en bytes.", | ||
"Además, si tienes una velocidad de internet de cierta cantidad de bits por segundo, ten en cuenta que te están hablando de algo que es la octava parte de la cantidad en bytes, que es la manera típica como mides tamaños de datos." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: medición de la velocidad de datos" | ||
}, | ||
{ | ||
"id": "bd7122d8c441eddfbeb5bddf", | ||
@@ -385,7 +385,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Bytes en binario", | ||
"descriptionEs": [ | ||
"En binario se puede hacer más que representar números - mediante bytes, puede simbolizar todos los símbolos alfanuméricos, los cuales pueden ser interpretados en códigos más complejos", | ||
"Vamos a hablar sobre el nivel más básico que un computador puede comprender otros lenguajes como JavaScript.", | ||
@@ -394,7 +393,8 @@ | ||
"Todos los números (255 y menos), las letras y símbolos se pueden traducir en bytes que el computador puede entender.", | ||
"Por lo tanto, todos los números, letras y símbolos en su código JavaScript se puede traducir.", | ||
"Hay una gran cantidad de lenguajes con los cuales los computadores pueden operar, y lo que quiero que te quede de este video es que todos los datos en tu computador se reducen a bytes binarios." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Bytes en binario" | ||
}, | ||
{ | ||
"id": "bd7121d8c441eddfbeb5bddf", | ||
@@ -433,7 +433,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Tipos de Computadores", | ||
"descriptionEs": [ | ||
"Este video cubre los conceptos básicos de los supercomputadores, servidores, estaciones de trabajo, PC y microcontroladores.", | ||
"Vamos a discutir los diferentes tipos de computadores.", | ||
@@ -447,7 +446,8 @@ | ||
"Tal vez has oído \"¡Soy un Mac!\" o \"¡Soy un PC!\", Algo que indica que son diferentes, pero en realidad mi propio MacBook personal sigue siendo un PC, un computador personal.", | ||
"Es a la vez un Mac y un PC.", | ||
"El último tipo de equipo del que hablaremos es un microcontrolador, el tipo de equipo que puedes tener en tu carro que es realmente bueno en una pequeña tarea especializada, pero no se utilizaría la misma forma que un PC." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Tipos de Computadores" | ||
}, | ||
{ | ||
"id": "bd7120d8c441eddfbeb5bddf", | ||
@@ -488,7 +488,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Más sobre la placa base", | ||
"descriptionEs": [ | ||
"Un poco más de detalle sobre lo que constituye una placa base y sus funciones estándar en un computador.", | ||
"Hoy vamos a hablar más sobre la placa base.", | ||
@@ -504,7 +503,8 @@ | ||
"Además de las ranuras de expansión, las placas base tienen puertos.", | ||
"En tu computador, probablemente sabes que hay un lugar para conectar USB, FireWire, tarjeta SD, Ethernet, e incluso un plug-in de audio para escuchar a través de auriculares.", | ||
"Todos estos son considerados puertos, un lugar en la placa base donde puedes conectar la CPU a algun dispositivo externo bien para obtener o para dar información." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Más sobre la placa base" | ||
}, | ||
{ | ||
"id": "bd712fd8c441eddfbeb5bddf", | ||
@@ -545,7 +545,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Redes de datos", | ||
"descriptionEs": [ | ||
"Este video cubre los conceptos básicos de redes de área local, redes de área amplia y redes privadas virtuales.", | ||
"En este vídeo se habla de redes de datos.", | ||
@@ -560,7 +559,8 @@ | ||
"Podrían utilizar una WAN.", | ||
"Podrías pensar que estas es posible conectarlas usando Internet, y en el caso de una VPN (red privada virtual, que conceptualmente es básicamente lo mismo que una una WAN), tendrías la razón.", | ||
"Sin embargo, por lo general una WAN alquila un cable de una empresa de Internet para crear la conexión." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Redes de datos" | ||
}, | ||
{ | ||
"id": "bd712ed8c441eddfbeb5bddf", | ||
@@ -594,7 +594,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Direcciones IP", | ||
"descriptionEs": [ | ||
"Cada dispositivo tiene una dirección IP.", | ||
"Las direcciones IP se asignan en función de la ubicación, y son vitales para que Internet funcione.", | ||
@@ -608,14 +607,15 @@ | ||
"Este número no es lo suficientemente específico como para que llames al 911, les des tu dirección IP, y así les permitas saber donde vives.", | ||
"Sin embargo, es lo suficientemente específico como para buscar en Google \"¿Dónde está el mejor helado cerca de mí\" y Google podría darte información cercana a tu ubicación.", | ||
"Esto se hace utilizando tu dirección IP." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Direcciones IP" | ||
}, | ||
{ | ||
"id": "bd712dd8c441eddfbeb5bddf", | ||
"title": "Computer Basics: How the Internet Works", | ||
"description": [ | ||
"This is a brief and basic overview of how the internet works.", | ||
- "For a more in-depth explanation, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", | ||
+ "For a more in-depth explanation, check out <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>.", | ||
"Let's talk a little more about how the internet works.", | ||
"We've already established that every device and router on the internet has its own IP address, which is assigned based on location.", | ||
"Using these IP addresses, your device can talk to your modem, then to a router, which is set up by a web service.", | ||
@@ -626,7 +626,7 @@ | ||
"It's really amazing.", | ||
"What I want you take away from this video is that your device, since it has an IP address, can send out a request for information, and that information will get back to your device via servers and routers that comprise the internet.", | ||
"Now, this explanation is really quite basic.", | ||
- "For more information, check out web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm." | ||
+ "For more information, check out <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>." | ||
], | ||
"challengeSeed": [ | ||
"132548579" | ||
@@ -644,10 +644,9 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet", | ||
"descriptionEs": [ | ||
"Esta es una descripción breve y descripción de cómo funciona Internet.", | ||
- "Para una explicación más en profundidad, dale un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm", | ||
+ "Para una explicación más en profundidad, dale un vistazo a <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>.", | ||
"Vamos a hablar un poco más acerca de cómo funciona el Internet.", | ||
"Ya hemos establecido que todos los dispositivos y enrutadores en Internet tienen su propia dirección IP, que se asigna en función de la ubicación.", | ||
"Usando estas direcciones IP, tu dispositivo puede hablar con tu módem, y después con un enrutador, el cual debió ser configurado por ejemplo con un servicio web con el que te intentas conectar.", | ||
@@ -658,8 +657,9 @@ | ||
"Es realmente increíble.", | ||
"Lo que quiero que te lleves de este video es que tu dispositivo, que tiene una dirección IP, puede enviar una petición de información, y que esa información regresará a tu dispositivo por medio de servidores y enrutadores que componen el Internet.", | ||
"Ahora bien, esta explicación es realmente básica.", | ||
- "Para obtener más información, echa un vistazo a web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm." | ||
- ] | ||
+ "Para obtener más información, echa un vistazo a <a href='http://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm' target='_blank'>web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm</a>." | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: ¿Cómo funciona Internet" | ||
}, | ||
{ | ||
"id": "bd712cd8c441eddfbeb5bddf", | ||
@@ -685,7 +685,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Software", | ||
"descriptionEs": [ | ||
"Diferenciamos entre hardware y software, y también discutimos las diferencias entre el sistema operativo y el software de aplicación.", | ||
"En este video, vamos a discutir los fundamentos del software.", | ||
@@ -695,7 +694,8 @@ | ||
"Los dos tipos de software de los cuales vamos a hablar hoy son el sistema operativo y las aplicaciones.", | ||
"Hay tres sistemas operativos principales: Windows, Mac y Linux.", | ||
"Las aplicaciones comprenden el resto del software, como tu navegador web, juegos, cosas como Photoshop, con lo que ves tu correo, o con lo que editas documentos, etc." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Software" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31510f", | ||
@@ -706,7 +706,7 @@ | ||
"CDNs accomplish this by providing effective routes between their own servers that can fast-track users to their destination, or if its faster and/or cheaper, another copy of that website destination that is being hosted on another server.", | ||
"This concept and type of service is not new, but is becoming more popular as the internet grows.", | ||
"Websites contract and pay a CDN service, who in turn pays an internet provider to use their servers for their data.", | ||
- "An example of CDNs are Google's Hosted Libraries. -- developers.google.com/speed/libraries/#jquery", | ||
+ "An example of CDNs are Google's Hosted Libraries. -- <a href='http://developers.google.com/speed/libraries/#jquery' target='_blank'>developers.google.com/speed/libraries/#jquery</a>", | ||
"Google hosts these libraries so that your users can load them into your own site much more quickly than if you host them yourself.", | ||
"There's a chance the user's browser is even storing a cached version from visiting a previous page, making the process even quicker. If you aren't familiar with the term 'cache', don't worry, we'll cover that in future videos.", | ||
"As a user, you probably use CDNs all the time without realizing it.", | ||
@@ -729,20 +729,20 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Fundamentos básicos del computador: Redes de distribución de contenido", | ||
"descriptionEs": [ | ||
"Una red de distribución de contenido (del inglés <em>Content Delivery Network</em>) es un sistema (red) de servidores distribuidos que sirven páginas web y otros contenidos web a los usuarios en función de su ubicación geográfica, el origen de la página web y un servidor de entrega de contenido.", | ||
"El objetivo de una RDC (CDN) es establecer conexiones de red de mayor calidad.", | ||
"Las RDC logran esto proporcionando rutas eficaces entre sus propios servidores que pueden encaminar rápidamente a los usuarios a sus destinos, o si resulta más rápido o económico, a otra copia del sitio web destino, la cual se aloja en otro servidor.", | ||
"Este concepto y tipo de servicio no es nuevo, pero es cada vez más popular a medida que crece Internet.", | ||
"Los sitios web contratan y pagan un servicio a las RDC, quienes a su vez le pagan a proveedores de Internet para utilizar sus servidores y almacenar en estos sus datos.", | ||
- "Un ejemplo de CDN son las Bibliotecas alojadas de Google - developers.google.com/speed/libraries/#jquery", | ||
+ "Un ejemplo de CDN son las Bibliotecas alojadas de Google - <a href='http://developers.google.com/speed/libraries/#jquery' target='_blank'>developers.google.com/speed/libraries/#jquery</a>", | ||
"Google organiza estas bibliotecas para que tus usuarios puedan cargarlas en tus propios sitio web mucho más rápido que si las alojaras tu mismo.", | ||
"Hay incluso una posibilidad de que el navegador del usuario le presente una copia en `caché' (almacenamiento local temporal) realizada durante una visita previa, haciendo que el proceso sea aún más rápido. Si no estás familiarizado con el término 'caché', no te preocupes, vamos a cubrirlo en videos futuros. ", | ||
"Como usuario, es probable que utilices RDC todo el tiempo sin darte cuenta.", | ||
"Como desarrollador, es posible que desees utilizar RDCs como las bibliotecas de Google para ayudar a que tu página cargue más rápido.", | ||
"Como empresa, una RDC sería útil si quieres que tu producto o sitio llegue a los usuarios de manera más eficiente en el esquema más grande de su red y en Internet en su conjunto." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Fundamentos básicos del computador: Redes de distribución de contenido" | ||
}, | ||
{ | ||
"id": "bd7129d80441eddfbeb5bddf", | ||
@@ -778,7 +778,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Analógico vs digital y compresión de archivos", | ||
"descriptionEs": [ | ||
"¿Cómo los computadores pueden volver sonido analógico en archivos digitales, y los pros y los contras de la compresión de datos?", | ||
"Vamos a discutir datos anàlogos frente a datos digitales en un nivel muy básico.", | ||
@@ -793,7 +792,8 @@ | ||
"Otra forma es tomando una medida desde un punto medio y no desde 0, de forma que los número registrados sean más pequeños.", | ||
"En imágenes, se hace midiendo grupos de a 16 píxeles en lugar de hacer mediciones individuales.", | ||
"Lo que te llevas de este video es que querrás utilizar archivos digitales pues son de mayor calidad, y cuando te fijes en compresión, tendrás que decidir qué tan lejos estás dispuesto a ir para garantizar que el usuario tenga la mejor experiencia posible." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Analógico vs digital y compresión de archivos" | ||
}, | ||
{ | ||
"id": "bd7129d8b441eddfbeb5bddf", | ||
@@ -845,7 +845,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Enrutadores y paquetes", | ||
"descriptionEs": [ | ||
"En este video, vamos a entrar en más detalle respecto a enrutadores y paquetes, conceptos importantes para entender cómo funciona Internet.", | ||
"Vamos a hablar más acerca de los enrutadores y cómo se relacionan con la creación de redes.", | ||
@@ -871,7 +870,8 @@ | ||
"Las tramas no tienen que recorrer la misma ruta hasta el destino final.", | ||
"Pueden tomar cualquier ruta abierta, la que sea más rápida, y dado que tienen la dirección IP final, todos los enrutadores saben dónde enviarlos.", | ||
"Una vez que llegan al destino final, ese computador sabe cómo poner junta toda la información." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Enrutadores y paquetes" | ||
}, | ||
{ | ||
"id": "bd7029d8c441eddfbeb5bddf", | ||
@@ -916,7 +916,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Código Fuente", | ||
"descriptionEs": [ | ||
"En este video se discute lo que es código fuente, intérpretes y compiladores, y lo que significa fuentes abiertas.", | ||
"Vamos a hablar sobre el código fuente: lo que el código fuente es, donde lo puedes ver, y cómo el computador lo entiende.", | ||
@@ -936,7 +935,8 @@ | ||
"Podrías preguntarte, \"¿y eso qué?\", pero lo que es increíble es que si deseas cambiar o mejorar FreeCodeCamp, puedes describir la mejora y tal vez implementarla.", | ||
"Es una gran manera para los sitios web y para el software de crecer de forma fuerte y rápida debido a la comunidad que trabaja en conjunto para mejorarlo.", | ||
"Una regla no escrita al contribuir a proyectos de fuentes abiertas es que en general deberías compartir tus mejoras para que también sean de fuentes abiertas, y al retornar esa mejora al público también les permites a otros utilizar tus mejoras." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Código Fuente" | ||
}, | ||
{ | ||
"id": "bd7119d8c441eddfbeb5bddf", | ||
@@ -966,7 +966,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "Las variables en el código", | ||
"descriptionEs": [ | ||
"Las variables se utilizan con frecuencia en Javascript y en muchos otros lenguajes de programación.", | ||
"En este video, vamos a hablar acerca de las variables en el código.", | ||
@@ -975,7 +974,8 @@ | ||
"Cuando se ejecute <code>console.log(x)</code> presentará \"Briana\".", | ||
"Pero ten cuidado - si pones <code>console.log(\"x\")</code>, con la <code>x</code> entre comillas, se presentará la \"x\".", | ||
"Lo que yo quiero que te lleves con este video es que existen las variables en el código, y que puedes almacenar todo, desde una simple cadena hasta una función, todo con un simple nombre." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Las variables en el código" | ||
}, | ||
{ | ||
"id": "bd712bd8c441eddfbeb5bddf", | ||
@@ -1012,7 +1012,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "¿Qué hacen los programadores?", | ||
"descriptionEs": [ | ||
"Los programadores (también conocidos como codificadores, desarrolladores, o ingenieros de software) resuelven problemas convirtiendo grandes ideas en pequeños pasos que un computador puede entender.", | ||
"En este video, vamos a discutir lo que hacen los programadores.", | ||
@@ -1024,7 +1023,8 @@ | ||
"Todo se hace secuencialmente, de manera directa, por lo que hacer referencia a algo que está por debajo y que todavía no ha sucedido dará lugar a un problema.", | ||
"Los computadores sólo leen de arriba hacía abajo, como tu leerías un libro.", | ||
"Los programadores son los responsables de dividir sus ideas en pequeños pasos y escribirlos de una manera que las computadoras pueden entenderlos." | ||
- ] | ||
+ ], | ||
+ "titleEs": "¿Qué hacen los programadores?" | ||
}, | ||
{ | ||
"id": "bd712ad8c441eddfbeb5bddf", | ||
@@ -1057,7 +1057,20 @@ | ||
] | ||
], | ||
"type": "hike", | ||
- "challengeType": 6 | ||
+ "challengeType": 6, | ||
+ "nameEs": "Consola y Logging", | ||
+ "descriptionEs": [ | ||
+ "Nosotros discutimos que es la consola (y donde está), porque es útil y mostrar un poco de como trabaja.", | ||
+ "La consola: que es, donde la puedes encontrar, y para que la usas.", | ||
+ "La consola es usada comunmente para mostrar los mensajes administrativos del sistema.", | ||
+ "Una vez te familiarices con esta, encontraras una útil y poderosa herramienta.", | ||
+ "En Javascript, la consola es usada como una gran herramienta para depurar y encontrar donde hay un error en tu código ", | ||
+ "Uno de los términos mas importantes para recordar es \"console.log()\".", | ||
+ "El proceso para usarla es, es ponerlo en cualquier parte entre las líneas del código para ayudar a encontrar, identificar, y en últimas solucionar problemas especificos", | ||
+ "Usando el navegador Chrome y la consola de Chrome, si nosotros escribimos <code>console.log(\"Free Code Camp es muy bueno!\");</code>, la consola literalmente mostrará \"Free Code Camp es muy bueno!\".", | ||
+ "Además esto funcionará con números y booleanos, cuyos valores posibles son verdadro/falso", | ||
+ "Cuando se envian palabras a la consola, es importante ponerlas dentro de comillas para reconocer que es una cadena." | ||
+ ] | ||
}, | ||
{ | ||
"id": "bd7129d89441eddfbeb5bddf", | ||
@@ -1110,8 +1123,7 @@ | ||
] | ||
], | ||
"type": "hike", | ||
- "challengeType": 6, | ||
- "nameEs": "Seguridad en los computadores", | ||
+ "challengeType": 6, | ||
"descriptionEs": [ | ||
"Lo fundamental de la seguridad en los computadores y cómo proteger su información.", | ||
"Echemos una mirada a la seguridad en los computadores.", | ||
@@ -1140,7 +1152,8 @@ | ||
"Una de las formas en que se puede comprometer tu información es cuando los 'los chicos malos' encuentran huecos en las versiones viejas de los programas", | ||
"Estos defectos se corrigen en las versiones nuevas, por lo que evitarás problemas si mantienes el software actualizado.", | ||
"Estas son algunas cosas muy básicas que debes saber acerca de cómo proteger la información de tu computador." | ||
- ] | ||
+ ], | ||
+ "titleEs": "Seguridad en los computadores" | ||
} | ||
] | ||
} |
View
12
seed/challenges/04-video-challenges/dom.json
@@ -30,7 +30,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "El DOM: ¿Qué es el Modelo de objetos del documento?", | ||
"descriptionEs": [ | ||
"El DOM es la representación interna y programática de una página web del navegador. Lenguajes como javascript te permiten modificar el DOM, y por lo tanto el sitio web, sin editar el código HTML de la página.", | ||
"Técnicamente, el DOM es un API (interfaz de programación de aplicaciones). Hay varios tipos de APIs, pero este API en particular interactúa con documentos XML y HTML. Está a cargo de cómo se accesan y se manipulan esos documentos.", | ||
@@ -38,7 +37,8 @@ | ||
"Puedes insertar nuevos elementos, o cambiar el estilo o contenido de los elementos previamente existentes.", | ||
"Esto se puede hacer con javascript puro, como: document.getElementById(id), element.getElementsByTagName(name), o document.createElement(name).", | ||
"También puedes usar librerías como jQuery para simplificar, estandarizar y automatizar la manipulación del DOM, como por ejemplo: $('#caja2').append('Esto se agregará a caja2!')" | ||
- ] | ||
+ ], | ||
+ "titleEs": "El DOM: ¿Qué es el Modelo de objetos del documento?" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31518e", | ||
@@ -48,7 +48,7 @@ | ||
"If you've ever seen a webpage that loads the text first, then after a bit loads the formatting and style, you've seen a page that didn't have the links to style and script in the correct places.", | ||
"This all has to do with how the browser decides it's loaded enough information to display. There's an event called 'DOMContentLoaded', and once that event happens, whatever is loaded will be displayed.", | ||
"The DOM will tell the browser it's ready once the HTML is loaded, and sometimes the CSS and JS hasn't caught up. However, if you place the CSS in the header and the JS in the footer, you can ensure that all content will be loaded before the DOM triggers the 'DOMContentLoaded' event, the event that shows the user your content.", | ||
- "This is a simple explanation, as most of these videos are. For more information, I really liked this resource: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/" | ||
+ "This is a simple explanation, as most of these videos are. For more information, I really liked this resource: <a href='http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload' target='_blank'>ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload</a>" | ||
], | ||
"challengeSeed": [ | ||
"139879984" | ||
@@ -66,14 +66,14 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "El DOM: Estilo en el encabezado, código al pie de página", | ||
"descriptionEs": [ | ||
"Creo que ya te habrán dicho que los enlaces a código de estilo (CSS) deben ser incluidos en el encabezado (<code>header</code>) y que los enlaces al código (JS) deben estar incluidos al pie de página (<code>footer</code>). ¿Alguna vez te preguntaste por qué?", | ||
"Si alguna vez has visto una página web que carga el texto primero, y después de un momento carga el formato y el estilo, entonces era una página que no tenía los enlaces hacia el estilo y el código en los lugares correctos.", | ||
"Esto tiene que ver con la forma en que el navegador decide si ha cargado suficiente información para mostrar. Hay un evento llamado 'DOMContentLoaded', y una vez que ese evento ocurre, lo que sea que se haya cargado hasta entonces será mostrado.", | ||
"El DOM le dirá al navegador que está listo una vez que el código HTML ha sido cargado, y a veces el CSS y JS no se han alcanzado a cargar. Si pones el CSS en el encabezado y el JS al pie de página, puedes estar seguro que todo el contenido será cargado antes que el DOM desencadene el evento 'DOMContentLoaded', el cual muestra tu contenido al usuario.", | ||
- "Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload/" | ||
- ] | ||
+ "Esta es una explicación simplificada, al igual que la que encontrarás en el resto de estos videos. Si quieres más información, creo que el siguiente enlace es de bastante ayuda: <a href='http://ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload' target='_blank'>ablogaboutcode.com/2011/06/14/how-javascript-loading-works-domcontentloaded-and-onload</a>" | ||
+ ], | ||
+ "titleEs": "El DOM: Estilo en el encabezado, código al pie de página" | ||
} | ||
] | ||
} |
View
45
seed/challenges/04-video-challenges/jslingo.json
@@ -8,7 +8,7 @@ | ||
"title": "JavaScript Lingo: MDN and Documentation", | ||
"description": [ | ||
"This is a basic intro to MDN and the concept of documentation.", | ||
- "MDN, Mozilla Developer Network, is a fantastic open source collaboration that documents not only JavaScript, but many other languages and topics. If you haven't heard of them, you should check them out now. I get lots of information from developer.mozilla.org/en-US/docs/Web/JavaScript", | ||
+ "MDN, Mozilla Developer Network, is a fantastic open source collaboration that documents not only JavaScript, but many other languages and topics. If you haven't heard of them, you should check them out now. I get lots of information from <a href='http://developer.mozilla.org/en-US/docs/Web/JavaScript' target='_blank'>developer.mozilla.org/en-US/docs/Web/JavaScript</a>", | ||
"When I say documentation, I am talking about information that is provided about the product to its users. The documentation at MDN isn't necessarily written by the people behind JS. Brendan Eich created JS in 1995, but it's now a community driven project that continues to grow.", | ||
"As you continue to learn JavaScript, jQuery, and pretty much any languages or services for development or programming, documentation is your friend. ", | ||
"The faster you get comfortable reading and referencing documentation, the faster you will grow as a developer.", | ||
@@ -30,15 +30,15 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: MDN y Documentación", | ||
"descriptionEs": [ | ||
"Esta es una introducción básica a MDN y el concepto de la documentación.", | ||
- "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de developer.mozilla.org/en-US/docs/Web/JavaScript ", | ||
+ "MDN, Mozilla Developer Network, es una fantástica colaboración de fuentes abiertas que documenta no sólo JavaScript, sino muchos otros lenguajes y temas. Si no has oído hablar de ellos, deberías darles un vistazo ahora. Personalmente obtengo mucha información de <a href='http://developer.mozilla.org/es/docs/Web/JavaScript' target='_blank'>developer.mozilla.org/es/docs/Web/JavaScript</a>", | ||
"Cuando digo documentación, estoy hablando acerca de la información que se proporciona sobre el producto a sus usuarios. La documentación de MDN no necesariamente está escrita por la gente detrás de JS. Brendan Eich creó JS en 1995, pero hoy en día el proyecto continúa creciendo gracias a un esfuerzo comunitario. ", | ||
"A medida que continúes aprendiendo JavaScript, jQuery, y prácticamente cualquier otro lenguaje o servicio para desarrollo o programación, la documentación será tu amiga.", | ||
"Cuanto más rápido te sientas cómodo leyendo y referenciando documentación, más rápido crecerás como desarrollador.", | ||
"Estos vídeos no van a enseñarte JavaScript - te presentan términos y conceptos que serán valiosos a medida que continúes practicando y aprendiendo." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: MDN y Documentación" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31518d", | ||
@@ -65,13 +65,13 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Tipos de valores", | ||
"descriptionEs": [ | ||
"Aprende sobre los tres tipos más básicos de valores: Booleanos, cadenas y números", | ||
"Un booleano es un valor <code>true</code> (verdadero) o <code>false</code> (falso). Estas palabras son especiales y reservadas. No puedes nombrar a una variable como \"true\", porque esa palabra es ya universal como un valor lógico (así como lo es \"false\"). ", | ||
"Una cadena es un conjunto de caracteres que se establecen entre apóstrofes (') o entre comillas (\"). Una cadena puede ser \"true\", siempre y cuando sea con comillas o con apóstrofes. ", | ||
"Los números se explican por sí mismos - un número es un valor que se compone sólo de dígitos, aunque también puede contener un decimal o un signo negativo." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Tipos de valores" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31518b", | ||
@@ -101,7 +101,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Variables y capitalizaciónCamello", | ||
"descriptionEs": [ | ||
"Vamos a cubrir lo que constituye una variable, y el razonamiento detrás de la capitalizaciónCamello (<em>camelCase</em>).", | ||
"Una variable, también conocida como una 'var', es el nombre o el espacio para un booleano, una cadena, un número, u otra pieza de información estática.", | ||
@@ -109,7 +108,8 @@ | ||
"Tu 'declaras' variables por primera vez con <code>var</code> en frente de ella, pero después puedes referenciarla más adelante en tu programa.", | ||
"capitalizaciónCamello es una forma en la que juntas varias palabras y aún así las mantienes legibles. La primera letra de la primera palabra va en minúsculas al igual que el resto de la primera palabra, pero la primera letra de cada palabra que siga se escribe en mayúsculas. No hay espacios. Ejemplos: brianaAmaSusMascotas, laMejorComidaEsElQueso, y valeLaPenaAprenderProgramacion.", | ||
"Al asignar un nombre de variable, usa capitalizaciónCamello. Además, trata de mantener los nombres descriptivos y cortos para que los demás (¡e incluso tu!) puedan entender a lo que se refiere la variable simplemente por el nombre." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Variables y capitalizaciónCamello" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f31518a", | ||
@@ -138,7 +138,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Vectores y objetos", | ||
"descriptionEs": [ | ||
"Si desea almacenar más de una pieza de información en una variable, puedes hacerlo mediante la creación de un vector o de un objeto.", | ||
"** Exención de responsabilidad: Los objetos de JS no son exactamente lo mismo que los objetos en otros lenguajes. Vamos a discutir aquí objetos con respecto a JS. ", | ||
@@ -146,7 +145,8 @@ | ||
"Los objetos son un tipo de datos que pueden verse o comportarse como un vector, en la medida que se trata de más valores almacenados en una variable de una manera organizada. Oirás que un objeto se puede representar en JSON, y con frecuencia cuando haces llamadas a la API de algunos sitios (para obtener información que necesitas mostrar en tu propia página) está será devuelta en JSON. ", | ||
"Un ejemplo de la notación de objetos es: <code>var obj = { 'nombre': 'Briana', 'comida': 'queso', 'perro': 'Maurice'};</code>", | ||
"Fíjate que un objeto se encierra entre llaves { ... }, que los diferentes atributos se separan por comas, que cada atributo consta de una palabra llave y de un valor. Por ejemplo son llaves 'nombre', 'comida' y 'perro' y sus respectivos valores son 'Briana', 'queso' y 'Maurice'. En este ejmplo todos los valores fueron cadenas, aunque también son válidos booleanos, números y otros tipos de datos." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Vectores y objetos" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315189", | ||
@@ -173,12 +173,12 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Encontrando e indexando valores en vectores", | ||
"descriptionEs": [ | ||
"Hay muchas razones por las que puedes necesitar acceder a una determinada pieza de información al interior de un conjunto más amplio, lo cual haces referenciando su índice.", | ||
"No vamos a entrar en la sintaxis, pero debes saber que el primer elemento en un vector tiene en realidad el índice 0.", | ||
"Esto también aplica para cadenas y objetos. Todos estos índices comienzan en 0, por lo que si en tu programa usas <code>miVector[2]</code>, realmente vas a obtener la tercera pieza de información del vector <code>miVector</code>." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Encontrando e indexando valores en vectores" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315188", | ||
@@ -186,7 +186,7 @@ | ||
"description": [ | ||
"Methods and functions are ways you can manipulate variables or other sets of information.", | ||
"Methods are built in to JavaScript, and you will become more familiar with these as you write functions for the bonfires.", | ||
- "I'd suggest looking through the MDN (Mozilla Developer Network that we discussed in the first video) to familiarize yourself with the sheer amount and general potential for the methods that exist. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index", | ||
+ "I'd suggest looking through the MDN (Mozilla Developer Network that we discussed in the first video) to familiarize yourself with the sheer amount and general potential for the methods that exist. <a href='http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index' target='_blank'>developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index</a>", | ||
"Examples include '.split(' ')', which will turn a string into an array and can do so in many different ways. Methods are powerful - many times when you want your script to do something, there's a method for that.", | ||
"Functions, like variables, are something you define and create.", | ||
"During your algorithm practice at Free Code Camp, you will create functions that take a certain piece of information and manipulate it in whatever way you choose.", | ||
@@ -208,16 +208,16 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Manipulación de los datos", | ||
"descriptionEs": [ | ||
"Métodos y funciones son formas con las que puedes modificar variables u otros conjuntos de información.", | ||
"Los métodos están integrados en JavaScript, y te familiarizarás con estos cuando realices los desafíos sobre algoritmos.", | ||
- "Me gustaría sugerirte dar un vistazo a MDN (Mozilla Developer Network que discutimos en el primer video) para que te familiarices con la cantidad y el potencial general de los métodos que existen. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Methods_Index", | ||
+ "Me gustaría sugerirte dar un vistazo a MDN (Mozilla Developer Network que discutimos en el primer video) para que te familiarices con la cantidad y el potencial general de los métodos que existen. <a href='http://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Methods_Index' target='_blank'>developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Methods_Index</a>", | ||
"Los ejemplos incluyen <code>.split (' ')</code>, que convertirá una cadena en un vector y puede hacerlo de muchas maneras diferentes. Los métodos son de gran alcance - muchas veces cuando quieres que tu programa haga algo, ya habrá un método para eso.", | ||
"Las funciones, al igual que las variables, son algo que tu defines y creas.", | ||
"Durante tu práctica con algoritmos en FreeCodeCamp, vas a crear funciones que reciben una determinada pieza de información y la manipulan de la forma que elijas.", | ||
"Vas a estar más familiarizado con la sintaxis, pero por ahora, sólo recuerda que con los métodos y funciones puedes hacer casi cualquier cosa con tu código." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Manipulación de los datos" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315187", | ||
@@ -247,7 +247,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Matemáticas", | ||
"descriptionEs": [ | ||
"Hay un objeto estático de nombre 'Math' en JS con muchos propiedades y métodos incluidos.", | ||
"Vas a querer investigar más de este cuando manipules números. Consulta la documentación de MDN antes de escribir tus propias funciones, pues ya podrían estar definidas allí. ", | ||
@@ -256,7 +255,8 @@ | ||
"Cuando trabajes con números, también debes estar consciente de que JS tiene un atributo interesante llamado 'formato de coma flotante'.", | ||
"Dependiendo de la cantidad de números, su tamaño y la cantidad de cálculos, JS puede devolver un número que es inexacto en 0,00004.", | ||
"Hay maneras de evitar esto, y en general no plantean problemas, pero es algo que debes tener en cuenta si te encuentras con algunos problemas que parecen no tienen sentido." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Matemáticas" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315186", | ||
@@ -283,12 +283,12 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "nameEs": "JavaScript Lingo: Ciclos", | ||
"descriptionEs": [ | ||
"Si hay un conjunto de valores (vamos a utilizar un vector en este ejemplo, pero no tiene que ser así) y deseas realizar la misma operación a cada valor del conjunto, puedes usar algo llamado ciclo. ", | ||
"Los ciclos tienen una sintaxis compleja a la que inicialmente es difícil acostumbrarse, pero una vez que la entiendas, son de gran utilidad. Yo usé ciclos en muchas de mis soluciones. ", | ||
"No es necesario que entiendas todo aquí - sólo que sepas que existen ciclos cuando necesitas recorrer un conjunto de datos y que pueden reducir la cantidad de código que debes escribir." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: Ciclos" | ||
}, | ||
{ | ||
"id": "56b15f15632298c12f315185", | ||
@@ -318,8 +318,6 @@ | ||
], | ||
"type": "hike", | ||
"challengeType": 6, | ||
- "id": "56b15f15632298c12f315185", | ||
- "nameEs": "JavaScript Lingo: expresiones regulares (RegExp)", | ||
"descriptionEs": [ | ||
"Las RegExp no siguen el formato del resto de JS, y pueden requerir una curva de aprendizaje.", | ||
"Las epresiones regulares (abreviado <em>RegExp</em>) también pueden ser una herramienta muy útil y eficiente.", | ||
@@ -328,7 +326,8 @@ | ||
"Si quisieras crear una página de registro que verifique las contraseñas para que contengan al menos un número y una letra mayúscula, puedes usar expresiones regulares.", | ||
"Si quieres asegurarte de que las fechas introducidas en una página sean todas fechas válidas en el futuro, puedes usar RegExp.", | ||
"Si bien hay infinitas maneras de utilizar RegExp, muchas de estas incluyen validaciones o ediciones automáticas de información." | ||
- ] | ||
+ ], | ||
+ "titleEs": "JavaScript Lingo: expresiones regulares (RegExp)" | ||
} | ||
] | ||
} |
View
3
server/boot/challenge.js
@@ -515,7 +515,8 @@ module.exports = function(app) { | ||
} | ||
var view = challengeView[data.challengeType]; | ||
if (data.id) { | ||
- res.cookie('currentChallengeId', data.id); | ||
+ res.cookie('currentChallengeId', data.id, { | ||
+ expires: new Date(2147483647000)}); | ||
} | ||
return res.render(view, data); | ||
}, | ||
View
56
server/boot/randomAPIs.js
@@ -26,7 +26,9 @@ module.exports = function(app) { | ||
router.get('/pmi-acp-agile-project-managers-form', agileProjectManagersForm); | ||
router.get('/nonprofits', nonprofits); | ||
router.get('/nonprofits-form', nonprofitsForm); | ||
- router.get('/unsubscribe/:email', unsubscribe); | ||
+ router.get('/unsubscribe/:email', unsubscribeMonthly); | ||
+ router.get('/unsubscribe-notifications/:email', unsubscribeNotifications); | ||
+ router.get('/unsubscribe-quincy/:email', unsubscribeQuincy); | ||
router.get('/unsubscribed', unsubscribed); | ||
router.get('/get-started', getStarted); | ||
router.get('/submit-cat-photo', submitCatPhoto); | ||
@@ -38,6 +40,7 @@ module.exports = function(app) { | ||
router.get('/all-stories', showAllTestimonials); | ||
router.get('/terms', terms); | ||
router.get('/privacy', privacy); | ||
+ router.get('/how-nonprofit-projects-work', howNonprofitProjectsWork); | ||
router.get('/code-of-conduct', codeOfConduct); | ||
router.get('/academic-honesty', academicHonesty); | ||
@@ -183,6 +186,12 @@ module.exports = function(app) { | ||
}); | ||
} | ||
+ function howNonprofitProjectsWork(req, res) { | ||
+ res.render('resources/how-nonprofit-projects-work', { | ||
+ title: 'How our nonprofit projects work' | ||
+ }); | ||
+ } | ||
+ | ||
function codeOfConduct(req, res) { | ||
res.render('resources/code-of-conduct', { | ||
title: 'Code of Conduct' | ||
@@ -279,18 +288,45 @@ module.exports = function(app) { | ||
res.redirect('https://twitch.tv/freecodecamp'); | ||
} | ||
- function unsubscribe(req, res, next) { | ||
- User.findOne({ where: { email: req.params.email } }, function(err, user) { | ||
- if (user) { | ||
+ function unsubscribeMonthly(req, res, next) { | ||
+ req.checkParams('email', 'Must send a valid email').isEmail(); | ||
+ return User.findOne({ where: { email: req.params.email } }, (err, user) => { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute('sendMonthlyEmail', false, (err) => { | ||
if (err) { return next(err); } | ||
- user.sendMonthlyEmail = false; | ||
- return user.save(function() { | ||
- if (err) { return next(err); } | ||
- return res.redirect('/unsubscribed'); | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
}); | ||
- } else { | ||
return res.redirect('/unsubscribed'); | ||
- } | ||
+ }); | ||
+ }); | ||
+ } | ||
+ | ||
+ function unsubscribeNotifications(req, res, next) { | ||
+ req.checkParams('email', 'Must send a valid email').isEmail(); | ||
+ return User.findOne({ where: { email: req.params.email } }, (err, user) => { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute('sendNotificationEmail', false, (err) => { | ||
+ if (err) { return next(err); } | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
+ }); | ||
+ return res.redirect('/unsubscribed'); | ||
+ }); | ||
+ }); | ||
+ } | ||
+ | ||
+ function unsubscribeQuincy(req, res, next) { | ||
+ req.checkParams('email', 'Must send a valid email').isEmail(); | ||
+ return User.findOne({ where: { email: req.params.email } }, (err, user) => { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute('sendQuincyEmail', false, (err) => { | ||
+ if (err) { return next(err); } | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
+ }); | ||
+ return res.redirect('/unsubscribed'); | ||
+ }); | ||
}); | ||
} | ||
View
103
server/boot/user.js
@@ -153,6 +153,21 @@ module.exports = function(app) { | ||
sendNonUserToMap, | ||
toggleLockdownMode | ||
); | ||
+ router.get( | ||
+ '/toggle-announcement-email-mode', | ||
+ sendNonUserToMap, | ||
+ toggleReceivesAnnouncementEmails | ||
+ ); | ||
+ router.get( | ||
+ '/toggle-notification-email-mode', | ||
+ sendNonUserToMap, | ||
+ toggleReceivesNotificationEmails | ||
+ ); | ||
+ router.get( | ||
+ '/toggle-quincy-email-mode', | ||
+ sendNonUserToMap, | ||
+ toggleReceivesQuincyEmails | ||
+ ); | ||
router.post( | ||
'/account/delete', | ||
ifNoUser401, | ||
@@ -163,6 +178,11 @@ module.exports = function(app) { | ||
sendNonUserToMap, | ||
getAccount | ||
); | ||
+ router.get( | ||
+ '/settings', | ||
+ sendNonUserToMap, | ||
+ getSettings | ||
+ ); | ||
router.get('/vote1', vote1); | ||
router.get('/vote2', vote2); | ||
@@ -228,6 +248,12 @@ module.exports = function(app) { | ||
return res.redirect('/' + username); | ||
} | ||
+ function getSettings(req, res) { | ||
+ res.render('account/settings', { | ||
+ title: 'Settings' | ||
+ }); | ||
+ } | ||
+ | ||
function returnUser(req, res, next) { | ||
const username = req.params.username.toLowerCase(); | ||
const { user, path } = req; | ||
@@ -326,7 +352,7 @@ module.exports = function(app) { | ||
user => { | ||
if (!user) { | ||
req.flash('errors', { | ||
- msg: `We couldn't find the user with the username ${username}` | ||
+ msg: `We couldn't find a user with the username ${username}` | ||
}); | ||
return res.redirect('/'); | ||
} | ||
@@ -394,33 +420,62 @@ module.exports = function(app) { | ||
} | ||
function toggleLockdownMode(req, res, next) { | ||
- if (req.user.isLocked === true) { | ||
- req.user.isLocked = false; | ||
- return req.user.save(function(err) { | ||
+ return User.findById(req.accessToken.userId, function(err, user) { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute('isLocked', !user.isLocked, function(err) { | ||
if (err) { return next(err); } | ||
- | ||
- req.flash('success', { | ||
- msg: dedent` | ||
- Other people can now view all your challenge solutions. | ||
- You can change this back at any time in the "Manage My Account" | ||
- section at the bottom of this page. | ||
- ` | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Privacy preferences.' | ||
}); | ||
- return res.redirect('/' + req.user.username); | ||
+ return res.redirect('/settings'); | ||
}); | ||
- } | ||
- req.user.isLocked = true; | ||
- return req.user.save(function(err) { | ||
+ }); | ||
+ } | ||
+ | ||
+ function toggleReceivesAnnouncementEmails(req, res, next) { | ||
+ return User.findById(req.accessToken.userId, function(err, user) { | ||
if (err) { return next(err); } | ||
+ return user.updateAttribute( | ||
+ 'sendMonthlyEmail', | ||
+ !user.sendMonthlyEmail, | ||
+ (err) => { | ||
+ if (err) { return next(err); } | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
+ }); | ||
+ return res.redirect('/settings'); | ||
+ }); | ||
+ }); | ||
+ } | ||
- req.flash('success', { | ||
- msg: dedent` | ||
- All your challenge solutions are now hidden from other people. | ||
- You can change this back at any time in the "Manage My Account" | ||
- section at the bottom of this page. | ||
- ` | ||
+ function toggleReceivesQuincyEmails(req, res, next) { | ||
+ return User.findById(req.accessToken.userId, function(err, user) { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute('sendQuincyEmail', !user.sendQuincyEmail, | ||
+ (err) => { | ||
+ if (err) { return next(err); } | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
+ }); | ||
+ return res.redirect('/settings'); | ||
+ } | ||
+ ); | ||
+ }); | ||
+ } | ||
+ | ||
+ function toggleReceivesNotificationEmails(req, res, next) { | ||
+ return User.findById(req.accessToken.userId, function(err, user) { | ||
+ if (err) { return next(err); } | ||
+ return user.updateAttribute( | ||
+ 'sendNotificationEmail', | ||
+ !user.sendNotificationEmail, | ||
+ function(err) { | ||
+ if (err) { return next(err); } | ||
+ req.flash('info', { | ||
+ msg: 'We\'ve successfully updated your Email preferences.' | ||
+ }); | ||
+ return res.redirect('/settings'); | ||
}); | ||
- return res.redirect('/' + req.user.username); | ||
}); | ||
} | ||
@@ -428,7 +483,7 @@ module.exports = function(app) { | ||
User.destroyById(req.user.id, function(err) { | ||
if (err) { return next(err); } | ||
req.logout(); | ||
- req.flash('info', { msg: 'Your account has been deleted.' }); | ||
+ req.flash('info', { msg: 'You\'ve successfully deleted your account.' }); | ||
return res.redirect('/'); | ||
}); | ||
} | ||
@@ -459,7 +514,7 @@ module.exports = function(app) { | ||
if (err) { return next(err); } | ||
debug('password reset processed successfully'); | ||
- req.flash('info', { msg: 'password reset processed successfully' }); | ||
+ req.flash('info', { msg: 'You\'ve successfully reset your password.' }); | ||
return res.redirect('/'); | ||
}); | ||
}); | ||
View
10
server/resources/labs.json
@@ -4,7 +4,7 @@ | ||
"name": "Clementine.js", | ||
"url": "http://johnstonbl01.github.io/clementinejs/", | ||
"description": "The elegant and lightweight boilerplate for full stack JavaScript.", | ||
- "image": "http://i.imgur.com/ib1wOho.png" | ||
+ "image": "//i.imgur.com/ib1wOho.png" | ||
}, | ||
{ | ||
"camper": "adventurebear", | ||
@@ -18,7 +18,7 @@ | ||
"name": "Skill.bar", | ||
"url": "http://www.skill.bar", | ||
"description": "Learn. Gain points. Visualize your skills.", | ||
- "image": "http://i.imgur.com/URkqqb5.png" | ||
+ "image": "//i.imgur.com/URkqqb5.png" | ||
}, | ||
{ | ||
"camper": "ericdouglas", | ||
@@ -32,7 +32,7 @@ | ||
"name": "Musare", | ||
"url": "http://musare.com/", | ||
"description": "Musare is a modern, collaborative, open-source Music App.", | ||
- "image": "http://i.imgur.com/Y4D4MPL.png" | ||
+ "image": "//i.imgur.com/Y4D4MPL.png" | ||
}, | ||
{ | ||
"camper": "bighitbiker3", | ||
@@ -46,7 +46,7 @@ | ||
"name": "Free Code Camp Event Zipline: Recipe Box", | ||
"url": "http://codepen.io/GeoffStorbeck/full/bVKyzd/", | ||
"description": "Try to reverse engineer this Recipe Box as an optional Zipline challenge.", | ||
- "image": "http://i.imgur.com/5o0bwVQ.png" | ||
+ "image": "//i.imgur.com/5o0bwVQ.png" | ||
}, | ||
{ | ||
"camper": "akiralaine", | ||
@@ -60,6 +60,6 @@ | ||
"name": "Free Code Camp Top 100 Campers", | ||
"url": "http://fcctop100.herokuapp.com/", | ||
"description": "This leaderboard tracks the campers who have been most active (completing challenges, helping other campers) in the past 30 days.", | ||
- "image": "http://i.imgur.com/4CrQfFi.png" | ||
+ "image": "//i.imgur.com/4CrQfFi.png" | ||
} | ||
] |
View
160
server/resources/testimonials.json
@@ -4,497 +4,497 @@ | ||
"quote": "By building a robust and highly functional web app I was able to not only increase my confidence but was able to show potential employers what I was able to create. Both were huge for me and led me to getting a fantastic job.", | ||
"github": "MetaCoderHirschl", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=ADEAAAKX2fEBfeZ1GVdOh-c0zzkYZKw38o8qzow", | ||
- "image": "http://i.imgur.com/nsvNixW.jpg" | ||
+ "image": "//i.imgur.com/nsvNixW.jpg" | ||
}, | ||
{ | ||
"camper": "Branden Byers", | ||
"quote": "My goal was to become employed by the end of 2015. Instead, I ended up with a job at the beginning of 2015. This was directly related to my work at Free Code Camp.", | ||
"github": "brandenbyers", | ||
"linkedin": "https://www.linkedin.com/in/brandenbyers", | ||
- "image": "http://i.imgur.com/NbzknHq.jpg" | ||
+ "image": "//i.imgur.com/NbzknHq.jpg" | ||
}, | ||
{ | ||
"camper": "Bruna Torman Reseres Franasa", | ||
"quote": "I’m now receiving offers for internships. I have no experience in IT, but now good things are happening!", | ||
"github": "brunatrf", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABVPh9IB730qyshrsqO1hDNNRUL-X_4i8n0", | ||
- "image": "http://i.imgur.com/TqxHSNY.jpg" | ||
+ "image": "//i.imgur.com/TqxHSNY.jpg" | ||
}, | ||
{ | ||
"camper": "Maxim Orlov", | ||
"quote": "I started Free Code Camp with zero knowledge of web development. 6 months later, I landed my first job as a back end engineer.", | ||
"github": "Maximization", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAo83nwBF57LpD9mZlm5dH6OcovOpYKPs3k", | ||
- "image": "http://i.imgur.com/wjlDigg.jpg" | ||
+ "image": "//i.imgur.com/wjlDigg.jpg" | ||
}, | ||
{ | ||
"camper": "Alexander Black, Jr.", | ||
"quote": "My work on a nonprofit project gave me the opportunity to learn how to build Chrome extensions and showcase my skills as a full-stack developer.", | ||
"github": "alexblackjr", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA553L4BgfgBR-M9RQc7x5matd6FUx3a6-I", | ||
- "image": "http://i.imgur.com/iHC6ZI4.jpg" | ||
+ "image": "//i.imgur.com/iHC6ZI4.jpg" | ||
}, | ||
{ | ||
"camper": "Cristiane Henriques", | ||
"quote": "I am getting more work contacts after including Free Code Camp on my CV and my LinkedIn.", | ||
"github": "CrisHenriques", | ||
"linkedin": "https://www.linkedin.com/in/crishenriques", | ||
- "image": "http://i.imgur.com/T6iTQHs.jpg" | ||
+ "image": "//i.imgur.com/T6iTQHs.jpg" | ||
}, | ||
{ | ||
"camper": "Viktor Bakurin", | ||
"quote": "During my work on Free Code Camp's nonprofit projects, I found a MEAN stack position outside of my home country. Now I work in Budapest.", | ||
"github": "letalumil", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAq6G3QBA1DIwFZGrS4DGqDzBDTzFjrbNQo", | ||
- "image": "http://i.imgur.com/fvUAWlx.jpg" | ||
+ "image": "//i.imgur.com/fvUAWlx.jpg" | ||
}, | ||
{ | ||
"camper": "Ashley Drake", | ||
"quote": "Free Code Camp helped me get my first engineering job. This amazing community made my career switch a lot easier and more fun.", | ||
"github": "aldraco", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABcdBycB1iVHvcW7N3yVK-18ES7Nrxx2jbE", | ||
- "image": "http://i.imgur.com/xzDoJef.jpg" | ||
+ "image": "//i.imgur.com/xzDoJef.jpg" | ||
}, | ||
{ | ||
"camper": "Brian Grant", | ||
"quote": "Free Code Camp's a great way for disabled veterans like me to retrain. I'm receiving engineering job offers, and I haven't even finished yet.", | ||
"github": "codeseekingman", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEUqXoBFOq1SWQrBsTMHG4ij9Ss4Qqnrtg", | ||
- "image": "http://i.imgur.com/QPpjPac.jpg" | ||
+ "image": "//i.imgur.com/QPpjPac.jpg" | ||
}, | ||
{ | ||
"camper": "Thomas Joseph Izen", | ||
"quote": "After spending lots of time trying different sites that aim to teach people how to code, FreeCodeCamp has been different from the beginning. They provide the best and most organized track for anyone at any level to learn how to code and build an amazing, marketable portfolio.", | ||
"github": "TommyIzen", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA79qIYB_RHmvOP59S6VPK3Lm06oG8fM6dw", | ||
- "image": "http://i.imgur.com/RkO2ISf.jpg" | ||
+ "image": "//i.imgur.com/RkO2ISf.jpg" | ||
}, | ||
{ | ||
"camper": "Lori Becker", | ||
"quote": "After graduating with a Masters degree in computer science, I could not share any of my code with employers (university policy: fear of aiding cheating). With FreeCodeCamp, I was able to develop a small portfolio.", | ||
"github": "LCBecker", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAADrtuwBOA_0ihkKIbUFXoXskXikQT9uVeo", | ||
- "image": "http://i.imgur.com/J1cbqDQ.jpg" | ||
+ "image": "//i.imgur.com/J1cbqDQ.jpg" | ||
}, | ||
{ | ||
"camper": "Robert Trammel", | ||
"quote": "I'm working a job integrating JavaScript into FileMaker and doing some custom web publishing for a school district. I've also have job offers from Apple and a few technology firms around the country. If it wasn't for Free Code Camp, I'd still be in the dark with some really awesome but irrelevant skills.", | ||
"github": "comajama", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAIAABQsM30BEAI6xyAhk-OqbBNUJL0WD2uA3GE", | ||
- "image": "http://i.imgur.com/E9YdQIn.jpg" | ||
+ "image": "//i.imgur.com/E9YdQIn.jpg" | ||
}, | ||
{ | ||
"camper": "Brian Atkins", | ||
"quote": "I'm spending less time then I used to on Free Code Camp, because people have begun to hire me to work on their projects. Free Code Camp has provided me the foundation I have needed to get these jobs.", | ||
"github": "BrianAtk", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABtTx0BmDzmB7eDGOkAJbRw8RZdvysreso", | ||
- "image": "http://i.imgur.com/veN77Iw.jpg" | ||
+ "image": "//i.imgur.com/veN77Iw.jpg" | ||
}, | ||
{ | ||
"camper": "Andrea Goulet", | ||
"quote": "Before enrolling in Free Code Camp, I was nervous when people asked me, \"Do you code?\", Now, I answer with a confident \"YES!\"", | ||
"github": "andreagoulet", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAA4KWYB-mCMwEU3LvDHXt6H0rVHbBvszq0", | ||
- "image": "http://i.imgur.com/XWt7fXk.jpg" | ||
+ "image": "//i.imgur.com/XWt7fXk.jpg" | ||
}, | ||
{ | ||
"camper": "David McGill", | ||
"quote": "Even if you have a CS degree like I do, you still need projects to prove to employers that you care about coding. Free Code Camp provided me with a platform for doing this. It's all laid out for you - you just have step up and step into the map!", | ||
"github": "dmcgill50", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEBy74BHsJCpgrbohr2dJxbdXuvMuJDx6k", | ||
- "image": "http://i.imgur.com/ZVNPIYU.jpg" | ||
+ "image": "//i.imgur.com/ZVNPIYU.jpg" | ||
}, | ||
{ | ||
"camper": "Adam Recvlohe", | ||
"quote": "I had no previous development experience and I was working a full-time as an Instructional Designer. Free Code Camp helped me get hired as a JavaScript developer.", | ||
"github": "arecvlohe", | ||
"linkedin": "https://www.linkedin.com/in/adamrecvlohe", | ||
- "image": "http://i.imgur.com/oFxOlRG.jpg" | ||
+ "image": "//i.imgur.com/oFxOlRG.jpg" | ||
}, | ||
{ | ||
"camper": "John Ellis", | ||
"quote": "Free Code Camp has been one of the major contributors to my career in software development. I started as an apps analyst, spent 3 months going through the coursework in my off time and weekends, and just landed a job as a business systems developer.", | ||
"github": "johnmellis", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAbrISEBqAVYOBfhni9mB3YoFFzzrAbYvvo", | ||
- "image": "http://i.imgur.com/qLfaM9Y.jpg" | ||
+ "image": "//i.imgur.com/qLfaM9Y.jpg" | ||
}, | ||
{ | ||
"camper": "Rachel Krantz", | ||
"quote": "Free Code Camp gave me confidence that I could apply to software engineering jobs, because I knew I was capable of learning. That confidence convinced the hiring manager to hire me.", | ||
"github": "krantzinator", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOdv-oBnOGtQCoGooUB0xGJ4TWoAgV_z_E", | ||
- "image": "http://i.imgur.com/dqHrkkC.jpg" | ||
+ "image": "//i.imgur.com/dqHrkkC.jpg" | ||
}, | ||
{ | ||
"camper": "Alex Dixon", | ||
"quote": "I was hired by the owner of the company, a programmer with 25 years of experience in web development. I graduated from university with a degree in English and had no programming experience prior to attending FreeCodeCamp.", | ||
"github": "alex-dixon", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABhCmLMBLAR1AXskaJXDMT-uLPZ8M7TynPQ", | ||
- "image": "http://i.imgur.com/poiaanK.jpg" | ||
+ "image": "//i.imgur.com/poiaanK.jpg" | ||
}, | ||
{ | ||
"camper": "Ryan Lindeman", | ||
"quote": "Free Code Camp has been great in giving me a direct path to the full stack development skills I wanted to become more involved in projects at work.", | ||
"github": "fai1whale", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAkMT1EBFCY849rMWYSDIEj6kosBJSH9n2s", | ||
- "image": "http://i.imgur.com/jHOjcyN.jpg" | ||
+ "image": "//i.imgur.com/jHOjcyN.jpg" | ||
}, | ||
{ | ||
"camper": "Stephanie Brown", | ||
"quote": "Free Code Camp has given me structure and a direction while learning to code.", | ||
"github": "strawmitch", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAARqP5cBDDdBxPUzluctvjUhOP3UsiowRtM", | ||
- "image": "http://i.imgur.com/k5EEyNf.jpg" | ||
+ "image": "//i.imgur.com/k5EEyNf.jpg" | ||
}, | ||
{ | ||
"camper": "Jimson Sulit", | ||
"quote": "Aside from the fact that I’m learning full stack web development, Free Code Camp has also given me the opportunity to lead local community projects.", | ||
"github": "webdevjedi25", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAWqUccBopX2Wo_P1gYgy0iIEqChwXPTh2k", | ||
- "image": "http://i.imgur.com/DzMDPS5.jpg" | ||
+ "image": "//i.imgur.com/DzMDPS5.jpg" | ||
}, | ||
{ | ||
"camper": "Brian Emory", | ||
"quote": "I like to learn by doing but with the books, while very informative, there was more reading than doing. I came across Free Code Camp which has allowed me to learn by doing. Whereas before I was struggling to learn, I am now not only learning but learning while building cool projects.", | ||
"github": "thebrianemory", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABc3jXwB-iZdZKZIVAvL93RHGB7_J9gDbVA", | ||
- "image": "http://i.imgur.com/JcdSD9H.jpg" | ||
+ "image": "//i.imgur.com/JcdSD9H.jpg" | ||
}, | ||
{ | ||
"camper": "Ralph Cachero", | ||
"quote": "I am a software QA engineer. Free Code Camp has helped me understand what the developers go through.", | ||
"github": "rcachero", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAJEF88BiUtMoxS3Ww7ooI9QmTZdrgP272Q", | ||
- "image": "http://i.imgur.com/5umfPRq.jpg" | ||
+ "image": "//i.imgur.com/5umfPRq.jpg" | ||
}, | ||
{ | ||
"camper": "Ina Tsetsova", | ||
"quote": "Bonfires really make me think and combine programming concepts creatively.", | ||
"github": "Tsetsova", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjPoIcBJsAF91dqwgxFQ4qct88yFcljXNU", | ||
- "image": "http://i.imgur.com/9Ta15Ow.jpg" | ||
+ "image": "//i.imgur.com/9Ta15Ow.jpg" | ||
}, | ||
{ | ||
"camper": "Ryan Jones", | ||
"quote": "Learning to code with Free Code Camp has given me a leg up in my career. It has helped to train my brain to think with the logic that computers use. This is a tremendous aid in the field of digital forensics.", | ||
"github": "ryanmjones", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABPJt1MBxC4Yero3PJPhF9rrr_Y7WfOGcCU", | ||
- "image": "http://i.imgur.com/8cRU20S.jpg" | ||
+ "image": "//i.imgur.com/8cRU20S.jpg" | ||
}, | ||
{ | ||
"camper": "Sara Powell", | ||
"quote": "I’ve progressed from not coding very much at all, to coding well enough to land job interviews for front end development positions.", | ||
"github": "newtcobell", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAy1jmQBRjoGSUWd6Zib7FtekpSMBVHr7Vw", | ||
- "image": "http://i.imgur.com/4l4OBbR.jpg" | ||
+ "image": "//i.imgur.com/4l4OBbR.jpg" | ||
}, | ||
{ | ||
"camper": "Rhonadale Florentino", | ||
"quote": "I can now confidently tell clients that I can design their website.", | ||
"github": "None Given", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAI53oUBmy6MPKp1UeHxBy3_y0cyTS4bWow", | ||
- "image": "http://i.imgur.com/soEDnv6.jpg" | ||
+ "image": "//i.imgur.com/soEDnv6.jpg" | ||
}, | ||
{ | ||
"camper": "Justin Clay Lane", | ||
"quote": "Free Code Camp provided a structured learning experience more akin to an actual class, compared to other free learning sites. I was recently hired to update and maintain the website for a local doctor’s office. The extra money and experience from that is wonderful.", | ||
"github": "jclane", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAYZYQ4BBY337OqRUhMnZqDJNX1wNXjT7Bk", | ||
- "image": "http://i.imgur.com/COEPda5.jpg" | ||
+ "image": "//i.imgur.com/COEPda5.jpg" | ||
}, | ||
{ | ||
"camper": "Angshuman Gupta", | ||
"quote": "I’m a co-founder of a startup. We had been coding with PHP, but always wanted to shift to meteor.js. Free Code Camp gave me a structured JavaScript guide.", | ||
"github": "codingang", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAhIipMB6vAXaratEs0MtUd3GgyYm70cvbE", | ||
- "image": "http://i.imgur.com/7pwkFQ5.jpg" | ||
+ "image": "//i.imgur.com/7pwkFQ5.jpg" | ||
}, | ||
{ | ||
"camper": "Genavieve Clausen", | ||
"quote": "Free Code Camp has benefitted me in numerous ways, including the opportunity to learn in a self-paced, supportive environment. I am excited to be a part of a growing community making lasting connections for the career and lifestyle I am pursuing.", | ||
"github": "GenavieveMarie", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOISlMBAi43m1SG-xM_S2B8Vy05yiQz5rE", | ||
- "image": "http://i.imgur.com/vr7lTkx.jpg" | ||
+ "image": "//i.imgur.com/vr7lTkx.jpg" | ||
}, | ||
{ | ||
"camper": "Tim Stauffer", | ||
"quote": "I found Free Code Camp more helpful than my MS degree, so I quit college. Learning so much. Also saving $50,000.", | ||
"github": "timstauffer", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAADVcVIBz8UCNjQKl2GUy9ka8UGnQXAXAYw", | ||
- "image": "http://i.imgur.com/b8YCzf1.jpg" | ||
+ "image": "//i.imgur.com/b8YCzf1.jpg" | ||
}, | ||
{ | ||
"camper": "Marquina M Iliev-Piselli", | ||
"quote": "I’m re-designing a site for my full-time job.", | ||
"github": "Marquina", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAACYvVUBTuu8dNRHthN1TFiyk137PLDqnv4", | ||
- "image": "http://i.imgur.com/6Ep9hfs.jpg" | ||
+ "image": "//i.imgur.com/6Ep9hfs.jpg" | ||
}, | ||
{ | ||
"camper": "Pete Considine", | ||
"quote": "The guided and structured lessons have been really helpful, as has the relatively slow pace that new concepts are introduced. I had been taking a Udemy course and it really seemed to be skimming the surface of JavaScript in the interest of \"getting to everything.\"", | ||
"github": "Pjconsidine", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAAi8-8BxUVpoi_VuJQmeGWN5zhMBgbvPbs", | ||
- "image": "http://i.imgur.com/SkYRcDW.jpg" | ||
+ "image": "//i.imgur.com/SkYRcDW.jpg" | ||
}, | ||
{ | ||
"camper": "Khatra Ahmed", | ||
"quote": "I can learn to code with support by my side. Everyone is so helpful and it makes learning to code less of a struggle.", | ||
"github": "Mystfreak", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAbdUsIBApacWEmL7CIxe2q7aevMn7aQvmQ", | ||
- "image": "http://i.imgur.com/XguPEF7.jpg" | ||
+ "image": "//i.imgur.com/XguPEF7.jpg" | ||
}, | ||
{ | ||
"camper": "Marcus Lyons", | ||
"quote": "Free Code Camp has helped me gain the confidence to automate part of my work responsibilities. I was able to use skills I learned from Free Code Camp to help with writing a bash script to search through mobile app database log files to find errors.", | ||
"github": "auron1223", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA_1aLABo1pVJH9ijSqz8PvLgpzVYkIsjVc", | ||
- "image": "http://i.imgur.com/X5c77Ov.jpg" | ||
+ "image": "//i.imgur.com/X5c77Ov.jpg" | ||
}, | ||
{ | ||
"camper": "Reynald Emmanuel Endaya", | ||
"quote": "There is an active community (even in Manila) and it’s interactive, unlike all the MOOCs I tried before where I had to listen to somebody speak for a long time. I am learning a lot here and I have not yet lost my momentum.", | ||
"github": "None Given", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAUlm8oBQuXm_Y89_LDC9mb2vOjjQH_pZDo", | ||
- "image": "http://i.imgur.com/oA5CtWF.jpg" | ||
+ "image": "//i.imgur.com/oA5CtWF.jpg" | ||
}, | ||
{ | ||
"camper": "Victoria Kariolic", | ||
"quote": "I discovered a coding partner through the Free Code Camp groups who has been able to cover gaps for my client work.", | ||
"github": "Niaskywalk", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAEFmXMBlTFIR2j1G-vJhAMsUOPONILGrLM", | ||
- "image": "http://i.imgur.com/TiqbM1f.jpg" | ||
+ "image": "//i.imgur.com/TiqbM1f.jpg" | ||
}, | ||
{ | ||
"camper": "Cameron Eshgh", | ||
"quote": "Free Code Camp enables me as a digital marketer to dive right into whatever asset or content and fix things that haven’t been working, as well as roll up my sleeves when our web developers are not available.", | ||
"github": "eshghitude", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVdU1MBFFiei4ZYNImnVDcR3H_EiuS6qLY", | ||
- "image": "http://i.imgur.com/PEzJLCp.jpg" | ||
+ "image": "//i.imgur.com/PEzJLCp.jpg" | ||
}, | ||
{ | ||
"camper": "Devarsh Ruparelia", | ||
"quote": "Even though I am still just a high school student. The startup I intern for said that if I finish the full track of Free Code Camp, they will strongly consider me for their programming jobs. Thanks Free Code Camp!", | ||
"github": "devarsh1997", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAApxpP8BZBcHQzr6Ci3xmkkZX-OSH_oLuJs", | ||
- "image": "http://i.imgur.com/ouv1qUd.jpg" | ||
+ "image": "//i.imgur.com/ouv1qUd.jpg" | ||
}, | ||
{ | ||
"camper": "Miranda Bashore", | ||
"quote": "I want to be able to freelance and create dynamic websites. Free Code Camp makes that more of a reality for me, as I cannot afford an expensive bootcamp while getting my Master’s degree.", | ||
"github": "DutchBay", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA8KmJMBTtvvgJzjeAUo_YOssh2yLZZlvlk", | ||
- "image": "http://i.imgur.com/mJlUzOq.jpg" | ||
+ "image": "//i.imgur.com/mJlUzOq.jpg" | ||
}, | ||
{ | ||
"camper": "Christian Morera", | ||
"quote": "Free Code Camp has been a great experience. I’ve learned so many things. I am in the process of transitioning from content developer to full stack developer.", | ||
"github": "chrmorfeus", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAMc-tYBtYri0H1KHz1WNQjWxZ23jg0tMNU", | ||
- "image": "http://i.imgur.com/sfhBDHw.jpg" | ||
+ "image": "//i.imgur.com/sfhBDHw.jpg" | ||
}, | ||
{ | ||
"camper": "Jason Arnold", | ||
"quote": "I like self-paced learning, so Free Code Camp has been great. The challenges are difficult enough to push boundaries but not so tough to scare people off.", | ||
"github": "thejasonfile", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABlImsBwAEZ3u3A5NIlCegho8WZ2j4h0w0", | ||
- "image": "http://i.imgur.com/hqQ3nPA.jpg" | ||
+ "image": "//i.imgur.com/hqQ3nPA.jpg" | ||
}, | ||
{ | ||
"camper": "Kaveet Laxmidas", | ||
"quote": "Free Code Camp is inspiring me to overhaul some of my old open source projects using more modern approaches and technologies.", | ||
"github": "kaveet", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABZooOgBZJg_0MAJ09pd5vROk83oBFA1cEE", | ||
- "image": "http://i.imgur.com/1PadpKm.jpg" | ||
+ "image": "//i.imgur.com/1PadpKm.jpg" | ||
}, | ||
{ | ||
"camper": "Brett Guillory", | ||
"quote": "Free Code Camp has given me a great, goal oriented curriculum to learn exactly what I was looking for. And best of all it’s 100% free!", | ||
"github": "Kurzninja", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAUMPqMBa6GwMTkA_oHUeqnZzyD95FisjwM", | ||
- "image": "http://i.imgur.com/WjHNwIu.jpg" | ||
+ "image": "//i.imgur.com/WjHNwIu.jpg" | ||
}, | ||
{ | ||
"camper": "Kory J. Campbell", | ||
"quote": "I just graduated university, so my financial status is pretty meager, however this camp has definitely helped me improve my skills.", | ||
"github": "@koryjcampbell [sic]", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAtxvTgB0N_uJhW-87Dew4wHyeqLUP-XyZk", | ||
- "image": "http://i.imgur.com/buAYlTA.jpg" | ||
+ "image": "//i.imgur.com/buAYlTA.jpg" | ||
}, | ||
{ | ||
"camper": "Bryon Christopher Miller", | ||
"quote": "Free Code Camp has given me a free, online opportunity to study full stack JavaScript in a structured, community-based format. I am very grateful for this opportunity.", | ||
"github": "bryonmiller", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABEXhHoBxj3Uiq7I0a5v1pVkeJ1gWycbm90", | ||
- "image": "http://i.imgur.com/ssKAX9d.jpg" | ||
+ "image": "//i.imgur.com/ssKAX9d.jpg" | ||
}, | ||
{ | ||
"camper": "Darren Joy", | ||
"quote": "Great learning opportunity. Good coding challenges and I’m meeting some very motivated people.", | ||
"github": "Darrenfj", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAARv6UIBWeXw4ZfCJ70kBKgnhcv8XgnVsa8", | ||
- "image": "http://i.imgur.com/sCkeJ0z.jpg" | ||
+ "image": "//i.imgur.com/sCkeJ0z.jpg" | ||
}, | ||
{ | ||
"camper": "Stephen Mayeux", | ||
"quote": "Free Code Camp is helpful because it’s not 100% hand-holding, and it pushes me out of my comfort zone.", | ||
"github": "stephenmayeux", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjTe7cBhjovoz6zTE_M6MwZ_rr3szhiSOM", | ||
- "image": "http://i.imgur.com/TbuwAJ3.jpg" | ||
+ "image": "//i.imgur.com/TbuwAJ3.jpg" | ||
}, | ||
{ | ||
"camper": "John Hillegass", | ||
"quote": "Free Code Camp has given me the confidence that I need when heading into high level client meetings and developer scrum sessions.", | ||
"github": "Ohillio", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAWEO3AB51y8eR2tYF8nydQb8kANkdPwR5U", | ||
- "image": "http://i.imgur.com/P61e3dt.jpg" | ||
+ "image": "//i.imgur.com/P61e3dt.jpg" | ||
}, | ||
{ | ||
"camper": "Eric Hartline", | ||
"quote": "The community is very helpful, and I have already accomplished so much more than what I did with other self-guided courses.", | ||
"github": "wildlifehexagon", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAFitUwByB_tgxdExntMnakgQnTK1H3eEd8", | ||
- "image": "http://i.imgur.com/PgvxbY2.jpg" | ||
+ "image": "//i.imgur.com/PgvxbY2.jpg" | ||
}, | ||
{ | ||
"camper": "Danielle J Moss", | ||
"quote": "Aside from learning to code in a fun way, I also know I’m not alone and have somewhere to go when I do get stuck and need help.", | ||
"github": "psykobilliethekid", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAV4ccABlbMXZ5VfzvlYentPOIKzFbjgbZM", | ||
- "image": "http://i.imgur.com/AhaRZ3I.jpg" | ||
+ "image": "//i.imgur.com/AhaRZ3I.jpg" | ||
}, | ||
{ | ||
"camper": "Orcun Tonyali", | ||
"quote": "The thorough curriculum helped a lot in managing my company’s website.", | ||
"github": "orcuntonyali", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVwBQIBvE3-M8pDWxzep9umHDnV6JjKmTU", | ||
- "image": "http://i.imgur.com/54O0p69.jpg" | ||
+ "image": "//i.imgur.com/54O0p69.jpg" | ||
}, | ||
{ | ||
"camper": "Brendan Murphy", | ||
"quote": "I like that it isn’t just a 9 week course. The chat room and partner coding were also very helpful.", | ||
"github": "dendari", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAA06V8BqPNnPod-FGRuvifILht-QwZX3YY", | ||
- "image": "http://i.imgur.com/36Ba4HU.jpg" | ||
+ "image": "//i.imgur.com/36Ba4HU.jpg" | ||
}, | ||
{ | ||
"camper": "Michael Berry", | ||
"quote": "Free Code Camp has helped me learn JavaScript, jQuery, and Bootstrap as well as helped me brush up on my HTML and CSS skills. I was laid off from Boeing in April. I’m hoping to land a job as a JavaScript developer as I get closer to finishing the curriculum. I wish I had known about Free Code Camp sooner.", | ||
"github": "Karnblack ", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAGRqf4BwCI3cdJw9wAPc6NlReG3fzOIQq0", | ||
- "image": "http://i.imgur.com/rIhq3gl.jpg" | ||
+ "image": "//i.imgur.com/rIhq3gl.jpg" | ||
}, | ||
{ | ||
"camper": "Angie Canon", | ||
"quote": "Free Code Camp is helping my career. I work with developers and I’m beginning to understand their world better. I can phrase questions more clearly, and begin to guess what an issue might be related to.", | ||
"github": "angiecan", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAACfWbABAMsll9ovljvvsLpH317o47hNHX0", | ||
- "image": "http://i.imgur.com/v258ssn.jpg" | ||
+ "image": "//i.imgur.com/v258ssn.jpg" | ||
}, | ||
{ | ||
"camper": "Irfan Kucuk", | ||
"quote": "I’ve long been looking for a place that could keep me interested in learning how to code. I’ve tried several Codecademy and comparable places, but none have proven as engaging as Free Code Camp.", | ||
"github": "Ikucuk", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA5ripkBiFAjXkB3ndO6sKiiq6gD21mk6bw", | ||
- "image": "http://i.imgur.com/Ox8ycSi.jpg" | ||
+ "image": "//i.imgur.com/Ox8ycSi.jpg" | ||
}, | ||
{ | ||
"camper": "Jonathan Kvicky", | ||
"quote": "Free Code Camp has given me a strong foundational advantage into pursuing a career in software/web development, and has also served as a great platform for connecting with others who share the same passion for software engineering.", | ||
"github": "jonkvix", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABk3i9YB_hcw1AyVg2QHaf8KMQ8ADQ_R_vg", | ||
- "image": "http://i.imgur.com/CZsAqDK.jpg" | ||
+ "image": "//i.imgur.com/CZsAqDK.jpg" | ||
}, | ||
{ | ||
"camper": "Susannah Skyer Gupta", | ||
"quote": "As a jack-of-all-trades at a small educational software company, I’m already putting my coding skills to work, beginning to submit my own pull requests for bug fixes instead of just opening a problem ticket and waiting for someone else to fix it.", | ||
"github": "SuzGupta", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAFIosEBLewkmbuudMwAqiTM5YE3wHvcE4A", | ||
- "image": "http://i.imgur.com/sazGykY.jpg" | ||
+ "image": "//i.imgur.com/sazGykY.jpg" | ||
}, | ||
{ | ||
"camper": "Puneet Shivanand", | ||
"quote": "Free Code Camp has helped me create and maintain a website for a local bioinformatics conference.", | ||
"github": "puneet-shivanand", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAArBgXABw4qoSJQoGjqrvU6_vBX1gUmcwGg", | ||
- "image": "http://i.imgur.com/5BJDA16.jpg" | ||
+ "image": "//i.imgur.com/5BJDA16.jpg" | ||
}, | ||
{ | ||
"camper": "Ian Seabrook", | ||
"quote": "I’ve made connections with people I never would have approached before Free Code Camp.", | ||
"github": "ianseabrook", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAuVUi4BSJ3K6fcyTa2fnZr_9Oosb3nKM34", | ||
- "image": "http://i.imgur.com/z17zai3.jpg" | ||
+ "image": "//i.imgur.com/z17zai3.jpg" | ||
}, | ||
{ | ||
"camper": "Oleh Kuchuk", | ||
"quote": "The coding exercises helped me to prepare for my first job interview.", | ||
"github": "drkraken", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABgy6MwBva2OKpsffAU-OBBeTC7qahTYpGw", | ||
- "image": "http://i.imgur.com/4KHGgjR.jpg" | ||
+ "image": "//i.imgur.com/4KHGgjR.jpg" | ||
}, | ||
{ | ||
"camper": "Larisa Bekerman", | ||
"quote": "Free Code Camp has made me more comfortable with certain aspects of code and helped me review and understand concepts in a more hands-on style. Some people learn by reading theory, I don’t understand things until I’ve made them work myself!", | ||
"github": "xaosqueen", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAB-SHUBga96BB-iaHe7QFI-S2dFmeUQaq0", | ||
- "image": "http://i.imgur.com/EptT3Yl.jpg" | ||
+ "image": "//i.imgur.com/EptT3Yl.jpg" | ||
}, | ||
{ | ||
"camper": "Jesse Mull", | ||
"quote": "I learned more using Free Code Camp in three months than I ever could have at a traditional university.", | ||
"github": "jessemull", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAr2HfcBswHtmQeLM1rxDEg7GdCuxvNin5s", | ||
- "image": "http://i.imgur.com/853QDiC.jpg" | ||
+ "image": "//i.imgur.com/853QDiC.jpg" | ||
}, | ||
{ | ||
"camper": "Mihai Popescu", | ||
"quote": "The exercises helped me hone my skills and get an internship at a tech startup. My projects were a great talking point in the interview, showing them what I did and how I approached the problems.", | ||
"github": "Mihaisavezi", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAApQxGQBYz-WAQu_0zXPTkW-R7QbdaXEZeA", | ||
- "image": "http://i.imgur.com/FfrhMjg.jpg" | ||
+ "image": "//i.imgur.com/FfrhMjg.jpg" | ||
}, | ||
{ | ||
"camper": "Normandy Real", | ||
"quote": "I'm doing Free Code Camp to transition from mainframe programming to front end development.", | ||
"github": "mandyreal", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAdebIIBHfcSRnxGI-j6g5y6crfOXSg55Dc", | ||
- "image": "http://i.imgur.com/U5jVHGk.jpg" | ||
+ "image": "//i.imgur.com/U5jVHGk.jpg" | ||
}, | ||
{ | ||
"camper": "Kristin Anthony", | ||
"quote": "The layout, pacing, and resources of Free Code Camp have given me focus and shown me a path to mastery. Just being able to tell people in my field that I’m learning full stack JavaScript and having projects to show for it has been immensely helpful.", | ||
"github": "anthkris", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAZRM5MBACvQe36s4cvpe5ZHWEfgxprDUFg", | ||
- "image": "http://i.imgur.com/LAE3xBr.jpg" | ||
+ "image": "//i.imgur.com/LAE3xBr.jpg" | ||
}, | ||
{ | ||
"camper": "Zlatko Cabric", | ||
"quote": "I am still in school, pursuing an AS in web development. The JavaScript course in college was a breeze thanks to Free Code Camp.", | ||
"github": "zlajac ", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAsCCFMBUlE24Ie41G_YS3XhdtQMDl5vCZA", | ||
- "image": "http://i.imgur.com/X2ozvfP.jpg" | ||
+ "image": "//i.imgur.com/X2ozvfP.jpg" | ||
}, | ||
{ | ||
"camper": "Geoff Storbeck", | ||
"quote": "I've been able to build tools that has helped moved my current career further and has opened up many more doors in the field.", | ||
"github": "storbeck", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAdVQZYBHPYLt5efKwqZmiDM5SqIdH0_AR4", | ||
- "image": "http://i.imgur.com/DULhJ8z.jpg" | ||
+ "image": "//i.imgur.com/DULhJ8z.jpg" | ||
}, | ||
{ | ||
"camper": "Jason Rueckert", | ||
"quote": "Free Code Camp helped me get to the point as a programmer that I felt confident enough to apply for tech jobs. I got the third one I interviewed for.", | ||
"github": "jsonify", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAF-rVIBwdzAFzGkWCaIw81O_jajBs-zKZU", | ||
- "image": "http://i.imgur.com/vSkODHr.jpg" | ||
+ "image": "//i.imgur.com/vSkODHr.jpg" | ||
}, | ||
{ | ||
"camper": "Anthony DePaolo", | ||
"quote": "I can learn web development at my own pace, which is great with my crazy life’s schedule. It also doesn’t cost $10k-$17k, which I just can’t fork over right now.", | ||
"github": "adepaolo", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAOCUkABzCvw3p1mBiPbbFWq91BEFXGXKxA", | ||
- "image": "http://i.imgur.com/Dm02s0W.jpg" | ||
+ "image": "//i.imgur.com/Dm02s0W.jpg" | ||
}, | ||
{ | ||
"camper": "Jimmy Epperson", | ||
@@ -508,62 +508,62 @@ | ||
"quote": "Free Code Camp has been nothing but supportive and helpful, taking me from a rather basic knowledge of front end technologies to a better, more complete understanding from a full stack perspective.", | ||
"github": "jonslucas", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAATn9H4BI7BP7MBpZ0NR1EvldkWTvAdGy2w", | ||
- "image": "http://i.imgur.com/Fn91jpJ.jpg" | ||
+ "image": "//i.imgur.com/Fn91jpJ.jpg" | ||
}, | ||
{ | ||
"camper": "Brian Barrow", | ||
"quote": "Free Code Camp has given me confidence that I can become a web developer.", | ||
"github": "briancbarrow", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAVH-osBCI8WZTtv3Om5WjeD2rYnjQ6z7zA", | ||
- "image": "http://i.imgur.com/VfdBd5Z.jpg" | ||
+ "image": "//i.imgur.com/VfdBd5Z.jpg" | ||
}, | ||
{ | ||
"camper": "Josh Cronkhite", | ||
"quote": "My resume has been bolstered by adding a completely new stack, providing value to my clients and opening up the pool of potential clients that I would have otherwise referred to peers.", | ||
"github": "joshcronkhite", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAGTPvoBg__9rivrYrYgo8sDJ561JpAfhHk", | ||
- "image": "http://i.imgur.com/DjAIqps.jpg" | ||
+ "image": "//i.imgur.com/DjAIqps.jpg" | ||
}, | ||
{ | ||
"camper": "Adam Goswick", | ||
"quote": "Free Code Camp is helping me learn web development when I can’t afford to go back to school.", | ||
"github": "thegoz85", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAObbhkBzeCKrzuEB0ssE_iGrBX0Xnu9URc", | ||
- "image": "http://i.imgur.com/XYdoDCQ.jpg" | ||
+ "image": "//i.imgur.com/XYdoDCQ.jpg" | ||
}, | ||
{ | ||
"camper": "Travis Wouters", | ||
"quote": "Free Code Camp helped me add skillsets to my resume that show experience instead of knowledge without practical application.", | ||
"github": "", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAABHP0YBddxsmaf2OghV2jAy17RVMhig4RM", | ||
- "image": "http://i.imgur.com/fyRsiOs.jpg" | ||
+ "image": "//i.imgur.com/fyRsiOs.jpg" | ||
}, | ||
{ | ||
"camper": "Nicholas Slaven", | ||
"quote": "Free Code Camp has given me the courage to open the door to the idea of programming for a career.", | ||
"github": "nslaven22", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA5HGyIBmpNcXY_tfHBkWxXI6OtwsFAeHRQ", | ||
- "image": "http://i.imgur.com/9ZYscsm.jpg" | ||
+ "image": "//i.imgur.com/9ZYscsm.jpg" | ||
}, | ||
{ | ||
"camper": "John Bull", | ||
"quote": "I am now able to add customized branding and layouts to web applications that fellow employees and customers use everyday. I’m now looking to move away from desktop support and into development roles.", | ||
"github": "Jbull328", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAABAyfz8BsjE-oGv1k3URGzhRyeupnTGuK3I", | ||
- "image": "http://i.imgur.com/U2kJtoX.jpg" | ||
+ "image": "//i.imgur.com/U2kJtoX.jpg" | ||
}, | ||
{ | ||
"camper": "Nick Galluzzo", | ||
"quote": "I currently work in a support role for a tech startup. The more I learn about JavaScript, the more I’m able to contribute to a product I really believe in!", | ||
"github": "ngalluzzo", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAAjQl1EBZPrbUQ6zGPXmKIuNzpCyqqsnox4", | ||
- "image": "http://i.imgur.com/edJP2Qt.jpg" | ||
+ "image": "//i.imgur.com/edJP2Qt.jpg" | ||
}, | ||
{ | ||
"camper": "James Allen", | ||
"quote": "I finally feel like I can learn to code in my own time and progress to the point of employability.", | ||
"github": "None Given", | ||
"linkedin": "https://www.linkedin.com/profile/view?id=AAkAAA4OrsIB5WyfuqeECSQO7HYisImVMDiFBl0", | ||
- "image": "http://i.imgur.com/quRxESK.jpg" | ||
+ "image": "//i.imgur.com/quRxESK.jpg" | ||
} | ||
] |
View
12
server/utils/commit.json
@@ -5,7 +5,7 @@ | ||
"donateUrl": "https://www.girldevelopit.com/donate", | ||
"description": "Girl Develop It provides in-person classes for women to learn to code.", | ||
"imgAlt": "Girl Develop It participants coding at tables.", | ||
- "imgUrl": "http://i.imgur.com/U1CyEuA.jpg" | ||
+ "imgUrl": "//i.imgur.com/U1CyEuA.jpg" | ||
}, | ||
{ | ||
"name": "black girls code", | ||
@@ -13,7 +13,7 @@ | ||
"donateUrl": "http://www.blackgirlscode.com/", | ||
"description": "Black Girls CODE is devoted to showing the world that black girls can code, and do so much more.", | ||
"imgAlt": "Girls developing code with instructor", | ||
- "imgUrl": "http://i.imgur.com/HBVrdaj.jpg" | ||
+ "imgUrl": "//i.imgur.com/HBVrdaj.jpg" | ||
}, | ||
{ | ||
"name": "coderdojo", | ||
@@ -21,7 +21,7 @@ | ||
"donateUrl": "https://www.globalgiving.org/projects/coderdojo-start-a-dojo-support/", | ||
"description": "CoderDojo is the global network of free computer programming clubs for young people.", | ||
"imgAlt": "Two adults help several kids program on their laptops.", | ||
- "imgUrl": "http://i.imgur.com/701RLfV.jpg" | ||
+ "imgUrl": "//i.imgur.com/701RLfV.jpg" | ||
}, | ||
{ | ||
"name": "women who code", | ||
@@ -29,7 +29,7 @@ | ||
"donateUrl": "https://www.womenwhocode.com/donate", | ||
"description": "Women Who Code (WWCode) is a global leader in propelling women in the tech industry.", | ||
"imgAlt": "Four women sitting in a classroom together learning to code.", | ||
- "imgUrl": "http://i.imgur.com/tKUi6Rf.jpg" | ||
+ "imgUrl": "//i.imgur.com/tKUi6Rf.jpg" | ||
}, | ||
{ | ||
"name": "girls who code", | ||
@@ -37,7 +37,7 @@ | ||
"donateUrl": "http://girlswhocode.com/", | ||
"description": "Girls Who Code programs work to inspire, educate, and equip girls with the computing skills to pursue 21st century opportunities.", | ||
"imgAlt": "Three women smiling while they code on a computer together.", | ||
- "imgUrl": "http://i.imgur.com/op8BVph.jpg" | ||
+ "imgUrl": "//i.imgur.com/op8BVph.jpg" | ||
}, | ||
{ | ||
"name": "hack club", | ||
@@ -45,6 +45,6 @@ | ||
"donateUrl": "https://hackclub.io/", | ||
"description": "Hack Club works with high school students to start and lead programming clubs at their schools.", | ||
"imgAlt": "A bunch of high school students posing for a photo in their programming club.", | ||
- "imgUrl": "http://i.imgur.com/G2YvPHf.jpg" | ||
+ "imgUrl": "//i.imgur.com/G2YvPHf.jpg" | ||
} | ||
] |
View
129
server/views/account/settings.jade
@@ -0,0 +1,129 @@ | ||
+extends ../layout | ||
+block content | ||
+ h1.text-center Settings for your Account | ||
+ hr | ||
+ h2.text-center Actions | ||
+ .row | ||
+ .col-xs-12 | ||
+ if (!user.isGithubCool) | ||
+ a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github') | ||
+ i.fa.fa-github | ||
+ | Link my GitHub to unlock my portfolio | ||
+ else | ||
+ a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github') | ||
+ i.fa.fa-github | ||
+ | Update my portfolio from GitHub | ||
+ if (!user.twitter) | ||
+ a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/link/twitter') | ||
+ i.fa.fa-twitter | ||
+ | Add my Twitter to my portfolio | ||
+ if (!user.facebook) | ||
+ a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/link/facebook') | ||
+ i.fa.fa-facebook | ||
+ | Add my Facebook to my portfolio | ||
+ if (!user.linkedin) | ||
+ a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/link/linkedin') | ||
+ i.fa.fa-linkedin | ||
+ | Add my LinkedIn to my portfolio | ||
+ if (!user.google) | ||
+ a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/link/google') | ||
+ i.fa.fa-google-plus | ||
+ | Add my Google+ to my portfolio | ||
+ .col-xs-12 | ||
+ a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/logout') | ||
+ | Sign me out of Free Code Camp | ||
+ .col-xs-12 | ||
+ a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='mailto:team@freecodecamp.com') | ||
+ | Email us at team@freecodecamp.com | ||
+ .spacer | ||
+ h2.text-center Account Settings | ||
+ .row | ||
+ .col-xs-12 | ||
+ a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/commit') | ||
+ | Edit my pledge | ||
+ .spacer | ||
+ h2.text-center Privacy Settings | ||
+ .row | ||
+ .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3 | ||
+ .row | ||
+ .col-xs-9 | ||
+ p.large-p Make all of my solutions private | ||
+ br | ||
+ | (this disables your certificates) | ||
+ if (user.isLocked) | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-lockdown-mode') On | ||
+ else | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-lockdown-mode') Off | ||
+ | ||
+ .spacer | ||
+ h2.text-center Email settings | ||
+ .row | ||
+ .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3 | ||
+ .row | ||
+ .col-xs-9 | ||
+ p.large-p Send me announcement emails | ||
+ br | ||
+ | (we'll send you these every Thursday) | ||
+ if (user.sendMonthlyEmail) | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-announcement-email-mode') On | ||
+ else | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-announcement-email-mode') Off | ||
+ | ||
+ .row | ||
+ .col-xs-9 | ||
+ p.large-p Send me notification emails | ||
+ br | ||
+ | (these will pertain to your account) | ||
+ if (user.sendNotificationEmail) | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-notification-email-mode') On | ||
+ else | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-notification-email-mode') Off | ||
+ | ||
+ .row | ||
+ .col-xs-9 | ||
+ p.large-p Send me Quincy's weekly email | ||
+ br | ||
+ | (with new articles every Tuesday) | ||
+ if (user.sendQuincyEmail) | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.active.positive-20(href='/toggle-quincy-email-mode') On | ||
+ else | ||
+ .col-xs-3 | ||
+ a.btn.btn-lg.btn-primary.btn-block.positive-20(href='/toggle-quincy-email-mode') Off | ||
+ | ||
+ .spacer | ||
+ h2.text-center Danger Zone | ||
+ .row | ||
+ .col-xs-12 | ||
+ a.btn.btn-lg.btn-block.btn-danger.btn-link-social.confirm-deletion | ||
+ | Delete my Free Code Camp account | ||
+ script. | ||
+ $('.confirm-deletion').on("click", function () { | ||
+ $('#modal-dialog').modal('show'); | ||
+ }); | ||
+ #modal-dialog.modal.animated.wobble | ||
+ .modal-dialog | ||
+ .modal-content | ||
+ .modal-header | ||
+ a.close(href='#', data-dismiss='modal', aria-hidden='true') × | ||
+ h3 You don't really want to delete your account, do you? | ||
+ .modal-body | ||
+ p This will really delete all your data, including all your progress, news stories and brownie points. | ||
+ p We won't be able to recover any of it for you later, even if you change your mind. | ||
+ p If there's something we could do better, send us an email instead and we'll do our best:   | ||
+ a(href="mailto:team@freecodecamp.com") team@freecodecamp.com | ||
+ | . | ||
+ .modal-footer | ||
+ a.btn.btn-success.btn-block(href='#', data-dismiss='modal', aria-hidden='true') | ||
+ | Nevermind, I don't want to delete all of my progress | ||
+ .spacer | ||
+ form(action='/account/delete', method='POST') | ||
+ input(type='hidden', name='_csrf', value=_csrf) | ||
+ button.btn.btn-danger.btn-block(type='submit') | ||
+ | I am 100% sure I want to delete my account and all of my progress |
View
89
server/views/account/show.jade
@@ -4,33 +4,14 @@ block content | ||
script. | ||
var challengeName = 'Profile View'; | ||
if (user && user.username === username) | ||
- h1.text-center Update your code portfolio | ||
- .row | ||
- .col-xs-12 | ||
- if (!user.isGithubCool) | ||
- a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github') | ||
- i.fa.fa-github | ||
- | Link my GitHub to unlock my portfolio | ||
- else | ||
- a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github') | ||
- i.fa.fa-github | ||
- | Update my portfolio from GitHub | ||
- if (!user.twitter) | ||
- a.btn.btn-lg.btn-block.btn-twitter.btn-link-social(href='/link/twitter') | ||
- i.fa.fa-twitter | ||
- | Add my Twitter to my portfolio | ||
- if (!user.facebook) | ||
- a.btn.btn-lg.btn-block.btn-facebook.btn-link-social(href='/link/facebook') | ||
- i.fa.fa-facebook | ||
- | Add my Facebook to my portfolio | ||
- if (!user.linkedin) | ||
- a.btn.btn-lg.btn-block.btn-linkedin.btn-link-social(href='/link/linkedin') | ||
- i.fa.fa-linkedin | ||
- | Add my LinkedIn to my portfolio | ||
- if (!user.google) | ||
- a.btn.btn-lg.btn-block.btn-google-plus.btn-link-social(href='/link/google') | ||
- i.fa.fa-google-plus | ||
- | Add my Google+ to my portfolio | ||
+ .row | ||
+ if (!user.isGithubCool) | ||
+ a.btn.btn-lg.btn-block.btn-github.btn-link-social(href='/link/github') | ||
+ i.fa.fa-github | ||
+ | Link my GitHub to unlock my portfolio | ||
+ .col-xs-12 | ||
+ a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/settings') | ||
+ | Update your settings | ||
.spacer | ||
h1.text-center #{username}'s code portfolio | ||
hr | ||
@@ -187,56 +168,4 @@ block content | ||
if (challenge.solution) | ||
a(href='/challenges/' + removeOldTerms(challenge.name) + '?solution=' + encodeURIComponent(encodeFcc(challenge.solution)), target='_blank')= removeOldTerms(challenge.name) | ||
else | ||
- a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name) | ||
- | ||
- if (user && user.username === username) | ||
- h1.text-center Manage your account | ||
- hr | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/logout') | ||
- | Sign me out of Free Code Camp | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='mailto:team@freecodecamp.com') | ||
- | Email us at team@freecodecamp.com | ||
- if (!user.isLocked) | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/toggle-lockdown-mode') | ||
- | Hide all my solutions from other people | ||
- br | ||
- | (this will disable your certificates) | ||
- else | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/toggle-lockdown-mode') | ||
- | Let other people see all my solutions | ||
- br | ||
- | (this will enable your certificates) | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-primary.btn-link-social(href='/commit') | ||
- | Edit my pledge | ||
- .col-xs-12 | ||
- a.btn.btn-lg.btn-block.btn-danger.btn-link-social.confirm-deletion | ||
- | Delete my Free Code Camp account | ||
- script. | ||
- $('.confirm-deletion').on("click", function () { | ||
- $('#modal-dialog').modal('show'); | ||
- }); | ||
- #modal-dialog.modal.animated.wobble | ||
- .modal-dialog | ||
- .modal-content | ||
- .modal-header | ||
- a.close(href='#', data-dismiss='modal', aria-hidden='true') × | ||
- h3 You don't really want to delete your account, do you? | ||
- .modal-body | ||
- p This will really delete all your data, including all your progress, news stories and brownie points. | ||
- p We won't be able to recover any of it for you later, even if you change your mind. | ||
- p If there's something we could do better, send us an email instead and we'll do our best:   | ||
- a(href="mailto:team@freecodecamp.com") team@freecodecamp.com | ||
- | . | ||
- .modal-footer | ||
- a.btn.btn-success.btn-block(href='#', data-dismiss='modal', aria-hidden='true') | ||
- | Nevermind, I don't want to delete all of my progress | ||
- .spacer | ||
- form(action='/account/delete', method='POST') | ||
- input(type='hidden', name='_csrf', value=_csrf) | ||
- button.btn.btn-danger.btn-block(type='submit') | ||
- | I am 100% sure I want to delete my account and all of my progress | ||
+ a(href='/challenges/' + removeOldTerms(challenge.name))= removeOldTerms(challenge.name) |
View
2
server/views/certificate/back-end.jade
@@ -1,6 +1,6 @@ | ||
include font | ||
#name.cert-name= name | ||
-img#cert.img-abs(src='http://i.imgur.com/yBKoMVP.jpg') | ||
+img#cert.img-abs(src='//i.imgur.com/yBKoMVP.jpg') | ||
.cert-date= date | ||
.cert-link verify this certification at: http://freecodecamp.com/#{username}/back-end-certification | ||
include script |
View
2
server/views/certificate/data-vis.jade
@@ -1,6 +1,6 @@ | ||
include font | ||
#name.cert-name= name | ||
-img#cert.img-abs(src='http://i.imgur.com/l7tIptn.jpg') | ||
+img#cert.img-abs(src='//i.imgur.com/l7tIptn.jpg') | ||
.cert-date= date | ||
.cert-link verify this certification at: http://freecodecamp.com/#{username}/data-visualization-certification | ||
include script |
View
2
server/views/certificate/front-end.jade
@@ -1,6 +1,6 @@ | ||
include font | ||
#name.cert-name= name | ||
-img#cert.img-abs(src='http://i.imgur.com/ToFZKBd.jpg') | ||
+img#cert.img-abs(src='//i.imgur.com/ToFZKBd.jpg') | ||
.cert-date= date | ||
.cert-link verify this certification at: http://freecodecamp.com/#{username}/front-end-certification | ||
include script |
View
2
server/views/certificate/full-stack.jade
@@ -1,6 +1,6 @@ | ||
include font | ||
#name.cert-name= name | ||
-img#cert.img-abs(src='http://i.imgur.com/Z4PgjBQ.jpg') | ||
+img#cert.img-abs(src='//i.imgur.com/Z4PgjBQ.jpg') | ||
.cert-date= date | ||
.cert-link verify this certification at: http://freecodecamp.com/#{username}/full-stack-certification | ||
include script |
View
2
server/views/commit/pledge.jade
@@ -11,5 +11,5 @@ block content | ||
| of completing your #{goal} | ||
.row | ||
.col-xs-12.col-sm-6.col-sm-offset-3 | ||
- img.img-responsive(src='http://i.imgur.com/U1CyEuA.jpg' alt="Girl Develop It participants coding at tables.") | ||
+ img.img-responsive(src='//i.imgur.com/U1CyEuA.jpg' alt="Girl Develop It participants coding at tables.") | ||
p Girl Develop It is a nonprofit that provides in-person classes for women to learn to code. |
View
6
server/views/home.jade
@@ -38,15 +38,15 @@ block content | ||
.spacer | ||
.row | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/nsvNixW.jpg", alt="Meta's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/nsvNixW.jpg", alt="Meta's testimonial image") | ||
p.testimonial-copy Through Free Code Camp, I built a robust and highly functional web app for a nonprofit. This led me to getting a fantastic job. | ||
h3 - Meta Hirschl | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/QPpjPac.jpg", alt="Brian's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/QPpjPac.jpg", alt="Brian's testimonial image") | ||
p.testimonial-copy Free Code Camp's a great way for disabled veterans like me to retrain. I'm receiving engineering job offers, and I haven't even finished yet. | ||
h3 - Brian Grant | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/wjlDigg.jpg", alt="Maxim Orlov's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/wjlDigg.jpg", alt="Maxim Orlov's testimonial image") | ||
p.testimonial-copy I started Free Code Camp with zero knowledge of web development. 6 months later, I landed my first job as a back end engineer. | ||
h3 - Maxim Orlov | ||
.spacer | ||
View
5
server/views/resources/about.jade
@@ -84,6 +84,11 @@ block content | ||
a(href="/terms") Our terms of service | ||
tr | ||
td.text-center | ||
+ i.fa.fa-heart | ||
+ td | ||
+ a(href="/how-nonprofit-projects-work") How our nonprofit projects work | ||
+ tr | ||
+ td.text-center | ||
i.fa.fa-flask | ||
td | ||
a(href="/labs") Extra-curricular apps built by campers | ||
View
61
server/views/resources/how-nonprofit-projects-work.jade
@@ -0,0 +1,61 @@ | ||
+extends ../layout | ||
+block content | ||
+ .col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3 | ||
+ h2.text-center How our Nonprofit Projects Work | ||
+ hr | ||
+ p Building nonprofit projects is the main way that our campers learn full stack JavaScript and agile software development. You’ll begin this process once you’ve earned your Front End Development, Data Visualization, and Back End Development certifications. | ||
+ h3 Starting with the end in mind | ||
+ p Our goal at Free Code Camp is to help you land a job as a software developer or get promoted in your current company to a more technical role. | ||
+ p You’ll continue to work on nonprofit projects until you’ve built a sufficiently impressive portfolio and references to start your job search. Your portfolio will ultimately have four nonprofit projects. We estimate that the 800 hours of nonprofit projects and 80 hours of interview prep you’re going to complete, in addition to the 1,200 hours of challenges you’ve already completed by this point, will be more than enough to qualify you for your first coding job. | ||
+ h3 Your first Nonprofit Project | ||
+ p We generally scope Nonprofit Projects to 200 hours, or about 10 weeks at 20 hours per week of development per camper. These are only rough estimates. You’ll only work on one project at a time. | ||
+ p You will choose another camper to partner with on this projects. You should choose your them based on: | ||
+ ol | ||
+ li How many hours you can pledge (around 10, 20, or 40 hours per week) | ||
+ li Your time zones (Will you be able to pair program together?) | ||
+ li Prior coding experience (we’d like both campers to be able to contribute equally) | ||
+ p We don't take age or gender into account. This will provide you with valuable experience in meshing with diverse teams, which is a reality of the contemporary workplace. | ||
+ p Then, you’ll email  | ||
+ a(href="mailto:team@freecodecamp.com") team@freecodecamp.com | ||
+ |  with: | ||
+ ol | ||
+ li Names | ||
+ li Contact information | ||
+ li Links to each of your Free Code Camp code portfolios | ||
+ li Timezones | ||
+ li Hours pledged per week | ||
+ p We’ll send you a list of 3 nonprofit projects that need your help, and together you will choose one to begin work on. While you do this, our team will code review each of your code portfolios to ensure that all user stories have been completed, and that there are no signs of academic dishonesty. | ||
+ h3 Beginning the Project | ||
+ p We’ll set an initial meeting with representatives from Free Code Camp, the two campers, and the stakeholder. If the stakeholder and both campers show up promptly, and seem enthusiastic and professional, we’ll start the project. This lengthy process serves an important purpose: it reduces the likelihood that any of our campers or stakeholders will waste their precious time. | ||
+ h3 Nonprofit Stakeholders | ||
+ p Each nonprofit project was submitted by a nonprofit. A representative from this nonprofit has agreed to serve as a "stakeholder" - an authorative person who understands the organization and its needs for this particular project. | ||
+ p Stakeholders have a deep understanding of their organizations’ needs. Campers will work with them to figure out the best solutions to these needs. | ||
+ p When you and your pair partner first speak with your nonprofit stakeholder, you’ll: | ||
+ ol | ||
+ li talk at length to better understand their needs | ||
+ li create a new Trello board and use it to prioritize what needs to be built | ||
+ li establish deadlines based on your weekly time commitment, and how long you think each task will take | ||
+ p Ideally, we’ll scope each project to be completed in 10 sprints. It’s notoriously difficult to estimate how long building software projects will take, so feel free to ask our volunteer team for help. | ||
+ p You’ll continue to meet with your stakeholder weekly using the conference software GoToMeeting. You will also correspond with the team on the project’s Trello board. | ||
+ p Getting "blocked" on a task can take away your sense of forward momentum, so be sure to proactively seek answers to any ambiguities you encounter. | ||
+ p Ultimately, the project will be considered complete once the stakeholder’s needs have been met, and you and your partner are happy with the project. Then you can add it to your portfolio! | ||
+ h3 Working with your Partner | ||
+ p You and your partner will pair program (code together on the same computer virtually) about half of the time, and work independently the other half of the time. | ||
+ p Here are our recommended ways of collaborating: | ||
+ ol | ||
+ li Gitter has robust private messaging functionality. It’s the main way our team communicates, and we recommend it over email. | ||
+ li Trello is great for managing projects. Work with your stakeholder to create Trello cards, and update these cards regularly as you make progress on them. | ||
+ li Screen Hero or Team Viewer - These are the ideal way to pair program. Tools like TMUX are good, but difficult to use. We discourage you from using screen sharing tools where only one person has control of the keyboard and mouse - that isn’t real pair programming. | ||
+ li Write clear and readable code, commit messages, branch names, and pull request messages. | ||
+ h3 Hosting Apps | ||
+ p Unless your stakeholder has an existing modern host (AWS, Digital Ocean), you’ll need to transition them over to a new platform. We believe Heroku is the best choice for a vast majority of web projects. It’s free for hosting non-production apps, easy to use, and has both browser and command line interfaces. It’s owned by Salesforce and used by a ton of companies, so it’s accountable and unlikely to go away. | ||
+ p If you need help convincing your stakeholder that Heroku is the ideal platform, we’ll be happy to talk with them. | ||
+ h3 Maintaining Apps | ||
+ p Once you complete a nonprofit project, your obligation to its stakeholder is finished. Your goal is to leave behind a well documented solution that can be easily maintained by a contract JavaScript developer (or even a less-technical "super user"). | ||
+ p While you will no longer need to help with feature development, we encourage you to consider helping your stakeholder with occasional patches down the road. After all, this project will be an important piece of your portfolio, and you’ll want it to remain in good shape for curious future employers. | ||
+ h3 Pledging to Finish the Project | ||
+ p Your nonprofit stakeholder, your partner, and our volunteer team are all counting on you to finish your nonprofit project. If you walk away from an unfinished nonprofit project, you’ll become ineligible to ever be assigned another one. | ||
+ p To confirm that you understand the seriousness of this commitment, we require that all campers sign  | ||
+ a(href='http://goo.gl/forms/ZMn96z2QqY' target='_blank') this pledge | ||
+ |  before starting on their nonprofit projects. | ||
+ p There will likely be times of confusion or frustration. This is normal in software development. The most important thing is that you do not give up and instead persevere through these setbacks. As Steve Jobs famously said, "Real artists ship." And you are going to ship one successful nonprofit project after another until you feel ready to take the next step in your promising career. |
View
6
server/views/resources/nonprofits.jade
@@ -18,15 +18,15 @@ block content | ||
.spacer | ||
.row | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/ZHnFFN5.jpg", alt="Ewa's testimonial image") | ||
p.nonprofit-testimonial-copy With Free Code Camp's valuable contribution, we were able to improve all of our systems and processes as part of our Wonder Women Eastern Indonesia program, and make sure that even more life changing technologies get to where they are needed most. | ||
h3 - Ewa Wojkowska with Kopernik | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/KHF8O2i.jpg", alt="Jennifer's testimonial image") | ||
p.nonprofit-testimonial-copy We have been blown away by the professional quality of the work that has been produced by the campers working on our projects. Free Code Camp has been an invaluable partner and we are grateful for their support. | ||
h3 - Jennifer McDowell with Child First Authority | ||
.col-xs-12.col-sm-12.col-md-4 | ||
- img.img-responsive.testimonial-image.img-center(src="http://i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image") | ||
+ img.img-responsive.testimonial-image.img-center(src="//i.imgur.com/9VknVe3.jpg", alt="Stephanie's testimonial image") | ||
p.nonprofit-testimonial-copy We had the pleasure to work with two very talented campers who went above and beyond to create a web-based app for us. I would highly recommend that nonprofits apply to Free Code Camp with their custom solution needs! | ||
h3 - Stephanie McAllister with Timeraiser | ||
.spacer | ||
View
2
server/views/resources/shop.jade
@@ -4,7 +4,7 @@ block content | ||
hr | ||
.row | ||
.col-xs-12.col-sm-8.col-sm-offset-2.col-md-6.col-md-offset-3.text-center | ||
- img.img-responsive.img-center(src='http://i.imgur.com/MH1CvwY.jpg') | ||
+ img.img-responsive.img-center(src='//i.imgur.com/MH1CvwY.jpg') | ||
h3 Free Code Camp laptop stickers are here! | ||
h4 Get two for only $5, with free shipping anywhere! | ||
p These durable 2" (5 cm) stickers sport a matte finish, and look great anywhere - especially on your laptop. | ||
View
2
server/views/wiki/show.jade
@@ -4,4 +4,4 @@ block content | ||
script. | ||
var lang = window.location.toString().match(/\/\w{2}\//); | ||
lang = (lang) ? lang[0] : '/en/'; | ||
- $('#wikiFrame').attr('src','http://freecodecamp.github.io/wiki' + lang); | ||
+ $('#wikiFrame').attr('src','//freecodecamp.github.io/wiki' + lang); |