<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Персональный блог Валерия Леонтьева</title>
	<atom:link href="http://valera.ws/feed/" rel="self" type="application/rss+xml" />
	<link>http://valera.ws</link>
	<description>Маленький блог для публикации интересных личных заметок</description>
	<lastBuildDate>Tue, 20 Apr 2010 19:23:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Базовые станции WiMax в Минске</title>
		<link>http://valera.ws/2010.04.19~wimax-minsk/</link>
		<comments>http://valera.ws/2010.04.19~wimax-minsk/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 12:27:35 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[Жизнь]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=400</guid>
		<description><![CDATA[ByFly (Белтелеком) стал первым оператором связи, который запустил в Беларуси сеть 4G WiMax в коммерческую эксплуатацию. На даменный момент сеть работает только в городе Минске По состоянию на 19 апреля 2010 года в городе работают 22 вышки. В данном посте представлена карта расположения вышек в Минске.

Учитывайте, что по информации ByFly радиус действия базовой станции в [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://byfly.by/">ByFly</a> (Белтелеком) стал первым оператором связи, который запустил в Беларуси сеть 4G <a href="http://www.byfly.by/wimax/">WiMax</a> в коммерческую эксплуатацию. На даменный момент сеть работает только в городе Минске По состоянию на 19 апреля 2010 года в городе <a href="http://maps.yandex.ru/?um=t5s0v8Rb_PvbHQcgya2Cv2N6Ku6et6p8&#038;l=map">работают 22 вышки</a>. В данном посте представлена карта расположения вышек в Минске.</p>
<p><span id="more-400"></span></p>
<p>Учитывайте, что <a href="http://www.byfly.by/wimax/">по информации ByFly</a> радиус действия базовой станции в условиях городской застройки составляет около 1 км.</p>
<p><!-- Этот блок кода нужно вставить в ту часть страницы, где вы хотите разместить карту  (начало) --><br />
<script src="http://bit.ly/dl84WB" type="text/javascript"></script> <script type="text/javascript">// <![CDATA[
    YMaps.jQuery(function () {
        var map = new YMaps.Map(YMaps.jQuery("#YMapsID-1756")[0]);
        map.setCenter(new YMaps.GeoPoint(27.547054,53.905068), 11, YMaps.MapType.MAP);
        map.addControl(new YMaps.Zoom());
        map.addControl(new YMaps.ToolBar());
        map.addControl(new YMaps.TypeControl());
        map.addControl(new YMaps.SearchControl());
        map.addControl(new YMaps.ScaleLine());
        var ml = new YMaps.YMapsML("http://feedbee.server.valera.ws/wimax.xml");
        //http://maps.yandex.ru/export/usermaps/t5s0v8Rb_PvbHQcgya2Cv2N6Ku6et6p8/
        map.addOverlay(ml);
        map.enableScrollZoom();
        map.enableHotKeys();
        map.enableRightButtonMagnifier();
        function createObject (type, point, style, description) {
            var allowObjects = ["Placemark", "Polyline", "Polygon"],
                index = YMaps.jQuery.inArray( type, allowObjects),
                constructor = allowObjects[(index == -1) ? 0 : index];
                description = description || "";
            var object = new YMaps[constructor](point, {style: style, hasBalloon : !!description});
            object.description = description;
            return object;
        }
    });
// ]]&gt;</script></p>
<div id="YMapsID-1756" style="width:700px;height:500px"></div>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2010.04.19~wimax-minsk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Качество или количество?</title>
		<link>http://valera.ws/2010.04.17~kachestvo-ili-kolichestvo/</link>
		<comments>http://valera.ws/2010.04.17~kachestvo-ili-kolichestvo/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:06:19 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[Жизнь]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=393</guid>
		<description><![CDATA[В процессе разработки программного продукта программисты пишут код, который затем компилируется (интерпретируется) в работающую программу. Обычно главным критерием качества работы разработчиков является результат: на сколько хорошо программа выполняет свою функцию. А арбитрами в вопросе оценки результата являются пользователи, которые голосуют в том числе и кошельком.

Качество архитектуры и программного кода продукта на работающем результате часто определить [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-398" style="margin-top: 5px; margin-bottom: 5px;" title="Качество против количества" src="http://valera.ws/wp-content/uploads/2010/04/kachelichestvo.png" alt="Качество против количества" width="283" height="123" />В процессе разработки программного продукта программисты пишут код, который затем компилируется (интерпретируется) в работающую программу. Обычно главным критерием качества работы разработчиков является результат: на сколько хорошо программа выполняет свою функцию. А арбитрами в вопросе оценки результата являются пользователи, которые голосуют в том числе и кошельком.</p>
<p><span id="more-393"></span></p>
<p>Качество архитектуры и программного кода продукта на работающем результате часто определить просто невозможно. Чем лучше отдел тестирования, тем меньше ошибки в архитектуре и коде влияют на стабильность работы программы. Наверное именно по этой причине многие разработчики и менеджеры считают, что на качество кода можно попросту &#8220;забить&#8221; — главное — результат. Очевидно, что в их словах есть рациональное ядро, ведь чем качественнее архитектура и код, тем дороже обойдется разработка продукта. А пользователь платит за работу программы, но не качество кода.</p>
<p>Зачем тогда тратить деньги на разработку сложной продуманной архитектуры и написание логичного и понятного кода? Это давно не секрет, и любой профессионал в области разработки сразу ответит — это нужно для облегчения дальнейшей поддержки и доработки ПО.</p>
<p>На практике даже в случае больших сложных и долгосрочных программных проектов встречается абсолютно наплевательское отношение к архитектуре и коду. Особенно это свойственно аутсорсинговым проектам, где пишут &#8220;не для себя&#8221;. Здесь главная задача — именно результат. Работу сдал, деньги получил и забыл. А с программой потом будут мучаться уже другие. Причем, это правило действует как в масштабе фирмы-аутсорсера, так и в масштабе конкретного разработчика.</p>
<p>Как известно, разработчик или архитектор высокой квалификации может выполнять свою работу гораздо качественнее и быстрее, чем разработчик низкой квалификации, но за гораздо б<strong>о</strong>льшие деньги. Команда из нескольких высококвалифицированных программистов, архитекторов, дизайнеров, тестировщиков и менеджеров в состоянии сделать очень качественный продукт за относительно небольшие сроки, но за очень приличную сумму денег.</p>
<p>Выходит, что чем меньше на проекте людей, тем выше должна быть их квалификация для получения того же результата. А как следствие — тем качественнее будут внутренности программы. В случае работы на перспективу такой подход получается выгоднее, так как наработав хорошую базу, ее легко и относительно недорого масштабировать, сопровождать, расширять. Этот подход и стараются применять компании, пишущие код для себя. Именно поэтому, в крупных компаниях типа Гугла, Яндекса работают преимущественно очень высококвалифицированные кадры. Каждый сотрудник этих компаний в состоянии решать сложные комплексные вопросы.</p>
<p>С другой стороны, когда необходимо удешевить стоимость разработки, нужны люди которые &#8220;за дешево&#8221; сделают так, чтобы работало как хочет заказчик. Чем больше хочет заказчик, тем больше надо таких людей. От них не требуется решения сложных вопросов, они должны лишь уметь выполнить относительно простое четко поставленное задание. Именно поэтому на аутсорсерских конторах часто водятся буквально стада средних и слабых разработчиков.</p>
<p>Но справедливости ради, надо заметить, что в последнее время аутсорсеры стараются выходить на путь качества, а не количества. Многие заказчики стали понимать, что им подсовывают каку и искать более серьезных партнеров. Так что похоже на то, что в среднесрочной перспективе 80% (по принципу Паретто) разработок должны быть по качеству архитектуры и кода выше среднего.</p>
<p>Получается, что мы имеем два диаметрально противоположных принципа разработки кода и архитектуры ПО:</p>
<ul>
<li>количественный: много слабых разработчиков пишут много кода — получаем ожидаемый результат;</li>
<li>качественный: мало сильных разработчиков пишут среднее количества кода — получаем такой же ожидаемый результат.</li>
</ul>
<p>А что будет, если нанять много сильных разработчиков? А тоже самое, что и в случае малого количества слабых — результат будет другой. Другими словами: чтобы получить одну и ту же программу по функционалу на выходе нужно либо мало сильных, либо много слабых разработчиков.</p>
<p>Самое, пожалуй, невыгодное в этом случае среднее количество средних разработчиков, потому что результат будет относительно дорогой, но не очень качественный.</p>
<p>Все написанное выше является моим ИМХО и основано на личных наблюдениях. Контраргументы принимаются и тема подлежит обсуждению для выяснения истины.</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2010.04.17~kachestvo-ili-kolichestvo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Я.Субботник в Минске</title>
		<link>http://valera.ws/2010.04.15~yandex-subbotnik-minsk/</link>
		<comments>http://valera.ws/2010.04.15~yandex-subbotnik-minsk/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 16:12:45 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[Жизнь]]></category>
		<category><![CDATA[Мероприятия]]></category>
		<category><![CDATA[Яндекс]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=383</guid>
		<description><![CDATA[Сегодня (15 апреля 2010 года) прошел первый в Беларуси Яндекс.Субботник. Было просто супер и проведено на высочайшем уровне. Интересные и полезные доклады, интересные докладчики (руководители направлений Яндекса), активная аудитория, отличные условия (Кроун Плазе зачет).
Updated 21:10 15.04.2010 по Минску.
Причем, мероприятие было (как и все Субботники Яндекса) бесплатное. Но это не помешало организаторам снять отличное помещение, заказать [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-386" style="margin: 5px;" title="Яндекс" src="http://valera.ws/wp-content/uploads/2010/04/b-head-logo.png" alt="Яндекс" width="95" height="37" />Сегодня (15 апреля 2010 года) прошел первый в Беларуси <a href="http://company.yandex.ru/public/subbotnik/schedule.xml" target="_blank">Яндекс.Субботник</a>. Было просто супер и проведено на высочайшем уровне. Интересные и полезные доклады, интересные докладчики (руководители направлений Яндекса), активная аудитория, отличные условия (Кроун Плазе зачет).</p>
<p>Updated 21:10 15.04.2010 по Минску.</p>
<p><span id="more-383"></span>Причем, мероприятие было (как и все Субботники Яндекса) бесплатное. Но это не помешало организаторам снять отличное помещение, заказать кучу еды и кофе (было больше, чем нужно), раздать сувениры и подарки активным вопросозадавателям (среди которых был и я).</p>
<p>Докладчики очень приятные и профессиональные. Их было интересно слушать, с ними было интересно общаться. Все были максимально открыты.</p>
<p>Первым выступал <a href="http://asebrant.ya.ru/" target="_blank">Андрей Себрант</a> — директор по маркетингу Яндекса. Общий доклад, ответы на общие вопросы. Убедительный рассказ о том, что время изобретения своих велосипедов с нуля прошло. Сейчас время сбора из комплектующих. Как раз поставой комплектующих и занимается Яндекс: ядро всех докладов — интеграция API сервисов Яндекса и партнерская поставка контента Яндексу в обмен на трафик.</p>
<p>Затем <a href="http://funsad.ya.ru/">Александр Садовский</a> рассказал о поиске и особенностях белорусской версии. Яндекс стремится к региональности. Результаты поиска в разных регионах существенно разнятся. Кроме того, теперь в поиске учитывается морфология белорусского языка (правда пока в зачаточной стадии). В идеале целью Яндекса является полная персонификация выдачи под клиента. Поисковые подсказки тоже региональные.</p>
<p>Александр заметил, что надо обращать внимание на такие вещи, как карта сайта и robots.txt для повышения позиции в выдаче. Кроме того, существует множество настроек и корректировок в интерфейсе <a href="http://webmaster.yandex.ru/" target="_blank">Яндекс.Вебмастер</a>, которые необходимо использовать.</p>
<p>Михаил Сенин кратко поведал о серверисе Яндекс.Сайт. Самый скромный доклад и практически ничего нового.</p>
<p>Если я не ошибся, то <a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%B3%D0%B0%D0%BB%D0%BE%D0%B2%D0%B8%D1%87,_%D0%98%D0%BB%D1%8C%D1%8F_%D0%92%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%B8%D0%BD%D0%BE%D0%B2%D0%B8%D1%87" target="_blank">Илья Сегалович</a> довольно интересно рассказал о юзкейсах API Яндекс.Карт и о перспективах сервиса. API сервиса постоянно совершенствуется, и уже сейчас доступны довольно мощные инструменты для интеграции. Например, практически неограниченное количество меток на карте (смотрите <a href="http://bankomator.ru/#lat=55.816895&amp;lng=37.567844&amp;z=11&amp;banks=1" target="_blank">пример</a> с терминалами Киви в Москве). Так же отмечу возможность в API поиска координат по адресу, точек в заданном радиусе от точки, расчет оптимальных маршрутов. Правда последнее для Минска пока не поддерживается из-за отсутствия хорошего графа дорог. По словам представителей Яндекса, купить такую информацию нее у кого, а собирать ее самим им пока не интересно.</p>
<p>В перспективе развития сервиса карт для Беларуси создание подробных карт областных центров.</p>
<p>Сообщили и то, что Народные карты скоро тоже можно будет вставлять на сайт через API. Кстати, очень полезная вещь на практике (пример, для рисования схемы проезда или создания карты велогонки).</p>
<p><a href="http://kukutz.ya.ru/" target="_blank">Роман Иванов</a>, руководитель отдела коммуникационных сервисов, рассказал про пользовательские виджеты в <a href="http://bar.yandex.ru/" target="_blank">Яндекс.Баре</a>. Бар сейчас существует для IE и Firefox. Виджеты могут быть динамическими (например, отображать количество писем в ящике). Создание виджетов — процесс не сложный. Уж точно не сравнится с процессом создания целого тулбара.</p>
<p><a href="http://aaz.moikrug.ru/" target="_blank">Антон Забанных</a>, довольно эпотажная личность, поведал о возможностях <a href="http://pdd.yandex.ru/" target="_blank">Яндекс.Почты для доменов</a>. Кстати, он руководитель группы сервисов персонального общения (почты). Самое интересное то, что сейчас для сайта действует ограничение в 1000 почтовых ящиков, но оно может быть без проблем и бесплатно повышено для конкретного сайта после контакта с саппортом сервиса. А через API сервиса можно создавать и удалять ящики без участия оператора. Довольно заманчивая возможность для серсвисов, которые хотят предоставить пользователям почту в своем домене.</p>
<p>Антон обозначил, что сервис не предназначен для использования в качестве релея (рассылка писем роботом через SMTP). В этом случае домен могут заблокировать до выяснения обстоятельств. Правда решить проблему можно с помощью прямых рассылок <a href="http://www.google.com/support/a/bin/answer.py?hl=ru&amp;answer=33786" target="_blank">с помощью SPF</a>.</p>
<p><a href="http://tigran.moikrug.ru/" target="_blank">Тигран Худавердян</a>, руководитель отдела портальных сервисов, рассказал о пользе пользовательских виджетов для главной страницы Яндекса. <a href="http://veraleyzerovich.moikrug.ru/" target="_blank">Вера Лейзерович</a> продемонстрировала процесс создания простейших виджетов. Кстати, на создание самого простого виджета ушло примерно 50 секунд.</p>
<p>Смысл создания виджетов в том, что у многих пользователей (в том числе из Беларуси) Яндекс установлен в качестве домашней страницы. Размещают виджеты около 15% этой аудитории. В итоге создатель виджета получает некислый трафик с главной Яндекса на свой сайт, Яндекс — качественный контент, а пользователь — то, что искал. Все счастливы.</p>
<p>Самые простые виджеты на базе RSS создавать очень легко и быстро. Кстати, большинство крупных российских интернет-СМИ именно так и сделали.</p>
<p><a href="http://isaevat.moikrug.ru/" target="_blank">Татьяна Исаева</a> (руководитель группы контент-менеджеров Яндекс.Новостей) озвучила, пожалуй, самый тяжелый для прослушивания доклад про Яндекс.Новости. Длинный и монотонный.</p>
<p>В заключении <a href="http://anton.moikrug.ru/" target="_blank">Антон Волнухин</a> рассказал про сервис Яндекс.Блоги и API, которое он предоставляет. Он собственно и является руководителем этого сервиса.</p>
<p>Все с удовольствие отвечали на вопросы в кулуарах. Особенно интересно было пообщаться с <a href="http://cfirf.ya.ru/">Larry Novsky</a> (имя в миру не запомнил). Не знаю, кто он в Яндексе, но он отвечал на все вопросы, и больше всех знал про &#8220;телодвижения&#8221; Яндекса в Беларуси.</p>
<p>На мероприятии снимали видео и обещали его выложить. Также обещали выложить все презентации в открытый доступ. Ждем пополнения <a href="http://company.yandex.ru/public/subbotnik/" target="_blank">в разделе Яндекс.Субботников</a>.</p>
<p>Обещали повторять Субботник примерно раз в год.</p>
<p>Яндекс молодцы! Спасибо!</p>
<div id="attachment_385" class="wp-caption alignnone" style="width: 235px"><a href="http://twitpic.com/1fs1ov"><img class="size-medium wp-image-385" title="Отзывы с Я.Субботника" src="http://valera.ws/wp-content/uploads/2010/04/869689751-225x300.jpg" alt="Отзывы с Я.Субботника" width="225" height="300" /></a><p class="wp-caption-text">Отзывы с Я.Субботника</p></div>
<p>&#8212;</p>
<p><a href="http://twitter.com/search?q=%23yandexminsk" target="_blank">Твитер</a>. <a href="http://fotki.yandex.ru/users/asebrant/album/96350?p=0" target="_blank">Фотографии</a>. <a href="http://picasaweb.google.com/flash.log/qbkUDE#" target="_blank">Еще фото</a>.</p>
<p><a href="http://blog.webdev.by/internet-v-belarusi/yandex-belarus-online/" target="_blank">Яндекс в Беларуси (конспект Я.Субботника)</a> | <a href="http://amatik.ru/yandekssubbotnik.html" target="_blank">Яндекс.Субботник в Минске. День 1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2010.04.15~yandex-subbotnik-minsk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian 5 и датчики температуры для Intel Atom (330)</title>
		<link>http://valera.ws/2010.03.14~debian-5-coretemp-intel-atom/</link>
		<comments>http://valera.ws/2010.03.14~debian-5-coretemp-intel-atom/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 10:24:19 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Intel Atom]]></category>
		<category><![CDATA[ION]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=379</guid>
		<description><![CDATA[Проблема: если на платформу ION с процессором Intel Atom (вообще — любым, но у меня Atom 330) установить Debian Linux 5, то датчики температцры процессора &#8220;из коробки&#8221; не заработают. Связано это с тем, что в моделу ядра coretemp.ko не включена поддержка этого семейства процессоров. А sensors-detect не умеет их находить. О том, как включить поддержку [...]]]></description>
			<content:encoded><![CDATA[<p>Проблема: если на платформу ION с процессором Intel Atom (вообще — любым, но у меня Atom 330) установить Debian Linux 5, то датчики температцры процессора &#8220;из коробки&#8221; не заработают. Связано это с тем, что в моделу ядра coretemp.ko не включена поддержка этого семейства процессоров. А sensors-detect не умеет их находить. О том, как включить поддержку и получать сведения о температуре, написано далее.<span id="more-379"></span> На самом деле все очень просто. Процессоры семейства Atom придерживаются старой архитектуры X86 и работают аналогично другим процессорам от Intel, т.е. их поддержка в моделу ядра есть, просто она не включена. Чтобы исправить положение, нужно пересобрать модуль ядра, который отвечает за работу с датчиками. Процедура довольно простая и по шагам описана ниже.  Кроме обновления самого модуля, требуется обновить скрипт sensors-detect, чтобы он научился находить новые датчики.</p>
<p>Debian 5.0. Как обычно, сначала требуется обновить систему. А затем:</p>
<p>0) Если еще не установлены, то устанавливаем</p>
<p>#lm-sensors  apt-get install lm-sensors</p>
<p>1) Сливаем свежую версию (2010-02-19) sensors-detect. Файл можно <a href="http://www.mediafire.com/file/umcjzryjm01/sensors-detect.rar">взять готовый</a> или выдернуть <a href="http://www.mediafire.com/file/umcjzryjm01/sensors-detect.rar" target="_blank">из официальных билдов</a>.</p>
<p>Файл должен быть положен в: /usr/sbin/sensors-detect и иметь права 755.</p>
<p>2) Готовимся к сборке модуля ядра:</p>
<p>#apt-get install build-essential linux-headers-$(uname -r) linux-source-$(uname -r | awk -F&#8217;-&#8217; &#8216;{print $1}&#8217;)</p>
<p>3) Патчим исходники стандартного дебиановского модуля coretemp</p>
<p>#cd /usr/src<br />
#wget http://mabene.icomedias.com/coretemp.patch<br />
#tar jxvf linux-source-$(uname -r | awk -F&#8217;-&#8217; &#8216;{print $1}&#8217;).tar.bz2<br />
#cd linux-source-$(uname -r | awk -F&#8217;-&#8217; &#8216;{print $1}&#8217;)<br />
#patch -p1 &lt; ../coretemp.patch</p>
<p>Здесь вы получите сообщение о неполном патче файла. Не пугайтесь, все хорошо. Последний кусок патча не применился, т.к. патч для Ubuntu, а в Debian сырец чуточку другой. Доведем патчинг до конца руками:</p>
<p>#nano drivers/hwmon/coretemp.c</p>
<p>Находим почти в конце файла строки:</p>
<p>/* check if family 6, models 0xe, 0xf, 0&#215;16, 0&#215;17 */<br />
if ((c-&gt;cpuid_level &lt; 0) || (c-&gt;x86 != 0&#215;6) ||<br />
!((c-&gt;x86_model == 0xe) || (c-&gt;x86_model == 0xf) ||<br />
(c-&gt;x86_model == 0&#215;16) || (c-&gt;x86_model == 0&#215;17))) {</p>
<p>И заменяем их на:</p>
<p>/* check if family 6, models 0xe, 0xf, 0&#215;16, 0&#215;17, 0&#215;1A, 0&#215;1C */<br />
if ((c-&gt;cpuid_level &lt; 0) || (c-&gt;x86 != 0&#215;6) ||<br />
!((c-&gt;x86_model == 0xe) || (c-&gt;x86_model == 0xf) ||<br />
(c-&gt;x86_model == 0&#215;16) || (c-&gt;x86_model == 0&#215;17) ||<br />
(c-&gt;x86_model == 0&#215;1A) || (c-&gt;x86_model == 0&#215;1C))) {</p>
<p>Суть этой замены в том, что в комментарий и оператор добавляем еще лэйблы двух семейств (одно из них как раз Atom): (c-&gt;x86_model == 0&#215;1A) || (c-&gt;x86_model == 0&#215;1C)</p>
<p>4) Собираем (билдим) модуля ядра</p>
<p>#make -j 4 -C /lib/modules/$(uname -r)/build M=/usr/src/linux-source-$(uname -r | awk -F&#8217;-&#8217; &#8216;{print $1}&#8217;)/drivers/hwmon/ modules</p>
<p>5) Копируем полученный собранный модуль ядра в нужное место:</p>
<p>#cp drivers/hwmon/coretemp.ko /lib/modules/$(uname -r)/kernel/drivers/hwmon/coretemp.ko</p>
<p>7) modprobe coretemp</p>
<p>Если ошибок нет, то все ок.</p>
<p>8) #sensors-detect (всегда отвечаем утвердительно)</p>
<p>9) #sensors (радуемся):</p>
<p>coretemp-isa-0000<br />
Adapter: ISA adapter<br />
Core 0:      +13.0°C  (crit = +95.0°C)</p>
<p>coretemp-isa-0001<br />
Adapter: ISA adapter<br />
Core 1:      +17.0°C  (crit = +95.0°C)</p>
<p>coretemp-isa-0002<br />
Adapter: ISA adapter<br />
Core 2:      +12.0°C  (crit = +95.0°C)</p>
<p>coretemp-isa-0003<br />
Adapter: ISA adapter<br />
Core 3:      +16.0°C  (crit = +95.0°C)</p>
<p>P.S. Если призагрузке модуля ядра coretemp у вас возникала такая ошибка:</p>
<p># modprobe coretemp<br />
insmod /lib/modules/2.6.26-2-686/kernel/drivers/hwmon/coretemp.ko<br />
FATAL: Error inserting coretemp (/lib/modules/2.6.26-2-686/kernel/drivers/hwmon/coretemp.ko): No such device</p>
<p>то описанное выше решение именно для вас.</p>
<p>P.S.S. Спасибо: <a href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/296478">https://bugs.launchpad.net/ubuntu/+source/linux/+bug/296478</a>, <a href="http://www.didier-segura.fr/?p=66">http://www.didier-segura.fr/?p=66</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2010.03.14~debian-5-coretemp-intel-atom/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Путешествие по восточной Европе: Подгорица</title>
		<link>http://valera.ws/2009.12.08~eastern-europe-2009-part7-podgoritsa/</link>
		<comments>http://valera.ws/2009.12.08~eastern-europe-2009-part7-podgoritsa/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 20:14:41 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[travel]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[Жизнь]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=376</guid>
		<description><![CDATA[Часть 7.
Этим летом, в самом конце июля я со своей девушкой Наташей отправился в 16-тидневное путешествие по восточной Европе. На автобусе с выездом из Минска мы проехали по территории 6 стран, 9 дней отдыхали на море. Сейчас я попытаюсь поделиться с вами впечатлениями от увиденного :).

Дорога в Подгорицу из Бара занимает около часа. Ехать можно [...]]]></description>
			<content:encoded><![CDATA[<p>Часть 7.</p>
<p>Этим летом, в самом конце июля я со своей девушкой Наташей отправился в 16-тидневное путешествие по восточной Европе. На автобусе с выездом из Минска мы проехали по территории 6 стран, 9 дней отдыхали на море. Сейчас я попытаюсь поделиться с вами впечатлениями от увиденного :).<br />
<span id="more-376"></span></p>
<p>Дорога в Подгорицу из Бара занимает около часа. Ехать можно двумя вариантами: через горы и по тоннелю. Первый вариант красивый, второй быстрый. Поэтому мы решили ехать в столицу по тоннелю, а назад &#8212; через горы.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/131-montenegro-podgoritsa-tonel.jpg" alt="" width="1000" height="563" /></p>
<p>Подгорица &#8212; это тихий безлюдный бедный городок.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/132-montenegro-podgoritsa-1.jpg" alt="" width="1000" height="563" /></p>
<p>Часть города вовсе обыкновенная деревня.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/133-montenegro-podgoritsa-2.jpg" alt="" width="1000" height="563" /></p>
<p>Часть занята жилыми кварталами советского типа.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/134-montenegro-podgoritsa-3.jpg" alt="" width="1000" height="563" /></p>
<p>Часть застроена более-менее нарядными зданиями.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/135-montenegro-podgoritsa-4.jpg" alt="" width="1000" height="563" /></p>
<p>Еще часть строений &#8212; административно-деловые. Здесь размещены все органы управления страной.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/136-montenegro-podgoritsa-5.jpg" alt="" width="1000" height="563" /></p>
<p>Даже многие правительственные здания находятся в ужасном состоянии.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/137-montenegro-podgoritsa-6.jpg" alt="" width="450" height="800" /></p>
<p>В городе есть только две достопримечательности. Фигурки инопланетян возле одного из правительственных зданий.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/138-montenegro-podgoritsa-7.jpg" alt="" width="1000" height="563" /></p>
<p>И мост Миллениум через реку Морача.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/139-montenegro-podgoritsa-8.jpg" alt="" width="1000" height="563" /></p>
<p>Площадь в центре города выглядит с одной стороны так:</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/140-montenegro-podgoritsa-9.jpg" alt="" width="1000" height="563" /></p>
<p>А с другой так:</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/141-montenegro-podgoritsa-10.jpg" alt="" width="1000" height="563" /></p>
<p>Там же припаркован заклеенный скотчем автомобиль Югославского производства.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/142-montenegro-podgoritsa-11.jpg" alt="" width="1000" height="563" /></p>
<p>На перекрестках часто встречаются камеры. Для каждой полосы отдельный светофор.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/143-montenegro-podgoritsa-12.jpg" alt="" width="1000" height="563" /></p>
<p>В городе есть один киоск.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/144-montenegro-podgoritsa-13.jpg" alt="" width="1000" height="563" /></p>
<p>Один памятник Высоукому.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/145-montenegro-podgoritsa-14.jpg" alt="" width="1000" height="563" /></p>
<p>Один большой хуй.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/146-montenegro-podgoritsa-15.jpg" alt="" width="1000" height="563" /></p>
<p>В городе развернута реклама против пьянства за рулем.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/147-montenegro-podgoritsa-16.jpg" alt="" width="1000" height="563" /></p>
<p>Есть в городе и приятные глазу места.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/148-montenegro-podgoritsa-17.jpg" alt="" width="1000" height="563" /></p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/149-montenegro-podgoritsa-18.jpg" alt="" width="1000" height="563" /></p>
<p>Например, пешеходная улочка (аналог Арбата).</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/150-montenegro-podgoritsa-19.jpg" alt="" width="1000" height="563" /></p>
<p>В каждом магазине традиционные скидки.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/151-montenegro-podgoritsa-20.jpg" alt="" width="1000" height="563" /></p>
<p>Местами город оживает. Но таких мест мало.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/eastern-europe-2009/152-montenegro-podgoritsa-21.jpg" alt="" width="1000" height="563" /></p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.12.08~eastern-europe-2009-part7-podgoritsa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS-кнопка с реакцией на наведение</title>
		<link>http://valera.ws/2009.10.25~css-button-sprite/</link>
		<comments>http://valera.ws/2009.10.25~css-button-sprite/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 15:35:10 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Жизнь]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[верстка]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=366</guid>
		<description><![CDATA[Верстка кнопки для HTML-страницы, которая работает через тег &#60;a&#62; (т.е. с нее можно, например, скопировать адресс ссылки по правому клику в браузере), собранной из CSS-спрайта. Все картинки: края, фон, края и те же элементы при наведении собраны в один CSS-спрайт.

Итак, HTML-код кнопки такой:

CSS-спрайт для нее выглядит так:

Кратко суть верстки: внешний элемент a поставляет картинку начала [...]]]></description>
			<content:encoded><![CDATA[<p>Верстка кнопки для HTML-страницы, которая работает через тег &lt;a&gt; (т.е. с нее можно, например, скопировать адресс ссылки по правому клику в браузере), собранной из CSS-спрайта. Все картинки: края, фон, края и те же элементы при наведении собраны в один CSS-спрайт.<br />
<span id="more-366"></span><br />
Итак, HTML-код кнопки такой:<br />
<script src="http://pastie.org/668995.js"></script><br />
CSS-спрайт для нее выглядит так:</p>
<p><img class="alignnone" title="CSS-спрайт кнопки" src="http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png" alt="" width="35" height="186" /></p>
<p>Кратко суть верстки: внешний элемент a поставляет картинку начала кнопки (левая часть) и делать отступ слева на ширину это картинки, первый вложенный span добавляет конец кнопки и отступ справа, второй вложенный span заливает фон кнопки и объявляет ее высоту.  Последний вложенный span нужен для размещения текста кнопки по-середине.</p>
<p>Т.к. элементы спрайта прозрачные, необходимо избегать наложения одного элемента на другой. Именно поэтому нижний элемент обрезан слева.</p>
<p>Тестировалась и работает правильно в IE 7, Opera 10, Firefox 3.5, Safari 3.1.2, Chrome 3.0.195.27.</p>
<style type="text/css">
.link {font: 11px Arial, Helvetica, sans-serif;}
.link a {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) top left no-repeat; display: block; float: left; color: #fff; text-decoration: none; margin-top: 14px; padding-left: 35px;}
.link a span {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) right -62px no-repeat; display: block; padding-right: 10px;}
.link a span span {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) 0 -31px repeat-x; display: block; height: 31px;}
.link a span span span {background: none; padding: 8px 0; margin: 0; height: auto; cursor: pointer;}
.link a:hover {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) left -93px no-repeat;}
.link a:hover span {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) right -155px no-repeat;}
.link a:hover span span {background: url(http://feedbee.server.valera.ws/files/button-demo/button-1-sprite.png) 0 -124px repeat-x;}
</style>
<p><span class="link"><a href="http://feedbee.server.valera.ws/files/button-demo/button.html"><span><span><span>Демонстрация&#8230;</span></span></span></a></span></p>
<div style="clear:both">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.10.25~css-button-sprite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Москва</title>
		<link>http://valera.ws/2009.10.24~moscow-200/</link>
		<comments>http://valera.ws/2009.10.24~moscow-200/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 17:41:13 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[travel]]></category>
		<category><![CDATA[Жизнь]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=362</guid>
		<description><![CDATA[Москва — это особенный город. Его можно можно ругать, а можно хвалить, можно ненавидеть, а можно любить; но побывать в нем надо обязательно.


Там особая атмосфера, особый размах. Этот город не такой красивый, как Питер, но там есть что посмотреть.

Перед отъездом в Москву меня убеждали, что там помойка. Нет, там чисто. Не.jpg&#8221; alt=&#8221;" width=&#8221;1000&#8243; height=&#8221;563&#8243; /&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Москва — это особенный город. Его можно можно ругать, а можно хвалить, можно ненавидеть, а можно любить; но побывать в нем надо обязательно.</p>
<p><span id="more-362"></span></p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02537.jpg" alt="" width="1000" height="563" /></p>
<p>Там особая атмосфера, особый размах. Этот город не такой красивый, как Питер, но там есть что посмотреть.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02573.jpg" alt="" width="1000" height="563" /></p>
<p>Перед отъездом в Москву меня убеждали, что там помойка. Нет, там чисто. Не.jpg&#8221; alt=&#8221;" width=&#8221;1000&#8243; height=&#8221;563&#8243; /&gt; грязнее, чем в Минске, — это точно.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02578.jpg" alt="" width="1000" height="563" /></p>
<p>Убеждали, что смотреть там не на что. Чушь! Хотя бы старые сталинские высотки — уже только они стоят того, чтобы приехать посмотреть на них живьем.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02687.jpg" alt="" width="1000" height="563" /></p>
<p>Надо сказать, что именно эти строения понравились мне в архитектуре города больше всего и оставили самые хорошие впечатления.</p>
<p>Особенно завораживающе находиться у подножья такого здания и смотреть вверх.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02597.jpg" alt="" width="1000" height="563" /></p>
<p>Ведь умели же раньше строить, не то что сейчас. Умели строить красиво.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02589.jpg" alt="" width="1000" height="563" /></p>
<p>А сейчас умеют строить прямоугольные коробки. А гордятся-то этим как! Научились строить такие здания, которые в США уже в начале прошлого века умели.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02595.jpg" alt="" width="1000" height="563" /></p>
<p>Таких зданий по городу много. Одно унилие другого.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02671.jpg" alt="" width="1000" height="563" /></p>
<p>Ими застроена практически вся набережная. Маршрут по Москве-реке, который предлагается туристам, скучен и неинтересен именно из-за отсутствия достойных строений на набережной (от Киевского вокзала до Кремля и назад).</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02649.jpg" alt="" width="1000" height="563" /></p>
<p>БольшАя часть набережной заселена деревьями.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02631.jpg" alt="" width="1000" height="563" /></p>
<p>Еще кусок занимают производственные здания.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02667.jpg" alt="" width="1000" height="563" /></p>
<p>Ну и Кремлевский сегмент.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02675.jpg" alt="" width="1000" height="563" /></p>
<p>Почти отовсюду видны небоскребы Москва-Сити.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02638.jpg" alt="" width="1000" height="563" /></p>
<p>Местами даже красиво.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02679.jpg" alt="" width="1000" height="563" /></p>
<p>А вот так выглядят современные спальные районы Москвы, отдаленные от центра.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02606.jpg" alt="" width="1000" height="563" /></p>
<p>Или вот так&#8230;</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02607.jpg" alt="" width="1000" height="563" /></p>
<p>***</p>
<p>Особенности города.</p>
<p>На Воробьевых горах собираются байкеры.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02710.jpg" alt="" width="1000" height="563" /></p>
<p>В метро прессу и мелочи продают автоматы за монеты.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02722.jpg" alt="" width="1000" height="563" /></p>
<p>А в городе встречаются автоматы по приему банок и бутылок за те же монеты.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02700.jpg" alt="" width="1000" height="563" /></p>
<p>БМВ рекламируется возле Кремля.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02682.jpg" alt="" width="1000" height="563" /></p>
<p>Даже у Путина баннер меньше.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02758.jpg" alt="" width="1000" height="563" /></p>
<p>В цетре города стоит НЛО.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02652.jpg" alt="" width="1000" height="563" /></p>
<p>В центре на переходах рельефная плитка. Вообще, в Москве только и переходи дорогу, если ты слепой. Сразу переедут. Без вариантов.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02542.jpg" alt="" width="1000" height="563" /></p>
<p>А в транспорте турникеты.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02545.jpg" alt="" width="1000" height="563" /></p>
<p>По всему городу развешены флаги России и Москвы в связке. Отдельно флаг России встретил только в двух местах, одно из которых — Кремль.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02717.jpg" alt="" width="1000" height="563" /></p>
<p>Московский ГУМ ночью похож на здание из рекламы Кока-Колы.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02752.jpg" alt="" width="1000" height="563" /></p>
<p>Хороший контраст Кремлю на Красной площади.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02753.jpg" alt="" width="1000" height="563" /></p>
<p>Кстати, куранты. Я раньше думал, что эта башня где-то по-центру. Оказалась скраю.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02754.jpg" alt="" width="1000" height="563" /></p>
<p>Закрытые казино на Новом арбате еще не успели разобрать.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02765.jpg" alt="" width="1000" height="563" /></p>
<p>А Старый арбат — скучная пешеходная улочка с кучей кофеен (сбился со счету) и синим троллейбусом.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02760.jpg" alt="" width="1000" height="563" /></p>
<p>Селиться надо в Измайлово-Вега. Недорого, но шикарно.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02609.jpg" alt="" width="450" height="800" /></p>
<p>А отличный повод съездить в Москву — следующий HighLoad++.</p>
<p><img src="http://feedbee.server.valera.ws/pictures/travel/moscow-2009/dsc02735.jpg" alt="" width="1000" height="563" /></p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.10.24~moscow-200/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пакетная обработка изображений с помощью ImageMagick</title>
		<link>http://valera.ws/2009.10.19~imagemagick-batch-processing/</link>
		<comments>http://valera.ws/2009.10.19~imagemagick-batch-processing/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 07:19:53 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Все рубрики]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=358</guid>
		<description><![CDATA[Иногда возникает необходимость пакетной обработки изображений: изменить размеры, цветовые характеристики, наложить водяной знак или копирайт. Для проведения таких операций для Windows существует куча софта, с которым надо разбираться. В Linux-е все намного проще. Достаточно установить* пакеты ImageMagick-а и написать небольшой скрипт.

Моя задача была в том, чтобы проставить копирайты и уменьшить размеры изображений для вставки на [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда возникает необходимость пакетной обработки изображений: изменить размеры, цветовые характеристики, наложить водяной знак или копирайт. Для проведения таких операций для Windows существует куча софта, с которым надо разбираться. В Linux-е все намного проще. Достаточно установить* пакеты ImageMagick-а и написать небольшой скрипт.<br />
<span id="more-358"></span><br />
Моя задача была в том, чтобы проставить копирайты и уменьшить размеры изображений для вставки на сайт. Учесть было необходимо тот факт, что есть изображения горизонтальные и вертикальные. После некоторого времени вспоминания синтаксиса shell-скриптов для bash и чтения очень добротного <a href="http://www.imagemagick.org/script/command-line-tools.php" target="_blank">мануала по ImageMagick Console Tools</a> родился на свет следующий скрипт:</p>
<p><script src="http://pastie.org/660242.js"></script></p>
<p>Пакетная обработка фотографий на Линуксе — это просто!</p>
<p>* — apt-get install imagemagick</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.10.19~imagemagick-batch-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Форматы времени в MySQL: TIMESTAMP vs DATE[TIME]</title>
		<link>http://valera.ws/2009.09.17~time-formats-in-mysql/</link>
		<comments>http://valera.ws/2009.09.17~time-formats-in-mysql/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 20:38:47 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=351</guid>
		<description><![CDATA[В MySQL 5 есть несколько типов данных для хранения даты и времени. Это TIMESTAMP, DATE, DATETIME, TIME и YEAR. Все они обладают своими особенностями, и выбор в пользу того или иного календарного типа должен производиться отдельно в каждой конкретной ситуации. Я хотел бы поделиться с вами результатом моего сегодняшнего миниисследования этих типов, в том числе [...]]]></description>
			<content:encoded><![CDATA[<p>В MySQL 5 есть несколько типов данных для хранения даты и времени. Это TIMESTAMP, DATE, DATETIME, TIME и YEAR. Все они обладают своими особенностями, и выбор в пользу того или иного календарного типа должен производиться отдельно в каждой конкретной ситуации. Я хотел бы поделиться с вами результатом моего сегодняшнего миниисследования этих типов, в том числе в аспекте работы с временными зонами.<span id="more-351"></span>Итак, все календарные типы данных подробно описаны в разделе «10.3. <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-types.html">Date and Time Types</a>» руководства по MySQL. А важная информация, касающаяся поддержки СУБД временных зон, расписана в разделе «9.7. <a href="http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html">MySQL Server Time Zone Support</a>». Все следующее далее базируется на изучении руководства. В то же время, в здесь указаны лишь нюансы выбора в пользу того или иного типа, поэтому этот материал никак не заменяет мануал, но дополняет его.</p>
<p>Вначале краткая характеристика каждого из типов:</p>
<ul>
<li>TIMESTAMP — тип данных для хранения даты и времени. Данные хранятся в виде количества секунд, прошедших с начала «эпохи Юникса». Диапазон значений: 1970-01-01 00:00:00 — 2038-12-31 00:00:00. Занимает 4 байта.</li>
<li>YEAR — тип данных для хранения года. Диапазон значений: 1901 — 2155. Занимает 1 байт.</li>
<li>DATE — тип данных для хранения даты. Диапазон значений: 1000-01-01 — 9999-12-31. Занимает 3 байта.</li>
<li>TIME — тип данных для хранения времени. Диапазон значений: −828:59:59 — 828:59:59. Занимает 3 байта.</li>
<li>DATETIME — тип данных для хранения даты и времени. Диапазон значений: 1000-01-01 00:00:00 — 9999-12-31 00:00:00. Занимает 8 байт.</li>
</ul>
<p><em>Хозяйке на заметку</em>. Интересно то, что большинство программистов полагают, что понятие «timestamp» — это и есть Unix-время. На самом же деле, <a href="http://en.wikipedia.org/wiki/Timestamp">timestamp</a> — это метка, которая представляет собой последовательность символов, обозначающих дату и / или время, когда определенное событие произошло. А «<a href="http://en.wikipedia.org/wiki/Unix_time">время Юникса</a>» (Unix time) или POSIX time — это количество секунд, прошедших с полуночи 1 января 1970 года по UTC. Понятие timestamp шире, чем Unix time.</p>
<p>Проанализировав описание типов, представленное выше, можно сделать практически все выводы о достоинствах и недостатках тех или иных типов. Все довольно просто и очевидно.</p>
<p>Но прежде, чем рассказать об использовании этих типов, хочу заметить, что на практике часто используется другой тип для хранения даты и времени: целочисленное значение (для хранения даты — INT (4 байта), даты и времени — BIGINT (8 байт)). Отличие использования целочисленных типов от DATE и DATETIME лишь в том, что при выводе данные не форматируются, а в вычислениях с датами и временем целые числа требуется преобразовывать в соответствующий календарный тип. Кроме того, не производится проверка на валидность представленного значения перед сохранением. Возможности сортировки сохраняются. Поэтому INT и BIGINT имеет смысл использовать в тех же случаях, как DATE и DATETIME, с целью максимизации переносимости и независимости от СУБД. Других преимуществ я не вижу, если они есть, предлагаю указать в комментах.</p>
<h2>Использование календарных типов данный в MySQL</h2>
<p>Начнем с самого простого — тип <strong>YEAR</strong>. Единственное его достоинство — малый размер — всего-то 1 байт. Но из-за этого действует строгое ограничение по диапазону допустимых значений (тип может хранить только 255 разных значений). Мне сложно представить практическую ситуацию, когда может потребоваться хранить года строго в диапазоне от 1901 до 2155. Кроме того, тип SMALLINT (2 байта) дает  диапазон, достаточный в большинстве ситуаций для хранения года. А экономить 1 байт на строке в таблице БД в наше время смысла нет.</p>
<p>Типы <strong>DATE</strong> и <strong>DATETIME</strong> можно объединить в одну группу. Они хранят дату или дату и время с довольно широким диапазоном допустимых значений, независимую от установленной на сервере временной зоны. Их использование определенно имеет практический смысл. Но если требуется хранить даты исторических событий, уходящие в прошлое за Нашу эру, придется выбрать другие типы данных. Для хранения дат неких событий, потенциально выходящих за рамки диапазона типа TIMESTAMP (дни рождений, даты выпуска продуктов, избрания президентов, запуски космических ракет и т.д.), отлично подойдут эти типы. При использовании этих типов нужно учитывать один важный нюанс, но об этом ниже.</p>
<p>Тип <strong>TIME</strong> можно использовать для хранения промежутка времени, когда не нужна точность меньше 1 секунды, и промежутки времени меньше 829 часов. Добавить тут больше нечего.</p>
<p>Остался самый интересный тип — <strong>TIMESTAMP</strong>. Рассматривать его надо в сравнении с DATE и DATETIME: TIMESTAMP тоже предназначен для хранения даты и/или времени происхождения неких событий. Важное отличие между ними в диапазонах значений: очевидно, что TIMESTAMP не годится для хранения исторических событий (даже таких, как дни рождений), но отлично подходит для хранения текущих (логирование, даты размещения статей, добавления товаров, оформления заказов) и предстоящих в обозримом будущем событий (выходы новых версий, календари и планировщики и т.д).</p>
<p>Основное удобство использования типа TIMESTAMP состоит в том, что для столбцов этого типа в таблицах можно задавать значение по умолчанию в виде подстановки текущего времени, а так же установки текущего времени при обновлении записи. Если вам требуется эти возможности, то с вероятностью 99% TIMESTAMP &#8211; именно то, что вам нужно. (Как этоделать, смотрите в мануале.)</p>
<p>Не стоит бояться того, что с приближением к 2038 году ваш софт перестанет работать. Во-первых, до этого времени вашим софтом, скорее всего, просто перестанут пользоваться (особенно версиями, которые пишутся сейчас). Во-вторых, с приближением к этой дате разработчики MySQL обязательно что-нибудь придумают для сохранения работоспособности вашего софта. Все решится так же хорошо, как проблема Y2K.</p>
<p>Итак, тип TIMESTAMP используем для хранения дат и времени свершения событий нашего времени, а DATETIME и DATE — для хранения дат и времени свершения исторических событий, или событий глубокого будущего.</p>
<p>Диапазоны значений — это важное отличие между типами TIMESTAMP, DATETIME и DATE, но не главное. <strong>Главное</strong> то, что TIMESTAMP хранит значение в <a href="http://en.wikipedia.org/wiki/Coordinated_Universal_Time">UTC</a>. При сохранении значения оно переводится из текущего временной зоны в UTC, а при его чтении — во время текущей временной зоны из UTC. DATETIME и DATE хранят и выводят всегда одно и то же время, независимо от временных зон.</p>
<p>Временные зоны <a href="http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html">устанавливаются</a> в СУБД MySQL глобально или <strong>для текущего подключения</strong>.<strong>Последнее можно использовать для обеспечения работы разных пользователей в разных временных зонах на уровне СУБД</strong>. Все значения времени физически будут храниться в UTC, а приниматься от клиента и отдаваться клинту — в значениях его временной зоны. Но только при использовании типа данных TIMESTAMP. DATE и DATETIME всегда принимают, хранят и отдают одно и то же значение.</p>
<p>Функция NOW() и ее синонимы возвращают значение времени в текущей временной зоне пользователя.</p>
<p>Учитывая все эти обстоятельства, необходимо быть крайне внимательными при изменении временной зоны в пределах подключения к серверу и использовании типов DATE и DATETIME. Если надо хранить дату (например, дату рождения), то никаких проблем не будет. Дата рождения в любой зоне одинаковая. Т.е. если вы родились 1 января в 0:00 UTC/GMT+0, то это <strong>не</strong> значит, что в Америке будут праздновать ваш день рождения 31 декабря. Но если вы решите хранить <strong>время</strong> события в столбце DATETIME, то тут уже построить работу с пользовательскими временными зонами на уровне СУБД просто не выйдет. Поясню на примере:</p>
<p>Пользователь X работает в зоне UTC/GMT+2, Y — в зоне UTC/GMT+3. Для соединений пользователей с MySQL установлена соответствующая (у каждого своя) временная зона. Пользователь размещает сообщение на форуме, нас интересует дата написания сообщения.</p>
<p>Вариант 1: DATETIME. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. Значение в поле «дата» сообщения подставляется как результат выполнения функции NOW() — 14:00. Пользователь Y считывает время написания сообщения и видит те же 14:00. Но у него в настройках стоитзона UTC/GMT+3, и он думает, что сообщение было написано не только что, а час назад.</p>
<p>Вариант 2: TIMESTAMP. Пользователь X пишет сообщение в 14:00 UTC/GMT+2. В поле «дата» попадает результат выполнения функции NOW() — в данном случае — 12:00 UTC/GMT+0. ПользовательY считывает время написания сообщения и получает (UTC/GMT+3)(12:00 UTC/GMT+0) = 15:00 UTC/GMT+3. Все получается ровно так, как мы хотим. И главное — пользоваться этим крайне удобно: для поддержки пользовательских временных зон не нужно писать никакой код приведения времени.</p>
<p>Возможности подстановки текущего времени и работы с временными зонами в типе TIMESTAMP настолько весомы, что если вам в неком логе надо хранить дату без времени, все равно стоит использовать TIMESTAMP, вместо DATE, не экономя 1 байт разницы между ними. При этом на &#8220;00:00:00&#8243; просто не обращать внимания.</p>
<p>Если же вы не можете использовать TIMESTAMP из-за относительно малого диапазона его значений (а обычно это 1—2 случая против 10—15 в базе сайта), придется использовать DATETIME и аккуратно его корректировать значения в нужных местах (т.е. при записи в это поле переводить дату в UTC, а при чтении — во время в зоне считывающего пользователя). Если вы храните только дату, то скорее всего не важно, какая у вас временная зона: новый год все празднуют 1 января по локальному времени, ничего переводить тут не понадобится.</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.09.17~time-formats-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Определение версии браузера</title>
		<link>http://valera.ws/2009.09.16~browser-version-detection/</link>
		<comments>http://valera.ws/2009.09.16~browser-version-detection/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 08:49:27 +0000</pubDate>
		<dc:creator>Валера Леонтьев</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Все рубрики]]></category>
		<category><![CDATA[браузеры]]></category>

		<guid isPermaLink="false">http://valera.ws/?p=347</guid>
		<description><![CDATA[Вчера возникла задача определения версии браузера посетителя сайта, чтобы выводить сообщение об устаревшей версии браузера. Гуглинг не дал готового кода. PHP функция get_browser вообще нормально не работает. Пришлось написать PHP-код определения весии браузера самому. Итак, задача из HTTP-заголовка UserAgent получить название и версию браузера пользователя, а затем сравнить версию с некими барьерными версиями (по каждому [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера возникла задача определения версии браузера посетителя сайта, чтобы выводить сообщение об устаревшей версии браузера. Гуглинг не дал готового кода. PHP функция <a href="http://us2.php.net/manual/en/function.get-browser.php" target="_blank">get_browser</a> вообще нормально не работает. Пришлось написать PHP-код определения весии браузера самому.<span id="more-347"></span> Итак, задача из HTTP-заголовка UserAgent получить название и версию браузера пользователя, а затем сравнить версию с некими барьерными версиями (по каждому браузеру). Если браузер старше барьерных версий, будем выводить сообщение об ошибке.</p>
<p>Детектить версии нужно только популярных в СНГ немобильных версий браузеров, поэтому в моем коде определяется только Opera, Firefox, Safari, Internet Explorer и Google Chrome. Если вам потребуется определить версии большего числа браузеров, код можно легко дополнить.</p>
<p>Чтобы не раскидывать функции по проекту, весь код я оформляю в классы. Создадим статический класс, в котором будут два метода: определение версии браузера и сравнение версии с данными барьерными версиями по каждому из браузеров. Назовем его BrowserUtils.</p>
<p><script src="http://pastie.org/618513.js"></script> Класс состоит из двух методов: определение браузера и его версии и сравнении полученной версии с пороговыми версиями по разным браузерам. Использовать класс очень просто:  <script src="http://pastie.org/618518.js"></script></p>
<p>Единственный нюанс по коду есть у Safari. Все версии этого браузера всегда посылали в UserAgent тег Safari/build, где buld — версия их движка. Это большая первая цифра, например 528.16. Так версии Safari отображаются в Google Analytics. Но более поздние версии стали писать свою версию в теге Version. Выглядит это примерно так: Version/4.0.2.</p>
<p>Так как мне требовалось выводить версию пользователю, я использовал код считывания версии из тега Version, а для старых версий не детектит номер версии.</p>
<p><a href="http://valera.ws/files/browser_detection.zip">Скачать</a> PHP-код определения версии браузера.</p>
]]></content:encoded>
			<wfw:commentRss>http://valera.ws/2009.09.16~browser-version-detection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
