<?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>Блог Джина Грина &#187; Работа</title>
	<atom:link href="http://blog.genegreen.ru/tag/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.genegreen.ru</link>
	<description></description>
	<lastBuildDate>Sat, 24 Dec 2011 19:37:20 +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>Windows</title>
		<link>http://blog.genegreen.ru/2011/09/20/windows/</link>
		<comments>http://blog.genegreen.ru/2011/09/20/windows/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 07:17:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows 7]]></category>
		<category><![CDATA[интерфейсы]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1921</guid>
		<description><![CDATA[Удивился, что многие не используют некоторые удобства виндового интерфейса, потому выкладываю несколько наиболее часто используемых мною. Например, в Folder Options → View можно включить Launch folder windows in a separate process, тогда при очередном зависании проводника при, скажем, копировании и &#8230; <a href="http://blog.genegreen.ru/2011/09/20/windows/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Удивился, что многие не используют некоторые удобства виндового интерфейса, потому выкладываю несколько наиболее часто используемых мною.</p>
<p>Например, в Folder Options → View можно включить Launch folder windows in a separate process, тогда при очередном зависании проводника при, скажем, копировании и последующем его жестоким убиванием не потеряются прочие окошки проводника.</p>
<p>Через Win+P можно быстро включить Presentation Mode, а Alt+P включает или отключает Preview Pane в проводнике.</p>
<p>Win+← и Win+→ даже при нескольких мониторах развернут окно на половину экрана, на котором оно находится. Shift+Win+← и Shift+Win+→ удобно перекидывают окно с монитора на монитор. Соответственно Win+↑ и Win+↓ делают maximize и minimize активного окна.</p>
<p>Если клацать по группе приложений в панели задач, удерживая Ctrl, то будут активироваться поочерёдно окна этой группы. Очень удобно для меня, так как я не люблю превью окон в таксбаре. А для группы активного окна через Win+T можно открыть список в панели задач.</p>
<p>Alt+Esc позволяет отправить окно на самый фон, при Alt+Tab оно после будет последним. А с шифтом поднимает окно с самого дна.</p>
<p>Где есть Tab — там есть Shift+Tab, где есть Alt+Tab — там есть Shift+Alt+Tab и так далее.</p>
<p>Ctrl+[scroll мыши] почти везде (в офисных приложениях, в браузерах, в IDE) изменяют масштабирование. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2011/09/20/windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>День кодера</title>
		<link>http://blog.genegreen.ru/2011/09/13/da-coderz-day/</link>
		<comments>http://blog.genegreen.ru/2011/09/13/da-coderz-day/#comments</comments>
		<pubDate>Tue, 13 Sep 2011 06:04:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1909</guid>
		<description><![CDATA[Йе-е-е-ей!]]></description>
			<content:encoded><![CDATA[<p>Йе-е-е-ей!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2011/09/13/da-coderz-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вкратце о CMS</title>
		<link>http://blog.genegreen.ru/2011/08/19/cms/</link>
		<comments>http://blog.genegreen.ru/2011/08/19/cms/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 16:02:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1888</guid>
		<description><![CDATA[Joomla — говно, WordPress — так себе (и даже иногда очень неплох), Drupal — рарвин.]]></description>
			<content:encoded><![CDATA[<p>Joomla — говно, WordPress — так себе (и даже иногда очень неплох), Drupal — рарвин.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2011/08/19/cms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>О примитивности мышления</title>
		<link>http://blog.genegreen.ru/2010/09/13/primitive-minds/</link>
		<comments>http://blog.genegreen.ru/2010/09/13/primitive-minds/#comments</comments>
		<pubDate>Mon, 13 Sep 2010 07:06:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[идиоты]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1690</guid>
		<description><![CDATA[Очень многие из посылки «работать в университете» делают вывод «быть преподавателем» и даже не понимают, что в вузах, как правило, примерно только тридцать процентов сотрудников являются преподавателями. Откуда это заблуждение?]]></description>
			<content:encoded><![CDATA[<p>Очень многие из посылки «работать в университете» делают вывод «быть преподавателем» и даже не понимают, что в вузах, как правило, примерно только тридцать процентов сотрудников являются преподавателями. Откуда это заблуждение?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/09/13/primitive-minds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>СИ</title>
		<link>http://blog.genegreen.ru/2010/09/02/si/</link>
		<comments>http://blog.genegreen.ru/2010/09/02/si/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 18:33:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[русский язык]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1670</guid>
		<description><![CDATA[Уже не первый год меня повсюду преследуют невежды, которые, по всей видимости, в школе как-то пропустили изучение кратных и дольных приставок и их значений на уроках физики. Они с пеной у рта доказывают, что значение приставки «кило-» может в зависимости &#8230; <a href="http://blog.genegreen.ru/2010/09/02/si/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Уже не первый год меня повсюду преследуют невежды, которые, по всей видимости, в школе как-то пропустили изучение кратных и дольных приставок и их значений на уроках физики. Они с пеной у рта доказывают, что значение приставки «кило-» может в зависимости от измеряемой величины менять своё количественное значение. Да, некогда измерение объёма оперативной памяти в виду очевидных причин, связанных с адресацией и разрядностью шины, оправдывало использование степеней двойки, но в те времена не было крайне необходимым вводить двоичные кратные приставки. Сейчас измерять объём данных не в десятичных приставках не только не имеет смысла, но и вводит в заблуждение; например, производители носителей информации честно указывают объём в мегабайтах (1000 * 1000 байтов), в гигабайтах (1000 * 1000 * 1000 байтов) и терабайтах (1000 * 1000 * 1000 * 1000 байтов), а по неизвестным мне причинам в операционных системах от Билла Гейтса объёмы тех же носителей отображаются в мебибайтах (1024 * 1024 байтов), в гибибайтах (1024 * 1024 * 1024 байтов) и тебибайтах (1024 * 1024 * 1024 * 1024 байтов) соответственно, при том используют неправильные сокращения для них (МБ вместо МиБ, ГБ вместо ГиБ, ТБ вместо ТиБ).</p>
<p>Поимейте же хоть толику уважения к международной системе единиц (СИ)!</p>
<p>P.S. Слово «байт» тоже уже давно вошло в повседневный обиход и хорошо уживается в русском языке, потому, я уверен, правильно говорить: «Триста килобайтов исходников» (неправильно: триста килобайт), — как и правильно говорить: «Триста граммов колбасы» (неправильно: триста грамм).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/09/02/si/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>О русском духе</title>
		<link>http://blog.genegreen.ru/2010/08/12/russian-spirit/</link>
		<comments>http://blog.genegreen.ru/2010/08/12/russian-spirit/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 06:39:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[лень]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[русские]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1652</guid>
		<description><![CDATA[Вчера начала капать вода с внутреннего блока сплит-системы, то бишь, по всей видимости, забился выходящий на улицу дренаж и наполнилась дренажная ванночка. Мысль первая: вызвать специалистов, чтоб осуществили чистку блоков и вообще ТО. Из пяти найденных номеров по трём не &#8230; <a href="http://blog.genegreen.ru/2010/08/12/russian-spirit/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Вчера начала капать вода с внутреннего блока сплит-системы, то бишь, по всей видимости, забился выходящий на улицу дренаж и наполнилась дренажная ванночка. Мысль первая: вызвать специалистов, чтоб осуществили чистку блоков и вообще ТО. Из пяти найденных номеров по трём не подняли трубку (семь вечера было), а по двум оставшимся отказались (монтаж больше денег приносит, чем ТО). Это проявление русского духа номер один. В жаре сидеть не хочется, лужи на полу из-за описанной проблемы тоже не хочется, потому с помощью двух метров экранированной витой пары и какой-то там матери засор в дренаже мною успешно удалён, а удовлетворительная работоспособность системы восстановлена. Это проявление русского духа номер два.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/08/12/russian-spirit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Курсоры в рекурсивных хранимых процедурах MySQL</title>
		<link>http://blog.genegreen.ru/2010/08/11/cursor-recursive-sp-mysql/</link>
		<comments>http://blog.genegreen.ru/2010/08/11/cursor-recursive-sp-mysql/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 12:40:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[stored routines]]></category>
		<category><![CDATA[маразм]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1640</guid>
		<description><![CDATA[Захотелось вот сделать рекурсивную процедуру, которая возвращала бы все узлы дерева, хранящегося в таблице вида tree_container(node_id, parent_id). Первым на ум приходит процедура getNodes(family_name varchar(255), node_id int default null), на входе в процедуру family_name для определения корневого узла из служебной таблицы &#8230; <a href="http://blog.genegreen.ru/2010/08/11/cursor-recursive-sp-mysql/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Захотелось вот сделать рекурсивную процедуру, которая возвращала бы все узлы дерева, хранящегося в таблице вида <code>tree_container(node_id, parent_id)</code>. Первым на ум приходит процедура <code>getNodes(family_name varchar(255), node_id int default null)</code>, на входе в процедуру <code>family_name</code> для определения корневого узла из служебной таблицы и <code>node_id</code> для рекурсии, которая выглядит примерно так:<br />
<code>BEGIN<br />
&nbsp;&nbsp;declare root_id int;<br />
&nbsp;&nbsp;declare t_node int;<br />
&nbsp;&nbsp;declare done int default 0;<br />
&nbsp;&nbsp;declare cur cursor for<br />
&nbsp;&nbsp;select tc.node_id from tree_container tc<br />
&nbsp;&nbsp;declare cur cursor for<br />
&nbsp;&nbsp;&nbsp;&nbsp;select tc.node_id from tree_container tc<br />
&nbsp;&nbsp;&nbsp;&nbsp;where tc.parent_id = node_id;<br />
&nbsp;&nbsp;declare continue handler for not found set done = 1;<br />
&nbsp;&nbsp;set @@session.max_sp_recursion_depth = 255;<br />
&nbsp;&nbsp;create temporary table if not exists tmp_nodes(node_id int);<br />
&nbsp;&nbsp;if (node_id is null) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;select tf.root_node into root_id from tree_families tf where tf.family_name = family_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;insert into tmp_nodes(node_id) values (root_id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;call getNodes(family_name, root_id);<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;open cur;<br />
&nbsp;&nbsp;&nbsp;&nbsp;nodes: loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fetch cur into t_node;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if done = 1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leave nodes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end if;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert into tmp_nodes(node_id) values (t_node);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call getNodes(family_name, t_node);<br />
&nbsp;&nbsp;&nbsp;&nbsp;end loop nodes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;close cur;<br />
&nbsp;&nbsp;end if;<br />
&nbsp;&nbsp;select * from tmp_nodes;<br />
&nbsp;&nbsp;drop table tmp_nodes;<br />
END</code></p>
<p>Вот ведь хорошо же всё, ан нет! Оказывается, при входе в рекурсию новой именной облатси для курсоров не создаётся, а <code>open cur</code> в рекурсивном вызове закрывает курсор породившей процедуры, поэтому такая процедура возвращает только по одному «левому» (который первым в выборке окажется) элементу на каждом уровне (если самая «левая» ветка проходит через все уровни, конечно же) вложенности дерева.</p>
<p>В итоге пришлось реализовывать процедуру <code>getNodes(family_name varchar(255), in_cnt int)</code> весьма неэлегантным методом с помощью двух временных таблиц, отказавшись от курсоров в пользу подсчёта количества элементов в одной из этих таблиц:<br />
<code>BEGIN<br />
&nbsp;&nbsp;declare root_id int;<br />
&nbsp;&nbsp;declare t_node int;<br />
&nbsp;&nbsp;declare cnt int;<br />
&nbsp;&nbsp;set @@session.max_sp_recursion_depth = 255;<br />
&nbsp;&nbsp;create temporary table if not exists tmp_nodes(node_id int, primary key(node_id));<br />
&nbsp;&nbsp;create temporary table if not exists tmp_nodes_sub(node_id int, primary key(node_id));<br />
&nbsp;&nbsp;if (in_cnt = 0) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;select tf.root_node into root_id from tree_families tf where tf.family_name = family_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;replace into tmp_nodes(node_id) values (root_id);<br />
&nbsp;&nbsp;&nbsp;&nbsp;call getNodes(family_name, 1);<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;replace into tmp_nodes_sub(node_id) select tc.node_id from tree_container tc where tc.parent_id in (select node_id from tmp_nodes);<br />
&nbsp;&nbsp;&nbsp;&nbsp;replace into tmp_nodes(node_id) select node_id from tmp_nodes_sub;<br />
&nbsp;&nbsp;&nbsp;&nbsp;select count(*) into cnt from tmp_nodes;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (cnt <> in_cnt) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call getNodes(family_name, cnt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;end if;<br />
&nbsp;&nbsp;end if;<br />
&nbsp;&nbsp;drop table tmp_nodes_sub;<br />
&nbsp;&nbsp;select * from tmp_nodes<br />
&nbsp;&nbsp;drop table tmp_nodes;<br />
END</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/08/11/cursor-recursive-sp-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL</title>
		<link>http://blog.genegreen.ru/2010/06/29/sql/</link>
		<comments>http://blog.genegreen.ru/2010/06/29/sql/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 12:01:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[haters gonna hate]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1624</guid>
		<description><![CDATA[Всех, произносящих аббревиатуру SQL, как «сиквел» (sequel), нужно в срочном порядке отсылать в концлагеря и на курсы произношения английских букв. Вместе с ними наказывать необходимо и тех, кто произносит такие жуткие вещи, как «май сиквел» и «мускул», вместо «my S-Q-L». &#8230; <a href="http://blog.genegreen.ru/2010/06/29/sql/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Всех, произносящих аббревиатуру <code>SQL</code>, как «сиквел» (sequel), нужно в срочном порядке отсылать в концлагеря и на курсы произношения английских букв. Вместе с ними наказывать необходимо и тех, кто произносит такие жуткие вещи, как «май сиквел» и «мускул», вместо «my S-Q-L». Ну и на курсы истории их направлять, конечно же, чтобы знали, что современный <code>SQL</code> не имеет практически ничего общего с мамонтами <code>SEQUEL</code> (который хоть и был предком <code>SQL</code>, но и являлся зарегистрированной торговой маркой фирмы Хоукер-Сиддли) и <code>SQUARE</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/06/29/sql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java at a terrible price</title>
		<link>http://blog.genegreen.ru/2010/06/26/java-at-a-terrible-price/</link>
		<comments>http://blog.genegreen.ru/2010/06/26/java-at-a-terrible-price/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 07:33:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[отдых]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>
		<category><![CDATA[юмор]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1612</guid>
		<description><![CDATA[Оригинал: вот.]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/KrfpnbGXL70&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KrfpnbGXL70&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>Оригинал: <a href="http://jz10.java.no/mediaplayer/JavaZoneTrailer.flv">вот</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/06/26/java-at-a-terrible-price/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://jz10.java.no/mediaplayer/JavaZoneTrailer.flv" length="24412390" type="video/x-flv" />
		</item>
		<item>
		<title>Office 2010</title>
		<link>http://blog.genegreen.ru/2010/05/11/office-2010/</link>
		<comments>http://blog.genegreen.ru/2010/05/11/office-2010/#comments</comments>
		<pubDate>Tue, 11 May 2010 05:00:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1573</guid>
		<description><![CDATA[Хотя никаких заметных функциональных нововведений в Excel 2010 (по сравнению с Excel 2007) я не заметил, но на многих операциях работать он стал гораздо шустрее.]]></description>
			<content:encoded><![CDATA[<p>Хотя никаких заметных функциональных нововведений в Excel 2010 (по сравнению с Excel 2007) я не заметил, но на многих операциях работать он стал гораздо шустрее.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/05/11/office-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Павловская</title>
		<link>http://blog.genegreen.ru/2010/03/29/pavlovskaya/</link>
		<comments>http://blog.genegreen.ru/2010/03/29/pavlovskaya/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 12:36:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[кубгу]]></category>
		<category><![CDATA[филиал]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1535</guid>
		<description><![CDATA[Несколько фоточек из славной станицы Павловской, в которой прошлой субботой успел обойти лишь один квартал. Интересные таблички с адресами внезапно обнаружились в станице Павловской: на пересечениях улиц указываются первый и последний номера до следующего пересечения улицы (то бишь на этой &#8230; <a href="http://blog.genegreen.ru/2010/03/29/pavlovskaya/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Несколько фоточек из славной станицы Павловской, в которой прошлой субботой успел обойти лишь один квартал.</p>
<p>Интересные таблички с адресами внезапно обнаружились в станице Павловской: на пересечениях улиц указываются первый и последний номера до следующего пересечения улицы (то бишь на этой стороне данного квартала), а также стрелкой — направление роста номеров.</p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl001.jpg"><img class="aligncenter size-full wp-image-1540" title="pavl001" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl001.jpg" alt="" width="640" height="480" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl002.jpg"><img class="aligncenter size-full wp-image-1541" title="pavl002" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl002.jpg" alt="" width="640" height="423" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl003.jpg"><img class="aligncenter size-full wp-image-1542" title="pavl003" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl003.jpg" alt="" width="640" height="404" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl004.jpg"><img class="aligncenter size-full wp-image-1543" title="pavl004" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl004.jpg" alt="" width="640" height="363" /></a>Правда, не везде ещё такие приятные и опрятные указатели.</p>
<div id="attachment_1545" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl005.jpg"><img class="size-full wp-image-1545" title="«Студия эльф красоты»" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl005.jpg" alt="" width="640" height="302" /></a><p class="wp-caption-text">«Студия эльф красоты»</p></div>
<p><span id="more-1535"></span><br />
Неработающий и работающий входы в филиал КубГУ в Павловской выглядят так:</p>
<div id="attachment_1546" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl006.jpg"><img class="size-full wp-image-1546" title="Неработающий вход" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl006.jpg" alt="" width="640" height="1587" /></a><p class="wp-caption-text">Неработающий вход</p></div>
<div id="attachment_1547" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl007.jpg"><img class="size-full wp-image-1547" title="Работающий вход" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl007.jpg" alt="" width="640" height="853" /></a><p class="wp-caption-text">Работающий вход</p></div>
<p>В их сортире писсуары стоят так, что, пытаясь воспользоваться левым, трёшься о стенку правым плечом, а пытаясь воспользоваться правым — трёшься левым.<br />
<div id="attachment_1552" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlsortier.jpg"><img src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlsortier.jpg" alt="" title="Сортир в филиале" width="640" height="432" class="size-full wp-image-1552" /></a><p class="wp-caption-text">Сортир в филиале</p></div></p>
<p>Пара приятных глазу зданий:</p>
<div id="attachment_1549" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl008.jpg"><img class="size-full wp-image-1549" title="Кондитерская «Братишка Джонни»" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl008.jpg" alt="" width="640" height="480" /></a><p class="wp-caption-text">Кондитерская «Братишка Джонни»</p></div>
<div id="attachment_1550" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl009.jpg"><img class="size-full wp-image-1550" title="Сдающееся в аренду здание, видимо бывшая пиццерия" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl009.jpg" alt="" width="640" height="383" /></a><p class="wp-caption-text">Сдающееся в аренду здание, видимо бывшая пиццерия</p></div>
<p>Ньюбайкеры ездят на «ашанбайках», олдбайкеры — на «аистах».<br />
<div id="attachment_1555" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlbike001.jpg"><img src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlbike001.jpg" alt="" title="Нубайкеры" width="640" height="374" class="size-full wp-image-1555" /></a><p class="wp-caption-text">Нубайкеры</p></div><br />
<div id="attachment_1556" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlbike002.jpg"><img src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavlbike002.jpg" alt="" title="Олдбайкер" width="640" height="334" class="size-full wp-image-1556" /></a><p class="wp-caption-text">Олдбайкер</p></div></p>
<p>Все дорожные знаки «Уступите дорогу», что я видел в станице, наклонены на угол от пяти до тридцати градусов.</p>
<p>В Павловской — за здоровый образ жизни и за жизнь без наркотиков, отчего молодёжь сходит с ума, что и отражено на нижеследующей картинке.<br />
<div id="attachment_1558" class="wp-caption aligncenter" style="width: 650px"><a href="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl010.jpg"><img src="http://blog.genegreen.ru/wp-content/uploads/2010/03/pavl010.jpg" alt="" title="Шизеющая молодёжь" width="640" height="480" class="size-full wp-image-1558" /></a><p class="wp-caption-text">Шизеющая молодёжь</p></div> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/03/29/pavlovskaya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Рустам Хусейнович</title>
		<link>http://blog.genegreen.ru/2010/03/11/roustam-hoeseynovich/</link>
		<comments>http://blog.genegreen.ru/2010/03/11/roustam-hoeseynovich/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 14:31:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[маразм]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1514</guid>
		<description><![CDATA[После одиннадцати лет найма студентов в качестве операторов в бесплатные классы доступа в интернет на такую должность наняли пятидесятивосьмилетнего Рустама Хусейновича.]]></description>
			<content:encoded><![CDATA[<p>После одиннадцати лет найма студентов в качестве операторов в бесплатные классы доступа в интернет на такую должность наняли пятидесятивосьмилетнего Рустама Хусейновича.</p>
<p style="text-align: center;"><img class="aligncenter" title="rh" src="http://blog.genegreen.ru/wp-content/uploads/2010/03/rh.jpg" alt="" width="640" height="410" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/03/11/roustam-hoeseynovich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Приказ</title>
		<link>http://blog.genegreen.ru/2010/02/26/order/</link>
		<comments>http://blog.genegreen.ru/2010/02/26/order/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 08:35:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[кубгу]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1477</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.genegreen.ru/wp-content/uploads/2010/02/order20100216123.png"><img class="aligncenter size-full wp-image-1478" title="order20100216123" src="http://blog.genegreen.ru/wp-content/uploads/2010/02/order20100216123.png" alt="" width="577" height="800" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/02/26/order/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Зачёты</title>
		<link>http://blog.genegreen.ru/2010/01/28/final-tests/</link>
		<comments>http://blog.genegreen.ru/2010/01/28/final-tests/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 06:21:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[преподавательское]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1457</guid>
		<description><![CDATA[Обратил внимание, что многие преподаватели в зачётных книжках в графу отметки пишут «зачёт» вместо «зачтено». Один и тот же преподаватель с большой вероятностью напишет «зачтено», если такая запись уже есть, тогда как в иных случаях обязательно пишет «зачёт».]]></description>
			<content:encoded><![CDATA[<p>Обратил внимание, что многие преподаватели в зачётных книжках в графу отметки пишут «зачёт» вместо «зачтено». Один и тот же преподаватель с большой вероятностью напишет «зачтено», если такая запись уже есть, тогда как в иных случаях обязательно пишет «зачёт».</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/01/28/final-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обновления и новости</title>
		<link>http://blog.genegreen.ru/2010/01/21/some-refreshments-n-news/</link>
		<comments>http://blog.genegreen.ru/2010/01/21/some-refreshments-n-news/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 08:40:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://blog.genegreen.ru/?p=1454</guid>
		<description><![CDATA[В связи с низкой производительностью сервера хостинга временно переехал на свой собственный сервер, заодно блог переехал с домена www.genegreen.ru на домен blog.genegreen.ru. По адресам http://genegreen.ru и http://www.genegreen.ru стоит корявый редирект на http://blog.genegreen.ru. Также были импортированы почти все записи из ЖЖ &#8230; <a href="http://blog.genegreen.ru/2010/01/21/some-refreshments-n-news/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>В связи с низкой производительностью сервера хостинга временно переехал на свой собственный сервер, заодно блог переехал с домена <a href="http://www.genegreen.ru">www.genegreen.ru</a> на домен <a href="http://blog.genegreen.ru">blog.genegreen.ru</a>. По адресам <a href="http://genegreen.ru">http://genegreen.ru</a> и <a href="http://www.genegreen.ru">http://www.genegreen.ru</a> стоит корявый редирект на <a href="http://blog.genegreen.ru">http://blog.genegreen.ru</a>. Также были импортированы почти все записи из ЖЖ в этот блог с октября 2004-го; те записи, что были под замком, стали запароленными постами. Далее, тему Journalist сменил на iBlog, вроде выглядит поприятнее. И ещё решил изменить поведение катов: теперь они не будут lj-cut&#8217;ами и станут ссылками на пост в моём блоге.</p>
<p>В связи с тем, что по работе приходится сталкиваться с разнообразными проблемами под различными ОС и в различных языках программирования, открыл ещё один блог (девблог) по адресу: <a href="http://dev.genegreen.ru/blog">http://dev.genegreen.ru/blog</a>. В нём будет собираться опыт и знания, которые, как правило, быстро забываются и на которые не хотелось бы многократно тратить время в англоязычном гугле. Будет ли кросспостинг в ЖЖ или в блог — пока не определился.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2010/01/21/some-refreshments-n-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Валидация адреса электронной почты</title>
		<link>http://blog.genegreen.ru/2009/11/14/email-validation/</link>
		<comments>http://blog.genegreen.ru/2009/11/14/email-validation/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 09:05:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=649</guid>
		<description><![CDATA[Александр Коблов подкинул ссылку на RFC&#8217;шное регулярное выражение для валидации email&#8217;ов. Знаю, что баян, но доставляет немало радости. (?:(?:rn)?[ t])*(?:(?:(?:[^()@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+&#124;Z&#124;(?=[["()@,;:\".[]]))&#124;&#187;(?:[^"r\]&#124;\.&#124;(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+&#124;Z&#124;(?=[["()@,;:\".[]]))&#124;&#187;(?:[^"r\]&#124;\.&#124;(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+&#124;Z&#124;(?=[["()@,;:\".[]]))&#124;[([^[]r\]&#124;\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+&#124;Z&#124;(?=[["()@,;:\".[]]))&#124;[([^[]r\]&#124;\.)*](?:(?:rn)?[ t])*))*&#124;(?:[^()@,;:\".[] 00-31]+(?:(?:(?:rn)?[ t])+&#124;Z&#124;(?=[["()@,;:\".[]]))&#124;&#187;(?:[^"r\]&#124;\.&#124;(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ &#8230; <a href="http://blog.genegreen.ru/2009/11/14/email-validation/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Александр Коблов подкинул <a href="http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html">ссылку</a> на RFC&#8217;шное регулярное выражение для валидации email&#8217;ов. Знаю, что баян, но доставляет немало радости.<br />
(?:(?:rn)?[ t])*(?:(?:(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*|(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)*<(?:(?:rn)?[ t])*(?:@(?:[^()<>@,;:\&#187;.[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*(?:,@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*)*:(?:(?:rn)?[ t])*)?(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*>(?:(?:rn)?[ t])*)|(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)*:(?:(?:rn)?[ t])*(?:(?:(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*|(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)*<(?:(?:rn)?[ t])*(?:@(?:[^()<>@,;:\&#187;.[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*(?:,@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*)*:(?:(?:rn)?[ t])*)?(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*>(?:(?:rn)?[ t])*)(?:,s*(?:(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*|(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)*<(?:(?:rn)?[ t])*(?:@(?:[^()<>@,;:\&#187;.[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*(?:,@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*)*:(?:(?:rn)?[ t])*)?(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|&#187;(?:[^"r\]|\.|(?:(?:rn)?[ t]))*&#187;(?:(?:rn)?[ t])*))*@(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*)(?:.(?:(?:rn)?[ t])*(?:[^()<>@,;:\".[]  00- 31]+(?:(?:(?:rn)?[ t])+|Z|(?=[["()<>@,;:\".[]]))|[([^[]r\]|\.)*](?:(?:rn)?[ t])*))*>(?:(?:rn)?[ t])*))*)?;s*)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/11/14/email-validation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работники школ</title>
		<link>http://blog.genegreen.ru/2009/11/10/school-idiots/</link>
		<comments>http://blog.genegreen.ru/2009/11/10/school-idiots/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 08:43:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=641</guid>
		<description><![CDATA[Кстати, вот несколько примеров из писем, присылаемых школами в техподдержку. Орфография полностью сохранена (слава copy-paste!), ненужные куски вырезаны и заменены многоточиями, мои комментарии написаны курсивом. — Хотим создать хостинг на сервере КРЦ. Ага, приезжайте и создавайте. — Мы скачали файл &#8230; <a href="http://blog.genegreen.ru/2009/11/10/school-idiots/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Кстати, вот несколько примеров из писем, присылаемых школами в техподдержку. Орфография полностью сохранена (слава copy-paste!), ненужные куски вырезаны и заменены многоточиями, мои комментарии написаны курсивом.</p>
<blockquote><p>— Хотим создать хостинг на сервере КРЦ.</p></blockquote>
<p><em>Ага, приезжайте и создавайте.</em></p>
<blockquote><p>— Мы скачали файл лицензий для контент-фильтра. Подскажите, каким архиватором он открывается. В школе лицензионный только arj.</p></blockquote>
<p><em>Ещё есть люди, которые пользуются arj?! А по расширению файла не вариант определить, какой архиватор необходимо использовать?<br />
</em></p>
<blockquote><p>— …просим вас предоставить пароль для просмотра статистики затрачевамого трафика в месяц…</p></blockquote>
<p><em>Затрачевамого? Чё-о-о?!</em></p>
<blockquote><p>— Уважаемая служба технической поддержки присланный вами пароль от носиться к…</p></blockquote>
<p><em>Вот как можно давать человеку учить детей, если он в слове «относится» делает две ошибки? (Да, слово написано раздельно и с мягким знаком).</em></p>
<blockquote><p>— Постоянно проподает связь с интернетом, пока не перезагрузиш модем. Модем как бы работает и статус мигает, но интернета нет.</p></blockquote>
<p><em>За «пропожу» интернета убивать, а за «перезагрузиш» — в колонию строгого режима на десять лет.</em></p>
<blockquote><p>— Звонили на горячий телефон – не было Интернет.</p></blockquote>
<p><em>Телефон был слишком горяч, трубку руками не взять!</em></p>
<p>P.S. Если когда и заговорю безграмотно — вы уж не обессудьте, ведь это не я виноват, а безмозглые работники школ да некоторые коллеги.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/11/10/school-idiots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ненависти псто</title>
		<link>http://blog.genegreen.ru/2009/11/09/rage-psto/</link>
		<comments>http://blog.genegreen.ru/2009/11/09/rage-psto/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 12:41:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Работа]]></category>
		<category><![CDATA[маразм]]></category>
		<category><![CDATA[политика]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=631</guid>
		<description><![CDATA[— Родина ждёт героев, а п… рожает дураков. Народное I. Есть ряд людей на работе моей, которых приходится видеть ежедневно и которые своим идиотизмом вызывают во мне такие приступы ненависти, что иной раз хочется уволиться и создать свою компанию со &#8230; <a href="http://blog.genegreen.ru/2009/11/09/rage-psto/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">— Родина ждёт героев, а п… рожает дураков.</p>
<p style="text-align: right;"><em>Народное</em></p>
<p style="text-align: left;">I. Есть ряд людей на работе моей, которых приходится видеть ежедневно и которые своим идиотизмом вызывают во мне такие приступы ненависти, что иной раз хочется уволиться и создать свою компанию со строгим интеллектуальным цензом. Где не будет идиотов, которые из утверждения «не сделал» каким-то образом строят следствие «не делал» и/или «не делаешь». Где не будет идиотов, которые для привлечения внимания в аське набирают, скажем, заглавную буковку «а» от десяти до пятидесяти раз. Где не будет идиотов, которые префиксы логинов называют логинами. И так далее…</p>
<p style="text-align: left;">II. Также подобный подход не помешал бы в политической жизни нашей страны. Например, разработать некоторый тест для оценки уровня интеллекта и политической грамотности, по результатам которого каждому гражданину давался бы соответствующий процент голоса. То бишь, если человек — идиот, то его голос, к примеру, имеет 1% силы, а разумный человек, разбирающийся в политике, имел бы голос 100% силы. Ибо тупая малолетка (но уже совершеннолетняя), писающая кипятком от Дома-2 и пьющая свою же мочу по умному совету кретина Малахова, не должна иметь такое же право голоса, как и, скажем, успешный студент-второкурсник какого-нибудь факультета управления, как и не должно быть такого голоса у дедушки, которой за несколько декад промывания мозга не устоял и всё-таки, ополоумев, поверил в возможность существования коммунизма в нашей стране. А то сейчас после таких избирателей, если верить в честность выборов, вон то малолетним после десяти вечера гулять запрещают, то кока-колу пить не дают.</p>
<p style="text-align: left;">III. Несколько меньше, но всё же вызывают ненависть та категория людей, которая, защищая Россию при основательной критике, что-то лопочет про красивую природу, как будто бы природа — заслуга страны.</p>
<p style="text-align: left;">IV. Дымовский Алексей Александрович. Если это не фейк, то этому пареньку стоило для начала научиться владеть русским языком, затем своё послание написать на бумаге и хорошенько его отрепетировать, а то создаётся впечатление, что перед камерой некий городской дурачок, стащивший милицейскую форму. С другой стороны, это его обращение абсолютно не имеет смысла, ибо ни одной фамилии не названо (кроме своей). Таким образом, он сам себе организовал увольнение, которое ублюдки повыше прикроют тем, что тот клеветал на нашу родную милицию. Плюс, это бурление говн в рунете, ведь точно так же забудут это видео, как и забыли ролик «Год молодёжи в России».</p>
<p style="text-align: left;">V. Ололо, а вы ещё не видели писем, которые присылают в техподдержку работники школ Краснодара и края. Такой безграмотности даже на самых тупых форумах не всегда найдёшь. И эти люди ещё учат детей, ох-ох-ох. Кстати, я жалею, что мне пришлось потратить 10 лет жизни в школе, которая меня мало чему вообще научила.</p>
<p style="text-align: left;">Ладно, на сегодня хватит ненависти.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/11/09/rage-psto/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Debian 5 &amp; Samba 3 &amp; Quotas</title>
		<link>http://blog.genegreen.ru/2009/11/03/debian-5-samba-3-quotas/</link>
		<comments>http://blog.genegreen.ru/2009/11/03/debian-5-samba-3-quotas/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 08:39:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[quota]]></category>
		<category><![CDATA[quotatool]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=589</guid>
		<description><![CDATA[Потребовалось настроить 30 тысяч «домашних» шар для виндовых пользователей в дисплейных классах. До этого использовалась Samba первой версии под ОС SunOS 5.8 (Solaris 8), шары которой никак не хотят работать из-под Windows Vista и Windows 7 (за декаду произошли серьёзные &#8230; <a href="http://blog.genegreen.ru/2009/11/03/debian-5-samba-3-quotas/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Потребовалось настроить 30 тысяч «домашних» шар для виндовых пользователей в дисплейных классах. До этого использовалась Samba первой версии под ОС SunOS 5.8 (Solaris 8), шары которой никак не хотят работать из-под Windows Vista и Windows 7 (за декаду произошли серьёзные изменении в аутентификации по SMB-протоколу). Так что было решено поднять это дело на пятом Debian с третьей Samba.</p>
<p>Установка Samba 3.</p>
<p>Устанавливается без каких-либо проблем:<br />
<code># aptitude install libcupsys2 samba samba-common</code></p>
<p>Конфиг (в стиле ini-файла) находится в <code>etc/samba/smb.conf</code>. По умолчанию есть раздел <code>[global]</code>, в котором настраиваются общие сведения о самбе и её функционировании: <code>workgroup</code> — имя рабочей группы или домена, в которой будет сервер; <code>netbios name</code>; <code>log file</code> — путь к лог-файлу; <code>host allow</code> — начала ip-адресов, с которых разрешён доступ к шарам; и т.д.</p>
<p>Для каждого пользователя заводится домашний каталог:<br />
<code># mkdir -p /home/users/usr0001</code><br />
Затем добавляется системный пользователь:<br />
<code># useradd --gid users --home-dir /home/users/usr0001 --password pwd0001 -m usr0001</code><br />
Этот пользователь добавляется к пользователям самбы:<br />
<code># (echo pwd0001;echo pwd0001) | smbpasswd -s -a usr0001</code><br />
Если в <code>[global]</code> прописаны строки:<br />
<code>passwd program = /usr/bin/passwd %u<br />
passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .</code><br />
то при добавлении пользователя в самбу автоматически сменится и его системный пароль.</p>
<p>И сразу же делаем пользователя владельцем своего каталога:<br />
<code># chown usr0001 /home/users/usr0001</code></p>
<p>Доступ пользователей к домашним папкам описывается секцией <code>[homes]</code> конфига:<br />
<code>[homes]<br />
comment = Home Directories</code> # комментарий шары<br />
<code>browseable = no<br />
read only = no</code> # только чтение?<br />
<code>create mask = 0775</code> # автоматический chmod на создаваемые юзером файлы<br />
<code>directory mask = 0775</code> # автоматический chmod на создаваемые юзером папки<br />
<code>valid users = %S</code> # допустимые пользователи — системные</p>
<p>Также необходима возможность отдельному пользователю просматривать все шары. Секция <code>[users]</codes> выглядит следующим образом:<br />
<code>[users]<br />
comment = Home Directories (for opers)<br />
path = /home/users<br />
read only = yes<br />
valid users = operator</code><br />
Аналогично выше описанным пользователям заводится системный пользователь <code>operator</code>, который имеет доступ на чтение ко всем пользовательским папкам.</p>
<p>Установка квот</p>
<p>Каждому пользователю выделяется квота дискового пространства. Выделять квоту на группу <code>users</code>, к которой относятся все <code>usrXXXX</code>, невыгодно, так как а) проблематично определить, кто именно израсходовал всю квоту; б) квота одна на всех.<br />
В конфиге файловой системы <code>/etc/fstab</code> в колонку<br />
<options> к нужному разделу доавляем <code>usrquota</code>, то есть, к примеру, было:<br />
<code>/dev/sda1       /               ext3    errors=remount-ro 0       1</code><br />
стало:<br />
<code>/dev/sda1       /               ext3    errors=remount-ro,usrquota 0       1</code></p>
<p>В данном случае у меня квота распространяется на раздел <code>/</code>, т.к. в нём располагается <code>/home/users</code>.<br />
Теперь необходимо перемонтировать раздел:<br />
<code># mount -o remount,usrquota /home</code><br />
Для нормальной работы загрузчика необходимо поставить модуль <code>quota_v2</code>:<br />
<code># modprobe quota_v2<br />
# echo 'quota_v2' >> /etc/modules</code><br />
Далее необходимо создать файл для хранения пользовательских квот:<br />
<code># touch /aquota.user<br />
# chmod 600 /aquota.user</code><br />
<i>Примечание.</i> Если бы речь шла о разделе <code>/home</code>, то необходимо было бы создать файл <code>/home/aquota.user</code>.<br />
Наконец ставим <code>quota</code> и <code>quotatools</code>:<br />
<code># apt-get install quota quotatools</code><br />
После перезагрузки (или выполнения <code># quotacheck -vagum</code>) квоты для пользователей выставляются следующим образом:<br />
<code># quotatool -b -u usr0001 -l 100MB -q 100MB /</code>,<br />
где <code>-l</code> указывает жёсткий лимит, а <code>-q</code> — «мягкий».</p>
<p>Утилита <code>repquota</code> позволяет просмотреть использование квот пользователями, а для построения файла с топом самых использующих можно воспользоваться командой:<br />
<code>repquota -suv / | grep usr | sort -k3 -nr > /home/users/stat_usage.txt</code><br />
(<code>grep usr</code> оставит в топе лишь тех пользователей, которые содержат <code>usr</code> в своём имени).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/11/03/debian-5-samba-3-quotas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FF</title>
		<link>http://blog.genegreen.ru/2009/07/29/ff/</link>
		<comments>http://blog.genegreen.ru/2009/07/29/ff/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 06:03:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=442</guid>
		<description><![CDATA[Странно, но при включённом Firebug в Mozilla Firefox на страничках перестаёт работать джаваскриптный window.open(&#8230;).]]></description>
			<content:encoded><![CDATA[<p>Странно, но при включённом Firebug в Mozilla Firefox на страничках перестаёт работать джаваскриптный window.open(&#8230;).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/07/29/ff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Афропати</title>
		<link>http://blog.genegreen.ru/2009/05/25/afro-party/</link>
		<comments>http://blog.genegreen.ru/2009/05/25/afro-party/#comments</comments>
		<pubDate>Mon, 25 May 2009 05:21:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[отдых]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>
		<category><![CDATA[фото]]></category>
		<category><![CDATA[юмор]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=360</guid>
		<description><![CDATA[Афропати с прошлой недели.]]></description>
			<content:encoded><![CDATA[<p>Афропати с прошлой недели.</p>
<p><center><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0560.jpg" rel="lightbox[pics360]" title="img_0560"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0560.jpg" alt="img_0560" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0569.jpg" rel="lightbox[pics360]" title="img_0569"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0569.jpg" alt="img_0569" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0577.jpg" rel="lightbox[pics360]" title="img_0577"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0577.jpg" alt="img_0577" /></a></p>
<p><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0579.jpg" rel="lightbox[pics360]" title="img_0579"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0579.jpg" alt="img_0579" /></a></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/05/25/afro-party/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LaTex</title>
		<link>http://blog.genegreen.ru/2009/05/19/latex-2/</link>
		<comments>http://blog.genegreen.ru/2009/05/19/latex-2/#comments</comments>
		<pubDate>Tue, 19 May 2009 13:51:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[latex]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[учёба]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=358</guid>
		<description><![CDATA[Небольшой levelup&#8217;чик по работе с LaTeX заработал сегодня, спешу поделиться. 1. Поля В LaTeX обычно возникают проблемы с полями, раньше я использовал такие конструкции в преамбуле: documentclass[a4paper,12pt]{article} addtolength{evensidemargin}{-1cm} addtolength{oddsidemargin}{-1cm} addtolength{textwidth}{2cm} addtolength{textheight}{4cm} addtolength{topmargin}{-2.5cm} addtolength{bottommargin}{-1.0cm} Оказывается, есть полезный пакет geometry, позволяющий по-человечески &#8230; <a href="http://blog.genegreen.ru/2009/05/19/latex-2/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Небольшой levelup&#8217;чик по работе с LaTeX заработал сегодня, спешу поделиться.</p>
<p>1. Поля<br />
В LaTeX обычно возникают проблемы с полями, раньше я использовал такие конструкции в преамбуле:<br />
<code>documentclass[a4paper,12pt]{article}<br />
addtolength{evensidemargin}{-1cm}<br />
addtolength{oddsidemargin}{-1cm}<br />
addtolength{textwidth}{2cm}<br />
addtolength{textheight}{4cm}<br />
addtolength{topmargin}{-2.5cm}<br />
addtolength{bottommargin}{-1.0cm}</code></p>
<p>Оказывается, есть полезный пакет <code>geometry</code>, позволяющий по-человечески задать верхнее, нижнее, левое и правое поля.<br />
<code>documentclass[a4paper,12pt]{article}<br />
usepackage{geometry}<br />
geometry{top=2.0cm}<br />
geometry{bottom=1.75cm}<br />
geometry{left=3.0cm}<br />
geometry{right=1.5cm}</code></p>
<p>2. Межстрочный интервал<br />
Раньше для установки полуторного интервала (до сих пор не могу понять, почему он так нравится российскому научному обществу) я использовал команду<br />
<code>renewcommand{baselinestretch}{1.5}</code><br />
которая работает не совсем так, как хочется: к заголовкам добавляет ненужные отступы.<br />
Решение — вместо приведённой строчки использовать эту:<br />
<code>usepackage[onehalfspacing]{setspace}</code></p>
<p>3. Картинки<br />
Большое количество картинок, каждая из которых в окружении <code>figure</code>, не хотело съедать страницы, чтобы следующая после них глава шла в выводе после них (нужно было список литературы отправить строго после всех картинок-приложений). Решение: использовать<br />
<code>begin{figure}[htbp!]</code><br />
вместо<br />
<code>begin{figure}[ht]</code> или <code>begin{figure}[ht!]</code>.</p>
<p>4. Автоматическое содержание<br />
Автоматом созданное содержание с помощью <code>tableofcontents</code> каждой главе, начатую с <code>section{}</code> назначает номер и отображает его в оглавлении. В России не принято нумеровать содержание, введение, заключение и список литературы. Для отключения нумерации можно использовать<br />
<code>section*{}</code><br />
а для включения этого вхождения в содержание сразу после предыдущей команды можно использовать эту:<br />
<code>addcontentsline{toc}{section}{}</code></p>
<p>5. Нумерация<br />
В России принято считать титульный лист первой страницей (без указания номера) и нумеровать все остальные, считая содержание — второй. В LaTeX сделать титульник по ГОСТу практически невозможно, поэтому легче всего его набрать в каком-нибудь Word&#8217;е, а нумерацию в документе без него начать со второй страницы следующей командой<br />
<code>setcounter{page}{2}</code><br />
стоящей сразу после<br />
<code>begin{document}<br />
large <em>% для 14 размера шрифта</em></code></p>
<p>6. Бонус<br />
Команда<br />
<code>addcontentsline{toc}{section}{Список литературы}</code><br />
давала неправильный номер страницы в оглавнии, будучи использованной перед, в начале или в конце окружения<br />
<code>begin{thebibliography}{999}<br />
...<br />
end{thebibliography}</code><br />
зато лихо заработала после него (перед <code>end{document}</code>).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/05/19/latex-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Правила жизни</title>
		<link>http://blog.genegreen.ru/2009/05/14/life-rules/</link>
		<comments>http://blog.genegreen.ru/2009/05/14/life-rules/#comments</comments>
		<pubDate>Thu, 14 May 2009 11:01:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>
		<category><![CDATA[юмор]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=324</guid>
		<description><![CDATA[Забавные пункты, в некоторых иной найдёт смысл. ;) Несколько принципов для того, чтобы жить счастливо и иметь деньги: 1. Надо выпивать много. Конечно не очень много, но так, чтоб достаточно. Когда человек выпивает у него все правильно становится с головой. &#8230; <a href="http://blog.genegreen.ru/2009/05/14/life-rules/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Забавные пункты, в некоторых иной найдёт смысл. ;)</p>
<blockquote><p>Несколько принципов для того, чтобы жить счастливо и иметь деньги:</p>
<p>1. Надо выпивать много.<br />
Конечно не очень много, но так, чтоб достаточно. Когда человек выпивает у него все правильно становится с<br />
головой. Он начинает понимать, что на самом деле ему не нужна всякая разная поебота типа домашнего кинотеатра и мерседеса. Через это резко уменьшаются проблемы и образуется лишнее бабло. От выпивания, тоже, конечно бывают проблемы. Но они меньше. Да и лекарство же должно быть горьким :)</p>
<p>Принцип этот действует по одной простой причине &#8212; алкоголь разрушает мозг &#8212; это факт. Но разрушает он его избирательно. Первым делом поражаются центры отвечающие за понтогонство, тягу к евротичности и модности. Живой пример полного разрушения этих центров любой бомж &#8212; ему кашемировое пальто не нужно, ему нужны только практичные и недорогие вещи. Но бомж &#8212; это если выпивать очень много. Если выпивать просто много, то процес разрушения можно конролировать и ограничиться моментом когда мыться каждый день нужно обязательно, а вот часы Патек Филип и костюм от Кардена совершенно не усрались. Потому что часы на руке мешаются, а в футболке ходить удобней, да и стирать ее проще.</p>
<p><span id="more-324"></span></p>
<p>2. Без острой необходимости не посещать заведения общепита где нельзя плевать на пол.<br />
Заходишь в кабак, смотришь, можно ли здесь плевать на пол. В 99% заведений нельзя. Значит в них не ходишь. Посещаешь только правильные заведения, в Питере это &#8212; Курочка гриль, Голубой гондон, Столовая на тележной&#8230; В них пропить и прожрать больше 300-400 рублей за раз невозможно физически. Даже если взять литр водки и много-много еды. Через это образуется душевное спокойствие, правильный отдых и лишнеее бабло.</p>
<p>Кстати, если на пол плевать можно, это совсем не значит, что туда плевать нужно. Если человек не плюет на пол там, где плевать нельзя, то это вполне обычно. А если человек не плюет на пол там, где плевать можно, значит этот человек крайне культурный и правильно воспитанный. С таким человеком всегда приятно выпить. В заведение где собираются такие люди грех не зайти.</p>
<p>3. Не ездить на такси.<br />
Этот принцип выработался недавно, но он оказался крайне правильным. Раньше как &#8212; едешь на машине, выпиваешь, машину бросаешь, домой на тачке, утром на тачке за машиной, потом едешь и стремаешься, поймают ли гаишники. Теперь так &#8212; едешь на мопеде, выпиваешь, едешь на мопеде домой, утром похмеляешься и опять едешь на мопеде. Бензина 2,5 литра на сотню и никаких такси.</p>
<p>4. Никогда ничего не покупать в магазинах где нет прилавка.<br />
Прилавок &#8212; это великое изобретение коммунистов для экономии народных денег. А магазин самообслуживания &#8212; это буржуйское обувалово. Ведь не зря они выдумали эти супермаркеты. Буржуи, в своей массе, значительно умнее нас. Чтобы это понять, достаточно посмотреть на то, что делаем мы и они. Например на Жигули и Форд. И если они сделали огромные магазины, где товар пинается ногами, воруется, разбивается неловкими толстыми американскими домохозяйками, значит это всеравно очень выгодно. Человек в нормальном магазине подходит к прилавку, стоит в очереди, смотрит, покупает, что ему нужно &#8212; бутылку водки, хлеб, банку тущенки &#8212; идет домой счастливый. Стоимость покупок сто рублей. Человек идет в супермаркет, это помацал, то поглядел, тут распродажа, там упаковочка красивая, тележку к кассе подкатывает &#8212; стоимость покупок сто баксов. Кажется, что забил холодильник на неделю. Тут тоже обман. Холодильник пустой &#8212; выпил, лег спать. Холодильник забит &#8212; начинаешь жрать от безделья, через это ожирение и прожиралово бабла. Пару дней проходит, опять бежишь в супермаркет.</p>
<p>5. С женской дуростью бороться рублем.<br />
Девушки они какие &#8212; ой надо купить это, ой надо то, у всех есть, а у нас нет, одеть нечего, ребенку надо то, ребенку надо се&#8230; У большинства женщин в голове установка: &#171;я хочу чтобы моему ребенку было все самое лучшее&#187;. Я раньше думал, что в этой фразе ключевое слово &#171;самое лучшее&#187;. С годами понял, что ошибался. Для женщин здесь ключевое слов &#171;все&#187;. Им нужно просто все. Поэтому, единственный способ с этим бороться заставить женщину саму оплачивать свои глупости. Во-первых, на ее зарплату глупостей много не накупишь, а во-вторых, когда деньги зарабатываешь трудом, а не берешь в тумбочке, глупости очень быстро рассасываются. Любовь чувство взаимное и подтверждается оно прежде всего реальными делами, а не шептанием ласковых слов на ушко. И если ты работаешь, то пусть и женщина тоже работает, а не сидит у окна, в ожидании любимого, с накрашенными ногтями. Тем более, что женщны так долго боролись за равные права с мужчинами.</p>
<p>6. Никогда не ездить за границу.<br />
Родину надо любить. А заграницей живут враги. Делать там нехуй. Последний раз поехал в Финляндию, с другом, типа на рождество &#8212; ведь идиотская мысль. Во-первых, рождество это идиотизм, во-вторых Финляндия. Приехали, как ознакомиться с культурой народа? Выпить водки, купить местную проститутку. Выпили. Водка очень дорогая. Ну тут, хуй с ним, на бухло ведь никогда не жалко. Поехали за девушками. Сильно пьяные поехали. Купили. Как сейчас помню, заплатил две тысячи финляндских марок за одну штуку. А утром, оказалось, что это не финнка6 а русская блядь и живет в Питере на соседней улице! Как можно отдать 400 баксов за то, что стоит 500 рублей! Виновата Финляндия.</p>
<p>7. Никогда ничего не покупать в кредит.<br />
В кредит нельзя ничего купить нужного. Что может быть человеку очень нужно? Лекарство, когда он умирает, хлеб, когда он голодает. На такие вещи, в таком положении, человеку кредита никогда не дадут. Как можно дать человеку кредит если он может помрет? Поэтому, кредит могут дать только на бесцельные вещи, причем человеку, которому они не нужны. Например на иномарку, или на мебель, или на дом.</p>
<p>Я езжу на жигулях, рыночная цена которых 800 баксов. Зато их не воруют и я могу прыгать на крыше. Вот человек купит мерседес и не может прыгать на крыше. Зачем мне нужна такая машина, если на жигулях я могу больше? Спать надо на кровати. Еще нужен шкаф. У меня одна жопа, для нее мне нужна одна кровать и одни штаны. Чтоб их повесить нужен один шкаф. Зачем мне нужна мебель? А дом. Если человек живет, значит у него уже есть где жить. Если он бомж и живет в подвале, тогда, понятно, человеку нужен дом. Но такому никто кредита не даст. А если он не бомж так у него и так есть где жить. Я еще понимаю, если человек родил десять детей, тогда действительно нужен дом. Так кто у нас рожает по десять детей? А если ты не можешь ужиться со своими родителями, посути самыми родными людьми, или не можешь жить с бывшей женой, на которой жениться тебя никто не заставлял, или соседи тебе мешают, с которыми ты не умеешь подружиться, так ты ищи проблемы у себя в голове. А не клянчи бабло у банков под драконовские проценты.</p>
<p>8. Никогда без острой необходимости не покупать то, что рекламируется по телевизору.<br />
Хорошую и недорогую вещь рекламировать не будут. Ее и так купят. Рекламируют или что-то плохое, например МММ, или Телемаркет, или что-то с вряженным ценником.</p>
<p>9. Не иметь пластиковых карточек.<br />
Это еще одно буржуйское изобретение направленное на изымание бабла у трудящихся масс. Когда ты подходишь к кассе и достаешь пакетан лавэ, ты сразу понимаешь, что вот оно твое родное бабло и вот ты его сейчас отдашь. Через это ты задумаваешься, а надо ли? А когда ты достаешь кусочек пластика, бабло с него списывается легко и незаметно. Кредитная карточка это еще большее обувалово. Мало того, что у тебя выманят все что ты имеешь, так еще и заставят залезть в долги. Причем не просто в долги, а в долги под проценты. По-русски это всегда называлось &#8212; поставить на счетчик. Нахуй мне такое счастье.</p>
<p>10. Стараться никогда, ничего не платить государству.<br />
Этот принцип больше служит не для экономии, а для нормализации душевного равновесия, потому что налоги всё же платить нужно. Но ведь часто у нас как, человек платит налоги, заполняет декларации, штрафы своевременно проплачивает. А вдруг ему случается плохо, он вызывает скорую, а там приходит доктор, который говорит, что денежек у него очень мало и что надо бы дать чуть-чуть, чтоб не уехать в бомжатник, а попасть в нормальную клинику. Человек дает чуть-чуть, его привозят в больницу и там ему опять говорят, что можем уколоть аспирином бесплатно, а если хочешь лечиться, то давай еще бабла чуть-чуть. И так везде у нас. Через это человек начинает мучаться, обзывает врачей взяточниками, начинает требовать борьбы с коррупцией и с разворовыванием бюджета. Не спит, плохо кушает, смотрит телевизор и ждет от Путина решительных действий. А это вредно для здоровья.</p>
<p>Но вот если человек никому ничего не платит, то вызывая скорую, он прекрасно понимает, что врач ему ничего не должен. Потому что должен &#8212; это когда взял и не отдал. И если врач ничего не брал у тебя, то ничего он тебе и не должен. Даже в бомжатник везти не должен. Хочешь &#8212; заплати. Хочешь в нормальную клинику &#8212; еще заплати. И сразу человек перестает считать всех взяточниками и вымогателями. Начинает с баблом расставаться осмысленно, хорошо спать, не волноваться и плевать на невыполненные обещания Путина.</p>
<p>11. Все вещи которые ты покупаешь должны доставаться тебе легко.<br />
Никогда не надо что-то покупать из последних сил. У нас как бывает. Накопил человек пять тысячь баксов. Посмотрел на них &#8212; бабло лежит. Репу почесал и сделал два вывода &#8212; а чего оно лежит и раз я пять накопил, то я и ещё столько же накоплю. Соответственно тут же берёт эти пять, ещё пять занимает у товарища, или в кредит, и бежит покупает себе автомобиль за десять. Денег нет и долги надо отдавать. А тут вдруг взяли этот автомобиль и спиздили. Вообще охуеть ситуация. Ни денег, ни машины, и только долг с процентами капающий. Через это страдания, нервотрёпка и душевные муки. А всё почему. Потому что до зубовного скрежета хотелось себе машину купить на последнее, на всё что тяжелым трудом заработано и скоплено. Пахал, въябывал &#8212; а тут хуй и ещё процент по долгу! Поэтому поступать надо иначе. Накопил пятьсот рублей &#8212; пойди выпей на сто и ложись спать. Накопил тысячу баксов &#8212; пойди купи себе велосипед за сотку баксов. А накопил пять штук баксов &#8212; пойди и купи себе автомобиль, ржавые Жигули за штуку. И когда у тебя эти Жигули спиздят, ты поднимешь руку и скажешь: Да и хуй с ним, с этим говном, сейчас карманные деньги достану и пойду себе ещё такие же Жигули куплю. Через это у человека становится всё впорядке с нервами, приходит душевный покой и равновесие. Живёт он спокойно и не волнуясь.</p>
<p>12. Кроме уменьшения расходов, надо стараться увеличивать доходы<br />
Этот принцип тоже очень нужный. Однако, без выполнения всех предыдущих, сколько бы ты ни зарабатывал все равно будет мало, будешь сидеть без денег, жить в кредит и экономить каждую копейку. Будет как в Америке &#8212; зарплата пять тысяч баксов, заплатил за квартиру, за страховки, за кредиты, за образование детей, дал жене на феминизм, в результате осталось триста баксов на пропой. А у нас, при правильной организации бюджета, получил штуку баксов, дал за квартиру пятьсот рублей, пару тысяч дал родителям на еду, в школу написал записку, что бабла нет и пусть не предлагают позаниматься с репетитором, жене сказал, что на шубу пусть сама копит, запчасть к Жигулям купил за триста, а на стоянку ставить не стал, оставил за бесплатно под окном и в результате на пропой осталось девятьсот баксов. И кто богаче живет??</p>
</blockquote>
<p>Спёр <a href="http://alekcei.livejournal.com/20651.html">отсюда</a> via этот <a href="http://gubalance.livejournal.com/1151481.html">пост</a> via lj-user semicvetic.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/05/14/life-rules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кресло</title>
		<link>http://blog.genegreen.ru/2009/05/12/chair/</link>
		<comments>http://blog.genegreen.ru/2009/05/12/chair/#comments</comments>
		<pubDate>Tue, 12 May 2009 11:39:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[отдых]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=293</guid>
		<description><![CDATA[Окончательно намучавшись с обычным общажным стулом перед копьютером, поехал вчера и приобрёл кожаное кресло украинского производста. За подтакливание на эту идею приношу Александру Мальцеву благодарность. :) Кресло большое, удобное… с крепкими ручками. Оно даже может работать как кресло-качалка; большой вращающейся &#8230; <a href="http://blog.genegreen.ru/2009/05/12/chair/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Окончательно намучавшись с обычным общажным стулом перед копьютером, поехал вчера и приобрёл кожаное кресло украинского производста. За подтакливание на эту идею приношу Александру Мальцеву благодарность. :)</p>
<p><center><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0478.jpg" rel="lightbox[pics-1242049881]" title="img_0478"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0478.jpg" alt="img_0478" /></a></center></p>
<p>Кресло большое, удобное… с крепкими ручками.</p>
<p><center><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0479.jpg" rel="lightbox[pics-1242049881]" title="img_0479"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0479.jpg" alt="img_0479" /></a></center></p>
<p>Оно даже может работать как кресло-качалка; большой вращающейся штуковиной снизу можно регулировать жёсткость хода.</p>
<p><center><a href="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0480.jpg" rel="lightbox[pics-1242049881]" title="img_0480"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/05/img_0480.jpg" alt="img_0480" /></a></center></p>
<p>Теперь можно и дома работать, не напрягая спину. Ура!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/05/12/chair/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Новая игрушка</title>
		<link>http://blog.genegreen.ru/2009/04/22/play-a-toy/</link>
		<comments>http://blog.genegreen.ru/2009/04/22/play-a-toy/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 05:52:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[фото]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=230</guid>
		<description><![CDATA[Таки прибыл ко мне долгожданный мой фотоаппарат! Ещё пока не очень привык к его интерфейсу да и аккумуляторы ещё не приобрёл (ещё держится на двух батарейках AA, что шли с ним в комплекте), но парочку фотографий с рабочего места выложу. &#8230; <a href="http://blog.genegreen.ru/2009/04/22/play-a-toy/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Таки прибыл ко мне долгожданный мой фотоаппарат! Ещё пока не очень привык к его интерфейсу да и аккумуляторы ещё не приобрёл (ещё держится на двух батарейках AA, что шли с ним в комплекте), но парочку фотографий с рабочего места выложу.</p>
<p>Местечко стало намного уютнее с появлением колонок.<br />
<a href="http://blog.genegreen.ru/wp-content/uploads/2009/04/img_0035.jpg" rel="lightbox[pics230]" title="Рабочее место"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/04/img_0035.jpg" alt="Рабочее место"  class="attachment wp-att-231 " /></a></p>
<p>Живность, что живёт на левой колонке.<br />
<a href="http://blog.genegreen.ru/wp-content/uploads/2009/04/img_0049.jpg" rel="lightbox[pics230]" title="Друзья"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/04/img_0049.jpg" alt="Друзья"  class="attachment wp-att-232 " /></a></p>
<p>Те же друзья, вид снизу.<br />
<a href="http://www.genegreen.ru/wp-content/uploads/2009/04/img_0050.jpg" rel="lightbox[pics230]" title="Друзья"><img src="http://www.genegreen.ru/wp-content/uploads/2009/04/img_0050.jpg" alt="Друзья"  class="attachment wp-att-233 " /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/04/22/play-a-toy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ДР</title>
		<link>http://blog.genegreen.ru/2009/04/15/bd/</link>
		<comments>http://blog.genegreen.ru/2009/04/15/bd/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 04:54:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Новости]]></category>
		<category><![CDATA[отдых]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[социум]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=224</guid>
		<description><![CDATA[Что ж… примерно через шесть с половиной часов я уже отживу два раза по двенадцать лет. В качестве подарков на этот день рождения пока определились следующие: Фотоаппарат Canon PowerShot SX110 IS. Говорят, что это неплохое решение а-ля «Промежуточный вариант между &#8230; <a href="http://blog.genegreen.ru/2009/04/15/bd/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Что ж… примерно через шесть с половиной часов я уже отживу два раза по двенадцать лет.</p>
<p>В качестве подарков на этот день рождения пока определились следующие:</p>
<p>Фотоаппарат Canon PowerShot SX110 IS. Говорят, что это неплохое решение а-ля «Промежуточный вариант между мыльницей и зеркалкой». Обещают доставить 17—24 апреля, так что пока впечатлениями поделиться не могу.<br />
<a href="http://blog.genegreen.ru/wp-content/uploads/2009/04/canon-powershot-sx110is.jpg" rel="lightbox[pics224]" title="Canon PowerShot SX110 IS"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/04/canon-powershot-sx110is.jpg" alt="Canon PowerShot SX110 IS" width="500" height="451"/></a>
</p>
<p>MIDI-клавиатура M-Audio Keystation 61es. Это уже давняя мечта: научиться играть на клавишах. При первой же возможности отправляюсь в музыкальную школу на поиски учителя-клавишника. :)<br />
<a href="http://blog.genegreen.ru/wp-content/uploads/2009/04/maudio-keystation-61es.jpg" rel="lightbox[pics224]" title="M-Audio Keystation 61es"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/04/maudio-keystation-61es.jpg" alt="M-Audio Keystation 61es" width="500" height="375" /></a>
</p>
<p>Акустическая система Sven SPS-699S. Этот подарок я придумал для того, чтобы использовать на работе, когда сижу один в офисе. Очень приятно кодить под музыку (не в наушниках).<br />
<a href="http://blog.genegreen.ru/wp-content/uploads/2009/04/sven-sps-699s.jpg" rel="lightbox[pics224]" title="Sven SPS-699S"><img src="http://blog.genegreen.ru/wp-content/uploads/2009/04/sven-sps-699s.jpg" alt="Sven SPS-699S" width="400" height="400" /></a>
</p>
<p>P.S. Всё острее осознаётся, что день рождения — такое же глупое и нелепое событие, как Новый год, «40 дней», Родительский день и т.п. Уже сейчас успело прийти несколько поздравлений от людей, которые за последние триста с лишним дней ни слова мне не сказали. Создаётся впечатление, что у ряда людей такие праздники/события вызывают срабатывание триггера в указанную дату: если 31 декабря, то подвести итоги; если «40 дней», то не забыть о недавно ушедшем и тяпнуть; если Родительский день, то помянуть почивших родственников — а в остальное время ни об итогах не думать, ни об утерянных близких.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/04/15/bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIO</title>
		<link>http://blog.genegreen.ru/2009/04/06/pio/</link>
		<comments>http://blog.genegreen.ru/2009/04/06/pio/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 13:34:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[железо]]></category>
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=221</guid>
		<description><![CDATA[Встретился с давней проблемой, которая не возникала у меня ещё со времён Windows XP SP1, когда часто подключал «жёсткие» друзей к своей машине, от чего периодически transfer mode канала IDE даже при установке «DMA if available» соскакивал на PIO. Один &#8230; <a href="http://blog.genegreen.ru/2009/04/06/pio/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Встретился с давней проблемой, которая не возникала у меня ещё со времён Windows XP SP1, когда часто подключал «жёсткие» друзей к своей машине, от чего периодически transfer mode канала IDE даже при установке «DMA if available» соскакивал на PIO. Один из самых лёгких в обнаружении симптомов очень прост: при проигрывании mp3-файлов winamp&#8217;ом или foobar&#8217;ом возникают жуткие притормаживания, если попытаться зайти в Computer Management или Device Manager. За давностью упомянутых событий пришлось потратить полдня на поиски истинной причины тормозов: вирусы, трояны, старые драйвера, кривые хотфиксы от мелкомягких, лишние запущенные службы, ненужный мусор в автозагрузке…</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/04/06/pio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сериализация</title>
		<link>http://blog.genegreen.ru/2009/02/27/serialization/</link>
		<comments>http://blog.genegreen.ru/2009/02/27/serialization/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 16:04:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=169</guid>
		<description><![CDATA[В целях возможности разработки приложений парами (desktop-приложение и web-приложение, функционально не отличающиеся) решил использовать дополнительный слой в модели: веб-сервисы. Начал с технологии SOAP, которая по спецификации не предусматривает возможность пересылки объектов каких-то своих хитрых классов (custom classes). На помощь пришли &#8230; <a href="http://blog.genegreen.ru/2009/02/27/serialization/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>В целях возможности разработки приложений парами (desktop-приложение и web-приложение, функционально не отличающиеся) решил использовать дополнительный слой в модели: веб-сервисы. Начал с технологии SOAP, которая по спецификации не предусматривает возможность пересылки объектов каких-то своих хитрых классов (custom classes).</p>
<p>На помощь пришли два класса <code>XMLEncoder</code> и <code>XMLDecoder</code>, которые позволяют записывать в и читать из XML экземпляры классов, которые имеют доступный конструктор без аргументов и геттеры/сеттеры для всех полей, значения которых необходимы для восстановления объекта.</p>
<p>Ниже приведу свой вспомогательный класс со статическими шаблонными методами, позволяющими перегонять объект в байт-массив, который разрешено по спецификации SOAP пересылать, и обратно.</p>
<p><code>import java.beans.XMLDecoder;<br />
import java.beans.XMLEncoder;<br />
import java.io.BufferedOutputStream;<br />
import java.io.ByteArrayInputStream;<br />
import java.io.ByteArrayOutputStream;<br />
public class Serializer {<br />
&nbsp;&nbsp;&nbsp; public static &lt;T&gt; byte[] toByte(T t) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByteArrayOutputStream baos = new ByteArrayOutputStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMLEncoder e = new XMLEncoder(new BufferedOutputStream(baos));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.writeObject(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return baos.toByteArray();<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public static &lt;T&gt; T fromByte(byte[] bytes){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ByteArrayInputStream bais = new ByteArrayInputStream(bytes);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (T) new XMLDecoder(bais).readObject();<br />
&nbsp;&nbsp;&nbsp; }<br />
}</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/02/27/serialization/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Трюки с запросами 3</title>
		<link>http://blog.genegreen.ru/2009/02/27/query-tricks-3/</link>
		<comments>http://blog.genegreen.ru/2009/02/27/query-tricks-3/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 15:43:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[ПО]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=167</guid>
		<description><![CDATA[Заключительная часть про трюки с запросами на сегодня. :) Данные о трафике клиентов постоянно записываются в текстовые файлы, которые затем парсятся и заносятся в подбитом виде в базу. Расскажу историю эволюции этой нехитрой системы. В первой версии данные из лог-файлов &#8230; <a href="http://blog.genegreen.ru/2009/02/27/query-tricks-3/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Заключительная часть про трюки с запросами на сегодня. :)</p>
<p>Данные о трафике клиентов постоянно записываются в текстовые файлы, которые затем парсятся и заносятся в подбитом виде в базу. Расскажу историю эволюции этой нехитрой системы. В первой версии данные из лог-файлов заносились напрямую в базу без каких-либо подбивок. Затея ясно дала понять, что она того не стоит, когда количество записей перевалило за 60M. Затем было решено в базу добавлять по-старому, а после каждого очередного добавления запускать хранимую функцию, которая подбивает данные, записывает их в другую таблицу, а первую — чистит. Через некоторое время опять встала проблема с производительностью — в табличке хранилось слишком много избыточных данных (например, IP клиента и destination IP вместо простого булевого флага «локальности» трафика). Как выходим из ситуации? Правильно, делаем новую таблицу без избыточных полей, создаём триггер на insert (чтоб дубликатов ключей не было да и чтоб не делать лишний sum позже), а данные сразу добавляем в таблицу из логов insert&#8217;ами. Внутри триггера был, конечно же, select из этой же таблицы, а insert&#8217;илось в таблицу много и часто, и потому производительность высокой продержалась не долго.</p>
<p>Как же справляется система сейчас? Создана новая табличка с ещё меньшим количеством полей и без каких-либо триггеров. Каждый новый файл perl&#8217;ом парсится, данные заносятся в хэш-таблицу по ключу и после для каждого уникального ключа вызывается select, считающий количество имеющегося трафика по этому ключу, суммируется и в зависимости от ситуации insert&#8217;ится или update&#8217;ится. Работает быстро, большое количество select&#8217;ов, insert&#8217;ов и update&#8217;ов базу не вешает нисколько.</p>
<p>В процессе этой эволюции выяснилось ещё кое-что интересное. Помимо всего прочего, нужно отдельно учитывать трафик на определённых портах (7, 80, 8080, 143 и т.д.). Так вот… перловская конструкция с регулярным выражением<br />
<code>$port =~ m/^(7|(80)|(8080)|(20)|(25)|(110)|(69)|(161)|(162)|(143)|(220)|(989)|(990)|(993)|(995))$/;</code><br />
работает в несколько раз дольше, чем проверка наличия ключа<br />
<code>exists $ports{$port}</code><br />
с предварительно определённой хэш-таблицей:<br />
<code>%ports = (<br />
&nbsp;&nbsp;&nbsp; 7 =&gt; '', 80 =&gt; '', 8080 =&gt; '', 20 =&gt; '', 25 =&gt; '', 110 =&gt; '',<br />
&nbsp;&nbsp;&nbsp; 69 =&gt; '', 161 =&gt; '', 162 =&gt; '', 143 =&gt; '', 220 =&gt; '', 989 =&gt; '',<br />
&nbsp;&nbsp;&nbsp; 990 =&gt; '', 993 =&gt; '', 995 =&gt; ''<br />
&nbsp;&nbsp;&nbsp; );</code><br />
Проверять скорость работы IF&#8217;а с целой кучей OR&#8217;ов как-то лень.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/02/27/query-tricks-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Трюки с запросами 2</title>
		<link>http://blog.genegreen.ru/2009/02/27/query-tricks-2/</link>
		<comments>http://blog.genegreen.ru/2009/02/27/query-tricks-2/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 15:09:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Интересности]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[Работа]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://www.genegreen.ru/?p=161</guid>
		<description><![CDATA[Вредно не читать мануалы. Когда я несколько месяцев назад начал щупать СУБД PostgreSQL, я знал лишь основы построения реляционных БД, немного понимал SQL. И нужно было сделать простую вьюшку, в которой в две колонки разделён трафик клиентов с 8 до &#8230; <a href="http://blog.genegreen.ru/2009/02/27/query-tricks-2/">Читать далее <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Вредно не читать мануалы. Когда я несколько месяцев назад начал щупать СУБД PostgreSQL, я знал лишь основы построения реляционных БД, немного понимал SQL. И нужно было сделать простую вьюшку, в которой в две колонки разделён трафик клиентов с 8 до 14 и трафик в остальное время. Некоторое время с этим справлялась вьюшка, построенная на трёх других:<br />
<code>CREATE OR REPLACE VIEW nf_mdh_traffic AS<br />
&nbsp;SELECT n.ip AS subnet, n.y AS year, n.m AS month, n.d AS day, n.h AS hour, sum(n.bytes) AS traf<br />
&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp; GROUP BY n.ip, n.y, n.m, n.d, n.h;CREATE OR REPLACE VIEW nf_mdh_traffic_btw AS<br />
&nbsp;SELECT nf_mdh_traffic.subnet, nf_mdh_traffic.year, nf_mdh_traffic.month, nf_mdh_traffic.day, sum(nf_mdh_traffic.traf) AS traf<br />
&nbsp;&nbsp; FROM nf_mdh_traffic<br />
&nbsp; WHERE nf_mdh_traffic.hour::double precision &gt;= 8::double precision AND nf_mdh_traffic.hour::double precision &lt;= 14::double precision<br />
&nbsp; GROUP BY nf_mdh_traffic.subnet, nf_mdh_traffic.year, nf_mdh_traffic.month, nf_mdh_traffic.day;CREATE OR REPLACE VIEW nf_mdh_traffic_nbtw AS<br />
&nbsp;SELECT nf_mdh_traffic.subnet, nf_mdh_traffic.year, nf_mdh_traffic.month, nf_mdh_traffic.day, sum(nf_mdh_traffic.traf) AS traf<br />
&nbsp;&nbsp; FROM nf_mdh_traffic<br />
&nbsp; WHERE NOT (nf_mdh_traffic.hour::double precision &gt;= 8::double precision AND nf_mdh_traffic.hour::double precision &lt;= 14::double precision)<br />
&nbsp; GROUP BY nf_mdh_traffic.subnet, nf_mdh_traffic.year, nf_mdh_traffic.month, nf_mdh_traffic.day;CREATE OR REPLACE VIEW nf_subnets_trafs AS<br />
&nbsp;SELECT nf_mdh_traffic_btw.subnet, nf_mdh_traffic_btw.year, nf_mdh_traffic_btw.month, nf_mdh_traffic_btw.day, nf_mdh_traffic_btw.traf AS btw_traf, nf_mdh_traffic_nbtw.traf AS nbtw_traf<br />
&nbsp;&nbsp; FROM nf_mdh_traffic_btw<br />
&nbsp;&nbsp; FULL JOIN nf_mdh_traffic_nbtw ON nf_mdh_traffic_btw.subnet = nf_mdh_traffic_nbtw.subnet AND nf_mdh_traffic_btw.year = nf_mdh_traffic_nbtw.year AND nf_mdh_traffic_btw.month = nf_mdh_traffic_nbtw.month AND nf_mdh_traffic_btw.day = nf_mdh_traffic_nbtw.day<br />
&nbsp; WHERE NOT nf_mdh_traffic_btw.subnet IS NULL<br />
&nbsp; ORDER BY nf_mdh_traffic_btw.subnet, nf_mdh_traffic_btw.year, nf_mdh_traffic_btw.month, nf_mdh_traffic_btw.day;&nbsp;</code></p>
<p>А оказывается, всё можно сделать намного проще (да и работает в разы быстрее):<br />
<code>CREATE OR REPLACE VIEW nf_subnets_trafs AS<br />
&nbsp;SELECT nf_statistic.ip AS subnet, nf_statistic.y AS year, nf_statistic.m AS month, nf_statistic.d AS day, sum(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN nf_statistic.h &gt;= 8 AND nf_statistic.h &lt;= 14 THEN nf_statistic.bytes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE 0::bigint<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END) AS btw_traf, sum(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CASE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN NOT (nf_statistic.h &gt;= 8 AND nf_statistic.h &lt;= 14) THEN nf_statistic.bytes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE 0::bigint<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END) AS nbtw_traf<br />
&nbsp;&nbsp; FROM nf_statistic<br />
&nbsp; GROUP BY nf_statistic.ip, nf_statistic.y, nf_statistic.m, nf_statistic.d<br />
&nbsp; ORDER BY nf_statistic.ip, nf_statistic.y, nf_statistic.m, nf_statistic.d;</code></p>
<p>И вот ещё пример.<span id="more-161"></span> Запрос, строящий детализированный отчёт по трафику всех школ заданного района. Раньше было так:<br />
<code>select * from&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SELECT region_id,&nbsp; sch.sch_name AS school, '14-8', COALESCE(traf.btw::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS local_traf, COALESCE(traf.nbtw::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS notlocal_traf, COALESCE(traf.tot::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS total,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sch.subnet&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM ( SELECT s.subnet as subnet, r.id as region_id, r.name AS reg_name, s.name AS sch_name, s.subnet AS ip<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM schools s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOIN regions r ON r.id = s.region_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE s.etap &lt;= 3 and s.region_id = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY r.id, s.rtcom_id) sch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEFT JOIN (( SELECT n.ip AS ip1, sum(n.bytes) AS btw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.is_local = true AND n.m = 2 AND n.y = 2009 AND NOT (n.h &gt;= 8 AND n.h &lt;= 14)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) btw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL JOIN ( SELECT n.ip AS ip2, sum(n.bytes) AS nbtw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.is_local = false AND n.m = 2 AND n.y = 2009 AND NOT (n.h &gt;= 8 AND n.h &lt;= 14)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) nbtw ON nbtw.ip2 = btw.ip1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL JOIN ( SELECT n.ip AS ip3, sum(n.bytes) AS tot<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.y = 2009 AND n.m &lt;= 2 AND NOT (n.h &gt;= 8 AND n.h &lt;= 14)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) tot ON tot.ip3 = btw.ip1 OR tot.ip3 = nbtw.ip2) traf ON traf.ip1 = sch.ip<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UNION&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT&nbsp; region_id, sch.sch_name AS school, '8-14', COALESCE(traf.btw::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS local_traf, COALESCE(traf.nbtw::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS notlocal_traf, COALESCE(traf.tot::double precision / (2::double precision ^ 20::double precision), 0.0::double precision) AS total,&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sch.subnet&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM ( SELECT s.subnet as subnet, r.id as region_id, r.name AS reg_name, s.name AS sch_name, s.subnet AS ip<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM schools s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOIN regions r ON r.id = s.region_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE s.etap &lt;= 3 and s.region_id = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORDER BY r.id, s.rtcom_id) sch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEFT JOIN (( SELECT n.ip AS ip1, sum(n.bytes) AS btw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.is_local = true AND n.m = 2 AND n.y = 2009 AND n.h &gt;= 8 AND n.h &lt;= 14<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) btw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL JOIN ( SELECT n.ip AS ip2, sum(n.bytes) AS nbtw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.is_local = false AND n.m = 2 AND n.y = 2009 AND n.h &gt;= 8 AND n.h &lt;= 14<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) nbtw ON nbtw.ip2 = btw.ip1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FULL JOIN ( SELECT n.ip AS ip3, sum(n.bytes) AS tot<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM nf_statistic n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE n.y = 2009 AND n.m &lt;= 2 AND n.h &gt;= 8 AND n.h &lt;= 14<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY n.ip) tot ON tot.ip3 = btw.ip1 OR tot.ip3 = nbtw.ip2) traf ON traf.ip1 = sch.ip ) as res<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where region_id = 1;</code></p>
<p>Теперь стало так:<br />
<code>select s.name, period,<br />
sum(case when m = 2 then rs.local_traf else 0 end) / 2 ^ 20,<br />
sum(case when m = 2 then rs.notlocal_traf else 0 end)&nbsp; / 2 ^ 20,<br />
sum(case when m &lt;=2 then rs.local_traf+rs.notlocal_traf else 0 end)&nbsp; / 2 ^ 20, ip<br />
from (select '8-14' as period, y as y, m as m, ip as ip,<br />
sum(case when is_local = true then bytes else 0 end) as local_traf,<br />
sum(case when is_local = false then bytes else 0 end) as notlocal_traf<br />
from nf_statistic n<br />
where h between 8 and 14 and<br />
ip in (select subnet from schools where region_id = 1)<br />
group by ip, y, m<br />
union select '14-8', y, m, ip,<br />
sum(case when is_local = true then bytes else 0 end),<br />
sum(case when is_local = false then bytes else 0 end)<br />
from nf_statistic n<br />
where not h between 8 and 14 and<br />
ip in (select subnet from schools where region_id = 1)<br />
group by ip, y, m) as rs<br />
inner join schools s on s.subnet = rs.ip<br />
where y = 2009 and s.etap &lt;= 3 group by ip, y, period, s.name<br />
order by s.name asc, period desc;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.genegreen.ru/2009/02/27/query-tricks-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

