<?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>Slaver&#039;s Blog &#187; Программирование</title>
	<atom:link href="http://slaver.info/category/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://slaver.info</link>
	<description>Не блогосфера™</description>
	<lastBuildDate>Mon, 21 Nov 2011 08:23:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Радости и проблемы PHP 5.3</title>
		<link>http://slaver.info/programming/php/php-5-3.html</link>
		<comments>http://slaver.info/programming/php/php-5-3.html#comments</comments>
		<pubDate>Tue, 07 Sep 2010 13:26:32 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[AJAX]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=316</guid>
		<description><![CDATA[PHP 5.3 радует всеми своими последними изменениями. Правда, руки ещё не дошли до всяких замыканий и нэймспэйсов. Зато внушительный прирост производительности уже успел оценить. Вот только ветка 5.3 пока сырая и необходимо обновляться при всех новых апдейтах. Вот, например, сегодня часа три промучался с решением проблемы, при которой во время ajax-запроса сервер не хочет отдавать значение [...]]]></description>
			<content:encoded><![CDATA[<p><strong>PHP 5.3</strong> радует всеми своими последними изменениями. Правда, руки ещё не дошли до всяких замыканий и нэймспэйсов. Зато внушительный прирост производительности уже успел оценить. Вот только ветка 5.3 пока сырая и необходимо обновляться при всех новых апдейтах.</p>
<p>Вот, например, сегодня часа три промучался с решением проблемы, при которой во время <strong>ajax-запроса</strong> сервер не хочет отдавать значение <code>$_SERVER['HTTP_X_REQUESTED_WITH']</code>. При чём это было абсолютно рандомно, только для некоторых запросов, и никакие попытки дебага не помогали. Я, конечно, допускаю возможность того, что я сам где-то ошибся, но обновление с <strong>5.3.2</strong> до <strong>5.3.3</strong> сразу же решило проблему&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/php/php-5-3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Модуль авторизация через ВКонтакте для Kohana</title>
		<link>http://slaver.info/programming/php/vk_auth.html</link>
		<comments>http://slaver.info/programming/php/vk_auth.html#comments</comments>
		<pubDate>Mon, 17 May 2010 08:14:26 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[вконтакте]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=311</guid>
		<description><![CDATA[После открытия API ВКонтакте сразу появилось несколько статей по созданию быстрой авторизации на своём сайте пользователей vk.com, в т.ч. и на PHP. Решил заняться написанием модуля авторизации для Kohana. Документация по API очень хилая, пришлось изучать js-скрипты durov.at и переносить некоторый функционал на PHP (отправка POST-запроса с получением полной информации о пользователе, вместо ajax-овой реализации [...]]]></description>
			<content:encoded><![CDATA[<p>После открытия API ВКонтакте сразу появилось несколько статей по созданию <strong>быстрой авторизации на своём сайте пользователей vk.com</strong>, в т.ч. и на <a href="http://habrahabr.ru/blogs/php/92518/">PHP</a>. Решил заняться написанием модуля авторизации для <a href="http://kohanaframework.org/"><strong>Kohana</strong></a>.</p>
<p><a href="http://vkontakte.ru/page2369497">Документация по API</a> очень хилая, пришлось изучать js-скрипты durov.at и переносить некоторый функционал на PHP (отправка POST-запроса с получением полной информации о пользователе, вместо ajax-овой реализации на <a href="http://durov.at">durov.at</a>). Самым сложным местом оказалось генерирование уникальной подписи запроса (как они объясняют, &#8220;подпись запроса по стандартной схеме&#8221;), т.к. этот процесс нормально не описан.</p>
<p><strong>Модуль Vk</strong> умеет логиниться и получать информацию о пользователе и, соответственно, разлогиниваться. Информация хранится в cookie и в сессии. При желании, можно складывать всё в БД, запрашивать дополнительную информацию о пользователе и т.д..</p>
<p>Подробное описание на <a href="http://github.com/Slaver/vk"><strong>странице модуля</strong></a> в github. Не забываем <a href="http://vkontakte.ru/apps.php?act=add">создать</a> свое приложение ВКонтакте для тестирования и записать полученные API ID, ключ приложения и защищенный ключ в <code>config/vk.php</code>, а также создать файл <code>xd_receiver.htm</code> по примеру в описании.</p>
<p><a class="archive" href="http://github.com/Slaver/vk/zipball/master">Скачать модуль авторизация через ВКонтакте для Kohana на PHP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/php/vk_auth.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Drochilli</title>
		<link>http://slaver.info/programming/wordpress-programming/drochilli.html</link>
		<comments>http://slaver.info/programming/wordpress-programming/drochilli.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 10:59:15 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[дизайн]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=307</guid>
		<description><![CDATA[Сделали простенькую и стильную фришную тему для WordPress — Drochilli. Поддерживает виджеты, древовидные комментарии, прикреплённые посты и все стандартные требования для WP-тем. Кроме того изменяет под себя стили плагина WP-PageNavi. Качайте :)]]></description>
			<content:encoded><![CDATA[<p>Сделали простенькую и стильную фришную <strong>тему для WordPress</strong> — <a href="http://wordpress.org/extend/themes/drochilli"><strong>Drochilli</strong></a>. Поддерживает виджеты, древовидные комментарии, прикреплённые посты и все стандартные требования для WP-тем. Кроме того изменяет под себя стили плагина WP-PageNavi. Качайте :)</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/wordpress-programming/drochilli.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Коллекция php-скриптов</title>
		<link>http://slaver.info/programming/php/php-scripts-collection.html</link>
		<comments>http://slaver.info/programming/php/php-scripts-collection.html#comments</comments>
		<pubDate>Thu, 08 Jan 2009 11:56:39 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=268</guid>
		<description><![CDATA[Сегодня до двух ночи сортировал свою коллекцию никому ненужных скриптов. Есть у меня хобби — скачивать всякие php-скрипты, чтобы подтырить идей-посмеяться над индусами-позавидовать умениям (нужное подчеркнуть). Так вот насобиралась огромная куча этого хлама (особенно много с phpclasses) и я сортировал его по функционалу. В итоге получилось 30 папок (ajax, db, http, mail и др.) на [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня до двух ночи сортировал свою коллекцию <em>никому ненужных скриптов</em>. Есть у меня хобби — скачивать всякие <strong>php-скрипты</strong>, чтобы подтырить идей-посмеяться над индусами-позавидовать умениям (<em>нужное подчеркнуть</em>). Так вот насобиралась огромная куча этого хлама (особенно много с <a href="http://www.phpclasses.org/">phpclasses</a>) и я сортировал его по функционалу. В итоге получилось 30 папок (ajax, db, http, mail и др.) на 120 метров (правда, более 80 метров занимают фреймворки всякие… <em>толстый Zend такой толстый</em>).</p>
<p>А вот на домашнем локальном компе есть ещё большая сборка скриптов, которые я качал, когда ещё только начинал изучать php. Помню тогда были популярны всякие каталоги, типа <a href="http://www.woweb.ru/load/">woweb.ru</a>, где можно было откопать отобранный шлак. До сих пор сохранились раритеты, писанные ещё на php3… Хотя среди них есть те, на которых я учился — надо будет написать пост про это :)</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/php/php-scripts-collection.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Отключение ревизий (post revisions) в WordPress</title>
		<link>http://slaver.info/programming/wordpress-programming/wordpress-disable-revisions.html</link>
		<comments>http://slaver.info/programming/wordpress-programming/wordpress-disable-revisions.html#comments</comments>
		<pubDate>Sun, 07 Dec 2008 18:20:31 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[плагины]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=256</guid>
		<description><![CDATA[Не так давно в WordPress появилась функция сохранения всех версий постов с возможностью сравнения изменений и отката версий — ревизии — почти как в WikiPedia. Функция, безусловно, хорошая, но её реализация мне не нравится. А именно: запись всех ревизий в таблицу wp_posts вместе с основным контентом. В итоге таблица постов раздувается в 2-5 раз, что [...]]]></description>
			<content:encoded><![CDATA[<p>Не так давно в <strong>WordPress</strong> появилась функция <strong>сохранения всех версий постов</strong> с возможностью сравнения изменений и отката версий — <strong>ревизии</strong> — почти как в WikiPedia. Функция, безусловно, хорошая, но её реализация мне не нравится. А именно: запись всех ревизий в таблицу <code>wp_posts</code> вместе с основным контентом. В итоге таблица постов раздувается в 2-5 раз, что крайне негативно сказывается на работе системы. Ну зачем-зачем!? Ревизии нужны только в административном режиме — почему бы не сделать отдельную таблицу для этого?</p>
<p>И вообще, они имеют смысл лишь тогда, когда несколько человек управляют сайтом. Но нет даже стандартной возможности отключить запись ревизий. Приходится вносить изменения в файлы системы и удалять вручную ненужные записи в БД:</p>
<div class="code"><code>DELETE `a`, `b`, `c`<br />FROM `wp_posts` `a`<br />LEFT JOIN `wp_term_relationships` `b` ON (`a`.`ID` = `b`.`object_id`)<br />LEFT JOIN `wp_postmeta` `c` ON (`a`.`ID` = `c`.`post_id`)<br />WHERE `a`.`post_type` = &quot;revision&quot;;</code></div>
<p>Сегодня на <a href="http://ultra-music.com/">Ultra-Music</a> удалил таким образом 660 записей — представляете!</p>
<p>Короче, решено было написать <strong>плагин</strong>, который при активации <strong>почистит таблицы</strong>, удалив (внимание!) все записи ревизий, и <strong>отключит возможность записи новых ревизий</strong>. Итак, вуаля, первый плагин, который я запостил на wordpress.org — <a href="http://wordpress.org/extend/plugins/disable-revisions/"><strong>Disable Revisions</strong></a>.</p>
<p>Если бы я выложил все плагины, которые писал, было б уже порядком двух десятков :)</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/wordpress-programming/wordpress-disable-revisions.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Фильтрация данных в PHP</title>
		<link>http://slaver.info/programming/php/filtracija-dannykh-v-php.html</link>
		<comments>http://slaver.info/programming/php/filtracija-dannykh-v-php.html#comments</comments>
		<pubDate>Sat, 17 May 2008 11:00:00 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[безопасность]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=113</guid>
		<description><![CDATA[Решил повозиться с php-шными функциями фильтрации данных, которые появились только с версии 5.2.0. Мои впечатления все время двигаются по кривой от &#171;ого и уау&#187; до &#171;ыыы мдзя&#187;. Все-таки разработчики пишут язык не для людей. Или я просто не этот самый людь? Может кто-нибудь мне обяснит, какой filter или может быть flag необходимо поставить для поля, [...]]]></description>
			<content:encoded><![CDATA[<p>Решил повозиться с <strong>php</strong>-шными <a href="http://ru2.php.net/manual/ru/ref.filter.php"><strong>функциями фильтрации данных</strong></a>, которые появились только с версии 5.2.0. Мои впечатления все время двигаются по кривой от &laquo;ого и уау&raquo; до &laquo;ыыы мдзя&raquo;. Все-таки разработчики пишут язык не для людей. Или я просто <em>не</em> этот самый <em>людь?</em> Может кто-нибудь мне обяснит, какой <strong>filter</strong> или может быть <strong>flag</strong> необходимо поставить для поля, чтобы использовать <a href="http://ru2.php.net/manual/ru/function.filter-input-array.php"><strong>filter_input_array</strong></a> для проверки <em>заполнено ли поле вообще</em>. Это не предусмотрено? Но тогда получается, что толку от этих фильтров мало&hellip; Или уже поздно и я много выпил?</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/php/filtracija-dannykh-v-php.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Рабочее…</title>
		<link>http://slaver.info/programming/raboczee.html</link>
		<comments>http://slaver.info/programming/raboczee.html#comments</comments>
		<pubDate>Thu, 15 May 2008 08:30:00 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[музыка]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=112</guid>
		<description><![CDATA[Let me see your scriptDown to the source&#8230; &#169; Оригинальный текст by Martin L. Gore.&#160;Depeche Mode &#171;Stripped&#187;]]></description>
			<content:encoded><![CDATA[<p><em>Let me see your script<br />Down to the source&hellip;</em></p>
<p>&copy; <a href="http://depeche-mode.ru/index.php?chapter=lyrics&amp;topic=songs&amp;page=stripped">Оригинальный текст</a> by Martin L. Gore.&nbsp;Depeche Mode <strong>&laquo;<a href="http://www.last.fm/music/Depeche+Mode/_/Stripped">Stripped</a>&raquo;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/raboczee.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Список стран</title>
		<link>http://slaver.info/programming/list-of-countries.html</link>
		<comments>http://slaver.info/programming/list-of-countries.html#comments</comments>
		<pubDate>Wed, 19 Mar 2008 11:00:00 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[скачать]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=99</guid>
		<description><![CDATA[Вчера нарисовалась необходимость сделать для одной формочки выпадающий список стран. Ну, кажется, проще ничего не бывает. Да вот только нормального готового массива с данными я достать не смог. Везде неполные списки. А мне ж еще нужны были названия стран как по-русски, так и по-английски. В итоге, немного повозился и сделал свою табличку, где, кроме названий [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера нарисовалась необходимость сделать для одной формочки <strong>выпадающий список стран</strong>. Ну, кажется, проще ничего не бывает. Да вот только нормального готового массива с данными я достать не смог. Везде неполные списки. А мне ж еще нужны были <strong>названия стран</strong> как по-русски, так и по-английски.</p>
<p>В итоге, немного повозился и сделал свою табличку, где, кроме названий на двух языках, есть <strong>обозначения доменов</strong> и статус этих стран &mdash; целиком независимые или государства с другим статусом. Итого &mdash; <a href="http://ru.wikipedia.org/wiki/Алфавитный_список_стран_и_территорий">253 штуки</a>. Короче, если надо &mdash; пользуйтесь (<strong>MySQL</strong>), найдете ошибки &mdash; сообщайте.</p>
<p><a href="http://slaver.info/files/countries.sql.gz" class="archive">Скачать файл countries.sql.gz</a> (5,93 Kb)</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/list-of-countries.html/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Обработка ЧПУ не через .htaccess</title>
		<link>http://slaver.info/programming/php/ufu-htaccess.html</link>
		<comments>http://slaver.info/programming/php/ufu-htaccess.html#comments</comments>
		<pubDate>Sun, 18 Feb 2007 11:30:00 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=44</guid>
		<description><![CDATA[Сидел вчера весь день дома, т.к. простудился. Сидел и работал над маленькими проектиками. И вдруг решил написать класс для ЧПУ, который бы мог заменить несколько строчек в .htaccess, где можно было лишь оставить одно правило RewriteRule . /index.php [L]. Конечно, полностью универсального варианта для любых ссылок не придумаешь, но для моего вариант вполне подходит. class [...]]]></description>
			<content:encoded><![CDATA[<p>Сидел вчера весь день дома, т.к. простудился. Сидел и работал над маленькими проектиками. И вдруг решил написать класс для <strong>ЧПУ</strong>, который бы мог заменить несколько строчек в <strong>.htaccess</strong>, где можно было лишь оставить одно правило <code>RewriteRule . /index.php [L]</code>. Конечно, полностью универсального варианта для любых ссылок не придумаешь, но для моего вариант вполне подходит.</p>
<pre>class _getLinks {
	function _parser(){
		$furl = parse_url($_SERVER[’REQUEST_URI’]);
		$url = explode(’/’, $furl[’path’]);
		$url = array_filter($url, "strlen");
		$url = array_filter($url, "urlencode");
		$url = array_reverse($url);
		return $url;
	}

	function _getCategory() {
		$res = $this-&gt;_parser();
		return $res[1];
	}

	function _getTitle() {
		$var = $this-&gt;_parser();
		$res = preg_split("/[.\\s]/",$var[0]);
		return $res[0];
	}
}</pre>
<p>Можно использовать ссылки вида: <code>http://server.com/category/subcategory/title.html</code> и получать, соответственно, url категории и url новости, которые уже можно прогонять по базе…</p>
<p><strong>P.S.</strong> Подумал немного… Абсолютно бесполезная и ненужная фигня получилася :(</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/php/ufu-htaccess.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Френд-лента для блога</title>
		<link>http://slaver.info/programming/scripts/blogs-friends.html</link>
		<comments>http://slaver.info/programming/scripts/blogs-friends.html#comments</comments>
		<pubDate>Fri, 10 Nov 2006 09:20:00 +0000</pubDate>
		<dc:creator>Slaver</dc:creator>
				<category><![CDATA[Скрипты]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[блоги]]></category>
		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://slaver.info/?p=9</guid>
		<description><![CDATA[Собственный блог &#8212; вещь удобная, все под рукой: и картинки, и тэги, и комментарии. Но не хватает френд-ленты. Конечно, абсолютное большинство пользуется либо онлайн-читалками RSS, либо программами, которые собирают и обрабатывают каналы на машине пользователя. Но вот мне читать блоги все-таки удобнее &#171;у себя&#187; на сайте. Ленты новостей я собираю через встроенную в Opera читалку, [...]]]></description>
			<content:encoded><![CDATA[<p>Собственный блог &mdash; вещь удобная, все под рукой: и картинки, и тэги, и комментарии. Но не хватает френд-ленты. Конечно, абсолютное большинство пользуется либо онлайн-читалками <strong>RSS</strong>, либо программами, которые собирают и обрабатывают каналы на машине пользователя. Но вот мне читать блоги все-таки удобнее &laquo;у себя&raquo; на сайте. Ленты новостей я собираю через встроенную в <strong>Opera</strong> читалку, <del>а за блогами теперь слежу на сайте</del>.</p>
<p>Решение задачи довольно простое. На серевере устанавливается RSS-граббер и оболочка для вывода лент из базы данных. Чтобы не писать все с нуля, я воспользовался скриптом <a href="http://feedonfeeds.com/"><strong>FeedOnFeeds</strong></a>, обновил <a href="http://magpierss.sourceforge.net/"><strong>MagpieRSS</strong></a> до последней версии и принялся за исправление недостаков FeedOnFeeds. В итоге прикрутил <a href="http://ru.wikipedia.org/wiki/AJAX"><strong>AJAX</strong></a>, чтобы быстро помечать прочитанными сообщения, добавил возможность ведения списка избранного, прикрутил иконки для лент, изменил много кода (в том числе, добавил авторизацию) и т.д. Теперь читать блоги также просто, как и френд-ленту в <a href="http://slaver-be.livejournal.com"><strong>ЖЖ</strong></a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://slaver.info/programming/scripts/blogs-friends.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

