<?xml version="1.0" encoding="UTF-8"?><rss version="0.92">
<channel>
	<title>Блог Андрея Смирнова</title>
	<link>http://www.smira.ru</link>
	<description></description>
	<lastBuildDate>Wed, 24 Aug 2011 05:09:27 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	<!-- generator="WordPress/3.2.1" -->

	<item>
		<title>Пример использования guppy/heapy</title>
		<description><![CDATA[Guppy &#8211; классный профилировщик памяти для Python. К сожалению, им довольно сложно пользоваться, а документация оставляет желать лучшего. Один из разработчиков pkgcore написал отличную статью об использовании Guppy, которая располагалась по адресу: http://www.pkgcore.org/trac/pkgcore/doc/dev-notes/heapy.rst. Статья больше недоступна, я нашел исходник на bitbucket и превратил в PDF/HTML для простоты использования: How to use guppy/heapy for tracking down [...]]]></description>
		<link>http://www.smira.ru/2011/08/24/guppy-heapy-usage/</link>
			</item>
	<item>
		<title>Не забудь сделать escape!</title>
		<description><![CDATA[Когда я только начинал программировать в web, правильно сделать escape данных было непростой задачей: никаких хороших библиотек не было или приходилось писать что-то свое, при этом на каждом шагу не забывая поставить нужный escape. Сегодня отличные библиотеки, такие как Ruby on Rails, позволяют &#171;расслабиться&#187; и забыть о том, что такое escaping (по крайней мере до [...]]]></description>
		<link>http://www.smira.ru/2010/10/31/dont-forget-about-escaping/</link>
			</item>
	<item>
		<title>UDF в MySQL, json или то, как забрать обновления данных из БД</title>
		<description><![CDATA[Иногда необходимо забирать данные из БД MySQL в режиме реального времени во внешнюю систему, которая никак не связана с MySQL. Существует множество возможных решений, например, можно реализовать &#171;слейва&#187; MySQL, который бы хранил полученные данные во внешней системе. Одно из возможных решений &#8211; сделать &#171;выгрузку&#187; данных из MySQL с помощью UDF (User Defined Functions) и триггеров. [...]]]></description>
		<link>http://www.smira.ru/2010/10/30/mysql-udf-json-memcacheq/</link>
			</item>
	<item>
		<title>HighLoad-2010: Приемы разработки высоконагруженных приложений на Twisted/Python</title>
		<description><![CDATA[25-26 октября состоялся HighLoad-2010, конференция получилось хорошей хотя бы потому, что было мало докладов ни о чем. Неплохой уровень, особенно было приятно увидеть &#171;профессоров&#187; PostgreSQL. Я выступал с докладом &#171;Приемы разработки высоконагруженных приложений на Twisted/Python&#187;. В докладе получилась (вполне сознательно) сборная солянка из советов и приемов о том, как писать приложения на Twisted (и похожих [...]]]></description>
		<link>http://www.smira.ru/2010/10/28/highload-2010-twisted-python-development/</link>
			</item>
	<item>
		<title>Профайлинг Twisted-приложений</title>
		<description><![CDATA[Часто сам забываю, как профилировать легко и быстро Twisted-приложения (с некоторым изменениями подойдет для любых Python-приложений). Кроме Twisted нам понадобится еще KCachegrind Запускаем наше приложение с включенным профайлингом: twistd -n --savestats --profile=myprog.hotshot myprog Подаем нагрузку, профайл собирается. Теперь с помощью утилиты hotshot2cg из поставки KCachegrind превращаем hotshot-профайл в calltree-профайл, который уже умеет KCachegrind &#171;кушать&#187;. hotshot2cg [...]]]></description>
		<link>http://www.smira.ru/2010/02/15/profiling-twisted-applications/</link>
			</item>
	<item>
		<title>MySQL, ROW/STATEMENT/MIXED-репликация и триггеры</title>
		<description><![CDATA[Описанная особенность MySQL попалась мне на глаза слишком поздно, пишу, чтобы кто-то не напоролся на те же грабли. Начнем с начала. Итак, необходимо было отслеживать изменения MySQL-базы данных и складывать эти изменения в очередь (не в БД) для дальнейшей обработки внешней системой. Для отслеживания изменений подходят триггеры, но они активируются в процессе выполнения запросов транзакции [...]]]></description>
		<link>http://www.smira.ru/2010/02/15/mysql-row-statement-mixed-replication-triggers/</link>
			</item>
	<item>
		<title>HL++ (2009): Twisted Framework</title>
		<description><![CDATA[Сегодня выступал на HighLoad++ с докладом Twisted Framework &#8211; фреймворк для написания сетевых приложений в Python. Введение Последнее время в области web происходит смещение внимания с тяжелых application-серверов, которые тратят на обработку запроса сотни миллисекунд, а то и секунды, к более легковесным сервисам, передающим меньшие объемы данных с минимальной задержкой. Переход от генерации десятков и [...]]]></description>
		<link>http://www.smira.ru/2009/10/13/hl-2009-twisted-framework/</link>
			</item>
	<item>
		<title>Mongrel vs. Phusion Passenger: выбор очевиден</title>
		<description><![CDATA[Предыдущая конфигурация: nginx (главный proxy), который раздает трафик в haproxy (ради возможности балансировать по нагрузке), который распределяет нагрузку по нескольким webapp-серверам с 16-ю mongrelами на каждом Проблемы: &#171;Утекающая&#187; память, периодический out of memory на серверах, лечится только перезапуском mongrelов. Запросы, занимающие десятки секунд из-за неверной балансировки (в нагруженный mongrel все-таки попадает несколько &#171;тяжелых&#187; запросов). Сложность [...]]]></description>
		<link>http://www.smira.ru/2009/10/05/mongrel-vs-phusion-passenger-obvious-choice/</link>
			</item>
	<item>
		<title>HL++2009: Twisted Framework &#8211; фреймворк для написания сетевых приложений в Python</title>
		<description><![CDATA[На HighLoad++-2009 буду выступать с докладом Twisted Framework &#8211; фреймворк для написания сетевых приложений в Python. Конференция будет проходит 12-13 октября 2009 г. в Инфопространстве. Приглашаю всех желающих! Тезисы доклада: Архитектура сетевых сервисов, нити, процессы, асинхронный ввод-вывод. Тенденции в изменении структуры нагрузки на сетевые сервисы: AJAX, Comet/BOSH, клиент-серверная архитектура, проблема 10k. Асинхронный ввод-вывод и параллельное [...]]]></description>
		<link>http://www.smira.ru/2009/09/25/hl2009-twisted-framework-python/</link>
			</item>
	<item>
		<title>Qik Push Engine API: приглашаем разработчиков</title>
		<description><![CDATA[Qik &#8211; это сервис стриминга (вещания) и загрузки видео с мобильных телефонов. Загруженное видео можно посмотреть на сайте или на его специальной версии с мобильного телефона. Доступна интеграция с другими сервисами, такими как Twitter, Facebook и другие. Клиенты для практически всех современных моделей телефонов: iPhone, Windows Mobile, Symbian, Android, Blackberry и другие. Qik Push Engine [...]]]></description>
		<link>http://www.smira.ru/2009/07/12/qik-push-engine-api-private-beta/</link>
			</item>
	<item>
		<title>AMQP по-русски</title>
		<description><![CDATA[Сегодня довольно мало информации о протоколе AMQP (Advanced Message Queueing Protocol) и его применении, особенно русском языке. А вообще это &#8211; замечательный, уже достаточно широко поддерживаемый открытый протокол для передачи сообщений между компонентами системы с низкой задержкой и на высокой скорости. При этом семантика обмена сообщениями настраивается под нужды конкретного проекта. Такие решения существовали и [...]]]></description>
		<link>http://www.smira.ru/2009/06/08/amqp-in-russian/</link>
			</item>
	<item>
		<title>FMSPy, релиз Alpha (0.1)</title>
		<description><![CDATA[Flash Media Server written in Python (FMSPy) &#8211; это еще один RTMP-сервер для приложений на Adobe Flash/Flex/Air. FMSPy является аналогом Adobe Flash Media Server, с гораздо меньшими возможностями, однако FMSPy &#8211; совершенно бесплатный проект с открытым исходным кодом. Проект находится на ранней стадии развития, но в активной разработке. Итак, что есть на сегодняшний день: Реализация [...]]]></description>
		<link>http://www.smira.ru/2009/06/07/flash-media-server-in-python-alpha-release/</link>
			</item>
	<item>
		<title>Deferred для JavaScript (Prototype)</title>
		<description><![CDATA[Продолжая тему Deferred для JavaScript предлагаю еще одно переписывание Deferred, теперь в терминах Prototype. Подробнее о самом Deferred можно почитать в двух моих прошлых заметках: Асинхронное программирование: концепция Deferred и Deferred: все подробности. Если кратко, самое распространенное и полезное применение Deferred в JavaScript &#8211; это работа с AJAX или другими RPC-over-HTTP вызовами, когда необходимо совершить [...]]]></description>
		<link>http://www.smira.ru/2009/05/29/deferred-in-javascript-for-prototype/</link>
			</item>
	<item>
		<title>Пожар на газопроводе и информационный вакуум</title>
		<description><![CDATA[В ночь с 9-е на 10-е мая произошел разрыв газопровода, об этом знают все. Мы живем в Ново-Переделкино, примерно в шести километрах от места аварии. Как раз в момент взрыва (около 0:40) мы вышли на балкон, услышали сильный хлопок и небо осветилось. Повернув голову, мы увидели огромный гриб пламени, поднимающийся в небо. Раздался сильный гул, [...]]]></description>
		<link>http://www.smira.ru/2009/05/11/fire-in-moscow-no-information/</link>
			</item>
	<item>
		<title>ffmpeg, ошибка вида lame: output buffer too small</title>
		<description><![CDATA[Для истории, проблема один-в-один как описана в http://drupal.org/node/376012. FFmpeg, собранный с libmp3lame (для кодирования mp3) версии 3.98, сообщает следующее: lame: output buffer too small (buffer index: 9404, free bytes: 388) Он считает это фатальной ошибкой, завершается: Audio encoding failed Лечится downgrade libmp3lame до версии 3.97. Проверено на ArchLinux.]]></description>
		<link>http://www.smira.ru/2009/04/27/ffmpeg-lame-output-buffer-too-small/</link>
			</item>
	<item>
		<title>Отдых в ВКС-Кантри (Владимирская область)</title>
		<description><![CDATA[Мы провели 5 дней в доме отдыха ВКС-Кантри. В качестве варианта для отдыха рассматривали окрестности Костромы, Ярославля, Липецка, Воронежа, Курска, Орла. В район Костромы-Ярославля не поехали из-за Рыбинского водохранилища, которое поздно освобождается ото льда и сильно понижает температуру в регионе, а температура этой весной и так низкая. В Липецке, Воронеже не нашлось дома отдыха, который [...]]]></description>
		<link>http://www.smira.ru/2009/04/19/vks-country/</link>
			</item>
	<item>
		<title>Продам  свою Opel Astra 1.6 автомат Cosmo (2006 г.)</title>
		<description><![CDATA[Продам свою машинку (купил универсал в связи с увеличением семьи . Opel Astra 1.6 (105 л.с.) хэтчбек 5-дверный, цвет метро (темно-синий), 2006 г. выпуска (август), пробег 71 тыс. км. Комлектация Cosmo, биксенон, парктроник, регулировка водительского сиденья в 6-и направлениях, подлокотник, 17&#8243; колеса, система QuickHeat, задние электростеклоподъемники, салон кожа+ткань, магнитола MP3, сигнализация, европейская сборка. (Всё заводское, [...]]]></description>
		<link>http://www.smira.ru/2009/03/18/opel-astra-16-cosmo-2006/</link>
			</item>
	<item>
		<title>СпамоБорец: релиз 0.2.0</title>
		<description><![CDATA[СпамоБорец &#8211; веб-сервис, предоставляющий функции по классификации произвольных текстовых сообщений, и, в частности, выделения спама из общего потока сообщений. В качестве сообщений могут рассматриваться, например, следующие виды общения, которые сегодня есть в социальных сетях (и веб-сайтах, имеющих элементы социальной сети): личные сообщения; чаты; комментарии к произвольным объектам; девизы, сообщения &#171;о себе&#187; и т.п. на страницах [...]]]></description>
		<link>http://www.smira.ru/2009/02/27/spamfighter-dot-two-release/</link>
			</item>
	<item>
		<title>Deferred: все подробности</title>
		<description><![CDATA[В предыдущей статье были описаны основные принципы работы Deferred и его применение в асинхронном программировании. Сегодня мы постараемся рассмотреть в деталях функционирование Deferred и примеры его использования. Итак, Deferred &#8211; это отложенный результат, результат выполнения, который станет известен через некоторое время. Результатом, хранящимся в Deferred, может быть произвольное значение (успешное выполнение) или ошибка (исключение), которое [...]]]></description>
		<link>http://www.smira.ru/2009/02/24/more-about-deferred/</link>
			</item>
	<item>
		<title>Асинхронное программирование: концепция Deferred</title>
		<description><![CDATA[Асинхронная концепция программирования заключается в том, что результат выполнения функции доступен не сразу же, а через некоторое время в виде некоторого асинхронного (нарушающего обычный порядок выполнения) вызова. Зачем такое может быть полезно? Рассмотрим несколько примеров. Первый пример &#8211; сетевой сервер, веб-приложение. Чаще всего как таковых вычислений на процессоре такие приложения не выполняют. Большая часть времени [...]]]></description>
		<link>http://www.smira.ru/2009/02/10/deferred-async-programming/</link>
			</item>
	<item>
		<title>Структуры данных в memcached/MemcacheDB</title>
		<description><![CDATA[Достаточно часто нам приходится хранить данные в memcached или MemcacheDB. Это могут быть относительно простые данные, например, закэшированные выборки из базы данных, а иногда необходимо хранить и обрабатывать более сложные структуры данных, которые обновляются одновременно из нескольких процессов, обеспечивать быстрое чтение данных и т.п. Реализация таких структур данных уже не укладывается в комбинацию команд memcached [...]]]></description>
		<link>http://www.smira.ru/2009/01/21/data-structures-in-memcached-memcachedb/</link>
			</item>
	<item>
		<title>PostgreSQL vs. MySQL</title>
		<description><![CDATA[Тема этого поста была навеяна небольшим спором, разразившимся в ЖЖ. Эта битва будет вечной, как и война добра со злом, светлого и темного, FreeBSD и Linux, и т.п. Можно ломать копья, кричать &#171;кто круче&#187;, но спор ни к чему не приведет. Можно делать синтетические тесты, пытаясь определить, кто же быстрее, но один тест скажет, что [...]]]></description>
		<link>http://www.smira.ru/2009/01/06/postgresql-vs-mysql/</link>
			</item>
	<item>
		<title>МТС и &#171;долг&#187; в тысячу рублей</title>
		<description><![CDATA[Эта история грустная, но со счастливым концом. И для начала хочется сказать спасибо компании МТС, что ситуация разрешилась в лучшую сторону. Итак, всё по порядку&#8230; Обычным письмом приходит извещение от компании МТС, что на лицевом счету XXXXYYYY имеется непогашенная задолженность, что компания МТС скоро подаст в суд а данные мои передаст в бюро кредитных историй [...]]]></description>
		<link>http://www.smira.ru/2008/12/20/mts-debt-1000-ruble/</link>
			</item>
	<item>
		<title>D. J. Bernstein</title>
		<description><![CDATA[Кто такой D. J. Bernstein или просто djb? С моей точки зрения, в первую очередь, &#8211; это интереснейший человек. Людям из мира web он больше всего известен как автор интересных, безопасных и быстрых программ: qmail и djbdns. Эти программы обладают архитектурой, непохожей на все привычные серверные решения: Apache, BIND, postfix и т.п. Они пропитаны духом [...]]]></description>
		<link>http://www.smira.ru/2008/12/19/djb/</link>
			</item>
	<item>
		<title>CDN своими руками или раздача видеоконтента</title>
		<description><![CDATA[В продолжение темы про доставку видеоконтента: мы обеспечили хранение и обработку контента, как теперь отдать контент таким образом, чтобы он оказался как можно &#171;ближе&#187; к потребителю. Большая часть статьи будет посвящена обобщенному подходу географически распределенной раздачи контента, а в конце в качестве примера он будет применен к доставке видеофайлов и вещаний конечным пользователям. Необходимость географической [...]]]></description>
		<link>http://www.smira.ru/2008/12/03/cdn-content-delivery/</link>
			</item>
	<item>
		<title>Доставка видеоконтента пользователям</title>
		<description><![CDATA[Что такое «контент» для видеохостинга? Во-первых, контент видеохостинга – это просто видео, которое представляет собой набор файлов в различных форматах, в частности, в формате FLV для просмотра пользователем через Flash Player. Эти файлы статичны, видеохостинг при загрузке пользователем видеоролика осуществляет конвертацию во все требуемые форматы с необходимым битрейтом. Хранение такого контента — это хранение обычных [...]]]></description>
		<link>http://www.smira.ru/2008/12/02/video-broadcast-delivery/</link>
			</item>
	<item>
		<title>Проверка орфографии в Vim</title>
		<description><![CDATA[Чудесная возможность Vim&#8217;а! Да поможет она повышению грамотности наших разработчиков. Проверка орфографии умная, понимает, что именно в исходном файле стоит проверять (например, комментарии), а что не стоит (например, ключевые слова). Итак: Качаем отсюда словарь: http://ftp.services.openoffice.org/pub/OpenOffice.org/contrib/dictionaries/ru_RU.zip Раскрываем архив в папку /tmp/dict. mkdir -p ~/.vim/spell/ Запускаем Vim, делаем: :mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU Вуаля! Словарь готов! (Всё описанное выше [...]]]></description>
		<link>http://www.smira.ru/2008/11/17/russian-vim-spell-checking/</link>
			</item>
	<item>
		<title>Open Source: Deferred для qooxdoo</title>
		<description><![CDATA[Мы представляем начало нашего маленького проекта по выкладыванию в open-source исходного кода наших проектов (полностью или частично). Первой ласточкой становится маленькая библиотека, предназначенная для работы с Deferred из Twisted Framework в qooxdoo на JavaScript. Практически полностью код был взят из MochiKit.Async и адаптирован под qooxdoo. Полезные нововедения: если если в течение 1 секунды не будет [...]]]></description>
		<link>http://www.smira.ru/2008/11/01/open-source-deferred-qooxdoo/</link>
			</item>
	<item>
		<title>Memcached: статистика, отладка и RPC</title>
		<description><![CDATA[Серия постов про &#171;Web, кэширование и memcached&#187; продолжается. Начало здесь: 1, 2, 3, 4 и 5. В этих постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования, кластеризации, атомарных операциях и реализации счетчиков в memcached, а также о проблеме одновременного перестроения кэшей и тэгировании кэшей. Сегодняшний пост завершает эту серию, в нём [...]]]></description>
		<link>http://www.smira.ru/2008/10/31/web-caching-memcached-6/</link>
			</item>
	<item>
		<title>Сброс группы кэшей и тэгирование в memcached</title>
		<description><![CDATA[Серия постов про &#171;Web, кэширование и memcached&#187; продолжается. Начало здесь: 1, 2, 3 и 4. В этих постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования, кластеризации, атомарных операциях и реализации счетчиков в memcached, а также о проблеме одновременного перестроения кэшей. Сегодня мы поговорим о тэгировании кэшей и о возможности сброса сразу [...]]]></description>
		<link>http://www.smira.ru/2008/10/29/web-caching-memcached-5/</link>
			</item>
	<item>
		<title>Проблема одновременного перестроения кэшей</title>
		<description><![CDATA[Серия постов про &#171;Web, кэширование и memcached&#187; продолжается. Начало здесь: 1, 2 и 3. В этих постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования, кластеризации, атомарных операциях и реализации счетчиков в memcached. Сегодня мы рассмотрим проблему одновременного перестроения кэша, которая возникает при большом количестве одновременных обращений к кэшу, который был только [...]]]></description>
		<link>http://www.smira.ru/2008/10/28/web-caching-memcached-4/</link>
			</item>
	<item>
		<title>twisted.python.log и trial &#8211; веселимся вместе</title>
		<description><![CDATA[Следующий забавный случай взаимодействия частей Twisted Framework заставил меня потерять час времени, спешу рассказать, в надежде, что это спасет чьё-то время. Итак, в Twisted есть модуль логгинга, twisted.python.log, в котором есть удобный метод log.err(), который позволяет записать в лог информацию о текущем исключении. А trial &#8211; это framework для написания юнит-тестов из того же Twisted. [...]]]></description>
		<link>http://www.smira.ru/2008/10/24/twisted-log-and-trial-fun/</link>
			</item>
	<item>
		<title>Атомарность операций и счетчики в memcached</title>
		<description><![CDATA[Серия постов про &#171;Web, кэширование и memcached&#187; продолжается. В первом и втором постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования и кластеризации memcached. Сегодня речь пойдет о: атомарных операциях в memcached; реализации счетчиков просмотров и онлайнеров. Следующий пост будет посвящен проблеме одновременного перестроения кэшей. Атомарность операций в memcached Как таковые, все [...]]]></description>
		<link>http://www.smira.ru/2008/10/24/web-caching-memcached-3/</link>
			</item>
	<item>
		<title>Кластеризация memcached и выбор ключа кэширования</title>
		<description><![CDATA[Серия постов про &#171;Web, кэширование и memcached&#187; продолжается. В первом посте мы поговорили о memcached, его архитектуре и возможном применении. Сегодня речь пойдет о: выборе ключа кэширования; кластеризации memcached и алгоритмах распределения ключей. Следующий пост будет посвящен атомарности операций и счетчикам в memcached. Ключ кэширования Пусть мы уже убедились, что использовать memcached для кэширования – [...]]]></description>
		<link>http://www.smira.ru/2008/10/21/web-caching-memcached-2/</link>
			</item>
	<item>
		<title>Кэширование и memcached</title>
		<description><![CDATA[Этим постом хочу открыть небольшую серию постов по материалам доклада на HighLoad++-2008. Впоследствии весь текст будет опубликован в виде одной большой PDF-ки. Введение Для начала, о названии серии постов: посты будут и о кэшировании в Web’е (в высоконагруженных Web-проектах), и о применении memcached для кэширования, и о других применениях memcached в Web-проектах. То есть все [...]]]></description>
		<link>http://www.smira.ru/2008/10/16/web-caching-memcached-1/</link>
			</item>
	<item>
		<title>Web, кэширование и memcached (выступление на HighLoad++ 2008)</title>
		<description><![CDATA[Итак, HighLoad++ состоялся. Если говорить кратко, конференция мне понравилась. Ниже мои личные впечатления о конференции, краткие тезисы доклада и презентация. Текст доклада дописываю, есть мечта к концу недели это доделать (сейчас готова ровно половина). Тогда же текст опубликую, возможно в серии отдельных постов и в виде одной большой PDF-ки тут. Мои впечатления о конференции Итак, [...]]]></description>
		<link>http://www.smira.ru/2008/10/08/highload-plus-plus-2008/</link>
			</item>
	<item>
		<title>Анонс: выступление на HighLoad++ (2008)</title>
		<description><![CDATA[6-7 октября в Москве пройдет конференция HighLoad++. На этой конференции я представлю доклад на тему &#171;Web, кеширование и memcached&#187; (текущая программа конференции). Краткие тезисы доклада привожу ниже: Цель доклада – рассказать о проблемах кеширования в распределенных высоконагруженных проектах и о возможных путях решения этой проблемы. Предполагаемый уровень подготовки аудитории – начинающий++. UPD: доклад будет во [...]]]></description>
		<link>http://www.smira.ru/2008/09/30/highload-2008/</link>
			</item>
	<item>
		<title>Выступление на РИТ: Высокие нагрузки (2008)</title>
		<description><![CDATA[22-23 сентября в Москве состоялась конференция РИТ: Высокие нагрузки. На ней я представил доклад &#171;Доставка видеоконтента пользователям&#187; (доклад строился на нашем опыте в NetStream по проектированию Smotri.Com). Ниже вы найдете краткие тезисы доклады, полные тезисы, презентацию, а также видео с конференции. Краткие тезисы Цель доклада: познакомить аудиторию с возможными способами организации отдачи статического контента (видеофайлы) [...]]]></description>
		<link>http://www.smira.ru/2008/09/28/rit-highload-2008/</link>
			</item>
	<item>
		<title>MDC: скоро запуск</title>
		<description><![CDATA[Близко-близко уже дата запуска нашего нового суперкрутого проекта. Да, мы гордимся им! На сайте уже тикает будильник: http://mdc.ru/]]></description>
		<link>http://www.smira.ru/2008/08/27/mdc-to-be-launched-soon/</link>
			</item>
	<item>
		<title>Лог комита: зачем он нужен на самом деле?</title>
		<description><![CDATA[Разработчики уже давно привыкли пользоваться системами контроля версий. Для кого-то это является естественным переходом, кто-то воспринимает сначала систему контроля версий как некоторое дополнительное усложнение своей работы, но работа над проектом в команде невозможна без этого инструмента. Очень часто переход от мышления &#171;я сохранил файл &#8211; код зафиксирован&#187; к мышлению &#171;я сделал комит &#8211; код зафиксирован&#187; [...]]]></description>
		<link>http://www.smira.ru/2008/08/13/commit-log/</link>
			</item>
</channel>
</rss>

