<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Paradigm.ru &#187; инфографика</title>
	<atom:link href="http://paradigm.ru/tag/%d0%b8%d0%bd%d1%84%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%ba%d0%b0/feed" rel="self" type="application/rss+xml" />
	<link>http://paradigm.ru</link>
	<description>Блог Александра Мусаева</description>
	<lastBuildDate>Sat, 08 May 2010 16:13:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Иерархия темплейтов WordPress</title>
		<link>http://paradigm.ru/2008/05/wordpress-template-diagram</link>
		<comments>http://paradigm.ru/2008/05/wordpress-template-diagram#comments</comments>
		<pubDate>Fri, 02 May 2008 18:08:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[веб-разработка]]></category>
		<category><![CDATA[инфографика]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=303</guid>
		<description><![CDATA[На&#160;блоге WPCandy опубликована классная схема шаблонных файлов WordPress, дающая очень ясное и&#160;наглядное представление об&#160;алгоритме выбора шаблона и&#160;том, какие вообще шаблоны бывают. Такая диаграмма может быть весьма полезна при создании своей собственной темы оформления для WP&#160;или оптимизации уже существующей. Даже странно, что в&#160;официальной документации не&#160;сделали графического представления. (клик ту&#160;зум) Уже четвертый пост подряд про WordPress. Надо [...]]]></description>
			<content:encoded><![CDATA[<p>На&nbsp;блоге <a href="http://wpcandy.com/" ref="nofollow">WPCandy</a> опубликована классная схема шаблонных файлов WordPress, дающая очень ясное и&nbsp;наглядное представление об&nbsp;алгоритме выбора шаблона и&nbsp;том, какие вообще шаблоны бывают. Такая диаграмма может быть весьма полезна при создании своей собственной темы оформления для WP&nbsp;или оптимизации уже существующей.</p>
<p>Даже странно, что в&nbsp;официальной документации не&nbsp;сделали графического представления.</p>
<div class="i"><a href='http://wpcandy.com/mint/pepper/orderedlist/downloads/download.php?file=http%3A//wpcandy.com/wp-content/uploads/2008/04/wp-diagram.jpg' rel="nofollow"><img src="http://paradigm.ru/;-)/2008/05/wp-diagram-preview.jpg" alt="" title="wp-diagram-preview" width="600" height="240" /></a><br />(клик ту&nbsp;зум)</div>
<p>Уже четвертый пост подряд про WordPress. Надо что-то менять.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2008/05/wordpress-template-diagram/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Futurico Timeline 2008</title>
		<link>http://paradigm.ru/2007/12/futurico-timeline-2008</link>
		<comments>http://paradigm.ru/2007/12/futurico-timeline-2008#comments</comments>
		<pubDate>Mon, 17 Dec 2007 22:40:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[futurico]]></category>
		<category><![CDATA[инфографика]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2007/12/18/futurico-timeline-2008/</guid>
		<description><![CDATA[В продолжении темы инфографики. Очень понравился таймлайн Футурико. Равно как по совему интересному оформлению, так и по любопытному содержанию: (клик ту зум)]]></description>
			<content:encoded><![CDATA[<p>В продолжении темы инфографики. Очень понравился таймлайн <a href="http://futurico.ru/">Футурико</a>. Равно как по совему интересному оформлению, так и по любопытному содержанию:</p>
<p><a href="http://futurico.ru/timeline-2008/timeline2008.jpg"><img src="http://paradigm.ru/;-)/2007/12/timeline2008.png" width="500" height="177" alt="" /></a></p>
<p><small>(клик ту зум)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2007/12/futurico-timeline-2008/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Приручаем Google Chart API</title>
		<link>http://paradigm.ru/2007/12/google-chart</link>
		<comments>http://paradigm.ru/2007/12/google-chart#comments</comments>
		<pubDate>Mon, 17 Dec 2007 22:12:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[графика]]></category>
		<category><![CDATA[диаграммы]]></category>
		<category><![CDATA[инфографика]]></category>
		<category><![CDATA[сервисы]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2007/12/18/%d0%bf%d1%80%d0%b8%d1%80%d1%83%d1%87%d0%b0%d0%b5%d0%bc-google-chart-api/</guid>
		<description><![CDATA[В&#160;начале этого месяца, большой брат открыл новый интересный сервис для генерации красивых диаграмм&#160;&#8212; Google Chart. Эти графики по&#160;своему оформлению и&#160;функциональности очень близки к&#160;тому, что мы&#160;уже видели в&#160;Spreadsheets, но&#160;теперь появилась возможность генерировать их&#160;автономно. Программный интерфейс у&#160;сервиса достаточно прост: все параметры отрисовки диаграммы и&#160;данные для визуализации передаются на&#160;сервер Google в&#160;виде GET запроса (проще говоря, специального URL), а&#160;сервер [...]]]></description>
			<content:encoded><![CDATA[<p>В&nbsp;начале этого месяца, <a href="http://google.com">большой брат</a> открыл новый интересный сервис для генерации красивых диаграмм&nbsp;&#8212; Google Chart. Эти графики по&nbsp;своему оформлению и&nbsp;функциональности очень близки к&nbsp;тому, что мы&nbsp;уже видели в&nbsp;<a href="http://docs.google.com/">Spreadsheets</a>, но&nbsp;теперь появилась возможность генерировать их&nbsp;автономно.</p>
<p><img src='http://paradigm.ru/;-)/2007/12/chart.png' alt='chart.png' /></p>
<p>Программный интерфейс у&nbsp;сервиса достаточно прост: все параметры отрисовки диаграммы и&nbsp;данные для визуализации передаются на&nbsp;сервер Google в&nbsp;виде GET запроса (проще говоря, специального URL), а&nbsp;сервер в&nbsp;ответ отдает PNG с&nbsp;нарисованным графиком. По&nbsp;скорости процесс сравним с&nbsp;загрузкой статических файлов, кроме того правила его использования не&nbsp;накладывают никаких жестких ограничений на&nbsp;количество обращений с&nbsp;одного хоста. Все это позволяет очень легко интегрировать Chart в&nbsp;свои системы, да&nbsp;еще и&nbsp;бесплатно снять с&nbsp;собственного сервера дополнительную нагрузку по&nbsp;генерации графики. <span id="more-88"></span></p>
<p>Гибкость возможностей Chart API послужила причиной разростания количества параметров URL. Ниже будут приведены несколько примеров того, как с&nbsp;помощью серверных скриптов облегчить задачу по&nbsp;формированию запросов к&nbsp;сервису.</p>
<h3>Упаковка данных</h3>
<p>В&nbsp;Chart API предлагается три варианта представления данных, на&nbsp;основе которых будут строиться диаграммы. Самый простой из&nbsp;них&nbsp;&#8212; перечисление значений через запятую. Но&nbsp;для большей компактности URL, так&nbsp;же можно кодировать числа одним из&nbsp;двух способов, в&nbsp;результате чего объем передаваемых данных сократится.</p>
<p>Самым эффективным способом кодирования, который мы&nbsp;и&nbsp;будем использовать, является т.н. &laquo;<a href="http://code.google.com/apis/chart/#extended">extended encoding</a>&raquo;. Метод сводится к&nbsp;последовательной записи двузначных чисел в&nbsp;шестидесятичетырехразрядной (прости меня, русский язык) системе счисления. Динамический диапазон таких значений находится в&nbsp;интервале от&nbsp;0&nbsp;до&nbsp;4095 (64&sup2;&nbsp;&#8212; 1). Для их&nbsp;представления в&nbsp;кодированном виде, согласно предписанию документации, необходимо использовать строчные и&nbsp;прописные английские буквы, цифровые символы, а&nbsp;так&nbsp;же тире и&nbsp;точку (всего набирается как раз 64&nbsp;символа). В&nbsp;том случае, если значение не&nbsp;задано, оно будет обозначаться последовательностью из&nbsp;двух &laquo;_&raquo;.</p>
<p>Следующая функция, написанная на&nbsp;PHP, выполняет преобразование десятичных чисел в&nbsp;extended encoding для Google Chart:</p>
<pre><code class="php">function google_ext_encode($dec) {
	if($dec === false) return '__';

	$e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
		'abcdefghijklmnopqrstuvwxyz0123456789-.';
	$m = strlen($e); // == 63
	$res = '';

	do {
		$r = $dec % $m;
		$dec = (int)($dec / $m);
		$res = $e[$r].$res;
	} while($dec > 0);

	$res = sprintf("%'A2s", $res);
	return $res;
}</code></pre>
<p>Тест:</p>
<pre><code lang="php">
$test = array(0, 25, 26, 51, 4093, 4094, 4095);
echo '&lt;pre&gt;';
printr_r(array_map("google_ext_encode", $test));
echo '&lt;/pre&gt;';
</code></pre>
<p>Программа выдаст несколько закодированных чисел, с&nbsp;аналогичными приведенным в&nbsp;документации значениями: <code>AA</code>, <code>AZ</code>, <code>Aa</code>, <code>Az</code>, <code>.9</code>, <code>.-</code>, <code>..</code>.</p>
<h3>Поддержка русского языка</h3>
<p>Еще до&nbsp;начала первых экспериментов с&nbsp;Google Chart, у&nbsp;меня было подозрение на&nbsp;тему того, что в&nbsp;нем может не&nbsp;оказаться поддержки русского алфавита (и&nbsp;вообще любых языков кроме английского). Как выяснилось, подозрения были напрасны: API прекрасно поддерживает UTF-8.</p>
<p>HTML код для вставки графика в&nbsp;веб страницу удобно генерировать с&nbsp;помощью специальной функции, пример реализации которой приведен далее. Внутри нее выполняется корректное преобразование текста для надписей:</p>
<pre><code lang="php">function chart_html($type, $width,
	$height, $data, $labels = false, $colors = false, $alt = '') {

	$edata = implode('', (array_map("google_ext_encode", $data)));
	$url = 'http://chart.apis.google.com/chart?cht='.$type.
		'&amp;chd=e:'.$edata.'&amp;chs='.$width.'x'.$height;

	if(is_array($colors) &amp;&amp; count($colors))
		$url .= '&amp;chco='.implode(',', $colors);

	if(is_array($labels) &amp;&amp; count($labels))
		$url .= '&amp;chl='.implode('|', (array_map("urlencode", $labels)));

	return '&lt;img src="'.$url.'" width="'.$width.'" height="'.$height.
		'" alt="'.$alt.'" /&gt;';
}</code></pre>
<p>Стоит обратить внимание на&nbsp;две детали:</p>
<ol>
<li>Функция не&nbsp;задействует все параметры, доступные в&nbsp;Charts API, а&nbsp;работает только с&nbsp;наиболее актуальными. Она была написана для генерации круговых диаграмм под конкретную задачу. Для иных типов графиков логичным шагом будет корректировка набора аргументов.</li>
<li>Файл с&nbsp;кодом сохранен в&nbsp;кодировке UTF-8. При хранении исходников и&nbsp;данных в&nbsp;8-битной кодировке, понадобится дополнительное преобразование текста в&nbsp;UTF, чтобы не-английские буквы не&nbsp;отображались на&nbsp;диаграммах как вопросительные знаки.</li>
</ol>
<p>Функция <code>chart_html()</code> будет выдавать XHTML теги <code>img</code>, в&nbsp;соответствии с&nbsp;заданными параметрами:</p>
<ul>
<li><code>$type</code>&nbsp;&#8212; условное обозначение типа диаграммы. Используемое в&nbsp;тестах значение <code>p3</code>, например, соответствует трехмерной круговой диаграмме. Описание других вариантов можно найти в&nbsp;<a href="http://code.google.com/apis/chart/#chart_type">официальной документации API</a>.</li>
<li><code>$width</code>, <code>$height</code>&nbsp;&#8212; соответственно, ширина и&nbsp;высота генерируемого графического изображения в&nbsp;пикселях. Максимальное значение для каждой величины&nbsp;&#8212; 1000. При выборе размера, следует помнить о&nbsp;необходимости свободного пространства вокруг графика, т.к. при его недостатке надписи могут быть обрезаны границей картинки. Оптимальную величину для выбранного сочетания размера и&nbsp;типа диаграммы, проще всего подбирать методом &laquo;научного тыка&raquo;.</li>
<li><code>$data</code>&nbsp;&#8212; массив с&nbsp;данными для визуализации на&nbsp;диаграмме.</li>
<li><code>$labels</code>&nbsp;&#8212; (необязательный параметр) массив с&nbsp;надписями для отображения на&nbsp;графике.</li>
<li><code>$colors</code>&nbsp;&#8212; (необязательный параметр) массив со&nbsp;значениями цветов, которые будут использованы для отрисовки элементов изображения (например, секторов круговой диаграммы). Если количество цветов в&nbsp;массиве будет меньше количества элементов, дополнительные, схожие по&nbsp;тональности цвета будут добавлены автоматически.</li>
<li><code>$alt</code>&nbsp;&#8212; (необязательный параметр) значение атрибута <code>alt</code> тега <code>img</code>. Если этот аргумент не&nbsp;задать, атрибуту <code>alt</code> будет задано пустое значение.</li>
</ul>
<p>Тест:</p>
<pre><code lang="php">$width = 300;
$height = 100;
$data = array(100, 128, 200, 38);
$labels = array('Одно', 'Другое', 'Третье', 'Четвертое');

echo chart_html('p3', 500, 150, $data, $labels, false,
	'Google Chart Test').'&lt;br /&gt;';

shuffle($data);

// задано значение альфа-канала
$colors = array('33dd66cc');
echo chart_html('p3', 500, 150, $data, $labels, $colors,
	'Демография Хабрахабра').'&lt;br /&gt;';</code></pre>
<p>Функция <code>chart_html()</code> будет генерировать ссылки примерно такого вида:</p>
<p><code>http://chart.apis.google.com/chart? cht=p3 &amp;chd=e:BkCADIAm &amp;chs=500x150 &amp;chl=%D0%9E%D0%B4%D0%BD%D0%BE |%D0%94%D1%80%D1%83%D0%B3%D0%BE%D0%B5 |%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D0%B5 |%D0%A7%D0%B5%D1%82%D0%B2%D0<br />
%B5%D1%80%D1%82%D0%BE%D0%B5</code></p>
<p>В&nbsp;результате получаем две диаграммы:</p>
<p><img src="http://paradigm.ru/;-)/2007/12/chart1.png" width="500" height="150" alt="Google Chart Test" /></p>
<p>Демография Хабрахабра:</p>
<p><img src="http://paradigm.ru/;-)/2007/12/chart2.png" width="500" height="150" alt="Демография Хабрахабра" /></p>
<p>(благодаря заданному значению альфа-канала, диаграмма получилась полупрозрачной)</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2007/12/google-chart/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->