<?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>Bappoy&#039;s blog &#187; лытдыбр</title>
	<atom:link href="http://bappoy.pp.ru/tag/%d0%bb%d1%8b%d1%82%d0%b4%d1%8b%d0%b1%d1%80/feed" rel="self" type="application/rss+xml" />
	<link>http://bappoy.pp.ru</link>
	<description>Линуксоид на велосипеде с моторчиком</description>
	<lastBuildDate>Fri, 02 Dec 2011 11:44:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Как я однажды тупил два дня на ровном месте</title>
		<link>http://bappoy.pp.ru/2011/10/18/dst.html</link>
		<comments>http://bappoy.pp.ru/2011/10/18/dst.html#comments</comments>
		<pubDate>Tue, 18 Oct 2011 09:17:45 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[лытдыбр]]></category>
		<category><![CDATA[рабочие будни]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/?p=515</guid>
		<description><![CDATA[<p>В преддверии первой годовщины последнего осеннего перевода часов в России вспомнился один факап трехлетней давности (начало 2008 года). Я тогда занимался починкой  статистики посещаемости на одном региональном сайтике, который я поддерживал по дружбе.</p>
<p>У них было два сервера, один в интернете показывал контент посетителям, а второй располагался в офисе и содержал интерфейс администрирования сайта. Все хозяйство работало под FreeBSD 6.1 на очень стареньких машинах, на основном сервере  был Pentium 3 и 384 мегабайта памяти (однако много лет назад о такой конфигурации <a href="http://www.lib.ru/WEBMASTER/wwwhard.txt#4">можно было лишь помечтать</a>). Apache 2.2.2 вёл лог посещений в режиме &laquo;combined&raquo;, а по ночам всё накопленное за последние сутки обрабатывалось штатной программкой <a href="http://httpd.apache.org/docs/2.2/programs/logresolve.html">logresolve</a> (преобразовывает IP-адреса посетителей в имена хостов) и копировалось в отдельный файл resolved.log. Затем офисный сервер забирал получившийся файл по HTTP (в целях безопасности все &laquo;альтернативные&raquo; способы обмена файлами решили не использовать) и парсил его awstats&#8217;ом. Такая вот нехитрая схемка. Но проработала она ровно два месяца до середины декабря 2006 года и перестала.<br />
<!--more--><br />
Кроме нескольких программных ошибок обнаружилось еще пара стратегических провалов. Во-первых, офисный сервер иногда отключался из-за проблем с электричеством, и лог не забирался вовремя, а на следующий день просто дополнялся; после двух-трёх пропущенных дней файл с логами разросся до таких размеров, что даже в сжатом виде слишком долго передавался бы по http, и забирающий скрипт просто отваливался по таймауту. Во-вторых, установленный там logresolve натурально портил логи: читал из строки первые 1024 байта, обрабатывал IP-адрес и печатал их в STDOUT, завершив переводом строки; затем читались следующие 1024 байта и т.д. В результате строки, содержащие, например, длинные реферрерские URL, оказались разбитыми на несколько строк по 1024 байта каждая, что, возможно, не имело значения для awstats, но крайне затрудняло дополнительную обработку такого лога.</p>
<p>В итоге с декабря 2006 года лог-файл увеличился в размерах до полутора гигабайт. Я решил, что лучше его разбить на месяцы и скормить эти месяцы парсеру поочерёдно, однако сначала нужно было разобраться с лишними разрывами строк. Быстренько набросал однострочник на sed, который удаляет лишние переводы строк, если в третьем поле не содержится даты.</p>
<p>Однако несмотря на то, что на как на небольших, так и на довольно больших отрывках resolved.log данный скриптик отрабатывал относительно нормально, из реального лога читались только первые 170 мегабайт с копейками и скрипт надолго зависал. Решил, что, возможно, чего-то не учёл из-за малого опыта написания такого рода сценариев на sed, и переделал тот же самый алгоритм на perl и c  — безуспешно: после прочтения первых 170 мегабайт ничего не происходило.</p>
<pre>my $b='';
while(<>){
        chomp;
        if(/\[[0-9]+\/[a-zA-Z]+\/[0-9:]+\ \+0300\]/){
                print "$b\n";
                $b=$_;
        } else {
                $b.=$_
        }
}
print "$b\n";
</pre>
<p>Я несколько раз прогнал эти скрипты через valgrind с максимальными проверками утечек, избавился от некоторых ошибок, в конце концов перечитал кучу документации по freebsd на тему возможных ограничений на размер процесса в памяти (хотя больше восьми килобайт программа в памяти не занимала) и т.д. В общем, на два дня выпал из жизни, проводя это время в отладке&#8230; </p>
<p>В конце концов нашел причину моих мучений: в регулярном выражении, определявшем признак начала записи лога, была жестко прописана временная зона +0300, тогда как при переходе на летнее время она изменялась на +0400. Поэтому, когда цикл доходил до марта 2007 года, несколько сотен тысяч строк до следующего октября просто пропускались, а поскольку сервер был медленный, то на Ctrl+C и kill -TERM скрипты реагировали не сразу, и тем создавалось ощущение зависания.</p>
<p>После того, как я исправил этот регэксп, всё пошло как по маслу: скормил awstats&#8217;у старые логи, прикрутил logrotate, научил скрипты забирать статистику через scp; параллельно крону поставил <a href="http://sourceforge.net/projects/anacron">anacron</a>, благодаря чему забор и анализ логов стал производиться ежедневно вне зависимости от того, включен ли &laquo;офисный&raquo; сервер в 4 часа 15 минут утра. А потом и вовсе уговорил начальство поставить внешние счетчики. Теперь там стоит google analytics и все счастливы, а я немного прокачал скилл профайлинга.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2011/10/18/dst.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Немного о работе</title>
		<link>http://bappoy.pp.ru/2009/04/14/about-my-job.html</link>
		<comments>http://bappoy.pp.ru/2009/04/14/about-my-job.html#comments</comments>
		<pubDate>Tue, 14 Apr 2009 11:20:16 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[лытдыбр]]></category>
		<category><![CDATA[рабочие будни]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/?p=589</guid>
		<description><![CDATA[<p>Уже более двух месяцев тружусь на новом рабочем месте в отделе решений voip <a href="http://www.mfisoft.ru">нашей компании</a> — занимаюсь поддержкой веб-интерфейса управления основным продуктом: исправляю накопившиеся баги, создаю новые :), а также готовлю релизы. Все работает под Debian Lenny, на базе Apache 2 + PHP5 + MySQL 5.</p>
<p>По сравнению с предыдущей деятельностью сменилось вроде бы немногое — базовый дистрибутив поменялся с Fedora на Debian, PostgreSQL — на MySQL (с удивлением узнал, что хранимые процедуры в MySQL появились только начиная с 5.0, а подзапросы тут и сейчас кривоваты), PHP4 на PHP5 (exceptions рулят), плюс ко всему в окне стало видно небо и две трубы :) Но рабочее окружение пришлось слегка модифицировать. Поначалу были предпосылки к тому, чтобы перейти обратно на Windows, но, попробовав что-то серьёзно там поделать, я понял, что в операционнойп системе без родного клиента ssh и человеческого терминала я жить не смогу, плюнул и остался на Ubuntu 8.10. К тому же мне выдали новый компьютер (Athlon 64 X2 вместо Pentium 4) с двухголовой Nvidia GeForce 8500 GT (вместо интегрированного i815), и после перетыкания жесткого диска XP просто перестала загружаться.</p>
<p>Да и в убунте из-за того, что всё железо, кроме жесткого диска, полностью новое, возникли некоторые проблемы, в частности, зависал Xorg (и тянул за собой клавиатуру) при двух подглюченных мониторах. Решение в конце концов свелось к перенастройке сети и установке драйверов от nvidia (драйвер nv из xorg почему-то не захотел нормально работать):</p>
<p>1. загрузился в single mode<br />
2. отключил запуск сервиса gdm:</p>
<pre>sudo update-rc.d gdm remove</pre>
<p>3. в <code>/etc/udev/rules.d/70-persistent-net.rules</code> в строчке, относящейся к старой сетевой карте, поменял mac-адрес на новый:</p>
<pre>SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1a:92:15:61:33", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"</pre>
<p>4. перезагрузился, убедился, что сеть доступна (пришлось сходить к админам и попросить их также поменять mac-адрес в настройках корпоративного DHCP на новый)<br />
5. установил свежий (на тот момент) комплект драйверов от nvidia:</p>
<pre>sudo apt-get install nvidia-glx-173 # (последняя на момент установки версия nvidia-glx)
sudo mv /etc/X11/xorg.conf /etc/X11/xorg.`date "+%Y%m%d%H%m%S"`.conf
sudo nvidia-xconfig # создался новый xorg.conf</pre>
<p>6. загрузился в графическую оболочку (<code>service gdm start</code>), запустил nvidia-settings, включил TwinView в режиме &laquo;растягивания&raquo; рабочего стола на два монитора 1280&#215;1024 (получилось разрешение 2560&#215;1024)<br />
7. вернул автозапуск gdm:</p>
<pre>update-rc.d gdm defaults</pre>
<p>Продолжение следует.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2009/04/14/about-my-job.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Небольшие обновления в блоге</title>
		<link>http://bappoy.pp.ru/2008/04/07/favicon-toc.html</link>
		<comments>http://bappoy.pp.ru/2008/04/07/favicon-toc.html#comments</comments>
		<pubDate>Mon, 07 Apr 2008 05:40:04 +0000</pubDate>
		<dc:creator>bappoy</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[блог]]></category>
		<category><![CDATA[лытдыбр]]></category>

		<guid isPermaLink="false">http://bappoy.pp.ru/2008/04/07/favicon-toc/</guid>
		<description><![CDATA[<p>1. Нарисовал себе велосипед в качестве favicon.ico. Хотите такой же? <a href="http://www.favicon.cc">favicon.cc</a> вам поможет.</p>
<p>2. Свёл все свои нетленные креативы в единое <a href="http://bappoy.pp.ru/toc/">содержание</a>, которое стало уже третьим по списку (но не последним по смыслу) методом навигации по сайту. Предыдущие два &#8212; метки и &laquo;предыдущая страница &#8212; следующая страница&raquo; &#8212; не очень хорошо работают. Идею слизал у <a href="http://internetno.net/contents/">интернетных штучек</a>. Пока что из-за большой доли комментариев к ссылкам обновляется вручную, но надо будет подумать над автоматизацией процесса.</p>
]]></description>
		<wfw:commentRss>http://bappoy.pp.ru/2008/04/07/favicon-toc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

