<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Всё не обо всём</title>
    <link>http://blog.salikhovilyas.ru/</link>
    <description></description>
    <pubDate>2011-01-28T00:22:50Z</pubDate>
    <managingEditor>me@salikhovilyas.ru (Ильяс Салихов)</managingEditor>
    <language>en</language>
    <item>
      <title>Наша гордость</title>
      <link>http://blog.salikhovilyas.ru/2011/01/28/duma/</link>
      <description><![CDATA[<p>Полгода упорной работы, десятки (может уже сотни, кто знает) встреч, тысячи страниц материалов, еще больше тысяч строк кода &mdash; все это ради того, чтобы 24 января запустить новую версию <a href="http://www.duma.gov.ru">официального сайта Государственной Думы</a>.</p><p>Информация о проекте &mdash; <a href="http://intaro.ru/portfolio/gosduma/">http://intaro.ru/portfolio/gosduma/</a></p><p>Мой пост о настройке системы под нагрузки &mdash; <a href="http://intaro.ru/blog/2011/01/24/gosduma-highload/">http://intaro.ru/blog/2011/01/24/gosduma-highload/</a>.</p>]]></description>
      <content:encoded><![CDATA[<p>Полгода упорной работы, десятки (может уже сотни, кто знает) встреч, тысячи страниц материалов, еще больше тысяч строк кода &mdash; все это ради того, чтобы 24 января запустить новую версию <a href="http://www.duma.gov.ru">официального сайта Государственной Думы</a>.</p><p>Информация о проекте &mdash; <a href="http://intaro.ru/portfolio/gosduma/">http://intaro.ru/portfolio/gosduma/</a></p><p>Мой пост о настройке системы под нагрузки &mdash; <a href="http://intaro.ru/blog/2011/01/24/gosduma-highload/">http://intaro.ru/blog/2011/01/24/gosduma-highload/</a>.</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2011/01/28/duma/</guid>
      <pubDate>2011-01-28T00:22:50Z</pubDate>
      <category>проект</category>
      <category>Государственная Дума</category>
      <category>портал</category>
    </item>
    <item>
      <title>Symfony Camp UA 2010</title>
      <link>http://blog.salikhovilyas.ru/2010/05/22/symfony-camp/</link>
      <description><![CDATA[<p align="center">
  <img src="http://blog.salikhovilyas.ru/uploads/banner.png" border="0" />
</p>
<p>Всем, у кого есть желание и возможность побывать на конференции разработчиков Symfony, добро пожаловать на <a href="http://symfonycamp.org.ua/" title="Symfony CAMP UA 2010">Symfony CAMP UA 2010</a>.</p><p>Конференция пройдет 3 июля 2010 года, участие бесплатное. Буду освещаться тенденции развития фреймворка, актуальные проблемы разработки и <a href="http://symfonycamp.org.ua/about/topics/" title="Доклады">многое другое</a>. </p><p>Также приглашаются люди, которые будут помогать в закулисных делах конференции. Если у вас есть желание помочь, при регистрации в комментариях к заявке укажите &laquo;хочу в help team&raquo;. </p>]]></description>
      <content:encoded><![CDATA[<p align="center">
  <img src="http://blog.salikhovilyas.ru/uploads/banner.png" border="0" />
</p>
<p>Всем, у кого есть желание и возможность побывать на конференции разработчиков Symfony, добро пожаловать на <a href="http://symfonycamp.org.ua/" title="Symfony CAMP UA 2010">Symfony CAMP UA 2010</a>.</p><p>Конференция пройдет 3 июля 2010 года, участие бесплатное. Буду освещаться тенденции развития фреймворка, актуальные проблемы разработки и <a href="http://symfonycamp.org.ua/about/topics/" title="Доклады">многое другое</a>. </p><p>Также приглашаются люди, которые будут помогать в закулисных делах конференции. Если у вас есть желание помочь, при регистрации в комментариях к заявке укажите &laquo;хочу в help team&raquo;. </p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2010/05/22/symfony-camp/</guid>
      <pubDate>2010-05-22T13:47:03Z</pubDate>
      <category>symfony</category>
      <category>конференция</category>
    </item>
    <item>
      <title>Твиттер-бот Полиглот</title>
      <link>http://blog.salikhovilyas.ru/2010/01/03/polyglot/</link>
      <description><![CDATA[<div style="padding: 0pt 5px 5px 0pt; float: left"><img src="http://blog.salikhovilyas.ru/uploads/polyglot_logo.png" border="0" /></div>
<p>Сегодня за день наваял и запустил твиттер-бота с рабочим названием &laquo;Полиглот&raquo;.
</p><p><em>Адрес</em> &mdash; <a href="http://twitter.com/_polyglot">@_polyglot</a>
</p><p><em>Суть работы</em>: бот отвечает на реплаи (reply) и личные сообщения (direct message) их переводом. С помощью хеш-тегов задаются исходный и конечный языки перевода в формате #from_lang2to_lang.
</p><p><strong>Пример</strong>
</p><p><em>Запрос:</em>
</p><pre><code>salikhov: @_polyglot Мороз и солнце &mdash; день чудесный #ru2en<br />salikhov: D _polyglot It is wonderful #en2de<br /></code></pre>
<p><em>Ответ:</em>
</p><pre><code>_polyglot: D salikhov Frost and sun - a wonderful day<br />_polyglot: D salikhov Es ist wunderbar<br /></code></pre>
<p>Бот на данный момент поддерживает следующие хеш-теги:
</p><p>#zh2en #nl2en #en2ar #en2nl #en2fr #en2de #en2el #en2it #en2ja #en2ko #en2pt #en2ru #en2es #en2sv #fr2sv #de2fr #de2sv #el2en #it2en #ja2en #ko2en #pt2en #ru2en #es2en #es2sv #nl2sv #sv2de #sv2en #sv2es #sv2fr</p><p>В твиттере для такой штуковины, как мне кажется самое место, т.к. бывают случаю, когда нужно узнать перевод слова, а под рукой только телефон. Лезть через браузер на сайты-переводчики долго, а быстренько настрочить через твиттер-клиент сообщение не составляет труда.</p><p>Если говорить о технической части, то бот написан на Ruby с использованием gem-пакетов rsay и twitter4r. На данный момент бот обрабатывает входящие сообщения с частотой раз в минуту.</p><p>Писал бота в рамках продолжающегося фонового изучения Ruby, плюс ко всему поработал с Twitter API, которое к слову сказать очень &laquo;прозрачно&raquo; и понятно.</p><p>При обнаружении косяков в работе сообщайте мне в личку или здесь в комментарии. </p><p>В общем, фоловьте и пользуйтесь на здоровье :)</p><p>PS Кстати можете считать меня мазохистом, т.к. разрабатывал, отлаживал и развертывал &laquo;Полиглота&raquo; я через GPRS. </p><p><strong>UPD</strong> Все переводы &laquo;Полиглот&raquo; теперь высылает только на DM во избежание засорения френд-ленты и появления спама. Запросы как и раньше можно отправлять через reply и DM. </p>]]></description>
      <content:encoded><![CDATA[<div style="padding: 0pt 5px 5px 0pt; float: left"><img src="http://blog.salikhovilyas.ru/uploads/polyglot_logo.png" border="0" /></div>
<p>Сегодня за день наваял и запустил твиттер-бота с рабочим названием &laquo;Полиглот&raquo;.
</p><p><em>Адрес</em> &mdash; <a href="http://twitter.com/_polyglot">@_polyglot</a>
</p><p><em>Суть работы</em>: бот отвечает на реплаи (reply) и личные сообщения (direct message) их переводом. С помощью хеш-тегов задаются исходный и конечный языки перевода в формате #from_lang2to_lang.
</p><p><strong>Пример</strong>
</p><p><em>Запрос:</em>
</p><pre><code>salikhov: @_polyglot Мороз и солнце &mdash; день чудесный #ru2en<br />salikhov: D _polyglot It is wonderful #en2de<br /></code></pre>
<p><em>Ответ:</em>
</p><pre><code>_polyglot: D salikhov Frost and sun - a wonderful day<br />_polyglot: D salikhov Es ist wunderbar<br /></code></pre>
<p>Бот на данный момент поддерживает следующие хеш-теги:
</p><p>#zh2en #nl2en #en2ar #en2nl #en2fr #en2de #en2el #en2it #en2ja #en2ko #en2pt #en2ru #en2es #en2sv #fr2sv #de2fr #de2sv #el2en #it2en #ja2en #ko2en #pt2en #ru2en #es2en #es2sv #nl2sv #sv2de #sv2en #sv2es #sv2fr</p><p>В твиттере для такой штуковины, как мне кажется самое место, т.к. бывают случаю, когда нужно узнать перевод слова, а под рукой только телефон. Лезть через браузер на сайты-переводчики долго, а быстренько настрочить через твиттер-клиент сообщение не составляет труда.</p><p>Если говорить о технической части, то бот написан на Ruby с использованием gem-пакетов rsay и twitter4r. На данный момент бот обрабатывает входящие сообщения с частотой раз в минуту.</p><p>Писал бота в рамках продолжающегося фонового изучения Ruby, плюс ко всему поработал с Twitter API, которое к слову сказать очень &laquo;прозрачно&raquo; и понятно.</p><p>При обнаружении косяков в работе сообщайте мне в личку или здесь в комментарии. </p><p>В общем, фоловьте и пользуйтесь на здоровье :)</p><p>PS Кстати можете считать меня мазохистом, т.к. разрабатывал, отлаживал и развертывал &laquo;Полиглота&raquo; я через GPRS. </p><p><strong>UPD</strong> Все переводы &laquo;Полиглот&raquo; теперь высылает только на DM во избежание засорения френд-ленты и появления спама. Запросы как и раньше можно отправлять через reply и DM. </p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2010/01/03/polyglot/</guid>
      <pubDate>2010-01-03T23:10:48Z</pubDate>
      <category>ruby</category>
      <category>твиттер</category>
      <category>twitter</category>
      <category>polyglot</category>
      <category>bot</category>
      <category>twitter api</category>
      <category>rsay</category>
      <category>twitter4r</category>
    </item>
    <item>
      <title>Мысли по поводу минимизации js файлов</title>
      <link>http://blog.salikhovilyas.ru/2009/11/11/js-file-minimization/</link>
      <description><![CDATA[<p><img src="http://blog.salikhovilyas.ru/uploads/hi_js.png" border="0" alt="Мысли по поводу минимизации js файлов" title="Мысли по поводу минимизации js файлов" align="left" />Сейчас достаточно стандартной практикой стала минимизация js- и css-файлов. Сформировались как сервисы (<a href="http://dean.edwards.name/packer/">Packer от Дена Эдвардса</a>, <a href="http://fmarcia.info/jsmin/test.html">JS Minifier</a>), так и server-side скрипты для автоматической минимизации файлов (<a href="http://yuilibrary.com/downloads/#yuicompressor">YUI Comressor</a>, <a href="http://code.google.com/p/jsmin-php/">JSMin для PHP</a>). Все это очень хорошо, я не спорю. Но мне сейчас хотелось бы обсудить &laquo;стратегию&raquo; минимизации.</p><p>Дело в том, что при оптимизации загрузки страницы, как правило, рассматривают вопрос снижения времени скачивания js-файлов, но упускают вопрос инициализации загруженного кода.</p><p>Возьмем пример из реальной практики. Допустим, мы имеем портал, в котором клиентская часть (только javascript) состоит из 75 файлов общим объемом 800 Кб, в которых хранятся классы, содержащие управляющую логику, настойки и т.п., и 70% из инициализируется сразу после загрузки. </p><p>Если мы открываем такую страничку как есть с подключением 75 небольших js-файлов, то формируются очереди обращений к серверу, который скорее всего не успеет за раз быстро отдать все файлы. Но за счет постепенной загрузки и инициализации файлов пользователь видит плавную, хотя и небыструю загрузку портала.</p><p>Если мы возьмем другой крайний случай, когда все файлы минимизированы и объединены в один файл, что, к слову сказать, часто не легко сделать, то с одной стороны у нас все круто: один запрос к серверы, минимальный объем скачиваемых данных (допустим, мы сжали до 400 Кб), а с другой пользователь сидит 10 секунд, а у него ничего не происходит.</p><p>Наиболее оптимальным в данном случае мне кажется следующий вариант. Мы разбиваем минимизированный пакет на 2-3 файла, причем первый делаем наименьшего размера и вмещающим тот минимум классов, достаточный для того, чтобы страница начала &laquo;оживляться&raquo;, пока оставшиеся js-файлы будут подгружаться. Далее подгружается файл №2, который подхватывает инициализацию первого файла, в это время догружается файл №3 и далее по аналогии.</p><p>При выборе последнего варианта мы оставляем на приемлемом уровне количество запросов к серверу и общий размер js-файлов, но при этом не создаем ощущения &laquo;зависшего&raquo; браузера у пользователя при загрузке страницы.</p><p>Все вышеописанное, конечно, актуально для больших js-библиотек от 500 Кб. </p>]]></description>
      <content:encoded><![CDATA[<p><img src="http://blog.salikhovilyas.ru/uploads/hi_js.png" border="0" alt="Мысли по поводу минимизации js файлов" title="Мысли по поводу минимизации js файлов" align="left" />Сейчас достаточно стандартной практикой стала минимизация js- и css-файлов. Сформировались как сервисы (<a href="http://dean.edwards.name/packer/">Packer от Дена Эдвардса</a>, <a href="http://fmarcia.info/jsmin/test.html">JS Minifier</a>), так и server-side скрипты для автоматической минимизации файлов (<a href="http://yuilibrary.com/downloads/#yuicompressor">YUI Comressor</a>, <a href="http://code.google.com/p/jsmin-php/">JSMin для PHP</a>). Все это очень хорошо, я не спорю. Но мне сейчас хотелось бы обсудить &laquo;стратегию&raquo; минимизации.</p><p>Дело в том, что при оптимизации загрузки страницы, как правило, рассматривают вопрос снижения времени скачивания js-файлов, но упускают вопрос инициализации загруженного кода.</p><p>Возьмем пример из реальной практики. Допустим, мы имеем портал, в котором клиентская часть (только javascript) состоит из 75 файлов общим объемом 800 Кб, в которых хранятся классы, содержащие управляющую логику, настойки и т.п., и 70% из инициализируется сразу после загрузки. </p><p>Если мы открываем такую страничку как есть с подключением 75 небольших js-файлов, то формируются очереди обращений к серверу, который скорее всего не успеет за раз быстро отдать все файлы. Но за счет постепенной загрузки и инициализации файлов пользователь видит плавную, хотя и небыструю загрузку портала.</p><p>Если мы возьмем другой крайний случай, когда все файлы минимизированы и объединены в один файл, что, к слову сказать, часто не легко сделать, то с одной стороны у нас все круто: один запрос к серверы, минимальный объем скачиваемых данных (допустим, мы сжали до 400 Кб), а с другой пользователь сидит 10 секунд, а у него ничего не происходит.</p><p>Наиболее оптимальным в данном случае мне кажется следующий вариант. Мы разбиваем минимизированный пакет на 2-3 файла, причем первый делаем наименьшего размера и вмещающим тот минимум классов, достаточный для того, чтобы страница начала &laquo;оживляться&raquo;, пока оставшиеся js-файлы будут подгружаться. Далее подгружается файл №2, который подхватывает инициализацию первого файла, в это время догружается файл №3 и далее по аналогии.</p><p>При выборе последнего варианта мы оставляем на приемлемом уровне количество запросов к серверу и общий размер js-файлов, но при этом не создаем ощущения &laquo;зависшего&raquo; браузера у пользователя при загрузке страницы.</p><p>Все вышеописанное, конечно, актуально для больших js-библиотек от 500 Кб. </p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/11/11/js-file-minimization/</guid>
      <pubDate>2009-11-11T23:00:06Z</pubDate>
      <category>js</category>
      <category>сжатие js</category>
      <category>минимизация js</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Коррекция адреса веб-страницы</title>
      <link>http://blog.salikhovilyas.ru/2009/11/07/url-correction/</link>
      <description><![CDATA[<p><img src="http://blog.salikhovilyas.ru/uploads/404.png" border="0" align="left" />Бывает, мы делаем ошибки при наборе адреса страницы. Классика жанра. Как результат, мы видим 404 страницу. Вчера я попробовал сделать обработчик таких ситуаций, который ищет похожий адрес и при обнаружении такого, переадресовывает на него.</p><p>На самом деле задача решается очень просто. Достаточно обратиться к <a href="http://ru.wikipedia.org/wiki/Расстояние_Левенштейна">расстоянию Левенштейна</a> &mdash; понятию, обозначающему разницу двух строк в виде количества операций вставки, удаления и замены, необходимых для перевода одной строки в другую. </p><p>Если говорить о конкретных реализациях, то есть несколько готовых способов определения расстояния Левенштейна. </p><p>Существуют готовые функции <em>levenshtein</em> в <a href="http://ru2.php.net/manual/en/function.levenshtein.php">PHP</a> и <a href="http://www.postgresql.org/docs/8.4/static/fuzzystrmatch.html#AEN111387">PostgreSQL</a>, у которых присутствует ограничение на длину сравниваемых строк в 255 символов. Для <a href="http://codejanitor.com/wp/2007/02/10/levenshtein-distance-as-a-mysql-stored-function/">MySQL</a> и <a href="http://www.merriampark.com/ldplsql.htm">Oracle</a> я обнаружил только хранимые процедуры, которые рассчитывают данное расстояние. </p><p>Данную фичу я добавил на этом блоге. Для демонстрации ее работы возьмем адрес:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/07/did-you-know/">http://blog.salikhovilyas.ru/2009/06/07/did-you-know/</a></p><p>При вводе более-менее похожего адреса, система сразу перенапраляет на правильный:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/07/didyouknow/">http://blog.salikhovilyas.ru/2009/06/07/didyouknow/ </a></p><p>Если адрес отличается достаточно сильно, то система выдает 404 страницу, а также предлагает наиболее похожие адреса:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/7/didknow/">http://blog.salikhovilyas.ru/2009/06/7/didknow/</a></p><p>Аналогичную логику я добавил в небольшую symfony based cms, которую мы используем в своих проектах.</p><p>Если говорить о популярных на данный момент CMS, аналогичный функционал я заметил только в umi.cms, в остальных системах ничего подобного я не нашел. </p>]]></description>
      <content:encoded><![CDATA[<p><img src="http://blog.salikhovilyas.ru/uploads/404.png" border="0" align="left" />Бывает, мы делаем ошибки при наборе адреса страницы. Классика жанра. Как результат, мы видим 404 страницу. Вчера я попробовал сделать обработчик таких ситуаций, который ищет похожий адрес и при обнаружении такого, переадресовывает на него.</p><p>На самом деле задача решается очень просто. Достаточно обратиться к <a href="http://ru.wikipedia.org/wiki/Расстояние_Левенштейна">расстоянию Левенштейна</a> &mdash; понятию, обозначающему разницу двух строк в виде количества операций вставки, удаления и замены, необходимых для перевода одной строки в другую. </p><p>Если говорить о конкретных реализациях, то есть несколько готовых способов определения расстояния Левенштейна. </p><p>Существуют готовые функции <em>levenshtein</em> в <a href="http://ru2.php.net/manual/en/function.levenshtein.php">PHP</a> и <a href="http://www.postgresql.org/docs/8.4/static/fuzzystrmatch.html#AEN111387">PostgreSQL</a>, у которых присутствует ограничение на длину сравниваемых строк в 255 символов. Для <a href="http://codejanitor.com/wp/2007/02/10/levenshtein-distance-as-a-mysql-stored-function/">MySQL</a> и <a href="http://www.merriampark.com/ldplsql.htm">Oracle</a> я обнаружил только хранимые процедуры, которые рассчитывают данное расстояние. </p><p>Данную фичу я добавил на этом блоге. Для демонстрации ее работы возьмем адрес:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/07/did-you-know/">http://blog.salikhovilyas.ru/2009/06/07/did-you-know/</a></p><p>При вводе более-менее похожего адреса, система сразу перенапраляет на правильный:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/07/didyouknow/">http://blog.salikhovilyas.ru/2009/06/07/didyouknow/ </a></p><p>Если адрес отличается достаточно сильно, то система выдает 404 страницу, а также предлагает наиболее похожие адреса:</p><p><a href="http://blog.salikhovilyas.ru/2009/06/7/didknow/">http://blog.salikhovilyas.ru/2009/06/7/didknow/</a></p><p>Аналогичную логику я добавил в небольшую symfony based cms, которую мы используем в своих проектах.</p><p>Если говорить о популярных на данный момент CMS, аналогичный функционал я заметил только в umi.cms, в остальных системах ничего подобного я не нашел. </p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/11/07/url-correction/</guid>
      <pubDate>2009-11-07T14:21:57Z</pubDate>
      <category>symfony</category>
      <category>php</category>
      <category>url</category>
      <category>cms</category>
    </item>
    <item>
      <title>И поработать, в принципе, можно</title>
      <link>http://blog.salikhovilyas.ru/2009/09/01/job/</link>
      <description><![CDATA[<p>Пришло сегодня на&nbsp;<a href="mailto:job@intaro.ru">job@intaro.ru</a>:</p><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px"><span style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse" class="Apple-style-span">Добрый день! Очень хочу работать! Не все умею, но быстро научусь.</span><br /><span style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse" class="Apple-style-span">Пишу на php. Зовите, приеду пообщаемся, может сгожусь.</span>&nbsp;</blockquote><p>Человек даже не напрягся указать, как его зовут. Такое письмо-надежда в никуда.</p><p>А если серьезно, то у нас открыты вакансии php-программиста и js-программиста. Работы много, проекты интересные. Резюме &mdash; на указанный выше или мой ящик.</p>]]></description>
      <content:encoded><![CDATA[<p>Пришло сегодня на&nbsp;<a href="mailto:job@intaro.ru">job@intaro.ru</a>:</p><blockquote style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; border-width: initial; border-color: initial; border-style: none; padding: 0px"><span style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse" class="Apple-style-span">Добрый день! Очень хочу работать! Не все умею, но быстро научусь.</span><br /><span style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse" class="Apple-style-span">Пишу на php. Зовите, приеду пообщаемся, может сгожусь.</span>&nbsp;</blockquote><p>Человек даже не напрягся указать, как его зовут. Такое письмо-надежда в никуда.</p><p>А если серьезно, то у нас открыты вакансии php-программиста и js-программиста. Работы много, проекты интересные. Резюме &mdash; на указанный выше или мой ящик.</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/09/01/job/</guid>
      <pubDate>2009-09-01T21:40:41Z</pubDate>
      <category>работа</category>
    </item>
    <item>
      <title>Закончили тут этап проекта</title>
      <link>http://blog.salikhovilyas.ru/2009/08/20/phase-finishing/</link>
      <description><![CDATA[<p>Закрыли сегодня первый этап крупного проекта (начался в ноябре). Многому научился за это время &mdash; и в организационном плане, и в плане разработки. </p><p>Во-первых, пересмотрел свои взгляды на оценку сроков разработки. В первую очередь это касается тестирования &mdash; не недооценивайте сроки, отводимые на тестирование! Еще в Древней Руси знали толк в тестировании, все знают про 7 раз отмерь и один раз отрежь.&nbsp;В общем, многие наступают на эти грабли, только пока сам не наступишь, всерьез не воспринимаешь.</p><p>Также, как правило, неправильные сроки формируются из-за нечеткого или искаженного представления об архитектуре, дизайне, интерфейсе или других тонкостях, которые в дальнейшем могут сильно изменить плановые сроки. А искаженное представление возникает по причине недостаточного взаимодействия заказчика и разработчика на начальном этапе формирования базового документа &mdash; основы для дальнейшей разработки. </p><p>Поэтому важно на первых порах максимально детализировать требования к создаваемой системе, дабы потом не возникало диалогов: &laquo;Я заказывал вам соковыжималку, а вы мне миксер сделали, а вообще я хочу теперь блендер со встроенным радио&raquo;.</p><p>Во-вторых, понял, что перед началом проекта <strong>обязательно</strong> нужно проводить подготовительные работы:</p><ol><li>Настроенные и готовые к работе средства коллективной разработки: система версионного контроля (svn, cvs, git, на любителя), багтрекер и средства планирования/обсуждения в отдельных или одном лице.</li><li>Документация и материалы. Сюда входят ТЗ, описаниях архитектуры, интерфейса, дизайн, а также согласованные командой документы по организации кода, комментариев, базы данных и т.п.</li></ol><p>Хаос в этих моментах приведет к хаосу во всем проекте (не путать с Доктором Хаусом ;).</p><p>В-третьих, что для ведущего разработчика, что для менеджера проекта важно уметь искать компромиссы и альтернативные решения, но при этом в определенные моменты поступательно, аргументированно доводить и отстаивать свою позицию по тому или иному вопросу.</p><p>P.S. Да, и если вам предлагают поучаствовать в проекте по разработке мессенджера за 2 месяца командой из 2-х человек, я настоятельно вам не рекомендую соглашаться.&nbsp;</p>]]></description>
      <content:encoded><![CDATA[<p>Закрыли сегодня первый этап крупного проекта (начался в ноябре). Многому научился за это время &mdash; и в организационном плане, и в плане разработки. </p><p>Во-первых, пересмотрел свои взгляды на оценку сроков разработки. В первую очередь это касается тестирования &mdash; не недооценивайте сроки, отводимые на тестирование! Еще в Древней Руси знали толк в тестировании, все знают про 7 раз отмерь и один раз отрежь.&nbsp;В общем, многие наступают на эти грабли, только пока сам не наступишь, всерьез не воспринимаешь.</p><p>Также, как правило, неправильные сроки формируются из-за нечеткого или искаженного представления об архитектуре, дизайне, интерфейсе или других тонкостях, которые в дальнейшем могут сильно изменить плановые сроки. А искаженное представление возникает по причине недостаточного взаимодействия заказчика и разработчика на начальном этапе формирования базового документа &mdash; основы для дальнейшей разработки. </p><p>Поэтому важно на первых порах максимально детализировать требования к создаваемой системе, дабы потом не возникало диалогов: &laquo;Я заказывал вам соковыжималку, а вы мне миксер сделали, а вообще я хочу теперь блендер со встроенным радио&raquo;.</p><p>Во-вторых, понял, что перед началом проекта <strong>обязательно</strong> нужно проводить подготовительные работы:</p><ol><li>Настроенные и готовые к работе средства коллективной разработки: система версионного контроля (svn, cvs, git, на любителя), багтрекер и средства планирования/обсуждения в отдельных или одном лице.</li><li>Документация и материалы. Сюда входят ТЗ, описаниях архитектуры, интерфейса, дизайн, а также согласованные командой документы по организации кода, комментариев, базы данных и т.п.</li></ol><p>Хаос в этих моментах приведет к хаосу во всем проекте (не путать с Доктором Хаусом ;).</p><p>В-третьих, что для ведущего разработчика, что для менеджера проекта важно уметь искать компромиссы и альтернативные решения, но при этом в определенные моменты поступательно, аргументированно доводить и отстаивать свою позицию по тому или иному вопросу.</p><p>P.S. Да, и если вам предлагают поучаствовать в проекте по разработке мессенджера за 2 месяца командой из 2-х человек, я настоятельно вам не рекомендую соглашаться.&nbsp;</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/08/20/phase-finishing/</guid>
      <pubDate>2009-08-20T00:10:34Z</pubDate>
      <category>проект</category>
      <category>управление проектом</category>
      <category>бытиё</category>
    </item>
    <item>
      <title>Что читать этим летом</title>
      <link>http://blog.salikhovilyas.ru/2009/07/13/reading/</link>
      <description><![CDATA[<p>Понял, что несколько забросил чтение, и начал активно исправлять это недоразумение. Этому немало способствовало появление iPhone, который очень даже пригоден для данного занятия :)</p><p>Итак, вот 5 произведений, которые я сейчас по-тихоньку читаю:</p><p><strong>&laquo;Путь камикадзе&raquo;. Эдвард Йордон</strong></p><p>Автор делится опытом о том, что делать, если вы по воле случая участвуете или руководите &laquo;безнадежным&raquo; проектом разработки ПО, т.е. там, где реальная стоимость/сроки/план получаются в 1,5&ndash;5 и более раз больше заявленных. Рассказывается что с этим делать и как с этим жить. Решил почитать, т.к. начал сталкиваться с такими проектами на практике.&nbsp;</p><p><strong>&laquo;Золотой теленок&raquo;.&nbsp;Ильф / Петров.</strong></p><p>Смотрел фильмы по их произведениям, но никак не мог добраться до книг. Почти дочитал, и очень понравилось: пишут живо, колоритно и с юмором. Всем советую. Как дочитаю, хочу взяться за &laquo;Одноэтажную Америку&raquo;.</p><p><strong>&laquo;Совершенный код&raquo;.&nbsp;</strong><strong>С. Макконнелл</strong></p><p>Изложены вопросы разработки, проектирования, отладки и тестирования программного обеспечения. Слышал много положительных отзывов, а читать начал только-только. Могу только сказать, что начало уже заинтересовало.</p><p><em>И 2 книги</em> стоят в очереди на чтение, пока что не успел начать:</p><p><strong>&laquo;Александр Македонский&raquo;. Илья Шифман</strong></p><p>Македонский безусловно был культовой личностью, захотелось подробнее почитать про его жизненный путь.</p><p><strong>&laquo;Аналитическая психология. Тавистокские лекции&raquo;. Карл Густав Юнг</strong></p><p>Много упоминаний слышал об этом психологе, и как-то любопытно стало ознакомится с его взглядами.&nbsp;В свое время прочитал некоторые труды небезызвестного Зигмунда Фрейда, это интересно и полезно, хотя бы для расширения кругозора и знаний о себе любимом.&nbsp;Поэтому в фоновом режиме стараюсь почитывать такую литературу.</p><p>--</p><p>Интересно узнать, что интересного читаете или читали в последнее время вы? Пишите комментарии. Также с радостью передам эстафету товарищам-блоггерам.</p>]]></description>
      <content:encoded><![CDATA[<p>Понял, что несколько забросил чтение, и начал активно исправлять это недоразумение. Этому немало способствовало появление iPhone, который очень даже пригоден для данного занятия :)</p><p>Итак, вот 5 произведений, которые я сейчас по-тихоньку читаю:</p><p><strong>&laquo;Путь камикадзе&raquo;. Эдвард Йордон</strong></p><p>Автор делится опытом о том, что делать, если вы по воле случая участвуете или руководите &laquo;безнадежным&raquo; проектом разработки ПО, т.е. там, где реальная стоимость/сроки/план получаются в 1,5&ndash;5 и более раз больше заявленных. Рассказывается что с этим делать и как с этим жить. Решил почитать, т.к. начал сталкиваться с такими проектами на практике.&nbsp;</p><p><strong>&laquo;Золотой теленок&raquo;.&nbsp;Ильф / Петров.</strong></p><p>Смотрел фильмы по их произведениям, но никак не мог добраться до книг. Почти дочитал, и очень понравилось: пишут живо, колоритно и с юмором. Всем советую. Как дочитаю, хочу взяться за &laquo;Одноэтажную Америку&raquo;.</p><p><strong>&laquo;Совершенный код&raquo;.&nbsp;</strong><strong>С. Макконнелл</strong></p><p>Изложены вопросы разработки, проектирования, отладки и тестирования программного обеспечения. Слышал много положительных отзывов, а читать начал только-только. Могу только сказать, что начало уже заинтересовало.</p><p><em>И 2 книги</em> стоят в очереди на чтение, пока что не успел начать:</p><p><strong>&laquo;Александр Македонский&raquo;. Илья Шифман</strong></p><p>Македонский безусловно был культовой личностью, захотелось подробнее почитать про его жизненный путь.</p><p><strong>&laquo;Аналитическая психология. Тавистокские лекции&raquo;. Карл Густав Юнг</strong></p><p>Много упоминаний слышал об этом психологе, и как-то любопытно стало ознакомится с его взглядами.&nbsp;В свое время прочитал некоторые труды небезызвестного Зигмунда Фрейда, это интересно и полезно, хотя бы для расширения кругозора и знаний о себе любимом.&nbsp;Поэтому в фоновом режиме стараюсь почитывать такую литературу.</p><p>--</p><p>Интересно узнать, что интересного читаете или читали в последнее время вы? Пишите комментарии. Также с радостью передам эстафету товарищам-блоггерам.</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/07/13/reading/</guid>
      <pubDate>2009-07-13T23:44:00Z</pubDate>
      <category>книги</category>
      <category>чтение</category>
    </item>
    <item>
      <title>Macbook-приключения</title>
      <link>http://blog.salikhovilyas.ru/2009/06/13/macbook-adventure/</link>
      <description><![CDATA[<p>На этой неделе все как-то сразу незаладилось, а началось все с того, что во вторник с утречка на макбуке полетел винтчестер, окончательно и бесповоротно. Спасло меня то, что я периодически делал бекапы в Time Machine. Даже стало интересно проверить ее в действии.</p><p>Могу сказать, что система полностью восстановилась, как будто жесткий и не менялся вовсе: все на месте и все работает как прежде. Поэтому мой совет: при покупке мака первым делом настройте резервное копирование в Time Machine, а то мало ли что ;)</p><p>А сегодня я поставил поверх Snow Leopard. Результатом доволен. Освободилось 6 Гб места, система стала во многом быстрее работать, как известно она полностью 64-разрядная.</p><p>Посвежел Dock, сетка раскрывающейся папки стала прокручиваемой и многоуровневой &ndash; оч удобно.</p><p style="text-align: center"><img src="http://blog.salikhovilyas.ru/uploads/snow_leo_1.png" border="0" alt="Snow Leopard" title="Snow Leopard" width="475" height="400" />&nbsp;</p><p>Проигрывать видео, аудио, пролистывать документы можно прямо в Finder:</p><p style="text-align: center; margin-left: -50px"><img src="http://blog.salikhovilyas.ru/uploads/snow_leo_20.png" border="0" alt="Snow Leopard" title="Snow Leopard" width="619" height="539" /></p><p>Система стала нативно поддерживать NTFS, Safari теперь работает не просто быстро, а очень быстро. Система удалась на славу и в ней еще куча мелких доработок, не буду все пересказывать, на официальном сайте о них отлично написано.</p>]]></description>
      <content:encoded><![CDATA[<p>На этой неделе все как-то сразу незаладилось, а началось все с того, что во вторник с утречка на макбуке полетел винтчестер, окончательно и бесповоротно. Спасло меня то, что я периодически делал бекапы в Time Machine. Даже стало интересно проверить ее в действии.</p><p>Могу сказать, что система полностью восстановилась, как будто жесткий и не менялся вовсе: все на месте и все работает как прежде. Поэтому мой совет: при покупке мака первым делом настройте резервное копирование в Time Machine, а то мало ли что ;)</p><p>А сегодня я поставил поверх Snow Leopard. Результатом доволен. Освободилось 6 Гб места, система стала во многом быстрее работать, как известно она полностью 64-разрядная.</p><p>Посвежел Dock, сетка раскрывающейся папки стала прокручиваемой и многоуровневой &ndash; оч удобно.</p><p style="text-align: center"><img src="http://blog.salikhovilyas.ru/uploads/snow_leo_1.png" border="0" alt="Snow Leopard" title="Snow Leopard" width="475" height="400" />&nbsp;</p><p>Проигрывать видео, аудио, пролистывать документы можно прямо в Finder:</p><p style="text-align: center; margin-left: -50px"><img src="http://blog.salikhovilyas.ru/uploads/snow_leo_20.png" border="0" alt="Snow Leopard" title="Snow Leopard" width="619" height="539" /></p><p>Система стала нативно поддерживать NTFS, Safari теперь работает не просто быстро, а очень быстро. Система удалась на славу и в ней еще куча мелких доработок, не буду все пересказывать, на официальном сайте о них отлично написано.</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/06/13/macbook-adventure/</guid>
      <pubDate>2009-06-13T02:52:30Z</pubDate>
      <category>mac os x</category>
      <category>snow leopard</category>
      <category>time machine</category>
    </item>
    <item>
      <title>Did you know? Technology</title>
      <link>http://blog.salikhovilyas.ru/2009/06/07/did-you-know/</link>
      <description><![CDATA[<p>Видео на тему скорости происходящих в мире процессов в целом и развития технологий в частности.</p><p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Mmz5qYbKsvM&amp;hl=ru&amp;fs=1&amp;rel=0" /><param name="quality" value="high" /><param name="menu" value="false" /><param name="wmode" value="" /><embed src="http://www.youtube.com/v/Mmz5qYbKsvM&amp;hl=ru&amp;fs=1&amp;rel=0" wmode="" quality="high" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p><p>Подсмотрено у <a href="http://victorronin.com/" title="Виктор Ронин">Виктора Ронина</a>.</p>]]></description>
      <content:encoded><![CDATA[<p>Видео на тему скорости происходящих в мире процессов в целом и развития технологий в частности.</p><p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Mmz5qYbKsvM&amp;hl=ru&amp;fs=1&amp;rel=0" /><param name="quality" value="high" /><param name="menu" value="false" /><param name="wmode" value="" /><embed src="http://www.youtube.com/v/Mmz5qYbKsvM&amp;hl=ru&amp;fs=1&amp;rel=0" wmode="" quality="high" menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="425" height="344"></embed></object></p><p>Подсмотрено у <a href="http://victorronin.com/" title="Виктор Ронин">Виктора Ронина</a>.</p>]]></content:encoded>
      <guid isPermalink="false">http://blog.salikhovilyas.ru/2009/06/07/did-you-know/</guid>
      <pubDate>2009-06-07T11:38:40Z</pubDate>
      <category>видео</category>
      <category>технологии</category>
      <category>прогресс</category>
    </item>
  </channel>
</rss>