<?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>Мастерская интернет-разработчика &#187; Интернет сервисы</title>
	<atom:link href="http://adw0rd.ru/category/internet-services/feed/" rel="self" type="application/rss+xml" />
	<link>http://adw0rd.ru</link>
	<description>Блог Михаила Андреева (aka adw0rd)</description>
	<lastBuildDate>Wed, 28 Jul 2010 18:10:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Пара новых сервисов</title>
		<link>http://adw0rd.ru/2009/two-my-services/</link>
		<comments>http://adw0rd.ru/2009/two-my-services/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 19:57:50 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[RFC]]></category>
		<category><![CDATA[Sendmail]]></category>
		<category><![CDATA[Сервисы]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=4132</guid>
		<description><![CDATA[Написал не так давно пару сервисов, вот решил поделиться ссылками на них, как всегда сервисы делал только для себя, чтобы иметь такие инструменты под рукой. И не претендую на славу и новизну идей! Sendmail Первый сервис предоставляет возможность отсылки почты с возможностью указать &#171;от кого&#187; уходит письмо, делал для того чтобы девушка поверила что такое [...]]]></description>
			<content:encoded><![CDATA[<p>Написал не так давно пару сервисов, вот решил поделиться ссылками на них, как всегда сервисы делал только для себя, чтобы иметь такие инструменты под рукой. И не претендую на славу и новизну идей!</p>
<h3>Sendmail</h3>
<p><a href="http://tools.adw0rd.ru/sendmail/" >Первый сервис</a> предоставляет возможность отсылки почты с возможностью указать &laquo;от кого&raquo; уходит письмо, делал для того чтобы девушка поверила что такое возможно, <strong>RFC</strong> он как-то не верила...</p>
<p><a href="http://adw0rd.ru/wp-content/uploads/2009/08/sendmail.jpg" ><img src="http://adw0rd.ru/wp-content/uploads/2009/08/sendmail-275x300.jpg" alt="sendmail" title="sendmail" width="275" height="300" class="alignnone size-medium wp-image-4135" style="border: dotted #c4c4c4 2px" /></a></p>
<h3>jsConsole</h3>
<p><a href="http://tools.adw0rd.ru/jsconsole/" >Второй сервис</a> более интересен, он предоставляет возможность <strong>тестировать js-код</strong> непосредственно в вашем браузере, чтобы не создавать тестовый файлик. Так же есть возможность импортировать в код библиотеку <strong>jQuery</strong>.</p>
<p><a href="http://adw0rd.ru/wp-content/uploads/2009/08/jsconsole.jpg" ><img src="http://adw0rd.ru/wp-content/uploads/2009/08/jsconsole2.jpg" alt="jsconsole2" title="jsconsole2" width="649" height="300" class="alignnone size-full wp-image-4140" style="border: dotted #c4c4c4 2px" /></a></p>
<p>О предложениях по улучшению&nbsp;&mdash; пишите в камменты!</p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/two-my-services/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Видеосервис своими руками и организация псевдостримминга</title>
		<link>http://adw0rd.ru/2009/videoservice-handmade/</link>
		<comments>http://adw0rd.ru/2009/videoservice-handmade/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 01:07:02 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[Операционные системы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flowplayer]]></category>
		<category><![CDATA[FLV]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[yamdi]]></category>
		<category><![CDATA[Сервисы]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=2801</guid>
		<description><![CDATA[Сегодня я расскажу как работают &#171;видеохостинги&#187; и мы разработаем свой &#171;видеосервис&#187; для закачивания видео-файлов, с последующим конвертирование и созданием картинки для превью. Далее организуем показ во флеш-плеере и эмулируем стримминг (для перемотки на не загруженные части видео-файла). Для всего этого нам понадобиться: Флеш-плеер для проигрывания видео-файлов&#160;&#8212; flowplayer Программа для конвертирования видео-файлов&#160;&#8212; ffmpeg Расширение PHP для [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2009/videoservice-handmade/" ><img src="http://adw0rd.ru/wp-content/uploads/2009/06/videoservice1.png" alt="videoservice" title="videoservice" width="260" height="51" class="alignright size-full wp-image-2965" /></a></p>
<p>Сегодня я расскажу как работают <strong>&laquo;видеохостинги&raquo;</strong> и мы разработаем свой <strong>&laquo;видеосервис&raquo;</strong> для закачивания видео-файлов, с последующим конвертирование и созданием картинки для превью. Далее организуем показ во флеш-плеере и эмулируем стримминг (для перемотки на не загруженные части видео-файла).</p>
<p><strong>Для всего этого нам понадобиться:</strong></p>
<ul>
<li>Флеш-плеер для проигрывания видео-файлов&nbsp;&mdash; <strong>flowplayer</strong></li>
<li>Программа для конвертирования видео-файлов&nbsp;&mdash; <strong>ffmpeg</strong></li>
<li>Расширение <strong>PHP</strong> для получения превью-изображения&nbsp;&mdash; <strong>php-ffmpeg</strong> и библиотека для работы с графикой&nbsp;&mdash; <strong>GD</strong></li>
<li>Эмуляция потокового видео (псевдостримминг) с помощью утилиты <strong>yamdi</strong>, модуля для nginx&nbsp;&mdash; <strong>http_flv_module</strong> и плагина для flowplayer&nbsp;&mdash; <strong>flowplayer.pseudostreamming</strong></li>
</ul>
<p><img src="http://adw0rd.ru/wp-content/uploads/2009/06/scheme-medium.png" alt="scheme-medium" title="scheme-medium" width="682" height="156" class="aligncenter size-full wp-image-2956" style="border:dotted #c4c4c4 2px;padding:3px;" /></p>
<p>Серверная ОСь по традиции&nbsp;&mdash; <strong>FreeBSD</strong>.<br />
<span id="more-2801"></span></p>
<h3>Установка необходимых нам утилит</h3>
<h4>ffmpeg</h4>
<p>Для того чтобы конвертировать видео, нам необходимо установить утилиту <strong>ffmpeg</strong>. Есть еще аналогичная утилита&nbsp;&mdash; <strong>mencoder</strong>, тоже очень хорошая, но <strong>ffmpeg</strong> более популярен, поэтому именно его буду сейчас использовать. Эти утилиты с переменным успехом конкурируют между собой, поэтому также рекомендую посмотреть на <strong>mencoder</strong> в свободное время.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># cd /usr/ports/multimedia/ffmpeg<br />
# make config</div></div>
<p>и выбираем <strong>LAME</strong> (lame MP3 codec)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># make install</div></div>
<blockquote class="download">
<p>Windows сборки ffmpeg: <noindex><a rel="nofollow" href="http://ffmpeg.arrozcru.org/builds/" >http://ffmpeg.arrozcru.org/builds/</a></noindex></p>
</blockquote>
<h4>yamdi</h4>
<p>Далее, необходимо установить утилиту <strong>yamdi</strong>, которая вшивает мета-данные в видео-файл. Мета-данные необходимы для индексирования файла, то есть для того, чтобы можно было в еще не скачанном (не буферизированном) файле при перемотке перемещаться по индексам.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># cd /usr/ports/multimedia/yamdi<br />
# make install</div></div>
<h4>nginx</h4>
<p>Теперь подошло время для <strong>nginx</strong>, который будет отдавать индексируемый (с помощью yamdi) видео-файл. На его месте может быть и <strong>lighttpd</strong> или еще какой-нибудь другой веб-сервер. Но я поддержу отечественного производителя! :)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># cd /usr/ports/www/nginx<br />
# make config</div></div>
<p>и выбираем <strong>HTTP_FLV_MODULE</strong>, далее</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># make install</div></div>
<p>Ну или просто при установке укажите опцию &laquo;--with-http_flv_module&raquo;.</p>
<blockquote class="download">
<p>nginx-0.7.52. Теперь и под Windows: <noindex><a rel="nofollow" href="http://rmcreative.ru/blog/post/nginx-0.7.52-teper-i-pod-windows" >http://rmcreative.ru/blog/post/nginx-0.7.52-teper-i-pod-windows</a></noindex></p>
</blockquote>
<blockquote class="info">
<p>
Можно конечно использовать в качестве бекенда&nbsp;&mdash; PHP, например с помощью такого кода:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$start</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #339933;">@</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'position'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$start</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;You fucking idiot&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// open file for reading</span><br />
<span style="color: #000088;">$fp</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r+'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$fsize</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$start</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// seek to requested position</span><br />
&nbsp; &nbsp; <span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fp</span><span style="color: #339933;">,</span> <span style="color: #000088;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// FLV header for the movie part. Magic. Just trust me.</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Header code is completely taken from flv4php project</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$header</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;FLV&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'C'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'C'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Length: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$header</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$fsize</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$start</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$header</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-Length: &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$fsize</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #990000;">set_time_limit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">feof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fp</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">print</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fp</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1024</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #990000;">usleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">// limit download speed</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fp</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Но мне удобнее использовать для этого модуль <strong>nginx&#39;а</strong>, да и быстрее будет, имхо.</p>
</blockquote>
<h4>php5-ffmpeg</h4>
<p>Это расширение <strong>PHP</strong> нам понадобиться для того чтобы получать информацию о видео-файле, а также для получения видео-фрейма для превью. Также необходимо установить библиотеку <strong>GD</strong> и сам <strong>PHP</strong> в частности.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># cd /usr/ports/graphics/php5-ffmpeg<br />
# make install</div></div>
<blockquote class="download">
<p>php5-ffmpeg для Windows: <a href="http://pyha.ru/forum/attachment/1256/1317.0" >http://pyha.ru/forum/attachment/1256/1317.0</a> и <a href="http://pyha.ru/forum/attachment/1257/1317.0" >http://pyha.ru/forum/attachment/1257/1317.0</a></p>
</blockquote>
<blockquote class="info">
<p>
Можно конечно получать информацию путем обращения к</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># ffmpeg -i /path/filename.flv</div></div>
<p>и делать превью</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"># ffmpeg -i /path/filename.flv &nbsp;-an -ss ВРЕМЯ_ПОЗИЦИИ_В_СЕКУНДАХ -r 1 -vframes 1 -s 320x240 -y -f mjpeg /path/filename.jpg</div></div>
<p>Но мне нравиться использовать расширение, это удобнее, имхо.</p>
</blockquote>
<p>И перегрузите <strong>apache</strong> или <strong>nginx</strong>, смотря как вы используете <strong>PHP</strong>.</p>
<h3>Конвертирование видео и получение изображения для превью</h3>
<p>Для начала нам надо указать путь до исходного и результирующего файлов, прописать пути до превью-файлов, а также указать минимальную позицию фрейма для создания превью.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Путь до залитого видео-файла, например временный файл полученный по $_FILES['tmp_file']</span><br />
<span style="color: #000088;">$inputPath</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tmp_file'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//Путь до результирующего файла, то есть отконвертированный и прошитый мета-данными видео-файл</span><br />
<span style="color: #000088;">$outputPath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/path/video/filename.flv&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Указываем минимальную позицию фрейма для захвата превью</span><br />
<span style="color: #000088;">$previewFrameMin</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'3'</span><span style="color: #339933;">;</span> <br />
<br />
<span style="color: #666666; font-style: italic;">// Путь до превью-файла</span><br />
<span style="color: #000088;">$previewPath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/path/preview/filename.jpg&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Путь до мини-превью</span><br />
<span style="color: #000088;">$previewMiniPath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/path/preview/filename_mini.jpg&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Массив для сбора ошибок</span><br />
<span style="color: #000088;">$errorInfo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Конвертируем исходный файл во временный, в формате <strong>FLV</strong> и разрешением <strong>320&times;240</strong>, использую в качестве аудио-кодека <strong>mp3lame</strong> с частотой <strong>44100</strong>, остальные настройки по умолчанию. Временный файл нужен для того, чтобы <strong>yamdi</strong> смог вшить мета-данные, так как он не может вшить в исходный файл.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">/* <br />
&nbsp;* Конвертируем FLV во временный файл ($outputPath . '_temp').<br />
&nbsp;*/</span><br />
<span style="color: #990000;">passthru</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'/usr/local/bin/ffmpeg -i '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">escapeshellarg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$inputPath</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">' -f flv '</span><span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">' -s 320x240 '</span><span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">' -acodec libmp3lame '</span><span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">' -ar 44100 '</span><span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #990000;">escapeshellarg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'_temp'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$errorInfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ffmpeg'</span><span style="color: #009900;">&#93;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Прошиваем в видео-файл мета-данные для индексирования. Утилита <strong>yamdi</strong> написана на Си и работает очень быстро! А также удаляем временный файл.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Прошиваем metadata (позиции ключевых фреймов) для перемотки<br />
&nbsp;*/</span><br />
<span style="color: #990000;">passthru</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'/usr/local/bin/yamdi -i '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">escapeshellarg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'_temp'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">' -o '</span> <span style="color: #339933;">.</span> <span style="color: #990000;">escapeshellarg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$errorInfo</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'yamdi'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Удаление временного файла, он нам уже не нужен...<br />
&nbsp;*/</span><br />
<span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'_temp'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Теперь получаем информацию о видео-файле и получаем объект фрейма для превью.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* С помощью расширения php5-ffmpeg получаем информацию о видео-файле<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$movie</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ffmpeg_movie<span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Вычисляем время воспроизведения видеофайла<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$duration</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDuration</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Вычисляем количество кадров<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$frameCount</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFrameCount</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Вычисляем позицию фрейма для его захвата<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$framePosition</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$frameCount</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$previewFrameMin</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$frameCount</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$previewFrameMin</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Получаем объект фрейма для превью<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$preview</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFrame</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$framePosition</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>А теперь получим и сохраним наши превьюшки.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Записываем в файл - Превью (320x240)<br />
&nbsp;*/</span><br />
<span style="color: #990000;">imagejpeg</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$preview</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toGDImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$previewPath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Записываем в файл - Мини-превью (160x120)<br />
&nbsp;*/</span><br />
<br />
<span style="color: #000088;">$previewMini</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">160</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">120</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecopyresized</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$previewMini</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$preview</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">toGDImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #cc66cc;">160</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">120</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #cc66cc;">320</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">240</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #990000;">imagejpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$previewMini</span><span style="color: #339933;">,</span> <span style="color: #000088;">$previewMiniPath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Все, файл отконвертирован в <strong>FLV</strong> и прошит мета-данными, также созданы превью, теперь займемся выводом видео-файла&nbsp;&mdash; клиенту.</p>
<h3>Плеер и показ видео</h3>
<h4>Почему flowplayer?</h4>
<p>Сначала нам понадобится флеш-плеер, умеющий проигрывать видео в формате <strong>FLV</strong> и показывать картинки в формате <strong>JPEG</strong> (для превью).</p>
<p>Из всех аналогов (смотрите ниже, в &laquo;Полезные ссылки -> Видео-плееры&raquo;) мне больше всего понравился <noindex><a rel="nofollow" href="http://flowplayer.org/" >flowplayer</a></noindex>, он:</p>
<ul>
<li>Кроссбраузерный и очень гибкий, и удобный в настройке</li>
<li>Бесплатный для некоммерческого использования, а коммерческая версия стоит его возможностей!</li>
<li>Имеет Flash и Javascript API, также поддерживает библиотеку JQuery (там доп. фишки какие-то)</li>
<li>Имеет кучу полезных плагинов</li>
<li>Умеет работать со стриммингом и псевдостриммингом</li>
<li>Легко поменять шаблоны оформления и языковые шаблоны для настройки локализованного интерфейса</li>
<li>Обширная документация, имеет достаточно большое сообщество в собственном форуме, а также оказывает бесплатную поддержку для коммерческой версии</li>
<li>Поддерживает плейлисты и имеет полноэкранный режим</li>
<li>Поддерживаемые форматы: FLV, SWF, MP3, MP4, H.264 video, JPG, PNG</li>
<li>Сырцы открыты!</li>
</ul>
<p><img src="http://adw0rd.ru/wp-content/uploads/2009/06/flowplayer.png" alt="flowplayer" title="flowplayer" width="416" height="312" class="alignnone size-full wp-image-2893" style="border:dotted #c4c4c4 2px;padding:3px;" /></p>
<p>Остальное описание возможностей на официальном сайте: <noindex><a rel="nofollow" href="http://flowplayer.org/" >http://flowplayer.org/</a></noindex></p>
<h4>Настройка flowplayer</h4>
<p>С плеером мы определились, теперь надо его настроить для показа видео. В дистрибутив плеера входит:</p>
<ul>
<li><strong>flowplayer-3.1.1.swf</strong>&nbsp;&mdash; сам плеер</li>
<li><strong>flowplayer.controls-3.1.1.swf</strong>&nbsp;&mdash; flash-controls</li>
<li><strong>flowplayer-3.1.1.min.js</strong>&nbsp;&mdash; это так называемый js-api</li>
</ul>
<p>Для реализации псевдо-стримминга нам не хватает <strong>flowplayer.pseudostreaming-3.1.2.swf</strong>, который можно скачать и ознакомиться с использованием тут: <noindex><a rel="nofollow" href="http://flowplayer.org/plugins/streaming/pseudostreaming.html" >http://flowplayer.org/plugins/streaming/pseudostreaming.html</a></noindex>.</p>
<p>Для работы со всеми видами стриминга есть титуриал: <noindex><a rel="nofollow" href="http://flowplayer.org/documentation/configuration/streaming.html" >http://flowplayer.org/documentation/configuration/streaming.html</a></noindex></p>
<p><strong>Итак, приступим:</strong></p>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #808080; font-style: italic;">&lt;!-- Подключаем js-api --&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;/swf/flowplayer-3.1.1.min.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- Настраиваем плеер --&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp; &nbsp; flowplayer(<br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;player&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &quot;/swf/flowplayer-3.1.1.swf&quot;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; playlist: [<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url: 'http://example.com/preview/filename.jpg' <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url: 'http://example.com/video/filename.flv', &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; autoPlay: false,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; autoBuffering: false,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; provider: 'pseudo'<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ],<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; plugins: {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pseudo: { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; url: '/swf/flowplayer.pseudostreaming-3.1.2.swf' <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; );<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span><br />
<br />
<span style="color: #808080; font-style: italic;">&lt;!-- DIV в который мы поместим плеер --&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;width:416px;height:312px;display:block;padding:10px;&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;player&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></div></div>
<p>Все опции указанные в настройках можно посмотреть тут: <noindex><a rel="nofollow" href="http://flowplayer.org/documentation/configuration/clips.html" >http://flowplayer.org/documentation/configuration/clips.html</a></noindex></p>
<h4>Настройка http_flv_module</h4>
<p>Теперь настроим <strong>nginx</strong> на отдачу файла со смещением, для эмуляции стримминга.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp; &nbsp; location ~ \.flv$ {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flv;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; root /path/video;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }</div></div>
<p>То есть, говорим <strong>nginx&#39;у</strong> чтобы он для расширения &laquo;flv&raquo; использовал модуль <strong>http_flv_module</strong> и указываем в <strong>root</strong> путь до видео-файлов. Документация по <strong>http_flv_module</strong>: <noindex><a rel="nofollow" href="http://sysoev.ru/nginx/docs/http/ngx_http_flv_module.html" >Директивы модуля ngx_http_flv_module</a></noindex></p>
<p>Ну вот и все, теперь у вас полноценный &laquo;видеосервис&raquo;!</p>
<h3>Полезные ссылки</h3>
<p><strong>ffmpeg</strong><br />
<a href="http://pyha.ru/forum/topic/1317.0" >Работа с видео на php с помощью php ffmpeg</a><br />
<noindex><a rel="nofollow" href="http://vbolshov.org.ru/?id=20&#038;ctrl=article" >Продвинутый метод воспроизведения flash-видео на веб-страницах (или эмулируем стрим-видео)</a></noindex><br />
<noindex><a rel="nofollow" href="http://vbolshov.org.ru/?id=34&#038;ctrl=article" >Наносим водяной знак на видео с помощью ffmpeg</a></noindex><br />
<noindex><a rel="nofollow" href="http://alexsnet.ru/2008/12/how-does-it-works-videohost-part1/" >Как же работают видеохостинги? Часть первая. Сборка.</a></noindex><br />
<noindex><a rel="nofollow" href="http://alexsnet.ru/2008/12/how-does-it-works-videohost-part2-ffmpeg/" >Как же работают видеохостинги? Часть вторая. Ffmpeg.</a></noindex><br />
<!--<noindex><a rel="nofollow" href="http://boombick.org/blog/posts/19" >Обработка видео при помощи mencoder</a></noindex><br />
<noindex><a rel="nofollow" href="http://boombick.org/blog/posts/72" >Собственный видеохостинг</a></noindex>--></p>
<p><strong>Видео-плееры</strong><br />
<noindex><a rel="nofollow" href="http://chernev.ru/podborka-video-proigryvatelej-na-fleshe.html" >Подборка видео-проигрывателей на флэше</a></noindex><br />
<noindex><a rel="nofollow" href="http://vremenno.net/misc/video-and-audio-players-for-sites/" >Видео и аудио плееры для сайтов</a></noindex><br />
<noindex><a rel="nofollow" href="http://www.birzool.com/ideal-videoplayer/" >Идеальный видео-плеер</a></noindex><br />
<noindex><a rel="nofollow" href="http://www.birzool.com/ideal-videoplayer-2/" >Идеальный видеоплеер. Не утопия </a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/videoservice-handmade/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>Сделал сервис getDomains!</title>
		<link>http://adw0rd.ru/2009/getdomains/</link>
		<comments>http://adw0rd.ru/2009/getdomains/#comments</comments>
		<pubDate>Wed, 27 May 2009 00:22:32 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Релизы]]></category>
		<category><![CDATA[Сервисы]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=654</guid>
		<description><![CDATA[Мне надоело использовать сомнительные сервисы, которые я подозреваю в воровстве имен при проверке доменов, поэтому я написал свой! Умеет подбирать доменные имена поддерживает зоны: com, org, net, info + несколько территориальных (ru, ua, en, us) показывает whois-информацию по определенному домену Итак, представляю вашему вниманию сервис GetDomains! --- PS. Спасибо ghost за реализацию алгоритма по комбинаторике]]></description>
			<content:encoded><![CDATA[<p>Мне надоело использовать сомнительные сервисы, которые я подозреваю в воровстве имен при проверке доменов, поэтому я написал свой!</p>
<p><a href="http://tools.adw0rd.ru/getdomains/" ><img src="http://adw0rd.ru/wp-content/uploads/2009/03/getdomains.jpg" alt="getdomains" title="getdomains" width="510" height="80" class="alignnone size-full wp-image-2433" style="border: dotted #c4c4c4 2px" /></a></p>
<h3>Умеет</h3>
<ul>
<li><strong>подбирать доменные имена</strong></li>
<li>поддерживает зоны: com, org, net, info + несколько территориальных (ru, ua, en, us)</li>
<li>показывает whois-информацию по определенному домену</li>
</ul>
<p>Итак, представляю вашему вниманию <a href="http://tools.adw0rd.ru/getdomains/" >сервис GetDomains</a>!</p>
<p>---<br />
<strong>PS.</strong> Спасибо <a href="http://pyha.ru/forum/profile/3" >ghost</a> за <a href="http://pyha.ru/forum/topic/2446.msg45807#msg45807" >реализацию алгоритма по комбинаторике</a></p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/getdomains/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Сервис SeoTools и вычисление PR и ТиЦ средствами PHP</title>
		<link>http://adw0rd.ru/2009/seotools-and-pr-tyc/</link>
		<comments>http://adw0rd.ru/2009/seotools-and-pr-tyc/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 08:37:40 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PR]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[ТиЦ]]></category>
		<category><![CDATA[Яндекс]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=899</guid>
		<description><![CDATA[Вот немного дописал и решил выставить на обозрение свой сервис SeoTools, на самом деле я не знаю стоит ли его развивать, хотелось бы сделать сервис по составлению отчетов для компаний предоставляющих услуги по SEO. Идея! Например, пользователь заходит на сервис, вбивает домен и предполагаемые ключевые слова (если таковые имеются), после чего сервис проверяет характеристики домена [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2009/seotools-and-pr-tyc/" ><img src="http://adw0rd.ru/wp-content/uploads/2009/03/seotools1.png" alt="seo.adw0rd.ru" title="seo.adw0rd.ru" width="322" height="126" class="alignright size-full wp-image-1347" /></a></p>
<p>Вот немного дописал и решил выставить на обозрение свой сервис <a href="http://seo.adw0rd.ru/" >SeoTools</a>, на самом деле я не знаю стоит ли его развивать, хотелось бы сделать сервис по составлению отчетов для компаний предоставляющих услуги по SEO.</p>
<h3>Идея!</h3>
<p>Например, пользователь заходит на сервис, вбивает домен и предполагаемые ключевые слова (если таковые имеются), после чего сервис проверяет характеристики домена и наличие мест по ключевикам и предлагает другие варианты ключевиков, более подходящие для домена. Так же можно внедрить морфо-словари и предлагать схожие слова и т.д.</p>
<p>После чего формировать диаграммы и графики и рассчитывать примерный рост и т.д. То есть давать прогнозы!</p>
<h3>Сервис</h3>
<p>В данный момент, сервис опрашивает информацию линейно, поэтому может показаться что он изрядно притормаживает, однако ничего не стоит переписать его под параллельные обращения, но надо ли это сейчас...?<br />
<span id="more-899"></span></p>
<h3>Вычисление PR</h3>
<p>Как и обещал выкладываю класс по определению PR:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> googlePageRank <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> get<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;GOOGLE_MAGIC&quot;</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE6359A60</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'info:'</span><span style="color: #339933;">.</span><span style="color: #000088;">$url</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">GoogleCH</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">strord</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://www.google.com/search?client=navclient-auto&amp;ch=6<span style="color: #006699; font-weight: bold;">$ch</span>&amp;features=Rank&amp;q=<span style="color: #006699; font-weight: bold;">$url</span>&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> seoTools<span style="color: #339933;">::</span><span style="color: #004000;">curlGetContent</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> GoogleCH<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$length</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$init</span><span style="color: #339933;">=</span>GOOGLE_MAGIC<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_null</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$length</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">=</span> <span style="color: #208080;">0x9E3779B9</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$init</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$k</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$len</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$length</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$len</span> <span style="color: #339933;">&gt;=</span> <span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$b</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">11</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$mix</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">mix</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span> <span style="color: #000088;">$b</span><span style="color: #339933;">,</span> <span style="color: #000088;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mix</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mix</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mix</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$k</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$len</span> <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$length</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$len</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">11</span><span style="color: #339933;">:</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">9</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">9</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* the first byte of c is reserved for the length */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">8</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">7</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">6</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$b</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">5</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$b</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">4</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$a</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$a</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$a</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$a</span><span style="color: #339933;">+=</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$k</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/* case 0: nothing left to add */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$mix</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">mix</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #000088;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$mix</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> zeroFill<span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span> <span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$z</span> <span style="color: #339933;">=</span> <span style="color: #990000;">hexdec</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">80000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$z</span> <span style="color: #339933;">&amp;</span> <span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&gt;&gt;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">&amp;=</span> <span style="color: #009900;">&#40;</span>~<span style="color: #000088;">$z</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">|=</span> <span style="color: #208080;">0x40000000</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&gt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&gt;&gt;</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> mix<span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #000088;">$c</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$c</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$c</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$c</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$c</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$b</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">&lt;&lt;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$a</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> <span style="color: #339933;">-=</span> <span style="color: #000088;">$b</span><span style="color: #339933;">;</span> <span style="color: #000088;">$c</span> ^<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">zeroFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #339933;">,</span><span style="color: #000088;">$b</span><span style="color: #339933;">,</span><span style="color: #000088;">$c</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> strord<span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span>strlen<span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">ord</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$string</span><span style="color: #009900;">&#123;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$result</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Пример использования,</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;googlePageRank.php&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> getPR <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'|Rank_(\d*):(\d*):(\d*)|i'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; googlePageRank<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$PR</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$PR</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #b1b100;">echo</span> getPR<span style="color: #009900;">&#40;</span>URL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Где <strong>URL</strong>&nbsp;&mdash; это ваш домен для проверки.</p>
<h3>Вычисление ТиЦ</h3>
<p>А теперь вычислим Яндекс ТиЦ, для этого введем <strong>URL</strong> (ваш домен).</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> getTCY <span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'|&lt;tcy\s+rang=[&quot;\']?(\d*)[&quot;\']?\s+value=[&quot;\']?(\d*)[&quot;\']?\s?/&gt;|i'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://bar-navig.yandex.ru/u?ver=2&amp;url='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;show=1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$TCY</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$TCY</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #b1b100;">echo</span> getTCY<span style="color: #009900;">&#40;</span>URL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Ну вот и все, есть вопросы? Добро пожаловать в камменты!<br />
Мой ответ на <noindex><a rel="nofollow" href="http://alexsnet.ru/2009/02/yandexcy-and-googlepr/" >Кратенько о том, как узнавать PR и CY</a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/seotools-and-pr-tyc/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Что такое Google Локатор?</title>
		<link>http://adw0rd.ru/2009/google-latitude/</link>
		<comments>http://adw0rd.ru/2009/google-latitude/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 10:40:26 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=994</guid>
		<description><![CDATA[Google Локатор – это новый сервис Google для поиска друзей на карте, который поддерживается следующими типами мобильных устройств: устройства на платформе Android, например T-Mobile G1 (в ближайшее время); сенсорные устройства iPhone и iPod (в ближайшее время); большинство устройств BlackBerry с цветным экраном; большинство устройств под управлением ОС Windows Mobile 5.0; большинство устройств под управлением ОС Symbian [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-995" src="http://adw0rd.ru/wp-content/uploads/2009/03/google-latitude-logo.png" alt="google-latitude-logo" width="198" height="192" />Google Локатор – это новый сервис Google для поиска друзей на карте, который поддерживается следующими типами мобильных устройств:</p>
<div class="willItWork">
<ul>
<li>устройства на платформе Android, например T-Mobile G1 (в ближайшее время);</li>
<li>сенсорные устройства iPhone и iPod (в ближайшее время);</li>
<li>большинство устройств BlackBerry с цветным экраном;</li>
<li>большинство устройств под управлением ОС Windows Mobile 5.0;</li>
<li>большинство устройств под управлением ОС Symbian (смартфоны Nokia);</li>
<li>мобильные телефоны с поддержкой Java (J2ME), например Sony Ericsson (в ближайшее время).</li>
</ul>
</div>
<p><span id="more-994"></span>
</p>
<div class="willItWork" style="text-align:center;">
</div>
<p>
Подробнее <noindex><a rel="nofollow" href="http://www.google.ru/latitude/intro.html" >http://www.google.ru/latitude/intro.html</a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/google-latitude/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>Установка и настройка MediaWiki + 3 полезных расширения</title>
		<link>http://adw0rd.ru/2009/mediawiki-and-extensions/</link>
		<comments>http://adw0rd.ru/2009/mediawiki-and-extensions/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 08:33:12 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=777</guid>
		<description><![CDATA[Почему MediaWiki? Потомучто его разрабатывает и использует WikiMedia (разработчики WikiPedia); Базы данных MySQL, PostgreSQL, SQLite; Поддерживает memcached и Squid; YAML, HTML и TeX; Оптимизированна под поисковики, есть расширения и темы, полная русская локализация. Установка Нам понадобиться PHP5 и выше (плюс PCRE и SPL), СУБД MySQL или PostgreSQL. Качаем архив и распаковываем в директорию где будет [...]]]></description>
			<content:encoded><![CDATA[<h2><a href="http://adw0rd.ru/2009/mediawiki-and-extensions/" ><img class="alignright size-full wp-image-780" src="http://adw0rd.ru/wp-content/uploads/2009/02/wiki.png" alt="wiki" width="135" height="135" /></a></h2>
<h2>Почему MediaWiki?</h2>
<ol>
<li>Потомучто его разрабатывает и использует WikiMedia (разработчики WikiPedia);</li>
<li>Базы данных MySQL, PostgreSQL, SQLite;</li>
<li>Поддерживает memcached и Squid;</li>
<li>YAML, HTML и TeX;</li>
<li>Оптимизированна под поисковики, есть расширения и темы, полная русская локализация.</li>
</ol>
<h2>Установка</h2>
<ul>
<li>Нам понадобиться PHP5 и выше (плюс PCRE и SPL), СУБД MySQL или PostgreSQL.</li>
<li><noindex><a rel="nofollow" href="http://download.wikimedia.org/mediawiki/1.13/mediawiki-1.13.4.tar.gz"  target="_blank">Качаем</a></noindex> архив и распаковываем в директорию где будет у нас находится вики-раздел сайта;</li>
<li>Переходим по пункту “set up the wiki”;</li>
<li>Заполняем анкетные и конфигурационные данные (Название, язык, бд, кеш, администратор и т.д.);</li>
<li>Все, готово!</li>
</ul>
<h2>Настройка</h2>
<p>Перемещаем файл <strong>LocalSettings.php</strong> (&lt;mediawiki&gt;/config/LocalSettings.php) в корень вики-раздела (&lt;mediawiki&gt;/);</p>
<p>В <strong>LocalSettings.php</strong> находятся основные настройки вики-движка, например директива <strong>$wgUseAjax</strong> (true/false) отвечает за AJAX, то есть если <strong>true</strong> то будет вики-движком использоваться AJAX (по возможности конечно).</p>
<p>Добавьте в <strong>LocalSettings.php</strong>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># Включаем поддержку AJAX<br />
</span><span style="color: #000088;">$wgUseAjax</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Логотип<br />
</span><span style="color: #000088;">$wgLogo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/images/your-logotype.gif'</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Запрет незарегистрированным участникам редактировать статьи<br />
</span><span style="color: #000088;">$wgEmailConfirmToEdit</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span></div></div>
<h2>Расширения</h2>
<p>Расширения находятся по адресу <noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Category:Extensions/ru"  target="_blank">http://www.mediawiki.org/wiki/Category:Extensions/ru</a></noindex>, со структурой категорий разобраться не так уж легко, поэтому рекомендую использовать поиск.</p>
<p>Устанавливать расширения очень просто, надо распаковать архив в каталог <strong>&lt;mediawiki&gt;/extensions</strong>.</p>
<h2>И напоследок, 3 полезных расширения…</h2>
<p><span id="more-777"></span></p>
<hr />
<h3><noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/CategoryTree"  target="_blank">CategoryTree</a></noindex></h3>
<p>Предназначена для вывода “дерева категорий” в раздел “Спецстраницы/Списки страниц/Дерево категорий” и в сайдбар.</p>
<p>Добавьте в <strong>LocalSettings.php</strong>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># CategoryTree - дерево категорий<br />
</span><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$IP}</span>/extensions/CategoryTree/CategoryTree.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Максимум потомков (ветвей в ноде)<br />
</span><span style="color: #000088;">$wgCategoryTreeMaxChildren</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># AJAX использовать?<br />
</span><span style="color: #000088;">$wgCategoryTreeDynamicTag</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Корневая категория, вместо &quot;Root&quot; - свою категорию.<br />
</span><span style="color: #000088;">$wgCategoryTreeSidebarRoot</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Root'</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Режим для AJAX<br />
</span><span style="color: #000088;">$wgCategoryTreeSidebarOptions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'mode'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span></div></div>
<p>Для перемещения меню категорий в сайдбаре, я изменил шаблон MonoBook (именно он используеться по умолчанию):</p>
<p>Файл <strong>&lt;mediawiki&gt;/skins/MonoBook.php</strong> строка <strong>177</strong></p>
<p>после</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'LANGUAGES'</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'LANGUAGES'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span></div></div>
<p>и до</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$sidebar</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$boxName</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$cont</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></div></div>
<p>вставить:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$sidebar</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">'categorytree-portlet'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'categorytree-portlet'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<span style="color: #0000ff;">'SEARCH'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SEARCH'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<span style="color: #0000ff;">'navigation'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'navigation'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<span style="color: #0000ff;">'TOOLBOX'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'TOOLBOX'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<span style="color: #0000ff;">'LANGUAGES'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$sidebar</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'LANGUAGES'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>то есть, мы просто поменяли местами порядок следования меню.</p>
<hr />
<h3><noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/FCKeditor"  target="_blank">FCKeditor</a></noindex></h3>
<p>Тут их даже две версии:</p>
<ol>
<li><noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Extension:FCKeditor_%28by_Mafs%29" title="Extension:FCKeditor (by Mafs)"  target="_blank">FCKeditor extension by Mafs</a></noindex></li>
<li><noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Extension:FCKeditor_%28by_FCKeditor_and_Wikia%29" title="Extension:FCKeditor (by FCKeditor and Wikia)"  target="_blank">FCKeditor extension by the FCKeditor team and Wikia</a></noindex></li>
</ol>
<p>Я использовал вторую, типа официальная всетаки!<br />
Добавьте в <strong>LocalSettings.php</strong>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># FCKeditor<br />
</span><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">{$IP}</span>/extensions/FCKeditor/FCKeditor.php&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Я пробовал еще <noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Extension:TinyMCE_MW"  target="_blank">TinyMCE</a></noindex> расширение, однако оно сильно нестабильно (Release status: unstable), пользоваться невозможно <strong>:(</strong></p>
<p>Еще есть дополнительные опции<strong>:</strong></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;"># Ссылки на переключение с рич-редактора на стандартный<br />
</span><span style="color: #000088;">$wgDefaultUserOptions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'riched_use_toggle'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># По умолчанию отключен рич-редактор<br />
</span><span style="color: #000088;">$wgDefaultUserOptions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'riched_start_disabled'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Появиться ссылка для возможности открытия в новом окне рич-редактор<br />
</span><span style="color: #000088;">$wgDefaultUserOptions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'riched_use_popup'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Помнить ваш выбор (рич/стандарт)<br />
</span><span style="color: #000088;">$wgDefaultUserOptions</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'riched_toggle_remember_state'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span></div></div>
<p>В данном случае “рич-редактор”&nbsp;&mdash; это <strong>FCKeditor</strong>.</p>
<hr />
<h3>MindMap</h3>
<p>Еще есть <noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Extension:FreeMind"  target="_blank">FreeMind</a></noindex> и <noindex><a rel="nofollow" href="http://www.mediawiki.org/wiki/Extension:WikiMindMap"  target="_blank">WikiMindMap,</a></noindex> я их на деле не использовал, но судя по описания очень даже ничего!</p>
<blockquote>
<p><strong>Диаграмма связей</strong>, известная также как <strong>интеллект-карта</strong>, (англ. <em><span lang="en">Mind map</span></em>) — способ изображения процесса общего системного мышления с помощью схем. Также может рассматриваться как удобная техника альтернативной записи.</p>
<p><noindex><a rel="nofollow" href="http://ru.wikipedia.org/wiki/Mindmapping"  target="_blank">http://ru.wikipedia.org/wiki/Mindmapping</a></noindex></p>
</blockquote>
<hr />
<p><strong>P.S. Восстановленный пост</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/mediawiki-and-extensions/feed/</wfw:commentRss>
		<slash:comments>57</slash:comments>
		</item>
		<item>
		<title>Google Non-AJAX Language API</title>
		<link>http://adw0rd.ru/2009/google-non-ajax-language-api/</link>
		<comments>http://adw0rd.ru/2009/google-non-ajax-language-api/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 01:43:36 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[cUrl]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=364</guid>
		<description><![CDATA[Думаю все знакомы или слышали о сервисе Google Translate, с помощью которого можно переводить текст, так же предполагаю что многие могли слышать о Google AJAX Language API: С помощью AJAX Language API можно переводить и определять язык текстов на веб-страницах, пользуясь только Javascript. Но, порой необходимо переводить не только на стороне клиента (с помощью ajax), [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2009/google-non-ajax-language-api/" ><img class="alignright size-full wp-image-378" src="http://adw0rd.ru/wp-content/uploads/2009/01/translate_beta_res.gif" alt="translate_beta_res" width="150" height="55" /></a>Думаю все знакомы или слышали о сервисе <noindex><a rel="nofollow" href="http://translate.google.com" >Google Translate</a></noindex>, с помощью которого можно <noindex><a rel="nofollow" href="http://www.google.com/intl/ru/help/faq_translation.html" >переводить текст</a></noindex>, так же предполагаю что многие могли слышать о <noindex><a rel="nofollow" href="http://code.google.com/intl/ru/apis/ajaxlanguage/" >Google AJAX Language API</a></noindex>:</p>
<blockquote>
<p>С помощью AJAX Language API можно переводить и определять язык текстов на веб-страницах, пользуясь только Javascript.</p>
</blockquote>
<p>Но, порой необходимо переводить не только на стороне клиента (с помощью ajax), а так же и на стороне сервера, путем запросов к серверу через cUrl или сокеты. Однако Google как обычно на высоте и предлагает решение нашей проблемы <noindex><a rel="nofollow" href="http://code.google.com/intl/ru/apis/ajaxlanguage/documentation/#fonje" >Flash and other Non-Javascript Environments<span id="more-364"></span></a></noindex></p>
<h2>А теперь, напишем простенькую функцию:</h2>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">function googleTranslater ($query, $langTo = 'en', $langFrom = 'auto', $version = '1.0') {<br />
<br />
&nbsp; &nbsp; $url = 'http://ajax.googleapis.com/ajax/services/language/translate?'<br />
&nbsp; &nbsp; &nbsp; &nbsp; .'v='.urlencode($version)<br />
&nbsp; &nbsp; &nbsp; &nbsp; .'&amp;amp;q='.urlencode($query)<br />
&nbsp; &nbsp; &nbsp; &nbsp; .'&amp;amp;langpair='.urlencode((($langFrom == 'auto')? null: $langFrom).'|'.$langTo);<br />
<br />
&nbsp; &nbsp; $result = json_decode(file_get_contents($url));<br />
<br />
&nbsp; &nbsp; if(is_object($result) and $result-&amp;gt;responseStatus == 200) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return $result-&amp;gt;responseData-&amp;gt;translatedText;<br />
&nbsp; &nbsp; } else {<br />
&nbsp; &nbsp; &nbsp; &nbsp; return false;<br />
&nbsp; &nbsp; }<br />
}<br />
<br />
echo googleTranslater('С Новым Годом!');</div></div>
<p>Данные возвращаются в UTF-8.</p>
<h3>UPD:</h3>
<p>Все, признаю свое поражение перед <a href="http://mabp.kiev.ua/" >Мавром</a> и его <a href="http://mabp.kiev.ua/2008/08/28/google_translate/" >Google-транслятором</a>. У него можно передать 32 Кб POST&#39;ом, у меня чуть более 2 Кб GET&#39;ом. Сколько я не пытался переписать, Google не дает отправлять за один раз больше чем 2 Кб и POST не разрешает.  Однако я не потерял время зря, а заодно изучил <noindex><a rel="nofollow" href="http://code.google.com/intl/ru/apis/ajaxsearch/documentation/index.html#fonje" >Google AJAX Search API</a></noindex>, теперь применю навыки в двух других проектах!</p>
<h3>UPD:</h3>
<p><noindex><a rel="nofollow" href="http://livepad.ru/view/0e12972c" >LivePad: Google translate</a></noindex><br />
<noindex><a rel="nofollow" href="http://aplabs.ru/2008/12/05/hello-world/" >PHP класс Google_translate</a></noindex></p>
<h3>UPD:</h3>
<p><noindex><a rel="nofollow" href="http://alexsnet.ru/2009/02/google-translate-non-ajax-api/" >Google Translate Non Ajax API</a></noindex></p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2009/google-non-ajax-language-api/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Сжимаем и минимизируем CSS при помощи Code Beautifier</title>
		<link>http://adw0rd.ru/2008/css-code-beautifier/</link>
		<comments>http://adw0rd.ru/2008/css-code-beautifier/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 19:40:57 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[GZip]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Сервисы]]></category>

		<guid isPermaLink="false">http://adw0rd.ru/?p=289</guid>
		<description><![CDATA[И снова обратимся к webo.in для оптимизации блога, теперь он предлагает: CSS-файлы можно уменьшить в размере. Рекомендуется воспользоваться инструментом для сжатия CSS-файлов (основанном на проекте CSS Tidy). После этого можно отдавать CSS-файлы в виде архивов с сервера (общий выигрыш до 85%). Сжатие мы настроили, пришло время минимизировать CSS и рассказать про инструмент для минимизации CSS-файлов [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://adw0rd.ru/2008/css-code-beautifier/code-beautifier/" rel="attachment wp-att-291" ><img class="alignright size-full wp-image-291" src="http://adw0rd.ru/wp-content/uploads/2008/11/code-beautifier.png" alt="" width="234" height="99" /></a><strong></strong><br />
И снова обратимся к <noindex><a rel="nofollow" href="http://webo.in/" >webo.in</a></noindex> для оптимизации блога, теперь он предлагает:</p>
<blockquote>
<p><strong>CSS-файлы можно уменьшить в размере.</strong><br />
Рекомендуется воспользоваться инструментом для сжатия CSS-файлов (основанном на проекте CSS Tidy). После этого можно отдавать CSS-файлы в виде архивов с сервера (общий выигрыш до 85%).</p>
</blockquote>
<p>Сжатие мы настроили, пришло время минимизировать CSS и рассказать про  инструмент для минимизации CSS-файлов (основанном на проекте CSS Tidy)&nbsp;&mdash; <noindex><a rel="nofollow" href="http://www.codebeautifier.com" >Code Beautifier</a></noindex>.<span id="more-289"></span></p>
<p><strong>Что делает данный инструмент?</strong></p>
<p>Он заменяет определённые части кода на более короткие записи, например:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">0px == 0<br />
#ff0000 == #f00</div></div>
<p>а также уменьшает количество отступов, переводов строк, объединяет блоки и удаляет комментарии. Короче, CSS превращаеться в кашу... и тем самым минимизирует размер файла.</p>
<p>Но, вы скажете: &laquo;а как же редактировать эту кашу&raquo;? Ответ прост, вам надо хранить резервную и читабельную версию файла, а в продакшн запускать минимизированную!</p>
<ul>
<li>Продакшн версия <a href="http://adw0rd.ru/wp-content/themes/premium/style.css" >http://adw0rd.ru/wp-content/themes/premium/style.css</a></li>
<li>Резервная версия <a href="http://adw0rd.ru/wp-content/themes/premium/style-backup.css" >http://adw0rd.ru/wp-content/themes/premium/style-backup.css</a></li>
</ul>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Input: 23.069KB, Output:12.217KB, Compression Ratio: 47%(-10852 Bytes)</div></div>
<p><strong>После минимизации</strong>, мой основной CSS файл стал <strong>в два раза меньше</strong> размером. Но, на этом не остановимся и включим <a href="http://adw0rd.ru/2008/mod_deflate/" >сжатие CSS файлов</a>, это ещё больше <strong>повысит скорость</strong> вашего сайта на данном этапе!</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">AddOutputFilterByType DEFLATE text/css</div></div>
<blockquote>
<p><strong>CSS-файлы слишком велики.</strong><br />
Может быть, есть возможность их уменьшить, например, включив только те стили, которые действительно требуются, сократив пути к фоновым изображения, сгруппировав селекторы и пересмотрев логику наименования классов стилей.</p>
</blockquote>
<p>Есть и подобные инструментарии, но с ними больше возни... Так как вам придётся также переименовывать все классы и прочие структуры в <strong>(x) HTML</strong> файлах.</p>
<p>А также изменять пути хранения подключаемых файлов. Хотя можно настроить <strong>mod_rewrite</strong> конечно для этого дела, но это уже извращение на мой взгляд. Лучше тогда уж повесить все картинки на другой сервер, например с nginx на борту.</p>
<p>Более подробнее о сжатии CSS с результатами тестирования <noindex><a rel="nofollow" href="http://webo.in/articles/habrahabr/14-minifing-css/" >CSS: все о сжатии</a></noindex></p>
<p><strong>P.S.</strong> Правда у меня была проблема с CSS, поплыл <strong>&lt;blockquote&gt; </strong>на страничках, проблема была в том что для тега <strong>blockquote{}</strong> стили в нормальном CSS были позже вызваны чем <strong>body *{}</strong> и все было в порядке. Но минимизатор решил объединить одинаковые по содержимому стили и получилось что <strong>body *{}</strong> вызываеться после вызова <strong>blockquote{}</strong>, тем самым перекрывая его часть стилей. Я просто передвинул блок с <strong>body *{}</strong> выше <strong>blockquote{}</strong> и все заработало нормально :)</p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2008/css-code-beautifier/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Прикрутил к теме Gravatar&#039;ки</title>
		<link>http://adw0rd.ru/2008/prikrutil-k-teme-gravatarki/</link>
		<comments>http://adw0rd.ru/2008/prikrutil-k-teme-gravatarki/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 15:43:14 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Wordpress и плагины]]></category>
		<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://uniwebs.ru/?p=192</guid>
		<description><![CDATA[Gravatar&#160;&#8212; это сокращение от &#171;Globally Recognized Avatar&#187;, то есть аватар, который можно использовать практически где угодно. Gravatar привязан к конкретному адресу e-mail, который является в свою очередь его идентификатором. Как это работает? Вы оставляете комментарий, и блог, основываясь на вашем адресе e-mail, обращаеться к сервису Gravatar и показывает ваше изображение, если вы конечно зарегистрированны на [...]]]></description>
			<content:encoded><![CDATA[<p><noindex><a rel="nofollow" href="http://en.gravatar.com/" ><img class="alignright" src="http://adw0rd.ru/wp-content/uploads/2008/11/gravatar.png" alt="" width="80" height="80" /></a></noindex></p>
<p><noindex><a rel="nofollow" href="http://www.reaclub.ru/red.php?ext=http%3A%2F%2Fgravatar.com%2F"  target="_blank">Gravatar</a></noindex>&nbsp;&mdash; это сокращение от &laquo;Globally Recognized Avatar&raquo;, то есть аватар, который можно использовать практически где угодно. Gravatar привязан к конкретному адресу e-mail, который является в свою очередь его идентификатором.</p>
<p><strong>Как это работает? </strong>Вы оставляете комментарий, и блог, основываясь на вашем адресе e-mail, обращаеться к сервису Gravatar и показывает ваше изображение, если вы конечно <noindex><a rel="nofollow" href="http://en.gravatar.com/site/signup" >зарегистрированны</a></noindex> на данном сервисе.</p>
<p>Прикрутил я Gravatar по туториалу <noindex><a rel="nofollow" href="http://codex.wordpress.org/Using_Gravatars" >Using Gravatars</a></noindex>, размещенном на страницах кодекса WordPress.</p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2008/prikrutil-k-teme-gravatarki/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Сделал новый сервис browsInfo!</title>
		<link>http://adw0rd.ru/2008/service-browsinfo/</link>
		<comments>http://adw0rd.ru/2008/service-browsinfo/#comments</comments>
		<pubDate>Sun, 07 Sep 2008 21:36:23 +0000</pubDate>
		<dc:creator>adw0rd</dc:creator>
				<category><![CDATA[Интернет сервисы]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Релизы]]></category>
		<category><![CDATA[Сервисы]]></category>

		<guid isPermaLink="false">http://uniwebs.ru/?p=143</guid>
		<description><![CDATA[Сервис browsInfo выводит информации о вашем броузере используя PHP класс BrowsCap (аналог PHP функции get_browser) и выводит следующую информацию: Заголовок HTTP_USER_AGENT Версию броузера Платформу Поддерживаются ли фреймы Поддерживаются ли таблицы Поддерживаются ли cookie Поддерживаются ли Java аплеты Поддерживается ли Javascript Поддерживается ли CSS Версия CSS Поддерживается ли VBScript Разрешены ли фоновые звуки Поддерживается ли ActiveX [...]]]></description>
			<content:encoded><![CDATA[<p>Сервис <a href="http://tools.adw0rd.ru/browsinfo/" title="browsInfo - информация о броузере" >browsInfo</a> выводит информации о вашем броузере используя PHP класс <noindex><a rel="nofollow" href="http://code.google.com/p/phpbrowscap/" >BrowsCap</a></noindex> (аналог PHP функции  <noindex><a rel="nofollow" href="http://php.net/get_browser" rel="nofollow" >get_browser</a></noindex>) и выводит следующую информацию:</p>
<ul>
<li>Заголовок HTTP_USER_AGENT</li>
<li>Версию броузера</li>
<li>Платформу</li>
<li>Поддерживаются ли фреймы</li>
<li>Поддерживаются ли таблицы</li>
<li>Поддерживаются ли cookie</li>
<li>Поддерживаются ли Java аплеты</li>
<li>Поддерживается ли Javascript</li>
<li>Поддерживается ли CSS</li>
<li>Версия CSS</li>
<li>Поддерживается ли VBScript</li>
<li>Разрешены ли фоновые звуки</li>
<li>Поддерживается ли ActiveX</li>
</ul>
<p>Как и все сервисы этот я сделал для себя. Во время рутины иногда требуется проверить заголовки браузера... Но если кому надо, то милости прошу, пользуйтесь.</p>
]]></content:encoded>
			<wfw:commentRss>http://adw0rd.ru/2008/service-browsinfo/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>
