Skip to content

Instantly share code, notes, and snippets.

@ganezasan
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ganezasan/b7636fe6ec1196e6b60b to your computer and use it in GitHub Desktop.
Save ganezasan/b7636fe6ec1196e6b60b to your computer and use it in GitHub Desktop.
Qiita Scatter plot
<!DOCTYPE html>
<meta charset="utf-8">
<style>
* {
margin: 0;
padding: 0;
border: 0;
}
body {
background: #fff;
}
</style>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<script src="http://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" class="btn btn-primary" id="getJson">JSONファイル取得</button>
<script>
$("#getJson").bind("click",function(){
var max = 50;
var data = [];
var i = 1;
getQiita(data,i);
function getQiita(data,i){
console.log("getQiita");
if(i > max){
var href = "data:application/octet-stream," + encodeURIComponent(JSON.stringify(data));
location.href = href;
return true;
}
d3.json('https://qiita.com/api/v1/tags.json?page='+i+'&per_page=100',function(json){
console.log(i);
console.log(json.length);
data = data.concat(json);
i++;
setTimeout(getQiita(data,i), 3000);
});
}
});
</script>
<!DOCTYPE html>
<meta charset="utf-8">
<style>
* {
margin: 0;
padding: 0;
border: 0;
}
body {
background: #fff;
}
</style>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="http://nvd3.org/assets/css/nv.d3.css">
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="nv.d3.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="svg_area" style="height:500px;">
<svg id="ScatterPlot" width="1000" height="500"></svg>
</div>
<script>
d3.json("qiita.json",function(json){
// console.log(json)
var data = json.map(function(d){ return {key:d.name,values:[{
x: d.follower_count
, y: d.item_count
, size: d.item_count
, shapes: 'circle'
}]}})
nv.addGraph(function() {
var chart = nv.models.scatterChart()
.showLegend(false)
.showDistX(true)
.showDistY(true)
.color(d3.scale.category20().range())
.sizeRange([10, 5000]);
//Configure how the tooltip looks.
chart.tooltipContent(function(key) {
return '<h3>' + key + '</h3>';
});
//We want to show shapes other than circles.
chart.scatter.onlyCircles(false);
chart.forceY(0)
chart.xAxis.axisLabel("フォロワー数");
chart.yAxis.axisLabel("投稿数");
d3.select('#ScatterPlot')
.datum(data)
.call(chart);
nv.utils.windowResize(chart.update);
return chart;
});
});
</script>
(function(){
var nv = window.nv || {};
nv.version = '1.1.11b';
nv.dev = true //set false when in production
window.nv = nv;
nv.tooltip = {}; // For the tooltip system
nv.utils = {}; // Utility subsystem
nv.models = {}; //stores all the possible models/components
nv.charts = {}; //stores all the ready to use charts
nv.graphs = []; //stores all the graphs currently on the page
nv.logs = {}; //stores some statistics and potential error messages
nv.dispatch = d3.dispatch('render_start', 'render_end');
// *************************************************************************
// Development render timers - disabled if dev = false
if (nv.dev) {
nv.dispatch.on('render_start', function(e) {
nv.logs.startTime = +new Date();
});
nv.dispatch.on('render_end', function(e) {
nv.logs.endTime = +new Date();
nv.logs.totalTime = nv.logs.endTime - nv.logs.startTime;
nv.log('total', nv.logs.totalTime); // used for development, to keep track of graph generation times
});
}
// ********************************************
// Public Core NV functions
// Logs all arguments, and returns the last so you can test things in place
// Note: in IE8 console.log is an object not a function, and if modernizr is used
// then calling Function.prototype.bind with with anything other than a function
// causes a TypeError to be thrown.
nv.log = function() {
if (nv.dev && console.log && console.log.apply)
console.log.apply(console, arguments)
else if (nv.dev && typeof console.log == "function" && Function.prototype.bind) {
var log = Function.prototype.bind.call(console.log, console);
log.apply(console, arguments);
}
return arguments[arguments.length - 1];
};
nv.render = function render(step) {
step = step || 1; // number of graphs to generate in each timeout loop
nv.render.active = true;
nv.dispatch.render_start();
setTimeout(function() {
var chart, graph;
for (var i = 0; i < step && (graph = nv.render.queue[i]); i++) {
chart = graph.generate();
if (typeof graph.callback == typeof(Function)) graph.callback(chart);
nv.graphs.push(chart);
}
nv.render.queue.splice(0, i);
if (nv.render.queue.length) setTimeout(arguments.callee, 0);
else { nv.render.active = false; nv.dispatch.render_end(); }
}, 0);
};
nv.render.active = false;
nv.render.queue = [];
nv.addGraph = function(obj) {
if (typeof arguments[0] === typeof(Function))
obj = {generate: arguments[0], callback: arguments[1]};
nv.render.queue.push(obj);
if (!nv.render.active) nv.render();
};
nv.identity = function(d) { return d; };
nv.strip = function(s) { return s.replace(/(\s|&)/g,''); };
function daysInMonth(month,year) {
return (new Date(year, month+1, 0)).getDate();
}
function d3_time_range(floor, step, number) {
return function(t0, t1, dt) {
var time = floor(t0), times = [];
if (time < t0) step(time);
if (dt > 1) {
while (time < t1) {
var date = new Date(+time);
if ((number(date) % dt === 0)) times.push(date);
step(time);
}
} else {
while (time < t1) { times.push(new Date(+time)); step(time); }
}
return times;
};
}
d3.time.monthEnd = function(date) {
return new Date(date.getFullYear(), date.getMonth(), 0);
};
d3.time.monthEnds = d3_time_range(d3.time.monthEnd, function(date) {
date.setUTCDate(date.getUTCDate() + 1);
date.setDate(daysInMonth(date.getMonth() + 1, date.getFullYear()));
}, function(date) {
return date.getMonth();
}
);
/* Utility class to handle creation of an interactive layer.
This places a rectangle on top of the chart. When you mouse move over it, it sends a dispatch
containing the X-coordinate. It can also render a vertical line where the mouse is located.
dispatch.elementMousemove is the important event to latch onto. It is fired whenever the mouse moves over
the rectangle. The dispatch is given one object which contains the mouseX/Y location.
It also has 'pointXValue', which is the conversion of mouseX to the x-axis scale.
*/
nv.interactiveGuideline = function() {
"use strict";
var tooltip = nv.models.tooltip();
//Public settings
var width = null
, height = null
//Please pass in the bounding chart's top and left margins
//This is important for calculating the correct mouseX/Y positions.
, margin = {left: 0, top: 0}
, xScale = d3.scale.linear()
, yScale = d3.scale.linear()
, dispatch = d3.dispatch('elementMousemove', 'elementMouseout','elementDblclick')
, showGuideLine = true
, svgContainer = null
//Must pass in the bounding chart's <svg> container.
//The mousemove event is attached to this container.
;
//Private variables
var isMSIE = navigator.userAgent.indexOf("MSIE") !== -1 //Check user-agent for Microsoft Internet Explorer.
;
function layer(selection) {
selection.each(function(data) {
var container = d3.select(this);
var availableWidth = (width || 960), availableHeight = (height || 400);
var wrap = container.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([data]);
var wrapEnter = wrap.enter()
.append("g").attr("class", " nv-wrap nv-interactiveLineLayer");
wrapEnter.append("g").attr("class","nv-interactiveGuideLine");
if (!svgContainer) {
return;
}
function mouseHandler() {
var d3mouse = d3.mouse(this);
var mouseX = d3mouse[0];
var mouseY = d3mouse[1];
var subtractMargin = true;
var mouseOutAnyReason = false;
if (isMSIE) {
/*
D3.js (or maybe SVG.getScreenCTM) has a nasty bug in Internet Explorer 10.
d3.mouse() returns incorrect X,Y mouse coordinates when mouse moving
over a rect in IE 10.
However, d3.event.offsetX/Y also returns the mouse coordinates
relative to the triggering <rect>. So we use offsetX/Y on IE.
*/
mouseX = d3.event.offsetX;
mouseY = d3.event.offsetY;
/*
On IE, if you attach a mouse event listener to the <svg> container,
it will actually trigger it for all the child elements (like <path>, <circle>, etc).
When this happens on IE, the offsetX/Y is set to where ever the child element
is located.
As a result, we do NOT need to subtract margins to figure out the mouse X/Y
position under this scenario. Removing the line below *will* cause
the interactive layer to not work right on IE.
*/
if(d3.event.target.tagName !== "svg")
subtractMargin = false;
if (d3.event.target.className.baseVal.match("nv-legend"))
mouseOutAnyReason = true;
}
if(subtractMargin) {
mouseX -= margin.left;
mouseY -= margin.top;
}
/* If mouseX/Y is outside of the chart's bounds,
trigger a mouseOut event.
*/
if (mouseX < 0 || mouseY < 0
|| mouseX > availableWidth || mouseY > availableHeight
|| (d3.event.relatedTarget && d3.event.relatedTarget.ownerSVGElement === undefined)
|| mouseOutAnyReason
)
{
if (isMSIE) {
if (d3.event.relatedTarget
&& d3.event.relatedTarget.ownerSVGElement === undefined
&& d3.event.relatedTarget.className.match(tooltip.nvPointerEventsClass)) {
return;
}
}
dispatch.elementMouseout({
mouseX: mouseX,
mouseY: mouseY
});
layer.renderGuideLine(null); //hide the guideline
return;
}
var pointXValue = xScale.invert(mouseX);
dispatch.elementMousemove({
mouseX: mouseX,
mouseY: mouseY,
pointXValue: pointXValue
});
//If user double clicks the layer, fire a elementDblclick dispatch.
if (d3.event.type === "dblclick") {
dispatch.elementDblclick({
mouseX: mouseX,
mouseY: mouseY,
pointXValue: pointXValue
});
}
}
svgContainer
.on("mousemove",mouseHandler, true)
.on("mouseout" ,mouseHandler,true)
.on("dblclick" ,mouseHandler)
;
//Draws a vertical guideline at the given X postion.
layer.renderGuideLine = function(x) {
if (!showGuideLine) return;
var line = wrap.select(".nv-interactiveGuideLine")
.selectAll("line")
.data((x != null) ? [nv.utils.NaNtoZero(x)] : [], String);
line.enter()
.append("line")
.attr("class", "nv-guideline")
.attr("x1", function(d) { return d;})
.attr("x2", function(d) { return d;})
.attr("y1", availableHeight)
.attr("y2",0)
;
line.exit().remove();
}
});
}
layer.dispatch = dispatch;
layer.tooltip = tooltip;
layer.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return layer;
};
layer.width = function(_) {
if (!arguments.length) return width;
width = _;
return layer;
};
layer.height = function(_) {
if (!arguments.length) return height;
height = _;
return layer;
};
layer.xScale = function(_) {
if (!arguments.length) return xScale;
xScale = _;
return layer;
};
layer.showGuideLine = function(_) {
if (!arguments.length) return showGuideLine;
showGuideLine = _;
return layer;
};
layer.svgContainer = function(_) {
if (!arguments.length) return svgContainer;
svgContainer = _;
return layer;
};
return layer;
};
/* Utility class that uses d3.bisect to find the index in a given array, where a search value can be inserted.
This is different from normal bisectLeft; this function finds the nearest index to insert the search value.
For instance, lets say your array is [1,2,3,5,10,30], and you search for 28.
Normal d3.bisectLeft will return 4, because 28 is inserted after the number 10. But interactiveBisect will return 5
because 28 is closer to 30 than 10.
Unit tests can be found in: interactiveBisectTest.html
Has the following known issues:
* Will not work if the data points move backwards (ie, 10,9,8,7, etc) or if the data points are in random order.
* Won't work if there are duplicate x coordinate values.
*/
nv.interactiveBisect = function (values, searchVal, xAccessor) {
"use strict";
if (! values instanceof Array) return null;
if (typeof xAccessor !== 'function') xAccessor = function(d,i) { return d.x;}
var bisect = d3.bisector(xAccessor).left;
var index = d3.max([0, bisect(values,searchVal) - 1]);
var currentValue = xAccessor(values[index], index);
if (typeof currentValue === 'undefined') currentValue = index;
if (currentValue === searchVal) return index; //found exact match
var nextIndex = d3.min([index+1, values.length - 1]);
var nextValue = xAccessor(values[nextIndex], nextIndex);
if (typeof nextValue === 'undefined') nextValue = nextIndex;
if (Math.abs(nextValue - searchVal) >= Math.abs(currentValue - searchVal))
return index;
else
return nextIndex
};/* Tooltip rendering model for nvd3 charts.
window.nv.models.tooltip is the updated,new way to render tooltips.
window.nv.tooltip.show is the old tooltip code.
window.nv.tooltip.* also has various helper methods.
*/
(function() {
"use strict";
window.nv.tooltip = {};
/* Model which can be instantiated to handle tooltip rendering.
Example usage:
var tip = nv.models.tooltip().gravity('w').distance(23)
.data(myDataObject);
tip(); //just invoke the returned function to render tooltip.
*/
window.nv.models.tooltip = function() {
var content = null //HTML contents of the tooltip. If null, the content is generated via the data variable.
, data = null /* Tooltip data. If data is given in the proper format, a consistent tooltip is generated.
Format of data:
{
key: "Date",
value: "August 2009",
series: [
{
key: "Series 1",
value: "Value 1",
color: "#000"
},
{
key: "Series 2",
value: "Value 2",
color: "#00f"
}
]
}
*/
, gravity = 'w' //Can be 'n','s','e','w'. Determines how tooltip is positioned.
, distance = 50 //Distance to offset tooltip from the mouse location.
, snapDistance = 25 //Tolerance allowed before tooltip is moved from its current position (creates 'snapping' effect)
, fixedTop = null //If not null, this fixes the top position of the tooltip.
, classes = null //Attaches additional CSS classes to the tooltip DIV that is created.
, chartContainer = null //Parent DIV, of the SVG Container that holds the chart.
, tooltipElem = null //actual DOM element representing the tooltip.
, position = {left: null, top: null} //Relative position of the tooltip inside chartContainer.
, enabled = true //True -> tooltips are rendered. False -> don't render tooltips.
//Generates a unique id when you create a new tooltip() object
, id = "nvtooltip-" + Math.floor(Math.random() * 100000)
;
//CSS class to specify whether element should not have mouse events.
var nvPointerEventsClass = "nv-pointer-events-none";
//Format function for the tooltip values column
var valueFormatter = function(d,i) {
return d;
};
//Format function for the tooltip header value.
var headerFormatter = function(d) {
return d;
};
//By default, the tooltip model renders a beautiful table inside a DIV.
//You can override this function if a custom tooltip is desired.
var contentGenerator = function(d) {
if (content != null) return content;
if (d == null) return '';
var table = d3.select(document.createElement("table"));
var theadEnter = table.selectAll("thead")
.data([d])
.enter().append("thead");
theadEnter.append("tr")
.append("td")
.attr("colspan",3)
.append("strong")
.classed("x-value",true)
.text(headerFormatter(d.value));
var tbodyEnter = table.selectAll("tbody")
.data([d])
.enter().append("tbody");
var trowEnter = tbodyEnter.selectAll("tr")
.data(function(p) { return p.series})
.enter()
.append("tr")
.classed("highlight", function(p) { return p.highlight})
;
trowEnter.append("td")
.classed("legend-color-guide",true)
.append("div")
.style("background-color", function(p) { return p.color});
trowEnter.append("td")
.classed("key",true)
.text(function(p) {return p.key});
trowEnter.append("td")
.classed("value",true)
.text(function(p,i) { return valueFormatter(p.value,i) });
trowEnter.selectAll("td").each(function(p) {
if (p.highlight)
d3.select(this)
.style("border-bottom","solid 1px " + p.color)
.style("border-top","solid 1px " + p.color)
;
});
var html = table.node().outerHTML;
if (d.footer !== undefined)
html += "<div class='footer'>" + d.footer + "</div>";
return html;
};
var dataSeriesExists = function(d) {
if (d && d.series && d.series.length > 0) return true;
return false;
};
//In situations where the chart is in a 'viewBox', re-position the tooltip based on how far chart is zoomed.
function convertViewBoxRatio() {
if (chartContainer) {
var svg = d3.select(chartContainer);
if (svg.node().tagName !== "svg") {
svg = svg.select("svg");
}
var viewBox = (svg.node()) ? svg.attr('viewBox') : null;
if (viewBox) {
viewBox = viewBox.split(' ');
var ratio = parseInt(svg.style('width')) / viewBox[2];
position.left = position.left * ratio;
position.top = position.top * ratio;
}
}
}
//Creates new tooltip container, or uses existing one on DOM.
function getTooltipContainer(newContent) {
var body;
if (chartContainer)
body = d3.select(chartContainer);
else
body = d3.select("body");
var container = body.select(".nvtooltip");
if (container.node() === null) {
//Create new tooltip div if it doesn't exist on DOM.
container = body.append("div")
.attr("class", "nvtooltip " + (classes? classes: "xy-tooltip"))
.attr("id",id)
;
}
container.node().innerHTML = newContent;
container.style("top",0).style("left",0).style("opacity",0);
container.selectAll("div, table, td, tr").classed(nvPointerEventsClass,true)
container.classed(nvPointerEventsClass,true);
return container.node();
}
//Draw the tooltip onto the DOM.
function nvtooltip() {
if (!enabled) return;
if (!dataSeriesExists(data)) return;
convertViewBoxRatio();
var left = position.left;
var top = (fixedTop != null) ? fixedTop : position.top;
var container = getTooltipContainer(contentGenerator(data));
tooltipElem = container;
if (chartContainer) {
var svgComp = chartContainer.getElementsByTagName("svg")[0];
var boundRect = (svgComp) ? svgComp.getBoundingClientRect() : chartContainer.getBoundingClientRect();
var svgOffset = {left:0,top:0};
if (svgComp) {
var svgBound = svgComp.getBoundingClientRect();
var chartBound = chartContainer.getBoundingClientRect();
var svgBoundTop = svgBound.top;
//Defensive code. Sometimes, svgBoundTop can be a really negative
// number, like -134254. That's a bug.
// If such a number is found, use zero instead. FireFox bug only
if (svgBoundTop < 0) {
var containerBound = chartContainer.getBoundingClientRect();
svgBoundTop = (Math.abs(svgBoundTop) > containerBound.height) ? 0 : svgBoundTop;
}
svgOffset.top = Math.abs(svgBoundTop - chartBound.top);
svgOffset.left = Math.abs(svgBound.left - chartBound.left);
}
//If the parent container is an overflow <div> with scrollbars, subtract the scroll offsets.
//You need to also add any offset between the <svg> element and its containing <div>
//Finally, add any offset of the containing <div> on the whole page.
left += chartContainer.offsetLeft + svgOffset.left - 2*chartContainer.scrollLeft;
top += chartContainer.offsetTop + svgOffset.top - 2*chartContainer.scrollTop;
}
if (snapDistance && snapDistance > 0) {
top = Math.floor(top/snapDistance) * snapDistance;
}
nv.tooltip.calcTooltipPosition([left,top], gravity, distance, container);
return nvtooltip;
};
nvtooltip.nvPointerEventsClass = nvPointerEventsClass;
nvtooltip.content = function(_) {
if (!arguments.length) return content;
content = _;
return nvtooltip;
};
//Returns tooltipElem...not able to set it.
nvtooltip.tooltipElem = function() {
return tooltipElem;
};
nvtooltip.contentGenerator = function(_) {
if (!arguments.length) return contentGenerator;
if (typeof _ === 'function') {
contentGenerator = _;
}
return nvtooltip;
};
nvtooltip.data = function(_) {
if (!arguments.length) return data;
data = _;
return nvtooltip;
};
nvtooltip.gravity = function(_) {
if (!arguments.length) return gravity;
gravity = _;
return nvtooltip;
};
nvtooltip.distance = function(_) {
if (!arguments.length) return distance;
distance = _;
return nvtooltip;
};
nvtooltip.snapDistance = function(_) {
if (!arguments.length) return snapDistance;
snapDistance = _;
return nvtooltip;
};
nvtooltip.classes = function(_) {
if (!arguments.length) return classes;
classes = _;
return nvtooltip;
};
nvtooltip.chartContainer = function(_) {
if (!arguments.length) return chartContainer;
chartContainer = _;
return nvtooltip;
};
nvtooltip.position = function(_) {
if (!arguments.length) return position;
position.left = (typeof _.left !== 'undefined') ? _.left : position.left;
position.top = (typeof _.top !== 'undefined') ? _.top : position.top;
return nvtooltip;
};
nvtooltip.fixedTop = function(_) {
if (!arguments.length) return fixedTop;
fixedTop = _;
return nvtooltip;
};
nvtooltip.enabled = function(_) {
if (!arguments.length) return enabled;
enabled = _;
return nvtooltip;
};
nvtooltip.valueFormatter = function(_) {
if (!arguments.length) return valueFormatter;
if (typeof _ === 'function') {
valueFormatter = _;
}
return nvtooltip;
};
nvtooltip.headerFormatter = function(_) {
if (!arguments.length) return headerFormatter;
if (typeof _ === 'function') {
headerFormatter = _;
}
return nvtooltip;
};
//id() is a read-only function. You can't use it to set the id.
nvtooltip.id = function() {
return id;
};
return nvtooltip;
};
//Original tooltip.show function. Kept for backward compatibility.
// pos = [left,top]
nv.tooltip.show = function(pos, content, gravity, dist, parentContainer, classes) {
//Create new tooltip div if it doesn't exist on DOM.
var container = document.createElement('div');
container.className = 'nvtooltip ' + (classes ? classes : 'xy-tooltip');
var body = parentContainer;
if ( !parentContainer || parentContainer.tagName.match(/g|svg/i)) {
//If the parent element is an SVG element, place tooltip in the <body> element.
body = document.getElementsByTagName('body')[0];
}
container.style.left = 0;
container.style.top = 0;
container.style.opacity = 0;
container.innerHTML = content;
body.appendChild(container);
//If the parent container is an overflow <div> with scrollbars, subtract the scroll offsets.
if (parentContainer) {
pos[0] = pos[0] - parentContainer.scrollLeft;
pos[1] = pos[1] - parentContainer.scrollTop;
}
nv.tooltip.calcTooltipPosition(pos, gravity, dist, container);
};
//Looks up the ancestry of a DOM element, and returns the first NON-svg node.
nv.tooltip.findFirstNonSVGParent = function(Elem) {
while(Elem.tagName.match(/^g|svg$/i) !== null) {
Elem = Elem.parentNode;
}
return Elem;
};
//Finds the total offsetTop of a given DOM element.
//Looks up the entire ancestry of an element, up to the first relatively positioned element.
nv.tooltip.findTotalOffsetTop = function ( Elem, initialTop ) {
var offsetTop = initialTop;
do {
if( !isNaN( Elem.offsetTop ) ) {
offsetTop += (Elem.offsetTop);
}
} while( Elem = Elem.offsetParent );
return offsetTop;
};
//Finds the total offsetLeft of a given DOM element.
//Looks up the entire ancestry of an element, up to the first relatively positioned element.
nv.tooltip.findTotalOffsetLeft = function ( Elem, initialLeft) {
var offsetLeft = initialLeft;
do {
if( !isNaN( Elem.offsetLeft ) ) {
offsetLeft += (Elem.offsetLeft);
}
} while( Elem = Elem.offsetParent );
return offsetLeft;
};
//Global utility function to render a tooltip on the DOM.
//pos = [left,top] coordinates of where to place the tooltip, relative to the SVG chart container.
//gravity = how to orient the tooltip
//dist = how far away from the mouse to place tooltip
//container = tooltip DIV
nv.tooltip.calcTooltipPosition = function(pos, gravity, dist, container) {
var height = parseInt(container.offsetHeight),
width = parseInt(container.offsetWidth),
windowWidth = nv.utils.windowSize().width,
windowHeight = nv.utils.windowSize().height,
scrollTop = window.pageYOffset,
scrollLeft = window.pageXOffset,
left, top;
windowHeight = window.innerWidth >= document.body.scrollWidth ? windowHeight : windowHeight - 16;
windowWidth = window.innerHeight >= document.body.scrollHeight ? windowWidth : windowWidth - 16;
gravity = gravity || 's';
dist = dist || 20;
var tooltipTop = function ( Elem ) {
return nv.tooltip.findTotalOffsetTop(Elem, top);
};
var tooltipLeft = function ( Elem ) {
return nv.tooltip.findTotalOffsetLeft(Elem,left);
};
switch (gravity) {
case 'e':
left = pos[0] - width - dist;
top = pos[1] - (height / 2);
var tLeft = tooltipLeft(container);
var tTop = tooltipTop(container);
if (tLeft < scrollLeft) left = pos[0] + dist > scrollLeft ? pos[0] + dist : scrollLeft - tLeft + left;
if (tTop < scrollTop) top = scrollTop - tTop + top;
if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
break;
case 'w':
left = pos[0] + dist;
top = pos[1] - (height / 2);
var tLeft = tooltipLeft(container);
var tTop = tooltipTop(container);
if (tLeft + width > windowWidth) left = pos[0] - width - dist;
if (tTop < scrollTop) top = scrollTop + 5;
if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
break;
case 'n':
left = pos[0] - (width / 2) - 5;
top = pos[1] + dist;
var tLeft = tooltipLeft(container);
var tTop = tooltipTop(container);
if (tLeft < scrollLeft) left = scrollLeft + 5;
if (tLeft + width > windowWidth) left = left - width/2 + 5;
if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
break;
case 's':
left = pos[0] - (width / 2);
top = pos[1] - height - dist;
var tLeft = tooltipLeft(container);
var tTop = tooltipTop(container);
if (tLeft < scrollLeft) left = scrollLeft + 5;
if (tLeft + width > windowWidth) left = left - width/2 + 5;
if (scrollTop > tTop) top = scrollTop;
break;
case 'none':
left = pos[0];
top = pos[1] - dist;
var tLeft = tooltipLeft(container);
var tTop = tooltipTop(container);
break;
}
container.style.left = left+'px';
container.style.top = top+'px';
container.style.opacity = 1;
container.style.position = 'absolute';
return container;
};
//Global utility function to remove tooltips from the DOM.
nv.tooltip.cleanup = function() {
// Find the tooltips, mark them for removal by this class (so others cleanups won't find it)
var tooltips = document.getElementsByClassName('nvtooltip');
var purging = [];
while(tooltips.length) {
purging.push(tooltips[0]);
tooltips[0].style.transitionDelay = '0 !important';
tooltips[0].style.opacity = 0;
tooltips[0].className = 'nvtooltip-pending-removal';
}
setTimeout(function() {
while (purging.length) {
var removeMe = purging.pop();
removeMe.parentNode.removeChild(removeMe);
}
}, 500);
};
})();
nv.utils.windowSize = function() {
// Sane defaults
var size = {width: 640, height: 480};
// Earlier IE uses Doc.body
if (document.body && document.body.offsetWidth) {
size.width = document.body.offsetWidth;
size.height = document.body.offsetHeight;
}
// IE can use depending on mode it is in
if (document.compatMode=='CSS1Compat' &&
document.documentElement &&
document.documentElement.offsetWidth ) {
size.width = document.documentElement.offsetWidth;
size.height = document.documentElement.offsetHeight;
}
// Most recent browsers use
if (window.innerWidth && window.innerHeight) {
size.width = window.innerWidth;
size.height = window.innerHeight;
}
return (size);
};
// Easy way to bind multiple functions to window.onresize
// TODO: give a way to remove a function after its bound, other than removing all of them
nv.utils.windowResize = function(fun){
if (fun === undefined) return;
var oldresize = window.onresize;
window.onresize = function(e) {
if (typeof oldresize == 'function') oldresize(e);
fun(e);
}
}
// Backwards compatible way to implement more d3-like coloring of graphs.
// If passed an array, wrap it in a function which implements the old default
// behavior
nv.utils.getColor = function(color) {
if (!arguments.length) return nv.utils.defaultColor(); //if you pass in nothing, get default colors back
if( Object.prototype.toString.call( color ) === '[object Array]' )
return function(d, i) { return d.color || color[i % color.length]; };
else
return color;
//can't really help it if someone passes rubbish as color
}
// Default color chooser uses the index of an object as before.
nv.utils.defaultColor = function() {
var colors = d3.scale.category20().range();
return function(d, i) { return d.color || colors[i % colors.length] };
}
// Returns a color function that takes the result of 'getKey' for each series and
// looks for a corresponding color from the dictionary,
nv.utils.customTheme = function(dictionary, getKey, defaultColors) {
getKey = getKey || function(series) { return series.key }; // use default series.key if getKey is undefined
defaultColors = defaultColors || d3.scale.category20().range(); //default color function
var defIndex = defaultColors.length; //current default color (going in reverse)
return function(series, index) {
var key = getKey(series);
if (!defIndex) defIndex = defaultColors.length; //used all the default colors, start over
if (typeof dictionary[key] !== "undefined")
return (typeof dictionary[key] === "function") ? dictionary[key]() : dictionary[key];
else
return defaultColors[--defIndex]; // no match in dictionary, use default color
}
}
// From the PJAX example on d3js.org, while this is not really directly needed
// it's a very cool method for doing pjax, I may expand upon it a little bit,
// open to suggestions on anything that may be useful
nv.utils.pjax = function(links, content) {
d3.selectAll(links).on("click", function() {
history.pushState(this.href, this.textContent, this.href);
load(this.href);
d3.event.preventDefault();
});
function load(href) {
d3.html(href, function(fragment) {
var target = d3.select(content).node();
target.parentNode.replaceChild(d3.select(fragment).select(content).node(), target);
nv.utils.pjax(links, content);
});
}
d3.select(window).on("popstate", function() {
if (d3.event.state) load(d3.event.state);
});
}
/* For situations where we want to approximate the width in pixels for an SVG:text element.
Most common instance is when the element is in a display:none; container.
Forumla is : text.length * font-size * constant_factor
*/
nv.utils.calcApproxTextWidth = function (svgTextElem) {
if (svgTextElem instanceof d3.selection) {
var fontSize = parseInt(svgTextElem.style("font-size").replace("px",""));
var textLength = svgTextElem.text().length;
return textLength * fontSize * 0.5;
}
return 0;
};
/* Numbers that are undefined, null or NaN, convert them to zeros.
*/
nv.utils.NaNtoZero = function(n) {
if (typeof n !== 'number'
|| isNaN(n)
|| n === null
|| n === Infinity) return 0;
return n;
};
/*
Snippet of code you can insert into each nv.models.* to give you the ability to
do things like:
chart.options({
showXAxis: true,
tooltips: true
});
To enable in the chart:
chart.options = nv.utils.optionsFunc.bind(chart);
*/
nv.utils.optionsFunc = function(args) {
if (args) {
d3.map(args).forEach((function(key,value) {
if (typeof this[key] === "function") {
this[key](value);
}
}).bind(this));
}
return this;
};nv.models.axis = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var axis = d3.svg.axis()
;
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 75 //only used for tickLabel currently
, height = 60 //only used for tickLabel currently
, scale = d3.scale.linear()
, axisLabelText = null
, showMaxMin = true //TODO: showMaxMin should be disabled on all ordinal scaled axes
, highlightZero = true
, rotateLabels = 0
, rotateYLabel = true
, staggerLabels = false
, isOrdinal = false
, ticks = null
, axisLabelDistance = 12 //The larger this number is, the closer the axis label is to the axis.
;
axis
.scale(scale)
.orient('bottom')
.tickFormat(function(d) { return d })
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var scale0;
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this);
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-axis').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-axis');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g')
//------------------------------------------------------------
if (ticks !== null)
axis.ticks(ticks);
else if (axis.orient() == 'top' || axis.orient() == 'bottom')
axis.ticks(Math.abs(scale.range()[1] - scale.range()[0]) / 100);
//TODO: consider calculating width/height based on whether or not label is added, for reference in charts using this component
g.transition().call(axis);
scale0 = scale0 || axis.scale();
var fmt = axis.tickFormat();
if (fmt == null) {
fmt = scale0.tickFormat();
}
var axisLabel = g.selectAll('text.nv-axislabel')
.data([axisLabelText || null]);
axisLabel.exit().remove();
switch (axis.orient()) {
case 'top':
axisLabel.enter().append('text').attr('class', 'nv-axislabel');
var w = (scale.range().length==2) ? scale.range()[1] : (scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]));
axisLabel
.attr('text-anchor', 'middle')
.attr('y', 0)
.attr('x', w/2);
if (showMaxMin) {
var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
.data(scale.domain());
axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text');
axisMaxMin.exit().remove();
axisMaxMin
.attr('transform', function(d,i) {
return 'translate(' + scale(d) + ',0)'
})
.select('text')
.attr('dy', '0em')
.attr('y', -axis.tickPadding())
.attr('text-anchor', 'middle')
.text(function(d,i) {
var v = fmt(d);
return ('' + v).match('NaN') ? '' : v;
});
axisMaxMin.transition()
.attr('transform', function(d,i) {
return 'translate(' + scale.range()[i] + ',0)'
});
}
break;
case 'bottom':
var xLabelMargin = 36;
var maxTextWidth = 30;
var xTicks = g.selectAll('g').select("text");
if (rotateLabels%360) {
//Calculate the longest xTick width
xTicks.each(function(d,i){
var width = this.getBBox().width;
if(width > maxTextWidth) maxTextWidth = width;
});
//Convert to radians before calculating sin. Add 30 to margin for healthy padding.
var sin = Math.abs(Math.sin(rotateLabels*Math.PI/180));
var xLabelMargin = (sin ? sin*maxTextWidth : maxTextWidth)+30;
//Rotate all xTicks
xTicks
.attr('transform', function(d,i,j) { return 'rotate(' + rotateLabels + ' 0,0)' })
.style('text-anchor', rotateLabels%360 > 0 ? 'start' : 'end');
}
axisLabel.enter().append('text').attr('class', 'nv-axislabel');
var w = (scale.range().length==2) ? scale.range()[1] : (scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]));
axisLabel
.attr('text-anchor', 'middle')
.attr('y', xLabelMargin)
.attr('x', w/2);
if (showMaxMin) {
//if (showMaxMin && !isOrdinal) {
var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
//.data(scale.domain())
.data([scale.domain()[0], scale.domain()[scale.domain().length - 1]]);
axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text');
axisMaxMin.exit().remove();
axisMaxMin
.attr('transform', function(d,i) {
return 'translate(' + (scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0)) + ',0)'
})
.select('text')
.attr('dy', '.71em')
.attr('y', axis.tickPadding())
.attr('transform', function(d,i,j) { return 'rotate(' + rotateLabels + ' 0,0)' })
.style('text-anchor', rotateLabels ? (rotateLabels%360 > 0 ? 'start' : 'end') : 'middle')
.text(function(d,i) {
var v = fmt(d);
return ('' + v).match('NaN') ? '' : v;
});
axisMaxMin.transition()
.attr('transform', function(d,i) {
//return 'translate(' + scale.range()[i] + ',0)'
//return 'translate(' + scale(d) + ',0)'
return 'translate(' + (scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0)) + ',0)'
});
}
if (staggerLabels)
xTicks
.attr('transform', function(d,i) { return 'translate(0,' + (i % 2 == 0 ? '0' : '12') + ')' });
break;
case 'right':
axisLabel.enter().append('text').attr('class', 'nv-axislabel');
axisLabel
.style('text-anchor', rotateYLabel ? 'middle' : 'begin')
.attr('transform', rotateYLabel ? 'rotate(90)' : '')
.attr('y', rotateYLabel ? (-Math.max(margin.right,width) + 12) : -10) //TODO: consider calculating this based on largest tick width... OR at least expose this on chart
.attr('x', rotateYLabel ? (scale.range()[0] / 2) : axis.tickPadding());
if (showMaxMin) {
var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
.data(scale.domain());
axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text')
.style('opacity', 0);
axisMaxMin.exit().remove();
axisMaxMin
.attr('transform', function(d,i) {
return 'translate(0,' + scale(d) + ')'
})
.select('text')
.attr('dy', '.32em')
.attr('y', 0)
.attr('x', axis.tickPadding())
.style('text-anchor', 'start')
.text(function(d,i) {
var v = fmt(d);
return ('' + v).match('NaN') ? '' : v;
});
axisMaxMin.transition()
.attr('transform', function(d,i) {
return 'translate(0,' + scale.range()[i] + ')'
})
.select('text')
.style('opacity', 1);
}
break;
case 'left':
/*
//For dynamically placing the label. Can be used with dynamically-sized chart axis margins
var yTicks = g.selectAll('g').select("text");
yTicks.each(function(d,i){
var labelPadding = this.getBBox().width + axis.tickPadding() + 16;
if(labelPadding > width) width = labelPadding;
});
*/
axisLabel.enter().append('text').attr('class', 'nv-axislabel');
axisLabel
.style('text-anchor', rotateYLabel ? 'middle' : 'end')
.attr('transform', rotateYLabel ? 'rotate(-90)' : '')
.attr('y', rotateYLabel ? (-Math.max(margin.left,width) + axisLabelDistance) : -10) //TODO: consider calculating this based on largest tick width... OR at least expose this on chart
.attr('x', rotateYLabel ? (-scale.range()[0] / 2) : -axis.tickPadding());
if (showMaxMin) {
var axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
.data(scale.domain());
axisMaxMin.enter().append('g').attr('class', 'nv-axisMaxMin').append('text')
.style('opacity', 0);
axisMaxMin.exit().remove();
axisMaxMin
.attr('transform', function(d,i) {
return 'translate(0,' + scale0(d) + ')'
})
.select('text')
.attr('dy', '.32em')
.attr('y', 0)
.attr('x', -axis.tickPadding())
.attr('text-anchor', 'end')
.text(function(d,i) {
var v = fmt(d);
return ('' + v).match('NaN') ? '' : v;
});
axisMaxMin.transition()
.attr('transform', function(d,i) {
return 'translate(0,' + scale.range()[i] + ')'
})
.select('text')
.style('opacity', 1);
}
break;
}
axisLabel
.text(function(d) { return d });
if (showMaxMin && (axis.orient() === 'left' || axis.orient() === 'right')) {
//check if max and min overlap other values, if so, hide the values that overlap
g.selectAll('g') // the g's wrapping each tick
.each(function(d,i) {
d3.select(this).select('text').attr('opacity', 1);
if (scale(d) < scale.range()[1] + 10 || scale(d) > scale.range()[0] - 10) { // 10 is assuming text height is 16... if d is 0, leave it!
if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL
d3.select(this).attr('opacity', 0);
d3.select(this).select('text').attr('opacity', 0); // Don't remove the ZERO line!!
}
});
//if Max and Min = 0 only show min, Issue #281
if (scale.domain()[0] == scale.domain()[1] && scale.domain()[0] == 0)
wrap.selectAll('g.nv-axisMaxMin')
.style('opacity', function(d,i) { return !i ? 1 : 0 });
}
if (showMaxMin && (axis.orient() === 'top' || axis.orient() === 'bottom')) {
var maxMinRange = [];
wrap.selectAll('g.nv-axisMaxMin')
.each(function(d,i) {
try {
if (i) // i== 1, max position
maxMinRange.push(scale(d) - this.getBBox().width - 4) //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)
else // i==0, min position
maxMinRange.push(scale(d) + this.getBBox().width + 4)
}catch (err) {
if (i) // i== 1, max position
maxMinRange.push(scale(d) - 4) //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)
else // i==0, min position
maxMinRange.push(scale(d) + 4)
}
});
g.selectAll('g') // the g's wrapping each tick
.each(function(d,i) {
if (scale(d) < maxMinRange[0] || scale(d) > maxMinRange[1]) {
if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL
d3.select(this).remove();
else
d3.select(this).select('text').remove(); // Don't remove the ZERO line!!
}
});
}
//highlight zero line ... Maybe should not be an option and should just be in CSS?
if (highlightZero)
g.selectAll('.tick')
.filter(function(d) { return !parseFloat(Math.round(d.__data__*100000)/1000000) && (d.__data__ !== undefined) }) //this is because sometimes the 0 tick is a very small fraction, TODO: think of cleaner technique
.classed('zero', true);
//store old scales for use in transitions on update
scale0 = scale.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.axis = axis;
d3.rebind(chart, axis, 'orient', 'tickValues', 'tickSubdivide', 'tickSize', 'tickPadding', 'tickFormat');
d3.rebind(chart, scale, 'domain', 'range', 'rangeBand', 'rangeBands'); //these are also accessible by chart.scale(), but added common ones directly for ease of use
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if(!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
}
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.ticks = function(_) {
if (!arguments.length) return ticks;
ticks = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.axisLabel = function(_) {
if (!arguments.length) return axisLabelText;
axisLabelText = _;
return chart;
}
chart.showMaxMin = function(_) {
if (!arguments.length) return showMaxMin;
showMaxMin = _;
return chart;
}
chart.highlightZero = function(_) {
if (!arguments.length) return highlightZero;
highlightZero = _;
return chart;
}
chart.scale = function(_) {
if (!arguments.length) return scale;
scale = _;
axis.scale(scale);
isOrdinal = typeof scale.rangeBands === 'function';
d3.rebind(chart, scale, 'domain', 'range', 'rangeBand', 'rangeBands');
return chart;
}
chart.rotateYLabel = function(_) {
if(!arguments.length) return rotateYLabel;
rotateYLabel = _;
return chart;
}
chart.rotateLabels = function(_) {
if(!arguments.length) return rotateLabels;
rotateLabels = _;
return chart;
}
chart.staggerLabels = function(_) {
if (!arguments.length) return staggerLabels;
staggerLabels = _;
return chart;
};
chart.axisLabelDistance = function(_) {
if (!arguments.length) return axisLabelDistance;
axisLabelDistance = _;
return chart;
};
//============================================================
return chart;
}
// Chart design based on the recommendations of Stephen Few. Implementation
// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
// http://projects.instantcognition.com/protovis/bulletchart/
nv.models.bullet = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, orient = 'left' // TODO top & bottom
, reverse = false
, ranges = function(d) { return d.ranges }
, markers = function(d) { return d.markers }
, measures = function(d) { return d.measures }
, rangeLabels = function(d) { return d.rangeLabels ? d.rangeLabels : [] }
, markerLabels = function(d) { return d.markerLabels ? d.markerLabels : [] }
, measureLabels = function(d) { return d.measureLabels ? d.measureLabels : [] }
, forceX = [0] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)
, width = 380
, height = 30
, tickFormat = null
, color = nv.utils.getColor(['#1f77b4'])
, dispatch = d3.dispatch('elementMouseover', 'elementMouseout')
;
//============================================================
function chart(selection) {
selection.each(function(d, i) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
markerz = markers.call(this, d, i).slice().sort(d3.descending),
measurez = measures.call(this, d, i).slice().sort(d3.descending),
rangeLabelz = rangeLabels.call(this, d, i).slice(),
markerLabelz = markerLabels.call(this, d, i).slice(),
measureLabelz = measureLabels.call(this, d, i).slice();
//------------------------------------------------------------
// Setup Scales
// Compute the new x-scale.
var x1 = d3.scale.linear()
.domain( d3.extent(d3.merge([forceX, rangez])) )
.range(reverse ? [availableWidth, 0] : [0, availableWidth]);
// Retrieve the old x-scale, if this is an update.
var x0 = this.__chart__ || d3.scale.linear()
.domain([0, Infinity])
.range(x1.range());
// Stash the new scale.
this.__chart__ = x1;
var rangeMin = d3.min(rangez), //rangez[2]
rangeMax = d3.max(rangez), //rangez[0]
rangeAvg = rangez[1];
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-bullet').data([d]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bullet');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('rect').attr('class', 'nv-range nv-rangeMax');
gEnter.append('rect').attr('class', 'nv-range nv-rangeAvg');
gEnter.append('rect').attr('class', 'nv-range nv-rangeMin');
gEnter.append('rect').attr('class', 'nv-measure');
gEnter.append('path').attr('class', 'nv-markerTriangle');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)
w1 = function(d) { return Math.abs(x1(d) - x1(0)) };
var xp0 = function(d) { return d < 0 ? x0(d) : x0(0) },
xp1 = function(d) { return d < 0 ? x1(d) : x1(0) };
g.select('rect.nv-rangeMax')
.attr('height', availableHeight)
.attr('width', w1(rangeMax > 0 ? rangeMax : rangeMin))
.attr('x', xp1(rangeMax > 0 ? rangeMax : rangeMin))
.datum(rangeMax > 0 ? rangeMax : rangeMin)
/*
.attr('x', rangeMin < 0 ?
rangeMax > 0 ?
x1(rangeMin)
: x1(rangeMax)
: x1(0))
*/
g.select('rect.nv-rangeAvg')
.attr('height', availableHeight)
.attr('width', w1(rangeAvg))
.attr('x', xp1(rangeAvg))
.datum(rangeAvg)
/*
.attr('width', rangeMax <= 0 ?
x1(rangeMax) - x1(rangeAvg)
: x1(rangeAvg) - x1(rangeMin))
.attr('x', rangeMax <= 0 ?
x1(rangeAvg)
: x1(rangeMin))
*/
g.select('rect.nv-rangeMin')
.attr('height', availableHeight)
.attr('width', w1(rangeMax))
.attr('x', xp1(rangeMax))
.attr('width', w1(rangeMax > 0 ? rangeMin : rangeMax))
.attr('x', xp1(rangeMax > 0 ? rangeMin : rangeMax))
.datum(rangeMax > 0 ? rangeMin : rangeMax)
/*
.attr('width', rangeMax <= 0 ?
x1(rangeAvg) - x1(rangeMin)
: x1(rangeMax) - x1(rangeAvg))
.attr('x', rangeMax <= 0 ?
x1(rangeMin)
: x1(rangeAvg))
*/
g.select('rect.nv-measure')
.style('fill', color)
.attr('height', availableHeight / 3)
.attr('y', availableHeight / 3)
.attr('width', measurez < 0 ?
x1(0) - x1(measurez[0])
: x1(measurez[0]) - x1(0))
.attr('x', xp1(measurez))
.on('mouseover', function() {
dispatch.elementMouseover({
value: measurez[0],
label: measureLabelz[0] || 'Current',
pos: [x1(measurez[0]), availableHeight/2]
})
})
.on('mouseout', function() {
dispatch.elementMouseout({
value: measurez[0],
label: measureLabelz[0] || 'Current'
})
})
var h3 = availableHeight / 6;
if (markerz[0]) {
g.selectAll('path.nv-markerTriangle')
.attr('transform', function(d) { return 'translate(' + x1(markerz[0]) + ',' + (availableHeight / 2) + ')' })
.attr('d', 'M0,' + h3 + 'L' + h3 + ',' + (-h3) + ' ' + (-h3) + ',' + (-h3) + 'Z')
.on('mouseover', function() {
dispatch.elementMouseover({
value: markerz[0],
label: markerLabelz[0] || 'Previous',
pos: [x1(markerz[0]), availableHeight/2]
})
})
.on('mouseout', function() {
dispatch.elementMouseout({
value: markerz[0],
label: markerLabelz[0] || 'Previous'
})
});
} else {
g.selectAll('path.nv-markerTriangle').remove();
}
wrap.selectAll('.nv-range')
.on('mouseover', function(d,i) {
var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum");
dispatch.elementMouseover({
value: d,
label: label,
pos: [x1(d), availableHeight/2]
})
})
.on('mouseout', function(d,i) {
var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum");
dispatch.elementMouseout({
value: d,
label: label
})
})
/* // THIS IS THE PREVIOUS BULLET IMPLEMENTATION, WILL REMOVE SHORTLY
// Update the range rects.
var range = g.selectAll('rect.nv-range')
.data(rangez);
range.enter().append('rect')
.attr('class', function(d, i) { return 'nv-range nv-s' + i; })
.attr('width', w0)
.attr('height', availableHeight)
.attr('x', reverse ? x0 : 0)
.on('mouseover', function(d,i) {
dispatch.elementMouseover({
value: d,
label: (i <= 0) ? 'Maximum' : (i > 1) ? 'Minimum' : 'Mean', //TODO: make these labels a variable
pos: [x1(d), availableHeight/2]
})
})
.on('mouseout', function(d,i) {
dispatch.elementMouseout({
value: d,
label: (i <= 0) ? 'Minimum' : (i >=1) ? 'Maximum' : 'Mean' //TODO: make these labels a variable
})
})
d3.transition(range)
.attr('x', reverse ? x1 : 0)
.attr('width', w1)
.attr('height', availableHeight);
// Update the measure rects.
var measure = g.selectAll('rect.nv-measure')
.data(measurez);
measure.enter().append('rect')
.attr('class', function(d, i) { return 'nv-measure nv-s' + i; })
.style('fill', function(d,i) { return color(d,i ) })
.attr('width', w0)
.attr('height', availableHeight / 3)
.attr('x', reverse ? x0 : 0)
.attr('y', availableHeight / 3)
.on('mouseover', function(d) {
dispatch.elementMouseover({
value: d,
label: 'Current', //TODO: make these labels a variable
pos: [x1(d), availableHeight/2]
})
})
.on('mouseout', function(d) {
dispatch.elementMouseout({
value: d,
label: 'Current' //TODO: make these labels a variable
})
})
d3.transition(measure)
.attr('width', w1)
.attr('height', availableHeight / 3)
.attr('x', reverse ? x1 : 0)
.attr('y', availableHeight / 3);
// Update the marker lines.
var marker = g.selectAll('path.nv-markerTriangle')
.data(markerz);
var h3 = availableHeight / 6;
marker.enter().append('path')
.attr('class', 'nv-markerTriangle')
.attr('transform', function(d) { return 'translate(' + x0(d) + ',' + (availableHeight / 2) + ')' })
.attr('d', 'M0,' + h3 + 'L' + h3 + ',' + (-h3) + ' ' + (-h3) + ',' + (-h3) + 'Z')
.on('mouseover', function(d,i) {
dispatch.elementMouseover({
value: d,
label: 'Previous',
pos: [x1(d), availableHeight/2]
})
})
.on('mouseout', function(d,i) {
dispatch.elementMouseout({
value: d,
label: 'Previous'
})
});
d3.transition(marker)
.attr('transform', function(d) { return 'translate(' + (x1(d) - x1(0)) + ',' + (availableHeight / 2) + ')' });
marker.exit().remove();
*/
});
// d3.timer.flush(); // Not needed?
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
// left, right, top, bottom
chart.orient = function(_) {
if (!arguments.length) return orient;
orient = _;
reverse = orient == 'right' || orient == 'bottom';
return chart;
};
// ranges (bad, satisfactory, good)
chart.ranges = function(_) {
if (!arguments.length) return ranges;
ranges = _;
return chart;
};
// markers (previous, goal)
chart.markers = function(_) {
if (!arguments.length) return markers;
markers = _;
return chart;
};
// measures (actual, forecast)
chart.measures = function(_) {
if (!arguments.length) return measures;
measures = _;
return chart;
};
chart.forceX = function(_) {
if (!arguments.length) return forceX;
forceX = _;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.tickFormat = function(_) {
if (!arguments.length) return tickFormat;
tickFormat = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
//============================================================
return chart;
};
// Chart design based on the recommendations of Stephen Few. Implementation
// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
// http://projects.instantcognition.com/protovis/bulletchart/
nv.models.bulletChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var bullet = nv.models.bullet()
;
var orient = 'left' // TODO top & bottom
, reverse = false
, margin = {top: 5, right: 40, bottom: 20, left: 120}
, ranges = function(d) { return d.ranges }
, markers = function(d) { return d.markers }
, measures = function(d) { return d.measures }
, width = null
, height = 55
, tickFormat = null
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + x + '</h3>' +
'<p>' + y + '</p>'
}
, noData = 'No Data Available.'
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ) + margin.left,
top = e.pos[1] + ( offsetElement.offsetTop || 0) + margin.top,
content = tooltip(e.key, e.label, e.value, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'e' : 'w', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(d, i) {
var container = d3.select(this);
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
that = this;
chart.update = function() { chart(selection) };
chart.container = this;
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!d || !ranges.call(this, d, i)) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', 18 + margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
markerz = markers.call(this, d, i).slice().sort(d3.descending),
measurez = measures.call(this, d, i).slice().sort(d3.descending);
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-bulletChart').data([d]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bulletChart');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-bulletWrap');
gEnter.append('g').attr('class', 'nv-titles');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Compute the new x-scale.
var x1 = d3.scale.linear()
.domain([0, Math.max(rangez[0], markerz[0], measurez[0])]) // TODO: need to allow forceX and forceY, and xDomain, yDomain
.range(reverse ? [availableWidth, 0] : [0, availableWidth]);
// Retrieve the old x-scale, if this is an update.
var x0 = this.__chart__ || d3.scale.linear()
.domain([0, Infinity])
.range(x1.range());
// Stash the new scale.
this.__chart__ = x1;
/*
// Derive width-scales from the x-scales.
var w0 = bulletWidth(x0),
w1 = bulletWidth(x1);
function bulletWidth(x) {
var x0 = x(0);
return function(d) {
return Math.abs(x(d) - x(0));
};
}
function bulletTranslate(x) {
return function(d) {
return 'translate(' + x(d) + ',0)';
};
}
*/
var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)
w1 = function(d) { return Math.abs(x1(d) - x1(0)) };
var title = gEnter.select('.nv-titles').append('g')
.attr('text-anchor', 'end')
.attr('transform', 'translate(-6,' + (height - margin.top - margin.bottom) / 2 + ')');
title.append('text')
.attr('class', 'nv-title')
.text(function(d) { return d.title; });
title.append('text')
.attr('class', 'nv-subtitle')
.attr('dy', '1em')
.text(function(d) { return d.subtitle; });
bullet
.width(availableWidth)
.height(availableHeight)
var bulletWrap = g.select('.nv-bulletWrap');
d3.transition(bulletWrap).call(bullet);
// Compute the tick format.
var format = tickFormat || x1.tickFormat( availableWidth / 100 );
// Update the tick groups.
var tick = g.selectAll('g.nv-tick')
.data(x1.ticks( availableWidth / 50 ), function(d) {
return this.textContent || format(d);
});
// Initialize the ticks with the old scale, x0.
var tickEnter = tick.enter().append('g')
.attr('class', 'nv-tick')
.attr('transform', function(d) { return 'translate(' + x0(d) + ',0)' })
.style('opacity', 1e-6);
tickEnter.append('line')
.attr('y1', availableHeight)
.attr('y2', availableHeight * 7 / 6);
tickEnter.append('text')
.attr('text-anchor', 'middle')
.attr('dy', '1em')
.attr('y', availableHeight * 7 / 6)
.text(format);
// Transition the updating ticks to the new scale, x1.
var tickUpdate = d3.transition(tick)
.attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })
.style('opacity', 1);
tickUpdate.select('line')
.attr('y1', availableHeight)
.attr('y2', availableHeight * 7 / 6);
tickUpdate.select('text')
.attr('y', availableHeight * 7 / 6);
// Transition the exiting ticks to the new scale, x1.
d3.transition(tick.exit())
.attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })
.style('opacity', 1e-6)
.remove();
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
dispatch.on('tooltipShow', function(e) {
e.key = d.title;
if (tooltips) showTooltip(e, that.parentNode);
});
//============================================================
});
d3.timer.flush();
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
bullet.dispatch.on('elementMouseover.tooltip', function(e) {
dispatch.tooltipShow(e);
});
bullet.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.bullet = bullet;
d3.rebind(chart, bullet, 'color');
chart.options = nv.utils.optionsFunc.bind(chart);
// left, right, top, bottom
chart.orient = function(x) {
if (!arguments.length) return orient;
orient = x;
reverse = orient == 'right' || orient == 'bottom';
return chart;
};
// ranges (bad, satisfactory, good)
chart.ranges = function(x) {
if (!arguments.length) return ranges;
ranges = x;
return chart;
};
// markers (previous, goal)
chart.markers = function(x) {
if (!arguments.length) return markers;
markers = x;
return chart;
};
// measures (actual, forecast)
chart.measures = function(x) {
if (!arguments.length) return measures;
measures = x;
return chart;
};
chart.width = function(x) {
if (!arguments.length) return width;
width = x;
return chart;
};
chart.height = function(x) {
if (!arguments.length) return height;
height = x;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.tickFormat = function(x) {
if (!arguments.length) return tickFormat;
tickFormat = x;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
//============================================================
return chart;
};
nv.models.cumulativeLineChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var lines = nv.models.line()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, controls = nv.models.legend()
, interactiveLayer = nv.interactiveGuideline()
;
var margin = {top: 30, right: 30, bottom: 50, left: 60}
, color = nv.utils.defaultColor()
, width = null
, height = null
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, tooltips = true
, showControls = true
, useInteractiveGuideline = false
, rescaleY = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>'
}
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, id = lines.id()
, state = { index: 0, rescaleY: rescaleY }
, defaultState = null
, noData = 'No Data Available.'
, average = function(d) { return d.average }
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, transitionDuration = 250
;
xAxis
.orient('bottom')
.tickPadding(7)
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
;
//============================================================
controls.updateState(false);
//============================================================
// Private Variables
//------------------------------------------------------------
var dx = d3.scale.linear()
, index = {i: 0, x: 0}
;
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, null, null, offsetElement);
};
/*
//Moved to see if we can get better behavior to fix issue #315
var indexDrag = d3.behavior.drag()
.on('dragstart', dragStart)
.on('drag', dragMove)
.on('dragend', dragEnd);
function dragStart(d,i) {
d3.select(chart.container)
.style('cursor', 'ew-resize');
}
function dragMove(d,i) {
d.x += d3.event.dx;
d.i = Math.round(dx.invert(d.x));
d3.select(this).attr('transform', 'translate(' + dx(d.i) + ',0)');
chart.update();
}
function dragEnd(d,i) {
d3.select(chart.container)
.style('cursor', 'auto');
chart.update();
}
*/
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this).classed('nv-chart-' + id, true),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
var indexDrag = d3.behavior.drag()
.on('dragstart', dragStart)
.on('drag', dragMove)
.on('dragend', dragEnd);
function dragStart(d,i) {
d3.select(chart.container)
.style('cursor', 'ew-resize');
}
function dragMove(d,i) {
index.x = d3.event.x;
index.i = Math.round(dx.invert(index.x));
updateZero();
}
function dragEnd(d,i) {
d3.select(chart.container)
.style('cursor', 'auto');
// update state and send stateChange with new index
state.index = index.i;
dispatch.stateChange(state);
}
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = lines.xScale();
y = lines.yScale();
if (!rescaleY) {
var seriesDomains = data
.filter(function(series) { return !series.disabled })
.map(function(series,i) {
var initialDomain = d3.extent(series.values, lines.y());
//account for series being disabled when losing 95% or more
if (initialDomain[0] < -.95) initialDomain[0] = -.95;
return [
(initialDomain[0] - initialDomain[1]) / (1 + initialDomain[1]),
(initialDomain[1] - initialDomain[0]) / (1 + initialDomain[0])
];
});
var completeDomain = [
d3.min(seriesDomains, function(d) { return d[0] }),
d3.max(seriesDomains, function(d) { return d[1] })
]
lines.yDomain(completeDomain);
} else {
lines.yDomain(null);
}
dx .domain([0, data[0].values.length - 1]) //Assumes all series have same length
.range([0, availableWidth])
.clamp(true);
//------------------------------------------------------------
var data = indexify(index.i, data);
//------------------------------------------------------------
// Setup containers and skeleton of chart
var interactivePointerEvents = (useInteractiveGuideline) ? "none" : "all";
var wrap = container.selectAll('g.nv-wrap.nv-cumulativeLine').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-cumulativeLine').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-interactive');
gEnter.append('g').attr('class', 'nv-x nv-axis').style("pointer-events","none");
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-background');
gEnter.append('g').attr('class', 'nv-linesWrap').style("pointer-events",interactivePointerEvents);
gEnter.append('g').attr('class', 'nv-avgLinesWrap').style("pointer-events","none");
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth);
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')')
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
var controlsData = [
{ key: 'Re-scale y-axis', disabled: !rescaleY }
];
controls.width(140).color(['#444', '#444', '#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.attr('transform', 'translate(0,' + (-margin.top) +')')
.call(controls);
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
// Show error if series goes below 100%
var tempDisabled = data.filter(function(d) { return d.tempDisabled });
wrap.select('.tempDisabled').remove(); //clean-up and prevent duplicates
if (tempDisabled.length) {
wrap.append('text').attr('class', 'tempDisabled')
.attr('x', availableWidth / 2)
.attr('y', '-.71em')
.style('text-anchor', 'end')
.text(tempDisabled.map(function(d) { return d.key }).join(', ') + ' values cannot be calculated for this time period.');
}
//------------------------------------------------------------
// Main Chart Component(s)
//------------------------------------------------------------
//Set up interactive layer
if (useInteractiveGuideline) {
interactiveLayer
.width(availableWidth)
.height(availableHeight)
.margin({left:margin.left,top:margin.top})
.svgContainer(container)
.xScale(x);
wrap.select(".nv-interactive").call(interactiveLayer);
}
gEnter.select('.nv-background')
.append('rect');
g.select('.nv-background rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
lines
//.x(function(d) { return d.x })
.y(function(d) { return d.display.y })
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && !data[i].tempDisabled; }));
var linesWrap = g.select('.nv-linesWrap')
.datum(data.filter(function(d) { return !d.disabled && !d.tempDisabled }));
//d3.transition(linesWrap).call(lines);
linesWrap.call(lines);
/*Handle average lines [AN-612] ----------------------------*/
//Store a series index number in the data array.
data.forEach(function(d,i) {
d.seriesIndex = i;
});
var avgLineData = data.filter(function(d) {
return !d.disabled && !!average(d);
});
var avgLines = g.select(".nv-avgLinesWrap").selectAll("line")
.data(avgLineData, function(d) { return d.key; });
var getAvgLineY = function(d) {
//If average lines go off the svg element, clamp them to the svg bounds.
var yVal = y(average(d));
if (yVal < 0) return 0;
if (yVal > availableHeight) return availableHeight;
return yVal;
};
avgLines.enter()
.append('line')
.style('stroke-width',2)
.style('stroke-dasharray','10,10')
.style('stroke',function (d,i) {
return lines.color()(d,d.seriesIndex);
})
.attr('x1',0)
.attr('x2',availableWidth)
.attr('y1', getAvgLineY)
.attr('y2', getAvgLineY);
avgLines
.style('stroke-opacity',function(d){
//If average lines go offscreen, make them transparent
var yVal = y(average(d));
if (yVal < 0 || yVal > availableHeight) return 0;
return 1;
})
.attr('x1',0)
.attr('x2',availableWidth)
.attr('y1', getAvgLineY)
.attr('y2', getAvgLineY);
avgLines.exit().remove();
//Create index line -----------------------------------------
var indexLine = linesWrap.selectAll('.nv-indexLine')
.data([index]);
indexLine.enter().append('rect').attr('class', 'nv-indexLine')
.attr('width', 3)
.attr('x', -2)
.attr('fill', 'red')
.attr('fill-opacity', .5)
.style("pointer-events","all")
.call(indexDrag)
indexLine
.attr('transform', function(d) { return 'translate(' + dx(d.i) + ',0)' })
.attr('height', availableHeight)
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
//Suggest how many ticks based on the chart width and D3 should listen (70 is the optimal number for MM/DD/YY dates)
.ticks( Math.min(data[0].values.length,availableWidth/70) )
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')');
d3.transition(g.select('.nv-x.nv-axis'))
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
d3.transition(g.select('.nv-y.nv-axis'))
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
function updateZero() {
indexLine
.data([index]);
//When dragging the index line, turn off line transitions.
// Then turn them back on when done dragging.
var oldDuration = chart.transitionDuration();
chart.transitionDuration(0);
chart.update();
chart.transitionDuration(oldDuration);
}
g.select('.nv-background rect')
.on('click', function() {
index.x = d3.mouse(this)[0];
index.i = Math.round(dx.invert(index.x));
// update state and send stateChange with new index
state.index = index.i;
dispatch.stateChange(state);
updateZero();
});
lines.dispatch.on('elementClick', function(e) {
index.i = e.pointIndex;
index.x = dx(index.i);
// update state and send stateChange with new index
state.index = index.i;
dispatch.stateChange(state);
updateZero();
});
controls.dispatch.on('legendClick', function(d,i) {
d.disabled = !d.disabled;
rescaleY = !d.disabled;
state.rescaleY = rescaleY;
dispatch.stateChange(state);
chart.update();
});
legend.dispatch.on('stateChange', function(newState) {
state.disabled = newState.disabled;
dispatch.stateChange(state);
chart.update();
});
interactiveLayer.dispatch.on('elementMousemove', function(e) {
lines.clearHighlights();
var singlePoint, pointIndex, pointXLocation, allData = [];
data
.filter(function(series, i) {
series.seriesIndex = i;
return !series.disabled;
})
.forEach(function(series,i) {
pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
lines.highlightPoint(i, pointIndex, true);
var point = series.values[pointIndex];
if (typeof point === 'undefined') return;
if (typeof singlePoint === 'undefined') singlePoint = point;
if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
allData.push({
key: series.key,
value: chart.y()(point, pointIndex),
color: color(series,series.seriesIndex)
});
});
//Highlight the tooltip entry based on which point the mouse is closest to.
if (allData.length > 2) {
var yValue = chart.yScale().invert(e.mouseY);
var yDistMax = Infinity, indexToHighlight = null;
allData.forEach(function(series,i) {
var delta = Math.abs(yValue - series.value);
if ( delta < yDistMax) {
yDistMax = delta;
indexToHighlight = i;
}
});
allData[indexToHighlight].highlight = true;
}
var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex), pointIndex);
interactiveLayer.tooltip
.position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
.chartContainer(that.parentNode)
.enabled(tooltips)
.valueFormatter(function(d,i) {
return yAxis.tickFormat()(d);
})
.data(
{
value: xValue,
series: allData
}
)();
interactiveLayer.renderGuideLine(pointXLocation);
});
interactiveLayer.dispatch.on("elementMouseout",function(e) {
dispatch.tooltipHide();
lines.clearHighlights();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
if (typeof e.index !== 'undefined') {
index.i = e.index;
index.x = dx(index.i);
state.index = e.index;
indexLine
.data([index]);
}
if (typeof e.rescaleY !== 'undefined') {
rescaleY = e.rescaleY;
}
chart.update();
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.lines = lines;
chart.legend = legend;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.interactiveLayer = interactiveLayer;
d3.rebind(chart, lines, 'defined', 'isArea', 'x', 'y', 'xScale','yScale', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi','useVoronoi', 'id');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.rescaleY = function(_) {
if (!arguments.length) return rescaleY;
rescaleY = _
return rescaleY;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.useInteractiveGuideline = function(_) {
if(!arguments.length) return useInteractiveGuideline;
useInteractiveGuideline = _;
if (_ === true) {
chart.interactive(false);
chart.useVoronoi(false);
}
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.average = function(_) {
if(!arguments.length) return average;
average = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
//============================================================
// Functions
//------------------------------------------------------------
/* Normalize the data according to an index point. */
function indexify(idx, data) {
return data.map(function(line, i) {
if (!line.values) {
return line;
}
var v = lines.y()(line.values[idx], idx);
//TODO: implement check below, and disable series if series loses 100% or more cause divide by 0 issue
if (v < -.95) {
//if a series loses more than 100%, calculations fail.. anything close can cause major distortion (but is mathematically correct till it hits 100)
line.tempDisabled = true;
return line;
}
line.tempDisabled = false;
line.values = line.values.map(function(point, pointIndex) {
point.display = {'y': (lines.y()(point, pointIndex) - v) / (1 + v) };
return point;
})
return line;
})
}
//============================================================
return chart;
}
//TODO: consider deprecating by adding necessary features to multiBar model
nv.models.discreteBar = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, x = d3.scale.ordinal()
, y = d3.scale.linear()
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
, color = nv.utils.defaultColor()
, showValues = false
, valueFormat = d3.format(',.2f')
, xDomain
, yDomain
, xRange
, yRange
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
, rectClass = 'discreteBar'
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//add series index to each data point for reference
data = data.map(function(series, i) {
series.values = series.values.map(function(point) {
point.series = i;
return point;
});
return series;
});
//------------------------------------------------------------
// Setup Scales
// remap and flatten the data for use in calculating the scales' domains
var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
data.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i), y0: d.y0 }
})
});
x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
.rangeBands(xRange || [0, availableWidth], .1);
y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y }).concat(forceY)));
// If showValues, pad the Y axis range to account for label height
if (showValues) y.range(yRange || [availableHeight - (y.domain()[0] < 0 ? 12 : 0), y.domain()[1] > 0 ? 12 : 0]);
else y.range(yRange || [availableHeight, 0]);
//store old scales if they exist
x0 = x0 || x;
y0 = y0 || y.copy().range([y(0),y(0)]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-discretebar').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discretebar');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-groups');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
//TODO: by definition, the discrete bar should not have multiple groups, will modify/remove later
var groups = wrap.select('.nv-groups').selectAll('.nv-group')
.data(function(d) { return d }, function(d) { return d.key });
groups.enter().append('g')
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6);
groups.exit()
.transition()
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6)
.remove();
groups
.attr('class', function(d,i) { return 'nv-group nv-series-' + i })
.classed('hover', function(d) { return d.hover });
groups
.transition()
.style('stroke-opacity', 1)
.style('fill-opacity', .75);
var bars = groups.selectAll('g.nv-bar')
.data(function(d) { return d.values });
bars.exit().remove();
var barsEnter = bars.enter().append('g')
.attr('transform', function(d,i,j) {
return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05 ) + ', ' + y(0) + ')'
})
.on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('mouseout', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
value: getY(d,i),
point: d,
series: data[d.series],
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('click', function(d,i) {
dispatch.elementClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
dispatch.elementDblClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (d.series + .5) / data.length), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
});
barsEnter.append('rect')
.attr('height', 0)
.attr('width', x.rangeBand() * .9 / data.length )
if (showValues) {
barsEnter.append('text')
.attr('text-anchor', 'middle')
;
bars.select('text')
.text(function(d,i) { return valueFormat(getY(d,i)) })
.transition()
.attr('x', x.rangeBand() * .9 / 2)
.attr('y', function(d,i) { return getY(d,i) < 0 ? y(getY(d,i)) - y(0) + 12 : -4 })
;
} else {
bars.selectAll('text').remove();
}
bars
.attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive' })
.style('fill', function(d,i) { return d.color || color(d,i) })
.style('stroke', function(d,i) { return d.color || color(d,i) })
.select('rect')
.attr('class', rectClass)
.transition()
.attr('width', x.rangeBand() * .9 / data.length);
bars.transition()
//.delay(function(d,i) { return i * 1200 / data[0].values.length })
.attr('transform', function(d,i) {
var left = x(getX(d,i)) + x.rangeBand() * .05,
top = getY(d,i) < 0 ?
y(0) :
y(0) - y(getY(d,i)) < 1 ?
y(0) - 1 : //make 1 px positive bars show up above y=0
y(getY(d,i));
return 'translate(' + left + ', ' + top + ')'
})
.select('rect')
.attr('height', function(d,i) {
return Math.max(Math.abs(y(getY(d,i)) - y((yDomain && yDomain[0]) || 0)) || 1)
});
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.showValues = function(_) {
if (!arguments.length) return showValues;
showValues = _;
return chart;
};
chart.valueFormat= function(_) {
if (!arguments.length) return valueFormat;
valueFormat = _;
return chart;
};
chart.rectClass= function(_) {
if (!arguments.length) return rectClass;
rectClass = _;
return chart;
};
//============================================================
return chart;
}
nv.models.discreteBarChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var discretebar = nv.models.discreteBar()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
;
var margin = {top: 15, right: 10, bottom: 50, left: 60}
, width = null
, height = null
, color = nv.utils.getColor()
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, staggerLabels = false
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + x + '</h3>' +
'<p>' + y + '</p>'
}
, x
, y
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'beforeUpdate')
, transitionDuration = 250
;
xAxis
.orient('bottom')
.highlightZero(false)
.showMaxMin(false)
.tickFormat(function(d) { return d })
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
.tickFormat(d3.format(',.1f'))
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(discretebar.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(discretebar.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() {
dispatch.beforeUpdate();
container.transition().duration(transitionDuration).call(chart);
};
chart.container = this;
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = discretebar.xScale();
y = discretebar.yScale().clamp(true);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-discreteBarWithAxes').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discreteBarWithAxes').append('g');
var defsEnter = gEnter.append('defs');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-barsWrap');
g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
//------------------------------------------------------------
// Main Chart Component(s)
discretebar
.width(availableWidth)
.height(availableHeight);
var barsWrap = g.select('.nv-barsWrap')
.datum(data.filter(function(d) { return !d.disabled }))
barsWrap.transition().call(discretebar);
//------------------------------------------------------------
defsEnter.append('clipPath')
.attr('id', 'nv-x-label-clip-' + discretebar.id())
.append('rect');
g.select('#nv-x-label-clip-' + discretebar.id() + ' rect')
.attr('width', x.rangeBand() * (staggerLabels ? 2 : 1))
.attr('height', 16)
.attr('x', -x.rangeBand() / (staggerLabels ? 1 : 2 ));
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + (y.range()[0] + ((discretebar.showValues() && y.domain()[0] < 0) ? 16 : 0)) + ')');
//d3.transition(g.select('.nv-x.nv-axis'))
g.select('.nv-x.nv-axis').transition()
.call(xAxis);
var xTicks = g.select('.nv-x.nv-axis').selectAll('g');
if (staggerLabels) {
xTicks
.selectAll('text')
.attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 == 0 ? '5' : '17') + ')' })
}
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis').transition()
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
discretebar.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
discretebar.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.discretebar = discretebar;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
d3.rebind(chart, discretebar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'id', 'showValues', 'valueFormat');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
discretebar.color(color);
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.staggerLabels = function(_) {
if (!arguments.length) return staggerLabels;
staggerLabels = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.distribution = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 400 //technically width or height depending on x or y....
, size = 8
, axis = 'x' // 'x' or 'y'... horizontal or vertical
, getData = function(d) { return d[axis] } // defaults d.x or d.y
, color = nv.utils.defaultColor()
, scale = d3.scale.linear()
, domain
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var scale0;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableLength = width - (axis === 'x' ? margin.left + margin.right : margin.top + margin.bottom),
naxis = axis == 'x' ? 'y' : 'x',
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
scale0 = scale0 || scale;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-distribution').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-distribution');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
//------------------------------------------------------------
var distWrap = g.selectAll('g.nv-dist')
.data(function(d) { return d }, function(d) { return d.key });
distWrap.enter().append('g');
distWrap
.attr('class', function(d,i) { return 'nv-dist nv-series-' + i })
.style('stroke', function(d,i) { return color(d, i) });
var dist = distWrap.selectAll('line.nv-dist' + axis)
.data(function(d) { return d.values })
dist.enter().append('line')
.attr(axis + '1', function(d,i) { return scale0(getData(d,i)) })
.attr(axis + '2', function(d,i) { return scale0(getData(d,i)) })
distWrap.exit().selectAll('line.nv-dist' + axis)
.transition()
.attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
.attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
.style('stroke-opacity', 0)
.remove();
dist
.attr('class', function(d,i) { return 'nv-dist' + axis + ' nv-dist' + axis + '-' + i })
.attr(naxis + '1', 0)
.attr(naxis + '2', size);
dist
.transition()
.attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
.attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
scale0 = scale.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.axis = function(_) {
if (!arguments.length) return axis;
axis = _;
return chart;
};
chart.size = function(_) {
if (!arguments.length) return size;
size = _;
return chart;
};
chart.getData = function(_) {
if (!arguments.length) return getData;
getData = d3.functor(_);
return chart;
};
chart.scale = function(_) {
if (!arguments.length) return scale;
scale = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
//============================================================
return chart;
}
//TODO: consider deprecating and using multibar with single series for this
nv.models.historicalBar = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, x = d3.scale.linear()
, y = d3.scale.linear()
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, forceX = []
, forceY = [0]
, padData = false
, clipEdge = true
, color = nv.utils.defaultColor()
, xDomain
, yDomain
, xRange
, yRange
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
, interactive = true
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
x .domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ))
if (padData)
x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
else
x.range(xRange || [0, availableWidth]);
y .domain(yDomain || d3.extent(data[0].values.map(getY).concat(forceY) ))
.range(yRange || [availableHeight, 0]);
// If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
if (x.domain()[0] === x.domain()[1])
x.domain()[0] ?
x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
: x.domain([-1,1]);
if (y.domain()[0] === y.domain()[1])
y.domain()[0] ?
y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
: y.domain([-1,1]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-historicalBar-' + id).data([data[0].values]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBar-' + id);
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-bars');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
container
.on('click', function(d,i) {
dispatch.chartClick({
data: d,
index: i,
pos: d3.event,
id: id
});
});
defsEnter.append('clipPath')
.attr('id', 'nv-chart-clip-path-' + id)
.append('rect');
wrap.select('#nv-chart-clip-path-' + id + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');
var bars = wrap.select('.nv-bars').selectAll('.nv-bar')
.data(function(d) { return d }, function(d,i) {return getX(d,i)});
bars.exit().remove();
var barsEnter = bars.enter().append('rect')
//.attr('class', function(d,i,j) { return (getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive') + ' nv-bar-' + j + '-' + i })
.attr('x', 0 )
.attr('y', function(d,i) { return nv.utils.NaNtoZero(y(Math.max(0, getY(d,i)))) })
.attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.abs(y(getY(d,i)) - y(0))) })
.attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })
.on('mouseover', function(d,i) {
if (!interactive) return;
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
point: d,
series: data[0],
pos: [x(getX(d,i)), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: 0,
e: d3.event
});
})
.on('mouseout', function(d,i) {
if (!interactive) return;
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
point: d,
series: data[0],
pointIndex: i,
seriesIndex: 0,
e: d3.event
});
})
.on('click', function(d,i) {
if (!interactive) return;
dispatch.elementClick({
//label: d[label],
value: getY(d,i),
data: d,
index: i,
pos: [x(getX(d,i)), y(getY(d,i))],
e: d3.event,
id: id
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
if (!interactive) return;
dispatch.elementDblClick({
//label: d[label],
value: getY(d,i),
data: d,
index: i,
pos: [x(getX(d,i)), y(getY(d,i))],
e: d3.event,
id: id
});
d3.event.stopPropagation();
});
bars
.attr('fill', function(d,i) { return color(d, i); })
.attr('class', function(d,i,j) { return (getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive') + ' nv-bar-' + j + '-' + i })
.transition()
.attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })
//TODO: better width calculations that don't assume always uniform data spacing;w
.attr('width', (availableWidth / data[0].values.length) * .9 );
bars.transition()
.attr('y', function(d,i) {
var rval = getY(d,i) < 0 ?
y(0) :
y(0) - y(getY(d,i)) < 1 ?
y(0) - 1 :
y(getY(d,i));
return nv.utils.NaNtoZero(rval);
})
.attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.max(Math.abs(y(getY(d,i)) - y(0)),1)) });
});
return chart;
}
//Create methods to allow outside functions to highlight a specific bar.
chart.highlightPoint = function(pointIndex, isHoverOver) {
d3.select(".nv-historicalBar-" + id)
.select(".nv-bars .nv-bar-0-" + pointIndex)
.classed("hover", isHoverOver)
;
};
chart.clearHighlights = function() {
d3.select(".nv-historicalBar-" + id)
.select(".nv-bars .nv-bar.hover")
.classed("hover", false)
;
};
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.forceX = function(_) {
if (!arguments.length) return forceX;
forceX = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.padData = function(_) {
if (!arguments.length) return padData;
padData = _;
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.interactive = function(_) {
if(!arguments.length) return interactive;
interactive = false;
return chart;
};
//============================================================
return chart;
}
nv.models.historicalBarChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var bars = nv.models.historicalBar()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
;
var margin = {top: 30, right: 90, bottom: 50, left: 90}
, color = nv.utils.defaultColor()
, width = null
, height = null
, showLegend = false
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>'
}
, x
, y
, state = {}
, defaultState = null
, noData = 'No Data Available.'
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, transitionDuration = 250
;
xAxis
.orient('bottom')
.tickPadding(7)
;
yAxis
.orient( (rightAlignYAxis) ? 'right' : 'left')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
// New addition to calculate position if SVG is scaled with viewBox, may move TODO: consider implementing everywhere else
if (offsetElement) {
var svg = d3.select(offsetElement).select('svg');
var viewBox = (svg.node()) ? svg.attr('viewBox') : null;
if (viewBox) {
viewBox = viewBox.split(' ');
var ratio = parseInt(svg.style('width')) / viewBox[2];
e.pos[0] = e.pos[0] * ratio;
e.pos[1] = e.pos[1] * ratio;
}
}
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(bars.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(bars.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, null, null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display noData message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = bars.xScale();
y = bars.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-historicalBarChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBarChart').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-barsWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth);
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
wrap.select('.nv-legendWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')')
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
// Main Chart Component(s)
bars
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
var barsWrap = g.select('.nv-barsWrap')
.datum(data.filter(function(d) { return !d.disabled }))
barsWrap.transition().call(bars);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')');
g.select('.nv-x.nv-axis')
.transition()
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis')
.transition()
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('legendClick', function(d,i) {
d.disabled = !d.disabled;
if (!data.filter(function(d) { return !d.disabled }).length) {
data.map(function(d) {
d.disabled = false;
wrap.selectAll('.nv-series').classed('disabled', false);
return d;
});
}
state.disabled = data.map(function(d) { return !!d.disabled });
dispatch.stateChange(state);
selection.transition().call(chart);
});
legend.dispatch.on('legendDblclick', function(d) {
//Double clicking should always enable current series, and disabled all others.
data.forEach(function(d) {
d.disabled = true;
});
d.disabled = false;
state.disabled = data.map(function(d) { return !!d.disabled });
dispatch.stateChange(state);
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
selection.call(chart);
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
bars.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
bars.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.bars = bars;
chart.legend = legend;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
d3.rebind(chart, bars, 'defined', 'isArea', 'x', 'y', 'size', 'xScale', 'yScale',
'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id', 'interpolate','highlightPoint','clearHighlights', 'interactive');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.indentedTree = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0} //TODO: implement, maybe as margin on the containing div
, width = 960
, height = 500
, color = nv.utils.defaultColor()
, id = Math.floor(Math.random() * 10000)
, header = true
, filterZero = false
, noData = "No Data Available."
, childIndent = 20
, columns = [{key:'key', label: 'Name', type:'text'}] //TODO: consider functions like chart.addColumn, chart.removeColumn, instead of a block like this
, tableClass = null
, iconOpen = 'images/grey-plus.png' //TODO: consider removing this and replacing with a '+' or '-' unless user defines images
, iconClose = 'images/grey-minus.png'
, dispatch = d3.dispatch('elementClick', 'elementDblclick', 'elementMouseover', 'elementMouseout')
, getUrl = function(d) { return d.url }
;
//============================================================
var idx = 0;
function chart(selection) {
selection.each(function(data) {
var depth = 1,
container = d3.select(this);
var tree = d3.layout.tree()
.children(function(d) { return d.values })
.size([height, childIndent]); //Not sure if this is needed now that the result is HTML
chart.update = function() { container.transition().duration(600).call(chart) };
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data[0]) data[0] = {key: noData};
//------------------------------------------------------------
var nodes = tree.nodes(data[0]);
// nodes.map(function(d) {
// d.id = i++;
// })
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = d3.select(this).selectAll('div').data([[nodes]]);
var wrapEnter = wrap.enter().append('div').attr('class', 'nvd3 nv-wrap nv-indentedtree');
var tableEnter = wrapEnter.append('table');
var table = wrap.select('table').attr('width', '100%').attr('class', tableClass);
//------------------------------------------------------------
if (header) {
var thead = tableEnter.append('thead');
var theadRow1 = thead.append('tr');
columns.forEach(function(column) {
theadRow1
.append('th')
.attr('width', column.width ? column.width : '10%')
.style('text-align', column.type == 'numeric' ? 'right' : 'left')
.append('span')
.text(column.label);
});
}
var tbody = table.selectAll('tbody')
.data(function(d) { return d });
tbody.enter().append('tbody');
//compute max generations
depth = d3.max(nodes, function(node) { return node.depth });
tree.size([height, depth * childIndent]); //TODO: see if this is necessary at all
// Update the nodes…
var node = tbody.selectAll('tr')
// .data(function(d) { return d; }, function(d) { return d.id || (d.id == ++i)});
.data(function(d) { return d.filter(function(d) { return (filterZero && !d.children) ? filterZero(d) : true; } )}, function(d,i) { return d.id || (d.id || ++idx)});
//.style('display', 'table-row'); //TODO: see if this does anything
node.exit().remove();
node.select('img.nv-treeicon')
.attr('src', icon)
.classed('folded', folded);
var nodeEnter = node.enter().append('tr');
columns.forEach(function(column, index) {
var nodeName = nodeEnter.append('td')
.style('padding-left', function(d) { return (index ? 0 : d.depth * childIndent + 12 + (icon(d) ? 0 : 16)) + 'px' }, 'important') //TODO: check why I did the ternary here
.style('text-align', column.type == 'numeric' ? 'right' : 'left');
if (index == 0) {
nodeName.append('img')
.classed('nv-treeicon', true)
.classed('nv-folded', folded)
.attr('src', icon)
.style('width', '14px')
.style('height', '14px')
.style('padding', '0 1px')
.style('display', function(d) { return icon(d) ? 'inline-block' : 'none'; })
.on('click', click);
}
nodeName.each(function(d) {
if (!index && getUrl(d))
d3.select(this)
.append('a')
.attr('href',getUrl)
.attr('class', d3.functor(column.classes))
.append('span')
else
d3.select(this)
.append('span')
d3.select(this).select('span')
.attr('class', d3.functor(column.classes) )
.text(function(d) { return column.format ? column.format(d) :
(d[column.key] || '-') });
});
if (column.showCount) {
nodeName.append('span')
.attr('class', 'nv-childrenCount');
node.selectAll('span.nv-childrenCount').text(function(d) {
return ((d.values && d.values.length) || (d._values && d._values.length)) ? //If this is a parent
'(' + ((d.values && (d.values.filter(function(d) { return filterZero ? filterZero(d) : true; }).length)) //If children are in values check its children and filter
|| (d._values && d._values.filter(function(d) { return filterZero ? filterZero(d) : true; }).length) //Otherwise, do the same, but with the other name, _values...
|| 0) + ')' //This is the catch-all in case there are no children after a filter
: '' //If this is not a parent, just give an empty string
});
}
// if (column.click)
// nodeName.select('span').on('click', column.click);
});
node
.order()
.on('click', function(d) {
dispatch.elementClick({
row: this, //TODO: decide whether or not this should be consistent with scatter/line events or should be an html link (a href)
data: d,
pos: [d.x, d.y]
});
})
.on('dblclick', function(d) {
dispatch.elementDblclick({
row: this,
data: d,
pos: [d.x, d.y]
});
})
.on('mouseover', function(d) {
dispatch.elementMouseover({
row: this,
data: d,
pos: [d.x, d.y]
});
})
.on('mouseout', function(d) {
dispatch.elementMouseout({
row: this,
data: d,
pos: [d.x, d.y]
});
});
// Toggle children on click.
function click(d, _, unshift) {
d3.event.stopPropagation();
if(d3.event.shiftKey && !unshift) {
//If you shift-click, it'll toggle fold all the children, instead of itself
d3.event.shiftKey = false;
d.values && d.values.forEach(function(node){
if (node.values || node._values) {
click(node, 0, true);
}
});
return true;
}
if(!hasChildren(d)) {
//download file
//window.location.href = d.url;
return true;
}
if (d.values) {
d._values = d.values;
d.values = null;
} else {
d.values = d._values;
d._values = null;
}
chart.update();
}
function icon(d) {
return (d._values && d._values.length) ? iconOpen : (d.values && d.values.length) ? iconClose : '';
}
function folded(d) {
return (d._values && d._values.length);
}
function hasChildren(d) {
var values = d.values || d._values;
return (values && values.length);
}
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
scatter.color(color);
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.header = function(_) {
if (!arguments.length) return header;
header = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.filterZero = function(_) {
if (!arguments.length) return filterZero;
filterZero = _;
return chart;
};
chart.columns = function(_) {
if (!arguments.length) return columns;
columns = _;
return chart;
};
chart.tableClass = function(_) {
if (!arguments.length) return tableClass;
tableClass = _;
return chart;
};
chart.iconOpen = function(_){
if (!arguments.length) return iconOpen;
iconOpen = _;
return chart;
}
chart.iconClose = function(_){
if (!arguments.length) return iconClose;
iconClose = _;
return chart;
}
chart.getUrl = function(_){
if (!arguments.length) return getUrl;
getUrl = _;
return chart;
}
//============================================================
return chart;
};nv.models.legend = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 5, right: 0, bottom: 5, left: 0}
, width = 400
, height = 20
, getKey = function(d) { return d.key }
, color = nv.utils.defaultColor()
, align = true
, rightAlign = true
, updateState = true //If true, legend will update data.disabled and trigger a 'stateChange' dispatch.
, radioButtonMode = false //If true, clicking legend items will cause it to behave like a radio button. (only one can be selected at a time)
, dispatch = d3.dispatch('legendClick', 'legendDblclick', 'legendMouseover', 'legendMouseout', 'stateChange')
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
container = d3.select(this);
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-legend').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-legend').append('g');
var g = wrap.select('g');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
var series = g.selectAll('.nv-series')
.data(function(d) { return d });
var seriesEnter = series.enter().append('g').attr('class', 'nv-series')
.on('mouseover', function(d,i) {
dispatch.legendMouseover(d,i); //TODO: Make consistent with other event objects
})
.on('mouseout', function(d,i) {
dispatch.legendMouseout(d,i);
})
.on('click', function(d,i) {
dispatch.legendClick(d,i);
if (updateState) {
if (radioButtonMode) {
//Radio button mode: set every series to disabled,
// and enable the clicked series.
data.forEach(function(series) { series.disabled = true});
d.disabled = false;
}
else {
d.disabled = !d.disabled;
if (data.every(function(series) { return series.disabled})) {
//the default behavior of NVD3 legends is, if every single series
// is disabled, turn all series' back on.
data.forEach(function(series) { series.disabled = false});
}
}
dispatch.stateChange({
disabled: data.map(function(d) { return !!d.disabled })
});
}
})
.on('dblclick', function(d,i) {
dispatch.legendDblclick(d,i);
if (updateState) {
//the default behavior of NVD3 legends, when double clicking one,
// is to set all other series' to false, and make the double clicked series enabled.
data.forEach(function(series) {
series.disabled = true;
});
d.disabled = false;
dispatch.stateChange({
disabled: data.map(function(d) { return !!d.disabled })
});
}
});
seriesEnter.append('circle')
.style('stroke-width', 2)
.attr('class','nv-legend-symbol')
.attr('r', 5);
seriesEnter.append('text')
.attr('text-anchor', 'start')
.attr('class','nv-legend-text')
.attr('dy', '.32em')
.attr('dx', '8');
series.classed('disabled', function(d) { return d.disabled });
series.exit().remove();
series.select('circle')
.style('fill', function(d,i) { return d.color || color(d,i)})
.style('stroke', function(d,i) { return d.color || color(d, i) });
series.select('text').text(getKey);
//TODO: implement fixed-width and max-width options (max-width is especially useful with the align option)
// NEW ALIGNING CODE, TODO: clean up
if (align) {
var seriesWidths = [];
series.each(function(d,i) {
var legendText = d3.select(this).select('text');
var nodeTextLength;
try {
nodeTextLength = legendText.node().getComputedTextLength();
}
catch(e) {
nodeTextLength = nv.utils.calcApproxTextWidth(legendText);
}
seriesWidths.push(nodeTextLength + 28); // 28 is ~ the width of the circle plus some padding
});
var seriesPerRow = 0;
var legendWidth = 0;
var columnWidths = [];
while ( legendWidth < availableWidth && seriesPerRow < seriesWidths.length) {
columnWidths[seriesPerRow] = seriesWidths[seriesPerRow];
legendWidth += seriesWidths[seriesPerRow++];
}
if (seriesPerRow === 0) seriesPerRow = 1; //minimum of one series per row
while ( legendWidth > availableWidth && seriesPerRow > 1 ) {
columnWidths = [];
seriesPerRow--;
for (var k = 0; k < seriesWidths.length; k++) {
if (seriesWidths[k] > (columnWidths[k % seriesPerRow] || 0) )
columnWidths[k % seriesPerRow] = seriesWidths[k];
}
legendWidth = columnWidths.reduce(function(prev, cur, index, array) {
return prev + cur;
});
}
var xPositions = [];
for (var i = 0, curX = 0; i < seriesPerRow; i++) {
xPositions[i] = curX;
curX += columnWidths[i];
}
series
.attr('transform', function(d, i) {
return 'translate(' + xPositions[i % seriesPerRow] + ',' + (5 + Math.floor(i / seriesPerRow) * 20) + ')';
});
//position legend as far right as possible within the total width
if (rightAlign) {
g.attr('transform', 'translate(' + (width - margin.right - legendWidth) + ',' + margin.top + ')');
}
else {
g.attr('transform', 'translate(0' + ',' + margin.top + ')');
}
height = margin.top + margin.bottom + (Math.ceil(seriesWidths.length / seriesPerRow) * 20);
} else {
var ypos = 5,
newxpos = 5,
maxwidth = 0,
xpos;
series
.attr('transform', function(d, i) {
var length = d3.select(this).select('text').node().getComputedTextLength() + 28;
xpos = newxpos;
if (width < margin.left + margin.right + xpos + length) {
newxpos = xpos = 5;
ypos += 20;
}
newxpos += length;
if (newxpos > maxwidth) maxwidth = newxpos;
return 'translate(' + xpos + ',' + ypos + ')';
});
//position legend as far right as possible within the total width
g.attr('transform', 'translate(' + (width - margin.right - maxwidth) + ',' + margin.top + ')');
height = margin.top + margin.bottom + ypos + 15;
}
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.key = function(_) {
if (!arguments.length) return getKey;
getKey = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.align = function(_) {
if (!arguments.length) return align;
align = _;
return chart;
};
chart.rightAlign = function(_) {
if (!arguments.length) return rightAlign;
rightAlign = _;
return chart;
};
chart.updateState = function(_) {
if (!arguments.length) return updateState;
updateState = _;
return chart;
};
chart.radioButtonMode = function(_) {
if (!arguments.length) return radioButtonMode;
radioButtonMode = _;
return chart;
};
//============================================================
return chart;
}
nv.models.line = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var scatter = nv.models.scatter()
;
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, color = nv.utils.defaultColor() // a function that returns a color
, getX = function(d) { return d.x } // accessor to get the x value from a data point
, getY = function(d) { return d.y } // accessor to get the y value from a data point
, defined = function(d,i) { return !isNaN(getY(d,i)) && getY(d,i) !== null } // allows a line to be not continuous when it is not defined
, isArea = function(d) { return d.area } // decides if a line is an area or just a line
, clipEdge = false // if true, masks lines within x and y scale
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, interpolate = "linear" // controls the line interpolation
;
scatter
.size(16) // default size
.sizeDomain([16,256]) //set to speed up calculation, needs to be unset if there is a custom size accessor
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0 //used to store previous scales
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
x = scatter.xScale();
y = scatter.yScale();
x0 = x0 || x;
y0 = y0 || y;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-line').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-line');
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g')
gEnter.append('g').attr('class', 'nv-groups');
gEnter.append('g').attr('class', 'nv-scatterWrap');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
scatter
.width(availableWidth)
.height(availableHeight)
var scatterWrap = wrap.select('.nv-scatterWrap');
//.datum(data); // Data automatically trickles down from the wrap
scatterWrap.transition().call(scatter);
defsEnter.append('clipPath')
.attr('id', 'nv-edge-clip-' + scatter.id())
.append('rect');
wrap.select('#nv-edge-clip-' + scatter.id() + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');
scatterWrap
.attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');
var groups = wrap.select('.nv-groups').selectAll('.nv-group')
.data(function(d) { return d }, function(d) { return d.key });
groups.enter().append('g')
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6);
groups.exit()
.transition()
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6)
.remove();
groups
.attr('class', function(d,i) { return 'nv-group nv-series-' + i })
.classed('hover', function(d) { return d.hover })
.style('fill', function(d,i){ return color(d, i) })
.style('stroke', function(d,i){ return color(d, i)});
groups
.transition()
.style('stroke-opacity', 1)
.style('fill-opacity', .5);
var areaPaths = groups.selectAll('path.nv-area')
.data(function(d) { return isArea(d) ? [d] : [] }); // this is done differently than lines because I need to check if series is an area
areaPaths.enter().append('path')
.attr('class', 'nv-area')
.attr('d', function(d) {
return d3.svg.area()
.interpolate(interpolate)
.defined(defined)
.x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })
.y0(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })
.y1(function(d,i) { return y0( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })
//.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this
.apply(this, [d.values])
});
groups.exit().selectAll('path.nv-area')
.remove();
areaPaths
.transition()
.attr('d', function(d) {
return d3.svg.area()
.interpolate(interpolate)
.defined(defined)
.x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
.y0(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
.y1(function(d,i) { return y( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })
//.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this
.apply(this, [d.values])
});
var linePaths = groups.selectAll('path.nv-line')
.data(function(d) { return [d.values] });
linePaths.enter().append('path')
.attr('class', 'nv-line')
.attr('d',
d3.svg.line()
.interpolate(interpolate)
.defined(defined)
.x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })
.y(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })
);
groups.exit().selectAll('path.nv-line')
.transition()
.attr('d',
d3.svg.line()
.interpolate(interpolate)
.defined(defined)
.x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
.y(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
);
linePaths
.transition()
.attr('d',
d3.svg.line()
.interpolate(interpolate)
.defined(defined)
.x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
.y(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
);
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = scatter.dispatch;
chart.scatter = scatter;
d3.rebind(chart, scatter, 'id', 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',
'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'useVoronoi', 'clipRadius', 'padData','highlightPoint','clearHighlights');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
scatter.x(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
scatter.y(_);
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
scatter.color(color);
return chart;
};
chart.interpolate = function(_) {
if (!arguments.length) return interpolate;
interpolate = _;
return chart;
};
chart.defined = function(_) {
if (!arguments.length) return defined;
defined = _;
return chart;
};
chart.isArea = function(_) {
if (!arguments.length) return isArea;
isArea = d3.functor(_);
return chart;
};
//============================================================
return chart;
}
nv.models.lineChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var lines = nv.models.line()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, interactiveLayer = nv.interactiveGuideline()
;
var margin = {top: 30, right: 20, bottom: 50, left: 60}
, color = nv.utils.defaultColor()
, width = null
, height = null
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, useInteractiveGuideline = false
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>'
}
, x
, y
, state = {}
, defaultState = null
, noData = 'No Data Available.'
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, transitionDuration = 250
;
xAxis
.orient('bottom')
.tickPadding(7)
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, null, null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display noData message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = lines.xScale();
y = lines.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-lineChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineChart').append('g');
var g = wrap.select('g');
gEnter.append("rect").style("opacity",0);
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-linesWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-interactive');
g.select("rect").attr("width",availableWidth).attr("height",availableHeight);
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth);
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
wrap.select('.nv-legendWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')')
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
// Main Chart Component(s)
//------------------------------------------------------------
//Set up interactive layer
if (useInteractiveGuideline) {
interactiveLayer
.width(availableWidth)
.height(availableHeight)
.margin({left:margin.left, top:margin.top})
.svgContainer(container)
.xScale(x);
wrap.select(".nv-interactive").call(interactiveLayer);
}
lines
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
var linesWrap = g.select('.nv-linesWrap')
.datum(data.filter(function(d) { return !d.disabled }))
linesWrap.transition().call(lines);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')');
g.select('.nv-x.nv-axis')
.transition()
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis')
.transition()
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
interactiveLayer.dispatch.on('elementMousemove', function(e) {
lines.clearHighlights();
var singlePoint, pointIndex, pointXLocation, allData = [];
data
.filter(function(series, i) {
series.seriesIndex = i;
return !series.disabled;
})
.forEach(function(series,i) {
pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
lines.highlightPoint(i, pointIndex, true);
var point = series.values[pointIndex];
if (typeof point === 'undefined') return;
if (typeof singlePoint === 'undefined') singlePoint = point;
if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
allData.push({
key: series.key,
value: chart.y()(point, pointIndex),
color: color(series,series.seriesIndex)
});
});
//Highlight the tooltip entry based on which point the mouse is closest to.
if (allData.length > 2) {
var yValue = chart.yScale().invert(e.mouseY);
var yDistMax = Infinity, indexToHighlight = null;
allData.forEach(function(series,i) {
var delta = Math.abs(yValue - series.value);
if ( delta < yDistMax) {
yDistMax = delta;
indexToHighlight = i;
}
});
allData[indexToHighlight].highlight = true;
}
var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
interactiveLayer.tooltip
.position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
.chartContainer(that.parentNode)
.enabled(tooltips)
.valueFormatter(function(d,i) {
return yAxis.tickFormat()(d);
})
.data(
{
value: xValue,
series: allData
}
)();
interactiveLayer.renderGuideLine(pointXLocation);
});
interactiveLayer.dispatch.on("elementMouseout",function(e) {
dispatch.tooltipHide();
lines.clearHighlights();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
chart.update();
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.lines = lines;
chart.legend = legend;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.interactiveLayer = interactiveLayer;
d3.rebind(chart, lines, 'defined', 'isArea', 'x', 'y', 'size', 'xScale', 'yScale', 'xDomain', 'yDomain', 'xRange', 'yRange'
, 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'useVoronoi','id', 'interpolate');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.useInteractiveGuideline = function(_) {
if(!arguments.length) return useInteractiveGuideline;
useInteractiveGuideline = _;
if (_ === true) {
chart.interactive(false);
chart.useVoronoi(false);
}
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.linePlusBarChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var lines = nv.models.line()
, bars = nv.models.historicalBar()
, xAxis = nv.models.axis()
, y1Axis = nv.models.axis()
, y2Axis = nv.models.axis()
, legend = nv.models.legend()
;
var margin = {top: 30, right: 60, bottom: 50, left: 60}
, width = null
, height = null
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, color = nv.utils.defaultColor()
, showLegend = true
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>';
}
, x
, y1
, y2
, state = {}
, defaultState = null
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
;
bars
.padData(true)
;
lines
.clipEdge(false)
.padData(true)
;
xAxis
.orient('bottom')
.tickPadding(7)
.highlightZero(false)
;
y1Axis
.orient('left')
;
y2Axis
.orient('right')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),
y = (e.series.bar ? y1Axis : y2Axis).tickFormat()(lines.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
}
;
//------------------------------------------------------------
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().call(chart); };
// chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
var dataBars = data.filter(function(d) { return !d.disabled && d.bar });
var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240
//x = xAxis.scale();
x = dataLines.filter(function(d) { return !d.disabled; }).length && dataLines.filter(function(d) { return !d.disabled; })[0].values.length ? lines.xScale() : bars.xScale();
//x = dataLines.filter(function(d) { return !d.disabled; }).length ? lines.xScale() : bars.xScale(); //old code before change above
y1 = bars.yScale();
y2 = lines.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = d3.select(this).selectAll('g.nv-wrap.nv-linePlusBar').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-linePlusBar').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y1 nv-axis');
gEnter.append('g').attr('class', 'nv-y2 nv-axis');
gEnter.append('g').attr('class', 'nv-barsWrap');
gEnter.append('g').attr('class', 'nv-linesWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width( availableWidth / 2 );
g.select('.nv-legendWrap')
.datum(data.map(function(series) {
series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;
series.key = series.originalKey + (series.bar ? ' (left axis)' : ' (right axis)');
return series;
}))
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Main Chart Component(s)
lines
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && !data[i].bar }))
bars
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && data[i].bar }))
var barsWrap = g.select('.nv-barsWrap')
.datum(dataBars.length ? dataBars : [{values:[]}])
var linesWrap = g.select('.nv-linesWrap')
.datum(dataLines[0] && !dataLines[0].disabled ? dataLines : [{values:[]}] );
//.datum(!dataLines[0].disabled ? dataLines : [{values:dataLines[0].values.map(function(d) { return [d[0], null] }) }] );
d3.transition(barsWrap).call(bars);
d3.transition(linesWrap).call(lines);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y1.range()[0] + ')');
d3.transition(g.select('.nv-x.nv-axis'))
.call(xAxis);
y1Axis
.scale(y1)
.ticks( availableHeight / 36 )
.tickSize(-availableWidth, 0);
d3.transition(g.select('.nv-y1.nv-axis'))
.style('opacity', dataBars.length ? 1 : 0)
.call(y1Axis);
y2Axis
.scale(y2)
.ticks( availableHeight / 36 )
.tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none
g.select('.nv-y2.nv-axis')
.style('opacity', dataLines.length ? 1 : 0)
.attr('transform', 'translate(' + availableWidth + ',0)');
//.attr('transform', 'translate(' + x.range()[1] + ',0)');
d3.transition(g.select('.nv-y2.nv-axis'))
.call(y2Axis);
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
chart.update();
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
bars.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
bars.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.legend = legend;
chart.lines = lines;
chart.bars = bars;
chart.xAxis = xAxis;
chart.y1Axis = y1Axis;
chart.y2Axis = y2Axis;
d3.rebind(chart, lines, 'defined', 'size', 'clipVoronoi', 'interpolate');
//TODO: consider rebinding x, y and some other stuff, and simply do soemthign lile bars.x(lines.x()), etc.
//d3.rebind(chart, lines, 'x', 'y', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
lines.x(_);
bars.x(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
lines.y(_);
bars.y(_);
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
//============================================================
return chart;
}
nv.models.lineWithFocusChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var lines = nv.models.line()
, lines2 = nv.models.line()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, x2Axis = nv.models.axis()
, y2Axis = nv.models.axis()
, legend = nv.models.legend()
, brush = d3.svg.brush()
;
var margin = {top: 30, right: 30, bottom: 30, left: 60}
, margin2 = {top: 0, right: 30, bottom: 20, left: 60}
, color = nv.utils.defaultColor()
, width = null
, height = null
, height2 = 100
, x
, y
, x2
, y2
, showLegend = true
, brushExtent = null
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>'
}
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'brush')
, transitionDuration = 250
;
lines
.clipEdge(true)
;
lines2
.interactive(false)
;
xAxis
.orient('bottom')
.tickPadding(5)
;
yAxis
.orient('left')
;
x2Axis
.orient('bottom')
.tickPadding(5)
;
y2Axis
.orient('left')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(lines.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, null, null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight1 = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom - height2,
availableHeight2 = height2 - margin2.top - margin2.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight1 / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = lines.xScale();
y = lines.yScale();
x2 = lines2.xScale();
y2 = lines2.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-lineWithFocusChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineWithFocusChart').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-legendWrap');
var focusEnter = gEnter.append('g').attr('class', 'nv-focus');
focusEnter.append('g').attr('class', 'nv-x nv-axis');
focusEnter.append('g').attr('class', 'nv-y nv-axis');
focusEnter.append('g').attr('class', 'nv-linesWrap');
var contextEnter = gEnter.append('g').attr('class', 'nv-context');
contextEnter.append('g').attr('class', 'nv-x nv-axis');
contextEnter.append('g').attr('class', 'nv-y nv-axis');
contextEnter.append('g').attr('class', 'nv-linesWrap');
contextEnter.append('g').attr('class', 'nv-brushBackground');
contextEnter.append('g').attr('class', 'nv-x nv-brush');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth);
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight1 = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom - height2;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')')
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Main Chart Component(s)
lines
.width(availableWidth)
.height(availableHeight1)
.color(
data
.map(function(d,i) {
return d.color || color(d, i);
})
.filter(function(d,i) {
return !data[i].disabled;
})
);
lines2
.defined(lines.defined())
.width(availableWidth)
.height(availableHeight2)
.color(
data
.map(function(d,i) {
return d.color || color(d, i);
})
.filter(function(d,i) {
return !data[i].disabled;
})
);
g.select('.nv-context')
.attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')')
var contextLinesWrap = g.select('.nv-context .nv-linesWrap')
.datum(data.filter(function(d) { return !d.disabled }))
d3.transition(contextLinesWrap).call(lines2);
//------------------------------------------------------------
/*
var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
.datum(data.filter(function(d) { return !d.disabled }))
d3.transition(focusLinesWrap).call(lines);
*/
//------------------------------------------------------------
// Setup Main (Focus) Axes
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight1, 0);
yAxis
.scale(y)
.ticks( availableHeight1 / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-focus .nv-x.nv-axis')
.attr('transform', 'translate(0,' + availableHeight1 + ')');
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Brush
brush
.x(x2)
.on('brush', function() {
//When brushing, turn off transitions because chart needs to change immediately.
var oldTransition = chart.transitionDuration();
chart.transitionDuration(0);
onBrush();
chart.transitionDuration(oldTransition);
});
if (brushExtent) brush.extent(brushExtent);
var brushBG = g.select('.nv-brushBackground').selectAll('g')
.data([brushExtent || brush.extent()])
var brushBGenter = brushBG.enter()
.append('g');
brushBGenter.append('rect')
.attr('class', 'left')
.attr('x', 0)
.attr('y', 0)
.attr('height', availableHeight2);
brushBGenter.append('rect')
.attr('class', 'right')
.attr('x', 0)
.attr('y', 0)
.attr('height', availableHeight2);
var gBrush = g.select('.nv-x.nv-brush')
.call(brush);
gBrush.selectAll('rect')
//.attr('y', -5)
.attr('height', availableHeight2);
gBrush.selectAll('.resize').append('path').attr('d', resizePath);
onBrush();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Secondary (Context) Axes
x2Axis
.scale(x2)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight2, 0);
g.select('.nv-context .nv-x.nv-axis')
.attr('transform', 'translate(0,' + y2.range()[0] + ')');
d3.transition(g.select('.nv-context .nv-x.nv-axis'))
.call(x2Axis);
y2Axis
.scale(y2)
.ticks( availableHeight2 / 36 )
.tickSize( -availableWidth, 0);
d3.transition(g.select('.nv-context .nv-y.nv-axis'))
.call(y2Axis);
g.select('.nv-context .nv-x.nv-axis')
.attr('transform', 'translate(0,' + y2.range()[0] + ')');
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
//============================================================
//============================================================
// Functions
//------------------------------------------------------------
// Taken from crossfilter (http://square.github.com/crossfilter/)
function resizePath(d) {
var e = +(d == 'e'),
x = e ? 1 : -1,
y = availableHeight2 / 3;
return 'M' + (.5 * x) + ',' + y
+ 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)
+ 'V' + (2 * y - 6)
+ 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)
+ 'Z'
+ 'M' + (2.5 * x) + ',' + (y + 8)
+ 'V' + (2 * y - 8)
+ 'M' + (4.5 * x) + ',' + (y + 8)
+ 'V' + (2 * y - 8);
}
function updateBrushBG() {
if (!brush.empty()) brush.extent(brushExtent);
brushBG
.data([brush.empty() ? x2.domain() : brushExtent])
.each(function(d,i) {
var leftWidth = x2(d[0]) - x.range()[0],
rightWidth = x.range()[1] - x2(d[1]);
d3.select(this).select('.left')
.attr('width', leftWidth < 0 ? 0 : leftWidth);
d3.select(this).select('.right')
.attr('x', x2(d[1]))
.attr('width', rightWidth < 0 ? 0 : rightWidth);
});
}
function onBrush() {
brushExtent = brush.empty() ? null : brush.extent();
var extent = brush.empty() ? x2.domain() : brush.extent();
//The brush extent cannot be less than one. If it is, don't update the line chart.
if (Math.abs(extent[0] - extent[1]) <= 1) {
return;
}
dispatch.brush({extent: extent, brush: brush});
updateBrushBG();
// Update Main (Focus)
var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
.datum(
data
.filter(function(d) { return !d.disabled })
.map(function(d,i) {
return {
key: d.key,
values: d.values.filter(function(d,i) {
return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
})
}
})
);
focusLinesWrap.transition().duration(transitionDuration).call(lines);
// Update Main (Focus) Axes
g.select('.nv-focus .nv-x.nv-axis').transition().duration(transitionDuration)
.call(xAxis);
g.select('.nv-focus .nv-y.nv-axis').transition().duration(transitionDuration)
.call(yAxis);
}
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.legend = legend;
chart.lines = lines;
chart.lines2 = lines2;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.x2Axis = x2Axis;
chart.y2Axis = y2Axis;
d3.rebind(chart, lines, 'defined', 'isArea', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return lines.x;
lines.x(_);
lines2.x(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return lines.y;
lines.y(_);
lines2.y(_);
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.margin2 = function(_) {
if (!arguments.length) return margin2;
margin2 = _;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.height2 = function(_) {
if (!arguments.length) return height2;
height2 = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color =nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.interpolate = function(_) {
if (!arguments.length) return lines.interpolate();
lines.interpolate(_);
lines2.interpolate(_);
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
// Chart has multiple similar Axes, to prevent code duplication, probably need to link all axis functions manually like below
chart.xTickFormat = function(_) {
if (!arguments.length) return xAxis.tickFormat();
xAxis.tickFormat(_);
x2Axis.tickFormat(_);
return chart;
};
chart.yTickFormat = function(_) {
if (!arguments.length) return yAxis.tickFormat();
yAxis.tickFormat(_);
y2Axis.tickFormat(_);
return chart;
};
chart.brushExtent = function(_) {
if (!arguments.length) return brushExtent;
brushExtent = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.linePlusBarWithFocusChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var lines = nv.models.line()
, lines2 = nv.models.line()
, bars = nv.models.historicalBar()
, bars2 = nv.models.historicalBar()
, xAxis = nv.models.axis()
, x2Axis = nv.models.axis()
, y1Axis = nv.models.axis()
, y2Axis = nv.models.axis()
, y3Axis = nv.models.axis()
, y4Axis = nv.models.axis()
, legend = nv.models.legend()
, brush = d3.svg.brush()
;
var margin = {top: 30, right: 30, bottom: 30, left: 60}
, margin2 = {top: 0, right: 30, bottom: 20, left: 60}
, width = null
, height = null
, height2 = 100
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, color = nv.utils.defaultColor()
, showLegend = true
, extent
, brushExtent = null
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>';
}
, x
, x2
, y1
, y2
, y3
, y4
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'brush')
, transitionDuration = 0
;
lines
.clipEdge(true)
;
lines2
.interactive(false)
;
xAxis
.orient('bottom')
.tickPadding(5)
;
y1Axis
.orient('left')
;
y2Axis
.orient('right')
;
x2Axis
.orient('bottom')
.tickPadding(5)
;
y3Axis
.orient('left')
;
y4Axis
.orient('right')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
if (extent) {
e.pointIndex += Math.ceil(extent[0]);
}
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines.x()(e.point, e.pointIndex)),
y = (e.series.bar ? y1Axis : y2Axis).tickFormat()(lines.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
};
//------------------------------------------------------------
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight1 = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom - height2,
availableHeight2 = height2 - margin2.top - margin2.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart); };
chart.container = this;
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight1 / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
var dataBars = data.filter(function(d) { return !d.disabled && d.bar });
var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240
x = bars.xScale();
x2 = x2Axis.scale();
y1 = bars.yScale();
y2 = lines.yScale();
y3 = bars2.yScale();
y4 = lines2.yScale();
var series1 = data
.filter(function(d) { return !d.disabled && d.bar })
.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i) }
})
});
var series2 = data
.filter(function(d) { return !d.disabled && !d.bar })
.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i) }
})
});
x .range([0, availableWidth]);
x2 .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))
.range([0, availableWidth]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-linePlusBar').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-linePlusBar').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-legendWrap');
var focusEnter = gEnter.append('g').attr('class', 'nv-focus');
focusEnter.append('g').attr('class', 'nv-x nv-axis');
focusEnter.append('g').attr('class', 'nv-y1 nv-axis');
focusEnter.append('g').attr('class', 'nv-y2 nv-axis');
focusEnter.append('g').attr('class', 'nv-barsWrap');
focusEnter.append('g').attr('class', 'nv-linesWrap');
var contextEnter = gEnter.append('g').attr('class', 'nv-context');
contextEnter.append('g').attr('class', 'nv-x nv-axis');
contextEnter.append('g').attr('class', 'nv-y1 nv-axis');
contextEnter.append('g').attr('class', 'nv-y2 nv-axis');
contextEnter.append('g').attr('class', 'nv-barsWrap');
contextEnter.append('g').attr('class', 'nv-linesWrap');
contextEnter.append('g').attr('class', 'nv-brushBackground');
contextEnter.append('g').attr('class', 'nv-x nv-brush');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width( availableWidth / 2 );
g.select('.nv-legendWrap')
.datum(data.map(function(series) {
series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;
series.key = series.originalKey + (series.bar ? ' (left axis)' : ' (right axis)');
return series;
}))
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight1 = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom - height2;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Context Components
bars2
.width(availableWidth)
.height(availableHeight2)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && data[i].bar }));
lines2
.width(availableWidth)
.height(availableHeight2)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && !data[i].bar }));
var bars2Wrap = g.select('.nv-context .nv-barsWrap')
.datum(dataBars.length ? dataBars : [{values:[]}]);
var lines2Wrap = g.select('.nv-context .nv-linesWrap')
.datum(!dataLines[0].disabled ? dataLines : [{values:[]}]);
g.select('.nv-context')
.attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')')
bars2Wrap.transition().call(bars2);
lines2Wrap.transition().call(lines2);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Brush
brush
.x(x2)
.on('brush', onBrush);
if (brushExtent) brush.extent(brushExtent);
var brushBG = g.select('.nv-brushBackground').selectAll('g')
.data([brushExtent || brush.extent()])
var brushBGenter = brushBG.enter()
.append('g');
brushBGenter.append('rect')
.attr('class', 'left')
.attr('x', 0)
.attr('y', 0)
.attr('height', availableHeight2);
brushBGenter.append('rect')
.attr('class', 'right')
.attr('x', 0)
.attr('y', 0)
.attr('height', availableHeight2);
var gBrush = g.select('.nv-x.nv-brush')
.call(brush);
gBrush.selectAll('rect')
//.attr('y', -5)
.attr('height', availableHeight2);
gBrush.selectAll('.resize').append('path').attr('d', resizePath);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Secondary (Context) Axes
x2Axis
.ticks( availableWidth / 100 )
.tickSize(-availableHeight2, 0);
g.select('.nv-context .nv-x.nv-axis')
.attr('transform', 'translate(0,' + y3.range()[0] + ')');
g.select('.nv-context .nv-x.nv-axis').transition()
.call(x2Axis);
y3Axis
.scale(y3)
.ticks( availableHeight2 / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-context .nv-y1.nv-axis')
.style('opacity', dataBars.length ? 1 : 0)
.attr('transform', 'translate(0,' + x2.range()[0] + ')');
g.select('.nv-context .nv-y1.nv-axis').transition()
.call(y3Axis);
y4Axis
.scale(y4)
.ticks( availableHeight2 / 36 )
.tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none
g.select('.nv-context .nv-y2.nv-axis')
.style('opacity', dataLines.length ? 1 : 0)
.attr('transform', 'translate(' + x2.range()[1] + ',0)');
g.select('.nv-context .nv-y2.nv-axis').transition()
.call(y4Axis);
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
//============================================================
//============================================================
// Functions
//------------------------------------------------------------
// Taken from crossfilter (http://square.github.com/crossfilter/)
function resizePath(d) {
var e = +(d == 'e'),
x = e ? 1 : -1,
y = availableHeight2 / 3;
return 'M' + (.5 * x) + ',' + y
+ 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)
+ 'V' + (2 * y - 6)
+ 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)
+ 'Z'
+ 'M' + (2.5 * x) + ',' + (y + 8)
+ 'V' + (2 * y - 8)
+ 'M' + (4.5 * x) + ',' + (y + 8)
+ 'V' + (2 * y - 8);
}
function updateBrushBG() {
if (!brush.empty()) brush.extent(brushExtent);
brushBG
.data([brush.empty() ? x2.domain() : brushExtent])
.each(function(d,i) {
var leftWidth = x2(d[0]) - x2.range()[0],
rightWidth = x2.range()[1] - x2(d[1]);
d3.select(this).select('.left')
.attr('width', leftWidth < 0 ? 0 : leftWidth);
d3.select(this).select('.right')
.attr('x', x2(d[1]))
.attr('width', rightWidth < 0 ? 0 : rightWidth);
});
}
function onBrush() {
brushExtent = brush.empty() ? null : brush.extent();
extent = brush.empty() ? x2.domain() : brush.extent();
dispatch.brush({extent: extent, brush: brush});
updateBrushBG();
//------------------------------------------------------------
// Prepare Main (Focus) Bars and Lines
bars
.width(availableWidth)
.height(availableHeight1)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && data[i].bar }));
lines
.width(availableWidth)
.height(availableHeight1)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled && !data[i].bar }));
var focusBarsWrap = g.select('.nv-focus .nv-barsWrap')
.datum(!dataBars.length ? [{values:[]}] :
dataBars
.map(function(d,i) {
return {
key: d.key,
values: d.values.filter(function(d,i) {
return bars.x()(d,i) >= extent[0] && bars.x()(d,i) <= extent[1];
})
}
})
);
var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
.datum(dataLines[0].disabled ? [{values:[]}] :
dataLines
.map(function(d,i) {
return {
key: d.key,
values: d.values.filter(function(d,i) {
return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
})
}
})
);
//------------------------------------------------------------
//------------------------------------------------------------
// Update Main (Focus) X Axis
if (dataBars.length) {
x = bars.xScale();
} else {
x = lines.xScale();
}
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight1, 0);
xAxis.domain([Math.ceil(extent[0]), Math.floor(extent[1])]);
g.select('.nv-x.nv-axis').transition().duration(transitionDuration)
.call(xAxis);
//------------------------------------------------------------
//------------------------------------------------------------
// Update Main (Focus) Bars and Lines
focusBarsWrap.transition().duration(transitionDuration).call(bars);
focusLinesWrap.transition().duration(transitionDuration).call(lines);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup and Update Main (Focus) Y Axes
g.select('.nv-focus .nv-x.nv-axis')
.attr('transform', 'translate(0,' + y1.range()[0] + ')');
y1Axis
.scale(y1)
.ticks( availableHeight1 / 36 )
.tickSize(-availableWidth, 0);
g.select('.nv-focus .nv-y1.nv-axis')
.style('opacity', dataBars.length ? 1 : 0);
y2Axis
.scale(y2)
.ticks( availableHeight1 / 36 )
.tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none
g.select('.nv-focus .nv-y2.nv-axis')
.style('opacity', dataLines.length ? 1 : 0)
.attr('transform', 'translate(' + x.range()[1] + ',0)');
g.select('.nv-focus .nv-y1.nv-axis').transition().duration(transitionDuration)
.call(y1Axis);
g.select('.nv-focus .nv-y2.nv-axis').transition().duration(transitionDuration)
.call(y2Axis);
}
//============================================================
onBrush();
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
bars.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
bars.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.legend = legend;
chart.lines = lines;
chart.lines2 = lines2;
chart.bars = bars;
chart.bars2 = bars2;
chart.xAxis = xAxis;
chart.x2Axis = x2Axis;
chart.y1Axis = y1Axis;
chart.y2Axis = y2Axis;
chart.y3Axis = y3Axis;
chart.y4Axis = y4Axis;
d3.rebind(chart, lines, 'defined', 'size', 'clipVoronoi', 'interpolate');
//TODO: consider rebinding x, y and some other stuff, and simply do soemthign lile bars.x(lines.x()), etc.
//d3.rebind(chart, lines, 'x', 'y', 'size', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'interactive', 'clipEdge', 'clipVoronoi', 'id');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
lines.x(_);
bars.x(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
lines.y(_);
bars.y(_);
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.brushExtent = function(_) {
if (!arguments.length) return brushExtent;
brushExtent = _;
return chart;
};
//============================================================
return chart;
}
nv.models.multiBar = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, x = d3.scale.ordinal()
, y = d3.scale.linear()
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
, clipEdge = true
, stacked = false
, color = nv.utils.defaultColor()
, hideable = false
, barColor = null // adding the ability to set the color for each rather than the whole group
, disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled
, delay = 1200
, xDomain
, yDomain
, xRange
, yRange
, groupSpacing = 0.1
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0 //used to store previous scales
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
if(hideable && data.length) hideable = [{
values: data[0].values.map(function(d) {
return {
x: d.x,
y: 0,
series: d.series,
size: 0.01
};}
)}];
if (stacked)
data = d3.layout.stack()
.offset('zero')
.values(function(d){ return d.values })
.y(getY)
(!data.length && hideable ? hideable : data);
//add series index to each data point for reference
data = data.map(function(series, i) {
series.values = series.values.map(function(point) {
point.series = i;
return point;
});
return series;
});
//------------------------------------------------------------
// HACK for negative value stacking
if (stacked)
data[0].values.map(function(d,i) {
var posBase = 0, negBase = 0;
data.map(function(d) {
var f = d.values[i]
f.size = Math.abs(f.y);
if (f.y<0) {
f.y1 = negBase;
negBase = negBase - f.size;
} else
{
f.y1 = f.size + posBase;
posBase = posBase + f.size;
}
});
});
//------------------------------------------------------------
// Setup Scales
// remap and flatten the data for use in calculating the scales' domains
var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
data.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1 }
})
});
x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
.rangeBands(xRange || [0, availableWidth], groupSpacing);
//y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y + (stacked ? d.y1 : 0) }).concat(forceY)))
y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return stacked ? (d.y > 0 ? d.y1 : d.y1 + d.y ) : d.y }).concat(forceY)))
.range(yRange || [availableHeight, 0]);
// If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
if (x.domain()[0] === x.domain()[1])
x.domain()[0] ?
x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
: x.domain([-1,1]);
if (y.domain()[0] === y.domain()[1])
y.domain()[0] ?
y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
: y.domain([-1,1]);
x0 = x0 || x;
y0 = y0 || y;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-multibar').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibar');
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g')
gEnter.append('g').attr('class', 'nv-groups');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
defsEnter.append('clipPath')
.attr('id', 'nv-edge-clip-' + id)
.append('rect');
wrap.select('#nv-edge-clip-' + id + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
var groups = wrap.select('.nv-groups').selectAll('.nv-group')
.data(function(d) { return d }, function(d,i) { return i });
groups.enter().append('g')
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6);
groups.exit()
.transition()
.selectAll('rect.nv-bar')
.delay(function(d,i) {
return i * delay/ data[0].values.length;
})
.attr('y', function(d) { return stacked ? y0(d.y0) : y0(0) })
.attr('height', 0)
.remove();
groups
.attr('class', function(d,i) { return 'nv-group nv-series-' + i })
.classed('hover', function(d) { return d.hover })
.style('fill', function(d,i){ return color(d, i) })
.style('stroke', function(d,i){ return color(d, i) });
groups
.transition()
.style('stroke-opacity', 1)
.style('fill-opacity', .75);
var bars = groups.selectAll('rect.nv-bar')
.data(function(d) { return (hideable && !data.length) ? hideable.values : d.values });
bars.exit().remove();
var barsEnter = bars.enter().append('rect')
.attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
.attr('x', function(d,i,j) {
return stacked ? 0 : (j * x.rangeBand() / data.length )
})
.attr('y', function(d) { return y0(stacked ? d.y0 : 0) })
.attr('height', 0)
.attr('width', x.rangeBand() / (stacked ? 1 : data.length) )
.attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',0)'; })
;
bars
.style('fill', function(d,i,j){ return color(d, j, i); })
.style('stroke', function(d,i,j){ return color(d, j, i); })
.on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('mouseout', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
value: getY(d,i),
point: d,
series: data[d.series],
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('click', function(d,i) {
dispatch.elementClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
dispatch.elementDblClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
});
bars
.attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
.transition()
.attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',0)'; })
if (barColor) {
if (!disabled) disabled = data.map(function() { return true });
bars
.style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })
.style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });
}
if (stacked)
bars.transition()
.delay(function(d,i) {
return i * delay / data[0].values.length;
})
.attr('y', function(d,i) {
return y((stacked ? d.y1 : 0));
})
.attr('height', function(d,i) {
return Math.max(Math.abs(y(d.y + (stacked ? d.y0 : 0)) - y((stacked ? d.y0 : 0))),1);
})
.attr('x', function(d,i) {
return stacked ? 0 : (d.series * x.rangeBand() / data.length )
})
.attr('width', x.rangeBand() / (stacked ? 1 : data.length) );
else
bars.transition()
.delay(function(d,i) {
return i * delay/ data[0].values.length;
})
.attr('x', function(d,i) {
return d.series * x.rangeBand() / data.length
})
.attr('width', x.rangeBand() / data.length)
.attr('y', function(d,i) {
return getY(d,i) < 0 ?
y(0) :
y(0) - y(getY(d,i)) < 1 ?
y(0) - 1 :
y(getY(d,i)) || 0;
})
.attr('height', function(d,i) {
return Math.max(Math.abs(y(getY(d,i)) - y(0)),1) || 0;
});
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.stacked = function(_) {
if (!arguments.length) return stacked;
stacked = _;
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.barColor = function(_) {
if (!arguments.length) return barColor;
barColor = nv.utils.getColor(_);
return chart;
};
chart.disabled = function(_) {
if (!arguments.length) return disabled;
disabled = _;
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.hideable = function(_) {
if (!arguments.length) return hideable;
hideable = _;
return chart;
};
chart.delay = function(_) {
if (!arguments.length) return delay;
delay = _;
return chart;
};
chart.groupSpacing = function(_) {
if (!arguments.length) return groupSpacing;
groupSpacing = _;
return chart;
};
//============================================================
return chart;
}
nv.models.multiBarChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var multibar = nv.models.multiBar()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, controls = nv.models.legend()
;
var margin = {top: 30, right: 20, bottom: 50, left: 60}
, width = null
, height = null
, color = nv.utils.defaultColor()
, showControls = true
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, reduceXTicks = true // if false a tick will show for every data point
, staggerLabels = false
, rotateLabels = 0
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' on ' + x + '</p>'
}
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, state = { stacked: false }
, defaultState = null
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, controlWidth = function() { return showControls ? 180 : 0 }
, transitionDuration = 250
;
multibar
.stacked(false)
;
xAxis
.orient('bottom')
.tickPadding(7)
.highlightZero(true)
.showMaxMin(false)
.tickFormat(function(d) { return d })
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
.tickFormat(d3.format(',.1f'))
;
controls.updateState(false);
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(multibar.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(multibar.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display noData message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = multibar.xScale();
y = multibar.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-multiBarWithLegend').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarWithLegend').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-barsWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth - controlWidth());
if (multibar.barColor())
data.forEach(function(series,i) {
series.color = d3.rgb('#ccc').darker(i * 1.5).toString();
})
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
var controlsData = [
{ key: 'Grouped', disabled: multibar.stacked() },
{ key: 'Stacked', disabled: !multibar.stacked() }
];
controls.width(controlWidth()).color(['#444', '#444', '#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.attr('transform', 'translate(0,' + (-margin.top) +')')
.call(controls);
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
// Main Chart Component(s)
multibar
.disabled(data.map(function(series) { return series.disabled }))
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }))
var barsWrap = g.select('.nv-barsWrap')
.datum(data.filter(function(d) { return !d.disabled }))
barsWrap.transition().call(multibar);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize(-availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')');
g.select('.nv-x.nv-axis').transition()
.call(xAxis);
var xTicks = g.select('.nv-x.nv-axis > g').selectAll('g');
xTicks
.selectAll('line, text')
.style('opacity', 1)
if (staggerLabels) {
var getTranslate = function(x,y) {
return "translate(" + x + "," + y + ")";
};
var staggerUp = 5, staggerDown = 17; //pixels to stagger by
// Issue #140
xTicks
.selectAll("text")
.attr('transform', function(d,i,j) {
return getTranslate(0, (j % 2 == 0 ? staggerUp : staggerDown));
});
var totalInBetweenTicks = d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;
g.selectAll(".nv-x.nv-axis .nv-axisMaxMin text")
.attr("transform", function(d,i) {
return getTranslate(0, (i === 0 || totalInBetweenTicks % 2 !== 0) ? staggerDown : staggerUp);
});
}
if (reduceXTicks)
xTicks
.filter(function(d,i) {
return i % Math.ceil(data[0].values.length / (availableWidth / 100)) !== 0;
})
.selectAll('text, line')
.style('opacity', 0);
if(rotateLabels)
xTicks
.selectAll('.tick text')
.attr('transform', 'rotate(' + rotateLabels + ' 0,0)')
.style('text-anchor', rotateLabels > 0 ? 'start' : 'end');
g.select('.nv-x.nv-axis').selectAll('g.nv-axisMaxMin text')
.style('opacity', 1);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis').transition()
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
controls.dispatch.on('legendClick', function(d,i) {
if (!d.disabled) return;
controlsData = controlsData.map(function(s) {
s.disabled = true;
return s;
});
d.disabled = false;
switch (d.key) {
case 'Grouped':
multibar.stacked(false);
break;
case 'Stacked':
multibar.stacked(true);
break;
}
state.stacked = multibar.stacked();
dispatch.stateChange(state);
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode)
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
if (typeof e.stacked !== 'undefined') {
multibar.stacked(e.stacked);
state.stacked = e.stacked;
}
chart.update();
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
multibar.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
multibar.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.multibar = multibar;
chart.legend = legend;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
d3.rebind(chart, multibar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'clipEdge',
'id', 'stacked', 'delay', 'barColor','groupSpacing');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.reduceXTicks= function(_) {
if (!arguments.length) return reduceXTicks;
reduceXTicks = _;
return chart;
};
chart.rotateLabels = function(_) {
if (!arguments.length) return rotateLabels;
rotateLabels = _;
return chart;
}
chart.staggerLabels = function(_) {
if (!arguments.length) return staggerLabels;
staggerLabels = _;
return chart;
};
chart.tooltip = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.multiBarHorizontal = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, x = d3.scale.ordinal()
, y = d3.scale.linear()
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
, color = nv.utils.defaultColor()
, barColor = null // adding the ability to set the color for each rather than the whole group
, disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled
, stacked = false
, showValues = false
, valuePadding = 60
, valueFormat = d3.format(',.2f')
, delay = 1200
, xDomain
, yDomain
, xRange
, yRange
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0 //used to store previous scales
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
if (stacked)
data = d3.layout.stack()
.offset('zero')
.values(function(d){ return d.values })
.y(getY)
(data);
//add series index to each data point for reference
data = data.map(function(series, i) {
series.values = series.values.map(function(point) {
point.series = i;
return point;
});
return series;
});
//------------------------------------------------------------
// HACK for negative value stacking
if (stacked)
data[0].values.map(function(d,i) {
var posBase = 0, negBase = 0;
data.map(function(d) {
var f = d.values[i]
f.size = Math.abs(f.y);
if (f.y<0) {
f.y1 = negBase - f.size;
negBase = negBase - f.size;
} else
{
f.y1 = posBase;
posBase = posBase + f.size;
}
});
});
//------------------------------------------------------------
// Setup Scales
// remap and flatten the data for use in calculating the scales' domains
var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
data.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1 }
})
});
x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
.rangeBands(xRange || [0, availableHeight], .1);
//y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y + (stacked ? d.y0 : 0) }).concat(forceY)))
y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return stacked ? (d.y > 0 ? d.y1 + d.y : d.y1 ) : d.y }).concat(forceY)))
if (showValues && !stacked)
y.range(yRange || [(y.domain()[0] < 0 ? valuePadding : 0), availableWidth - (y.domain()[1] > 0 ? valuePadding : 0) ]);
else
y.range(yRange || [0, availableWidth]);
x0 = x0 || x;
y0 = y0 || d3.scale.linear().domain(y.domain()).range([y(0),y(0)]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = d3.select(this).selectAll('g.nv-wrap.nv-multibarHorizontal').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibarHorizontal');
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-groups');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
var groups = wrap.select('.nv-groups').selectAll('.nv-group')
.data(function(d) { return d }, function(d,i) { return i });
groups.enter().append('g')
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6);
groups.exit().transition()
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6)
.remove();
groups
.attr('class', function(d,i) { return 'nv-group nv-series-' + i })
.classed('hover', function(d) { return d.hover })
.style('fill', function(d,i){ return color(d, i) })
.style('stroke', function(d,i){ return color(d, i) });
groups.transition()
.style('stroke-opacity', 1)
.style('fill-opacity', .75);
var bars = groups.selectAll('g.nv-bar')
.data(function(d) { return d.values });
bars.exit().remove();
var barsEnter = bars.enter().append('g')
.attr('transform', function(d,i,j) {
return 'translate(' + y0(stacked ? d.y0 : 0) + ',' + (stacked ? 0 : (j * x.rangeBand() / data.length ) + x(getX(d,i))) + ')'
});
barsEnter.append('rect')
.attr('width', 0)
.attr('height', x.rangeBand() / (stacked ? 1 : data.length) )
bars
.on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [ y(getY(d,i) + (stacked ? d.y0 : 0)), x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length) ],
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('mouseout', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
value: getY(d,i),
point: d,
series: data[d.series],
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
})
.on('click', function(d,i) {
dispatch.elementClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
dispatch.elementDblClick({
value: getY(d,i),
point: d,
series: data[d.series],
pos: [x(getX(d,i)) + (x.rangeBand() * (stacked ? data.length / 2 : d.series + .5) / data.length), y(getY(d,i) + (stacked ? d.y0 : 0))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: d.series,
e: d3.event
});
d3.event.stopPropagation();
});
barsEnter.append('text');
if (showValues && !stacked) {
bars.select('text')
.attr('text-anchor', function(d,i) { return getY(d,i) < 0 ? 'end' : 'start' })
.attr('y', x.rangeBand() / (data.length * 2))
.attr('dy', '.32em')
.text(function(d,i) { return valueFormat(getY(d,i)) })
bars.transition()
.select('text')
.attr('x', function(d,i) { return getY(d,i) < 0 ? -4 : y(getY(d,i)) - y(0) + 4 })
} else {
bars.selectAll('text').text('');
}
bars
.attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
if (barColor) {
if (!disabled) disabled = data.map(function() { return true });
bars
.style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })
.style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });
}
if (stacked)
bars.transition()
.attr('transform', function(d,i) {
return 'translate(' + y(d.y1) + ',' + x(getX(d,i)) + ')'
})
.select('rect')
.attr('width', function(d,i) {
return Math.abs(y(getY(d,i) + d.y0) - y(d.y0))
})
.attr('height', x.rangeBand() );
else
bars.transition()
.attr('transform', function(d,i) {
//TODO: stacked must be all positive or all negative, not both?
return 'translate(' +
(getY(d,i) < 0 ? y(getY(d,i)) : y(0))
+ ',' +
(d.series * x.rangeBand() / data.length
+
x(getX(d,i)) )
+ ')'
})
.select('rect')
.attr('height', x.rangeBand() / data.length )
.attr('width', function(d,i) {
return Math.max(Math.abs(y(getY(d,i)) - y(0)),1)
});
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.stacked = function(_) {
if (!arguments.length) return stacked;
stacked = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.barColor = function(_) {
if (!arguments.length) return barColor;
barColor = nv.utils.getColor(_);
return chart;
};
chart.disabled = function(_) {
if (!arguments.length) return disabled;
disabled = _;
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.delay = function(_) {
if (!arguments.length) return delay;
delay = _;
return chart;
};
chart.showValues = function(_) {
if (!arguments.length) return showValues;
showValues = _;
return chart;
};
chart.valueFormat= function(_) {
if (!arguments.length) return valueFormat;
valueFormat = _;
return chart;
};
chart.valuePadding = function(_) {
if (!arguments.length) return valuePadding;
valuePadding = _;
return chart;
};
//============================================================
return chart;
}
nv.models.multiBarHorizontalChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var multibar = nv.models.multiBarHorizontal()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend().height(30)
, controls = nv.models.legend().height(30)
;
var margin = {top: 30, right: 20, bottom: 50, left: 60}
, width = null
, height = null
, color = nv.utils.defaultColor()
, showControls = true
, showLegend = true
, stacked = false
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + ' - ' + x + '</h3>' +
'<p>' + y + '</p>'
}
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, state = { stacked: stacked }
, defaultState = null
, noData = 'No Data Available.'
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, controlWidth = function() { return showControls ? 180 : 0 }
, transitionDuration = 250
;
multibar
.stacked(stacked)
;
xAxis
.orient('left')
.tickPadding(5)
.highlightZero(false)
.showMaxMin(false)
.tickFormat(function(d) { return d })
;
yAxis
.orient('bottom')
.tickFormat(d3.format(',.1f'))
;
controls.updateState(false);
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(multibar.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(multibar.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'e' : 'w', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = multibar.xScale();
y = multibar.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-multiBarHorizontalChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarHorizontalChart').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-barsWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width(availableWidth - controlWidth());
if (multibar.barColor())
data.forEach(function(series,i) {
series.color = d3.rgb('#ccc').darker(i * 1.5).toString();
})
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
var controlsData = [
{ key: 'Grouped', disabled: multibar.stacked() },
{ key: 'Stacked', disabled: !multibar.stacked() }
];
controls.width(controlWidth()).color(['#444', '#444', '#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.attr('transform', 'translate(0,' + (-margin.top) +')')
.call(controls);
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Main Chart Component(s)
multibar
.disabled(data.map(function(series) { return series.disabled }))
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }))
var barsWrap = g.select('.nv-barsWrap')
.datum(data.filter(function(d) { return !d.disabled }))
barsWrap.transition().call(multibar);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
xAxis
.scale(x)
.ticks( availableHeight / 24 )
.tickSize(-availableWidth, 0);
g.select('.nv-x.nv-axis').transition()
.call(xAxis);
var xTicks = g.select('.nv-x.nv-axis').selectAll('g');
xTicks
.selectAll('line, text')
.style('opacity', 1)
yAxis
.scale(y)
.ticks( availableWidth / 100 )
.tickSize( -availableHeight, 0);
g.select('.nv-y.nv-axis')
.attr('transform', 'translate(0,' + availableHeight + ')');
g.select('.nv-y.nv-axis').transition()
.call(yAxis);
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
controls.dispatch.on('legendClick', function(d,i) {
if (!d.disabled) return;
controlsData = controlsData.map(function(s) {
s.disabled = true;
return s;
});
d.disabled = false;
switch (d.key) {
case 'Grouped':
multibar.stacked(false);
break;
case 'Stacked':
multibar.stacked(true);
break;
}
state.stacked = multibar.stacked();
dispatch.stateChange(state);
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
if (typeof e.stacked !== 'undefined') {
multibar.stacked(e.stacked);
state.stacked = e.stacked;
}
selection.call(chart);
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
multibar.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
multibar.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.multibar = multibar;
chart.legend = legend;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
d3.rebind(chart, multibar, 'x', 'y', 'xDomain', 'yDomain', 'xRange', 'yRange', 'forceX', 'forceY', 'clipEdge', 'id', 'delay', 'showValues', 'valueFormat', 'stacked', 'barColor');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
return chart;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltip = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.multiChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 30, right: 20, bottom: 50, left: 60},
color = d3.scale.category20().range(),
width = null,
height = null,
showLegend = true,
tooltips = true,
tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' at ' + x + '</p>'
},
x,
y,
yDomain1,
yDomain2
; //can be accessed via chart.lines.[x/y]Scale()
//============================================================
// Private Variables
//------------------------------------------------------------
var x = d3.scale.linear(),
yScale1 = d3.scale.linear(),
yScale2 = d3.scale.linear(),
lines1 = nv.models.line().yScale(yScale1),
lines2 = nv.models.line().yScale(yScale2),
bars1 = nv.models.multiBar().stacked(false).yScale(yScale1),
bars2 = nv.models.multiBar().stacked(false).yScale(yScale2),
stack1 = nv.models.stackedArea().yScale(yScale1),
stack2 = nv.models.stackedArea().yScale(yScale2),
xAxis = nv.models.axis().scale(x).orient('bottom').tickPadding(5),
yAxis1 = nv.models.axis().scale(yScale1).orient('left'),
yAxis2 = nv.models.axis().scale(yScale2).orient('right'),
legend = nv.models.legend().height(30),
dispatch = d3.dispatch('tooltipShow', 'tooltipHide');
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(lines1.x()(e.point, e.pointIndex)),
y = ((e.series.yAxis == 2) ? yAxis2 : yAxis1).tickFormat()(lines1.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, undefined, undefined, offsetElement.offsetParent);
};
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
chart.update = function() { container.transition().call(chart); };
chart.container = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
var dataLines1 = data.filter(function(d) {return !d.disabled && d.type == 'line' && d.yAxis == 1})
var dataLines2 = data.filter(function(d) {return !d.disabled && d.type == 'line' && d.yAxis == 2})
var dataBars1 = data.filter(function(d) {return !d.disabled && d.type == 'bar' && d.yAxis == 1})
var dataBars2 = data.filter(function(d) {return !d.disabled && d.type == 'bar' && d.yAxis == 2})
var dataStack1 = data.filter(function(d) {return !d.disabled && d.type == 'area' && d.yAxis == 1})
var dataStack2 = data.filter(function(d) {return !d.disabled && d.type == 'area' && d.yAxis == 2})
var series1 = data.filter(function(d) {return !d.disabled && d.yAxis == 1})
.map(function(d) {
return d.values.map(function(d,i) {
return { x: d.x, y: d.y }
})
})
var series2 = data.filter(function(d) {return !d.disabled && d.yAxis == 2})
.map(function(d) {
return d.values.map(function(d,i) {
return { x: d.x, y: d.y }
})
})
x .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))
.range([0, availableWidth]);
var wrap = container.selectAll('g.wrap.multiChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'wrap nvd3 multiChart').append('g');
gEnter.append('g').attr('class', 'x axis');
gEnter.append('g').attr('class', 'y1 axis');
gEnter.append('g').attr('class', 'y2 axis');
gEnter.append('g').attr('class', 'lines1Wrap');
gEnter.append('g').attr('class', 'lines2Wrap');
gEnter.append('g').attr('class', 'bars1Wrap');
gEnter.append('g').attr('class', 'bars2Wrap');
gEnter.append('g').attr('class', 'stack1Wrap');
gEnter.append('g').attr('class', 'stack2Wrap');
gEnter.append('g').attr('class', 'legendWrap');
var g = wrap.select('g');
if (showLegend) {
legend.width( availableWidth / 2 );
g.select('.legendWrap')
.datum(data.map(function(series) {
series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;
series.key = series.originalKey + (series.yAxis == 1 ? '' : ' (right axis)');
return series;
}))
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.legendWrap')
.attr('transform', 'translate(' + ( availableWidth / 2 ) + ',' + (-margin.top) +')');
}
lines1
.width(availableWidth)
.height(availableHeight)
.interpolate("monotone")
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'line'}));
lines2
.width(availableWidth)
.height(availableHeight)
.interpolate("monotone")
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'line'}));
bars1
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'bar'}));
bars2
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'bar'}));
stack1
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'area'}));
stack2
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color[i % color.length];
}).filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'area'}));
g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
var lines1Wrap = g.select('.lines1Wrap')
.datum(dataLines1)
var bars1Wrap = g.select('.bars1Wrap')
.datum(dataBars1)
var stack1Wrap = g.select('.stack1Wrap')
.datum(dataStack1)
var lines2Wrap = g.select('.lines2Wrap')
.datum(dataLines2)
var bars2Wrap = g.select('.bars2Wrap')
.datum(dataBars2)
var stack2Wrap = g.select('.stack2Wrap')
.datum(dataStack2)
var extraValue1 = dataStack1.length ? dataStack1.map(function(a){return a.values}).reduce(function(a,b){
return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})
}).concat([{x:0, y:0}]) : []
var extraValue2 = dataStack2.length ? dataStack2.map(function(a){return a.values}).reduce(function(a,b){
return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})
}).concat([{x:0, y:0}]) : []
yScale1 .domain(yDomain1 || d3.extent(d3.merge(series1).concat(extraValue1), function(d) { return d.y } ))
.range([0, availableHeight])
yScale2 .domain(yDomain2 || d3.extent(d3.merge(series2).concat(extraValue2), function(d) { return d.y } ))
.range([0, availableHeight])
lines1.yDomain(yScale1.domain())
bars1.yDomain(yScale1.domain())
stack1.yDomain(yScale1.domain())
lines2.yDomain(yScale2.domain())
bars2.yDomain(yScale2.domain())
stack2.yDomain(yScale2.domain())
if(dataStack1.length){d3.transition(stack1Wrap).call(stack1);}
if(dataStack2.length){d3.transition(stack2Wrap).call(stack2);}
if(dataBars1.length){d3.transition(bars1Wrap).call(bars1);}
if(dataBars2.length){d3.transition(bars2Wrap).call(bars2);}
if(dataLines1.length){d3.transition(lines1Wrap).call(lines1);}
if(dataLines2.length){d3.transition(lines2Wrap).call(lines2);}
xAxis
.ticks( availableWidth / 100 )
.tickSize(-availableHeight, 0);
g.select('.x.axis')
.attr('transform', 'translate(0,' + availableHeight + ')');
d3.transition(g.select('.x.axis'))
.call(xAxis);
yAxis1
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
d3.transition(g.select('.y1.axis'))
.call(yAxis1);
yAxis2
.ticks( availableHeight / 36 )
.tickSize( -availableWidth, 0);
d3.transition(g.select('.y2.axis'))
.call(yAxis2);
g.select('.y2.axis')
.style('opacity', series2.length ? 1 : 0)
.attr('transform', 'translate(' + x.range()[1] + ',0)');
legend.dispatch.on('stateChange', function(newState) {
chart.update();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
lines1.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines1.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
lines2.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines2.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
bars1.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
bars1.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
bars2.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
bars2.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
stack1.dispatch.on('tooltipShow', function(e) {
//disable tooltips when value ~= 0
//// TODO: consider removing points from voronoi that have 0 value instead of this hack
if (!Math.round(stack1.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range
setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);
return false;
}
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
dispatch.tooltipShow(e);
});
stack1.dispatch.on('tooltipHide', function(e) {
dispatch.tooltipHide(e);
});
stack2.dispatch.on('tooltipShow', function(e) {
//disable tooltips when value ~= 0
//// TODO: consider removing points from voronoi that have 0 value instead of this hack
if (!Math.round(stack2.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range
setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);
return false;
}
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
dispatch.tooltipShow(e);
});
stack2.dispatch.on('tooltipHide', function(e) {
dispatch.tooltipHide(e);
});
lines1.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines1.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
lines2.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
lines2.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
// Global getters and setters
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.lines1 = lines1;
chart.lines2 = lines2;
chart.bars1 = bars1;
chart.bars2 = bars2;
chart.stack1 = stack1;
chart.stack2 = stack2;
chart.xAxis = xAxis;
chart.yAxis1 = yAxis1;
chart.yAxis2 = yAxis2;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
lines1.x(_);
bars1.x(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
lines1.y(_);
bars1.y(_);
return chart;
};
chart.yDomain1 = function(_) {
if (!arguments.length) return yDomain1;
yDomain1 = _;
return chart;
};
chart.yDomain2 = function(_) {
if (!arguments.length) return yDomain2;
yDomain2 = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin = _;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = _;
legend.color(_);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
return chart;
}
nv.models.ohlcBar = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, x = d3.scale.linear()
, y = d3.scale.linear()
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, getOpen = function(d) { return d.open }
, getClose = function(d) { return d.close }
, getHigh = function(d) { return d.high }
, getLow = function(d) { return d.low }
, forceX = []
, forceY = []
, padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart
, clipEdge = true
, color = nv.utils.defaultColor()
, xDomain
, yDomain
, xRange
, yRange
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
//TODO: store old scales for transitions
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
x .domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ));
if (padData)
x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
else
x.range(xRange || [0, availableWidth]);
y .domain(yDomain || [
d3.min(data[0].values.map(getLow).concat(forceY)),
d3.max(data[0].values.map(getHigh).concat(forceY))
])
.range(yRange || [availableHeight, 0]);
// If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
if (x.domain()[0] === x.domain()[1] || y.domain()[0] === y.domain()[1]) singlePoint = true;
if (x.domain()[0] === x.domain()[1])
x.domain()[0] ?
x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
: x.domain([-1,1]);
if (y.domain()[0] === y.domain()[1])
y.domain()[0] ?
y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
: y.domain([-1,1]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = d3.select(this).selectAll('g.nv-wrap.nv-ohlcBar').data([data[0].values]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-ohlcBar');
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-ticks');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
container
.on('click', function(d,i) {
dispatch.chartClick({
data: d,
index: i,
pos: d3.event,
id: id
});
});
defsEnter.append('clipPath')
.attr('id', 'nv-chart-clip-path-' + id)
.append('rect');
wrap.select('#nv-chart-clip-path-' + id + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');
var ticks = wrap.select('.nv-ticks').selectAll('.nv-tick')
.data(function(d) { return d });
ticks.exit().remove();
var ticksEnter = ticks.enter().append('path')
.attr('class', function(d,i,j) { return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i })
.attr('d', function(d,i) {
var w = (availableWidth / data[0].values.length) * .9;
return 'm0,0l0,'
+ (y(getOpen(d,i))
- y(getHigh(d,i)))
+ 'l'
+ (-w/2)
+ ',0l'
+ (w/2)
+ ',0l0,'
+ (y(getLow(d,i)) - y(getOpen(d,i)))
+ 'l0,'
+ (y(getClose(d,i))
- y(getLow(d,i)))
+ 'l'
+ (w/2)
+ ',0l'
+ (-w/2)
+ ',0z';
})
.attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })
//.attr('fill', function(d,i) { return color[0]; })
//.attr('stroke', function(d,i) { return color[0]; })
//.attr('x', 0 )
//.attr('y', function(d,i) { return y(Math.max(0, getY(d,i))) })
//.attr('height', function(d,i) { return Math.abs(y(getY(d,i)) - y(0)) })
.on('mouseover', function(d,i) {
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
point: d,
series: data[0],
pos: [x(getX(d,i)), y(getY(d,i))], // TODO: Figure out why the value appears to be shifted
pointIndex: i,
seriesIndex: 0,
e: d3.event
});
})
.on('mouseout', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
point: d,
series: data[0],
pointIndex: i,
seriesIndex: 0,
e: d3.event
});
})
.on('click', function(d,i) {
dispatch.elementClick({
//label: d[label],
value: getY(d,i),
data: d,
index: i,
pos: [x(getX(d,i)), y(getY(d,i))],
e: d3.event,
id: id
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
dispatch.elementDblClick({
//label: d[label],
value: getY(d,i),
data: d,
index: i,
pos: [x(getX(d,i)), y(getY(d,i))],
e: d3.event,
id: id
});
d3.event.stopPropagation();
});
ticks
.attr('class', function(d,i,j) { return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i })
d3.transition(ticks)
.attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })
.attr('d', function(d,i) {
var w = (availableWidth / data[0].values.length) * .9;
return 'm0,0l0,'
+ (y(getOpen(d,i))
- y(getHigh(d,i)))
+ 'l'
+ (-w/2)
+ ',0l'
+ (w/2)
+ ',0l0,'
+ (y(getLow(d,i))
- y(getOpen(d,i)))
+ 'l0,'
+ (y(getClose(d,i))
- y(getLow(d,i)))
+ 'l'
+ (w/2)
+ ',0l'
+ (-w/2)
+ ',0z';
})
//.attr('width', (availableWidth / data[0].values.length) * .9 )
//d3.transition(ticks)
//.attr('y', function(d,i) { return y(Math.max(0, getY(d,i))) })
//.attr('height', function(d,i) { return Math.abs(y(getY(d,i)) - y(0)) });
//.order(); // not sure if this makes any sense for this model
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = _;
return chart;
};
chart.open = function(_) {
if (!arguments.length) return getOpen;
getOpen = _;
return chart;
};
chart.close = function(_) {
if (!arguments.length) return getClose;
getClose = _;
return chart;
};
chart.high = function(_) {
if (!arguments.length) return getHigh;
getHigh = _;
return chart;
};
chart.low = function(_) {
if (!arguments.length) return getLow;
getLow = _;
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.forceX = function(_) {
if (!arguments.length) return forceX;
forceX = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.padData = function(_) {
if (!arguments.length) return padData;
padData = _;
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
//============================================================
return chart;
}
nv.models.pie = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 500
, height = 500
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, getDescription = function(d) { return d.description }
, id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
, color = nv.utils.defaultColor()
, valueFormat = d3.format(',.2f')
, showLabels = true
, pieLabelsOutside = true
, donutLabelsOutside = false
, labelType = "key"
, labelThreshold = .02 //if slice percentage is under this, don't show label
, donut = false
, labelSunbeamLayout = false
, startAngle = false
, endAngle = false
, donutRatio = 0.5
, dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout')
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
radius = Math.min(availableWidth, availableHeight) / 2,
arcRadius = radius-(radius / 5),
container = d3.select(this);
//------------------------------------------------------------
// Setup containers and skeleton of chart
//var wrap = container.selectAll('.nv-wrap.nv-pie').data([data]);
var wrap = container.selectAll('.nv-wrap.nv-pie').data(data);
var wrapEnter = wrap.enter().append('g').attr('class','nvd3 nv-wrap nv-pie nv-chart-' + id);
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-pie');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
g.select('.nv-pie').attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')');
//------------------------------------------------------------
container
.on('click', function(d,i) {
dispatch.chartClick({
data: d,
index: i,
pos: d3.event,
id: id
});
});
var arc = d3.svg.arc()
.outerRadius(arcRadius);
if (startAngle) arc.startAngle(startAngle)
if (endAngle) arc.endAngle(endAngle);
if (donut) arc.innerRadius(radius * donutRatio);
// Setup the Pie chart and choose the data element
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.disabled ? 0 : getY(d) });
var slices = wrap.select('.nv-pie').selectAll('.nv-slice')
.data(pie);
slices.exit().remove();
var ae = slices.enter().append('g')
.attr('class', 'nv-slice')
.on('mouseover', function(d,i){
d3.select(this).classed('hover', true);
dispatch.elementMouseover({
label: getX(d.data),
value: getY(d.data),
point: d.data,
pointIndex: i,
pos: [d3.event.pageX, d3.event.pageY],
id: id
});
})
.on('mouseout', function(d,i){
d3.select(this).classed('hover', false);
dispatch.elementMouseout({
label: getX(d.data),
value: getY(d.data),
point: d.data,
index: i,
id: id
});
})
.on('click', function(d,i) {
dispatch.elementClick({
label: getX(d.data),
value: getY(d.data),
point: d.data,
index: i,
pos: d3.event,
id: id
});
d3.event.stopPropagation();
})
.on('dblclick', function(d,i) {
dispatch.elementDblClick({
label: getX(d.data),
value: getY(d.data),
point: d.data,
index: i,
pos: d3.event,
id: id
});
d3.event.stopPropagation();
});
slices
.attr('fill', function(d,i) { return color(d, i); })
.attr('stroke', function(d,i) { return color(d, i); });
var paths = ae.append('path')
.each(function(d) { this._current = d; });
//.attr('d', arc);
d3.transition(slices.select('path'))
.attr('d', arc)
.attrTween('d', arcTween);
if (showLabels) {
// This does the normal label
var labelsArc = d3.svg.arc().innerRadius(0);
if (pieLabelsOutside){ labelsArc = arc; }
if (donutLabelsOutside) { labelsArc = d3.svg.arc().outerRadius(arc.outerRadius()); }
ae.append("g").classed("nv-label", true)
.each(function(d, i) {
var group = d3.select(this);
group
.attr('transform', function(d) {
if (labelSunbeamLayout) {
d.outerRadius = arcRadius + 10; // Set Outer Coordinate
d.innerRadius = arcRadius + 15; // Set Inner Coordinate
var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);
if ((d.startAngle+d.endAngle)/2 < Math.PI) {
rotateAngle -= 90;
} else {
rotateAngle += 90;
}
return 'translate(' + labelsArc.centroid(d) + ') rotate(' + rotateAngle + ')';
} else {
d.outerRadius = radius + 10; // Set Outer Coordinate
d.innerRadius = radius + 15; // Set Inner Coordinate
return 'translate(' + labelsArc.centroid(d) + ')'
}
});
group.append('rect')
.style('stroke', '#fff')
.style('fill', '#fff')
.attr("rx", 3)
.attr("ry", 3);
group.append('text')
.style('text-anchor', labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle') //center the text on it's origin or begin/end if orthogonal aligned
.style('fill', '#000')
});
slices.select(".nv-label").transition()
.attr('transform', function(d) {
if (labelSunbeamLayout) {
d.outerRadius = arcRadius + 10; // Set Outer Coordinate
d.innerRadius = arcRadius + 15; // Set Inner Coordinate
var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);
if ((d.startAngle+d.endAngle)/2 < Math.PI) {
rotateAngle -= 90;
} else {
rotateAngle += 90;
}
return 'translate(' + labelsArc.centroid(d) + ') rotate(' + rotateAngle + ')';
} else {
d.outerRadius = radius + 10; // Set Outer Coordinate
d.innerRadius = radius + 15; // Set Inner Coordinate
return 'translate(' + labelsArc.centroid(d) + ')'
}
});
slices.each(function(d, i) {
var slice = d3.select(this);
slice
.select(".nv-label text")
.style('text-anchor', labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle') //center the text on it's origin or begin/end if orthogonal aligned
.text(function(d, i) {
var percent = (d.endAngle - d.startAngle) / (2 * Math.PI);
var labelTypes = {
"key" : getX(d.data),
"value": getY(d.data),
"percent": d3.format('%')(percent)
};
return (d.value && percent > labelThreshold) ? labelTypes[labelType] : '';
});
var textBox = slice.select('text').node().getBBox();
slice.select(".nv-label rect")
.attr("width", textBox.width + 10)
.attr("height", textBox.height + 10)
.attr("transform", function() {
return "translate(" + [textBox.x - 5, textBox.y - 5] + ")";
});
});
}
// Computes the angle of an arc, converting from radians to degrees.
function angle(d) {
var a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
return a > 90 ? a - 180 : a;
}
function arcTween(a) {
a.endAngle = isNaN(a.endAngle) ? 0 : a.endAngle;
a.startAngle = isNaN(a.startAngle) ? 0 : a.startAngle;
if (!donut) a.innerRadius = 0;
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
function tweenPie(b) {
b.innerRadius = 0;
var i = d3.interpolate({startAngle: 0, endAngle: 0}, b);
return function(t) {
return arc(i(t));
};
}
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.values = function(_) {
nv.log("pie.values() is no longer supported.");
return chart;
};
chart.x = function(_) {
if (!arguments.length) return getX;
getX = _;
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = d3.functor(_);
return chart;
};
chart.description = function(_) {
if (!arguments.length) return getDescription;
getDescription = _;
return chart;
};
chart.showLabels = function(_) {
if (!arguments.length) return showLabels;
showLabels = _;
return chart;
};
chart.labelSunbeamLayout = function(_) {
if (!arguments.length) return labelSunbeamLayout;
labelSunbeamLayout = _;
return chart;
};
chart.donutLabelsOutside = function(_) {
if (!arguments.length) return donutLabelsOutside;
donutLabelsOutside = _;
return chart;
};
chart.pieLabelsOutside = function(_) {
if (!arguments.length) return pieLabelsOutside;
pieLabelsOutside = _;
return chart;
};
chart.labelType = function(_) {
if (!arguments.length) return labelType;
labelType = _;
labelType = labelType || "key";
return chart;
};
chart.donut = function(_) {
if (!arguments.length) return donut;
donut = _;
return chart;
};
chart.donutRatio = function(_) {
if (!arguments.length) return donutRatio;
donutRatio = _;
return chart;
};
chart.startAngle = function(_) {
if (!arguments.length) return startAngle;
startAngle = _;
return chart;
};
chart.endAngle = function(_) {
if (!arguments.length) return endAngle;
endAngle = _;
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.valueFormat = function(_) {
if (!arguments.length) return valueFormat;
valueFormat = _;
return chart;
};
chart.labelThreshold = function(_) {
if (!arguments.length) return labelThreshold;
labelThreshold = _;
return chart;
};
//============================================================
return chart;
}
nv.models.pieChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var pie = nv.models.pie()
, legend = nv.models.legend()
;
var margin = {top: 30, right: 20, bottom: 20, left: 20}
, width = null
, height = null
, showLegend = true
, color = nv.utils.defaultColor()
, tooltips = true
, tooltip = function(key, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + '</p>'
}
, state = {}
, defaultState = null
, noData = "No Data Available."
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var tooltipLabel = pie.description()(e.point) || pie.x()(e.point)
var left = e.pos[0] + ( (offsetElement && offsetElement.offsetLeft) || 0 ),
top = e.pos[1] + ( (offsetElement && offsetElement.offsetTop) || 0),
y = pie.valueFormat()(pie.y()(e.point)),
content = tooltip(tooltipLabel, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().call(chart); };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-pieChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-pieChart').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-pieWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend
.width( availableWidth )
.key(pie.x());
wrap.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
wrap.select('.nv-legendWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')');
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
// Main Chart Component(s)
pie
.width(availableWidth)
.height(availableHeight);
var pieWrap = g.select('.nv-pieWrap')
.datum([data]);
d3.transition(pieWrap).call(pie);
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
pie.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
chart.update();
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
pie.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.legend = legend;
chart.dispatch = dispatch;
chart.pie = pie;
d3.rebind(chart, pie, 'valueFormat', 'values', 'x', 'y', 'description', 'id', 'showLabels', 'donutLabelsOutside', 'pieLabelsOutside', 'labelType', 'donut', 'donutRatio', 'labelThreshold');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
pie.color(color);
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
//============================================================
return chart;
}
nv.models.scatter = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, color = nv.utils.defaultColor() // chooses color
, id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't select one
, x = d3.scale.linear()
, y = d3.scale.linear()
, z = d3.scale.linear() //linear because d3.svg.shape.size is treated as area
, getX = function(d) { return d.x } // accessor to get the x value
, getY = function(d) { return d.y } // accessor to get the y value
, getSize = function(d) { return d.size || 1} // accessor to get the point size
, getShape = function(d) { return d.shape || 'circle' } // accessor to get point shape
, onlyCircles = true // Set to false to use shapes
, forceX = [] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)
, forceY = [] // List of numbers to Force into the Y scale
, forceSize = [] // List of numbers to Force into the Size scale
, interactive = true // If true, plots a voronoi overlay for advanced point intersection
, pointKey = null
, pointActive = function(d) { return !d.notActive } // any points that return false will be filtered out
, padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart
, padDataOuter = .1 //outerPadding to imitate ordinal scale outer padding
, clipEdge = false // if true, masks points within x and y scale
, clipVoronoi = true // if true, masks each point with a circle... can turn off to slightly increase performance
, clipRadius = function() { return 25 } // function to get the radius for voronoi point clips
, xDomain = null // Override x domain (skips the calculation from data)
, yDomain = null // Override y domain
, xRange = null // Override x range
, yRange = null // Override y range
, sizeDomain = null // Override point size domain
, sizeRange = null
, singlePoint = false
, dispatch = d3.dispatch('elementClick', 'elementMouseover', 'elementMouseout')
, useVoronoi = true
;
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0, z0 // used to store previous scales
, timeoutID
, needsUpdate = false // Flag for when the points are visually updating, but the interactive layer is behind, to disable tooltips
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//add series index to each data point for reference
data = data.map(function(series, i) {
series.values = series.values.map(function(point) {
point.series = i;
return point;
});
return series;
});
//------------------------------------------------------------
// Setup Scales
// remap and flatten the data for use in calculating the scales' domains
var seriesData = (xDomain && yDomain && sizeDomain) ? [] : // if we know xDomain and yDomain and sizeDomain, no need to calculate.... if Size is constant remember to set sizeDomain to speed up performance
d3.merge(
data.map(function(d) {
return d.values.map(function(d,i) {
return { x: getX(d,i), y: getY(d,i), size: getSize(d,i) }
})
})
);
x .domain(xDomain || d3.extent(seriesData.map(function(d) { return d.x; }).concat(forceX)))
if (padData && data[0])
x.range(xRange || [(availableWidth * padDataOuter + availableWidth) / (2 *data[0].values.length), availableWidth - availableWidth * (1 + padDataOuter) / (2 * data[0].values.length) ]);
//x.range([availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
else
x.range(xRange || [0, availableWidth]);
y .domain(yDomain || d3.extent(seriesData.map(function(d) { return d.y }).concat(forceY)))
.range(yRange || [availableHeight, 0]);
z .domain(sizeDomain || d3.extent(seriesData.map(function(d) { return d.size }).concat(forceSize)))
.range(sizeRange || [16, 256]);
// If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
if (x.domain()[0] === x.domain()[1] || y.domain()[0] === y.domain()[1]) singlePoint = true;
if (x.domain()[0] === x.domain()[1])
x.domain()[0] ?
x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
: x.domain([-1,1]);
if (y.domain()[0] === y.domain()[1])
y.domain()[0] ?
y.domain([y.domain()[0] - y.domain()[0] * 0.01, y.domain()[1] + y.domain()[1] * 0.01])
: y.domain([-1,1]);
if ( isNaN(x.domain()[0])) {
x.domain([-1,1]);
}
if ( isNaN(y.domain()[0])) {
y.domain([-1,1]);
}
x0 = x0 || x;
y0 = y0 || y;
z0 = z0 || z;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-scatter').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatter nv-chart-' + id + (singlePoint ? ' nv-single-point' : ''));
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-groups');
gEnter.append('g').attr('class', 'nv-point-paths');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
defsEnter.append('clipPath')
.attr('id', 'nv-edge-clip-' + id)
.append('rect');
wrap.select('#nv-edge-clip-' + id + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
function updateInteractiveLayer() {
if (!interactive) return false;
var eventElements;
var vertices = d3.merge(data.map(function(group, groupIndex) {
return group.values
.map(function(point, pointIndex) {
// *Adding noise to make duplicates very unlikely
// *Injecting series and point index for reference
/* *Adding a 'jitter' to the points, because there's an issue in d3.geom.voronoi.
*/
var pX = getX(point,pointIndex);
var pY = getY(point,pointIndex);
return [x(pX)+ Math.random() * 1e-7,
y(pY)+ Math.random() * 1e-7,
groupIndex,
pointIndex, point]; //temp hack to add noise untill I think of a better way so there are no duplicates
})
.filter(function(pointArray, pointIndex) {
return pointActive(pointArray[4], pointIndex); // Issue #237.. move filter to after map, so pointIndex is correct!
})
})
);
//inject series and point index for reference into voronoi
if (useVoronoi === true) {
if (clipVoronoi) {
var pointClipsEnter = wrap.select('defs').selectAll('.nv-point-clips')
.data([id])
.enter();
pointClipsEnter.append('clipPath')
.attr('class', 'nv-point-clips')
.attr('id', 'nv-points-clip-' + id);
var pointClips = wrap.select('#nv-points-clip-' + id).selectAll('circle')
.data(vertices);
pointClips.enter().append('circle')
.attr('r', clipRadius);
pointClips.exit().remove();
pointClips
.attr('cx', function(d) { return d[0] })
.attr('cy', function(d) { return d[1] });
wrap.select('.nv-point-paths')
.attr('clip-path', 'url(#nv-points-clip-' + id + ')');
}
if(vertices.length) {
// Issue #283 - Adding 2 dummy points to the voronoi b/c voronoi requires min 3 points to work
vertices.push([x.range()[0] - 20, y.range()[0] - 20, null, null]);
vertices.push([x.range()[1] + 20, y.range()[1] + 20, null, null]);
vertices.push([x.range()[0] - 20, y.range()[0] + 20, null, null]);
vertices.push([x.range()[1] + 20, y.range()[1] - 20, null, null]);
}
var bounds = d3.geom.polygon([
[-10,-10],
[-10,height + 10],
[width + 10,height + 10],
[width + 10,-10]
]);
var voronoi = d3.geom.voronoi(vertices).map(function(d, i) {
return {
'data': bounds.clip(d),
'series': vertices[i][2],
'point': vertices[i][3]
}
});
var pointPaths = wrap.select('.nv-point-paths').selectAll('path')
.data(voronoi);
pointPaths.enter().append('path')
.attr('class', function(d,i) { return 'nv-path-'+i; });
pointPaths.exit().remove();
pointPaths
.attr('d', function(d) {
if (d === undefined)
return 'M 0 0'
else if (d.data.length === 0)
return 'M 0 0'
else
return 'M' + d.data.join('L') + 'Z';
});
var mouseEventCallback = function(d,mDispatch) {
if (needsUpdate) return 0;
var series = data[d.series];
if (typeof series === 'undefined') return;
var point = series.values[d.point];
mDispatch({
point: point,
series: series,
pos: [x(getX(point, d.point)) + margin.left, y(getY(point, d.point)) + margin.top],
seriesIndex: d.series,
pointIndex: d.point
});
};
pointPaths
.on('click', function(d) {
mouseEventCallback(d, dispatch.elementClick);
})
.on('mouseover', function(d) {
mouseEventCallback(d, dispatch.elementMouseover);
})
.on('mouseout', function(d, i) {
mouseEventCallback(d, dispatch.elementMouseout);
});
} else {
/*
// bring data in form needed for click handlers
var dataWithPoints = vertices.map(function(d, i) {
return {
'data': d,
'series': vertices[i][2],
'point': vertices[i][3]
}
});
*/
// add event handlers to points instead voronoi paths
wrap.select('.nv-groups').selectAll('.nv-group')
.selectAll('.nv-point')
//.data(dataWithPoints)
//.style('pointer-events', 'auto') // recativate events, disabled by css
.on('click', function(d,i) {
//nv.log('test', d, i);
if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
var series = data[d.series],
point = series.values[i];
dispatch.elementClick({
point: point,
series: series,
pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],
seriesIndex: d.series,
pointIndex: i
});
})
.on('mouseover', function(d,i) {
if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
var series = data[d.series],
point = series.values[i];
dispatch.elementMouseover({
point: point,
series: series,
pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],
seriesIndex: d.series,
pointIndex: i
});
})
.on('mouseout', function(d,i) {
if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
var series = data[d.series],
point = series.values[i];
dispatch.elementMouseout({
point: point,
series: series,
seriesIndex: d.series,
pointIndex: i
});
});
}
needsUpdate = false;
}
needsUpdate = true;
var groups = wrap.select('.nv-groups').selectAll('.nv-group')
.data(function(d) { return d }, function(d) { return d.key });
groups.enter().append('g')
.style('stroke-opacity', 1e-6)
.style('fill-opacity', 1e-6);
groups.exit()
.remove();
groups
.attr('class', function(d,i) { return 'nv-group nv-series-' + i })
.classed('hover', function(d) { return d.hover });
groups
.transition()
.style('fill', function(d,i) { return color(d, i) })
.style('stroke', function(d,i) { return color(d, i) })
.style('stroke-opacity', 1)
.style('fill-opacity', .5);
if (onlyCircles) {
var points = groups.selectAll('circle.nv-point')
.data(function(d) { return d.values }, pointKey);
points.enter().append('circle')
.style('fill', function (d,i) { return d.color })
.style('stroke', function (d,i) { return d.color })
.attr('cx', function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })
.attr('cy', function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })
.attr('r', function(d,i) { return Math.sqrt(z(getSize(d,i))/Math.PI) });
points.exit().remove();
groups.exit().selectAll('path.nv-point').transition()
.attr('cx', function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
.attr('cy', function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
.remove();
points.each(function(d,i) {
d3.select(this)
.classed('nv-point', true)
.classed('nv-point-' + i, true)
.classed('hover',false)
;
});
points.transition()
.attr('cx', function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
.attr('cy', function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
.attr('r', function(d,i) { return Math.sqrt(z(getSize(d,i))/Math.PI) });
} else {
var points = groups.selectAll('path.nv-point')
.data(function(d) { return d.values });
points.enter().append('path')
.style('fill', function (d,i) { return d.color })
.style('stroke', function (d,i) { return d.color })
.attr('transform', function(d,i) {
return 'translate(' + x0(getX(d,i)) + ',' + y0(getY(d,i)) + ')'
})
.attr('d',
d3.svg.symbol()
.type(getShape)
.size(function(d,i) { return z(getSize(d,i)) })
);
points.exit().remove();
groups.exit().selectAll('path.nv-point')
.transition()
.attr('transform', function(d,i) {
return 'translate(' + x(getX(d,i)) + ',' + y(getY(d,i)) + ')'
})
.remove();
points.each(function(d,i) {
d3.select(this)
.classed('nv-point', true)
.classed('nv-point-' + i, true)
.classed('hover',false)
;
});
points.transition()
.attr('transform', function(d,i) {
//nv.log(d,i,getX(d,i), x(getX(d,i)));
return 'translate(' + x(getX(d,i)) + ',' + y(getY(d,i)) + ')'
})
.attr('d',
d3.svg.symbol()
.type(getShape)
.size(function(d,i) { return z(getSize(d,i)) })
);
}
// Delay updating the invisible interactive layer for smoother animation
clearTimeout(timeoutID); // stop repeat calls to updateInteractiveLayer
timeoutID = setTimeout(updateInteractiveLayer, 300);
//updateInteractiveLayer();
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
z0 = z.copy();
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
chart.clearHighlights = function() {
//Remove the 'hover' class from all highlighted points.
d3.selectAll(".nv-chart-" + id + " .nv-point.hover").classed("hover",false);
};
chart.highlightPoint = function(seriesIndex,pointIndex,isHoverOver) {
d3.select(".nv-chart-" + id + " .nv-series-" + seriesIndex + " .nv-point-" + pointIndex)
.classed("hover",isHoverOver);
};
dispatch.on('elementMouseover.point', function(d) {
if (interactive) chart.highlightPoint(d.seriesIndex,d.pointIndex,true);
});
dispatch.on('elementMouseout.point', function(d) {
if (interactive) chart.highlightPoint(d.seriesIndex,d.pointIndex,false);
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = d3.functor(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = d3.functor(_);
return chart;
};
chart.size = function(_) {
if (!arguments.length) return getSize;
getSize = d3.functor(_);
return chart;
};
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.zScale = function(_) {
if (!arguments.length) return z;
z = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.sizeDomain = function(_) {
if (!arguments.length) return sizeDomain;
sizeDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.sizeRange = function(_) {
if (!arguments.length) return sizeRange;
sizeRange = _;
return chart;
};
chart.forceX = function(_) {
if (!arguments.length) return forceX;
forceX = _;
return chart;
};
chart.forceY = function(_) {
if (!arguments.length) return forceY;
forceY = _;
return chart;
};
chart.forceSize = function(_) {
if (!arguments.length) return forceSize;
forceSize = _;
return chart;
};
chart.interactive = function(_) {
if (!arguments.length) return interactive;
interactive = _;
return chart;
};
chart.pointKey = function(_) {
if (!arguments.length) return pointKey;
pointKey = _;
return chart;
};
chart.pointActive = function(_) {
if (!arguments.length) return pointActive;
pointActive = _;
return chart;
};
chart.padData = function(_) {
if (!arguments.length) return padData;
padData = _;
return chart;
};
chart.padDataOuter = function(_) {
if (!arguments.length) return padDataOuter;
padDataOuter = _;
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.clipVoronoi= function(_) {
if (!arguments.length) return clipVoronoi;
clipVoronoi = _;
return chart;
};
chart.useVoronoi= function(_) {
if (!arguments.length) return useVoronoi;
useVoronoi = _;
if (useVoronoi === false) {
clipVoronoi = false;
}
return chart;
};
chart.clipRadius = function(_) {
if (!arguments.length) return clipRadius;
clipRadius = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.shape = function(_) {
if (!arguments.length) return getShape;
getShape = _;
return chart;
};
chart.onlyCircles = function(_) {
if (!arguments.length) return onlyCircles;
onlyCircles = _;
return chart;
};
chart.id = function(_) {
if (!arguments.length) return id;
id = _;
return chart;
};
chart.singlePoint = function(_) {
if (!arguments.length) return singlePoint;
singlePoint = _;
return chart;
};
//============================================================
return chart;
}
nv.models.scatterChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var scatter = nv.models.scatter()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, controls = nv.models.legend()
, distX = nv.models.distribution()
, distY = nv.models.distribution()
;
var margin = {top: 30, right: 20, bottom: 50, left: 75}
, width = null
, height = null
, color = nv.utils.defaultColor()
, x = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.xScale()
, y = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.yScale()
, xPadding = 0
, yPadding = 0
, showDistX = false
, showDistY = false
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, showControls = !!d3.fisheye
, fisheye = 0
, pauseFisheye = false
, tooltips = true
, tooltipX = function(key, x, y) { return '<strong>' + x + '</strong>' }
, tooltipY = function(key, x, y) { return '<strong>' + y + '</strong>' }
, tooltip = null
, state = {}
, defaultState = null
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, noData = "No Data Available."
, transitionDuration = 250
;
scatter
.xScale(x)
.yScale(y)
;
xAxis
.orient('bottom')
.tickPadding(10)
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
.tickPadding(10)
;
distX
.axis('x')
;
distY
.axis('y')
;
controls.updateState(false);
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0;
var showTooltip = function(e, offsetElement) {
//TODO: make tooltip style an option between single or dual on axes (maybe on all charts with axes?)
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
leftX = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
topX = y.range()[0] + margin.top + ( offsetElement.offsetTop || 0),
leftY = x.range()[0] + margin.left + ( offsetElement.offsetLeft || 0 ),
topY = e.pos[1] + ( offsetElement.offsetTop || 0),
xVal = xAxis.tickFormat()(scatter.x()(e.point, e.pointIndex)),
yVal = yAxis.tickFormat()(scatter.y()(e.point, e.pointIndex));
if( tooltipX != null )
nv.tooltip.show([leftX, topX], tooltipX(e.series.key, xVal, yVal, e, chart), 'n', 1, offsetElement, 'x-nvtooltip');
if( tooltipY != null )
nv.tooltip.show([leftY, topY], tooltipY(e.series.key, xVal, yVal, e, chart), 'e', 1, offsetElement, 'y-nvtooltip');
if( tooltip != null )
nv.tooltip.show([left, top], tooltip(e.series.key, xVal, yVal, e, chart), e.value < 0 ? 'n' : 's', null, offsetElement);
};
var controlsData = [
{ key: 'Magnify', disabled: true }
];
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart); };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display noData message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x0 = x0 || x;
y0 = y0 || y;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-scatterChart').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatterChart nv-chart-' + scatter.id());
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
// background for pointer events
gEnter.append('rect').attr('class', 'nvd3 nv-background');
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-scatterWrap');
gEnter.append('g').attr('class', 'nv-distWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
var legendWidth = (showControls) ? availableWidth / 2 : availableWidth;
legend.width(legendWidth);
wrap.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
wrap.select('.nv-legendWrap')
.attr('transform', 'translate(' + (availableWidth - legendWidth) + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
controls.width(180).color(['#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.attr('transform', 'translate(0,' + (-margin.top) +')')
.call(controls);
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
// Main Chart Component(s)
scatter
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
if (xPadding !== 0)
scatter.xDomain(null);
if (yPadding !== 0)
scatter.yDomain(null);
wrap.select('.nv-scatterWrap')
.datum(data.filter(function(d) { return !d.disabled }))
.call(scatter);
//Adjust for x and y padding
if (xPadding !== 0) {
var xRange = x.domain()[1] - x.domain()[0];
scatter.xDomain([x.domain()[0] - (xPadding * xRange), x.domain()[1] + (xPadding * xRange)]);
}
if (yPadding !== 0) {
var yRange = y.domain()[1] - y.domain()[0];
scatter.yDomain([y.domain()[0] - (yPadding * yRange), y.domain()[1] + (yPadding * yRange)]);
}
//Only need to update the scatter again if x/yPadding changed the domain.
if (yPadding !== 0 || xPadding !== 0) {
wrap.select('.nv-scatterWrap')
.datum(data.filter(function(d) { return !d.disabled }))
.call(scatter);
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( xAxis.ticks() && xAxis.ticks().length ? xAxis.ticks() : availableWidth / 100 )
.tickSize( -availableHeight , 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')')
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( yAxis.ticks() && yAxis.ticks().length ? yAxis.ticks() : availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis')
.call(yAxis);
}
if (showDistX) {
distX
.getData(scatter.x())
.scale(x)
.width(availableWidth)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
gEnter.select('.nv-distWrap').append('g')
.attr('class', 'nv-distributionX');
g.select('.nv-distributionX')
.attr('transform', 'translate(0,' + y.range()[0] + ')')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distX);
}
if (showDistY) {
distY
.getData(scatter.y())
.scale(y)
.width(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
gEnter.select('.nv-distWrap').append('g')
.attr('class', 'nv-distributionY');
g.select('.nv-distributionY')
.attr('transform',
'translate(' + (rightAlignYAxis ? availableWidth : -distY.size() ) + ',0)')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distY);
}
//------------------------------------------------------------
if (d3.fisheye) {
g.select('.nv-background')
.attr('width', availableWidth)
.attr('height', availableHeight);
g.select('.nv-background').on('mousemove', updateFisheye);
g.select('.nv-background').on('click', function() { pauseFisheye = !pauseFisheye;});
scatter.dispatch.on('elementClick.freezeFisheye', function() {
pauseFisheye = !pauseFisheye;
});
}
function updateFisheye() {
if (pauseFisheye) {
g.select('.nv-point-paths').style('pointer-events', 'all');
return false;
}
g.select('.nv-point-paths').style('pointer-events', 'none' );
var mouse = d3.mouse(this);
x.distortion(fisheye).focus(mouse[0]);
y.distortion(fisheye).focus(mouse[1]);
g.select('.nv-scatterWrap')
.call(scatter);
if (showXAxis)
g.select('.nv-x.nv-axis').call(xAxis);
if (showYAxis)
g.select('.nv-y.nv-axis').call(yAxis);
g.select('.nv-distributionX')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distX);
g.select('.nv-distributionY')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distY);
}
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
controls.dispatch.on('legendClick', function(d,i) {
d.disabled = !d.disabled;
fisheye = d.disabled ? 0 : 2.5;
g.select('.nv-background') .style('pointer-events', d.disabled ? 'none' : 'all');
g.select('.nv-point-paths').style('pointer-events', d.disabled ? 'all' : 'none' );
if (d.disabled) {
x.distortion(fisheye).focus(0);
y.distortion(fisheye).focus(0);
g.select('.nv-scatterWrap').call(scatter);
g.select('.nv-x.nv-axis').call(xAxis);
g.select('.nv-y.nv-axis').call(yAxis);
} else {
pauseFisheye = false;
}
chart.update();
});
legend.dispatch.on('stateChange', function(newState) {
state.disabled = newState.disabled;
dispatch.stateChange(state);
chart.update();
});
scatter.dispatch.on('elementMouseover.tooltip', function(e) {
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)
.attr('y1', function(d,i) { return e.pos[1] - availableHeight;});
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)
.attr('x2', e.pos[0] + distX.size());
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
chart.update();
});
//============================================================
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
scatter.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)
.attr('y1', 0);
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)
.attr('x2', distY.size());
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.scatter = scatter;
chart.legend = legend;
chart.controls = controls;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.distX = distX;
chart.distY = distY;
d3.rebind(chart, scatter, 'id', 'interactive', 'pointActive', 'x', 'y', 'shape', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'sizeRange', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius', 'useVoronoi');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
distX.color(color);
distY.color(color);
return chart;
};
chart.showDistX = function(_) {
if (!arguments.length) return showDistX;
showDistX = _;
return chart;
};
chart.showDistY = function(_) {
if (!arguments.length) return showDistY;
showDistY = _;
return chart;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.fisheye = function(_) {
if (!arguments.length) return fisheye;
fisheye = _;
return chart;
};
chart.xPadding = function(_) {
if (!arguments.length) return xPadding;
xPadding = _;
return chart;
};
chart.yPadding = function(_) {
if (!arguments.length) return yPadding;
yPadding = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.tooltipXContent = function(_) {
if (!arguments.length) return tooltipX;
tooltipX = _;
return chart;
};
chart.tooltipYContent = function(_) {
if (!arguments.length) return tooltipY;
tooltipY = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.scatterPlusLineChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var scatter = nv.models.scatter()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, controls = nv.models.legend()
, distX = nv.models.distribution()
, distY = nv.models.distribution()
;
var margin = {top: 30, right: 20, bottom: 50, left: 75}
, width = null
, height = null
, color = nv.utils.defaultColor()
, x = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.xScale()
, y = d3.fisheye ? d3.fisheye.scale(d3.scale.linear).distortion(0) : scatter.yScale()
, showDistX = false
, showDistY = false
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, showControls = !!d3.fisheye
, fisheye = 0
, pauseFisheye = false
, tooltips = true
, tooltipX = function(key, x, y) { return '<strong>' + x + '</strong>' }
, tooltipY = function(key, x, y) { return '<strong>' + y + '</strong>' }
, tooltip = function(key, x, y, date) { return '<h3>' + key + '</h3>'
+ '<p>' + date + '</p>' }
, state = {}
, defaultState = null
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, noData = "No Data Available."
, transitionDuration = 250
;
scatter
.xScale(x)
.yScale(y)
;
xAxis
.orient('bottom')
.tickPadding(10)
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
.tickPadding(10)
;
distX
.axis('x')
;
distY
.axis('y')
;
controls.updateState(false);
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var x0, y0;
var showTooltip = function(e, offsetElement) {
//TODO: make tooltip style an option between single or dual on axes (maybe on all charts with axes?)
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
leftX = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
topX = y.range()[0] + margin.top + ( offsetElement.offsetTop || 0),
leftY = x.range()[0] + margin.left + ( offsetElement.offsetLeft || 0 ),
topY = e.pos[1] + ( offsetElement.offsetTop || 0),
xVal = xAxis.tickFormat()(scatter.x()(e.point, e.pointIndex)),
yVal = yAxis.tickFormat()(scatter.y()(e.point, e.pointIndex));
if( tooltipX != null )
nv.tooltip.show([leftX, topX], tooltipX(e.series.key, xVal, yVal, e, chart), 'n', 1, offsetElement, 'x-nvtooltip');
if( tooltipY != null )
nv.tooltip.show([leftY, topY], tooltipY(e.series.key, xVal, yVal, e, chart), 'e', 1, offsetElement, 'y-nvtooltip');
if( tooltip != null )
nv.tooltip.show([left, top], tooltip(e.series.key, xVal, yVal, e.point.tooltip, e, chart), e.value < 0 ? 'n' : 's', null, offsetElement);
};
var controlsData = [
{ key: 'Magnify', disabled: true }
];
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart); };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display noData message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = scatter.xScale();
y = scatter.yScale();
x0 = x0 || x;
y0 = y0 || y;
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-scatterChart').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatterChart nv-chart-' + scatter.id());
var gEnter = wrapEnter.append('g');
var g = wrap.select('g')
// background for pointer events
gEnter.append('rect').attr('class', 'nvd3 nv-background').style("pointer-events","none");
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-scatterWrap');
gEnter.append('g').attr('class', 'nv-regressionLinesWrap');
gEnter.append('g').attr('class', 'nv-distWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
//------------------------------------------------------------
// Legend
if (showLegend) {
legend.width( availableWidth / 2 );
wrap.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
wrap.select('.nv-legendWrap')
.attr('transform', 'translate(' + (availableWidth / 2) + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
controls.width(180).color(['#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.attr('transform', 'translate(0,' + (-margin.top) +')')
.call(controls);
}
//------------------------------------------------------------
//------------------------------------------------------------
// Main Chart Component(s)
scatter
.width(availableWidth)
.height(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }))
wrap.select('.nv-scatterWrap')
.datum(data.filter(function(d) { return !d.disabled }))
.call(scatter);
wrap.select('.nv-regressionLinesWrap')
.attr('clip-path', 'url(#nv-edge-clip-' + scatter.id() + ')');
var regWrap = wrap.select('.nv-regressionLinesWrap').selectAll('.nv-regLines')
.data(function(d) {return d });
regWrap.enter().append('g').attr('class', 'nv-regLines');
var regLine = regWrap.selectAll('.nv-regLine').data(function(d){return [d]});
var regLineEnter = regLine.enter()
.append('line').attr('class', 'nv-regLine')
.style('stroke-opacity', 0);
regLine
.transition()
.attr('x1', x.range()[0])
.attr('x2', x.range()[1])
.attr('y1', function(d,i) {return y(x.domain()[0] * d.slope + d.intercept) })
.attr('y2', function(d,i) { return y(x.domain()[1] * d.slope + d.intercept) })
.style('stroke', function(d,i,j) { return color(d,j) })
.style('stroke-opacity', function(d,i) {
return (d.disabled || typeof d.slope === 'undefined' || typeof d.intercept === 'undefined') ? 0 : 1
});
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( xAxis.ticks() ? xAxis.ticks() : availableWidth / 100 )
.tickSize( -availableHeight , 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + y.range()[0] + ')')
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks( yAxis.ticks() ? yAxis.ticks() : availableHeight / 36 )
.tickSize( -availableWidth, 0);
g.select('.nv-y.nv-axis')
.call(yAxis);
}
if (showDistX) {
distX
.getData(scatter.x())
.scale(x)
.width(availableWidth)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
gEnter.select('.nv-distWrap').append('g')
.attr('class', 'nv-distributionX');
g.select('.nv-distributionX')
.attr('transform', 'translate(0,' + y.range()[0] + ')')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distX);
}
if (showDistY) {
distY
.getData(scatter.y())
.scale(y)
.width(availableHeight)
.color(data.map(function(d,i) {
return d.color || color(d, i);
}).filter(function(d,i) { return !data[i].disabled }));
gEnter.select('.nv-distWrap').append('g')
.attr('class', 'nv-distributionY');
g.select('.nv-distributionY')
.attr('transform', 'translate(' + (rightAlignYAxis ? availableWidth : -distY.size() ) + ',0)')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distY);
}
//------------------------------------------------------------
if (d3.fisheye) {
g.select('.nv-background')
.attr('width', availableWidth)
.attr('height', availableHeight)
;
g.select('.nv-background').on('mousemove', updateFisheye);
g.select('.nv-background').on('click', function() { pauseFisheye = !pauseFisheye;});
scatter.dispatch.on('elementClick.freezeFisheye', function() {
pauseFisheye = !pauseFisheye;
});
}
function updateFisheye() {
if (pauseFisheye) {
g.select('.nv-point-paths').style('pointer-events', 'all');
return false;
}
g.select('.nv-point-paths').style('pointer-events', 'none' );
var mouse = d3.mouse(this);
x.distortion(fisheye).focus(mouse[0]);
y.distortion(fisheye).focus(mouse[1]);
g.select('.nv-scatterWrap')
.datum(data.filter(function(d) { return !d.disabled }))
.call(scatter);
if (showXAxis)
g.select('.nv-x.nv-axis').call(xAxis);
if (showYAxis)
g.select('.nv-y.nv-axis').call(yAxis);
g.select('.nv-distributionX')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distX);
g.select('.nv-distributionY')
.datum(data.filter(function(d) { return !d.disabled }))
.call(distY);
}
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
controls.dispatch.on('legendClick', function(d,i) {
d.disabled = !d.disabled;
fisheye = d.disabled ? 0 : 2.5;
g.select('.nv-background') .style('pointer-events', d.disabled ? 'none' : 'all');
g.select('.nv-point-paths').style('pointer-events', d.disabled ? 'all' : 'none' );
if (d.disabled) {
x.distortion(fisheye).focus(0);
y.distortion(fisheye).focus(0);
g.select('.nv-scatterWrap').call(scatter);
g.select('.nv-x.nv-axis').call(xAxis);
g.select('.nv-y.nv-axis').call(yAxis);
} else {
pauseFisheye = false;
}
chart.update();
});
legend.dispatch.on('stateChange', function(newState) {
state = newState;
dispatch.stateChange(state);
chart.update();
});
scatter.dispatch.on('elementMouseover.tooltip', function(e) {
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)
.attr('y1', e.pos[1] - availableHeight);
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)
.attr('x2', e.pos[0] + distX.size());
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top];
dispatch.tooltipShow(e);
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
chart.update();
});
//============================================================
//store old scales for use in transitions on update
x0 = x.copy();
y0 = y.copy();
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
scatter.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-distx-' + e.pointIndex)
.attr('y1', 0);
d3.select('.nv-chart-' + scatter.id() + ' .nv-series-' + e.seriesIndex + ' .nv-disty-' + e.pointIndex)
.attr('x2', distY.size());
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.scatter = scatter;
chart.legend = legend;
chart.controls = controls;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.distX = distX;
chart.distY = distY;
d3.rebind(chart, scatter, 'id', 'interactive', 'pointActive', 'x', 'y', 'shape', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'sizeRange', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'clipRadius', 'useVoronoi');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
distX.color(color);
distY.color(color);
return chart;
};
chart.showDistX = function(_) {
if (!arguments.length) return showDistX;
showDistX = _;
return chart;
};
chart.showDistY = function(_) {
if (!arguments.length) return showDistY;
showDistY = _;
return chart;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.fisheye = function(_) {
if (!arguments.length) return fisheye;
fisheye = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.tooltipXContent = function(_) {
if (!arguments.length) return tooltipX;
tooltipX = _;
return chart;
};
chart.tooltipYContent = function(_) {
if (!arguments.length) return tooltipY;
tooltipY = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
//============================================================
return chart;
}
nv.models.sparkline = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 2, right: 0, bottom: 2, left: 0}
, width = 400
, height = 32
, animate = true
, x = d3.scale.linear()
, y = d3.scale.linear()
, getX = function(d) { return d.x }
, getY = function(d) { return d.y }
, color = nv.utils.getColor(['#000'])
, xDomain
, yDomain
, xRange
, yRange
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
x .domain(xDomain || d3.extent(data, getX ))
.range(xRange || [0, availableWidth]);
y .domain(yDomain || d3.extent(data, getY ))
.range(yRange || [availableHeight, 0]);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-sparkline').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparkline');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
//------------------------------------------------------------
var paths = wrap.selectAll('path')
.data(function(d) { return [d] });
paths.enter().append('path');
paths.exit().remove();
paths
.style('stroke', function(d,i) { return d.color || color(d, i) })
.attr('d', d3.svg.line()
.x(function(d,i) { return x(getX(d,i)) })
.y(function(d,i) { return y(getY(d,i)) })
);
// TODO: Add CURRENT data point (Need Min, Mac, Current / Most recent)
var points = wrap.selectAll('circle.nv-point')
.data(function(data) {
var yValues = data.map(function(d, i) { return getY(d,i); });
function pointIndex(index) {
if (index != -1) {
var result = data[index];
result.pointIndex = index;
return result;
} else {
return null;
}
}
var maxPoint = pointIndex(yValues.lastIndexOf(y.domain()[1])),
minPoint = pointIndex(yValues.indexOf(y.domain()[0])),
currentPoint = pointIndex(yValues.length - 1);
return [minPoint, maxPoint, currentPoint].filter(function (d) {return d != null;});
});
points.enter().append('circle');
points.exit().remove();
points
.attr('cx', function(d,i) { return x(getX(d,d.pointIndex)) })
.attr('cy', function(d,i) { return y(getY(d,d.pointIndex)) })
.attr('r', 2)
.attr('class', function(d,i) {
return getX(d, d.pointIndex) == x.domain()[1] ? 'nv-point nv-currentValue' :
getY(d, d.pointIndex) == y.domain()[0] ? 'nv-point nv-minValue' : 'nv-point nv-maxValue'
});
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.x = function(_) {
if (!arguments.length) return getX;
getX = d3.functor(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = d3.functor(_);
return chart;
};
chart.xScale = function(_) {
if (!arguments.length) return x;
x = _;
return chart;
};
chart.yScale = function(_) {
if (!arguments.length) return y;
y = _;
return chart;
};
chart.xDomain = function(_) {
if (!arguments.length) return xDomain;
xDomain = _;
return chart;
};
chart.yDomain = function(_) {
if (!arguments.length) return yDomain;
yDomain = _;
return chart;
};
chart.xRange = function(_) {
if (!arguments.length) return xRange;
xRange = _;
return chart;
};
chart.yRange = function(_) {
if (!arguments.length) return yRange;
yRange = _;
return chart;
};
chart.animate = function(_) {
if (!arguments.length) return animate;
animate = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
//============================================================
return chart;
}
nv.models.sparklinePlus = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var sparkline = nv.models.sparkline();
var margin = {top: 15, right: 100, bottom: 10, left: 50}
, width = null
, height = null
, x
, y
, index = []
, paused = false
, xTickFormat = d3.format(',r')
, yTickFormat = d3.format(',.2f')
, showValue = true
, alignValue = true
, rightAlignValue = false
, noData = "No Data Available."
;
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this);
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { chart(selection) };
chart.container = this;
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
var currentValue = sparkline.y()(data[data.length-1], data.length-1);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = sparkline.xScale();
y = sparkline.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-sparklineplus').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparklineplus');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-sparklineWrap');
gEnter.append('g').attr('class', 'nv-valueWrap');
gEnter.append('g').attr('class', 'nv-hoverArea');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
//------------------------------------------------------------
// Main Chart Component(s)
var sparklineWrap = g.select('.nv-sparklineWrap');
sparkline
.width(availableWidth)
.height(availableHeight);
sparklineWrap
.call(sparkline);
//------------------------------------------------------------
var valueWrap = g.select('.nv-valueWrap');
var value = valueWrap.selectAll('.nv-currentValue')
.data([currentValue]);
value.enter().append('text').attr('class', 'nv-currentValue')
.attr('dx', rightAlignValue ? -8 : 8)
.attr('dy', '.9em')
.style('text-anchor', rightAlignValue ? 'end' : 'start');
value
.attr('x', availableWidth + (rightAlignValue ? margin.right : 0))
.attr('y', alignValue ? function(d) { return y(d) } : 0)
.style('fill', sparkline.color()(data[data.length-1], data.length-1))
.text(yTickFormat(currentValue));
gEnter.select('.nv-hoverArea').append('rect')
.on('mousemove', sparklineHover)
.on('click', function() { paused = !paused })
.on('mouseout', function() { index = []; updateValueLine(); });
//.on('mouseout', function() { index = null; updateValueLine(); });
g.select('.nv-hoverArea rect')
.attr('transform', function(d) { return 'translate(' + -margin.left + ',' + -margin.top + ')' })
.attr('width', availableWidth + margin.left + margin.right)
.attr('height', availableHeight + margin.top);
function updateValueLine() { //index is currently global (within the chart), may or may not keep it that way
if (paused) return;
var hoverValue = g.selectAll('.nv-hoverValue').data(index)
var hoverEnter = hoverValue.enter()
.append('g').attr('class', 'nv-hoverValue')
.style('stroke-opacity', 0)
.style('fill-opacity', 0);
hoverValue.exit()
.transition().duration(250)
.style('stroke-opacity', 0)
.style('fill-opacity', 0)
.remove();
hoverValue
.attr('transform', function(d) { return 'translate(' + x(sparkline.x()(data[d],d)) + ',0)' })
.transition().duration(250)
.style('stroke-opacity', 1)
.style('fill-opacity', 1);
if (!index.length) return;
hoverEnter.append('line')
.attr('x1', 0)
.attr('y1', -margin.top)
.attr('x2', 0)
.attr('y2', availableHeight);
hoverEnter.append('text').attr('class', 'nv-xValue')
.attr('x', -6)
.attr('y', -margin.top)
.attr('text-anchor', 'end')
.attr('dy', '.9em')
g.select('.nv-hoverValue .nv-xValue')
.text(xTickFormat(sparkline.x()(data[index[0]], index[0])));
hoverEnter.append('text').attr('class', 'nv-yValue')
.attr('x', 6)
.attr('y', -margin.top)
.attr('text-anchor', 'start')
.attr('dy', '.9em')
g.select('.nv-hoverValue .nv-yValue')
.text(yTickFormat(sparkline.y()(data[index[0]], index[0])));
}
function sparklineHover() {
if (paused) return;
var pos = d3.mouse(this)[0] - margin.left;
function getClosestIndex(data, x) {
var distance = Math.abs(sparkline.x()(data[0], 0) - x);
var closestIndex = 0;
for (var i = 0; i < data.length; i++){
if (Math.abs(sparkline.x()(data[i], i) - x) < distance) {
distance = Math.abs(sparkline.x()(data[i], i) - x);
closestIndex = i;
}
}
return closestIndex;
}
index = [getClosestIndex(data, Math.round(x.invert(pos)))];
updateValueLine();
}
});
return chart;
}
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.sparkline = sparkline;
d3.rebind(chart, sparkline, 'x', 'y', 'xScale', 'yScale', 'color');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.xTickFormat = function(_) {
if (!arguments.length) return xTickFormat;
xTickFormat = _;
return chart;
};
chart.yTickFormat = function(_) {
if (!arguments.length) return yTickFormat;
yTickFormat = _;
return chart;
};
chart.showValue = function(_) {
if (!arguments.length) return showValue;
showValue = _;
return chart;
};
chart.alignValue = function(_) {
if (!arguments.length) return alignValue;
alignValue = _;
return chart;
};
chart.rightAlignValue = function(_) {
if (!arguments.length) return rightAlignValue;
rightAlignValue = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
//============================================================
return chart;
}
nv.models.stackedArea = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var margin = {top: 0, right: 0, bottom: 0, left: 0}
, width = 960
, height = 500
, color = nv.utils.defaultColor() // a function that computes the color
, id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't selet one
, getX = function(d) { return d.x } // accessor to get the x value from a data point
, getY = function(d) { return d.y } // accessor to get the y value from a data point
, style = 'stack'
, offset = 'zero'
, order = 'default'
, interpolate = 'linear' // controls the line interpolation
, clipEdge = false // if true, masks lines within x and y scale
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, scatter = nv.models.scatter()
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'areaClick', 'areaMouseover', 'areaMouseout')
;
scatter
.size(2.2) // default size
.sizeDomain([2.2,2.2]) // all the same size by default
;
/************************************
* offset:
* 'wiggle' (stream)
* 'zero' (stacked)
* 'expand' (normalize to 100%)
* 'silhouette' (simple centered)
*
* order:
* 'inside-out' (stream)
* 'default' (input order)
************************************/
//============================================================
function chart(selection) {
selection.each(function(data) {
var availableWidth = width - margin.left - margin.right,
availableHeight = height - margin.top - margin.bottom,
container = d3.select(this);
//------------------------------------------------------------
// Setup Scales
x = scatter.xScale();
y = scatter.yScale();
//------------------------------------------------------------
// Injecting point index into each point because d3.layout.stack().out does not give index
data = data.map(function(aseries, i) {
aseries.seriesIndex = i;
aseries.values = aseries.values.map(function(d, j) {
d.index = j;
d.seriesIndex = i;
return d;
})
return aseries;
});
var dataFiltered = data.filter(function(series) {
return !series.disabled;
});
data = d3.layout.stack()
.order(order)
.offset(offset)
.values(function(d) { return d.values }) //TODO: make values customizeable in EVERY model in this fashion
.x(getX)
.y(getY)
.out(function(d, y0, y) {
var yHeight = (getY(d) === 0) ? 0 : y;
d.display = {
y: yHeight,
y0: y0
};
})
(dataFiltered);
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-stackedarea').data([data]);
var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedarea');
var defsEnter = wrapEnter.append('defs');
var gEnter = wrapEnter.append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-areaWrap');
gEnter.append('g').attr('class', 'nv-scatterWrap');
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//------------------------------------------------------------
scatter
.width(availableWidth)
.height(availableHeight)
.x(getX)
.y(function(d) { return d.display.y + d.display.y0 })
.forceY([0])
.color(data.map(function(d,i) {
return d.color || color(d, d.seriesIndex);
}));
var scatterWrap = g.select('.nv-scatterWrap')
.datum(data);
scatterWrap.call(scatter);
defsEnter.append('clipPath')
.attr('id', 'nv-edge-clip-' + id)
.append('rect');
wrap.select('#nv-edge-clip-' + id + ' rect')
.attr('width', availableWidth)
.attr('height', availableHeight);
g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
var area = d3.svg.area()
.x(function(d,i) { return x(getX(d,i)) })
.y0(function(d) {
return y(d.display.y0)
})
.y1(function(d) {
return y(d.display.y + d.display.y0)
})
.interpolate(interpolate);
var zeroArea = d3.svg.area()
.x(function(d,i) { return x(getX(d,i)) })
.y0(function(d) { return y(d.display.y0) })
.y1(function(d) { return y(d.display.y0) });
var path = g.select('.nv-areaWrap').selectAll('path.nv-area')
.data(function(d) { return d });
path.enter().append('path').attr('class', function(d,i) { return 'nv-area nv-area-' + i })
.attr('d', function(d,i){
return zeroArea(d.values, d.seriesIndex);
})
.on('mouseover', function(d,i) {
d3.select(this).classed('hover', true);
dispatch.areaMouseover({
point: d,
series: d.key,
pos: [d3.event.pageX, d3.event.pageY],
seriesIndex: i
});
})
.on('mouseout', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.areaMouseout({
point: d,
series: d.key,
pos: [d3.event.pageX, d3.event.pageY],
seriesIndex: i
});
})
.on('click', function(d,i) {
d3.select(this).classed('hover', false);
dispatch.areaClick({
point: d,
series: d.key,
pos: [d3.event.pageX, d3.event.pageY],
seriesIndex: i
});
})
path.exit().transition()
.attr('d', function(d,i) { return zeroArea(d.values,i) })
.remove();
path
.style('fill', function(d,i){
return d.color || color(d, d.seriesIndex)
})
.style('stroke', function(d,i){ return d.color || color(d, d.seriesIndex) });
path.transition()
.attr('d', function(d,i) {
return area(d.values,i)
});
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
scatter.dispatch.on('elementMouseover.area', function(e) {
g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', true);
});
scatter.dispatch.on('elementMouseout.area', function(e) {
g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', false);
});
//============================================================
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
scatter.dispatch.on('elementClick.area', function(e) {
dispatch.areaClick(e);
})
scatter.dispatch.on('elementMouseover.tooltip', function(e) {
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
dispatch.tooltipShow(e);
});
scatter.dispatch.on('elementMouseout.tooltip', function(e) {
dispatch.tooltipHide(e);
});
//============================================================
//============================================================
// Global getters and setters
//------------------------------------------------------------
chart.dispatch = dispatch;
chart.scatter = scatter;
d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',
'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'useVoronoi','clipRadius','highlightPoint','clearHighlights');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.x = function(_) {
if (!arguments.length) return getX;
getX = d3.functor(_);
return chart;
};
chart.y = function(_) {
if (!arguments.length) return getY;
getY = d3.functor(_);
return chart;
}
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.clipEdge = function(_) {
if (!arguments.length) return clipEdge;
clipEdge = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
return chart;
};
chart.offset = function(_) {
if (!arguments.length) return offset;
offset = _;
return chart;
};
chart.order = function(_) {
if (!arguments.length) return order;
order = _;
return chart;
};
//shortcut for offset + order
chart.style = function(_) {
if (!arguments.length) return style;
style = _;
switch (style) {
case 'stack':
chart.offset('zero');
chart.order('default');
break;
case 'stream':
chart.offset('wiggle');
chart.order('inside-out');
break;
case 'stream-center':
chart.offset('silhouette');
chart.order('inside-out');
break;
case 'expand':
chart.offset('expand');
chart.order('default');
break;
}
return chart;
};
chart.interpolate = function(_) {
if (!arguments.length) return interpolate;
interpolate = _;
return chart;
};
//============================================================
return chart;
}
nv.models.stackedAreaChart = function() {
"use strict";
//============================================================
// Public Variables with Default Settings
//------------------------------------------------------------
var stacked = nv.models.stackedArea()
, xAxis = nv.models.axis()
, yAxis = nv.models.axis()
, legend = nv.models.legend()
, controls = nv.models.legend()
, interactiveLayer = nv.interactiveGuideline()
;
var margin = {top: 30, right: 25, bottom: 50, left: 60}
, width = null
, height = null
, color = nv.utils.defaultColor() // a function that takes in d, i and returns color
, showControls = true
, showLegend = true
, showXAxis = true
, showYAxis = true
, rightAlignYAxis = false
, useInteractiveGuideline = false
, tooltips = true
, tooltip = function(key, x, y, e, graph) {
return '<h3>' + key + '</h3>' +
'<p>' + y + ' on ' + x + '</p>'
}
, x //can be accessed via chart.xScale()
, y //can be accessed via chart.yScale()
, yAxisTickFormat = d3.format(',.2f')
, state = { style: stacked.style() }
, defaultState = null
, noData = 'No Data Available.'
, dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState')
, controlWidth = 250
, cData = ['Stacked','Stream','Expanded']
, transitionDuration = 250
;
xAxis
.orient('bottom')
.tickPadding(7)
;
yAxis
.orient((rightAlignYAxis) ? 'right' : 'left')
;
controls.updateState(false);
//============================================================
//============================================================
// Private Variables
//------------------------------------------------------------
var showTooltip = function(e, offsetElement) {
var left = e.pos[0] + ( offsetElement.offsetLeft || 0 ),
top = e.pos[1] + ( offsetElement.offsetTop || 0),
x = xAxis.tickFormat()(stacked.x()(e.point, e.pointIndex)),
y = yAxis.tickFormat()(stacked.y()(e.point, e.pointIndex)),
content = tooltip(e.series.key, x, y, e, chart);
nv.tooltip.show([left, top], content, e.value < 0 ? 'n' : 's', null, offsetElement);
};
//============================================================
function chart(selection) {
selection.each(function(data) {
var container = d3.select(this),
that = this;
var availableWidth = (width || parseInt(container.style('width')) || 960)
- margin.left - margin.right,
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
chart.update = function() { container.transition().duration(transitionDuration).call(chart); };
chart.container = this;
//set state.disabled
state.disabled = data.map(function(d) { return !!d.disabled });
if (!defaultState) {
var key;
defaultState = {};
for (key in state) {
if (state[key] instanceof Array)
defaultState[key] = state[key].slice(0);
else
defaultState[key] = state[key];
}
}
//------------------------------------------------------------
// Display No Data message if there's nothing to show.
if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
var noDataText = container.selectAll('.nv-noData').data([noData]);
noDataText.enter().append('text')
.attr('class', 'nvd3 nv-noData')
.attr('dy', '-.7em')
.style('text-anchor', 'middle');
noDataText
.attr('x', margin.left + availableWidth / 2)
.attr('y', margin.top + availableHeight / 2)
.text(function(d) { return d });
return chart;
} else {
container.selectAll('.nv-noData').remove();
}
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Scales
x = stacked.xScale();
y = stacked.yScale();
//------------------------------------------------------------
//------------------------------------------------------------
// Setup containers and skeleton of chart
var wrap = container.selectAll('g.nv-wrap.nv-stackedAreaChart').data([data]);
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedAreaChart').append('g');
var g = wrap.select('g');
gEnter.append("rect").style("opacity",0);
gEnter.append('g').attr('class', 'nv-x nv-axis');
gEnter.append('g').attr('class', 'nv-y nv-axis');
gEnter.append('g').attr('class', 'nv-stackedWrap');
gEnter.append('g').attr('class', 'nv-legendWrap');
gEnter.append('g').attr('class', 'nv-controlsWrap');
gEnter.append('g').attr('class', 'nv-interactive');
g.select("rect").attr("width",availableWidth).attr("height",availableHeight);
//------------------------------------------------------------
// Legend
if (showLegend) {
var legendWidth = (showControls) ? availableWidth - controlWidth : availableWidth;
legend
.width(legendWidth);
g.select('.nv-legendWrap')
.datum(data)
.call(legend);
if ( margin.top != legend.height()) {
margin.top = legend.height();
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-legendWrap')
.attr('transform', 'translate(' + (availableWidth-legendWidth) + ',' + (-margin.top) +')');
}
//------------------------------------------------------------
//------------------------------------------------------------
// Controls
if (showControls) {
var controlsData = [
{ key: 'Stacked', disabled: stacked.offset() != 'zero' },
{ key: 'Stream', disabled: stacked.offset() != 'wiggle' },
{ key: 'Expanded', disabled: stacked.offset() != 'expand' }
];
controlWidth = (cData.length/3) * 260;
controlsData = controlsData.filter(function(d) {
return cData.indexOf(d.key) > -1;
})
controls
.width( controlWidth )
.color(['#444', '#444', '#444']);
g.select('.nv-controlsWrap')
.datum(controlsData)
.call(controls);
if ( margin.top != Math.max(controls.height(), legend.height()) ) {
margin.top = Math.max(controls.height(), legend.height());
availableHeight = (height || parseInt(container.style('height')) || 400)
- margin.top - margin.bottom;
}
g.select('.nv-controlsWrap')
.attr('transform', 'translate(0,' + (-margin.top) +')');
}
//------------------------------------------------------------
wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
if (rightAlignYAxis) {
g.select(".nv-y.nv-axis")
.attr("transform", "translate(" + availableWidth + ",0)");
}
//------------------------------------------------------------
// Main Chart Component(s)
//------------------------------------------------------------
//Set up interactive layer
if (useInteractiveGuideline) {
interactiveLayer
.width(availableWidth)
.height(availableHeight)
.margin({left: margin.left, top: margin.top})
.svgContainer(container)
.xScale(x);
wrap.select(".nv-interactive").call(interactiveLayer);
}
stacked
.width(availableWidth)
.height(availableHeight)
var stackedWrap = g.select('.nv-stackedWrap')
.datum(data);
stackedWrap.transition().call(stacked);
//------------------------------------------------------------
//------------------------------------------------------------
// Setup Axes
if (showXAxis) {
xAxis
.scale(x)
.ticks( availableWidth / 100 )
.tickSize( -availableHeight, 0);
g.select('.nv-x.nv-axis')
.attr('transform', 'translate(0,' + availableHeight + ')');
g.select('.nv-x.nv-axis')
.transition().duration(0)
.call(xAxis);
}
if (showYAxis) {
yAxis
.scale(y)
.ticks(stacked.offset() == 'wiggle' ? 0 : availableHeight / 36)
.tickSize(-availableWidth, 0)
.setTickFormat(stacked.offset() == 'expand' ? d3.format('%') : yAxisTickFormat);
g.select('.nv-y.nv-axis')
.transition().duration(0)
.call(yAxis);
}
//------------------------------------------------------------
//============================================================
// Event Handling/Dispatching (in chart's scope)
//------------------------------------------------------------
stacked.dispatch.on('areaClick.toggle', function(e) {
if (data.filter(function(d) { return !d.disabled }).length === 1)
data = data.map(function(d) {
d.disabled = false;
return d
});
else
data = data.map(function(d,i) {
d.disabled = (i != e.seriesIndex);
return d
});
state.disabled = data.map(function(d) { return !!d.disabled });
dispatch.stateChange(state);
chart.update();
});
legend.dispatch.on('stateChange', function(newState) {
state.disabled = newState.disabled;
dispatch.stateChange(state);
chart.update();
});
controls.dispatch.on('legendClick', function(d,i) {
if (!d.disabled) return;
controlsData = controlsData.map(function(s) {
s.disabled = true;
return s;
});
d.disabled = false;
switch (d.key) {
case 'Stacked':
stacked.style('stack');
break;
case 'Stream':
stacked.style('stream');
break;
case 'Expanded':
stacked.style('expand');
break;
}
state.style = stacked.style();
dispatch.stateChange(state);
chart.update();
});
interactiveLayer.dispatch.on('elementMousemove', function(e) {
stacked.clearHighlights();
var singlePoint, pointIndex, pointXLocation, allData = [];
data
.filter(function(series, i) {
series.seriesIndex = i;
return !series.disabled;
})
.forEach(function(series,i) {
pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
stacked.highlightPoint(i, pointIndex, true);
var point = series.values[pointIndex];
if (typeof point === 'undefined') return;
if (typeof singlePoint === 'undefined') singlePoint = point;
if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
allData.push({
key: series.key,
value: chart.y()(point, pointIndex),
color: color(series,series.seriesIndex),
stackedValue: point.display
});
});
allData.reverse();
//Highlight the tooltip entry based on which stack the mouse is closest to.
if (allData.length > 2) {
var yValue = chart.yScale().invert(e.mouseY);
var yDistMax = Infinity, indexToHighlight = null;
allData.forEach(function(series,i) {
if ( yValue >= series.stackedValue.y0 && yValue <= (series.stackedValue.y0 + series.stackedValue.y))
{
indexToHighlight = i;
return;
}
});
if (indexToHighlight != null)
allData[indexToHighlight].highlight = true;
}
var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
interactiveLayer.tooltip
.position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
.chartContainer(that.parentNode)
.enabled(tooltips)
.valueFormatter(function(d,i) {
return yAxis.tickFormat()(d);
})
.data(
{
value: xValue,
series: allData
}
)();
interactiveLayer.renderGuideLine(pointXLocation);
});
interactiveLayer.dispatch.on("elementMouseout",function(e) {
dispatch.tooltipHide();
stacked.clearHighlights();
});
dispatch.on('tooltipShow', function(e) {
if (tooltips) showTooltip(e, that.parentNode);
});
// Update chart from a state object passed to event handler
dispatch.on('changeState', function(e) {
if (typeof e.disabled !== 'undefined') {
data.forEach(function(series,i) {
series.disabled = e.disabled[i];
});
state.disabled = e.disabled;
}
if (typeof e.style !== 'undefined') {
stacked.style(e.style);
}
chart.update();
});
});
return chart;
}
//============================================================
// Event Handling/Dispatching (out of chart's scope)
//------------------------------------------------------------
stacked.dispatch.on('tooltipShow', function(e) {
//disable tooltips when value ~= 0
//// TODO: consider removing points from voronoi that have 0 value instead of this hack
/*
if (!Math.round(stacked.y()(e.point) * 100)) { // 100 will not be good for very small numbers... will have to think about making this valu dynamic, based on data range
setTimeout(function() { d3.selectAll('.point.hover').classed('hover', false) }, 0);
return false;
}
*/
e.pos = [e.pos[0] + margin.left, e.pos[1] + margin.top],
dispatch.tooltipShow(e);
});
stacked.dispatch.on('tooltipHide', function(e) {
dispatch.tooltipHide(e);
});
dispatch.on('tooltipHide', function() {
if (tooltips) nv.tooltip.cleanup();
});
//============================================================
//============================================================
// Expose Public Variables
//------------------------------------------------------------
// expose chart's sub-components
chart.dispatch = dispatch;
chart.stacked = stacked;
chart.legend = legend;
chart.controls = controls;
chart.xAxis = xAxis;
chart.yAxis = yAxis;
chart.interactiveLayer = interactiveLayer;
d3.rebind(chart, stacked, 'x', 'y', 'size', 'xScale', 'yScale', 'xDomain', 'yDomain', 'xRange', 'yRange', 'sizeDomain', 'interactive', 'useVoronoi', 'offset', 'order', 'style', 'clipEdge', 'forceX', 'forceY', 'forceSize', 'interpolate');
chart.options = nv.utils.optionsFunc.bind(chart);
chart.margin = function(_) {
if (!arguments.length) return margin;
margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
return chart;
};
chart.width = function(_) {
if (!arguments.length) return width;
width = _;
return chart;
};
chart.height = function(_) {
if (!arguments.length) return height;
height = _;
return chart;
};
chart.color = function(_) {
if (!arguments.length) return color;
color = nv.utils.getColor(_);
legend.color(color);
stacked.color(color);
return chart;
};
chart.showControls = function(_) {
if (!arguments.length) return showControls;
showControls = _;
return chart;
};
chart.showLegend = function(_) {
if (!arguments.length) return showLegend;
showLegend = _;
return chart;
};
chart.showXAxis = function(_) {
if (!arguments.length) return showXAxis;
showXAxis = _;
return chart;
};
chart.showYAxis = function(_) {
if (!arguments.length) return showYAxis;
showYAxis = _;
return chart;
};
chart.rightAlignYAxis = function(_) {
if(!arguments.length) return rightAlignYAxis;
rightAlignYAxis = _;
yAxis.orient( (_) ? 'right' : 'left');
return chart;
};
chart.useInteractiveGuideline = function(_) {
if(!arguments.length) return useInteractiveGuideline;
useInteractiveGuideline = _;
if (_ === true) {
chart.interactive(false);
chart.useVoronoi(false);
}
return chart;
};
chart.tooltip = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.tooltips = function(_) {
if (!arguments.length) return tooltips;
tooltips = _;
return chart;
};
chart.tooltipContent = function(_) {
if (!arguments.length) return tooltip;
tooltip = _;
return chart;
};
chart.state = function(_) {
if (!arguments.length) return state;
state = _;
return chart;
};
chart.defaultState = function(_) {
if (!arguments.length) return defaultState;
defaultState = _;
return chart;
};
chart.noData = function(_) {
if (!arguments.length) return noData;
noData = _;
return chart;
};
chart.transitionDuration = function(_) {
if (!arguments.length) return transitionDuration;
transitionDuration = _;
return chart;
};
chart.controlsData = function(_) {
if (!arguments.length) return cData;
cData = _;
return chart;
};
yAxis.setTickFormat = yAxis.tickFormat;
yAxis.tickFormat = function(_) {
if (!arguments.length) return yAxisTickFormat;
yAxisTickFormat = _;
return yAxis;
};
//============================================================
return chart;
}
})();
This file has been truncated, but you can view the full file.
[{"name":"Qiita","url_name":"qiita","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d6b60fd11159d42e0f9ad4edaeda2c0dbdec013c/medium.jpg?1364837545","follower_count":8249,"item_count":396},{"name":"Java","url_name":"java","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fd27fd2571b0f0c64a7fd38b62bfe670f4680e4e/medium.jpg?1387959312","follower_count":8450,"item_count":1592},{"name":"Ruby","url_name":"ruby","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9de6a11d330f5694820082438f88ccf4a1b289b2/medium.jpg?1364837630","follower_count":9414,"item_count":4740},{"name":"Python","url_name":"python","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/28fd3d6b220c89e6197fd82c02fd2fcd2bb66d81/medium.jpg?1383884245","follower_count":5952,"item_count":1836},{"name":"Perl","url_name":"perl","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/62b7b4bb21c57f377926995086a4723c566042e8/medium.jpg?1383884139","follower_count":3259,"item_count":449},{"name":"PHP","url_name":"php","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bea656787429d261e190cef347af9879ffd98343/medium.jpg?1387912718","follower_count":9840,"item_count":2493},{"name":"Emacs","url_name":"emacs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2920f41f5aefd36267c6c04183d7e6197b4d2b99/medium.jpg?1364837723","follower_count":3690,"item_count":689},{"name":"Vim","url_name":"vim","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/798b52773f9b91f4ffbf5a2e9d1ed6c4f91c88f4/medium.jpg?1364837741","follower_count":7533,"item_count":1006},{"name":"ShellScript","url_name":"shellscript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/93b434ab12f17f0361be4c236679a76f797162dc/medium.jpg?1387912199","follower_count":5011,"item_count":540},{"name":"C","url_name":"c","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/943e6bf8c78681eacc00068ff38a828ea0393640/medium.jpg?1364837783","follower_count":4557,"item_count":284},{"name":"C++","url_name":"cpp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2f1bca4f52b2c48a0282062eff2db8323fcddc2a/medium.jpg?1364837801","follower_count":4933,"item_count":706},{"name":"Objective-C","url_name":"objective-c","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9a7e96bf051980ee623096f070b71bb3b21f8704/medium.jpg?1389670184","follower_count":7587,"item_count":2141},{"name":"HTML","url_name":"html","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3dbf331a3858f90facbc77a73c53318943846ed1/medium.jpg?1364837839","follower_count":12957,"item_count":482},{"name":"CSS","url_name":"css","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2beeedde2a1052e414a46283ddb8391f7ab4a329/medium.jpg?1364837864","follower_count":10929,"item_count":621},{"name":"JavaScript","url_name":"javascript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c01023cf926d47b711747c9d00b00fd18dc6638a/medium.jpg?1364837881","follower_count":15286,"item_count":3420},{"name":"CoffeeScript","url_name":"coffeescript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e41b881d25c683db2ce913dba0d07b9695a55741/medium.jpg?1368788624","follower_count":4144,"item_count":484},{"name":"Haskell","url_name":"haskell","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/373b3b0595a92712b2a45616f53dae97bc1a04e5/medium.jpg?1387913155","follower_count":2211,"item_count":518},{"name":"Scheme","url_name":"scheme","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b1fb74e3610feb2020a403cd0eab2cebdd217f10/medium.jpg?1399021725","follower_count":1300,"item_count":81},{"name":"iPhone","url_name":"iphone","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8285db3989a4523606690fd264f456548a26d6dc/medium.jpg?1388346696","follower_count":10559,"item_count":867},{"name":"Android","url_name":"android","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0062451c92bb932b6bb257a40a35eee709b5597c/medium.jpg?1403644757","follower_count":9276,"item_count":1697},{"name":"ActionScript","url_name":"actionscript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fc6bce5be79a1f8eeeb280b38166ea361fa746e3/medium.jpg?1364838036","follower_count":217,"item_count":125},{"name":"CakePHP","url_name":"cakephp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/318057e9f194e1078da0ef86e5e8a69b5fde2cb5/medium.jpg?1364838059","follower_count":291,"item_count":217},{"name":"Clojure","url_name":"clojure","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/abba4596684ff5b42060d084cd46a572ed2851b3/medium.jpg?1364838078","follower_count":246,"item_count":202},{"name":"Coq","url_name":"coq","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0ee3e3447b0d27816101f9d6f79618f3c7c386d9/medium.jpg?1367426615","follower_count":39,"item_count":26},{"name":"Django","url_name":"django","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d49dd05ea85817958a672bfdf967012e636609dc/medium.jpg?1364838101","follower_count":133,"item_count":152},{"name":"Erlang","url_name":"erlang","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/226ae22c7fc2e78d4f68f6af15c318dfeb75266f/medium.jpg?1364838116","follower_count":121,"item_count":100},{"name":"Go","url_name":"go","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/52d8b32911f5e71b421e2cd751b48425c29fab11/medium.jpg?1366622944","follower_count":578,"item_count":518},{"name":"Grails","url_name":"grails","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c32431b359a5d54b95198e6e4e80b3d16827e349/medium.jpg?1396605952","follower_count":43,"item_count":53},{"name":"Jython","url_name":"jython","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"LaTeX","url_name":"latex","icon_url":"/icons/medium/missing.png","follower_count":43,"item_count":68},{"name":"Maven","url_name":"maven","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3311f6871c3536d59c4032fe3fd9c01e52ec9cf7/medium.jpg?1387911763","follower_count":50,"item_count":89},{"name":"Node","url_name":"node","icon_url":"/icons/medium/missing.png","follower_count":54,"item_count":37},{"name":"OCaml","url_name":"ocaml","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b954ac10dbe78bc116c15c7c6c103ef6be57ccae/medium.jpg?1367426575","follower_count":77,"item_count":33},{"name":"Rails","url_name":"rails","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5310a6d3a8555d87a7060deec2c9e128bf3b3372/medium.jpg?1364838150","follower_count":2832,"item_count":2584},{"name":"Scala","url_name":"scala","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8d5fcf7e3b476efcace1e848aba2244ed9778480/medium.jpg?1364838172","follower_count":1401,"item_count":560},{"name":"Symfony","url_name":"symfony","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bfcd6a66b89dc41a72cd9ca5af150d6d2b924a18/medium.jpg?1387910954","follower_count":48,"item_count":12},{"name":"VB.Net","url_name":"vb.net","icon_url":"/icons/medium/missing.png","follower_count":61,"item_count":50},{"name":"WordPress","url_name":"wordpress","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f2918753fd4393b52b251c1e21c9a4b8ee5a5a6b/medium.jpg?1364838192","follower_count":329,"item_count":277},{"name":"ZendFramework","url_name":"zendframework","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d8978ef82651ecdf6111dceb6460517d8b8acdb9/medium.jpg?1364838226","follower_count":37,"item_count":22},{"name":"Bash","url_name":"bash","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/005e4b716bc85c3e4f1a6cc3fcbcdc4560866392/medium.jpg?1364838255","follower_count":317,"item_count":577},{"name":"Zsh","url_name":"zsh","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8c06aefe154fcbba7f3d03e61a8be151f86e567c/medium.jpg?1364838270","follower_count":1644,"item_count":454},{"name":"Mac","url_name":"mac","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0cbda729ead4559760ec64ae744a5aef937e0b08/medium.jpg?1403645170","follower_count":3626,"item_count":1324},{"name":"Windows","url_name":"windows","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a9ad076b2063a3ffdae6d3d1ff23eb702662bd6e/medium.jpg?1395329690","follower_count":254,"item_count":593},{"name":"Linux","url_name":"linux","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ae420e8f134ac99c9f691b907029ae347d42c4fc/medium.jpg?1364838323","follower_count":4010,"item_count":1357},{"name":"FizzBuzz","url_name":"fizzbuzz","icon_url":"/icons/medium/missing.png","follower_count":46,"item_count":32},{"name":"再起動","url_name":"%e5%86%8d%e8%b5%b7%e5%8b%95","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"川","url_name":"%e5%b7%9d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"awk","url_name":"awk","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dcd755abf1ee44d9717f610dfe23d6bde04aa636/medium.jpg?1387907716","follower_count":109,"item_count":48},{"name":"Git","url_name":"git","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5d9ff7508a0c2d5bfa9536b6a0fe1864c11cee89/medium.jpg?1387912380","follower_count":5235,"item_count":1604},{"name":"hoge","url_name":"hoge","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"misc","url_name":"misc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Node.js","url_name":"node.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/99671b12d7d2688f35c262552f16c7cc9d10b873/medium.jpg?1390767445","follower_count":2929,"item_count":904},{"name":"Facebook","url_name":"facebook","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6c1a9e3548e01c634985e1e1cc838c2c72a46658/medium.jpg?1387915323","follower_count":1474,"item_count":162},{"name":"Dlanguage","url_name":"dlanguage","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/572e68f81a1a033426a36b92dd26c23c805412d3/medium.jpg?1364838395","follower_count":47,"item_count":28},{"name":"MySQL","url_name":"mysql","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a0e69e5c71526c0aa982947dc0e4e06aa478bd37/medium.jpg?1387912873","follower_count":3435,"item_count":762},{"name":"チーズ","url_name":"%e3%83%81%e3%83%bc%e3%82%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SOAP","url_name":"soap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"-etc-hosts","url_name":"-etc-hosts","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"hatenastar","url_name":"hatenastar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"FastCGI","url_name":"fastcgi","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":3},{"name":"nginx","url_name":"nginx","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b63534ba3529c37ec6df1975882cea610b063452/medium.jpg?1387914668","follower_count":1765,"item_count":307},{"name":"mod_rewrite","url_name":"mod_rewrite","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":15},{"name":"[java]","url_name":"%5bjava%5d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"KVS","url_name":"kvs","icon_url":"/icons/medium/missing.png","follower_count":54,"item_count":9},{"name":"Redis","url_name":"redis","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/28ae7ba891cbe8d355d35b25d0f63ed3a2807529/medium.jpg?1382432904","follower_count":185,"item_count":119},{"name":"Resque","url_name":"resque","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":13},{"name":"UX","url_name":"ux","icon_url":"/icons/medium/missing.png","follower_count":56,"item_count":7},{"name":"HTML5","url_name":"html5","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/947e2e83c7248231ef3224d56e4ca3160a5b5368/medium.jpg?1387915060","follower_count":4866,"item_count":339},{"name":"CSS3","url_name":"css3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/89b77cd046fbb39f245d255f884b575687decc5c/medium.jpg?1387912789","follower_count":3405,"item_count":144},{"name":"UI","url_name":"ui","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9d96288a38a9a8ebd8779176befacac23bedb08c/medium.jpg?1391601336","follower_count":147,"item_count":32},{"name":"Chrome","url_name":"chrome","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/42e7e3016c98815d687c14796fef9af07f1e057a/medium.jpg?1364838534","follower_count":2680,"item_count":261},{"name":"extensions","url_name":"extensions","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"#common-lisp","url_name":"%23common-lisp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"common-lisp","url_name":"common-lisp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/745b73901dc247fd2b064c1766a7bcd8037cd5a7/medium.jpg?1364838584","follower_count":130,"item_count":119},{"name":"SleepSort","url_name":"sleepsort","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Pyt","url_name":"pyt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"py","url_name":"py","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"slime","url_name":"slime","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"#memo","url_name":"%23memo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"多次元配列","url_name":"%e5%a4%9a%e6%ac%a1%e5%85%83%e9%85%8d%e5%88%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"sort","url_name":"sort","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Gentoo","url_name":"gentoo","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0872b0e45df67f1657b2f3aabaa764510ba9cadd/medium.jpg?1364838591","follower_count":50,"item_count":27},{"name":"erb","url_name":"erb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"server","url_name":"server","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b83af662fd1bf2ad345cbd3c3804bef044ad5924/medium.jpg?1387908583","follower_count":91,"item_count":39},{"name":"gitorious","url_name":"gitorious","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Nagios","url_name":"nagios","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/85631030182f43697a0d94d5b4abc89eefd22370/medium.jpg?1364838605","follower_count":49,"item_count":12},{"name":"Munin","url_name":"munin","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/65e57921b3667af3da05850bfa7ba5b55d85d674/medium.jpg?1364838625","follower_count":52,"item_count":13},{"name":"Sinatra","url_name":"sinatra","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3e3362a63c84eba9121ff7732295465f38a53b17/medium.jpg?1364838642","follower_count":153,"item_count":121},{"name":"TaskQueue","url_name":"taskqueue","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GitHub","url_name":"github","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2ce18a2d53ec3a4ddc1e78c33d6eef66f10e5b44/medium.jpg?1364838682","follower_count":4121,"item_count":505},{"name":"Debian","url_name":"debian","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/68774fcf78d744d8e87a0d0700fdb6c256c6fbd2/medium.jpg?1364838709","follower_count":103,"item_count":141},{"name":"CodeIgniter","url_name":"codeigniter","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a8e0c097582535135e6c4e3238c84c6d63be178e/medium.jpg?1387909736","follower_count":66,"item_count":31},{"name":"Wicket","url_name":"wicket","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8755073dbd9abf23e82c8e9ee82665bd00e80cc6/medium.jpg?1385523167","follower_count":17,"item_count":13},{"name":"firefox","url_name":"firefox","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/de0e69cb28deb5ecf7550ab943792c8c65d4707a/medium.jpg?1364838739","follower_count":130,"item_count":71},{"name":"SVG","url_name":"svg","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0734013e9fe1694da1ec7b992cad7d3fdc9fe90d/medium.jpg?1364838756","follower_count":43,"item_count":30},{"name":"fluxflex","url_name":"fluxflex","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6d28b9874158b1c37dd606214e7a508a31e5c73f/medium.jpg?1364838773","follower_count":30,"item_count":3},{"name":"F#","url_name":"fsharp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ba95a660afc4ec92093e69afbd0b70d04e51245b/medium.jpg?1395581508","follower_count":65,"item_count":57},{"name":"god","url_name":"god","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"TDD","url_name":"tdd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/647a9c938b5e89bfa5db3a2316720fa95aeb4f7d/medium.jpg?1398501369","follower_count":1286,"item_count":73},{"name":"#emacs","url_name":"%23emacs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dotcloud","url_name":"dotcloud","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"paper.js","url_name":"paper.js","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":3},{"name":"Arduino","url_name":"arduino","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7a41e9783988dbf72e20cd9a218b18c41565c3d3/medium.jpg?1364838851","follower_count":147,"item_count":53},{"name":"Rspec","url_name":"rspec","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/aba2fc611bc7fe28b0c70347e68541ef7e186ac5/medium.jpg?1407701144","follower_count":239,"item_count":267},{"name":"test","url_name":"test","icon_url":"/icons/medium/missing.png","follower_count":38,"item_count":4},{"name":"CentOS","url_name":"centos","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e485110cf46d5a3b1f0415896d185937df844468/medium.jpg?1387917171","follower_count":2138,"item_count":706},{"name":"Xen","url_name":"xen","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/093ef3233efe2ab009d68de26844de0a30e47ce4/medium.jpg?1387911793","follower_count":28,"item_count":9},{"name":"Virtualization","url_name":"virtualization","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":11},{"name":"Network","url_name":"network","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a5e0875a469e294222927b17968614ed0ecc3398/medium.jpg?1387909105","follower_count":77,"item_count":36},{"name":"Broadcom","url_name":"broadcom","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"TeX","url_name":"tex","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e1042cab87fe1d81d0e50963049ee2f16be01856/medium.jpg?1364838900","follower_count":128,"item_count":95},{"name":"Accord","url_name":"accord","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"Qt","url_name":"qt","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c69e755273406d5db0b0649d5995f539249dd647/medium.jpg?1375702294","follower_count":110,"item_count":42},{"name":"Fortran","url_name":"fortran","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d99df468815bcc98c5c5f4a155ca7fa6b44a3c74/medium.jpg?1407784324","follower_count":17,"item_count":26},{"name":"#Scala","url_name":"%23scala","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"#Android","url_name":"%23android","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"R","url_name":"r","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e631fe7eebf57846928b12ec343dd10e09abcadb/medium.jpg?1364838922","follower_count":289,"item_count":407},{"name":"Grass","url_name":"grass","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Verilog","url_name":"verilog","icon_url":"/icons/medium/missing.png","follower_count":20,"item_count":25},{"name":"ImageMagick","url_name":"imagemagick","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/510216acdf3055b255261b2d6f55a11074858394/medium.jpg?1387909468","follower_count":69,"item_count":66},{"name":"CommonLisp","url_name":"commonlisp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7ec4b6d2f823c969579b87db605ceb000e516b63/medium.jpg?1364838934","follower_count":48,"item_count":27},{"name":"capistrano","url_name":"capistrano","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b8d0649eb54a788060014a9366cf9e65bc6b5f0d/medium.jpg?1387908973","follower_count":125,"item_count":158},{"name":"Backbone.js","url_name":"backbone.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/66d30635cf5bd4e20a280aee5eaa2a72561677bf/medium.jpg?1364838950","follower_count":1311,"item_count":161},{"name":"Sass","url_name":"sass","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/203ad8b11c98a9ac458b4277f4ca13e0c891a2d2/medium.jpg?1364838969","follower_count":246,"item_count":131},{"name":"WebDriver","url_name":"webdriver","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":17},{"name":"Selenium","url_name":"selenium","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/92e1ece1d42fcd42e69dfcd3fa980d0d6f7bd7f1/medium.jpg?1403564935","follower_count":146,"item_count":95},{"name":"jQuery","url_name":"jquery","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5e0666fc1c00a772dc8cfe381fc2bd42c6f8e9c6/medium.jpg?1387912458","follower_count":4651,"item_count":727},{"name":"Mobile","url_name":"mobile","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"XML","url_name":"xml","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3e2219fe9000199e23e0b5135a4121d356b5a8ee/medium.jpg?1364838999","follower_count":56,"item_count":36},{"name":"less","url_name":"less","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ad7472fcdd56ca105e264e198dea729acf66c858/medium.jpg?1364839010","follower_count":81,"item_count":37},{"name":"xmonad","url_name":"xmonad","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7a43ccb5da442b93795c4b610434f48eee06970b/medium.jpg?1364839029","follower_count":13,"item_count":10},{"name":"print","url_name":"print","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"doctrine","url_name":"doctrine","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"wozozo","url_name":"wozozo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lighttpd","url_name":"lighttpd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/03ebaa57cb151c2d97be01655c14de92f65decc7/medium.jpg?1388378459","follower_count":12,"item_count":2},{"name":"Varnish","url_name":"varnish","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bf1c73f2fdc148b59b18ed1c1fa49cda955942b4/medium.jpg?1364839042","follower_count":26,"item_count":7},{"name":"Hubot","url_name":"hubot","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e37c1cd8bbb2fcec6c3ad5f9864239834bc9de6f/medium.jpg?1403144090","follower_count":84,"item_count":80},{"name":"MongoDB","url_name":"mongodb","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/666f5dc4780b97e9410ae3effeeb13fd64e17291/medium.jpg?1364839063","follower_count":1551,"item_count":250},{"name":"matlab","url_name":"matlab","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f97a2b21b00c0872635af0eb6fce9c1872915b31/medium.jpg?1405391592","follower_count":37,"item_count":34},{"name":"js","url_name":"js","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":51},{"name":"test\\","url_name":"test%5c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"\\\\\\TEST","url_name":"%5c%5c%5ctest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"¥¥¥test¥¥","url_name":"%c2%a5%c2%a5%c2%a5test%c2%a5%c2%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"\\\\\\\\\\\\","url_name":"%5c%5c%5c%5c%5c%5c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"¥¥¥¥¥¥¥¥¥¥¥¥","url_name":"%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5%c2%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"users-aileron","url_name":"users-aileron","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"..-Logout","url_name":"..-logout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"..-.-logout","url_name":"..-.-logout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"\\logout","url_name":"%5clogout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"..-..-","url_name":"..-..-","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"scss","url_name":"scss","icon_url":"/icons/medium/missing.png","follower_count":83,"item_count":49},{"name":"Smarty","url_name":"smarty","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1316b478669006ad7090b2323361f9c5d180f717/medium.jpg?1387911709","follower_count":35,"item_count":31},{"name":"Phake","url_name":"phake","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"pry","url_name":"pry","icon_url":"/icons/medium/missing.png","follower_count":19,"item_count":28},{"name":"neta","url_name":"neta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"HP","url_name":"hp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"Automake","url_name":"automake","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Markdown","url_name":"markdown","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/65b71f29828bc7fba3b5eb8ecbc6d9186e7a61fa/medium.jpg?1387904461","follower_count":207,"item_count":160},{"name":"Heroku","url_name":"heroku","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d77183eaf26189a59c14a189a23a004bb9bdecf4/medium.jpg?1364839078","follower_count":1123,"item_count":362},{"name":"VMM","url_name":"vmm","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"Pallet","url_name":"pallet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Tcl","url_name":"tcl","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":12},{"name":"IRC","url_name":"irc","icon_url":"/icons/medium/missing.png","follower_count":36,"item_count":17},{"name":"HSP","url_name":"hsp","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"flux","url_name":"flux","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Lua","url_name":"lua","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bbab58e82e9f7e80e4b00d3751d765b35b7b60f4/medium.jpg?1368500596","follower_count":108,"item_count":63},{"name":"Microsoft","url_name":"microsoft","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"Prolog","url_name":"prolog","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":18},{"name":"memory","url_name":"memory","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"malloc","url_name":"malloc","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":4},{"name":"Stylish","url_name":"stylish","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Padrino","url_name":"padrino","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d959d5a9d6bcb7775917fb8a6fc0876606418021/medium.jpg?1379990995","follower_count":48,"item_count":45},{"name":"humanstxt","url_name":"humanstxt","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":1},{"name":"Apache","url_name":"apache","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/585696fe7c2ce8b9ad10473f8825c42d21e63776/medium.jpg?1364839091","follower_count":2307,"item_count":335},{"name":"FileAPI","url_name":"fileapi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AWS","url_name":"aws","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a211885e3e124918c76cbe93264f8dcc750aa693/medium.jpg?1395745862","follower_count":565,"item_count":740},{"name":"Ubuntu","url_name":"ubuntu","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/16292ce7a37e2133dc34acef293af06f998c8da8/medium.jpg?1387917339","follower_count":1660,"item_count":690},{"name":"OSX","url_name":"osx","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2b7511b6a09068fde35692327f32f2551037cf90/medium.jpg?1387908812","follower_count":95,"item_count":290},{"name":"hadoop","url_name":"hadoop","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ef39105194a4c3253540f491d5e2186650033493/medium.jpg?1364839136","follower_count":149,"item_count":90},{"name":"africa","url_name":"africa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"戦略ゲーム","url_name":"%e6%88%a6%e7%95%a5%e3%82%b2%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アフリカのポータルサイト","url_name":"%e3%82%a2%e3%83%95%e3%83%aa%e3%82%ab%e3%81%ae%e3%83%9d%e3%83%bc%e3%82%bf%e3%83%ab%e3%82%b5%e3%82%a4%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"krematop","url_name":"krematop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Eclipse","url_name":"eclipse","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ccf32cbcb30733164a0ea2331e24dacf1c2a3cf1/medium.jpg?1398264070","follower_count":1073,"item_count":272},{"name":"iPad","url_name":"ipad","icon_url":"/icons/medium/missing.png","follower_count":60,"item_count":22},{"name":"testtest","url_name":"testtest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"C#","url_name":"csharp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/56621c239d6d51d9b6ceda3850a0d97e23c92319/medium.jpg?1364839171","follower_count":2076,"item_count":703},{"name":"Flask","url_name":"flask","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e6f12bfb293a1c1fef050a7ca845f17dd9c6186d/medium.jpg?1364839185","follower_count":41,"item_count":33},{"name":"XOOPS","url_name":"xoops","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/706c6f77b51a4fe521a59218814081e797570a1d/medium.jpg?1364839201","follower_count":22,"item_count":84},{"name":"google","url_name":"google","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/710195a690ce4d59450ccaee1699ac87967fdba5/medium.jpg?1379991260","follower_count":53,"item_count":89},{"name":"maps","url_name":"maps","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"AdventCalendar","url_name":"adventcalendar","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7b499aba822c4e819de19921890149955473f9f3/medium.jpg?1364839220","follower_count":94,"item_count":259},{"name":"なでしこ","url_name":"%e3%81%aa%e3%81%a7%e3%81%97%e3%81%93","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Delphi","url_name":"delphi","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a947e5db8d31ec961f5c0e29a68436b6d540930a/medium.jpg?1364839233","follower_count":26,"item_count":11},{"name":"ActiveRecord","url_name":"activerecord","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":65},{"name":"Redmine","url_name":"redmine","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c796d623f94ffd06ede8069754bab114ed5824ed/medium.jpg?1373512407","follower_count":261,"item_count":149},{"name":"Growl","url_name":"growl","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":15},{"name":"WebAPI","url_name":"webapi","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":12},{"name":"Titanium","url_name":"titanium","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2b45ec03c0a3db5c4241dc2c85e38f93507394a3/medium.jpg?1364839247","follower_count":259,"item_count":176},{"name":"#bash","url_name":"%23bash","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"#cron","url_name":"%23cron","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"#Growl","url_name":"%23growl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"#MacOSX","url_name":"%23macosx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"geektool","url_name":"geektool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"MacOSX","url_name":"macosx","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/01293a35b1a590d2ee890365ddba80da5e4d8fe1/medium.jpg?1388346292","follower_count":2669,"item_count":591},{"name":"prime","url_name":"prime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"puriketu","url_name":"puriketu","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"GAE","url_name":"gae","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bc7da538b63f978cfc76b5da1cc88d6916049357/medium.jpg?1396790561","follower_count":99,"item_count":77},{"name":"PhoneGap","url_name":"phonegap","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/875696dbc831651134df50d070b45c5973577db4/medium.jpg?1387909837","follower_count":74,"item_count":54},{"name":"Twitter","url_name":"twitter","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/cea0a8711a7da568fa9cc3f2cc8d06dff1942808/medium.jpg?1387915412","follower_count":1952,"item_count":210},{"name":"game","url_name":"game","icon_url":"/icons/medium/missing.png","follower_count":37,"item_count":23},{"name":"[env][install]","url_name":"%5benv%5d%5binstall%5d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SQL","url_name":"sql","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/939d0662a5fbb390bd25b777a8d243d25624b4f2/medium.jpg?1387907908","follower_count":188,"item_count":129},{"name":"Gems","url_name":"gems","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":11},{"name":"nicEdit","url_name":"nicedit","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/82b28d8c799fc6215e364c2a7d64dadd59fab040/medium.jpg?1364839327","follower_count":0,"item_count":1},{"name":"SSH","url_name":"ssh","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b5cadc3eff868b31ec9023e1643a94c66870e60a/medium.jpg?1387904189","follower_count":1880,"item_count":251},{"name":"Subversion","url_name":"subversion","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a4cf757a6c521ce592ac94008f05e74fe80bb43a/medium.jpg?1387909345","follower_count":76,"item_count":80},{"name":"svn","url_name":"svn","icon_url":"/icons/medium/missing.png","follower_count":28,"item_count":69},{"name":"command","url_name":"command","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":66},{"name":"algorhythm","url_name":"algorhythm","icon_url":"/icons/medium/missing.png","follower_count":48,"item_count":4},{"name":"topcoder","url_name":"topcoder","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":11},{"name":"WindowsPhone","url_name":"windowsphone","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7682503cc182dc5a2c1107f46d12654652d39e19/medium.jpg?1364839345","follower_count":40,"item_count":5},{"name":"Silverlight","url_name":"silverlight","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":7},{"name":"PHPUnit","url_name":"phpunit","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/15c3ef9135baba12119f0c3426fcd0bf8ec8742d/medium.jpg?1364839365","follower_count":88,"item_count":72},{"name":"LimeJS","url_name":"limejs","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"ClojureScript","url_name":"clojurescript","icon_url":"/icons/medium/missing.png","follower_count":27,"item_count":26},{"name":"Xcode","url_name":"xcode","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c2fe3930fd953acbf56980b133119c7b78d7b922/medium.jpg?1388346193","follower_count":2773,"item_count":877},{"name":"screen","url_name":"screen","icon_url":"/icons/medium/missing.png","follower_count":90,"item_count":35},{"name":"FreeBSD","url_name":"freebsd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/21f935c702b6ca8f0f4d8ef06487abb39f50117f/medium.jpg?1364839409","follower_count":86,"item_count":39},{"name":"semanticweb","url_name":"semanticweb","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":1},{"name":"rdf","url_name":"rdf","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":6},{"name":"linkeddata","url_name":"linkeddata","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"jQueryMobile","url_name":"jquerymobile","icon_url":"/icons/medium/missing.png","follower_count":163,"item_count":27},{"name":"She","url_name":"she","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Design","url_name":"design","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":16},{"name":"GUI","url_name":"gui","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"PayPal","url_name":"paypal","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":2},{"name":"Amazon","url_name":"amazon","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2c3a8e82d76b5c79cb83ac214870dd27bcba6063/medium.jpg?1387916332","follower_count":47,"item_count":18},{"name":"Instagram","url_name":"instagram","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":2},{"name":"Flickr","url_name":"flickr","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":1},{"name":"Groovy","url_name":"groovy","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4e19a0be49d1f319a6504116d90570f878262afd/medium.jpg?1364839430","follower_count":127,"item_count":192},{"name":"SQLServer","url_name":"sqlserver","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/062fe2acd1b89c43b12bfb6300b68827963d846f/medium.jpg?1374221710","follower_count":60,"item_count":41},{"name":"TFS","url_name":"tfs","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":4},{"name":"Mercurial","url_name":"mercurial","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8ae82305a0bef7f499b344d86d145f10d25b41d0/medium.jpg?1376656707","follower_count":65,"item_count":53},{"name":"アルゴリズム","url_name":"%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a8b610e5601d4adba9dc33dd95be3be00ce1800d/medium.jpg?1387910607","follower_count":75,"item_count":92},{"name":"pyramid","url_name":"pyramid","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":14},{"name":"iOS","url_name":"ios","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5320e666d5defa2f6b4b953138949a837bf41975/medium.jpg?1392229873","follower_count":3480,"item_count":2371},{"name":"Kotlin","url_name":"kotlin","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":11},{"name":"Dart","url_name":"dart","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7232f4f5f6171a9f5e7d862311ce05621b823aac/medium.jpg?1402586480","follower_count":115,"item_count":68},{"name":"fsharp","url_name":"fsharp","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":28},{"name":"rails3_acts_as_paranoid","url_name":"rails3_acts_as_paranoid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gitolite","url_name":"gitolite","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":8},{"name":"atnd","url_name":"atnd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Socket.io","url_name":"socket.io","icon_url":"/icons/medium/missing.png","follower_count":65,"item_count":31},{"name":"processing","url_name":"processing","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b336133761d81ae7a47b0fa2979a80e6db182434/medium.jpg?1372561086","follower_count":113,"item_count":60},{"name":"WCF","url_name":"wcf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Azure","url_name":"azure","icon_url":"/icons/medium/missing.png","follower_count":38,"item_count":45},{"name":"Express","url_name":"express","icon_url":"/icons/medium/missing.png","follower_count":58,"item_count":98},{"name":".NET","url_name":".net","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f55a41926b6aa117b85793c4df483735fa22c8c3/medium.jpg?1387908879","follower_count":107,"item_count":82},{"name":"fluentd","url_name":"fluentd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/32fa6f8041577796647f1d1e4ebbdd32be4f94da/medium.jpg?1364839472","follower_count":198,"item_count":164},{"name":"JavaS","url_name":"javas","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"curl","url_name":"curl","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":43},{"name":"cron","url_name":"cron","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":44},{"name":"cake","url_name":"cake","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"PhpStorm","url_name":"phpstorm","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/caa8e62ff8cac140ccc93e8a2bade616f7d201ea/medium.jpg?1364839492","follower_count":93,"item_count":67},{"name":"algorithm","url_name":"algorithm","icon_url":"/icons/medium/missing.png","follower_count":49,"item_count":24},{"name":"tar","url_name":"tar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"正規表現","url_name":"%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4c8d5332676756008a849b28aeccb18dc96ab92c/medium.jpg?1387904089","follower_count":2613,"item_count":75},{"name":"mongoose","url_name":"mongoose","icon_url":"/icons/medium/missing.png","follower_count":16,"item_count":19},{"name":"iTerm2","url_name":"iterm2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dcc19cfc6f6ab0d131e49c1a0e99c7a6e3faed65/medium.jpg?1364839512","follower_count":71,"item_count":40},{"name":"Terminal","url_name":"terminal","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0da1f7d0495646929cb2886f2c31e3fa2c122cdc/medium.jpg?1364839541","follower_count":166,"item_count":138},{"name":"HTMLParser","url_name":"htmlparser","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"OMake","url_name":"omake","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/85ca042439266c49f63bc390e3c6db769c3f3521/medium.jpg?1371018416","follower_count":7,"item_count":6},{"name":"Excel","url_name":"excel","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/282bdb29e7f368ab636d9a713357d45318f0338f/medium.jpg?1387916408","follower_count":130,"item_count":127},{"name":"kmyacc","url_name":"kmyacc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sugar.js","url_name":"sugar.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Gauche","url_name":"gauche","icon_url":"/icons/medium/missing.png","follower_count":31,"item_count":26},{"name":"Anywhere","url_name":"anywhere","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"phpMyadmin","url_name":"phpmyadmin","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":12},{"name":"homebrew","url_name":"homebrew","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bb1d8395199c677f1e2f2098b02f8b068ee959cd/medium.jpg?1398176885","follower_count":151,"item_count":322},{"name":"EC2","url_name":"ec2","icon_url":"/icons/medium/missing.png","follower_count":57,"item_count":172},{"name":"RailwayJS","url_name":"railwayjs","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":0},{"name":"png","url_name":"png","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"base64","url_name":"base64","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"Flex","url_name":"flex","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c5c32dd67daf6077dcf17ff095fcf64d195f46b7/medium.jpg?1402629281","follower_count":33,"item_count":44},{"name":"byobu","url_name":"byobu","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":5},{"name":"tmux","url_name":"tmux","icon_url":"/icons/medium/missing.png","follower_count":230,"item_count":163},{"name":"migration","url_name":"migration","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"S3","url_name":"s3","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":99},{"name":"FlashDevelopMacro","url_name":"flashdevelopmacro","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":1},{"name":"3DCG","url_name":"3dcg","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":13},{"name":"オブジェクト指向","url_name":"%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91","icon_url":"/icons/medium/missing.png","follower_count":123,"item_count":53},{"name":"Unity3D","url_name":"unity3d","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a34e297cc90c3e48983914ae54e02c5295b09c2c/medium.jpg?1364839573","follower_count":334,"item_count":239},{"name":"mikutter","url_name":"mikutter","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":1},{"name":"Paas","url_name":"paas","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":12},{"name":"snippets","url_name":"snippets","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":15},{"name":"*よく使う","url_name":"%2a%e3%82%88%e3%81%8f%e4%bd%bf%e3%81%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SCons","url_name":"scons","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Build","url_name":"build","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":14},{"name":"deploy","url_name":"deploy","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":22},{"name":"mecab","url_name":"mecab","icon_url":"/icons/medium/missing.png","follower_count":41,"item_count":42},{"name":"shirason","url_name":"shirason","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"bitbucket","url_name":"bitbucket","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5b6563f26661d4a4de3325c19d918f0fd20a72df/medium.jpg?1394532557","follower_count":46,"item_count":41},{"name":"AutoHotkey","url_name":"autohotkey","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/744029762fe9e9f44be0aea4ffb1f79ff653318a/medium.jpg?1364839595","follower_count":32,"item_count":36},{"name":"Storyboard","url_name":"storyboard","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":33},{"name":"WebDev","url_name":"webdev","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6c00fa4a633763d1860447b11aa11ecf18e3c9d1/medium.jpg?1364839610","follower_count":5,"item_count":1},{"name":"Dropbox","url_name":"dropbox","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/33479cdfbe1366dee295b91d7b3d74ea58e9408d/medium.jpg?1364839714","follower_count":106,"item_count":32},{"name":"d_lang","url_name":"d_lang","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0bd0a1dcae35b4d582355dcbc6a8928a77c52d0f/medium.jpg?1364839734","follower_count":6,"item_count":4},{"name":"ASP.NET","url_name":"asp.net","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3026b3d82afe01d970e2c76bc0c5b7b935921698/medium.jpg?1364839759","follower_count":50,"item_count":47},{"name":"プログラミング","url_name":"%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":32},{"name":"PCL","url_name":"pcl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Beginner","url_name":"beginner","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":33},{"name":"Capybara","url_name":"capybara","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b029a6363be2e1531fb2f58ac8ed30b98b2d8341/medium.jpg?1405648601","follower_count":35,"item_count":76},{"name":"And","url_name":"and","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WMI","url_name":"wmi","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"PostgreSQL","url_name":"postgresql","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/851256141e0ae6188e423c46805c52b0e0583db5/medium.jpg?1373008367","follower_count":156,"item_count":165},{"name":"devise","url_name":"devise","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9a4a365b697b80f207d093fff0736c38223cac36/medium.jpg?1378373513","follower_count":17,"item_count":78},{"name":"Book","url_name":"book","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/88cfc14b1cc1b0e8f4614b5662da0fbe20537f26/medium.jpg?1364839788","follower_count":10,"item_count":2},{"name":"Cucumber","url_name":"cucumber","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e57cf85d4ed4207ebf45554cebc006186ba02a2b/medium.jpg?1405648468","follower_count":25,"item_count":44},{"name":"IE","url_name":"ie","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/327765a5133fa739ba57af46fff4788af69633ee/medium.jpg?1388309830","follower_count":9,"item_count":64},{"name":"keepalived","url_name":"keepalived","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":4},{"name":"LVS","url_name":"lvs","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"IPVS","url_name":"ipvs","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":2},{"name":"CoreData","url_name":"coredata","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4c0aaaa1a86982c786182974d2e06e21dedaea4d/medium.jpg?1392230466","follower_count":22,"item_count":50},{"name":"InterfaceBuilder","url_name":"interfacebuilder","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"要望","url_name":"%e8%a6%81%e6%9c%9b","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":20},{"name":"EntityFramework","url_name":"entityframework","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":10},{"name":"Rhodes","url_name":"rhodes","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"FuelPHP","url_name":"fuelphp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0c786c5346d6599097cda94b46cd7a73d9ac86cf/medium.jpg?1364839801","follower_count":170,"item_count":162},{"name":"スクレイピング","url_name":"%e3%82%b9%e3%82%af%e3%83%ac%e3%82%a4%e3%83%94%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":25,"item_count":14},{"name":"TOKYOPen","url_name":"tokyopen","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"UNIX","url_name":"unix","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/394b2efa096f12b9fddb107e85c40e629574bb32/medium.jpg?1364839827","follower_count":120,"item_count":130},{"name":"Lift","url_name":"lift","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":9},{"name":"JSFL","url_name":"jsfl","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":12},{"name":"AIR","url_name":"air","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/97000945e7e1dc16bf570660bd254b51b1387d7b/medium.jpg?1387911563","follower_count":46,"item_count":42},{"name":"Prototype.js","url_name":"prototype.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Sprite3D","url_name":"sprite3d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GCC","url_name":"gcc","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3dac9e08b7c30364812090bf132bcf3c3bb227bd/medium.jpg?1388310233","follower_count":3,"item_count":32},{"name":"AppleScript","url_name":"applescript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/34667a9ea301a773e4161ac0118c6b44842d9cb1/medium.jpg?1364839845","follower_count":51,"item_count":60},{"name":"Jekyll","url_name":"jekyll","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/843115e365b5653c631ca5b83f1e15d3b1a02474/medium.jpg?1376665619","follower_count":33,"item_count":41},{"name":"MovableType","url_name":"movabletype","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c511e28c859b9ddc687404e290d74c36403e03ce/medium.jpg?1405392111","follower_count":23,"item_count":19},{"name":"gist","url_name":"gist","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e62038745f44cf780b0170f29ec6ed35f086a640/medium.jpg?1392179706","follower_count":7,"item_count":23},{"name":"文学","url_name":"%e6%96%87%e5%ad%a6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Memcached","url_name":"memcached","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f7c1591fef5ea78050739d8eb241d3944403fcdb/medium.jpg?1385872884","follower_count":50,"item_count":31},{"name":"Safari","url_name":"safari","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ac6b73d91745d6385d9148fd0160bdb416540b9d/medium.jpg?1364839866","follower_count":7,"item_count":40},{"name":"Play","url_name":"play","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fa2b451af29d0da4710110f38c881d3c30a63caf/medium.jpg?1364839880","follower_count":144,"item_count":83},{"name":"電子工作","url_name":"%e9%9b%bb%e5%ad%90%e5%b7%a5%e4%bd%9c","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/93605a76c3b729bdfe05285b7f4374dd973c1f58/medium.jpg?1403762683","follower_count":15,"item_count":10},{"name":"COM","url_name":"com","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":0},{"name":"OpenMP","url_name":"openmp","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":2},{"name":"ant","url_name":"ant","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":26},{"name":"oracle","url_name":"oracle","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/044ca6a3ea6418288cfd76c3e0ffa2c840889f1a/medium.jpg?1387910212","follower_count":69,"item_count":91},{"name":"PDF","url_name":"pdf","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":31},{"name":"その他","url_name":"%e3%81%9d%e3%81%ae%e4%bb%96","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Closure","url_name":"closure","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7251dce3d2fbfaf40476b1e61665e554e5979d86/medium.jpg?1364839898","follower_count":7,"item_count":13},{"name":"Solaris","url_name":"solaris","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":12},{"name":"VBScript","url_name":"vbscript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/db75da942d68123dfbd62b76685b2387b1393028/medium.jpg?1364839913","follower_count":20,"item_count":31},{"name":"WebGL","url_name":"webgl","icon_url":"/icons/medium/missing.png","follower_count":51,"item_count":33},{"name":"GLSL","url_name":"glsl","icon_url":"/icons/medium/missing.png","follower_count":25,"item_count":29},{"name":"openFrameworks","url_name":"openframeworks","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9fe9ede1dd3807958ec676d176f41d7bda6fa7df/medium.jpg?1378791191","follower_count":102,"item_count":50},{"name":"Cinder","url_name":"cinder","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":6},{"name":"macro","url_name":"macro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"CMake","url_name":"cmake","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fe8a3beb8cf800a572c2fbc31f97d8c2b778d16b/medium.jpg?1388310426","follower_count":16,"item_count":11},{"name":"WPF","url_name":"wpf","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3bde31f948ad518298503255d99d6313bedc713b/medium.jpg?1364839938","follower_count":62,"item_count":42},{"name":"pika_regular_expression","url_name":"pika_regular_expression","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"hackathon","url_name":"hackathon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"mixpanel","url_name":"mixpanel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"OpenSSH","url_name":"openssh","icon_url":"/icons/medium/missing.png","follower_count":39,"item_count":15},{"name":"GoogleCalendar","url_name":"googlecalendar","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"api","url_name":"api","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2196b2d18f91fc9f3fc7d8d852e8c8ebce66364b/medium.jpg?1409140301","follower_count":29,"item_count":86},{"name":"adempiere","url_name":"adempiere","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"bootstrap","url_name":"bootstrap","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0e0b55ade297aa713250efd5ca9c344bb9d29014/medium.jpg?1364839952","follower_count":235,"item_count":141},{"name":"jsonp","url_name":"jsonp","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":6},{"name":"golang","url_name":"golang","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/abdc121605e09b282c2cd003add30b599d7d07b8/medium.jpg?1368272516","follower_count":169,"item_count":116},{"name":"リファクタリング","url_name":"%e3%83%aa%e3%83%95%e3%82%a1%e3%82%af%e3%82%bf%e3%83%aa%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"serialport","url_name":"serialport","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"シリアルポート","url_name":"%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%ab%e3%83%9d%e3%83%bc%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tty","url_name":"tty","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"ハードウェア","url_name":"%e3%83%8f%e3%83%bc%e3%83%89%e3%82%a6%e3%82%a7%e3%82%a2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"unicorn","url_name":"unicorn","icon_url":"/icons/medium/missing.png","follower_count":27,"item_count":36},{"name":"Haxe","url_name":"haxe","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b1b6288935584ba3ae9856965b1d8ee188de7bd7/medium.jpg?1364839974","follower_count":113,"item_count":97},{"name":"Compass","url_name":"compass","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c0514b015bd93c4fca91897c05ca18b57d99b58a/medium.jpg?1369968932","follower_count":74,"item_count":81},{"name":"jqMobi","url_name":"jqmobi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"開発環境","url_name":"%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/de79e2c015785afac404a6b455af2447e7078813/medium.jpg?1387908688","follower_count":88,"item_count":55},{"name":"Rabbit","url_name":"rabbit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"bundle","url_name":"bundle","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"font","url_name":"font","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":28},{"name":"FileMaker","url_name":"filemaker","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2745b12076d27906c60b9bc08523dcf61ffdb408/medium.jpg?1364839995","follower_count":8,"item_count":0},{"name":"RDS","url_name":"rds","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":24},{"name":"画像処理","url_name":"%e7%94%bb%e5%83%8f%e5%87%a6%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":23},{"name":"DotNetOpenAuth","url_name":"dotnetopenauth","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"Spork","url_name":"spork","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":14},{"name":"Guard","url_name":"guard","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":33},{"name":"haml","url_name":"haml","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":44},{"name":"PDO","url_name":"pdo","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":30},{"name":"Octopress","url_name":"octopress","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/71e7085d1aad8b493bd5eb14ab18ec709aac4463/medium.jpg?1364840019","follower_count":43,"item_count":51},{"name":"未解決","url_name":"%e6%9c%aa%e8%a7%a3%e6%b1%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"IE6","url_name":"ie6","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"bat","url_name":"bat","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":28},{"name":"GoogleAnalytics","url_name":"googleanalytics","icon_url":"/icons/medium/missing.png","follower_count":41,"item_count":71},{"name":"Vimperator","url_name":"vimperator","icon_url":"/icons/medium/missing.png","follower_count":22,"item_count":15},{"name":"localhost","url_name":"localhost","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"はてなブックマーク","url_name":"%e3%81%af%e3%81%a6%e3%81%aa%e3%83%96%e3%83%83%e3%82%af%e3%83%9e%e3%83%bc%e3%82%af","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3b5bae458e1a10bd59bcb270d82cdf4dbcac81bf/medium.jpg?1364840045","follower_count":0,"item_count":2},{"name":"Disqus","url_name":"disqus","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5d73afa3584a9d4258769f59ace52209c68f5275/medium.jpg?1364840074","follower_count":0,"item_count":1},{"name":"objc","url_name":"objc","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"念","url_name":"%e5%bf%b5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"DB","url_name":"db","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":15},{"name":"Kobito","url_name":"kobito","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9e073361428f783d8d4361f2a79d6b56ec90a99e/medium.jpg?1371449776","follower_count":84,"item_count":80},{"name":"foo","url_name":"foo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"bar","url_name":"bar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"利用規約","url_name":"%e5%88%a9%e7%94%a8%e8%a6%8f%e7%b4%84","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"help","url_name":"help","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":-1},{"name":"GoogleAppsScript","url_name":"googleappsscript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c443caa2cea662414d22986c07f4bdf810a85fbf/medium.jpg?1393318723","follower_count":126,"item_count":128},{"name":"kobitoapp.com","url_name":"kobitoapp.com","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SQLite3","url_name":"sqlite3","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":38},{"name":"mail","url_name":"mail","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":15},{"name":"デザイン","url_name":"%e3%83%86%e3%82%99%e3%82%b5%e3%82%99%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"sandbox","url_name":"sandbox","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"keychain","url_name":"keychain","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"OpenDocument","url_name":"opendocument","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"poe","url_name":"poe","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"環境","url_name":"%e7%92%b0%e5%a2%83","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"rust","url_name":"rust","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/72db9fc64b6b3f15f86dcbea410d95cbf077fac8/medium.jpg?1404727714","follower_count":26,"item_count":12},{"name":"gcj","url_name":"gcj","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"libxml","url_name":"libxml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"yesod","url_name":"yesod","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":17},{"name":"uicolor","url_name":"uicolor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"rgb","url_name":"rgb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cloudfoundry","url_name":"cloudfoundry","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b7f2f6a222dcadbf65a037d566941deb0bd27652/medium.jpg?1364840171","follower_count":11,"item_count":10},{"name":"かつひろ","url_name":"%e3%81%8b%e3%81%a4%e3%81%b2%e3%82%8d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tora","url_name":"tora","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"sws","url_name":"sws","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ses","url_name":"ses","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"HBase","url_name":"hbase","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":16},{"name":"arguments","url_name":"arguments","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"args","url_name":"args","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"array","url_name":"array","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"callback","url_name":"callback","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"gyro","url_name":"gyro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"create","url_name":"create","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"user","url_name":"user","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Rakefile","url_name":"rakefile","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":9},{"name":"decobisu会参加者","url_name":"decobisu%e4%bc%9a%e5%8f%82%e5%8a%a0%e8%80%85","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"objectiv-c","url_name":"objectiv-c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UITextField","url_name":"uitextfield","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"UITextView","url_name":"uitextview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":17},{"name":"jquery.ui","url_name":"jquery.ui","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bc527e9a57abf9efdfbc88400451baa34124fe46/medium.jpg?1364840201","follower_count":1,"item_count":19},{"name":"objectivec","url_name":"objectivec","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":9},{"name":"tips","url_name":"tips","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c78878d917bf422f983577a1366bcc6870848db8/medium.jpg?1387904862","follower_count":5,"item_count":94},{"name":"HTTP","url_name":"http","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":53},{"name":"ruote","url_name":"ruote","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"first","url_name":"first","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"pow","url_name":"pow","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":14},{"name":"rack","url_name":"rack","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c30fb4665f562c42cc76eb8b4dd395fc106c7f6f/medium.jpg?1377009717","follower_count":8,"item_count":28},{"name":"lokka","url_name":"lokka","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"Gem","url_name":"gem","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":177},{"name":"promise","url_name":"promise","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"rvm","url_name":"rvm","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9ece8f7635dd15644c970d50a2e4588077117085/medium.jpg?1388378305","follower_count":22,"item_count":57},{"name":"TwitterBootstrap","url_name":"twitterbootstrap","icon_url":"/icons/medium/missing.png","follower_count":72,"item_count":25},{"name":"reading","url_name":"reading","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WebWorkers","url_name":"webworkers","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"MODx","url_name":"modx","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"App","url_name":"app","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"さくらのVPS","url_name":"%e3%81%95%e3%81%8f%e3%82%89%e3%81%aevps","icon_url":"/icons/medium/missing.png","follower_count":55,"item_count":16},{"name":"archLinux","url_name":"archlinux","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8481019c15e9a8b673685c51e6a1c6bbc4089e03/medium.jpg?1388309313","follower_count":69,"item_count":49},{"name":"cocos2d","url_name":"cocos2d","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2fc58c7724a9feeb6f3814974a1c3283b1bce01e/medium.jpg?1364840222","follower_count":84,"item_count":27},{"name":"ablogcms","url_name":"ablogcms","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"increments","url_name":"increments","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"kobitoapp","url_name":"kobitoapp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CUDA","url_name":"cuda","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":11},{"name":"未完","url_name":"%e6%9c%aa%e5%ae%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"slim","url_name":"slim","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":28},{"name":"hosts","url_name":"hosts","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Lion","url_name":"lion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Expect","url_name":"expect","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"EPUB","url_name":"epub","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dadc9bddef328b902ad037e4a296ae4644bf349c/medium.jpg?1406525991","follower_count":22,"item_count":14},{"name":"git_tag","url_name":"git_tag","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"sqlite","url_name":"sqlite","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":23},{"name":"limit","url_name":"limit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"highcharts","url_name":"highcharts","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"WebKit","url_name":"webkit","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":13},{"name":"webView","url_name":"webview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"fish","url_name":"fish","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"CALayer","url_name":"calayer","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"VB","url_name":"vb","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":10},{"name":"smartos","url_name":"smartos","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"closure_linter","url_name":"closure_linter","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"macports","url_name":"macports","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":22},{"name":"teste","url_name":"teste","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"gemnasium","url_name":"gemnasium","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"form","url_name":"form","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"textarea","url_name":"textarea","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"memo","url_name":"memo","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":67},{"name":"Pixelapse","url_name":"pixelapse","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"office","url_name":"office","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e6af7b8e2af7e3ef730e3deaf2997f1384c5c5b1/medium.jpg?1395328566","follower_count":4,"item_count":5},{"name":"pacemaker","url_name":"pacemaker","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":17},{"name":"xampp","url_name":"xampp","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":16},{"name":"fluetd","url_name":"fluetd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"サーバー管理","url_name":"%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e7%ae%a1%e7%90%86","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5fb618b3453d890b2292299f85a31f8882422c2c/medium.jpg?1387909425","follower_count":62,"item_count":13},{"name":"shell","url_name":"shell","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/043a6bad6c0f074bec8500326daf861698d218ba/medium.jpg?1387909294","follower_count":105,"item_count":260},{"name":"navigation","url_name":"navigation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"background","url_name":"background","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"button","url_name":"button","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"reference","url_name":"reference","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"URL","url_name":"url","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"ディレクトリ削除","url_name":"%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e5%89%8a%e9%99%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ファイル削除","url_name":"%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e5%89%8a%e9%99%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Security","url_name":"security","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":32},{"name":"webdav","url_name":"webdav","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"OAuth","url_name":"oauth","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0019d94e4b045b164ab1c664b668e275cf5e72a8/medium.jpg?1409140227","follower_count":29,"item_count":39},{"name":"KML","url_name":"kml","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Xcode4.2","url_name":"xcode4.2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"GoogleAppEngine","url_name":"googleappengine","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6349be9aad7b8021e521b3fec18f28a96872f098/medium.jpg?1398748482","follower_count":35,"item_count":36},{"name":"vps","url_name":"vps","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":46},{"name":"finder","url_name":"finder","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"バッドハック","url_name":"%e3%83%90%e3%83%83%e3%83%89%e3%83%8f%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"雑記","url_name":"%e9%9b%91%e8%a8%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"メモ","url_name":"%e3%83%a1%e3%83%a2","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":62},{"name":"blosxom","url_name":"blosxom","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"xpath","url_name":"xpath","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":8},{"name":"dom","url_name":"dom","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"keydown","url_name":"keydown","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"keypress","url_name":"keypress","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mongoid","url_name":"mongoid","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":12},{"name":"question","url_name":"question","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"sakura","url_name":"sakura","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SenchaTouch","url_name":"senchatouch","icon_url":"/icons/medium/missing.png","follower_count":20,"item_count":39},{"name":"web2py","url_name":"web2py","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":4},{"name":"diary","url_name":"diary","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"math","url_name":"math","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/036ee06787dcc4c38de96cbe796f166b238eda10/medium.jpg?1395228974","follower_count":5,"item_count":25},{"name":"infrastructure","url_name":"infrastructure","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":27},{"name":"perlbal","url_name":"perlbal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"JSON","url_name":"json","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c01990c29ce345a67f3b5e85102dfd84276b8e95/medium.jpg?1387911385","follower_count":60,"item_count":117},{"name":"FactoryGirl","url_name":"factorygirl","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":26},{"name":"unbound","url_name":"unbound","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"launchctl","url_name":"launchctl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Blog","url_name":"blog","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"CMS","url_name":"cms","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":14},{"name":"IPython","url_name":"ipython","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6599c3a440530058973e471f4be6008ae38f9057/medium.jpg?1364840236","follower_count":7,"item_count":30},{"name":"SenchaTouch2","url_name":"senchatouch2","icon_url":"/icons/medium/missing.png","follower_count":19,"item_count":29},{"name":"AtCoder","url_name":"atcoder","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d28ebe4339583b2879e39d86334ea535e3835a25/medium.jpg?1364840257","follower_count":11,"item_count":7},{"name":"vmware","url_name":"vmware","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/35de467d5065b01c490669e2070d79f56b4cc417/medium.jpg?1388377764","follower_count":39,"item_count":50},{"name":"setup","url_name":"setup","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"IPv6","url_name":"ipv6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"wine","url_name":"wine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"xctu","url_name":"xctu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"xbee","url_name":"xbee","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"encoding","url_name":"encoding","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"Octokit","url_name":"octokit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"DOMContentLoaded","url_name":"domcontentloaded","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"debug","url_name":"debug","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":31},{"name":"Meteor","url_name":"meteor","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3614d70346d4dc8df4f949a81f260a54d38e1bf7/medium.jpg?1365997125","follower_count":21,"item_count":14},{"name":"set_error_handler","url_name":"set_error_handler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"register_shutdown_function","url_name":"register_shutdown_function","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"OpenCV","url_name":"opencv","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7fe57e143aa5435e89e59ccb262dd8c8f21f80b9/medium.jpg?1364840276","follower_count":127,"item_count":68},{"name":"NetBeans","url_name":"netbeans","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8d718598966fd5fc7ae89238629f72fb2adc42e8/medium.jpg?1364840305","follower_count":28,"item_count":19},{"name":"zenCoding","url_name":"zencoding","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":2},{"name":"rackhub","url_name":"rackhub","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"News","url_name":"news","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"environment","url_name":"environment","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"OmniAuth","url_name":"omniauth","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":17},{"name":"development","url_name":"development","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":38},{"name":"ARC","url_name":"arc","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"gas","url_name":"gas","icon_url":"/icons/medium/missing.png","follower_count":24,"item_count":24},{"name":"work","url_name":"work","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"task","url_name":"task","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ドットインストール","url_name":"%e3%83%89%e3%83%83%e3%83%88%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"dotinstal","url_name":"dotinstal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dotinstall","url_name":"dotinstall","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"okuyama","url_name":"okuyama","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"OpenGL","url_name":"opengl","icon_url":"/icons/medium/missing.png","follower_count":71,"item_count":65},{"name":"Deferred","url_name":"deferred","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"install","url_name":"install","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":16},{"name":"環境構築","url_name":"%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":34},{"name":"プロンプト変数","url_name":"%e3%83%97%e3%83%ad%e3%83%b3%e3%83%97%e3%83%88%e5%a4%89%e6%95%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"d3.js","url_name":"d3.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9a031d5f28e664492e95032e332e7ef4cc461429/medium.jpg?1403947866","follower_count":73,"item_count":47},{"name":"aptana","url_name":"aptana","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"dispatch","url_name":"dispatch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"event","url_name":"event","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"インストール","url_name":"%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"エラー","url_name":"%e3%82%a8%e3%83%a9%e3%83%bc","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8fc5bcd144ce76a856929ad241b89fef1cbb6538/medium.jpg?1409291456","follower_count":0,"item_count":14},{"name":"PC","url_name":"pc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mruby","url_name":"mruby","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7a3f86764fa3982a483f4c3754dd85de7088101e/medium.jpg?1392455473","follower_count":51,"item_count":66},{"name":"VBA","url_name":"vba","icon_url":"/icons/medium/missing.png","follower_count":65,"item_count":80},{"name":"基礎構文","url_name":"%e5%9f%ba%e7%a4%8e%e6%a7%8b%e6%96%87","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"document","url_name":"document","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":10},{"name":"IE7","url_name":"ie7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"FQL","url_name":"fql","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"PSS","url_name":"pss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Vita","url_name":"vita","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rubygems","url_name":"rubygems","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":53},{"name":"error","url_name":"error","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":11},{"name":"NFC","url_name":"nfc","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"限定公開とは","url_name":"%e9%99%90%e5%ae%9a%e5%85%ac%e9%96%8b%e3%81%a8%e3%81%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SakuraVPS","url_name":"sakuravps","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"PivotalTracker","url_name":"pivotaltracker","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":4},{"name":"hello","url_name":"hello","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"world","url_name":"world","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"rubytter","url_name":"rubytter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"manual","url_name":"manual","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"editer","url_name":"editer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"zen-coding","url_name":"zen-coding","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2b911695e258b2134577221ccc43e84c8fe5594b/medium.jpg?1364840322","follower_count":5,"item_count":6},{"name":"coda","url_name":"coda","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":6},{"name":"Google日本語入力","url_name":"google%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"Yum","url_name":"yum","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":50},{"name":"bundler","url_name":"bundler","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/19ee39442c934cc6ea66407d14fc7f69ed7c0ce8/medium.jpg?1376117419","follower_count":18,"item_count":81},{"name":"dictionary","url_name":"dictionary","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"omnigraffle","url_name":"omnigraffle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mosh","url_name":"mosh","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"debugging","url_name":"debugging","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Pandoc","url_name":"pandoc","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":22},{"name":"Xcode4.3","url_name":"xcode4.3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"クラス","url_name":"%e3%82%af%e3%83%a9%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"textmate","url_name":"textmate","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":6},{"name":"spock","url_name":"spock","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":6},{"name":"spring-security","url_name":"spring-security","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"commandobject","url_name":"commandobject","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ffmpeg","url_name":"ffmpeg","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":49},{"name":"CoreImage","url_name":"coreimage","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"pear","url_name":"pear","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"pyrus","url_name":"pyrus","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"phpdocumentor","url_name":"phpdocumentor","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"configuration","url_name":"configuration","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"スマートフォン","url_name":"%e3%82%b9%e3%83%9e%e3%83%bc%e3%83%88%e3%83%95%e3%82%a9%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"lisp","url_name":"lisp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6585c47135a6144c0387f0ce5c4a8613907f2017/medium.jpg?1387911086","follower_count":72,"item_count":47},{"name":"lunux","url_name":"lunux","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ATOM","url_name":"atom","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c565a1f401cfefa6b9b66a37f93e84c3d5adda7e/medium.jpg?1394532998","follower_count":202,"item_count":59},{"name":"Librize","url_name":"librize","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Parallels","url_name":"parallels","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9dd566cf4cee9f38633ec988f9f23bdbbea089aa/medium.jpg?1398176549","follower_count":4,"item_count":7},{"name":"sh","url_name":"sh","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":41},{"name":"dump","url_name":"dump","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"scp","url_name":"scp","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":9},{"name":"newrelic","url_name":"newrelic","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0c139f8c819c813faccd2fe1a780edba6f015342/medium.jpg?1408013055","follower_count":13,"item_count":17},{"name":"chef","url_name":"chef","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1a04d3d1fb0f853615ae6ef0cd1234076b2e377d/medium.jpg?1387959920","follower_count":458,"item_count":406},{"name":"mojito","url_name":"mojito","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"idea","url_name":"idea","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"rbenv","url_name":"rbenv","icon_url":"/icons/medium/missing.png","follower_count":19,"item_count":156},{"name":"vagrant","url_name":"vagrant","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/894dfb593318a0ff9aa160c87fe75b920cafb662/medium.jpg?1398263728","follower_count":587,"item_count":716},{"name":"VirtualBox","url_name":"virtualbox","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f548c52e6be38560564332b412bf06927f719d3c/medium.jpg?1398263985","follower_count":73,"item_count":228},{"name":"activesupport","url_name":"activesupport","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"Tomcat","url_name":"tomcat","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/52b63429ba17ae47344845528d08a24fabee096a/medium.jpg?1364840394","follower_count":28,"item_count":55},{"name":"Coffescript","url_name":"coffescript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9bf725db2bce7b842def7e5caf49fc3569d49113/medium.jpg?1387911180","follower_count":43,"item_count":16},{"name":"inkscape","url_name":"inkscape","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1dc39cd4f0d10186dbeb50ce69597dbc69f5e84d/medium.jpg?1398258553","follower_count":2,"item_count":3},{"name":"groonga","url_name":"groonga","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/41391f191ef556f96deb498a1fac2ae9f2234747/medium.jpg?1364840408","follower_count":29,"item_count":73},{"name":"テスト","url_name":"%e3%83%86%e3%82%b9%e3%83%88","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ede8a283c83a86055fd62288526cb691dc8e678a/medium.jpg?1409291235","follower_count":3,"item_count":19},{"name":"story","url_name":"story","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"znc","url_name":"znc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"MyISAM","url_name":"myisam","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CSV","url_name":"csv","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":42},{"name":"UTF-8","url_name":"utf-8","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"l18n","url_name":"l18n","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"client_side_validations","url_name":"client_side_validations","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"RubyMotion","url_name":"rubymotion","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/91b48003d86e0d85fff0b621cd2ce3e2360914e1/medium.jpg?1368114784","follower_count":116,"item_count":126},{"name":"instruments","url_name":"instruments","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"xcode4","url_name":"xcode4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"passenger","url_name":"passenger","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b595f8c7d28afc214dc217fbca5ceb9b21d64c9b/medium.jpg?1384533504","follower_count":3,"item_count":23},{"name":"leeno","url_name":"leeno","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/364b93eb8d8011437feea28f1528a4cf0e8988aa/medium.jpg?1364840428","follower_count":0,"item_count":0},{"name":"flowControll","url_name":"flowcontroll","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"chain","url_name":"chain","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"milkode","url_name":"milkode","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":8},{"name":"seq","url_name":"seq","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"man","url_name":"man","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"サウンド","url_name":"%e3%82%b5%e3%82%a6%e3%83%b3%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Self","url_name":"self","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"portfolio","url_name":"portfolio","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"job","url_name":"job","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"I18n","url_name":"i18n","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"apc","url_name":"apc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"suhosin","url_name":"suhosin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PHP5.4","url_name":"php5.4","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":2},{"name":"class","url_name":"class","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"Inherit","url_name":"inherit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"copy","url_name":"copy","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"clone","url_name":"clone","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"extend","url_name":"extend","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"tail","url_name":"tail","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"BetterTouchTool","url_name":"bettertouchtool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ターミナル","url_name":"%e3%82%bf%e3%83%bc%e3%83%9f%e3%83%8a%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":16},{"name":"Tk","url_name":"tk","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"inspect","url_name":"inspect","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"flymake","url_name":"flymake","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"macruby","url_name":"macruby","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":11},{"name":"skitch","url_name":"skitch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"晒し","url_name":"%e6%99%92%e3%81%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CIFilter","url_name":"cifilter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"thor","url_name":"thor","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"webistrano","url_name":"webistrano","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"kohana","url_name":"kohana","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Away3D","url_name":"away3d","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":".gitignore","url_name":".gitignore","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"elisp","url_name":"elisp","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":19},{"name":"WSH","url_name":"wsh","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":9},{"name":"JScript","url_name":"jscript","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":26},{"name":"GDAL","url_name":"gdal","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"webrat","url_name":"webrat","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"RSS","url_name":"rss","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a43bf2e1e738523e9095b29e24882a3800ea69de/medium.jpg?1387915564","follower_count":7,"item_count":16},{"name":"REXML","url_name":"rexml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Nokogiri","url_name":"nokogiri","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":32},{"name":"ベンチマーク","url_name":"%e3%83%99%e3%83%b3%e3%83%81%e3%83%9e%e3%83%bc%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"clang","url_name":"clang","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dcb55f9295cc15d86dc82513a317a322073fb0c5/medium.jpg?1364840450","follower_count":12,"item_count":27},{"name":"クーポンロワイアル","url_name":"%e3%82%af%e3%83%bc%e3%83%9d%e3%83%b3%e3%83%ad%e3%83%af%e3%82%a4%e3%82%a2%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"開発","url_name":"%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"アジャイル","url_name":"%e3%82%a2%e3%82%b8%e3%83%a3%e3%82%a4%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":7},{"name":"Pipes","url_name":"pipes","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"variable","url_name":"variable","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"global","url_name":"global","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"LINQ","url_name":"linq","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/879ed9b85914e009ff5f13ebab57806669c74183/medium.jpg?1387911476","follower_count":61,"item_count":40},{"name":"http-conduit","url_name":"http-conduit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"bug","url_name":"bug","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"draft","url_name":"draft","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"conduit","url_name":"conduit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"dos","url_name":"dos","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"spiriio","url_name":"spiriio","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SPIRE.IO","url_name":"spire.io","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ishikitakai","url_name":"ishikitakai","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"コマンドプロンプト","url_name":"%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%97%e3%83%ad%e3%83%b3%e3%83%97%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":39},{"name":"touch","url_name":"touch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"sed","url_name":"sed","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dcf4d1585f1dac7377b0b1ed630fd9cb8202acd2/medium.jpg?1387907634","follower_count":26,"item_count":46},{"name":"castor","url_name":"castor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"spring","url_name":"spring","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/17e73094af9201d3178678f38c1d5633bcdfc3dc/medium.jpg?1366435350","follower_count":57,"item_count":48},{"name":"Sequel","url_name":"sequel","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ee06b7cde1e8514c4b9849ba52a499b553b88394/medium.jpg?1367972551","follower_count":6,"item_count":9},{"name":"stm","url_name":"stm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"progression","url_name":"progression","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RMagick","url_name":"rmagick","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":20},{"name":"AudioUnit","url_name":"audiounit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"CoreAudio","url_name":"coreaudio","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"bazaar","url_name":"bazaar","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/916d0d86eed0de40ba420cdc5401eb0a62f454a4/medium.jpg?1366637736","follower_count":3,"item_count":4},{"name":"of","url_name":"of","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"OneLiner","url_name":"oneliner","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"grep","url_name":"grep","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":36},{"name":"PlayFramework","url_name":"playframework","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8c5624d3de7311710249e76f7e1614f892c1c5bd/medium.jpg?1364840461","follower_count":74,"item_count":105},{"name":"Play2","url_name":"play2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2f8d7c0088c04def66debcfcc9915914dc2c11df/medium.jpg?1364840479","follower_count":50,"item_count":50},{"name":"OpenGLES","url_name":"opengles","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":16},{"name":"sprockets","url_name":"sprockets","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"エミュレーター","url_name":"%e3%82%a8%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%bf%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AVD","url_name":"avd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Config","url_name":"config","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":13},{"name":"javascriptグラフィックス","url_name":"javascript%e3%82%b0%e3%83%a9%e3%83%95%e3%82%a3%e3%83%83%e3%82%af%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"model","url_name":"model","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"rails3","url_name":"rails3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fedbaa610b33552d61675ad1b0503b7249ee7075/medium.jpg?1387911847","follower_count":25,"item_count":76},{"name":"サービス","url_name":"%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Web","url_name":"web","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":54},{"name":"Programmer","url_name":"programmer","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"sqale","url_name":"sqale","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"Cocoa","url_name":"cocoa","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/608dece4cd5234007badd81b00951285ba788c97/medium.jpg?1392230363","follower_count":29,"item_count":99},{"name":"logic","url_name":"logic","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"rarils","url_name":"rarils","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"カレンダー","url_name":"%e3%82%ab%e3%83%ac%e3%83%b3%e3%83%80%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"ICS","url_name":"ics","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Ninja","url_name":"ninja","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"GUID","url_name":"guid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Random","url_name":"random","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"レスポンシブ","url_name":"%e3%83%ac%e3%82%b9%e3%83%9d%e3%83%b3%e3%82%b7%e3%83%96","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"CoreLocation","url_name":"corelocation","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"Ssl","url_name":"ssl","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":69},{"name":"emacs,","url_name":"emacs%2c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tumblr,","url_name":"tumblr%2c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"githubflavoredmarkdown","url_name":"githubflavoredmarkdown","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"VSS","url_name":"vss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"minecraft","url_name":"minecraft","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/82e8e57f8396410e7c135a7cb8076c95b6097658/medium.jpg?1385139758","follower_count":20,"item_count":16},{"name":"LLDB","url_name":"lldb","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":9},{"name":"テザリング","url_name":"%e3%83%86%e3%82%b6%e3%83%aa%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"WifiManager","url_name":"wifimanager","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SublimeText2","url_name":"sublimetext2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bc199e8fbe6a292524ba414f3c23a5ba86dddb8c/medium.jpg?1396147727","follower_count":383,"item_count":228},{"name":"Q&A","url_name":"q%26a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"coda2","url_name":"coda2","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":3},{"name":"Checkinstall","url_name":"checkinstall","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"squeeze","url_name":"squeeze","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"openpne","url_name":"openpne","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"apache2","url_name":"apache2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":15},{"name":"cli","url_name":"cli","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"zts","url_name":"zts","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gmail","url_name":"gmail","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":26},{"name":"GoogleLatitude","url_name":"googlelatitude","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"geo","url_name":"geo","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":15},{"name":"位置情報","url_name":"%e4%bd%8d%e7%bd%ae%e6%83%85%e5%a0%b1","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"ifttt","url_name":"ifttt","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0593032f1a9e8e828db6c82ea2af2f9e7489a4c3/medium.jpg?1405924388","follower_count":2,"item_count":4},{"name":"pyhon","url_name":"pyhon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"netBSD","url_name":"netbsd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0dd585bdb3cbd1486967e5ca9236c29aea6aa2f1/medium.jpg?1364840527","follower_count":4,"item_count":4},{"name":"SketchUp","url_name":"sketchup","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"Picasa","url_name":"picasa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rsync","url_name":"rsync","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":20},{"name":"IVS","url_name":"ivs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"原稿","url_name":"%e5%8e%9f%e7%a8%bf","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":1},{"name":"rake","url_name":"rake","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":33},{"name":"map","url_name":"map","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"header","url_name":"header","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ユーザーテスト","url_name":"%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"絵文字","url_name":"%e7%b5%b5%e6%96%87%e5%ad%97","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"tutorial","url_name":"tutorial","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"paturn","url_name":"paturn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"view","url_name":"view","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"TortoiseSVN","url_name":"tortoisesvn","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":8},{"name":"SublimeText","url_name":"sublimetext","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f3182741ed4ee870c40648c5226d5de094785886/medium.jpg?1398661821","follower_count":225,"item_count":124},{"name":"editor","url_name":"editor","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"height","url_name":"height","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Notepad++","url_name":"notepad%2b%2b","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"GLKit","url_name":"glkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"slice","url_name":"slice","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"trim","url_name":"trim","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"string","url_name":"string","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"tcsh","url_name":"tcsh","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"PowerShell","url_name":"powershell","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/193f9537c4c4c91e5342171d191a62b3933bb63c/medium.jpg?1394788460","follower_count":102,"item_count":99},{"name":"style","url_name":"style","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"moz","url_name":"moz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"コネクトスター","url_name":"%e3%82%b3%e3%83%8d%e3%82%af%e3%83%88%e3%82%b9%e3%82%bf%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"transform","url_name":"transform","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"check","url_name":"check","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"transform3d","url_name":"transform3d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"locale","url_name":"locale","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"openssl","url_name":"openssl","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ac06c739157822605ca341bd09530911527629aa/medium.jpg?1405649924","follower_count":11,"item_count":85},{"name":"ssl_mod","url_name":"ssl_mod","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mozilla","url_name":"mozilla","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"opengraph","url_name":"opengraph","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Chatter","url_name":"chatter","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f943b91c6dbd8b835e58bf0e18e6064d67efdff0/medium.jpg?1395459295","follower_count":4,"item_count":2},{"name":"Salesforce","url_name":"salesforce","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d98a0f289673bb72ddeb153cc6a8fc620409f400/medium.jpg?1395459208","follower_count":22,"item_count":73},{"name":"Watir","url_name":"watir","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"VIChrome","url_name":"vichrome","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"読書","url_name":"%e8%aa%ad%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"brew","url_name":"brew","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":36},{"name":"kaminari","url_name":"kaminari","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"tig","url_name":"tig","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":30},{"name":"Activity","url_name":"activity","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"VisualStudio","url_name":"visualstudio","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/39966530b952cca689d8707303111fae47d3d684/medium.jpg?1387909636","follower_count":87,"item_count":90},{"name":"rest","url_name":"rest","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":20},{"name":"forcetk.js","url_name":"forcetk.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0ca34095ebde13c06cbeebdb7bc6e1206e74223d/medium.jpg?1395460373","follower_count":1,"item_count":2},{"name":"アスペクト","url_name":"%e3%82%a2%e3%82%b9%e3%83%9a%e3%82%af%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"AOP","url_name":"aop","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Plugin","url_name":"plugin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"aaaaaa","url_name":"aaaaaa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"エイリアス","url_name":"%e3%82%a8%e3%82%a4%e3%83%aa%e3%82%a2%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Cloud","url_name":"cloud","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"Ustream","url_name":"ustream","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"rtmpdump","url_name":"rtmpdump","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"log","url_name":"log","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":28},{"name":"Makefile","url_name":"makefile","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":20},{"name":"Property","url_name":"property","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ga","url_name":"ga","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"設定","url_name":"%e8%a8%ad%e5%ae%9a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"エンコード","url_name":"%e3%82%a8%e3%83%b3%e3%82%b3%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"iTunes","url_name":"itunes","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/703d664a5a85185d65f384310bee321c65955d40/medium.jpg?1398176315","follower_count":0,"item_count":12},{"name":"rubu","url_name":"rubu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ClearSilver","url_name":"clearsilver","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mikitani","url_name":"mikitani","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"elb","url_name":"elb","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":25},{"name":"boost","url_name":"boost","icon_url":"/icons/medium/missing.png","follower_count":28,"item_count":33},{"name":"数値計算","url_name":"%e6%95%b0%e5%80%a4%e8%a8%88%e7%ae%97","icon_url":"/icons/medium/missing.png","follower_count":22,"item_count":25},{"name":"区間演算","url_name":"%e5%8c%ba%e9%96%93%e6%bc%94%e7%ae%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"JSX","url_name":"jsx","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":20},{"name":"logo","url_name":"logo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mixi","url_name":"mixi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mockjax","url_name":"mockjax","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Cygwin","url_name":"cygwin","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/788c7b27d8fc4c1faebd391c2a6571a8e462455c/medium.jpg?1364840588","follower_count":53,"item_count":73},{"name":"MinGW","url_name":"mingw","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8c654dde7896f788036c36d9e850577ad41e9c6f/medium.jpg?1394634188","follower_count":12,"item_count":14},{"name":"msysGit","url_name":"msysgit","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4f5bf8815e7c4ba194ae46a41f26a75254d78ef1/medium.jpg?1364840602","follower_count":8,"item_count":6},{"name":"refactor","url_name":"refactor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"replace","url_name":"replace","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"debugger","url_name":"debugger","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"avfoundation","url_name":"avfoundation","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"AFNetwork","url_name":"afnetwork","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"用語集","url_name":"%e7%94%a8%e8%aa%9e%e9%9b%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"aaaa","url_name":"aaaa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Japan","url_name":"japan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"本","url_name":"%e6%9c%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ghci","url_name":"ghci","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"Ember.js","url_name":"ember.js","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":39},{"name":"scipy","url_name":"scipy","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":31},{"name":"sympy","url_name":"sympy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"numpy","url_name":"numpy","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":43},{"name":"Windows8","url_name":"windows8","icon_url":"/icons/medium/missing.png","follower_count":44,"item_count":56},{"name":"CoreAnimation","url_name":"coreanimation","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8b803db8da610b1786d51bf3d643095ced8fa35e/medium.jpg?1392230130","follower_count":2,"item_count":12},{"name":"ad","url_name":"ad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mach","url_name":"mach","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"MT","url_name":"mt","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"kobitoテスト","url_name":"kobito%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"animation","url_name":"animation","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ccafdae855931c71ae0010d7c698352e7468441f/medium.jpg?1392634831","follower_count":4,"item_count":18},{"name":"keytool","url_name":"keytool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"transition","url_name":"transition","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"アニメーション","url_name":"%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":15},{"name":"XMLStarlet","url_name":"xmlstarlet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"OGP","url_name":"ogp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"actionview","url_name":"actionview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"underscore","url_name":"underscore","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"文字列","url_name":"%e6%96%87%e5%ad%97%e5%88%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"リソース","url_name":"%e3%83%aa%e3%82%bd%e3%83%bc%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"snipet","url_name":"snipet","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"勉強会","url_name":"%e5%8b%89%e5%bc%b7%e4%bc%9a","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/51713336a1474837883624c6cc2b10de6a21ddd8/medium.jpg?1387910883","follower_count":56,"item_count":72},{"name":"関数型言語","url_name":"%e9%96%a2%e6%95%b0%e5%9e%8b%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":41},{"name":"ラムダ式","url_name":"%e3%83%a9%e3%83%a0%e3%83%80%e5%bc%8f","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"vimのマクロ","url_name":"vim%e3%81%ae%e3%83%9e%e3%82%af%e3%83%ad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MathJax","url_name":"mathjax","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Sphinx","url_name":"sphinx","icon_url":"/icons/medium/missing.png","follower_count":27,"item_count":31},{"name":"試験","url_name":"%e8%a9%a6%e9%a8%93","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"VC#","url_name":"vc%23","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ウェブ開発","url_name":"%e3%82%a6%e3%82%a7%e3%83%96%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"onlab","url_name":"onlab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"JRuby","url_name":"jruby","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":21},{"name":"データベース","url_name":"%e3%83%87%e3%83%bc%e3%82%bf%e3%83%99%e3%83%bc%e3%82%b9","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fd00ce57cd6b8d4f5311191ed7130846fe855e62/medium.jpg?1409291945","follower_count":1,"item_count":11},{"name":"sendagaya.rb","url_name":"sendagaya.rb","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"viml","url_name":"viml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"macos","url_name":"macos","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":15},{"name":"NSLog","url_name":"nslog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"l10n","url_name":"l10n","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"solr","url_name":"solr","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":22},{"name":"KVM","url_name":"kvm","icon_url":"/icons/medium/missing.png","follower_count":26,"item_count":24},{"name":"Jenkins","url_name":"jenkins","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/67487482b36829c55bcf3b37333e63bd05e6c581/medium.jpg?1364840617","follower_count":320,"item_count":261},{"name":"カスタムビュー","url_name":"%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%93%e3%83%a5%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GraphicalLayout","url_name":"graphicallayout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"カスタムフォント","url_name":"%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a9%e3%83%b3%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Objectice-C","url_name":"objectice-c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"pizza","url_name":"pizza","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"xeround","url_name":"xeround","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"kobold2d","url_name":"kobold2d","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"mba","url_name":"mba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"eksathe","url_name":"eksathe","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"chart","url_name":"chart","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"analytics","url_name":"analytics","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"授業","url_name":"%e6%8e%88%e6%a5%ad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"情報セキュリティ","url_name":"%e6%83%85%e5%a0%b1%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Dols","url_name":"dols","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"as3","url_name":"as3","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":28},{"name":"Read","url_name":"read","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"canvas","url_name":"canvas","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":39},{"name":"dnsmasq","url_name":"dnsmasq","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"dns","url_name":"dns","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":44},{"name":"lp_solve","url_name":"lp_solve","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"buildr","url_name":"buildr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"どう書く","url_name":"%e3%81%a9%e3%81%86%e6%9b%b8%e3%81%8f","icon_url":"/icons/medium/missing.png","follower_count":75,"item_count":540},{"name":"MetroStyleApp","url_name":"metrostyleapp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"WinJS","url_name":"winjs","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"yhpg","url_name":"yhpg","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":315},{"name":"JSP","url_name":"jsp","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":13},{"name":"ActionMailer","url_name":"actionmailer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"thinkpad","url_name":"thinkpad","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"fedora","url_name":"fedora","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/cad8e300a77691e8ba02f97808433540b7187df5/medium.jpg?1372381480","follower_count":15,"item_count":27},{"name":"Paperclip,","url_name":"paperclip%2c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"UXデザイン関連","url_name":"ux%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e9%96%a2%e9%80%a3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Pusher","url_name":"pusher","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"DynamicMTML","url_name":"dynamicmtml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":".htaccess","url_name":".htaccess","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":10},{"name":"example","url_name":"example","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"nave","url_name":"nave","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"start-stop-daemon","url_name":"start-stop-daemon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"monit","url_name":"monit","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":16},{"name":"stylus","url_name":"stylus","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":11},{"name":"Animate","url_name":"animate","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"圏論","url_name":"%e5%9c%8f%e8%ab%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"enchant.js","url_name":"enchant.js","icon_url":"/icons/medium/missing.png","follower_count":45,"item_count":17},{"name":"syslog-ng","url_name":"syslog-ng","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"haproxy","url_name":"haproxy","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":31},{"name":"Sabel","url_name":"sabel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"bear","url_name":"bear","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"Clean","url_name":"clean","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ANE","url_name":"ane","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":5},{"name":"SDL","url_name":"sdl","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":11},{"name":"端末エミュレータ","url_name":"%e7%ab%af%e6%9c%ab%e3%82%a8%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"224桁問題","url_name":"224%e6%a1%81%e5%95%8f%e9%a1%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"端末アプリケーション","url_name":"%e7%ab%af%e6%9c%ab%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"vimrc","url_name":"vimrc","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/43a1df414c4e5b1acbe58aaa071c25f8e8da84fb/medium.jpg?1396241390","follower_count":30,"item_count":51},{"name":"テスト投稿","url_name":"%e3%83%86%e3%82%b9%e3%83%88%e6%8a%95%e7%a8%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"task作成","url_name":"task%e4%bd%9c%e6%88%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tramp","url_name":"tramp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"windows7","url_name":"windows7","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4a295fd3b017e913e1a7287ae3783cd451ce34c8/medium.jpg?1409290702","follower_count":7,"item_count":59},{"name":"operation","url_name":"operation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"backlog","url_name":"backlog","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e4b885baa0a8e4f7030573bce49d16eeae4beed0/medium.jpg?1408012882","follower_count":5,"item_count":8},{"name":"userscript","url_name":"userscript","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"JSHint","url_name":"jshint","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"Drupal","url_name":"drupal","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":13},{"name":"jasmine","url_name":"jasmine","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b0839dd0d8dbb97917a055a8e28637c1b472b201/medium.jpg?1364840630","follower_count":27,"item_count":40},{"name":"xdebug","url_name":"xdebug","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a63c2e21548a5be2fbd69ad220c2d2f78178639a/medium.jpg?1388310113","follower_count":2,"item_count":6},{"name":"easy_install","url_name":"easy_install","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"backup","url_name":"backup","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"photoshop","url_name":"photoshop","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/26f75499bacb7fd8d02a14f6e29d60a68aee0ec1/medium.jpg?1392480705","follower_count":27,"item_count":29},{"name":"hokkaidolikers","url_name":"hokkaidolikers","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"heritrix","url_name":"heritrix","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PHP5.3","url_name":"php5.3","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"pythonbrew","url_name":"pythonbrew","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"抽象化","url_name":"%e6%8a%bd%e8%b1%a1%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"emoji","url_name":"emoji","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"keysnail","url_name":"keysnail","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Porky","url_name":"porky","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ReVIEW","url_name":"review","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":33},{"name":"Books","url_name":"books","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lettuce","url_name":"lettuce","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TextView","url_name":"textview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"LinkMovementMethod","url_name":"linkmovementmethod","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Mathematics","url_name":"mathematics","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Matrix","url_name":"matrix","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"NextLanguage","url_name":"nextlanguage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Tab","url_name":"tab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Intent","url_name":"intent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"zabbix","url_name":"zabbix","icon_url":"/icons/medium/missing.png","follower_count":51,"item_count":63},{"name":"UINavigationBar","url_name":"uinavigationbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UINavigationController","url_name":"uinavigationcontroller","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"trash","url_name":"trash","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AppCode","url_name":"appcode","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/00412cf983a708764f9105a7750a9288228d322c/medium.jpg?1404455913","follower_count":26,"item_count":19},{"name":"Parser","url_name":"parser","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"koala","url_name":"koala","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"private","url_name":"private","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RaphaelJS","url_name":"raphaeljs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Composer","url_name":"composer","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":42},{"name":"mountainlion","url_name":"mountainlion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"SharpDevelop","url_name":"sharpdevelop","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"thrift","url_name":"thrift","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"VPN","url_name":"vpn","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":14},{"name":"投稿テスト","url_name":"%e6%8a%95%e7%a8%bf%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"zf2","url_name":"zf2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a2c390e986b9aa49637ca0e1d66e5c31cd61f1d1/medium.jpg?1395939148","follower_count":17,"item_count":37},{"name":"IntelliJ","url_name":"intellij","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/86ce6198a1ef4a3e5be6bf29893bff9bbda3fa4e/medium.jpg?1367911208","follower_count":143,"item_count":119},{"name":"PyPI","url_name":"pypi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Log4Net","url_name":"log4net","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"flow","url_name":"flow","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"setTimeout","url_name":"settimeout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"setInterval","url_name":"setinterval","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"throttle","url_name":"throttle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RaspberryPi","url_name":"raspberrypi","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9ee67902ddbcb2ef82786e604e6ff25220e3d225/medium.jpg?1364840705","follower_count":195,"item_count":123},{"name":"grape","url_name":"grape","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":9},{"name":"api_builders","url_name":"api_builders","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"note","url_name":"note","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"list","url_name":"list","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"add_ons","url_name":"add_ons","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cloudinary","url_name":"cloudinary","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"carrierwave","url_name":"carrierwave","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":21},{"name":"Vundle","url_name":"vundle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"neobundle","url_name":"neobundle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"customEvent","url_name":"customevent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"time","url_name":"time","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"rails_admin_interfaces","url_name":"rails_admin_interfaces","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rails_admin","url_name":"rails_admin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"carkcho","url_name":"carkcho","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"adbドライバインストール","url_name":"adb%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Xperia_acro_HD","url_name":"xperia_acro_hd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"analog","url_name":"analog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"blob","url_name":"blob","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"script","url_name":"script","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"template","url_name":"template","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"NDK","url_name":"ndk","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"x86-64","url_name":"x86-64","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":8},{"name":"Graphviz","url_name":"graphviz","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":29},{"name":"ニフティクラウドC4SA","url_name":"%e3%83%8b%e3%83%95%e3%83%86%e3%82%a3%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89c4sa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"samba","url_name":"samba","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c0773a2bf6b7373a69774be5dc4ecac56041324f/medium.jpg?1388378612","follower_count":3,"item_count":13},{"name":"lldecade","url_name":"lldecade","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"npm","url_name":"npm","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":87},{"name":"nodejs","url_name":"nodejs","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":27},{"name":"MQL","url_name":"mql","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ゲーム","url_name":"%e3%82%b2%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":5},{"name":"ループ","url_name":"%e3%83%ab%e3%83%bc%e3%83%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"GameLoop","url_name":"gameloop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sni","url_name":"sni","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"acts_as_paranoid","url_name":"acts_as_paranoid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CVS","url_name":"cvs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"考え事","url_name":"%e8%80%83%e3%81%88%e4%ba%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WordCamp","url_name":"wordcamp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"rails3-generators","url_name":"rails3-generators","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"factory_girl_rails","url_name":"factory_girl_rails","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"factory_girl","url_name":"factory_girl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"vitualBasic","url_name":"vitualbasic","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"flash","url_name":"flash","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":61},{"name":"CreateJS","url_name":"createjs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f241fdc614316e006cac93983494cd72c8b9df5e/medium.jpg?1366804501","follower_count":40,"item_count":46},{"name":"(mt)","url_name":"%28mt%29","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"LWP","url_name":"lwp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"monitoring","url_name":"monitoring","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Dozens","url_name":"dozens","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Espresso","url_name":"espresso","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/249b94ffd987297dac8a92a0f5b013c5ef1062b9/medium.jpg?1393563927","follower_count":8,"item_count":4},{"name":"cacti","url_name":"cacti","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":6},{"name":"CouchDB","url_name":"couchdb","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"foreman","url_name":"foreman","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"ancestry","url_name":"ancestry","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"zombie.js","url_name":"zombie.js","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"PhantomJS","url_name":"phantomjs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e473522a5bf6b21a849b0e5f0ec3c0ad443ffabc/medium.jpg?1385145287","follower_count":33,"item_count":45},{"name":"casperJs","url_name":"casperjs","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":17},{"name":"omniauth-twitter","url_name":"omniauth-twitter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"logback","url_name":"logback","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"WiFi","url_name":"wifi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"DynamicPrototypes","url_name":"dynamicprototypes","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CSSMatrix","url_name":"cssmatrix","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"新書","url_name":"%e6%96%b0%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Splicing","url_name":"splicing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Resize","url_name":"resize","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"singleton","url_name":"singleton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"window","url_name":"window","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"jsdo.it","url_name":"jsdo.it","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"PostMessage","url_name":"postmessage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ログ","url_name":"%e3%83%ad%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"staedy","url_name":"staedy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"opera","url_name":"opera","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"jboss","url_name":"jboss","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":6},{"name":"stacktrace","url_name":"stacktrace","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アプリ","url_name":"%e3%82%a2%e3%83%97%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":18},{"name":"QuickCheck","url_name":"quickcheck","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":0},{"name":"ProofGeneral","url_name":"proofgeneral","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/877fa1fad028760fd2281c449e54b824d46c5760/medium.jpg?1382792138","follower_count":6,"item_count":4},{"name":"SML#","url_name":"sml%23","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"js_of_ocaml","url_name":"js_of_ocaml","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"gmilk","url_name":"gmilk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Unite","url_name":"unite","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"demo","url_name":"demo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"edge","url_name":"edge","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"adobe","url_name":"adobe","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":19},{"name":"日記","url_name":"%e6%97%a5%e8%a8%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"require.js","url_name":"require.js","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"MountaiLion","url_name":"mountailion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Ndesk.Options","url_name":"ndesk.options","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"greasemonkey","url_name":"greasemonkey","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6f0143fb7803eb44d695e6e8a03d3886276db05a/medium.jpg?1382074769","follower_count":10,"item_count":6},{"name":"Reijiro","url_name":"reijiro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NUnit","url_name":"nunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"vimproc","url_name":"vimproc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"iptables","url_name":"iptables","icon_url":"/icons/medium/missing.png","follower_count":22,"item_count":20},{"name":"automation","url_name":"automation","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Implementation","url_name":"implementation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Range","url_name":"range","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"createHTMLDocument","url_name":"createhtmldocument","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sqlalchemy","url_name":"sqlalchemy","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":11},{"name":"features","url_name":"features","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AdobeEdge","url_name":"adobeedge","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CI","url_name":"ci","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c20f44ca0d9c86302979c35b0cf4e5bb9443e625/medium.jpg?1364840718","follower_count":21,"item_count":49},{"name":"Cooking","url_name":"cooking","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":0},{"name":"Ada","url_name":"ada","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"war","url_name":"war","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"EventListener","url_name":"eventlistener","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"tap","url_name":"tap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Chromium","url_name":"chromium","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"TestFlight","url_name":"testflight","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":11},{"name":"Crashlytics","url_name":"crashlytics","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"docpad","url_name":"docpad","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"eccube","url_name":"eccube","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":1},{"name":"logger","url_name":"logger","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"named-capture","url_name":"named-capture","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"regexp","url_name":"regexp","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":12},{"name":"engine","url_name":"engine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"date","url_name":"date","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"strptime","url_name":"strptime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"xinetd","url_name":"xinetd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TCP","url_name":"tcp","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":4},{"name":"WebStorm","url_name":"webstorm","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fc8bec1457d15159d1316598ab732a7338d76fa5/medium.jpg?1387512377","follower_count":28,"item_count":26},{"name":"shortcut","url_name":"shortcut","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ショートカット","url_name":"%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%82%ab%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"SMTP","url_name":"smtp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"telnet","url_name":"telnet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"cocoa.kansai","url_name":"cocoa.kansai","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jdevjp","url_name":"jdevjp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"JAX-RS","url_name":"jax-rs","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":19},{"name":"jpa","url_name":"jpa","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":18},{"name":"jsf","url_name":"jsf","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":12},{"name":"sudo","url_name":"sudo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":16},{"name":"Paver","url_name":"paver","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"stunnel","url_name":"stunnel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"slide","url_name":"slide","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"tamon","url_name":"tamon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"inotify","url_name":"inotify","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"手順書","url_name":"%e6%89%8b%e9%a0%86%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"hub","url_name":"hub","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ea763979dabcfbf2c7f749deb14fdf981772ace2/medium.jpg?1364840734","follower_count":4,"item_count":12},{"name":"twig","url_name":"twig","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":11},{"name":"CheatSheet","url_name":"cheatsheet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"JUnit","url_name":"junit","icon_url":"/icons/medium/missing.png","follower_count":29,"item_count":41},{"name":"postfix","url_name":"postfix","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8fef1c3dbee5f3b3bfa927ab37c56a14bc90bd0d/medium.jpg?1392203585","follower_count":9,"item_count":39},{"name":"console","url_name":"console","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":9},{"name":"handling","url_name":"handling","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"C++11","url_name":"c%2b%2b11","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":62},{"name":"C++0x","url_name":"c%2b%2b0x","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"リーダブルコード","url_name":"%e3%83%aa%e3%83%bc%e3%83%80%e3%83%96%e3%83%ab%e3%82%b3%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"読書メモ","url_name":"%e8%aa%ad%e6%9b%b8%e3%83%a1%e3%83%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"method","url_name":"method","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"snippet","url_name":"snippet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"If","url_name":"if","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CSharp","url_name":"csharp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"LimeChat","url_name":"limechat","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"aquery","url_name":"aquery","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"grub","url_name":"grub","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"kaja","url_name":"kaja","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"quine","url_name":"quine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"socket","url_name":"socket","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"port","url_name":"port","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"bashrc","url_name":"bashrc","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"beamer","url_name":"beamer","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"waf","url_name":"waf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Irssi","url_name":"irssi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Plugins","url_name":"plugins","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Cordova","url_name":"cordova","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":40},{"name":"guava","url_name":"guava","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":13},{"name":"mox","url_name":"mox","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"tumblr","url_name":"tumblr","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":14},{"name":"codehighlight","url_name":"codehighlight","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"python-memcached","url_name":"python-memcached","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"trait","url_name":"trait","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ranger","url_name":"ranger","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Unity","url_name":"unity","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a1459d1531a1b967b2d7670981463dcb6c11b71a/medium.jpg?1380677310","follower_count":429,"item_count":333},{"name":"programming","url_name":"programming","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":19},{"name":"比較","url_name":"%e6%af%94%e8%bc%83","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"子孫","url_name":"%e5%ad%90%e5%ad%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"compareDocumentPosition","url_name":"comparedocumentposition","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"祖先","url_name":"%e7%a5%96%e5%85%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MiniMagick","url_name":"minimagick","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"gitlab","url_name":"gitlab","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b5ec7e63e115bdc6db1c64dd28cfa9c5caf6d577/medium.jpg?1369810417","follower_count":97,"item_count":132},{"name":"shpider","url_name":"shpider","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"公開鍵","url_name":"%e5%85%ac%e9%96%8b%e9%8d%b5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"study","url_name":"study","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ClosureLibrary","url_name":"closurelibrary","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"Project_Euler","url_name":"project_euler","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"table","url_name":"table","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Data","url_name":"data","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"spreadsheet","url_name":"spreadsheet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"Evernote","url_name":"evernote","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a3ba8720cf462f39bcec1c378dc15d743e7b45a6/medium.jpg?1387916293","follower_count":23,"item_count":22},{"name":"javascriptテクニックバイブル","url_name":"javascript%e3%83%86%e3%82%af%e3%83%8b%e3%83%83%e3%82%af%e3%83%90%e3%82%a4%e3%83%96%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"when","url_name":"when","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"コマンド","url_name":"%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/cd1ac305e1c8287be10c679c671bd3625cdf67de/medium.jpg?1409291539","follower_count":1,"item_count":24},{"name":"リンボリックリンク","url_name":"%e3%83%aa%e3%83%b3%e3%83%9c%e3%83%aa%e3%83%83%e3%82%af%e3%83%aa%e3%83%b3%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"blogger","url_name":"blogger","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"圧縮","url_name":"%e5%9c%a7%e7%b8%ae","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"compiler","url_name":"compiler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"ftp","url_name":"ftp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":14},{"name":"mroonga","url_name":"mroonga","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/25ec8104711bc4252439c86fef600406c9193d73/medium.jpg?1364840756","follower_count":17,"item_count":34},{"name":"TextMate2","url_name":"textmate2","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"Kinect","url_name":"kinect","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d6d91d2ba67e97f9f7d4d105a85eebeda3c0cf47/medium.jpg?1395328412","follower_count":6,"item_count":6},{"name":"OpenNI","url_name":"openni","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"three.js","url_name":"three.js","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":25},{"name":"#applescript","url_name":"%23applescript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mouseenter","url_name":"mouseenter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mouseleave","url_name":"mouseleave","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"webpay","url_name":"webpay","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d9343ba01cc0f4f86c615f1ab904a03d9ab5eec9/medium.jpg?1385894430","follower_count":30,"item_count":20},{"name":"bdd","url_name":"bdd","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":12},{"name":"acceptance_test","url_name":"acceptance_test","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Insync","url_name":"insync","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"stripe","url_name":"stripe","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"位置","url_name":"%e4%bd%8d%e7%bd%ae","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"scroll","url_name":"scroll","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Position","url_name":"position","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"element","url_name":"element","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"httpd","url_name":"httpd","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":14},{"name":"extendscript","url_name":"extendscript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7d127ec5b5376b8ee24413531f767e04906a4fb8/medium.jpg?1388029895","follower_count":4,"item_count":14},{"name":"simple_form","url_name":"simple_form","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"ステマ","url_name":"%e3%82%b9%e3%83%86%e3%83%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Corona","url_name":"corona","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c09e403504c0f864bda7e7e98474b579dadd4911/medium.jpg?1364840791","follower_count":12,"item_count":30},{"name":"FP","url_name":"fp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"pip","url_name":"pip","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":24},{"name":"Gloss","url_name":"gloss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"EXSi","url_name":"exsi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ESXi","url_name":"esxi","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":8},{"name":"vimum","url_name":"vimum","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"osdev","url_name":"osdev","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"継続的デリバリー","url_name":"%e7%b6%99%e7%b6%9a%e7%9a%84%e3%83%87%e3%83%aa%e3%83%90%e3%83%aa%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"OpenCL","url_name":"opencl","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/247db9e46df769906ad1093d71f994ad3f06617f/medium.jpg?1388309710","follower_count":17,"item_count":13},{"name":"GPGPU","url_name":"gpgpu","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":12},{"name":"tool","url_name":"tool","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":14},{"name":"reactive4java","url_name":"reactive4java","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ReactiveExtensions","url_name":"reactiveextensions","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":11},{"name":"Sandcastle","url_name":"sandcastle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cruby","url_name":"cruby","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"darwin","url_name":"darwin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"mri","url_name":"mri","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Spectacle","url_name":"spectacle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Spark","url_name":"spark","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2b32f68777d6f0d2d88609a3efb979378fc97320/medium.jpg?1401964762","follower_count":18,"item_count":14},{"name":"db2","url_name":"db2","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"Shadow","url_name":"shadow","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GitPython","url_name":"gitpython","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"liveReload","url_name":"livereload","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"EF","url_name":"ef","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Underscore.js","url_name":"underscore.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/30e86e7f86cef8d900268822dfa1f71de6254e22/medium.jpg?1387512273","follower_count":39,"item_count":36},{"name":"gradle","url_name":"gradle","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6fc61a72204beb94f27ad76de5e4864923ae7d83/medium.jpg?1399018096","follower_count":94,"item_count":131},{"name":"ringojs","url_name":"ringojs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"wx","url_name":"wx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"wxWidgets","url_name":"wxwidgets","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"YASON","url_name":"yason","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Go言語","url_name":"go%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":21},{"name":"ree","url_name":"ree","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mongrel","url_name":"mongrel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"nkf","url_name":"nkf","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Lazy_K","url_name":"lazy_k","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"test2","url_name":"test2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ios6","url_name":"ios6","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":20},{"name":"anemone","url_name":"anemone","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Ricty","url_name":"ricty","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":11},{"name":"SourceCodePro","url_name":"sourcecodepro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Maitainable_Javascript","url_name":"maitainable_javascript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"favicon","url_name":"favicon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"a","url_name":"a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"ARDrone","url_name":"ardrone","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"rr","url_name":"rr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"EShell","url_name":"eshell","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"ebs","url_name":"ebs","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":4},{"name":"nodes.js","url_name":"nodes.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"knife","url_name":"knife","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":17},{"name":"devops","url_name":"devops","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":13},{"name":"inception-deck","url_name":"inception-deck","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"OpenStreetMap","url_name":"openstreetmap","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":35},{"name":"Oil","url_name":"oil","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Kahua","url_name":"kahua","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":1},{"name":"product","url_name":"product","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"startup","url_name":"startup","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"content-type","url_name":"content-type","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ハッカソン","url_name":"%e3%83%8f%e3%83%83%e3%82%ab%e3%82%bd%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"初心者","url_name":"%e5%88%9d%e5%bf%83%e8%80%85","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":50},{"name":"Research","url_name":"research","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"遺伝的アルゴリズム","url_name":"%e9%81%ba%e4%bc%9d%e7%9a%84%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":1},{"name":"Jenkins用Android","url_name":"jenkins%e7%94%a8android","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"haxenode","url_name":"haxenode","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"assembly","url_name":"assembly","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"TypeScript","url_name":"typescript","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7f57bbff1eabee3a9cd26f82029daa3676ffb3ee/medium.jpg?1396147657","follower_count":203,"item_count":122},{"name":"ノンデザイナーズ・デザインブック","url_name":"%e3%83%8e%e3%83%b3%e3%83%87%e3%82%b6%e3%82%a4%e3%83%8a%e3%83%bc%e3%82%ba%e3%83%bb%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%96%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"squid","url_name":"squid","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":8},{"name":"シンボリックリンク","url_name":"%e3%82%b7%e3%83%b3%e3%83%9c%e3%83%aa%e3%83%83%e3%82%af%e3%83%aa%e3%83%b3%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Mailman","url_name":"mailman","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"メーリングリスト","url_name":"%e3%83%a1%e3%83%bc%e3%83%aa%e3%83%b3%e3%82%b0%e3%83%aa%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SMTPAUTH","url_name":"smtpauth","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SASL","url_name":"sasl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mamp","url_name":"mamp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":17},{"name":"CocoaPods","url_name":"cocoapods","icon_url":"/icons/medium/missing.png","follower_count":41,"item_count":66},{"name":"fb_graph","url_name":"fb_graph","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"omniauth-facebook","url_name":"omniauth-facebook","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"UIScrollView","url_name":"uiscrollview","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"UITapGestureRecognizer","url_name":"uitapgesturerecognizer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"irb","url_name":"irb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"トラックポイント","url_name":"%e3%83%88%e3%83%a9%e3%83%83%e3%82%af%e3%83%9d%e3%82%a4%e3%83%b3%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"grunt","url_name":"grunt","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ec23dd49575116d969b9f2fc414533279c4a57fb/medium.jpg?1383884338","follower_count":170,"item_count":189},{"name":"twitter-bootstrap-rails","url_name":"twitter-bootstrap-rails","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"min_record","url_name":"min_record","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Geb","url_name":"geb","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":6},{"name":"route-me","url_name":"route-me","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Plagger","url_name":"plagger","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"GoogleMaps","url_name":"googlemaps","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":1},{"name":"yasnippet","url_name":"yasnippet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GSON","url_name":"gson","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"HttpServer","url_name":"httpserver","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"d3","url_name":"d3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/264ccc3970c86ac2186d7883cbd22c92460d8f3e/medium.jpg?1403947690","follower_count":29,"item_count":6},{"name":"campfire","url_name":"campfire","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"qiiita","url_name":"qiiita","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mkd","url_name":"mkd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Fiddler","url_name":"fiddler","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"iPhone5","url_name":"iphone5","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"MobileSafari","url_name":"mobilesafari","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"FOOBAR","url_name":"foobar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"alias","url_name":"alias","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"glacier","url_name":"glacier","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"書きかけ","url_name":"%e6%9b%b8%e3%81%8d%e3%81%8b%e3%81%91","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"aa","url_name":"aa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"2ch","url_name":"2ch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"[test]","url_name":"%5btest%5d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ransack","url_name":"ransack","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"merge","url_name":"merge","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"Fuga","url_name":"fuga","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Hago","url_name":"hago","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Apex","url_name":"apex","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7479479bab07334e880e2ae1411756c95008a1b0/medium.jpg?1395458783","follower_count":7,"item_count":6},{"name":"JavaScirpt","url_name":"javascirpt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"RubyGem","url_name":"rubygem","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"Visualforce","url_name":"visualforce","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4243a693efbf37e46ce53c81b2a157e99fac8efc/medium.jpg?1395458818","follower_count":6,"item_count":5},{"name":"QiitaAPI","url_name":"qiitaapi","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":23},{"name":"Julius","url_name":"julius","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":7},{"name":"音声解析","url_name":"%e9%9f%b3%e5%a3%b0%e8%a7%a3%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"qiita_hackathon","url_name":"qiita_hackathon","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"default","url_name":"default","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Dash","url_name":"dash","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":8},{"name":"jkiita","url_name":"jkiita","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sublime","url_name":"sublime","icon_url":"/icons/medium/missing.png","follower_count":66,"item_count":15},{"name":"タグテスト","url_name":"%e3%82%bf%e3%82%b0%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"イベント","url_name":"%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"オブラブ","url_name":"%e3%82%aa%e3%83%96%e3%83%a9%e3%83%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DotNetFramework","url_name":"dotnetframework","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"lvm","url_name":"lvm","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"qemu-img","url_name":"qemu-img","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ディスク拡張","url_name":"%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e6%8b%a1%e5%bc%b5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Import","url_name":"import","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Require","url_name":"require","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"load","url_name":"load","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"module","url_name":"module","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"音楽","url_name":"%e9%9f%b3%e6%a5%bd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"select","url_name":"select","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"color","url_name":"color","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"theme","url_name":"theme","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":16},{"name":"GoogleChrome","url_name":"googlechrome","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":12},{"name":"Remote","url_name":"remote","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"SunOS","url_name":"sunos","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ECMAScript","url_name":"ecmascript","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":16},{"name":"Google+","url_name":"google%2b","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"HogeScript","url_name":"hogescript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Fugagengo","url_name":"fugagengo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"illustrator","url_name":"illustrator","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e1c69c0e9520688d069aef4c60321a7f0e1ff19c/medium.jpg?1406099178","follower_count":10,"item_count":14},{"name":"jinja2","url_name":"jinja2","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"uBLAS","url_name":"ublas","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ViennaCL","url_name":"viennacl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"VC++","url_name":"vc%2b%2b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"CString","url_name":"cstring","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MFC","url_name":"mfc","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"Pike","url_name":"pike","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"addon","url_name":"addon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"翻訳メモ","url_name":"%e7%bf%bb%e8%a8%b3%e3%83%a1%e3%83%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SELinux","url_name":"selinux","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d859da716818bc1d79ba6abd2bda3fa0537483b0/medium.jpg?1388377893","follower_count":6,"item_count":10},{"name":"CUI","url_name":"cui","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":9},{"name":"sbt","url_name":"sbt","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":43},{"name":"Buster.JS","url_name":"buster.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"perlbrew","url_name":"perlbrew","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"ufw","url_name":"ufw","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"root","url_name":"root","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"coldfusion","url_name":"coldfusion","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"rtf","url_name":"rtf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"txt","url_name":"txt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"nvm","url_name":"nvm","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"gon","url_name":"gon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"paperclip","url_name":"paperclip","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":13},{"name":"CATiledLayer","url_name":"catiledlayer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"キャッシュ","url_name":"%e3%82%ad%e3%83%a3%e3%83%83%e3%82%b7%e3%83%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ブラウザバック","url_name":"%e3%83%96%e3%83%a9%e3%82%a6%e3%82%b6%e3%83%90%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"C++-CLI","url_name":"c%2b%2b-cli","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Thrust","url_name":"thrust","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"jjjjjjjjj","url_name":"jjjjjjjjj","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"hive","url_name":"hive","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/33f115247d9d35897248afd1ac06c43bd7c00eb8/medium.jpg?1364840818","follower_count":16,"item_count":32},{"name":"text","url_name":"text","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"乱択アルゴリズム","url_name":"%e4%b9%b1%e6%8a%9e%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UIBarButton","url_name":"uibarbutton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UIBarButtonItem","url_name":"uibarbuttonitem","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ポインタ","url_name":"%e3%83%9d%e3%82%a4%e3%83%b3%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"URL短縮","url_name":"url%e7%9f%ad%e7%b8%ae","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Unicodeエスケープシーケンス形式","url_name":"unicode%e3%82%a8%e3%82%b9%e3%82%b1%e3%83%bc%e3%83%97%e3%82%b7%e3%83%bc%e3%82%b1%e3%83%b3%e3%82%b9%e5%bd%a2%e5%bc%8f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"DSL","url_name":"dsl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Wireshark","url_name":"wireshark","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":10},{"name":"CotEditor","url_name":"coteditor","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"コンテンツサーバー","url_name":"%e3%82%b3%e3%83%b3%e3%83%86%e3%83%b3%e3%83%84%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"VMwareFusion","url_name":"vmwarefusion","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":20},{"name":"aereal","url_name":"aereal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"websocket","url_name":"websocket","icon_url":"/icons/medium/missing.png","follower_count":24,"item_count":35},{"name":"nano","url_name":"nano","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"zepto.js","url_name":"zepto.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GoogleMap","url_name":"googlemap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"wget","url_name":"wget","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":16},{"name":"e-pTeX","url_name":"e-ptex","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"platex2e","url_name":"platex2e","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"isucon","url_name":"isucon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"link","url_name":"link","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"glog","url_name":"glog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"framework","url_name":"framework","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"laravel","url_name":"laravel","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1f6f0730250d7887f7e6e07ab42f4e10524cb37f/medium.jpg?1369785558","follower_count":158,"item_count":134},{"name":"jubatus","url_name":"jubatus","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/26e6192feff352a4b4d512b0260d415c5828b719/medium.jpg?1382434346","follower_count":4,"item_count":9},{"name":"Elixir","url_name":"elixir","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/6e0b49c8d70cd06c57386d923a8362fbaf71c233/medium.jpg?1364840830","follower_count":39,"item_count":32},{"name":"Sunspot","url_name":"sunspot","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Ajax","url_name":"ajax","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":45},{"name":"Heoku","url_name":"heoku","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/35fd8d918a542ad7a5ccb3c5cffad30442d70444/medium.jpg?1377166668","follower_count":5,"item_count":2},{"name":"ImageProcessing","url_name":"imageprocessing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"FlashDevelop","url_name":"flashdevelop","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"diff","url_name":"diff","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":13},{"name":"Word","url_name":"word","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/81d576f80db5fc41893fa3ee2db3df6471db3ec5/medium.jpg?1387915900","follower_count":4,"item_count":10},{"name":"koboto","url_name":"koboto","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Passbook","url_name":"passbook","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"pass","url_name":"pass","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"PassKit","url_name":"passkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"シリアル","url_name":"%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"RS232C","url_name":"rs232c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mina","url_name":"mina","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"redirect","url_name":"redirect","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SugarCRM","url_name":"sugarcrm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"t","url_name":"t","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"emmet","url_name":"emmet","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/77c5ecd15dd4098b8631dba8ef4613d52d214996/medium.jpg?1376667720","follower_count":12,"item_count":15},{"name":"ze-coding","url_name":"ze-coding","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jpmobile","url_name":"jpmobile","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"exif","url_name":"exif","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"exifr","url_name":"exifr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"aaa,bbb,ccc","url_name":"aaa%2cbbb%2cccc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"OpenJDK","url_name":"openjdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"scaka","url_name":"scaka","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"deriving","url_name":"deriving","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pacman","url_name":"pacman","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/71f771d2a220794150de403b511668f56625fc9e/medium.jpg?1388310591","follower_count":0,"item_count":2},{"name":"yaourt","url_name":"yaourt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"fbterm","url_name":"fbterm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"お名前.com","url_name":"%e3%81%8a%e5%90%8d%e5%89%8d.com","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"住宅","url_name":"%e4%bd%8f%e5%ae%85","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ccchart","url_name":"ccchart","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":7},{"name":"ツンデレ","url_name":"%e3%83%84%e3%83%b3%e3%83%87%e3%83%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"バッドノウハウ","url_name":"%e3%83%90%e3%83%83%e3%83%89%e3%83%8e%e3%82%a6%e3%83%8f%e3%82%a6","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":10},{"name":"Android Emulator","url_name":"android%c2%a0emulator","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ohai","url_name":"ohai","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Alfred","url_name":"alfred","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":18},{"name":"dstat","url_name":"dstat","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"growthforecast","url_name":"growthforecast","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":16},{"name":"haskellsynopsis","url_name":"haskellsynopsis","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":19},{"name":"ヤンデレ","url_name":"%e3%83%a4%e3%83%b3%e3%83%87%e3%83%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GMT","url_name":"gmt","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e9daef22a6f7ea4f548c2a057677a899d42f1f09/medium.jpg?1397785006","follower_count":1,"item_count":2},{"name":"Octave","url_name":"octave","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/237accb55f7fb3c2350023ecfa27cd995d80a610/medium.jpg?1396786692","follower_count":8,"item_count":16},{"name":"Scilab","url_name":"scilab","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Sage","url_name":"sage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"solr4.0","url_name":"solr4.0","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"ExcelVBA","url_name":"excelvba","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":17},{"name":"ROS","url_name":"ros","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a58377cff2bd816bb56d464aba06b2fafe690ae7/medium.jpg?1364840852","follower_count":12,"item_count":12},{"name":"AngularJS","url_name":"angularjs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ec867ea63f5f23d3235188dbd48a5195dcc7680e/medium.jpg?1395746077","follower_count":596,"item_count":341},{"name":"ExtJS","url_name":"extjs","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":15},{"name":"Siesta","url_name":"siesta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Hibernate","url_name":"hibernate","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":10},{"name":"autoreload","url_name":"autoreload","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"uwsgi","url_name":"uwsgi","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":6},{"name":"TemplateHaskell","url_name":"templatehaskell","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"GoogleChartAPI","url_name":"googlechartapi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"SKK","url_name":"skk","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":8},{"name":"AquaSKK","url_name":"aquaskk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SKK日本語入力FEP","url_name":"skk%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9bfep","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PCLJP","url_name":"pcljp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"pointcloudlibrary","url_name":"pointcloudlibrary","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pastebin","url_name":"pastebin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"moped","url_name":"moped","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Xlib","url_name":"xlib","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"neosnippet","url_name":"neosnippet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"cancan","url_name":"cancan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mariadb","url_name":"mariadb","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/56e02826427d5fe03b10d2a887dc819c2431fba9/medium.jpg?1388311226","follower_count":24,"item_count":44},{"name":"Yii","url_name":"yii","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5eb3d84eaedba6e8a187ddfe47fce487f55393c4/medium.jpg?1364966013","follower_count":27,"item_count":39},{"name":"Win32","url_name":"win32","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"hash","url_name":"hash","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"md5","url_name":"md5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"sha1","url_name":"sha1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Marked","url_name":"marked","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"AnyEvent","url_name":"anyevent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"AHK","url_name":"ahk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"PHPExcel","url_name":"phpexcel","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"置換","url_name":"%e7%bd%ae%e6%8f%9b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"IDE","url_name":"ide","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"ICU","url_name":"icu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Emscripten","url_name":"emscripten","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":15},{"name":"setting","url_name":"setting","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sciruby","url_name":"sciruby","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"tech","url_name":"tech","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GoogleMapsAPI","url_name":"googlemapsapi","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9db34c1e03207653237b7f088846163d4c8db295/medium.jpg?1368689023","follower_count":19,"item_count":63},{"name":"CR","url_name":"cr","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"LF","url_name":"lf","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"ghc","url_name":"ghc","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f978c719aeee60226d507d6e49de9307a33eb3df/medium.jpg?1394634360","follower_count":5,"item_count":16},{"name":"MDN","url_name":"mdn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"elementFromPoint","url_name":"elementfrompoint","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"d3forum","url_name":"d3forum","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"自然言語処理","url_name":"%e8%87%aa%e7%84%b6%e8%a8%80%e8%aa%9e%e5%87%a6%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":22,"item_count":27},{"name":"データマイニング","url_name":"%e3%83%87%e3%83%bc%e3%82%bf%e3%83%9e%e3%82%a4%e3%83%8b%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":4},{"name":"会社設立","url_name":"%e4%bc%9a%e7%a4%be%e8%a8%ad%e7%ab%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ppworks","url_name":"ppworks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PowerPoint","url_name":"powerpoint","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"presentation","url_name":"presentation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"lifehack","url_name":"lifehack","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"xdotool","url_name":"xdotool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sublime_text_2","url_name":"sublime_text_2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"st2","url_name":"st2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AB","url_name":"ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rarara","url_name":"rarara","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Jackson","url_name":"jackson","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"tableView","url_name":"tableview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"GEXF","url_name":"gexf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tiddlywiki","url_name":"tiddlywiki","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"老眼","url_name":"%e8%80%81%e7%9c%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"D","url_name":"d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GDI+","url_name":"gdi%2b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AdobeAIR","url_name":"adobeair","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":10},{"name":"Stage3D","url_name":"stage3d","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"ruby2.0","url_name":"ruby2.0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"cobol","url_name":"cobol","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Cabal","url_name":"cabal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"collectionView","url_name":"collectionview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Joomla!","url_name":"joomla%21","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/e11a282401ac890c3c0bb9cb4a8debf40828f891/medium.jpg?1373416821","follower_count":2,"item_count":2},{"name":"Beanstalk","url_name":"beanstalk","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":6},{"name":"GoogleV8JavaScriptEngine","url_name":"googlev8javascriptengine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"phpmd","url_name":"phpmd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"hentekoのdev日記","url_name":"henteko%e3%81%aedev%e6%97%a5%e8%a8%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"はてなブログ","url_name":"%e3%81%af%e3%81%a6%e3%81%aa%e3%83%96%e3%83%ad%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"UserStream","url_name":"userstream","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PRML","url_name":"prml","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1efaadf7769c67d43d15c46474c1bcb028a86270/medium.jpg?1395227291","follower_count":23,"item_count":40},{"name":"サーバ構築","url_name":"%e3%82%b5%e3%83%bc%e3%83%90%e6%a7%8b%e7%af%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CentOS6.3","url_name":"centos6.3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Symfony2","url_name":"symfony2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/af70312a5269d68f9f829e990b7271a48e8f3197/medium.jpg?1364840893","follower_count":42,"item_count":71},{"name":"siege","url_name":"siege","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"Symfony2.1","url_name":"symfony2.1","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Symphony","url_name":"symphony","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"googleapi","url_name":"googleapi","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":7},{"name":"Ruby-Rails","url_name":"ruby-rails","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"チカチカ","url_name":"%e3%83%81%e3%82%ab%e3%83%81%e3%82%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Trac","url_name":"trac","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/40a28e271296fb69e8a9720a37ddbe02e6fa3856/medium.jpg?1392795257","follower_count":7,"item_count":13},{"name":"RDBMS","url_name":"rdbms","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"appMobi","url_name":"appmobi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"c5","url_name":"c5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"org-mode","url_name":"org-mode","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/03d68c9fabba1a77b8bd49dbfdf5a8765a1cbf09/medium.jpg?1364840903","follower_count":24,"item_count":20},{"name":"xmind","url_name":"xmind","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"dlang","url_name":"dlang","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/094f72fd99d84da2d88d06bcfa2b20111addacde/medium.jpg?1364840922","follower_count":78,"item_count":77},{"name":"TortoiseHg","url_name":"tortoisehg","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"Perl6","url_name":"perl6","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/929247c4bafc1f29a077a34187eb3e137dc47a8b/medium.jpg?1364840937","follower_count":3,"item_count":11},{"name":"型クラス","url_name":"%e5%9e%8b%e3%82%af%e3%83%a9%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Instance","url_name":"instance","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Metal","url_name":"metal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"xoopscube","url_name":"xoopscube","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":23},{"name":"Ethna","url_name":"ethna","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":11},{"name":"GoogleCloudMessaging","url_name":"googlecloudmessaging","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"リーダマクロ","url_name":"%e3%83%aa%e3%83%bc%e3%83%80%e3%83%9e%e3%82%af%e3%83%ad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DocAdventJP","url_name":"docadventjp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CGridView","url_name":"cgridview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"LIBSVM","url_name":"libsvm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"海田はいいけどやっぱ微妙でした","url_name":"%e6%b5%b7%e7%94%b0%e3%81%af%e3%81%84%e3%81%84%e3%81%91%e3%81%a9%e3%82%84%e3%81%a3%e3%81%b1%e5%be%ae%e5%a6%99%e3%81%a7%e3%81%97%e3%81%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"書いたはいいけどやっぱ微妙でした","url_name":"%e6%9b%b8%e3%81%84%e3%81%9f%e3%81%af%e3%81%84%e3%81%84%e3%81%91%e3%81%a9%e3%82%84%e3%81%a3%e3%81%b1%e5%be%ae%e5%a6%99%e3%81%a7%e3%81%97%e3%81%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Option","url_name":"option","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"case","url_name":"case","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"qunit","url_name":"qunit","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":3},{"name":"ange-ftp","url_name":"ange-ftp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"コマンドライン","url_name":"%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Advent","url_name":"advent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dvi","url_name":"dvi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SBCL","url_name":"sbcl","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":11},{"name":"backborn.js","url_name":"backborn.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CentOS5","url_name":"centos5","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"reportlab","url_name":"reportlab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"hardware","url_name":"hardware","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"UEC","url_name":"uec","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"休講情報","url_name":"%e4%bc%91%e8%ac%9b%e6%83%85%e5%a0%b1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"submodularity","url_name":"submodularity","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NodeNinja","url_name":"nodeninja","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"ZCloud","url_name":"zcloud","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"agile","url_name":"agile","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":15},{"name":"qiita_issue","url_name":"qiita_issue","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Tarminal","url_name":"tarminal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RadiantCMS","url_name":"radiantcms","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jslitmus","url_name":"jslitmus","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"HAS_MANY","url_name":"has_many","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"TBB","url_name":"tbb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"therubyracer","url_name":"therubyracer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Capy","url_name":"capy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SAS","url_name":"sas","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":1},{"name":"confluence","url_name":"confluence","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":6},{"name":"skype","url_name":"skype","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"jmock","url_name":"jmock","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"testing","url_name":"testing","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":35},{"name":"DTrace","url_name":"dtrace","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NIPS","url_name":"nips","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ML","url_name":"ml","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"modo","url_name":"modo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MethodSwizzling","url_name":"methodswizzling","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"faceook","url_name":"faceook","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Boo","url_name":"boo","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/674c0383e9e2a6c2d28cabd1c5cf4ac97081a238/medium.jpg?1370243594","follower_count":9,"item_count":18},{"name":"konami","url_name":"konami","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mono","url_name":"mono","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":13},{"name":"moo","url_name":"moo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tset","url_name":"tset","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"端末エミュレーション","url_name":"%e7%ab%af%e6%9c%ab%e3%82%a8%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"GPU","url_name":"gpu","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"NVIDIA","url_name":"nvidia","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"LLVM","url_name":"llvm","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bd2381e740f44d4f984fbc58a5b7787eb74d7998/medium.jpg?1394638692","follower_count":10,"item_count":20},{"name":"機械学習","url_name":"%e6%a9%9f%e6%a2%b0%e5%ad%a6%e7%bf%92","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a94d4d239b3b0b83723d5b56c050ffc54b8593e7/medium.jpg?1394635775","follower_count":150,"item_count":80},{"name":"bonfire","url_name":"bonfire","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jira","url_name":"jira","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":19},{"name":"greenhopper","url_name":"greenhopper","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"XOOPSCubeLegacy","url_name":"xoopscubelegacy","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":17},{"name":"pebbles","url_name":"pebbles","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"識別学習","url_name":"%e8%ad%98%e5%88%a5%e5%ad%a6%e7%bf%92","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"puma","url_name":"puma","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"TreasureData","url_name":"treasuredata","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/566030e5bea00ca9cb5fde09e26eb47cd641bb61/medium.jpg?1364840957","follower_count":20,"item_count":21},{"name":"pukiwiki","url_name":"pukiwiki","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"modeling","url_name":"modeling","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"UV","url_name":"uv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"refinements","url_name":"refinements","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"hipchat","url_name":"hipchat","icon_url":"/icons/medium/missing.png","follower_count":25,"item_count":24},{"name":"CloudWatch","url_name":"cloudwatch","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":25},{"name":"NLP","url_name":"nlp","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":11},{"name":"Blender","url_name":"blender","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9c446eb5e04d19aae0cbad19d81c2e88750135c4/medium.jpg?1398258621","follower_count":19,"item_count":19},{"name":"DatePicker","url_name":"datepicker","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"DDSKK","url_name":"ddskk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"bing","url_name":"bing","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c8bf489a6590a28c71921facabe748a3d0e49651/medium.jpg?1395328865","follower_count":1,"item_count":1},{"name":"Doctrine2","url_name":"doctrine2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4c345e599003a4d85028879f9fdef4f313e20c9c/medium.jpg?1364840970","follower_count":5,"item_count":12},{"name":"VM","url_name":"vm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ComputerVision","url_name":"computervision","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"openFramworks","url_name":"openframworks","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"ExcelDNA","url_name":"exceldna","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"#UEC","url_name":"%23uec","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"#OS論","url_name":"%23os%e8%ab%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"idiom","url_name":"idiom","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sidekiq","url_name":"sidekiq","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":11},{"name":"英語","url_name":"%e8%8b%b1%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"himekyun","url_name":"himekyun","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Java,FizzBuzz","url_name":"java%2cfizzbuzz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tag","url_name":"tag","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-2},{"name":"SiON","url_name":"sion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ICPC","url_name":"icpc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RubyOnRails","url_name":"rubyonrails","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":57},{"name":"lang_en","url_name":"lang_en","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"lang-en","url_name":"lang-en","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"tmp","url_name":"tmp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"GData","url_name":"gdata","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"突然の死","url_name":"%e7%aa%81%e7%84%b6%e3%81%ae%e6%ad%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ebisu.rb","url_name":"ebisu.rb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gnuplot","url_name":"gnuplot","icon_url":"/icons/medium/missing.png","follower_count":14,"item_count":29},{"name":"keyremap4macbook","url_name":"keyremap4macbook","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":16},{"name":"GoogleClosureLibrary","url_name":"googleclosurelibrary","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"history","url_name":"history","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"MachineLearning","url_name":"machinelearning","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b85c97772bddbfbb48a8b116669349c7ec92e4bf/medium.jpg?1395227038","follower_count":36,"item_count":39},{"name":"SCW","url_name":"scw","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ARM","url_name":"arm","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":11},{"name":"riak","url_name":"riak","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d80c34b0a16e17fb37a9d2e87022217cd2838080/medium.jpg?1387373754","follower_count":37,"item_count":60},{"name":"praat","url_name":"praat","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"pjax","url_name":"pjax","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"igv","url_name":"igv","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"slot","url_name":"slot","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"codeiq","url_name":"codeiq","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a41386b1ce10151225b40f5e0ec75edb866b7d4f/medium.jpg?1407333267","follower_count":7,"item_count":20},{"name":"GoogleMapAPI","url_name":"googlemapapi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Alloy","url_name":"alloy","icon_url":"/icons/medium/missing.png","follower_count":19,"item_count":26},{"name":"Bootcamp","url_name":"bootcamp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"scala_kansai_beginners","url_name":"scala_kansai_beginners","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"du","url_name":"du","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RequireJS","url_name":"requirejs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/449872b71eb7b2ddf8acc83976f7e3c520ad38b3/medium.jpg?1398175888","follower_count":13,"item_count":19},{"name":"mocha","url_name":"mocha","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":24},{"name":"デュアルディスプレイ","url_name":"%e3%83%87%e3%83%a5%e3%82%a2%e3%83%ab%e3%83%87%e3%82%a3%e3%82%b9%e3%83%97%e3%83%ac%e3%82%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"液晶ディスプレイ","url_name":"%e6%b6%b2%e6%99%b6%e3%83%87%e3%82%a3%e3%82%b9%e3%83%97%e3%83%ac%e3%82%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"モニター","url_name":"%e3%83%a2%e3%83%8b%e3%82%bf%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ProjectEuler","url_name":"projecteuler","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"graph","url_name":"graph","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"iGraph","url_name":"igraph","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"kftaqiitatest","url_name":"kftaqiitatest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"てst","url_name":"%e3%81%a6%ef%bd%93%ef%bd%94","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Make","url_name":"make","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"phpcs","url_name":"phpcs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"webinspector","url_name":"webinspector","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Swing","url_name":"swing","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"RhodeCode","url_name":"rhodecode","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"hadoopAC12jp","url_name":"hadoopac12jp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ruby1.0","url_name":"ruby1.0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Alexandria","url_name":"alexandria","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"焼きなまし法","url_name":"%e7%84%bc%e3%81%8d%e3%81%aa%e3%81%be%e3%81%97%e6%b3%95","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"capitsrano","url_name":"capitsrano","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"hubot-twitter","url_name":"hubot-twitter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Akka","url_name":"akka","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":8},{"name":"kanazawa.rb","url_name":"kanazawa.rb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"scikit-learn","url_name":"scikit-learn","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":26},{"name":"DRagon","url_name":"dragon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DeepLearning","url_name":"deeplearning","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":4},{"name":"Theano","url_name":"theano","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"flash_builder","url_name":"flash_builder","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"PASTE64","url_name":"paste64","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"OSC52","url_name":"osc52","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"hg","url_name":"hg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Wiser","url_name":"wiser","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"barkeep","url_name":"barkeep","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"controller","url_name":"controller","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"配列","url_name":"%e9%85%8d%e5%88%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"連想配列","url_name":"%e9%80%a3%e6%83%b3%e9%85%8d%e5%88%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"自動デプロイ","url_name":"%e8%87%aa%e5%8b%95%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SnakeYAML","url_name":"snakeyaml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"b","url_name":"b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Rai","url_name":"rai","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Rais","url_name":"rais","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WebNotification","url_name":"webnotification","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"iOS,jQuery","url_name":"ios%2cjquery","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Smalltalk","url_name":"smalltalk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"TI","url_name":"ti","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"VimFiler","url_name":"vimfiler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Twitter_BootStrap","url_name":"twitter_bootstrap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"OpenWeatherMap","url_name":"openweathermap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Linepop","url_name":"linepop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Line","url_name":"line","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"twitter-bootstrap","url_name":"twitter-bootstrap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"tet","url_name":"tet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"daemon","url_name":"daemon","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"rc","url_name":"rc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dragonfly","url_name":"dragonfly","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"lod","url_name":"lod","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"rdfstore","url_name":"rdfstore","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NSTextView","url_name":"nstextview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"unittest","url_name":"unittest","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"GHUnit","url_name":"ghunit","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":10},{"name":"arnesi","url_name":"arnesi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"SocialButton","url_name":"socialbutton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"lang","url_name":"lang","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Practice","url_name":"practice","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":17},{"name":"シミュレーション","url_name":"%e3%82%b7%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"確率・統計","url_name":"%e7%a2%ba%e7%8e%87%e3%83%bb%e7%b5%b1%e8%a8%88","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"RubyMine","url_name":"rubymine","icon_url":"/icons/medium/missing.png","follower_count":25,"item_count":42},{"name":"pwgen","url_name":"pwgen","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"feedparser","url_name":"feedparser","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"validate","url_name":"validate","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"fog","url_name":"fog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"音声合成","url_name":"%e9%9f%b3%e5%a3%b0%e5%90%88%e6%88%90","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"日本語","url_name":"%e6%97%a5%e6%9c%ac%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"キー操作","url_name":"%e3%82%ad%e3%83%bc%e6%93%8d%e4%bd%9c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"非同期処理","url_name":"%e9%9d%9e%e5%90%8c%e6%9c%9f%e5%87%a6%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"数学","url_name":"%e6%95%b0%e5%ad%a6","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":19},{"name":"obj-c","url_name":"obj-c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"weechat","url_name":"weechat","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"ggplot2","url_name":"ggplot2","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":15},{"name":"Automator","url_name":"automator","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":15},{"name":"xz","url_name":"xz","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"s","url_name":"%ef%bd%93","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"zip","url_name":"zip","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"CUnit","url_name":"cunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"HFS+","url_name":"hfs%2b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"OpenAL","url_name":"openal","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"SFML","url_name":"sfml","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"Parallel","url_name":"parallel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"calibre","url_name":"calibre","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Troubleshootings","url_name":"troubleshootings","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Troubleshooting","url_name":"troubleshooting","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"my","url_name":"my","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"process,port","url_name":"process%2cport","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NotificationCenter","url_name":"notificationcenter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"clock","url_name":"clock","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"clockwork","url_name":"clockwork","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"NSUserDefaults","url_name":"nsuserdefaults","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"tophat","url_name":"tophat","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Bioconductor","url_name":"bioconductor","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":14},{"name":"WinMerge","url_name":"winmerge","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"gzip","url_name":"gzip","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"CPPUnit","url_name":"cppunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"[groovy]","url_name":"%5bgroovy%5d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"git-flow","url_name":"git-flow","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":14},{"name":"AdBlock","url_name":"adblock","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MOGOK","url_name":"mogok","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"cocos2d-x","url_name":"cocos2d-x","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ecf21024154b4c294966f276e966375aa9bc1aae/medium.jpg?1370420695","follower_count":224,"item_count":188},{"name":"Fragment","url_name":"fragment","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"SVProgressHUDVProgressHUD","url_name":"svprogresshudvprogresshud","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Custom","url_name":"custom","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"自作PC","url_name":"%e8%87%aa%e4%bd%9cpc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"localization","url_name":"localization","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tumblife","url_name":"tumblife","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"redhat","url_name":"redhat","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"キー値監視","url_name":"%e3%82%ad%e3%83%bc%e5%80%a4%e7%9b%a3%e8%a6%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Shebang","url_name":"shebang","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"スロット","url_name":"%e3%82%b9%e3%83%ad%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ECMA-262","url_name":"ecma-262","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"defineProperty","url_name":"defineproperty","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TortoiseGit","url_name":"tortoisegit","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"Liquid","url_name":"liquid","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"ivar","url_name":"ivar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"private-property","url_name":"private-property","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"apple","url_name":"apple","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":9},{"name":"Fireworks","url_name":"fireworks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"upstart","url_name":"upstart","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"CocoaTouch","url_name":"cocoatouch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mutt","url_name":"mutt","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"trachet","url_name":"trachet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"restkit","url_name":"restkit","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Lubuntu","url_name":"lubuntu","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":14},{"name":"Parse","url_name":"parse","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/19f5a85f7d2836410130e76e958248d353369e4e/medium.jpg?1364840986","follower_count":47,"item_count":48},{"name":"Twisted","url_name":"twisted","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f9ad2872d0b6d7f913c25b1c9feb9828c6555f51/medium.jpg?1364840996","follower_count":0,"item_count":4},{"name":"BlocksKit","url_name":"blockskit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RDoc","url_name":"rdoc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"google-app-engine","url_name":"google-app-engine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"2.4.0","url_name":"2.4.0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tweetstream","url_name":"tweetstream","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"timemachine","url_name":"timemachine","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"adb","url_name":"adb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"commandline","url_name":"commandline","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"batch","url_name":"batch","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":22},{"name":"ngram","url_name":"ngram","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"takachanQA","url_name":"takachanqa","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Silex","url_name":"silex","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"neoagent","url_name":"neoagent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"magit","url_name":"magit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"IME","url_name":"ime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"SPDY","url_name":"spdy","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":13},{"name":"j2objc","url_name":"j2objc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"helm","url_name":"helm","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"RAID","url_name":"raid","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"knockoutjs","url_name":"knockoutjs","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/0ed42f825d6b10d5cb4255f6ec1640a6416c28de/medium.jpg?1387905765","follower_count":60,"item_count":49},{"name":"Xvfb","url_name":"xvfb","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"YAML","url_name":"yaml","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":16},{"name":"cookie","url_name":"cookie","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"input","url_name":"input","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"TransmitMail","url_name":"transmitmail","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mod_wsgi","url_name":"mod_wsgi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"xhprof","url_name":"xhprof","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"GCD","url_name":"gcd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"バグ","url_name":"%e3%83%90%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"IE9","url_name":"ie9","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"webfont","url_name":"webfont","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":14},{"name":"IE10","url_name":"ie10","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"RabbitMQ","url_name":"rabbitmq","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":12},{"name":"tag2","url_name":"tag2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tag1","url_name":"tag1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CoronaSDK","url_name":"coronasdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"turbo-sprokets","url_name":"turbo-sprokets","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"slideshare","url_name":"slideshare","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"tokyor","url_name":"tokyor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ProofCafe","url_name":"proofcafe","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/582950818e218e87bd03d3e73fa7186ea71e9114/medium.jpg?1367426764","follower_count":2,"item_count":4},{"name":"pkg-config","url_name":"pkg-config","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Pinax","url_name":"pinax","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"iscroll","url_name":"iscroll","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"chefspec","url_name":"chefspec","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":8},{"name":"openstack","url_name":"openstack","icon_url":"/icons/medium/missing.png","follower_count":41,"item_count":17},{"name":"vmstat","url_name":"vmstat","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"タイトルだよ","url_name":"%e3%82%bf%e3%82%a4%e3%83%88%e3%83%ab%e3%81%a0%e3%82%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"routes.rb","url_name":"routes.rb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Leinigen","url_name":"leinigen","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UIButton","url_name":"uibutton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Cinnamon","url_name":"cinnamon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CORESERVER","url_name":"coreserver","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"UIAnimation","url_name":"uianimation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AudioToolbox","url_name":"audiotoolbox","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"GGJ2013","url_name":"ggj2013","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"カントリー様","url_name":"%e3%82%ab%e3%83%b3%e3%83%88%e3%83%aa%e3%83%bc%e6%a7%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"unit-test","url_name":"unit-test","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"ctags","url_name":"ctags","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":13},{"name":"spideroak","url_name":"spideroak","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PluginACL","url_name":"pluginacl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Vine","url_name":"vine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"nanoc","url_name":"nanoc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Putty","url_name":"putty","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"ASP.NET_Web_Pages","url_name":"asp.net_web_pages","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"WebMatrix","url_name":"webmatrix","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ccchar","url_name":"ccchar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"TechBuzz","url_name":"techbuzz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RasberryPI","url_name":"rasberrypi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"optimizely","url_name":"optimizely","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"browser","url_name":"browser","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"gasja","url_name":"gasja","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":13},{"name":"yamaha","url_name":"yamaha","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ABtesting","url_name":"abtesting","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":6},{"name":"code_reading","url_name":"code_reading","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"image","url_name":"image","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"wavelet","url_name":"wavelet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"hello-world","url_name":"hello-world","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"on","url_name":"on","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"EvenetHandler","url_name":"evenethandler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"paco","url_name":"paco","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"middleman","url_name":"middleman","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/97f7b3e222e4a150750b41bff7275e795d7881b7/medium.jpg?1403429175","follower_count":36,"item_count":44},{"name":"サーバ","url_name":"%e3%82%b5%e3%83%bc%e3%83%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Rails4","url_name":"rails4","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3b84f31447b66504066e50963030ff52d22461b6/medium.jpg?1407332005","follower_count":20,"item_count":132},{"name":"Attribute","url_name":"attribute","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CoreFoundation","url_name":"corefoundation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"nascala","url_name":"nascala","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"日付","url_name":"%e6%97%a5%e4%bb%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"NSString","url_name":"nsstring","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"NSDate","url_name":"nsdate","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"coderay","url_name":"coderay","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"cedar","url_name":"cedar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"静的ページ","url_name":"%e9%9d%99%e7%9a%84%e3%83%9a%e3%83%bc%e3%82%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"develop","url_name":"develop","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Validation","url_name":"validation","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"bookmarklet","url_name":"bookmarklet","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":26},{"name":"手順","url_name":"%e6%89%8b%e9%a0%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"StackOverflow","url_name":"stackoverflow","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/88a6753a605c538c27fb7952a0444a6a09358a7a/medium.jpg?1364841010","follower_count":0,"item_count":10},{"name":"GitExtensions","url_name":"gitextensions","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/04fc7377b8db2874e6de58906e7f650055033bb7/medium.jpg?1387470439","follower_count":3,"item_count":3},{"name":"neo4j","url_name":"neo4j","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"sftp","url_name":"sftp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"Roslyn","url_name":"roslyn","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":2},{"name":"はてな","url_name":"%e3%81%af%e3%81%a6%e3%81%aa","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"OpenID","url_name":"openid","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"tcpdump","url_name":"tcpdump","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"actor","url_name":"actor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"制御系","url_name":"%e5%88%b6%e5%be%a1%e7%b3%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"文字ずれ","url_name":"%e6%96%87%e5%ad%97%e3%81%9a%e3%82%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ionice","url_name":"ionice","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"msgpack","url_name":"msgpack","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"openswan","url_name":"openswan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"x2ltpd","url_name":"x2ltpd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ipsec","url_name":"ipsec","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"l2tp","url_name":"l2tp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"meinheld","url_name":"meinheld","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SPARC","url_name":"sparc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"kernel","url_name":"kernel","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":16},{"name":"Objective-C++","url_name":"objective-c%2b%2b","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Xaml","url_name":"xaml","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":10},{"name":"japanese","url_name":"japanese","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"phabricator","url_name":"phabricator","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"画像処理ツール","url_name":"%e7%94%bb%e5%83%8f%e5%87%a6%e7%90%86%e3%83%84%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"statistics","url_name":"statistics","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5d1e309c4a0a4a3137569932976997f2518852f7/medium.jpg?1395228797","follower_count":24,"item_count":43},{"name":"AirRecord","url_name":"airrecord","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"google_spread_sheets","url_name":"google_spread_sheets","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"antena","url_name":"antena","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"cs","url_name":"cs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CoreGraphics","url_name":"coregraphics","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"LTSV","url_name":"ltsv","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":17},{"name":"uncrustify","url_name":"uncrustify","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":16},{"name":"topaz","url_name":"topaz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"textEditer","url_name":"textediter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"metaprogramming","url_name":"metaprogramming","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Beagleboard","url_name":"beagleboard","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Ibus","url_name":"ibus","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Mozc","url_name":"mozc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"解説編","url_name":"%e8%a7%a3%e8%aa%ac%e7%b7%a8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"benchmark","url_name":"benchmark","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"公開","url_name":"%e5%85%ac%e9%96%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"今日の学び","url_name":"%e4%bb%8a%e6%97%a5%e3%81%ae%e5%ad%a6%e3%81%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tsd","url_name":"tsd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"fiber","url_name":"fiber","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"bower","url_name":"bower","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/06806245cdddd0ec2013b913be1bf3ac5a5628a0/medium.jpg?1401965961","follower_count":37,"item_count":50},{"name":"Splashtop","url_name":"splashtop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SplashtoStreamer","url_name":"splashtostreamer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"RemoteDesktop","url_name":"remotedesktop","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"LinuxMint","url_name":"linuxmint","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"質問","url_name":"%e8%b3%aa%e5%95%8f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"mvc","url_name":"mvc","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"Kitabatake","url_name":"kitabatake","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"失敗","url_name":"%e5%a4%b1%e6%95%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mirage","url_name":"mirage","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"MacAppStore","url_name":"macappstore","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Keyboard","url_name":"keyboard","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":14},{"name":"AutoLayout","url_name":"autolayout","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":12},{"name":"Grand_Central_Dispatch","url_name":"grand_central_dispatch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FaCV","url_name":"facv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AdNetwork","url_name":"adnetwork","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"レポート","url_name":"%e3%83%ac%e3%83%9d%e3%83%bc%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"東京Ruby会議","url_name":"%e6%9d%b1%e4%ba%acruby%e4%bc%9a%e8%ad%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"thin","url_name":"thin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"マルチスレッド","url_name":"%e3%83%9e%e3%83%ab%e3%83%81%e3%82%b9%e3%83%ac%e3%83%83%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Surface","url_name":"surface","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"SurfacePro","url_name":"surfacepro","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"sublime_text","url_name":"sublime_text","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"sshd","url_name":"sshd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"CircleCI","url_name":"circleci","icon_url":"/icons/medium/missing.png","follower_count":11,"item_count":14},{"name":"generator","url_name":"generator","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"ライブコーディング","url_name":"%e3%83%a9%e3%82%a4%e3%83%96%e3%82%b3%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"AGAL","url_name":"agal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ATF","url_name":"atf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"testacular","url_name":"testacular","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"grunt.js","url_name":"grunt.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/068ca4d19cd63ce7d01c5e59e36c697ee2da4ed0/medium.jpg?1364841029","follower_count":39,"item_count":60},{"name":"Dreamweaver","url_name":"dreamweaver","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"chrome-extension","url_name":"chrome-extension","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":54},{"name":"persistent","url_name":"persistent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Hibari","url_name":"hibari","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Vimチートシート","url_name":"vim%e3%83%81%e3%83%bc%e3%83%88%e3%82%b7%e3%83%bc%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"JWK","url_name":"jwk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"JWT","url_name":"jwt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"friendly_id","url_name":"friendly_id","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"OUYA","url_name":"ouya","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Cobertura","url_name":"cobertura","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"BIOS","url_name":"bios","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DELL","url_name":"dell","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"devsumi","url_name":"devsumi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"マニュアル","url_name":"%e3%83%9e%e3%83%8b%e3%83%a5%e3%82%a2%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FPGA","url_name":"fpga","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"組み込み開発","url_name":"%e7%b5%84%e3%81%bf%e8%be%bc%e3%81%bf%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"入門","url_name":"%e5%85%a5%e9%96%80","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"caching","url_name":"caching","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"assets","url_name":"assets","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mysql5.6","url_name":"mysql5.6","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"sysbench","url_name":"sysbench","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"brainstorm","url_name":"brainstorm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ipf","url_name":"ipf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Mechanize","url_name":"mechanize","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"AmazonLinux","url_name":"amazonlinux","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":32},{"name":"splite3","url_name":"splite3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"processing.js","url_name":"processing.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/04e8ad03e40632482fef44d1c18b78e96d2b77dd/medium.jpg?1368425703","follower_count":5,"item_count":3},{"name":"Cakefile","url_name":"cakefile","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"airbrake","url_name":"airbrake","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Firebug","url_name":"firebug","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"td","url_name":"td","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ポエム","url_name":"%e3%83%9d%e3%82%a8%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":4},{"name":"rroonga","url_name":"rroonga","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f02901e45a30793e816178fb0c3aa2a606ff24df/medium.jpg?1364841044","follower_count":5,"item_count":9},{"name":"JailBreak","url_name":"jailbreak","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ec","url_name":"ec","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"さくらVPS","url_name":"%e3%81%95%e3%81%8f%e3%82%89vps","icon_url":"/icons/medium/missing.png","follower_count":25,"item_count":38},{"name":"ネタ","url_name":"%e3%83%8d%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":14},{"name":"testling","url_name":"testling","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ReactiveCocoa","url_name":"reactivecocoa","icon_url":"/icons/medium/missing.png","follower_count":18,"item_count":16},{"name":"watch","url_name":"watch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"angular","url_name":"angular","icon_url":"/icons/medium/missing.png","follower_count":35,"item_count":10},{"name":"DMARC","url_name":"dmarc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"セキュリティ","url_name":"%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8142033b6b7d4b556610e8219ee8f80788154823/medium.jpg?1409291994","follower_count":27,"item_count":46},{"name":"xargs","url_name":"xargs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Elasticsearch","url_name":"elasticsearch","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4e99cae0907b091a58f8782fa83d4ef5b6f13409/medium.jpg?1373503782","follower_count":121,"item_count":104},{"name":"lucene","url_name":"lucene","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":2},{"name":"huffyuv","url_name":"huffyuv","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Couchbase","url_name":"couchbase","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"nosql","url_name":"nosql","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"awesome","url_name":"awesome","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bd9bd7fd0138a57d71b8f613c66ba5cd2b9a43ea/medium.jpg?1388310700","follower_count":1,"item_count":7},{"name":"express-partials","url_name":"express-partials","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mime","url_name":"mime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cocos2d-iphone","url_name":"cocos2d-iphone","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"gearman","url_name":"gearman","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"strong_parameters","url_name":"strong_parameters","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"vmplayer","url_name":"vmplayer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ニコニコ動画","url_name":"%e3%83%8b%e3%82%b3%e3%83%8b%e3%82%b3%e5%8b%95%e7%94%bb","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":13},{"name":"クロスドメイン","url_name":"%e3%82%af%e3%83%ad%e3%82%b9%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"さくら","url_name":"%e3%81%95%e3%81%8f%e3%82%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"htaccess","url_name":"htaccess","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"functional","url_name":"functional","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"TreeTagger","url_name":"treetagger","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Animo","url_name":"animo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jetty","url_name":"jetty","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":11},{"name":"GoogleAnalitycs","url_name":"googleanalitycs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"opendata","url_name":"opendata","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":20},{"name":"近況","url_name":"%e8%bf%91%e6%b3%81","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"zerigo-dns","url_name":"zerigo-dns","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"独自ドメイン","url_name":"%e7%8b%ac%e8%87%aa%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"glitch","url_name":"glitch","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"jpeg","url_name":"jpeg","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"Coffee","url_name":"coffee","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":5},{"name":"pixiv","url_name":"pixiv","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bae320833c5bc198169c7e6742f05ae193ac01e8/medium.jpg?1400264831","follower_count":2,"item_count":17},{"name":"NewSQL","url_name":"newsql","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"bigdata","url_name":"bigdata","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"CORS","url_name":"cors","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"XHR2","url_name":"xhr2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Boxen","url_name":"boxen","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/281137d06251f66d5f964af91de488fdc8f47360/medium.jpg?1392944575","follower_count":26,"item_count":21},{"name":"UbuntuServer","url_name":"ubuntuserver","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":14},{"name":"JMeter","url_name":"jmeter","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":14},{"name":"Xamarin","url_name":"xamarin","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b292987d5dda372eafd2de0b5a8ee7e6115854f2/medium.jpg?1392117568","follower_count":92,"item_count":132},{"name":"swig","url_name":"swig","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"mod_spdy","url_name":"mod_spdy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ca","url_name":"ca","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"techreport","url_name":"techreport","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"less-rails","url_name":"less-rails","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Konacha","url_name":"konacha","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"Sinon.JS","url_name":"sinon.js","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"clamav","url_name":"clamav","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"fabric","url_name":"fabric","icon_url":"/icons/medium/missing.png","follower_count":31,"item_count":21},{"name":"ネットワーク","url_name":"%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Draper","url_name":"draper","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"goweb","url_name":"goweb","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"grunt,js,coffee","url_name":"grunt%2cjs%2ccoffee","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"cakephp2","url_name":"cakephp2","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"Sleipnir","url_name":"sleipnir","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"LDAP","url_name":"ldap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"openldap","url_name":"openldap","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":16},{"name":"URLscheme","url_name":"urlscheme","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"zexy","url_name":"zexy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"文字化け","url_name":"%e6%96%87%e5%ad%97%e5%8c%96%e3%81%91","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":9},{"name":"JavaFX","url_name":"javafx","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":12},{"name":"mintty","url_name":"mintty","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"Brython","url_name":"brython","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"Imagick","url_name":"imagick","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"UITableView","url_name":"uitableview","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":16},{"name":"文字コード","url_name":"%e6%96%87%e5%ad%97%e3%82%b3%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":13},{"name":"jMockit","url_name":"jmockit","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":11},{"name":"EclEMMA","url_name":"eclemma","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"TestNG","url_name":"testng","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"C99","url_name":"c99","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ssh公開鍵認証","url_name":"ssh%e5%85%ac%e9%96%8b%e9%8d%b5%e8%aa%8d%e8%a8%bc","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"veewee","url_name":"veewee","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":7},{"name":"Cassandra","url_name":"cassandra","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":15},{"name":"サンプル","url_name":"%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"C言語","url_name":"c%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":20,"item_count":75},{"name":"vuforia","url_name":"vuforia","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":6},{"name":"メニュー","url_name":"%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"関数","url_name":"%e9%96%a2%e6%95%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"hinemos","url_name":"hinemos","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"K2Editor","url_name":"k2editor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SourceTree","url_name":"sourcetree","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c78062834e91264e0bd4efb916540353c57c21f5/medium.jpg?1394533080","follower_count":37,"item_count":34},{"name":"fontforge","url_name":"fontforge","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"td-agent","url_name":"td-agent","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4508b8bc742abd07bf79ffeb7a1aec58650bab38/medium.jpg?1364841061","follower_count":7,"item_count":23},{"name":"スシ","url_name":"%e3%82%b9%e3%82%b7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"sushi","url_name":"sushi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"やml","url_name":"%e3%82%84%ef%bd%8d%ef%bd%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"フォーム","url_name":"%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"リスト構造","url_name":"%e3%83%aa%e3%82%b9%e3%83%88%e6%a7%8b%e9%80%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ScalaIDE","url_name":"scalaide","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"wantedly","url_name":"wantedly","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"mayu","url_name":"mayu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Agda","url_name":"agda","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":2},{"name":"multiprocessing","url_name":"multiprocessing","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"EGit","url_name":"egit","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"FlashBuilder","url_name":"flashbuilder","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7689ffb465790aac1d5a91c439551dbb5a5d5b96/medium.jpg?1402381355","follower_count":3,"item_count":9},{"name":"負荷試験","url_name":"%e8%b2%a0%e8%8d%b7%e8%a9%a6%e9%a8%93","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"mysql2","url_name":"mysql2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Compression","url_name":"compression","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"_","url_name":"_","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"chatwork","url_name":"chatwork","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":22},{"name":"chat","url_name":"chat","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Dynatree","url_name":"dynatree","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"BITNAMI","url_name":"bitnami","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"RapidMiner","url_name":"rapidminer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mongolab","url_name":"mongolab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"compound","url_name":"compound","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"DR","url_name":"dr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"空色プラットフォーム(仮)","url_name":"%e7%a9%ba%e8%89%b2%e3%83%97%e3%83%a9%e3%83%83%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0%28%e4%bb%ae%29","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Vanity","url_name":"vanity","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TideSDK","url_name":"tidesdk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"popwin","url_name":"popwin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Selenium2","url_name":"selenium2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a94d0d6d43d25f6bbc7ed03416d991e10db14b59/medium.jpg?1384942172","follower_count":24,"item_count":31},{"name":"Instracode","url_name":"instracode","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"uml","url_name":"uml","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"plantuml","url_name":"plantuml","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"qiita_sushi","url_name":"qiita_sushi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"turbolinks","url_name":"turbolinks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":12},{"name":"database.yml","url_name":"database.yml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Smar","url_name":"smar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"travis","url_name":"travis","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"国","url_name":"%e5%9b%bd","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"international","url_name":"international","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"国際化","url_name":"%e5%9b%bd%e9%9a%9b%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"ViewPager","url_name":"viewpager","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ProgressBar","url_name":"progressbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"小説","url_name":"%e5%b0%8f%e8%aa%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"小説プロット","url_name":"%e5%b0%8f%e8%aa%ac%e3%83%97%e3%83%ad%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CCL","url_name":"ccl","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"unicode","url_name":"unicode","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":17},{"name":"weka","url_name":"weka","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":1},{"name":"robots.txt","url_name":"robots.txt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"el-get","url_name":"el-get","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"mew","url_name":"mew","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"バージョンアップ","url_name":"%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e3%82%a2%e3%83%83%e3%83%97","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/294a6d14c79f97004f2efba13c1857aadb7eb010/medium.jpg?1409291649","follower_count":0,"item_count":3},{"name":"yeoman","url_name":"yeoman","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/39bd719f5b2ce45132e48e5bc08ca7059b7f045a/medium.jpg?1401966034","follower_count":85,"item_count":63},{"name":"いいエンジニア","url_name":"%e3%81%84%e3%81%84%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"rational","url_name":"rational","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bind","url_name":"bind","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"sample","url_name":"sample","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"Delegate","url_name":"delegate","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Block","url_name":"block","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"統計","url_name":"%e7%b5%b1%e8%a8%88","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/420f41dcf06bace11478bd94bf25771d4c7d4251/medium.jpg?1394635094","follower_count":11,"item_count":7},{"name":"hP-UX","url_name":"hp-ux","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"SEO","url_name":"seo","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":16},{"name":"UIImage","url_name":"uiimage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"2013","url_name":"2013","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"project","url_name":"project","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"wiki","url_name":"wiki","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"fulcrum","url_name":"fulcrum","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TeraTermMacro","url_name":"teratermmacro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"twitvim","url_name":"twitvim","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ex","url_name":"ex","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Sagace","url_name":"sagace","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"drug","url_name":"drug","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PECL","url_name":"pecl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"carton","url_name":"carton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"prove","url_name":"prove","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"QRcode","url_name":"qrcode","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"pubmed","url_name":"pubmed","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"citationlist","url_name":"citationlist","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bouque","url_name":"bouque","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"仕様変更","url_name":"%e4%bb%95%e6%a7%98%e5%a4%89%e6%9b%b4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"一般","url_name":"%e4%b8%80%e8%88%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"iPhoe","url_name":"iphoe","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"openspending","url_name":"openspending","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"soundjs","url_name":"soundjs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Blocks","url_name":"blocks","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"3D","url_name":"3d","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":27},{"name":"カメラ","url_name":"%e3%82%ab%e3%83%a1%e3%83%a9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"ビュー変換","url_name":"%e3%83%93%e3%83%a5%e3%83%bc%e5%a4%89%e6%8f%9b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"storm","url_name":"storm","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2a372d3b69e80a8ed05b12b7c3d20dcb757b43a5/medium.jpg?1408468361","follower_count":6,"item_count":7},{"name":"チーム内共有","url_name":"%e3%83%81%e3%83%bc%e3%83%a0%e5%86%85%e5%85%b1%e6%9c%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"VisualStudio2010","url_name":"visualstudio2010","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UIImageView","url_name":"uiimageview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UIPickerView","url_name":"uipickerview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Protocol","url_name":"protocol","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"TDDBC","url_name":"tddbc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Software","url_name":"software","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"招聘","url_name":"%e6%8b%9b%e8%81%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AndroidQuery","url_name":"androidquery","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ニコニコ生放送","url_name":"%e3%83%8b%e3%82%b3%e3%83%8b%e3%82%b3%e7%94%9f%e6%94%be%e9%80%81","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/76feb1e64b95a0ce226a19726aaffb17f33e4802/medium.jpg?1409644536","follower_count":2,"item_count":4},{"name":"nodebrew","url_name":"nodebrew","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"SⅡ","url_name":"s%e2%85%a1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Galaxy","url_name":"galaxy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"dddd","url_name":"dddd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"super","url_name":"super","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Struts","url_name":"struts","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":13},{"name":"growthHack","url_name":"growthhack","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Seasar2","url_name":"seasar2","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/788ada195bfaa4661d49137c08f15765452aca07/medium.jpg?1402630444","follower_count":11,"item_count":11},{"name":"libxml2","url_name":"libxml2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Retention","url_name":"retention","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"スクリーンショット","url_name":"%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"サムネイル","url_name":"%e3%82%b5%e3%83%a0%e3%83%8d%e3%82%a4%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"KPI","url_name":"kpi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"投稿数","url_name":"%e6%8a%95%e7%a8%bf%e6%95%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"仮説検証","url_name":"%e4%bb%ae%e8%aa%ac%e6%a4%9c%e8%a8%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"solarized","url_name":"solarized","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"DeployGate","url_name":"deploygate","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/62cc1dfdfe187c3b65ddb197e064ed621ba6d7f0/medium.jpg?1364841092","follower_count":14,"item_count":19},{"name":"MicrosoftAccess","url_name":"microsoftaccess","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DDD","url_name":"ddd","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/43dd7983afc232e32781af4f207e4cc8b73d4116/medium.jpg?1365946091","follower_count":28,"item_count":13},{"name":"kuromoji","url_name":"kuromoji","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":8},{"name":"bash_profile","url_name":"bash_profile","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"社内勉強会","url_name":"%e7%a4%be%e5%86%85%e5%8b%89%e5%bc%b7%e4%bc%9a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"GehirnWebServices","url_name":"gehirnwebservices","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"オレオレ証明","url_name":"%e3%82%aa%e3%83%ac%e3%82%aa%e3%83%ac%e8%a8%bc%e6%98%8e","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"dotfiles","url_name":"dotfiles","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":14},{"name":"zendesk","url_name":"zendesk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"doxygen","url_name":"doxygen","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"Proguard","url_name":"proguard","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"IntelliSense","url_name":"intellisense","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"チーム共有","url_name":"%e3%83%81%e3%83%bc%e3%83%a0%e5%85%b1%e6%9c%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"kiwi","url_name":"kiwi","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":4},{"name":"zbar","url_name":"zbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pegjs","url_name":"pegjs","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"メタプログラミング","url_name":"%e3%83%a1%e3%82%bf%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"Revel","url_name":"revel","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":14},{"name":"会社情報","url_name":"%e4%bc%9a%e7%a4%be%e6%83%85%e5%a0%b1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"議事録","url_name":"%e8%ad%b0%e4%ba%8b%e9%8c%b2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ユーザー課金","url_name":"%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e8%aa%b2%e9%87%91","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FluentLogger","url_name":"fluentlogger","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Stylesheets","url_name":"stylesheets","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"EffectiveJavaScript","url_name":"effectivejavascript","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":2},{"name":"ネットジンザイバンク","url_name":"%e3%83%8d%e3%83%83%e3%83%88%e3%82%b8%e3%83%b3%e3%82%b6%e3%82%a4%e3%83%90%e3%83%b3%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"fastladder","url_name":"fastladder","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"yuicompressor","url_name":"yuicompressor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ヒアリング","url_name":"%e3%83%92%e3%82%a2%e3%83%aa%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"トラブル","url_name":"%e3%83%88%e3%83%a9%e3%83%96%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"効率化","url_name":"%e5%8a%b9%e7%8e%87%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ツール","url_name":"%e3%83%84%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"tools","url_name":"tools","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"まとめ","url_name":"%e3%81%be%e3%81%a8%e3%82%81","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":11},{"name":"tokyocabinet","url_name":"tokyocabinet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"test3","url_name":"test3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"test5","url_name":"test5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"test4","url_name":"test4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"meetup","url_name":"meetup","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"助けて","url_name":"%e5%8a%a9%e3%81%91%e3%81%a6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"WIndowsRT","url_name":"windowsrt","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"altjs","url_name":"altjs","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"GStringTemplateEngine","url_name":"gstringtemplateengine","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PPTP","url_name":"pptp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"SublimeText3","url_name":"sublimetext3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4f23cad9259bfa96493704bd43710bdf2c475cce/medium.jpg?1396147721","follower_count":120,"item_count":79},{"name":"voiceover","url_name":"voiceover","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"BanditAlgorithms","url_name":"banditalgorithms","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mbed","url_name":"mbed","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":33},{"name":"リカバリイメージの抽出","url_name":"%e3%83%aa%e3%82%ab%e3%83%90%e3%83%aa%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8%e3%81%ae%e6%8a%bd%e5%87%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mountain","url_name":"mountain","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ELS","url_name":"els","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"FusionTables","url_name":"fusiontables","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"週報","url_name":"%e9%80%b1%e5%a0%b1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cdn","url_name":"cdn","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Justin.tv","url_name":"justin.tv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"セントメディア","url_name":"%e3%82%bb%e3%83%b3%e3%83%88%e3%83%a1%e3%83%87%e3%82%a3%e3%82%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"QiitaJobs","url_name":"qiitajobs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Tor","url_name":"tor","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"i2p","url_name":"i2p","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Anonymous","url_name":"anonymous","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Routing","url_name":"routing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Implemetation","url_name":"implemetation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tornado","url_name":"tornado","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":8},{"name":"post","url_name":"post","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"HGTS","url_name":"hgts","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AndroidNDK","url_name":"androidndk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"JNI","url_name":"jni","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"C-C++","url_name":"c-c%2b%2b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mahout","url_name":"mahout","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":6},{"name":"設計","url_name":"%e8%a8%ad%e8%a8%88","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":17},{"name":"boto","url_name":"boto","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"SourceMap","url_name":"sourcemap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Phing","url_name":"phing","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"RFP","url_name":"rfp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"timedelta","url_name":"timedelta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"datetime","url_name":"datetime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"シェーダー","url_name":"%e3%82%b7%e3%82%a7%e3%83%bc%e3%83%80%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CSSShaders","url_name":"cssshaders","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bnf","url_name":"bnf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Sledge","url_name":"sledge","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TemplateToolkit","url_name":"templatetoolkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"HR","url_name":"hr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"asm.js","url_name":"asm.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"春","url_name":"%e6%98%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"aaa","url_name":"aaa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"ssss","url_name":"ssss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"プッシュ通知","url_name":"%e3%83%97%e3%83%83%e3%82%b7%e3%83%a5%e9%80%9a%e7%9f%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"APNS","url_name":"apns","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"XLSX","url_name":"xlsx","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Skheme","url_name":"skheme","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"phpstrom","url_name":"phpstrom","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Slony-I","url_name":"slony-i","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Creative","url_name":"creative","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"TCPIP","url_name":"tcpip","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bootswatch","url_name":"bootswatch","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"USB","url_name":"usb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"Endeavor","url_name":"endeavor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mediawiki","url_name":"mediawiki","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"Geek","url_name":"geek","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"oop","url_name":"oop","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"powder","url_name":"powder","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"座標変換","url_name":"%e5%ba%a7%e6%a8%99%e5%a4%89%e6%8f%9b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"camelmasa","url_name":"camelmasa","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/3ee55735d85d92d51050ebb193bcd44c483e8c59/medium.jpg?1364831622","follower_count":1,"item_count":0},{"name":"どうでもいい","url_name":"%e3%81%a9%e3%81%86%e3%81%a7%e3%82%82%e3%81%84%e3%81%84","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"12345678","url_name":"12345678","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"super_secret_tag","url_name":"super_secret_tag","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"..\\-..\\-..\\-..\\-","url_name":"..%5c-..%5c-..%5c-..%5c-","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"-.","url_name":"-.","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"__","url_name":"__","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"1","url_name":"1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"5","url_name":"5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"2","url_name":"2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"3","url_name":"3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"4","url_name":"4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"日本語タグ","url_name":"%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%82%bf%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"XCL2.1","url_name":"xcl2.1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"momoxo","url_name":"momoxo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"RPC","url_name":"rpc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pillion","url_name":"pillion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ニュース","url_name":"%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Git,Versioning","url_name":"git%2cversioning","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ふしおn","url_name":"%e3%81%b5%e3%81%97%e3%81%8an","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"chef-solo","url_name":"chef-solo","icon_url":"/icons/medium/missing.png","follower_count":40,"item_count":62},{"name":"Berkshelf","url_name":"berkshelf","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":69},{"name":"IDC","url_name":"idc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"find","url_name":"find","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":17},{"name":"Push通知","url_name":"push%e9%80%9a%e7%9f%a5","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"pdsh","url_name":"pdsh","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Puppet","url_name":"puppet","icon_url":"/icons/medium/missing.png","follower_count":17,"item_count":22},{"name":"Origami","url_name":"origami","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"夫婦","url_name":"%e5%a4%ab%e5%a9%a6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"会話例","url_name":"%e4%bc%9a%e8%a9%b1%e4%be%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Mas","url_name":"mas","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"freemarker","url_name":"freemarker","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"メンション機能","url_name":"%e3%83%a1%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e6%a9%9f%e8%83%bd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"\\0000","url_name":"%5c0000","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AssetPipeline","url_name":"assetpipeline","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"mpd","url_name":"mpd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"kvo","url_name":"kvo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"gitlab-shell","url_name":"gitlab-shell","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"wxRuby","url_name":"wxruby","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"handlersocket","url_name":"handlersocket","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jsep","url_name":"jsep","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DFP","url_name":"dfp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"calendar","url_name":"calendar","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"WebRTC","url_name":"webrtc","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":16},{"name":"ひみつのタグ","url_name":"%e3%81%b2%e3%81%bf%e3%81%a4%e3%81%ae%e3%82%bf%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mod_pagespeed","url_name":"mod_pagespeed","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GoogleCalendarAPI","url_name":"googlecalendarapi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Perl5","url_name":"perl5","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Mojolicious","url_name":"mojolicious","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":57},{"name":"cpan","url_name":"cpan","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"subprocess","url_name":"subprocess","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"QuickTime","url_name":"quicktime","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"Video","url_name":"video","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"Codec","url_name":"codec","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"iDraw","url_name":"idraw","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アプリ連携","url_name":"%e3%82%a2%e3%83%97%e3%83%aa%e9%80%a3%e6%90%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Localize","url_name":"localize","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ikachan","url_name":"ikachan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"rootkit","url_name":"rootkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"拡張構文","url_name":"%e6%8b%a1%e5%bc%b5%e6%a7%8b%e6%96%87","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"restfb","url_name":"restfb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Split","url_name":"split","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"test1","url_name":"test1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"git-svn","url_name":"git-svn","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":12},{"name":"テンプレート","url_name":"%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"steam","url_name":"steam","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"3rd-party-cookie","url_name":"3rd-party-cookie","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"iframe","url_name":"iframe","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Sencha","url_name":"sencha","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/bdd736c0e4e34997a9eed617eabd9fb216fcad55/medium.jpg?1368425820","follower_count":14,"item_count":14},{"name":"sp","url_name":"sp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"todo","url_name":"todo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"active_record","url_name":"active_record","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Internet","url_name":"internet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ODBC","url_name":"odbc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ini","url_name":"ini","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ami","url_name":"ami","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Rdirect","url_name":"rdirect","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"sparsebundle","url_name":"sparsebundle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"hdiutil","url_name":"hdiutil","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"容量削減","url_name":"%e5%ae%b9%e9%87%8f%e5%89%8a%e6%b8%9b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ダイエット","url_name":"%e3%83%80%e3%82%a4%e3%82%a8%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"vimium","url_name":"vimium","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GooglChrome","url_name":"googlchrome","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ポリモーフィック","url_name":"%e3%83%9d%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%95%e3%82%a3%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ドメイン駆動設計","url_name":"%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e9%a7%86%e5%8b%95%e8%a8%ad%e8%a8%88","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":6},{"name":"継続","url_name":"%e7%b6%99%e7%b6%9a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"worker","url_name":"worker","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"delayed_job","url_name":"delayed_job","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"IDDD","url_name":"iddd","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"elangs","url_name":"elangs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"knife-solo","url_name":"knife-solo","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":37},{"name":"HHTQA","url_name":"hhtqa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":18},{"name":"authority","url_name":"authority","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Hue","url_name":"hue","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"LockUP","url_name":"lockup","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"カタログハウステスト","url_name":"%e3%82%ab%e3%82%bf%e3%83%ad%e3%82%b0%e3%83%8f%e3%82%a6%e3%82%b9%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"TravisCI","url_name":"travisci","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a91a1d572df4602103a0a890975f667f6d71372a/medium.jpg?1376665703","follower_count":21,"item_count":47},{"name":"Janetter","url_name":"janetter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"IntelXDK","url_name":"intelxdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NSAppDefaults","url_name":"nsappdefaults","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AdobeScout","url_name":"adobescout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rubykaigi","url_name":"rubykaigi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"kenpos","url_name":"kenpos","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"freakout","url_name":"freakout","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"AIX","url_name":"aix","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":2},{"name":"StarWars","url_name":"starwars","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Starlogs","url_name":"starlogs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"fontconfig","url_name":"fontconfig","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"アンドロイド","url_name":"%e3%82%a2%e3%83%b3%e3%83%89%e3%83%ad%e3%82%a4%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"backbone-on-rails","url_name":"backbone-on-rails","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"glassfish","url_name":"glassfish","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":17},{"name":"embedded","url_name":"embedded","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rst","url_name":"rst","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"gosu","url_name":"gosu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ノウハウ","url_name":"%e3%83%8e%e3%82%a6%e3%83%8f%e3%82%a6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CentOS6.4","url_name":"centos6.4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":17},{"name":"asdf","url_name":"asdf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SWFObject","url_name":"swfobject","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"解説","url_name":"%e8%a7%a3%e8%aa%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"easing","url_name":"easing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Querydsl","url_name":"querydsl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jEdit","url_name":"jedit","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"nc","url_name":"nc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"icon","url_name":"icon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"glyphs","url_name":"glyphs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"使い方","url_name":"%e4%bd%bf%e3%81%84%e6%96%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"StatET","url_name":"statet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"POI","url_name":"poi","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":".NETMF","url_name":".netmf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CloudStack","url_name":"cloudstack","icon_url":"/icons/medium/missing.png","follower_count":9,"item_count":7},{"name":"libvirt","url_name":"libvirt","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"テーマ","url_name":"%e3%83%86%e3%83%bc%e3%83%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"xCL2.2","url_name":"xcl2.2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"slidingmenu","url_name":"slidingmenu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"vi","url_name":"vi","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"web-frontend","url_name":"web-frontend","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"~(チルダ)の意味","url_name":"%7e%28%e3%83%81%e3%83%ab%e3%83%80%29%e3%81%ae%e6%84%8f%e5%91%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"leaflet","url_name":"leaflet","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"Starling","url_name":"starling","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"PreloadJS","url_name":"preloadjs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Turnip","url_name":"turnip","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":18},{"name":"concrete5","url_name":"concrete5","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":5},{"name":"CPU","url_name":"cpu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"メモリ","url_name":"%e3%83%a1%e3%83%a2%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"HDD","url_name":"hdd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ActiveResource","url_name":"activeresource","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Win32API","url_name":"win32api","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"提案","url_name":"%e6%8f%90%e6%a1%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ミタカフェ","url_name":"%e3%83%9f%e3%82%bf%e3%82%ab%e3%83%95%e3%82%a7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tmlib,JavaScript","url_name":"tmlib%2cjavascript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"morphia","url_name":"morphia","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"娯楽","url_name":"%e5%a8%af%e6%a5%bd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"遊び","url_name":"%e9%81%8a%e3%81%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"orientation","url_name":"orientation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"camera","url_name":"camera","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"tmlib","url_name":"tmlib","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tmlib.js","url_name":"tmlib.js","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/1ff8590e9f7ac20652e463745f4def4b4aae9ae6/medium.jpg?1381330896","follower_count":19,"item_count":42},{"name":"OCMock","url_name":"ocmock","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"jQueryAlertDialogs","url_name":"%ef%bd%8aqueryalertdialogs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rosws","url_name":"rosws","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"012345678901234567890123456789","url_name":"012345678901234567890123456789","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"XXX","url_name":"xxx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"kobitoを使ってみる","url_name":"kobito%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"niconico","url_name":"niconico","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"tags","url_name":"tags","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"データセンター","url_name":"%e3%83%87%e3%83%bc%e3%82%bf%e3%82%bb%e3%83%b3%e3%82%bf%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"レビュー","url_name":"%e3%83%ac%e3%83%93%e3%83%a5%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Xcode4.6","url_name":"xcode4.6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"chef-apply","url_name":"chef-apply","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"PC-6001","url_name":"pc-6001","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":6},{"name":"Z80","url_name":"z80","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"いつもの","url_name":"%e3%81%84%e3%81%a4%e3%82%82%e3%81%ae","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RubyArt","url_name":"rubyart","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"lsof","url_name":"lsof","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"プロセス","url_name":"%e3%83%97%e3%83%ad%e3%82%bb%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"IMGkit","url_name":"imgkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"wkhtmltoimage","url_name":"wkhtmltoimage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"graphite","url_name":"graphite","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":14},{"name":"GW","url_name":"gw","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"poltergeist","url_name":"poltergeist","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"vlan","url_name":"vlan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"rsolr","url_name":"rsolr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"phpenv","url_name":"phpenv","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":12},{"name":"php-build","url_name":"php-build","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"matplotlib","url_name":"matplotlib","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":51},{"name":"while","url_name":"while","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"定期","url_name":"%e5%ae%9a%e6%9c%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"s3cmd","url_name":"s3cmd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"neocomplcache","url_name":"neocomplcache","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"障害対応方法","url_name":"%e9%9a%9c%e5%ae%b3%e5%af%be%e5%bf%9c%e6%96%b9%e6%b3%95","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"ElasticBeanstalk","url_name":"elasticbeanstalk","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":29},{"name":"mesa","url_name":"mesa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rebar","url_name":"rebar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"edis","url_name":"edis","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"apt","url_name":"apt","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"etc","url_name":"etc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ロベール本","url_name":"%e3%83%ad%e3%83%99%e3%83%bc%e3%83%ab%e6%9c%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"can","url_name":"can","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"説明書","url_name":"%e8%aa%ac%e6%98%8e%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FT311D","url_name":"ft311d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"LuaJIT","url_name":"luajit","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a12e093a92f73d231e52b87d381bebafc4d8146a/medium.jpg?1367970631","follower_count":1,"item_count":6},{"name":"SVProgressHUD","url_name":"svprogresshud","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UIProgressView","url_name":"uiprogressview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lwrp","url_name":"lwrp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"UITableViewController","url_name":"uitableviewcontroller","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"UIRefreshControl","url_name":"uirefreshcontrol","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"oci8","url_name":"oci8","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"センサー","url_name":"%e3%82%bb%e3%83%b3%e3%82%b5%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Arudino","url_name":"arudino","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dino","url_name":"dino","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Gehirn","url_name":"gehirn","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"CentOS6.x","url_name":"centos6.x","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":53},{"name":"virtualenv","url_name":"virtualenv","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":19},{"name":"karma","url_name":"karma","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":19},{"name":"Passport","url_name":"passport","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"docker","url_name":"docker","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/5dd175e323bc9dac09e906b515d54316d527890f/medium.jpg?1379804192","follower_count":617,"item_count":479},{"name":"activeadmin","url_name":"activeadmin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"imoten","url_name":"imoten","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"サーバー","url_name":"%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":11},{"name":"filesystem","url_name":"filesystem","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"TexturePacker","url_name":"texturepacker","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"for","url_name":"for","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Iterator","url_name":"iterator","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"HashMap","url_name":"hashmap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"イベントソーシング","url_name":"%e3%82%a4%e3%83%99%e3%83%b3%e3%83%88%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"behat","url_name":"behat","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":12},{"name":"sevabot","url_name":"sevabot","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tegetst","url_name":"tegetst","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"フレームバッファ","url_name":"%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%90%e3%83%83%e3%83%95%e3%82%a1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"チケット","url_name":"%e3%83%81%e3%82%b1%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"やれやれ","url_name":"%e3%82%84%e3%82%8c%e3%82%84%e3%82%8c","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"sjis","url_name":"sjis","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"256interns","url_name":"256interns","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"dotfile","url_name":"dotfile","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Pyhton","url_name":"pyhton","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"カウンセラー","url_name":"%e3%82%ab%e3%82%a6%e3%83%b3%e3%82%bb%e3%83%a9%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"場所貸し借り","url_name":"%e5%a0%b4%e6%89%80%e8%b2%b8%e3%81%97%e5%80%9f%e3%82%8a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Quaternion","url_name":"quaternion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"開発メモ","url_name":"%e9%96%8b%e7%99%ba%e3%83%a1%e3%83%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"styledocco","url_name":"styledocco","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"怖話","url_name":"%e6%80%96%e8%a9%b1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mongo","url_name":"mongo","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"MySQL-Python","url_name":"mysql-python","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UILabel","url_name":"uilabel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"md","url_name":"md","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"redshift","url_name":"redshift","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":19},{"name":"FirefoxOS","url_name":"firefoxos","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f2883116437ea2bfa4b3e8b0938afd9e16a93864/medium.jpg?1393083307","follower_count":16,"item_count":16},{"name":"UITableViewCell","url_name":"uitableviewcell","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"AtomiaDNS","url_name":"atomiadns","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DNSSEC","url_name":"dnssec","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PowerDNS","url_name":"powerdns","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"モバイルOS","url_name":"%e3%83%a2%e3%83%90%e3%82%a4%e3%83%abos","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"256intern","url_name":"256intern","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":14},{"name":"式","url_name":"%e5%bc%8f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"シェル","url_name":"%e3%82%b7%e3%82%a7%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"NSNotificationCenter","url_name":"nsnotificationcenter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UIApplication","url_name":"uiapplication","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"仕様","url_name":"%e4%bb%95%e6%a7%98","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MFC-J810DN-DWN","url_name":"mfc-j810dn-dwn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Yukkuroid","url_name":"yukkuroid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"naruhounix","url_name":"naruhounix","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"プラグイン","url_name":"%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Quartz","url_name":"quartz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"画像合成","url_name":"%e7%94%bb%e5%83%8f%e5%90%88%e6%88%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"-","url_name":"-","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"rconf","url_name":"rconf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"抜粋","url_name":"%e6%8a%9c%e7%b2%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Fuego","url_name":"fuego","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SICP","url_name":"sicp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"scheduler","url_name":"scheduler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Toast","url_name":"toast","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"YouTube","url_name":"youtube","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":24},{"name":"8","url_name":"8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"slick","url_name":"slick","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7d1876d6693943de113729bfe4ec68505dc45c41/medium.jpg?1384315712","follower_count":6,"item_count":8},{"name":"AMD","url_name":"amd","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"UIToolBar","url_name":"uitoolbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"resin","url_name":"resin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"totoisesvn","url_name":"totoisesvn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"jbossas","url_name":"jbossas","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Cgi","url_name":"cgi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"S2JDBC","url_name":"s2jdbc","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"email","url_name":"email","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"YARD","url_name":"yard","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"RainbowApps","url_name":"rainbowapps","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mel","url_name":"mel","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"ファイル","url_name":"%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"システムコール","url_name":"%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%82%b3%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ブログ","url_name":"%e3%83%96%e3%83%ad%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"path","url_name":"path","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"優先順位","url_name":"%e5%84%aa%e5%85%88%e9%a0%86%e4%bd%8d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"bitbucketの使い方","url_name":"bitbucket%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"[canvas][paper.js]","url_name":"%5bcanvas%5d%5bpaper.js%5d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"platform-tool","url_name":"platform-tool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"認証付きProxy","url_name":"%e8%aa%8d%e8%a8%bc%e4%bb%98%e3%81%8dproxy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"js2coffee","url_name":"js2coffee","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AndroidSDK","url_name":"androidsdk","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":14},{"name":"AndroidStudio","url_name":"androidstudio","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c179622251d37aabf3a5702c4addc26cbd124e15/medium.jpg?1408668315","follower_count":59,"item_count":93},{"name":"exception_notification","url_name":"exception_notification","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"boilerplate","url_name":"boilerplate","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Firebird","url_name":"firebird","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Uninstall","url_name":"uninstall","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"appfog","url_name":"appfog","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"TitaniumMobile","url_name":"titaniummobile","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"ivy","url_name":"ivy","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"AmazonWebServices","url_name":"amazonwebservices","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CloudFormation","url_name":"cloudformation","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":13},{"name":"f2py","url_name":"f2py","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"暗黙的","url_name":"%e6%9a%97%e9%bb%99%e7%9a%84","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ACTION_EDIT","url_name":"action_edit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"microdata","url_name":"microdata","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"chocolatey","url_name":"chocolatey","icon_url":"/icons/medium/missing.png","follower_count":27,"item_count":24},{"name":"浮動小数点","url_name":"%e6%b5%ae%e5%8b%95%e5%b0%8f%e6%95%b0%e7%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"English","url_name":"english","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/250e74999797f5657d40abdb4dd2987b25045f44/medium.jpg?1387519843","follower_count":35,"item_count":15},{"name":"re","url_name":"re","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"iconv","url_name":"iconv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"UIPageControl","url_name":"uipagecontrol","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"theinterviews","url_name":"theinterviews","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Less2Css","url_name":"less2css","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"plsql","url_name":"plsql","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"クライアントサイド","url_name":"%e3%82%af%e3%83%a9%e3%82%a4%e3%82%a2%e3%83%b3%e3%83%88%e3%82%b5%e3%82%a4%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"自動ログイン","url_name":"%e8%87%aa%e5%8b%95%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Rift","url_name":"rift","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"helios","url_name":"helios","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ideah","url_name":"ideah","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"io13","url_name":"io13","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"powerline","url_name":"powerline","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"VisualBasic","url_name":"visualbasic","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"msys","url_name":"msys","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"whenever","url_name":"whenever","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"userAgent","url_name":"useragent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ブラウザ","url_name":"%e3%83%96%e3%83%a9%e3%82%a6%e3%82%b6","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"simple_html_dom","url_name":"simple_html_dom","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mac-key-mode","url_name":"mac-key-mode","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"redo","url_name":"redo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"golf","url_name":"golf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"表示","url_name":"%e8%a1%a8%e7%a4%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"workshop","url_name":"workshop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"英会話","url_name":"%e8%8b%b1%e4%bc%9a%e8%a9%b1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Jade","url_name":"jade","icon_url":"/icons/medium/missing.png","follower_count":23,"item_count":31},{"name":"iOSシミュレータ","url_name":"ios%e3%82%b7%e3%83%9f%e3%83%a5%e3%83%ac%e3%83%bc%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"コンピュータリテラシ","url_name":"%e3%82%b3%e3%83%b3%e3%83%94%e3%83%a5%e3%83%bc%e3%82%bf%e3%83%aa%e3%83%86%e3%83%a9%e3%82%b7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"LangExt","url_name":"langext","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/da94aa5330796f630dc51f054393641191071a02/medium.jpg?1369236266","follower_count":0,"item_count":4},{"name":"ログインフォーム","url_name":"%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"情報工学概論","url_name":"%e6%83%85%e5%a0%b1%e5%b7%a5%e5%ad%a6%e6%a6%82%e8%ab%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"cookbooks","url_name":"cookbooks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"opsworks","url_name":"opsworks","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"memoization","url_name":"memoization","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"preg_match","url_name":"preg_match","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"google-gflags","url_name":"google-gflags","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bottle","url_name":"bottle","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":8},{"name":"GooglePlayServices","url_name":"googleplayservices","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"サイト構築","url_name":"%e3%82%b5%e3%82%a4%e3%83%88%e6%a7%8b%e7%af%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MyBatis","url_name":"mybatis","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"Geofence","url_name":"geofence","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NULLバイト","url_name":"null%e3%83%90%e3%82%a4%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"バイナリデータ","url_name":"%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%83%87%e3%83%bc%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"growth","url_name":"growth","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Gollim","url_name":"gollim","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"lxml","url_name":"lxml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"scikitlearn","url_name":"scikitlearn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"library","url_name":"library","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Require_once","url_name":"require_once","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"forever","url_name":"forever","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Shiita","url_name":"shiita","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"goken","url_name":"goken","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"goken00","url_name":"goken00","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"autoscale","url_name":"autoscale","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"Spinach","url_name":"spinach","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"goken01","url_name":"goken01","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Basic認証","url_name":"basic%e8%aa%8d%e8%a8%bc","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"Cloudera","url_name":"cloudera","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Impala","url_name":"impala","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"vyatta","url_name":"vyatta","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2a78b50784f2b55a3bf065ae34f3135d22f5e3b6/medium.jpg?1406188093","follower_count":6,"item_count":6},{"name":"インデザ","url_name":"%e3%82%a4%e3%83%b3%e3%83%87%e3%82%b6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"crow","url_name":"crow","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"乙四類危険物取扱者試験","url_name":"%e4%b9%99%e5%9b%9b%e9%a1%9e%e5%8d%b1%e9%99%ba%e7%89%a9%e5%8f%96%e6%89%b1%e8%80%85%e8%a9%a6%e9%a8%93","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"twilio","url_name":"twilio","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":20},{"name":"test-driven-infrastructure","url_name":"test-driven-infrastructure","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Nancy","url_name":"nancy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GNU","url_name":"gnu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"play2-war-plugin","url_name":"play2-war-plugin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pandas","url_name":"pandas","icon_url":"/icons/medium/missing.png","follower_count":16,"item_count":26},{"name":"ロジック","url_name":"%e3%83%ad%e3%82%b8%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アカウントロック","url_name":"%e3%82%a2%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88%e3%83%ad%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"垢BAN","url_name":"%e5%9e%a2ban","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lifehacks","url_name":"lifehacks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"廃人","url_name":"%e5%bb%83%e4%ba%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"REPL","url_name":"repl","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"Caliburn.Micro","url_name":"caliburn.micro","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WinRT","url_name":"winrt","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":0},{"name":"serverspec","url_name":"serverspec","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/44d328b5735534af991920d8cd4dbdcf43412721/medium.jpg?1389144594","follower_count":68,"item_count":51},{"name":"簡易掲示版","url_name":"%e7%b0%a1%e6%98%93%e6%8e%b2%e7%a4%ba%e7%89%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"動画","url_name":"%e5%8b%95%e7%94%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"movie","url_name":"movie","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"演出","url_name":"%e6%bc%94%e5%87%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"release","url_name":"release","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ActiveModel","url_name":"activemodel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"WinDbg","url_name":"windbg","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"MonoGame","url_name":"monogame","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"IE8","url_name":"ie8","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":19},{"name":"10分で分かるxx","url_name":"10%e5%88%86%e3%81%a7%e5%88%86%e3%81%8b%e3%82%8bxx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Handlebars","url_name":"handlebars","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fe5ba6ac3a9020925ff7a591a96259462e326bae/medium.jpg?1398176134","follower_count":3,"item_count":3},{"name":"Sails.js","url_name":"sails.js","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":13},{"name":"chef-server","url_name":"chef-server","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"GoogleIO2013","url_name":"googleio2013","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"prompt","url_name":"prompt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"puzzle","url_name":"puzzle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"cloud9","url_name":"cloud9","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"PyQCheck","url_name":"pyqcheck","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Dvorak","url_name":"dvorak","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"TwitterAPI","url_name":"twitterapi","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":29},{"name":"jquery.tile.js","url_name":"jquery.tile.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MVVM","url_name":"mvvm","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":13},{"name":"AppleDoc","url_name":"appledoc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"chmod","url_name":"chmod","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"プリペアドステートメント","url_name":"%e3%83%97%e3%83%aa%e3%83%9a%e3%82%a2%e3%83%89%e3%82%b9%e3%83%86%e3%83%bc%e3%83%88%e3%83%a1%e3%83%b3%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ESS","url_name":"ess","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"giter8","url_name":"giter8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ALMinium","url_name":"alminium","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":13},{"name":"gollum","url_name":"gollum","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"quiita","url_name":"quiita","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"INSERT","url_name":"insert","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"自動化","url_name":"%e8%87%aa%e5%8b%95%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"nltk","url_name":"nltk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"vsftpd","url_name":"vsftpd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ChildBrowser","url_name":"childbrowser","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"pki","url_name":"pki","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Volley","url_name":"volley","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":10},{"name":"Magento","url_name":"magento","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"gtest","url_name":"gtest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Casandra","url_name":"casandra","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Funkload","url_name":"funkload","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"autoconf","url_name":"autoconf","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"configure","url_name":"configure","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"Norikra","url_name":"norikra","icon_url":"/icons/medium/missing.png","follower_count":16,"item_count":9},{"name":"Day0","url_name":"day0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"展示ブース","url_name":"%e5%b1%95%e7%a4%ba%e3%83%96%e3%83%bc%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Day1","url_name":"day1","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Roland","url_name":"roland","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DirectConnect","url_name":"directconnect","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Logicad","url_name":"logicad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RubbitMQ","url_name":"rubbitmq","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DM-01","url_name":"dm-01","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FakeWeb","url_name":"fakeweb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"rack-test","url_name":"rack-test","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Tech-02","url_name":"tech-02","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Day2","url_name":"day2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"intel","url_name":"intel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"obama","url_name":"obama","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Nikon","url_name":"nikon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"CS-08","url_name":"cs-08","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PowerVR","url_name":"powervr","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"InsiderSDK","url_name":"insidersdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"awssummit","url_name":"awssummit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"シングルトン","url_name":"%e3%82%b7%e3%83%b3%e3%82%b0%e3%83%ab%e3%83%88%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"plovr","url_name":"plovr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"あああ","url_name":"%e3%81%82%e3%81%82%e3%81%82","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Feedly","url_name":"feedly","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"snmp","url_name":"snmp","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":11},{"name":"TTYtter","url_name":"ttytter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Perlの闇","url_name":"perl%e3%81%ae%e9%97%87","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"uiautomation","url_name":"uiautomation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"iterm","url_name":"iterm","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"iTunesConnect","url_name":"itunesconnect","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/697d8af2340f42ca0a40e7b32ff2fbcf01e4f2ff/medium.jpg?1373615825","follower_count":1,"item_count":3},{"name":"KIF","url_name":"kif","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":8},{"name":"ngix","url_name":"ngix","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"jedi","url_name":"jedi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"autocompleete","url_name":"autocompleete","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Yahoo!ジオコーダAPI","url_name":"yahoo%21%e3%82%b8%e3%82%aa%e3%82%b3%e3%83%bc%e3%83%80api","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"space","url_name":"space","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rails4.0","url_name":"rails4.0","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"csrf","url_name":"csrf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"処理系","url_name":"%e5%87%a6%e7%90%86%e7%b3%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"インタプリタ","url_name":"%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%97%e3%83%aa%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Tizen","url_name":"tizen","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/8e52d3312368e3e71e497a9e0b81873a244c65b4/medium.jpg?1372815128","follower_count":6,"item_count":6},{"name":"JVM","url_name":"jvm","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"FacgoryGirl","url_name":"facgorygirl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"串","url_name":"%e4%b8%b2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"リバースプロキシ","url_name":"%e3%83%aa%e3%83%90%e3%83%bc%e3%82%b9%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"TestDriven","url_name":"testdriven","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"appium","url_name":"appium","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c4dc44672652d67fa16e1c36d2ca673cd86b6d23/medium.jpg?1370760401","follower_count":20,"item_count":7},{"name":"ログイン","url_name":"%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"CF","url_name":"cf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Lombok","url_name":"lombok","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"introduction","url_name":"introduction","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"raisl","url_name":"raisl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"proxy","url_name":"proxy","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":20},{"name":"adsense","url_name":"adsense","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"convert","url_name":"convert","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"weinre","url_name":"weinre","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"javax.validation","url_name":"javax.validation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"opauth","url_name":"opauth","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"#nginx","url_name":"%23nginx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"#fluentd","url_name":"%23fluentd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"XtreemFS","url_name":"xtreemfs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"flexunit","url_name":"flexunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"cmd.exe","url_name":"cmd.exe","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"coding","url_name":"coding","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"xdocdiff","url_name":"xdocdiff","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"画像掲示板","url_name":"%e7%94%bb%e5%83%8f%e6%8e%b2%e7%a4%ba%e6%9d%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"log4j","url_name":"log4j","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"geohash","url_name":"geohash","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Mockito","url_name":"mockito","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"vcs","url_name":"vcs","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":14},{"name":"企画","url_name":"%e4%bc%81%e7%94%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"検索","url_name":"%e6%a4%9c%e7%b4%a2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"EngineYard","url_name":"engineyard","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fc491d08ee6ea387b86a5cddc3258ba6be7ad7aa/medium.jpg?1371133674","follower_count":11,"item_count":14},{"name":"WindowsVPS","url_name":"windowsvps","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"WINAPI","url_name":"winapi","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"Hook","url_name":"hook","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Gemfile","url_name":"gemfile","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":10},{"name":"パターンマッチ","url_name":"%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%83%9e%e3%83%83%e3%83%81","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":21},{"name":"コンパイラ","url_name":"%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%a9","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":26},{"name":"GoogleFeedAPI","url_name":"googlefeedapi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"D2C","url_name":"d2c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Dango","url_name":"dango","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"やってみた","url_name":"%e3%82%84%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"Web制作","url_name":"web%e5%88%b6%e4%bd%9c","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"android-sdk","url_name":"android-sdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"デザインパターン","url_name":"%e3%83%87%e3%82%b6%e3%82%a4%e3%83%b3%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":35,"item_count":40},{"name":"tetst2","url_name":"tetst2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ios7","url_name":"ios7","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/87a5ef54725ced05459341e7ba63b05a47257e61/medium.jpg?1392230532","follower_count":30,"item_count":68},{"name":"ENV","url_name":"env","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"権限","url_name":"%e6%a8%a9%e9%99%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"YQL","url_name":"yql","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"eject","url_name":"eject","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Android-NDK","url_name":"android-ndk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"翻訳","url_name":"%e7%bf%bb%e8%a8%b3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/63cf06ce52c66d46e47ae59be8e2a2f8701dd69a/medium.jpg?1408052899","follower_count":4,"item_count":1},{"name":"chasen","url_name":"chasen","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Scala-IDE","url_name":"scala-ide","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"getUserMedia","url_name":"getusermedia","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アトリエおでん","url_name":"%e3%82%a2%e3%83%88%e3%83%aa%e3%82%a8%e3%81%8a%e3%81%a7%e3%82%93","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"gargor","url_name":"gargor","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"cookbook","url_name":"cookbook","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"MailChimp","url_name":"mailchimp","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"ecwid-mailchimp","url_name":"ecwid-mailchimp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CQ5","url_name":"cq5","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"和牛ビジュアル","url_name":"%e5%92%8c%e7%89%9b%e3%83%93%e3%82%b8%e3%83%a5%e3%82%a2%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SAStruts","url_name":"sastruts","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"im4java","url_name":"im4java","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"LXDE","url_name":"lxde","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"brunch","url_name":"brunch","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"JSLint","url_name":"jslint","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Brackets","url_name":"brackets","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"雑談","url_name":"%e9%9b%91%e8%ab%87","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Linux_Mint","url_name":"linux_mint","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/02b7f46030eb1a7b7ffb5fda2701de43808d4f7b/medium.jpg?1388309441","follower_count":2,"item_count":13},{"name":"パターンマッチの作り方","url_name":"%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%83%9e%e3%83%83%e3%83%81%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":11},{"name":"Atlassian","url_name":"atlassian","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"pyenv","url_name":"pyenv","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"Doma","url_name":"doma","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"ワンライナー","url_name":"%e3%83%af%e3%83%b3%e3%83%a9%e3%82%a4%e3%83%8a%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":8},{"name":"ablenet","url_name":"ablenet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ttyS0","url_name":"ttys0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PL-SQL","url_name":"pl-sql","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"JDB","url_name":"jdb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"gdb","url_name":"gdb","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":9},{"name":"50english","url_name":"50english","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"rtmp","url_name":"rtmp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Registry","url_name":"registry","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"YummyFTP","url_name":"yummyftp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"binstub","url_name":"binstub","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ライブラリ","url_name":"%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"dotjs","url_name":"dotjs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"supervisord","url_name":"supervisord","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":9},{"name":"Pebble","url_name":"pebble","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d76398e236922c8fee4b9fdd2f38b65e1c3351a4/medium.jpg?1397200574","follower_count":6,"item_count":6},{"name":"EZGUI","url_name":"ezgui","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Uunity","url_name":"uunity","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"#AWS","url_name":"%23aws","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"四元数","url_name":"%e5%9b%9b%e5%85%83%e6%95%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"クォータニオン","url_name":"%e3%82%af%e3%82%a9%e3%83%bc%e3%82%bf%e3%83%8b%e3%82%aa%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"gith","url_name":"gith","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"最適化","url_name":"%e6%9c%80%e9%81%a9%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"写経","url_name":"%e5%86%99%e7%b5%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"5.6","url_name":"5.6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Ansible","url_name":"ansible","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d9729c7cb6105af71c833274446a766426b3ebb6/medium.jpg?1383594260","follower_count":192,"item_count":191},{"name":"object-c","url_name":"object-c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"NULL","url_name":"null","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"書き方","url_name":"%e6%9b%b8%e3%81%8d%e6%96%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Ethnam","url_name":"ethnam","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Photon","url_name":"photon","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"MXML","url_name":"mxml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":7},{"name":"checkstyle","url_name":"checkstyle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"遠藤フレームワーク","url_name":"%e9%81%a0%e8%97%a4%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%af%e3%83%bc%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"遠藤","url_name":"%e9%81%a0%e8%97%a4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"さくらクラウド","url_name":"%e3%81%95%e3%81%8f%e3%82%89%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"さくらのクラウド","url_name":"%e3%81%95%e3%81%8f%e3%82%89%e3%81%ae%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"suin","url_name":"suin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"Frank","url_name":"frank","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fb312397fa9d97f22d1356bf24dadda35f337b0e/medium.jpg?1409291745","follower_count":1,"item_count":4},{"name":"バックアップ","url_name":"%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"算数","url_name":"%e7%ae%97%e6%95%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"インターネット","url_name":"%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ドメイン","url_name":"%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MoinMoin","url_name":"moinmoin","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"データ分析","url_name":"%e3%83%87%e3%83%bc%e3%82%bf%e5%88%86%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ProMotion","url_name":"promotion","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"dmd","url_name":"dmd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PySide","url_name":"pyside","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"audio","url_name":"audio","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"StatusBar","url_name":"statusbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"すごい会議","url_name":"%e3%81%99%e3%81%94%e3%81%84%e4%bc%9a%e8%ad%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"wheezy","url_name":"wheezy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"shUnit2","url_name":"shunit2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"flycut","url_name":"flycut","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MacBook","url_name":"macbook","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"session","url_name":"session","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"QueryBuilder","url_name":"querybuilder","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DBAL","url_name":"dbal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"sitemap-generator","url_name":"sitemap-generator","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PGP","url_name":"pgp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"percol","url_name":"percol","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":13},{"name":"others","url_name":"others","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"kaggleNote","url_name":"kagglenote","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"supervisor","url_name":"supervisor","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":17},{"name":"Hopscotch","url_name":"hopscotch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gundo","url_name":"gundo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"小ネタ","url_name":"%e5%b0%8f%e3%83%8d%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":27},{"name":"ApacheCommons","url_name":"apachecommons","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"zshell","url_name":"zshell","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Commons-Lang","url_name":"commons-lang","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":13},{"name":"AST","url_name":"ast","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"googleplus","url_name":"googleplus","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"OpenVZ","url_name":"openvz","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":16},{"name":"Pythonz","url_name":"pythonz","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"CloudWarch","url_name":"cloudwarch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SpringBatch","url_name":"springbatch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"WEB-CAS","url_name":"web-cas","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PEG","url_name":"peg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"パーサ","url_name":"%e3%83%91%e3%83%bc%e3%82%b5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Commons-IO","url_name":"commons-io","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"キャプチャー","url_name":"%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a3%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NGUI","url_name":"ngui","icon_url":"/icons/medium/missing.png","follower_count":12,"item_count":16},{"name":"mod_small_light","url_name":"mod_small_light","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ngx_small_light","url_name":"ngx_small_light","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AntiSamy","url_name":"antisamy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Cisco","url_name":"cisco","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":6},{"name":"Aironet","url_name":"aironet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"入門機械学習","url_name":"%e5%85%a5%e9%96%80%e6%a9%9f%e6%a2%b0%e5%ad%a6%e7%bf%92","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"icd10","url_name":"icd10","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Volly","url_name":"volly","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"システム開発","url_name":"%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ウォーターフォール","url_name":"%e3%82%a6%e3%82%a9%e3%83%bc%e3%82%bf%e3%83%bc%e3%83%95%e3%82%a9%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"SML","url_name":"sml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"スタック","url_name":"%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"genuineblue","url_name":"genuineblue","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ranking","url_name":"ranking","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Chaplin","url_name":"chaplin","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"QRコード","url_name":"qr%e3%82%b3%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ZXing","url_name":"zxing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"RubyGemsRuby","url_name":"rubygemsruby","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ugilify","url_name":"ugilify","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Apache_Isis","url_name":"apache_isis","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pr","url_name":"pr","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"規約","url_name":"%e8%a6%8f%e7%b4%84","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"pullrequest","url_name":"pullrequest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"MetaPost","url_name":"metapost","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"METAFONT","url_name":"metafont","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"nested_attributes","url_name":"nested_attributes","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"TeXLive","url_name":"texlive","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"g++","url_name":"g%2b%2b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"autocomplete","url_name":"autocomplete","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"edX","url_name":"edx","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Macintosh","url_name":"macintosh","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"UByte","url_name":"ubyte","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"unsigned","url_name":"unsigned","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Passera","url_name":"passera","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ソースコード","url_name":"%e3%82%bd%e3%83%bc%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":15},{"name":"hylafax","url_name":"hylafax","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"bcrypt","url_name":"bcrypt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TestLink","url_name":"testlink","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"PullToRefreshListView","url_name":"pulltorefreshlistview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"鉄人化","url_name":"%e9%89%84%e4%ba%ba%e5%8c%96","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GoogleSite","url_name":"googlesite","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"chorme","url_name":"chorme","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ember-rails","url_name":"ember-rails","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"EC-CUBE","url_name":"ec-cube","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":7},{"name":"autofocus","url_name":"autofocus","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"オートフォーカス","url_name":"%e3%82%aa%e3%83%bc%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%82%ab%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"joomla","url_name":"joomla","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"rocktheme","url_name":"rocktheme","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GCM","url_name":"gcm","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":9},{"name":"base","url_name":"base","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"codeception","url_name":"codeception","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2c39cc00f8d7e326ccf67c49ccecbb5150315f75/medium.jpg?1376066162","follower_count":4,"item_count":4},{"name":"行き当たりばったり","url_name":"%e8%a1%8c%e3%81%8d%e5%bd%93%e3%81%9f%e3%82%8a%e3%81%b0%e3%81%a3%e3%81%9f%e3%82%8a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"構文解析","url_name":"%e6%a7%8b%e6%96%87%e8%a7%a3%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"evernote-sdk-ruby","url_name":"evernote-sdk-ruby","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"flump","url_name":"flump","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gclient","url_name":"gclient","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"minitest","url_name":"minitest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Applciation","url_name":"applciation","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Memcashed","url_name":"memcashed","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"1分シリーズ","url_name":"1%e5%88%86%e3%82%b7%e3%83%aa%e3%83%bc%e3%82%ba","icon_url":"/icons/medium/missing.png","follower_count":10,"item_count":18},{"name":"広告","url_name":"%e5%ba%83%e5%91%8a","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":8},{"name":"ライフハック","url_name":"%e3%83%a9%e3%82%a4%e3%83%95%e3%83%8f%e3%83%83%e3%82%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"bem","url_name":"bem","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":6},{"name":"単体テスト","url_name":"%e5%8d%98%e4%bd%93%e3%83%86%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"b2u","url_name":"b2u","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ほげ","url_name":"%e3%81%bb%e3%81%92","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":-1},{"name":"Mink","url_name":"mink","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Spotlight","url_name":"spotlight","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"jax","url_name":"jax","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"代数型","url_name":"%e4%bb%a3%e6%95%b0%e5%9e%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"datatype","url_name":"datatype","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Scala-DT","url_name":"scala-dt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"daemontools","url_name":"daemontools","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"list.js","url_name":"list.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"vimscript","url_name":"vimscript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"x86_64","url_name":"x86_64","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"hatenabookmark","url_name":"hatenabookmark","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Vagarant","url_name":"vagarant","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"JulyTechFesta","url_name":"julytechfesta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"#techfesta","url_name":"%23techfesta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"0","url_name":"0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"jQuerySparklines","url_name":"jquerysparklines","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"RunningLean","url_name":"runninglean","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pencil","url_name":"pencil","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"test-kitchen","url_name":"test-kitchen","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":19},{"name":"opschef_ja","url_name":"opschef_ja","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Netsh","url_name":"netsh","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"fsniper","url_name":"fsniper","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"勉強会メモ","url_name":"%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%83%a1%e3%83%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"黒曜石","url_name":"%e9%bb%92%e6%9b%9c%e7%9f%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"hbstudy","url_name":"hbstudy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"回転","url_name":"%e5%9b%9e%e8%bb%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ag","url_name":"ag","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":11},{"name":"RHEL","url_name":"rhel","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4b5ac63a322ec9d767ea1ac023977e5130b93f68/medium.jpg?1388378782","follower_count":9,"item_count":26},{"name":"MTAppjQuery","url_name":"mtappjquery","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"スプラッシュ","url_name":"%e3%82%b9%e3%83%97%e3%83%a9%e3%83%83%e3%82%b7%e3%83%a5","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"stash","url_name":"stash","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"スペシャリスト","url_name":"%e3%82%b9%e3%83%9a%e3%82%b7%e3%83%a3%e3%83%aa%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tudukeru","url_name":"tudukeru","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"EWEL","url_name":"ewel","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"tinyissue","url_name":"tinyissue","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Railsでフォロー機能","url_name":"rails%e3%81%a7%e3%83%95%e3%82%a9%e3%83%ad%e3%83%bc%e6%a9%9f%e8%83%bd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"buildpack","url_name":"buildpack","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ZOMEKI","url_name":"zomeki","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"chkconfig","url_name":"chkconfig","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PIL","url_name":"pil","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"seezoo","url_name":"seezoo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DevEnv","url_name":"devenv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Dbus","url_name":"dbus","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"gpg","url_name":"gpg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"cuenote","url_name":"cuenote","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"管理画面","url_name":"%e7%ae%a1%e7%90%86%e7%94%bb%e9%9d%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"UIKit","url_name":"uikit","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"Qdmail","url_name":"qdmail","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"postach.io","url_name":"postach.io","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":1},{"name":"Q4M","url_name":"q4m","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ChromeDevTool","url_name":"chromedevtool","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"key","url_name":"key","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"JQUER","url_name":"jquer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Beer","url_name":"beer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"USER_AGENT","url_name":"user_agent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Device","url_name":"device","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Cypher","url_name":"cypher","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AppEngine","url_name":"appengine","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"SDK","url_name":"sdk","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":9},{"name":"GoogleMapsAndroidV2","url_name":"googlemapsandroidv2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"TiShadow","url_name":"tishadow","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"win","url_name":"win","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"addSourceUnit","url_name":"addsourceunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TypeScriptCompiler","url_name":"typescriptcompiler","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"paraphernalia","url_name":"paraphernalia","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MvvmCross","url_name":"mvvmcross","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/c4c21effc87064bca9017f136056421d8d529e93/medium.jpg?1393997236","follower_count":4,"item_count":13},{"name":"AndroiVM","url_name":"androivm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Genymotion","url_name":"genymotion","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":25},{"name":"AndroVM","url_name":"androvm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Select2","url_name":"select2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AngularUI","url_name":"angularui","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"pthread","url_name":"pthread","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"alloy.jmk","url_name":"alloy.jmk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"MP3","url_name":"mp3","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"tt-rss","url_name":"tt-rss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"TinyTinyRSS","url_name":"tinytinyrss","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"拡張機能","url_name":"%e6%8b%a1%e5%bc%b5%e6%a9%9f%e8%83%bd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"git-alias","url_name":"git-alias","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Express.js","url_name":"express.js","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":15},{"name":"Rendr","url_name":"rendr","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":4},{"name":"devtool","url_name":"devtool","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"sprite","url_name":"sprite","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"シー言語","url_name":"%e3%82%b7%e3%83%bc%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"IAM","url_name":"iam","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"dovecot","url_name":"dovecot","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SurfaceView","url_name":"surfaceview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SAP","url_name":"sap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"HANA","url_name":"hana","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"macbookair","url_name":"macbookair","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":6},{"name":"ejs","url_name":"ejs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Connman","url_name":"connman","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PHP小ネタ","url_name":"php%e5%b0%8f%e3%83%8d%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"Unity4","url_name":"unity4","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":8},{"name":"GitBucket","url_name":"gitbucket","icon_url":"/icons/medium/missing.png","follower_count":26,"item_count":13},{"name":"StackEdit","url_name":"stackedit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Programming-language","url_name":"programming-language","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Xperia_A","url_name":"xperia_a","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ROME","url_name":"rome","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Phalcon","url_name":"phalcon","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/ed97225ed6a0585013a3d63a864097f77a4537f5/medium.jpg?1386767259","follower_count":57,"item_count":55},{"name":"PyDev","url_name":"pydev","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Google_IME","url_name":"google_ime","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ActionBar","url_name":"actionbar","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"flurry","url_name":"flurry","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"RDKit","url_name":"rdkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"contenteditable","url_name":"contenteditable","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"placeholder","url_name":"placeholder","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Scalatra","url_name":"scalatra","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"言語作成","url_name":"%e8%a8%80%e8%aa%9e%e4%bd%9c%e6%88%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"bakthat","url_name":"bakthat","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Neko","url_name":"neko","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/a75dfff22e7c102f894ff2657e2fc3de44bb364a/medium.jpg?1374990753","follower_count":1,"item_count":3},{"name":"lxc","url_name":"lxc","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":38},{"name":"CodeRunner","url_name":"coderunner","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"FreeMind","url_name":"freemind","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"+Ultra","url_name":"%2bultra","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PDP11","url_name":"pdp11","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ディスアセンブラ","url_name":"%e3%83%87%e3%82%a3%e3%82%b9%e3%82%a2%e3%82%bb%e3%83%b3%e3%83%96%e3%83%a9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"v7appcompat","url_name":"v7appcompat","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"BigDecimal","url_name":"bigdecimal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"経路検索","url_name":"%e7%b5%8c%e8%b7%af%e6%a4%9c%e7%b4%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アーキテクト","url_name":"%e3%82%a2%e3%83%bc%e3%82%ad%e3%83%86%e3%82%af%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"スクリプト言語","url_name":"%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lamp","url_name":"lamp","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"pentaho","url_name":"pentaho","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/9bd1c63f3d4d5d51825efd2c75d7b3a1aa21bb1e/medium.jpg?1409636333","follower_count":0,"item_count":2},{"name":"SublimeLinter","url_name":"sublimelinter","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"ST3","url_name":"st3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"uploadify","url_name":"uploadify","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"同期","url_name":"%e5%90%8c%e6%9c%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"plenv","url_name":"plenv","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"album","url_name":"album","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"photo","url_name":"photo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mysqldump","url_name":"mysqldump","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"ListView","url_name":"listview","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"struts2","url_name":"struts2","icon_url":"/icons/medium/missing.png","follower_count":13,"item_count":25},{"name":"シェーダ","url_name":"%e3%82%b7%e3%82%a7%e3%83%bc%e3%83%80","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"心理分析管理ソフト","url_name":"%e5%bf%83%e7%90%86%e5%88%86%e6%9e%90%e7%ae%a1%e7%90%86%e3%82%bd%e3%83%95%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"longpress","url_name":"longpress","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"長押し","url_name":"%e9%95%b7%e6%8a%bc%e3%81%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Fuel_PHP","url_name":"fuel_php","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"形態素解析","url_name":"%e5%bd%a2%e6%85%8b%e7%b4%a0%e8%a7%a3%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":5},{"name":"igo-php","url_name":"igo-php","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Android-x86","url_name":"android-x86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"pocket","url_name":"pocket","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":5},{"name":"route53","url_name":"route53","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":14},{"name":"giftdays","url_name":"giftdays","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Ook!","url_name":"ook%21","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"xtrabackup","url_name":"xtrabackup","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"percona","url_name":"percona","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"webpay-scaffold","url_name":"webpay-scaffold","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"端末","url_name":"%e7%ab%af%e6%9c%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pligg","url_name":"pligg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"automysqlbackup","url_name":"automysqlbackup","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"taosysdev01","url_name":"taosysdev01","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"公開鍵認証方式","url_name":"%e5%85%ac%e9%96%8b%e9%8d%b5%e8%aa%8d%e8%a8%bc%e6%96%b9%e5%bc%8f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"デバッグ","url_name":"%e3%83%87%e3%83%90%e3%83%83%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"better_errors","url_name":"better_errors","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ステージング環境","url_name":"%e3%82%b9%e3%83%86%e3%83%bc%e3%82%b8%e3%83%b3%e3%82%b0%e7%92%b0%e5%a2%83","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Handlebars.js","url_name":"handlebars.js","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"カットアンドペースト","url_name":"%e3%82%ab%e3%83%83%e3%83%88%e3%82%a2%e3%83%b3%e3%83%89%e3%83%9a%e3%83%bc%e3%82%b9%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mediation","url_name":"mediation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"adMob","url_name":"admob","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":11},{"name":"nend","url_name":"nend","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"iPhone開発","url_name":"iphone%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":17},{"name":"4inch対応","url_name":"4inch%e5%af%be%e5%bf%9c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"iPhone5対応","url_name":"iphone5%e5%af%be%e5%bf%9c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"日誌","url_name":"%e6%97%a5%e8%aa%8c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"日々記録","url_name":"%e6%97%a5%e3%80%85%e8%a8%98%e9%8c%b2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tricks","url_name":"tricks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"リジェクト","url_name":"%e3%83%aa%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ECサービス","url_name":"ec%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"フナムシ","url_name":"%e3%83%95%e3%83%8a%e3%83%a0%e3%82%b7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"expression","url_name":"expression","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AfterEffects","url_name":"aftereffects","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":4},{"name":"http2.0","url_name":"http2.0","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":7},{"name":"ザイン","url_name":"%e3%82%b6%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"デザン","url_name":"%e3%83%87%e3%82%b6%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"デザアン","url_name":"%e3%83%87%e3%82%b6%e3%82%a2%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"NStimer","url_name":"nstimer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"UUIDの取得方法","url_name":"uuid%e3%81%ae%e5%8f%96%e5%be%97%e6%96%b9%e6%b3%95","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ランダム","url_name":"%e3%83%a9%e3%83%b3%e3%83%80%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"NSLogを消す","url_name":"nslog%e3%82%92%e6%b6%88%e3%81%99","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"remotipart","url_name":"remotipart","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"シェル芸","url_name":"%e3%82%b7%e3%82%a7%e3%83%ab%e8%8a%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"license","url_name":"license","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Vulcan","url_name":"vulcan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"exim4","url_name":"exim4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jquery-rails","url_name":"jquery-rails","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アクセス許可","url_name":"%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e8%a8%b1%e5%8f%af","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"VNC","url_name":"vnc","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"Flipsnap","url_name":"flipsnap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DXライブラリ","url_name":"dx%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":11},{"name":"DxLib","url_name":"dxlib","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"論文","url_name":"%e8%ab%96%e6%96%87","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"推薦システム","url_name":"%e6%8e%a8%e8%96%a6%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"GDC","url_name":"gdc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"EditorWindow","url_name":"editorwindow","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GUIStyle","url_name":"guistyle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"packer","url_name":"packer","icon_url":"/icons/medium/missing.png","follower_count":46,"item_count":30},{"name":"xib","url_name":"xib","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"AmazonRDS","url_name":"amazonrds","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"wayland","url_name":"wayland","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/14c9e022be135af7aac33f2fe13e4a4130815cc5/medium.jpg?1388310813","follower_count":1,"item_count":2},{"name":"TizenIVI","url_name":"tizenivi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"Ptyon","url_name":"ptyon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"coffeelint","url_name":"coffeelint","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"flycheck","url_name":"flycheck","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"googleスクリプト","url_name":"google%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"失敗談","url_name":"%e5%a4%b1%e6%95%97%e8%ab%87","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Webページ","url_name":"web%e3%83%9a%e3%83%bc%e3%82%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"マイブーム","url_name":"%e3%83%9e%e3%82%a4%e3%83%96%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lassie","url_name":"lassie","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"scraping","url_name":"scraping","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":12},{"name":"コーディング規約","url_name":"%e3%82%b3%e3%83%bc%e3%83%87%e3%82%a3%e3%83%b3%e3%82%b0%e8%a6%8f%e7%b4%84","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"LeapMotion","url_name":"leapmotion","icon_url":"/icons/medium/missing.png","follower_count":16,"item_count":11},{"name":"Discourse","url_name":"discourse","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"audioTrack","url_name":"audiotrack","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"php-fpm","url_name":"php-fpm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":11},{"name":"ganglia","url_name":"ganglia","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"jq","url_name":"jq","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/49086fb69f315460839c897714dce50d589146ab/medium.jpg?1386595669","follower_count":7,"item_count":27},{"name":"ServiceStack","url_name":"servicestack","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"RubyOnRailsTutorial","url_name":"rubyonrailstutorial","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"berkfshelf","url_name":"berkfshelf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"WALK","url_name":"walk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"vmdk","url_name":"vmdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"mount","url_name":"mount","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"VMDKMounter","url_name":"vmdkmounter","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"IIR","url_name":"iir","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"JSR303","url_name":"jsr303","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Validator.nu","url_name":"validator.nu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"関連付け","url_name":"%e9%96%a2%e9%80%a3%e4%bb%98%e3%81%91","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ファイル操作","url_name":"%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e6%93%8d%e4%bd%9c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"github-hosting","url_name":"github-hosting","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"github-pages","url_name":"github-pages","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":12},{"name":"Oculus","url_name":"oculus","icon_url":"/icons/medium/missing.png","follower_count":33,"item_count":16},{"name":"Babylon.js","url_name":"babylon.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"CubicVR.js","url_name":"cubicvr.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"procmail","url_name":"procmail","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"Asset","url_name":"asset","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"お遊び","url_name":"%e3%81%8a%e9%81%8a%e3%81%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"bashmarks","url_name":"bashmarks","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"jquery-ui","url_name":"jquery-ui","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":6},{"name":"dll","url_name":"dll","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"コンパイル","url_name":"%e3%82%b3%e3%83%b3%e3%83%91%e3%82%a4%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"AppStore","url_name":"appstore","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"i3","url_name":"i3","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"proxmox","url_name":"proxmox","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":27},{"name":"openoffice","url_name":"openoffice","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"libreoffice","url_name":"libreoffice","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":6},{"name":"zbxapi","url_name":"zbxapi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"KeyValueObserving","url_name":"keyvalueobserving","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"drobo","url_name":"drobo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"djunit","url_name":"djunit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Generic","url_name":"generic","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"async","url_name":"async","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"XDamage","url_name":"xdamage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"dmraid","url_name":"dmraid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ODP.NET","url_name":"odp.net","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"64bit","url_name":"64bit","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"IIS","url_name":"iis","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":8},{"name":"xmodmap","url_name":"xmodmap","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"xcape","url_name":"xcape","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SandS","url_name":"sands","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tftp","url_name":"tftp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"dhcpd","url_name":"dhcpd","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"twittert","url_name":"twittert","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"zend_studio","url_name":"zend_studio","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"pico","url_name":"pico","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Odango","url_name":"odango","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"seap","url_name":"seap","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"naqua","url_name":"naqua","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"macvim","url_name":"macvim","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":7},{"name":"mp4","url_name":"mp4","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"portal","url_name":"portal","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"chugai","url_name":"chugai","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"cachatto","url_name":"cachatto","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"crc","url_name":"crc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"用語","url_name":"%e7%94%a8%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"force.com","url_name":"force.com","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/2857e8d3009eb568660ac006007356aa80af4097/medium.jpg?1395458753","follower_count":6,"item_count":8},{"name":"BaaS","url_name":"baas","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":17},{"name":"pythone","url_name":"pythone","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"PDF出力","url_name":"pdf%e5%87%ba%e5%8a%9b","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"microstrategy","url_name":"microstrategy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"mdm","url_name":"mdm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"MRこんしぇる","url_name":"mr%e3%81%93%e3%82%93%e3%81%97%e3%81%87%e3%82%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"iDEP","url_name":"idep","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"developer","url_name":"developer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"xyzzy","url_name":"xyzzy","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/05c61abfce11333cfc37549a982aa2a5738d9be6/medium.jpg?1399243958","follower_count":4,"item_count":4},{"name":"DI","url_name":"di","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"DependencyInjection","url_name":"dependencyinjection","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"X","url_name":"x","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"gitBreak","url_name":"gitbreak","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"autoload","url_name":"autoload","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"spl_autoload","url_name":"spl_autoload","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lxml.html","url_name":"lxml.html","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"z","url_name":"z","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"autojump","url_name":"autojump","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"using","url_name":"using","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"active_decorator","url_name":"active_decorator","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Apache_Bench","url_name":"apache_bench","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"writing","url_name":"writing","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"zsh-completions","url_name":"zsh-completions","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"none","url_name":"none","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"QuickDialog","url_name":"quickdialog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Parse.com","url_name":"parse.com","icon_url":"/icons/medium/missing.png","follower_count":7,"item_count":8},{"name":"UnityScript","url_name":"unityscript","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"exe","url_name":"exe","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Margkown","url_name":"margkown","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"slideshow","url_name":"slideshow","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"JavaEE","url_name":"javaee","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":19},{"name":"Weld","url_name":"weld","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"CDI","url_name":"cdi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":8},{"name":"ChromeCast","url_name":"chromecast","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/f24ebabde4cda4aa8625d53e488540b19015bc55/medium.jpg?1376880351","follower_count":26,"item_count":6},{"name":"脆弱性","url_name":"%e8%84%86%e5%bc%b1%e6%80%a7","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/178b5936afa41997cca4ab4981294d26d8f6edbf/medium.jpg?1409292048","follower_count":4,"item_count":27},{"name":"Weblogic","url_name":"weblogic","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"crara4","url_name":"crara4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"amazonEC2","url_name":"amazonec2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"UIWebView","url_name":"uiwebview","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"capistrano-ext","url_name":"capistrano-ext","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"meta-tags","url_name":"meta-tags","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"存在しないタグ","url_name":"%e5%ad%98%e5%9c%a8%e3%81%97%e3%81%aa%e3%81%84%e3%82%bf%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"スキーム","url_name":"%e3%82%b9%e3%82%ad%e3%83%bc%e3%83%a0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Tika","url_name":"tika","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"numer0n","url_name":"numer0n","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"evnet","url_name":"evnet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"xslate","url_name":"xslate","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"SWF","url_name":"swf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"pronunciation","url_name":"pronunciation","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"モデリング","url_name":"%e3%83%a2%e3%83%87%e3%83%aa%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"rasberypi","url_name":"rasberypi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ビジネスノウハウ","url_name":"%e3%83%93%e3%82%b8%e3%83%8d%e3%82%b9%e3%83%8e%e3%82%a6%e3%83%8f%e3%82%a6","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ガイドライン","url_name":"%e3%82%ac%e3%82%a4%e3%83%89%e3%83%a9%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"GoogleCastSDK","url_name":"googlecastsdk","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"バッチ","url_name":"%e3%83%90%e3%83%83%e3%83%81","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"限定共有","url_name":"%e9%99%90%e5%ae%9a%e5%85%b1%e6%9c%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Comment","url_name":"comment","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Refactoring","url_name":"refactoring","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"再帰","url_name":"%e5%86%8d%e5%b8%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"技術書","url_name":"%e6%8a%80%e8%a1%93%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"Howto","url_name":"howto","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":7},{"name":"NetCommons2","url_name":"netcommons2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"pixta","url_name":"pixta","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"assetspipline","url_name":"assetspipline","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アセットパイプライン","url_name":"%e3%82%a2%e3%82%bb%e3%83%83%e3%83%88%e3%83%91%e3%82%a4%e3%83%97%e3%83%a9%e3%82%a4%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Webclipping","url_name":"webclipping","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ビジネス書","url_name":"%e3%83%93%e3%82%b8%e3%83%8d%e3%82%b9%e6%9b%b8","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"fusion-IO","url_name":"fusion-io","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ライブラリ管理","url_name":"%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e7%ae%a1%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"repo","url_name":"repo","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"capybara-webkit","url_name":"capybara-webkit","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Ginnie","url_name":"ginnie","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/dc36e97008d039c8fbe29daf0b19d2df9f68d8cc/medium.jpg?1387469992","follower_count":1,"item_count":2},{"name":"heartbeat","url_name":"heartbeat","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":3},{"name":"drbd","url_name":"drbd","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":9},{"name":"Feedback","url_name":"feedback","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"clonezilla","url_name":"clonezilla","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Strider","url_name":"strider","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"wsgi","url_name":"wsgi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jrubyfx","url_name":"jrubyfx","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"Typesciprt","url_name":"typesciprt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"インフラ","url_name":"%e3%82%a4%e3%83%b3%e3%83%95%e3%83%a9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"jBatch","url_name":"jbatch","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"npn","url_name":"npn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"baserCMS","url_name":"basercms","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/cf8b7677aff9f15afc5238fa18a6a5bcaaf190cb/medium.jpg?1395939051","follower_count":7,"item_count":8},{"name":"CASL","url_name":"casl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Grackle","url_name":"grackle","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ext4","url_name":"ext4","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"WebWorker","url_name":"webworker","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"書籍","url_name":"%e6%9b%b8%e7%b1%8d","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"degitalocean","url_name":"degitalocean","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"apn","url_name":"apn","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"urbanairship","url_name":"urbanairship","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Specs2","url_name":"specs2","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":10},{"name":"Volt","url_name":"volt","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"OculusRift","url_name":"oculusrift","icon_url":"/icons/medium/missing.png","follower_count":15,"item_count":11},{"name":"スクロール","url_name":"%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"kitchen","url_name":"kitchen","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Physics","url_name":"physics","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"物理エンジン","url_name":"%e7%89%a9%e7%90%86%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"情報検索","url_name":"%e6%83%85%e5%a0%b1%e6%a4%9c%e7%b4%a2","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":3},{"name":"docs","url_name":"docs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Rig","url_name":"rig","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GoogleWebFonts","url_name":"googlewebfonts","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ails3_acts_as_paranoid","url_name":"ails3_acts_as_paranoid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"AutoScaling","url_name":"autoscaling","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Enumerize","url_name":"enumerize","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"foreigner","url_name":"foreigner","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Maven2","url_name":"maven2","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"#test","url_name":"%23test","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"QEMU","url_name":"qemu","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"#javascript","url_name":"%23javascript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"基本","url_name":"%e5%9f%ba%e6%9c%ac","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"JswfPlayer","url_name":"jswfplayer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"FlashLite","url_name":"flashlite","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"pflogsumm","url_name":"pflogsumm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"maillog","url_name":"maillog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ModSecurity","url_name":"modsecurity","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":26},{"name":"GlusterFS","url_name":"glusterfs","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":4},{"name":"Pixelmator","url_name":"pixelmator","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"時系列","url_name":"%e6%99%82%e7%b3%bb%e5%88%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"EaselJS","url_name":"easeljs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"objcopy","url_name":"objcopy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"binutils","url_name":"binutils","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"beaglebone","url_name":"beaglebone","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":1},{"name":"OWASP_CRS","url_name":"owasp_crs","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"共同開発","url_name":"%e5%85%b1%e5%90%8c%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"バージョン管理","url_name":"%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e7%ae%a1%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":4},{"name":"チーム開発","url_name":"%e3%83%81%e3%83%bc%e3%83%a0%e9%96%8b%e7%99%ba","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":4},{"name":"asdfaksdjfalj","url_name":"asdfaksdjfalj","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"python3","url_name":"python3","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/b5e470f347167e19ae6620669f5056d6cfd93c2d/medium.jpg?1409485000","follower_count":4,"item_count":27},{"name":"Kwik","url_name":"kwik","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"lzop","url_name":"lzop","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SpringRoo","url_name":"springroo","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"仕事","url_name":"%e4%bb%95%e4%ba%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"アマオケ検索","url_name":"%e3%82%a2%e3%83%9e%e3%82%aa%e3%82%b1%e6%a4%9c%e7%b4%a2","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"marionette","url_name":"marionette","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/27e41cf6ab8ba391c47d078203d7ad9a1a574a0d/medium.jpg?1378295756","follower_count":8,"item_count":3},{"name":"lita","url_name":"lita","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"sox","url_name":"sox","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"アソシエーション分析","url_name":"%e3%82%a2%e3%82%bd%e3%82%b7%e3%82%a8%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%88%86%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":9},{"name":"tree","url_name":"tree","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"aws-cli","url_name":"aws-cli","icon_url":"/icons/medium/missing.png","follower_count":4,"item_count":41},{"name":"pp3diso","url_name":"pp3diso","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"クォータービュー","url_name":"%e3%82%af%e3%82%a9%e3%83%bc%e3%82%bf%e3%83%bc%e3%83%93%e3%83%a5%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ADO","url_name":"ado","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SeleniumIDE","url_name":"seleniumide","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/d56f89e9789c5997f75c31f1493d7daab620e653/medium.jpg?1409291153","follower_count":5,"item_count":10},{"name":"heteml","url_name":"heteml","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"okinawa","url_name":"okinawa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Scutum","url_name":"scutum","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GFM","url_name":"gfm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"日付計算","url_name":"%e6%97%a5%e4%bb%98%e8%a8%88%e7%ae%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"libproc","url_name":"libproc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"ipv4","url_name":"ipv4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Win7","url_name":"win7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"OLPC","url_name":"olpc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ラムダ計算","url_name":"%e3%83%a9%e3%83%a0%e3%83%80%e8%a8%88%e7%ae%97","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"テスト用データ","url_name":"%e3%83%86%e3%82%b9%e3%83%88%e7%94%a8%e3%83%87%e3%83%bc%e3%82%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"repcached","url_name":"repcached","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"solomon","url_name":"solomon","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"グラフ","url_name":"%e3%82%b0%e3%83%a9%e3%83%95","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":5},{"name":"AWS_SDK","url_name":"aws_sdk","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":17},{"name":"Facebookアプリアプリ","url_name":"facebook%e3%82%a2%e3%83%97%e3%83%aa%e3%82%a2%e3%83%97%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ライセンス","url_name":"%e3%83%a9%e3%82%a4%e3%82%bb%e3%83%b3%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"GPL","url_name":"gpl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"MIT-License","url_name":"mit-license","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"ApacheLicense","url_name":"apachelicense","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DFPスタンダード","url_name":"dfp%e3%82%b9%e3%82%bf%e3%83%b3%e3%83%80%e3%83%bc%e3%83%89","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"技術英語","url_name":"%e6%8a%80%e8%a1%93%e8%8b%b1%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Octpress","url_name":"octpress","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":0},{"name":"commons-digester","url_name":"commons-digester","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"shapado","url_name":"shapado","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ネットワーク分析","url_name":"%e3%83%8d%e3%83%83%e3%83%88%e3%83%af%e3%83%bc%e3%82%af%e5%88%86%e6%9e%90","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":8},{"name":"natto","url_name":"natto","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Android-Query","url_name":"android-query","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":2},{"name":"ArtRage","url_name":"artrage","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Doorkeeper","url_name":"doorkeeper","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jpg","url_name":"jpg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"sequelize","url_name":"sequelize","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"x264","url_name":"x264","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Facebookアプリ","url_name":"facebook%e3%82%a2%e3%83%97%e3%83%aa","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"Audacity","url_name":"audacity","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"CoreText","url_name":"coretext","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"teraterm","url_name":"teraterm","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":13},{"name":"ttl","url_name":"ttl","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"puffing-billy","url_name":"puffing-billy","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"io-drive","url_name":"io-drive","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"プロジェクト作る","url_name":"%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e4%bd%9c%e3%82%8b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"kibana3","url_name":"kibana3","icon_url":"/icons/medium/missing.png","follower_count":30,"item_count":29},{"name":"kibana","url_name":"kibana","icon_url":"/icons/medium/missing.png","follower_count":21,"item_count":8},{"name":"Leiningen","url_name":"leiningen","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"redcarpet","url_name":"redcarpet","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ClipMenu","url_name":"clipmenu","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"railse3","url_name":"railse3","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ioDrive","url_name":"iodrive","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"jQgrid","url_name":"jqgrid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"xmlrpc","url_name":"xmlrpc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Mandrill","url_name":"mandrill","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ReviewBoard","url_name":"reviewboard","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"pdo_oci","url_name":"pdo_oci","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"プロキシ","url_name":"%e3%83%97%e3%83%ad%e3%82%ad%e3%82%b7","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"RDP","url_name":"rdp","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"raty","url_name":"raty","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"buffalo","url_name":"buffalo","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Cent","url_name":"cent","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ATS","url_name":"ats","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ros_tutorial","url_name":"ros_tutorial","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"ghpages","url_name":"ghpages","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"devise_invitable","url_name":"devise_invitable","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"solomonproject","url_name":"solomonproject","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"リスナー","url_name":"%e3%83%aa%e3%82%b9%e3%83%8a%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"reflog","url_name":"reflog","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Bintray","url_name":"bintray","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"DDNS","url_name":"ddns","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":5},{"name":"MCMC","url_name":"mcmc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"マーケティング","url_name":"%e3%83%9e%e3%83%bc%e3%82%b1%e3%83%86%e3%82%a3%e3%83%b3%e3%82%b0","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"gephi","url_name":"gephi","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":10},{"name":"IPMI","url_name":"ipmi","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ElasticMapReduce","url_name":"elasticmapreduce","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"grc","url_name":"grc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"文字列処理","url_name":"%e6%96%87%e5%ad%97%e5%88%97%e5%87%a6%e7%90%86","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Zentest","url_name":"zentest","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ActionBarSherlock","url_name":"actionbarsherlock","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"Frege","url_name":"frege","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"Preseed","url_name":"preseed","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"apt-get","url_name":"apt-get","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"ln","url_name":"ln","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"シリアライズ","url_name":"%e3%82%b7%e3%83%aa%e3%82%a2%e3%83%a9%e3%82%a4%e3%82%ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"InnoDB","url_name":"innodb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"IE9.js","url_name":"ie9.js","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"tinyMCE","url_name":"tinymce","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"smartPhone","url_name":"smartphone","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"ページャー","url_name":"%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"linkshare","url_name":"linkshare","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"PHG","url_name":"phg","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"アフィリエイト","url_name":"%e3%82%a2%e3%83%95%e3%82%a3%e3%83%aa%e3%82%a8%e3%82%a4%e3%83%88","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"yahoo","url_name":"yahoo","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/23d6a3ba7286c64618b69a6803140a7be79d4ddd/medium.jpg?1384503756","follower_count":2,"item_count":1},{"name":"ba","url_name":"ba","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"package.json","url_name":"package.json","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"多言語","url_name":"%e5%a4%9a%e8%a8%80%e8%aa%9e","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"ハマった","url_name":"%e3%83%8f%e3%83%9e%e3%81%a3%e3%81%9f","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"browserify","url_name":"browserify","icon_url":"/icons/medium/missing.png","follower_count":8,"item_count":12},{"name":"csv2table","url_name":"csv2table","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"NativeDriver","url_name":"nativedriver","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"errbit","url_name":"errbit","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":3},{"name":"atm","url_name":"atm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"逆射影変換","url_name":"%e9%80%86%e5%b0%84%e5%bd%b1%e5%a4%89%e6%8f%9b","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"sublime-text","url_name":"sublime-text","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"inherits","url_name":"inherits","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"継承","url_name":"%e7%b6%99%e6%89%bf","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":6},{"name":"Ema","url_name":"ema","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"ClipStudio","url_name":"clipstudio","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"xcode5","url_name":"xcode5","icon_url":"/icons/medium/missing.png","follower_count":5,"item_count":29},{"name":"いいね","url_name":"%e3%81%84%e3%81%84%e3%81%ad","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"DKIM","url_name":"dkim","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"新人研修","url_name":"%e6%96%b0%e4%ba%ba%e7%a0%94%e4%bf%ae","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"Talend","url_name":"talend","icon_url":"/icons/medium/missing.png","follower_count":3,"item_count":2},{"name":"iReport","url_name":"ireport","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"GhostScript","url_name":"ghostscript","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"CrashPlan","url_name":"crashplan","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"code","url_name":"code","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/4c004270e5df0d97d51953802a9e44d7416bf723/medium.jpg?1387914728","follower_count":1,"item_count":8},{"name":"自作PC作成用調査","url_name":"%e8%87%aa%e4%bd%9cpc%e4%bd%9c%e6%88%90%e7%94%a8%e8%aa%bf%e6%9f%bb","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"再インストール","url_name":"%e5%86%8d%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"masonry","url_name":"masonry","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"カンファレンス","url_name":"%e3%82%ab%e3%83%b3%e3%83%95%e3%82%a1%e3%83%ac%e3%83%b3%e3%82%b9","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"pylab","url_name":"pylab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"SpriteKit","url_name":"spritekit","icon_url":"/icons/medium/missing.png","follower_count":29,"item_count":32},{"name":"JsTestDriver","url_name":"jstestdriver","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":5},{"name":"shibalab","url_name":"shibalab","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"Max-MSP","url_name":"max-msp","icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/7761e1edcbe17dc0be7092cfd6194d83a7d88c04/medium.jpg?1386121977","follower_count":19,"item_count":9},{"name":"Xquartz","url_name":"xquartz","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":3},{"name":"objectivei-c","url_name":"objectivei-c","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"物理演算","url_name":"%e7%89%a9%e7%90%86%e6%bc%94%e7%ae%97","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":2},{"name":"lean","url_name":"lean","icon_url":"/icons/medium/missing.png","follower_count":6,"item_count":3},{"name":"slickgrid","url_name":"slickgrid","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":7},{"name":"frontman","url_name":"frontman","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"scribe","url_name":"scribe","icon_url":"/icons/medium/missing.png","follower_count":1,"item_count":1},{"name":"Rail4","url_name":"rail4","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"SendGrid","url_name":"sendgrid","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":4},{"name":"learnOSM","url_name":"learnosm","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"power-assert","url_name":"power-assert","icon_url":"/icons/medium/missing.png","follower_count":2,"item_count":3},{"name":"MyDevEnv","url_name":"mydevenv","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":0},{"name":"zshrc","url_name":"zshrc","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":1},{"name":"lexer","url_name":"lexer","icon_url":"/icons/medium/missing.png","follower_count":0,"item_count":2},{"name":"流体","url_name":"%e6%b5%81%e4%bd%93","
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment