<?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>Вадим Макишвили &#187; О технологиях</title>
	<atom:link href="http://makishvili.com/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://makishvili.com</link>
	<description>Вглядываясь в Смыслы</description>
	<lastBuildDate>Mon, 30 Aug 2010 10:53:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ZenCoding CheatSheets and JetBrains WebStorm</title>
		<link>http://makishvili.com/2010/02/19/zencoding-cheatsheets-and-jetbrains-webstorm/</link>
		<comments>http://makishvili.com/2010/02/19/zencoding-cheatsheets-and-jetbrains-webstorm/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 08:38:42 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[WebIDE]]></category>
		<category><![CDATA[ZenCoding]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1362</guid>
		<description><![CDATA[Справочник На странице проекта появились читы. Всё перед глазами. Удобно: Поддержка в WebStorm Частичная, в процессе разработки, например, в последнем билде 94.335 есть Zen HTML Elements, но с недоделками, например script:src развернется неправильно, а вот так — &#60;script:src&#62;&#60;/script:src&#62; есть алиасы по типу div#page&#62;h3.title+ul&#62;li.item*3&#62;a, но с некоторыми ошибками, например, создаёт только один вложенный li не реализованы [...]]]></description>
			<content:encoded><![CDATA[<h3>Справочник</h3>
<p>На <a href="http://code.google.com/p/zen-coding/wiki/CheatSheets">странице проекта</a> появились читы.<br />
Всё перед глазами. Удобно:</p>
<p><img src="http://makishvili.com/pro/2010/02/19/zencoding-cheatsheets/cheat.png" alt="ZenCoding CheatSheets" width="450"/></p>
<h3>Поддержка в WebStorm</h3>
<p>Частичная, в процессе разработки, например, в последнем билде 94.335</p>
<ul>
<li>есть Zen HTML Elements, но с недоделками, например <code>script:src</code> развернется неправильно, а вот так — <code>&lt;script:src&gt;&lt;/script:src&gt;</code></li>
<li>есть алиасы по типу <code>div#page&gt;h3.title+ul&gt;li.item*3&gt;a</code>, но с некоторыми ошибками, например, создаёт только один вложенный <code>li</code></li>
<li>не реализованы Zen CSS Properties</li>
</ul>
<p>В этом билде в настройках увидеть Zen невозможно, он зашит внутри (пока?)<br />
Несмотря на явные недоделки, я уже пользуюсь алиасами и ZenHTML <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2010/02/19/zencoding-cheatsheets-and-jetbrains-webstorm/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Border-radius in Safari</title>
		<link>http://makishvili.com/2010/01/28/border-radius-in-safari/</link>
		<comments>http://makishvili.com/2010/01/28/border-radius-in-safari/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 11:50:33 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1345</guid>
		<description><![CDATA[В Safari столкнулся с неаккуратным рендерингом элемента, если ему задан border-radius и фоновый цвет. Увидеть проблему и её решение можно на тестовой странице. Решение 1. Фоновый цвет у блока убрать 2. Внутрь блока добавить обертку 3. Обертке задать фоновый цвет 4. Обёртке задать border-radius, меньше на толщину бордера, чем у внешнего блока &#60;div class="button"&#62;&#60;div class="button-inner"&#62;Кнопка&#60;/div&#62;&#60;/div&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>В Safari столкнулся с неаккуратным рендерингом элемента, если ему задан  border-radius и  фоновый цвет. Увидеть проблему и её решение можно на <a href="http://makishvili.com/code/border-radius-in-safari.html">тестовой странице</a>.</p>
<h3>Решение</h3>
<p>1. Фоновый цвет у блока убрать<br />
2. Внутрь блока добавить обертку<br />
3. Обертке задать фоновый цвет<br />
4. Обёртке задать border-radius,  меньше на толщину бордера, чем у внешнего блока </p>
<pre><code>
</code>&lt;div class="button"&gt;&lt;div class="button-inner"&gt;Кнопка&lt;/div&gt;&lt;/div&gt;

.button
{
    border: 5px solid #000;

    border-radius: 30px;
    -moz-border-radius: 30px;
    -webkit-border-radius: 30px;
    -khtml-border-radius: 30px;
}

.button-inner
{
    border-radius: 25px;
    -moz-border-radius: 25px;
    -webkit-border-radius: 25px;
    -khtml-border-radius: 25px;

    background: #fff;
}</pre>
<h3>Update</h3>
<p>Между фоном и бордером появляются дырки, если border-radius у обоих блоков одинаковый и:<br />
<img src="http://makishvili.com/pro/2010/01/28/bor-safari.png" alt="" style="float:left; margin-right: 5px"/><br />
1. Внутреннему блоку задана большая высота (height)<br />
2. Его содержимое имеет большой font-size<br />
3. Его содержимое представлено многострочным текстовым узлом</p>
<p><br style="clear: both"/><br />
Внутреннему блоку нужно задавать border-radius с меньшим значением, чем у внешнего блока, потому что при border-radius:30px внешняя сторона бордера (толщина которого равна 5px) скруглена с радиусом 30px, а внутренняя сторона скруглена с радиусом 25px, меньше на толщину бордера. </p>
<p>Спасибо Александру Ермолаеву за багрепорт, а Степану Резникову за допиливание решения и объяснение про кривизну бордера. </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2010/01/28/border-radius-in-safari/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Opera Mobile vs Mini</title>
		<link>http://makishvili.com/2009/12/15/opera-mobile-vs-mini/</link>
		<comments>http://makishvili.com/2009/12/15/opera-mobile-vs-mini/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 08:13:25 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1340</guid>
		<description><![CDATA[Чем они отличаются?]]></description>
			<content:encoded><![CDATA[<p><a href="http://habrahabr.ru/company/opera/blog/77258/">Чем они отличаются?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/12/15/opera-mobile-vs-mini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Талидомид</title>
		<link>http://makishvili.com/2009/12/08/talidomid/</link>
		<comments>http://makishvili.com/2009/12/08/talidomid/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 23:01:39 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1295</guid>
		<description><![CDATA[Это сообщение — фрагмент, который я не включил в презентацию &#171;Ошибка. Осознание, примирение, извлечение пользы&#187;. К тому же в Минске на WSD&#8217;09 я пообещал письменно раскрыть свои соображения на тему &#171;Какова ценность наших ошибок для наших пользователей&#187;. Обещание выполняю. В ежедневной работе я имею дело с задачами с типом &#171;ошибка&#187;, и у каждой ошибки есть [...]]]></description>
			<content:encoded><![CDATA[<p><em>Это сообщение — фрагмент, который я не включил в презентацию &laquo;Ошибка. Осознание, примирение, извлечение пользы&raquo;. К тому же в Минске на WSD&#8217;09 я пообещал письменно раскрыть свои соображения на тему &laquo;Какова ценность наших ошибок для наших пользователей&raquo;. Обещание выполняю.</em></p>
<p>В ежедневной работе я имею дело с задачами с типом &laquo;ошибка&raquo;, и у каждой ошибки есть важность — &laquo;minor&raquo;, &laquo;major&raquo;, &laquo;critical&raquo;, &laquo;blocker&raquo;. Работая в этой отрасли долго и каждый день сталкиваясь с критикалами и мажорами, возникает иллюзия, что я занимаюсь делом крайне важным и ответственным.</p>
<p>Вот только ой ли? Сильно ли я ошибусь, если скажу, что работа HTML-верстальщика — это сфера обслуживания? Я создаю сайты, на которых люди могут найти, купить или продать услугу, товар или информацию. Что произойдет, если моя ошибка в вёрстке помешает пользователю получить, купить или продать услугу, товар и т.п.? Любой руководитель скажет, что это серьезная ошибка, и на её исправление бросит силы разработчика даже в выходные дни и среди ночи.</p>
<p>Всё логично, но я в эту важность больше не верю. То есть верю, но не в то, что это делается ради удобства пользователей. Нет такой ошибки в моей работе, которая бы не потерпела, пока я не приду на работу утром. Потому что все ошибки вёрстки, по большому счету, такая ерунда. Потому что&#8230;</p>
<p>Потому что талидомид.</p>
<p><span id="more-1295"></span></p>
<p>Талидомид — самое безопасное и эффективное снотворное в мире. Мировая фармацевтика в 1950 году посчитала изобретение этого препарата прорывом в лечении расстройств сна. Ещё бы! Человек погружался в здоровый и совершенно естественный сон. Особенно положительный эффект наблюдался у беременных.</p>
<p>Но в течение 10 лет после поступления этого препарата в продажу, в 34 странах мира родилось больше 12 000 детей с множественными врожденными уродствами. Из них 7 тысяч детей умерло в первые же минуты жизни.</p>
<p>12 000 искалеченных детей, 24 000 искалеченных родителей из-за несовершенства клинических испытаний, а другими словами из-за того что  препарат был рекомендован для беременных после испытания всего на одном виде животных — на мышах. Как много позже выяснилось, помимо мыши и человека, тератогенный эффект лекарства возникал ещё только у одного существа, у шиншиллы. И для этого было достаточно принять одну таблетку препарата. Всего одну!</p>
<p>Одна таблетка и&#8230; искалеченная жизнь.</p>
<div style="margin-left: 50px;">
<p>1960 год, Аргентина, сумерки, тесная съемная комната, молодой мужчина, беременная жена. Они дома, на диване, она склонила голову на его плечо и прикрыла глаза, он одной рукой поддерживает её за спину, а другой поглаживает ей живот. А там пихается ребёнок, и от каждого движения её живот  будто ходит ходуном. Они негромко посмеиваются, мол, в животе растет футболист и когда-нибудь он обязательно станет чемпионом. А по телевизору с приглушенным звуком идёт реклама про талидомид. И мужчина прислушиваясь к телевизору, поворачивается к любимой и говорит:</p>
<p>— Родная, а ты ведь спишь плохо, давай попробуешь этот&#8230; как его&#8230; тали-до-мид?<br />
— Наверное это дорого, милый?<br />
— Всего одну таблетку,  вдруг поможет?</p>
<p>И убегает в аптеку.</p>
<p>А через несколько месяцев рождается ребенок без ног и передней брюшной стенки. Рождается и через несколько минут умирает на руках у изможденной родами женщины.  Я чувствую эту тоску — только что она стала матерью, она так долго и счастливо этого ждала, а он уже умер и его ничем не вернуть! Я вижу её отчаяние и слышу стон: &laquo;Господи?&raquo;</p>
<p>Я чувствую растерянность молодого отца. Он стоит под окнами роддома с задранной вверх головой, чувствует, как душу его опустошает неотвратимость, и сквозь накатившую слезу силится разглядеть лицо жены в окне третьего этажа. А она без сил прислонилась лбом к холодному оконному стеклу, и из её закрытых глаз слезы сбегают на искусанные до крови губы.</p>
<p>А потом, вечером, этот мужчина сидит на диване, совершенно отрешённый от жизни  и смотрит в телевизор, где мелькают бессмысленные картинки, и сквозь спутанное алкоголем сознание к нему пробиваются слова диктора: &laquo;Только что стало известно, талидомид категорически противопоказан беременным, потому что вызывает уродства даже от одной таблетки&raquo;. И эти слова, как удар поддых, его сгибают, он боком заваливается на диван, закусив зубами кулак, а через мгновение до него доходит, что виноват не талидомид, а он сам. Потому что если бы он тогда не предложил купить этот чертов талидомид, его мальчик был бы жив!</p>
<p>И весь остаток вечера мужчина безжизненно лежит на диване к стенке лицом, стиснув зубы, оглушенный непроходящей болью, и не понимает, как с этим чувством жить дальше. С чувством, что это ОН искалечил свою семью.</p>
</div>
<p>А наши блокеры и критикалы &#8211; что они? Не больше, чем иллюзия важности. Если не исправить ошибку на сайте, максимум, что произойдёт —  пользователь сайта поморщится и уйдет с сайта. Это МАКСИМУМ.  Да, владелец сайта потеряет возможного клиента. Да, прибыль будет меньше. Но никто не умрёт, дети не останутся сиротами, здоровье людей не ухудшится, и я — виновник ошибки — буду спать спокойно, в отличие от того человека, кто разрешил талидомид к продаже.</p>
<p>И давайте уже наконец самим себе честно признаемся, что пользователи наших сайтов <em>это</em> прекрасно понимают — они готовы терпеть мелкие ошибки (а после истории с талидомидом любые ошибки в нашей отрасли называть иначе — странно), потому что пользователю нужна информация, а качество её визуального представления — дело второстепенное.</p>
<p>И теперь, когда менеджер утверждает, что ошибку в production надо срочно чинить, я понимаю, что на самом деле менеджер заботится не о том, что пользователю будет неудобно пользоваться сайтом, а о том, чтобы сайт не потерял этого пользователя. Такому менеджеру хочется посоветовать делать сайт для чего-то по-настоящему стоящего. То есть делать сайт, на который пользователь придёт за ценной информацией, а не за тем, чтобы посмотреть на закругленные уголки.</p>
<p>Есть отличный рекламный ролик компании EDS. Он в том числе иллюстрирует степень терпимости наших пользователей к ошибкам в свёрстанных нами сервисах. Я испытываю радость, когда смотрю на пассажиров в креслах. Они  счастливы! Больше мне добавить нечего.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/L2zqTYgcpfg&amp;hl=ru_RU&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/L2zqTYgcpfg&amp;hl=ru_RU&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/12/08/talidomid/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Сергей Чикуенок. Zen Coding v0.5</title>
		<link>http://makishvili.com/2009/11/03/sergej-chikuenok-zen-coding-v0-5/</link>
		<comments>http://makishvili.com/2009/11/03/sergej-chikuenok-zen-coding-v0-5/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 10:15:53 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1257</guid>
		<description><![CDATA[http://vimeo.com/7405114 Это просто волшебство. Еще в начале зимы это был невероятный концепт от Вадима Макеева &#8211; прекрасная, и как мне казалось, трудно реализуемая идея. Основная идея &#8211; написание HTML с использованием CSS-like selectors. А сейчас это уже отлаженная реализация, которая потрясает своими возможностями. Например, для меня неожиданностью стали такие возможности (в скобках время описания этой [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vimeo.com/7405114">http://vimeo.com/7405114</a></p>
<p>Это просто волшебство. Еще в начале зимы это был невероятный концепт от Вадима Макеева &#8211; прекрасная, и как мне казалось, трудно реализуемая идея. Основная идея &#8211; написание HTML с использованием CSS-like selectors. А сейчас это уже отлаженная реализация, которая потрясает своими возможностями.</p>
<p>Например, для меня неожиданностью стали такие возможности (в скобках время описания этой фичи в видеоролике):</p>
<ol>
<li>создание элементов с упорядоченным именованием [0:40]</li>
<li>встраивание в CSS-like selector любых заранее созданных снипетов (в IntelliJIDEA это называется LiveTemplates) [1:18]</li>
<li>оборачивание фрагмента кода с синтаксисом Zen Coding (не просто обернуть тегом <code>div</code>, а, например, обернуть фрагментом кода <code>div#wpar&gt;div#wrap-inner</code> и даже больше &#8211; надстройка новых узлов, предшествующих не только обертываемому блоку, а любому его родителю<code> div#header+div#page&gt;div#wpar&gt;div#wrap-inner</code> — крутизна!) [2:15]</li>
<li>оборачивание каждой строки выделенного фрагмента однотипными элементами, прям как в MS Word, при этом используются возможности предыдущего пункта &#8211; вообще крутизна!  [3:33]</li>
<li>возможность использовать не только вызов статических снипетов, как в пункте 2, а применять к ним операторы множения и создания родственных осей [4:21]</li>
<li>возможность в этих снипетах кастомизировать имена CSS-классов и ID, как и в обычных элементах [5:24]</li>
</ol>
<p>Вадиму Макееву и Сергею Чикуенку выражаю свой восторг идеей и отменной реализацией. Парни, вы молодцы!</p>
<p>PS Если я неправильно просклонял фамилию Сергея, прошу простить и подсказать, как правильно — я исправлю <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/11/03/sergej-chikuenok-zen-coding-v0-5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Twitter</title>
		<link>http://makishvili.com/2009/10/21/twitter/</link>
		<comments>http://makishvili.com/2009/10/21/twitter/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 09:26:00 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1215</guid>
		<description><![CDATA[Пользуюсь им что-то около недели. Удивляюсь тому, насколько это быстрый и информативный поток — быстрее и информативнее, чем большие блоги и журналы. Наверное потому что &#171;большой&#187; пост требует вдумчивости в свои мысли и правильного оформления, а в твитере чирикнул первую необдуманную (но содержательную мысль) и всё. И забавно, возникает иллюзия, что я вживую общаюсь с [...]]]></description>
			<content:encoded><![CDATA[<p>Пользуюсь им что-то около недели.</p>
<p>Удивляюсь тому, насколько это быстрый и информативный поток — быстрее и информативнее, чем большие блоги и журналы. Наверное потому что &laquo;большой&raquo; пост требует вдумчивости в свои мысли и правильного оформления, а в твитере чирикнул первую необдуманную (но содержательную мысль) и всё.</p>
<p>И забавно, возникает иллюзия, что я вживую общаюсь с людьми, то есть голосом.</p>
<p>Интересный эффект от сервиса.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/10/21/twitter/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Система пользовательского поиска</title>
		<link>http://makishvili.com/2009/10/19/sistema-polzovatelskogo-poiska/</link>
		<comments>http://makishvili.com/2009/10/19/sistema-polzovatelskogo-poiska/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 08:58:02 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1211</guid>
		<description><![CDATA[http://www.google.com/cse/?hl=ru Система пользовательского поиска позволяет создать для своего сайта индивидуальную поисковую систему на основе технологий Goolge Прикрутил. Теперь у меня есть поиск по сайту]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/cse/?hl=ru">http://www.google.com/cse/?hl=ru</a></p>
<blockquote><p>Система пользовательского поиска позволяет создать для своего сайта индивидуальную поисковую систему на основе технологий Goolge</p></blockquote>
<p>Прикрутил.<br />
Теперь у меня есть поиск по сайту <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/10/19/sistema-polzovatelskogo-poiska/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Steve Souders: @font-face and performance</title>
		<link>http://makishvili.com/2009/10/14/font-face-and-performance/</link>
		<comments>http://makishvili.com/2009/10/14/font-face-and-performance/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 07:50:31 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1202</guid>
		<description><![CDATA[http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/ Оказывается, не всё гладко: Моргание текста Задержка отображения всей страницы в ИЕ Для загрузки шрифта не увеличивается количество параллельных загрузок с одного домена (неудивительно, но нужно помнить) Индикация загрузки документа, пока не загрузится шрифт И рекомендации от Стива (вольный пересказ): Используйте @font-face только тогда, когда вы совершенно уверены, что он вам нужен. Если вы [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/">http://www.stevesouders.com/blog/2009/10/13/font-face-and-performance/<br />
</a><br />
<strong>Оказывается, не всё гладко:</strong></p>
<ul>
<li>Моргание текста</li>
<li>Задержка отображения всей страницы в ИЕ</li>
<li>Для загрузки шрифта не увеличивается количество параллельных загрузок с одного домена (неудивительно, но нужно помнить)</li>
<li>Индикация загрузки документа, пока не загрузится шрифт</li>
</ul>
<p><strong>И рекомендации от Стива</strong> (вольный пересказ):</p>
<ul>
<li>Используйте @font-face только тогда, когда вы совершенно уверены, что он вам нужен.
</li>
<li>Если вы используете несколько файлов шрифтов, запрашивайте их с разных доменов</li>
<li>Избегайте неиспользуемых правил @font-face —  IE всё равно будет их загружать, несмотря на то, что они не применяются ни к одному элементу</li>
<li>Используйте gzip-сжатие файлов шрифтов и передавайте с заголовком Expires, выставленным надолго.</li>
<li>Используйте постзагрузку файлов шрифтов, по крайней мере в IE.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/10/14/font-face-and-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quicksilver and Snow Leopard</title>
		<link>http://makishvili.com/2009/10/06/quicksilver-and-snow-leopard/</link>
		<comments>http://makishvili.com/2009/10/06/quicksilver-and-snow-leopard/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 10:03:47 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Quicksilver]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1187</guid>
		<description><![CDATA[Новый стабильный билд Quicksilver (#3815) показывает пустое окно настроек по &#171;Cmd ,&#187; Из-за этого после переезда на Snow Leopard не получалось настроить активацию окна приложения по double-Fn click. Настройки интерфейса можно поправить здесь:]]></description>
			<content:encoded><![CDATA[<p>Новый стабильный билд Quicksilver (#3815) показывает пустое окно настроек по <strong>&laquo;Cmd ,&raquo;</strong><br />
Из-за этого после переезда на Snow Leopard не получалось настроить активацию окна приложения по double-Fn click.</p>
<p>Настройки интерфейса можно поправить здесь:<br />
<img src="http://img.skitch.com/20091006-n51nuym82udhb9un18tydxyehw.png" alt="null" /></p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/10/06/quicksilver-and-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Бумажный блокнотик</title>
		<link>http://makishvili.com/2009/09/30/bumazhnyj-bloknotik/</link>
		<comments>http://makishvili.com/2009/09/30/bumazhnyj-bloknotik/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 06:12:30 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Наблюдения]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1160</guid>
		<description><![CDATA[Сижу сейчас и расписываю в бумажном блокноте задачки на весь день. Пишу фразу &#171;СПОРТ page&#187; и рука сама останавливается перед ещё ненаписанным словом &#171;page&#187;. А в голове мысль: &#171;Надо переключить раскладку. Как?&#187; Ежедневное общение с компьютером влияет на жизнь больше, чем может показаться Кстати, теперь недостаточно сказать &#171;записал в блокноте&#187;. Приходится явно указывать, что в [...]]]></description>
			<content:encoded><![CDATA[<p>Сижу сейчас и расписываю в бумажном блокноте задачки на весь день.<br />
Пишу фразу &laquo;СПОРТ page&raquo; и рука сама останавливается перед ещё ненаписанным словом &laquo;page&raquo;. А в голове мысль: &laquo;Надо переключить раскладку. Как?&raquo;</p>
<p>Ежедневное общение с компьютером влияет на жизнь больше, чем может показаться <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Кстати, теперь недостаточно сказать &laquo;записал в блокноте&raquo;. Приходится явно указывать, что в бумажном. Вот так на наших глазах слова приобретают вторые смыслы. Забавно <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/09/30/bumazhnyj-bloknotik/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IntelliJIDEA &#8594; settings &#8594; WebIDE</title>
		<link>http://makishvili.com/2009/08/13/idea-settings-webide/</link>
		<comments>http://makishvili.com/2009/08/13/idea-settings-webide/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 07:52:02 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[WebIDE]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1102</guid>
		<description><![CDATA[Если вы пользовались IntelliJIDEA, а сейчас хотите попробовать WebIDE, то скорее всего вам хочется в WebIDE иметь те же настройки, что и в IDEA. Вот способ: 1. в IDEA сделать File &#8594; Export settings &#8594; получить файлик settings.jar 2. в WebIDE сделать File &#8594; Import settings &#8592; загрузить settings.jar Update: Выяснилось, что Live Templates для [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы пользовались IntelliJIDEA, а сейчас хотите попробовать WebIDE, то скорее всего вам хочется в WebIDE иметь те же настройки, что и в IDEA.</p>
<p>Вот способ:<br />
1. в IDEA сделать <strong>File</strong> &rarr; <strong>Export settings</strong> &rarr; получить файлик settings.jar<br />
2. в WebIDE сделать <strong>File</strong> &rarr; <strong>Import settings</strong> &larr; загрузить settings.jar</p>
<p><strong>Update:</strong><br />
Выяснилось, что Live Templates для CSS от Яндекса были включены в инсталляцию IntelliJIDEA уже в поздних билдах Diana. И в Maia они тоже уже идут по-умолчанию. А вот в WebIDE они случайно не попали (ну EAP же).</p>
<p>Чтобы в WebIDE подложить наши LT, скачайте <a href="http://makishvili.com/pro/2009/08/idea-settings-webide/ya_css_markuper.xml.zip">архив</a> и разверните:<br />
<strong>MacOS:</strong> ~/Library/Preferences/WebIDE10/templates<br />
<strong>Win:</strong> User\YouName\.WebIde10\config\templates\</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/08/13/idea-settings-webide/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>JetBrains Web Developer IDE EAP</title>
		<link>http://makishvili.com/2009/08/11/webide-eap/</link>
		<comments>http://makishvili.com/2009/08/11/webide-eap/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 21:17:09 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1087</guid>
		<description><![CDATA[Лёгкая, быстрая, интеллектуальная WebIDE от JetBrains. А главное, работая в ней, можно навсегда забыть все хитрости настройки IDEA Project, которыми я делился здесь — достаточно из WebIDE сделать File -> Open Directory и вперёд С пылу с жару Web IDE is available in 2 editions: Standard Edition with following key features: Intelligent Editor: for HTML, [...]]]></description>
			<content:encoded><![CDATA[<p>Лёгкая, быстрая, интеллектуальная WebIDE от JetBrains.</p>
<p>А главное, работая в ней, можно навсегда забыть все хитрости настройки IDEA Project, которыми я делился <a href="http://makishvili.com/2009/02/verstka-v-intellijidea-1/">здесь</a> — достаточно из WebIDE сделать <strong style="white-space:nowrap">File -> Open Directory</strong> и вперёд <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.jetbrains.net/confluence/display/WI/Web+IDE+EAP">С пылу с жару</a></p>
<blockquote><p>
Web IDE is available in 2 editions:</p>
<h4>Standard Edition</h4>
<p>with following key features:</p>
<ul>
<li><strong>Intelligent Editor:</strong> for HTML, CSS, JavaScript, XML</li>
<li><strong>Project and Code Navigation:</strong> specialized project views, file structure views and quick jumping between files, classes, methods and usages</li>
<li><strong>Error-Free Coding:</strong> on-the-fly code analysis, error highlighting and quick fixes</li>
<li><strong>VCS Integrations:</strong> out-of-the-box support for Subversion, Perforce, Git, and CVS with changelists and merge</li>
<li><strong>FTP Sync:</strong> update server using FTP or SFTP</li>
<li><strong>Cross-platform:</strong> works on WIndows, Mac OS X and Linux</li>
</ul>
<h4>PHP Developer Edition</h4>
<p> adding the following to the standard edition:</p>
<ul>
<li><strong>PHP Development:</strong> PHP syntax highlighting, documentation lookup, refactoring and debugger</li>
<li><strong>SQL support:</strong> coding assistance, SQL console and Database browser</li>
</ul>
</blockquote>
<p>Я работаю в ней вот уже несколько месяцев. Доволен <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Если обнаружили багу, сделайте хорошее дело — напишите <a href="http://www.jetbrains.net/jira/browse/WI">багрепорт</a></p>
<p>PS: EAP build includes a 45-day time-limited license..</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/08/11/webide-eap/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>2 года на Mac OS</title>
		<link>http://makishvili.com/2009/08/04/2-goda-na-mac-os/</link>
		<comments>http://makishvili.com/2009/08/04/2-goda-na-mac-os/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 13:50:16 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1071</guid>
		<description><![CDATA[Пока лился очередной коммит, откинулся на спинку кресла, прикрыл глаза, и с удивлением понял, что за 2 года я забыл, что такое зависания компьютера и вынужденные перезагрузки операционной системы. Как хорошо.]]></description>
			<content:encoded><![CDATA[<p>Пока лился очередной коммит, откинулся на спинку кресла, прикрыл глаза, и с удивлением понял, что за 2 года я забыл, что такое зависания компьютера и вынужденные перезагрузки операционной системы.</p>
<p>Как хорошо.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/08/04/2-goda-na-mac-os/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Павел: Free Private SVN</title>
		<link>http://makishvili.com/2009/08/04/free-private-svn/</link>
		<comments>http://makishvili.com/2009/08/04/free-private-svn/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 08:28:34 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1067</guid>
		<description><![CDATA[Оригинал заметки. Если кто-то ищет бесплатное хранилище для своего кода, то большой выбор по разным параметрам доступен на сайте с весьма неинтуитивным названием http://www.svnhostingcomparison.com/ &#8230; Павел, спасибо за ссылку.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.ad.by/2009/07/free-private-svn.html">Оригинал</a> заметки.</p>
<blockquote><p>Если кто-то ищет бесплатное хранилище для своего кода, то большой выбор по разным параметрам доступен на сайте с весьма неинтуитивным названием <a href="http://www.svnhostingcomparison.com/">http://www.svnhostingcomparison.com/</a></p>
<p>&#8230;</p></blockquote>
<p>Павел, спасибо за ссылку.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/08/04/free-private-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Стилизация ребенка ссылки при :hover</title>
		<link>http://makishvili.com/2009/06/18/stilizaciya-rebenka-ssylki-pri-hover/</link>
		<comments>http://makishvili.com/2009/06/18/stilizaciya-rebenka-ssylki-pri-hover/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 10:16:21 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1007</guid>
		<description><![CDATA[Хочу описать решение с пылу с жару. Есть структура: &#60;a class="b-link" href="" &#62; Телефон в копилке &#60;img class="b-img" src="image.png" alt=""/&#62; &#60;/a&#62; Есть стили к ней: .b-img { display: none } .b-link:hover .b-img { display: inline } Известно, что второй селектор в ИЕ6 не отработает. Как мы с этим боролись? На ссылку вешали одноразовый expression и [...]]]></description>
			<content:encoded><![CDATA[<p>Хочу описать решение с пылу с жару.</p>
<p>Есть структура:</p>
<pre><code>&lt;a class="b-link" href="" &gt;
    Телефон в копилке
    &lt;img class="b-img" src="image.png" alt=""/&gt;
&lt;/a&gt;</code></pre>
<p>Есть стили к ней:</p>
<pre><code>.b-img {
    display: none
}

.b-link:hover .b-img {
    display: inline
}</code></pre>
<p>Известно, что второй селектор в ИЕ6 не отработает.<br />
<span id="more-1007"></span></p>
<h3>Как мы с этим боролись?</h3>
<p>На ссылку вешали одноразовый expression и расширяли селектор:</p>
<pre><code>* html .b-link {
    zoom: expression(
        runtimeStyle.zoom = 1,
        onmouseover = function() { className += " b-link-hover" },
        onmouseout = function() { className = className.replace(/ b-link-hover/, "") }
    );
}

.b-link-hover .b-img,
.b-link:hover .b-img {
    display: inline
}
</code></pre>
<p>Это было старое решение.</p>
<h3>Элегантное решение</h3>
<p>Новое решение рождено сегодня — оно очень дешевое — нужно написать один дополнительный селектор, который решает нам проблему.</p>
<pre><code>.b-link:hover{
    word-spacing: 0
}</code></pre>
<p>Суть проста &#8211; этот селектор перезапускает Reflow, после чего ИЕ6 начинает применять селекторы для элементов в ссылках <code class="inline">.b-link:hover .b-img {}</code><br />
Приятно, что это решение работает несмотря на то, включен ли у ссылки hasLayout или нет. И не пугайтесь, это не обнуление пространства между словами, а дефолтное значение браузера.</p>
<h3>Слова благодарности</h3>
<p>Спасибо Роме Комарову за <a href="http://kizu.ru/webdev/ie-a-hover/">статью</a>, к которой я сегодня очередной раз вернулся. Благодаря этой статье я понял, что можно не писать expression, если написать что-то из нижеследующего</p>
<pre><code>.b-link:hover{background: #rgb}
.b-link:hover{background: url(transparent.gif)}
.b-link:hover{background: url(about:blank)}</code></pre>
<p>Эксперимент показал, что свойство background-image не заставляет ИЕ6 перерисовать DOM. Этот селектор проблему не решает</p>
<pre><code>.b-link:hover{background-image: url(about:blank)}</code></pre>
<p>Но моя проблема была в том, что у элемента <code class="inline">.b-link</code> уже был фоновый цвет и сбрасывать его селекторами Ромы мне нельзя, потому что &laquo;дизайн&raquo;.</p>
<pre><code>.b-link{background: #feb247}</code></pre>
<p>Первое, что пришло в голову &#8211; продублировать фоновый цвет. Оказалось, что ИЕ написан хорошо <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Он не перезапускает reflow, так как значение #rrggbb не изменилось:</p>
<pre><code>.b-link{background: #feb247}
.b-link:hover{background: #feb247}</code></pre>
<p>Второе, что мне пришло в голову — изменить последний символ в #rrggbb на &laquo;один вниз&raquo; — было 7, стало 6. И, да, заработало. При этом мой глаз не смог различить подмену цвета:</p>
<pre><code>.b-link{background: #feb247}
.b-link:hover{background: #feb246}</code></pre>
<p>Я позвал верстальщиков нашей Службы HTML-верстки и поделился тем, что решение Ромы рабочее и что у него есть такой нюанс с изменением rgb.</p>
<p>Виталя неделю назад обнаружил, что если просто экспрешином добавлять или удалять класс у ссылки (и больше ничего не делать), то нужный селектор тоже отрабатывает, потому что перезапускается reflow. Возможно есть еще какое-то свойство, которое сделает это и при этом не повлияет на часто используемые свойства. Надо поискать. Виталя, спасибо тебе за мысль <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Я поискал 5 минут и был найден <code class="inline">word-spacing</code>.<br />
Итого, стили выглядят так:</p>
<pre><code>.b-img {
    display: none
}

.b-link:hover {
    word-spacing: 0
}

.b-link:hover .b-img {
    display: inline
}</code></pre>
<p>Пользуйтесь на здоровье <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/06/18/stilizaciya-rebenka-ssylki-pri-hover/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Немного прекрасного об IntelliJIDEA Maia</title>
		<link>http://makishvili.com/2009/06/09/intellijidea-maia/</link>
		<comments>http://makishvili.com/2009/06/09/intellijidea-maia/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 19:08:44 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=995</guid>
		<description><![CDATA[As you may already know, Internet Explorer supports a technique of inserting JavaScript snippets into css expressions. In case you need to edit such code, IntelliJ IDEA 9 will be happy to assist you with completion and highlighting! Helping You with JavaScript Expressions in CSS Хорошо! &#160; If you ever tried to understand or edit [...]]]></description>
			<content:encoded><![CDATA[<blockquote style="overflow: auto"><p>As you may already know, Internet Explorer supports a technique of inserting JavaScript snippets into css expressions. In case you need to edit such code, IntelliJ IDEA 9 will be happy to assist you with completion and highlighting!<br />
<img src="http://blogs.jetbrains.com/idea/wp-content/uploads/2009/06/css_expressions_codeinsight1.png" alt=""/></p></blockquote>
<p><a href="http://blogs.jetbrains.com/idea/2009/06/helping-you-with-javascript-expressions-in-css/">Helping You with JavaScript Expressions in CSS</a><br />
Хорошо!</p>
<p>&nbsp;</p>
<blockquote style="overflow: auto"><p>If you ever tried to understand or edit regular expression like this in JavaScript or ActionScript:<br />
regular expression in JavaScript editor of IntelliJ IDEA 8<br />
<img src="http://blogs.jetbrains.com/idea/wp-content/uploads/2009/06/old_regular_expression_in_js.png" alt=""/><br />
Then you are sure to find IntelliJ IDEA 9 a more helpful in this way. Now you can repeatedly press Ctrl+W to see non-capturing groups:<br />
<img src="http://blogs.jetbrains.com/idea/wp-content/uploads/2009/06/regular_expression_in_js.png" alt=""/></p></blockquote>
<p><a href="http://blogs.jetbrains.com/idea/2009/06/better-regular-expression-editing-in-javascript-and-actionscript/">Better Regular Expression Editing in JavaScript and ActionScript</a><br />
Хорошо!</p>
<p>&nbsp;</p>
<blockquote><p>Instead of wasting your time searching the menus and toolbars in an attempt find out that action you need right now, use the Find Action command (Ctrl+Shift+A) to quickly locate what you need. It works just like Go to Class:<br />
<img src="http://blogs.jetbrains.com/idea/wp-content/uploads/2009/06/go-to-action.png" alt=""/></p></blockquote>
<p><a href="http://blogs.jetbrains.com/idea/2009/06/find-action-saves-time/">Find Action Saves Time</a><br />
Прекрасно!</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/06/09/intellijidea-maia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Степан Резников: Правильные ссылки</title>
		<link>http://makishvili.com/2009/06/02/stepan-reznikov-pravilnye-ssylki/</link>
		<comments>http://makishvili.com/2009/06/02/stepan-reznikov-pravilnye-ssylki/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 09:41:25 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=967</guid>
		<description><![CDATA[Ссылка всегда должна вести на какой-нибудь ресурс, будь то веб-страница, файл или якорь. Другими словами, атрибут href всегда должен содержать адрес ресурса. Не следует использовать ссылку, если поставить ее не на что, то есть ресурса нет. Обработчик события onclick лучше прописать непосредственно у элемента, который должен нажиматься, а для сигнализации его «кликабельности» следует задать стили [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Ссылка всегда должна вести на какой-нибудь ресурс, будь то веб-страница, файл или якорь. Другими словами, атрибут href всегда должен содержать адрес ресурса.</p>
<p>Не следует использовать ссылку, если поставить ее не на что, то есть ресурса нет. Обработчик события onclick лучше прописать непосредственно у элемента, который должен нажиматься, а для сигнализации его «кликабельности» следует задать стили для курсора.
</p></blockquote>
<p><a href="http://www.artlebedev.ru/tools/technogrette/html/links/">Толковая статья</a>, написанная Степаном больше трех лет назад, актуальна до сих пор.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/06/02/stepan-reznikov-pravilnye-ssylki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Объединение JavaScript и CSS в одном файле</title>
		<link>http://makishvili.com/2009/05/27/css-and-js-join/</link>
		<comments>http://makishvili.com/2009/05/27/css-and-js-join/#comments</comments>
		<pubDate>Wed, 27 May 2009 07:32:51 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Добавить метку]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=928</guid>
		<description><![CDATA[http://habrahabr.ru/blogs/webdev/31122/ Меня по-доброму улыбает категоричность многих комментаторов, которые говорят про &#171;экономию на спичках&#187;. Хотя, если захотеть, понять их можно &#8211; они-то верстают сайты, а в статье речь про оптимизацию загрузки страниц порталов. Прислушались бы к &#171;умным дядькам&#187; и мотали бы на себе на усы. Так нет же, их болото единственное в мире )]]></description>
			<content:encoded><![CDATA[<p><a href="http://habrahabr.ru/blogs/webdev/31122/">http://habrahabr.ru/blogs/webdev/31122/</a></p>
<p>Меня по-доброму улыбает категоричность многих комментаторов, которые говорят про &laquo;экономию на спичках&raquo;. Хотя, если захотеть, понять их можно &#8211; они-то верстают сайты, а в статье речь про оптимизацию загрузки страниц порталов.</p>
<p>Прислушались бы к &laquo;умным дядькам&raquo; и мотали бы на себе на усы.<br />
Так нет же, их болото единственное в мире <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/05/27/css-and-js-join/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Вёрстка в IntelliJIDEA. Часть №2</title>
		<link>http://makishvili.com/2009/04/07/verstka-v-intellijidea-2/</link>
		<comments>http://makishvili.com/2009/04/07/verstka-v-intellijidea-2/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 08:04:00 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Добавить метку]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=183</guid>
		<description><![CDATA[Это вторая часть моего доклада, который состоялся 31 января 2009 года в рамках Яндекс.Субботника. В первой части статьи мы поговорили о том, что IntelliJIDEA — это среда разработки для Java, которую можно несложным образом приспособить для клиентской верстки. Мы разобрали, как единожды создать IDEA Project и как сделать так, чтобы разработка каждого последующего Нашего Проекта [...]]]></description>
			<content:encoded><![CDATA[<p>Это вторая часть моего доклада, который состоялся 31 января 2009 года в рамках Яндекс.Субботника.</p>
<p>В <a href="http://makishvili.com/2009/02/verstka-v-intellijidea-1">первой части статьи</a> мы поговорили о том, что IntelliJIDEA — это среда разработки для Java, которую можно несложным образом приспособить для клиентской верстки. Мы разобрали, как единожды создать IDEA Project и как сделать так, чтобы разработка каждого последующего Нашего Проекта не требовала делать это заново. Еще мы поговорили о том, что интерфейс IDEA интуитивно понятен и привычен. И при этом смотрели на такой слайд.</p>
<p><a class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/project10.png"><img src="/pro/2009/02/verstka-v-intellijidea/project10-opt.png" alt="Установка" /></a></p>
<div style="color: #f00"><strong>Но есть момент, на который я сознательно не заострял внимание на презентации.</strong></div>
<p>А именно, после создания IDEA Project в  Project Panel мы видим сразу вот такую картину:</p>
<p><a class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/project16.png"><img src="/pro/2009/02/verstka-v-intellijidea/project16-opt.png" alt="Установка" /></a></p>
<p>То есть мы видим не только те самые физические сущности IDEA Project-а, но еще и Libraries, которые нужны для Java-проекта. А нам их видеть крайне нежелательно.<br />
<strong>Чтобы не видеть этих файлов, нужно сменить View</strong>:<br />
- По умолчанию он установлен в вид IDEA Project<br />
<img style="vertical-align:middle" src="/pro/2009/02/verstka-v-intellijidea/project17.png" alt="View as Project" /><br />
- Выбрать нужно вид Scope: Production<br />
<img style="vertical-align:middle" src="/pro/2009/02/verstka-v-intellijidea/project18.png" alt="View as Production" /></p>
<p>А сейчас я предлагаю Вашему вниманию вторую часть презентации &laquo;Вёрстка в IntelliJIDEA&raquo;.</p>
<p><span id="more-183"></span></p>
<h1>Часть вторая</h1>
<p>Девиз:<br />
<strong>Забудьте про рутину</strong></p>
<p>За всеми фичами Идеи, о которых я расскажу, я хочу чтобы не потерялась одна мета-фича. В чем она?</p>
<p><strong>IntelliJIDEA умеет отвечать на вопросы разработчика.</strong><br />
Она отвечает на все явные вопросы, которые я ей задал явно. Ну, то есть, я попросил её что-то сделать — она сделала.<br />
И ещё она отвечает на множество неявных вопросов, которые я ей сам не задавал, но ответы на которые меня интересуют постоянно.</p>
<p>Без примеров не сильно понятно, поэтому я раскрою свою мысль понятной аналогией.</p>
<p>Что такое Яндекс?<br />
Яндекс — это такая компания, основная задача которой — <a href="http://company.yandex.ru/about/">давать ответы на вопросы пользователей</a>.</p>
<p>На какие вопросы отвечает Яндекс?</p>
<ol>
<li>На вопросы явные. <br />Это вопросы, которые пользователи задают в поисковой строке, а Яндекс отвечает на них на страницах результатов поиска.</li>
<li>На вопросы неявные.<br /> Например, «какая сегодня погода», «происходит ли сейчас что-то важное», «можно ли проехать по городу». Яндекс отвечает на них своими справочными блоками на главной странице портала.</li>
</ol>
<p>Ну вот, поведение IntelliJIDEA очень похоже на миссию Яндекса <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Только у Яндекса ответ на вопрос пользователя — это информация, а у IntelliJIDEA ответом на вопрос разработчика является конкретная помощь.</p>
<p>А чем физически выражается вёрстка?<br />
А она выражается некими действиями, которые разработчик совершает своими пальцами, работая над неким кодом.</p>
<p>А чем физически выражается код?<br />
Такими многослойными абстракциями, как файлы кода, литеральное представление кода и структурные элементы кода.</p>
<p>То есть, если попытаться классифицировать действия, совершаемые над кодом, то я могу выделить три группы действий:</p>
<ol>
<li>Работа с такой абстракцией, как файлы Проекта.<br />
Например, копирование, переименование, поиск и другие действия с файловой системой</li>
<li>Работа с такой абстракцией, как литеральная запись кода.<br />
Я имею в виду работу со строками файла + функции систем контроля версий</li>
<li>Работа с такой сущностью, как структурные элементы кода.<br />
Я имею в виду нюансы работы с конкретным кодом (HTML/CSS и др.)</li>
</ol>
<p>Хорошая IDE для каждой из этих групп предоставляет некие фичи, которые облегчают выполнение этих действий.</p>
<h2 id="lively-and-whole">Живое Целое</h2>
<p>Но IntelliJIDEA  двинулась дальше — она не проводит разделения кода на группы, она работает с Проектом, как с Живым Целым. Звучит это странно, но Java-разработчики меня прекрасно понимают. Я поясню, что имел в виду.</p>
<p>В то время, как большинство редакторов работают с Проектом, как с отдельными сущностями файлов <strong>на файловой системе</strong>, IntelliJIDEA с файловой системой не работает. Идея работает <strong>со своими кешами</strong>, в которых хранится копия-слепок файлов Проекта.<br />
Oops?</p>
<p>Выглядит это так: когда вы поднимаете утром IntelliJIDEA, она загружает в память IDEA Project, который мы создали в первой части статьи. &laquo;Загружает&raquo; означает буквально следующее:</p>
<ol>
<li> Идея смотрит в  IDEA Project File, находит в нём информацию о том, какие IDEA Modules в нем описаны.</li>
<li> После этого смотрит в IDEA Module File и ищет путь к Content Root.</li>
<li> Затем переходит на файловой системе в этот Content Root и всасывает файлы Нашего Проекта в свои кеши. Всасывает и при этом индексирует.</li>
</ol>
<p>&laquo;Индексирует&raquo; означает выявляет взаимосвязи файлов Проекта на основании анализа структурных элементов кода. Именно благодаря этому в IntelliJIDEA есть, к примеру, такой мощный инструмент, как Инспекторы Кода.</p>
<p>Я приведу несложный пример.<br />
Например, индексация дошла до файла index.html.</p>
<ol>
<li>Идея этот файл всасывает в свои кеши</li>
<li>После чего его парсит и, например, встречает в нём подключение стилевого файла
<pre><code class="html">&lt;link type="text/css" href="../css/idea.css"/&gt;</code></pre>
</li>
<li>Внутри своих кешей Идея регистрирует взаимосвязь между файлами index.html и idea.css</li>
<li>После этого смотрит в файл idea.css и запоминает CSS-селекторы, которые в нём описаны.</li>
<li>Потом сравнивает селекторы из файла idea.css с именами классов у HTML-элементов в файле index.html</li>
<li>И если в idea.css есть неиспользуемые в index.html CSS-селекторы, то Идея об этом сообщит в заметной но ненавязчивой форме.</li>
</ol>
<p>Я только что привел пример ответа Идеи на мой неявный вопрос: &laquo;Мои стили актуальны? Есть ли среди них рудиментарные селекторы, которые уже не используются, но болтаются под ногами во время разработки и выливаются в продакшн?&raquo;</p>
<p>Эта фича и многие другие были бы невозможны, если бы Идея не &laquo;всасывала&raquo; все взаимосвязи файлов Нашего Проекта в свои кеши, а работала с файлами, как с отдельными сущностями (как это делают многие другие редакторы)</p>
<p>Спешу успокоить тех из вас, кто уже озадачился: &laquo;Если Идея работает только со своими кешами, а не с файлами на файловой системе, то как тестировать в браузерах? Изменения в браузере отображаются не сразу?&raquo;</p>
<p>Сразу <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Как только  IntelliJIDEA теряет фокус (вы переключились на другое приложение), происходит моментальная синхронизация кешей Идеи с файловой системой. &laquo;Моментальная&raquo; означает мгновенная, молниеносная&#8230; Придумайте еще более точный синоним <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Это происходит настолько быстро, что можно работать с Идеей годами и никогда не узнать про её кеши.</p>
<p>К слову, редактируя код, нет необходимости руками сохранять ваши изменения. <strong class="hotkey">Ctrl S</strong> можно забыть — ваши изменения сохраняются автоматически. И к тому же,  никогда ничего не потеряется, потому что внутри IntelliJIDEA ведется Local History ваших изменений (но об этом чуть позже).</p>
<p>Сразу хочу ответить на еще один скептический вопрос: &laquo;Наверное, из-за  постоянной синхронизации кешей и ведения Local History всё безбожно тормозит?&raquo; Нет, всё летает. Наши ребята из Питера — молодцы, умеют! <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>К слову, именно благодаря Живому Целому в xsl удобно навигироваться по шаблонам, которые связаны друг с другом через импорты. То есть, если вы используете &lt;xsl:apply-imports/&gt;, то можете легко провалиться в базовый шаблон из переопределенного по <strong class="hotkey">Cmd Click</strong> или <strong class="hotkey">Cmd B</strong>.</p>
<p>На этом общие характеристики я заканчиваю и перехожу к описанию конкретных бенефитов Идеи. Разбиение по главам формальное, в тексте к одной и той же фиче я могу подходить с описанием несколько раз в разных главах.</p>
<h2 id="gui-and-settings">GUI and Settings</h2>
<p>Интерфейс действительно привычен и удобен: основная панель для редактирования файлов, вспомогательные панели (типа Project, Structure, Changes), главное меню программы, тулбар с иконками для частых действий и контекстное меню по правому клику. Освоить его и, главное, модифицировать под свои потребности можно без особых усилий. Кастомизировать в GUI можно не всё, но многое. Мне хотелось бы ещё &laquo;таскабельности&raquo; табов, которой нет, но и без неё вполне можно.</p>
<p>В процессе описания я буду вас отправлять в Диалог Настроек IntelliJIDEA. Он находится в двух кликах мыши от нас File -&gt; Settings. Или если пользоваться хоткеем, то еще ближе:  <strong class="hotkey">Cmd,</strong><br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/settings.png"><img src="/pro/2009/02/verstka-v-intellijidea/settings-opt.png" alt="Настройки" /></a><br />
<strong class="hotkey">Cmd,</strong> — это хоткей в Макоси. В винде, я честно признаюсь, хоткей не помню <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2 id="file-templates">File Templates</h2>
<p>Как картина начинается с чистого холста, вёрстка начинается с нового файла.<br />
Создание файла в Идее ничем не примечательно.</p>
<p><strong class="hotkey">Right Click -&gt; New -&gt; Выбрать шаблон</strong><br />
<img src="/pro/2009/02/verstka-v-intellijidea/create-file-01.png" alt="Создать новый файл" /></p>
<p>Примечательно, что предустановленные файловые шаблоны (которые идут в коробке) можно полностью модифицировать под свои нужды. А еще можно создавать свои шаблоны. Делается это в  <strong class="hotkey">Settings -&gt; File Templates</strong>.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/create-file-02.png"><img src="/pro/2009/02/verstka-v-intellijidea/create-file-02-opt.png" alt="Создать новый файл" /></a></p>
<p>В примере на скриншоте видны два дефолтных шаблона Html и Xhtml, внутри которых я описал некую заготовку для создания яндекс-файлов. В них я указал тот DOCTYPE, который используем мы, <a href="http://pepelsbey.net/2008/09/ie-street-magic/">Meta  X-UA-Compatible</a>, который используем мы, <a href="http://makishvili.com/2009/03/conditional-comments/">подключение стилей по правилам</a>, которые используем мы и т.д. Ничто вас не остановит, если вы захотите создать свои файловые шаблоны для  XSLT, например.</p>
<p>Но в целом, File Templates (далее по тексту FT) не заслуживают пристального внимания — ничего сногсшибательного <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Того же результата можно достичь, если задействовать Live Templates.</p>
<h2 id="live-templates">Live Templates</h2>
<p>Что такое Live Templates (далее по тексту LT)? Это некие текстовые шоткаты, которые по нажатию какой-то клавиши превращаются в соответствующий фрагмент кода. О них я еще расскажу ниже в аспекте создания элементов кода. LT тоже есть предустановленные, и есть возможность создавать свои. Использовать LT для создания каркаса новых файлов удобнее, чем FT. Удобнее тем, что они предоставляют возможность после разворачивания кода пройти по элементам кода в том порядке, который я выбрал и заполнить эти места.</p>
<p>Создать заготовку для создания яндекс-файлов можно набрав в файле текст &laquo;html&raquo; и нажать Tab. После этого создастся та же структура, что и при использовании File Template (неудивительно, это же я сам создал такой Live Template).</p>
<p><a class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/create-file-03.png"><img src="/pro/2009/02/verstka-v-intellijidea/create-file-03-opt.png" alt="Создать новый файл" /></a></p>
<p>На скриншоте я показал стрелочками порядок обхода файлов. В каждой из точек Идея остановится и подождет, пока я не введу туда то, что посчитаю нужным.</p>
<p>В последней точке пути мы оказались в body документа. Задействуем еще раз Live Templates. Я создал свой LT для создания таблицы <strong class="hotkey">table -&gt; Tab</strong>:</p>
<pre><code class="html">&lt;table&gt;
&lt;tr&gt;
    &lt;td&gt;
    &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
</code></pre>
<p></p>
<h2 id="surround-folding-and-code-style">Surround, Folding and Code Style</h2>
<p>После этого мы поняли, что нам для вёрстки необходим элемент <code class="inline">tbody</code> и обернули строку этим элементом. Для этого выделили строку и на Selection-е нажали <strong class="hotkey">Cmd Alt J</strong>. То есть обернуть можно любой элемент любым элементов. На скриншоте видны дефолтные &laquo;обертывания&raquo;. Обертывание кавычками-ёлочками я создал сам, потому что надоело писать эти entities руками.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/surround.png" alt="Surround" /></p>
<p>Обращаю ваше внимание на то, что обертывания особенно удобны в ситуации, когда у нас уже есть какой-то развесистый блок с непростой внутренней структурой детей. То есть, когда закрывающий тег блока находится в паре-тройке экранов от открывающего.</p>
<p>Я поясню моё утверждение на примере.<br />
Представим, что нам нужно обернуть длинную таблицу с данными дополнительным <code class="inline">div</code>-ом. В классическом редакторе, типа notepad.exe, мы должны найти открывающий тег <code class="inline">&lt;table&gt;</code> и перед ним написать открывающий <code class="inline">&lt;div&gt;</code>. Потом пролистать экран вниз, глазами найти закрывающий тег <code class="inline">&lt;/table&gt;</code> и написать после него  закрывающий <code class="inline">&lt;/div&gt;</code> А если код не ваш, а вашего предшественника? А если предшественник не структурировал код табуляцией? А если в его таблице ещё несколько вложенных таблиц, и всё вместе это кирпич нечитаемого кода? Представили свои усилия по исполнению обертывания, если вы пользуетесь notepad.exe?</p>
<p><strong>А как это решается в IDEA?</strong><br />
Неважно, как неряшливо ваш предшественник структурировал свой код; неважно, сколько вложенных таблиц в нём, и не важно сколько экранов код занимает. Всё это на себя берёт IDEA. А что делаем мы?<br />
1. Становимся курсором в открывающий тег <code class="inline">&lt;table&gt;</code>,<br />
2. Фолдим (схлопываем) таблицу по хоткею <strong class="hotkey">Cmd-</strong> и выделяем ее мышью<br />
3. Нажимаем знакомый нам хоткей <strong class="hotkey">Cmd Alt J</strong> и оборачиваем таблицу.</p>
<p>&laquo;Обернуть назад&raquo; тоже удобно: когда понадобится удалить div-обертку вокруг таблицы в несколько экранов, станьте на этот див и нажмите <strong class="hotkey">Shift Cmd Fn Backspace</strong>. И пусть макосёвые хоткеи вас не пугают — в винде они попроще.</p>
<p>Фолдинг — мощное средство, которое очень удобно использовать при рефакторинге развесистых структурных элементов. Призываю Вас использовать его так часто, как только сможете придумать.</p>
<p>Кстати, после обертывания в примере выше, вы бонусом получаете ещё и хорошо отструктурированный код. IDEA против неряшливости <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Структурирование кода, конечно же, может быть вызвано не только в виде бонуса после обертывания, но и по нашему прямому указанию хоткеем <strong class="hotkey">Cmd Alt L</strong>. Структурирование происходит по неким правилам, которые мы можем подпилить под наши нужды — переводы строк, отбивку табами или пробелами и прочие. Эта возможность называется Code Style. Отныне работа с неряшливым кодом ваших предшественников более не проблема <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/code-style.png"><img src="/pro/2009/02/verstka-v-intellijidea/code-style-opt.png" alt="Code Style" /></a></p>
<h2 id="dtd">DTD</h2>
<p>Но вернемся к нашей простой задаче: мы обернули строку таблицы элементом <code class="inline">tbody</code>. А спустя какое-то время к нам пришел js-программист и сказал, что ему в JS  было бы очень удобно некоторые группы строк оборачивать в отдельные <code class="inline">tbody</code>, чтобы легко получать доступ к ним.</p>
<p>Вот с таким вопросом ко мне пришел <a href="http://evgeniy-zaharevich.moikrug.ru/">Женя Захаревич</a>: &laquo;Можем ли мы это реализовать?&raquo; А я не знал, может ли таблица иметь несколько <code class="inline">tbody</code> по спецификации. Но знал у кого спросить — у IntelliJIDEA <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong class="hotkey">Cmd Click</strong> на имени элемента провалил меня в DTD, в котором я очень быстро узнал, что <code class="inline">tbody</code> может быть сколько угодно. Осознайте этот момент: мне не пришлось идти в интернет, открывать соответствующую спецификацию HTML или XHTML, искать в ней раздел про таблицы, а потом еще читать по-английски. Я узнал это не уходя из Идеи за считанные секунды. Правда, для этого нужно <a title="Трепанация DTD" href="http://web-zine.org/art/how_to_dtd">уметь читать DTD</a>. Но если вы пишете регекспы (и знаете что такое * + ?), то &#8230; Несложно, в-общем.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/DTD-tbody.png" alt="" /></p>
<h2 id="custom-dtd">Custom DTD</h2>
<p>А можем ли мы использовать кастомные DTD?<br />
По сути, тут звучит сразу два вопроса:<br />
1. Есть ли поддержка кастомных DTD в IntelliJIDEA?<br />
2. Таки зачем оно нам надо? <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Сразу разберемся со втором вопросом, как я его понимаю.<br />
Иногда хочется иметь возможность в своем HTML иметь кастомные атрибуты, к примеру, для удобной валидации форм яваскриптом. И при этом хочется, чтобы валидирующий инструмент, которым мы пользуемся для проверки своего кода, не ругался на них.</p>
<p>Как решение — написать свой DTD, выложить его в инет и в доктайпе своего HTML указать путь к этому DTD. Единственная проблема — браузеры не валидируют. Это означает, что браузер никогда не пойдет по указаному нами адресу к нашему кастомному DTD — он посмотрит в свою &laquo;внутреннюю&raquo; таблицу соответствий версии HTML и DTD. Поэтому наша страница с кастомными атрибутами будет невалидна в любом браузере.<br />
То есть в production оно таки нам не надо <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>А для разработки очень даже бывает надо. Когда?<br />
Раскрою свежий &laquo;Яндекс.Секрет&raquo; <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Сейчас развивается новая внутренняя технология, которая призвана облегчить взаимодействие HTML-верстальщика и XSL-верстальщика. Она называется ULL, ее автор <a href="http://vomixamxam.ya.ru">Макс Максимов</a>.<br />
Идею этой технологии я раскрывать не буду, но сказать пару слов о ней в разрезе кастомного доктайпа можно — эта технология добавляет в наш HTML-документ новые элементы разметки: кастомные атрибуты в своем неймспейсе ull.</p>
<p>Отслеживать правильность использования этих атрибутов мне самому не хочется. Я хочу, чтобы это делала за меня IntelliJIDEA. Для этих целей Максим создал кастомный DTD на основе XHTML 1.0 Transitional, в который добавил правила для ull-атрибутов.<br />
После того, как я подключил в документ этот DTD (на скрине видно, что в public identifier путь указан от локальной папки), Идея стала валидировать мои документы с учетом этого DTD и подсказывать мне правильность написания этих атрибутов.</p>
<p><a class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/DTD-custom.png"><img src="/pro/2009/02/verstka-v-intellijidea/DTD-custom-opt.png" alt="DTD Custom" /></a></p>
<h2 id="autocomplete">Autocomplete</h2>
<p>То есть, помнить написания этих ull-атрибутов  мне уже не нужно — за меня это делает автокомплит.<br />
Автокомплит — ни разу не новшество, он появился в редакторах еще при царе Горохе. Но особенная вкусность автокомплита IntelliJIDEA в том, что он контекстный. Контекстный на основе DTD.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/autocomplete.png" alt="Autocomplete" /></p>
<p>На скрине за скролом всех подсказок не видно, но я поясню — в подсказке нет ни одного блочного элемента. Потому что, как мы хорошо знаем из DTD, внутри параграфа могут находиться только строчные элементы. Или вот еще более конкретный пример:</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/autocomplete-02.png" alt="Autocomplete" /></p>
<p>Спецификация XHTML говорит, что в том месте, где на скрине стоит курсор, могут находиться только те 7 элементов, которые нам подсказывает IntelliJIDEA. По-моему, это ещё один удачный пример ответа на мой неявный вопрос.</p>
<p>Контекстный автокомплит исключительно вкусен в XSL.<br />
XSL-переменные подсказываются исходя из области видимости переменной: та переменная, которая создана в конкретном шаблоне, будет подсказана только в этом шаблоне, в остальных шаблонах и в глобальной зоне видимости она предлагаться не будет.<br />
И по аналогии с HTML, внутри <code class="inline">&lt;xsl:call-template&gt;</code> автокомплит никогда не предложит выбрать элемент <code class="inline">&lt;xsl:param&gt;</code>, потому что по схеме XSL внутри <code class="inline">&lt;xsl:call-template&gt;</code> элемента <code class="inline">&lt;xsl:param&gt;</code> быть не может.</p>
<p id="xml-autocomplete">А в XML-файлах IntelliJIDEA анализирует структуру редактируемого файла, и автокомплит-меню предлагает использовать уже существующие теги и их атрибуты. То есть IDEA как бы &laquo;самообучается&raquo;</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/autocomplete-10.png" alt="" /></p>
<p>И завершая тему autocomplete, два слова про подстановку путей к ресурсам: в HTML-атрибутах <code class="inline">href=""</code>, <code class="inline">src=""</code> и в CSS-значениях <code class="inline">url()</code> Идея подсказывает пути к ресурсам с помощью autocomplete-меню.</p>
<p>Для вызова автокомплита используется хоткей <strong class="hotkey">Ctrl Space</strong>. Для Mac OS X тоже используется он, так как <strong class="hotkey">Cmd Space</strong> занят под смену раскладки клавиатуры.</p>
<h2 id="file-encodings">File Encodings</h2>
<p>Кодировка. Больная мозоль для многих и многих роботов — одни не умеют работать с UTF, другие не могут определять кодировку автоматически, третьи при сохранении файла перекодируют в другую&#8230;<br />
В IntelliJIDEA с кодировкой всё хорошо — она даёт разработчику свободу выбора по принципу &laquo;пиши в той кодировке, которая тебе нужна&raquo;. Что тут рассказать? Перечислять баги других редакторов и говорить, что в Идее этих багов нет? В этом перечислении нет смысла.<br />
Короче, работая в Идее, можно никогда в жизни не задуматься о том, что файлы могут существовать в разных кодировках <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>А! Есть всё-таки две фичи, о которых рассказать надо.<br />
Первая — для разных папок Вашего IDEA-Module можно указать разные кодировки.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/file-encoding.png"><img src="/pro/2009/02/verstka-v-intellijidea/file-encoding-opt.png" alt="File Encoding" /></a></p>
<p>На скрине видно, что я принудительно указал Идее работать с разными директориями в разных кодировках. То есть, к примеру, при создании нового файла в папке deployment, файл будет создан в кодировке cp-1251, а в папке intelijidea в кодировке utf-8. Нам это особенно актуально, потому что Проектов в Яндексе много. То есть, команд разработки тоже много, и у каждой команды могут быть свои предпочтения в выборе кодировки. Работая в команде, которая не хочет (или по каким-то причинам не может) перейти на utf-8, я один раз выставляю нужную кодировку и больше об этих проблемах не думаю.</p>
<p>А вторая фича — возможность конвертирования файлов из кодировки в кодировку прямо в интерфейсе IntelliJIDEA. Конвертировать можно как файл, директорию, так и группу из того и другого.</p>
<p><a class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/file-encoding-2.png"><img src="/pro/2009/02/verstka-v-intellijidea/file-encoding-2-opt.png" alt="File Encoding" /></a></p>
<h2 id="browser-preview">Browser Preview</h2>
<p>Ну и вот, предположим, что у нас есть уже созданная страница в нужной нам кодировке и с каким-то фрагментом кода. И уже хочется просмотреть в браузере, как она выглядит. Какие есть быстрые способы это сделать?</p>
<ol>
<li>Панель прыжка в браузер. Попробуйте подвести мышь к верхне-правому углу Editor View в любом HTML-документе. Вы увидите всплывающую панель с иконками установленных у вас браузеров. Клик по иконке перебросит вас в браузер, в котором откроется ваш HTML-файл.<br />
<img src="/pro/2009/02/verstka-v-intellijidea/browser-icons.png" alt="Browser Panel" /></li>
<li>С помощью хоткея <strong class="hotkey">Cmd Shift C</strong> в Идее можно скопировать полный путь файла на файловой системе в буфер обмена. То есть, открыть на редактирование файл и вызвать хоткей. Дальше переключиться руками в браузер и <strong class="hotkey">Cmd V </strong>в адресной строке</li>
<li>С помощью Mozilla Preview Panel. В Идее есть встроенный Mozilla браузер — им можно просматривать верстку, не переключаясь в стендалон браузер. Но смысла в этом большого нет. Я вижу прямое назначение этой панели лишь в Javascript-дебагинге. Но об этом ниже.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/browser-preview.png"><img src="/pro/2009/02/verstka-v-intellijidea/browser-preview-opt.png" alt="Browser Panel" /></a></li>
</ol>
<h2 id="system-version-control">System Version Control</h2>
<p>Как я <a href="http://makishvili.com/2009/02/verstka-v-intellijidea-1/#svc">уже говорил</a> в первой статье, в IDEA есть поддержка большого количества Систем Контроля Версий. Вы сами выбираете, какие их них использовать.</p>
<p>&laquo;Живое Целое&raquo; дает бонус IntelliJIDEA и для работы с Системами Контроля Версий. Что такое CVS/SVN и с чем их едят, уверен, не мне вам рассказывать. Вы пользуетесь ими ежедневно и командной работы без них не мыслите.</p>
<p>В чем же вкусность? Особенность?<br />
В том, IntelliJIDEA отслеживает любое изменение в файле и сообщает об этом в своем неповторимом ненавязчивом виде. Я остановлюсь на этом очень подробно.</p>
<p>После того, как я проассоциировал файлы IDEA-модуля Presentation с конкретным SVN-репозиторием, любое изменение файла отображается на левой панели Editor View цветными блоками (синими, зелеными) и серыми стрелочками.<br />
<img src="/pro/2009/02/verstka-v-intellijidea/vsc-1.png" alt="VSC" /></p>
<p>Синий блок означает, что код справа от него изменён.<br />
Зеленый блок означает, что код добавлен.<br />
Серая стрелка говорит нам, что какой-то код удалён.</p>
<p>Эти блоки и стрелки кликабельны. Клик на них рождает малюсенькую панель с кнопками действий, которые можно совершить над изменённым кодом.</p>
<p>По клику на зеленый блок мы видим возможность Rollback — откатить назад локальные добавки.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/vsc-2.png" alt="VSC" /></p>
<p>Попросту говоря, удалить этот кусок. Понятно, что можно удалить и руками если он так же мал, как на скрине. Но если фрагмент кода велик, то быстрее удалить rollback-ом. Но это не только быстрее, а что важнее — надежнее — я точно уверен, что удалится только то, что не относится к последней ревизии этого файла.<br />
Еще мы видим синюю стрелку вверх, кликаем на нее и переходим на предыдущее незакоммиченное изменение.</p>
<p>Теперь слева не цветной блочок, а серая стрелка, что означает — в этой строке удален фрагмент кода. А в панели действий мы видим этот самый удаленный код.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/vsc-3.png" alt="VSC" /></p>
<p>Ну, синие стрелки, понятно, служат быстрой навигации по изменениям, rollback — тоже уже понятно. Следующая кнопка родит нам diff-окно, но о нем я чуть позже.<br />
А последняя кнопка панели копирует этот фрагмент кода в буфер. Бывает нужно.</p>
<p>По клику на синий блок мы видим ту же панель и фрагмент кода, который предшествовал текущему</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/vsc-4.png" alt="VSC" /></p>
<p>Обратите внимание, что на правой панели тоже есть какие-то блоки светло-серого цвета.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/vsc-5.png" alt="VSC" /></p>
<p>Кроме светло-серых там могут появляться блоки других цветов, о которых мы еще вспомним. Но именно светло-серые блоки на правой панели имеют отношение к SVC — они сообщают лишь о том, что в такой-то строке кода произошло изменение и я его не закоммитил. И на первый взгляд это кажется сомнительной фичей. Но когда код страницы занимает несколько экранов, то быстро перемещаться к незакомиченным изменениям в коде очень удобно, потому что все изменения у меня на виду. Перемещение к измененной строке происходит простым кликом на светло-серый блок.</p>
<p>Вот, например, на такой странице по своим изменения навигироваться простым кликом быстро и удобно.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/vsc-6.png"><img src="/pro/2009/02/verstka-v-intellijidea/vsc-6-opt.png" alt="VSC" /></a></p>
<h2 id="local-history">Local History</h2>
<p>Почему-то, как у кого ни спрошу, почти никто не пользуется в IDEA такой фичей, как Local History. При этом называют такие причины:</p>
<ol>
<li>Идея жутко тормозит, если не выключить LocalHistory</li>
<li>Зачем оно нужно, если есть SVC?</li>
</ol>
<p>Давайте развенчаем миф про тормоза. Да, было. Если мне не изменяет память, когда-то давно разработчики IntelliJIDEA рекомендовали как временный воркэраунд отключать Local History. Но те проблемы давно решены и сегодня (версия 8.1) мне не известны проблемы производительности. Поэтому, не отключайте Local History, не лишайте себя такой клевой фичи.</p>
<p>Помните, мы говорили про кеши, как про некие слепки файлов?  Эти слепки хранятся несколько дней назад. По умолчанию, три дня.<br />
<a id="local-history-1" class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/lh-1.png"><img src="/pro/2009/02/verstka-v-intellijidea/lh-1-opt.png" alt="Local History" /></a></p>
<p>Если вы пользуетесь SVN, то соглашусь, держать историю больше, вроде как и нет смысла. Но если в вашей компании не хотят поднять svn/cvs сервер или использовать децентрализованное хранилище (о, git, как ты моден сейчас), то вас выручит долгосрочная Local History. Выставьте больше дней и живите спокойно — любые ваши изменения будут сохранены.</p>
<p>И если вам понадобится вернуться к своему какому-то решению, вы можете просмотреть и вернуть его через диалог<br />
<a id="local-history-2" class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/lh-2.png"><img src="/pro/2009/02/verstka-v-intellijidea/lh-2-opt.png" alt="Local History" /></a></p>
<p>Но обращаю ваше внимание, что в <a href="#local-history-1">диалоге настроек</a> указаны чекбоксы действий, которые автоматически ставят метки. Метки — это чекпойнты сохранения, если кому так понятнее <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А можно эти метки создавать самому. На скрине видно много автоматических меток, которые создались при открытии IDEA-Project-а, и одна метка, которую я создал руками. Нам, верстальщикам, стоит помнить, что автоматическая метка ставится только при открытии проекта. Остальное из списка чекбоксов работает только в Java-проектах.</p>
<p>Я нередко использую именно ручное создание меток в локальной истории. Так бывает, что вот уже почти сверстал какой-то блок, но уперся в трудноисправимые баги. И тут в голову приходит идея как сверстать по-другому. Что делать, чтобы не потерять уже сверстанное? Сделать копию верстки и стилей и сохранить под другими именами? Или создать ветку в репозитории и там временно похранить? Можно, конечно, но неэлегантно. И лениво.</p>
<p>Элегантно — сохранить верстку в Локальной Истории, поставив метку с внятным комментарием.</p>
<p><a id="local-history-3" class="darkbox darkbox-big" href="/pro/2009/02/verstka-v-intellijidea/lh-3.png"><img src="/pro/2009/02/verstka-v-intellijidea/lh-3-opt.png" alt="Local History" /></a></p>
<p>Сохранить можно состояние как одного файла, так и целиком Проекта, то есть и HTML-верстку и CSS-файлы и картинки и скрипты.<br />
<a id="local-history-4" class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/lh-4.png"><img src="/pro/2009/02/verstka-v-intellijidea/lh-4-opt.png" alt="Local History" /></a></p>
<p>После этого можно пробовать реализовать второе решение, и если оно окажется хуже первого, парой кликов можно вернуться к сохраненному состоянию Проекта из Локальной Истории. Удобно же, как этим можно не пользоваться?</p>
<h2 id="diff">Diff</h2>
<p>Функциональность сравнивания &laquo;чего-то&raquo; с &laquo;чем-то&raquo; в Идее есть по умолчанию.<br />
Заканчивая тему SVC, приведу скриншот diff локального файла с этим же файлом в репозитории<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/vsc-7.png"><img src="/pro/2009/02/verstka-v-intellijidea/vsc-7-opt.png" alt="VSC" /></a></p>
<p>А вообще существует три режима diff-а</p>
<ul>
<li>Compare Two Files — сравниаются два файла, выделенные одновременно в Project View</li>
<li>Compare File with Editor — сравнивается выделенный в Project View файл с файлом, который открыт в Editor View</li>
<li>Compare Selected with Clipboard — сравнивается выделенный фрагмент кода с тем, что лежит в буфере обмена</li>
</ul>
<p>В каждом из них мы перемещаемся в окно diff-а, аналогичное  тому, что на скриншоте выше. И в каждом есть активные кнопки для переноса изменений из одного файла в другой.</p>
<h2 id="create-code">Создание элементов кода</h2>
<p>Работая в IntelliJIDEA, есть возможность не думать о написании HTML-тегов и CSS-свойств. И я сейчас не о том волшебно-контекстном автокомплите, о котором я уже писал выше. Я говорю о легкой возможности мыслить не &laquo;HTML-тегами&raquo; и &laquo;CSS-свойствами&raquo;, а иными категориями, например, &laquo;Раскладка страницы&raquo; или  &laquo;Межпроектный HTML-CSS Компонент&raquo;. То есть как это?</p>
<p>Я уже упоминал, что Live Templates — это некие сокращения для ввода более полной версии текста — набрали <code class="inline">div</code>, нажали кнопку <strong class="hotkey">Tab</strong> и вместо введеных трех символов получили узел <code class="inline">&lt;div&gt;&lt;/div&gt;</code> в дереве элементов.</p>
<p>Такие сокращения можно сделать на все известные теги. <a href="http://pepelsbey.net/2008/11/zen-coding-1-2/">Огромную работу</a> в этом направлении проделал Вадим Макеев для редактора TextMate. И это значительно ускоряет набор кода. Но внутри IntelliJIDEA мы эту фичу используем не только так, а ещё и по-иному.</p>
<p>В группе HTML-верстки мы следуем Некой Идеологии, которая служит тому, чтобы достигать максимальной надежности и максимальной поддерживаемости кода. И как инструмент этой Иделогии развивается <a href="http://clubs.ya.ru/yacf/">Фреймворк</a>, о котором на Я.Субботнике <a href="http://video.yandex.ru/users/ya-events/tag/%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0/">рассказывал</a> Виталя.</p>
<p>Что это дает?<br />
Вместо того, чтобы каждый раз писать анонимные теги, указывать им атрибуты класс и терять на этом время, потому что делаем мы это сотни раз в день, мы используем Live Template, который, к примеру, создает готовую верстку общепортального элемента &laquo;Юзерпик&raquo;</p>
<p>LT <code class="inline">b-userpic</code> превратится во фрагмент дерева</p>
<pre><code class="html">&lt;!-- b-userpic --&gt;
&lt;i class="b-userpic"&gt;&lt;img src="" alt=""/&gt;&lt;b&gt;&lt;/b&gt;&lt;/i&gt;</code></pre>
<p>К слову, элемент b-userpic — часть Яндекс.Фреймворка. В этом компоненте решена проблема выравнивания юзерпика в неком плейсхолдере (25х25 или 50х50 или 100х100) по вертикали и горизонтали, когда размеры самой картинки не известны. Спасибо <a href="http://cssing.org.ua">Юре Артюху</a> за идею и <a href="http://vitaly.harisov.name">Витале Харисову</a> за то, что её раскопал в <a href="http://cssing.org.ua/2005/07/14/vertical-align-middle/">архивах cssing.org.ua</a> и добавил в код элегантности <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Или вот еще примеры Live Templates, которые ускоряют создание CSS-кода (в комментариях я пишу LT, справа от комментария — код, который разворачивается вместо LT):</p>
<p>At-символ — шоткат для быстрого создания импорта. Внутри скобок работает автокомплит имен файлов Проекта</p>
<pre><code>/* @ */		@import url(…);</code></pre>
<p>На каждое CSS-свойство написан свой LT, который раскрывается в полную запись.</p>
<pre><code>/* poa */	position: absolute;
/* por */	position: relative;</code></pre>
<p>Если CSS-свойство составное, то в нужных нам местах Идея предложит ввести нужные значения</p>
<pre><code>/* bau */	background: [color]url(…) no-repeat[position]</code></pre>
<p>По аналогии с HTML, использовать LT можно и для вывода узкоспециализированых значений.<br />
В Яндексе используется два шрифта в строго указанных размерах. Я об этом не думаю вообще, потому что есть такие LT:</p>
<pre><code>/* fa */	font: 100% Arial, sans-serif;
/* fv */	font: 80% Verdana, sans-serif;</code></pre>
<p>Очень облегчают работу LT, которые позволяют создавать кроссбраузерные решения. Например до тех пор, пока не уйдет на покой Firefox 2, для создания инлайн-блока мы будем использовать LT <code class="inline">dib</code>.</p>
<pre><code>/* db */	display: block;
/* di */	display: inline;
/* dib */	display: -moz-inline-block; display: inline-block;</code></pre>
<p>Ну и эти два LT, как иллюстрация к кроссбраузерным решениям. Что они делают, я уверен, понятно.</p>
<pre><code>/* bsb */	box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box
/* bsc */	box-sizing: content-box; -moz-box-sizing: content-box; -webkit-box-sizing: content-box
</code></pre>
<p>Что нужно понять из этих примеров? То, что мы пишем код фрагментами, а не HTML-тегами/CSS-свойствами. То, что максимально используя ливтеплейты, мы переносим задачу по формированию логических кусков нашего кода на плечи робота. А себе оставляем только творчество <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Но творчество не в смысле: «Я художник — я так вижу». Нет <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Творчество в смысле сверстать так хорошо, чтобы сделать верстку максимально надежной, легко поддерживаемой и добиться соответствия эскизу.</p>
<h2 id="code-inspection">Code Inspection</h2>
<p>Вот та фича, из-за которой я не покину IntelliJIDEA. В чем ее бенефит?<br />
Чтобы её оценить, вам придется кое-что сделать в Idea.<br />
1. Создайте два новых пустых файла и скопируйте в них соответствующий доктайп:<br />
В HTML-файл</p>
<pre><code class="html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code></pre>
<p>В XHTML-файл</p>
<pre><code class="html">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</code></pre>
<p>2. В оба файла скопируйте каркасную структуру</p>
<pre><code class="html">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Презентация&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

    &lt;ul&gt;
        &lt;li&gt;
            item
        &lt;/li&gt;
    &lt;/ul&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>3. Теперь как бы невзначай удалите закрывающем теге li первую скобку. В обоих файлах, чтобы получилось так:</p>
<pre><code class="html">
        &lt;li&gt;
            item
        /li&gt;
</code></pre>
<p>А теперь смотрим, что в XHTML-файле, в отличие от HTML, справа на полях появился блок красного цвета. Это включились в работу Инспекторы кода, которые сообщают нам об ошибке в коде.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/code-inspection-1.png"><img src="/pro/2009/02/verstka-v-intellijidea/code-inspection-1-opt.png" alt="Code Inspection" /></a></p>
<h3 id="code-inspection-wellformed">Веллформность</h3>
<p>Вообще-то, этот пример с пропущенным закрытым тегом банален. Ну, в самом-то деле, редактор распарсил xml документ и обнаружил, что дерево узлов сломано. То есть not well-formed — неправильно оформлено, по-русски. Проверка на веллформность — это полезная фича, но ничего сногсшибательного, — много говорить о ней нечего. А тот факт, что я узнал о ней сразу, как только ошибся в коде — об этом говорить уже можно с восторгом, потому что IntelliJIDEA ответила на незаданный мной вопрос: &laquo;А не слажал ли я случайно?&raquo;. &laquo;Да, слажал&raquo;, — ответила мне Идея радостно и стрельнула в глаз красным. &laquo;Ой!&raquo;, — сказал я, и тут же (сразу же!) исправил ошибку.</p>
<h3 id="code-inspection-validation">Валидность</h3>
<p>Но тем не менее, инспекция веллформности впечатляет меня меньше, чем валидация кода на лету. Прошу вас осознать этот факт — за валидностью своего кода я не слежу вообще, потому что эту часть на себя тоже забрала Идея.</p>
<p>Помните, когда я говорил про <a href="#autocomplete">контекстный автокомплит</a>, я показывал скриншот из которого понятно, что внутри <code class="inline">&lt;p&gt;</code> по спецификации не может быть блочного элемента.<br />
<img src="/pro/2009/02/verstka-v-intellijidea/autocomplete.png" alt="Autocomplete" /></p>
<p>Но что будет, если я все таки напишу внутри параграфа блочный элемент?</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/code-inspection-2.png" alt="Code Inspection" /></p>
<p>Я увижу в правом верхнем углу документа красный индикатор. То есть в документе есть ошибки. А еще Идея мне подсветит красным невалидный код, и при наведении на него расскажет, в чем конкретно ошибка. А ещё покажет ошибку справа на полях (для быстрого перехода к ней по клику).</p>
<p>То есть, когда вы совершаете ошибку, и документ становится невеллформным или невалидным, вы узнаете об этом сразу же, а не после того, как откроете документ в Firefoxe (с плагином HTML Validator) и не после того, как документ уйдет в тестирование и вам напишут багрепорт об ошибке валидации. Осознайте этот бенефит для своей эффективности.</p>
<p>На мой взляд, IntelliJIDEA — единственный редактор, который так элегантно, ненавязчиво и эффективно позволяет а) не допускать ошибки валидации и б) исправлять их очень быстро.</p>
<h3 id="сyrillic-с">Кириллица в CSS-селекторах</h3>
<p>Завершая тему Инспекторов Кода.<br />
Если существовал такой человек, который продумал расположение символов двух языков на одной кнопке (рус/англ), то этот человек был с оригинальным чувством юмора. Например, он подложил свинью разработчикам, когда на одной кнопке расположил латинскую «C» и кириллическую «С». Предполагаю, что он злорадно потирал ладошки и ехидно хихикал, когда представлял себе, как разработчики будут чертыхаться и силиться понять, почему CSS-селектор, в котором всё написано правильно, не применяется к элементу.  А проблема лишь в том, что в английском слове попалась кириллическая «С».</p>
<p>Может быть вы считаете, что этот юзкейз притянут за уши?  Ну-ну <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Если Идеей не пользуетесь, тогда просто запомните этот смешной юзкейз на будущее, очень может быть, он сэкономит вам много времени <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Но работая в Идее, об этом можно не думать — она явным образом указывает на то, что в коде появился кириллический символ в неположенном месте.</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/code-inspection-3.png" alt="Code Inspection" /></p>
<h3 id="quirks-mode-plugin">Quirks Mode Plugin</h3>
<p>Quirks Mode Plugin идет в поставке и он на лету проверят  HTML/XHTML код на кроссбраузерность. Насколько я понимаю, разработчики плагина взяли данные с сайта Питера-Пол Коха http://www.quirksmode.org/</p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/70/htmlQuicksMode.gif" alt="HTML/XHTML code inspections" /><br />
Ума не приложу, как можно было реализовать проверку моего кода на кроссбраузерность по тесткейсам Питера. Но ребята из JetBrains смогли. Функциональность востребованная.</p>
<h2 id="text-shortcuts">Удобная работа с текстом</h2>
<p>Вообще-то удовольствия в работе верстальщика маловато, потому что, как я уже говорил, приходится писать один и тот же набор HTML-тегов и CSS-свойств каждый день по-многу раз в день.  И если Live Templates нам помогли ускорить создание элементов кода, то всё равно есть такие действия, на которые макросов не напишешь.</p>
<p>Это какие? Насколько часто вам приходится фрагменты кода выделять, копировать, вырезать, вставлять, перемещать в документе, искать по документу, заменять и рефакторить? Мне очень часто. И до знакомства с таким понятием, как IDE, я не знал, что работа с текстовыми строками может приносить удовольствие, а не утомление.</p>
<p>Я сейчас покажу часть шоткатов, которые наряду с привычными (типа <strong class="hotkey">Cmd V</strong> &#8211; вставить из буфера) упрощают рутинные действия и ускоряют работу.</p>
<style type="text/css">.hotkey-grid td{padding-bottom: 0.5em;} .hotkey-grid .name{font-weight:bold;padding-right:0.5em;vertical-align: top;white-space: nowrap;} .hotkey-grid .note{color: #999;}</style>
<table class="hotkey-grid" border="0">
<tbody>
<tr>
<td class="name">Cmd C</td>
<td>Скопировать в буфер строку под курсором.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td class="name">Cmd X</td>
<td>Вырезать в буфер строку под курсором.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td class="name">Cmd Y</td>
<td>Удалить строку под курсором.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td class="name">Cmd D</td>
<td>Дублировать строку под курсором.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td class="name">Cmd Shift ArrowUp</td>
<td>Переместить строку под курсором на одну вверх.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td class="name">Cmd Shift ArrowDown</td>
<td>Переместить строку под курсором на одну вниз.</p>
<div class="note">Выделять строку не нужно</div>
</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td class="name">Cmd L</td>
<td>Выделить строку под курсором</td>
</tr>
<tr>
<td class="name">Ctrl W</td>
<td>Выделить слово под курсором. Повторное нажатие расширяет выделение до логического родителя — предложение в текстовом блоке или тег родительского элемента в дереве.</p>
<div class="note">Используется Ctrl, потому что Cmd занят (см. ниже)</div>
</td>
</tr>
<tr>
<td class="name">Selection -&gt; Cmd D</td>
<td>Выделить подстроку или строки и дублировать выделенное</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td class="name">Cmd /</td>
<td>Закомментировать строку под курсором строчным комментарием</td>
</tr>
<tr>
<td class="name">Selection -&gt; Cmd /</td>
<td>Выделить фрагмент и закомментировать выделенное строчными комментариями.</p>
<div class="note">Фрагмент может быть многострочным или частью строки</div>
</td>
</tr>
<tr>
<td class="name">Selection -&gt; Cmd Shift /</td>
<td>Выделить фрагмент и закомментировать выделенное блочным комментарием.</p>
<div class="note">Фрагмент может быть многострочным или частью строки</div>
</td>
</tr>
<tr>
<td class="name">Alt Fn Backspace</td>
<td>Удалить всё до начала следующего слова. Как вариант использования, стать в конце строки и по вызову хоткея удалить все пробельные символы до начала следующей строки. Но есть более правильный.</td>
</tr>
<tr>
<td class="name">Cmd Shift J</td>
<td>Нативный способ склеить последующую строку со строкой под курсором.</p>
<div class="note">Не нужно становиться в конец строки</div>
</td>
</tr>
<tr>
<td class="name">Shift Cmd Fn Backspace</td>
<td>Удалить открывающий и закрывающий тег, не трогая его содержимое.</p>
<div class="note">Нужно стать курсором на удаляемый тег</div>
</td>
</tr>
<tr>
<td class="name">Cmd Plus/Minus</td>
<td>Фолдинг элемента под курсором.</p>
<div class="note">Стоять курсором на элементе не нужно — достаточно стать на строку с элементом</div>
</td>
</tr>
<tr>
<td class="name">Shift Cmd Plus/Minus</td>
<td>Фолдинг всего дерева в документе.</p>
<div class="note">Стоять курсором всё равно где <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td class="name">Fn Cmd ArrowLeft/Right</td>
<td>Переместить курсор в начало/в конец файла.</td>
</tr>
<tr>
<td class="name">Fn Cmd ArrowUp/Down</td>
<td>Переместить курсор в начало/в конец видимой частиэкрана.</p>
<div class="note">Это не листание по-странично, а именно одноразовое перемещение курсора вверх/вниз.</div>
</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td class="name">Cmd J</td>
<td>Контекстное меню для выбора Live Template.</p>
<div class="note">Для точного выбора (по первой букве) достаточно ввести в коде первую букву темплейта и нажать хоткей</div>
</td>
</tr>
<tr>
<td class="name">Selection -&gt; Alt Cmd J</td>
<td>Контекстное меню для выбора Surround Live Template.</td>
</tr>
<tr>
<td class="name">Shift Cmd M</td>
<td>Многострочный Replace.</td>
</tr>
<tr>
<td class="name">Shift Cmd N</td>
<td>Быстрое открытие файла.</td>
</tr>
<tr>
<td class="name">Shift F6</td>
<td>CSS Refactoring</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td class="name">Cmd W</td>
<td>Закрыть активный таб.</p>
<div class="note">Ничего необычного. Просто в хоткее <strong class="hotkey">Ctrl W</strong> я сюда сослался <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
</td>
</tr>
</tbody>
</table>
<p>Если вы не пользователь Mac OS, то читать их нужно так: <strong class="hotkey">Cmd</strong> соотвествует <strong class="hotkey">Ctrl</strong>, сочетание <strong class="hotkey">Fn Backspace</strong> соотвествует <strong class="hotkey">Delete</strong></p>
<p>Не могу сказать, что в других IDE похожих хоткеев нет. Есть конечно.<br />
Но операций с целыми строками без предварительного выделения строки я до IntelliJIDEA нигде не встречал. А сейчас я не представляю себе эффективную работу без них.</p>
<h2 id="navigation">Навигация</h2>
<p>Вот, кстати, в списке шоткатов промелькнул неприметный и, наверное, непонятный <strong class="hotkey">Shift Cmd N</strong>. А ведь я нажимаю этот хоткей раз 100 в день.  Он рождает мне маленький диаложек, который ожидает от меня ввода имени файла.<br />
<img src="/pro/2009/02/verstka-v-intellijidea/file-open-1.png" alt="File Open" /></p>
<p>И знаете, какой у меня usecase сотня раз на дню? Мне нужно открыть файл на редактирование, но имени его я &laquo;&#8230;не помню. Помню только&#8230; первые три буквы&raquo; (с) М.Галустян.</p>
<p>И что мне делать? Искать нужный файл глазами в немаленькой файловой структуре Проекта? Это же так долго и утомительно. Тем более, если не помнишь точно, как он называется, и, соответственно, в какой конкретно папке его искать. А этот диаложек подсказывает нужные мне файлы по маске</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/file-open-2.png" alt="File Open" /></p>
<p>А если надо ограничить поиск по типам файлов, то есть фильтр</p>
<p><img src="/pro/2009/02/verstka-v-intellijidea/file-open-3.png" alt="File Open" /></p>
<p>А у Java-программистов есть еще поиск по символу и по имени класса (мечтательно вознеся глаза к небу).</p>
<p>Я хотел бы, чтобы вы меня поняли — навигироваться по Проекту можно не открывая Project Panel. Как найти любой файл я рассказал. А еще можно переходить к любому ресурсу прямо из кода.</p>
<p>Например, <strong class="hotkey">Cmd Click</strong> на имени CSS-селектора в HTML-коде провалит меня в файл с этим селектором. Если селектор написан не в одном файле, то будет предложен выбор.<br />
<img src="/pro/2009/02/verstka-v-intellijidea/file-open-4.png" alt="File Open" /><br />
Правда, хотелось бы в этом попапе видеть пути к файлам вместо имени Idea-Module. Мне это только что в голову пришло, надо зарепортить импрувмент в JetBrains.</p>
<p>Тот же принцип с файлами скриптов и картинок — <strong class="hotkey">Cmd Click</strong> по пути к ресурсу прокидывает в него.</p>
<p>Кстати, я говорил, что картинки можно просматривать к IntelliJIDEA? Размер посмотреть, объем, битность. А большего в IDE и не нужно, на мой взгляд.<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/file-open-5.png"><img src="/pro/2009/02/verstka-v-intellijidea/file-open-5-opt.png" alt="File Open" /></a></p>
<h2 id="css-refactoring">Рефакторинг CSS</h2>
<p>Еще в списке шоткатов промелькнул <strong class="hotkey">Shift F6</strong>. Как им пользоваться и что он делает? Если стать на имени CSS-класса в CSS-селекторе и нажать хоткей, то появится такой диалог<br />
<a class="darkbox" href="/pro/2009/02/verstka-v-intellijidea/css-refactoring.png"><img src="/pro/2009/02/verstka-v-intellijidea/css-refactoring-opt.png" alt="CSS Refactoring" /></a><br />
Если в нем изменить имя CSS-селектора, то он изменится во всех файлах Проекта. Разработчики IntelliJIDEA вот так <a href="http://www.jetbrains.com/idea/features/html_css_editor.html#Refactoring">говорят</a> об этой функциональности:</p>
<blockquote><p>This important feature is a real time-saver which additionally guarantees the consistency of the refactored code.</p></blockquote>
<p>Я, вообще-то, люблю делать ежедневный рефакторинг. А эта фича в рефакторинге незаменима — быстрый результат и гарантированное качество. Проверено на себе. Рекомендую.</p>
<h2 id="features">Калейдоскоп возможностей</h2>
<p>А теперь коротенько о разнообразных IDEA-вкусностях словами самих JetBrains-овцев и будем заканчивать.</p>
<h3 id="image-size">Размер картинок</h3>
<p>Работая в IntelliJIDEA, вам не нужно думать о реальных размерах контентных картинок. Вам сообщат <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://www.jetbrains.com/idea/features/img/imgSizeCheckFix.gif" alt="Image size" /></p>
<h3 id="attribute-inspection">Инспекция HTML-атрибутов</h3>
<p>Работая в IntelliJIDEA, у вас не получится написать один и тот же атрибут дважды. Вам сообщат <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img src="http://www.jetbrains.com/idea/features/img/duplicateAttributeHTML_smal.gif" alt="" /></p>
<h3 id="attribute-inspection">Инспекция CSS-свойств и селекторов</h3>
<p>Работая в IntelliJIDEA, у вас не получится ошибиться в написании CSS-свойств, их значений и, например, псевдоклассов</p>
<p><img src="http://www.jetbrains.com/idea/features/img/invalidPseudoClassCSS_small.gif" alt="" /></p>
<p>А еще у вас всегда под рукой будут vendor-specific CSS-свойства, и инспекция ошибок в их написании:</p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/80/cssCompletionBrowserSpec.gif" alt="" /></p>
<p>И небольшой импрувмент — на поле слева от CSS-свойства можно видеть цветной квадратик.  Для наглядности</p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/80/cssGutterColor.gif" alt="" /></p>
<p>А если надо быстро цвет заменить во всем проекте, то знакомый вам <strong class="hotkey">Shift F6</strong> поможет это сделать быстро и гарантированно без ошибок. Без ошибок еще и потому, что ввести в поле вы можете только символы <code class="inline">#</code>, <code class="inline">1-9</code>, <code class="inline">a-f</code> или зарезервированные слова</p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/80/cssColorRefactoring.gif" alt="" /></p>
<h3 id="show-applied-styles-for-tag">Show Applied Styles for Tag</h3>
<p>Не выходя из IntelliJIDEA, вы всегда сможете увидеть CSS-стили, которые применяются к нужному вам HTML-элементу</p>
<p><img src="http://www.jetbrains.com/idea/features/img/tagAppliedStyles_small.gif" alt="" /></p>
<h3 id="css-autocomplete">CSS Autocomplete</h3>
<p>Помните, я говорил, что IntelliJIDEA в XML-е подсказывает <a href="#xml-autocomplete">имена использованных элементов</a>? Ну так вот, в CSS вы имеете то же самое — вам подскажут имена существующих CSS-классов</p>
<p><img src="http://www.jetbrains.com/idea/features/img/cssClassCompletion_small.gif" alt="css-autocomplete" /></p>
<h3 id="bredcrumbs">Хлебные крошки в HTML/XHTML</h3>
<p>Работая в IntelliJIDEA, вы не заблудитесь в чужом неряшливом коде. Вас выведут по хлебным крошкам</p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/70/htmlCrumbs.gif" alt="Хлебные крошки" /></p>
<h3 id="navigation-bar">Navigation Bar</h3>
<p>Работая в IntelliJIDEA, вы всегда можете получить доступ к нужному вам файлу, не открывая Project Panel. Вам поможет плавающая панели навигации <strong class="hotkey">Fn Alt ArrowLeft</strong></p>
<p><img src="http://www.jetbrains.com/idea/features/screenshots/60/NaviBar.jpg" alt="Navigation Bar" /></p>
<h3 id="javascript-debugger">Javascript debugger</h3>
<p>В своей работе я не пишу такие скрипты, которые требуют дебага, потому что у меня такая специализация, что production-скрипты пишу не я, а другие крутые парни. Поэтому про дебаг я не могу ничего от себя рассказать. Но то, что он есть, и судя по видео, он удобен, я вам сказать могу <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Приглашаю вас посмотреть <a href="http://www.jetbrains.com/idea/training/demos/javascript-debugger.html">online-demo</a> на сайте JetBrains.</p>
<p>А еще обязательно загляните на страничку с <a href="http://www.jetbrains.com/idea/features/javascript_editor.html">описанием поддержки Javascript</a>. Там вам будет чему порадоваться <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3 id=" eclipse">Взаимодействие с Eclipse</h3>
<blockquote><p>You can export, import and synchronize IntelliJ IDEA projects with Eclipse, enabling all of your team members to take advantage of using their favorite IDE. Plus, IntelliJ IDEA supports Eclipse format of storing dependencies, letting you share the single code base within mixed-IDE team.</p></blockquote>
<p>Познакомиться с этой функциональностью можно <a href="http://www.jetbrains.com/idea/features/eclipse_java.html">здесь</a></p>
<h3>Единые настройки для команды</h3>
<p>В версии 8.1 появилась возможность хранить все свои настройки IntelliJIDEA <a href="http://www.jetbrains.net/devnet/docs/DOC-1143">на IDEA Sharing Server</a>. Сейчас туда можно только логиниться под своим аккаунтом. Но скоро настройки среды можно будет шарить в команде и между командами.</p>
<p>В группе HTML-верстки Яндекса используются свои настройки, которыми поделиться с вами мы пока не можем, потому что&#8230; ну кривоватый способ мы выбрали (подкладывание файликов IDEA-настроек с помощью shell-скрипта). <a href="http://aefimov.livejournal.com/">Алексей Ефимов</a> согласился помочь написать плагин, который будет устанавливать наши настройки нативным образом. Когда Алексей его напишет, и если до того момента IDEA Sharing Server не запустится, я выложу ссылку на плагин.</p>
<p>И вот на этом я, пожалуй, остановлюсь <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2 id="summary">Резюме</h2>
<p>Если вы таки дочитали до этих строк, то у вас однозначно есть две отличных черты характера — усидчивость и желание учиться новому. И я рад, что в мой блог заглянул именно такой читатель, как вы. <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>В этой статье я старался показать как именно работа в IntelliJIDEA повышает мою эффективность. И намекнуть вам, что ваша эффективность тоже может стать выше.</p>
<p>Мне хочется, чтобы после прочтения статьи стала понятна одна вещь: у меня не было цели доказать, что IDEA превосходит все существующие редакторы. Ставить такую цель бесполезно и слишком самонадеянно. Глупо и по-детски <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Я лишь хотел показать известные мне бенефиты Идеи, которые лично для меня определяют выбор именно этого редактора. Станет ли вам удобно в Идее — круто, буду рад. Но если описанные возможности Идеи (в целом) вас не впечатлили — я, в-общем то, не расстроюсь.</p>
<p>Единственное, что меня может опечалить — это комменты в духе &laquo;каких-то особых фич, которые дают преимущество этой IDE перед остальными, я не увидел. Статья — всего лишь акт поклонения любимому софту.&raquo;  Наличие таких комментариев для меня будет означать, что их авторы не поняли цели моего мессаджа, и это целиком моя вина — не смог донести свой смысл.</p>
<p><strong>Я искренне надеюсь, что описанные мной знания смогут Вам помочь верстать быстрее, эффективнее и качественнее. Успехов Вам!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/04/07/verstka-v-intellijidea-2/feed/</wfw:commentRss>
		<slash:comments>84</slash:comments>
		</item>
		<item>
		<title>IE 8.1 Eagle Eyes</title>
		<link>http://makishvili.com/2009/03/31/ie-81-eagle-eyes/</link>
		<comments>http://makishvili.com/2009/03/31/ie-81-eagle-eyes/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 20:12:06 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=614</guid>
		<description><![CDATA[По материалам Блога для вебмастеров По-моему, это нереально. Я бы даже сказал, нереально круто, очень круто для браузера, который больше мешал работать, чем помогал последние 5 лет. Самая невероятная возможность нового Eagle Eyes &#8211; поддержка аддонов FireFox. Хотя IE 8.1 предупреждает, что не все плагины будут работать, мы проверили четыре популярных плагина Firefox (Firebug, Web [...]]]></description>
			<content:encoded><![CDATA[<p>По материалам <a href="http://www.getincss.ru/2009/03/31/internet-explorer-81-eagle-eyes-a-vy-uzhe-znaete/">Блога для вебмастеров</a></p>
<p>По-моему, это нереально. Я бы даже сказал, нереально круто, очень круто для браузера, который больше мешал работать, чем помогал последние 5 лет.</p>
<blockquote><p>Самая невероятная возможность нового Eagle Eyes &#8211; поддержка аддонов FireFox. Хотя IE 8.1 предупреждает, что не все плагины будут работать, мы проверили четыре популярных плагина Firefox (Firebug, Web Developer, Tab Mix Plus, и No-Script), и они работали безупречно</p></blockquote>
<p>Летом нас ждет счастье. И мы с вами его вполне заслужили <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/03/31/ie-81-eagle-eyes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Я.Субботник в Киеве</title>
		<link>http://makishvili.com/2009/03/31/yasubbotnik-v-kieve/</link>
		<comments>http://makishvili.com/2009/03/31/yasubbotnik-v-kieve/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 16:44:06 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=597</guid>
		<description><![CDATA[25 апреля состоится Я.Субботник &#171;Вёрстка и API&#187; в Киеве. Программа мало отличается от московской, за исключением того, что Наташа не расскажет про верстку под мобильные, вместо Федора Голубева про API будет рассказывать Александр Тармолов и не сможет выступить Женя Фирсова. У Витали изменена тема и, насколько я могу догадаться, будет изменена структура доклада. Вадим выступит [...]]]></description>
			<content:encoded><![CDATA[<p>25 апреля состоится Я.Субботник &laquo;Вёрстка и API&raquo; в Киеве.</p>
<p><a href="http://clubs.ya.ru/yandex-ua/replies.xml?item_no=14">Программа</a> мало отличается от московской, за исключением того, что Наташа не расскажет про верстку под мобильные, вместо Федора Голубева про API будет рассказывать Александр Тармолов и не сможет выступить Женя Фирсова.</p>
<p>У <a href="http://vitaly.harisov.name">Витали</a> изменена тема и, насколько я могу догадаться, будет изменена структура доклада. <a href="http://pepelsbey.net/">Вадим</a> выступит со второй обновленной версией своего доклада. Я тоже изменю многое во второй части своего сообщения.</p>
<p>И да, планируется видеозапись этого мероприятия.<br />
Регистрация <a href="http://feedback.yandex.ru/seminar.xml?from=kiev">еще открыта<br />
</a></p>
<p>Буду рад вас видеть <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/03/31/yasubbotnik-v-kieve/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Фиды</title>
		<link>http://makishvili.com/2009/03/11/fidy/</link>
		<comments>http://makishvili.com/2009/03/11/fidy/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 19:36:23 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=394</guid>
		<description><![CDATA[Я немного упорядочил свой блог. Теперь у меня есть всего две категории: — О жизни — О технологиях Остальные категории превратились в метки. Так получается, что записей на технические темы у меня немного. Больше на отвлеченные темы категории &#171;О жизни&#187;. Возможно Вас интересуют исключительно мои профессиональные сообщения, а остальное не совпадает с вашим настроением? В [...]]]></description>
			<content:encoded><![CDATA[<p>Я немного упорядочил свой блог.</p>
<p>Теперь у меня есть всего две категории:<br />
— <a href="http://makishvili.com/category/life/">О жизни</a><br />
— <a href="http://makishvili.com/category/tech/">О технологиях</a></p>
<p>Остальные категории превратились в метки.</p>
<p>Так получается, что записей на технические темы у меня немного. Больше на отвлеченные темы категории &laquo;О жизни&raquo;.</p>
<p>Возможно Вас интересуют исключительно мои профессиональные сообщения, а остальное не совпадает с вашим настроением?<br />
В таком случае, Вы скорее всего, умеете пользоваться RSS <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Вот Rss-фиды для Вашего удобства:<br />
— <a href="http://makishvili.com/category/life/feed">http://makishvili.com/category/life/feed</a> — О жизни<br />
— <a href="http://makishvili.com/category/tech/feed">http://makishvili.com/category/tech/feed</a> — О технологиях<br />
— <a href="http://makishvili.com/feed/">http://makishvili.com/feed/</a> — Обе категории</p>
<p>Выбирайте то, что Вам у меня читать нравится <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/03/11/fidy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conditional Comments</title>
		<link>http://makishvili.com/2009/03/02/conditional-comments/</link>
		<comments>http://makishvili.com/2009/03/02/conditional-comments/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 10:15:23 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Рекомендации]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=304</guid>
		<description><![CDATA[Казалось бы, что нового я могу Вам рассказать на эту тему? Ничего, — скажете Вы, — и будете абсолютно правы. А я Вам не про сами CC расскажу, а про то, как мы их используем для подключения стилей. Итак, как мы подключаем стили в проект и какие задачи при этом решаем? Сделать так, чтобы стили [...]]]></description>
			<content:encoded><![CDATA[<p>Казалось бы, что нового я могу Вам рассказать на эту тему? Ничего, — скажете Вы, — и будете абсолютно правы.<br />
А я Вам не про сами CC расскажу, а про то, как мы их используем для подключения стилей.</p>
<p>Итак, как мы подключаем стили в проект и какие задачи при этом решаем?</p>
<ol>
<li>Сделать так, чтобы стили приходили <strong>минимизированые</strong> — экономим трафик пользователя и нашей компании</li>
<li>Сделать так, чтобы IE-шные <strong>костыли</strong> выливались <strong>только для IE</strong> — решаем проблему валидности кода</li>
<li>Сделать так, чтобы они выливались пользователю <strong>минимальным количеством http-запросов</strong> — решаем проблему скорости передачи данных с сервера.</li>
</ol>
<p>Первые два пункта вообще тривиальны, говорить о них <strong>мне</strong> уже поздно. Много сказано до меня <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Хочется поговорить о 3-ем.<span id="more-304"></span><br />
<h3>Ещё полтора года назад мы загружали стили проекта так:</h3>
<pre><code>&lt;link rel="stylesheet" href="project.css" /&gt;
&lt;!--[if lte IE 7]&gt;&lt;link rel=stylesheet href="project.ie.css" /&gt;&lt;![endif]--&gt;</code></pre>
<p>Суть решения: <code class="inline">project.css</code>  содержит в себе все необходимые (&laquo;основные&raquo;) селекторы, а в <code class="inline">project.ie.css</code> только костыли для IE, которые дополняют/переопределяют селекторы основного файла.</p>
<p>И если предположить, что файлы <code class="inline">project*.css</code> перед отдачей клиенту проходят минимизацию (удаление пробельных символов, переводов строк и комментариев), то вышеописанный код решает 2 задачи из 3.</p>
<h4>Почему не 3?</h4>
<p>Потому что в IE7 и ниже происходит два запроса — к <code class="inline">project.css</code> и <code class="inline">project.ie.css</code>. То есть лишний запрос. А это означает лишние байты на передаче заголовков, лишнее время ожидания. И ведь, не бог весть какие затраты. Вполне можно закрыть глаза на это?</p>
<p>Можно, &laquo;если вас не интересует результат&raquo; (с) М.М. Жванецкий <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Если мы разрабатываем какой-то нагруженный ресурс, на который ожидается большой поток пользователей ежеминутно (!), то лишние 200 байтов запроса на один запрос превращаются в многие минуты ожидания получения данных от сервера в суточном масштабе.</p>
<p><strong>Да и вообще, если есть способ отдавать байт меньше, почему это не делать?</strong></p>
<h3>Элегантное решение</h3>
<p>Видимо, это очень хорошо понимал <a href="http://alexeyten.moikrug.ru/">Алексей Тен</a>, когда на  ClientSide2007 после доклада <a href="http://vitaly.harisov.name">Витали Харисова</a> он рассказал, что существует известный элегантный способ отдавать IE один файл вместо двух. Вот что Алексей предложил:</p>
<pre><code>&lt;!--[if !IE]&gt;--&gt;&lt;link rel="stylesheet" href="project.css" /&gt;&lt;!--&lt;![endif]--&gt;
&lt;!--[if IE]&gt;&lt;link rel=stylesheet href="project.ie.css" /&gt;&lt;![endif]--&gt;</code></pre>
<p>И в начале файла <code class="inline">project.ie.css</code> пишется импорт <code class="inline">project.css</code>. Этим решается проблема копипаста &laquo;основных&raquo; селекторов в ie-шный файл.</p>
<pre><code class="css">@import url(project.css);</code></pre>
<h4>Как MSIE читает эти CC</h4>
<p>В первой строке он встречает условный комментарий <code class="inline">[if !IE]</code>, который понимает однозначно: &laquo;Мне нет дела до всего, что написано дальше до закрывающего <code class="inline">[endif]</code>&laquo;.</p>
<p>Во второй строке он видит условный комментарий, который выполняется согласно условию <code class="inline">[if IE]</code>.</p>
<p>Обратите внимание на то, что правильный CC (неважно, с каким условием) начинается такой конструкцией:</p>
<pre><code>&lt;!--[if !IE]&gt;</code></pre>
<p>А у нас он записан c дополнительными символами <code class="inline">--&gt;</code>:</p>
<pre><code>&lt;!--[if !IE]&gt;--&gt;</code></pre>
<p>Лишние символы для IE безразличны, потому что IE игнорирует всё внутри этого CC, а для остальных браузеров эти символы формируют завершённый комментарий, благодаря чему все браузеры видят тег <code class="inline">&lt;link&gt;</code> и выполняют запрос к стилевому файлу.<br />
Остроумный способ. Лёша, спасибо тебе за идею <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Но на этом хитрости не закончились.</h3>
<p>На горизонте замаячил IE8, в котором Microsoft пообещал полную поддержку CSS2.1.<br />
Кстати, Вы верите? А мы, знаете ли, решили поверить. Но опыт общения с продуктами Microsoft заставляет следовать поговорке &laquo;доверяй, но проверяй&raquo;. Поэтому мы, на всякий случай, подстелили <a href="http://pepelsbey.net/2008/08/im-not-coward-but-hell/">соломку</a>, спасибо <a href="http://pepelsbey.net">Вадиму</a> за светлую мысль.</p>
<p>Как результат веры в IE8, в группе HTML-верстки было принято решение разделять загрузку стилей не по схеме <strong>«IE/неIE»</strong>, а по факту <strong>«поддерживаются стандарты или нет»</strong>.<br />
<br />
Мы договорились о такой классификации:</p>
<ol>
<li>Браузеры с поддержкой стандартов <br /><em>Firefox/Safari/Opera/Chrome/<strong>MSIE8</strong></em>
</li>
<li>Браузеры без поддержки стандартов<br /><em>MSIE 5-6-7</em></li>
</ol>
<p>Как следует из классификации, мы поверили Microsoft на слово и отнесли IE8 к разряду &laquo;стандартных&raquo; браузеров, несмотря на то, что все существующие версии IE сейчас являются тем камнем, который тянет Web на дно. Правда, за полгода существования IE8 beta мы пару раз уже встречали странноватые баги в реализации CSS, но мы продолжаем верить. Очень хочется, просто <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Как изменилась схема подключения?</h3>
<p>Виталя взял идею, о которой рассказал Лёша, и модифицировал в такую:</p>
<pre><code>&lt;!--[if gt IE 7]&gt;&lt;!--&gt;&lt;link rel="stylesheet" href="project.css"/&gt;&lt;!--&lt;![endif]--&gt;
&lt;!--[if lt IE 8]&gt;&lt;link rel=stylesheet href="project.ie.css"&gt;&lt;![endif]--&gt;
</code></pre>
<p>По-прежнему, первая строка выполняется браузерами первой группы (включая MSIE8), вторая строка — браузерами второй группы.<br />
И снова задача &laquo;один браузер — один http-запрос к стилям&raquo; решена элегантно.</p>
<p>Внимательный читатель, конечно же, обратил внимание, что в первой строке есть какая-то странность?<br />
В схеме Лёши было сказано:</p>
<pre><code>&lt;!--[if !IE]&gt;--&gt;</code></pre>
<p>А в схеме Витали:</p>
<pre><code>&lt;!--[if gt IE 7]&gt;&lt;!--&gt;</code></pre>
<p>Зачем писать лишние символы <code class="inline">&lt;!</code>, можно прочитать <a href="http://blog.ad.by/2008/07/advanced-conditional-comments-in-ie.html">по-русски</a>, или <a href="http://msdn.microsoft.com/en-us/library/ms537512.aspx#ctl00_rs1_WikiContent_ctl03_Container">по-английски</a> прямо на msdn-е.</p>
<p>Вот теперь задача №3 может считаться не только выполненной, но и выполненной &laquo;на перспективу&raquo;. То есть, когда (а когда-то ведь это произойдет) IE8 вытеснит своих предшествеников, мы быстро и очень &laquo;дёшево&raquo; оторвем довески для глючных IE 5-7 и забудем хаки, как страшный сон.</p>
<p><strong>PS</strong> Неужели, это свершится на моем веку? *подняв глаза к небу*</p>
<p><strong>PPS</strong> Описанная схема широко внедрена в Яндекс.Проекты и показала свою боеспособность. Можно пользоваться. Как говорит мой знакомый продавец овощей: &laquo;Покупай, картошка без проблем&raquo; <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Не исключено, что Вы <strong>эту же</strong> схему придумали сами, независимо от Яндекса. В таком случае, жму Вашу руку за сообразительность и Светлые Идеи <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong id="sborka">Update</strong><br />
Как справедливо заметили <a href="http://engelside.net/">Ольга</a> и <a href="http://smmurf.ya.ru">Антон</a>, директива <code class="inline">@import url(project.css);</code> в файле <code class="inline">project.css</code> выполняет в браузере тот самый http-запрос, который мы стремимся избежать.<br />
Да, во время разработки так и происходит — на сервер ходят лишние запросы и это не важно. И только когда мы выкладываем проект в production, мы осуществляем мероприятия по оптимизации CSS.</p>
<p>Фокус в том, что для production мы <strong>собираем</strong> стили. У нас есть перловый скрипт, который запускается на момент сборки production-версии. Он заглядывает в каждый CSS-файл, находит в нем директиву импорта и вместо нее подставляет код из файла, на который этот импорт смотрит. В результате получаем два файла <code class="inline">project.css</code> и <code class="inline">project.ie.css</code>, внутри которых уже нет ни одного импорта.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/03/02/conditional-comments/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Восторг</title>
		<link>http://makishvili.com/2009/02/24/vostorg/</link>
		<comments>http://makishvili.com/2009/02/24/vostorg/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 10:27:06 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=268</guid>
		<description><![CDATA[Работать в Яндексе я стал больше двух лет назад. Не в московском, а в симферопольском. Весь Яндекс тогда в Симферополе составляли два человека &#8211; Виталя и я. Виталя работал в Яндексе уже год и ему понадобился помощник. Нашёл меня. Открылся офис. Два человека. Прочувствовали, не? Ну что в Вашем Мироощущении ассоциируется с Большой Серьезной Компанией, [...]]]></description>
			<content:encoded><![CDATA[<p>Работать в Яндексе я стал больше двух лет назад. Не в московском, а в симферопольском. Весь Яндекс тогда в Симферополе составляли два человека &#8211; <a href="http://vitaly.harisov.name/">Виталя</a> и я. Виталя работал в Яндексе уже год и ему понадобился помощник. Нашёл меня. Открылся офис. Два человека.<br />
Прочувствовали, не?</p>
<p><span id="more-268"></span>Ну что в Вашем Мироощущении ассоциируется с Большой Серьезной Компанией, которая как ледокол через мировые льды? Apple, Газпром, Google? Ну вот, представьте себе, что Google открыла офис в вашем небольшом городе, где крупнее супермаркета &laquo;Фуршет&raquo; ничего и нет. Представили?</p>
<p>А теперь осознайте, что офис открыли из-за двух человек (один из которых – Вы), которые не хотели переезжать в Главный Офис (в Москве, например), а хотели жить и работать в своем родном городе. Осознали?</p>
<p>В первый год работы в Яндексе меня периодически накрывали волны восторга от осознания всего этого. А еще накрывало от осознания того, что я делаю сервис, который будут посещать тысячи пользователей в день.</p>
<p>Восторг такой, что аж дыхание на миг останавливалось. И мысль: &laquo;Я работаю в Яндекс-тиме. Я? Невероятно!&raquo;</p>
<p>А сейчас этот восторг поутих. Но периодически нахлынывает другой.</p>
<p>Те люди, которых я читал в интернете, у которых многому учился, которые были для меня как некие жители Интернет-Олимпа (великие и недосягаемые), сегодня с многими из них я знаком лично. И что самое невероятное – они меня помнят, при встрече подают руку и улыбаются мне. Они мне рады.</p>
<p>Это невероятно! Еще три года назад я и не мечтал познакомиться с ними, а сейчас мы встречаемся на конференциях и после докладов играем в бильярд, обмениваемся улыбками в коридорах, комментируем друг друга в блогах, делаем параллельно задачи в одном проекте, обсуждаем какие-то идеи и эти люди мне рады!</p>
<p>Хочется сказать всем Вам, друзья, кто узнал и не узнал себя. Я безмерно Вам благодарен за то, что Вы сделали для меня и еще сделаете для сотен и тысяч таких, как я.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/02/24/vostorg/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Вёрстка в IntelliJIDEA. Видео</title>
		<link>http://makishvili.com/2009/02/17/verstka-v-intellijidea-video/</link>
		<comments>http://makishvili.com/2009/02/17/verstka-v-intellijidea-video/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 09:29:13 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=236</guid>
		<description><![CDATA[Предлагаю Вашему вниманию видеозапись моей презентации &#171;Вёрстка в IntelliJIDEA&#187;, которая состоялась 31 января 2009 года на первом Яндекс.Субботнике Для просмотра доступны форматы: - Полноформатная версия (~1.3 Гб) - iPod/iPhone-версия (~540 Мб) А можно познакомиться онлайн: К сожалению, освещение сцены оказалось недостаточно хорошим, поэтому видео-запись местами получилась темной. Но к несомненным плюсам относится то, что запись [...]]]></description>
			<content:encoded><![CDATA[<p>Предлагаю Вашему вниманию видеозапись моей презентации &laquo;Вёрстка в IntelliJIDEA&raquo;, которая состоялась 31 января 2009 года на первом <a href="http://clubs.ya.ru/company/replies.xml?item_no=14661">Яндекс.Субботнике</a></p>
<p><strong>Для просмотра доступны форматы:</strong><br />
- <a href="http://narod.ru/disk/5657412000/V_Makishvili_Pro_vyorstku_v_IntelliJIDEA.avi.html">Полноформатная версия</a> (~1.3 Гб)<br />
- <a href="http://narod.ru/disk/5803861000/%D0%9C%D0%B0%D0%BA%D0%B8%D1%88%D0%B2%D0%B8%D0%BB%D0%B8%20%D0%92%D0%B0%D0%B4%D0%B8%D0%BC.%20%D0%92%D1%91%D1%80%D1%81%D1%82%D0%BA%D0%B0%20%D0%B2%20IntelliJIDEA.m4v.html">iPod/iPhone-версия</a> (~540 Мб)</p>
<p>А можно познакомиться онлайн:<br />
<object width="450" height="338"><param name="video" value="http://flv.video.yandex.ru/lite/"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="noscale"></param><param name="flashvars" value="login=makishvili&#038;storage_directory=8qnismzvus.211"><embed src="http://flv.video.yandex.ru/lite/" type="application/x-shockwave-flash" width="450" height="338" allowFullScreen="true" scale="noscale" flashvars="login=makishvili&#038;storage_directory=8qnismzvus.211"></embed></param></object></p>
<p>К сожалению, освещение сцены оказалось недостаточно хорошим, поэтому видео-запись местами получилась темной. Но к несомненным плюсам относится то, что запись велась с двух камер, а потом монтировалась со вставками слайдов в хорошем качестве.</p>
<p><strong>PS</strong>: Вторую часть статьи по мотивам этой презентации осталось ждать недолго.<br />
Причина, по которой я её еще не опубликовал &#8211; мне не понравилось то, как я подал материал во второй части презентации. Поэтому она мной пересматривается и дорабатывается.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/02/17/verstka-v-intellijidea-video/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Уменьшаем минимальную яркость экрана</title>
		<link>http://makishvili.com/2009/02/16/yarkost/</link>
		<comments>http://makishvili.com/2009/02/16/yarkost/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 10:12:34 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=227</guid>
		<description><![CDATA[ScreenShade Бывают такие ситуации, когда даже минимальной яркости слишком много для комфортной работы в темноте (все свят, а вам надо почитать любимые блоги). Если вы сталкиваетесь с такими ситуациями, то обратите внимание на ScreenShade. Всего парой кликов эта утилита способна уменьшить яркость картинки ниже того, что позволяет OS X. Приложение также может работать с внешними [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://trutwo.com/screenshade.php">ScreenShade</a></p>
<blockquote><p>Бывают такие ситуации, когда даже минимальной яркости слишком много для комфортной работы в темноте (все свят, а вам надо почитать любимые блоги). Если вы сталкиваетесь с такими ситуациями, то обратите внимание на ScreenShade. Всего парой кликов эта утилита способна уменьшить яркость картинки ниже того, что позволяет OS X. <strong>Приложение также может работать с внешними мониторами.</strong></p>
<p>Обратите внимание, что программа работает не с лампами подсветки, а с изображением. Фактически яркость дисплея остается на прежнем уровне, так что на повышение времени автономной работы рассчитывать не стоит.</p></blockquote>
<p>По материалам <a href="http://freshmac.ru/?p=1637">RSS</a></p>
<h3>От себя</h3>
<p>Поставил. Из минусов &#8211; хоткеи <strong>Option Minus/Plus</strong> конфликтует с печатью длинного тире. Перенастраивать хоткеи в программе возможности нет. Пока?<br />
Но отказываться из-за этого &laquo;конфликта&raquo; не хочется &#8211; мне нужна быстрая регулировка яркости внешнего монитора.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/02/16/yarkost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вёрстка в IntelliJIDEA. Часть №1</title>
		<link>http://makishvili.com/2009/02/06/verstka-v-intellijidea-1/</link>
		<comments>http://makishvili.com/2009/02/06/verstka-v-intellijidea-1/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:34:20 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IntelliJIDEA]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=132</guid>
		<description><![CDATA[31 января 2009 года состоялся первый Яндекс.Субботник, посвященный клиентской вёрстке. На нем я выступал с докладом на тему &#171;Вёрстка в IntelliJIDEA&#187;. Предлагаю Вашему вниманию мою презентацию, адаптированную под формат статьи из двух частей. Часть первая Девиз: «Редактор должен помогать» Это ключевая мысль, которая поможет мне полноценно раскрыть тему статьи. На первый взгляд она непонятно звучит. [...]]]></description>
			<content:encoded><![CDATA[<p>31 января 2009 года состоялся первый Яндекс.Субботник, посвященный клиентской вёрстке. На нем я выступал с докладом на тему &laquo;Вёрстка в IntelliJIDEA&raquo;. Предлагаю Вашему вниманию мою презентацию, адаптированную под формат статьи из двух частей.</p>
<p><span id="more-132"></span></p>
<h1>Часть первая</h1>
<p>Девиз:<br />
<span style="color: #ff0000;"><strong>«Редактор должен помогать»</strong></span></p>
<p>Это ключевая мысль, которая поможет мне полноценно раскрыть тему статьи.</p>
<p>На первый взгляд она непонятно звучит. Но это только потому , что я не смог выразить свою мысль очень коротко и одновременно очень точно, без потери смысла. Я объясню, что имел в виду. А объяснить нужно обязательно, потому что это важно для этой статьи.</p>
<p>Помощь – это же наша давнишняя мечта! Помните, Сыроежкин в &laquo;Приключениях Электроника&raquo; мечтал чтобы вкалывали роботы, а не человек?</p>
<p>Свершилось! Роботов вокруг нас стало так много, что мы перестали замечать их необычность.</p>
<p>Вот на кухне у меня стоит робот – хорошо умеет мыть посуду. Чисто и очень быстро. Называется &laquo;посудомойка&raquo;. А в моем подъезде работает робот, который доставляет меня из квартиры на улицу. Не очень чистый, но тоже быстрый. Называется &laquo;лифт&raquo;.</p>
<p id="p13407-33" class="auto">А с какими роботами я, верстальщик, общаюсь каждый день? Да вот – с компьютером, который стоит на моем столе. Светится надгрызанным яблоком. А внутри него еще один робот – программа, в которой я пишу код. Пишу каждый день, по 8 часов в день.  И по сути пишу-то одно и то же – какой-то ограниченный набор HTML-тегов, какой-то ограниченный набор CSS-свойств.</p>
<p class="auto">Одно и то же! Каждый день! 8 часов в день, 5 дней в неделю, 22 дня в месяц, 11 месяцев в году – одно и то же!</p>
<p class="auto">И ведь было время, когда редакторы нам не помогали.<br />
Notepad виндовый никогда нам не помогал.<span class="cite"> А порой даже вредил. Вы пробовали в нем открыть файлик больше 1 Mb?<br />
</span></p>
<p class="auto">В нотпаде мы писали каждый символ вот этими руками, мы в нем читали нерасцвеченный код. Нам было трудно, мы писали медленно и с кучей ошибок. Но, правда, мы гордились, что писали каждый символ в своем коде и героически справлялись с трудностями. Мы чувствовали свой код на кончиках пальцев и были собой довольны.<span class="cite"><br />
</span>
</p>
<p id="p13407-35" class="auto">А потом нам на помощь пришли модификации нотпада с полезными фичами. Небольшими такими «фичками»: подсветкой синтаксиса и автокомплитом. Стало быстрее. Стало удобнее. А главное – <strong>стало легче</strong>.</p>
<p id="p13407-36" class="auto">А потом пришли редакторы, которые из GUI нам давали возможность верстать и при этом почти не знать HTML/CSS. Стало <strong>совсем</strong> <strong>легко</strong>!<br />
Вот так берете мышкой, накидали в документ контролов, перетусовали их как-то по-красивее, создали несколько таких страниц, залинковали их друг с друг. А потом отодвинулись от монитора – посмотрели так критически, как художник на полотно, наклонив голову. «А хорошо получается»! И запулили свой сайт в интернет, а потом обязательно (обязательно!) URL всем своим знакомым раздали! И так, мол: «Хороший сайт&#8230; зайди!»<br />
Только эта легкость привела к тому, что интернет заполнился тоннами некачественного кода. Ну, а чё – легко же?</p>
<p>Но, славтегосподи, пришли хорошие редакторы и IDE (среды разработки), которые позволили писать и легко и качественно. Правда, все домохозяйки и домохозяины так и продолжали писать в гуевых редакторах, а специалисты – ну такие крутые ребята и девчата, как мы с вами, – стали писать в IDE. И стал интернет лучше.</p>
<p><strong>А как эти IDE стали нам помогать?</strong><br />
А они стали выполнять за нас рутинную работу: много мелких рутинных действий, но большое количество, которые отнимали у нас 80% времени. А сейчас программа делает их сама. Или мы просим её своими какими-то несложными действиями. А нам остается только творчество – творчество в том, чтобы максимально виртуозно писать вот тот ограниченный набор HTML-тегов и CSS-свойств.</p>
<p>И что получается? Чем виртуознее я пишу свой код, и чем больше функций на себя берет конкретная IDE – сама берет, – тем лучше и надёжнее получается продукт. А значит, я доволен, мной довольны, и всё лучше и лучше становится интернет. <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ну и вот.</p>
<p>Мы в группе HTML-верстки Яндекса считаем, что (нет, я, конечно, понимаю, что мы нерепрезентативны, но мы так считаем!) что IntelliJIDEA  чудесно справляется с задачей взять на себя максимум рутины и оставить нам только творческую сторону вёрстки. И я хотел бы вам рассказать, как <strong>она</strong> это делает и какую пользу получаю при этом <strong>я</strong>. Я – Вадим Макишвили – гвардии рядовой верстальщик.</p>
<h2>IntelliJIDEA – что это?</h2>
<p>Есть такая питерская компания <a href="http://www.jetbrains.com/">JetBrains</a>.<br />
Наши русские ребята. Общительные и адекватные. Делают качественные продукты. IntelliJIDEA – их продукт.</p>
<p>Если пятью словами, то IntelliJIDEA – это среда разработки для Java.<br />
А если образно, то ИнтелиджиАйдию можно представить себе эдаким большим кухонным комбайном, в котором можно приготовить много вкусных и разнообразных блюд из Java. А какие блюда готовятся из Java в последнее время? Всё больше такие вкусные блюда, которые называют Web-приложениями. А в них кладётся не только Java, а ещё и такие базовые для этих блюд ингридиенты, как HTML/CSS/Javascript.</p>
<p>И вполне логично, что в этом кухонном комбайне должна быть поддержка этих базовых ингридиентов. И точно! Она есть и весьма недурственна.</p>
<p>А вообще мое знакомство с IntelliJIDEA произошло 5 лет назад.<br />
Я тогда работал в большой офшорной компании. Кем работал? Да всё тем же, кем и сейчас – верстальщиком. Но тогда, 5 лет назад, меня вдруг переклинило: «Хватит, наверстался! Пора бы чем-то серьёзным заняться.&raquo; А что тогда было серьезное? Java и .NET.  И я пошел в соседние Java-отделы (у нас их было два) с вопросом: &laquo;А в чём вы пишете?&raquo;</p>
<p>И я выяснил, что Java-программисты делятся на два лагеря.  Отличительный признак каждого лагеря – программа, в которой они пишут код. И у них даже свои давнишние холивары по поводу этих IDE. А IDE любят две, которые примерно равнозначны для разработки Java. Но у каждой есть по главному преимуществу:<br />
1. У одной из них привычный и интуитивно понятный интерфейс<br />
2. А вторая&#8230; бесплатная.</p>
<p>Ну я и подумал: «А когда это русский человек боялся платного софта?» и поставил IntelliJIDEA. Я ее поставил, запустил. Она открылась, а там всё так красиво и по-взрослому. Но следующим шагом она меня попросила создать ПРОЕКТ.<br />
«Хм, зачем мне проект, я ж просто “Hello World” написать хочу?» – подумал я, но честно попытался пробраться сквозь все визарды создания проекта. Не пробрался. Закрыл и подумал: «Чё-то там перепутали про интуитивный и привычный интерфейс. Ща Эклипс поставлю, уж там-то точно!».</p>
<p>Кстати, Эклипс я даже поднять после установки не смог. Я тогда на винде работал и не знал, что нужно отдельно Java-машину ставить.</p>
<p>Но главное, что я тогда, 5 лет назад, запомнил – это то смятение, которое у меня вызвала Идея, предложив пройти через визарды настройки проекта.</p>
<p>И сейчас я лично знаю людей, которые так же, как я тогда – 5 лет назад, – сунулись в Идею, и ничего не поняв в этих визардах, ушли из нее. Так её и не узнав. А ведь она удивительно хороша <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2>Вхождение в IntelliJIDEA</h2>
<p>Не побоюсь признаться,  если ты не Java-программист, понять самому, как начать работать в Идее – очень трудно.<br />
Трудно по единственной причине – в визардах создания проекта задаются очень непонятные для верстальщика вопросы, на которые отвечать как-то&#8230; Боязно, знаете ли <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>А знаете, что мне напоминает Идея?<br />
Черное Море в начале лета в Крыму. Когда солнце яркое и уже жарко, а море прогрелось еще недостаточно. И купаться уже хочется, но вода такая прохладная и тебе боязно. И ты так, ногой трогаешь ее – брррр, холодно. Но так хочется! И единственный способ зайти в воду – это так хорошенько разбежаться, зажмуриться и с гиканьем вбежать в воду по колено, а потом с зажмуренными глазами нырнуть головой вперед, сделать пару больших гребков  под водой, а потом вынырнуть на поверхность и всё! Ты в море! Тебе хорошо.</p>
<p>Вот и в Идею нужно так же решительно вбежать, пронырнуть через эти ужасные визарды и тогда окажешься там, где уже хорошо и где привычный интуитивно понятный интерфейс. А ещё легче в море вбегать с кем-то. С таким человеком, кто только что искупался. И он тебя хватает за руку, тащит в воду и вы вдвоем ныряете в прозрачную волну <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Вот так, больше 2 лет назад я нырнул в IntelliJIDEA вместе с Виталей Харисовым, а сейчас у вас есть шанс нырнуть в нее вместе со мной. Ныряем?</p>
<h3>Установка IntelliJIDEA</h3>
<p>Установка не вызывает никаких трудностей. Ну то есть вообще: скачали, установили, открыли.<br />
IDEA идет вместе с Java-машиной, ставить отдельно не нужно. Это я для виндоуз пользователей сообщаю <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a href="http://www.jetbrains.com/idea/download/"><img src="/pro/2009/02/verstka-v-intellijidea/download-opt.png" alt="Скачать" /></a></p>
<p>При первом запуске IDEA задаст вам несколько несложных вопросов.<br />
Вот для HTML-верстальщиков подсказки, как на эти вопросы ответить.</p>
<p>Идея интересуется, пользовались ли вы ей уже когда-либо и если пользовались, то укажите путь к предыдущей инсталляции – Идея заберет оттуда настройки рабочей среды.<br />
Мы будем исходить из посылки, что вы впервые поставили IDEA, поэтому оставляем дефолтное значение.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install1.png"><img src="/pro/2009/02/verstka-v-intellijidea/install1-opt.png" alt="Установка" /></a></p>
<p>А тут нас спрашивают про деньги.<br />
Пока не платим, выбираем 30-дневный триал.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install2.png"><img src="/pro/2009/02/verstka-v-intellijidea/install2-opt.png" alt="Установка" /></a></p>
<p><a id="svc"></a><br />
В этом вам предлагают выбрать, какие Системы Контроля Версий вам нужны для работы. Мне нужны SVN и CVS. Обратите внимание, есть плагин для работы с Git <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install3.png"><img src="/pro/2009/02/verstka-v-intellijidea/install3-opt.png" alt="Установка" /></a></p>
<p>А дальше будут три настроечных визарда для выбора необязательных плагинов, которые поставляются в коробке инсталляции.<br />
В этом вам предлагают выбрать плагины для работы с Java. Снимаем все чекбоксы – нам этого ничего не нужно.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install4.png"><img src="/pro/2009/02/verstka-v-intellijidea/install4-opt.png" alt="Установка" /></a></p>
<p>В этом визарде предлагается выбрать плагины для HTML-верстки.<br />
Выбираем всё, кроме, разве что, поддержки Flex.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install5.png"><img src="/pro/2009/02/verstka-v-intellijidea/install5-opt.png" alt="Установка" /></a></p>
<p>А в этом визарде разработчики из JetBrains обращают наше внимание на другие плагины, которые в той или иной степени полезны.<br />
Я отметил те, которые точно нужны мне, верстальщику Яндекса.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/install6.png"><img src="/pro/2009/02/verstka-v-intellijidea/install6-opt.png" alt="Установка" /></a></p>
<p>А теперь мы видим сплеш-заставку, которую будем наблюдать каждый раз при загрузке программы.<br />
Раньше здесь был логотип программы, сейчас бильярдный шар. Почему шар – непонятно. Но красиво <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<img src="/pro/2009/02/verstka-v-intellijidea/splash.png" alt="Intro" /><br />
Еще мы видим Expiration Date – дату, когда наш триал закончится.<br />
Мы пользуемся <a href="http://www.jetbrains.net/confluence/display/IDEADEV/Diana+EAP">EAP версиями</a> (Early Access Program). То есть промежуточными сборками, которые выходят много чаще, чем раз в тридцать дней. Поэтому если пользоваться продуктом хочется, а с деньгами расставаться не очень, качайте и пользуйтесь EAP.</p>
<p>Только об одном Вас попрошу:</p>
<p><strong>Если используете EAP версии – пользуйтесь с пользой для продукта: если Идея вам сообщит, что возникла ошибка, не поленитесь, отправьте багрепорт. Идея сама его сформирует, вам нужно только кнопку Send нажать <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </strong></p>
<p>Вот так выглядит Велкам-пейдж после того, как вы поставили и подняли Идею.</p>
<p><a class="popup popup-big" href="/pro/2009/02/verstka-v-intellijidea/welcome.png"><img src="/pro/2009/02/verstka-v-intellijidea/welcome-opt.png" alt="Welcome page" /></a></p>
<p>И на этой странице нам предлагается создать Новый Проект.<br />
Мы, разработчики Яндекса, привыкли называть Проектом тот Сервис, над которым старательно трудимся, который спустя недели или месяцы труда запускаем, и по поводу которого в официальном блоге Яндекса создается запись <strong>«Интернет, такое-то число. Яндекс запустил проект такой-то»</strong>.</p>
<p>Когда IntelliJIDEA предлагает нам создать Новый Проект, она предполагает, что мы разрабатываем <strong>Java-проект</strong> и предлагает нам своими визардами создать костяк Java-проекта. Справедливости ради стоит отметить, что сейчас IDEA движется в сторону создания платформы для разработки на других языках.</p>
<p>Но мы – верстальщики.<br />
Отдельного билда без поддержки Java для наших нужд не существует, и перед нами стоят две насущные задачи:<br />
1. Не привязываться к Java<br />
2. Сделать так, чтобы разработка каждого следующего нашего Сервиса не требовала прохождения визардов создания IDEA project-а</p>
<p><strong>И эти задачи легко решаемы!</strong></p>
<p>Но прежде важно договориться о терминологии, чтобы избежать путаницы. Дальше в статье я буду произносить слова Проект и IDEA Project. Это два разных понятия:<br />
1. <strong>Проект</strong> – это разрабатываемый нами Сервис<br />
2. <strong>IDEA Project</strong> – это некая мета-сущность, в которой IntelliJIDEA хранит всю информацию о разрабатываемых нами Проектах</p>
<p>Итак, нажимаем ссылку «Создать проект» и погружаемся в визарды.</p>
<p>Это первый визард, в котором выбираем дефолтное значение и создаем структуру IDEA Project начисто.</p>
<p><a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project01.png"><img src="/pro/2009/02/verstka-v-intellijidea/project01-opt.png" alt="Wizard #1" /></a></p>
<p>Это самый главный визард, в котором мы рассмотрим каждое поле.</p>
<p>Поле “Name” – это имя IDEA Project-а. По дефолту оно называется untitled.</p>
<p><a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project02.png"><img src="/pro/2009/02/verstka-v-intellijidea/project02-opt.png" alt="Wizard #2" /></a></p>
<p>Наша задача создать его один раз и забыть о нем навсегда.<br />
Поэтому имя у него может быть абсолютно любым.<br />
У меня рабочий IDEA Project называется Yandex.<br />
Наш тестовый IDEA Project хочется назвать как-то совсем непритязательно – назовём его Work</p>
<p>Как только мы изменили имя IDEA Project-а, оно автоматически подставилось в остальные поля визарда. Нам это удобно.<br />
Поле “Project file location” – здесь нужно указать место, где Идея создаст IDEA Project file. То есть та самая мета-сущность, о которой я говорил выше, имеет свое физическое представление на файловой системе. Это как раз и есть IDEA Project file.</p>
<p>По дефолту IDEA сама предлагает путь и подставляет имя из предыдущего поля. Можно изменить на что-то другое, но никакого смысла в этом нет. Этот файлик нам нужно один раз создать и мы о нем больше никогда не вспомним.</p>
<p><a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project03.png"><img src="/pro/2009/02/verstka-v-intellijidea/project03-opt.png" alt="Wizard #3" /></a></p>
<p>Дальше переходим к разделу «Создать модуль».<br />
Что такое «Модуль» в терминах Java-проекта, я не знаю. И, в общем-то, знать это мне – верстальщику – не обязательно. Я предлагаю эту сущность задействовать для своих целей.<br />
Пусть Модулем будет считаться некая Категория Проектов, объединённая неким общим признаком.</p>
<p>Что за признак? Это вы выбираете сами.<br />
Например, создадим группу проектов, объединенных сегодняшним мероприятием и назовем модуль просто Presentation.</p>
<p><a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project04.png"><img src="/pro/2009/02/verstka-v-intellijidea/project04-opt.png" alt="Wizard #4" /></a></p>
<p>Поле Content Root – это путь к файлам наших Проектов. Идея оставила дефолтный путь, потому что она ничего не знает о том, где конкретно на файловой системе мы храним файлы Проектов. Но я этот путь знаю хорошо и моя задача заменить дефолтный путь на правильный.</p>
<p>Нажимаем на кнопку с многоточием справа от выделенного на скриншоте пути<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project05.png"><img src="/pro/2009/02/verstka-v-intellijidea/project05-opt.png" alt="Wizard #5" /></a></p>
<p>И в дополнительном диалоге указываем путь к папке с нашими Проектами.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project06.png"><img src="/pro/2009/02/verstka-v-intellijidea/project06-opt.png" alt="Wizard #6" /></a></p>
<p>Поле &laquo;Module File location&raquo; оставляем по-дефолту.</p>
<div style="color: #f00"><strong>То, о чем не сказал на презентации:</strong><br />
Module File – это составная часть IDEA Projects File. Мне нравится, чтобы они хранились рядом – где-нибудь там, где я их никогда видеть не буду.<br />
Но после того, как вы актуализируете поле Content Root, путь в поле Module File location сменится на тот же, что и в Content Root. Возможно это удобно для Java-проектов. Но мне не нравится, когда в папках моих Проектов болтаются IDEA Module Files.</div>
<p>Поэтому я руками еще правлю путь, чтобы в итоге визард выглядел так:<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project07.png"><img src="/pro/2009/02/verstka-v-intellijidea/project07-opt.png" alt="Wizard #7" /></a></p>
<p>И двигаемся дальше. В следующем визарде  нам предлагается указать путь к папке, в которой хранятся исходники Java-файлов проекта. Нам это не нужно – папку не указываем<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project08.png"><img src="/pro/2009/02/verstka-v-intellijidea/project08-opt.png" alt="Wizard #8" /></a></p>
<p>Здесь нам предлагается указать, какую JDK мы будем использовать.<br />
Нам это тоже не нужно. Идея на всякий случай переспросит, уверены ли мы. Уверены и двигаемся дальше.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project09.png"><img src="/pro/2009/02/verstka-v-intellijidea/project09-opt.png" alt="Wizard #9" /></a></p>
<h3>И вот, наконец, мы внутри Идеи.</h3>
<p>Мы видим слева sidebar с открытой панелью Project, справа – зона для редактирования. Сейчас она пустая.<br />
В панели Project видим модуль Presentation, который смотрит в папку presentation. Внутри нее папки, якобы с материалами сегодняшней встречи. Это как будто отдельные проекты, в разработке которых я участвую.</p>
<p><a class="popup popup-big" href="/pro/2009/02/verstka-v-intellijidea/project10.png"><img src="/pro/2009/02/verstka-v-intellijidea/project10-opt.png" alt="Wizard #10" /></a></p>
<p>Модулей может быть сколько угодно. Повторю, Модулей в смысле групп наших проектов. Если вы фрилансер, то вам может быть удобно работать с проектами, отсортированных по именам своих заказчиков.<br />
Предположим, что в корне вашего home есть такая папка customers<br />
<a class="popup popup-big" href="/pro/2009/02/verstka-v-intellijidea/project13.png"><img src="/pro/2009/02/verstka-v-intellijidea/project13-opt.png" alt="Wizard #13" /></a></p>
<div id="project-structure">Чтобы добавить новый Модуль, надо пойти в диалог настройки IDEA Project:</div>
<p><a class="popup popup-big" href="/pro/2009/02/verstka-v-intellijidea/project11.png"><img src="/pro/2009/02/verstka-v-intellijidea/project11-opt.png" alt="Wizard #11" /></a></p>
<p>В этом диалоге мы можем редактировать уже созданные модули и создавать новые.<br />
Всё, что слева – нам ничего не нужно: ни библиотеки, ни фасеты, ни JDK. Мы же верстальщики и, спасибо, нам этого не нужно.<br />
Мы используем единственную вещь – Модули.<br />
Справа контент текущего модуля.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project12.png"><img src="/pro/2009/02/verstka-v-intellijidea/project12-opt.png" alt="Wizard #12" /></a></p>
<p>Клик на плюс нас бросает в визард, который мы с вами уже разбирали<br />
Единственное отличие – Idea Project создавать не нужно. Только новый модуль. После заполнения его, мы увидим новый модуль Customers. Мы видим его название, мы видим Content Root для него и видим содержимое Content Root-а.<br />
<a class="popup" href="/pro/2009/02/verstka-v-intellijidea/project14.png"><img src="/pro/2009/02/verstka-v-intellijidea/project14-opt.png" alt="Wizard #14" /></a></p>
<div id="add-content-root" style="color: #f00"><strong>То, о чем не сказал на презентации:</strong><br />
Обратите внимание на кнопку<br />
<img src="/pro/2009/02/verstka-v-intellijidea/add-content-root.png" alt="Add Content Root" /><br />
С помощью этой кнопки можно указать несколько контент рутов для одного модуля. То есть Ваши Проекты могут лежать в совершенно разных папках на файловой системе, но Идея будет работать с ними, как с одним целым.</div>
<h3>Главное, что нам дают IDEA Modules</h3>
<p>Это возможность не создавать для каждого нового сервиса Idea Project<br />
То есть, когда заказчик по фамилии Nikolaev закажет мне создать новый проект, я просто создаю на файловой системе новую директорию в папке nikolaev. И с этим каталогом я могу работать в Идее сразу же.</p>
<p><a class="popup popup-big" href="/pro/2009/02/verstka-v-intellijidea/project15.png"><img src="/pro/2009/02/verstka-v-intellijidea/project15-opt.png" alt="Wizard #15" /></a></p>
<p>На этом первая часть закончена. В ней мы поняли, что такое IntelliJIDEA, как ее установить, как в неё войти и как в ней создать IDEA Project единожды.</p>
<p>Во второй части статьи я расскажу, как IntelliJIDEA забирает у меня рутинную работу, то есть покажу конкретно те вкусности, которые делают мою работу в IDEA быстрой, удобной и продуктивной.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/02/06/verstka-v-intellijidea-1/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>Дин DinamytE Невилль: Пространства имён в XML</title>
		<link>http://makishvili.com/2009/01/22/din-dinamyte-nevill-prostranstva-imyon-v-xml/</link>
		<comments>http://makishvili.com/2009/01/22/din-dinamyte-nevill-prostranstva-imyon-v-xml/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 08:50:43 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Рекомендации]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=119</guid>
		<description><![CDATA[Атрибут xmlns — что же это такое? Этот атрибут можно встретить не только в XHTML, но и в его ближайшем родственнике: XML. Причём, как мы знаем, XML, в отличие от XHTML, не определяет никаких обязательных атрибутов и элементов, предоставляя инженеру полную свободу действий. Однако, даже в XML рассматриваемый нами атрибут выполняет особую роль, хоть он [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Атрибут <abbr title="XML Namespace">xmlns</abbr> — что же это такое? Этот атрибут можно встретить не только в XHTML, но и в его ближайшем родственнике: XML. Причём, как мы знаем, XML, в отличие от XHTML, не определяет никаких обязательных атрибутов и элементов, предоставляя инженеру полную свободу действий. Однако, даже в XML рассматриваемый нами атрибут выполняет особую роль, хоть он и не обязателен для определения в документе. В чём же заключается роль этого атрибута?</p></blockquote>
<p>Рекомендую прочитать <a href="http://web-zine.org/art/xml_namespaces">оригинальную статью</a>. Кажется, что автор рассказывает о том, что все знают. Но простой язык изложения придает материалу удивительную легкость восприятия.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2009/01/22/din-dinamyte-nevill-prostranstva-imyon-v-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Иван, спасибо</title>
		<link>http://makishvili.com/2008/12/09/ivan-spasibo/</link>
		<comments>http://makishvili.com/2008/12/09/ivan-spasibo/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 11:31:04 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Блог]]></category>
		<category><![CDATA[Рекомендации]]></category>
		<category><![CDATA[СSS]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=71</guid>
		<description><![CDATA[Вчера в мой блог заходил Иван Сагалаев с сообщением о PingBack. Так получается, что я, как сетевой деятель, весьма скудно образован. И Иван вместе с Алексеем Матюшкиным сами того не зная, образовывают меня Но что самое интересное, что Иван Сагалаев для меня не просто коллега по работе. Не преувеличу, когда скажу, что самое большое влияние [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера в мой блог заходил Иван Сагалаев с сообщением о <a href="http://softwaremaniacs.org/blog/2005/05/18/pingback-rules/">PingBack</a>. Так получается, что я, как сетевой деятель, весьма скудно образован. И Иван вместе с Алексеем Матюшкиным сами того не зная, образовывают меня <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Но что самое интересное, что Иван Сагалаев для меня не просто коллега по работе. Не преувеличу, когда скажу, что самое большое влияние на становление меня, как верстальщика, оказал именно Иван своими статьями из раздела <a href="http://softwaremaniacs.org/blog/category/web/primer/">&laquo;Учебник&raquo;</a>. И если так случится, что на мой блог забредет какой-то молодой верстальщик в поисках &laquo;сакрального&raquo;, то я адресую его к <a href="http://softwaremaniacs.org/blog/category/web/primer/">учебнику Ивана</a>. Так просто и доступно о сакральном я читал только у него. Спасибо!</p>
<p>Именно поэтому исправляю свою оплошность и добавляю ссылку на его блог в Рубрику Русский Веб-дев.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2008/12/09/ivan-spasibo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OpenId</title>
		<link>http://makishvili.com/2008/12/05/openid/</link>
		<comments>http://makishvili.com/2008/12/05/openid/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 11:05:54 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=61</guid>
		<description><![CDATA[Прикрутил OpenId Можно пользоваться К сожалению, http://openid.yandex.ru/ не работает здесь. Буду в Москве – будет повод дойти до Володи Епифанова PS Алексей, если ты будешь появляться в комментах, ты меня сильно обрадуешь]]></description>
			<content:encoded><![CDATA[<p>Прикрутил <a href="http://wordpress.org/extend/plugins/openid/">OpenId</a><br />
Можно пользоваться <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>К сожалению, http://openid.yandex.ru/ не работает здесь. Буду в Москве – будет повод дойти до <a href="http://voldmar.ya.ru">Володи Епифанова</a> <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>PS</strong> <a href="http://secondiary.ru">Алексей</a>, если ты будешь появляться в комментах, ты меня сильно обрадуешь <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2008/12/05/openid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trackback</title>
		<link>http://makishvili.com/2008/12/04/trackback/</link>
		<comments>http://makishvili.com/2008/12/04/trackback/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 18:12:18 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=42</guid>
		<description><![CDATA[Алексей, спасибо тебе за то, что я наконец понял, что такое trackback. Лучше поздно, чем вообще&#8230; да? Для тех, кто в танке вместе со мной: http://ru.wikipedia.org/wiki/Trackback PS: теперь я могу комментировать посты Матюшкина]]></description>
			<content:encoded><![CDATA[<p>Алексей, <a href="http://secondiary.ru/index.php/articles/1163">спасибо тебе за то</a>, что я наконец понял, что такое trackback.<br />
Лучше поздно, чем вообще&#8230; да?</p>
<p>Для тех, кто в танке вместе со мной: <a href="http://ru.wikipedia.org/wiki/Trackback">http://ru.wikipedia.org/wiki/Trackback</a></p>
<p>PS: теперь я могу комментировать посты Матюшкина <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2008/12/04/trackback/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Начало</title>
		<link>http://makishvili.com/2008/11/28/nachalo/</link>
		<comments>http://makishvili.com/2008/11/28/nachalo/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 21:20:06 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=17</guid>
		<description><![CDATA[Я долго колебался, каким именно будет этот блог. То ли ему быть узко-специализированным о веб-разработке. То ли в нем освещать вообще всё, что нас (меня, Наташу и нашу семью) волнует. В том числе профессиональную деятельность мою и Наташину. Кстати, было бы интересно агрегировать здесь свой некоторый опыт верстки под большие браузеры и опыт Наташи верстки [...]]]></description>
			<content:encoded><![CDATA[<p>Я долго колебался, каким именно будет этот блог.</p>
<p>То ли ему быть узко-специализированным о веб-разработке.<br />
То ли в нем освещать вообще всё, что нас (меня, Наташу и нашу семью) волнует. В том числе профессиональную деятельность мою и Наташину.</p>
<p>Кстати, было бы интересно агрегировать здесь свой некоторый опыт верстки под большие браузеры и опыт Наташи верстки под мобильные браузеры. Я планирую активно писать в блог, посмотрим понравится ли блоговая деятельность Наташе <img src='http://makishvili.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>В результате я пришел к такому первичному соглашению с самим собой: не загонять себя в рамки и писать о том, что пришло в душу.<br />
<strong>Мне</strong> это точно интересно. Через три-шесть месяцев посмотрим, будет ли это интересно <strong>Вам</strong>.</p>
<p>А как мы это увидим? А запросто – посмотрим, сколько у этого блога RSS-читателей <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ну вот, приветственное слово произнесено <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Буду рад Вашим отзывам на мои сообщения и обещаю ни один вопрос ко мне не оставить без ответа.</p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2008/11/28/nachalo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Новый блог</title>
		<link>http://makishvili.com/2008/11/25/hello-world/</link>
		<comments>http://makishvili.com/2008/11/25/hello-world/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 15:38:01 +0000</pubDate>
		<dc:creator>Вадим Макишвили</dc:creator>
				<category><![CDATA[О жизни]]></category>
		<category><![CDATA[О технологиях]]></category>
		<category><![CDATA[Блог]]></category>

		<guid isPermaLink="false">http://makishvili.com/?p=1</guid>
		<description><![CDATA[Ну, вот и новый блог. Встречайте Установка WordPress проблем не вызвала. Тему выбрал от фонаря, просто понравилась раскладка блоков. 15994623.42a1cb61894b26850d4e47b6c7abfee9.1227910273.25d2ff32a07ea51a01231ca5772fbcce]]></description>
			<content:encoded><![CDATA[<p>Ну, вот и новый блог. Встречайте <img src='http://makishvili.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://codex.wordpress.org/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_WordPress" target="_blank">Установка</a> WordPress проблем не вызвала.</p>
<p>Тему выбрал от фонаря, просто понравилась раскладка блоков.</p>
<p><i style="color: #fff">15994623.42a1cb61894b26850d4e47b6c7abfee9.1227910273.25d2ff32a07ea51a01231ca5772fbcce</i></p>
]]></content:encoded>
			<wfw:commentRss>http://makishvili.com/2008/11/25/hello-world/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
