<?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>AjaxBlog</title>
	<atom:link href="http://ajaxblog.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://ajaxblog.ru</link>
	<description>ajax, javascript, css, php</description>
	<lastBuildDate>Tue, 14 Jun 2011 19:37:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Загрузка файлов на сервер с помощью CURL</title>
		<link>http://ajaxblog.ru/356</link>
		<comments>http://ajaxblog.ru/356#comments</comments>
		<pubDate>Tue, 14 Jun 2011 19:36:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=356</guid>
		<description><![CDATA[Для одного из проектов нужно было загрузить файлы на сервер, с использованием CURL. Делается это так: $ch = curl_init(); $data = array('image' =&#62; '@{$full_path_file}'); //полный путь до файла curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); На локальном &#8230; <a href="http://ajaxblog.ru/356">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Для одного из проектов нужно было загрузить файлы на сервер, с использованием CURL.</p>
<p>Делается это так:</p>
<pre class="php" style="font-family: monospace;"><span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'@{$full_path_file}'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//полный путь до файла</span>

<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost/upload.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<p>На локальном сервере работало на ура, но когда я залил на сервер клиента, все перестала работать.</p>
<p><span id="more-356"></span>Проблемы была в том, что переменная $_FILES отдавала</p>
<pre class="php" style="font-family: monospace;"><span style="color: #990000;">Array</span>
<span style="color: #009900;">(</span>
    <span style="color: #009900;">[</span>image<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span>
        <span style="color: #009900;">(</span>
            <span style="color: #009900;">[</span>name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> 1308074391<span style="color: #339933;">.</span>jpg
            <span style="color: #009900;">[</span>type<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> application<span style="color: #339933;">/</span>octet<span style="color: #339933;">-</span>stream
            <span style="color: #009900;">[</span>tmp_name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>phpslor8l
            <span style="color: #009900;">[</span>error<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span>
            <span style="color: #009900;">[</span>size<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">33173</span>
        <span style="color: #009900;">)</span>

<span style="color: #009900;">)</span></pre>
<p>вместо ожидаемого</p>
<pre class="php" style="font-family: monospace;"><span style="color: #990000;">Array</span>
<span style="color: #009900;">(</span>
    <span style="color: #009900;">[</span>image<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">Array</span>
        <span style="color: #009900;">(</span>
            <span style="color: #009900;">[</span>name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> 1308074391<span style="color: #339933;">.</span>jpg
            <span style="color: #009900;">[</span>type<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> image<span style="color: #339933;">/</span>jpeg
            <span style="color: #009900;">[</span>tmp_name<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #339933;">/</span>tmp<span style="color: #339933;">/</span>phpslor8l
            <span style="color: #009900;">[</span>error<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span>
            <span style="color: #009900;">[</span>size<span style="color: #009900;">]</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">33173</span>
        <span style="color: #009900;">)</span>

<span style="color: #009900;">)</span></pre>
<p>Причина такого странного поведения заключалось в том что у клиента на хостинге перед Apache стоял Nginx, вот он и портил все.</p>
<p>Долгое гугление привело меня к единственно верному решению</p>
<pre class="php" style="font-family: monospace;"><span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'@{$full_path_file};type=image/jpeg'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//полный путь до файла</span>

<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://localhost/upload.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/356/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JqueryWTP &#8211; плагин для Eclipse</title>
		<link>http://ajaxblog.ru/344</link>
		<comments>http://ajaxblog.ru/344#comments</comments>
		<pubDate>Tue, 19 Apr 2011 21:17:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=344</guid>
		<description><![CDATA[Очень полезный плагин, позволяющий вам автодополнять методы Jquery. Плагин в работа Установка Инструкция на официальном сайте несколько устарела, по этому, приведу свою, которая точно работает. Скачиваем файл и запускаем файл. Появиться вот такая форма в поле Jar File &#8211; указываем &#8230; <a href="http://ajaxblog.ru/344">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Очень полезный плагин, позволяющий вам автодополнять методы Jquery.</p>
<h2>Плагин в работа</h2>
<p><img src="http://ajaxblog.ru/wp-content/uploads/2011/04/JqueryWTP-example.png" alt="" /></p>
<p><span id="more-344"></span></p>
<h2>Установка</h2>
<p>Инструкция на официальном сайте несколько устарела, по этому, приведу свою, которая точно работает.</p>
<ol>
<li><a href="http://code.google.com/a/eclipselabs.org/p/jquerywtp/downloads/list">Скачиваем файл</a> и запускаем файл.</li>
<li>Появиться вот такая форма <img src="http://ajaxblog.ru/wp-content/uploads/2011/04/JqueryWTP.png" alt="" width="575" height="152" />
<ul>
<li>в поле Jar File &#8211; указываем путь до файла org.eclipse.wst.jsdt.core_xxxxxxx.jar</li>
<li> в поле Output Dir &#8211; указываем путь, куда сохраняться пропатченный файл</li>
</ul>
</li>
<li>Смело жмем кнопку Generate</li>
<li>Заменяем старую версию файла на пропатченную.</li>
<li>Удаляем папку workspace/.metadata/.plugins/org.eclipse.wst.jsdt.core.</li>
<li>Запускаем eclipse.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/344/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lorem Ipsum с помощью PHP</title>
		<link>http://ajaxblog.ru/340</link>
		<comments>http://ajaxblog.ru/340#comments</comments>
		<pubDate>Wed, 06 Apr 2011 17:12:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=340</guid>
		<description><![CDATA[Lorem Ipsum, а по русски &#171;рыба&#187;- это условный, зачастую бессмысленный текст, вставляемый в макет страницы. Для одного проекта нужно было что сервером передовал пвсевдотекст в качестве контекста. соответственно нужен php класс который смог бы его генерить. В результате поисков, я &#8230; <a href="http://ajaxblog.ru/340">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://ru.wikipedia.org/wiki/Lorem_ipsum">Lorem Ipsum</a>, а по русски &laquo;рыба&raquo;- это условный, зачастую бессмысленный текст, вставляемый в макет страницы.<br />
Для одного проекта нужно было что сервером передовал пвсевдотекст в качестве контекста. соответственно нужен php класс который смог бы его генерить. В результате поисков, я смог найти маленькую библиотечку которая генерить Lorem Ipsum.</p>
<p><span id="more-340"></span></p>
<h2>Использование</h2>
<p>только один публичный метод в классе <strong>getContent</strong>.</p>
<h2>Описание</h2>
<pre class="php" style="font-family: monospace;">string getContent<span style="color: #009900;">(</span>
    int <span style="color: #000088;">$wordCount</span>
    <span style="color: #009900;">[</span><span style="color: #339933;">,</span> string <span style="color: #000088;">$format</span> <span style="color: #339933;">=</span> html<span style="color: #009900;">]</span>
    <span style="color: #009900;">[</span><span style="color: #339933;">,</span> boolean <span style="color: #000088;">$loremipsum</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">]</span>
<span style="color: #009900;">)</span></pre>
<p>Возвращает необходимое количество слов в виде строки</p>
<h2>Параметры</h2>
<p><em>wordCount</em><br />
Количество слов которое должно быть возвращено.</p>
<p><em>format</em><br />
Режим получения результата, может быть ‘html’, ‘txt’, или ‘plain’. По умолчанию &#8216;html&#8217;.</p>
<ul>
<li>html: Текст разбиваетса на параграфы с использованием тега ( &lt;p&gt;&lt;/p&gt; ).</li>
<li>text: Текст разбиваетса на параграфы с использованием табуляции</li>
<li>plain: Текст возвращаетьса не отформатированным</li>
</ul>
<p><em>loremipsum</em><br />
Текст должен или нет, начинаться с &laquo;Lorem Ipsum&raquo;. По умолчанию &#8216;true&#8217;.</p>
<h2>Пример</h2>
<pre class="php" style="font-family: monospace;"><span style="color: #b1b100;">require</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'LoremIpsum.class.php'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$generator</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LoremIpsumGenerator<span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате html</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов без форматирования</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'plain'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате 'text'</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'txt'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//100 слов в формате html, текст не должен начинатса с lorem ipsum</span>
<span style="color: #000088;">$generator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContent</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'html'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<p><a href="http://tinsology.net/scripts/php-lorem-ipsum-generator/" target="_blank">Сайт автора</a> | <a href="http://tinsology.net/downloads/LoremIpsum.zip" target="_blank">Скачать код</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Блокировка клавиатуры, мыши и кнопки выключения</title>
		<link>http://ajaxblog.ru/325</link>
		<comments>http://ajaxblog.ru/325#comments</comments>
		<pubDate>Tue, 15 Mar 2011 18:15:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=325</guid>
		<description><![CDATA[С появлением в семье маленького ребенка, стал актуальным вопрос защита написанного мною кода от детских &#171;правок&#187; в нем. Win+L &#8211; блокировка аккаунта. Самый простой способ силами самой Windows. Для меня не подошёл по причине того что мне нужно просматривать рабочий &#8230; <a href="http://ajaxblog.ru/325">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>С появлением в семье маленького ребенка, стал актуальным вопрос защита написанного мною кода от детских &laquo;правок&raquo; в нем.</p>
<p><span id="more-325"></span></p>
<ul>
<li>Win+L &#8211; блокировка аккаунта. Самый простой способ силами самой Windows. Для меня не подошёл по причине того что мне нужно просматривать рабочий чат и скайп.</li>
<li><a href="http://www.100dof.com/kidkeylock.html" target="_blank">Kid Key Lock</a> &#8211; бесплатная программа (есть платная расширенная версия), которая позволяет отключать определенные клавиши или все на клавиатуре, а также блокировать работу мыши. Мне показалась неудобной в работе.<br />
<img src="http://ajaxblog.ru/wp-content/uploads/2011/03/kidkeylock.jpg" alt="" width="287" height="300" /></li>
<li><a href="http://people.cs.uu.nl/markov/kids/cproof.html" target="_blank">Child Proof</a> &#8211; бесплатная программа, которая защищает компьютер от случайных нажатий клавиш детьми. как я понял, прячет все рабочие окна в панель инструмента, тем самым не позволяя ребенку в них что то повредить. Тоже не мой случай, мне не нужно ничего прятать.</li>
<li><a href="http://tk.ms11.net/" target="_blank">Toddler Keys</a> &#8211; программа позволяет блокировать клавиатуру, мышь, кнопку выключения компьютера, СD и DVD привод. Во время блокировки программа можно выводить заставку или звук. Для того чтобы разблокировать  &#8211; нужно вести секретное слово (по умолчанию это QUIT)<br />
<img src="http://ajaxblog.ru/wp-content/uploads/2011/03/toddler_keys.png" alt="" width="239" height="204" /></li>
</ul>
<p>Toddler Keys &#8211; стал моим выбором. Если у вас есть свои альтернативные программы, делитесь, с радостью испытаю их эффективность на своем ребенке.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/325/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Кросс-доменный запрос для javascript</title>
		<link>http://ajaxblog.ru/318</link>
		<comments>http://ajaxblog.ru/318#comments</comments>
		<pubDate>Fri, 11 Mar 2011 21:28:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=318</guid>
		<description><![CDATA[Как то для одного проекта потребовалось сделать кросс-доменный запрос с помощью javascript. Как известно политика безопасности не позволяет такое делать. Но есть разные &#171;грязные&#187; хаки которые все таки обходят эту политику. Из всех вариантов, я выбрал самый надежный и простой &#8230; <a href="http://ajaxblog.ru/318">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Как то  для одного проекта потребовалось сделать кросс-доменный запрос с помощью javascript. Как известно политика безопасности не позволяет такое делать. Но есть разные &laquo;грязные&raquo; хаки которые все таки обходят эту политику. Из <a href="http://javascript.ru/ajax/cross-domain-scripting">всех вариантов</a>, я выбрал самый надежный и простой в реализации.</p>
<p><span id="more-318"></span>Прокси скрипт php на серверной стороне. Суть простая мы ajax запросом посылаем параметры на наш прокси скрипт, а он в свою очередь делает запрос на указанный в параметре action адрес. После получения результата, отдает его скрипту.</p>
<h2>На клиентской стороне</h2>
<pre class="javascript" style="font-family: monospace;">param <span style="color: #339933;">=</span> <span style="color: #009900;">{</span>
    action<span style="color: #339933;">:</span> <span style="color: #3366cc;">'http://....'</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// куда отсылаем запрос</span>
    param1<span style="color: #339933;">:</span> ...<span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// какой то параметр 1</span>
    param2<span style="color: #339933;">:</span> ...<span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">// какой то параметр 2</span>
    param3<span style="color: #339933;">:</span> ...  <span style="color: #006600; font-style: italic;">// какой то параметр 3</span>
<span style="color: #009900;">}</span>

jQuery.<span style="color: #660066;">ajax</span><span style="color: #009900;">(</span><span style="color: #009900;">{</span>
    type<span style="color: #339933;">:</span> <span style="color: #3366cc;">"POST"</span><span style="color: #339933;">,</span>
    url<span style="color: #339933;">:</span> <span style="color: #3366cc;">"proxy.php"</span><span style="color: #339933;">,</span>
    dataType<span style="color: #339933;">:</span> <span style="color: #3366cc;">"json"</span><span style="color: #339933;">,</span>
    data<span style="color: #339933;">:</span> param<span style="color: #339933;">,</span>
    success<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span>res<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
        ...
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span></pre>
<h2>На серверной стороне</h2>
<pre class="php" style="font-family: monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>

    <span style="color: #000000; font-weight: bold;">function</span> msg<span style="color: #009900;">(</span><span style="color: #000088;">$status</span><span style="color: #339933;">,</span> <span style="color: #000088;">$msg</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span>
            <span style="color: #0000ff;">'status'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$status</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'msg'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$msg</span>
        <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #990000;">json_encode</span><span style="color: #009900;">(</span><span style="color: #000088;">$res</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">exit</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #000000; font-weight: bold;">function</span> post<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #990000;">unset</span><span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$v</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
            <span style="color: #000088;">$data</span><span style="color: #009900;">[</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$k</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'='</span><span style="color: #339933;">.</span><span style="color: #000088;">$v</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">(</span><span style="color: #0000ff;">'&amp;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #b1b100;">if</span> <span style="color: #009900;">(</span><span style="color: #339933;">!</span> <span style="color: #990000;">isset</span><span style="color: #009900;">(</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        msg<span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Не заполненые поля'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>

    <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">[</span><span style="color: #0000ff;">'action'</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_FAILONERROR<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_TIMEOUT<span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> post<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">(</span><span style="color: #000088;">$ch</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

    msg<span style="color: #009900;">(</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #000088;">$result</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

<span style="color: #000000; font-weight: bold;">?&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/318/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новая тема для jQuery UI &#8211; Aristo</title>
		<link>http://ajaxblog.ru/308</link>
		<comments>http://ajaxblog.ru/308#comments</comments>
		<pubDate>Mon, 07 Mar 2011 18:04:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Находки]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=308</guid>
		<description><![CDATA[Для одного из проектов нужно было найти красивую тему для jQuery UI. Стандартные мне некогда не нравились, а авторские стоили от 75$. И вот в результате случайного везения, я нашел свой идеал&#8230; Смотрим Качаем]]></description>
			<content:encoded><![CDATA[<p>Для одного из проектов нужно было найти красивую тему для jQuery UI.<br />
Стандартные мне некогда не нравились, а авторские стоили от 75$.<br />
И вот в результате случайного везения,  я нашел свой идеал&#8230;</p>
<p><span id="more-308"></span><a href="http://taitems.github.com/Aristo-jQuery-UI-Theme/" target="_blank">Смотрим</a> <a href="http://taitems.tumblr.com/post/482577430/introducing-aristo-a-jquery-ui-theme" target="_blank">Качаем</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/308/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JsUnit &#8211; тонкости настройки</title>
		<link>http://ajaxblog.ru/298</link>
		<comments>http://ajaxblog.ru/298#comments</comments>
		<pubDate>Mon, 31 Jan 2011 15:52:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsunit]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=298</guid>
		<description><![CDATA[На чем писать модульные тесты для JavaScript. Вопрос не такой простой как кажется. В отличии от Java здесь нет признанного лидера. Для себя я выделил три фрэймворка о которые стоит упомянут: JsTestDriver &#8211; разработка ребят от google, позиционируется как универсальное &#8230; <a href="http://ajaxblog.ru/298">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>На чем писать модульные тесты для JavaScript. Вопрос не такой простой как кажется. В отличии от Java здесь нет признанного лидера. Для себя я выделил три фрэймворка о которые стоит упомянут:</p>
<ol>
<li><a href="http://code.google.com/p/js-test-driver/" target="_blank">JsTestDriver</a> &#8211; разработка ребят от google, позиционируется как универсальное решения для тестирования js.</li>
<li><a href="http://docs.jquery.com/QUnit" target="_blank">QUnit</a> &#8211; тест от разработчиков jquery, кстати свой фреймворк они тестирует этим тестом.</li>
<li><a href="http://www.jsunit.net/" target="_blank">JsUnit</a> &#8211; самый старый из представленных здесь фреймворков.</li>
</ol>
<p><span id="more-298"></span>Трудно сделать выбор, каждый из них справляется с поставленной задачей. Я остановлюсь на последнем , так как он позволяет запускать себя на приложениях содержащем только браузерный движок, и не требует дополнительных библиотек для своей работы.</p>
<h2>Как работает</h2>
<p>Не буду расписывать, как заставить это все работать. Здесь очень неплохая статья для начинающих.</p>
<p>http://www.simplecoding.org/jsunit-testiruem-javascript-kod.html</p>
<h2>Тонкости настройки</h2>
<p>Попробуем ответить на некоторые популярные предубеждения связанные с этим фреймворком.</p>
<ol>
<li><strong>jsunit не поддерживает наборы тестов&#8230;</strong><br />
читаем &#8211; <a href="http://www.jsunit.net/documentation/testSuites.html">Test Suites</a>&nbsp;</p>
<p>создаем файл testSuite.html</p>
<pre class="javascript" style="font-family: monospace;">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;

    &lt;title&gt;TestSuite&lt;/title&gt;

    &lt;link rel="stylesheet" type="text/css" href="css/jsUnitStyle.css"&gt;
    &lt;script type="text/javascript" src="app/jsUnitCore.js"&gt;&lt;/script&gt;
    <span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366cc;">"text/javascript"</span><span style="color: #339933;">&gt;</span>

        <span style="color: #003366; font-weight: bold;">function</span> testSuite<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
            <span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> JsUnitTestSuite<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">addTestPage</span><span style="color: #009900;">(</span><span style="color: #3366cc;">"unit-tests/exampleTest1.html"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">addTestPage</span><span style="color: #009900;">(</span><span style="color: #3366cc;">"unit-tests/exampleTest2.html"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">addTestPage</span><span style="color: #009900;">(</span><span style="color: #3366cc;">"unit-tests/exampleTest3.html"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            result.<span style="color: #660066;">addTestPage</span><span style="color: #009900;">(</span><span style="color: #3366cc;">"unit-tests/exampleTest4.html"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>

        <span style="color: #003366; font-weight: bold;">function</span> suite<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
            <span style="color: #003366; font-weight: bold;">var</span> newsuite <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> JsUnitTestSuite<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            newsuite.<span style="color: #660066;">addTestSuite</span><span style="color: #009900;">(</span>testSuite<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span> newsuite<span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
    <span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;TestSuite&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Причем ничего нам не мешает вкладывать один набор тестов в другой.</li>
<li><strong>jsunit не позволяет автоматически запускать тесты&#8230;</strong><br />
читаем &#8211; <a href="http://www.jsunit.net/documentation/standardQueryStrings.html">Standard query strings</a>&nbsp;</p>
<ul>
<li>создаем копию файла testRunner.html</li>
<li>назовем его testRunnerAuto.html</li>
<li>находим следующие строчки кода
<pre class="javascript" style="font-family: monospace;">    <span style="color: #003366; font-weight: bold;">var</span> params <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> JsUnit.<span style="color: #660066;">Params</span><span style="color: #009900;">(</span>document.<span style="color: #660066;">location</span>.<span style="color: #660066;">search</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> testManager<span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> tracer<span style="color: #339933;">;</span>
</pre>
</li>
<li>вставляем код
<pre class="javascript" style="font-family: monospace;"><span style="color: #003366; font-weight: bold;">var</span> params <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> JsUnit.<span style="color: #660066;">Params</span><span style="color: #009900;">(</span>document.<span style="color: #660066;">location</span>.<span style="color: #660066;">search</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

params.<span style="color: #660066;">hash</span><span style="color: #009900;">[</span><span style="color: #3366cc;">'testpage'</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #3366cc;">'http://localhost/testSuite.html'</span><span style="color: #339933;">;</span>
params.<span style="color: #660066;">hash</span><span style="color: #009900;">[</span><span style="color: #3366cc;">'autorun'</span><span style="color: #009900;">]</span> <span style="color: #339933;">=</span> <span style="color: #3366cc;">'true'</span><span style="color: #339933;">;</span>

<span style="color: #003366; font-weight: bold;">var</span> testManager<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> tracer<span style="color: #339933;">;</span>
</pre>
<p>Тем самым при запуске страницы testRunnerAuto.html мы загрузим подготовлены нами набор тестов testSuite.html, и сразу после загрузке произойдет автоматический запуск тестов.</li>
</ul>
</li>
<li><strong>jsunit не может тестировать асинхронные запросы&#8230;</strong><br />
читаем &#8211; <a href="http://www.jsunit.net/documentation/setUpTearDown.html">setUp() and tearDown()</a>&nbsp;</p>
<pre class="javascript" style="font-family: monospace;"><span style="color: #003366; font-weight: bold;">var</span> native<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> encode<span style="color: #339933;">;</span>
 
<span style="color: #003366; font-weight: bold;">function</span> setUpPage<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    <span style="color: #006600; font-style: italic;">//ждем когда загрузиться страница и отработают все запросы </span>
    setUpPageStatus <span style="color: #339933;">=</span> <span style="color: #3366cc;">'running'</span><span style="color: #339933;">;</span>
 
    req1 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    req1.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'GET'</span><span style="color: #339933;">,</span> <span style="color: #3366cc;">"data/base64.native"</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    req1.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span>req1.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #cc0000;">4</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
	    native <span style="color: #339933;">=</span> req1.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>
            setUpPageComplete<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    	<span style="color: #009900;">}</span>
    <span style="color: #009900;">}</span><span style="color: #339933;">;</span>
    req1.<span style="color: #660066;">send</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
 
    req2 <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XMLHttpRequest<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    req2.<span style="color: #000066;">open</span><span style="color: #009900;">(</span><span style="color: #3366cc;">'GET'</span><span style="color: #339933;">,</span> <span style="color: #3366cc;">"data/base64.encode"</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
    req2.<span style="color: #660066;">onreadystatechange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span>req2.<span style="color: #660066;">readyState</span> <span style="color: #339933;">==</span> <span style="color: #cc0000;">4</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
	    encode <span style="color: #339933;">=</span> req2.<span style="color: #660066;">responseText</span><span style="color: #339933;">;</span>
	    setUpPageComplete<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">}</span>
    <span style="color: #009900;">}</span><span style="color: #339933;">;</span>
    req2.<span style="color: #660066;">send</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #003366; font-weight: bold;">function</span> setUpPageComplete<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span><span style="color: #009900;">(</span>native <span style="color: #339933;">!=</span> <span style="color: #3366cc;">""</span><span style="color: #009900;">)</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">(</span>encode <span style="color: #339933;">!=</span> <span style="color: #3366cc;">""</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
        <span style="color: #006600; font-style: italic;">//все запросы отработались, можно запускать тесты</span>
        setUpPageStatus <span style="color: #339933;">=</span> <span style="color: #3366cc;">'complete'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
 
 
<span style="color: #003366; font-weight: bold;">function</span> testUtilsCodecRecursion<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    assertEquals<span style="color: #009900;">(</span>Utils.<span style="color: #660066;">decode</span><span style="color: #009900;">(</span>z.<span style="color: #660066;">encode</span><span style="color: #009900;">(</span>native<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> native<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
 
<span style="color: #003366; font-weight: bold;">function</span> testUtilsCodecEncode<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    assertEquals<span style="color: #009900;">(</span>Utils.<span style="color: #660066;">encode</span><span style="color: #009900;">(</span>native<span style="color: #009900;">)</span><span style="color: #339933;">,</span> encode<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span>
 
<span style="color: #003366; font-weight: bold;">function</span> testUtilsCodecDecode<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
    assertEquals<span style="color: #009900;">(</span>Utils.<span style="color: #660066;">decode</span><span style="color: #009900;">(</span>encode<span style="color: #009900;">)</span><span style="color: #339933;">,</span> native<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #009900;">}</span></pre>
</li>
</ol>
<h2>Дополнительная литература</h2>
<ul>
<li><a href="http://web-dev-ru.blogspot.com/2009/11/javascript-jstestdriver.html" target="_blank">http://web-dev-ru.blogspot.com/2009/11/javascript-jstestdriver.html</a></li>
<li><a href="http://msdn.microsoft.com/en-us/scriptjunkie/ff452703.aspx" target="_blank">http://msdn.microsoft.com/en-us/scriptjunkie/ff452703.aspx</a></li>
<li><a href="http://net.tutsplus.com/tutorials/javascript-ajax/how-to-test-your-javascript-code-with-qunit/" target="_blank">http://net.tutsplus.com/tutorials/javascript-ajax/how-to-test-your-javascript-code-with-qunit/</a></li>
<li><a href="http://addyosmani.com/blog/jquery-testing-tools/" target="_blank">http://addyosmani.com/blog/jquery-testing-tools/</a></li>
<li><a href="http://pivotallabs.com/blabs/categories/jsunit" target="_blank">http://pivotallabs.com/blabs/categories/jsunit</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/298/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Скрещиваем jqGrid и Open Flash Chart</title>
		<link>http://ajaxblog.ru/264</link>
		<comments>http://ajaxblog.ru/264#comments</comments>
		<pubDate>Wed, 28 Oct 2009 18:42:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Мои проекты]]></category>
		<category><![CDATA[jqGrid]]></category>
		<category><![CDATA[Open Flash Chart]]></category>
		<category><![CDATA[SWFobject]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=264</guid>
		<description><![CDATA[Вывод данных в виде таблице удобно тем, что предостовляет большие возможности работы с ними (сортировка, фильтрация, выборки). И с этим прекрасно справляется плагин jqGrid. А если мы хотим отображать данные выводимые в jqGrid в виде графика. Причем синхронно обновлять график &#8230; <a href="http://ajaxblog.ru/264">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Вывод данных в виде таблице удобно тем, что предостовляет большие возможности работы с ними (сортировка, фильтрация, выборки). И с этим прекрасно справляется плагин jqGrid.</p>
<p>А если мы хотим отображать данные выводимые в jqGrid в виде графика. Причем синхронно обновлять график вместе с данными в таблице. Например так.</p>
<p><span id="more-264"></span></p>
<p><img class="alignnone size-full wp-image-265" title="jqgrid-open-flash-chart" src="http://ajaxblog.ru/wp-content/uploads/2009/10/jqgrid-open-flash-chart.gif" alt="jqgrid-open-flash-chart" width="593" height="409" /></p>
<p>Для построения графика я выбрал флешь библиотеку <a href="http://teethgrinder.co.uk/open-flash-chart-2/">Open Flash Chart</a>, которая себе прекрасно зарекомендовала. Если вам что то, придется не по душе в этой библиотеки, вы всегда сможете изменить . Так как <a href="http://teethgrinder.co.uk/open-flash-chart-2/">Open Flash Chart</a> &#8211; open source проект.</p>
<p>Еще нам понадобиться js библиотека &#8211; <a href="http://code.google.com/p/swfobject/">SWFobject</a>. Ее задача поместить флешку в нужное нам место. В принципе мы смогли бы обойтись и без нее, но она позволяет решить: проблемы кросс-браузерности, наличие нужной версии флешь проигрывателя и  т.д.</p>
<p>Основная идея скрипта.</p>
<ol>
<li>у jqGrid есть событие loadComplete &#8211; на него мы подвешиваем генерацию графика. То есть каждый раз когда грид обновляется, у нас будет обновятся график.</li>
<li>а данные для графика мы будем получать через пользовательский массив , с помощью функции getUserData()</li>
</ol>
<p>Вот пример кода.</p>
<pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">"text/javascript"</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">"/js/swfobject.js"</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span>

$<span style="color: #009900;">(</span>document<span style="color: #009900;">)</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
	<span style="color: #003366; font-weight: bold;">var</span> chartCreate <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> data_statistics_chart <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>

	$<span style="color: #009900;">(</span><span style="color: #3366CC;">"#statistics-list"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">jqGrid</span><span style="color: #009900;">(</span><span style="color: #009900;">{</span>
		...некоторый ваш код...

		<span style="color: #006600; font-style: italic;">// функция вызывается в тот момент когда приходят данные в грид</span>
		loadComplete<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
			<span style="color: #006600; font-style: italic;">// получаем пользовательские данные</span>
			<span style="color: #003366; font-weight: bold;">var</span> udata <span style="color: #339933;">=</span> $<span style="color: #009900;">(</span><span style="color: #3366CC;">"#statistics-list"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">getUserData</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
			<span style="color: #006600; font-style: italic;">// вызываем функцию loadChartData с нашими данными udata.chart_data для флеши</span>
			loadChartData<span style="color: #009900;">(</span>udata.<span style="color: #660066;">chart_data</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">}</span>
	<span style="color: #009900;">}</span><span style="color: #009900;">)</span>.<span style="color: #660066;">navGrid</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'#statistics-pager'</span><span style="color: #339933;">,</span> <span style="color: #009900;">{</span>refresh<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>add<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>edit<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>del<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>search<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>

	<span style="color: #003366; font-weight: bold;">function</span> loadChartData<span style="color: #009900;">(</span>data<span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
		data_statistics_chart <span style="color: #339933;">=</span> data<span style="color: #339933;">;</span>
		<span style="color: #006600; font-style: italic;">// проверяем мы создали объект флешь</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">(</span>chartCreate<span style="color: #009900;">)</span> <span style="color: #009900;">{</span> <span style="color: #006600; font-style: italic;">// если да, то</span>
			<span style="color: #006600; font-style: italic;">// находим флешку</span>
			chart <span style="color: #339933;">=</span> swfobject.<span style="color: #660066;">getObjectById</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'statistics_chart'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
			<span style="color: #006600; font-style: italic;">// загружаем в нее полученные данные</span>
			chart.<span style="color: #660066;">load</span><span style="color: #009900;">(</span>data<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">}</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">{</span> <span style="color: #006600; font-style: italic;">// создаем флешку с помощью js библиотеки swfobject</span>
			chartCreate <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
			swfobject.<span style="color: #660066;">embedSWF</span><span style="color: #009900;">(</span>
				<span style="color: #006600; font-style: italic;">// откуда берем саму флешку</span>
				<span style="color: #3366CC;">'/flash/open-flash-chart.swf'</span><span style="color: #339933;">,</span>
				<span style="color: #006600; font-style: italic;">// куда ее помещаем</span>
				<span style="color: #3366CC;">'statistics_chart'</span><span style="color: #339933;">,</span>
				<span style="color: #006600; font-style: italic;">// настройки флешки</span>
				<span style="color: #3366CC;">'734'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'270'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'9.0.0'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'expressInstall.swf'</span><span style="color: #339933;">,</span>
				<span style="color: #006600; font-style: italic;">// данные откуда флешка будет брать</span>
				<span style="color: #006600; font-style: italic;">// обратите внимания! флешка ждет на входе имя функции, </span>
				<span style="color: #006600; font-style: italic;">// поэтому сразу передать данные не получаетьса</span>
				<span style="color: #009900;">{</span><span style="color: #3366CC;">'get-data'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'get_data_statistics_chart'</span><span style="color: #009900;">}</span><span style="color: #339933;">,</span>
				<span style="color: #009900;">{</span><span style="color: #3366CC;">'wmode'</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'opaque'</span><span style="color: #009900;">}</span>
			<span style="color: #009900;">)</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">}</span>
	<span style="color: #009900;">}</span>

	<span style="color: #006600; font-style: italic;">// сама функция которая вернет нужные данные флешки</span>
	<span style="color: #003366; font-weight: bold;">function</span> get_data_statistics_chart<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
		<span style="color: #000066; font-weight: bold;">return</span> data_statistics_chart<span style="color: #339933;">;</span>
	<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>

<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">'statistics_chart'</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>

<span style="color: #339933;">&lt;</span>div <span style="color: #003366; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #3366CC;">"grid"</span><span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>table id<span style="color: #339933;">=</span><span style="color: #3366CC;">"statistics-list"</span> <span style="color: #003366; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #3366CC;">"scroll"</span><span style="color: #339933;">&gt;&lt;/</span>table<span style="color: #339933;">&gt;</span>
	<span style="color: #339933;">&lt;</span>div id<span style="color: #339933;">=</span><span style="color: #3366CC;">"statistics-pager"</span> <span style="color: #003366; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #3366CC;">"scroll"</span><span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/264/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Гаджет из фотошопа</title>
		<link>http://ajaxblog.ru/254</link>
		<comments>http://ajaxblog.ru/254#comments</comments>
		<pubDate>Wed, 21 Oct 2009 11:28:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Мои проекты]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Инструмент разработчика]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=254</guid>
		<description><![CDATA[Для одного рабочего проекта нужно было создать &#171;по быстрому&#187; прототип системы. Основная логика интерфейса была,  все что видеть пользователь &#8211; это гаджет. К сожалению интерфейс не был одобрен руководством, а прототип остался, по этому, если кто-то использует его в своем &#8230; <a href="http://ajaxblog.ru/254">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Для одного рабочего проекта нужно было создать &laquo;по быстрому&raquo; прототип системы. Основная логика интерфейса была,  все что видеть пользователь &#8211; это гаджет. К сожалению интерфейс не был одобрен руководством, а прототип остался, по этому, если кто-то использует его в своем проекте, я не буду против. Обращаю ваше внимания, так как это прототип делали &laquo;по быстрому&raquo; &#8211; то дизайн и логика поведения была взята с одной очень уважаемой мною программы.</p>
<p><span id="more-254"></span></p>
<p>И так что он умеет:</p>
<ol>
<li>Двигаться по странице (move)</li>
<li>Изменять размеры (resize)</li>
<li>Имеет возможность настроить максимальную ширину панели (max width)</li>
<li>Имеет два состояния: нормальное (normal) и компактное (compact)</li>
<li>Имеет возможность сортировать гаджеты внутри панельки (sort)</li>
<li>Просмотр в компактном режиме</li>
</ol>
<p>Нормальный режим</p>
<p><img class="alignnone size-full wp-image-256" title="gadget-normal" src="http://ajaxblog.ru/wp-content/uploads/2009/10/gadget-normal.gif" alt="gadget-normal" width="428" height="663" /></p>
<p>Компактный режим</p>
<p><img class="alignnone size-full wp-image-255" title="gadget-compact" src="http://ajaxblog.ru/wp-content/uploads/2009/10/gadget-compact.gif" alt="gadget-compact" width="310" height="500" /></p>
<p>Смотрим:  <a href="http://samples.ajaxblog.ru/work/gadget/panel.html">рабочий пример гаджета</a></p>
<p>Технология:  jQuery + UI, CSS, HTML &#8211; все просто. Если кому-то нужно будет доработать гаджет или адаптировать к своим требованием, пишите &#8211; договоримся.</p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/254/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Скрещиваем jqGrid и FCKeditor</title>
		<link>http://ajaxblog.ru/246</link>
		<comments>http://ajaxblog.ru/246#comments</comments>
		<pubDate>Wed, 14 Oct 2009 09:25:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ajaxblog.ru/?p=246</guid>
		<description><![CDATA[Есть прекрасный программный продукт jqGrid. У него есть неплохой функционал по редактированию данных в таблице, вот только нет возможности редактировать текст через какой-либо визуальный редактор, например FCKeditor. Почему FCKeditor? Во первых он достаточно стабилен, во вторых его легко настроить под &#8230; <a href="http://ajaxblog.ru/246">Далее, еще интереснее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Есть прекрасный программный продукт jqGrid. У него есть неплохой функционал по редактированию данных в таблице, вот только нет возможности редактировать текст через какой-либо визуальный редактор, например FCKeditor.</p>
<p>Почему FCKeditor?<br />
Во первых он достаточно стабилен, во вторых его легко настроить под себя, и наверное самое главное у меня был опыт работы с ним.</p>
<p>Поиск в интернете ничего мне не дал, … значить придется все делать самому.</p>
<p>Все оказалось на удивление просто</p>
<p><span id="more-246"></span></p>
<pre class="javascript" style="font-family:monospace;">&lt;script type="text/javascript" src="/js/lib/fckeditor/fckeditor.js"&gt;&lt;/script&gt;

<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">"text/javascript"</span><span style="color: #339933;">&gt;</span>
$<span style="color: #009900;">(</span>document<span style="color: #009900;">)</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">(</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
	$<span style="color: #009900;">(</span><span style="color: #3366CC;">"#news-list"</span><span style="color: #009900;">)</span>.<span style="color: #660066;">jqGrid</span><span style="color: #009900;">(</span><span style="color: #009900;">{</span>
		...некоторый ваш код...
	<span style="color: #009900;">}</span><span style="color: #009900;">)</span>.<span style="color: #660066;">navGrid</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'#news-pager'</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">{</span>refresh<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>add<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>edit<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>del<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>search<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">}</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">{</span>
			<span style="color: #006600; font-style: italic;">// edit parameters</span>
			width<span style="color: #339933;">:</span> <span style="color: #CC0000;">500</span><span style="color: #339933;">,</span>
			reloadAfterSubmit<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
			beforeShowForm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
				fckeditor<span style="color: #009900;">(</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">}</span><span style="color: #339933;">,</span>
			onclickSubmit<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
				<span style="color: #003366; font-weight: bold;">var</span> oEditorText <span style="color: #339933;">=</span> FCKeditorAPI.<span style="color: #660066;">GetInstance</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
				<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">{</span>
					text<span style="color: #339933;">:</span> oEditorText.<span style="color: #660066;">GetHTML</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
				<span style="color: #009900;">}</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">}</span>
		<span style="color: #009900;">}</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">{</span>
			<span style="color: #006600; font-style: italic;">// add parameters</span>
			reloadAfterSubmit<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
			beforeShowForm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
				<span style="color: #006600; font-style: italic;">// Перед тем как показать форму, вставляем в элемент с id='text' наш редактор</span>
				fckeditor<span style="color: #009900;">(</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">}</span><span style="color: #339933;">,</span>
			onclickSubmit<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
				<span style="color: #006600; font-style: italic;">// Получаем введенный и отформатированный текст в редакторе</span>
				<span style="color: #003366; font-weight: bold;">var</span> oEditorText <span style="color: #339933;">=</span> FCKeditorAPI.<span style="color: #660066;">GetInstance</span><span style="color: #009900;">(</span><span style="color: #3366CC;">'text'</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
				<span style="color: #006600; font-style: italic;">// Возвращаем его в виде html текста</span>
				<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">{</span>
					text<span style="color: #339933;">:</span> oEditorText.<span style="color: #660066;">GetHTML</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
				<span style="color: #009900;">}</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">}</span>
		<span style="color: #009900;">}</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">{</span>
			<span style="color: #006600; font-style: italic;">//delete parameters</span>
		<span style="color: #009900;">}</span>
	<span style="color: #009900;">)</span><span style="color: #339933;">;</span>

	<span style="color: #003366; font-weight: bold;">function</span> fckeditor<span style="color: #009900;">(</span>id<span style="color: #009900;">)</span> <span style="color: #009900;">{</span>
		<span style="color: #003366; font-weight: bold;">var</span> oFCKeditor <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> FCKeditor<span style="color: #009900;">(</span>id<span style="color: #009900;">)</span> <span style="color: #339933;">;</span>
		oFCKeditor.<span style="color: #660066;">ReplaceTextarea</span><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>

&lt;h1&gt;&lt;?=_('Новости')?&gt;&lt;/h1&gt;

&lt;div class="grid"&gt;
	&lt;table id="news-list" class="scroll"&gt;&lt;/table&gt;
	&lt;div id="news-pager" class="scroll"&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p>А вот так это выглядит в работе</p>
<p><img class="alignnone size-full wp-image-249" title="jqgrid-fckeditor" src="http://ajaxblog.ru/wp-content/uploads/2009/10/jqgrid-fckeditor.png" alt="jqgrid-fckeditor" width="593" height="458" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ajaxblog.ru/246/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

