{"url":"https://api.github.com/gists/4342190","forks_url":"https://api.github.com/gists/4342190/forks","commits_url":"https://api.github.com/gists/4342190/commits","id":"4342190","node_id":"MDQ6R2lzdDQzNDIxOTA=","git_pull_url":"https://gist.github.com/4342190.git","git_push_url":"https://gist.github.com/4342190.git","html_url":"https://gist.github.com/mbostock/4342190","files":{".block":{"filename":".block","type":"text/plain","language":null,"raw_url":"https://gist.githubusercontent.com/mbostock/4342190/raw/ded3b85b138b11df265ed18ec7072431b912141a/.block","size":62,"truncated":false,"content":"redirect: https://observablehq.com/@mbostock/d3-spline-editor\n","encoding":"utf-8"},"README.md":{"filename":"README.md","type":"text/markdown","language":"Markdown","raw_url":"https://gist.githubusercontent.com/mbostock/4342190/raw/b2aa7c4d154d4e0dcfef4b6a5e3bd3511fb89d11/README.md","size":129,"truncated":false,"content":"Click to add new points. Hit the DELETE key to remove the selected point. Use the dropdown menu to change the interpolation mode.","encoding":"utf-8"},"index.html":{"filename":"index.html","type":"text/html","language":"HTML","raw_url":"https://gist.githubusercontent.com/mbostock/4342190/raw/5b45d1c46eb3ee297c53a8e6799d6f81521ad052/index.html","size":3115,"truncated":false,"content":"<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<title>Spline Editor</title>\n<style>\n\nbody {\n  font: 13px sans-serif;\n  position: relative;\n  width: 960px;\n  height: 500px;\n}\n\nform {\n  position: absolute;\n  bottom: 10px;\n  left: 10px;\n}\n\nrect {\n  fill: none;\n  pointer-events: all;\n}\n\ncircle,\n.line {\n  fill: none;\n  stroke: steelblue;\n  stroke-width: 1.5px;\n}\n\ncircle {\n  fill: #fff;\n  fill-opacity: .2;\n  cursor: move;\n}\n\n.selected {\n  fill: #ff7f0e;\n  stroke: #ff7f0e;\n}\n\n</style>\n<form>\n  <label for=\"interpolate\">Interpolate:</label>\n  <select id=\"interpolate\"></select><br>\n</form>\n<script src=\"//d3js.org/d3.v3.min.js\"></script>\n<script>\n\nvar width = 960,\n    height = 500;\n\nvar points = d3.range(1, 5).map(function(i) {\n  return [i * width / 5, 50 + Math.random() * (height - 100)];\n});\n\nvar dragged = null,\n    selected = points[0];\n\nvar line = d3.svg.line();\n\nvar svg = d3.select(\"body\").append(\"svg\")\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"tabindex\", 1);\n\nsvg.append(\"rect\")\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .on(\"mousedown\", mousedown);\n\nsvg.append(\"path\")\n    .datum(points)\n    .attr(\"class\", \"line\")\n    .call(redraw);\n\nd3.select(window)\n    .on(\"mousemove\", mousemove)\n    .on(\"mouseup\", mouseup)\n    .on(\"keydown\", keydown);\n\nd3.select(\"#interpolate\")\n    .on(\"change\", change)\n  .selectAll(\"option\")\n    .data([\n      \"linear\",\n      \"step-before\",\n      \"step-after\",\n      \"basis\",\n      \"basis-open\",\n      \"basis-closed\",\n      \"cardinal\",\n      \"cardinal-open\",\n      \"cardinal-closed\",\n      \"monotone\"\n    ])\n  .enter().append(\"option\")\n    .attr(\"value\", function(d) { return d; })\n    .text(function(d) { return d; });\n\nsvg.node().focus();\n\nfunction redraw() {\n  svg.select(\"path\").attr(\"d\", line);\n\n  var circle = svg.selectAll(\"circle\")\n      .data(points, function(d) { return d; });\n\n  circle.enter().append(\"circle\")\n      .attr(\"r\", 1e-6)\n      .on(\"mousedown\", function(d) { selected = dragged = d; redraw(); })\n    .transition()\n      .duration(750)\n      .ease(\"elastic\")\n      .attr(\"r\", 6.5);\n\n  circle\n      .classed(\"selected\", function(d) { return d === selected; })\n      .attr(\"cx\", function(d) { return d[0]; })\n      .attr(\"cy\", function(d) { return d[1]; });\n\n  circle.exit().remove();\n\n  if (d3.event) {\n    d3.event.preventDefault();\n    d3.event.stopPropagation();\n  }\n}\n\nfunction change() {\n  line.interpolate(this.value);\n  redraw();\n}\n\nfunction mousedown() {\n  points.push(selected = dragged = d3.mouse(svg.node()));\n  redraw();\n}\n\nfunction mousemove() {\n  if (!dragged) return;\n  var m = d3.mouse(svg.node());\n  dragged[0] = Math.max(0, Math.min(width, m[0]));\n  dragged[1] = Math.max(0, Math.min(height, m[1]));\n  redraw();\n}\n\nfunction mouseup() {\n  if (!dragged) return;\n  mousemove();\n  dragged = null;\n}\n\nfunction keydown() {\n  if (!selected) return;\n  switch (d3.event.keyCode) {\n    case 8: // backspace\n    case 46: { // delete\n      var i = points.indexOf(selected);\n      points.splice(i, 1);\n      selected = points.length ? points[i > 0 ? i - 1 : 0] : null;\n      redraw();\n      break;\n    }\n  }\n}\n\n</script>\n","encoding":"utf-8"},"thumbnail.png":{"filename":"thumbnail.png","type":"image/png","language":null,"raw_url":"https://gist.githubusercontent.com/mbostock/4342190/raw/d6db77291279b30e855ce8f58006c004375c6de7/thumbnail.png","size":8023,"truncated":false,"content":"iVBORw0KGgoAAAANSUhEUgAAAOYAAAB4CAIAAABpZBnfAAAKkWlDQ1BpY20A\nAEjHlZYHUJPZFsfv96U3WkIEpITekV6lhB6KdBBshCRAKCEGggjYkMUVWFFE\nRMCGLIoouCpFbIgF26JgwYJukEVAXcWCDZX3AY/w3rzZebMnc/L9cnLmn3Nv\n7p35A0CuZQuFKbAcAKmCDFGojztjcXQMA9cPiMiLBvDAgM1JFzKDgwPA38bH\n+wCaet4xndIC/yzkubx0DgBQMMJx3HROKsInkSzkCEUZAKDckLrOqgzhFHMR\npomQARHOmuKEGS6e4rgZ3jfdEx7qgTCigyez2aIEAEgdSJ2RyUlAdEgShM0F\nXL4AADKycuDCSWQj2uSpGUxSU9OmOBdhg7j/0En4L804qSabnSDlmbVMB96T\nny5MYa/+h9vx/yM1RTz7G+pIktOTw/yRpwKyZ1kctlfYLCfyWAGzLMxwD51l\nfgYrXNoj9o2YZXFyBHOWk9P8pf2CuEVBUv10j5hZzk4Mj5plLs/Ta5ZFaaHS\n/vTMMK+5fo9Fs5zE9gueZbZoei3TzEvxCZ2bOVg6pyBlkXQt8SJvaQ8vfW69\nGYnhvlJGDoC0n+/Nkq5X5DunnxIs1RSJQ6X7wBNESDW5bE/p3gIPwAcCwAOp\ngA0YwBd4ApDBy8qYGt4jTbhaxE9IzGAwkRvAM2GwBBwzE4aluYUlmLpPM3/X\n+wfT9wSi4+dqOWcBYOYAAPvP1SKNAKi/jRzjFXM1nTfI52YAzuRxxKLMmRp6\n6g2D3FNZ5KYqI6dBGxgAU2AJbIETcANewA8EgXAQDZYDDkhE5haBVSAXbAAF\noAhsBTtAJdgLDoBD4Cg4DlrBGXABXAE3wG1wDzwGEjAEXoIx8BFMQBCEgygQ\nFVKGNCBdyBiyhOwhF8gLCoBCoWgoFkqABJAYyoU2QkVQKVQJ7Yfqod+gU9AF\n6BrUAz2EBqBR6B30FUbBZJgGq8F68ALYHmbC/nA4vAxOgFfC2XA+vAWugGvg\nI3ALfAG+Ad+DJfBLeBwFUCQUHaWJMkXZozxQQagYVDxKhFqLKkSVo2pQjah2\nVBfqDkqCeoX6gsaiqWgG2hTthPZFR6A56JXotehidCX6ELoFfQl9Bz2AHkP/\nwFAwqhhjjCOGhVmMScCswhRgyjF1mGbMZcw9zBDmIxaLpWP1sXZYX2w0Ngmb\ngy3G7sY2YTuwPdhB7DgOh1PGGeOccUE4Ni4DV4DbhTuCO4/rxQ3hPuNJeA28\nJd4bH4MX4PPw5fjD+HP4XvwwfoIgR9AlOBKCCFzCakIJoZbQTrhFGCJMEOWJ\n+kRnYjgxibiBWEFsJF4m9hPfk0gkLZIDKYTEJ60nVZCOka6SBkhfyApkI7IH\neSlZTN5CPkjuID8kv6dQKHoUN0oMJYOyhVJPuUh5SvksQ5Uxk2HJcGXWyVTJ\ntMj0yryWJcjqyjJll8tmy5bLnpC9JftKjiCnJ+chx5ZbK1cld0quT25cnipv\nIR8knypfLH9Y/pr8iAJOQU/BS4GrkK9wQOGiwiAVRdWmelA51I3UWupl6hAN\nS9OnsWhJtCLaUVo3bUxRQdFaMVIxS7FK8ayihI6i69FZ9BR6Cf04/T796zy1\necx5vHmb5zXO6533SWm+kpsST6lQqUnpntJXZYayl3Ky8jblVuUnKmgVI5UQ\nlVUqe1Quq7yaT5vvNJ8zv3D+8fmPVGFVI9VQ1RzVA6o3VcfV1NV81IRqu9Qu\nqr1Sp6u7qSepl6mfUx/VoGq4aPA1yjTOa7xgKDKYjBRGBeMSY0xTVdNXU6y5\nX7Nbc0JLXytCK0+rSeuJNlHbXjteu0y7U3tMR0MnUCdXp0HnkS5B1143UXen\nbpfuJz19vSi9TXqteiP6Svos/Wz9Bv1+A4qBq8FKgxqDu4ZYQ3vDZMPdhreN\nYCMbo0SjKqNbxrCxrTHfeLdxjwnGxMFEYFJj0mdKNmWaZpo2mA6Y0c0CzPLM\nWs1eL9BZELNg24KuBT/MbcxTzGvNH1soWPhZ5Fm0W7yzNLLkWFZZ3rWiWHlb\nrbNqs3prbWzNs95j/cCGahNos8mm0+a7rZ2tyLbRdtROxy7Wrtquz55mH2xf\nbH/VAePg7rDO4YzDF0dbxwzH445vnEydkp0OO40s1F/IW1i7cNBZy5ntvN9Z\n4sJwiXXZ5yJx1XRlu9a4PnPTduO61bkNMw2ZScwjzNfu5u4i92b3Tx6OHms8\nOjxRnj6ehZ7dXgpeEV6VXk+9tbwTvBu8x3xsfHJ8Onwxvv6+23z7WGosDque\nNeZn57fG75I/2T/Mv9L/WYBRgCigPRAO9AvcHti/SHeRYFFrEAhiBW0PehKs\nH7wy+HQINiQ4pCrkeahFaG5oVxg1bEXY4bCP4e7hJeGPIwwixBGdkbKRSyPr\nIz9FeUaVRkkWL1i8ZvGNaJVofnRbDC4mMqYuZnyJ15IdS4aW2iwtWHp/mf6y\nrGXXlqssT1l+doXsCvaKE7GY2KjYw7Hf2EHsGvZ4HCuuOm6M48HZyXnJdeOW\ncUd5zrxS3nC8c3xp/EiCc8L2hNFE18TyxFd8D34l/22Sb9LepE/JQckHkydT\nolKaUvGpsamnBAqCZMGlNPW0rLQeobGwQChZ6bhyx8oxkb+oLh1KX5belkFD\njMtNsYH4J/FApktmVebnVZGrTmTJZwmybq42Wr159XC2d/avOegcTk5nrmbu\nhtyBNcw1+9dCa+PWdq7TXpe/bmi9z/pDG4gbkjf8nmeeV5r3YWPUxvZ8tfz1\n+YM/+fzUUCBTICro2+S0ae/P6J/5P3dvttq8a/OPQm7h9SLzovKib8Wc4uu/\nWPxS8cvklvgt3SW2JXu2YrcKtt7f5rrtUKl8aXbp4PbA7S1ljLLCsg87Vuy4\nVm5dvncncad4p6QioKJtl86urbu+VSZW3qtyr2qqVq3eXP1pN3d37x63PY17\n1fYW7f26j7/vwX6f/S01ejXlB7AHMg88r42s7frV/tf6OpW6orrvBwUHJYdC\nD12qt6uvP6x6uKQBbhA3jB5ZeuT2Uc+jbY2mjfub6E1Fx8Ax8bEXv8X+dv+4\n//HOE/YnGk/qnqxupjYXtkAtq1vGWhNbJW3RbT2n/E51tju1N582O33wjOaZ\nqrOKZ0vOEc/ln5s8n31+vEPY8epCwoXBzhWdjy8uvnj3Usil7sv+l69e8b5y\nsYvZdf6q89Uz1xyvnbpuf731hu2Nlps2N5t/t/m9udu2u+WW3a222w6323sW\n9pzrde29cMfzzpW7rLs37i2613M/4v6DvqV9kgfcByMPUx6+fZT5aOLx+n5M\nf+ETuSflT1Wf1vxh+EeTxFZydsBz4OazsGePBzmDL/9M//PbUP5zyvPyYY3h\n+hHLkTOj3qO3Xyx5MfRS+HLiVcFf8n9VvzZ4ffKN25ubY4vHht6K3k6+K36v\n/P7gB+sPnePB408/pn6c+FT4WfnzoS/2X7q+Rn0dnlj1Dfet4rvh9/Yf/j/6\nJ1MnJ4VsEXvaCqCQhOPjAXh3EABKNABUxD8QZWb87nRAMx59msDf8Ywnng5b\nAA4gnjYKST8k9yA+XBdJKvJVMPIMdwOwlZU0/x3p8VaWM1qkVsSalE9Ovkc8\n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\nNvDAfMhc0gwiEfV9T2eIpz5VcPDEQ7KGxjyfA/QlAGnqFrcbZ0ZS8Px8KCnl\nhKlv1lrQ6z1dfqjRChPmi1t4KI7ESZesFFYxY69VmtDfHZYh+iGve+EZmcL3\nHB3JGUt5Z7Xi9jyjHKTc8Mee4zQreubESxYBAKZGUtt1P+Ki511QGWn6erUq\nK34P8ArkDGcKyZ16C3oK/cr8wK16S6YOqiDXYDnpkgUA2WWjlHfmFsvQa89X\naefmN+pXpnLwIiEKIsvQLENb2WnC0X0DqdEvFrYvT2Tl5Mf9Fb5SxECyUl43\nzxcXtxuVpt9Df1mpobnFnVIukbT0F4pe3tZnStl7q1U4om/QfsTzWpUIposp\n+RBTxQCJgWShc6v91uz4H+6uCyJZenp4ELEV8Ecb9ZsXinCIe70cfyLvBJHY\nrHkM8ZCzSb2Wm/7txZ33Xy+B8mKHQDwkK9uzFTP2jbOFX91aCrk4fFdkedjv\n765dmy4YGjuS1m+cKxx+01XqteYF//PF8gevT5q6ppzYYRAPyQKAjKROF1NX\nz+R//pfH5baHQAcIVyapMMQ/P9hM2fqFsfThb9PykijlnLRjfPZoS+5BPO9g\nWcbIEFfL7m++WP7+tcl8ylLJh0MiZg1IZNlj1Q3+cGdtspC8ca4g7/LduoNu\n7L6bjfjx1+sRp/dfL/VQMimTa395a3GqkLw2Xdg9C3QmajfyEPT5/NZWrfX+\n1Qln+OWZp5mYSRY65S5E8OXj7cdbjfNj6YvjmcR+9TNbtdZnj7bGsok3z4/0\nUyYgiD6aW9E09u7MmG3sbZXsh/zhem1hsz5dTF+bzsuvU8l1eMRPstApaJFZ\nrfdWK2sVV2csnTCTti7v4HUvqLmBY+lXpwtZx+yzrEWazIfrtXurVdvQihnb\n0jUC8AJedf0g5GM55/Jk1tK1l9C1UxFLyUp2C7HRCncafqMVCAEaw4xjFtO2\nfA7CQO7R7abEADv11na9JRPAk7ZeSNmyreIwqhQV+xJjyUpEt+rrKG/1gKxT\nfHY06hSlHfc3cVqIvWS77K78Hl6n4j0PX1Bm9eXz6khWcUqITVxWoZAoySpi\nhpKsImYoySpihpKsImYoySpihpKsImYoySpihpKsImYoySpihpKsImYoySpi\nhpKsImYoySpiRpwe7zFYqFPbiABAnTbzqK7hk86p/gu5fkREAATIABmo3ppx\n4PRa2d/fWfP8SNfYB1cn9Ae/hO2HMPU2TL8LqgHByaZ3K0vw5IHcA/l5OfZN\nzvNwvWZo7G/fPDM2OvLlH34B9Xlx9luw8HuoLsJR2ycpXi5tK9stQ923HrVd\nX/r0W7GtfEIASJi664cAVG/xPHhgpjFdAs2CoCn/x6pd4YnlSe2X/EVKk4Bk\n97+2THf5eNQpBtyuB7cX6xrTOOftHirIEEkIYEx+kiGA4EL+9YmAMWQao2c6\nBSEi5+LyZLKUt1+CWOQUXzzeWdlpjmQS3ziXgc/+HVoVyJ2D6/+k9HrCQSEE\nIu5srhtOJp0wtncqhWIRAUgILrjGdL/llqvNiYmxyvaWncraliEffPyzj1em\nRhI6E7bjaMgYY77fEoCWYURRZBim77ocIJl0ZNssTdMCv+U2fTth7vECoogD\nsvsrtX98d9IyjmNFSAKiFhjOcf85FC+m3T1qdeHRZ/eWhLvTFJhPpxueZ2qm\n41iCkAKfGyYKf31ja3J8sua5P/rxP0yMFSMuvjmb/90vfl7VjJGRjNvCVEZv\nBS3UsrOz08sr96vzS6YOYSrLuGCMBRF59ZowRt/58KaIfMYYAABjvud98smn\n73/wwaP1RisUlsFejpWTfQkIgMlWnIYDJFSQ6+TT9mUTjuE46ZFiamVzY31t\nJdAyF88kVlcXAe1U2qFGuLJ0d2xy0mtW1stexDkicCFqjQZE/r2vvvyUo22n\nckUnk02tL3+VyyVuz90iYRn+9kqTNC4ajUYqm3Pdxsy1b4d+03U9KVlE9H2f\nR1G9XucRf5n3Y+mItx9zI51ypdc40PZlu45sFIVBEDqOs7GyXPaiS+cmGm4r\nl057nsc0DQAIiDHNNIyffbxkMmGyKODAEEgIphmMAecimUrxwK83vWQy4fu+\nxjSmaSQo4j7TTFPX9zgGiBhGvOzST7971tCUH6k4iH1ab+yOSxIR4JPnDXW7\nDiJCzQ3vLNcRNYZybYZE7Qds84gjQ03TOBeMPZkCkT0vnEVEl0rJYsZSax/F\nwewr2XZICzoBBGzrtH18PGNbileE3hsc0eHasR/hVNSloDgE/w/v+9tbXrcj\nXAAAAABJRU5ErkJggg==\n","encoding":"base64"}},"public":true,"created_at":"2012-12-20T01:06:50Z","updated_at":"2019-02-26T22:35:32Z","description":"Spline Editor","comments":2,"user":null,"comments_enabled":true,"comments_url":"https://api.github.com/gists/4342190/comments","owner":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"forks":[{"url":"https://api.github.com/gists/5426892","user":{"login":"jimkang","id":324298,"node_id":"MDQ6VXNlcjMyNDI5OA==","avatar_url":"https://avatars.githubusercontent.com/u/324298?v=4","gravatar_id":"","url":"https://api.github.com/users/jimkang","html_url":"https://github.com/jimkang","followers_url":"https://api.github.com/users/jimkang/followers","following_url":"https://api.github.com/users/jimkang/following{/other_user}","gists_url":"https://api.github.com/users/jimkang/gists{/gist_id}","starred_url":"https://api.github.com/users/jimkang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jimkang/subscriptions","organizations_url":"https://api.github.com/users/jimkang/orgs","repos_url":"https://api.github.com/users/jimkang/repos","events_url":"https://api.github.com/users/jimkang/events{/privacy}","received_events_url":"https://api.github.com/users/jimkang/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Jim Kang","company":null,"blog":"https://jimkang.com/","location":"Boston","email":null,"hireable":true,"bio":"Corporate credentials","twitter_username":null,"public_repos":556,"public_gists":129,"followers":189,"following":126,"created_at":"2010-07-06T14:12:20Z","updated_at":"2025-08-14T23:28:30Z"},"id":"5426892","created_at":"2013-04-20T18:23:45Z","updated_at":"2015-12-16T11:19:08Z"},{"url":"https://api.github.com/gists/7538304","user":{"login":"aficionado","id":547553,"node_id":"MDQ6VXNlcjU0NzU1Mw==","avatar_url":"https://avatars.githubusercontent.com/u/547553?v=4","gravatar_id":"","url":"https://api.github.com/users/aficionado","html_url":"https://github.com/aficionado","followers_url":"https://api.github.com/users/aficionado/followers","following_url":"https://api.github.com/users/aficionado/following{/other_user}","gists_url":"https://api.github.com/users/aficionado/gists{/gist_id}","starred_url":"https://api.github.com/users/aficionado/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aficionado/subscriptions","organizations_url":"https://api.github.com/users/aficionado/orgs","repos_url":"https://api.github.com/users/aficionado/repos","events_url":"https://api.github.com/users/aficionado/events{/privacy}","received_events_url":"https://api.github.com/users/aficionado/received_events","type":"User","user_view_type":"public","site_admin":false,"name":null,"company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":98,"public_gists":47,"followers":48,"following":9,"created_at":"2011-01-04T20:16:40Z","updated_at":"2026-03-27T01:44:31Z"},"id":"7538304","created_at":"2013-11-19T00:56:30Z","updated_at":"2015-12-28T17:49:05Z"},{"url":"https://api.github.com/gists/7964278","user":{"login":"aficionado","id":547553,"node_id":"MDQ6VXNlcjU0NzU1Mw==","avatar_url":"https://avatars.githubusercontent.com/u/547553?v=4","gravatar_id":"","url":"https://api.github.com/users/aficionado","html_url":"https://github.com/aficionado","followers_url":"https://api.github.com/users/aficionado/followers","following_url":"https://api.github.com/users/aficionado/following{/other_user}","gists_url":"https://api.github.com/users/aficionado/gists{/gist_id}","starred_url":"https://api.github.com/users/aficionado/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aficionado/subscriptions","organizations_url":"https://api.github.com/users/aficionado/orgs","repos_url":"https://api.github.com/users/aficionado/repos","events_url":"https://api.github.com/users/aficionado/events{/privacy}","received_events_url":"https://api.github.com/users/aficionado/received_events","type":"User","user_view_type":"public","site_admin":false,"name":null,"company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":98,"public_gists":47,"followers":48,"following":9,"created_at":"2011-01-04T20:16:40Z","updated_at":"2026-03-27T01:44:31Z"},"id":"7964278","created_at":"2013-12-14T20:09:49Z","updated_at":"2015-12-31T08:59:19Z"},{"url":"https://api.github.com/gists/8730691","user":{"login":"ff6347","id":315106,"node_id":"MDQ6VXNlcjMxNTEwNg==","avatar_url":"https://avatars.githubusercontent.com/u/315106?v=4","gravatar_id":"","url":"https://api.github.com/users/ff6347","html_url":"https://github.com/ff6347","followers_url":"https://api.github.com/users/ff6347/followers","following_url":"https://api.github.com/users/ff6347/following{/other_user}","gists_url":"https://api.github.com/users/ff6347/gists{/gist_id}","starred_url":"https://api.github.com/users/ff6347/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ff6347/subscriptions","organizations_url":"https://api.github.com/users/ff6347/orgs","repos_url":"https://api.github.com/users/ff6347/repos","events_url":"https://api.github.com/users/ff6347/events{/privacy}","received_events_url":"https://api.github.com/users/ff6347/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Fabian Morón Zirfas","company":"@fh-potsdam","blog":"https://fabianmoronzirfas.me","location":"Berlin","email":null,"hireable":true,"bio":"👋🏽  I'm Fabian. I'm a creative technologist, educator and master student @fh-potsdam living in Berlin who occasionally does stuff that involves things.","twitter_username":"fmoronzirfas","public_repos":540,"public_gists":489,"followers":467,"following":655,"created_at":"2010-06-26T09:38:16Z","updated_at":"2026-03-21T14:37:40Z"},"id":"8730691","created_at":"2014-01-31T11:51:45Z","updated_at":"2015-08-29T13:55:52Z"},{"url":"https://api.github.com/gists/15c321b3b06e77e967b1","user":{"login":"miklobit","id":1035161,"node_id":"MDQ6VXNlcjEwMzUxNjE=","avatar_url":"https://avatars.githubusercontent.com/u/1035161?v=4","gravatar_id":"","url":"https://api.github.com/users/miklobit","html_url":"https://github.com/miklobit","followers_url":"https://api.github.com/users/miklobit/followers","following_url":"https://api.github.com/users/miklobit/following{/other_user}","gists_url":"https://api.github.com/users/miklobit/gists{/gist_id}","starred_url":"https://api.github.com/users/miklobit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/miklobit/subscriptions","organizations_url":"https://api.github.com/users/miklobit/orgs","repos_url":"https://api.github.com/users/miklobit/repos","events_url":"https://api.github.com/users/miklobit/events{/privacy}","received_events_url":"https://api.github.com/users/miklobit/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"MK","company":"miklobit","blog":"","location":"Poland","email":null,"hireable":true,"bio":"Open source developer","twitter_username":null,"public_repos":606,"public_gists":128,"followers":6,"following":4,"created_at":"2011-09-08T07:57:29Z","updated_at":"2025-03-16T14:19:38Z"},"id":"15c321b3b06e77e967b1","created_at":"2014-09-22T07:43:49Z","updated_at":"2015-08-29T14:06:45Z"},{"url":"https://api.github.com/gists/b0b87c503b46c501e47f","user":{"login":"kschzt","id":293426,"node_id":"MDQ6VXNlcjI5MzQyNg==","avatar_url":"https://avatars.githubusercontent.com/u/293426?v=4","gravatar_id":"","url":"https://api.github.com/users/kschzt","html_url":"https://github.com/kschzt","followers_url":"https://api.github.com/users/kschzt/followers","following_url":"https://api.github.com/users/kschzt/following{/other_user}","gists_url":"https://api.github.com/users/kschzt/gists{/gist_id}","starred_url":"https://api.github.com/users/kschzt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kschzt/subscriptions","organizations_url":"https://api.github.com/users/kschzt/orgs","repos_url":"https://api.github.com/users/kschzt/repos","events_url":"https://api.github.com/users/kschzt/events{/privacy}","received_events_url":"https://api.github.com/users/kschzt/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Jaakko Manninen","company":null,"blog":"","location":"Finland","email":null,"hireable":null,"bio":"CEO","twitter_username":null,"public_repos":19,"public_gists":10,"followers":63,"following":9,"created_at":"2010-06-01T16:39:58Z","updated_at":"2025-12-15T10:12:33Z"},"id":"b0b87c503b46c501e47f","created_at":"2015-02-18T22:51:13Z","updated_at":"2015-08-29T14:15:42Z"},{"url":"https://api.github.com/gists/afd1540a11307e816124","user":{"login":"git-ashish","id":2697421,"node_id":"MDQ6VXNlcjI2OTc0MjE=","avatar_url":"https://avatars.githubusercontent.com/u/2697421?v=4","gravatar_id":"","url":"https://api.github.com/users/git-ashish","html_url":"https://github.com/git-ashish","followers_url":"https://api.github.com/users/git-ashish/followers","following_url":"https://api.github.com/users/git-ashish/following{/other_user}","gists_url":"https://api.github.com/users/git-ashish/gists{/gist_id}","starred_url":"https://api.github.com/users/git-ashish/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/git-ashish/subscriptions","organizations_url":"https://api.github.com/users/git-ashish/orgs","repos_url":"https://api.github.com/users/git-ashish/repos","events_url":"https://api.github.com/users/git-ashish/events{/privacy}","received_events_url":"https://api.github.com/users/git-ashish/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Ashish Singh","company":null,"blog":"https://iashishsingh.com","location":"Vadodara, Gujarat, India","email":null,"hireable":true,"bio":"Freelance Data Visualisation Consultant","twitter_username":null,"public_repos":153,"public_gists":157,"followers":21,"following":57,"created_at":"2012-11-01T08:37:06Z","updated_at":"2026-03-27T06:23:39Z"},"id":"afd1540a11307e816124","created_at":"2015-04-28T10:53:06Z","updated_at":"2015-08-29T14:20:06Z"},{"url":"https://api.github.com/gists/3ecdccb9890f50cf1fd5","user":{"login":"s2t2","id":1328807,"node_id":"MDQ6VXNlcjEzMjg4MDc=","avatar_url":"https://avatars.githubusercontent.com/u/1328807?v=4","gravatar_id":"","url":"https://api.github.com/users/s2t2","html_url":"https://github.com/s2t2","followers_url":"https://api.github.com/users/s2t2/followers","following_url":"https://api.github.com/users/s2t2/following{/other_user}","gists_url":"https://api.github.com/users/s2t2/gists{/gist_id}","starred_url":"https://api.github.com/users/s2t2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s2t2/subscriptions","organizations_url":"https://api.github.com/users/s2t2/orgs","repos_url":"https://api.github.com/users/s2t2/repos","events_url":"https://api.github.com/users/s2t2/events{/privacy}","received_events_url":"https://api.github.com/users/s2t2/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Michael Rossetti","company":null,"blog":"https://michael-rossetti.org/","location":"United States","email":null,"hireable":true,"bio":"@prof-rossetti @google","twitter_username":null,"public_repos":1016,"public_gists":117,"followers":235,"following":117,"created_at":"2012-01-13T21:07:55Z","updated_at":"2026-04-14T22:53:40Z"},"id":"3ecdccb9890f50cf1fd5","created_at":"2015-06-17T03:51:38Z","updated_at":"2015-08-29T14:23:13Z"},{"url":"https://api.github.com/gists/cb4b63f7d45950430c7c","user":{"login":"hlucasfranca","id":11790275,"node_id":"MDQ6VXNlcjExNzkwMjc1","avatar_url":"https://avatars.githubusercontent.com/u/11790275?v=4","gravatar_id":"","url":"https://api.github.com/users/hlucasfranca","html_url":"https://github.com/hlucasfranca","followers_url":"https://api.github.com/users/hlucasfranca/followers","following_url":"https://api.github.com/users/hlucasfranca/following{/other_user}","gists_url":"https://api.github.com/users/hlucasfranca/gists{/gist_id}","starred_url":"https://api.github.com/users/hlucasfranca/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hlucasfranca/subscriptions","organizations_url":"https://api.github.com/users/hlucasfranca/orgs","repos_url":"https://api.github.com/users/hlucasfranca/repos","events_url":"https://api.github.com/users/hlucasfranca/events{/privacy}","received_events_url":"https://api.github.com/users/hlucasfranca/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Henrique Lucas França","company":null,"blog":"https://www.linkedin.com/in/hlucasfranca/","location":"São Paulo - Brazil","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":43,"public_gists":52,"followers":58,"following":59,"created_at":"2015-04-03T20:30:38Z","updated_at":"2026-04-01T11:54:40Z"},"id":"cb4b63f7d45950430c7c","created_at":"2015-06-27T22:11:28Z","updated_at":"2015-08-29T14:23:51Z"},{"url":"https://api.github.com/gists/9eb8eb850f7d4c3e3efc","user":{"login":"duaneatat","id":191891,"node_id":"MDQ6VXNlcjE5MTg5MQ==","avatar_url":"https://avatars.githubusercontent.com/u/191891?v=4","gravatar_id":"","url":"https://api.github.com/users/duaneatat","html_url":"https://github.com/duaneatat","followers_url":"https://api.github.com/users/duaneatat/followers","following_url":"https://api.github.com/users/duaneatat/following{/other_user}","gists_url":"https://api.github.com/users/duaneatat/gists{/gist_id}","starred_url":"https://api.github.com/users/duaneatat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/duaneatat/subscriptions","organizations_url":"https://api.github.com/users/duaneatat/orgs","repos_url":"https://api.github.com/users/duaneatat/repos","events_url":"https://api.github.com/users/duaneatat/events{/privacy}","received_events_url":"https://api.github.com/users/duaneatat/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Duane Barlow","company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":7,"public_gists":6,"followers":16,"following":1,"created_at":"2010-01-28T22:44:21Z","updated_at":"2026-01-26T21:16:35Z"},"id":"9eb8eb850f7d4c3e3efc","created_at":"2016-02-18T03:21:24Z","updated_at":"2016-02-18T03:48:13Z"},{"url":"https://api.github.com/gists/229d21685e7eb082ae830cc5ff0508f3","user":{"login":"markmarkoh","id":11268,"node_id":"MDQ6VXNlcjExMjY4","avatar_url":"https://avatars.githubusercontent.com/u/11268?v=4","gravatar_id":"","url":"https://api.github.com/users/markmarkoh","html_url":"https://github.com/markmarkoh","followers_url":"https://api.github.com/users/markmarkoh/followers","following_url":"https://api.github.com/users/markmarkoh/following{/other_user}","gists_url":"https://api.github.com/users/markmarkoh/gists{/gist_id}","starred_url":"https://api.github.com/users/markmarkoh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markmarkoh/subscriptions","organizations_url":"https://api.github.com/users/markmarkoh/orgs","repos_url":"https://api.github.com/users/markmarkoh/repos","events_url":"https://api.github.com/users/markmarkoh/events{/privacy}","received_events_url":"https://api.github.com/users/markmarkoh/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Mark DiMarco","company":"Head of Engineering @ Buildforce","blog":"https://markmarkoh.com/","location":"Austin, TX","email":"mark.dimarco@gmail.com","hireable":null,"bio":null,"twitter_username":null,"public_repos":55,"public_gists":77,"followers":273,"following":4,"created_at":"2008-05-23T05:36:57Z","updated_at":"2025-12-07T18:34:08Z"},"id":"229d21685e7eb082ae830cc5ff0508f3","created_at":"2016-09-17T23:14:39Z","updated_at":"2016-09-18T01:25:01Z"},{"url":"https://api.github.com/gists/decd300f3e9cfceffe334d45081c3d7c","user":{"login":"lianyi","id":8431331,"node_id":"MDQ6VXNlcjg0MzEzMzE=","avatar_url":"https://avatars.githubusercontent.com/u/8431331?v=4","gravatar_id":"","url":"https://api.github.com/users/lianyi","html_url":"https://github.com/lianyi","followers_url":"https://api.github.com/users/lianyi/followers","following_url":"https://api.github.com/users/lianyi/following{/other_user}","gists_url":"https://api.github.com/users/lianyi/gists{/gist_id}","starred_url":"https://api.github.com/users/lianyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lianyi/subscriptions","organizations_url":"https://api.github.com/users/lianyi/orgs","repos_url":"https://api.github.com/users/lianyi/repos","events_url":"https://api.github.com/users/lianyi/events{/privacy}","received_events_url":"https://api.github.com/users/lianyi/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"lianyi","company":null,"blog":"","location":"Bethesda MD","email":null,"hireable":null,"bio":"Software Architect\r\nData Visualization\r\nFrontend\r\nBackend\r\nSQL/NoSQL\r\nUI/UX\r\niOS/Mobile\r\nJavaScript\r\nJava\r\nC/C++\r\nObject-C\r\nSwift\r\nPerl\r\nPython\r\nFortran","twitter_username":null,"public_repos":128,"public_gists":30,"followers":15,"following":8,"created_at":"2014-08-12T19:47:18Z","updated_at":"2025-12-08T14:46:59Z"},"id":"decd300f3e9cfceffe334d45081c3d7c","created_at":"2017-02-16T15:25:00Z","updated_at":"2017-02-16T15:25:00Z"},{"url":"https://api.github.com/gists/79ff815f8c1ab4cc06610cc004d3c7d3","user":{"login":"JulianRaya","id":1624288,"node_id":"MDQ6VXNlcjE2MjQyODg=","avatar_url":"https://avatars.githubusercontent.com/u/1624288?v=4","gravatar_id":"","url":"https://api.github.com/users/JulianRaya","html_url":"https://github.com/JulianRaya","followers_url":"https://api.github.com/users/JulianRaya/followers","following_url":"https://api.github.com/users/JulianRaya/following{/other_user}","gists_url":"https://api.github.com/users/JulianRaya/gists{/gist_id}","starred_url":"https://api.github.com/users/JulianRaya/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JulianRaya/subscriptions","organizations_url":"https://api.github.com/users/JulianRaya/orgs","repos_url":"https://api.github.com/users/JulianRaya/repos","events_url":"https://api.github.com/users/JulianRaya/events{/privacy}","received_events_url":"https://api.github.com/users/JulianRaya/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Julian","company":null,"blog":"","location":null,"email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":8,"public_gists":5,"followers":2,"following":0,"created_at":"2012-04-09T01:13:14Z","updated_at":"2025-11-07T20:34:26Z"},"id":"79ff815f8c1ab4cc06610cc004d3c7d3","created_at":"2017-08-30T00:57:25Z","updated_at":"2017-08-30T01:18:39Z"},{"url":"https://api.github.com/gists/bd0e9218d2518b8df46278b886dfac4f","user":{"login":"IPWright83","id":1374775,"node_id":"MDQ6VXNlcjEzNzQ3NzU=","avatar_url":"https://avatars.githubusercontent.com/u/1374775?v=4","gravatar_id":"","url":"https://api.github.com/users/IPWright83","html_url":"https://github.com/IPWright83","followers_url":"https://api.github.com/users/IPWright83/followers","following_url":"https://api.github.com/users/IPWright83/following{/other_user}","gists_url":"https://api.github.com/users/IPWright83/gists{/gist_id}","starred_url":"https://api.github.com/users/IPWright83/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/IPWright83/subscriptions","organizations_url":"https://api.github.com/users/IPWright83/orgs","repos_url":"https://api.github.com/users/IPWright83/repos","events_url":"https://api.github.com/users/IPWright83/events{/privacy}","received_events_url":"https://api.github.com/users/IPWright83/received_events","type":"User","user_view_type":"public","site_admin":false,"name":"Ian Wright","company":null,"blog":"https://stackoverflow.com/users/21061/ian?tab=profile","location":"United Kingdom","email":null,"hireable":null,"bio":null,"twitter_username":null,"public_repos":32,"public_gists":20,"followers":14,"following":8,"created_at":"2012-01-24T12:44:49Z","updated_at":"2026-04-08T14:08:11Z"},"id":"bd0e9218d2518b8df46278b886dfac4f","created_at":"2018-03-23T15:08:13Z","updated_at":"2018-03-23T15:08:14Z"}],"history":[{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"af3992d34f8068a914aea002103319aef6b4173e","committed_at":"2019-02-26T22:35:31Z","change_status":{"total":2,"additions":1,"deletions":1},"url":"https://api.github.com/gists/4342190/af3992d34f8068a914aea002103319aef6b4173e"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"569c39522bee851491c862f4c1a6398c1443fdaf","committed_at":"2018-12-22T06:12:37Z","change_status":{"total":0,"additions":0,"deletions":0},"url":"https://api.github.com/gists/4342190/569c39522bee851491c862f4c1a6398c1443fdaf"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"8a112d4df64bc19b07ce76c4c5da7cae2155154b","committed_at":"2018-12-22T06:11:23Z","change_status":{"total":1,"additions":1,"deletions":0},"url":"https://api.github.com/gists/4342190/8a112d4df64bc19b07ce76c4c5da7cae2155154b"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"6a57cb11ed45c5d6893dc2d42826d8988c74569d","committed_at":"2015-10-31T01:24:00Z","change_status":{"total":2,"additions":1,"deletions":1},"url":"https://api.github.com/gists/4342190/6a57cb11ed45c5d6893dc2d42826d8988c74569d"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"6300cdaad679b4102bf765643a3ec226eb6082ba","committed_at":"2015-06-11T19:29:07Z","change_status":{"total":2,"additions":1,"deletions":1},"url":"https://api.github.com/gists/4342190/6300cdaad679b4102bf765643a3ec226eb6082ba"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"25313c5ae7fc904b7e0ce8af57bd8dd0bc40b4ff","committed_at":"2012-12-20T04:57:53Z","change_status":{"total":0,"additions":0,"deletions":0},"url":"https://api.github.com/gists/4342190/25313c5ae7fc904b7e0ce8af57bd8dd0bc40b4ff"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"9f29dc52d3174a5cc3462e02a1aac9130ac706f5","committed_at":"2012-12-20T01:11:23Z","change_status":{"total":5,"additions":4,"deletions":1},"url":"https://api.github.com/gists/4342190/9f29dc52d3174a5cc3462e02a1aac9130ac706f5"},{"user":{"login":"mbostock","id":230541,"node_id":"MDQ6VXNlcjIzMDU0MQ==","avatar_url":"https://avatars.githubusercontent.com/u/230541?v=4","gravatar_id":"","url":"https://api.github.com/users/mbostock","html_url":"https://github.com/mbostock","followers_url":"https://api.github.com/users/mbostock/followers","following_url":"https://api.github.com/users/mbostock/following{/other_user}","gists_url":"https://api.github.com/users/mbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbostock/subscriptions","organizations_url":"https://api.github.com/users/mbostock/orgs","repos_url":"https://api.github.com/users/mbostock/repos","events_url":"https://api.github.com/users/mbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mbostock/received_events","type":"User","user_view_type":"public","site_admin":false},"version":"2b4e321e87ec973d195cbdb532823e9a0157f0fc","committed_at":"2012-12-20T01:06:50Z","change_status":{"total":166,"additions":166,"deletions":0},"url":"https://api.github.com/gists/4342190/2b4e321e87ec973d195cbdb532823e9a0157f0fc"}],"truncated":false}