<?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; google</title>
	<atom:link href="http://paradigm.ru/tag/google/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>Google Chrome</title>
		<link>http://paradigm.ru/2008/09/google-chrome</link>
		<comments>http://paradigm.ru/2008/09/google-chrome#comments</comments>
		<pubDate>Fri, 05 Sep 2008 08:02:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программы]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=371</guid>
		<description><![CDATA[Хром прекрасен.]]></description>
			<content:encoded><![CDATA[<p>Хром прекрасен.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2008/09/google-chrome/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>JavaScript фреймворки теперь можно хостить на Google</title>
		<link>http://paradigm.ru/2008/05/google-ajax-libraries-ap</link>
		<comments>http://paradigm.ru/2008/05/google-ajax-libraries-ap#comments</comments>
		<pubDate>Wed, 28 May 2008 13:03:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[фреймворки]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=350</guid>
		<description><![CDATA[В&#160;блоге AJAX Search API вчера был проанонсирован AJAX Libraries API. Суть состоит в&#160;том, что Google теперь позволяет всем желающим использовать JavaScript фреймворки, размещенные на&#160;их&#160;серверах. Сам API представляет собой простой в&#160;использовании механизм для подключения к&#160;НТМL-документам наиболее популярных JS-библиотек, среди которых jQuery, prototype, script.aculo.us, MooTools и&#160;dojo. Список, по&#160;всей видимости, будет расширяться. Подключить необходимую библиотеку можно двумя способами. [...]]]></description>
			<content:encoded><![CDATA[<p>В&nbsp;блоге <a href="http://googleajaxsearchapi.blogspot.com/" rel="nofollow">AJAX Search API</a> вчера был проанонсирован <a href="http://code.google.com/apis/ajaxlibs/" rel="nofollow">AJAX Libraries API</a>. Суть состоит в&nbsp;том, что Google теперь позволяет всем желающим использовать JavaScript фреймворки, размещенные на&nbsp;их&nbsp;серверах. Сам API представляет собой простой в&nbsp;использовании механизм для подключения к&nbsp;НТМL-документам наиболее популярных JS-библиотек, среди которых jQuery, prototype, script.aculo.us, MooTools и&nbsp;dojo. Список, по&nbsp;всей видимости, будет расширяться.</p>
<p>Подключить необходимую библиотеку можно двумя способами. Первый&nbsp;&#8212; тривиальный, с&nbsp;помощью HTML-элемента script.</p>
<pre><code class="html">&lt;script src="http://ajax.googleapis.com/
&nbsp;&nbsp;&nbsp;&nbsp;ajax/libs/prototype/1.6.0.2/prototype.js"&gt;&lt;/script&gt;</code></pre>
<p>Как не&nbsp;сложно догадаться, вместо <code>prototype/1.6.0.2</code>&nbsp;можно указать название любого другого фреймворка и&nbsp;его версии.</p>
<p>Второй способ более гибок. С&nbsp;помощью специального JS-метода <code>google.load()</code> можно задавать версию библиотеки не&nbsp;точно, а&nbsp;по&nbsp;первым цифрам.</p>
<pre><code class="html">&lt;script src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
&lt;script&gt;
google.load("prototype", "1.6");
// &#8230;
&lt;/script&gt;</code></pre>
<p>Заданное в&nbsp;примере значение &laquo;1.6&raquo; означает то,&nbsp;что будет автоматически выбрана самая свежая версия prototype в&nbsp;ветке 1.6. Таким образом, AJAX Libraries API может обеспечить автообновление JS-библиотек без каких-либо изменений в&nbsp;вызывающем скрипте (естветсственно, такое обновление ограничивается пределами нужной ветки).</p>
<p>К&nbsp;основным плюсам использования AL&nbsp;API можно отнести следующие:</p>
<ul>
<li>Хранение скриптов на&nbsp;Google в&nbsp;некоторой степени снижает нагрузку на&nbsp;собственный веб-сервер.</li>
<li>Скорость загрузки страниц увеличивается, благодаря <a href="http://paradigm.ru/2008/05/11/circumventing-browser-connection-limits/">переносу части запросов на&nbsp;другой хост</a> и&nbsp;поддержке gz-сжатия.</li>
<li>При массовом использовании централизованно-хранимых фреймворков, кэш браузеров используется эффективнее. Файл, загруженный для одного веб-приложения, может быть повторно использован при работе с&nbsp;другим, использующим тот&nbsp;же фреймворк. Пока это лишь потенциальный бенефит сервиса, но,&nbsp;тем не&nbsp;менее, приятный.</li>
<li>Кроме того, благодаря Google можно облегчать дистрибутивы веб-приложений, использующих JS-фреймворки.</li>
</ul>
<h3>Ссылки по&nbsp;теме</h3>
<ul>
<li><a href="http://googleajaxsearchapi.blogspot.com/" rel="nofollow">Официальный анонс</a> AJAX Search API.</li>
<li><a href="http://code.google.com/apis/ajax/documentation/" rel="nofollow">Подробное описание</a> метода google.load().</li>
<li><a href="http://code.google.com/apis/ajaxlibs/documentation/" rel="nofollow">Developer&#8217;s&nbsp;Guide</a>, содержащий список поддерживаемых фреймворков с&nbsp;номерами версий.</li>
<li><a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure" rel="nofollow">Announcing AJAX Libraries API</a>: Speed up&nbsp;your Ajax apps with Google&#8217;s infrastructure @ <a href="http://ajaxian.com/" rel="nofollow">ajaxian.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2008/05/google-ajax-libraries-ap/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google App Engine Preview</title>
		<link>http://paradigm.ru/2008/04/google-app-engine-preview</link>
		<comments>http://paradigm.ru/2008/04/google-app-engine-preview#comments</comments>
		<pubDate>Tue, 08 Apr 2008 14:39:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[веб-разработка]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=263</guid>
		<description><![CDATA[Новостью сегодняшнего дня и, вероятно, одной из значимых новостей всего года стало открытие Google App Engine. Этот еще один большой шаг со стороны Google к завоеванию мира. На этот раз они предоставили сторонним разработчикам возможность использовать собственные технологии и серверные ресурсы для разработки и внедрения веб-приложений. Проще говоря, теперь любой желающий сможет в своих проектах [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://paradigm.ru/;-)/2008/04/appengine_lowres.jpg" alt="Google App Engine" title="appengine_lowres" width="100" height="79" align="left" class="alignleft size-medium wp-image-264" />Новостью сегодняшнего дня и, вероятно, одной из значимых новостей всего года стало открытие Google App Engine. Этот еще один большой шаг со стороны Google к завоеванию мира. На этот раз они предоставили сторонним разработчикам возможность использовать собственные технологии и серверные ресурсы для разработки и внедрения веб-приложений.</p>
<p>Проще говоря, теперь любой желающий сможет в своих проектах пользоваться распределенной базой данных Google, системой авторизации Google Accounts и другими элементами их инфраструктуры. Работающие на базе App Engine приложения смогут без труда выдерживать такую нагрузку, которую вне Google возможно было бы получить только за довольно немалые деньги. А именно, по усредненной оценке, выделенных ресурсов должно быть достаточно на 5 миллионов загрузок страниц в месяц (ограничение дискового пространства — 500 Мб, а трафика — 10 Gb в сутки).</p>
<p>App Engine находится еще на стадии разработки и то, что доступно сечас, — это демонстрационная версия. На официальном сайте можно скачать SDK и зарегистрировать себе аккаунт для публикации в сети своих приложений.</p>
<p>SDK представляет собой работающий локально веб-сервер, на котором эмулируется среда App Engine (кстати, все написано на Python). Приложения, разработанные и отлаженные в этой среде, можно без каких-либо изменений переносить на «настоящие» сервера Google. Кстати, дистрибутив SDK занимает всего 2.5 Мб. Правда, в комплект поставки обязательно должен входить Python 2.5, который весит еще 12.</p>
<p><img src="http://paradigm.ru/;-)/2008/04/download-sdk.png" alt="" title="download-sdk" width="402" height="199" class="aligncenter size-medium wp-image-265" /></p>
<p>Стоит отметить, что по заявлению разработчиков, GAE не будет жестко связан с конкретным языком программирования. Первым поддерживаемым языком стал Python (2.5, естесственно). Выбор следующего языка будет основан на мнении потенциальных пользователей. Мне самому кажется, что следующим будет либо Java, либо Ruby.</p>
<p>В докладе на Campfire несколько раз подчеркнули, что поддержка Python — полная, включающая все сторонние библиотеки и любые фреймворки. Можно использовать Django, CherryPy, Pylons и web.py. Любимый многими Django даже включен в комплект SDK и используется в демонстрационном примере, при создании гостевой книги.</p>
<p>Особый интерес представляет собой административная панель Apps Engine.<br />
С ее помощью можно мониторить работу приложений и управлять версиями. Панель демонстрировали в том же докладе, но попробовать вживую пока не получилось (как я уже говорил, аккаунт мне еще не открыли).</p>
<p>В заключении, еще одна деталь: к проектам, работающим на Apps Engine,  можно будет привязывать собственные доменные имена, либо беплатно размещать их на субдоменах appspot.com.</p>
<h3>Анонс Google App Engine на Campfire (7/04/2008)</h3>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/3Ztr-HhWX1c"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/3Ztr-HhWX1c" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<h3>Ссылки по теме</h3>
<ul>
<li><a href="http://code.google.com/appengine/">Официальный сайт</a> Google Apps Engine.</li>
<li><a href="http://code.google.com/appengine/downloads.html">Страница загрузки SDK.</a></li>
<li><a href="http://code.google.com/appengine/docs/gettingstarted/">Описание установки и пример использования</a> основных средств SDK для написания простого приложения.</li>
<li><a href="http://python.org/download/">Python</a> — страница скачивания.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2008/04/google-app-engine-preview/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Dreamhost: про Google, 50$ и бонусный домен</title>
		<link>http://paradigm.ru/2008/04/dreamhost-2</link>
		<comments>http://paradigm.ru/2008/04/dreamhost-2#comments</comments>
		<pubDate>Sun, 06 Apr 2008 14:03:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google apps]]></category>
		<category><![CDATA[хостинг]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=261</guid>
		<description><![CDATA[Google уже давно предоставляет пользователям возможность привязывать сервисы Google Apps к&#160;собственным доменным именам. Благодаря этому можно, например, получить &#171;свой собственный&#187; Gmail, заменив им&#160;веб-почту хостинг-провайдера (как правило, весьма убогую). Это позволяет создавать почтовые аккаунты на&#160;своем собственном домене и&#160;иметь к&#160;ним доступ, например, с&#160;адреса mail.yourdomain.com. Тем не&#160;менее, для того чтобы все правильно настроить, потребуется совершить определенные телодвижения, связанные [...]]]></description>
			<content:encoded><![CDATA[<p>Google уже давно предоставляет пользователям возможность привязывать сервисы Google Apps к&nbsp;собственным доменным именам. Благодаря этому можно, например, получить &laquo;свой собственный&raquo; Gmail, заменив им&nbsp;веб-почту хостинг-провайдера (как правило, весьма убогую). Это позволяет создавать почтовые аккаунты на&nbsp;своем собственном домене и&nbsp;иметь к&nbsp;ним доступ, например, с&nbsp;адреса mail.yourdomain.com.</p>
<p>Тем не&nbsp;менее, для того чтобы все правильно настроить, потребуется совершить определенные телодвижения, связанные с&nbsp;корректированием MX&nbsp;записей в&nbsp;DNS. И&nbsp;если отсутствует опыт или понимание сути выполняемых операций, становится довольно легко что-нибудь сломать, сделав почтовые сервера временно недоступными (и&nbsp;соответственно, потерять пришедшую за это время почту).</p>
<p>Совсем недавно, возможно даже сегодня, в&nbsp;контрольной панели Dreamhost появилась возможность очень просто включить сервисы Google для любого из&nbsp;своих доменов, избежав тем самым рутинной настройки и&nbsp;избавив себя от&nbsp;риска поломать DNS.</p>
<p>Gmail и&nbsp;Google Apps могут быть включены отдельно&nbsp;&#8212; для того и&nbsp;другого нужно просто поставить соответствующую галку в&nbsp;настройках домена. При этом автоматически создадуться субдомены mail.yourdomain.com, calendar.yourdomain.com, docs.yourdomain.com, sites.yourdomain.com и&nbsp;start.yourdomain.com. Ну&nbsp;а&nbsp;если вдруг вам нравится делать сайты Page Creator-ом, можно полностью отвести домен под сервисы Google:</p>
<div style="margin:1.6em 0"><a href='http://paradigm.ru/;-)/2008/04/dreamhost-google-services.png'><img src="http://paradigm.ru/;-)/2008/04/dreamhost-google-services.png" alt="" title="dreamhost-google-services" width="601" height="182" class="aligncenter size-medium wp-image-262" /></a></div>
<p>Помимо всего прочего, на&nbsp;Dreamhost есть довольно щедрая партнерская программа. Каждому клиенту, который &laquo;приведет друга&raquo; они кладут на&nbsp;счет 97$, при этом ограниченную часть этих денег (до&nbsp;50$) можно потратить в&nbsp;пользу нового клиента. Например, можно сделать ему скидку или увеличить доступное место на&nbsp;диске.</p>
<p>Я&nbsp;не&nbsp;расцениваю эту программу как средство какого-то значимого заработка, но&nbsp;все равно зарегистрировал там свой код&nbsp;&#8212; возможно, кому-то пригодится. Итак, все желающие получить максимальную на&nbsp;сегодняшний день скидку&nbsp;&#8212; 50$, а&nbsp;так&nbsp;же дополнительный к стандартному домен бесплатно, указывайте при регистрации в&nbsp;поле Promo Code&nbsp;&#8212; <strong style="font-size:1.2em;">DREIKANTER</strong>.</p>
<p>Вчера проверял&nbsp;&#8212; все работает. Цена первого года хостинга с&nbsp;моей скидкой уменьшается с&nbsp;положенных 119$ до&nbsp;69$. Я&nbsp;бы мог еще увеличить размер дискового пространства, но&nbsp;зачем кому-то на&nbsp;shared хостинге может понадобится больше стандартных 500&nbsp;Gb&nbsp;&#8212; непонятно. Тем более, что этот лимит там инкрементальный и&nbsp;сам бесплатно увеличивается на&nbsp;40&nbsp;Gb&nbsp;в месяц.</p>
<p><strong>Update:</strong> Со времени написания этого поста, скидки на Dreamhost изменились. Я сделал новый промокод с максимальной скидкой — теперь уже 97$. Т. е. первый год хостинга будет стоить 14$. Код: <strong style="font-size:1.2em;">PARADIGM</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/2008/04/dreamhost-2/feed</wfw:commentRss>
		<slash:comments>2</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! -->