{"action":"created","comment":{"url":"https://api.github.com/repos/olinjs/olinjs/pulls/comments/23199751","id":23199751,"diff_hunk":"@@ -1 +1,519 @@\n-#Class 2\n+#Class2 - JavaScript\n+\n+## JavaScript is Everywhere\n+\n+### Atwood's Law\n+\n+>Any application that can be written in JavaScript, will eventually be written in JavaScript.\n+\n+[Jeff Atwood](http://blog.codinghorror.com/the-principle-of-least-power/)\n+\n+## The Language\n+\n+Luckily, you're probably already familiar with a language similar to JavaScript. Things like variable assignment,function definition, and control flow aren't much different from Python. We'll get into the differences later.\n+\n+Type `node` in your command line to bring up the Node JavaScript REPL (read-evaluate-print-loop).\n+\n+### Variable Assignment\n+\n+```node\n+> var x = 5\n+undefined\n+> x\n+5\n+```\n+\n+For the rest of this lesson (unless otherwise specified), `x` will be equal to the number `5` at the start of every example.\n+\n+Variable assignments in JavaScript start with `var`. If you omit `var`, the variable will be *implicitly global*. This is ***very bad*** — almost worse than the program just crashing with an error message. We'll go into why later.\n+\n+### Operators\n+\n+JavaScript operators are all the same as Python, except `**` doesn't exponentiate.\n+\n+```node\n+> 6 + 6\n+12\n+> x += 6\n+11\n+> x > 5\n+true\n+> 6 ** 6\n+...\n+```\n+\n+The `...` means the REPL is waiting for a certain input. In this case, it just means it's confused. Press `Ctrl+C` to get back to the prompt. The way to exponentiate in JavaScript is `Math.pow`:\n+\n+```node\n+> Math.pow(4, 2) // raise 4 to the power of 2\n+16\n+```\n+\n+The [`Math` object](http://www.w3schools.com/jsref/jsref_obj_math.asp) (we'll cover objects later) has lots of other useful constants and functions.\n+\n+#### Checking for equality\n+\n+Here's an important corollary to what I just claimed: JavaScript has two ways to check for equality: `==` and `===`.\n+\n+Double-equals does things you might expect, like this:\n+\n+```node\n+> 5 == 5\n+true\n+> x == 5\n+true\n+```\n+\n+But it will also do things you probably won't be expecting, like this:\n+\n+```node\n+> '5' == 5\n+true\n+> ' ' == 0\n+true\n+```\n+\n+This happens because the `==` operator performs what's known as \"type coercion\", or implicit type conversion. If the variables being compared have different types, JavaScript will convert one to the type of the other before comparing them.\n+\n+The `===` operator is also known as \"identically equal\" or \"strict equals\". It doesn't perform type coercion, so variables of different types will not be reported equal.\n+\n+```node\n+> '5' === 5\n+false\n+> ' ' === 0\n+false\n+```\n+\n+Usually, you're expecting this behavior. If in doubt, use `===` (triple-equals).\n+\n+##### Checking for inequality\n+\n+JavaScript also has `!=` and `!==`. All the same rules apply — `!==` is generally safer.\n+\n+## Types\n+\n+JavaScript variables can have one of the following types:\n+\n+- `Undefined`\n+- `Null`\n+- `Boolean`\n+- `String`\n+- `Number`\n+- `Object`\n+\n+The types `Boolean`, `String`, `Number`, and `Object` all provide functions to convert, or cast, expressions to their type.\n+\n+```node\n+> String(5)\n+'5'\n+> Boolean(0)\n+false\n+> Boolean(5) // any non-zero number\n+true\n+> Number('5.6789123456789123456789')\n+5.678912345678913\n+```\n+\n+The `Number()` typecast supports strings and floating point numbers (and even rounds!). No need to write your own number parsing code!\n+\n+The next behavior is arguably worse than throwing an error, but also cool: You *can* do string multiplication in JavaScript!\n+\n+```node\n+> '3' * '4'\n+12\n+```\n+\n+Not really, though. It's a number now.\n+\n+```node\n+> typeof('3' * '4')\n+'number'\n+```\n+\n+String addition works as expected.\n+\n+```node\n+> 'a' + 'b'\n+'ab'\n+> '5' + '5'\n+'55'\n+> '5' - '5'\n+0\n+```\n+\n+Well, anyway...\n+\n+JavaScript, like Python, is dynamically typed. This means that a variable's type isn't determined until runtime. But since JavaScript is also very weakly typed (while Python is not), functions will usually be able to operate on arguments of the wrong type (by coercing them, for example), which means a program can fail unexpectedly long after a type-related mistake is made. In this case, error messages are usually not helpful, so the best thing to do is be careful and think ahead as you write your code.\n+\n+## Functions\n+\n+Functions make complexity manageable! JavaScript is all about functions. Let's make some.\n+\n+At this point we should start putting our code in files. If you have a JavaScript file:\n+\n+###### functions.js\n+```node\n+function func1() {\n+\treturn 1;\n+}\n+```\n+\n+You can run it like this:\n+\n+```bash\n+$ node functions.js\n+```\n+\n+In `functions.js`, we declare a function named `func1` that takes no arguments and returns the number `1`.\n+\n+We can add to `functions.js` to learn more about `func1`.\n+\n+###### functions.js\n+```node\n+...\n+console.log(func1)\n+console.log(func1())\n+```\n+\n+The function `console.log` does what you might expect — it logs arguments to the console.\n+\n+``` bash\n+$ node functions.js\n+[Function: func1]\n+1\n+```\n+\n+The two print statements we added to `functions.js` look almost the same, but the console output shows that they're very different. The first statement prints the function object `func1` — that is, the actual *entity* that represents the function itself (the code, the arguments, the scope in which it was declared — more on scope later). Node says that `func1` is a `Function` named `func1` — nothing unexpected here.\n+\n+Putting `()` next to the name of a function calls the function, so when we print `func1()` we get the return value of `func1`, which is `1`.\n+\n+`()` will actually always attempt to \"call\" the expression to its left, treating it like a function. So you can get errors like this:\n+\n+```node\n+> 5()\n+TypeError: number is not a function\n+```\n+\n+A variable can also store a function declaration, so we could have done this instead:\n+\n+```node\n+var func1 = function() {\n+\treturn 1;\n+};\n+```\n+\n+The above example wouldn't have acted *quite* the same, though, which brings us to what makes JavaScript functions so special.\n+\n+### Functions are Objects\n+\n+The print statements above hinted at this: in JavaScript, functions are objects. So something like this is possible:\n+\n+###### functions.js\n+```node\n+function func1() {\n+\tvar func2 = function() {\n+\t\treturn 2\n+\t};\n+\treturn func2;\n+}\n+```\n+\n+What will happen when we call `func1`?\n+\n+###### functions.js\n+```node\n+...\n+console.log(func1());\n+```\n+\n+```bash\n+$ node functions.js\n+[Function]\n+```\n+\n+The function `func1` is a named function that returns the variable `func2`. We set `func2` equal to a function definition without a name — the function on the right hand side of this assignment is known as an **anonymous function**.\n+\n+So, `func1` returns a variable containing an anonymous function which returns `2`. How do we call the returned anonymous function?\n+\n+###### functions.js\n+```node\n+...\n+console.log(func1()());\n+```\n+\n+```bash\n+$ node functions.js\n+2\n+```\n+\n+This is totally legal. It might help to break down the expression we just printed:\n+\n+```node\n+func1()(); // first, func1 is called\n+func2(); // it returns func2\n+(function() { return 2; })(); // func2 holds an anonymous function\n+2 // the anonymous function is called and returns 2\n+```\n+\n+## Callbacks\n+\n+Function objects let us pass around pieces of code that can be run at arbitrary times.\n+\n+Here's a really common situation: A client application requests data from a URL, and wants to process the data when it arrives. There's no way to know how long it will take the data to arrive, and even if there was, we wouldn't want to just block execution and wait until we got the data. This would be **synchronous execution**, where code is executed one line at a time, in order. It would be great if we could request the data and go about our business until we received it — then we could run the code that depends on the data. **Asynchronous execution**, where code is executed out of order (often in response to events), allows this. Luckily, this behavior is the norm in JavaScript.\n+\n+**Callbacks** are functions that we provide to be run when an event occurs. Here's an example with real code:\n+\n+```node\n+$.get(url, success);\n+```\n+\n+You might be familiar with dot syntax from Python — if you're not, we'll cover it soon. The `$` is a stand-in for jQuery, a ubiquitous client-side JavaScript library that adds a lot of useful functionality (like better DOM/CSS manipulation and asynchronous request functions) to JavaScript. `jQuery.get` (or `$.get`) is a method that requests data from the provided `url`.\n+\n+The second argument is a success callback — it is a function that will be called, and passed the response data as an argument, if the request is successful. We could call `$.get` like this:\n+\n+```node\n+$.get('www.some.url', function(data) {\n+\tconsole.log(data);\n+\tconsole.log('Request was successful!');\n+});\n+```\n+\n+`success` could also be a variable containing an anonymous function:\n+\n+```node\n+var handleSuccess = function(data) {\n+\tconsole.log(data);\n+\tconsole.log('Request was successful!');\n+};\n+\n+$.get('www.some.url', handleSuccess);\n+```\n+\n+It could even be a function declared somewhere else entirely, like this.\n+\n+```node\n+function globalSuccessHandler(data) {\n+\t...\n+}\n+...\n+$.get('www.some.url', globalSuccessHandler);\n+```\n+\n+### Closures\n+## Objects\n+\n+Objects in JavaScript are simple key-value stores, which you may know from Python as **dictionaries**.\n+\n+We can create an empty object like this:\n+\n+```node\n+> var obj = {}\n+undefined\n+```\n+\n+Properties can be added and accessed with dot syntax.\n+\n+```node\n+> obj.color = 'blue'\n+'blue'\n+> obj.color\n+'blue'\n+```\n+\n+Bracket syntax lets us use variables as keys.\n+\n+```node\n+> var colorKey = 'color'\n+undefined\n+> obj[colorKey]\n+'blue'\n+```\n+\n+Dot syntax is more concise than bracket syntax, so it's preferable unless bracket syntax is necessary (like if your key has a space, for some reason):\n+\n+```node\n+> obj['another color'] = 'red'\n+'red'\n+> obj['another color']\n+'red'\n+> obj\n+{ color: 'blue',\n+'another color': 'red' }\n+```\n+\n+Printing `obj` shows exactly how to declare objects that aren't empty. Objects can contain any variable type, including functions and other objects:\n+\n+```node\n+> var obj = {\n+... aBool: true,\n+... aString: 'string',\n+... aNum: 5.6,\n+... aFunc: function() { return 6; },\n+... anObj: { key: 'nesting is pretty great' }\n+... }\n+undefined\n+```\n+\n+Properties can be treated like you might expect:\n+\n+```node\n+> obj.aFunc\n+[Function]\n+> obj.aFunc()\n+6\n+> obj.anObj.key\n+'nesting is pretty great'\n+```\n+\n+JavaScript objects are versatile and ubiquitous — you'll see them everywhere. This brings us to the next section.\n+\n+### Arrays\n+\n+Arrays in JavaScript are also objects, which is why we covered objects first. Declare an array like this:\n+\n+```node\n+> var arr = []\n+undefined\n+```\n+\n+Or a filled one like this:\n+\n+```node\n+> var array = [1, 2, 3, 4]\n+undefined\n+```\n+\n+Arrays can contain any type, and need not contain variables of the same type.\n+\n+```node\n+> var jsArray = [true, 'string', function() { return 'why would anyone do this'; }]\n+undefined\n+> jsArray[2]()\n+'why would anyone do this'\n+```\n+\n+### Array Methods\n+\n+#### Array length\n+\n+Retrieve the length of an array with `Array.length`:\n+\n+```node\n+> array\n+[ 1, 2, 3, 4 ]\n+> array.length\n+4\n+```\n+\n+#### Appending and Prepending\n+\n+Use `push` to append an element to an array:\n+\n+```node\n+> array.push(5)\n+5\n+> array\n+[ 1, 2, 3, 4, 5 ]\n+```\n+\n+And `pop` to remove the last element (`pop` returns the last element):\n+\n+```node\n+> array.pop()\n+5\n+> array\n+[ 1, 2, 3, 4 ]\n+```\n+\n+Conversely, use `unshift` to prepend an element:\n+\n+```node\n+> array.unshift(0)\n+5\n+> array\n+[ 0, 1, 2, 3, 4 ]\n+```\n+\n+And `shift` to remove the first element (`shift` returns the first element):\n+\n+```node\n+> array.shift()\n+0\n+> array\n+[ 1, 2, 3, 4 ]\n+```\n+\n+#### Further Reading\n+\n+There are more built-in array methods, but we'll cover them later. JavaScript arrays generally act like Python arrays.\n+\n+Two good sources for documentation are [w3schools](http://www.w3schools.com/jsref/jsref_obj_array.asp) (easier to follow) and [Mozilla](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) (official and more complete).\n+\n+### Weird JavaScript Array Behavior (Optional)\n+\n+Since JavaScript arrays are objects, they kind of act like them:\n+\n+```node\n+> jsArray\n+[ true, 'string', [Function] ]\n+> jsArray.question = 'Am I an object?'\n+'Am I an object?'\n+> jsArray\n+[ true,\n+'string',\n+[Function],\n+question: 'Am I an object?' ]\n+```\n+\n+That string was actually stored as a property, not an element of the array:\n+\n+```node\n+> jsArray[3]\n+undefined\n+> jsArray.question\n+'Am I an object?'\n+```\n+\n+Arrays are, in fact, objects, but they're special. When you index an array with a non-negative integer, it acts like an array. Indexing an object similarly just casts the integer to a string and adds it as a key.\n+\n+```node\n+> typeof(jsArray)\n+'object'\n+> typeof(obj)\n+'object'\n+> obj[4] = 6\n+6\n+> obj\n+{ '4': 6,\n+aBool: true,\n+aString: 'string',\n+aNum: 5.6,\n+aFunc: [Function],\n+anObj: { key: 'nesting' } }\n+```\n+\n+So if you index an array with an invalid number, it won't throw an error.\n+\n+```node\n+> jsArray[-1] = -2\n+-2\n+> jsArray[3.141] = 'pi'\n+'pi'\n+> jsArray[6] = 5\n+5\n+> jsArray\n+[ true,\n+'string',\n+[Function],\n+,\n+,\n+,\n+5,\n+question: 'Am I an object?',\n+'-1': -2,\n+'3.141': 'pi' ]\n+```\n+\n+The moral of the story is that JavaScript is remarkably robust, whether you like it or not. It will run happily where other languages would choke, so it often falls to you to write good code that will prevent weird things from happening.","path":"classes/class2/README.md","position":594,"original_position":518,"commit_id":"3c6391e387f897ecf36aff6069d5b23224b3bbf0","original_commit_id":"ab756275e80e7bb225759938232e455d4edbd770","user":{"login":"EvanDorsky","id":2582895,"avatar_url":"https://avatars.githubusercontent.com/u/2582895?v=3","gravatar_id":"","url":"https://api.github.com/users/EvanDorsky","html_url":"https://github.com/EvanDorsky","followers_url":"https://api.github.com/users/EvanDorsky/followers","following_url":"https://api.github.com/users/EvanDorsky/following{/other_user}","gists_url":"https://api.github.com/users/EvanDorsky/gists{/gist_id}","starred_url":"https://api.github.com/users/EvanDorsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvanDorsky/subscriptions","organizations_url":"https://api.github.com/users/EvanDorsky/orgs","repos_url":"https://api.github.com/users/EvanDorsky/repos","events_url":"https://api.github.com/users/EvanDorsky/events{/privacy}","received_events_url":"https://api.github.com/users/EvanDorsky/received_events","type":"User","site_admin":false},"body":":+1:","created_at":"2015-01-20T02:28:17Z","updated_at":"2015-01-20T02:28:17Z","html_url":"https://github.com/olinjs/olinjs/pull/7#discussion_r23199751","pull_request_url":"https://api.github.com/repos/olinjs/olinjs/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/comments/23199751"},"html":{"href":"https://github.com/olinjs/olinjs/pull/7#discussion_r23199751"},"pull_request":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/olinjs/olinjs/pulls/7","id":26984965,"html_url":"https://github.com/olinjs/olinjs/pull/7","diff_url":"https://github.com/olinjs/olinjs/pull/7.diff","patch_url":"https://github.com/olinjs/olinjs/pull/7.patch","issue_url":"https://api.github.com/repos/olinjs/olinjs/issues/7","number":7,"state":"open","locked":false,"title":"[WIP] Class2","user":{"login":"EvanDorsky","id":2582895,"avatar_url":"https://avatars.githubusercontent.com/u/2582895?v=3","gravatar_id":"","url":"https://api.github.com/users/EvanDorsky","html_url":"https://github.com/EvanDorsky","followers_url":"https://api.github.com/users/EvanDorsky/followers","following_url":"https://api.github.com/users/EvanDorsky/following{/other_user}","gists_url":"https://api.github.com/users/EvanDorsky/gists{/gist_id}","starred_url":"https://api.github.com/users/EvanDorsky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/EvanDorsky/subscriptions","organizations_url":"https://api.github.com/users/EvanDorsky/orgs","repos_url":"https://api.github.com/users/EvanDorsky/repos","events_url":"https://api.github.com/users/EvanDorsky/events{/privacy}","received_events_url":"https://api.github.com/users/EvanDorsky/received_events","type":"User","site_admin":false},"body":"Kind of inspired by PyCharmers, but assuming students already know how to program. Not done with the early sections and I still have more to add on arrays, objects, scope, prototypes(?)","created_at":"2015-01-07T20:26:14Z","updated_at":"2015-01-20T02:28:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9948e726766a2db81a059e7a7f90eff69af1250f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/olinjs/olinjs/pulls/7/commits","review_comments_url":"https://api.github.com/repos/olinjs/olinjs/pulls/7/comments","review_comment_url":"https://api.github.com/repos/olinjs/olinjs/pulls/comments/{number}","comments_url":"https://api.github.com/repos/olinjs/olinjs/issues/7/comments","statuses_url":"https://api.github.com/repos/olinjs/olinjs/statuses/3c6391e387f897ecf36aff6069d5b23224b3bbf0","head":{"label":"olinjs:class2","ref":"class2","sha":"3c6391e387f897ecf36aff6069d5b23224b3bbf0","user":{"login":"olinjs","id":3213751,"avatar_url":"https://avatars.githubusercontent.com/u/3213751?v=3","gravatar_id":"","url":"https://api.github.com/users/olinjs","html_url":"https://github.com/olinjs","followers_url":"https://api.github.com/users/olinjs/followers","following_url":"https://api.github.com/users/olinjs/following{/other_user}","gists_url":"https://api.github.com/users/olinjs/gists{/gist_id}","starred_url":"https://api.github.com/users/olinjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olinjs/subscriptions","organizations_url":"https://api.github.com/users/olinjs/orgs","repos_url":"https://api.github.com/users/olinjs/repos","events_url":"https://api.github.com/users/olinjs/events{/privacy}","received_events_url":"https://api.github.com/users/olinjs/received_events","type":"Organization","site_admin":false},"repo":{"id":28649083,"name":"olinjs","full_name":"olinjs/olinjs","owner":{"login":"olinjs","id":3213751,"avatar_url":"https://avatars.githubusercontent.com/u/3213751?v=3","gravatar_id":"","url":"https://api.github.com/users/olinjs","html_url":"https://github.com/olinjs","followers_url":"https://api.github.com/users/olinjs/followers","following_url":"https://api.github.com/users/olinjs/following{/other_user}","gists_url":"https://api.github.com/users/olinjs/gists{/gist_id}","starred_url":"https://api.github.com/users/olinjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olinjs/subscriptions","organizations_url":"https://api.github.com/users/olinjs/orgs","repos_url":"https://api.github.com/users/olinjs/repos","events_url":"https://api.github.com/users/olinjs/events{/privacy}","received_events_url":"https://api.github.com/users/olinjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/olinjs/olinjs","description":"The second offering of Olin.js in the spring of 2015","fork":false,"url":"https://api.github.com/repos/olinjs/olinjs","forks_url":"https://api.github.com/repos/olinjs/olinjs/forks","keys_url":"https://api.github.com/repos/olinjs/olinjs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/olinjs/olinjs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/olinjs/olinjs/teams","hooks_url":"https://api.github.com/repos/olinjs/olinjs/hooks","issue_events_url":"https://api.github.com/repos/olinjs/olinjs/issues/events{/number}","events_url":"https://api.github.com/repos/olinjs/olinjs/events","assignees_url":"https://api.github.com/repos/olinjs/olinjs/assignees{/user}","branches_url":"https://api.github.com/repos/olinjs/olinjs/branches{/branch}","tags_url":"https://api.github.com/repos/olinjs/olinjs/tags","blobs_url":"https://api.github.com/repos/olinjs/olinjs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/olinjs/olinjs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/olinjs/olinjs/git/refs{/sha}","trees_url":"https://api.github.com/repos/olinjs/olinjs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/olinjs/olinjs/statuses/{sha}","languages_url":"https://api.github.com/repos/olinjs/olinjs/languages","stargazers_url":"https://api.github.com/repos/olinjs/olinjs/stargazers","contributors_url":"https://api.github.com/repos/olinjs/olinjs/contributors","subscribers_url":"https://api.github.com/repos/olinjs/olinjs/subscribers","subscription_url":"https://api.github.com/repos/olinjs/olinjs/subscription","commits_url":"https://api.github.com/repos/olinjs/olinjs/commits{/sha}","git_commits_url":"https://api.github.com/repos/olinjs/olinjs/git/commits{/sha}","comments_url":"https://api.github.com/repos/olinjs/olinjs/comments{/number}","issue_comment_url":"https://api.github.com/repos/olinjs/olinjs/issues/comments/{number}","contents_url":"https://api.github.com/repos/olinjs/olinjs/contents/{+path}","compare_url":"https://api.github.com/repos/olinjs/olinjs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/olinjs/olinjs/merges","archive_url":"https://api.github.com/repos/olinjs/olinjs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/olinjs/olinjs/downloads","issues_url":"https://api.github.com/repos/olinjs/olinjs/issues{/number}","pulls_url":"https://api.github.com/repos/olinjs/olinjs/pulls{/number}","milestones_url":"https://api.github.com/repos/olinjs/olinjs/milestones{/number}","notifications_url":"https://api.github.com/repos/olinjs/olinjs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/olinjs/olinjs/labels{/name}","releases_url":"https://api.github.com/repos/olinjs/olinjs/releases{/id}","created_at":"2014-12-30T23:29:53Z","updated_at":"2015-01-10T11:12:01Z","pushed_at":"2015-01-20T02:24:05Z","git_url":"git://github.com/olinjs/olinjs.git","ssh_url":"git@github.com:olinjs/olinjs.git","clone_url":"https://github.com/olinjs/olinjs.git","svn_url":"https://github.com/olinjs/olinjs","homepage":null,"size":1192,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":3,"forks":11,"open_issues":3,"watchers":1,"default_branch":"master"}},"base":{"label":"olinjs:master","ref":"master","sha":"16d500ef68aeeaadd5998d8b1fd9ab1bf7ea984f","user":{"login":"olinjs","id":3213751,"avatar_url":"https://avatars.githubusercontent.com/u/3213751?v=3","gravatar_id":"","url":"https://api.github.com/users/olinjs","html_url":"https://github.com/olinjs","followers_url":"https://api.github.com/users/olinjs/followers","following_url":"https://api.github.com/users/olinjs/following{/other_user}","gists_url":"https://api.github.com/users/olinjs/gists{/gist_id}","starred_url":"https://api.github.com/users/olinjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olinjs/subscriptions","organizations_url":"https://api.github.com/users/olinjs/orgs","repos_url":"https://api.github.com/users/olinjs/repos","events_url":"https://api.github.com/users/olinjs/events{/privacy}","received_events_url":"https://api.github.com/users/olinjs/received_events","type":"Organization","site_admin":false},"repo":{"id":28649083,"name":"olinjs","full_name":"olinjs/olinjs","owner":{"login":"olinjs","id":3213751,"avatar_url":"https://avatars.githubusercontent.com/u/3213751?v=3","gravatar_id":"","url":"https://api.github.com/users/olinjs","html_url":"https://github.com/olinjs","followers_url":"https://api.github.com/users/olinjs/followers","following_url":"https://api.github.com/users/olinjs/following{/other_user}","gists_url":"https://api.github.com/users/olinjs/gists{/gist_id}","starred_url":"https://api.github.com/users/olinjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olinjs/subscriptions","organizations_url":"https://api.github.com/users/olinjs/orgs","repos_url":"https://api.github.com/users/olinjs/repos","events_url":"https://api.github.com/users/olinjs/events{/privacy}","received_events_url":"https://api.github.com/users/olinjs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/olinjs/olinjs","description":"The second offering of Olin.js in the spring of 2015","fork":false,"url":"https://api.github.com/repos/olinjs/olinjs","forks_url":"https://api.github.com/repos/olinjs/olinjs/forks","keys_url":"https://api.github.com/repos/olinjs/olinjs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/olinjs/olinjs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/olinjs/olinjs/teams","hooks_url":"https://api.github.com/repos/olinjs/olinjs/hooks","issue_events_url":"https://api.github.com/repos/olinjs/olinjs/issues/events{/number}","events_url":"https://api.github.com/repos/olinjs/olinjs/events","assignees_url":"https://api.github.com/repos/olinjs/olinjs/assignees{/user}","branches_url":"https://api.github.com/repos/olinjs/olinjs/branches{/branch}","tags_url":"https://api.github.com/repos/olinjs/olinjs/tags","blobs_url":"https://api.github.com/repos/olinjs/olinjs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/olinjs/olinjs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/olinjs/olinjs/git/refs{/sha}","trees_url":"https://api.github.com/repos/olinjs/olinjs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/olinjs/olinjs/statuses/{sha}","languages_url":"https://api.github.com/repos/olinjs/olinjs/languages","stargazers_url":"https://api.github.com/repos/olinjs/olinjs/stargazers","contributors_url":"https://api.github.com/repos/olinjs/olinjs/contributors","subscribers_url":"https://api.github.com/repos/olinjs/olinjs/subscribers","subscription_url":"https://api.github.com/repos/olinjs/olinjs/subscription","commits_url":"https://api.github.com/repos/olinjs/olinjs/commits{/sha}","git_commits_url":"https://api.github.com/repos/olinjs/olinjs/git/commits{/sha}","comments_url":"https://api.github.com/repos/olinjs/olinjs/comments{/number}","issue_comment_url":"https://api.github.com/repos/olinjs/olinjs/issues/comments/{number}","contents_url":"https://api.github.com/repos/olinjs/olinjs/contents/{+path}","compare_url":"https://api.github.com/repos/olinjs/olinjs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/olinjs/olinjs/merges","archive_url":"https://api.github.com/repos/olinjs/olinjs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/olinjs/olinjs/downloads","issues_url":"https://api.github.com/repos/olinjs/olinjs/issues{/number}","pulls_url":"https://api.github.com/repos/olinjs/olinjs/pulls{/number}","milestones_url":"https://api.github.com/repos/olinjs/olinjs/milestones{/number}","notifications_url":"https://api.github.com/repos/olinjs/olinjs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/olinjs/olinjs/labels{/name}","releases_url":"https://api.github.com/repos/olinjs/olinjs/releases{/id}","created_at":"2014-12-30T23:29:53Z","updated_at":"2015-01-10T11:12:01Z","pushed_at":"2015-01-20T02:24:05Z","git_url":"git://github.com/olinjs/olinjs.git","ssh_url":"git@github.com:olinjs/olinjs.git","clone_url":"https://github.com/olinjs/olinjs.git","svn_url":"https://github.com/olinjs/olinjs","homepage":null,"size":1192,"stargazers_count":1,"watchers_count":1,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":11,"mirror_url":null,"open_issues_count":3,"forks":11,"open_issues":3,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/7"},"html":{"href":"https://github.com/olinjs/olinjs/pull/7"},"issue":{"href":"https://api.github.com/repos/olinjs/olinjs/issues/7"},"comments":{"href":"https://api.github.com/repos/olinjs/olinjs/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/olinjs/olinjs/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/olinjs/olinjs/statuses/3c6391e387f897ecf36aff6069d5b23224b3bbf0"}}}}