<?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>Блог Гилыча</title>
	<atom:link href="http://gillbeits.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://gillbeits.ru</link>
	<description>Блог Гилыча. Все о программировании в WEB, и многом другом.</description>
	<lastBuildDate>Wed, 07 Dec 2011 21:06:48 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Адаптированная модификация известного теста Люшера</title>
		<link>http://gillbeits.ru/2011/12/08/140/</link>
		<comments>http://gillbeits.ru/2011/12/08/140/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 21:05:48 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[О разном]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=140</guid>
		<description><![CDATA[Результат: Вы отказываетесь от всего. Вы анархист. Вы выражаете свой протест всему. В вашем мире нет согласия. Краткая интерпретация: негативное угнетенное стояние, стремление выйти из неприятной ситуации, четкое представление о том, как это сделать., состояние, близкое к стрессу, сложность взаимоотношений, чувство ограниченности в возможностях, нетерпеливость. Испытывает потребность в покое, в защите от внешних воздействий. Стремится [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F12%2F08%2F140%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F12%2F08%2F140%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<h3>Результат:</h3>
<p>Вы отказываетесь от всего. Вы анархист. Вы выражаете свой протест всему. В вашем мире нет согласия.<br />
Краткая интерпретация: негативное угнетенное стояние, стремление выйти из неприятной ситуации, четкое представление о том, как это сделать., состояние, близкое к стрессу, сложность взаимоотношений, чувство ограниченности в возможностях, нетерпеливость.<br />
Испытывает потребность в покое, в защите от внешних воздействий. Стремится к устойчивому эмоциональному состоянию. Избирателен в контактах. Прежде чем принять какое-то решение, старается обдумать варианты. Характерна пассивная позиция.<br />
Стремится к чуткости, гармонии, ласке и нежности. Тонко чувствует красоту. Способен проникнуться чувствами другого.</p>
<p><span id="more-140"></span></p>
<p>Чувствует себя тревожно и неуверенно, постоянно испытывает дискомфорт. Нуждается в ощущении большей безопасности и в более теплой обстановке (+ группа является попыткой компенсации этого и других конфликтов).<br />
Чувствует, что не может соответствовать требованиям, которые к нему предъявляют. Находит, что это стоит ему больших усилий, и хочет, чтобы ситуация стала легче. Раздражителен и обидчив. Нуждается в чувстве защищенности.</p>
<p>Предшествующий период активности привел к перевозбуждению и переутомлению. Ощущает слабость и апатию. Нуждается в тишине и покое, если в этом ему отказано, становится раздражительным.<br />
Хочет расширить сферу деятельности. Считает, что его надежды и желания реальны. Испытывает опасения, что ему могут помешать в осуществлении желаний. Нуждается в спокойной обстановке, а также в мягком подбадривании, которое вернет ему уверенность.</p>
<p>Физиологическая интерпретация. Проявляет нетерпение и возбуждение. Психологическая интерпретация. Полагает, что от жизни можно взять гораздо больше, чем она дает сейчас. Самого важного еще только предстоит достичь. Опасается быть обойденным, прожить жизнь не в полную силу. Поэтому ничего не хочет упустить и преследует свои цели очень настойчиво. Становится "глубоко вовлеченным", и есть риск, что он окажется неспособным смотреть на вещи с достаточной объективностью или спокойствием. Он ничего не может оставить без внимания и чувствует, что успокоится лишь тогда, когда достигнет своей цели. Как следствие, ему грозит опасность перевозбуждения и истощения нервной системы. Коротко. Нетерпеливая предприимчивость.<br />
Физиологическая интерпретация. Выраженная восприимчивость к внешним раздражителям. Психологическая интерпретация. Хочет преодолеть ощущение пустоты и ликвидировать разрыв, который, как он чувствует, отделяет его от других. Стремится узнать жизнь со всех сторон, испытать все возможности, прожить жизнь сполна. Если его ограничивают или стесняют, то это вызывает негодование. Требует, чтобы ему не чинили препятствий и предоставили свободу. Коротко. Стремится быть хозяином своей судьбы.</p>
<p>Не хочет быть втянутым в разногласия из-за каких-либо мнений, воззрений или суждений, предпочитая, чтобы его оставили в покое.</p>
<p>Не желает ни в чем принимать участие. Старается уйти от социальных контактов, ограничить круг общения. Склонен скрывать свои чувства и мысли. Длительное состояние фрустрации утомило и опустошило его.<br />
Чувствует, что конфликты и ссоры вымотали его, хочет оградить себя от них. Нуждается в мирной и спокойной обстановке, в которой он мог бы расслабиться и набраться сил.</p>
<p>Очень чувствителен к воздействию со стороны окружающих. Сам тонко чувствует окружающих и нуждается в таком же отношении.<br />
Чувственен. Склонен к наслаждению вещами, доставляющими чувственное удовлетворение, отвергает все безвкусное, пошлое и грубое.</p>
<p>Склонен идти на компромиссы и приспосабливаться к требованиям ситуации. Считает, что должен наилучшим образом использовать существующие обстоятельства.<br />
Чувствует себя не очень комфортно из-за сопротивления, с которым сталкивается всякий раз, когда пытается отстаивать свои права. Препятствия вызывают у него негодование и возмущение, однако он уступает и согласен как угодно приспосабливаться, лишь бы достичь мира и покоя.</p>
<p>Физиологическая интерпретация. Перевозбуждение из-за несбывшихся ожиданий. Психологическая интерпретация. Несбывшиеся надежды и ожидания вызывают неуверенность и опасения. Испытывает потребность почувствовать себя в безопасности, избежать каких-либо разочарований в дальнейшем и избавиться от страха потерять положение или престиж. Сомневается в том, что в будущем ситуация будет хоть сколько-нибудь лучше, и эта негативная установка приводит к тому, что он лишь повышает свои требования и отказывается идти на разумные компромиссы. Коротко. Страх разочарований и потери влияния (+ группа нужна как компенсация).<br />
Физиологическая интерпретация. Стресс, вызванный разочарованием и страхом дальнейших неудач. Психологическая интерпретация. Несбывшиеся надежды привели к неуверенности и тревожной настороженности. Требует свободы действия и отвергает какой бы то ни было контроль, кроме самоконтроля. Требует надежных гарантий, чтобы оградить себя от дальнейших неудач, потери престижа. Сомневается в том, что в будущем положение будет хоть сколько-нибудь лучше. А эта отрицательная установка приводит к тому, что он лишь повышает свои притязания и отказывается от разумных компромиссов. Коротко. Тревожная настороженность (первая группа цветов характеризует компенсацию).</p>
<p>Боится, что, если он не оградит себя от внешних воздействий, его независимость окажется под угрозой или будет сильно ограничена. Не хочет, чтобы его беспокоили.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2011/12/08/140/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Переквалификация</title>
		<link>http://gillbeits.ru/2011/08/05/134/</link>
		<comments>http://gillbeits.ru/2011/08/05/134/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 11:30:56 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Обо всем]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=134</guid>
		<description><![CDATA[Привет. Собственно о чем я?! На досуге сел и думаю: "PHP программистом уже быть не модно, как то уже не то....". И решил я переквалифицироваться. Чем себя занять, какой язык мучить? На самом деле это "на досуге" было давно. Так вот, в ближайшее время начнут выходить статьи по новым темам: nodeJs, Асинхронное программирование, программирование под мобильные [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F08%2F05%2F134%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F08%2F05%2F134%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Привет.</p>
<p>Собственно о чем я?!</p>
<p>На досуге сел и думаю: "PHP программистом уже быть не модно, как то уже не то....". И решил я переквалифицироваться. Чем себя занять, какой язык мучить?</p>
<p>На самом деле это "на досуге" было давно. <img src='http://gillbeits.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Так вот, в ближайшее время начнут выходить статьи по новым темам: nodeJs, Асинхронное программирование, программирование под мобильные платформы (Android, iOS) с использованием различных мультиплатформенных Framework'ов.<br />
Надеюсь вам понравится.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2011/08/05/134/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мульти HTTP-запрос на CURL</title>
		<link>http://gillbeits.ru/2010/11/17/89/</link>
		<comments>http://gillbeits.ru/2010/11/17/89/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 07:46:58 +0000</pubDate>
		<dc:creator>Drakosha</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP-WEB]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[multicurl]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=89</guid>
		<description><![CDATA[Иногда возникает необходимость во время исполнения скрипта сделать несколько http запросов. При большом их количестве возникает проблема со временем обработки скрипта т.к. все запросы делаются по очереди и общее время их выполнения будет равно сумме времен потраченных на каждый запрос в отдельности. Хорошо если запросов 5, а если их 100? Сами представляете сколько будет выполняться [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F11%2F17%2F89%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F11%2F17%2F89%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Иногда возникает необходимость во время исполнения скрипта сделать  несколько http запросов. При большом их количестве возникает проблема со  временем обработки скрипта т.к. все запросы делаются по очереди и общее  время их выполнения будет равно сумме времен потраченных на каждый  запрос в отдельности. Хорошо если запросов 5, а если их 100? Сами  представляете сколько будет выполняться скрипт. Но выход есть!<br />
<span id="more-89"></span><br />
Мы будем использовать библиотеку CURL, у которой есть возможность создавать мульти запросы.<br />
Что нам это дает? Общее время выполнения всех запросов будет равно  времени выполнения самого долгого запроса. Согласитесь это очень круто!</p>
<p>Вот собственно функция которая все это сделает:</p>
<pre class="brush: php; title: ; notranslate">
/**
* Функция мульти запроса на CURL
* @param array $data Данные для запроса
* @param array $options Опции для всех запросов
* @param array $oneoptions Опции для отдельных запросов
* @return array
*/
function multiRequest($data, $options = array(), $oneoptions = array()) {
// Массив для ресурсов соединения
$curls = array();
// Массив для результатов
$result = array();
// Инициализация мульти запроса
$mh = curl_multi_init();
// Задание параметров запроса
foreach ($data as $id =&gt; $d)
{
$curls[$id] = curl_init();
$url = (is_array($d) &amp;amp;&amp;amp; !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curls[$id], CURLOPT_URL,            $url);
curl_setopt($curls[$id], CURLOPT_HEADER,         false);
curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, true);
// Дополнительные опции общие запросов
if (!empty($options))
{
curl_setopt_array($curls[$id], $options);
}
// Дополнительные опции для определенного запроса
if (!empty($oneoptions[$id]))
{
curl_setopt_array($curls[$id], $oneoptions[$id]);
}
// Если post запрос
if (is_array($d))
{
if (!empty($d['post']))
{
curl_setopt($curls[$id], CURLOPT_POST,       1);
curl_setopt($curls[$id], CURLOPT_POSTFIELDS, $d['post']);
}
}
curl_multi_add_handle($mh, $curls[$id]);
}
// Выполняем запрос пока есть соединения
$running = null;
do
{
curl_multi_exec($mh, $running);
}
while($running &amp;gt; 0);
// Получаем данные и закрываем соединения
foreach($curls as $id =&amp;gt; $content)
{
$result[$id] = curl_multi_getcontent($content);
curl_multi_remove_handle($mh, $content);
}
curl_multi_close($mh);
return $result;
}
</pre>
<p><strong>Примеры использования.</strong><br />
<strong>1)</strong> Простой GET запрос с дополнительными параметрами:</p>
<pre class="brush: php; title: ; notranslate">
$data = array(
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+first',
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+second',
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+third',
);
$options = array(
	CURLOPT_REFERER =&gt; 'http://webiteam.ru/',
	CURLOPT_TIMEOUT =&gt; 5
);
$oneoptions[0] = array(CURLOPT_USERAGENT =&gt; 'IE');
$r = multiRequest($data, $options,$oneoptions);
var_dump($r);
</pre>
<p>Результат:</p>
<pre class="brush: php; title: ; notranslate">
array
  0 =&gt; string 'This is get first

http://webiteam.ru/

IE
' (length=41)
  1 =&gt; string 'This is get second

http://webiteam.ru/

' (length=39)
  2 =&gt; string 'This is get third

http://webiteam.ru/

' (length=38)
</pre>
<p>2) POST запрос с дополнительными параметрами:</p>
<pre class="brush: php; title: ; notranslate">
$data = array(array(),array());
$data[0]['url']  = 'http://webiteam.ru/test/multicurl/test.php';
$data[0]['post']['postdata']   = 'This is post first';
$data[1]['url']  = 'http://webiteam.ru/test/multicurl/test.php';
$data[1]['post']['postdata']   = 'This is post second';
$options = array(
	CURLOPT_TIMEOUT =&gt; 10
);
$oneoptions[0] = array(CURLOPT_USERAGENT =&gt; 'Mozilla');
$oneoptions[1] = array(CURLOPT_USERAGENT =&gt; 'Opera');
$r = multiRequest($data, $options, $oneoptions);
var_dump($r);
</pre>
<p>Результат:</p>
<pre class="brush: php; title: ; notranslate">
array
  0 =&gt; string 'This is post first
Mozilla
' (length=27)
  1 =&gt; string 'This is post second
Opera
' (length=26)
</pre>
<p>Как видите ничего сложного!<br />
Список всех дополнительных опций для CURL <a href="http://ru.php.net/manual/en/function.curl-setopt.php" target="_blank">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/11/17/89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Многопоточность в PHP 5.3.2</title>
		<link>http://gillbeits.ru/2010/07/21/74/</link>
		<comments>http://gillbeits.ru/2010/07/21/74/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 09:59:27 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[PHP-CLI]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=74</guid>
		<description><![CDATA[Понадобилось в несколько потоков данные обрабатывать. Писать свой класс для работы с системными функциями PHP неохота, тем более, все-таки, не люблю я всякие proc_open, system и т. д. Появилось решение использовать аналог fork от perl, да-да, таковой имеется у PHP в виде библиотеки pcntl. Итак, исходные данные: Сервер - FreeBSD 8; PHP - 5.2.3; Последняя [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F21%2F74%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F21%2F74%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Понадобилось в несколько потоков данные обрабатывать. Писать свой класс для работы с системными функциями PHP неохота, тем более, все-таки, не люблю я всякие proc_open, system и т. д.<br />
<span id="more-74"></span><br />
Появилось решение использовать аналог fork от perl, да-да, таковой имеется у PHP в виде библиотеки pcntl.<br />
Итак, исходные данные:</p>
<ul>
<li>Сервер - FreeBSD 8;</li>
<li>PHP - 5.2.3;</li>
<li>Последняя версия портов;</li>
</ul>
<p>Собираем библиотеку pcntl:</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports
# make search name=pcntl
# cd /usr/ports/devel/php5-pcntl
# make install
</pre>
<p>А дальше начинается работа с PHP.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// задаем кол-во потоков
$threads = 10;
$i = 0;
$pid_arr = array();
while ($i &lt; intval($threads))
{
	$pid = pcntl_fork(); // вот он, - знакомый до боли fork()
	if ($pid == -1)
	{
		die('could not fork');
	}
	else
		{
		if ($pid) // parent
		{
			$pid_arr[$i] = $pid;
		}
		else // child
		{
			somefunction($i+1); // функция, которая будет основой в дочернем процессе...
			// делаем выход или процессы будут продолжать плодиться
			exit(0);
		}
	}
	$i++;
}
foreach ($pid_arr as $pid)
{
	pcntl_waitpid($pid, $status);
}
function somefunction($i){
	print &quot;fucntion thread - $i\n&quot;;
}
?&gt;
</pre>
<p>Собственно все, - пока работает и нареканий нет...</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/21/74/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Переход на php-5.3.2 на FreeBSD 8</title>
		<link>http://gillbeits.ru/2010/07/20/25/</link>
		<comments>http://gillbeits.ru/2010/07/20/25/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:22:36 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=25</guid>
		<description><![CDATA[Итак, Вы решили перейти все же на php5.3 в среде FreeBSD 8. Сразу скажу, в процессе перехода возникнут подводные камни. Связаны они прежде всего с тем, что в php53 библиотека pcre не является отдельным модулем. Приступим. Обновляем порты на FreeBSD. Процесс долгий, - пьем чай. Теперь нам надо удалить предыдущие модули для php52, и это [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F20%2F25%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F20%2F25%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Итак, Вы решили перейти все же на php5.3 в среде FreeBSD 8.<br />
Сразу скажу, в процессе перехода возникнут подводные камни.<br />
Связаны они прежде всего с тем, что в php53 библиотека pcre не является отдельным модулем.<br />
<span id="more-25"></span><br />
Приступим.<br />
Обновляем порты на FreeBSD.</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports
# portsnap fetch extract
</pre>
<p>Процесс долгий, - пьем чай.<br />
Теперь нам надо удалить предыдущие модули для php52, и это обязательно!</p>
<pre class="brush: bash; title: ; notranslate">
# pkg_delete php52-*
</pre>
<p>Возможно не все они удалятся, в процессе смотрите, и зачищайте то, что не удалилось автоматом.<br />
Дальше уже проще.</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports/lang/php5
# make clean install
# cd ../php5-extensions
# make clean install
</pre>
<p>Собственно выбираете нужные Вам модули, ставите и радуетесь убранным функциям =)<br />
Ошибки и правки в комменты....</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/20/25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Установка и настройка subversion на FreeBSD 8</title>
		<link>http://gillbeits.ru/2010/07/15/36/</link>
		<comments>http://gillbeits.ru/2010/07/15/36/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 08:44:53 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=36</guid>
		<description><![CDATA[Для начала маленький экскурс, что такое subversion. Subversion - свободная централизованная система управления версиями. Ее часто называют SVN. Пришла она на замену уже устаревшей CVS. Не претендую на первооткрывателя. но все же напишу, как делаю я. Для начала заходим под root'ом: Далее обновляем порты, если долго этого не делали: Идем по пути к subversion и [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F15%2F36%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F15%2F36%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Для начала маленький экскурс, что такое subversion. Subversion - свободная централизованная система управления версиями. Ее часто называют SVN. Пришла она на замену уже устаревшей CVS.</p>
<p><span id="more-36"></span></p>
<p>Не претендую на первооткрывателя. но все же напишу, как делаю я.</p>
<p>Для начала заходим под root'ом:</p>
<pre class="brush: bash; title: ; notranslate"># sudo -s (для меня это выглядит так, Вы можете использовать другой вариант)
# su -</pre>
<p>Далее обновляем порты, если долго этого не делали:</p>
<pre class="brush: bash; title: ; notranslate"># cd /usr/ports
# portsnap fetch extract</pre>
<p>Идем по пути к subversion и устанавливаем:</p>
<pre class="brush: bash; title: ; notranslate"># cd /usr/ports/devel/subversion
# make clean install</pre>
<p>Ждем полной установки и добавляем строки в /etc/rc.conf :</p>
<pre class="brush: bash; title: ; notranslate"># echo 'svnserve_enable=&quot;YES&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_flags=&quot;-d --listen-port=3690&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_data=&quot;/home/svn/repositories&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_user=&quot;svn&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_group=&quot;svn&quot;' &gt;&gt; /etc/rc.conf</pre>
<p>Собственно создаем папку для репозиториев:</p>
<pre class="brush: bash; title: ; notranslate"># mkdir /home/svn/repositories</pre>
<p>Добавляем группу svn и пользователя в эту группу:</p>
<pre class="brush: bash; title: ; notranslate"># pw group add svn
# pw user add svn -g svn -s /sbin/nologin -d /home/svn/repositories/</pre>
<p>Даем права на папку с репозиториями пользователю:</p>
<pre class="brush: bash; title: ; notranslate"># chown -R svn:svn /home/svn/</pre>
<p>Запускаем демона:</p>
<pre class="brush: bash; title: ; notranslate"># /usr/local/etc/rc.d/svnserve start</pre>
<h3>Первая часть закончена, теперь настроим один репозиторий для работы.</h3>
<p>Первым делом создадим его:</p>
<pre class="brush: bash; title: ; notranslate"># svnadmin create /home/svn/repositories/myFirstRepository
# chown -R svn:svn /home/svn/ </pre>
<p>Теперь настраиваем доступ к данному репозиторию, идем по пути /home/svn/repositories/myFirstRepository/conf и правим файл svnserve.conf:</p>
<pre class="brush: bash; title: ; notranslate"># cd /home/svn/repositories/myFirstRepository/conf
# vi svnserve.conf </pre>
<p>Раскомментируем строки:</p>
<pre class="brush: bash; title: ; notranslate">anon-access = none
auth-access = write
password-db = passwd </pre>
<p>Теперь создаем пользователей для доступа к данному репозиторию:</p>
<pre class="brush: bash; title: ; notranslate"># vi passwd</pre>
<p>и добавляем туда пользователя и пароль в формате user = passwd</p>
<p>Делаем рестарт демону:</p>
<pre class="brush: bash; title: ; notranslate"># /usr/local/etc/rc.d/svnserve restart</pre>
<p>Репозиторий готов к работе с клиентом.</p>
<h3>А теперь расскажу Вам, как сделать красивую структуру в репозитории.</h3>
<span class="doc" style="">Директория /trunk содержит основную линию разработки проекта, /branches содержит все ветви, /tags содержит все метки.</span>
<pre class="brush: bash; title: ; notranslate"># cd /home/svn/repositories/
# mkdir svntmp
# cd svntmp
# mkdir trunk branches tags
# cd ..
# svn import svntmp svn://user@localhost/myFirstRepository -m 'struct create' </pre>
<p>После этого мы получим "ровную" структуру для  нашего репозитория.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/15/36/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

