<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Bashtannik&#039;s Blog</title>
	<atom:link href="http://bashtannik.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bashtannik.wordpress.com</link>
	<description>Искусство создания компьютерных программ</description>
	<lastBuildDate>Thu, 26 Jan 2012 21:22:17 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='bashtannik.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Bashtannik&#039;s Blog</title>
		<link>http://bashtannik.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://bashtannik.wordpress.com/osd.xml" title="Bashtannik&#039;s Blog" />
	<atom:link rel='hub' href='http://bashtannik.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ModX Revolution</title>
		<link>http://bashtannik.wordpress.com/2010/09/12/modx-revolution/</link>
		<comments>http://bashtannik.wordpress.com/2010/09/12/modx-revolution/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 16:25:53 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/2010/09/12/modx-revolution/</guid>
		<description><![CDATA[С выходом ModX Revolution 2.0 все мои предыдущие претензии снимаются. Она охуенна с программерской точки зрения. Все мои уважаемые комментаторы из старых постов могут спать спокойно. Макаки соснули хуйцов. Жизнь наладилась.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=176&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>С выходом ModX Revolution 2.0 все мои предыдущие претензии снимаются. Она охуенна с программерской точки зрения. Все мои уважаемые комментаторы из старых постов могут спать спокойно. Макаки соснули хуйцов. Жизнь наладилась.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/176/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/176/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/176/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=176&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/09/12/modx-revolution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Netbeans</title>
		<link>http://bashtannik.wordpress.com/2010/04/14/netbeans/</link>
		<comments>http://bashtannik.wordpress.com/2010/04/14/netbeans/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 13:49:52 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=172</guid>
		<description><![CDATA[Сегодня я отказался от использования Eclipse в пользу NetBeans для разработки веб-приложений на PHP/JavaScript. Eclipse жутко заебал со своими глюками и багами. Устанавливайте NetBeans PHP и будьте счастливы.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=172&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Сегодня я отказался от использования Eclipse в пользу NetBeans для разработки веб-приложений на PHP/JavaScript. Eclipse жутко заебал со своими глюками и багами. Устанавливайте NetBeans PHP и будьте счастливы.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/172/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/172/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/172/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=172&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/04/14/netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>jQuery.noop()</title>
		<link>http://bashtannik.wordpress.com/2010/04/13/jquery-noop/</link>
		<comments>http://bashtannik.wordpress.com/2010/04/13/jquery-noop/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 08:45:32 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=170</guid>
		<description><![CDATA[Меня часто спрашивают для чего нужна эта пустая функция, которая не делает ничего. Noop() — это функция-заглушка. Представим себе некий объект, который в процессе его использования может инициировать какие-либо события. Скажем, это код, который мы получаем с другого сайта. Он строит красивую кнопку на нашей странице. Но вот беда — нам совершенно не нужно знать, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=170&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Меня часто спрашивают для чего нужна эта пустая функция, которая не делает ничего. Noop() — это функция-заглушка. Представим себе некий объект, который в процессе его использования может инициировать какие-либо события. Скажем, это код, который мы получаем с другого сайта. Он строит красивую кнопку на нашей странице. Но вот беда — нам совершенно не нужно знать, когда произойдет событие onclick. А сторонний код написан таким образом, что мы обязаны указать обработчик события, иначе ошибка.</p>
<p>Вот тут нам на помощь и приходит noop(). Вызывая инициализацию объекта, в параметре, передающем функцию обратного вызова, мы указываем jQuery.noop(). Условия выполнены, а действие не обрабатывается. И все довольны.</p>
<br /> Tagged: <a href='http://bashtannik.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://bashtannik.wordpress.com/tag/jquery/'>jQuery</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=170&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/04/13/jquery-noop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Кросс-доменный запрос с помощью Ajax и jQuery</title>
		<link>http://bashtannik.wordpress.com/2010/03/11/jquery-ajax-crossdomain/</link>
		<comments>http://bashtannik.wordpress.com/2010/03/11/jquery-ajax-crossdomain/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:53:42 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=157</guid>
		<description><![CDATA[Кросс-доменные запросы — головная боль разработчика. Производители браузеров сделали всё возможное, чтобы программисты выносили свой мозг. В jQuery есть набор функций для работы с AJAX, которые превосходно работают в контексте одного домена. Однако, как только дело касается межсайтового взаимодействия мы сталкиваемся с целой кучей подводной камней. В интернете можно найти много способов решения этой проблемы, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=157&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Кросс-доменные запросы — головная боль разработчика. Производители браузеров сделали всё возможное, чтобы программисты выносили свой мозг. В jQuery есть набор функций для работы с AJAX, которые превосходно работают в контексте одного домена. Однако, как только дело касается межсайтового взаимодействия мы сталкиваемся с целой кучей подводной камней.</p>
<p>В интернете можно найти много способов решения этой проблемы, я же для себя выбрал путь на основе JSON и объясню почему.</p>
<ol>
<li>JSON — сериализированные данные, которые удобно читаются человеком.</li>
<li>JSON данные легко преобразуются в объекты.</li>
<li>Данные легко преобразуются в текст JSON.</li>
<li>jQuery прекрасно работает с JSON и AJAX</li>
<li>На основе JSON наиболее просто организовать API.</li>
<li>JSON расходует гораздо меньше трафика, чем, к примеру XML.</li>
</ol>
<p>Этих шести пунктов мне оказалось более чем достаточно. Однако, я так и не смог найти нормального объяснения как должен работать кросс-доменная технология и JSON, и обратился на <a href="http://stackoverflow.com/questions/2396943/jquery-json-and-apache-problem">stackoverflow</a>.</p>
<p>Для того, чтобы передать данные с одного сервера на другой используется технология <a href="http://ru.wikipedia.org/wiki/JSON#JSONP">JSONP</a>. Фактически это JSON с функцией обратной связи. Скрипт, формирующий JSON данные на стороне сервера, должен представить их в виде вызова функции. К примеру, представление данных</p>
<pre>{"foo" : "bar"}</pre>
<p>будет выглядеть таким образом:</p>
<pre>callback({"foo" : "bar"});</pre>
<p>где callback — имя функции, вызываемой в JavaScript на стороне клиента. В случае с jQuery имя этой функции автоматически добавляется в конец строки URL. Фактически при выполнении</p>
<pre>$.getJSON("example.php");</pre>
<p>URL приобретет вид example.php?=_random_name, где random_name — это функция, в аргумент которой должен быть передан JSON. Таким образом, корректно будет запрашивать скрипт, передавая ему имя этой функции в параметре.</p>
<pre>$.getJSON("example.php?callback_name=?");</pre>
<p>PHP должен добавить имя этой функции и в нее встроить данные.</p>
<pre>&lt;?php
$data=array("1","2");
$callback=$_REQUEST['callback_name'];
print("$callback(".json_encode($data)+");");
?&gt;</pre>
<p>Только таким образом удается передать данные кросс-доменно. На основе JSON/JSONP построены API различных онлайн-сервисов, например Flickr или Yahoo Finance. Впрочем, стоит отметить, что отправить запрос POST таким образом не удастся, для полноценного POST придуман другой метод.</p>
<br /> Tagged: <a href='http://bashtannik.wordpress.com/tag/ajax/'>Ajax</a>, <a href='http://bashtannik.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://bashtannik.wordpress.com/tag/jquery/'>jQuery</a>, <a href='http://bashtannik.wordpress.com/tag/json/'>JSON</a>, <a href='http://bashtannik.wordpress.com/tag/jsonp/'>JSONP</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/157/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/157/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/157/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=157&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/03/11/jquery-ajax-crossdomain/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Настройка Dklab Realplexor для работы на Localhost.</title>
		<link>http://bashtannik.wordpress.com/2010/02/10/realplexor-setup-localhost/</link>
		<comments>http://bashtannik.wordpress.com/2010/02/10/realplexor-setup-localhost/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:12:12 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Comet]]></category>
		<category><![CDATA[Разработка]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=146</guid>
		<description><![CDATA[Realplexor — это так называемый Comet сервер, позволяющий конструировать асинхронные веб приложения. Принцип действия прост: вместо того, чтобы закрывать HTTP-соединение между клиентом и сервером, программный комплекс старается поддерживать его как можно дольше. Это позволяет построить приложение, осуществляющее двусторонний обмен данными и задействовать модель программирования на основе событий. Фактически, вместо постоянного опроса клиента сервером в ожидании [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=146&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://dklab.ru/lib/dklab_realplexor/">Realplexor</a> — это так называемый Comet сервер, позволяющий конструировать асинхронные веб приложения. Принцип действия прост: вместо того, чтобы закрывать HTTP-соединение между клиентом и сервером, программный комплекс старается поддерживать его как можно дольше. Это позволяет построить приложение, осуществляющее двусторонний обмен данными и задействовать модель программирования на основе событий. Фактически, вместо постоянного опроса клиента сервером в ожидании смены состояния, влекущего событие, здесь событие определено изначально и инициации сервером.</p>
<p>Как и где применять Реалплексор сложно сказать, на его основе можно построить все что угодно, требующее мгновенного обмена данными. В интернете существует несколько аналогичных проектов (напр. APE), однако они сложны и требуют больших временных затрат. Плюс ко всему, идеологически верно поддерживать наших разработчиков.</p>
<p>На сайте производителя есть информация по базовой настройке сервера, я же расскажу как настроить сервер разработчика (development server) на базе ОС Ubuntu 9.10.</p>
<h2>Идеология и безопасность.</h2>
<p>Фактически Реалплексор это веб сервер, написанный на perl (к сожалению для меня). Он работает параллельно с Apache, ожидая соединения на свой порт, которые никогда (исключений и других правил не касаемся) не закроются. Apache работает над формированием содержимого вашего сайта, по умолчанию слушая порт 80 для входящих соединений.</p>
<p>Вместе с Реалплексором в комплекте идет набор API для PHP и JavaScript. PHP API мы будем использовать на стороне сервера для манипуляций с данными, а JavaScript API позволяет создать на стороне клиента соединение с сервером и берет на себя обязанности по поддержанию оного.</p>
<p>Логично было бы подключаться к Реалплексору просто используя его порт, например так: http://localhost:8088. Однако, производители браузеров подготовили кучу подводных камней и мы сразу же наткнемся на один из них: http://localhost:80 и http://localhost:8088 находятся в разных контекстах безопасности и соединение не пройдет. Это одна из самых известных проблем в AJAX технологии на основе XMLHttpRequest.</p>
<p>К примеру, Firefox порадует нас ошибкой в консоли:</p>
<pre>Ошибка: uncaught exception: Due to the standard XMLHttpRequest security policy,
hostname in URL passed toDklab_Realplexor (localhost:8088) must be equals to the
current host (localhost.com) or be its direct sub-domain.</pre>
<h2>Решение проблемы.</h2>
<p>На помощь нам придет чудо-сервер <a href="http://sysoev.ru/nginx/">nginx</a>. Рассказ о достоинствах этого сервера — тема для отдельного поста. Нам же, nginx позволит обойти проблему нарушения правил безопасности. Дело в том, что браузер противится соединению по другому порту, однако совершенно не против соединения с поддоменом. Таким образом нам необходимо передать nginx управление соединением и разрулить эту ситуацию.</p>
<p style="padding-left:30px;"><em>Стоит отметить, что эту проблему можно решить и с помощью DNS, однако поднимать и настраивать DNS сервер на локальном компьютере разработчика, как минимум не рационально. Использование же связки с nginx даст очень много вкусных возможностей в будущем.</em></p>
<p>Необходимо настроить Apache на прослушивание не 80 порта, а 8080, для того чтобы освободить 80 для nginx.</p>
<p>Nginx будет рассматривать входящее подключение и в случае, если оно идет на поддомен, выделенный для сервера (пусть будет chat) он передаст соединение на localhost:8088, т.е. Реалплексеру. Иначе соединение уйдет к Apache на localhost:8080 если nginx не настроен иначе.</p>
<h2>Специфика локалхоста.</h2>
<p>Нельзя забывать, что мы работаем на локалхосте и что для нас хорошо, то <span style="text-decoration:line-through;">немцу смерть</span> на production сервере отвалится. Один из незаметных подводных камней это трактовка поддомена. По правилам HTTP в адресе вида chat.localhost нет поддомена, chat — это домен второго уровня, а не третьего. Поэтому нам необходимо сделать простую вещь: отредактировать файл /etc/hosts следующим образом:</p>
<pre>127.0.0.1 chat.localhost.com
127.0.0.1 localhost.com</pre>
<p>Таким образом выполняется требование системы безопасности по поддоменам выполняется. И мы спокойно работаем с нашим доменом localhost.com.</p>
<p>Настройка nginx, файл /usr/local/nginx/conf/nginx.conf:</p>
<pre>server {
server_name  localhost.com; # Для главного сайта
listen       localhost.com:80; # Запрос, который получет nginx по 80 порту

location / {
proxy_pass http://127.0.0.1:8080; # Передаем обработку Apache
}
}

server {
server_name  chat.localhost.com; # Для поддомена
listen       chat.localhost.com:80; # На таком же порту

location / {
proxy_pass http://127.0.0.1:8088; # Запрос будет обрабатываться Реалплексором
}
}</pre>
<p>Теперь необходимо перезагрузить все программы, участвующие в процессе.</p>
<pre>sudo apache2ctl restart
sudo /usr/local/nginx/sbin/nginx -s reload
sudo service dklab_realplexor reload</pre>
<p>Программный комплекс готов к работе.</p>
<h2>Эпилог.</h2>
<p>Справедливо заметить, что подобный подход может использоваться и на production-серверах. Использование nginx дает огромные перспективы по масштабированию приложения. Расход памяти составляет около 10 МБ на 1000 одновременных подключений для Реалплексора, а при грамотной настройке nginx на раздачу статики, полученный прирост производительности будет вполне ощутим.</p>
<p><a href="http://dklab.ru/lib/dklab_realplexor/#list1">Примеры кода</a> доступны на сайте производителя.</p>
<br /> Tagged: <a href='http://bashtannik.wordpress.com/tag/ajax/'>Ajax</a>, <a href='http://bashtannik.wordpress.com/tag/comet/'>Comet</a>, <a href='http://bashtannik.wordpress.com/tag/%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0/'>Разработка</a>, <a href='http://bashtannik.wordpress.com/tag/javascript/'>JavaScript</a>, <a href='http://bashtannik.wordpress.com/tag/linux/'>Linux</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=146&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/02/10/realplexor-setup-localhost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Восстановление оконного менеджера GNOME</title>
		<link>http://bashtannik.wordpress.com/2010/01/24/gnome-metacity-repair/</link>
		<comments>http://bashtannik.wordpress.com/2010/01/24/gnome-metacity-repair/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 10:00:05 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=137</guid>
		<description><![CDATA[Сегодня я расскажу как восстановить случайно уроненный оконный менеджер Gnome, Metacity. Признаками его болезни может стать например такая ошибка, при нажатии на кнопку сворачивания всех окон: Либо менеджер окон не поддерживает кнопку расчистки рабочего стола, либо менеджер окон не запущен вовсе. Все приложения при этом выглядят без оконной рамки. Вылечить эту проблему  просто: нужно переустановить [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=137&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Сегодня я расскажу как восстановить случайно уроненный оконный менеджер Gnome, Metacity. Признаками его болезни может стать например такая ошибка, при нажатии на кнопку сворачивания всех окон:</p>
<blockquote><p><em>Либо менеджер окон не поддерживает кнопку расчистки рабочего стола, либо менеджер окон не запущен вовсе.</em></p></blockquote>
<p>Все приложения при этом выглядят без оконной рамки. Вылечить эту проблему  просто: нужно переустановить Metacity, стандартный оконный менеджер. Ctrl+Alt+F2 для входа в консоль.</p>
<p><code>sudo apt-get remove metacity<br />
sudo apt-get install metacity<br />
sudo /etc/init.d/gdm restart<br />
</code><br />
После перезагрузки Gnome система примет прежний вид.</p>
<br /> Tagged: Ubuntu <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=137&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/01/24/gnome-metacity-repair/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>ModX-армия. Обратная связь.</title>
		<link>http://bashtannik.wordpress.com/2010/01/22/modx-army-sucks-again/</link>
		<comments>http://bashtannik.wordpress.com/2010/01/22/modx-army-sucks-again/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 18:04:29 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[ModX]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=123</guid>
		<description><![CDATA[http://modxcms.com/forums/index.php/topic,44786.0.html Некто запостил ссылочку на этот уютненький бложек в форум ModX-еров. Естественно, хомяки принялись всячески вербовать автора в свои ряды. Не знаю, рассчитывал ли автор на объективность в этом сообществе. Это ведь всё равно, что прийти к вегетарианцам, CRM-щикам или, например, на встречу работников сетевого маркетинга. Любое противоположное мнение вызывает у них адскую попаболь. Хотелось [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=123&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>http://modxcms.com/forums/index.php/topic,44786.0.html</p>
<p>Некто запостил ссылочку на этот уютненький бложек в форум ModX-еров. Естественно, хомяки принялись всячески вербовать автора в свои ряды. Не знаю, рассчитывал ли автор на объективность в этом сообществе. Это ведь всё равно, что прийти к вегетарианцам, CRM-щикам или, например, на встречу работников сетевого маркетинга. Любое противоположное мнение вызывает у них адскую попаболь.</p>
<p>Хотелось бы прояснить маленькие детали, просто так, для галочки.</p>
<p><span id="more-123"></span></p>
<p>Мне действительно 20, ребята, и я действительно с 14 лет пишу программы. В 14 я продал первую свою разработку на C++. Мой первый язык был С++, а писал я в C++ Builder под Виндоус, сейчас даже смешно вспоминать эту среду, версия 5.0 была у меня первой. Спустя какое-то время я даже получил сертификат разработчика C++ Builder, наивно полагая, что он мне понадобится. Кстати могу дать пруф. Гордиться там особо не чем, сертификат локального масштаба, и я правда даже не знаю где он сейчас, но если кому-то так не верится, то покажу. Года два-три назад от программирования под операционные системы я полностью отошел, переключившись на веб.</p>
<p>Теперь давайте разберем произвольное сообщение. Старых знакомых по холивару трогать не будем, возьмем других.</p>
<blockquote><p><em>Например, очень странно слушать человека (с таким опытом!), который говорит что:<br />
1) в сниппете стоит инклуд и потом нужно искать файл, чтобы поменять код сниппета. Ну не делайте так &#8211; пишите код сниппета просто в окошко и не нужно будет искать никаких файлов.</em></p></blockquote>
<p>Вы не понимаете опять (FUCK! FUCK! FUCK!). Писать код сниппета просто в окошко это феерический идиотизм. Интерпретируемый код должен быть в файле. Всегда. Не в базе данных, не на картинке, не в окошке. <strong>В файле. </strong>Дайте угадаю? Использовать include? Решение проблемы? Да. Дибильное? Бесспорно. Потому что, есть свод правил разработки, в том числе и под ModX. И если архитектура предусматривает хранение кода в БД, то он там должен быть, как бы это глупо не было. А из-за include нарушается это положение. Поэтому когда один программист делает так, другой сделает иначе, то третий просто сойдет с ума пытаясь после них это всё поддерживать. Это один из доводов только против такого способа.</p>
<blockquote><p><em>2) у него проблема вывести тайтл. Разве сложно написать простенький сниппет, который будет выводить все что нужно?</em></p></blockquote>
<p>Я где-то вроде уже писал, что нет проблемы написать. Вначале один простенький сниппет. Потом два, пять, десять, сто простеньких сниппетов. Потом сложненьких сниппетов. Потом средненьких сниппетов. И всё ради рутинных операций, которые при грамотном разделении MVC априори не могут создать необходимости в реализации чего-то дополнительного.</p>
<blockquote><p><em>Есть идеи по созданию идеальной системы &#8211; вперед! Делаем и пользуемся )</em></p></blockquote>
<p>Не нравится как поет Тимати? Вперед! Иди попробуй сам спой как он? Не можешь? Тогда не говори, что Тимати — хуйло! Вы все только и можете, что обсирать Тимати, а ему похуй на вас всех, вы просто сами ничего не можете, и не добились того, чего добился он. Попробуйте спойте лучше, попробуйте быть хотя бы таким как он!!!11</p>
<p>Улавливаете аналогию?</p>
<p>Другой персонаж:</p>
<blockquote><p><em>php я не знал (и не знаю до сих пор)</em></p></blockquote>
<p>Тут я вообще в ступор стал. Ну не знаете, так чего же вы лезете в дискуссию? Я, как мне кажется, со стороны разработчика критику даю, а не со стороны секретарши. Если, вы идиот, и считаете, что</p>
<blockquote><p><em>сообразить проинклудить код шаблона из файла и написать соответствующий код сниппета?</em></p></blockquote>
<p>это адекватное решение задачи, то как же вы можете трезво давать оценку мне и моим доводам?</p>
<p>В общем, привет всем.</p>
<br /> Tagged: ModX <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=123&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/01/22/modx-army-sucks-again/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Установка Nessus</title>
		<link>http://bashtannik.wordpress.com/2010/01/22/nessus-install/</link>
		<comments>http://bashtannik.wordpress.com/2010/01/22/nessus-install/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 16:26:03 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Взлом]]></category>
		<category><![CDATA[Nessus]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=109</guid>
		<description><![CDATA[Nessus — замечательная разработка фирмы &#171;Tenable Network Security&#187;. Это бесплатный для домашнего пользования, кроссплатформенный сетевой сканер уязвимостей. С помощью Nessus можно детектировать множество брешей безопасности в операционной системе и программных продуктах любого компьютера, доступного по сети. Это замечательный сканер используется в различных ситуациях: от благородных намерений системного администратора до злобных целей взломщиков. Поскольку я пользователь [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=109&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nessus — замечательная разработка фирмы &laquo;Tenable Network Security&raquo;. Это бесплатный для домашнего пользования, кроссплатформенный сетевой сканер уязвимостей. С помощью Nessus можно детектировать множество брешей безопасности в операционной системе и программных продуктах любого компьютера, доступного по сети. Это замечательный сканер используется в различных ситуациях: от благородных намерений системного администратора до злобных целей взломщиков.</p>
<p>Поскольку я пользователь домашний, и использую Ubuntu, я расскажу как установить и настроить Nessus под этот дистрибутив. Стоит отметить, что на сайте разработчика доступна <a href="http://www.nessus.org/documentation/nessus_4.2_installation_guide.pdf">инструкция по установке</a>, но она слишком запутана.</p>
<p>Скачайте debian пакет со страницы <a href="http://www.nessus.org/download/">http://www.nessus.org/download/</a>. Разработчик предоставляет очень много сборок для различных операционных систем. На сегодняшний день актуальная версия программы — 4.2.0. Nessus установится в директорию /opt/nessus.</p>
<p>Программа не имеет графического интерфейса в привычном его виде, Nessus управляется через веб-интерфейс. После установки и запуска демона сканера по IP-адресу вашего компьютера станет доступен веб-сервер, который и предоставит графический интерфейс пользователя на основе Flash. К слову, Teneble Network Security предоставляет и другое решение в виде отдельной программы-клиента, но она не так удобна как интерфейс разработанный на Flash. Однако прежде чем получить к нему доступ программу нужно подготовить соответствующим образом.</p>
<p>Первым делом нужно создать учетную запись пользователя Nessus. Делается это с помощью программы</p>
<p><code>/opt/nessus/sbin/nessus-adduser</code></p>
<p>Наш первый пользователь будет обладать всеми правами без ограничений. В последствии, на каждого пользователя можно будет назначить ограничения разного рода. Например, вы сможете ограничить доступ только с определенного адреса для конкретного пользователя. Программа предложит ввести логи и пароль, после чего поинтересуется сделать ли этого пользователя администратором. Отвечайте утвердительно. Затем нужно будет оставить пустой строку ограничивающих правил. На этом процедура создания пользователя завершена.</p>
<p>Следующий этап — регистрация программы. Заполните поля на <a href="http://www.nessus.org/register/">странице регистрации</a> и вам бесплатно вышлют регистрационный код по электронной почте. Запустите программу, подставив ваш код</p>
<p><code> /opt/nessus/bin/nessus-fetch --register XXXX-XXXX-XXXX-XXXX-XXXX</code></p>
<p>Это важный момент. После этого действия Nessus начнет скачивать свои плагины, без которых он бесполезен. Плагин Nessus — это набор правил и программных кодов, которые будут применяться для детектирования той или иной уязвимости. Первый раз придется немного подождать: плагинов великое множество. По завершению этого процесса Nessus становится полностью работоспособным.</p>
<p>Запуск сервера производится командой</p>
<p><code>/etc/init.d/nessusd start</code></p>
<p>Теперь можно открыть браузер и набрать адрес <a href="https://127.0.0.1:8834/">https://127.0.0.1:8834/</a>. Порт 8834 — это порт, по умолчанию используемый сервером. Связь проходит по SSL-защищенному соединению, поэтому принимайте сертификат и в результате увидите приветственное окно Nessus.</p>
<p><img src="http://bashtannik.files.wordpress.com/2010/01/nessus.png?w=450" alt="" /></p>
<p>Nessus готов к работе!</p>
<br /> Tagged: Безопасность, Взлом, Linux, Nessus, Ubuntu <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=109&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/01/22/nessus-install/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>

		<media:content url="http://bashtannik.files.wordpress.com/2010/01/nessus.png?w=450" medium="image" />
	</item>
		<item>
		<title>ModX и CodeIgniter</title>
		<link>http://bashtannik.wordpress.com/2010/01/05/modx-codeigniter/</link>
		<comments>http://bashtannik.wordpress.com/2010/01/05/modx-codeigniter/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 23:04:57 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[ModX]]></category>
		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=93</guid>
		<description><![CDATA[Здравствуйте! Все мы знаем какое говно фреймворк, предоставляемый ModX, а так же нам прекрасно известно какое говно шаблонизатор. Любой программист рано или поздно встретится с необходимостью MVC в своем проекте, для той или иной оптимизации процесса. Лирическое отступление. Рачки и хомячки могут соснуть хуйца, потому как таких среди поклонников ModX over 9000, а вменяемых людей [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=93&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Здравствуйте!</p>
<p>Все мы знаем какое говно фреймворк, предоставляемый ModX, а так же нам прекрасно известно какое говно шаблонизатор. Любой программист рано или поздно встретится с необходимостью MVC в своем проекте, для той или иной оптимизации процесса.</p>
<p style="padding-left:30px;"><span style="color:#333333;"><em>Лирическое отступление. Рачки и хомячки могут соснуть хуйца, потому как таких среди поклонников ModX over 9000, а вменяемых людей гораздо меньше. Почему-то хомячье страшно ведется на травлю и провокацию. Адекватный программист и ModX — очень редко встречающиеся вещи. Я таких людей знаю не больше 8-10.<br />
</em></span></p>
<p><span style="color:#333333;"><span style="color:#000000;">Сегодня я расскажу как использовать возможности замечательного фреймворка CodeIgniter совместно с CMS ModX. Условно мы передадим ModX всю «статику»: страницы, заполняемые клиентом или контент-менеджером, а CodeIgniter оставим все динамическое содержимое и логику.<br />
</span></span></p>
<p style="text-align:left;"><span style="color:#333333;"><span style="color:#000000;">Для начала нужно <a href="http://codeigniter.com/downloads/">скачать и установить CodeIgniter</a>. Для того, чтобы привести адреса страниц в нормальный вид (ЧПУ) мы задействуем mod_rewrite, в файл .htaccess нужно добавить вот этот текст:</span></span></p>
<p><code style="text-align:left;">&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine On<br />
RewriteBase /<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
RewriteRule ^(.*)$ index.php/$1 [L]<br />
&lt;/IfModule&gt;</code></p>
<p>Такая конфигурация позволит нам избавиться от некрасивых адресов и передать управление всеми страницами фреймворку CodeIgniter. Помимо этого необходимо также <a href="http://www.codeigniter.org.ru/content/ubrat-indexphp-url">настроить CodeIgniter</a> для корректной работы с mod_rewrite, сделав кое-какие изменения в конфигурационном файле. После всех настроек, убедившись в работоспособности CodeIgniter можно устанавливать ModX. Как это делается я пропускаю намеренно, в интернете полно руководств пропагандирующих установку этой CMS, поэтому я не стал вступать в ряды агитаторов. Будьте внимательны, ModX претендует на файл index.php. Переименуйте после копирования всех файлов, index.php в index.md.php.</p>
<p>Для чего это делается. При запросе без дополнительных параметров (example.com) будет вызван скрипт index.php который запускает CodeIgniter. Фреймворк обработает запрос и запустит контроллер, который указан таковым по умолчанию. В случае же запроса с параметром, например example.com/some/test/here также будет предпринята попытка запуска контроллера. Фактически мы передали приоритет обработки запросов фреймворку. Если фреймворк не обнаружит соответствующего контроллера по умолчанию CodeIgniter вызовет ошибку 404. Нам же необходимо, чтобы фреймворк передал запрос CMS, которая будет отвечать на все остальные запросы. Самым легким путем был бы простой redirect на index.php?q=query, однако это лишит систему дружественных путей в адресе и не очень-то обрадует поисковики (сеошники разорвут). Поэтому мы пойдем другим путем и напишем обработчик ошибок для CodeIgniter. Делается это расширением класса CI_Exceptions.</p>
<p>Создайте в папке system/application/libraries файл MY_Exceptions.php (префикс MY_ задается в конфигурационном файле, это обязательный момент, а не моя прихоть) и вставьте в него код:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#7f0055;background:#ffffe8;">&lt;?php</span><span style="color:#000000;background:#ffffe8;">  </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">if</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#000000;background:#ffffe8;">(</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#000000;background:#ffffe8;">!</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">defined</span><span style="color:#000000;background:#ffffe8;">(</span><span style="color:#2a00ff;background:#ffffe8;">'BASEPATH'</span><span style="color:#000000;background:#ffffe8;">)</span><span style="color:#000000;background:#ffffe8;">)</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">exit</span><span style="color:#000000;background:#ffffe8;">(</span><span style="color:#2a00ff;background:#ffffe8;">'No direct script access allowed'</span><span style="color:#000000;background:#ffffe8;">)</span><span style="color:#000000;background:#ffffe8;">;</span>
<span style="color:#3f7f59;background:#ffffe8;">/**</span>
<span style="color:#3f7f59;background:#ffffe8;">* Класс MY_Exceptions.</span>
<span style="color:#3f7f59;background:#ffffe8;">* Заменяет метод класса CI_Exceptions show_404 на пользовательский.</span>
<span style="color:#3f7f59;background:#ffffe8;">* @author Баштанник А.С.</span>
<span style="color:#3f7f59;background:#ffffe8;">*/</span>

<span style="color:#7f0055;background:#ffffe8;font-weight:bold;">class</span><span style="color:#000000;background:#ffffe8;"> MY_Exceptions </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">extends</span><span style="color:#000000;background:#ffffe8;"> CI_Exceptions </span><span style="color:#000000;background:#ffffe8;">{</span>

<span style="color:#000000;background:#ffffe8;">    </span><span style="color:#3f7f59;background:#ffffe8;">/**</span>
<span style="color:#3f7f59;background:#ffffe8;">    * Обработчик ошибки 404.</span>
<span style="color:#3f7f59;background:#ffffe8;">    * @param $page String Не найденная страница.</span>
<span style="color:#3f7f59;background:#ffffe8;">    */</span>
<span style="color:#000000;background:#ffffe8;">    </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">function</span><span style="color:#000000;background:#ffffe8;"> show_404</span><span style="color:#000000;background:#ffffe8;">(</span><span style="color:#000000;background:#ffffe8;">$page</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#000000;background:#ffffe8;">=</span><span style="color:#000000;background:#ffffe8;"> </span><span style="color:#2a00ff;background:#ffffe8;">''</span><span style="color:#000000;background:#ffffe8;">)</span>
<span style="color:#000000;background:#ffffe8;">    </span><span style="color:#000000;background:#ffffe8;">{</span><span style="color:#000000;background:#ffffe8;">    </span>
<span style="color:#000000;background:#ffffe8;">        </span><span style="color:#7f0055;background:#ffffe8;font-weight:bold;">system</span><span style="color:#000000;background:#ffffe8;">(</span><span style="color:#2a00ff;background:#ffffe8;">'php -r </span><span style="color:#2a00ff;background:#ffffe8;">\'</span><span style="color:#2a00ff;background:#ffffe8;">$_REQUEST["q"]="'</span><span style="color:#000000;background:#ffffe8;">.</span><span style="color:#000000;background:#ffffe8;">$page</span><span style="color:#000000;background:#ffffe8;">.</span><span style="color:#2a00ff;background:#ffffe8;">'"; include("../index.md.php");</span><span style="color:#2a00ff;background:#ffffe8;">\'</span><span style="color:#2a00ff;background:#ffffe8;">'</span><span style="color:#000000;background:#ffffe8;">)</span><span style="color:#000000;background:#ffffe8;">;</span>
<span style="color:#000000;background:#ffffe8;">    </span><span style="color:#000000;background:#ffffe8;">}</span>
<span style="color:#000000;background:#ffffe8;">}</span>

<span style="color:#7f0055;background:#ffffe8;">?&gt;</span></pre>
<p>Это типичная структура пользовательского расширения CodeIgniter. Интересный момент здесь только в вызове функции system. С ее помощью мы вызываем php интерпретатор, CLI-версию, которой передаем код на выполнение. Поскольку ModX берет информацию о запрошенных страницах из элемента массива $_REQUEST (или $_GET, не суть важно) с индексом q, мы присваиваем ему значение запроса, вызвавшего в CodeIgniter 404 ошибку. После чего запускается ModX, и дальнейшая обработка данных передается скрипту index.md.php.</p>
<p>Какие остались подводные камни? Ну во-первых, конечно же алиасы дружественных интерфейсов. Если они совпадут в ModX с именами контроллеров в CodeIgniter мы никогда не проберемся к ним, т.к. контроллеры фреймворка обладают приоритетом по вызову. Во-вторых, доступ к директориям блокирован, то есть он перенаправляется на обработку запроса фреймворком и далее по схеме. Чтобы избежать вызова скриптов при обращении к некоторым директориям в .htaccess нужно добавить строку</p>
<p><code>RewriteRule ^(manager|assets|images|css|js) - [L]</code></p>
<p>где указаны в этом случае директории, к которым будет свободный доступ по запросу, например example.com/css вызовет обращение к папке, а не к контроллеру CodeIgniter.</p>
<p>Пожалуй, реализация с использованием CLI PHP не самая хорошая идея, но сейчас я вижу только такой ход. Вполне возможно есть и другие способы, я попытаюсь их найти.</p>
<p>Где и для чего это использовать читатель разберется сам. Скажу только, что проблем в этой связке нет никаких и мы наконец-то добились гибкости. Мы можем использовать либо умный и быстрый фреймворк в связке с MVC и отказаться от ModX, либо перенести на фреймворк только логику, оставив ModX отображение данных. Простор для действий. Поживем увидим!</p>
<p>P.S. Обращение к хомячкам. Дорогие хомячки! Официально посылаю вас в жопу, не желаю слышать ваше блаженное фапанье на самизнаетечтоX, не желая выслушивать ни малейшей критики. Хотите поспорить? Милости просим. Если у вас среди аргументов только &laquo;Сперва добейся&raquo;, желаю доброй дороги.</p>
<br /> Tagged: CodeIgniter, ModX <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=93&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2010/01/05/modx-codeigniter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
		<item>
		<title>Почему ModX — говно собачье. Модули.</title>
		<link>http://bashtannik.wordpress.com/2009/11/23/modx-bullshit-4/</link>
		<comments>http://bashtannik.wordpress.com/2009/11/23/modx-bullshit-4/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 15:57:41 +0000</pubDate>
		<dc:creator>bashtannik</dc:creator>
				<category><![CDATA[ModX]]></category>
		<category><![CDATA[Разработка]]></category>

		<guid isPermaLink="false">http://bashtannik.wordpress.com/?p=90</guid>
		<description><![CDATA[Этот пост будет коротким. В ModX, в коде модуля нельзя вставлять HTML в нормальном его виде. Хотите нормальный интерфейс модуля? Используйте print/echo! Для того чтобы сделать такой замечательный, просто чудесный AJAX-интерфейс, без единой строчки PHP, который я прорабатывал два дня мне нужно использовать блять include. ModX предлагает мне сохранить в коде модуля вшивую строчку include, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=90&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Этот пост будет коротким.</p>
<p>В ModX, в коде модуля нельзя вставлять HTML в нормальном его виде. Хотите нормальный интерфейс модуля? Используйте print/echo!</p>
<p>Для того чтобы сделать такой замечательный, просто чудесный AJAX-интерфейс, без единой строчки PHP, который я прорабатывал два дня мне нужно использовать блять include. ModX предлагает мне сохранить в коде модуля вшивую строчку include, которую она потом засунет в Базу Данных. Кто тут про разделение сущностей говорил?</p>
<p>Это ли не пиздец? Чтобы вытащить графический интерфейс система обратится в БД, вызовет PHP код, который в свою очередь вытащит мой HTML, с прекрасным AJAX-интерфейсом.</p>
<p>Тест на логику, конечно же EPIC FAIL.</p>
<br /> Tagged: Разработка, ModX <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bashtannik.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bashtannik.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bashtannik.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bashtannik.wordpress.com&amp;blog=8216938&amp;post=90&amp;subd=bashtannik&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://bashtannik.wordpress.com/2009/11/23/modx-bullshit-4/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fd809d34aa88cb711e71a39af5e4dd44?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">bashtannik</media:title>
		</media:content>
	</item>
	</channel>
</rss>
