Skip to content

Commit

Permalink
Merge branch 'master' into patch-5
Browse files Browse the repository at this point in the history
  • Loading branch information
dhcodes authored Oct 15, 2017
2 parents 1aa226d + 9181150 commit ba16c8f
Show file tree
Hide file tree
Showing 179 changed files with 3,086 additions and 1,492 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This repo is where we plan and maintain these Guide articles, which we then host
- [License](#license)

## What are Guide articles?
Guide articles can be an explanation of a syntax, design pattern, what aria labels are for, or something like what the numbers mean in the top right hand corner of your screen when at freecodecamp.org. You can find an [example article about HTML Elements here](./src/pages/html/elements/index.md).
Guide articles can be an explanation of a syntax, design pattern, what aria labels are for, or something like what the numbers mean in the top right-hand corner of your screen when at freecodecamp.org. You can find an [example article about HTML Elements here](./src/pages/html/elements/index.md).

## What can I write an article about?
We welcome your help writing these articles. You don't have to be an expert in a topic to write about it - this entire Guide is open source, so even if you make a mistake, another contributor will eventually correct it.
Expand Down Expand Up @@ -173,7 +173,7 @@ Here are specific formatting guidelines for any code:

### Adding images to articles

For including images, if the images aren't already hosted somewhere else on the web, you'll need to put them online yourself. A good way to do this is to commit them to a GitHub repository of your own, then push them to GitHub. Then you can right click the image and copy its image source.
For including images, if the images aren't already hosted somewhere else on the web, you'll need to put them online yourself. A good way to do this is to commit them to a GitHub repository of your own, then push them to GitHub. Then you can right-click the image and copy its image source.

Then you'd just need to reference them in your markdown file with this syntax:

Expand Down
1 change: 1 addition & 0 deletions gatsby-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module.exports = {
resolve: 'gatsby-transformer-remark',
options: {
plugins: [
'gatsby-remark-fcc-forum-emoji',
'gatsby-remark-smartypants',
'gatsby-remark-prismjs'
]
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@
"redux-actions": "^2.2.1",
"redux-create-types": "0.0.1",
"redux-epic": "^0.3.0",
"rx": "^4.1.0"
"rx": "^4.1.0",
"unist-util-visit": "^1.1.3"
},
"devDependencies": {
"babel-cli": "^6.24.1",
Expand Down
25 changes: 25 additions & 0 deletions plugins/gatsby-remark-fcc-forum-emoji/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const visit = require('unist-util-visit');

const emojiRE = /^:[a-z_]+:$/;

function markdownToHTML(node) {
const { url, title, alt } = node;
const html = (
`<img src="${url}" title="${title}" alt="${alt}" class="forum-image">`
);

return Object.assign(node, {
type: 'html',
value: html
});
}

module.exports = ({ markdownAST }) => {
visit(markdownAST, 'image', imageNode => {
if (emojiRE.test(imageNode.title)) {
return markdownToHTML(imageNode);
}

return imageNode;
});
};
5 changes: 5 additions & 0 deletions plugins/gatsby-remark-fcc-forum-emoji/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "gatsby-remark-fcc-forum-emoji",
"description": "A plugin to help fix the styling of forum emoji in the Guide",
"main": "index.js"
}
6 changes: 6 additions & 0 deletions src/css/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@
max-width: 100%;
display: block;
}

img.forum-image {
display: inline-block;
width: 20px;
height: 20px;
}
}

/* NoResults/404 */
Expand Down
20 changes: 20 additions & 0 deletions src/pages/agile/acceptance-criteria.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: Acceptance Criteria
---
## Acceptance Criteria

The User Story, as an item in your backlog, is a placeholder for a conversation. In this conversation,
the Product Owner and the Delivery Team reach an understanding on the desired outcome.

The Acceptance Criteria tells the Delivery Team how the code should behave. Avoid writing the **"How"** of the User Story; keep to the **"What"**.
If the team is following Test Driven Development (TDD), it may provide the framework for the automated tests.
The Acceptance Criteria will be the beginnnings of the test plan for the QA team.

Most importantly, if the story does not meet each of the Acceptance Criteria, then the Product Owner should not be accepting the story at the end of the iteration.


#### More Information:

Nomad8 provides an [FAQ on Acceptance Criteria](https://nomad8.com/acceptance_criteria/)

Leading Agile on [Acceptance Criteria](https://www.leadingagile.com/2014/09/acceptance-criteria/)
6 changes: 3 additions & 3 deletions src/pages/agile/extreme-programming/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ title: Extreme Programming
---
## Extreme Programming

Extreme programming (XP) is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements.<sup>[1](https://en.wikipedia.org/wiki/Extreme_programming)</sup>
Extreme programming (XP) is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements.<sup><a href='https://en.wikipedia.org/wiki/Extreme_programming' target='_blank' rel='nofollow'>1</a></sup>

The basic advantage of XP is that the whole process is visible and accountable. The developers will make concrete commitments about what they will accomplish, show concrete progress in the form of deployable software, and when a milestone is reached they will describe exactly what they did and how and why that differed from the plan. This allows business-oriented people to make their own business commitments with confidence, to take advantage of opportunities as they arise, and eliminate dead-ends quickly and cheaply.<sup>[2](http://wiki.c2.com/?ExtremeProgramming)</sup>
The basic advantage of XP is that the whole process is visible and accountable. The developers will make concrete commitments about what they will accomplish, show concrete progress in the form of deployable software, and when a milestone is reached they will describe exactly what they did and how and why that differed from the plan. This allows business-oriented people to make their own business commitments with confidence, to take advantage of opportunities as they arise, and eliminate dead-ends quickly and cheaply.<sup><a href='http://wiki.c2.com/?ExtremeProgramming' target='_blank' rel='nofollow'>2</a></sup>
-- Kent Beck

<a target="_blank" title="By DonWells (Own work) [CC BY 3.0 (http://creativecommons.org/licenses/by/3.0)], via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File%3AXP-feedback.gif"><img width="256" alt="XP-feedback" src="https://upload.wikimedia.org/wikipedia/commons/4/44/XP-feedback.gif"/></a>

#### More Information:

[Rules of Extreme Programming](http://www.extremeprogramming.org/rules.html)
<a href='http://www.extremeprogramming.org/rules.html' target='_blank' rel='nofollow'>Rules of Extreme Programming</a>
13 changes: 4 additions & 9 deletions src/pages/agile/planning-poker/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,9 @@
title: Planning Poker
---
## Planning Poker
Planning poker is an estimation and planning technique in the Agile development model.

This is a stub. <a href='https://github.com/freecodecamp/guides/tree/master/src/pages/agile/planning-poker/index.md' target='_blank' rel='nofollow'>Help our community expand it</a>.

<a href='https://github.com/freecodecamp/guides/blob/master/README.md' target='_blank' rel='nofollow'>This quick style guide will help ensure your pull request gets accepted</a>.

<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds -->

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->

Each estimator holds poker cards with various values. The value represents the number of days, workforces, or any kind of estimation that managers want to meet in common. After the end of the discussion, each person selects a card which shows their estimation. Then they reveal it at the same time.

### More Information:
- Planning poker video: [YouTube](https://www.youtube.com/watch?v=MrIZMuvjTws)
24 changes: 23 additions & 1 deletion src/pages/agile/product-owners/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,26 @@ title: Product Owners
---
## Product Owners

Product owners are the person whose idea it is. The product owner will come up with the backlog of features and also be determining which feature the team is working on next.
Product Owners lead the product vision and release planning. They are in charge of defining the features, the release date, and the content that makes up a shippable product. The goal of a Product Owner is to build the right thing quickly and correctly.

At a high-level, the Product Owner is responsible for the following:

* Owner of the product vision
* Leads release planning
* Defines features and content of the release
* Manages team's understanding of the release
* Creates and curates the product backlog
* Prioritizes the product backlog
* Guides team through the release cycle
* Makes trade-off decisions
* Accepts or rejections work

The Product Owner creates a backlog of items that they think would make a good product. This knowledge is based on their understanding of the market, user testing, and market projection. Product Owners adjust the long-term goals of the product based on the feedback they receive from users and stakeholders. They also act as the point of contact with stakeholders and manage scope and expectations.

Once the Product Owner has received feedback from the various stakeholders, they then refine the backlog to add as much detail as possible in order to create a Minimum Viable Product (MVP)for that release.

The Product Owner then prioritizes the workload to ensure that the stories that are completed address both business value and user goals. Also, if there are risks associated with certain stories, the Product Owner puts those at the top of the backlog so that the risks are addressed early.

Working with the team and the Scrum Master, the Product owner attends sprint planning meetings to loop groomed stories into the sprint. Throughout the sprint, the Product Owner ensures that the team completes the work according to the Definition of Done (DoD), answers any questions that may arise, and update stakeholders.

When the sprint is complete, the Product Owner participates in the Sprint Review along with other stakeholders. Making sure that each story meets the DoD, the Product Owner prepares for the next sprint by gathering feedback and prioritizing work based on what was completed.
18 changes: 13 additions & 5 deletions src/pages/agile/story-points-and-complexity-points/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,21 @@ title: Story Points and Complexity Points
---
## Story Points and Complexity Points

This is a stub. <a href='https://github.com/freecodecamp/guides/tree/master/src/pages/agile/story-points-and-complexity-points/index.md' target='_blank' rel='nofollow'>Help our community expand it</a>.
In Scrum/Agile, the functionality of a product in development is explored by way of **stories** a user might tell about what they want from a product. A team uses **Story Points** when they estimate the amount of effort required to deliver a user story.

<a href='https://github.com/freecodecamp/guides/blob/master/README.md' target='_blank' rel='nofollow'>This quick style guide will help ensure your pull request gets accepted</a>.
Notable features of story points are that they:

<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds -->
* represent the contributions of the whole team
* do not equate directly to time the task might take
* are a rough measure for planning purposes - similar to orders of magnitude
* are assigned in a Fibonacci-like sequence: 0, 1, 2, 3, 5, 8, 13, 20, 40, 100
* estimate the 'size' of stories *relative to each other*

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->
The concept of story points can be quite elusive if you are new to Agile ways of doing things. You will find many online sources discussing story points in different ways, and it can be hard to get a clear idea of what they are and how they are used.

As you learn about the principles and terminology of practices like Scrum, the reasons for some of these properties will become apparent. The use of story points, especially in 'ceremonies' such as planning poker, is much easier to understand by observing or taking part than in a written explanation!

### More Information:
- User Stories: [freeCodeCamp](https://guide.freecodecamp.org/agile/user-stories)
- Common mistakes when using story points: [Medium](https://medium.com/bynder-tech/12-common-mistakes-made-when-using-story-points-f0bb9212d2f7)
- Planning Poker: [Mountain Goat Software](https://www.mountaingoatsoftware.com/agile/planning-poker)
25 changes: 20 additions & 5 deletions src/pages/agile/task-boards-and-kanban/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,29 @@
title: Task Boards and Kanban
---
## Task Boards and Kanban
Kanban is an excellent method both for teams doing software development and individuals tracking their personal tasks.

This is a stub. <a href='https://github.com/freecodecamp/guides/tree/master/src/pages/agile/task-boards-and-kanban/index.md' target='_blank' rel='nofollow'>Help our community expand it</a>.
Derived from the Japanese term for "signboard" or "billboard" to represent a signal, the key principal is to limit your work-in-progress (WIP) to a finite number of tasks at a given time. The amount that can be In Progress is determined by the team's (or individual's) constrained capacity. As one task is finished, that's the signal for you to move another task forward into its place.

<a href='https://github.com/freecodecamp/guides/blob/master/README.md' target='_blank' rel='nofollow'>This quick style guide will help ensure your pull request gets accepted</a>.
Your Kanban tasks are displayed on the Task Board in a series of columns that show the state of the tasks. In its simplest form, three columns are used
- To Do
- Doing
- Done

<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds -->
![Kanban Board Example](https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Simple-kanban-board-.jpg/600px-Simple-kanban-board-.jpg)

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->
*Image courtesy of [wikipedia](https://en.wikipedia.org/wiki/Kanban_board)*

But many other columns, or states, can be added. A software team may also include Waiting to Test, Complete, or Accepted, for example.

![More Complicated Example](https://mktgcdn.leankit.com/uploads/images/general/_2048xAUTO_fit_center-center/1-SmalDevelopmentTeamKanbanBoard-eb79376d.png)

*Image courtesy of [leankit](https://leankit.com/learn/kanban/kanban-board-examples-for-development-and-operations/)*

### More Information:
- What is Kanban: [Leankit](https://leankit.com/learn/kanban/what-is-kanban/)
- What is Kanban: [Atlassian](https://www.atlassian.com/agile/kanban)

Some online boards
- [Trello](https://trello.com/)
- [KanbanFlow](https://kanbanflow.com)
8 changes: 4 additions & 4 deletions src/pages/agile/test-driven-development/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ Each new feature of your system should follow the steps above.

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->
Agile Data's [Introduction to TDD](http://agiledata.org/essays/tdd.html)
Agile Data's <a href='http://agiledata.org/essays/tdd.html' target='_blank' rel='nofollow'>Introduction to TDD</a>

Wiki on [TDD](https://en.wikipedia.org/wiki/Test-driven_development)
Wiki on <a href='https://en.wikipedia.org/wiki/Test-driven_development' target='_blank' rel='nofollow'>TDD</a>

Martin Fowler [Is TDD Dead?](https://martinfowler.com/articles/is-tdd-dead/)
Martin Fowler <a href='https://martinfowler.com/articles/is-tdd-dead/' target='_blank' rel='nofollow'>Is TDD Dead?</a>
(A series of recorded conversations on the subject)

Kent Beck's book [Test Driven Development by Example](https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530)
Kent Beck's book <a href='https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530' target='_blank' rel='nofollow'>Test Driven Development by Example</a>
2 changes: 1 addition & 1 deletion src/pages/agile/the-agile-manifesto/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ Manifesto for agile software development:

#### More Information:

[Agile Manifesto](http://agilemanifesto.org/)
<a href='http://agilemanifesto.org/' target='_blank' rel='nofollow'>Agile Manifesto</a>
18 changes: 16 additions & 2 deletions src/pages/agile/vanity-metrics/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,27 @@ title: Vanity Metrics
---
## Vanity Metrics

This is a stub. <a href='https://github.com/freecodecamp/guides/tree/master/src/pages/agile/vanity-metrics/index.md' target='_blank' rel='nofollow'>Help our community expand it</a>.
Where Vanity is the value of appearance over quality, Vanity Metrics are measurements that, without context or explanation, are used to make someone or something look good. Eric Ries, posting at [Harvard Business Review](https://hbr.org/2010/02/entrepreneurs-beware-of-vanity-metrics), suggests metrics should be **actionable**, **accessible**, and **auditable** to have meaning.

<a href='https://github.com/freecodecamp/guides/blob/master/README.md' target='_blank' rel='nofollow'>This quick style guide will help ensure your pull request gets accepted</a>.
![Vanity Metrics](https://i.pinimg.com/originals/d4/ea/9a/d4ea9ade0de05a5707e11b325a37d5fb.jpg)

Examples:
- Registered users vs Active users
- User stories accepted vs Value delivered to the customer
- Twitter followers vs Retweets

![Value Matters](https://blog.kissmetrics.com/wp-content/uploads/2012/01/increasing-pageviews-flat-revenues.png)
_image via kissmetrics_

<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds -->

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->

Fizzle on [Actionable vs Vanity Metrics](https://fizzle.co/sparkline/vanity-vs-actionable-metrics)

Harvard Business Review on [Vanity Metrics](https://hbr.org/2010/02/entrepreneurs-beware-of-vanity-metrics)

Forbes [Ignore Vanity Metrics and Focus on Engagement](https://www.forbes.com/sites/sujanpatel/2015/05/13/why-you-should-ignore-vanity-metrics-focus-on-engagement-metrics-instead/#1342fdeb12a9)

kissmetrics [Throw Away Vanity Metrics](https://blog.kissmetrics.com/throw-away-vanity-metrics/)
39 changes: 34 additions & 5 deletions src/pages/algorithms/sorting-algorithms/bubble-sort/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,42 @@ title: Bubble Sort
---
## Bubble Sort

This is a stub. <a href='https://github.com/freecodecamp/guides/tree/master/src/pages/algorithms/sorting-algorithms/bubble-sort/index.md' target='_blank' rel='nofollow'>Help our community expand it</a>.
Bubble Sort is the simplest sorting algorithm that works by repeatedly swapping the adjacent elements if they are in wrong order.

<a href='https://github.com/freecodecamp/guides/blob/master/README.md' target='_blank' rel='nofollow'>This quick style guide will help ensure your pull request gets accepted</a>.
### Example:

#### First Pass:
( 5 1 4 2 8 ) –> ( 1 5 4 2 8 ), Here, algorithm compares the first two elements, and swaps since 5 > 1.

( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ), Swap since 5 > 4

( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), Swap since 5 > 2

( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), Now, since these elements are already in order (8 > 5), algorithm does not swap them.


#### Second Pass:

( 1 4 2 5 8 ) –> ( 1 4 2 5 8 )

( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ), Swap since 4 > 2

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

Now, the array is already sorted, but our algorithm does not know if it is completed. The algorithm needs one whole pass without any swap to know it is sorted.

#### Third Pass:

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )

<!-- The article goes here, in GitHub-flavored Markdown. Feel free to add YouTube videos, images, and CodePen/JSBin embeds -->

#### More Information:
<!-- Please add any articles you think might be helpful to read before writing the article -->


Loading

0 comments on commit ba16c8f

Please sign in to comment.