<?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>Perlover&#039;s Blog &#187; Unix</title>
	<atom:link href="http://blog.perlover.com/tag/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Fri, 20 Jan 2012 15:23:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>20 лет первому посту о Linux :)</title>
		<link>http://blog.perlover.com/2011/09/01/first-post-about-linux/</link>
		<comments>http://blog.perlover.com/2011/09/01/first-post-about-linux/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 18:45:46 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Расслабуха :)]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[о жизни]]></category>
		<category><![CDATA[сисадминам]]></category>
		<category><![CDATA[Это интересно]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1364</guid>
		<description><![CDATA[Перепечатано с BugTraq: 25 августа 1991 года в 20:57:08 GMT некий студент из Хельсинки с адресом torvalds@kruuna.helsinki.fi отправил в конференцию comp.os.minix сообщение под заголовком &#171;What would you like to see most in minix?&#187;, в котором рассказал, что пишет бесплатную операционную систему, свободную от кода minix (чисто хобби, не будет такой большой и профессиональной, как gnu), [...]]]></description>
			<content:encoded><![CDATA[<p>Перепечатано с <strong><a href="http://subscribe.ru/archive/inet.bugtraq/201108/31132448.html" target="_blank">BugTraq</a></strong>:</p>
<p><strong>25 августа 1991 года</strong> в 20:57:08 GMT <strong>некий студент из Хельсинки с адресом <span style="color: #ff0000;">torvalds</span>@kruuna.helsinki.fi</strong> отправил в конференцию <strong>comp.os.minix</strong> сообщение под заголовком &#171;What would you like to see most in minix?&#187;, в котором рассказал, что <strong>пишет бесплатную операционную систему</strong>, свободную от кода minix (чисто хобби, не будет такой большой и профессиональной, как gnu), в которой уже вроде работают bash 1.08 и gcc 1.40, <strong>но нет переносимости, и вряд ли когда-нибудь она будет работать с чем-то помимо ATшных винчестеров</strong>.</p>
<p><strong>От себя:</strong> Читая этот блог, вы читаете его с Linux сервера <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Неплохая бесплатная операционнная система получилась! <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Что уж говорить про Linux-ы <strong><span style="color: #ff0000;"><a href="http://w2.com.ua/blogs/wafire/kak_ustroen_google" target="_blank"><span style="color: #ff0000;">Google</span></a></span></strong> &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/09/01/first-post-about-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH Telnet под Windows</title>
		<link>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/</link>
		<comments>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 16:20:34 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[PuTTY]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[Telnets]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[сисадминам]]></category>
		<category><![CDATA[Советы]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1340</guid>
		<description><![CDATA[Давно работаю под ShellGuard, но в последнее время стал искать замену (мало того что он платный и уже не поддерживаемый, дак еще и не работает с UTF-8). Перепробовал много telnet-ов, но остановился на проверенном и нормально работающем &#8212; PuTTY. Но вот есть у него довольно неприятная проблема. ShellGuard работает почти с теми же клавиами, что [...]]]></description>
			<content:encoded><![CDATA[<p>Давно <strong>работаю под ShellGuard</strong>, но в последнее время <strong>стал искать замену</strong> (мало того что он платный и уже не поддерживаемый, дак еще и не работает с UTF-8). Перепробовал много telnet-ов, но <strong>остановился на проверенном</strong> и нормально работающем &#8212; <strong><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY</a></strong>. Но вот есть у него довольно <strong>неприятная проблема</strong>. ShellGuard работает почти с теми же клавиами, что привычные Unix терминалы &#8212; Alt + F1(F2, &#8230; F12) &#8212; переключает на нужные открытые консоли, а <strong>PuTTY работает всегда с одной консолью</strong> и для новой надо заново запускать новый процесс, а переключаться между ними не удобно &#8212; Alt+Tab &#8212; обычное переключение в Windows.</p>
<p>Долго искал &#8212; можно ли как-то приблизиться к сервису, близкому ShellGuard, и <strong>нашел максимально хорошее решение<span id="more-1340"></span></strong> &#8212; <strong><a href="http://puttycm.free.fr/cms/" target="_blank">PuTTY Connection Manager</a></strong>. Эта программа делает следующее &#8212; она запускает на каждую консоль новое окно PuTTY как процесс, но <strong>интегрирует их в одно Windows окно, делая вкладки (Tabs)</strong>, переключаться между которыми теперь можно через <strong>Ctrl + Tab</strong>. Работает очень хорошо, но все таки остался неприятный осадок &#8212; было бы замечательно, если бы порядок переключения делался в Most Recent порядке (между наиболее недавно использованными табами). Но этого нет. Еще хочется добавить из минусов &#8212; очень медленно развивается разработчиками. И хотя <a href="http://puttycm.free.fr/support/tracker/index.php?string=&amp;project=2&amp;type[]=2&amp;sev[]=&amp;pri[]=&amp;due[]=&amp;reported[]=&amp;cat[]=&amp;status[]=open&amp;percent[]=&amp;opened=&amp;dev=&amp;closed=&amp;duedatefrom=&amp;duedateto=&amp;changedfrom=&amp;changedto=&amp;openedfrom=&amp;openedto=&amp;closedfrom=&amp;closedto=&amp;do=index" target="_blank">можно запросить и проголосовать за какую либо новую фичу</a>, что-то мне подсказывает, увидеть ее потом можно через N-ое количество лет.</p>
<p>Кстати, <strong>как ShellGuard, так и PuTTY &#8212; работают с SSH ключами</strong>. <strong><span style="color: #ff0000;">Если вы не используете SSH ключи</span></strong> для авторизации (то есть работаете по старинке &#8212; вводя каждый раз пароль), то <strong><span style="color: #ff0000;">очень рекомендую это сделать</span></strong> &#8212; <strong><span style="color: #008000;">удобно, быстро и более безопасно!</span></strong> Конечно, сами ключи для авторизации необходимо защитить паролем, но его надо ввести один раз (для ShellGuard &#8212; только при первой сессии и для PuTTY вводится при запуске Pageant из состава PuTTY)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/21/ssh-telnet-windows-putty-vs-shellguard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>perl, utf8 и encode &amp; decode термины</title>
		<link>http://blog.perlover.com/2011/07/20/perl-utf8-encode-decode-ter/</link>
		<comments>http://blog.perlover.com/2011/07/20/perl-utf8-encode-decode-ter/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 11:07:24 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[utf8]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1334</guid>
		<description><![CDATA[Полезно будет знать Perl программерам. Дело в том, что часто в документациях к perl (perldoc utf8) и модулям (например JSON) употреблаются такие термины, которые лично меня часто путали своим смыслом, а именно: encode to UTF-8, decode to UTF-8. Что подумает нормальный программер, услышав слово encode to? То, что что-то кодируется во что-то, а именно &#171;encode [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Полезно будет знать Perl программерам</strong>. Дело в том, что часто в документациях к perl (perldoc utf8) и модулям (например JSON) употреблаются такие термины, которые лично меня часто путали своим смыслом, а именно: encode to UTF-8, decode to UTF-8. <strong>Что подумает</strong> нормальный программер, <strong>услышав слово encode to?</strong> То, что что-то кодируется во что-то, а именно &#171;encode to UTF-8&#8243; -&gt; &#171;кодирование в UTF-8&#8243;. Я знаю, что perl хранит внутри себя строки UTF-8 со специальным флагом &#8212; если он установлен &#8212; строка UTF-8, если нет &#8212; бинарная. Поэтому, когда в доке я читал encode to UTF-8, я все время путался &#8212; думал, что говорят про установку этого флага. Оказалось, все в точности наоборот.</p>
<p><strong>Правильно так:</strong> когда пишут <strong><span style="color: #0000ff;">encode to UTF-8</span></strong>, это значит, что внутри перла строка с UTF-8 данными остается как есть, но <strong><span style="color: #0000ff;">флаг UTF-8 убирается</span></strong>, и perl начинает вести себя со строкой так, как будто там бинарные (octet) байтовые данные (то есть посути, строка внутри перла перестает быть UTF8, хотя слово &#171;encode&#187; несет в себе другой смысл). И наоборот &#8212; <strong><span style="color: #993300;">decode to UTF-8 -&gt; UTF8 флаг ставится</span></strong> (то есть для perl-а строка становится UTF8).</p>
<p>P.S. В Perl есть такая функция &#8212; encode (модуль Encode). Смысл ее в том, чтобы перевести строку из внутреннего содержания на perl (которое всегда UTF-8 внутри, т.е. Unicode символы) в байтовую последовательность, которая бы отражала ту кодировку, которую ей указали (то есть раз байтовая &#8212; значит всегда utf8 флаг в результате отсутсвует). Если мы делаем $result = encode(&#8216;utf-8&#8242;, $string), то результат как раз будет в том, что флаг utf8 будет просто снят для $result и в реальности никакого переводирования не будет (то есть побайтово внутри perl-а $string &amp; $result будут содержать одни и те же байты, только $string еще будет иметь взведенный utf8 флаг). И это как раз вписывается в те понятия, которые я описал ранее. Для decode и байтового UTF8 всё обратно &#8212; флаг utf8 просто ставится в $result.</p>
<p>Вот такая абракодабра&#8230; <strong>Будьте внимательны!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/20/perl-utf8-encode-decode-ter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Немного о супер направлениях в Web на Perl</title>
		<link>http://blog.perlover.com/2011/07/19/perl-plack-psgi/</link>
		<comments>http://blog.perlover.com/2011/07/19/perl-plack-psgi/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 10:15:38 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[For AWMs]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Для Webmasters]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[CGI]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[mod_perl]]></category>
		<category><![CDATA[Plack]]></category>
		<category><![CDATA[PSGI]]></category>
		<category><![CDATA[webmaster]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1328</guid>
		<description><![CDATA[Немогу не поделиться своими выводами об изучении нескольких новых технологий в Perl и в Web программировании. Немного предистории. Я сам программирую динамические веб сайты (CGI) только на Perl. Никогда не использовал PHP. Это не только потому, что я фанат Perl, но и дань эффективности &#8212; под Perl много модулей, много возможностей, и при грамотном подходе [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Немогу не поделиться своими выводами</strong> об изучении нескольких <strong>новых технологий в Perl и в Web программировании</strong>. Немного предистории.</p>
<p>Я сам программирую <strong>динамические веб сайты</strong> (CGI) только <strong>на Perl</strong>. Никогда не использовал PHP. Это не только потому, что я фанат Perl, но и дань эффективности &#8212; под Perl много модулей, много возможностей, и при грамотном подходе сайты на Perl будут работать быстрее PHP &#8212; ведь Perl код после компиляции хранится в памяти в виде байт кода (типа &#171;<a href="http://en.wikipedia.org/wiki/P-code_machine" target="_blank">Пи кода</a>&#187; кода в Pascal). А если знаешь Perl, то и разработка может идти гораздо быстрее.<span id="more-1328"></span></p>
<p><strong>До недавнего времени я использовал</strong> технологию <strong>Apache + mod_perl + Embperl</strong>, а сам внешний WWW сервер имел фронтенд -Apache + mod_accel либо еще лучший вариант &#8212; nginx  (оба &#8212; реализуют проксирование). Лет 8 назад это было отличным решением, когда я начал использовать эту технологию. Но сейчас она устарела и сложна в использовании.</p>
<p>Сейчас я <strong>всем программерам на Perl</strong>, пишущим приложения под Web, <strong>очень рекомендую обратить внимание</strong> на следующие технологии в Perl, которые, несомненно эффективнее и проще, чем вышеуказанная связка:</p>
<ul>
<li><strong><a href="https://github.com/miyagawa/psgi-specs/blob/master/PSGI.pod" target="_blank">PSGI</a></strong> технология, а также ее реализация через модули <strong><a href="https://github.com/miyagawa/Plack" target="_blank">Plack</a></strong></li>
<li><strong><a href="http://github.com/miyagawa/Starman" target="_blank">Starman</a></strong> &#8212; perl сервер, с режимами pre-fork, контроля количества процессов и многое другое. Вообщем, почти как apache.</li>
<li><strong><a href="http://dancer.sukria.net/" target="_blank">Dancer</a></strong> &#8212; отличное решение для реализации своих PSGI приложений, но с более простым программированием.</li>
</ul>
<h3>Сейчас немного подробнее</h3>
<p>PSGI &#8212; недавно придуманный стандарт для Perl, который реализует простой и понятный программисту подход &#8212; вместо написания CGI скриптов и всей этой ваши с передачей параметров серверам и т.п.., очень умный человек (<a href="http://bulknews.typepad.com/" target="_blank">Tatsuhiko Miyagawa</a>) придумал (правда взяз за основу наработки из Python) простой подход &#8212; любое приложение (будь то скрипт или группа скриптов)  оформляется в виде обычной perl функции, которая чётко принимает и возвращает определенные параметры: принимает ссылку на хеш, в котором есть и заголовки HTTP, и служебные заголовки (вместо старых в CGI переменных окружения), а возвращает ссылку на массив из трех элементов: HTTP ответ, ссылку на массив заголовков ответа и ссылку на массив данных (HTTP BODY). Просто и со вкусом! Причем, можно возвращать и ссылку на код функции для реализации stream потоков. То есть <strong>в PSGI можно реализовать любой вид сервера</strong> &#8212; <strong>простой</strong>, отдающий <strong>потоковые</strong> данные (типа видео, например), либо удерживающее соединение (<strong>Comet</strong> технология). Но и это не все. Прелесть такой структуры функции PSGI в том, что одна функция может вызывать другую PSGI, но при этом делающее что-то своё. То есть другими словами &#8212; стек вызова. Называется это &#8212; middleware. А <strong>Plack служит клеем</strong> &#8212; имеет в своем составе сервис функции для формирования такого стека.</p>
<p>И, конечно же, если подумать, <strong>нужен сам сервер</strong>, который будет принимать TCP соединения, парсить заголовки и формировать хеш для PSGI, вызывать его и отдавать ответ. И таких серверов написано уже много. <strong>Один из них &#8212; Starman</strong>. Он, практически, выполняет те же функции, что выполняла бы связка Apache + mod_perl, только гораздо эффективнее, так как он проще, и нет тех &#171;костылей&#187;, которые были приделаны в apache &amp; mod_perl для их функционирования.</p>
<p><strong>А что же делает Dancer?</strong> Он называется типом <strong>Frameworks</strong> в терминологии Plack. Он для сервера Starman работает как PSGI, но вы сами пишите на perl через предоставляемые <strong>Dancer-ом функции, которые облегчают вам жизнь</strong>. Dancer сам парсит входные данные от Starman, формирует их в удобный вид для обработки в perl и также формирует обратные заголовки и данные. К тому же, Dancer может работать без Starman &#8212; он имеет свой простой вебсервер. Также, раз Dancer может работать как PSGI функция, его можно вызывать из под любого сервера Plack типа, а также на нем можно написать свои middleware. Вообщем, тут вам как ваша фантазия и профессионализм подскажет.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/19/perl-plack-psgi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DNS &#8212; как сделать обратную запись (PTR), если зона не ваша</title>
		<link>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/</link>
		<comments>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 11:23:22 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[named]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1322</guid>
		<description><![CDATA[Бывают моменты, когда вам надо сделать корректное резрешение DNS из IP ареса в доменное имя для IP, который принадлежит провайдеру (и соответственно, он управляет DNS-ом обратной зоны), но сервер на этом IP ваш. Конечно, без его участия сделать это нельзя, но можно попросить провайдера прописать следующие настройки в DNS, чтобы вы могли в любое время [...]]]></description>
			<content:encoded><![CDATA[<p>Бывают моменты, когда вам надо сделать <strong>корректное резрешение DNS из IP ареса в доменное имя</strong> для IP, который принадлежит провайдеру (и соответственно, он управляет DNS-ом обратной зоны), но сервер на этом IP ваш. <strong>Конечно, без его участия сделать это нельзя</strong>, но можно попросить провайдера прописать <strong><a href="http://www.zytrax.com/books/dns/ch3/#reverse" target="_blank">следующие настройки в DNS</a></strong>, <strong>чтобы вы могли в любое время на своём DNS менять имя записи PTR</strong>, а не просить сделать это каждый раз своего провайдера.</p>
<p><strong><a href="http://www.zytrax.com/books/dns/ch3/#reverse" target="_blank">Здесь на английском официальная инструкция</a></strong>, как это сделать. <strong>Основной смысл</strong> &#8212; провайдер ставит записи CNAME вместо PTR в обратной зоне (IN-ADDR.ARPA), а вы уже меняете на своем DNS настройки. В примере дан более развернутый пример, когда провайдер описывает записи для целой подзоны, например сетки /27 (32 машины) и указывает NS записи вашего DNS. Можно сделать проще для одного IP &#8212; провайдер ставит на вас CNAME вместо PTR (но не NS), CNAME указывает на ваш доменный адрес (на адрес под вашим доменом), для которого вы уже описываете PTR запись. Тем самым, если захотели другое имя для IP, меняете его у себя в DNS и телемаркет&#8230;</p>
<p>Если не знаете, зачем это, то знайте: обратное разрешение нужно для более правильной работы e-mail (если у вас есть почтовый сервер &#8212; для его IP это лучше сделать <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). В противном случае, письма, оправленные через ваш SMTP, могут &#171;отвегаться&#187; большинством почтовых релеев (relay).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/07/12/reverse-dns-cname-ptr-n/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Летнее время навсегда?</title>
		<link>http://blog.perlover.com/2011/02/09/daylight-forever/</link>
		<comments>http://blog.perlover.com/2011/02/09/daylight-forever/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 09:48:55 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Напрягуха :(]]></category>
		<category><![CDATA[phones]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[о жизни]]></category>
		<category><![CDATA[Сотовые телефоны]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1198</guid>
		<description><![CDATA[Вот приняли в России закон об отмене перевода времени. Может, это и хорошо. Меня смущает другое. То, что этой весной, будет последний перевод стрелок. Вот несколько аргументов, что это не правильно, с моей точки зрения. Забегая вперед, скажу от себя, что считаю, если и надо было &#171;останавливаться&#187; в переводе стрелок, то делать это надо осенью [...]]]></description>
			<content:encoded><![CDATA[<p>Вот приняли в России <strong>закон об отмене перевода времени</strong>. Может, это и хорошо. Меня смущает другое. То, что <strong>этой весной, будет последний перевод стрелок</strong>. Вот несколько аргументов, что это не правильно, с моей точки зрения. Забегая вперед, скажу от себя, что считаю, если и надо было &#171;останавливаться&#187; в переводе стрелок, то <strong>делать это надо осенью после перевода на зимнее время.</strong><span id="more-1198"></span></p>
<ol>
<li>В компьютерных технологиях, стандартом часового пояса времени является <strong>НЕ ЛЕТНЕЕ ВРЕМЯ</strong>. Везде, в компьютерных системах, это подчеркивается &#8212; есть опция &#171;Летнее время&#187;. То есть, если стоит пометка, то время летнее, и к стандартному сдвигу для данной временной зоны добавляется час. То, что приняли в России &#8212; это бред. Выходит, что<strong> РФ теперь будет жить всегда по &#171;летнему времени&#187;.</strong> Придется ждать, когда везде в компьютерных системах (включая мобильники) для городов РФ сдвиг будет перенесен на час вперед для всех городов (см. след. пункт)</li>
<li><strong>Теперь везде</strong>, где есть временные зоны (сотовые телефоны, компьютеры) россиянину надо будет выбирать не только свою зону, но и <strong>всегда ставить опцию летнего времени</strong>. А если ее нет &#8212; то придется всегда вместо своего города в базе зон <strong>выбирать другой город, который восточнее на 1 час</strong>. В общем, <strong>будет бардак</strong>. Не надо надеется, что везде эти базы зон будут оперативно обновлены &#8212; телефоны не перепрошьют, компы, если и обновятся, то не скоро.</li>
<li>Еще один очень неприятный момент: <strong><span style="color: #ff0000;">со следующей зимы все в России будут жить с большей разницей во времени с теми странами, где часы переводят.</span> </strong>Пример &#8212; сейчас Москва зимой в зоне GMT +3 (что значит &#8212; для получения московского времени надо ко времени Гринвича &#8212; GMT &#8212; добавить 3 часа), европейские города &#8212; GMT +1. Это значит, что зимой разница между ними &#8212; 2 часа. Весной Европа и мы перейдем на летнее, Москва станет GMT +4 (в комп. системах это как &#171;GMT +3&#8243; + летнее время), Европа GMT +2. Разница попрежнему будет составлять два часа. А вот осенью случится то, что мне лично не нравится. Европа станет снова GMT +1, а Москва так и останется GMT +4. Разница времени зимой с Европой будет 3 часа. Я не беру в пример более восточные города РФ, а также города в США &#8212; везде разница с ними увеличится на час, чего никогда не было. Получается, что соотечественники за рубежом будут вынуждены звонить своим родственникам в Россию еше раньше, чтобы те не успели лечь спать. Также, это скажется на бизнесе между РФ и Европой. Европейское телевидение станет на всю зиму еще больше отставать по времени (например, те кто смотрит спутниковое &#8212; они это почувствуют). Тут еще надо подумать, не будет ли это так же плохо для населения, как то, когда стрелки переводили.</li>
</ol>
<p><strong>Остался еще неприятный момент</strong>, что ПО компьютеров придется дорабатывать и ждать обновлений &#8212; сейчас Windows &amp; Unix автоматически переводят время, и без обновлений, осенью масса компьютеров просто некорректно переведет время. Но даже если оператор и вернет время обратно вручную, этого будет мало &#8212; придется ставить временной пояс не своего города, иначе система будет некорректно вычислять Гринвическое время, что также приведет к сбоям и проблемам. <strong>Вообщем, это будет что-то типо второй проблемы Y2K</strong>, только не для всего мира, а <strong>для РФ</strong>.</p>
<p>Непонятно, чем думали, когда решили весной последний раз перевести часы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/02/09/daylight-forever/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Samba &amp; Archive аттрибут = -Executable</title>
		<link>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/</link>
		<comments>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 18:16:04 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[Samba]]></category>
		<category><![CDATA[Редакторы]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1144</guid>
		<description><![CDATA[Заметил неприятную особенность дефолтной конфигурации Samba &#8212; при сбрасывании из под Windows Archive аттрибута редактируемого файла разными редакторами, сбрасываются permissions &#8216;x&#8217; (права файла) на Unix для пользователя, который владеет файлом. Например, есть на Unix файл с правами rwxr-xr-x. Если вы его через Samba поредактируете в Windows каким либо редактором, который любит сбрасывать аттрибут archive (far [...]]]></description>
			<content:encoded><![CDATA[<p>Заметил <strong>неприятную особенность</strong> <strong><span style="color: #ff0000;">дефолтной </span></strong>конфигурации <strong>Samba</strong> &#8212; при сбрасывании из под Windows <strong>Archive аттрибута</strong> редактируемого файла разными <strong>редакторами</strong>, сбрасываются permissions &#8216;x&#8217; (права файла) на Unix для пользователя, который владеет файлом. Например, есть на Unix файл с правами rwxr-xr-x. Если вы его через Samba поредактируете в Windows каким либо редактором, который любит сбрасывать аттрибут archive (far или komodo edit), то после сохранения изменений файл будет иметь permissions как rw-r-xr-x. Для Unix пользователей это очень плохо &#8212; файл перестает быть исполняемым для самого владельца, зато остается исполняемый для всех, кроме него. Долго искал причину, почему после редактирования в Komodo Edit теряется исполняемый бит, грешил на редактор, а выловил такую особенность default Samba configuration <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Для решения</strong> этой проблемы надо просто напросто <strong>добавить строку</strong> <strong><span style="color: #008000;">map archive = no</span></strong> в <strong>smb.conf</strong> файл. После перезапустить samba: <strong><span style="color: #0000ff;">service smb stop &amp; service smb start</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/01/20/samba-archive-attribute-executable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Если у вас не работает OpenCV под 64 бит&#8230;</title>
		<link>http://blog.perlover.com/2011/01/10/opencv-core-files-64bit/</link>
		<comments>http://blog.perlover.com/2011/01/10/opencv-core-files-64bit/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 16:11:26 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[64Bit]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[FC13]]></category>
		<category><![CDATA[Fedora Core]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1108</guid>
		<description><![CDATA[Боролся недавно с одной проблемой &#8212; решил поделиться с вами ее решением, если вдруг вы нашли мою страницу, например, через Google Вряд ли рядовой читатель моего блога сталкивался с такой же проблемой. Потому и уповаю на Google Итак, библиотека распознавания образов &#8212; OpenCV &#8212; упорно не хочет работать на Linux Fedora Core 13 (FC13) под [...]]]></description>
			<content:encoded><![CDATA[<p>Боролся недавно с одной проблемой &#8212; решил поделиться с вами ее решением, если вдруг вы нашли мою страницу, например, через Google <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Вряд ли рядовой читатель моего блога сталкивался с такой же проблемой. Потому и уповаю на Google <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <span id="more-1108"></span></p>
<p>Итак, библиотека распознавания образов &#8212; <strong>OpenCV</strong> &#8212; упорно <strong>не хочет работать на Linux Fedora Core 13 (FC13) под 64 битами!</strong> Причем как версия 1.1, так и версия 2.2. Причем,  баг проявлялся на уровне мистики &#8212; все компилированные версии opencv падали в segmentation fault (core file), и только на 64 бит, а в интернете про эту проблему совсем ничего &#8212; как будто ее и нет!  Если ставить opencv из RPM, то можно поставить 2.0, но и с ней есть проблемы (не работал perl модуль Image::ObjectDetect &#8212; сейчас он работает, но с версии 2.1). Нужна была либо 1.1, либо выше 2.0. А вот если скачать 2.2 с сайта и собрать &#8212; она нормально собереться, но при работе с ней ваши программы упорно будут выпадать в core файлы (segmentation fault). То же касается версии 1.1. Вообщем, гуглил муглил я, копался в core файлах с отладчиком gdb и выяснил, что падает она в cvCanny функции. И нашел я вот этот <strong><a href="https://code.ros.org/trac/opencv/ticket/157" target="_blank">баг</a></strong>. И кто бы мог подумать, что это глюки не самой OpenCV! Я то все время думал, что разработчики opencv виноваты. <strong>Оказалось, что проблема куда глубже</strong> &#8212; компилятор <strong>GCC 4.4.3</strong> и ранее <strong><a href="https://bugzilla.redhat.com/show_bug.cgi?id=610785" target="_blank">имел баг</a></strong> при оптимизации кода. Результат &#8212; некоторые программы и библиотеки <strong>под 64 битами могут доходить до segfault</strong>. Не стал исключением и OpenCV (сколько таких скрытых багов могло &#171;подтянуться&#187; к другим библиотекам и программам &#8212; можно только гадать). Вообщем, проблема решилась обновлением GCC компилятора из репозитария Fedora Core 13 и последующей перекомпиляцией OpenCV. После проверил &#8212; обе версии &#8212; 1.1 &amp; 2.2 работали на отлично.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/01/10/opencv-core-files-64bit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Оптимизация MySQL &#8212; select/insert</title>
		<link>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/</link>
		<comments>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 14:50:17 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=882</guid>
		<description><![CDATA[Было как то раз у меня постоянно проблема &#8212; очень долго исполнялись SELECT с JOIN запросы. Грешил я на долгое исполнение JOIN операций, хотя с индексами у меня был полный порядок. Что я только не делал &#8212; и настройки крутил MySQL, и код местами переписывал, чтобы оптимальнее работал. Но проблема оставалась. Причем это что-то грузило [...]]]></description>
			<content:encoded><![CDATA[<p>Было как то раз у меня постоянно проблема &#8212; очень долго исполнялись <strong>SELECT с JOIN</strong> запросы. Грешил я на долгое исполнение JOIN операций, хотя с индексами у меня был полный порядок. Что я только не делал &#8212; и настройки крутил MySQL, и код местами переписывал, чтобы оптимальнее работал. Но проблема оставалась. Причем это что-то грузило сервак конкретно, несмотря на оченбь мощное железо. Но вот нашел в инете одну <strong><a href="http://www.mysqlperformancetuning.com/how-to-reduce-table_locks_waited-in-mysql-myisam" target="_blank">статейку</a></strong> и она меня натолкнула на мысль &#8212; изменить priority операции INSERT/DELETE. Правки для двух строк кода убрали проблему совсем! И очень мощный сервак стал работать очень быстро&#8230; Я даже не ожидал такого! А теперь немного поподробнее&#8230;</p>
<p><span id="more-882"></span>В MySQL есть такая особенность для таблиц типа MyISAM &#8212; <strong>операции изменения таблицы</strong> (INSERT/UPDATE/DELETE) <strong>имеют более высокий приоритет</strong> перед SELECT. Представим себе такую картину: к MySQL поступает сразу несколько запросов  в таком порядке: <span style="color: #0000ff;"><strong>SELECT (1)</strong> </span>-&gt; <span style="color: #ff6600;"><strong>UPDATE (2)</strong></span> -&gt; <strong><span style="color: #ff0000;">SELECT (3)</span></strong> -&gt;<span style="color: #ff0000;"> <strong>SELECT (4)</strong></span>. Все эти запросы &#8212; от нескольких клиентов (сессий) и все &#8212; на работу с одной и той же таблицей (для простоты понимания). Первый SELECT, предположим, занимает 2 сек времени на выполнение. Если бы не было UPDATE, то остальные селекты могли бы исполняться в параллель &#8212; таблица ведь не меняется, данные тоже, почему бы не дать другим клиентам тоже выполнить запросы&#8230; Но, поскольку, есть UPDATE (то же было бы для случая DELETE/INSERT), MySQL заблокирует таблицу полностью при первом же случае (в нашем примере сразу же после отработки первого SELECT, который поступил раньше UPDATE), т.е. он ждет выполнения первого селекта (2 сек) для блокировки. За эти две секунды никто не может получить доступ к таблице, остальные SELECT будут ждать выполнения UPDATE (вень у него более высокий приоритет пол умолчанию), а UPDATE ждет первого SELECT. Все&#8230; Это пипец&#8230; Если у вас не загруженный сервак, то вас это беспокоить не будет &#8212; никто не будет наступать друг другу на пятки. А если сервак загружен, эту <strong>ситуацию можно сравнить с давкой в торговом центре, где ажиотаж, но при этом security решили пропустить без очереди VIP персону&#8230;</strong></p>
<p><strong>Какой выход?</strong> Оказывается, довольно простой. Один из вариантов &#8212; изменить по умолчанию приоритет операций для изменения таблиц (т.е. для UPDATE/INSERT/DELETE) &#8212; опция <code>--low-priority-updates</code> при запуске mysqld. Но это слишком глобальный способ, и вряд ли хороший. Я не вдумывался в его смысл, но думаю, раз придумали такой приоритет, то значит это кому то нужно.</p>
<p><strong>Есть способ второй</strong> &#8212; найти такие узкие места в программе, где есть вместе долгоисполняемые SELECT (например большие JOIN), а также где рядом исполняется INSERT/DELETE/UPDATE на те же таблицы. И вот для тех INSERT/DELETE/UPDATE добавить слово LOW_PRIORITY в запросе. И все! На 99% вы устраните это узкое место и будете удивлены, насколько все пропрет <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Представим, что будет после. Если встретился долгий SELECT, а поступил также, например UPDATE, но уже с LOW_PRIORITY, а за ним в очереди другие SELECT, то другие SELECT будут исполняться сразу же в параллель вместе с первым длинным по времени, даже пока он не закончился. А уже после будет работать UPDATE и никому не мешать. Вообще, есть больше <strong><a href="http://dev.mysql.com/doc/refman/5.1/en/table-locking.html" target="_blank">рекомендаций от самой MySQL.ORG</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2011/01/10/mysql-collisions-select-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git &#8212; краткое введение</title>
		<link>http://blog.perlover.com/2010/11/22/git-starting/</link>
		<comments>http://blog.perlover.com/2010/11/22/git-starting/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 08:22:18 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[RCS]]></category>
		<category><![CDATA[Revision Control System]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[VCS]]></category>
		<category><![CDATA[Version Control System]]></category>
		<category><![CDATA[Автоматизация труда]]></category>
		<category><![CDATA[Контроль Версий]]></category>
		<category><![CDATA[сисадминам]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=1022</guid>
		<description><![CDATA[Давненько уже работаю с такой классной штукой, как git. Git &#8212; это программа для контроля версий программ. В дальнейшем я планирую публиковать статейки, связанные с этой темой. Но чтобы как-то начать это, решил написать этот пост &#8212; краткое ознакомление с ней.Git написан Линусом Торвальдсом &#8212; автором Linux. Эта программа относится к классу программ контроля версий. [...]]]></description>
			<content:encoded><![CDATA[<p>Давненько уже работаю с такой классной штукой, как git. <strong>Git &#8212; это программа для контроля версий программ.</strong> В дальнейшем я планирую публиковать статейки, связанные с этой темой. Но чтобы как-то начать это, решил написать этот пост &#8212; краткое ознакомление с ней.<span id="more-1022"></span>Git написан Линусом Торвальдсом &#8212; автором Linux. Эта программа относится к классу программ контроля версий. К этому же классу относятся такие же программы, как SVN (Subversion) , CVS. Хотя в интернете и бытует мнение, что git сложнее, чем SVN, но мне показалось все иначе. Например, чтобы что-то делать с проектом в SVN, надо часто использовать команды из командной строки на каждое удаление, добавление файла  и т.п.. С git проще &#8212; вы просто работаете с файлами любыми средствами, а затем с помощью нескольких команд можно увидеть изменения и выполнить сразу добавление или удаление файлов пачками.</p>
<h2>Давайте сначала поймем, зачем он вам нужен.</h2>
<p><strong>Если вы один программист</strong>, то вот преимущества git перед ситуацией, когда вы его не используете:</p>
<ol>
<li>В одном репозитарии (условно &#8212; одна папка) у вас хранится сразу вся история проекта с разными версиями. Вы можете создавать экспериментальные ветки, в случае успешного кода их затем объединять в стабильные ветки. <strong>Можно легко переходить в &#171;прошлое&#187;.</strong> Например, можно быстро устранить баг в стабилной версии, а затем продолжать работать в экспериментальной альфа-версии.</li>
<li><strong>Легко просматривать, что вы изменили </strong>вчера и сейчас. Удобно, когда вы приходите утром на работу и хотите вспомнить, на чем же вы остановились.</li>
<li>Заодно &#8212; git, выходит само собой, <strong>удобное средство резервирования и синхронизации</strong>. Вы можете разместить репозитарий на сервере, и с него подтягивать дома рабочие файлы, которые делали на работе,  а после правок заливать изменения обратно.</li>
<li>В git &#8212; <strong>каждый клонированный репозитарий </strong>- не только рабочая площадка, но также и <strong>полноценный репозитарий</strong>. Если вы работали на ноутбуке, а сегодня накрылся ваш сервер с репозитарием, то ваша локальная версия на ноуте &#8212; опять же, репозитарий со всей &#171;историей&#187;.</li>
<li><strong>Для git не надо online </strong>- вам достаточно &#171;подтянуть&#187; с сервера изменения, если были, и отключить ноутбук от интернета. Затем, работайте хоть в самолете! Делайте коммиты, пишите и просматривайте, что вы изменили. Только лишь, когда вы захотите &#171;сбросить&#187; все изменения в ваш главный репозитарий, только тогда вам нужен инет.</li>
</ol>
<p><strong>Если же вы команда</strong>, то преимущества те же, что выше, но также <strong>к ним добавляется возможность легкого ведения группового проекта</strong>. Самый замечательный пример, что все это отлично работает &#8212; ядро Linux &#8212; именно оно ведется Git-ом, и даже единичное увеличение подверсии ядра включает в себя большое количество commit-ов и работу большого количетва программистов.</p>
<p><strong>Git</strong>, по моему опыту, <strong>гораздо понятнее программисту, чем тот же SVN</strong>, и гораздо логичнее. Я долго не мог принять, что в SVN создание ветви &#8212; делается через копирование файла. Какая-то странная логика. Затем, когда я освоил git, мне куда понятнее, что создание ветви &#8212; это создание нового узла дерева со своим parent или даже несколькими parent-ами. Обычнная иерархия, которая понятна не только программисту! Благодаря этому, очень легко прерывать проект и делать ответвления новый подверсий, работать с ними и затем, например, объединять с другими ветками. Git &#8212; это как бы мощный diff с элементами иерархии (diff хорошоф знаком тем, кто работает с Unix).</p>
<h2>Что нужно четко понимать в git?</h2>
<p>Отличительная идеология git от многих других программ контроля версий &#8212; <strong>наличие index</strong>. Index &#8212; это &#171;промежуточный слой&#187; между вашим рабочим файловым деревом, и того, что должно быть добавлено в репозитарий. В репозитарий добавляется только то, что есть в индексе. А в индекс вы добавляете из рабочего дерева то, что необходимо добавить затем в репозитарий. Запутано, скажете вы? Когда вы начнете работать, вы поймете, что это очень даже логично! Именно эта &#171;фишка&#187; git поначалу у меня вызывала непонимание.</p>
<p><strong>Ветвление &#8212; одна из замечательных свойств git-а. </strong>Ветвить можно не просто разные версии программ, а даже по &#171;мелочи&#187;. Например, вы хотите добавить новую фичу в программу. Если вы начнете работать на текущей стабильной версии, вы рискуете создать ситуацию, когда в рабочей версии будет найден баг, вам надо будет быстро его исправить, а вы не закончили и не отладили проект с вашей новой фичей. Тем самым, попадете в затруднительную ситуацию. Выход из нее простой &#8212; создали подветку, делаете свою новую фичу. Если необходимо, вы можете быстро переключаться между ветками. Ветвление в git &#8212; не ресурсоемкий процесс. Им удобно пользоваться и даже нужно. Иначе использование git превратится в стрельбу из пушки по воробьям.</p>
<p>Также, сразу постарайтесь приучить себя к такому способу ведения проекта в git, как <strong>активное использование масок для игнорирования файлов. </strong>То есть, вы ведете проект, но в нем есть два типа файлов и директорий &#8212; условно назовем служебные и проектные. Служебные  &#8212; те, что создаются в процессе работы и нужны только для компиляции. Проектные &#8212; те, что должны отслеживаться git-ом, лежать в репозитарии, и являться частью проекта в целом. Служебные должны исключаться через файл <em>.gitignore</em> (man gitignore). Приучите себя сразу формировать этот файл, от рождения проекта, и постепенно, по мере работы, добавлять в него новые и новые файлы и маски. Этот файл также упростит вам жизнь с командами add &amp; status.</p>
<p>Также, при групповой работе надо знать, что <strong>git &#8212; не локирует файлы на время редактирования </strong>кем либо. Один и тот же файл могут править несколько программистов. Принцип тут такой &#8212; если изменения происходили в &#171;далеких&#187; местах друг от друга в файле, git их объединит автоматом, если же нет &#8212; будет создан конфликт, требующий ручного исправления кем либо.</p>
<h2>Еще несколько понятий и терминов.</h2>
<p><strong>Commit </strong>- это как бы фиксация изменений. Коммит имеет запись в истории &#8212; кто создал, когда, одну или несколько строк от автора изменений, что сделано. Также, можете просто предствавить &#8212; что commit &#8212; как бы снимок всей директории и файлов на тот момент.</p>
<p><strong>Diff </strong>- текстовые <strong>отличия в формате diff между ветками</strong>, commit-ами, файлами и т.п.. Формат его легко читаем и даже сразу понятен, если посмотреть на него &#8212; вы видите, что добавляли или удаляли и когда.</p>
<p><strong>Merge </strong>- объединение веток. Благодаря иерархии (что из чего следовало) и инструментам нахождения отличий (diff), <strong>git сам определяет, что было добавлено в код, что удалено</strong>, и на основе этих изменений он делает новые файлы в объединении. Но иногда может случиться так, что один и тот же файл в близких местах менялся в разных ветках. Вот тогда возникает конфликт (см. ниже)</p>
<p><strong>Conflict </strong>- конфликт. <strong>Если </strong>вы делали merge, и при этом <strong>возникли противоречия, git создает &#171;конфликт&#187;.</strong> Эта ситуация, когда файл с конфликтом помечается внутри базы git особым образом, в самом текстовом коде возникают текстовые метки типа &#8216;&lt;&lt;&lt;&lt;&#8217; или &#8216;&gt;&gt;&gt;&gt;&gt;&gt;&#8217; с кодами из обоих веток и от вас требуется ручное редактирование файла &#8212; устранение конфликта. Вам надо посмотреть эти метки в самом коде, решить, что правильнее, отредактировать, а потом дать понять git-у, что файл вы привели в норму (git add &#8230;). С бинарными файлами несколько иначе, но смысл тот же.</p>
<p><strong>Repository </strong>- репозитарий, то <strong>есть хранилище</strong>. Как уже говорил, любая копия может юыть репозитарием одновременно для кого либо. Вы можете сами для себя определить, где будет главная копия. Закачку и выкачку лучше всего осуществлять через ssh протокол. Делается просто &#8212; там где лежит репозитарий, он должен лежать под правами, скажем пользователя user. Тогда, чтобы вытянуть от туда, вам надо знать либо пароль user, либо иметь ssh ключ. А сама выкачка делается также просто, без всяких ssh команд: &#171;git clone user@therehost.com:git/myproject.git&#187;, например. А дальше, git запомнит адрес репозитария, и обмен данными превратится в две простые команды: &#171;git push&#187; и &#171;git pull&#187;. Если еще правильно организовать доступ по ssh ключам, то можно вообще не вводить пароли <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Также, маленький нюанс &#8212; <strong>репозитарий может быть двух типов</strong>: bare и обычный. Обычный &#8212; это файловое дерево проекта + .git служебная директория, где все и хранится git-овское. А bare &#8212; это только файлы .git &#8212; там нет рабочей директории, и bare используется только для репозитариев с целью сохранения и взятия информации их них. Обычно, bare репозитариям дают суффикс &#8216;.git&#8217;. В остальном &#8212; работа синхронизации идентична.</p>
<p><strong>Если вы поставили </strong><a href="http://git-scm.com/" target="_blank"><strong>git на Unix</strong></a>, то все по нему можно узнать из man-ов: &#171;man git&#187;, или, например: &#171;man git-diff&#187; и т.п.. Все в нем делается через одну команду &#8212; git, а вторым параметром указывается сама команда. А сам &#171;мен&#187; по ней состоит из git и через дефис той команды, что вам нужна (список всех команд &#8212; man git).</p>
<p><strong>Также, есть <a href="http://code.google.com/p/msysgit/downloads/list" target="_blank"></a></strong><a href="http://code.google.com/p/msysgit/downloads/list" target="_blank"><strong>Windows версия</strong></a>, причем, в том числе с графической поддержкой, показывающей иерархии и изменения от одного commit-а к другому. Находится она здесь: <a href="http://code.google.com/p/msysgit/downloads/list" target="_blank">mSysGit</a> &#8212; там выбираете, например, msysGit-fullinstall-* самый свежий и ставите. Установка проста, как и все программы для Windows. Ленивые могут использовать только графическую оболочку, а продвинутым, пожалуй, будет интересен &#171;Git Bash&#187; из того же комплекта. Лично я предпочитаю работать в &#171;Git Bash&#187;, так как там привычная мощная оболочка bash со всеми ее плюсами (включая, кстати ssh-* команды).</p>
<h2>Заключение</h2>
<p><strong>Не ждите волшебства от git-а</strong>. Он, конечно, не додумает за вас программный код, когда вы объединяете две ветки в одну с разным кодом в одном месте. Но сделает свою работу максимально правильно, упростив вам жизнь.</p>
<p>Я, как программист-одиночка, сейчас уже сложно представляю себе работу  без git. <strong>Даже если  проект поддерживается одним человеком, git сильно облегчает жизнь. </strong>И это  не смотря на то, что все качества git-а раскрываются в групповой работе  над проектом. Самым лучшим примером будет то, что ядро Linux  поддерживается только через этот инструмент контроля версий. А ядро &#8212;  самая динамично-развивающаяся часть кода в мире Linux &#8212; над ней работают  сотни людей. А требования к ее надежности &#8212; самые высокие!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2010/11/22/git-starting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

