{"id":174375,"date":"2013-03-28T15:48:03","date_gmt":"2013-03-28T11:48:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=174375"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=174375","title":{"rendered":"<span class=\"post_title\">Github Visualizer \u2014 \u0421\u0435\u0440\u0432\u0438\u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 GitHub<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0411\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <a href=\"https:\/\/code.google.com\/p\/codeswarm\/\">code_swarm<\/a> \u0438 <a href=\"https:\/\/code.google.com\/p\/gource\/\">gource<\/a>. \u0412 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u044f \u0431\u044b\u043b \u043f\u043e\u0441\u0435\u0449\u0435\u043d \u043c\u0443\u0437\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u0430 \u043c\u0435\u043d\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 <a href=\"https:\/\/github.com\/\">GitHub<\/a>.<br \/>  \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043c\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"http:\/\/ghv.artzub.com\">GitHub Visualizer<\/a> (<a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\">\u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub<\/a>).<br \/>  \u0412\u043e\u0442 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430.<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"http:\/\/www.youtube.com\/embed\/WguqW5vcQWU?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><br \/>  \u0418 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f Gif&#8217;\u043a\u0430<br \/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/4.gif\" alt=\"image\"\/><\/p>\n<h5>\u0427\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e<\/h5>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/ru.wikipedia.org\/wiki\/SVG\">SVG<\/a>, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Canvas\">Canvas<\/a> \u2014 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/li>\n<li><a href=\"http:\/\/d3js.org\">D3.js<\/a> \u2014 javascript \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445.<br \/>  <a href=\"http:\/\/bl.ocks.org\/mbostock\">\u0413\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a> \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"http:\/\/bost.ocks.org\/mike\/\">Mike Bostock<\/a>.<\/li>\n<li><a href=\"http:\/\/developer.github.com\/\">API GitHub<\/a><\/li>\n<\/ul>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 \u0438 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445, \u0438\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u0445.<\/p>\n<h5>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432<\/h5>\n<p>  <b><i>\u0413\u0440\u0430\u0444 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432<\/i><\/b><br \/>  <a href=\"http:\/\/artzub.com\/ghv\/article\/vis_repo.png\"><img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/vis_repo_pre.png\" alt=\"\u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432\"\/><\/a><br \/>  <br clear=\"all\"\/>  <\/p>\n<ul>\n<li>\u041a\u0440\u0443\u0433\u0438 (\u0432\u0435\u0440\u0448\u0438\u043d\u044b) \u2014 \u044d\u0442\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0447\u0435\u043c \u0441\u0442\u0430\u0440\u0448\u0435, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435.<\/li>\n<li>\u041d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0434\u0430\u0442\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f <\/li>\n<li>\u0426\u0432\u0435\u0442 \u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u0440\u043e\u0440\u0438\u044f<br \/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/ml.png\" alt=\"main language\"\/>  <\/li>\n<li><b>\u0413\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u044f\u0437\u044b\u043a\u043e\u0432<\/b><br \/> \n<ul>\n<li>\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044f\u0437\u044b\u043a\u0443<\/li>\n<li>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0446\u0432\u0435\u0442 \u044f\u0437\u044b\u043a\u0430<\/li>\n<li>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438<\/li>\n<\/ul>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Force-Layout\">D3.Layout.Force<\/a> \u0438 \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432 <a href=\"http:\/\/bl.ocks.org\/mbostock\/1747543\">\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435<\/a>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var force = d3.layout.force()     .nodes(nodes)     .size([width, height])     .gravity(.02)     .charge(0)     .on(&quot;tick&quot;, tick)     .start();  function tick(e) {   circle       .each(cluster(10 * e.alpha * e.alpha))       .each(collide(.5))       .attr(&quot;cx&quot;, function(d) { return d.x; })       .attr(&quot;cy&quot;, function(d) { return d.y; }); }  \/\/ Move d to be adjacent to the cluster node. function cluster(alpha) {   var max = {};    \/\/ Find the largest node for each cluster.   nodes.forEach(function(d) {     if (!(d.color in max) || (d.radius &gt; max[d.color].radius)) {       max[d.color] = d;     }   });    return function(d) {     var node = max[d.color],         l,         r,         x,         y,         i = -1;      if (node == d) return;      x = d.x - node.x;     y = d.y - node.y;     l = Math.sqrt(x * x + y * y);     r = d.radius + node.radius;     if (l != r) {       l = (l - r) \/ l * alpha;       d.x -= x *= l;       d.y -= y *= l;       node.x += x;       node.y += y;     }   }; }  \/\/ Resolves collisions between d and all other circles. function collide(alpha) {   var quadtree = d3.geom.quadtree(nodes);   return function(d) {     var r = d.radius + radius.domain()[1] + padding,         nx1 = d.x - r,         nx2 = d.x + r,         ny1 = d.y - r,         ny2 = d.y + r;     quadtree.visit(function(quad, x1, y1, x2, y2) {       if (quad.point && (quad.point !== d)) {         var x = d.x - quad.point.x,             y = d.y - quad.point.y,             l = Math.sqrt(x * x + y * y),             r = d.radius + quad.point.radius + (d.color !== quad.point.color) * padding;         if (l &lt; r) {           l = (l - r) \/ l * alpha;           d.x -= x *= l;           d.y -= y *= l;           quad.point.x += x;           quad.point.y += y;         }       }       return x1 &gt; nx2           || x2 &lt; nx1           || y1 &gt; ny2           || y2 &lt; ny1;     });   }; } <\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>  <s>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0431\u044b\u043b\u0430 \u0442\u0430 \u043c\u0443\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u043b\u0430 \u043c\u0435\u043d\u044f.<\/s><br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0437\u044f\u0442\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<br \/>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/blob\/master\/repo.js\">repo.js<\/a> \u0438 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/blob\/master\/langhg.js\">langHg.js<\/a><\/p><\/blockquote>\n<h5>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/h5>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u0432\u0430\u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438\u043b\u0438 \u0432 \u0433\u0440\u0430\u0444\u0435, \u0438\u043b\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 (\u0442\u0430\u043a\u0436\u0435 \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043a\u043e\u043b-\u0432\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0435\u0432\u0438\u0437\u0438\u0439 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430).<br clear=\"left\"\/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/p2s.png\" alt=\"\u041f\u0430\u043d\u0435\u043b\u044c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430\"\/><br clear=\"right\"\/>  \u0417\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u00abAnalyze\u00bb. \u0412\u043e\u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u041d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u0430\u043c\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 (\u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 100 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438).<br \/>  <b><i>\u0413\u0440\u0430\u0444\u0438\u043a \u0438\u0441\u0442\u043e\u0440\u0438\u0438<\/i><\/b><br \/>  <a href=\"http:\/\/artzub.com\/ghv\/article\/vis_history.png\"><img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/vis_history_pre.png\" alt=\"image\"\/><\/a><br \/>  <br clear=\"all\"\/>  <\/p>\n<ul>\n<li>\u041e\u0441\u044c \u0425 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u044b \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438.<\/li>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u043a\u0440\u0430\u0441\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044e.<\/li>\n<li>\u0414\u0443\u0433\u0438 \u0432\u0432\u0435\u0440\u0445 \u0438 \u0432\u043d\u0438\u0437 \u2014 \u044d\u0442\u043e \u043a\u043e\u043b-\u0432\u0430 <b><font color=\"#aaccaa\">\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445<\/font><\/b> \u0438 <b><font color=\"#ccaaaa\">\u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445<\/font><\/b> \u0441\u0442\u0440\u043e\u043a \u0432 \u043a\u043e\u043c\u043c\u0438\u0442\u0435.<\/li>\n<li>\u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0437\u0430\u0434\u043d\u0435\u043c \u0444\u043e\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043a\u043e\u043b-\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. <br \/> \n<ul>\n<li><font color=\"#A5EC6E\">\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/font><\/li>\n<li><font color=\"#FFB877\">\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/font><\/li>\n<li><font color=\"#FF77B5\">\u0423\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 files<\/font><\/li>\n<\/ul>\n<p>  <\/li>\n<li><b>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432<\/b> \u2014 \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c.<br \/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/vis_history_person.png\" alt=\"\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432\"\/>  <\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u044f\u0434 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 d3.js.<br \/>  \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/SVG-Shapes#wiki-arc\">d3.svg.area()<\/a> (\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/bl.ocks.org\/mbostock\/3020685\">Stacked Area<\/a>). \u0421\u0442\u0435\u043a \u044f \u0441\u0447\u0438\u0442\u0430\u044e \u0441\u0430\u043c, \u043d\u043e \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f d3js.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430 \u0433\u0434\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0435\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var layers =     [         {             color: colors.deletedFile,             values: sorted.map(function (d) {                 return {t : 1, x: d.date, y0 : 0, y: (d.stats ? -d.stats.f.d : 0)}             })         },         {             color: colors.modifiedFile,             values: sorted.map(function (d) {                 return {x: d.date, y0 : 0, y: (d.stats ? d.stats.f.m : 0)}             })         },         {             color: colors.addedFile,             values: sorted.map(function (d) {                 return {x: d.date, y0: (d.stats ? d.stats.f.m : 0), y : (d.stats ? d.stats.f.a : 0)}             })         }     ] ;  function interpolateSankey(points) {     var x0 = points[0][0], y0 = points[0][1], x1, y1, x2,         path = [x0, &quot;,&quot;, y0],         i = 0,         n = points.length;     while (++i &lt; n) {         x1 = points[i][0];         y1 = points[i][1];         x2 = (x0 + x1) \/ 2;         path.push(&quot;C&quot;, x2, &quot;,&quot;, y0, &quot; &quot;, x2, &quot;,&quot;, y1, &quot; &quot;, x1, &quot;,&quot;, y1);         x0 = x1;         y0 = y1;     }     return path.join(&quot;&quot;); }  var y1 = d3.scale.linear()         .range([h6 * 4.5, h6 * 3, h6 * 1.5])         .domain([-data.stats.files, 0, data.stats.files]),     area = d3.svg.area()         .interpolate(interpolateSankey \/*&quot;linear&quot;  &quot;basis&quot;*\/)         .x(function(d) { return x(d.x); })         .y0(function(d) { return y1(d.y0); })         .y1(function(d) { return y1(d.y0 + d.y); })     ; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0434\u0443\u0433 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/SVG-Shapes#wiki-arc\">d3.svg.arc()<\/a> (\u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442: <a href=\"http:\/\/bl.ocks.org\/mbostock\/5100636\">Arc Tween<\/a>, <a href=\"http:\/\/bl.ocks.org\/mbostock\/1305111\">Pie Multiples<\/a>).<br \/>  \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0448\u043a\u0430\u043b\u044b X \u0434\u0435\u043b\u0430\u044e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Time-Scales\">d3.time.scale()<\/a> \u0438 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/SVG-Axes#wiki-axis\">d3.svg.axis<\/a>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <a href=\"http:\/\/bl.ocks.org\/mbostock\/4149176\">Custom Time Format<\/a>.<br \/>  \u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Pack-Layout\">d3.layout.pack()<\/a> (\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"http:\/\/bl.ocks.org\/mbostock\/4063530\">Circle Packing<\/a>). \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0440\u0443\u0433\u043e\u0432 \u044f \u043c\u0435\u043d\u044f\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <b>sort<\/b> \u0438 <b>value<\/b>.<br \/>  \u041a\u043e\u0434 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/blob\/master\/stat.js\">stat.js<\/a> \u0438 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/blob\/master\/usercommit.js\">usercommit.js<\/a><\/p><\/blockquote>\n<h5>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h5>\n<p>  \u0420\u0430\u0434\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u0438 \u0431\u044b\u043b\u0430 \u0432\u0441\u044f \u0437\u0430\u0442\u0435\u044f. \u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/code.google.com\/p\/codeswarm\/\">code_swarm<\/a>, \u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043a \u0441\u0435\u0431\u0435 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0430 \u0437\u0430\u0442\u0435\u043c \u0435\u0433\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e.<br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u043b\u043e\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0434\u0435\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 code_swarm \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043d\u0430 \u043b\u0435\u0442\u0443.<br \/>  <b><i>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/github.com\/ajacksified\/song-of-github\">song-of-github<\/a>, <a href=\"http:\/\/artzub.com\/ghv\/#repo=song-of-github&amp;climit=100&amp;user=ajacksified\">\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/a>, <a href=\"http:\/\/habrahabr.ru\/post\/173085\/\">\u0421\u0442\u0430\u0442\u044c\u044f \u043e Song-of-github \u043d\u0430 \u0445\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440\u0435<\/a><\/i><\/b><br \/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/4.gif\" alt=\"image\"\/><br \/>  <br clear=\"left\"\/>  <\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u044d\u0442\u043e \u0444\u0430\u0439\u043b. \u041e\u043d\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443.<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0435\u043c \u0447\u0430\u0449\u0435 \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u0442\u0435\u043c \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435.<\/li>\n<li>\u0426\u0432\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0421\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0447\u0430\u0441\u0442\u0438\u0446\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0442\u043e\u0436\u0435 \u0442\u0430\u0435\u0442. (\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 3 \u044d\u0442\u0430\u043f, <b>User Life<\/b> \u0438 <b>File Life<\/b>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u2014 \u0431\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u044b\u0435).<\/li>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f \u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u043a\u0438\u0434\u0430\u044e\u0442 \u043e\u0440\u0431\u0438\u0442\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438 \u043a \u043a\u043e\u043c\u0443 \u043d\u0435 \u043b\u0435\u0442\u0438\u0442, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u0443\u0434\u0430\u043b\u0435\u043d.<\/li>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0435\u043a\u0443\u043d\u0434\u0430 \u044d\u0442\u043e \u0434\u0435\u043d\u044c (\u043f\u043b\u0430\u043d\u0430\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0433\u0430)<\/li>\n<li>\u0413\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438, \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c<\/li>\n<li>\u041b\u0435\u0433\u0435\u043d\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b-\u0432\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e.<\/li>\n<\/ul>\n<blockquote><p>\u0420\u0430\u0441\u0447\u0435\u0442 \u0444\u0438\u0437\u0438\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u0441\u043b\u043e\u0432\u0443\u0442\u044b\u0439 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Force-Layout\">D3.Layout.Force<\/a>, \u043d\u043e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0443\u043f\u0443\u0449\u0435\u043d\u0438\u0435\u043c \u0438\u0445 \u0434\u0432\u0430. \u041e\u0434\u0438\u043d \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e? \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <b><code>author<\/code><\/b>, \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 (\u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u0430) \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0435\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0435\u0441\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438. \u0412\u044b\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">    function tick() {         if (_force.nodes()) {              _force.nodes()                 .forEach(cluster(0.025));              _forceAuthor.nodes(                 _forceAuthor.nodes()                     .filter(function(d) {                         blink(d, !d.links && setting.userLife &gt; 0);                         if (d.visible && d.links === 0 && setting.userLife &gt; 0) {                             d.flash = 0;                             d.alive = d.alive \/ 10;                         }                         return d.visible;                     })             );         }          _forceAuthor.resume();         _force.resume();     }      \/\/ Move d to be adjacent to the cluster node.     function cluster(alpha) {          authorHash.forEach(function(k, d) {             d.links = 0;         });          return function(d) {             blink(d, setting.fileLife &gt; 0);             if (!d.author || !d.visible)                 return;              var node = d.author,                 l,                 r,                 x,                 y;              if (node == d) return;             node.links++;              x = d.x - node.x;             y = d.y - node.y;             l = Math.sqrt(x * x + y * y);             r = radius(nr(d)) \/ 2 + (nr(node) + setting.padding);             if (l != r) {                 l = (l - r) \/ (l || 1) * (alpha || 1);                 x *= l;                 y *= l;                  d.x -= x;                 d.y -= y;             }         };     } <\/code><\/pre>\n<p>  \u0418 \u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 force layout&#8217;\u043e\u0432  <\/p>\n<pre><code class=\"javascript\">_force = (_force || d3.layout.force()     .stop()     .size([w, h])     .friction(.75)     .gravity(0)     .charge(function(d) {return -1 * radius(nr(d)); } )     .on(&quot;tick&quot;, tick))     .nodes([])     ;  .....  _forceAuthor = (_forceAuthor || d3.layout.force()     .stop()     .size([w, h])     .gravity(setting.padding * .001)     .charge(function(d) {         return -(setting.padding + d.size) * 8;     }))     .nodes([])     ; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c) \u043e\u0434\u0438\u043d \u044d\u0442\u043e <b><code>setInterval<\/code><\/b> \u0434\u0440\u0443\u0433\u043e\u0439 <b><code>requestAnimationFrame<\/code><\/b>. \u041f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0449\u0435 \u0438 force \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0438 asyncForEach (\u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431 \u0431\u044b\u043b \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043e\u0442\u043a\u043b\u0438\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0432\u044b\u043b\u0435\u0442\u0430\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443, \u0430 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439) \u0442\u043e\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 setTimeout&#8217;\u044b.<br \/>  \u041a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/blob\/master\/show.js\">show.js<\/a>.  <\/p><\/blockquote>\n<p>  <\/p>\n<h4>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u0441 <a href=\"https:\/\/api.github.com\/\">api.github.com<\/a>.<br \/>  \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0435 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/JSON#JSONP_.26_JSONPP\">JSONP<\/a>.<br \/>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"http:\/\/developer.github.com\/\">API GitHub<\/a> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 <b><code>Client_id<\/code><\/b> \u0438 <b><code>Client_Secret<\/code><\/b>, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043b\u0438\u043c\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 60 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e ip \u0432 \u0447\u0430\u0441. \u041f\u043e \u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/settings\/applications\">\u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043d\u0430 GitHub<\/a> \u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. <br \/>  \u042d\u0442\u043e \u044f \u043a \u0447\u0435\u043c\u0443 \u0432\u0441\u0435\u2026 \u0410 \u043a \u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 5000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0447\u0430\u0441, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0442\u0438\u043f\u0430 <a href=\"https:\/\/github.com\/MidnightCommander\/mc\">mc<\/a> \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u0433\u0430\u0442\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e. \u0418 \u0435\u0441\u043b\u0438 \u043f\u043e \u043d\u0435\u0439 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u043e \u043b\u0438\u043c\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e \u0447\u0435\u043c \u0432\u0430\u043c \u0441\u043a\u0430\u0436\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043c\u0435\u043d\u044e <b>System settings<\/b> \u0441 \u043f\u0440\u0430\u0432\u0430 <b><code>client_id<\/code><\/b> \u0438 <b><code>client_secret<\/code><\/b> \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432 \u0435\u0433\u043e \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0435\u0449\u0435 \u043d\u0435\u0442).<br \/>  \u0423 GitHub \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 API, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 <b><code>https:\/\/api.github.com\/users\/{user}<\/code><\/b> \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435. \u041f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 ( \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0447\u043d\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432, \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e 10 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c) \u0442\u043e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435 <b><code>meta<\/code><\/b> \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.  <\/p>\n<hr\/>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u044b\u0440\u0430\u0436\u0430\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c API \u0438 \u0442\u0435\u043c \u043a\u0442\u043e \u043f\u0438\u0441\u0430\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u043e \u043d\u0435\u043c\u0443, \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043e\u0434\u043d\u043e \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0430\u044e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c <a href=\"http:\/\/d3js.org\">D3js<\/a> \u0437\u0430 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\/Gallery\">\u0431\u043e\u0433\u0430\u0442\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a> (\u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044f \u0431\u044b \u0438 \u043d\u0435 \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435) \u0438 <a href=\"https:\/\/github.com\/mbostock\/d3\/wiki\">\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a> \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438. <\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u043e\u0433\u0434\u0430 \u044f \u0441\u0442\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u044d\u0442\u043e \u0431\u044b\u043b\u0430 \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u0438 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c. \u0415\u0441\u043b\u0438 \u0432\u044b <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\">\u0444\u043e\u0440\u043a\u043d\u0438\u0442\u0435 \u043c\u043e\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> \u0438 \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u043a\u0443\u0447\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u0435\u043d\u044c\u043a\u043e\u0435, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 Pull Request \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 <a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\/issues\">Issues<\/a>.<br \/>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Google Chrome dev-m (\u043d\u0435\u0442 \u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u044f\u0432\u043d\u044b\u0435 \u043a\u043e\u0441\u044f\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b), \u0435\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u0432 \u0432\u0430\u0448\u0435\u043c \u043b\u044e\u0431\u0438\u043c\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0431\u0443\u0434\u0443 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d.<br \/>  \u0416\u0434\u0443 \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0438.<br \/>  <b>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/b><\/p>\n<p>  <b>P.S.<\/b><br \/>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438:  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/mbostock\/d3\">D3js<\/a> (<a href=\"http:\/\/artzub.com\/ghv\/#repo=d3&amp;climit=100&amp;user=mbostock&amp;run\">\u0437\u0430\u043f\u0443\u0441\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a>)<br \/>  <a href=\"http:\/\/artzub.com\/ghv\/ss_d3.png\"><img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/ss_d3.png\" alt=\"image\"\/><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jquery\/jquery\">jQuery<\/a> (<a href=\"http:\/\/artzub.com\/ghv\/#repo=jquery&amp;climit=100&amp;user=jquery&amp;run\">\u0437\u0430\u043f\u0443\u0441\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a>)<br \/>  <a href=\"http:\/\/artzub.com\/ghv\/ss_jquery.png\"><img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/ss_jquery.png\" alt=\"image\"\/><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/MidnightCommander\/mc\">MidnightCommander<\/a> (<a href=\"http:\/\/artzub.com\/ghv\/#repo=mc&amp;climit=100&amp;user=MidnightCommander&amp;run\">\u0437\u0430\u043f\u0443\u0441\u043a \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a>)<br \/>  <a href=\"http:\/\/artzub.com\/ghv\/ss_mc.png\"><img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/ss_mc.png\" alt=\"image\"\/><\/a><\/li>\n<\/ul>\n<p>      \t \t\t \t\t\t \t<\/p>\n<div class=\"polling\">\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u041a\u0430\u043a\u043e\u0439 \u0432\u0430\u0448 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"174375\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"7625\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39747\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39747\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39747\">Google Chrome<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39749\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39749\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39749\">Mozilla Firefox<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39751\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39751\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39751\">Safari<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39753\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39753\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39753\">Opera<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39755\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39755\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39755\">Internet Explorer<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39757\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39757\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39757\">\u0414\u0440\u0443\u0433\u043e\u0439<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b 1 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<form action=\"\/json\/polling\/\" class=\"poll\" method=\"post\">\n<div class=\"poll_title\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e<\/div>\n<p>  \t\t<input type=\"hidden\" name=\"post_id\" value=\"174375\"\/> \t\t<input type=\"hidden\" name=\"polling_question_id\" value=\"7627\"\/>  \t\t<\/p>\n<table class=\"answer\">\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39759\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39759\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39759\">\u0414\u0430<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39761\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39761\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39761\">\u041d\u0435\u0442 (\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e; \u0432 \u043a\u0430\u043a\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435)<\/label> \t\t\t\t<\/td>\n<\/tr>\n<tr>\n<td class=\"input\"> \t\t\t\t\t<input type=\"radio\" id=\"vv39763\" \t\t\t\t\t\tclass=\"radio js-field-data\" \t\t\t\t\t\tname=\"variant[]\" \t\t\t\t\t\tvalue=\"39763\" \/> \t\t\t\t<\/td>\n<td class=\"label\"> \t\t\t\t\t<label for=\"vv39763\">\u0415\u0449\u0435 \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b<\/label> \t\t\t\t<\/td>\n<\/tr>\n<\/table>\n<p class=\"for_users_only_msg\">\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a href=\"\/login\/\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/p>\n<p class=\"total\">\u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b 1 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442.<\/p>\n<\/p><\/form>\n<\/p><\/div>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/174375\/\"> http:\/\/habrahabr.ru\/post\/174375\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0411\u0443\u0434\u0443\u0447\u0438 \u043f\u043e\u043a\u043b\u043e\u043d\u043d\u0438\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <a href=\"https:\/\/code.google.com\/p\/codeswarm\/\">code_swarm<\/a> \u0438 <a href=\"https:\/\/code.google.com\/p\/gource\/\">gource<\/a>. \u0412 \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0434\u0435\u043d\u044c \u044f \u0431\u044b\u043b \u043f\u043e\u0441\u0435\u0449\u0435\u043d \u043c\u0443\u0437\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u0430 \u043c\u0435\u043d\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u043d\u043b\u0430\u0439\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 <a href=\"https:\/\/github.com\/\">GitHub<\/a>.<br \/>  \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0432\u0430\u0448 \u0441\u0443\u0434 \u043c\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"http:\/\/ghv.artzub.com\">GitHub Visualizer<\/a> (<a href=\"https:\/\/github.com\/artzub\/GitHubCodeSwarm\">\u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub<\/a>).<br \/>  \u0412\u043e\u0442 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430.<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"http:\/\/www.youtube.com\/embed\/WguqW5vcQWU?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><br \/>  \u0418 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f Gif&#8217;\u043a\u0430<br \/>  <img decoding=\"async\" src=\"http:\/\/artzub.com\/ghv\/article\/4.gif\" alt=\"image\"\/><\/p>\n<h5>\u0427\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e<\/h5>\n<p>  <\/p>\n<ul>\n<li><a href=\"http:\/\/ru.wikipedia.org\/wiki\/SVG\">SVG<\/a>, <a href=\"http:\/\/ru.wikipedia.org\/wiki\/Canvas\">Canvas<\/a> \u2014 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/li>\n<li><a href=\"http:\/\/d3js.org\">D3.js<\/a> \u2014 javascript \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445.<br \/>  <a href=\"http:\/\/bl.ocks.org\/mbostock\">\u0413\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0430\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/a> \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"http:\/\/bost.ocks.org\/mike\/\">Mike Bostock<\/a>.<\/li>\n<li><a href=\"http:\/\/developer.github.com\/\">API GitHub<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-174375","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/174375","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=174375"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/174375\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=174375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=174375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=174375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}