<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Блог ГО</title>
	
	<link>http://blgo.ru/blog</link>
	<description />
	<lastBuildDate>Tue, 21 Feb 2012 13:46:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blgo" /><feedburner:info uri="blgo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>getCookie сосёт</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/r1xRyonhy-k/</link>
		<comments>http://blgo.ru/blog/2012/02/21/getcookie-sux/#comments</comments>
		<pubDate>Tue, 21 Feb 2012 13:46:37 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=590</guid>
		<description><![CDATA[Лет 15 назад какой-то кудесник написал следующую функцию на тогда ещё новом языке JavaScript: function getCookie&#40;name&#41; &#123; var start = document.cookie.indexOf&#40;name + &#34;=&#34;&#41;; var len = start + name.length + 1; if &#40;&#40;!start&#41; &#38;&#38; &#40;name != document.cookie.substring&#40;0, name.length&#41;&#41;&#41; &#123; return null; &#125; if &#40;start == -1&#41; return null; var end = document.cookie.indexOf&#40;';', len&#41;; if &#40;end [...]]]></description>
			<content:encoded><![CDATA[<p>Лет 15 назад какой-то кудесник написал следующую функцию на тогда ещё новом языке JavaScript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> getCookie<span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> start <span style="color: #339933;">=</span> document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> len <span style="color: #339933;">=</span> start <span style="color: #339933;">+</span> <span style="color: #000066;">name</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>start<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span> <span style="color: #339933;">!=</span> document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>start <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> end <span style="color: #339933;">=</span> document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">';'</span><span style="color: #339933;">,</span> len<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>end <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> end <span style="color: #339933;">=</span> document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> unescape<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span>len<span style="color: #339933;">,</span> end <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>С тех пор она обошла весь интернет и сотню рейтингов типа &laquo;10 самых обосраться лучших JavaScript-функций за все времена&raquo;.</p>
<p>С тех пор все подряд либо тянут её себе, либо, как обычно, переписывают на свою &laquo;ещё более лучшую, ведь я программист&raquo;, но везде впихивают этот грёбаный <code>indexOf()</code>.<br />
Чем он вам понравился?<br />
Даже Дэвид Флэнаган в своём &laquo;подробном руководстве&raquo; не удержался.</p>
<p><code>indexOf(name + "=")</code> &#8211; мы здесь не переменную &laquo;name&raquo; ищем, мы ищем переменную, <em>заканчивающуюся</em> на &laquo;name&raquo;.<br />
Что следующий код нам вернёт?</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">setCookie<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;sex&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;yes&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
setCookie<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;x&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;no&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>getCookie<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;x&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Правильно:</p>
<pre>
se<b>x=yes</b>; x=no;
</pre>
<p>Ну и <code>escape/unescape</code> совершенно для других целей нужны.</p>
<p>А посему:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> getAllCookie<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> parts  <span style="color: #339933;">=</span> document.<span style="color: #660066;">cookie</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        cookie <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        part<span style="color: #339933;">,</span>
        <span style="color: #000066;">name</span><span style="color: #339933;">,</span>
        value<span style="color: #339933;">,</span>
        i<span style="color: #339933;">,</span>
        len <span style="color: #339933;">=</span> parts.<span style="color: #660066;">length</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span> i <span style="color: #339933;">+=</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        part  <span style="color: #339933;">=</span> parts<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">name</span>  <span style="color: #339933;">=</span> part<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^\s+/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s+$/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        value <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>part<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^\s+/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s+$/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        cookie<span style="color: #009900;">&#91;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> decodeURIComponent<span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">return</span> cookie<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2012/02/21/getcookie-sux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2012/02/21/getcookie-sux/</feedburner:origLink></item>
		<item>
		<title>mysqldump: игнорирование данных в определённых таблицах</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/tYIDSG4ZEkU/</link>
		<comments>http://blgo.ru/blog/2012/02/18/mysqldump/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 11:10:47 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[mysqldump]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=585</guid>
		<description><![CDATA[(картинку увёл с adw0rd.ru) Итак, хотим мы, значит, сделать дамп какой-то mysql-базы с рабочего проекта. Чтобы скачать себе и развернуть у себя локальную копию. Или просто в целях бэкапа. Ну и, конечно, для этого у нас есть наша любимая утилита mysqldump. Но вот незадача, есть в базе штук пять таблиц в которые пишутся различные логи. [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right">
    <img src="http://img-fotki.yandex.ru/get/4516/154712453.0/0_64777_83a71d7_orig" alt="mysqldump" /></p>
<div style="font-size:80%">(картинку увёл с <a href="http://adw0rd.ru/2009/mysqldump-and-cheat-sheet/">adw0rd.ru</a>)</div>
</div>
<p>Итак, хотим мы, значит, сделать дамп какой-то mysql-базы с рабочего проекта.<br />
Чтобы скачать себе и развернуть у себя локальную копию.<br />
Или просто в целях бэкапа.</p>
<p>Ну и, конечно, для этого у нас есть наша любимая утилита <a href="http://adw0rd.ru/2009/mysqldump-and-cheat-sheet/">mysqldump</a>.</p>
<p>Но вот незадача, есть в базе штук пять таблиц в которые пишутся различные логи.<br />
И написалось их уже за время работы сайта, аж на 10 гигабайт.<br />
10 гигабайт эти нам совершенно ни к чему, ни в бэкапе их хранить незачем, ни тем более на локалку себе выкачивать не хочется.<br />
Но и удалять тоже жалко, вдруг пригодятся.</p>
<p><br style="clear:both" /></p>
<p>Ну ладно, просто воспользуемся опцией <code>--ignore-table-data</code>, которая, конечно, где-то в <a href="http://www.manpagez.com/man/1/mysqldump/">обильном списке опций</a> должна быть.<br />
Опа, а нет, оказывается, ничего подобного.<br />
Только <a href="http://bugs.mysql.com/bug.php?id=60249">заявка на неё</a> и благодарность за заявку.</p>
<p>Какие же другие варианты у нас есть?</p>
<p><code>--ignore-table</code>: просто игнорировать таблицы. Не катит, структура нам нужна, в них же всё равно что-то писаться будет.</p>
<p><code>--where="true limit 100"</code>: выбрать только сотню записей. Плохо, другие таблицы нам нужны полными.</p>
<p>Придётся сделать в два захода:</p>
<p>1. Сохранить для таблиц с логами только структуру (<code>--no-data</code>).</p>
<p>2. Сделать дамп всех остальных таблиц.</p>
<p>И в сочетании с моими потугами о области изучения баша, получается следующее (здесь мы ещё заодно архивируем дамп в файл с указанием текущей даты):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #007800;">DB_NAME</span>=<span style="color: #ff0000;">&quot;dbname&quot;</span>
<span style="color: #007800;">DB_USER</span>=<span style="color: #ff0000;">&quot;username&quot;</span>
<span style="color: #007800;">DB_PASS</span>=<span style="color: #ff0000;">&quot;qwerty&quot;</span>
&nbsp;
<span style="color: #007800;">OUTPUT_FILE</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$DB_NAME</span>-<span style="color: #007800;">$(date +%Y-%m-%d)</span>.sql.tar.gz&quot;</span>
&nbsp;
<span style="color: #007800;">TMP_SQL_FILE</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$DB_NAME</span>.sql&quot;</span>
&nbsp;
<span style="color: #007800;">tables_cmd</span>=<span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #007800;">ignore_cmd</span>=<span style="color: #ff0000;">&quot;&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> table <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #ff0000;">&quot;log_table_1&quot;</span> <span style="color: #ff0000;">&quot;log_table_2&quot;</span> <span style="color: #ff0000;">&quot;log_table_3&quot;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #007800;">tables_cmd</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$tables_cmd</span> <span style="color: #007800;">$table</span>&quot;</span>
    <span style="color: #007800;">ignore_cmd</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$ignore_cmd</span> --ignore-table=<span style="color: #007800;">$DB_NAME</span>.<span style="color: #007800;">$table</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Dump to <span style="color: #007800;">$TMP_SQL_FILE</span>&quot;</span>
&nbsp;
mysqldump \
    -u<span style="color: #007800;">$DB_USER</span> \
    -p<span style="color: #007800;">$DB_PASS</span> \
    <span style="color: #660033;">--databases</span> <span style="color: #007800;">$DB_NAME</span> \
    <span style="color: #660033;">--no-create-db</span> \
    <span style="color: #660033;">--add-drop-table</span> \
    <span style="color: #007800;">$ignore_cmd</span> \
    <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$TMP_SQL_FILE</span>;
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Append big tables structures to <span style="color: #007800;">$TMP_SQL_FILE</span>&quot;</span>
&nbsp;
mysqldump \
    -u<span style="color: #007800;">$DB_USER</span> \
    -p<span style="color: #007800;">$DB_PASS</span> \
    <span style="color: #660033;">--databases</span> <span style="color: #007800;">$DB_NAME</span> \
    <span style="color: #660033;">--no-create-db</span> \
    <span style="color: #660033;">--add-drop-table</span> \
    <span style="color: #660033;">--tables</span> <span style="color: #007800;">$tables_cmd</span> \
    <span style="color: #660033;">--no-data</span> \
    <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$TMP_SQL_FILE</span>;
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Archiving to <span style="color: #007800;">$OUTPUT_FILE</span>&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-czf</span> <span style="color: #007800;">$OUTPUT_FILE</span> <span style="color: #007800;">$TMP_SQL_FILE</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Remove <span style="color: #007800;">$TMP_SQL_FILE</span>&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #007800;">$TMP_SQL_FILE</span></pre></div></div>

<p>Мои познания в баше не позволили мне вынести список таблиц в отдельную переменную, но и так работает.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2012/02/18/mysqldump/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2012/02/18/mysqldump/</feedburner:origLink></item>
		<item>
		<title>Контактики</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/TZiw-8SpUbA/</link>
		<comments>http://blgo.ru/blog/2012/02/18/contacts/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 10:25:32 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=582</guid>
		<description><![CDATA[Обновил страничку контактов для вас мои дорогие. Там мои мыльца, жежешечки, твиттерочки и гуглоплюсики. Френдите, фоловьте, плюсуйте и следуйте за мной на твиттер, БЛЕАДЬ!]]></description>
			<content:encoded><![CDATA[<p>Обновил <a href="http://blgo.ru/contacts/">страничку контактов</a> для вас мои дорогие.</p>
<p>Там мои мыльца, жежешечки, твиттерочки и гуглоплюсики.</p>
<p>Френдите, фоловьте, плюсуйте и следуйте за мной на твиттер, БЛЕАДЬ!</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2012/02/18/contacts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2012/02/18/contacts/</feedburner:origLink></item>
		<item>
		<title>Локальные новости за последний год</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/kJ1BPXu0j5o/</link>
		<comments>http://blgo.ru/blog/2012/02/17/local-news/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 10:29:05 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=570</guid>
		<description><![CDATA[На дворе конец февраля &#8211; время выносить ёлку и писать отчёт о прошедшем годе. Весь прошедший год мы хуячили без обеда и выходных, бездельничали и снова хуячили. Сделали много лабуды и не сделали много полезных вещей. Познакомились со многими интересными людьми, в том числе с настолько интересными, что лучше бы не знакомились. Обогатились бесценным опытом [...]]]></description>
			<content:encoded><![CDATA[<p>На дворе конец февраля &#8211; время выносить ёлку и писать отчёт о прошедшем годе.</p>
<p>Весь прошедший год мы хуячили без обеда и выходных, бездельничали и снова хуячили.<br />
Сделали много лабуды и не сделали много полезных вещей.<br />
Познакомились со многими интересными людьми, в том числе с настолько интересными, что лучше бы не знакомились.<br />
Обогатились бесценным опытом о том, как делать множество новых для нас вещей.<br />
И ещё более бесценным о том, как их делать не стоит.</p>
<p><a href="http://new.hotel-inn.ru/" style="float:right"><img src="http://img-fotki.yandex.ru/get/4406/154712453.0/0_63f1e_a19150ac_orig" alt="Hotel-inn" /></a><br />
<br />
Ну и так, как нужно показать что-то материальное: встречайте, альфа-версия системы бронирования гостиниц <a href="http://new.hotel-inn.ru/">Hotel-inn</a>.<br />
В ролях: я, <a href="http://sadesign.ru/">дизайнер Асанов</a>, <a href="https://plus.google.com/118444855925075353566">программист Марио</a> и другие.<br />
Сначала я хотел показать её тогда, когда мы наконец её закончим. Потом, когда её закончат уже другие люди. А теперь приходится показывать, пока эти люди ещё не успели всё убить.</p>
<p><br style="clear:both" /></p>
<p><span id="more-570"></span></p>
<p>А теперь мы сняли офис, чтобы опять хуячить без обеда и выходных, над хрен знает чем.</p>
<p>Офис в советском здании. В советском здании советские флаги, советские лестницы и советский похуизм абсолютно ко всему.</p>
<p><a href="http://img-fotki.yandex.ru/get/5006/154712453.0/0_63f1f_6860daf4_orig" style="float:left;margin-right: 10px;"><img src="http://img-fotki.yandex.ru/get/5006/154712453.0/0_63f1f_6860daf4_M.jpg" alt="" /></a></p>
<p><a href="http://img-fotki.yandex.ru/get/4405/154712453.0/0_63f21_1671ace6_orig"><img src="http://img-fotki.yandex.ru/get/4405/154712453.0/0_63f21_1671ace6_M.jpg" alt="" /></a></p>
<p><br style="clear:both" /></p>
<p>В грязных окнах: подсобки, люди какие-то за компами и золотые купола.</p>
<p><a href="http://img-fotki.yandex.ru/get/4406/154712453.0/0_63f20_35f03338_orig"><img src="http://img-fotki.yandex.ru/get/4406/154712453.0/0_63f20_35f03338_L.jpg"  /></a></p>
<p>Вобщем всё опять заебись.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2012/02/17/local-news/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2012/02/17/local-news/</feedburner:origLink></item>
		<item>
		<title>Программист на вырост (PHP), СПб от 35 000</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/dyd3n6q14zo/</link>
		<comments>http://blgo.ru/blog/2011/08/12/programmist/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 11:45:21 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[Вакансии]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[вакансия]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=558</guid>
		<description><![CDATA[Вакансия закрыта Мы хотим себе веб-программиста. Веб-программист должен: Иметь опыт участия в разработке проектов среднего уровня. Иметь горячее желание повышать уровень своих проектов. Иметь желание повышать свой собственный уровень, как программиста. Веб-программист должен знать: PHP5 (желательно 5.3 с неймспейсами и всем остальным) JavaScript (работать с jQuery и иметь представление о том, как она сама работает) [...]]]></description>
			<content:encoded><![CDATA[<p><b>Вакансия закрыта</b></p>
<p>Мы хотим себе веб-программиста.</p>
<p>Веб-программист должен:</p>
<ul>
<li>Иметь опыт участия в разработке проектов среднего уровня.</li>
<li>Иметь горячее желание повышать уровень своих проектов.</li>
<li>Иметь желание повышать свой собственный уровень, как программиста.</li>
</ul>
<p>Веб-программист должен знать:</p>
<ul>
<li>PHP5 (желательно 5.3 с неймспейсами и всем остальным)</li>
<li>JavaScript (работать с jQuery и иметь представление о том, как она сама работает)</li>
<li>MySQL</li>
<li>HTML и CSS на уровне &laquo;внедрить и подправить&raquo;. Верстать макеты заставлять не будем.</li>
<li>Unix, хотя бы на уровне пользователя.</li>
<li>ООП, MVC и т.д. и т.п.</li>
</ul>
<p>Веб-программист получит от нас:</p>
<ul>
<li>Рабочее место на 40 часов в неделю</li>
<li>от 35 000 рублей в месяц в начале</li>
<li>Ещё больше рублей в месяц в зависимости от успехов</li>
<li>Молодой разнополый коллектив, офис в центре, дартс и печенюшки</li>
<li>Возможность развиваться в профессиональном плане</li>
</ul>
<p>Контакты: <a href="maito:oleg.grigoriev@insaito.ru">oleg.grigoriev@insaito.ru</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/08/12/programmist/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/08/12/programmist/</feedburner:origLink></item>
		<item>
		<title>Конфигурация сайта: конфигурация сервера</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/5vZYb_EcvhU/</link>
		<comments>http://blgo.ru/blog/2011/07/30/config-nginx/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 17:03:02 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[blitz]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[конфигурация]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=554</guid>
		<description><![CDATA[Продолжим, пожалуй, разговор про конфиги (часть 1, часть 2.1, часть 2.2). На этот раз отвлечёмся от теории и перейдём к практике. Чтобы нам такое законфигурировать? Законфигурируем, пожалуй, какую-нибудь конфигурацию :) Допустим, конфигурацию веб-сервера и пусть сервером этим будет Nginx. Задача более конкретно: Разрабатываем сайт example.ru Я разрабатываю в своей локальной версии &#8211; go.example.local, а другой [...]]]></description>
			<content:encoded><![CDATA[<p>Продолжим, пожалуй, разговор про конфиги (<a href="/blog/2011/01/24/config-intro/">часть 1</a>, <a href="/blog/2011/01/26/config-joint-platform/">часть 2.1</a>, <a href="/blog/2011/01/27/config-joint-inheri/">часть 2.2<a/>).</p>
<p>На этот раз отвлечёмся от теории и перейдём к практике. Чтобы нам такое законфигурировать?</p>
<p>Законфигурируем, пожалуй, какую-нибудь конфигурацию :) Допустим, конфигурацию веб-сервера и пусть сервером этим будет Nginx.</p>
<p>Задача более конкретно:</p>
<ul>
<li>Разрабатываем сайт example.ru</li>
<li>Я разрабатываю в своей локальной версии &#8211; go.example.local, а другой разработчик в своей &#8211; hugo.example.local + ещё верстальщик с дизайнером</li>
<li>Есть у нас общая локальная версия example.local на локальном сервере.</li>
<li>И есть тестовый поддомен test.example.ru, на котором заказчик проверяет последнии фишки, перед тем, как их зальют собственно на example.ru</li>
<li>test.example.ru находится в открытом доступе и его следует закрыть хотя бы с помощью htpasswd</li>
<li>Все загружаемые изображения лежат на поддомене &laquo;img.*&raquo;, то есть img.example.ru, img.go.example.local и т.д.</li>
</ul>
<p>Итак, у нас уже 7 версий сайта. Каждая на своём хосте. И для каждого хоста нужно иметь nginx-конфиг. Все конфиги имеют одинаковую структуру, но отличаются частностями.</p>
<p>Что мы будем их 7 раз копипастить и корректировать? А любое изменение в структуре вручную в каждую версию вносить? К чёрту! Давайте всё автоматизируем.<br />
<span id="more-554"></span></p>
<h2>Шаблон</h2>
<p>Для начала нарисуем шаблон конфига:</p>

<div class="wp_syntax"><div class="code"><pre class="nginx" style="font-family:monospace;">server {
&nbsp;
    listen {{ listen }};
    server_name {{ server_name }};
    root {{ root }};
&nbsp;
    {{ IF htpasswd }}
    # если надо закрыть от посторонних глаз - закрываем
    auth_basic &quot;Password, please!&quot;;
    auth_basic_user_file {{ htpasswd }};
    {{ END }}
&nbsp;
    # К картинкам и стилям доступ обычный
    location ~* ^/(i|css|js)/ {
        expires 7d;
    }
&nbsp;
    # К robots.txt также
    location = /robots.txt {
    }
&nbsp;
    # Всё остальное перехватываем на файл index.php
    location / {
        fastcgi_pass   {{ fastcgi_pass }};
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root/index.php;
        fastcgi_read_timeout 600;
    }
}
# Upload-поддомен
server {
    listen {{ listen_upload }};
    server_name {{ server_name_upload }};
    root {{ root_upload }};
&nbsp;
    location / {
    }
}</pre></div></div>

<p>В примере мы воспользовались синтаксисом шаблонизатора <a href="http://alexeyrybak.com/blitz/blitz_en.html">Blitz</a>. Вообще можно хоть на Smarty, хоть на чём угодно.</p>
<h2>Параметры</h2>
<p>Теперь вспомним, что мы говорили про <a href="/blog/2011/01/26/config-joint-platform/">платформы</a>. У нас получается 7 конечных платформ (4 у разработчиков + local + test + рабочий сайт). Наследуются они от базовой конфигурации. Раздел этой базовой конфигурации, отвечающей за сервер, сейчас и набросаем (всё что NULL &#8211; требует переопределения для каждой платформы):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
&nbsp;
    <span style="color: #0000ff;">'listen'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span>   <span style="color: #666666; font-style: italic;">// обычно у всех будет 80-й порт</span>
    <span style="color: #0000ff;">'server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'htpasswd'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// у большинства htpasswd не нужен</span>
&nbsp;
    <span style="color: #0000ff;">'fastcgi_pass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'php-fpm'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// у большинства PHP-FPM, но может быть, например, SPAWN-FCGI</span>
&nbsp;
    <span style="color: #0000ff;">'listen_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>А теперь определяем настройки конкретной платформы (например, для go.example.local):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'go.example.local'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local/www'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.go.example.local'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local/img'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Для test.example.ru прописываем путь до htpasswd.</p>
<h2>Генерация config-файла</h2>
<p>Теперь осталось написать скриптик, который берёт итоговую конфигурацию, берёт шаблон, пропускает это всё через шаблонизатор и сохраняет результат в файлик.</p>
<p>Остаётся запустить этот скриптик в нужный момент, скопировать результирующий файл в каталог с конфигами nginx&#8217;а и перезапустить сервер. Можно повесить это всё на хук в системе контроля версий (не говорите только, что при таком количестве народа её нет).</p>
<p>Что и файл каждый раз копировать лениво? Автоматически скопировать в каталог nginx&#8217;а не выйдет &#8211; прав скорее всего нет. Поставить права на запись &#8211; некошерно как-то, да и всё своё лучше носить с собой.</p>
<p>Поэтому создаём у себя каталог, например, <code>local</code>, игнорируем в системе контроля версий и все подобные генерируемые файлы храним там. В nginx&#8217;е же делаем inclide всех подобных файлов или делаем на них символические ссылки.</p>
<p>Мы избавились от лишней ручной работы. Мы молодцы.</p>
<h2>Промежуточные платформы</h2>
<p>Вспомним теперь про <a href="/blog/2011/01/26/config-joint-platform/">промежуточные платформы</a>.</p>
<p>У нас два ярко выраженных типа платформ:</p>
<ol>
<li><b>Dev</b>: разработчики и example.local. Для пущего объединения, предположим что все они работают на одном сервере, а разработчики вносят изменения, подключившись через samb&#8217;у.</li>
<li><b>Prod</b>: это, конечно, рабочий сайт. А ещё &#8211; test.example.ru &#8211; он лежит на том же сервере, должен работать в том же окружении и с теми же настройками, чтобы быть максимально приближенном к конечному результату.</li>
</ol>
<p>Возьмём и сделаем эти две промежуточные платформы.</p>
<p>Зачем дизайнеру и верстальщику отдельные img-поддомены? Зачем им заполнять их тестовыми данными, а в случае изменения формата переконверчивать их. Им только вывод настраивать надо. Сделаем им один и тот же поддомен вместе с example.local, и только у разработчиков переопределим его.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.go.example.local'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local/img'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>fastcgi_pass также на всём сервере будет один.</p>
<h2>Шаблоны параметров</h2>
<p>Заметим ещё несколько закономерностей: имя поддомена обычно имеет вид &laquo;img. + хост&raquo;, порт поддомена обычно тот же, что и у основного хоста. Хосты разработчиков располагаются на поддоменах одного домена и пути к ним обычно имеют один формат. Мы избавились от множества рутины, но по прежнему копипастим. Возьмём и впихнём Blitz ещё и в параметры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/* Базовая конфигурация */</span>
<span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
&nbsp;
    <span style="color: #0000ff;">'base_server_name'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'prefix_server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'www_home'</span>           <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span>    
    <span style="color: #0000ff;">'prefix_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen'</span>       <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ prefix_server_name }}{{ base_server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'project_home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ www_home }}/{{ server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ project_home }}/www'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'htpasswd'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>    
    <span style="color: #0000ff;">'fastcgi_pass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'php-fpm'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ listen }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ prefix_upload }}{{ server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ project_home }}/img'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Теперь конфигурация DEV-платформ:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'base_server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'example.local'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>И конфигурация платформы разработчика go:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'prefix_server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'go.'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'www_home'</span>           <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go'</span><span style="color: #339933;">,</span>    
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>И после слияния конфигов плучается:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'base_server_name'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'example.local'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'prefix_server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'go.'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'www_home'</span>           <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/'</span><span style="color: #339933;">,</span>    
    <span style="color: #0000ff;">'prefix_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen'</span>       <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ prefix_server_name }}{{ base_server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'project_home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ www_home }}/{{ server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ project_home }}/www'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'htpasswd'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>    
    <span style="color: #0000ff;">'fastcgi_pass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'php-fpm'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ listen }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ prefix_upload }}{{ server_name }}'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'{{ project_home }}/img'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В скриптике же генерации nginx-конфига просто сперва пропускаем каждый параметр через шаблонизатор, передавая каждый раз в качестве переменных сам этот массив. И в итоге получаем:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'base_server_name'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'example.local'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'prefix_server_name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'go.'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'www_home'</span>           <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'prefix_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen'</span>       <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'server_name'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'go.example.local'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// {{ prefix_server_name }}{{ base_server_name }}</span>
    <span style="color: #0000ff;">'project_home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// {{ www_home }}/{{ server_name }}</span>
    <span style="color: #0000ff;">'root'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local/www'</span><span style="color: #339933;">.</span> <span style="color: #666666; font-style: italic;">// {{ project_home }}/www</span>
&nbsp;
    <span style="color: #0000ff;">'htpasswd'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>    
    <span style="color: #0000ff;">'fastcgi_pass'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'php-fpm'</span><span style="color: #339933;">,</span>
&nbsp;
    <span style="color: #0000ff;">'listen_upload'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// {{ listen }}</span>
    <span style="color: #0000ff;">'server_name_upload'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'img.go.example.local'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// {{ prefix_upload }}{{ server_name }}</span>
    <span style="color: #0000ff;">'root_upload'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/home/go/go.example.local/img // {{ project_home }}/img
);</span></pre></div></div>

<p>Ну и сам итоговый конфиг:</p>

<div class="wp_syntax"><div class="code"><pre class="nginx" style="font-family:monospace;">server {
&nbsp;
    listen 80;
    server_name go.example.local;
    root /home/go/go.example.local/www;
&nbsp;
    # К картинкам и стилям доступ обычный
    location ~* ^/(i|css|js)/ {
        expires 7d;
    }
&nbsp;
    # К robots.txt также
    location = /robots.txt {
    }
&nbsp;
    # Всё остальное перехватываем на файл index.php
    location / {
        fastcgi_pass   php-fpm;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root/index.php;
        fastcgi_read_timeout 600;
    }
}
# Upload-поддомен
server {
    listen 80;
    server_name img.go.example.local;
    root /home/go/go.example.local/img;
&nbsp;
    location / {
    }
}</pre></div></div>

<h2>Другие сервисы</h2>
<p>Какие там у нас ещё используются сервисы, требующие файла конфигурации? Sphinx? Ещё какие-то? Так тоже самое с ними.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/07/30/config-nginx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/07/30/config-nginx/</feedburner:origLink></item>
		<item>
		<title />
		<link>http://feedproxy.google.com/~r/blgo/~3/qzS3v12YIts/</link>
		<comments>http://blgo.ru/blog/2011/07/30/air-child/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 11:53:40 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[Гон]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=547</guid>
		<description><![CDATA[Или такой вот вопрос. В аэропортах, как многим, наверное, известно, есть такие загончики, как для скота, куда сгоняют курильщиков. И они там курят, а другие на них через стекло смотрят, как вообще на нелюдей каких-то. А в самом самолёте курить или вообще нельзя, или для этого отдельный салон, отгороженный от нормальных людей. Интересует следующая вещь: [...]]]></description>
			<content:encoded><![CDATA[<p>Или такой вот вопрос.</p>
<p>В аэропортах, как многим, наверное, известно, есть такие загончики, как для скота, куда сгоняют курильщиков. И они там курят, а другие на них через стекло смотрят, как вообще на нелюдей каких-то.</p>
<p>А в самом самолёте курить или вообще нельзя, или для этого отдельный салон, отгороженный от нормальных людей.</p>
<p>Интересует следующая вещь: почему курильщиков от остальных изолируют, а родителей с малолетними детьми нет? От них же вреда для здоровья окружающих несравнимо больше.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/07/30/air-child/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/07/30/air-child/</feedburner:origLink></item>
		<item>
		<title>PHP 5.4 alpha</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/te3g_ZqSuFg/</link>
		<comments>http://blgo.ru/blog/2011/07/03/php54a/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 16:17:49 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[dtrace]]></category>
		<category><![CDATA[traits]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=543</guid>
		<description><![CDATA[Итак, потрясшая весь мир радостная весть &#8211; вышла альфа PHP 5.4. Такими темпами есть надежда, что не пройдёт и десяти лет, как появится стабильный релиз. Данная новость обсосана уже множество раз и ещё раз повторять это смысла никакого нет. Но так, как я давно ничего не писал в этот бложик, нужно начать возвращение хоть с [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, потрясшая весь мир радостная весть &#8211; вышла альфа PHP 5.4. Такими темпами есть надежда, что не пройдёт и десяти лет, как появится стабильный релиз.</p>
<p>Данная новость обсосана уже множество раз и ещё раз повторять это смысла никакого нет. Но так, как я давно ничего не писал в этот бложик, нужно начать возвращение хоть с чего-нибудь.</p>
<p>Какие же прелести нас ожидают:</p>
<p>1. <a href="https://wiki.php.net/rfc/traits"><b>Traits</b></a>: сколько бы задроты &laquo;чистого ООП&raquo; не гневались, а вещь в умелых и умеренных руках вполне себе полезная. Реализация опять может вызывать вопросы, но всё же лучше, чем ничего.</p>
<p>2. <a href="https://wiki.php.net/rfc/functionarraydereferencing"><b>Array dereferencing</b></a>: всего пяток лет обещаний и вот оно. Вот так вот уже было можно: <code>func()->method()</code>, вот так тоже: <code>$A['var']</code>, и даже так: <code>$A['var']()</code>. Теперь можно так: <code>func()['var]</code>. Ещё пара нововведений и пых обгонит питон по языковым плюшкам.</p>
<p>Единственно может напрягать тот факт, что обязательно найдётся большое количество индивидуумов, которые начнут делать следующее:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> get<span style="color: #009900;">&#40;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Дикий запрос в базу</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Имя: '</span><span style="color: #339933;">.</span>get<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Фамилия: '</span><span style="color: #339933;">.</span>get<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'surname'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Вся фигня: '</span><span style="color: #339933;">.</span>get<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fignya'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ведь зачем вводить промежуточную переменную, когда можно без неё. Синтаксический сахар же.<br />
Впрочем, это уже проблемы этих индивидуумов.</p>
<p>3. <a href="https://wiki.php.net/rfc/dtrace"><b>Поддержка DTrace</b></a>: несомненно отличнейшая вещь, которая сделает нашу жизнь намного лучше.<br />
А может и не сделает. Я, если честно, вообще не знаю, что это такое.</p>
<p>Но возможность писать вместе с PHP на языке D, который совсем не тот язык D, а совсем другой язык D, конечно доставляет.</p>
<p>4. Чистка мусора: register_globals, allow_call_time_pass_reference, register_long_arrays, session_is_regisitered(), session_registered(), session_unregister().</p>
<p>Давно пора, но единственно печалит удаление <code>allow_call_time_pass_reference</code>. Это, когда разрешается по старинке решать в момент вызова как передавать аргумент в функцию: по ссылке или по значению. Без включения этой настройки тоже разрешается, но интерпретатор начинает бурчать себе под нос про <code>DEPRECATED</code>.</p>
<p>Мне оно не нужно, но иногда приходится в чём то старом копаться. Что характерно, все остальные хреновены (register_globals, long_arrays) давно не встречаются. И в случае чего легко эмулируются. А time pass reference вылезает зачастую и так просто от него не избавишься.</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/07/03/php54a/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/07/03/php54a/</feedburner:origLink></item>
		<item>
		<title>Сисадмин (или помощник), СПб, 20 000 руб</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/EtkNJ4c1_zE/</link>
		<comments>http://blgo.ru/blog/2011/05/11/sysadmin-vacancy/#comments</comments>
		<pubDate>Wed, 11 May 2011 08:32:44 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[Вакансии]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=534</guid>
		<description><![CDATA[Спасибо, вакансия закрыта Так, а теперь нам нужен сисадмин. В молодую, амбициозную и все дела далее по шаблону компанию требуется системный администратор на полный рабочий день. Требования Unix, nginx, apache, php, mysql и всё сопутствующее с административной точки зрения DNS, DHCP и т.д. и т.п. Немного Windows PHP на уровне, чтобы хотя бы знать где [...]]]></description>
			<content:encoded><![CDATA[<p><b>Спасибо, вакансия закрыта</b></p>
<p>Так, а теперь нам нужен сисадмин.</p>
<p>В молодую, амбициозную и все дела далее по шаблону компанию требуется системный администратор на полный рабочий день.</p>
<h2>Требования</h2>
<ol>
<li>Unix, nginx, apache, php, mysql и всё сопутствующее с административной точки зрения</li>
<li>DNS, DHCP и т.д. и т.п.</li>
<li>Немного Windows</li>
<li>PHP на уровне, чтобы хотя бы знать где поменять параметры подключения к базе при переносе</li>
<li>&#8230;</li>
<li>Ну вы поняли&#8230;</li>
</ol>
<h2>Примеры задач на начальном этапе</h2>
<ol>
<li>Перенести сайт с виртуального хостинга к нам на сервер.</li>
<li>Перенести ещё 30 сайтов с виртуального хостинга к нам на сервер.</li>
<li>Сбегать за стремянкой и проверить почему не пингуется роутер спрятанный в потолочном перекрытии.</li>
<li>Разобраться почему вдруг отвалился сайт.</li>
<li>Ругаться с техподдержкой различных хостингов по телефону.</li>
<li>Перетащить провода в офисе так, чтобы не мешались под ногами.</li>
<li>Помочь девушке-менеджеру у которой завис комп.</li>
<li>Сбегать в праздник за пивасом, если больше некому.</li>
<li>Если что-то не получается, не бояться сказать об этом чётко, вместо того чтобы сидеть и тупить.</li>
</ol>
<h2>Карьерный рост</h2>
<p>Кроме множества рутины, есть и интересные проекты и сервера под них, требующие квалифицированного администрирования.<br />
Сейчас их поддерживают два человека, которым и без этого хватает дел.<br />
Если есть желание учиться и постепенно перенимать их обязанности, с соответствующим повышением зарплаты, то это только приветствуется.</p>
<h2>С нас</h2>
<ol>
<li>Двадцать тысяч рублей в месяц в начале.</li>
<li>Рабочее место на 40 часов в неделю, впрочем больше находиться на нём запрещать не будем.</li>
<li>Балкон, выходящий на Таврический сад.</li>
<li>Чай, кофе, сырные палочки, пицца.</li>
<li>Молодой, разнополый коллектив.</li>
<li>Дартс и другие безделушки для тех, кто сделал все дела на сегодня.</li>
<li>Люди, готовые научить тому, что знают, если есть желание учиться.</li>
</ol>
<h2>Контакты</h2>
<p><a href="mailto:go@blgo.ru">go@blgo.ru</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/05/11/sysadmin-vacancy/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/05/11/sysadmin-vacancy/</feedburner:origLink></item>
		<item>
		<title>goDB + PostgreSQL</title>
		<link>http://feedproxy.google.com/~r/blgo/~3/r3NKD6sbMcM/</link>
		<comments>http://blgo.ru/blog/2011/04/03/godb-postgresql/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 09:18:42 +0000</pubDate>
		<dc:creator>vasa_c</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[godb]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://blgo.ru/blog/?p=527</guid>
		<description><![CDATA[А в это время goDB продолжает развиваться благодаря волонтёрам со всего мира. Вот и Алексей Полев aka dallone запилил адаптер для Постгри. Ура Далону!]]></description>
			<content:encoded><![CDATA[<p>А в это время goDB продолжает развиваться благодаря волонтёрам со всего мира.<br />
Вот и <a href="http://pyha.ru/forum/profile/283">Алексей Полев aka dallone</a> запилил <a href="http://code.google.com/p/go-db/wiki/Adapters_pgsql">адаптер для Постгри</a>.<br />
Ура Далону!</p>
]]></content:encoded>
			<wfw:commentRss>http://blgo.ru/blog/2011/04/03/godb-postgresql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blgo.ru/blog/2011/04/03/godb-postgresql/</feedburner:origLink></item>
	</channel>
</rss>

