<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6628779693579680893</id><updated>2011-11-28T02:21:43.168+02:00</updated><category term='непрерывная интеграция continuous integration CI антипаттерны'/><category term='болтовня'/><title type='text'>Блог</title><subtitle type='html'>Достали уже хвосты распускать. А чем я хуже?</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kozlenkodmitry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6628779693579680893/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://kozlenkodmitry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kozlenko Dmitry</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='32' src='http://4.bp.blogspot.com/_hg4ok5n_TEQ/S0Xd-vQCgFI/AAAAAAAAALQ/XEBnOLbP19g/S220/avatar2.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6628779693579680893.post-3884812972247728254</id><published>2010-02-05T02:42:00.001+02:00</published><updated>2010-02-05T18:14:29.353+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='непрерывная интеграция continuous integration CI антипаттерны'/><title type='text'>Непрерывная Интеграция. Антипаттерны.</title><content type='html'>&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:204; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:204; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;}span.a {mso-style-type:personal; mso-style-noshow:yes; mso-style-unhide:no; mso-ansi-font-size:11.0pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; color:windowtext;}.MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-fareast-language:EN-US;}@page Section1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;}div.Section1 {page:Section1;}--&gt;&lt;/style&gt;  &lt;/m:defjc&gt;&lt;/m:rmargin&gt;&lt;/m:lmargin&gt;&lt;/m:dispdef&gt;&lt;/m:smallfrac&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: large;"&gt;Непрерывная Интеграция. Антипаттерны.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Так получилось, что с недавнего времени в компании на которую я работаю решили ввести практику Непрерывной Интеграции сборок.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;О том, что из себя представляет сама практика писать не буду - об этом и так неплохо описано в &lt;a href="http://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F"&gt;вики&lt;/a&gt;. Попытаюсь высказать свои мысли по этой теме, которые, возможно, будут полезны для людей, которые тоже решат использовать в своих проектах эту полезнейшую практику. Также надеюсь что те, кто уже ее используют, дополнят список своими "обожженными местами".&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Полезности, которые дает НИ. Перечислены не возможности, а именно полезности - что на мой взгляд является действительно самым важным. Приоритет по убыванию:&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i&gt;1. Максимально быстрое извещение разработчиков о том, что их изменения что-то где-то поломали;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i&gt;2. Авто-сбор статистики по различным метрикам;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;i&gt;3. Возможность автоматизировать обновление производственного сервера (в случае серверных приложений) или выкладывание новых инсталляционных файлов на сервер (в случае настольных приложений).&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Теперь о тех условиях, без которых, как мне кажется, НИ не может иметь жизнь.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;1. Система контроля версий.&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Очевидно. Одно из главных условий - без нее очень трудно отследить когда и какие были внесены изменения, и, соответственно, запустить сборку проекта в нужное время и в нужном состоянии.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;2. Автоматическая сборка системы.&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Система должна "уметь" собираться без участия разработчика - никаких запросов "Вы уверены что хотите запустить модульные тесты?" или "Укажите путь к библиотеке ***:" не должно быть - иначе НИ скрипт/cервер не сможет собрать проект в фоновом режиме. Так же желательно, что бы сборка осуществлялась в один запуск, хотя это уже не обязательно - практически все современные НИ инструменты позволяют создавать композитные шаги для сборки.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;3. Все включено.&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Все используемые при сборке библиотеки должны быть включены в репозиторий. В идеале - что бы можно было сделать чекаут проекта из репозитория на "чистой" машине и удачно собрать проект. Само собой, это правило не касается инструментов, осуществляющих тот или иной шаг сборки - компиляторы, инструменты тестирования и т.п. - поэтому слово "чистой" было взято в кавычки. Речь идет о библиотеках исходного кода, которые использует разрабатываемая система. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;4. Правильное производственное окружение на НИ сервере.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Наверняка все сталкивались с ситуацией, когда у одного разработчика на его рабочей машине "все собирается", а у другого тот же самый код упорно не хочет собираться и ужасно ругается. После изнурительных разборов оказывается, что первый доставил себе какую-то библиотеку и забыл ее включить в репозиторий. Это правило не дает подобному случится (ну случится-то случится, но исправления будут происходить куда как быстрее). Если говорить коротко, то сборки продуктов должны проходить на системе, которая повторяет окружение основной производственной системы.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;5. Быстрая сборка.&lt;/b&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Условие, которое гласит так: время собирания проекта не должен занимать времени более, чем теоретическое количество времени между коммитами в команде разработки. Причина - сама непрерывность сборки - т.е. основные сборки не должны становиться в очередь, а должны успевать собраться до следующего коммита изменений в репозиторий. В маленьких системах это не проблема, но если система большая, то процесс сборки разбивается на несколько частей - первая (занимающая менее 10 минут) - это основная компиляция и минимальный набор тестов, далее - уже более громоздкие тесты, которые можно убрать в бекграунд и поставить в очередь, и результаты неудачи по которым не будут критичными. Также здесь можно применить подход разделенной компиляции, где компиляция происходит по частям на разных серверах или персональных машинах.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;6. Правила извещений и развертывания.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Описанные логические правила "если - то", по которым будет писаться скрипт/рецепт/конфигурация запуска сборки. Т.е. что необходимо делать при успешном/не успешном результате того или иного шага сборки (и всей сборки в целом) и кого нужно уведомлять. Почему это на мой взгляд является правилом описывает один из антипаттернов ниже.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Для себя я выделил некий список антипаттернов - то, чего стоит избегать настраивая у себя в проекте НИ. Некоторые из них встретил в процессе серфинга на тему, к сожалению обожженных хватает, другие в процессе настройки и использования практики НИ лично. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;1. Молоток с тридцатью разными режимами работы.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Представьте что вы работаете в цеху, где собирают мебель из готовых компонентов. Задача работника цеха - забить гвоздь между двумя деталями. Вы просите молоток для забивания этого единственного гвоздя, а мега-продвинутый нач. цеха дает вам пятикилограммовый молоток с ручками и рычажками, который можно настроить на забивание чего угодно и где угодно (и в каких угодно условиях). Ваша реакция? Вот такая же будет реакция у человека, которому говорят что для непрерывных сборок проекта "Convert CSV 2 INI" поднят огромный CI сервер, чья проектная настройка включает в себя больше строк, чем строк в самом проекте. А ведь достаточно было написать python скрипт, который собирает и отправляет уведомления, и всем бы было хорошо. Помните, что цель должна оправдывать средства, и если есть способ "сделать это проще" при настройке НИ - делайте, не надо быть мега-продвинутым нач. цеха и закладываться на возможные условия работы при нулевой гравитации.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;2. Редкая синхронизация кода.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Это когда разработка долгое время ведется вне ветки trunk. Это даже не антипаттерн CI, а антипаттерн в целом - чем более долгое время ветки не сливаются, тем более долгое время разработчики исправляют полученные конфликты и имеют много головной боли (и руководители вместе с ними). Решение очевидно - почаще сливайте ветки и не делайте "забытых" веток - за каждую ветку и за ее слияние должен кто-то отвечать.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;3. Поврежденные сборки.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Чем больше неисправленных вовремя сборок, тем медленнее будет реакция на следующие поломки. Как я уже писал - первостепенная задача НИ - это максимально быстрое извещение о поломке. Если сборка не исправлена, значит все последующие тоже поломаны, а значит сама практика теряет свой смысл. Решение тоже исходит из названия - чините сборки в первую очередь с максимальным приоритетом - не откладывайте на завтра, потому как завтра ваш коллега зальет нормальные изменения и очень испугается, увидев поломку в своей ревизии.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;4. Минимальная обратная связь.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Вот и добрались до того, о чем я писал выше. Стройте правильную схему уведомлений. Все участники должны получать ровно столько, сколько нужно. Этот антипаттерн обычно применяют когда "сверху" сказали настроить НИ, и тот, кто его настраивает не заинтересован в результате. Что-то там настроил, что-то там сделал, поставил одного себя в список на уведомления и забы(и)л. А разработчики даже и не подозревают, что сборки ломаются и что у них вообще есть настроенный сервер НИ. Вывод - сначала описываем условия и участников, потом настраиваем НИ.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;5. Чрезмерная обратная связь.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Обратная сторона предыдущего антипаттерна. Когда информация льется рекой на всех - кто когда запустился, полные логи всех процессов, логи когда НИ ждал, и т.п. И в результате имеем переполнение буфера у разработчиков и полное игнорирывание уведомлений он НИ сервера. Лечится как и в предыдущем пункте.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;6. Медленная система.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Если у вас серьезные проект, и время сборки уже существенно большое, то стоит пойти к начальству и попросить хорошее железо под ваш НИ сервер. Чем дольше выполняется сборка, тем дольше будут слатся уведомления, и тем медленнее будет реакция разработчиков.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;7. Перегруженная сборка.&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Дополнение к предыдущему антипаттерну. Если сборка двигается медленно даже на многоядерном сервере занимающем много полочек в серверной, то стоит задуматься о разбиении сборки на важные и не очень важные части (уже упоминал выше) и оставлять в главное очереди сборки только важное, вынося не очень важное в отдельные сборки которые могут и подождать.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Вот пока и все. Надеюсь эта информация хоть кому-то пригодится.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Постараюсь выкладывать дополнительную информацию по НИ в дальнейшем, есть много удобных под-практик которые можно использовать и получать от этого еще более сильное удовольствие.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Надеюсь увидеть дополнительные комментарии кто еще с какими антипаттернами встречался с НИ.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6628779693579680893-3884812972247728254?l=kozlenkodmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kozlenkodmitry.blogspot.com/feeds/3884812972247728254/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://kozlenkodmitry.blogspot.com/2010/02/blog-post.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6628779693579680893/posts/default/3884812972247728254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6628779693579680893/posts/default/3884812972247728254'/><link rel='alternate' type='text/html' href='http://kozlenkodmitry.blogspot.com/2010/02/blog-post.html' title='Непрерывная Интеграция. Антипаттерны.'/><author><name>Kozlenko Dmitry</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='32' src='http://4.bp.blogspot.com/_hg4ok5n_TEQ/S0Xd-vQCgFI/AAAAAAAAALQ/XEBnOLbP19g/S220/avatar2.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6628779693579680893.post-3355386590390839304</id><published>2010-01-07T02:43:00.002+02:00</published><updated>2010-01-07T14:50:55.674+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='болтовня'/><title type='text'>Первый пост</title><content type='html'>Тем, кто ценит свое время и зашел сюда почитать что-то, возможно для себя новое,&amp;nbsp; предлагаю не тратить время на этот пост и на другие подобные с тегом (ярлыком) "болтовня". В подобных сообщениях я буду давать волю языку (пальцам) и писать всякую дребедень, практической пользы от которой нет. Потом не говорите, что я не предупреждал.&lt;br /&gt;&lt;br /&gt;Так повелось, что в первом посте обычно пишут о том, что "вот наконец-то руки дошли до блога", что мол "давно хотел, но времени не было" и начинают вещать читателям о том, какие они умные/опытные/обиженные жизнью/просто фигню какую-нить (нужное подчеркнуть).Вот и мне бы хотелось, дорогие читатели, поумничать и по-чесняку объяснить зачем он (блог) мне нужен и какой направленности контент я в него буду постить. В заключении постараюсь прояснить некоторые нюансы, которые, как мне бы хотелось, вы держали в уме при прочтении блога и отдельных его постов.&lt;br /&gt;&lt;br /&gt;Начнем с мотивационной стороны: что именно меня подтолкнуло на этот шаг? Зачем тратить время на писанину, которую возможно будут читать только несколько человек, и еще несколько будут тролить (да-да, я не зря разделил читателей, и тролей)? До недавнего времени я абсолютно не хотел (ну может чуточку) тратить время на заведение и поддержку своего блога, так как не видел в этом практического смысла. Излить душу можно и друзьям за чашкой чая. Запостить информацию по делу (связанную непосредственно с IT) лучше в корпоративную вики, где ее будут читать твои подчиненные, становится умнее, и от чего ты будешь получать непосредственную выгоду. Зарабатывать на рекламе? Увольте. Тратить уйму времени на раскрутку и придумывание контента (да, именно придумывание, ибо для того, что бы что-то крутилось надо это что-то обновлять, а мысли есть не всегда) что бы потом заработать на этом и сразу же потратить на хостинг и на раскрутку. Нет, меня на это долго не хватит.&lt;br /&gt;&lt;br /&gt;Но музыка играла не долго. Я понимаю что у тебя, уважаемый читатель, сейчас буря эмоций: а как же банальная реклама? Как же нематериальные вложения? Увы, я пришел к этому только сейчас: я стал все чаще и чаще замечать, что если выбирать между двумя людьми, которые работают и что-то там делают, разговоры и взгляды ложатся именно на тех людей, которые вовремя смогли себя раскрутить. Замечают скорее не тех, кто много делает, а тех, кто еще и показывает свои мысли, выводы, и то, что он сделал, на всеобщее обозрение. Переломный момент - это пост Сергея (aka COTOHA) на &lt;a href="http://cotoha.info/thoughts/sexual_professional_selection/"&gt;дарвинистское видение на отношения работодателя и работовзятеля&lt;/a&gt;. Ведь действительно, чем ярче окраска, тем сильнее тебя видно. А чем сильнее тебя видно, тем больше на тебя цена. Теперь вот придется искать время на рекламу себя любимого, но кто знает, может это и принесет свои плоды.&lt;br /&gt;&lt;br /&gt;Теперь про направленность информации, которую я собираюсь постить в этот блог. Пока я буду пользовать блоггер.ком, направленности будет две. Первая будет связанна с IT - в таких постах я буду стараться передавать максимум полезной информации, разбавленных шутками-прибаутками дабы не засыпали при прочтении. Я надеюсь что подобных постов будет подавляющее большинство. Второй тип: это посты, отмеченные тегом "болтовня" - там будет подобная этому посту вода, которую можно без зазрения совести пропустить и перейти к основным блюдам. Возможно как только осилю (хотя меня терзают смутные сомнения) подпилить вордпресс и перенести туда блог, появится третья направленность - личная, слезливо-сопливая, в которую я буду изливать душу и делиться самым сокровенным. Доступ будет ограничен, дабы не портить психику всему честному народу а напрягать только самых близких друзей. Но это пока так, только проект, и не факт что он будет реализован.&lt;br /&gt;&lt;br /&gt;Теперь по поводу нюансов:&lt;br /&gt;&lt;br /&gt;1. Все, что было и будет написано является моим личным мнением. Настоятельно не рекомендую абсолютно верить написанному, указывать меня как авторитетный источник или думать что-либо подобное. Если не уверенны, проверьте и, если я таки не прав, запостите коммент где именно и при каких обстоятельствах.&lt;br /&gt;&lt;br /&gt;2. Думайте перед тем, как что-нибудь откомментировать. Тролей не люблю и не уважаю, вне зависимости от того, тролят сам пост или чей-то коммент.&lt;br /&gt;&lt;br /&gt;А вообще я добрый и пушистый, и сегодня у меня свободный вечер и действительно нечего делать. Оттого я так и расписался тут.&lt;br /&gt;&lt;br /&gt;А еще заметил что мода на латынь пошла. Так что revis esse laboro, obscurus fiо. Вот.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6628779693579680893-3355386590390839304?l=kozlenkodmitry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://kozlenkodmitry.blogspot.com/feeds/3355386590390839304/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://kozlenkodmitry.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6628779693579680893/posts/default/3355386590390839304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6628779693579680893/posts/default/3355386590390839304'/><link rel='alternate' type='text/html' href='http://kozlenkodmitry.blogspot.com/2010/01/blog-post.html' title='Первый пост'/><author><name>Kozlenko Dmitry</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='32' src='http://4.bp.blogspot.com/_hg4ok5n_TEQ/S0Xd-vQCgFI/AAAAAAAAALQ/XEBnOLbP19g/S220/avatar2.png'/></author><thr:total>7</thr:total></entry></feed>
