Code_swarm рдФрд░
gource рдЬреИрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗред рдПрдХ рджрд┐рди рдореБрдЭреЗ рдПрдХ рдореНрдпреВрдЬ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ
рдЧрд┐рдЯрд╣рдм рд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред
рдФрд░ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рдиреНрдпрд╛рдпрд╛рд▓рдп рдореЗрдВ рдореЗрд░реЗ
GitHub Visualizer рдкреНрд░реЛрдЬреЗрдХреНрдЯ (
GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ ) рдХреЛ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдВрдЪрдХрд╕ рд╣реИред
рдФрд░ рдмрдбрд╝рд╛ рдЧрд┐рдл рдирд╣реАрдВ

рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг
рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рддреАрди рдореБрдЦреНрдп рджреГрд╢реНрдп рд╣реИрдВ рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЙрдирдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдорд╛рддреНрд░рд╛рддреНрдордХ рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реВрдЪреА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЧреНрд░рд╛рдл
- рдордВрдбрд▓рд┐рдпрд╛рдВ (рдХреЛрдиреЗ) рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╣реИрдВ
- рд╢реАрд░реНрд╖ рдХрд╛ рдЖрдХрд╛рд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЙрдореНрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ; рдкреБрд░рд╛рдирд╛, рдЫреЛрдЯрд╛ред
- рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддрд╛рд░реАрдЦ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
- рд╢реАрд░реНрд╖реЛрдВ рдХрд╛ рд░рдВрдЧ рдФрд░ рд╕рдореВрд╣реАрдХрд░рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

- рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо
- рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░рд╛рдВрд╢ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ
- рднрд╛рд╖рд╛ рдХрд╛ рд░рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
- рдЖрдкрдХреЛ рд╣реЛрд╡рд░ рдкрд░ рдХреЛрдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ
рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, D3.Layout.Force рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛var force = d3.layout.force() .nodes(nodes) .size([width, height]) .gravity(.02) .charge(0) .on("tick", tick) .start(); function tick(e) { circle .each(cluster(10 * e.alpha * e.alpha)) .each(collide(.5)) .attr("cx", function(d) { return dx; }) .attr("cy", function(d) { return dy; }); }
рджрд░рдЕрд╕рд▓, рдпрд╣ рд╡рд╣ рдореНрдпреВрдЬ рдерд╛ рдЬреЛ рдореБрдЭреЗ рджреЗрдЦрдиреЗ рдЧрдпрд╛ рдерд╛ред
рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реИред repo.js рдФрд░ langHg.js
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╣рд┐рд╕реНрдЯреНрд░реА рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рдХреЙрд▓рдо рдореЗрдВ рдпрд╛ рджреВрд╕рд░реА рд╕реНрдЯреЗрдЬ рдкреИрдирд▓ рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдЖрдк рдпрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдлрд┐рд░ "рд╡рд┐рд╢реНрд▓реЗрд╖рдг" рдмрдЯрди рджрдмрд╛рдХрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЧрдП рдХрдорд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, 100 рдХрдорд┐рдЯ рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрд┐рддрдиреЗ рдХрдо рд╣реИрдВ)ред
рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЧреНрд░рд╛рдл
- рдПрдХреНрд╕ рдЕрдХреНрд╖ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рджрд┐рдирд╛рдВрдХ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рд▓рд╛рд▓ рдмрд┐рдВрджреБ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
- рдЖрд░реНрдореНрд╕ рдЕрдк рдФрд░ рдбрд╛рдЙрди рдХрдорд┐рдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдФрд░ рд╣рдЯрд╛рдП рдЧрдП рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
- рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
- рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╛рдЗрд▓реЗрдВ
- рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЗрдВ
- рдирд╖реНрдЯ рдХрд░ рджреА рдЧрдИ рдлрд╛рдЗрд▓реЗрдВ
- рдкреНрд░рддрд┐рднрд╛рдЧреА рдЪрд╛рд░реНрдЯ - рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ d3.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдИ рдЯреВрд▓ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдХреНрд╖реЗрддреНрд░ рдХреА рдЧрдгрдирд╛ d3.svg.area () рдШрдЯрдХ ( рд╕реНрдЯреИрдХреНрдб рдПрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг) рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдореИрдВ рдЦреБрдж рдХреЛ рд╕реНрдЯреИрдХ рдорд╛рдирддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдХреА рд╕рднреА рдбреА 3рдЬреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реИред
рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬрд╣рд╛рдБ рд╕реНрдЯреИрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ var layers = [ { color: colors.deletedFile, values: sorted.map(function (d) { return {t : 1, x: d.date, y0 : 0, y: (d.stats ? -d.stats.fd : 0)} }) }, { color: colors.modifiedFile, values: sorted.map(function (d) { return {x: d.date, y0 : 0, y: (d.stats ? d.stats.fm : 0)} }) }, { color: colors.addedFile, values: sorted.map(function (d) { return {x: d.date, y0: (d.stats ? d.stats.fm : 0), y : (d.stats ? d.stats.fa : 0)} }) } ] ; function interpolateSankey(points) { var x0 = points[0][0], y0 = points[0][1], x1, y1, x2, path = [x0, ",", y0], i = 0, n = points.length; while (++i < n) { x1 = points[i][0]; y1 = points[i][1]; x2 = (x0 + x1) / 2; path.push("C", x2, ",", y0, " ", x2, ",", y1, " ", x1, ",", y1); x0 = x1; y0 = y1; } return path.join(""); } 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 ) .x(function(d) { return x(dx); }) .y0(function(d) { return y1(d.y0); }) .y1(function(d) { return y1(d.y0 + dy); }) ;
рдЖрд░реНрдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ d3.svg.arc () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ( рдРрд╕реЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрд░реНрдХ рдЯрд┐рд╡реЗрди , рдкрд╛рдИ рдорд▓реНрдЯреАрдкрд▓реНрд╕ )ред
рдореИрдВ рджреЛ рдШрдЯрдХреЛрдВ d3.time.scale () рдФрд░ d3.svg.axis рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕ рдкреИрдорд╛рдиреЗ рдХреА рдкреАрдврд╝реА рдХрд░рддрд╛ рд╣реВрдВ ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдХрд╕реНрдЯрдо рд╕рдордп рдкреНрд░рд╛рд░реВрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдЖрд░реЗрдЦ рдХреА рдЧрдгрдирд╛ d3.layout.pack () ( рд╕рд░реНрдХрд▓ рдкреИрдХрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг) рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рд▓рдХреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реЙрд░реНрдЯ рдФрд░ рдореВрд▓реНрдп рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реВрдВред
рдЗрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЛ рдлрд╛рдЗрд▓реЛрдВ рд╕реНрдЯреЗрдЯ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ редjs рдФрд░ usercommit.js
рдЧрддрд┐рд╢реАрд▓ рджреГрд╢реНрдп
рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рдПрдХ рдЙрджреНрдпрдо рдерд╛ред рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЬрдм рдЖрдк
code_swarm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ, рдореИрдВрдиреЗ рдЙрди рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдХреЛрдб_рд╕реНрд╡рд░реНрдо рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдордХреНрдЦреА рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред
рдЧреАрдд-рдСрдл-рдЧрд┐рддреБрдм рдХрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди, рд▓реЙрдиреНрдЪрд░ рд▓рд┐рдВрдХ , рд╣рдмрд░рд╛рд╣рдмреНрд░ рдкрд░ рдЧреАрдд-рдСрдлрд╝-рдЧрд┐рддреБрдм рдкрд░ рдЕрдиреБрдЪреНрдЫреЗрдж
- рдкреНрд░рддреНрдпреЗрдХ рдХрдг рдПрдХ рдлрд╛рдЗрд▓ рд╣реИред рд╡реЗ рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рдбреЗрд╡рд▓рдкрд░ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред
- рдХрдг рдЖрдХрд╛рд░ рдЙрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдбрд┐рдЧреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЗрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред
- рдПрдХ рдХрдг рдХрд╛ рд░рдВрдЧ рдЙрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
- рд╕рдордп рдХреЗ рд╕рд╛рде, рдХрдг рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╣реА рд╕рднреА рдХрдг рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреА рдкрд┐рдШрд▓ рдЬрд╛рддрд╛ рд╣реИред (рдЗрд╕реЗ рдкреИрдирд▓ 3 рд╕реНрдЯреЗрдЬ, рдпреВрдЬрд░ рд▓рд╛рдЗрдл рдФрд░ рдлрд╛рдЗрд▓ рд▓рд╛рдЗрдл , рдорд╛рди 0 - рдЕрдорд░) рдореЗрдВ рд╕рдВрдЧрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдЕрдкрдиреЗ рдЖрд╕рдкрд╛рд╕ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЙрд╕рдиреЗ рд╣реЗрд░рдлреЗрд░ рдХрд┐рдпрд╛ рдерд╛ред
- рдпрджрд┐ рдлрд╛рдЗрд▓реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрдХреНрд╖рд╛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИрдВ рдФрд░ рдЕрдм рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╣рд░ рджреВрд╕рд░рд╛ рджрд┐рди рд╣реЛрддрд╛ рд╣реИ (рдХрджрдо рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛)
- рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд, рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
- рдХрд┐рдВрд╡рджрдВрддреА рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддреА рд╣реИред
рдХреБрдЦреНрдпрд╛рдд D3.Layout.Force рджреНрд╡рд╛рд░рд╛ рднреМрддрд┐рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рдЪреВрдХ рдХреЗ рд╕рд╛рде рдЙрдирдореЗрдВ рд╕реЗ рджреЛ рд╣реИрдВред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ author
рдЧреБрдг рд╣реЛрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдордп) рдпрд╣ рд▓рд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИред
рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди function tick() { if (_force.nodes()) { _force.nodes() .forEach(cluster(0.025)); _forceAuthor.nodes( _forceAuthor.nodes() .filter(function(d) { blink(d, !d.links && setting.userLife > 0); if (d.visible && d.links === 0 && setting.userLife > 0) { d.flash = 0; d.alive = d.alive / 10; } return d.visible; }) ); } _forceAuthor.resume(); _force.resume(); }
рдФрд░ рдмрд▓ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рд╕реНрдерд╛рди
_force = (_force || d3.layout.force() .stop() .size([w, h]) .friction(.75) .gravity(0) .charge(function(d) {return -1 * radius(nr(d)); } ) .on("tick", 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([]) ;
рджреЛ рд╕реВрддреНрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдореИрдВ рдРрд╕рд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ), рдПрдХ рд╕реЗрдЯ рд╣реИ setInterval
рджреВрд╕рд░рд╛ requestAnimationFrame
ред рдкрд╣рд▓рд╛ рд╕рдордп рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд▓ рдХреА рдЕрдкрдиреА рдЯрд╛рдЗрдорд░ рдФрд░ asyncForEach рднреА рд╣реЛрддреА рд╣реИ (рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЛ рдФрд░ рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдмрд╛рд╣рд░ рди рдирд┐рдХрд▓реЗрдВ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реА рджреЗрд░реА рдХреЗ рд╕рд╛рде) рднреА рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддреА рд╣реИред
рдЖрдк show.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
рдореБрдЭреЗ
api.github.com рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред
JSONP рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛
рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
GitHub API рдХреЗ рдЕрдиреБрд╕рд╛рд░
, Client_id
рдФрд░
Client_Secret
рдХрд╛ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реАрдорд╛ рдПрдХ рдЖрдИрдкреА рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП 60 рд╣реЛрдЧреАред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ
GitHub рдкрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣реА рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рд╣реИ ... рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ 5000 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз,
рдПрдорд╕реА рдЬреИрд╕реА рдХреБрдЫ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рдЗрддрд┐рд╣рд╛рд╕ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕реАрдорд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк
рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдиреВ
client_secret
рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ
client_id
рдФрд░
client_secret
рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
GitHub рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдПрдкреАрдЖрдИ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЖрдЗрдП рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ
api.github.com/users{user}
api.github.com/users{user}
рдЕрдиреНрдп рд╕рднреА рд▓рд┐рдВрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдпрд╣ рдПрдХ рдмрд╣реБ-рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдз рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ 10 рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ), рддреЛ
meta
рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреВрд░реНрдг рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдПрдкреАрдЖрдИ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд▓рд┐рдЦрд╛, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЦреБрд╢реА рдХреА рдмрд╛рдд рд╣реИред
рдореИрдВ
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдПрдХ
рд╕рдореГрджреНрдз рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП
D3js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛
рд╣реВрдВ (рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдореИрдВ рд╢рд╛рдпрдж рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реЛрдЧрд╛) рдФрд░ рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ
рдмрд╣реБрдд рд╣реА рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЦрд┐рд▓реМрдирд╛ рдерд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдРрд╕рд╛ рд╣реА рд░рд╣рд╛ред рдпрджрд┐ рдЖрдк
рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдирдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирд┐рд╡реЗрджрди рдЫреЛрдбрд╝реЗрдВ рдпрд╛
рдореБрджреНрджреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ Google Chrome dev-m (рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рддрдп рдХреА рдЧрдИ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛), рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рд╕реНрд╡рд╕реНрде рдЖрд▓реЛрдЪрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!рдкреБрдирд╢реНрдЪрдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА: