Skip to content
Browse files

Convert trails from markdown to JSON

* The trail-map is now JSON-only for use at learn.thoughtbot.com
* All Pull Requests should update the JSON as per CONTRIBUTING.md

Notes on this commit:

Convert ruby trail to json
Convert code-review to json
Convert css trail to json
Convert git trail to json
Convert grids trail to json
Convert html trail to json
Convert information-design trail to json
Convert ios trail to json
Convert Javascript trail to JSON
Convert open-source trail to json
Add prerequisites to open-source trail
Convert postgres trail to json
Convert rails trail to json
Convert refactoring trail to json
Convert rubymotion trail to json
Convert sass trail to json
Convert test-driven-development trail to json
Convert typography trail to json
Convert unix trail to json
Convert vim trail to json
Convert visual-design trail to json
Lint json and resolve errors
Add descriptions to trails
Use name instead of title in ruby trail resources

Change resource json to match <a> tag properties
* url => uri
* name => title

Rename visual-design and postgres trails
* Visual Design => Design Principles
* Postgres => SQL
Fix typo in git trail
Fix capitalization of trail names
Refactor test-driven-development into testing trail

Remove markdown-style code ticks ("`")
* Code ticks are not currently being parsed in json, and as such
  currently distract from content rather than adding clarity.
* The parsed trail-maps on learn.thoughtbot.com/javascript, for
  example, look fine without <code> wrappers.
* If we miss these, we can always bring them back.

Simplify format of validations in trails

* Always use an array of strings as the validations for a step
* This is in keeping with the original intention of the json trail-map
  spec.
* Links can be added by including them in the validations string, but in
  general should not be used in validations and will likely fit better
  as a resource.

Fix formatting of ruby trail

* For some reason, there was an invalid "guides" element. This has been
  converted into a step
  • Loading branch information...
1 parent 4d60e67 commit b16f7507a18aafff597930cd862b93a50da5c5aa @calebthompson calebthompson committed with Adarsh Pandit Oct 9, 2012
View
39 trails/code-review.json
@@ -0,0 +1,39 @@
+{
+ "name": "Code Review",
+ "description": "A peer review of source code. It is intended to find and fix mistakes overlooked in the initial development phase, improving both the overall quality of software and the developers' skills.",
+ "steps": [
+ {
+ "name": "Read about code reviews.",
+ "resources": [
+ {
+ "title": "Feature branch code reviews",
+ "uri": "http://goo.gl/jIcOv"
+ },
+ {
+ "title": "Best practices of peer code review",
+ "uri": "http://goo.gl/A8Boc"
+ }
+ ]
+ },
+ {
+ "name": "Review someone else's code",
+ "validations": [
+ "Comment on a specific line number.",
+ "Comment constructively and politely.",
+ "Learn something valuable from the comments.",
+ "Express appreciation to the author.",
+ "Review the code in a timely manner."
+ ]
+ },
+ {
+ "name": "Have your code reviewed",
+ "validations": [
+ "Create small pull requests, which are easier to review.",
+ "Take comments as constructive and not personal criticism.",
+ "Learn something valuable from the comments.",
+ "Express appreciation to the reviewer.",
+ "Respond to comments in a timely manner."
+ ]
+ }
+ ]
+}
View
27 trails/code-review.md
@@ -1,27 +0,0 @@
-Code Review
-===========
-
-Critical Learning
------------------
-
-* Read [feature branch code reviews](http://goo.gl/jIcOv).
-* Read [Best Practices of Peer Code Review](http://goo.gl/A8Boc).
-
-Validation
-----------
-
-You know how to review code when you can:
-
-* Comment on a specific line number.
-* Comment constructively and politely.
-* Learn something valuable from the comments.
-* Express appreciation to the author.
-* Review the code in a timely manner.
-
-You know how to have your code reviewed when you can:
-
-* Create small pull requests, which are easier to review.
-* Take comments as constructive and not personal criticism.
-* Learn something valuable from the comments.
-* Express appreciation to the reviewer.
-* Respond to comments in a timely manner.
View
47 trails/css.json
@@ -0,0 +1,47 @@
+{
+ "name": "CSS",
+ "description": "A language used for describing the the look and formatting of HTML.",
+ "steps": [
+ {
+ "name": "Learn the basics",
+ "references": [
+ {
+ "title": "CSS3 for Web Designers",
+ "uri": "http://www.abookapart.com/products/css3-for-web-designers"
+ },
+ {
+ "title": "CSS Floats 101",
+ "uri": "http://www.alistapart.com/articles/css-floats-101/"
+ },
+ {
+ "title": "CSS Positioning 101",
+ "uri": "http://www.alistapart.com/articles/css-positioning-101/"
+ }
+ ],
+ "validations": [
+ "Control each part of the box model (width, height, padding, border).",
+ "Layout objects with floats",
+ "Space text.",
+ "Style text."
+ ]
+ },
+ {
+ "name": "Expand your knowledge",
+ "references": [
+ {
+ "title": "Responsive Web Design",
+ "uri": "http://www.abookapart.com/products/responsive-web-design"
+ },
+ {
+ "title": "Code Academy Web Fundamentals",
+ "uri": "http://www.codecademy.com/tracks/web"
+ }
+ ],
+ "validations": [
+ "Build a grid.",
+ "Minimize problems with browser defaults.",
+ "Use @media queries to provide different layouts to devices with differing widths."
+ ]
+ }
+ ]
+}
View
25 trails/css.md
@@ -1,25 +0,0 @@
-CSS
-===
-
-Critical learning
------------------
-
-* Read [CSS3 for Web Designers](http://www.abookapart.com/products/css3-for-web-designers).
-* Read [CSS Floats 101](http://www.alistapart.com/articles/css-floats-101/).
-* Read [CSS Positioning 101](http://www.alistapart.com/articles/css-positioning-101/).
-* Read [Responsive Web Design](http://www.abookapart.com/products/responsive-web-design).
-* Complete [Code Academy Web Fundamentals](http://www.codecademy.com/tracks/web).
-
-Validation
-----------
-
-You know everyday CSS when you can:
-
-* Build a grid.
-* Control each part of the box model (width, height, padding, border).
-* Layout objects with floats.
-* Minimize problems with browser defaults.
-* Space text.
-* Style text.
-* Use `@media` queries to provide different layouts to devices with differing
- widths.
View
56 trails/design-principles.json
@@ -0,0 +1,56 @@
+{
+ "name": "Design Principles",
+ "description": "The fundamental ideas about the practice of good visual design.",
+ "prerequisites": [
+ "css",
+ "grids",
+ "html",
+ "typography"
+ ],
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Visual Grammar.",
+ "uri": "http://amzn.to/visual-grammar"
+ },
+ {
+ "title": "Read Universal Principles of Design.",
+ "uri": "http://amzn.to/universal-principles"
+ },
+ {
+ "title": "Read Andy Rutledge's \"Gestalt Principles\":"
+ },
+ {
+ "title": "1",
+ "uri": "http://www.andyrutledge.com/gestalt-principles-1-figure-ground-relationship.php"
+ },
+ {
+ "title": "2",
+ "uri": "http://www.andyrutledge.com/gestalt-principles-2-similarity.php"
+ },
+ {
+ "title": "3",
+ "uri": "http://www.andyrutledge.com/gestalt-principles-3.php"
+ },
+ {
+ "title": "4",
+ "uri": "http://www.andyrutledge.com/common-fate.php"
+ },
+ {
+ "title": "5",
+ "uri": "http://www.andyrutledge.com/closure.php"
+ },
+ {
+ "title": "Read 101 Things I Learned in Architecture School",
+ "uri": "http://amzn.to/101-things-learned"
+ }
+ ],
+ "validations": [
+ "Intentionally break visual design principles in your design.",
+ "Use the vocabulary of visual design principles when articulating the reasons for your design and when critiquing teammates' designs."
+ ]
+ }
+ ]
+}
View
134 trails/git.json
@@ -0,0 +1,134 @@
+{
+ "name": "Git",
+ "description": "A distributed revision control and source code management system with an emphasis on speed.",
+ "steps": [
+ {
+ "name": "Learn everyday git",
+ "resources": [
+ {
+ "title": "Try Git",
+ "uri": "http://try.github.com"
+ },
+ {
+ "title": "Watch the Normal Workflow gitcast",
+ "uri": "http://blip.tv/scott-chacon/c2-normal-workflow-4113486"
+ }
+ ],
+ "validations": [
+ "Initialize a repository",
+ "Clone a repository",
+ "Ignore files",
+ "Add a file to staging",
+ "Unstage a file",
+ "Check status",
+ "View a diff",
+ "Create a commit",
+ "Push to origin",
+ "Pull remote changes locally",
+ "Resolve a conflict",
+ "Create a branch",
+ "Merge a branch into master",
+ "Push to a remote branch",
+ "Rebase origin/master into a branch"
+ ]
+ },
+ {
+ "name": "Intermediate Git",
+ "resources": [
+ {
+ "title": "Watch the Distributed Workflow gitcast.",
+ "uri": "http://blip.tv/scott-chacon/c8-dist-workflow-4113615"
+ },
+ {
+ "title": "Read Chapter 3 of Pro Git",
+ "uri": "http://git-scm.com/book/en/Git-Branching"
+ },
+ {
+ "title": "Read gitready articles that interest you.",
+ "uri": "http://gitready.com"
+ }
+ ],
+ "validations": [
+ "Add a remote",
+ "Amend a commit",
+ "Show a commit by SHA hash",
+ "Stash changes",
+ "Squash commits",
+ "Create a tag"
+ ]
+ },
+ {
+ "name": "Advanced Git",
+ "resources": [
+ {
+ "title": "git-clone",
+ "uri": "http://git-scm.com/docs/git-clone"
+ },
+ {
+ "title": "git-init",
+ "uri": "http://git-scm.com/docs/git-init"
+ },
+ {
+ "title": "git-add",
+ "uri": "http://git-scm.com/docs/git-add"
+ },
+ {
+ "title": "git-branch",
+ "uri": "http://git-scm.com/docs/git-branch"
+ },
+ {
+ "title": "git-checkout",
+ "uri": "http://git-scm.com/docs/git-checkout"
+ },
+ {
+ "title": "git-commit",
+ "uri": "http://git-scm.com/docs/git-commit"
+ },
+ {
+ "title": "git-diff",
+ "uri": "http://git-scm.com/docs/git-diff"
+ },
+ {
+ "title": "git-merge",
+ "uri": "http://git-scm.com/docs/git-merge"
+ },
+ {
+ "title": "git-pull",
+ "uri": "http://git-scm.com/docs/git-pull"
+ },
+ {
+ "title": "git-push",
+ "uri": "http://git-scm.com/docs/git-push"
+ },
+ {
+ "title": "git-rebase",
+ "uri": "http://git-scm.com/docs/git-rebase"
+ },
+ {
+ "title": "git-reset",
+ "uri": "http://git-scm.com/docs/git-reset"
+ },
+ {
+ "title": "git-show",
+ "uri": "http://git-scm.com/docs/git-show"
+ },
+ {
+ "title": "git-stash",
+ "uri": "http://git-scm.com/docs/git-stash"
+ },
+ {
+ "title": "git-status",
+ "uri": "http://git-scm.com/docs/git-status"
+ }
+ ],
+ "validations": [
+ "Cherry pick commits",
+ "Reorder commits",
+ "Keep either file in merge conflicts",
+ "Restore lost commits",
+ "Visualize commits differently using git log flags",
+ "Visualize changes differently using git diff flags"
+ ]
+ }
+ ]
+}
View
80 trails/git.md
@@ -1,80 +0,0 @@
-Git
-===
-
-Critical learning
------------------
-
-* First, [Try Git](http://try.github.com)!
-* Watch the [Normal Workflow](http://blip.tv/scott-chacon/c2-normal-workflow-4113486)
- gitcast.
-* Watch the [Distributed Workflow](http://blip.tv/scott-chacon/c8-dist-workflow-4113615)
- gitcast.
-* Read [Chapter 3 of Pro Git](http://git-scm.com/book/en/Git-Branching).
-* Read [gitready](http://gitready.com) articles that interest you.
-
-Validation
-----------
-
-You know everyday git when you can:
-
-* [Initialize a repository](http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository#Initializing-a-Repository-in-an-Existing-Directory)
-* [Clone a repository](http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository#Cloning-an-Existing-Repository)
-* [Ignore files](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Ignoring-Files)
-* [Add a file to staging](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Tracking-New-Files)
-* [Unstage a file](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Removing-Files)
-* [Check status](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Checking-the-Status-of-Your-Files)
-* [View a diff](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Viewing-Your-Staged-and-Unstaged-Changes)
-* [Create a commit](http://git-scm.com/book/en/Git-Basics-Recording-Changes-to-the-Repository#Committing-Your-Changes)
-* Push to origin
-* [Pull remote changes locally](http://git-scm.com/book/en/Git-Basics-Working-with-Remotes#Fetching-and-Pulling-from-Your-Remotes)
-* [Resolve a conflict](http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging#Basic-Merge-Conflicts)
-* [Create a branch](http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging#Basic-Branching)
-* [Merge a branch into master](http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging#Basic-Merging)
-* [Push to a remote branch](http://git-scm.com/book/en/Git-Basics-Working-with-Remotes#Pushing-to-Your-Remotes)
-* [Rebase origin/master into a branch](http://git-scm.com/book/en/Git-Branching-Rebasing#The-Basic-Rebase)
-
-You know intermediate git when you can:
-
-* [Add a remote](http://git-scm.com/book/en/Git-Basics-Working-with-Remotes#Adding-Remote-Repositories)
-* [Amend a commit](http://git-scm.com/book/en/Git-Basics-Undoing-Things#Changing-Your-Last-Commit)
-* Show a commit by SHA hash
-* [Stash changes](http://git-scm.com/book/en/Git-Tools-Stashing#Stashing-Your-Work)
-* Squash commits
-* [Create a tag](http://git-scm.com/book/en/Git-Basics-Tagging#Creating-Tags)
-
-You know advanced git when you can:
-
-* Cherry pick commits
-* [Reorder commits](http://gitready.com/advanced/2009/03/20/reorder-commits-with-rebase.html)
-* [Keep either file in merge conflicts](http://gitready.com/advanced/2009/02/25/keep-either-file-in-merge-conflicts.html)
-* [Restore lost commits](http://gitready.com/advanced/2009/01/17/restoring-lost-commits.html)
-* [Visualize commits differently using `git log` flags](http://gitready.com/advanced/2009/01/20/bend-logs-to-your-will.html)
-* Visualize changes differently using `git diff` flags
-
-Ongoing reference
------------------
-
-Refer to these man pages when you start a new project:
-
-```shell
-man git-clone
-man git-init
-```
-
-Refer to these man pages often during a project:
-
-```shell
-man git-add
-man git-branch
-man git-checkout
-man git-commit
-man git-diff
-man git-merge
-man git-pull
-man git-push
-man git-rebase
-man git-reset
-man git-show
-man git-stash
-man git-status
-```
View
49 trails/grids.json
@@ -0,0 +1,49 @@
+{
+ "name": "CSS Grids",
+ "description": "A two-dimensional structure made up of a series of intersecting vertical and horizontal axes used to structure content. The grid serves as a framework on which a designer can organize text and images in a rational, easy to absorb manner.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Grid Systems: Principles of Organizing Type",
+ "uri": "http://amzn.to/grid-systems-principles"
+ },
+ {
+ "title": "Grid Systems in Graphic Design",
+ "uri": "http://amzn.to/grid-systems-graphic-design"
+ },
+ {
+ "title": "Mark Boulton's Designing Grid Systems",
+ "uri": "http://goo.gl/VOGP"
+ },
+ {
+ "title": "Ordering Disorder: Grid Principles for Web Design",
+ "uri": "http://amzn.to/ordering-disorder"
+ },
+ {
+ "title": "Geometry of Design: Studies in Proportion and Composition",
+ "uri": "http://amzn.to/geometry-design"
+ }
+ ],
+ "validations": [
+ "Create inner axial alignment.",
+ "Edit and/or build a grid according to the content in your design (not using a prebuilt framework).",
+ "Have symmetrical and asymmetrical balance in your designs.",
+ "Keep consistent vertical and horizontal space.",
+ "Use the grid to create active white space within a design.",
+ "Use the grid to strengthen the contents hierarchy.",
+ "Use a more complex grid system than a equal column 3 or 4 column grid."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Browse The Grid System.",
+ "uri": "http://www.thegridsystem.org"
+ }
+ ]
+ }
+ ]
+}
View
35 trails/grids.md
@@ -1,35 +0,0 @@
-Grids
-=====
-
-Critical learning
------------------
-
-* Read [Grid Systems: Principles of Organizing Type](http://amzn.to/grid-systems-principles). ($)
-* Read [Grid Systems in Graphic Design](http://amzn.to/grid-systems-graphic-design). ($)
-* Read Mark Boulton's "Designing Grid Systems":
- * [1](http://goo.gl/VOGP)
- * [2](http://goo.gl/at66)
- * [3](http://goo.gl/pw0Ks)
- * [4](http://goo.gl/EnL22)
- * [5](http://goo.gl/s9L1y)
-* Read [Ordering Disorder: Grid Principles for Web Design](http://amzn.to/ordering-disorder). ($)
-* Read [Geometry of Design: Studies in Proportion and Composition](http://amzn.to/geometry-design). ($)
-
-Validation
-----------
-
-You can use a grid in a design when you can:
-
-* Create inner axial alignment.
-* Edit and/or build a grid according to the content in your design (not using a
- prebuilt framework).
-* Have symmetrical and asymmetrical balance in your designs.
-* Keep consistent vertical and horizontal space.
-* Use the grid to create active white space within a design.
-* Use the grid to strengthen the contents hierarchy.
-* Use a more complex grid system than a equal column 3 or 4 column grid.
-
-Ongoing Reference
------------------
-
-* Browse [The Grid System](http://www.thegridsystem.org/).
View
43 trails/html.json
@@ -0,0 +1,43 @@
+{
+ "name": "HTML",
+ "description": "The markup language for displaying web pages and other information that can be displayed in a web browser.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read A Beginner’s Guide to HTML & CSS",
+ "uri": "http://learn.shayhowe.com/"
+ },
+ {
+ "title": "Complete Code Academy Web Fundamentals",
+ "uri": "http://www.codecademy.com/tracks/web"
+ },
+ {
+ "title": "Read Dive into HTML5",
+ "uri": "http://diveintohtml5.info/"
+ },
+ {
+ "title": "Read HTML5 for Web Designers",
+ "uri": "http://www.abookapart.com/products/html5-for-web-designers"
+ }
+ ],
+ "validations": [
+ "Use <h1-6>, <p>, <a>, <img>, <ul>/<ol>/<li>, <div>, <span>, <dl>/<dt>/<dd>, <form>/<fieldset>/<input> semantically.",
+ "Use the new HTML5 elements <header>, <hgroup>, <section>, <aside>, <article>, <footer> semantically.",
+ "Name classes and ids semantically.",
+ "Use Web Inspector quickly (hint: keyboard shortcuts).",
+ "View source on a web page and understand it."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "references": [
+ {
+ "title": "Refer to the HTML5 Spec",
+ "uri": "http://dev.w3.org/html5/spec/single-page.html"
+ }
+ ]
+ }
+ ]
+}
View
28 trails/html.md
@@ -1,28 +0,0 @@
-HTML
-====
-
-Critical learning
------------------
-
-* Read [A Beginner’s Guide to HTML & CSS](http://learn.shayhowe.com/).
-* Complete [Code Academy Web Fundamentals](http://www.codecademy.com/tracks/web).
-* Read [Dive into HTML5](http://diveintohtml5.info/).
-* Read [HTML5 for Web Designers](http://www.abookapart.com/products/html5-for-web-designers). ($)
-
-Validation
-----------
-
-You know everyday HTML when you can:
-
-* Use `<h1-6>`, `<p>`, `<a>`, `<img>`, `<ul>`/`<ol>`/`<li>`, `<div>`, `<span>`,
- `<dl>`/`<dt>`/`<dd>`, `<form>`/`<fieldset>`/`<input>` semantically.
-* Use the new HTML5 elements `<header>`, `<hgroup>`, `<section>`, `<aside>`,
- `<article>`, `<footer>` semantically.
-* Name classes and ids semantically.
-* Use Web Inspector quickly (hint: keyboard shortcuts).
-* View source on a web page and understand it.
-
-Ongoing reference
------------------
-
-* Refer to the [HTML5 Spec](http://dev.w3.org/html5/spec/single-page.html).
View
32 trails/information-design.json
@@ -0,0 +1,32 @@
+{
+ "name": "Information Design",
+ "description": "The skill and practice of preparing information so people can use it with efficiency and effectiveness.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Information Dashboard Design",
+ "uri": "http://amzn.to/information-dashboard"
+ },
+ {
+ "title": "Read Envisioning Information",
+ "uri": "http://amzn.to/envisioning-information"
+ },
+ {
+ "title": "Read The Visual Display of Quantitative Information",
+ "uri": "http://amzn.to/visual-display"
+ },
+ {
+ "title": "Read A Practical Guide to Designing with Data",
+ "uri": "http://www.fivesimplesteps.com/products/a-practical-guide-to-designing-with-data"
+ }
+ ],
+ "validations": [
+ "Cleanly and clearly communicate information.",
+ "Identify chart junk, when to use it, and when not to use it.",
+ "Understand the basic chart/graph options (including bar (vertical/horizontal), line, pie, spark lines) and appropriate use cases for each."
+ ]
+ }
+ ]
+}
View
20 trails/information-design.md
@@ -1,20 +0,0 @@
-Information Design
-==================
-
-Critical learning
------------------
-
-* Read [Information Dashboard Design](http://amzn.to/information-dashboard). ($)
-* Read [Envisioning Information](http://amzn.to/envisioning-information). ($)
-* Read [The Visual Display of Quantitative Information](http://amzn.to/visual-display). ($)
-* Read [A Practical Guide to Designing with Data](http://www.fivesimplesteps.com/products/a-practical-guide-to-designing-with-data). ($)
-
-Validation
-----------
-
-You know everyday information design when you can:
-
-* Cleanly and clearly communicate information.
-* Identify chart junk, when to use it, and when not to use it.
-* Understand the basic chart/graph options (including bar (vertical/horizontal),
- line, pie, spark lines) and appropriate use cases for each.
View
87 trails/ios.json
@@ -0,0 +1,87 @@
+{
+ "name": "iOS",
+ "description": "The mobile operating system that runs on the iPhone, iPad, iPod touch, and Apple TV.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Learning Objective-C: A Primer",
+ "uri": "http://developer.apple.com/library/mac/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html"
+ },
+ {
+ "title": "Read Learn Objective-C on the Mac",
+ "uri": "http://amzn.to/learn-objective-c-mac"
+ },
+ {
+ "title": "Read Beginning iOS 5 Development: Exploring the iOS SDK",
+ "uri": "http://amzn.to/beginning-ios5"
+ },
+ {
+ "title": "Read The Objective-C Programming Language",
+ "uri": "http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html"
+ },
+ {
+ "title": "Read About Memory Management",
+ "uri": "https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html"
+ },
+ {
+ "title": "Read chapters 6 - 15, 17 - 19, 24, 28 - 30 of Cocoa Design Patterns",
+ "uri": "http://amzn.to/cocoa-design-patterns"
+ },
+ {
+ "title": "Read and hack on sample code",
+ "uri": "https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Sample%20Code"
+ },
+ {
+ "title": "Read the Mobile Human Interface Guidelines",
+ "uri": "http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html"
+ }
+ ],
+ "validations": [
+ "Use Xcode (and the built-in Interface Builder) to compile an iOS app.",
+ "Describe and use ARC and MRC for memory mangement, as well as the rules of the retain/release/autorelease cycle.",
+ "Use the basic data types (NSInteger, NSString), collection objects (NSArray, NSDictionary), and know when to use them instead of C primitives (int, char, etc).",
+ "Understand the difference between using tne mutable (NSMutableArray, NSMutableDictionary, NSMutableString) and immutable objects in Objective-C, their advantaces and disavantages.",
+ "Use the basic display and navigation elements (UIWindow, UIView, UINavigationBar, UIToolbar, etc).",
+ "Implement a solution using an UITableView, with navigation and a custom UITableViewCell.",
+ "Implement the various iOS controls (UISwitch, UILabel, UISegmentedControl, etc).",
+ "Understand and implement the usage of iPad specific UI controls, UIPopoverController and UISplitView.",
+ "Design and use basic design patterns like MVC, delegates, callbacks, and notifications.",
+ "Use CoreLocation to get location coordinates.",
+ "Access the cameras to take pictures or access pictures from the device's photo gallery.",
+ "Implement network communications using AFNetworking or NSUrlConnection.",
+ "Implement UX and design best practices as prescribed by Apple.",
+ "Meet App Store submission requirements and submit an app."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Maintain an active ADC account and refer tothe official documentation",
+ "uri": "https://developer.apple.com"
+ },
+ {
+ "title": "Keep up-to-date on iOS news."
+ },
+ {
+ "title": "Sign up for thecocoa-dev",
+ "uri": "https://lists.apple.com/mailman/listinfo/cocoa-dev"
+ }
+ ],
+ "validations": [
+ "Create and manage Core Data objects and schemas.",
+ "Decide when to best use:\n * A category vs subclassing.\n * Singletons.\n * Delegates.\n * Proxies.\n * Closures.",
+ "Implement animations using CoreAnimation and optimize drawing using CoreGraphics.",
+ "Implement a multi-tasking environment free of race conditions (using appropriate locking techniques such as mutexes and semaphores, message passing, etc)",
+ "Implement task driven concurrency using the Grand Central Dispatch (GCD) (http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html) framework.",
+ "Design and use APIs that prefer the use of closures instead of selectors and delegates.",
+ "Create and use UIStoryboards to define and organize the application flow and transitions between screens.",
+ "Debug memory leaks using NSZombieEnabled, Instruments, and other tools.",
+ "Use CocoaPods (https://github.com/CocoaPods/CocoaPods) to define your project's dependencies.",
+ "Create an universal app that contains code for both the iPhone/iPod and iPad devices."
+ ]
+ }
+ ]
+}
View
59 trails/ios.md
@@ -1,59 +0,0 @@
-iOS
-===
-
-Critical Learning
------------------
-
-* Read [Learning Objective-C: A Primer](http://developer.apple.com/library/mac/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/_index.html)
-* Read [Learn Objective-C on the Mac](http://amzn.to/learn-objective-c-mac) ($)
-* Read [Beginning iOS 5 Development: Exploring the iOS SDK](http://amzn.to/beginning-ios5) ($)
-* Read [The Objective-C Programming Language](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html)
-* Read [About Memory Management](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html)
-* Read chapters 6 - 15, 17 - 19, 24, 28 - 30 of [Cocoa Design Patterns](http://amzn.to/cocoa-design-patterns) ($)
-* Read and hack on [sample code](https://developer.apple.com/library/ios/navigation/#section=Resource%20Types&topic=Sample%20Code)
-* Read the [Mobile Human Interface Guidelines](http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html)
-
-Validation
-----------
-
-You know everyday Objective-C and iOS development when you can:
-
-* Use Xcode (and the built-in Interface Builder) to compile an iOS app.
-* Describe and use ARC and MRC for memory mangement, as well as the rules of the retain/release/autorelease cycle.
-* Use the basic data types (NSInteger, NSString), collection objects (NSArray, NSDictionary), and know when to use them instead of C primitives (int, char, etc).
-* Understand the difference between using tne mutable (NSMutableArray, NSMutableDictionary, NSMutableString) and immutable objects in Objective-C, their advantaces and disavantages.
-* Use the basic display and navigation elements (UIWindow, UIView, UINavigationBar, UIToolbar, etc).
-* Implement a solution using an UITableView, with navigation and a custom UITableViewCell.
-* Implement the various iOS controls (UISwitch, UILabel, UISegmentedControl, etc).
-* Understand and implement the usage of iPad specific UI controls, UIPopoverController and UISplitView.
-* Design and use basic design patterns like MVC, delegates, callbacks, and notifications.
-* Use CoreLocation to get location coordinates.
-* Access the cameras to take pictures or access pictures from the device's photo gallery.
-* Implement network communications using AFNetworking or NSUrlConnection.
-* Implement UX and design best practices as prescribed by Apple.
-* Meet App Store submission requirements and submit an app.
-
-You know advanced Objective-C & iOS Development when you can:
-
-* Create and manage Core Data objects and schemas.
-* Decide when to best use:
- * A category vs subclassing.
- * Singletons.
- * Delegates.
- * Proxies.
- * Closures.
-* Implement animations using CoreAnimation and optimize drawing using CoreGraphics.
-* Implement a multi-tasking environment free of race conditions (using appropriate locking techniques such as mutexes and semaphores, message passing, etc)
-* Implement task driven concurrency using the [Grand Central Dispatch (GCD)](http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html) framework.
-* Design and use APIs that prefer the use of closures instead of selectors and delegates.
-* Create and use UIStoryboards to define and organize the application flow and transitions between screens.
-* Debug memory leaks using NSZombieEnabled, Instruments, and other tools.
-* Use [CocoaPods](https://github.com/CocoaPods/CocoaPods) to define your project's dependencies.
-* Create an universal app that contains code for both the iPhone/iPod and iPad devices.
-
-Ongoing reference
------------------
-
-* Maintain an active ADC account and refer to [the official documentation](https://developer.apple.com).
-* Keep up-to-date on iOS news.
-* Sign up for the [cocoa-dev](https://lists.apple.com/mailman/listinfo/cocoa-dev) discussion list.
View
73 trails/javascript.json
@@ -0,0 +1,73 @@
+{
+ "name": "JavaScript",
+ "description": "The primary programming language used for client-side in-browser functionality.",
+ "steps": [
+ {
+ "name": "Complete Javascript Fundamentals",
+ "resources": [
+ {
+ "title": "Codecademy",
+ "uri": "http://www.codecademy.com/tracks/javascript"
+ }
+ ],
+ "validations": [
+ "Run programs.",
+ "Define a function.",
+ "Invoke a function.",
+ "Avoid syntax errors.",
+ "Print values.",
+ "Use common control flow structures.",
+ "Instantiate an object.",
+ "Initialize arrays using [].",
+ "Initialize empty objects and hashes using {}.",
+ "Iterate over collections."
+ ]
+ },
+ {
+ "name": "Read Eloquent Javascript",
+ "resources": [
+ {
+ "title": "Eloquent Javascript",
+ "uri": "http://eloquentjavascript.net/contents.html"
+ },
+ {
+ "title": "Javascript: The Definitive Guide, Core and Client-Side Reference chapters.",
+ "uri": "http://amzn.to/ONeSOs"
+ }
+ ],
+ "validations": [
+ "Avoid global variables.",
+ "Inherit classes using prototype."
+ ]
+ },
+ {
+ "name": "Read Javascript Web Applications",
+ "resources": [
+ {
+ "title": "Javascript Web Applications",
+ "uri": "http://amzn.to/javascript-web-apps"
+ },
+ {
+ "title": "jQuery API",
+ "uri": "http://api.jquery.com"
+ }
+ ],
+ "validations": [
+ "Use Web Inspector to test your ideas.",
+ "Make HTTP requests.",
+ "Serialize and deserialize JSON.",
+ "Access and manipulate DOM elements.",
+ "Register and remove event handlers.",
+ "Respond to events.",
+ "Define functions that operate on window or DOM in scope of window.",
+ "Organize code into Models, Views, and Controllers.",
+ "Use [Pub/Sub](http://en.wikipedia.org/wiki/Publish/subscribe) with DOM and non-DOM events.",
+ "Generate GUIDs.",
+ "Secure your application against cross-domain requests.",
+ "Persist data locally between page refreshes using localStorage.",
+ "Use the HTML5 History API.",
+ "Bind a view element to a Javascript object (usually a model)."
+ ]
+ }
+ ]
+}
View
60 trails/javascript.md
@@ -1,60 +0,0 @@
-Javascript
-==========
-
-Critical learning
------------------
-
-* Complete [Codecademy](http://www.codecademy.com) exercises.
-* Read [Eloquent Javascript](http://eloquentjavascript.net/contents.html).
-* Read [Javascript Web Applications](http://amzn.to/javascript-web-apps). ($)
-
-Validation
-----------
-
-You know everyday Javascript when you:
-
-* Use Web Inspector to test your ideas.
-* Run programs.
-* Avoid syntax errors.
-* Avoid global variables.
-* Print values.
-* Define a function.
-* Invoke a function.
-* Use common control flow structures.
-* Instantiate an object.
-* Initialize arrays using `[]`.
-* Initialize empty objects and hashes using `{}`.
-* Inherit classes using `prototype`.
-* Iterate over collections.
-* Use `CamelCase` for prototypes, `mixedCase` for variables and functions,
- `SCREAMING_SNAKE_CASE` for constants, `_single_leading_underscore` for
- private variables and functions.
-* Use the [module pattern](http://goo.gl/JDtHN) to control method visibility.
-
-You know everyday Javascript web programming when you:
-
-* Make HTTP requests.
-* Serialize and deserialize JSON.
-* Access and manipulate DOM elements.
-* Register and remove event handlers.
-* Respond to events.
-* Define functions that operate on `window` or DOM in scope of `window`.
-* Use `data-` attributes to bind event handlers.
-
-You know advanced Javavascript web programming when you can:
-
-* Organize code into Models, Views, and Controllers.
-* Use [Pub/Sub](http://en.wikipedia.org/wiki/Publish/subscribe) with DOM and
- non-DOM events.
-* Generate GUIDs.
-* Secure your application against cross-domain requests.
-* Persist data locally between page refreshes using `localStorage`.
-* Use the HTML5 History API.
-* Bind a view element to a Javascript object (usually a model).
-
-Ongoing reference
------------------
-
-* [Javascript: The Definitive Guide](http://amzn.to/ONeSOs)
- Core and Client-Side Reference chapters.
-* [jQuery API](http://api.jquery.com/).
View
147 trails/open-source.json
@@ -0,0 +1,147 @@
+{
+ "name": "Open Source",
+ "description": "A software philsophy that promotes free redistribution and access to source code.",
+ "prerequisites": [
+ "code-review",
+ "git",
+ "refactoring",
+ "unix",
+ "vim"
+ ],
+ "steps": [
+ {
+ "name": "Use open source",
+ "resources": [
+ {
+ "title": "Get a GitHub account",
+ "uri": "http://github.com"
+ },
+ {
+ "title": "Read about software licenses",
+ "uri": "http://playbook.thoughtbot.com/choosing-platforms/software-licenses/"
+ },
+ {
+ "title": "Read about the purpose and formatting of a NEWS file",
+ "uri": "http://www.gnu.org/prep/standards/html_node/NEWS-File.html#NEWS-File"
+ },
+ {
+ "title": "Read about the purpose and formatting of a ChangeLog file",
+ "uri": "http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs"
+ }
+ ],
+ "validations": [
+ "Evaluate a project based on quality of code, tests, documentation.",
+ "Evaluate a project based on responsiveness of maintainers to developers' questions and feature requests.",
+ "Evaluate a project based on regularity of releases.",
+ "Evaluate a project based on the appropriateness of its license for your needs.",
+ "Evaluate a project by downloading and trying it.",
+ "Search issues for a similar problem you're having.",
+ "Comment with additional data on issues that you're also having.",
+ "Submit new issues with good environment (Ruby version, OS, etc.) info, error messages, and backtraces so the maintainer can quickly replicate it."
+ ]
+ },
+ {
+ "name": "Contribute to open source",
+ "resources": [
+ {
+ "title": "Read 8 steps to fixing other people's code",
+ "uri": "http://rdd.me/tsf7khhg"
+ },
+ {
+ "title": "Read the Semantic Versioning specification",
+ "uri": "http://semver.org/"
+ }
+ ],
+ "validations": [
+ "Get annoyed by a defect or missing feature.",
+ "Find the source code.",
+ "Create a copy of the source (\"fork\" on Github).",
+ "Check out (git clone) the source.",
+ "Poke around the source in your editor and shell (grep).",
+ "Read the contribution guidelines.",
+ "Write a failing test in the style of the project's test suite.",
+ "Write code to make the test pass in the style of the project's codebase.",
+ "Make sure the entire test suite passes.",
+ "Create a patch (push to your fork on Github).",
+ "Submit a patch (\"pull request\" on Github).",
+ "If it exists, email the project's mailing list asking for feedback."
+ ]
+ },
+ {
+ "name": "Maintain an open source project",
+ "resources": [
+ {
+ "title": "Watch How to manage an open source project",
+ "uri": "http://vimeo.com/45214727"
+ },
+ {
+ "title": "Read the rubygems.org \"Make your own gem\" guide",
+ "uri": "http://guides.rubygems.org/make-your-own-gem/"
+ }
+ ],
+ "validations": [
+ "Apply an appropriate license to your project.",
+ "Document a clear public API.",
+ "Document where issues are managed, such as Github Issues.",
+ "Evaluate pull requests and provide kind, intelligent feedback.",
+ "Provide a clear place for questions, such as Stack Overflow. Only provide a Google Group mailing list if you're ready to support it.",
+ "Provide your code in easily accessible form (Rubygems, GitHub).",
+ "Select or reject open source software based on its license.",
+ "Use major, minor, and patch version numbers (Semantic Versioning)."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Berkeley DB",
+ "uri": "http://www.aosabook.org/en/bdb.html"
+ },
+ {
+ "title": "The Bourne-Again Shell",
+ "uri": "http://www.aosabook.org/en/bash.html"
+ },
+ {
+ "title": "Continuous Integration",
+ "uri": "http://www.aosabook.org/en/integration.html"
+ },
+ {
+ "title": "Git",
+ "uri": "http://www.aosabook.org/en/git.html"
+ },
+ {
+ "title": "The Glasgow Haskell Compiler",
+ "uri": "http://www.aosabook.org/en/ghc.html"
+ },
+ {
+ "title": "GNU Mailman",
+ "uri": "http://www.aosabook.org/en/mailman.html"
+ },
+ {
+ "title": "MediaWiki",
+ "uri": "http://www.aosabook.org/en/mediawiki.html"
+ },
+ {
+ "title": "nginx",
+ "uri": "http://www.aosabook.org/en/nginx.html"
+ },
+ {
+ "title": "Riak and Erlang/OTP",
+ "uri": "http://www.aosabook.org/en/riak.html"
+ },
+ {
+ "title": "Scalable Web Architecture and Distributed Systems",
+ "uri": "http://www.aosabook.org/en/distsys.html"
+ },
+ {
+ "title": "Sendmail",
+ "uri": "http://www.aosabook.org/en/sendmail.html"
+ },
+ {
+ "title": "Twisted",
+ "uri": "http://www.aosabook.org/en/twisted.html"
+ }
+ ]
+ }
+ ]
+}
View
78 trails/open-source.md
@@ -1,78 +0,0 @@
-Open Source
-===========
-
-Critical learning
------------------
-
-* Get a [GitHub](http://github.com) account ($/free).
-* Read [8 steps to fixing other people's code](http://rdd.me/tsf7khhg).
-* Watch [How to manage an open source project](http://vimeo.com/45214727).
-* Read the rubygems.org ["Make your own gem" guide](http://guides.rubygems.org/make-your-own-gem/).
-* Read the [Semantic Versioning specification](http://semver.org/).
-* Read about [software licenses](http://playbook.thoughtbot.com/choosing-platforms/software-licenses/).
-* Read about the purpose and formatting of a
- [`NEWS` file](http://www.gnu.org/prep/standards/html_node/NEWS-File.html#NEWS-File).
-* Read about the purpose and formatting of a
- [`ChangeLog` file](http://www.gnu.org/prep/standards/html_node/Change-Logs.html#Change-Logs).
-
-Validation
-----------
-
-You are an everyday open source user when you can:
-
-* Evaluate a project based on quality of code, tests, documentation.
-* Evaluate a project based on responsiveness of maintainers to developers'
- questions and feature requests.
-* Evaluate a project based on regularity of releases.
-* Evaluate a project based on the appropriateness of its license for your
- needs.
-* Evaluate a project by downloading and trying it.
-* Search issues for a similar problem you're having.
-* Comment with additional data on issues that you're also having.
-* Submit new issues with good environment (Ruby version, OS, etc.) info,
- error messages, and backtraces so the maintainer can quickly replicate it.
-
-You are an everyday open source contributor when you can:
-
-* Get annoyed by a defect or missing feature.
-* Find the source code.
-* Create a copy of the source ("fork" on [Github](http://github.com)).
-* Check out (`git clone`) the source.
-* Poke around the source in your editor and shell (`grep`).
-* Read the contribution guidelines.
-* Write a failing test in the style of the project's test suite.
-* Write code to make the test pass in the style of the project's codebase.
-* Make sure the entire test suite passes.
-* Create a patch (push to your fork on [Github](http://github.com)).
-* Submit a patch ("pull request" on [Github](http://github.com)).
-* If it exists, email the project's mailing list asking for feedback.
-
-You are an everyday open source maintainer when you can:
-
-* Apply an appropriate license to your project.
-* Document a clear public API.
-* Document where issues are managed, such as [Github](http://github.com) Issues.
-* Evaluate pull requests and provide kind, intelligent feedback.
-* Provide a clear place for questions, such as [Stack Overflow](http://stackoverflow.com). Only provide
- a [Google Group](http://groups.google.com) mailing list if you're ready to support it.
-* Provide your code in easily accessible form ([Rubygems](http://rubygems.org), [GitHub](http://github.com)).
-* Select or reject open source software based on its license.
-* Use major, minor, and patch version numbers ([Semantic Versioning](http://semver.org)).
-
-Ongoing reference
------------------
-
-Read selected chapters from "The Architecture of Open Source Applications":
-
-* [Berkeley DB](http://www.aosabook.org/en/bdb.html).
-* [The Bourne-Again Shell](http://www.aosabook.org/en/bash.html).
-* [Continuous Integration](http://www.aosabook.org/en/integration.html).
-* [Git](http://www.aosabook.org/en/git.html).
-* [The Glasgow Haskell Compiler](http://www.aosabook.org/en/ghc.html).
-* [GNU Mailman](http://www.aosabook.org/en/mailman.html).
-* [MediaWiki](http://www.aosabook.org/en/mediawiki.html).
-* [nginx](http://www.aosabook.org/en/nginx.html).
-* [Riak and Erlang/OTP](http://www.aosabook.org/en/riak.html).
-* [Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html).
-* [Sendmail](http://www.aosabook.org/en/sendmail.html).
-* [Twisted](http://www.aosabook.org/en/twisted.html).
View
84 trails/postgres.md
@@ -1,84 +0,0 @@
-Postgres
-========
-
-Critical learning
------------------
-
-Read these sections of the [Postgres manual](http://www.postgresql.org/docs/9.0/static/index.html):
-
-* 2.5\. [Querying a Table](http://www.postgresql.org/docs/9.0/static/tutorial-select.html)
-* 2.6\. [Joins Between Tables](http://www.postgresql.org/docs/9.0/static/tutorial-join.html)
-* 2.7\. [Aggregate Functions](http://www.postgresql.org/docs/9.0/static/tutorial-agg.html)
-* 3.5\. [Window Functions](http://www.postgresql.org/docs/9.0/static/tutorial-window.html)
-* 4\. [SQL Syntax](http://www.postgresql.org/docs/9.0/static/sql-syntax.html)
- - 4.1\. [Lexical Structure](http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html)
- - 4.2\. [Value Expressions](http://www.postgresql.org/docs/9.0/static/sql-expressions.html)
-* 5\. [Data Definition](http://www.postgresql.org/docs/9.0/static/ddl.html)
- - 5.1\. [Table Basics](http://www.postgresql.org/docs/9.0/static/ddl-basics.html)
- - 5.2\. [Default Values](http://www.postgresql.org/docs/9.0/static/ddl-default.html)
- - 5.3\. [Constraints](http://www.postgresql.org/docs/9.0/static/ddl-constraints.html)
- - 5.5\. [Modifying Tables](http://www.postgresql.org/docs/9.0/static/ddl-alter.html)
-* 6\. [Data Manipulation](http://www.postgresql.org/docs/9.0/static/dml.html)
- * 6.1\. [Inserting Data](http://www.postgresql.org/docs/9.0/static/dml-insert.html)
- * 6.2\. [Updating Data](http://www.postgresql.org/docs/9.0/static/dml-update.html)
- * 6.3\. [Deleting Data](http://www.postgresql.org/docs/9.0/static/dml-delete.html)
-* 7\. [Queries](http://www.postgresql.org/docs/9.0/static/queries.html)
- * 7.1\. [Overview](http://www.postgresql.org/docs/9.0/static/queries-overview.html)
- * 7.2\. [Table Expressions](http://www.postgresql.org/docs/9.0/static/queries-table-expressions.html)
- * 7.3\. [Select Lists](http://www.postgresql.org/docs/9.0/static/queries-select-lists.html)
- * 7.4\. [Combining Queries](http://www.postgresql.org/docs/9.0/static/queries-union.html)
- * 7.5\. [Sorting Rows](http://www.postgresql.org/docs/9.0/static/queries-order.html)
- * 7.6\. [LIMIT and OFFSET](http://www.postgresql.org/docs/9.0/static/queries-limit.html)
- * 7.7\. [VALUES Lists](http://www.postgresql.org/docs/9.0/static/queries-values.html)
- * 7.8\. [WITH Queries (Common Table Expressions)](http://www.postgresql.org/docs/9.0/static/queries-with.html)
-* 9\. [Functions and Operators](http://www.postgresql.org/docs/9.0/static/functions.html)
- * 9.1\. [Logical Operators](http://www.postgresql.org/docs/9.0/static/functions-logical.html)
- * 9.2\. [Comparison Operators](http://www.postgresql.org/docs/9.0/static/functions-comparison.html)
- * 9.7.1\. [LIKE](http://www.postgresql.org/docs/9.0/static/functions-matching.html#FUNCTIONS-LIKE)
- * 9.20\.[Subquery Expressions](http://www.postgresql.org/docs/9.0/static/functions-subquery.html)
-* 11\. [Indexes](http://www.postgresql.org/docs/9.0/static/indexes.html)
- * 11.1\. [Introduction](http://www.postgresql.org/docs/9.0/static/indexes-intro.html)
- * 11.5\. [Combining Multiple Indexes](http://www.postgresql.org/docs/9.0/static/indexes-bitmap-scans.html)
-* I. [SQL Commands](http://www.postgresql.org/docs/9.0/static/sql-commands.html)
- * [ALTER TABLE](http://www.postgresql.org/docs/9.0/static/sql-altertable.html)
- * [CREATE INDEX [ CONCURRENTLY ]](http://www.postgresql.org/docs/9.0/static/sql-createindex.html)
- * [CREATE TABLE](http://www.postgresql.org/docs/9.0/static/sql-createtable.html)
- * [DELETE](http://www.postgresql.org/docs/9.0/static/sql-delete.html)
- * [INSERT](http://www.postgresql.org/docs/9.0/static/sql-insert.html)
- * [SELECT](http://www.postgresql.org/docs/9.0/static/sql-select.html)
- * [UPDATE](http://www.postgresql.org/docs/9.0/static/sql-update.html)
-
-Read the following sections of the [SQL Cookbook](http://www.amazon.com/Cookbook-Cookbooks-OReilly-Anthony-Molinaro/dp/0596009763): ($)
-
-```shell
-Appendix A: Window Function Refresher
-Any recipes that interest you
-```
-
-Validation
-----------
-
-You know everyday SQL when you can:
-
-* Insert a new record.
-* Update one or more records.
-* Delete one or more records.
-* Find rows that satisfy one or more conditions.
-* Limit query results.
-* Order query results.
-* Average values in a column.
-* Find the mininum value in a column.
-* Find the maximum value in a column.
-* Sum values in a column.
-* Count values in a column.
-* Paginate results.
-* Suppress duplicates.
-* Answer negation questions. ("Which students don't take course 101?")
-* Answer limit questions. ("Which students take at least 2 courses?")
-* Answer exact questions. ("Which professors teach only 1 course?")
-* Answer relational division questions. ("Find a plane faster than all trains.")
-
-Ongoing reference
------------------
-
-Refer often to the Postgres manual.
View
76 trails/rails.json
@@ -0,0 +1,76 @@
+{
+ "name": "Ruby on Rails",
+ "description": "An open source full-stack web application framework for the Ruby programming language.",
+ "prerequisites": [
+ "css",
+ "git",
+ "html",
+ "javascript",
+ "ruby",
+ "unix",
+ "vim"
+ ],
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Complete Michael Hartl's Rails Tutorial",
+ "uri": "http://ruby.railstutorial.org"
+ },
+ {
+ "title": "Complete Rails Testing for Zombies",
+ "uri": "http://www.codeschool.com/courses/rails-testing-for-zombies"
+ },
+ {
+ "title": "Push your code to Github",
+ "uri": "http://github.com"
+ },
+ {
+ "title": "Deploy to Heroku",
+ "uri": "http://heroku.com"
+ },
+ {
+ "title": "Watch Railscasts",
+ "uri": "http://railscasts.com"
+ },
+ {
+ "title": "Read open source code: example",
+ "uri": "https://github.com/copycopter/copycopter-server"
+ }
+ ],
+ "validations": [
+ "Create a route, controller, and action.",
+ "Query the database.",
+ "Create a form that save records.",
+ "Associate ActiveRecord objects.",
+ "Validate ActiveRecord objects.",
+ "Whitelist ActiveRecord attributes.",
+ "Interpolate data in a view.",
+ "Write and run tests for your models.",
+ "Deploy your app to production."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Refer to the API documentation",
+ "uri": "http://api.rubyonrails.org"
+ },
+ {
+ "title": "Refer to the official guides",
+ "uri": "http://guides.rubyonrails.org"
+ },
+ {
+ "title": "Stick to a style guide",
+ "uri": "http://build.thoughtbot.com/style-guide"
+ },
+ {
+ "title": "Subscribe to the Rails Core mailing list",
+ "uri": "http://goo.gl/YU3Ml"
+ }
+ ]
+ }
+ ]
+}
View
67 trails/refactoring.json
@@ -0,0 +1,67 @@
+{
+ "name": "Refactoring",
+ "description": "Restructuring an existing body of code, altering its internal structure without changing its external behavior.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Introduce Explaining Variable",
+ "uri": "http://sourcemaking.com/refactoring/introduce-explaining-variable"
+ },
+ {
+ "title": "Read Rename Method",
+ "uri": "http://sourcemaking.com/refactoring/rename-method"
+ },
+ {
+ "title": "Read Extract Method",
+ "uri": "http://sourcemaking.com/refactoring/extract-method"
+ },
+ {
+ "title": "Read Move Method",
+ "uri": "http://sourcemaking.com/refactoring/move-method"
+ },
+ {
+ "title": "Read Replace Method with Method Object",
+ "uri": "http://sourcemaking.com/refactoring/replace-method-with-method-object"
+ },
+ {
+ "title": "Read Extract Class",
+ "uri": "http://sourcemaking.com/refactoring/extract-class"
+ },
+ {
+ "title": "Read Introduce Null Object",
+ "uri": "http://sourcemaking.com/refactoring/introduce-null-object"
+ },
+ {
+ "title": "Read Replace Conditional with Polymorphism",
+ "uri": "http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism"
+ }
+ ],
+ "validations": [
+ "Introduce an explaining variable.",
+ "Rename a method.",
+ "Extract a method.",
+ "Move a method.",
+ "Replace a method with an object.",
+ "Extract a class.",
+ "Introduce a null object.",
+ "Replace a conditional with polymorphism.",
+ "Replace inheritance with delegation."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Refactoring: Ruby Edition",
+ "uri": "http://amzn.to/ruby-refactoring"
+ },
+ {
+ "title": "Refactoring to Patterns",
+ "uri": "http://amzn.to/refactoring-to-patterns"
+ }
+ ]
+ }
+ ]
+}
View
38 trails/refactoring.md
@@ -1,38 +0,0 @@
-Refactoring
-===========
-
-Critical learning
------------------
-
-* Read [Introduce Explaining Variable](http://sourcemaking.com/refactoring/introduce-explaining-variable).
-* Read [Rename Method](http://sourcemaking.com/refactoring/rename-method).
-* Read [Extract Method](http://sourcemaking.com/refactoring/extract-method).
-* Read [Move Method](http://sourcemaking.com/refactoring/move-method).
-* Read [Replace Method with Method Object](http://sourcemaking.com/refactoring/replace-method-with-method-object).
-* Read [Extract Class](http://sourcemaking.com/refactoring/extract-class).
-* Read [Introduce Null Object](http://sourcemaking.com/refactoring/introduce-null-object).
-* Read [Replace Conditional with Polymorphism](http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism).
-
-Validation
-----------
-
-You know everyday refactoring when you can (safely):
-
-* Introduce an explaining variable.
-* Rename a method.
-* Extract a method.
-* Move a method.
-* Replace a method with an object.
-* Extract a class.
-* Introduce a null object.
-* Replace a conditional with polymorphism.
-
-You know advanced refactoring when you can (safely):
-
-* Replace inheritance with delegation.
-
-Ongoing reference
------------------
-
-* [Refactoring: Ruby Edition](http://amzn.to/ruby-refactoring) ($)
-* [Refactoring to Patterns](http://amzn.to/refactoring-to-patterns) ($)
View
80 trails/ruby.json
@@ -0,0 +1,80 @@
+{
+ "name": "Ruby",
+ "description": "A dynamic, general-purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features. Powers the Ruby on Rails framework.",
+ "steps": [
+ {
+ "name": "Get to know ruby",
+ "resources": [
+ {
+ "title": "First, Try Ruby!",
+ "uri": "http://tryruby.org"
+ },
+ {
+ "title": "Read Learn Ruby The Hard Way.",
+ "uri": "http://ruby.learncodethehardway.org/book/"
+ },
+ {
+ "title": "Read The Well-Grounded Rubyist.",
+ "uri": "http://amzn.to/grounded-rubyist"
+ }
+ ],
+ "validations": [
+ "Use irb to test your ideas.",
+ "Print values.",
+ "Run programs.",
+ "Avoid syntax errors.",
+ "Define a method.",
+ "Invode a method.",
+ "Use common control flow structures."
+ ]
+ },
+ {
+ "name": "Expand your knowledge.",
+ "resources": [
+ {
+ "title": "Complete the Ruby Koans.",
+ "uri": "http://rubykoans.com"
+ },
+ {
+ "title": "Read examples of source code, like this one.",
+ "uri": "https://github.com/jferris/effigy/tree/master/lib"
+ },
+ {
+ "title": "Read Chapters 23 and 24 of The Pickaxe",
+ "uri": "http://amzn.to/pickaxe-19"
+ }
+ ],
+ "validations": [
+ "Compare objects.",
+ "Define a class.",
+ "Instantiate an object.",
+ "Iterate over collections."
+ ]
+ },
+ {
+ "name": "Conform to a style guide",
+ "resources": [
+ {
+ "title": "Ruby Core Documentation",
+ "uri": "http://ruby-doc.org/core-1.9.3"
+ },
+ {
+ "title": "Ruby Library reference in The Pickaxe",
+ "uri": "http://amzn.to/pickaxe-19"
+ },
+ {
+ "title": "Github's Style Guide",
+ "uri": "https://github.com/styleguide/ruby"
+ },
+ {
+ "title": "Ruby Style Guide",
+ "uri": "https://github.com/bbatsov/ruby-style-guide"
+ },
+ {
+ "title": "thoughtbot's Style Guide",
+ "uri": "http://build.thoughtbot.com/style-guide"
+ }
+ ]
+ }
+ ]
+}
View
48 trails/ruby.md
@@ -1,48 +0,0 @@
-Ruby
-====
-
-Critical Learning
------------------
-
-* First, [Try Ruby](http://tryruby.org)!
-* Read [Learn Ruby The Hard Way](http://ruby.learncodethehardway.org/book/).
-* Read [The Well-Grounded Rubyist](http://amzn.to/grounded-rubyist). ($)
-* Complete the [Ruby Koans](http://rubykoans.com).
-* Read examples of source code, such as [this](https://github.com/jferris/effigy/tree/master/lib).
-* Read these sections of
- [The Pickaxe](http://amzn.to/pickaxe-19): ($)
-
-```shell
-Chapter 23, "Duck Typing"
-Chapter 24, "Classes and Objects"
-```
-
-Validation
-----------
-
-You know everyday Ruby when you:
-
-* Use irb to test your ideas.
-* Run programs.
-* Avoid syntax errors.
-* Print values.
-* Define a method.
-* Invoke a method.
-* Use common control flow structures.
-* Compare objects.
-* Define a class.
-* Instantiate an object.
-* Iterate over collections.
-
-You know intermediate Ruby when you:
-
-* Define a method which [takes a block as a parameter](http://blog.codahale.com/2005/11/24/a-ruby-howto-writing-a-method-that-uses-code-blocks/).
-* [Extract only keys or values from a Hash](http://www.jasimabasheer.com/posts/meta_introduction_to_ruby.html).
-* Assign default values for undefined keys in a Hash.
-
-Ongoing Reference
------------------
-
-* [Ruby Core Documentation](http://ruby-doc.org/core-1.9.3)
-* Ruby Library reference in The Pickaxe.
-* Stick to [a](https://github.com/styleguide/ruby) [style](https://github.com/bbatsov/ruby-style-guide) [guide](http://build.thoughtbot.com/style-guide)
View
37 trails/rubymotion.json
@@ -0,0 +1,37 @@
+{
+ "name": "RubyMotion",
+ "description": "An implementation of the Ruby programming language that runs on iOS.",
+ "prerequisites": [
+ "ruby",
+ "ios"
+ ],
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Purchase RubyMotion",
+ "uri": "http://sites.fastspring.com/hipbyte/product/rubymotion"
+ },
+ {
+ "title": "Complete the Getting Started",
+ "uri": "http://goo.gl/FAMxA"
+ },
+ {
+ "title": "Watch the Pragmatic Programmers' RubyMotion video",
+ "uri": "http://pragmaticstudio.com/screencasts/rubymotion"
+ },
+ {
+ "title": "Read the BubbleWrap source code",
+ "uri": "https://github.com/rubymotion/BubbleWrap"
+ }
+ ],
+ "validations": [
+ "Test-drive your app.",
+ "Change the user interface from console.",
+ "Discover the iOS framework libraries in your editor using ctags.",
+ "Submit your app to TestFlight."
+ ]
+ }
+ ]
+}
View
28 trails/rubymotion.md
@@ -1,28 +0,0 @@
-RubyMotion
-==========
-
-Critical Learning
------------------
-
-* Complete the [Ruby](/thoughtbot/trail-map/blob/master/trails/ruby.md) trail.
-* Complete the [iOS](/thoughtbot/trail-map/blob/master/trails/ios.md) trail.
-* [Purchase RubyMotion](http://sites.fastspring.com/hipbyte/product/rubymotion). ($)
-* Complete the [Getting Started](http://goo.gl/FAMxA) guide.
-* Watch the Pragmatic Programmers'
- [RubyMotion video](http://pragmaticstudio.com/screencasts/rubymotion).
-* Read the [BubbleWrap source code](https://github.com/rubymotion/BubbleWrap).
-
-Validation
-----------
-
-You know everyday RubyMotion when you can:
-
-* Test-drive your app.
-* Change the user interface from console.
-* Discover the iOS framework libraries in your editor using `ctags`.
-* Submit your app to TestFlight.
-
-Ongoing reference
------------------
-
-* `motion support`
View
29 trails/sass.json
@@ -0,0 +1,29 @@
+{
+ "name": "Sass",
+ "description": "A scripting language that is interpreted into CSS, that provides powerful functionality not provided by CSS live nesting, variables, and mixins.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read the Sass Tutorial",
+ "uri": "http://sass-lang.com/tutorial.html"
+ },
+ {
+ "title": "Read open source code",
+ "uri": "https://github.com/thoughtbot/bourbon/tree/master/app/assets/stylesheets"
+ },
+ {
+ "title": "Read the Sass Documentation",
+ "uri": "http://sass-lang.com/docs.html"
+ }
+ ],
+ "validations": [
+ "Create and use mixins.",
+ "Set and use variables.",
+ "Use nested selectors.",
+ "Use @include and @extend."
+ ]
+ }
+ ]
+}
View
23 trails/sass.md
@@ -1,23 +0,0 @@
-Sass
-====
-
-Critical learning
------------------
-
-* Read the [Sass Tutorial](http://sass-lang.com/tutorial.html).
-* Read open source code: [example](https://github.com/thoughtbot/bourbon/tree/master/app/assets/stylesheets).
-
-Validation
-----------
-
-You know everyday Sass when you can:
-
-* Create and use mixins.
-* Set and use variables.
-* Use nested selectors.
-* Use `@include` and `@extend`.
-
-Ongoing reference
------------------
-
-* Read the [Sass Documentation](http://sass-lang.com/docs.html).
View
203 trails/sql.json
@@ -0,0 +1,203 @@
+{
+ "name": "SQL",
+ "description": "A special-purpose programming language designed for managing data in relational database management systems. We recommend the SQL server PostgreSQL",
+ "steps": [
+ {
+ "name": "Read the following from the Postgres manual",
+ "resources": [
+ {
+ "title": "2.5. Querying a Table",
+ "uri": "http://www.postgresql.org/docs/9.0/static/tutorial-select.html"
+ },
+ {
+ "title": "2.6. Joins Between Tables",
+ "uri": "http://www.postgresql.org/docs/9.0/static/tutorial-join.html"
+ },
+ {
+ "title": "2.7. Aggregate Functions",
+ "uri": "http://www.postgresql.org/docs/9.0/static/tutorial-agg.html"
+ },
+ {
+ "title": "3.5. Window Functions",
+ "uri": "http://www.postgresql.org/docs/9.0/static/tutorial-window.html"
+ },
+ {
+ "title": "4. SQL Syntax",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-syntax.html"
+ },
+ {
+ "title": "4.1. Lexical Structure",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html"
+ },
+ {
+ "title": "4.2. Value Expressions",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-expressions.html"
+ },
+ {
+ "title": "5. Data Definition",
+ "uri": "http://www.postgresql.org/docs/9.0/static/ddl.html"
+ },
+ {
+ "title": "5.1. Table Basics",
+ "uri": "http://www.postgresql.org/docs/9.0/static/ddl-basics.html"
+ },
+ {
+ "title": "5.2. Default Values",
+ "uri": "http://www.postgresql.org/docs/9.0/static/ddl-default.html"
+ },
+ {
+ "title": "5.3. Constraints",
+ "uri": "http://www.postgresql.org/docs/9.0/static/ddl-constraints.html"
+ },
+ {
+ "title": "5.5. Modifying Tables",
+ "uri": "http://www.postgresql.org/docs/9.0/static/ddl-alter.html"
+ },
+ {
+ "title": "6. Data Manipulation",
+ "uri": "http://www.postgresql.org/docs/9.0/static/dml.html"
+ },
+ {
+ "title": "6.1. Inserting Data",
+ "uri": "http://www.postgresql.org/docs/9.0/static/dml-insert.html"
+ },
+ {
+ "title": "6.2. Updating Data",
+ "uri": "http://www.postgresql.org/docs/9.0/static/dml-update.html"
+ },
+ {
+ "title": "6.3. Deleting Data",
+ "uri": "http://www.postgresql.org/docs/9.0/static/dml-delete.html"
+ },
+ {
+ "title": "7. Queries",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries.html"
+ },
+ {
+ "title": "7.1. Overview",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-overview.html"
+ },
+ {
+ "title": "7.2. Table Expressions",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-table-expressions.html"
+ },
+ {
+ "title": "7.3. Select Lists",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-select-lists.html"
+ },
+ {
+ "title": "7.4. Combining Queries",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-union.html"
+ },
+ {
+ "title": "7.5. Sorting Rows",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-order.html"
+ },
+ {
+ "title": "7.6. LIMIT and OFFSET",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-limit.html"
+ },
+ {
+ "title": "7.7. VALUES Lists",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-values.html"
+ },
+ {
+ "title": "7.8. WITH Queries (Common Table Expressions)",
+ "uri": "http://www.postgresql.org/docs/9.0/static/queries-with.html"
+ },
+ {
+ "title": "9. Functions and Operators",
+ "uri": "http://www.postgresql.org/docs/9.0/static/functions.html"
+ },
+ {
+ "title": "9.1. Logical Operators",
+ "uri": "http://www.postgresql.org/docs/9.0/static/functions-logical.html"
+ },
+ {
+ "title": "9.2. Comparison Operators",
+ "uri": "http://www.postgresql.org/docs/9.0/static/functions-comparison.html"
+ },
+ {
+ "title": "9.7.1. LIKE",
+ "uri": "http://www.postgresql.org/docs/9.0/static/functions-matching.html#FUNCTIONS-LIKE"
+ },
+ {
+ "title": "Subquery Expressions",
+ "uri": "http://www.postgresql.org/docs/9.0/static/functions-subquery.html"
+ },
+ {
+ "title": "11. Indexes",
+ "uri": "http://www.postgresql.org/docs/9.0/static/indexes.html"
+ },
+ {
+ "title": "11.1. Introduction",
+ "uri": "http://www.postgresql.org/docs/9.0/static/indexes-intro.html"
+ },
+ {
+ "title": "11.5. Combining Multiple Indexes",
+ "uri": "http://www.postgresql.org/docs/9.0/static/indexes-bitmap-scans.html"
+ },
+ {
+ "title": "I. SQL Commands",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-commands.html"
+ },
+ {
+ "title": "[ALTER TABLE]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-altertable.html"
+ },
+ {
+ "title": "[CREATE INDEX [ CONCURRENTLY ]]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-createindex.html"
+ },
+ {
+ "title": "[CREATE TABLE]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-createtable.html"
+ },
+ {
+ "title": "[DELETE]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-delete.html"
+ },
+ {
+ "title": "[INSERT]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-insert.html"
+ },
+ {
+ "title": "[SELECT]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-select.html"
+ },
+ {
+ "title": "[UPDATE]",
+ "uri": "http://www.postgresql.org/docs/9.0/static/sql-update.html"
+ }
+ ],
+ "validations": [
+ "Insert a new record.",
+ "Update one or more records.",
+ "Delete one or more records.",
+ "Find rows that satisfy one or more conditions.",
+ "Limit query results.",
+ "Order query results.",
+ "Average values in a column.",
+ "Find the mininum value in a column.",
+ "Find the maximum value in a column.",
+ "Sum values in a column.",
+ "Count values in a column.",
+ "Paginate results.",
+ "Suppress duplicates.",
+ "Answer negation questions. (\"Which students don't take course 101?\")",
+ "Answer limit questions. (\"Which students take at least 2 courses?\")",
+ "Answer exact questions. (\"Which professors teach only 1 course?\")",
+ "Answer relational division questions. (\"Find a plane faster than all trains.\")"
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "SQL Cookbook",
+ "uri": "http://www.amazon.com/Cookbook-Cookbooks-OReilly-Anthony-Molinaro/dp/0596009763"
+ }
+ ]
+ }
+ ]
+}
View
43 trails/test-driven-development.json
@@ -0,0 +1,43 @@
+{
+ "name": "Testing",
+ "description": "A method of improving code quality and minimizing time requred to add new features to software by ensuring that each facet of the program works as expected.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Beginning Outside-In Rails Development with Cucumber and RSpec",
+ "uri": "http://blog.carbonfive.com/2012/02/14/beginning-outside-in-rails-development-with-cucumber-and-rspec/"
+ },
+ {
+ "title": "Read Martin Fowlers \"Mocks Aren't Stubs\"",
+ "uri": "http://martinfowler.com/articles/mocksArentStubs.html"
+ },
+ {
+ "title": "xUnit Test Patterns",
+ "uri": "http://amzn.to/x-test-patterns"
+ }
+ ],
+ "validations": [
+ "Understand the basics of mocking and stubbing in unit tests.",
+ "Name each phase of the Four Phase Test.",
+ "Identify a Mystery Guest."
+ ]
+ },
+ {
+ "name": "Test Driven Development",
+ "resources": [
+ {
+ "title": "Read Test-Driven Development By Example.",
+ "uri": "http://amzn.to/test-driven-dev"
+ }
+ ],
+ "validations": [
+ "Write a test before implementation.",
+ "Make the test error or fail.",
+ "Make the test pass by writing the simplest implementation possible.",
+ "Refactor."
+ ]
+ }
+ ]
+}
View
27 trails/test-driven-development.md
@@ -1,27 +0,0 @@
-Test-Driven Development
-=======================
-
-Critical learning
------------------
-
-* Read [Test-Driven Development By Example](http://amzn.to/test-driven-dev). ($)
-* Read [Beginning Outside-In Rails Development with Cucumber and RSpec](http://blog.carbonfive.com/2012/02/14/beginning-outside-in-rails-development-with-cucumber-and-rspec/).
-* Read [Martin Fowlers "Mocks Aren't Stubs"](http://martinfowler.com/articles/mocksArentStubs.html).
-
-Validation
-----------
-
-You know everyday TDD when you can:
-
-* Write a test before implementation.
-* Make the test error or fail.
-* Make the test pass by writing the simplest implementation possible.
-* Refactor.
-* Understand the basics of mocking and stubbing in unit tests.
-* Name each phase of the Four Phase Test.
-* Identify a Mystery Guest.
-
-Ongoing reference
------------------
-
-* [xUnit Test Patterns](http://amzn.to/x-test-patterns) ($)
View
72 trails/typography.json
@@ -0,0 +1,72 @@
+{
+ "name": "Typography",
+ "description": "The art and technique of arranging type in order to make language visible.",
+ "prerequisites": [
+ "css"
+ ],
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read The Elements of Typographic Style",
+ "uri": "http://amzn.to/elements-typographic-style"
+ },
+ {
+ "title": "Read The Elements of Typographic Style Applied to the Web",
+ "uri": "http://webtypography.net"
+ },
+ {
+ "title": "Read Thinking with Type",
+ "uri": "http://amzn.to/thinking-with-type"
+ },
+ {
+ "title": "Read Real Web Type in Real Web Context",
+ "uri": "http://www.alistapart.com/articles/real-web-type-in-real-web-context/"
+ },
+ {
+ "title": "Read On Web Typography",
+ "uri": "http://www.alistapart.com/articles/on-web-typography/"
+ },
+ {
+ "title": "Read More Meaningful Typography",
+ "uri": "http://www.alistapart.com/articles/more-meaningful-typography/"
+ },
+ {
+ "title": "Watch Tim Brown's More Perfect Typography",
+ "uri": "https://vimeo.com/17079380"
+ },
+ {
+ "title": "Read Stop Stealing Sheep & Find Out How Type Works",
+ "uri": "http://amzn.to/stop-stealing-sheep"
+ }
+ ],
+ "validations": [
+ "Choose a typeface which matches the style of a design.",
+ "Constrain lines of type to the proper length.",
+ "Create type hierarchy with size, space, color, emphasis, and weight.",
+ "Pair two or more typefaces in a design and make it look good.",
+ "Space letters horizontally (kern).",
+ "Space lines of type vertically with line-height (leading).",
+ "Use the vocabulary of typography with teammates."
+ ]
+ },
+ {
+ "name": "Ongoing Reference",
+ "resources": [
+ {
+ "title": "Browse I Love Typography",
+ "uri": "http://www.ilovetypography.com"
+ },
+ {
+ "title": "Browse Typedia",
+ "uri": "http://typedia.org"
+ },
+ {
+ "title": "Browse the Typophile Forums",
+ "uri": "http://typophile.com"
+ }
+ ]
+ }
+ ]
+}
View
34 trails/typography.md
@@ -1,34 +0,0 @@
-Typography
-==========
-
-Critical learning
------------------
-
-* Read [The Elements of Typographic Style](http://amzn.to/elements-typographic-style) ($) and
- [how it applies to the web](http://webtypography.net).
-* Read [Thinking with Type](http://amzn.to/thinking-with-type).
-* Read [Real Web Type in Real Web Context](http://www.alistapart.com/articles/real-web-type-in-real-web-context/).
-* Read [On Web Typography](http://www.alistapart.com/articles/on-web-typography/).
-* Read [More Meaningful Typography](http://www.alistapart.com/articles/more-meaningful-typography/).
-* Watch [Tim Brown's More Perfect Typography](https://vimeo.com/17079380).
-* Read [Stop Stealing Sheep & Find Out How Type Works](http://amzn.to/stop-stealing-sheep). ($)
-
-Validation
-----------
-
-You know everyday typography when you can:
-
-* Choose a typeface which matches the style of a design.
-* Constrain lines of type to the proper length.
-* Create type hierarchy with size, space, color, emphasis, and weight.
-* Pair two or more typefaces in a design and make it look good.
-* Space letters horizontally (kern).
-* Space lines of type vertically with `line-height` (leading).
-* Use the vocabulary of typography with teammates.
-
-Ongoing reference
------------------
-
-* Browse [I Love Typography](http://www.ilovetypography.com).
-* Browse [Typedia](http://typedia.org).
-* Browse the [Typophile](http://typophile.com) Forums.
View
22 trails/unix.json
@@ -0,0 +1,22 @@
+{
+ "name": "UNIX",
+ "description": "A multitasking, multi-user computer operating system originally developed in 1969, variants of which now form the underpinning of many operating systems, including OS X, iOS, and Linux.",
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read The Linux Programming Interface. Chapters 1, 2, 6, 8, 10, 14, 15, 18, 25, 44, 62.",
+ "uri": "http://amzn.to/the-linux-programming-interface"
+ },
+ {
+ "title": "Read about I/O redirection.",
+ "uri": "http://en.wikipedia.org/wiki/Redirection_%28computing%29"
+ }
+ ],
+ "validations": [
+ "You can use these commands and operators: |, <, >, >>, &, ack, awk, cat, chmod, chown, cp, export, find, kill, locate, ls, mkdir, mv, ps, rm, sed, sort, tail, top, vim, whereis, xargs"
+ ]
+ }
+ ]
+}
View
49 trails/unix.md
@@ -1,49 +0,0 @@
-Unix
-====
-
-Critical learning
------------------
-
-* Read [The Linux Programming Interface](http://amzn.to/the-linux-programming-interface). ($) Chapters 1,2,6,8,10,14,15,18,25,44,62.
-* Read about [I/O redirection](http://en.wikipedia.org/wiki/Redirection_%28computing%29).
-
-Validation
-----------
-
-You know everyday Unix when you can use the following commands and operators:
-
- |
- <
- >
- >>
- &
- ack
- awk
- cat
- chmod
- chown
- cp
- export
- find
- kill
- locate
- ls
- mkdir
- mv
- ps
- rm
- sed
- sort
- tail
- top
- vim
- whereis
- xargs
-
-Ongoing reference
------------------
-
-For each command, refer to the man pages often:
-
- man <command>
-
View
73 trails/vim.json
@@ -0,0 +1,73 @@
+{
+ "name": "Vim",
+ "description": "A text editor first released publicly in 1991. Vim's power is that it is keyboard driven and can be extensively customized.",
+ "prerequisites": [
+ "unix"
+ ],
+ "steps": [
+ {
+ "name": "Critical Learning",
+ "resources": [
+ {
+ "title": "Read Seven habits of effective text editing by vim author Bram Moolenaar.",
+ "uri": "http://www.moolenaar.net/habits.html"
+ },
+ {
+ "title": "Improve typing speed by playing Type Racer.",
+ "uri": "http://play.typeracer.com"
+ },
+ {
+ "title": "Complete vimtutor."
+ },
+ {
+ "title": "Learn the single-letter commands with the vim graphical cheat sheet.",
+ "uri": "http://www.viemu.com/vi-vim-cheat-sheet.gif"
+ },
+ {
+ "title": "Set up ctags for instanteous tab completion and jumping to method definitions.",
+ "uri": "http://robots.thoughtbot.com/post/159805638/integrating-vim-in