<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Владимир Старков; Технический блог</title>
 <link href="/atom.xml" rel="self"/>
 <link href="/"/>
 <updated>2013-06-16T12:18:30-07:00</updated>
 <id>http://vstarkov.ru</id>
 <author>
   <name>Владимир Старков; Технический блог</name>
   <email>privet@vstarkov.ru</email>
 </author>

 
 <entry>
   <title>Как менять раскладку с помощью CapsLock в MacOS?</title>
   <link href="/how-to-switch-language-with-capslock-in-macos/"/>
   <updated>2013-06-08T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/how-to-switch-language-with-capslock-in-macos</id>
   <content type="html">&lt;h1 id=&quot;capslock--macos&quot;&gt;Как менять раскладку с помощью CapsLock в MacOS?&lt;/h1&gt;

&lt;p&gt;Как я уже писал, мне кажется удобным переключать язык одной клавишей, поэтому я
пытался найти способ сделать это в MacOS. Я не нашёл, как простую инструкцию
для мака (PuntoSwitcher не имеет такой опции) и поэтому, когда у меня всё
получилось, то решил записать себе на будущее и вдруг кому-то ещё пригодится.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Скачайте и установите &lt;a href=&quot;https://pqrs.org/macosx/keyremap4macbook/index.html.en&quot; title=&quot;KeyRemap4MacBook&quot;&gt;KeyRemap4MacBook&lt;/a&gt; и &lt;a href=&quot;https://pqrs.org/macosx/keyremap4macbook/pckeyboardhack.html.en&quot; title=&quot;PCKeyboarHack&quot;&gt;PCKeyboarHack&lt;/a&gt;, каждое из них после
установки попросит вас перезагрузить компьютер — соглашайтесь;&lt;/li&gt;
  &lt;li&gt;Откройте PCKeyboarHack и поменяйте (двойным кликом) значение keycode с 51 до
110;&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/a1f20aeb-d1e5-44b4-87f6-444fc6a27df3/00000121.png&quot; title=&quot;Шаг 2&quot;&gt;&lt;img src=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/a1f20aeb-d1e5-44b4-87f6-444fc6a27df3/00000121.png&quot; alt=&quot;Изображение&quot; title=&quot;Шаг 2&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Откройте KeyRemap4MacBook и в разделе For PC users, установите галочку напротив
Application key to Command_L+Space;
&lt;a href=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/13d036ac-b311-422a-81c6-ccf8de2d8b19/00000122.png&quot; title=&quot;Шаг 3&quot;&gt;&lt;img src=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/13d036ac-b311-422a-81c6-ccf8de2d8b19/00000122.png&quot; alt=&quot;Изображение&quot; title=&quot;Шаг 3&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Вы уже наполовину восхитительны! Осталось только отменить стандартное поведение
CapsLock;&lt;/li&gt;
  &lt;li&gt;Откройте настройки клавиатуры, кликните настройки клавиш-модификаторов:&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/4ab42f51-1364-4347-80a1-1daeb9ecfa27/00000123.png&quot; title=&quot;Шаг 5.1&quot;&gt;&lt;img src=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/4ab42f51-1364-4347-80a1-1daeb9ecfa27/00000123.png&quot; alt=&quot;Изображение&quot; title=&quot;Шаг 5.1&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
и отмените поведение для клавиши CapsLock:&lt;br /&gt;
&lt;a href=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/5e52c3ac-4b88-4bda-a2f5-7b2cddb755dd/00000124.png&quot; title=&quot;Шаг 5.2&quot;&gt;&lt;img src=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/5e52c3ac-4b88-4bda-a2f5-7b2cddb755dd/00000124.png&quot; alt=&quot;Изображение&quot; title=&quot;Шаг 5.2&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Готово — вы полностью восхитительны и начинаете эконосить себе минуты вашего
времени каждый день!&lt;/li&gt;
&lt;/ol&gt;

</content>
 </entry>
 
 <entry>
   <title>Книга «Высокопроизводительный джаваскрипт» (High Performance JavaScript)</title>
   <link href="/high-performance-javascript/"/>
   <updated>2013-05-29T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/high-performance-javascript</id>
   <content type="html">&lt;h1 id=&quot;high-performance-javascript&quot;&gt;Книга «Высокопроизводительный джаваскрипт» (High Performance JavaScript)&lt;/h1&gt;

&lt;p&gt;Пару недель назад я прочитал замечательную книгу на английском — &lt;a href=&quot;http://www.amazon.com/dp/059680279X&quot; title=&quot;High Performance Javascript&quot;&gt;High Performance
JavaScript&lt;/a&gt; от &lt;a href=&quot;https://twitter.com/slicknet&quot; title=&quot;@slicknet&quot;&gt;Николаса Закаса&lt;/a&gt; (Nickolas C. Zakas). Книга очень хорошая и
добросовестно написана. Николас рассказывает об интересных деталях уже известных
технологий и делится неожиданными техниками оптимизации. А так как книга о
производительности, то конечно же есть графики и сравнения, но не всё же книга
написана живым языком. Интересно читать всю книгу целиком. Также книга открывает
перед тобой некоторые аспекты производительности веб-страницы о которых ты раньше
не задумывался или даже не знал.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.amazon.com/dp/059680279X&quot; title=&quot;High Performance Javascript&quot;&gt;&lt;img src=&quot;http://content.screencast.com/users/yaajing/folders/Jing/media/f3e254c9-5e10-4db8-b0dd-e1db38d29a1d/00000057.png&quot; alt=&quot;&quot; title=&quot;High Performance Javascript&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Книга разделена на 10 глав. В первой главе рассказывается про загрузку и
выполнение джаваскрипта. Из этой главы важно вынести, что загрузка и выполнение
джаваскриптовых файлов являются блокируюшими процессами и значит, в то время пока
выполняется джаваскрипт не может идти процесс рендеринга страницы. Отсюда
напрашивается вывод, что все js-файлы следует подключать в самом низу страницы
перед закрывающим тегом &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt;, а аспект загрузки побуждает нас минифицировать,
конкатенировать все файлы, и также было бы неплохо это всё отдавать с сервера с
помощью gzip.&lt;/p&gt;

&lt;p&gt;Во второй главе Николас раскрывает вопрос цены обращения к данным и переменным.
Как вы уже можете догадаться, если вы будете кешировать внешние (по отношению к
текущему месту выполнению) переменные в локальные, и вообще как только вы начнёте
кешировать переменные, всё начнёт работать быстрее.&lt;/p&gt;

&lt;p&gt;Затем Закас объясняет, что операции с DOM-деревом чрезвычайно дорогие и по
возможности минимизируйте их. Кешируйте DOM-элементы в локальные переменные.
Старайтесь не работать напрямую с DOM-деревом, по возможно склонируйте его или
скопируйте с помощью &lt;code&gt;document.createDocumentFragment()&lt;/code&gt; сделайте с элементами
всё, что вам нужно, а после поместите обратно в DOM — таким образом вы уменьшите
количество событий repaint и reflow. Для обращения к переменным также старайтесь
использовать последние API (&lt;code&gt;document.querySelector()&lt;/code&gt; и
&lt;code&gt;document.querySelectorAll()&lt;/code&gt;). В этой главе я особенно восхищался методом
&lt;code&gt;document.createDocumentFragment()&lt;/code&gt; и наконец обретённым знанием, чем же
отличается &lt;em&gt;reflow&lt;/em&gt; от &lt;em&gt;repaint&lt;/em&gt; — reflow выполняется, когда меняется геометрия
страницы (выполнятеся сразу после того, как были изменены какие-либо свойства,
отразившиеся на размерах), а &lt;em&gt;repaint&lt;/em&gt; — простой ререндеринг участка. Следующим
закономерным открытием было, что браузеры пытаются оптимизировать эти два события
и кешируют их, поэтому не стоит сбрасывать этот кеш каждый раз обращаясь к
свойствам (&lt;code&gt;offsetTop|Right|Bottom|Left&lt;/code&gt;, &lt;code&gt;scrollTop|Right|…&lt;/code&gt;,
&lt;code&gt;clientTop|Right|…&lt;/code&gt;, &lt;code&gt;getComputedStyle()&lt;/code&gt;) для вычисления которых, браузеру
придётся выполнить весь стек закешированных repaint и reflow — и соответственно,
все оптимизации будут напрасны.&lt;/p&gt;

&lt;p&gt;После этого рассказывается, что самый быстрый цикл — это старый добрый &lt;code&gt;for&lt;/code&gt;. И
также абсолютно очевидные советы, которым всё равно часто не хватает
&lt;strong&gt;осознаности&lt;/strong&gt; при повседневном применении: «Чтобы увеличить производительность
цикла старайтесь уменьшить количество итераций и количество операций внутри одной
итерации».&lt;/p&gt;

&lt;p&gt;В пятой главе идёт речь о регулярных выражениях и о том, что не стоит их бояться и
о том, как использовать их эффективно. Сами по себе регулярные выражения хороши
тем, что оптимизированы на более низком уровне и поэтому работают быстрее любых
других текстовых операций. Но как и у любого другого инструмента у них есть
область применения в которой регулярные выражени особенно хороши. Но в контексте
производительности нам важны другие правила, которые заставят их работать быстрее.
Старайтесь писать регулярку так, чтобы она имела больший шанс закончить
выполнение, вместо медленного выполнения остальных проверок. Начинайте регулярку с
простого и необходимого токена, чтобы при первой же проверке было ясно имеет ли
смысл дальнейшие проверки или нет.&lt;/p&gt;

&lt;p&gt;Затем рассказывается про отзывчивые интерфейсы — интерфейсы без зависания и с
хорошим откликом — о том как их добиться. Вся штука в том, что выполнение
джаваскрипта как уже было выяснено раньше является блокирующим процессом, поэтому
интерфейс не может реагировать на действия пользователя во время выполнения
джаваскрипта и наоборот. Так как критическим откликом являются 100 миллисекунд, то
ваша задача рефакторить ваш код в соответствии с этим условием. В вашем
распоряжении отложенное выполнение с помощью таймеров и плюсом ещё одна
невероятная вешь — webworkers – эта технология позволяет вынести продолжительные
операции в отдельный поток и поэтому эти операции перестают блокировать интерфейс.&lt;/p&gt;

&lt;p&gt;Также в книге поднимаются темы мемоизации функций, кеширования результатов,
оптимизирующего переопределения функции. Об этом можно рассказать подробнее,
допустим у вас есть некроссбраузерный метод, для которого вы пишете обёртку:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function addHandler(target, eventType, handler) {
    if (target.addEventListener) { // DOM2 Events
        target.addEventListener(eventType, handler, false);
    } else { // ugly IE
        target.attachEvent(&quot;on&quot; + eventType, handler);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Но мы ясно видим, что каждый раз при назвачении обработчика будет выполняться одно
и тоже условие, и так как вряд-ли в пределах одной страницы и одной сессии
пользователь будет менять браузер, то мы можем создать следующую оптимизацию:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function addHandler(target, eventType, handler) {
    // выполним проверку один раз и перезапишем саму функцию,
    // и после этого все следующие разы функция будет работать быстрее
    // так как избавилась от постоянного условия внутри
    if (target.addEventListener) { // DOM2 Events
        addHandler = function(target, eventType, handler) {
            target.addEventListener(eventType, handler, false);
        }
    } else { // ugly IE
        addHandler = function(target, eventType, handler) {
            target.attachEvent(&quot;on&quot; + eventType, handler);
        }
    }
    
    // вызовем функцию, чтобы сразу переопределить
    addHandler(target, eventType, handler);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Итогом всей книги будет несколько простых истин, которые гласят: чтобы увеличть
производительность нужно:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;уменьшать количество итераций в циклах.&lt;/li&gt;
  &lt;li&gt;Уменьшать количество операций в каждой отдельной итерации.&lt;/li&gt;
  &lt;li&gt;Используйте локальные переменные.&lt;/li&gt;
  &lt;li&gt;Кешируйте всё, что возможно.&lt;/li&gt;
  &lt;li&gt;Избегайте дорогих операций.&lt;/li&gt;
  &lt;li&gt;Аккуратно используйте регулярки.&lt;/li&gt;
  &lt;li&gt;Поменьше трогайте DOM-дерево.&lt;/li&gt;
  &lt;li&gt;А если трогаете, то сведите количество операции к минимуму.&lt;/li&gt;
  &lt;li&gt;Не сбрасывайте браузерные кеши на repaint и reflow.&lt;/li&gt;
  &lt;li&gt;Выучите битовые операторы — они правда быстрые.&lt;/li&gt;
  &lt;li&gt;Пишите меньше кода.&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Как минифицировать файлы в Jekyll</title>
   <link href="/compress-files-with-jekyll/"/>
   <updated>2013-04-08T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/compress-files-with-jekyll</id>
   <content type="html">&lt;h1 id=&quot;jekyll&quot;&gt;Как минифицировать файлы в Jekyll&lt;/h1&gt;

&lt;p&gt;Все хотят быстрые сайты, поэтому необходимо снижать количество запросов на
сервер и минифицировать оставшиеся объёдиненные файлы.&lt;/p&gt;

&lt;p&gt;Если у вас блог на Jekyll, то вы не исключение. Чтобы иметь эту возможность,
придётся чуть-чуть поменять структуру вашего сайта.&lt;/p&gt;

&lt;p&gt;Для начала создайте файл &lt;code&gt;_layouts/compress.html&lt;/code&gt;. Этот файл будет шаблоном для
минификации ваших файлов. &lt;code&gt;strip_newlines&lt;/code&gt; и &lt;code&gt;replace&lt;/code&gt; —
&lt;a href=&quot;https://github.com/shopify/liquid/wiki/liquid-for-designers#standard-filters&quot;&gt;стандартные фильтры&lt;/a&gt;. В данном случае я настроил свои фильтры на
минификациюю CSS-файлов. Так как блок с комментарием для красоты, то вы можете
его не использовать.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/**
 * @author  Ваше имя и фамилия
 * @mail    awesomemail@gmail.com
 * @twitter @awesometwitter
 */
{‍{ content | strip_newlines | replace:' ','' | replace:'    ','' }}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Затем перенесите файлы из папок &lt;code&gt;js/&lt;/code&gt; и &lt;code&gt;css/&lt;/code&gt; в папку &lt;code&gt;_includes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;После этого создайте файлы &lt;code&gt;css/styles.min.css&lt;/code&gt; и &lt;code&gt;js/scripts.min.js&lt;/code&gt; и
перечислите в каждом из них соотвествующие конкатенируемые файлы. Эти файлы
будут выглядить примерно так, как показано ниже. Блок обрамлённый &lt;code&gt;---&lt;/code&gt; включает
YAML режим для этого файла. А строка &lt;code&gt;layout: compress&lt;/code&gt; указывает на то, что
должен использоваться шаблон &lt;em&gt;compress&lt;/em&gt;, созданный нами ранее.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;---
layout: compress
---

{‍% include css/normalize.css %}
{‍% include css/helper.css %}
{‍% include css/print.css %}
{‍% include css/main.css %}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;После этого в шапке вашего jekyll сайта достаточно будет указать ссылку только
на минифицируемый файл:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;link href=&quot;/css/styles.min.css&quot; rel=&quot;stylesheet&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В моём случае этот &lt;a href=&quot;/css/styles.min.css&quot;&gt;файл&lt;/a&gt; выглядит примерно так:&lt;br /&gt;
&lt;a href=&quot;http://img833.imageshack.us/img833/4349/10642240c1e64e2d9405f56.png&quot;&gt;&lt;img src=&quot;http://img833.imageshack.us/img833/4349/10642240c1e64e2d9405f56.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Итоги&lt;/h2&gt;

&lt;p&gt;Весь CSS быстро грузится один раз одним маленьким файлом. Сайт стал быстрее,
пользователи счастливее.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Отмена последнего коммита в git</title>
   <link href="/git-undo/"/>
   <updated>2013-03-17T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/git-undo</id>
   <content type="html">&lt;h1 id=&quot;git&quot;&gt;Отмена последнего коммита в git&lt;/h1&gt;

&lt;p&gt;Удаляем коммит:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Сохраняем обновлённую историю коммитов в удалённом репозитории:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git push -f
&lt;/code&gt;&lt;/pre&gt;

</content>
 </entry>
 
 <entry>
   <title>Редактирование Markdown в Sublime Text</title>
   <link href="/markdown-workflow/"/>
   <updated>2013-03-11T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/markdown-workflow</id>
   <content type="html">&lt;h1 id=&quot;markdown--sublime-text&quot;&gt;Редактирование Markdown в Sublime Text&lt;/h1&gt;

&lt;p&gt;В этом посте я хочу поделиться дзеном редактирования маркдауна в саблайме.
Первоначально, я хотел только &lt;strong&gt;хоткеи&lt;/strong&gt;, но потом поработав с гитхабом и
маркдаун исходниками статей других авторов, я понял, что нужно как-то свести к
минимуму операции по &lt;strong&gt;ограничению длины строки&lt;/strong&gt;. Обе цели были достигнуты, и
о способе я хочу рассказать.&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Правильные хоткеи&lt;/h2&gt;

&lt;p&gt;Установите &lt;a href=&quot;https://github.com/ttscoff/MarkdownEditing&quot; title=&quot;The humble beginnings of a better Markdown editing package for Sublime Text 2&quot;&gt;MarkdownEditing&lt;/a&gt;. Откройте ваши пользовательские настройки
хоткеев (&lt;em&gt;Menu: Preferences → Key Bindings — User&lt;/em&gt;) и скопируйте туда всё из
моих &lt;a href=&quot;https://gist.github.com/matmuchrapna/5130995&quot; title=&quot;Default (Windows).sublime-keymap&quot;&gt;настроек&lt;/a&gt; (за основу я брал &lt;em&gt;редактор StackOverflow&lt;/em&gt;). Теперь вам
доступны хоткеи:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;#&lt;/code&gt; — при выделенном тексте создаёт заголовки уровня зависящего от
количества #&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+b&lt;/code&gt;, &lt;code&gt;**&lt;/code&gt; — оборачивает в &lt;code&gt;**&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+i&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt; — оборачивает в &lt;code&gt;*&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+l&lt;/code&gt; — вставляет ссылку&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+g&lt;/code&gt; — вставляет картинку&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+k, ctrl+k&lt;/code&gt;, &lt;code&gt;`&lt;/code&gt;  — оборачивает в обратные кавычки для
инлайнового кода&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Этим бы можно было и ограничиться, но зачем?&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;ctrl+shift+v&lt;/code&gt; — вставляет ссылку в референсы статьи (просто попробуйте)&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+shift+l&lt;/code&gt; — показывает все референсы статьи&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ctrl+N&lt;/code&gt; — создаёт из выделенного текста заговок N уровня&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;И безусловно, редактирование списков будет незаметным — автоматическое
проставление цифр, звёздочек или тире возьмёт на себя MarkdownEditing.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Полуавтоматическое ограничение в 80 символов&lt;/h2&gt;

&lt;p&gt;Для начала настроим Саблайм на редактирование файлов, ограниченных 80
символами строке. Для этого добавим в файл &lt;code&gt;Markdown.sublime-settings&lt;/code&gt; такие
строчки:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&quot;rulers&quot;: [ 78 ], // чуть меньше, чем 80 символов
                  // чтобы были правильные переносы
&quot;wrap_width&quot;: 78,
&quot;word_wrap&quot;: false
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;После этого создаём в папке &amp;#8216;./Packages/User/&amp;#8217; файл с названием &lt;code&gt;rewrapped
paragraph.sublime-macro&lt;/code&gt; и наполняем его из этого &lt;a href=&quot;https://gist.github.com/matmuchrapna/5130923&quot; title=&quot;rewrapped paragraph.sublime-macrо&quot;&gt;гиста&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Затем впишем хоткей на этот макрос — откроем пользовательские настройки
хоткеев (Menu: Preferences → Key Bindings — User) и добавим:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
	&quot;keys&quot;: [&quot;alt+r&quot;], &quot;command&quot;: &quot;run_macro_file&quot;,
	&quot;args&quot;: {&quot;file&quot;: &quot;Packages/User/rewrapped paragraph.sublime-macro&quot;}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;И теперь абзац любой длины по хоткею &lt;code&gt;alt+r&lt;/code&gt; будет перестроен, чтобы точно
вписываться в 80 символов.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://img694.imageshack.us/img694/6492/abfaa8d5cec246d88879a29.png&quot; title=&quot;before rewrap&quot;&gt;&lt;img src=&quot;http://img694.imageshack.us/img694/6492/abfaa8d5cec246d88879a29.png&quot; alt=&quot;&quot; title=&quot;before rewrap&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://i.imgur.com/gEz3TJV.png&quot; title=&quot;after rewrap&quot;&gt;&lt;img src=&quot;http://i.imgur.com/gEz3TJV.png&quot; alt=&quot;&quot; title=&quot;after rewrap&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Все счастливы!&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Sublime Text и плагины к нему</title>
   <link href="/sublime-workflow/"/>
   <updated>2013-03-10T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/sublime-workflow</id>
   <content type="html">&lt;h1 id=&quot;sublime-text----&quot;&gt;Sublime Text и плагины к нему&lt;/h1&gt;

&lt;p&gt;Я начал пользоваться &lt;a href=&quot;http://sublimetext.com/&quot; title=&quot;Sublime Text 2&quot;&gt;Sublime Text&lt;/a&gt; около года назад. Этот редактор
бесподобен и этот текст пишу сейчас именно в нём. Я хочу дать новичкам
материалы для ознакомления и инструкции по началу работы, а для тех, кто уже
пользуется, хочу рассказать про плагины, которыми я пользуюсь.&lt;/p&gt;

&lt;p&gt;Бонусы Саблайма:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Скорость работы&lt;/li&gt;
  &lt;li&gt;Минималистичный интерфейс — ничего лишнего&lt;/li&gt;
  &lt;li&gt;Режим «усиленной концентрации» — совсем ничего лишнего&lt;/li&gt;
  &lt;li&gt;Графическая карта файла — удобная идея навигации по файлу&lt;/li&gt;
  &lt;li&gt;Нечёткий поиск&lt;/li&gt;
  &lt;li&gt;Гибкая настройка под себя без графического интерфейса&lt;/li&gt;
  &lt;li&gt;Мощное, развитое сообщество плагинов, обеспеченное первоначальником
Package Control (1000+ плагинов от 800+ авторов)&lt;/li&gt;
  &lt;li&gt;Мультикурсор — редактирование стоблцов текста и не только&lt;/li&gt;
  &lt;li&gt;Продуманные хоткеи&lt;/li&gt;
  &lt;li&gt;Таб-группы — возможностью разделить экран на несколько частей&lt;/li&gt;
  &lt;li&gt;Возможность одновременно редактировать один и тот же файл в разных табах.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Почти все бонусы можно будет увидеть в видеокурсе, о нём ниже.&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Установка, настройка, система плагинов&lt;/h2&gt;

&lt;p&gt;Первым делом при работе с Sublime Text установите &lt;a href=&quot;http://wbond.net/sublime_packages/package_control&quot; title=&quot;Sublime Package Control&quot;&gt;Package Control&lt;/a&gt;, через
него тему «&lt;a href=&quot;https://github.com/buymeasoda/soda-theme&quot; title=&quot;Dark and light custom UI themes for Sublime Text 2&quot;&gt;Soda Theme&lt;/a&gt;» (в настройках:
&lt;code&gt;&quot;theme&quot;:&quot;Soda Dark.sublime-theme&quot;&lt;/code&gt;), после этого для баланса с темой нужно
настроить &lt;a href=&quot;https://github.com/buymeasoda/soda-theme#syntax-highlighting-colour-schemes&quot; title=&quot;Soda Theme — Syntax Highlighting Colour Schemes&quot;&gt;цветовую схему&lt;/a&gt;: из репозитория Soda Theme скачайте отдельный
архив &lt;a href=&quot;http://buymeasoda.github.com/soda-theme/extras/colour-schemes.zip&quot; title=&quot;Archive of *.tmtheme files&quot;&gt;colour-schemes.zip&lt;/a&gt; и перенесите из него соответствующий файл в
папку с &lt;code&gt;./Packages/User/&lt;/code&gt; затем вы можете вписать в пользовательский файл
настроек: &lt;code&gt;&quot;color_scheme&quot;: &quot;Packages/User/Monokai Soda.tmTheme&quot;&lt;/code&gt;, и не
забудьте вписать в настройки шрифт &lt;a href=&quot;/meslo/&quot; title=&quot;Meslo&quot;&gt;Meslo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O философии настроек Саблайма: «Если у вас уже есть текстовый редактор, то зачем
увеличивать энтропию и сложность проекта, создавая графический интерфейс, если
настройки можно хранить в удобочитаемом формате и редактировать в самом
редакторе?» Мне кажется, что Джон Скиннер думал именно так, когда проектировал
свой редактор, и я с ним полностью согласен. Важно понимать, что есть дефолтные
настройки и пользовательские (в меню &lt;code&gt;Preferences → Settings Default&lt;/code&gt; и
&lt;code&gt;Preferences → Settings User&lt;/code&gt;): первые — это стандартные для редактора настройки
с кучей поясняющих комментариев, которые сбрасываются обновлении, все свои
настройки нужно хранить в пользовательских файлах. В самом начале я скопировал
все стандартные настройки в пользовательский файл и попробовал каждую опцию, тем
самым я понял на что способен мой редактор из коробки, и это важно, так как ты
должен &lt;em&gt;знать свои инструменты&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Теперь я хочу рассказать о некоторых особеностях Package control. Это не только
способ устанавливать плагины прямо из редактора, но ещё и большой их список,
доступный на &lt;a href=&quot;http://wbond.net/sublime_packages/community&quot; title=&quot;Sublime Text Packages&quot;&gt;сайте&lt;/a&gt; &lt;a href=&quot;http://wbond.net/&quot; title=&quot;Will Bond&quot;&gt;Уилла Бонда&lt;/a&gt;. На этой странице вы всегда сможете
найти нужный вам плагин, тему, сниппеты или подсветку нового языка через поле
поиска.&lt;/p&gt;

&lt;p&gt;После того, как вы решили использовать Sublime Text обязательно просмотрите все
плагины на рабочие для вас темы — скорее всего уже будет удобный инструмент для
работы в вашей области. Также вы &lt;strong&gt;не пропустите ни одного нового плагина
подписавшись на &lt;a href=&quot;http://wbond.net/sublime_packages/community/rss&quot; title=&quot;Newest Sublime Text Packages&quot;&gt;RSS&lt;/a&gt;&lt;/strong&gt; этой страницы. Ещё мало кто знает, но можно
устанавливать даже те плагины, которых нет в общем канале, для этого есть опция
&lt;code&gt;Package Control: Add Repository&lt;/code&gt;: и вы сможете добавить GitHub или BitBucket
репозиторий, после добавления, вы сможете установить существующий там плагин по
стандартной схеме.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Дальнейшее знакомство&lt;/h2&gt;

&lt;p&gt;После этого небольшого ознакомления, я настоятельно рекомендую прочитать
прошлогоднюю статью «&lt;a href=&quot;http://net.tutsplus.com/tutorials/tools-and-tips/sublime-text-2-tips-and-tricks/&quot; title=&quot;Sublime Text 2 Tips and Tricks (Updated)&quot;&gt;Sublime Text 2 Трюки и заметки (Обновлено)&lt;/a&gt;» и
посмотреть видеокурс &lt;strong&gt;«&lt;a href=&quot;https://tutsplus.com/course/improve-workflow-in-sublime-text-2/&quot; title=&quot;Perfect Workflow in Sublime Text 2&quot;&gt;Идеальный рабочий процесс в Sublime Text 2&lt;/a&gt;»&lt;/strong&gt; от
Джеффри Уэя. Из этих двух источников вы подчерпнёте для себя очень много нового
и полезного в Саблайме — в общем статья и как видеокурс не очень большие,
поэтому найдите время посмотреть и то и другое.&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Хоткеи&lt;/h2&gt;

&lt;p&gt;Изучите их и настройте под себя. Это сделает вашу жизнь легче.&lt;/p&gt;

&lt;h2 id=&quot;section-3&quot;&gt;Плагины&lt;/h2&gt;

&lt;p&gt;Это плагины, которые остались в использовании после просмотра всего, чем я
пользовался ещё недавно.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://wbond.net/sublime_packages/package_control&quot; title=&quot;Sublime Package Control&quot;&gt;&lt;strong&gt;Package Control&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/buymeasoda/soda-theme&quot; title=&quot;Dark and light custom UI themes for Sublime Text 2&quot;&gt;&lt;strong&gt;Soda Theme&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора) — качественная тема вместе с
модифицированной цветовой схемой; существует в тёмной и светлой версии.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/skuroda/Sublime-AdvancedNewFile&quot; title=&quot;Advanced New File&quot;&gt;Advanced New File&lt;/a&gt; (работает в 3 версии редактора) — в два раза уменьшает
проблему и время на создание новых файлов.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/BoundInCode/AutoFileName&quot; title=&quot;AutoFileName&quot;&gt;Auto Filename&lt;/a&gt; — позволит не вспоминать полные названия файлов, когда вы
будете их подключать.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/SublimeLinter/SublimeLinter&quot; title=&quot;Sublime Linter&quot;&gt;&lt;strong&gt;Sublime Linter&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора, отдельная ветка на
гитхабе) — это &lt;strong&gt;мана небесная!&lt;/strong&gt;  &lt;/p&gt;

    &lt;blockquote&gt;
      &lt;p&gt;— Пишешь стили и опечатался?&lt;br /&gt;
  — Ты сразу об этом узнаешь!&lt;br /&gt;
  — Используешь в стилях ID?&lt;br /&gt;
  — Ты сразу об этом узнаешь!&lt;br /&gt;
  — Применяешь устаревшую или небезопасную конструкцию в джаваскрипте?&lt;br /&gt;
  — Ты сразу об этом узнаешь!&lt;/p&gt;
    &lt;/blockquote&gt;

    &lt;p&gt;Инструмент c большим количеством настроек для CSS (JS поменьше), который
  в реальном времени проверяет код на опечатки, недочёты, ошибки и
  подсвечивает ошибку прямо в файле, попутно объясняя «почему» в статус-баре;
  вообще спасает много времени на дебаге. Для CSS требует nodejs.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/sergeche/emmet-sublime/&quot; title=&quot;Emmet for Sublime Text 2&quot;&gt;&lt;strong&gt;Emmet&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора, &lt;a href=&quot;http://emmet.io/blog/sublime-text-3/&quot; title=&quot;Sublime Text 3 support&quot;&gt;читайте пост в оффициальном
блоге&lt;/a&gt;) — приемник &lt;em&gt;Zen Coding&lt;/em&gt;; в общем, если вы пишете HTML код руками,
и не знаете обеих аббревиатур, то в прошлом вы потратили слишком много времени
зря. Самое важное, это возможность раскрыть &lt;code&gt;.wrap&amp;gt;.inner&lt;/code&gt; в &lt;code&gt;&amp;lt;div class=&quot;wrap&quot;&amp;gt;
&amp;lt;div class=&quot;inner&quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; или, допустим, обернуть список меню (• Главная,
• О нас, • Цены, • Контакты) конструкцией &lt;code&gt;nav&amp;gt;ul&amp;gt;li*&amp;gt;a[href=&quot;#&quot;]&lt;/code&gt;. Также важно,
что в &lt;code&gt;emmet&lt;/code&gt; появилась возможность менять числовые значения, как в Developer
Tools, с помощью клавиш вверх и вниз в паре с дополнительными клавишами
(&lt;code&gt;ctrl+↑|↓&lt;/code&gt; — ±1, &lt;code&gt;alt+shift+↑|↓&lt;/code&gt; — ±10, &lt;code&gt;alt+↑|↓&lt;/code&gt; — ±0.1).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/facelessuser/BracketHighlighter&quot; title=&quot;Bracket and tag highlighter for Sublime Text 2&quot;&gt;Bracket Highlighter&lt;/a&gt; — подсвечивает теги и скобки; иногда помогает.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/spadgos/sublime-jsdocs&quot; title=&quot;Simplifies writing DocBlock comments in Javascript, PHP, CoffeeScript, Actionscript, C &amp;amp; C++&quot;&gt;&lt;strong&gt;DocBlockr&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора) — Все любят документацию,
но никто не любит её писать, для этого изобрели инлайлоновую документацию и
этот плагин поможет вам писать её комфортно и быстро.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/spape/SublimeFileDiffs&quot; title=&quot;Shows diffs - also in an external diff tool - between the current file, or selection(s) in the current file, and clipboard, another file, or unsaved changes.&quot;&gt;FileDiffs&lt;/a&gt; — отличается от GitGutter тем, что позволяет видеть диффы
любых файлов, а не только диффы между коммитами; да и появился он раньше,
намного раньше GitGutter.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/roadhump/GoldenRatio&quot; title=&quot;Sublime Text 2 plugin to resize current group by golden ratio&quot;&gt;&lt;strong&gt;GoldenRatio&lt;/strong&gt;&lt;/a&gt; (работает в 3 версии редактора) — стандартное разбиение
на две панели табов создаёт их равными друг другу, а на маленьких мониторах это
решение не позволяет полноценно следить за обеми панелями. Этот плагин
позволяет увеличивать активную панель при получении ею фокуса. Настройки такие:
&lt;code&gt;{ &quot;auto_resize&quot;: true, &quot;golden_ratio&quot;: 1.618 }&lt;/code&gt;.&lt;br /&gt;
&lt;a href=&quot;http://img171.imageshack.us/img171/9758/f77f8a97a18b4c09b06c05c.png&quot; title=&quot;Sublime GoldenRation demonstration #1&quot;&gt;&lt;img src=&quot;http://img171.imageshack.us/img171/9758/f77f8a97a18b4c09b06c05c.png&quot; alt=&quot;&quot; title=&quot;Sublime GoldenRation demonstration #1&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://img856.imageshack.us/img856/2333/03ed66dd17df4a3c9fe8462.png&quot; title=&quot;Sublime GoldenRation demonstration #2&quot;&gt;&lt;img src=&quot;http://img856.imageshack.us/img856/2333/03ed66dd17df4a3c9fe8462.png&quot; alt=&quot;&quot; title=&quot;Sublime GoldenRation demonstration #2&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/ttscoff/MarkdownEditing&quot; title=&quot;MarkdownEditing&quot;&gt;&lt;strong&gt;MarkdownEditing&lt;/strong&gt;&lt;/a&gt; при должных настройках хоткеев превращает Саблайм в
полноценный Маркдаун редактор.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/erinata/SublimeMarkdownBuild&quot; title=&quot; Sublime Text plugin for building markdown into html and view it in browser&quot;&gt;MarkdownBuild&lt;/a&gt; — компилирует по хоткею маркдаун в HTML и сразу показывает
в браузере.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://wbond.net/sublime_packages/prefixr&quot; title=&quot;A Sublime Text 2 plugin to run CSS through the Prefixr API.&quot;&gt;Prefixr&lt;/a&gt; — ты пишешь &lt;code&gt;box-sizing: border-box;&lt;/code&gt;, нажимаешь &lt;code&gt;alt+ctrl+x&lt;/code&gt;
и Prefixr добавляет все актуальные префиксы.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/spadgos/sublime-ToggleQuotes&quot; title=&quot;ST2 Plugin for toggling quote marks &quot;&gt;ToggleQuotes&lt;/a&gt; — простейшая смена двойных кавычек на одинарные и в
другую сторону.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SublimeText/WordCount&quot; title=&quot;Real time Word Counter&quot;&gt;WordCount&lt;/a&gt; (работает в 3 версии редактора) показывает список слов,
символов в статус-баре, удобно для написания и редактирования статей.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/SublimeText/WordHighlight&quot; title=&quot;Highlight all copies of the currently selected word&quot;&gt;WordHighlight&lt;/a&gt; (работает в 3 версии редактора) подсвечивает все копии
выделенного слова, позволяет проверять не опечатался ли в названии переменной.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В самое разное время, мне пригождались (но не сейчас) такие плагины как:
&lt;a href=&quot;https://github.com/alexstaubo/sublime_text_alternative_autocompletion&quot; title=&quot;Adds TextMate-like autocompletion to Sublime Text 2&quot;&gt;Alternative Autocompletion&lt;/a&gt;, &lt;a href=&quot;http://deansofer.com/projects/view/74/AngularJs_tmbundle&quot; title=&quot;AngularJs.tmbundle&quot;&gt;AngularJS&lt;/a&gt;, &lt;a href=&quot;https://github.com/erinata/SublimeBullet&quot; title=&quot;Sublime Text plugin for markdown style Bullet points and Number lists&quot;&gt;Bullet&lt;/a&gt; (удалил после
MarkdownEditing), &lt;a href=&quot;http://csscomb.com/&quot; title=&quot;The Greatest tool for sorting CSS properties in specific order&quot;&gt;CSScomb&lt;/a&gt; (мегакрутая вещь; жаль, что бесполезна для меня
пока она на PHP), EncodingHelper (умер), &lt;a href=&quot;https://github.com/rmaksim/Sublime-Text-2-Goto-CSS-Declaration&quot; title=&quot;Goto CSS declaration in an open *.css file&quot;&gt;Goto-CSS-Decalaration&lt;/a&gt;,
&lt;a href=&quot;http://hayakubundle.com/&quot; title=&quot;Hayaku - tools for writing CSS faster&quot;&gt;Hayaku&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrmartineau/HTML5&quot; title=&quot;HTML5 bundle for Sublime Text 2&quot;&gt;HTML5&lt;/a&gt; сниппеты, &lt;a href=&quot;https://github.com/agibsonsw/HTMLAttributes&quot; title=&quot;HTML(5) attribute completions&quot;&gt;HTMLAttributes&lt;/a&gt;, &lt;a href=&quot;https://github.com/rmaksim/Sublime-Text-2-Inc-Dec-Value&quot; title=&quot;increase / decrease of numbers, dates, hex color values, etc.&quot;&gt;Inc-Dec-Value&lt;/a&gt;,
IndentGuides (умер), &lt;a href=&quot;https://github.com/SublimeText/jQuery&quot; title=&quot;Sublime Text 2 package bundle for jQuery&quot;&gt;jQuery&lt;/a&gt; и &lt;a href=&quot;https://github.com/aaronpowell/sublime-jquery-snippets&quot; title=&quot;Code snippets for developing with jQuery&quot;&gt;jQuery Snippets Pack&lt;/a&gt;,
&lt;a href=&quot;http://net.tutsplus.com/articles/news/introducing-nettuts-fetch/&quot; title=&quot;Automatically pull in the latest copy of a file&quot;&gt;Nettuts+ Fetch&lt;/a&gt;, &lt;a href=&quot;https://github.com/SublimeText/Open-Include&quot; title=&quot;Will open file paths found under the cursor with ALT+D&quot;&gt;Open-Include&lt;/a&gt;, &lt;a href=&quot;https://github.com/jfromaniello/Sublime-Package-Decontrol&quot; title=&quot;Like Sublime Package Control but without a central repository&quot;&gt;Package DeControl&lt;/a&gt;,
&lt;a href=&quot;https://github.com/titoBouzout/SideBarEnhancements&quot; title=&quot;Enhancements to Sublime Text sidebar. Files and folders&quot;&gt;SideBarEnhancements&lt;/a&gt;, &lt;a href=&quot;https://github.com/billymoon/Stylus&quot; title=&quot;Stylus Package for Sublime Editor 2&quot;&gt;Stylus&lt;/a&gt;, &lt;a href=&quot;https://github.com/Kronuz/SublimeCodeIntel&quot; title=&quot;Full-featured code intelligence and smart autocomplete engine&quot;&gt;SublimeCodeIntel&lt;/a&gt;, &lt;a href=&quot;https://github.com/SublimeText/Tag&quot; title=&quot;Collection of packages about HTML/XML tags&quot;&gt;Tag&lt;/a&gt;,
&lt;a href=&quot;http://wbond.net/sublime_packages/tortoise&quot; title=&quot;TortoiseSVN, TortoiseGit and TortoiseHg integration with Sublime Text 2 via menus and keyboard shortcuts&quot;&gt;Tortoise&lt;/a&gt;.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Рабочее окружение Windows</title>
   <link href="/windows-workspace/"/>
   <updated>2013-02-25T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/windows-workspace</id>
   <content type="html">&lt;h1 id=&quot;windows&quot;&gt;Рабочее окружение Windows&lt;/h1&gt;

&lt;p&gt;После необходимости настраивать рабочее пространство на новом рабочем месте, я
решил законспектировать настройки окружения и десктопные иструменты для
фронтенд разработчика.&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Настройки окружения&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://drp.su/ru/&quot; title=&quot;программа для автоматической установки, обновления и поиска драйверов&quot;&gt;ДрайверПак&lt;/a&gt; установит все драйвера в автоматическом режиме и будет сам
следить за их актуальным состоянием;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.avast.com/&quot; title=&quot;Avast&quot;&gt;Аваст&lt;/a&gt; — много раз выручавший меня бесплатный антивирус;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.dropbox.com/&quot; title=&quot;Dropbox&quot;&gt;Дропбокс&lt;/a&gt; — храните все наработки и файлы настроек в облаке и вы ещё
не раз скажете самому себе огромное спасибо;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://eyeleo.com/&quot; title=&quot;handy PC application that regularly reminds you to take short breaks for your eyes&quot;&gt;АйЛео&lt;/a&gt; спасёт ваши глаза и тело от переутомления. Единственная достойная
программа подобного назначения с приличным графическим и интерфейсным
исполнением;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://skillbrains.com/&quot; title=&quot;The fastest way to do a customizable screenshot&quot;&gt;ЛайтШот&lt;/a&gt; поможет поделиться снимком экрана с колегами или читателями в
твиттере;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://ilyabirman.ru/projects/typography-layout/&quot; title=&quot;Типографская раскладка Ильи Бирмана&quot;&gt;Типографская раскладка Бирмана&lt;/a&gt; позволит использовать правильные
типографские символы: неразрывный пробел, длинное тире, правильные русские,
британские и американские кавычки, знаки копирайта и градуса по цельсию. &lt;em&gt;Тут
важно отметить&lt;/em&gt;, что язык и раскладка это разные сущности в понимании Виндоус
системы и после установки раскладки Бирмана, у вас будет &lt;strong&gt;два языка и по две
раскладки в каждом&lt;/strong&gt; — четыре возможных комбинации, и в половине из них не будет
работать спец. символы, поэтому &lt;strong&gt;после установки типографской раскладки удалите
стандартные раскладки&lt;/strong&gt;, чтобы спец. символы работали всегда;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://punto.yandex.ru/&quot; title=&quot;Punto Switcher&quot;&gt;ПунтоСвитчер&lt;/a&gt; экономит много времени на переключении раскладки по
капслоку.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;А также &lt;a href=&quot;http://picasa.google.com/&quot; title=&quot;Picasa&quot;&gt;Picasa&lt;/a&gt;, &lt;a href=&quot;http://2gis.ru/&quot; title=&quot;Бесплатный справочник организаций с картой города&quot;&gt;2Gis&lt;/a&gt;, &lt;a href=&quot;http://www.skype.com/ru/&quot; title=&quot;Skype&quot;&gt;Skype&lt;/a&gt;, &lt;a href=&quot;http://www.7-zip.org/&quot; title=&quot;file archiver with a high compression ratio&quot;&gt;7-zip&lt;/a&gt; и &lt;a href=&quot;http://www.bittorrent.com/&quot; title=&quot;BitTorrent&quot;&gt;BitTorrent&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Инструменты разработки&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/andreberg/Meslo-Font&quot; title=&quot;Meslo LG&quot;&gt;Meslo&lt;/a&gt; — &lt;a href=&quot;/meslo/&quot; title=&quot;Meslo&quot;&gt;самый крутой моноширинный шрифт&lt;/a&gt; для терминалов и редакторов;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.google.com/intl/en/chrome/browser/&quot; title=&quot;Chrome&quot;&gt;Google Chrome&lt;/a&gt; — простота, встроенные инструменты разработки и
синхронизация настроек не оставляют мне выбора; для разработки лучше
использовать &lt;a href=&quot;https://www.google.com/intl/en/chrome/browser/index.html?extra=devchannel#eula&quot; title=&quot;Chrome Dev&quot;&gt;дев ветку&lt;/a&gt;. На странице списка разных версий хорошо
объяснено, &lt;a href=&quot;http://www.chromium.org/getting-involved/dev-channel#TOC-How-do-I-choose-which-channel-to-use-&quot; title=&quot;How do I choose which channel to use?&quot;&gt;как работает&lt;/a&gt; эта система;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.vmware.com/products/player/&quot; title=&quot;VMware Player&quot;&gt;Vmware player&lt;/a&gt; — оболочка для виртуальных машин для экспериментов с
FreeBSD;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.heidisql.com/&quot; title=&quot;HeidiSQL is a lightweight, Windows based application for managing MySQL and Microsoft SQL databases.&quot;&gt;HeidiSQL&lt;/a&gt; — интерфейсная оболочка для доступа к базам данных, если знаний
SQL стало нехватать для эффективной работы в обычном терминале;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.netsarang.com/products/xsh_detail.html&quot; title=&quot;Xshell 4&quot;&gt;Xshell 4&lt;/a&gt; — оболочка для ssh терминалов, чтобы пользоваться всеми
виртуалками в разных табах, но в пределах одного окна;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/console/&quot; title=&quot;Console is a Windows console window enhancement.&quot;&gt;Console 2&lt;/a&gt; — оболочка для локальных терминалов — cmd, git bash с
поддержкой табов;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ghisler.com/&quot; title=&quot;Total Commander&quot;&gt;Total Commander&lt;/a&gt; — самый удобный файловый менеджер; точно удобнее, чем
одиночные окна обычного windows explorer; мои &lt;a href=&quot;https://gist.github.com/matmuchrapna/5035926&quot; title=&quot;Total commander configuration&quot;&gt;настройки&lt;/a&gt; коммандера;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.sublimetext.com/&quot; title=&quot;Sublime Text is a sophisticated text editor for code, markup and prose.&quot;&gt;Sublime Text&lt;/a&gt; — самый лучший редактор, который не отвлекает тебя от
написания кода, а только, наоборот, помогает тебе писать его быстрее и
эффективнее. Поменять в настройках шрифт на &lt;em&gt;meslo&lt;/em&gt; и установить
тему «&lt;a href=&quot;https://github.com/buymeasoda/soda-theme&quot; title=&quot;Dark and light custom UI themes for Sublime Text 2&quot;&gt;Soda&lt;/a&gt;», и будет красота:&lt;br /&gt;
&lt;a href=&quot;http://i.imgur.com/J7mitSR.png&quot;&gt;&lt;img src=&quot;http://i.imgur.com/J7mitSR.png&quot; alt=&quot;sublime text + soda theme + meslo&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://git-scm.com/&quot; title=&quot;git --everything-is-local&quot;&gt;Git&lt;/a&gt; — если вы разрабатываете что-либо и не используете гит, то вы
&lt;strong&gt;делаете это неправильно&lt;/strong&gt;;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://nodejs.org/&quot; title=&quot;nodejs&quot;&gt;Node.js&lt;/a&gt; — будь в тренде! На самом деле, очень полезная штуковина;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://rubyinstaller.org/&quot; title=&quot;Ruby&quot;&gt;Ruby&lt;/a&gt;, &lt;a href=&quot;https://github.com/oneclick/rubyinstaller/wiki/Development-Kit&quot; title=&quot;Ruby installer for windows&quot;&gt;Ruby devkit&lt;/a&gt;, &lt;a href=&quot;https://rubygems.org/&quot; title=&quot;Ruby gems&quot;&gt;Rubygems&lt;/a&gt;, &lt;a href=&quot;http://jekyllrb.com/&quot; title=&quot;Jekyll&quot;&gt;Jekyll&lt;/a&gt; —
джекилл, наше всё!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;И интерфейсные оболочки для гит и свн: &lt;a href=&quot;https://code.google.com/p/tortoisegit/&quot; title=&quot;TortoiseGIT&quot;&gt;TortoiseGit&lt;/a&gt; и &lt;a href=&quot;http://tortoisesvn.net/&quot; title=&quot;TortoiseSVN&quot;&gt;TortoiseSVN&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Личные предпочтения&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Сделать чёрным курсор;&lt;/li&gt;
  &lt;li&gt;Поставить белые обои на рабочем столе;&lt;/li&gt;
  &lt;li&gt;Настроить открытие папок и файлов по одному клику;&lt;/li&gt;
  &lt;li&gt;Настроить терминалы на связку фоновый цвет &lt;code&gt;#555&lt;/code&gt;, а шрифт &lt;em&gt;Meslo&lt;/em&gt;:&lt;br /&gt;
&lt;a href=&quot;http://img855.imageshack.us/img855/3728/9931e1ef5e8445a58c08715.png&quot;&gt;&lt;img src=&quot;http://img855.imageshack.us/img855/3728/9931e1ef5e8445a58c08715.png&quot; alt=&quot;xshell + #555 + meslo&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Настроить симлинки системных папок (документы, загрузки) на внутренние папки
в дропбоксе;&lt;/li&gt;
  &lt;li&gt;Настроить хром на папку дропбоксовую папку загрузок, чтобы при переключении
между домашней и рабочей машиной ничего не терялось.&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Основы markdown</title>
   <link href="/markdown-basics/"/>
   <updated>2013-02-13T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/markdown-basics</id>
   <content type="html">&lt;h1 id=&quot;markdown&quot;&gt;Основы markdown&lt;/h1&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#intro&quot;&gt;Вступление&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#headings&quot;&gt;Заголовки&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#text-formatting&quot;&gt;Форматирование текста&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#links-n-images&quot;&gt;Вставка ссылок и картинок&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#lists&quot;&gt;Списки&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#code&quot;&gt;Форматирование кода&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#cite&quot;&gt;Цитаты&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Обычный HTML&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;intro&quot;&gt;&lt;a href=&quot;#intro&quot;&gt;
    Вступление
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Маркдаун — самое удобное и интуитивно понятное для редактирования текста,
что можно было встретить в интернете. Его используют СтекОверфлоу и Гитхаб, что
уже означают повсеместность формата.&lt;/p&gt;

&lt;p&gt;Сам по себе, маркдаун это свод правил для форматирования текста и транслятор в
HTML. На данный момент трансляторов существует великое множество, все они
поддерживают оригинальный стандарт, но некоторые вносят в свои трансляторы
дополнительные возможности.&lt;/p&gt;

&lt;p&gt;Например, &lt;a href=&quot;http://kramdown.rubyforge.org/&quot;&gt;&lt;strong&gt;Крамдаун&lt;/strong&gt;&lt;/a&gt;
(используемый в джекиле) создал синтаксис для &lt;a href=&quot;http://kramdown.rubyforge.org/syntax.html#definition-lists&quot;&gt;списка определений&lt;/a&gt; &lt;code&gt;dl&lt;/code&gt;; а &lt;strong&gt;ГФМ&lt;/strong&gt; (&lt;a href=&quot;https://help.github.com/articles/github-flavored-markdown&quot;&gt;GitHub Flavored Markdown)&lt;/a&gt; взял на себя больше и ввёл много
крутых особенностей для создания более удобного сервиса.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://daringfireball.net/&quot;&gt;Джон Грубер&lt;/a&gt; создал этот инструмент и самый больший
интерес для нас представляют две страницы:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://daringfireball.net/projects/markdown/basics&quot;&gt;Основы маркдауна&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://daringfireball.net/projects/markdown/syntax&quot;&gt;Синтаксис маркдауна&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;В этой статье, я постарался изложить своё видение на изучение основ маркдауна,
и то как я его запомнил.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Код из статьи (её &lt;a href=&quot;https://raw.github.com/matmuchrapna-sites/vstarkov.ru/gh-pages/_posts/2013-02-13-markdown-basics.md&quot;&gt;&lt;strong&gt;маркдаун-исходник&lt;/strong&gt;&lt;/a&gt; лежит на гитхабе) можно тестировать в онлайн
редакторах:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/&quot;&gt;http://stackoverflow.com/&lt;/a&gt; — очень удобный редактор с превью и хоткеями&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://gist.github.com/&quot;&gt;http://gist.github.com/&lt;/a&gt; — выбрать формат &lt;code&gt;markdown&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://markable.in/editor/&quot;&gt;http://markable.in/editor/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;headings&quot;&gt;&lt;a href=&quot;#headings&quot;&gt;
    Заголовки
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Заголовки обособляются хешами (хеш справа для красоты)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;## Заголовки ##
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;От количества хешей зависит уровень заголовка:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Заголовок первого уровня (&amp;lt;h1/&amp;gt;) #
## Заголовок второго уровня (&amp;lt;h2/&amp;gt;) ##
### Заголовок третьего уровня (&amp;lt;h3/&amp;gt;) ###
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Главный заголовок&lt;/strong&gt; можно не выделять хешами, а подчеркнуть &lt;em&gt;двойной линией&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Погружение в маркдаун
================================================================================
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Второй по главности&lt;/strong&gt; заголовок можно не выделять хешами, а подчеркнуть &lt;em&gt;простой
линией&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Заголовки
--------------------------------------------------------------------------------
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;text-formatting&quot;&gt;&lt;a href=&quot;#text-formatting&quot;&gt;
    Форматирование текста
&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id=&quot;section&quot;&gt;Абзацы и переносы&lt;/h3&gt;

&lt;p&gt;Новый абзац в маркдауне определяется по наличию &lt;em&gt;пустой строки&lt;/em&gt; перед блоком
текста.&lt;br /&gt;
Обычные одиночные переносы внутри маркдауна, допустим для поддержания длины
строки в 80 символов ни на что не влияют.&lt;/p&gt;

&lt;p&gt;Для того, чтобы сделать перенос внутри строки, достаточно добавить два пробела
перед переносом строки.&lt;/p&gt;

&lt;p&gt;Точки, это пробелы:&lt;br /&gt;
&lt;a href=&quot;http://img22.imageshack.us/img22/9095/126a9dad309c445e95405c7.png&quot;&gt;&lt;img src=&quot;http://img22.imageshack.us/img22/9095/126a9dad309c445e95405c7.png&quot; alt=&quot;markdown text editing&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;section-1&quot;&gt;Стилизация текста&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;*Жирный текст** — &lt;code&gt;**Жирный текст**&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Курсивный текст&lt;/em&gt; — &lt;code&gt;*Курсивный текст*&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;&lt;em&gt;Жирный курсивный текст&lt;/em&gt;&lt;/strong&gt; — &lt;code&gt;***Жирный курсивный текст***&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;section-2&quot;&gt;Горизонтальная линия&lt;/h3&gt;

&lt;hr /&gt;

&lt;p&gt;Горизонтальная линия в маркдауне до смешного проста&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;--------------------------------------------------------------------------------

Горизонтальная линия в маркдауне до смешного проста
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;links-n-images&quot;&gt;&lt;a href=&quot;#links-n-images&quot;&gt;
    Вставка ссылок и картинок
&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://placekitten.com/&quot;&gt;Ссылка на котиков&lt;/a&gt; — &lt;code&gt;[Ссылка на котиков](http://placekitten.com/)&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;img src=&quot;http://placekitten.com/g/100/20&quot; alt=&quot;Описание картинки с котиком&quot; /&gt; — &lt;code&gt;![Описание картинки с котиком](http://placekitten.com/g/100/20)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;В большом тексте&lt;/strong&gt; удобно вставлять ссылки &lt;a href=&quot;http://placekitten.com/&quot; title=&quot;Cat happens&quot;&gt;сносками&lt;/a&gt; как в книгах:&lt;/p&gt;

&lt;hr /&gt;

&lt;pre&gt;&lt;code&gt;**В большом тексте** удобно вставлять ссылки [сносками][1] как в книгах:

----
[1]: http://placekitten.com/ &quot;Cat happens&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;lists&quot;&gt;&lt;a href=&quot;#lists&quot;&gt;
    Списки
&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id=&quot;section-3&quot;&gt;Обычный ненумерованный список&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;один&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;два&lt;/p&gt;

    &lt;pre&gt;&lt;code&gt;  * один
  * два
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;section-4&quot;&gt;Обычный нумерованный список&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;один&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;два&lt;/p&gt;

    &lt;pre&gt;&lt;code&gt; 1. один
 2. два
&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;code&quot;&gt;&lt;a href=&quot;#code&quot;&gt;
    Форматирование кода
&lt;/a&gt;&lt;/h2&gt;

&lt;h3 id=&quot;section-5&quot;&gt;Блочное форматирование кода&lt;/h3&gt;

&lt;p&gt;Для блочного выделения кода достаточно сделать отступ в 4 пробела или один таб.
Для такого представления:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;ul class=&quot;nav&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;/atom.xml&quot;&amp;gt;RSS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Нужно вставить в редактор такой код&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    &amp;lt;ul class=&quot;nav&quot;&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;a href=&quot;/atom.xml&quot;&amp;gt;RSS&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;    
&lt;/code&gt;&lt;/pre&gt;

&lt;h3 id=&quot;section-6&quot;&gt;Строчное форматирование кода&lt;/h3&gt;

&lt;p&gt;Для строчного выделения &lt;code&gt;кода&lt;/code&gt; достаточно обернуть в обратные кавычки:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Для строчного выделения `кода` достаточно обернуть в обратные кавычки:
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;cite&quot;&gt;&lt;a href=&quot;#cite&quot;&gt;
    Цитаты
&lt;/a&gt;&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Мы не поможем людям, делая за них то, что они могли бы сделать сами.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt; Мы не поможем людям, делая за них то, что они могли бы сделать сами.
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;html&quot;&gt;&lt;a href=&quot;#html&quot;&gt;
    Обычный HTML
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Если что-то нельзя сделать в маркдауне, то используйте обычный HTML.
Допустим так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;h2 id=&quot;books&quot;&amp;gt;&amp;lt;a href=&quot;#books&quot;&amp;gt;
    Книги
&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Настройки и перезагрузка серверов Apache и Nginx</title>
   <link href="/config-and-restart-of-nginx-and-apache/"/>
   <updated>2013-02-11T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/config-and-restart-of-nginx-and-apache</id>
   <content type="html">&lt;h1 id=&quot;apache--nginx&quot;&gt;Настройки и перезагрузка серверов Apache и Nginx&lt;/h1&gt;

&lt;p&gt;Периодически появляется необходимость в настройке серверов окружения и тут ты
понимаешь, что когда ты делаешь это хотя бы раз в месяц, то можешь вспомнить, а
когда до этого работал над одним проектом несколько месяцев, то всегда
приходится или спрашивать, или искать в гугле.&lt;/p&gt;

&lt;p&gt;Сегодня мне надоело и я решил сохранить это для себя. Команды терминала
и пути актуальны для &lt;em&gt;FreeBSD 8.0&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo ee /usr/local/etc/nginx/nginx.conf
sudo apachectl restart
sudo ee /usr/local/etc/apache/httpd.conf
/usr/local/etc/rc.d/nginx restart
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Доступность сайтов (большой сборник)</title>
   <link href="/big-a11y-digest/"/>
   <updated>2013-02-07T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/big-a11y-digest</id>
   <content type="html">&lt;h1 id=&quot;section&quot;&gt;Доступность сайтов (большой сборник)&lt;/h1&gt;

&lt;p&gt;Я постараюсь выложить и структурировать в этом дайджесте достойные материалы по
теме доступности сайтов, которые я собрал для своего &lt;a href=&quot;http://www.easychirp.com/&quot; title=&quot;Easy Chirp : web accessibility for the Twitter.com website application&quot;&gt;доклада&lt;/a&gt; на &lt;a href=&quot;http://2013.uwdc.ru/&quot;&gt;UWDC’13&lt;/a&gt;
и также как справочник для &lt;em&gt;дополнительного чтения&lt;/em&gt;, так как обо всём сразу
не удастся рассказать за полчаса, отведённые на доклад (&lt;a href=&quot;http://matmuchrapna.github.com/a11y-2013/&quot;&gt;&lt;strong&gt;презентация&lt;/strong&gt;&lt;/a&gt;
с доклада уже доступна в &lt;a href=&quot;https://github.com/matmuchrapna/a11y-2013&quot;&gt;репозитории&lt;/a&gt; на гитхабе)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Все материалы упорядочены по шести групам&lt;/em&gt;: &lt;a href=&quot;#books&quot;&gt;книги&lt;/a&gt;,
&lt;a href=&quot;#videos&quot;&gt;видеозаписи&lt;/a&gt;, &lt;a href=&quot;#presentations&quot;&gt;презентации&lt;/a&gt;, &lt;a href=&quot;#articles&quot;&gt;статьи&lt;/a&gt;,
&lt;a href=&quot;#blogs&quot;&gt;блоги&lt;/a&gt;, &lt;a href=&quot;#twitters&quot;&gt;твиттер-аккаунты&lt;/a&gt;. Все материалы на английском
языке, поэтом я перевёл названия на русский.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Вне любой из категорий:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.w3.org/Translations/WCAG20-ru/&quot;&gt;&lt;strong&gt;WCAG 2.0&lt;/strong&gt; на русском&lt;/a&gt; — руководство по обеспечению доступности
веб-контента на &lt;em&gt;русском языке&lt;/em&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.easychirp.com/&quot; title=&quot;Easy Chirp : web accessibility for the Twitter.com website application&quot;&gt;Easy Chirp&lt;/a&gt; — живое и рабочее приложения
для доступа к твиттеру.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;books&quot;&gt;&lt;a href=&quot;#books&quot;&gt;
    Книги
&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://diveintoaccessibility.info/&quot;&gt;Погружение в доступность&lt;/a&gt; — книга Марка Пилгрима отвечает на два вопроса, как и зачем; состоит из вступления и тридцати дней, освещённых со стороны пяти людей со определёнными ограничениями, пользующимися интернетом. Несмотря на небольшое устаревание некоторого количества информации, остаётся одной из самой полезных книг по доступности.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://siteimprove.com/files/how-to-ensure-website-accessibility.pdf&quot;&gt;Как обеспечить доступность сайта&lt;/a&gt; — достаточно годная 17 страничная книга покрывает основные аспекты.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;videos&quot;&gt;&lt;a href=&quot;#videos&quot;&gt;
    Видеозаписи
&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://vimeo.com/18903451&quot;&gt;19% активных интернет-пользователей из-за которых вы будете гореть в
аду&lt;/a&gt; — видеозапись презентации &lt;a href=&quot;http://twitter.com/darkboutique&quot;&gt;Артёма Геллера&lt;/a&gt;. Прошло два с половиной года, но не в этом дело, так как теория остаётся всё той же.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.wimp.com/newdevice/&quot;&gt;Инвалидные коляски уступают место новому устройству &lt;/a&gt; — окунитесь в атмосферу заботы о людях.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://youtu.be/GmnHY6vNeQM&quot;&gt;Accessibility @ Mozilla: Intro&lt;/a&gt; — свежее видео с ютуб-канала файрфокса, передающее отношение к доступности среди разработчиков браузера.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.youtube.com/user/TommyEdisonXP?feature=watch&quot;&gt;Опыт Томми Эдисона&lt;/a&gt; — канал от рождения слепого Тома, в котором он рассказывает про свою жизнь, особенно стоит выделить два видео: &lt;a href=&quot;http://youtu.be/59YN8_lg6-U&quot;&gt;«Рассказывая про цвета слепому человеку»&lt;/a&gt; и &lt;a href=&quot;http://youtu.be/4uk8pwEHMBE&quot;&gt;«Бред, который говорят слепым»&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;presentations&quot;&gt;&lt;a href=&quot;#presentations&quot;&gt;
    Презентации
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;В этот раздел я включил полезные, интересные или из разряда &lt;em&gt;«всегда хотели знать, но боялись спросить»&lt;/em&gt; презентации. Все они опубликованы на сервисе &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;слайдшэйр&lt;/a&gt;, поэтому помните о возможности посмотреть все презентации понравившегося вам автора, впрочем об этом я позаботился сам и привёл ссылки на тех авторов, у кого есть ещё что-нибудь интересное.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/cheilmann/mike-davies-ajax-and-accessibility&quot;&gt;Аякс и доступность&lt;/a&gt; — поверхностная презентация от &lt;a href=&quot;http://www.slideshare.net/cheilmann&quot;&gt;Кристиана Хейлмана&lt;/a&gt;, вводящая в курс дела.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/parisweb/making-chaos-accessible-aaron-leventhal-paris-web-2008&quot;&gt;Сделать хаос более доступным&lt;/a&gt; от Аарона Левентэ — короткая презентация, дающая представление о основных ограничениях людей (с интересными примерами) и подготавливающая к использования ARIA аттрибутов.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/jared_w_smith/web-accessibility-gone-wild-now-even-more-wilder&quot;&gt;Доступность сайтов сошла с ума (теперь ещё больше!)&lt;/a&gt; — превосходная презентация от &lt;a href=&quot;http://www.slideshare.net/jared_w_smith&quot;&gt;Джареда Смита&lt;/a&gt; сотрудника &lt;a href=&quot;http://webaim.org/&quot;&gt;WebAim&lt;/a&gt;, в которой он рассказывает про невозможность существования идеального доступного сайта, так как требования и стандарты постоянно меняются и также знакомит с распространёнными заблуждения о доступности.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/jared_w_smith/accessibility-compatibility&quot;&gt;Доступность и Совместимость&lt;/a&gt; (с людьми) — ещё одна презентация от Джареда, более полно раскрывающая подход к работе над улучшением доступности сайтов.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/jared_w_smith/the-legend-of-the-typical-screen-reader-user-2485093&quot;&gt;История типичного пользователя программ для чтения с экрана&lt;/a&gt; — Джаред снова рассказывает про доступность, но уже в свете «экранных читалок», на основе опроса в WebAim.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/ivogomes/htmlcss-tips-to-improve-the-accessibility-of-your-websites&quot;&gt;HTML и CSS советы для улучшения доступности ваших сайтов&lt;/a&gt; — щепотка мифов и много конкретных советов от Иво Гомеса.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/webaxe/how-to-build-an-accessible-web-application&quot;&gt;Как создать доступное веб приложение&lt;/a&gt; — &lt;a href=&quot;http://www.slideshare.net/webaxe&quot;&gt;аккаунт&lt;/a&gt; &lt;a href=&quot;http://www.webaxe.org/&quot;&gt;Web Axe&lt;/a&gt; подробно и с примерами рассказывает историю создания «Easy Chirp», о котором я говорил в самом начале.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/7mary4/yahoo-hack-university-accessiblie-innovations-and-challenges&quot;&gt;Yahoo! Hack University: Инновации и соревнования в доступности&lt;/a&gt; — хорошая обзорная презентация от разработчика из Яху &lt;a href=&quot;http://www.slideshare.net/7mary4&quot;&gt;Теда Дрейка&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/7mary4/html-5-accessibility-9077059&quot;&gt;Доступность HTML 5&lt;/a&gt; — небольшая презентация Теда, освещающая аспекты доступности в современном стандарте HTML.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/7mary4/common-accessibility-mistakes&quot;&gt;Распространённые ошибки доступности&lt;/a&gt; — и снова Дрейк расскажет вам, что вы делаете неправильно, почему и как нужно делать на самом деле.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/n8moon/the-yahoo-social-accessibility-lab&quot;&gt;Лаборатория доступности Яху&lt;/a&gt; — Нэйт Эбрагимун рассказывает про опыт яху в создании и развитии корпоративной группы, направленной на улучшение доступности собственных сервисов.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Второй блок презентаций рассматривает более подробно тему ARIA аттрибутов.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/maxdesign/a-quick-introduction-to-aria&quot;&gt;Быстрое знакомство с WAI-ARIA&lt;/a&gt; от &lt;a href=&quot;http://www.slideshare.net/maxdesign&quot;&gt;Русса Викли&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/iwmw/an-introduction-to-waiaria&quot;&gt;Знакомство с WAI-ARIA&lt;/a&gt; — более размеренное введение в аттрибуты доступности.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/Shuckle/wai-aria-an-intro&quot;&gt;WAI-ARIA - Вступление&lt;/a&gt; — не менее полезное, чем предыдущие два, введение в ARIA аттрибуты с отличными примерами.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/AccessiQ/dynamic-and-accessible-web-content-with-waiaria-15509603&quot;&gt;Динамическое и доступное содержимое сайта с помощью WAI-ARIA&lt;/a&gt; небольшое руководство по внедрению ARIA аттрибутов с конкретными примерами.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/AaronGustafson/progressive-enhancement-with-aria-5099559&quot;&gt;Прогрессивное улучшение с ARIA&lt;/a&gt; — &lt;strong&gt;огромная и потрясающая&lt;/strong&gt; презентация &lt;a href=&quot;http://www.slideshare.net/AaronGustafson&quot;&gt;Аарона Густафсона&lt;/a&gt;; «Мы можем и должны создавать более качественные сайты» — цитата из этой вдохновляющей презентации.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/rajeshlal/accessible-design-how-interactive-design-conference-washington-dc-sept-2729-2012&quot;&gt;Доступный дизайн&lt;/a&gt; — презентация разработчика из Нокии &lt;a href=&quot;http://www.slideshare.net/rajeshlal&quot;&gt;Раджа Лалы&lt;/a&gt;; Радж раскрывает ещё несколько значений доступности и рассказывает про принципы дизайна, о которых должен помнить дизайнер, чтобы все были счастливы.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.slideshare.net/toddkloots/aria-widgets&quot;&gt;WAI-ARIA виджеты&lt;/a&gt; — &lt;a href=&quot;http://www.slideshare.net/toddkloots&quot;&gt;Тодд Клутт&lt;/a&gt; рассказывает, как вылечить HTML4 до HTML5 с помощью &lt;strike&gt;подорожника&lt;/strike&gt; ARIA аттрибутов&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;articles&quot;&gt;&lt;a href=&quot;#articles&quot;&gt;
    Статьи
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;В этом блоке я привожу ссылки на статьи, которые по разным причинам заслуживают внимание.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://alistapart.com/blog/post/on-alt-text&quot;&gt;Аттрибут &lt;code&gt;alt&lt;/code&gt;&lt;/a&gt; — свежайшая статья от Эрика Зельдмана про аттрибут &lt;code&gt;alt&lt;/code&gt; у изображений и как правильно его использовать.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.nczonline.net/blog/2013/01/29/you-cant-create-a-button/&quot;&gt;Ты не можешь сделать кнопку&lt;/a&gt; — неплохая ретроспектива подходов к доступности контента.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://css-tricks.com/navigation-in-lists-to-be-or-not-to-be/&quot;&gt;Быть или не быть навигации в &lt;code&gt;ul&lt;/code&gt;&lt;/a&gt; — подробный холивар в блоге у Криса Койера.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://laurakalbag.com/labels-in-input-fields-arent-such-a-good-idea/&quot;&gt;Названия полей в полях ввода — не лучшая идея&lt;/a&gt; — годный пример подтверждения &lt;a href=&quot;https://twitter.com/KuraFire/status/203556978075774976/photo/1&quot;&gt;правила&lt;/a&gt; Фарука Атеса.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://siteimprove.com/blog/2012/12/11/web-developers-create-an-accessible-website.aspx&quot;&gt;Веб разработчики: создать доступный сайт&lt;/a&gt;
— чеклист того, о чём следует помнить разрабатывая «сайт для широкого круга пользователей, а не только для людей пользующихся сайтом, так же как и вы.»&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.webhostingsearch.com/articles/25-ways-to-make-your-site-more-accessible.php&quot;&gt;25 способов сделать ваш сайт более доступным&lt;/a&gt; — статья от создателя доступного клиента твиттера Денниса Лембри — хороший список конкретных руководств к действию.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-using-aria-notes/&quot;&gt;Замечания по использованию ARIA вместе с HTML5&lt;/a&gt; — статья объясняет, когда нужно использовать ARIA аттрибут, а когда можно нативный HTML тег из пятой редакции языка.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.marcozehe.de/2011/12/08/social-networks-and-accessibility-a-rather-sad-picture/&quot;&gt;Доступность социальных сетей — нерадостная картина&lt;/a&gt; — эту статью стоит прочитать, чтобы составить общее впечатление о том, как слепые пользуются социальными сетями, что не так с ними и окунуться в эту атмосферу; автору можно доверять — Марко Зиэ с рождения слеп и пользуется экранными читалками с 1991 года, когда у него появился его первый компьютер, на данный момент он работает инженером по контролю качества в корпорации Мозилла.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://yaccessibilityblog.com/library/easy-fixes-to-common-accessibility-problems.html&quot;&gt;Простые решения частых проблем доступности&lt;/a&gt; — девять проблем и их решения с букмарклетами для самостоятельной проверки.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/12279113/recommended-wai-aria-implementation-for-navigation-bar-menu&quot;&gt;Рекомендуемая WAI-ARIA реализация для меню&lt;/a&gt; — Вопрос с кучей отсылок и подробнейший ответ на стековерфлоу.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.prostomac.com/2011/08/internet-dlya-nezryachix-i-nemnogo-pro-apple/&quot;&gt;Интернет для незрячих. И немного про Apple&lt;/a&gt; — получасовой эпизод подкаста с &lt;a href=&quot;http://iblind.ru/&quot;&gt;Сергеем Усольцевым&lt;/a&gt; раскрывает тему голосовых функций на компьютерах и мобильных устройствах Apple — мне было очень интересно послушать живой опыт человека.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;blogs&quot;&gt;&lt;a href=&quot;#blogs&quot;&gt;
    Блоги
&lt;/a&gt;&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://a11yproject.com/&quot;&gt;The Accessibility Project&lt;/a&gt; — совсем недавний проект созданный как открытая прощадка для улучшение интернета в сфере доступности. Обратите (sic!) внимание на опубликованный &lt;a href=&quot;http://a11yproject.com/resources.html&quot;&gt;&lt;strong&gt;список ресурсов&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://yaccessibilityblog.com/&quot;&gt;Yachoo! Accessibility&lt;/a&gt; сайт команды специалистов из Яху.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.webaxe.org/&quot;&gt;WebAxe&lt;/a&gt; — блог и подкаст про доступность сайтов.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.marcozehe.de/&quot;&gt;Marcozehe.de&lt;/a&gt; — блог Марко Зиэ.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.tiflocomp.ru/&quot;&gt;Тифлокомп.ру&lt;/a&gt; — русский сайт про технологии для незрячих и слабовидящих.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;twitters&quot;&gt;&lt;a href=&quot;#twitters&quot;&gt;
    Твиттер
&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Твиттере-аккаунты живых людей или команд, специализирующихся на доступности.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/MarcoInEnglish&quot;&gt;@MarcoInEnglish&lt;/a&gt; — Марко Зиэ&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/darkboutique&quot;&gt;@darkboutique&lt;/a&gt; — Артём Геллер&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/jared_w_smith&quot;&gt;@jared_w_smith&lt;/a&gt; — Джаред Смит&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/ted_drake&quot;&gt;@ted_drake&lt;/a&gt; — Тед Дрейк&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/AaronGustafson&quot;&gt;@AaronGustafson&lt;/a&gt; — Аарон Густафсон&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/dennisl&quot;&gt;@dennisl&lt;/a&gt; — Деннис Лембри&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/iRajLal&quot;&gt;@iRajLal&lt;/a&gt; — Радж Лал&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/todd&quot;&gt;@todd&lt;/a&gt; — Тод Клутс&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/PayPalInclusive&quot;&gt;@PayPalInclusive&lt;/a&gt; — PayPal Accessibility&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/yahooaccess&quot;&gt;@yahooaccess&lt;/a&gt; — Yahoo! Accessibility&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/EasyChirp&quot;&gt;@EasyChirp&lt;/a&gt; — Easy Chirp&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/webaxe&quot;&gt;@webaxe&lt;/a&gt; — WebAxe&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://twitter.com/AccessiQ&quot;&gt;@AccessiQ&lt;/a&gt; — Access iQ&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Как сделать замену строк в большом SQL дампе?</title>
   <link href="/how-to-find-n-replace-in-big-sql-dump/"/>
   <updated>2013-02-05T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/how-to-find-n-replace-in-big-sql-dump</id>
   <content type="html">&lt;h1 id=&quot;sql-&quot;&gt;Как сделать замену строк в большом SQL дампе?&lt;/h1&gt;

&lt;p&gt;&lt;small&gt;Заметка из разряда, чтобы не забыть.&lt;/small&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;Возникла необходимость поменять вывод заголовков со второго уровня на третий на сайте с большим количеством статей. Дамп занимает больше гигабайта, ни один из редакторов не смог открыть такой большой файл (vim, emacs не пробовал, да). Поэтому пришлось идти в обычный юниксовый терминал и работать в нём; небольшой поиск на подходящую утилиту привёл к релевантному &lt;a href=&quot;http://stackoverflow.com/q/4924710/1057730&quot;&gt;ответу&lt;/a&gt; на стековерфлоу. так и начнём&lt;/p&gt;

&lt;p&gt;Создаём дамп:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysqldump -uUSER -pPSWD database &amp;gt; db.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Заменяем открывающие теги и повторяем с закрывающими:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;find ./db.sql | xargs sed -i -e s/&amp;lt;h2&amp;gt;/&amp;lt;h3&amp;gt;/g
find ./db.sql | xargs sed -i -e s/'&amp;lt;\/h2&amp;gt;'/'&amp;lt;\/h3&amp;gt;'/g
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Заливаем отредактированный дамп базы обратно:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mysql -uUSER -pPSWD database &amp;lt; db.sql
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Все счастливы.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; для работы с гзипованным дампом используйте &lt;code&gt;gunzip&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;gunzip &amp;lt; db.sql.gz | mysql -uUSER -pPSWD database
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Необходимые книги в библиотеке фронтенд разработчика</title>
   <link href="/required-books-in-library/"/>
   <updated>2013-01-31T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/required-books-in-library</id>
   <content type="html">&lt;h1 id=&quot;section&quot;&gt;Необходимые книги в библиотеке фронтенд разработчика&lt;/h1&gt;

&lt;p&gt;Недавно я задался вопросом создания собственной библиотеки в нашей компании.
Проблемы возникли только на этапе поиска литературы, но с ними я справился, и
получившийся список литературы решил опубликовать. Так как список задумывался как сугубо практический для покупки каждого пункта в библиотеку, то цены и ссылки я оставил.&lt;/p&gt;

&lt;p&gt;Список разделён на четыре секции — HTML, СSS, JavaScript и дизайн. В каждой секции я постарался немного объяснить выбор книг и отсортировать книги по степени важности.&lt;/p&gt;

&lt;h2 id=&quot;html&quot;&gt;HTML&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/7622650/&quot;&gt;Изучаем HTML5. Библиотека специалиста (Реми Шарп, Библиотека специалиста)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/17513568/&quot;&gt;HTML5. Рецепты программирования (O&amp;#8217;Reilly)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/19431055/&quot;&gt;HTML5 для веб-дизайнеров (A Book Apart)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Первая книга мною была незамечена, но рекомендована &lt;a href=&quot;http://pepelsbey.net/&quot;&gt;Вадимом Макеевым&lt;/a&gt;. Её написал &lt;a href=&quot;http://remysharp.com/&quot;&gt;Реми Шарп&lt;/a&gt;, рано или поздно вы всё были на его сайте. Остальные книги в этой категории были выбраны по издательству и после просмотра оглавления были утверждены.&lt;br /&gt;
Общая цена: &lt;a href=&quot;https://duckduckgo.com/?q=363+%2B+310+%2B+612%3D&quot;&gt;363 + 310 + 612 = 1 285 рублей&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;css&quot;&gt;CSS&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/3881079/&quot;&gt;CSS-каскадные таблицы стилей. Подробное руководство (Эрик Мейер)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://chitai-gorod.ru/catalog/book/327333/&quot;&gt;CSS ручной работы (Библиотека специалиста)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/7449521/&quot;&gt;Сила CSS3. Освой новейший стандарт веб-разработок! (Библиотека специалиста)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/8747299/&quot;&gt;Отзывчивый веб-дизайн (A Book Apart)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/19431033/&quot;&gt;CSS3 для веб-дизайнеров (A Book Apart)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/15708347/&quot;&gt;Сначала мобильные! (A Book Apart)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Хочу заметить, что первая книга от &lt;a href=&quot;http://meyerweb.com/&quot;&gt;Эрика Мейера&lt;/a&gt; — создателя reset.css и бесспорный авторитета в мире CSS. Ещё кажутся полезными книги от издательства «A Book Apart».&lt;br /&gt;
Общая цена: &lt;a href=&quot;https://duckduckgo.com/?q=1159+%2B+419+%2B+354+%2B+610+%2B+648+%2B+612+%3D&quot;&gt;1159 + 419 + 354 + 610 + 648 + 612 = 3 802 рублей&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;javascript&quot;&gt;JavaScript&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/19677670/&quot;&gt;JavaScript. Подробное руководство (O&amp;#8217;Reilly)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/6287517/&quot;&gt;JavaScript. Шаблоны (O&amp;#8217;Reilly)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/8798187/&quot;&gt;Веб-приложения на JavaScript (O&amp;#8217;Reilly)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/8144634/&quot;&gt;JavaScript: сильные стороны (O&amp;#8217;Reilly)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Первый манускрипт от отменного автора — &lt;a href=&quot;http://www.davidflanagan.com/&quot;&gt;Дэвида Флэнагана&lt;/a&gt;, остальные книги от O&amp;#8217;Reilly тоже должны быть полезны.&lt;br /&gt;
Общая цена: &lt;a href=&quot;https://duckduckgo.com/?q=1823+%2B+315+%2B+290+%3D&quot;&gt;1823 + 624 + 315 + 290 = 3 052&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;jquery&quot;&gt;jQuery&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/6277333/&quot;&gt;jQuery. Подробное руководство по продвинутому JavaScript (Иеуда Кац)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Что можно добавить к книге про инструмент &lt;a href=&quot;http://jquery.org/team/&quot;&gt;созданный&lt;/a&gt; &lt;a href=&quot;http://yehudakatz.com/&quot;&gt;автором&lt;/a&gt; этого инструмента? 
— ничего. Эта книга обязательно к прочтению.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Дизайн&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/19636870/&quot;&gt;Дизайн – это работа (A Book Apart)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/8747236/&quot;&gt;Эмоциональный веб-дизайн (A Book Apart)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ozon.ru/context/detail/id/16905899/&quot;&gt;Умный дизайн. Простые приемы разработки пользовательских интерфейсов (Библиотека специалиста)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;В секции дизайна я доверился издательству «A Book Apart», серии «Библиотека специалиста» и живым отзывам с &lt;a href=&quot;http://happydev.ru/&quot;&gt;«HappyDev»&lt;/a&gt;.&lt;br /&gt;
Общая цена: &lt;a href=&quot;https://duckduckgo.com/?q=590+%2B+648+%2B+331+%3D&quot;&gt;590 + 648 + 331 = 1 569&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Побочным эффектом, составления списка стало открытие, что библиотека это недешево совсем — шутка ли, общая цена всех книг &lt;a href=&quot;https://duckduckgo.com/?q=1285+%2B+3802+%2B+3052+%2B+1041+%2B+1569&quot;&gt;10 749&lt;/a&gt; рублей, что немало, и это только немногие хорошие книги.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS.&lt;/strong&gt; Чуть не забыл, я же хотел предложить вам самим повыбирать книги на озоне; моими фаворитами были издательство «Манн, Иванов и Фербер» выпустившими русские версии книг серии «&lt;a href=&quot;http://www.ozon.ru/context/detail/id/19431034/&quot;&gt;A Book Apart&lt;/a&gt;» и русские переводы издательства «&lt;a href=&quot;http://www.ozon.ru/context/detail/id/3878486/&quot;&gt;O’Reilly&lt;/a&gt;».&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Бесполезные и может быть вредные социальные сети</title>
   <link href="/useless-social/"/>
   <updated>2012-12-25T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/useless-social</id>
   <content type="html">&lt;h1 id=&quot;section&quot;&gt;Почему я деактивировал аккаунты в двух социальных сетях&lt;/h1&gt;

&lt;p&gt;Я деактивировал учётные записи в двух сетях.&lt;br /&gt;
Это были &lt;a href=&quot;http://facebook.com/&quot;&gt;Фейсбук&lt;/a&gt; и &lt;a href=&quot;http://vk.com/&quot;&gt;ВКонтакте&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Почему?&lt;/p&gt;

&lt;p&gt;Потому, что я вообще не использовал Фейсбук в последние полгода.&lt;br /&gt;
А что насчёт Вконтакте? У меня иногда появлялись проблемы со свободным временем — я полностью тратил его на просмотр мириадов псевдосмешных картинок. Это было болезненно для меня: прокрастинировать вместо какого-либо полезного действия.&lt;/p&gt;

&lt;p&gt;Я удалился из основных социальных сетей, чтобы сохранить своё время для создания интересных вещей в интернете и чтобы следовать моей любимой цитате:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Have less. Do more. Be more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;В моём понимании, эта фраза переводится как: «Избавляйся от вещей. Делай больше. Развивайся».&lt;/p&gt;

&lt;p&gt;Тем временем, без аккаунтов в крупнейших социальных сетях, я по прежнему на связи с моими друзьями через твиттер, почту и старый добрый телефон.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Мои интересные CSS ответы на Stackoverflow</title>
   <link href="/stackoverflow-css/"/>
   <updated>2012-11-14T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/stackoverflow-css</id>
   <content type="html">&lt;h1 id=&quot;css---stackoverflow&quot;&gt;Мои интересные #CSS ответы на Stackoverflow&lt;/h1&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;csshttpstackoverflowcoma108818071057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10881807/1057730&quot;&gt;Как сделать блок в виде трапеции с помощью CSS?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://img135.imageshack.us/img135/9683/eedea21cb3bc438fb33c80c.png&quot; alt=&quot;css trapezium&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2868194&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Очень простой пример, два псевдо-элемента наклонённые с помощью &lt;code&gt;transform: skew(25deg)&lt;/code&gt;; в другую сторону псевдо-элемент наклоняется отрицательным углом &lt;code&gt;skew(-25deg)&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;textarea-----httpstackoverflowcoma109437211057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10943721/1057730&quot;&gt;Как заставить &lt;code&gt;textarea&lt;/code&gt; растянуться на всю ширину ячейки?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://dabblet.com/gist/2893830&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Так как &lt;code&gt;box-model&lt;/code&gt; у всех элементов формы не стандартные, то они имеют ограниченную ширину. Но если назначить &lt;code&gt;width: 100%;&lt;/code&gt;, то внутренние отступы созданные для человечности, растянут &lt;code&gt;textarea&lt;/code&gt; шире чем ячейка, поэтому приходится назначать &lt;code&gt;box-sizing: border-box&lt;/code&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma107520401057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10752040/1057730&quot;&gt;Как пропорционально уменьшить картинку в процентном отношении от собственных размеров картинки а не от размеров родителя?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/matmuchrapna/JH4B2/2/embedded/result/&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Первый способ банален: &lt;code&gt;scale: .5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/matmuchrapna/dhcDx/23/embedded/result/&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Второй способ более изобретателен. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#wrap {
    overflow: hidden; /* заставляет контейнер, принять размеры оригинальной картинки */
}
#wrap img.fake {
    /* Прячем оригинальную картинку, но без `display: none;` */
    float: left;
    visibility: hidden;
    width: auto;
}
#img_wrap img.normal {
    width: 50%; // так как контейнер, принял размеры оригинальной картинки, то width: 50%, создаст размеры этой картинки, относительно оригинальной
}
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma107286811057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10728681/1057730&quot;&gt;Как сделать резиновую кнопку с острым углом с внутреней и внешней тенью&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://img832.imageshack.us/img832/8258/664d7b5656434db68cbee8b.png&quot; alt=&quot;css button&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2777220&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://i.stack.imgur.com/Huy3r.png&quot; alt=&quot;css button flex&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2782854&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо резиновой кнопки&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Кнопка делается в шесть шагов:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Создайте элемент &amp;#8216;.triangle&amp;#8217; - он будет обёрткой для настоящего треугольника&lt;/li&gt;
  &lt;li&gt;Назначьте этому элменту &lt;code&gt;position: absolute;&lt;/code&gt;, Зафиксируйте &lt;code&gt;width&lt;/code&gt; и &lt;code&gt;height&lt;/code&gt;:&lt;br /&gt;
Красный цвет, только для демонстрации 
![step 4][5]&lt;/li&gt;
  &lt;li&gt;Создайте большой квадратый элемент &amp;#8216;.triangle::before&amp;#8217; — он станет настоящим треугольником после 6 шага&lt;/li&gt;
  &lt;li&gt;Поверните .triangle::before&amp;#8217; на 45 градусов (&lt;code&gt;transform: rotate(45deg)&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Добавьте внутренних теней.&lt;br /&gt;
Результат уже похож, на то, что нам нужно.&lt;br /&gt;
![step3][6]&lt;/li&gt;
  &lt;li&gt;Добавьте &lt;code&gt;overflow: hidden;&lt;/code&gt; к обёртке треугольника  &lt;strong&gt;&lt;em&gt;Та-дам!&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;
![step 5][7]&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;На внутреннем треугольнике &lt;code&gt;.tag_inner&lt;/code&gt; повторяется тот же трюк, но &lt;code&gt;box-shadow&lt;/code&gt; должна уже быть обычной.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma108794391057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10879439/1057730&quot;&gt;Как сделать блок прозрачным, без создания того же эффекта для вложенных элементов?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://i.stack.imgur.com/9luI6.png&quot; alt=&quot;css rgba&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2867543&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Так как &lt;code&gt;opacity: .2&lt;/code&gt; назначать было нельзя, так как не нужен был эффект на вложенных элементах. Также не получается использовать &lt;code&gt;background: rgba(0, 0, 0, .5)&lt;/code&gt; для полупрозрачного цвета в качестве фона, так как вопрошающий спрашивает о фоновой картинке. Единственное, что остаётся так это, использовать абсолютно спозицинированный псевдо-элемент с &lt;code&gt;opacity: 0.2&lt;/code&gt; и нужно фоновой картинкой.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;font-sizehttpstackoverflowcoma110108161057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/11010816/1057730&quot;&gt;Как изменить высоту букв не меняя &lt;code&gt;font-size&lt;/code&gt;?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://i.stack.imgur.com/CzPN0.png&quot; alt=&quot;css scale without font-size&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2922712&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Несмотря на всю абсурдность вопроса и мнимую невыполнимость. Решается задача с помощью простеёших &lt;code&gt;scaleY(0.9)&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma110128431057730-2httpstackoverflowcoma105618121057730-3httpstackoverflowcoma110100151057730&quot;&gt;Как менять размера текста в зависимости от разрешения? &lt;a href=&quot;http://stackoverflow.com/a/11012843/1057730&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/10561812/1057730&quot;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/11010015/1057730&quot;&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/matmuchrapna/2tQ5T/1/embedded/result/&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;В этом вопросе, есть все предпоссылки к адаптивной типографике.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;html { font-size: 62.5%; }
body { font-size: 1em;}

@media (max-width: 300px) {
    html { font-size: 70%; }
}

@media (min-width: 500px) {
    html { font-size: 80%; }
}

@media (min-width: 700px) {
    html { font-size: 120%; }
}

@media (min-width: 1200px) {
    html { font-size: 200%; }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Весь трюк в относительных единицах измерения размера текста — &lt;code&gt;em&lt;/code&gt;. Но конструкция из вложенных элементов, создаёт очень сложную ситуацию для поддержки этого типографского решения, ввиду того, что размеры текста задаются относительно родительского элемента — и в конце концов, у каждого разработчика появляются ужасные дроби в стилях. Спустя какое-то время я узнал про &lt;a href=&quot;http://snook.ca/archives/html_and_css/font-size-with-rem&quot;&gt;способ&lt;/a&gt; задания &lt;code&gt;font-size&lt;/code&gt; через &lt;code&gt;rem&lt;/code&gt; — тоже относительные, но относительно корневого значения  &lt;code&gt;font-size&lt;/code&gt;. То есть примерно так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;html { font-size: 62.5%; }
body { font-size: 1em;}

.lead {
    font-size: 14px; // фоллбек для IE8-
    font-size: 1.4rem;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma116682501057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/11668250/1057730&quot;&gt;Смена цвета меню по диагонали&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://i.stack.imgur.com/taSvG.png&quot; alt=&quot;css diagonal inverse gradient&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;http://i.stack.imgur.com/MqL6V.png&quot; alt=&quot;css diagonal inverse gradient&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://dabblet.com/gist/3181530&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Главный трюк этого ответа заключается в строчках:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Они позволяют контейнеру передать свой фон тексту внутри него и ограничить этот фон областью текста.&lt;/p&gt;

&lt;p&gt;После осознания приёма, становится всё очень просто.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Делаем области страницы и меню одинаковыми по площади&lt;/li&gt;
  &lt;li&gt;Создаём наклонный градиент для фона, и повторяем его инвертированную копию для меню.&lt;/li&gt;
  &lt;li&gt;Та-дам!&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;css-httpstackoverflowcoma115753671057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/11575367/1057730&quot;&gt;Чем лучше сортировать свой CSS код?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://i.imgur.com/3uA59.png&quot; alt=&quot;CSScomb&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Дань признательности и уважения &lt;a href=&quot;https://twitter.com/miripiruni&quot;&gt;Славе Олиянчуку&lt;/a&gt; за его инструмент &lt;a href=&quot;http://csscomb.ru/&quot;&gt;CSScomb&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma106250511057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10625051/1057730&quot;&gt;Абсолютное позиционирование относительно соседнего элемента?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Люблю такие вопросы, так как для того, чтобы ответить на них приходится искать относящиеся к вопросу разделы спецификации и стараться интерпретировать в свете вопроса. Не зря я хотел &lt;a href=&quot;/specs/&quot;&gt;распечатать спецификации&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma109141261057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10914126/1057730&quot;&gt;Можно ли сделать блок семантичными вкладками?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://dabblet.com/gist/2881519&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Это решение уже много раз обсуждалось, и мне кажется кроме &lt;strong&gt;pureCSS&lt;/strong&gt; и доступности имеет очень много ограничений на использование, так как идеально подходит для вкладок с фиксированным по размерам контейнером для контента, а для всего остального — с натяжкой.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma109261961057730-2httpstackoverflowcoma133564011057730-3httpstackoverflowcoma108961251057730-4httpstackoverflowcoma109032211057730&quot;&gt;Как вертикально и горизонтально отцентровать блок? &lt;a href=&quot;http://stackoverflow.com/a/10926196/1057730&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/13356401/1057730&quot;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/10896125/1057730&quot;&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/10903221/1057730&quot;&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Все мы пользуемся &lt;code&gt;.wrap {width: 960px; margin: 0 auto;}&lt;/code&gt;. Это позволяет браузеру создать равномерный горизонтальный отступ с каждой из сторон и контейнер получается отцентрированным по горизонтали; этот же трюк можно использовать и для вертикальной позиционирования.&lt;/p&gt;

&lt;p&gt;Главный трюк в том, что в нормальный поток обычных элементов направлен сверху вниз, поэтому &lt;code&gt;margin-top: auto&lt;/code&gt; установлено в ноль. Абсолютно спозиционированные элементы, получают возможность распределять свободное пространство в всех направлениях.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.div {  
    width: 100px;  // может быть 
    height: 100px; //           любым числом

    position: absolute; // абсолютное позиционирование
    top:0;     // удаление отступов
    right: 0;  // удаление отступов
    bottom: 0; // удаление отступов
    left: 0;   // удаление отступов

    margin: auto; // включение равномерного распределения свободного 
                  // пространства между границами контейнера и блока
}
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;fieldset-----filedsethttpstackoverflowcoma110182191057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/11018219/1057730&quot;&gt;Возможно ли написать стили для &lt;code&gt;fieldset&lt;/code&gt; идущим прямо за другим &lt;code&gt;filedset&lt;/code&gt;?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://dabblet.com/gist/2924668&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Очередное обращение к спецификации, как к доверенному &lt;a href=&quot;http://www.w3.org/TR/CSS2/selector.html#pattern-matching&quot;&gt;источнику по селекторам&lt;/a&gt;. В данном демо раскрывается потенциал селекторов &lt;code&gt;+&lt;/code&gt; и &lt;code&gt;~&lt;/code&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma110273481057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/11027348/1057730&quot;&gt;Как подсветить блок, если нажата ссылка, ведущая на него&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://dabblet.com/gist/2928193&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Введение в селектор &lt;code&gt;:target&lt;/code&gt; и CSS анимации.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;input---100----1httpstackoverflowcoma112384901057730-2httpstackoverflowcoma112386991057730&quot;&gt;Как заставить &lt;code&gt;input&lt;/code&gt; растянуться на 100% от ширины родителя? &lt;a href=&quot;http://stackoverflow.com/a/11238490/1057730&quot;&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/a/11238699/1057730&quot;&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/matmuchrapna/uaKZn/1/embedded/result/&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Лучший способ выполнить поставленную задачу с поддержкой IE7.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;border-radius------httpstackoverflowcoma101007631057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10100763/1057730&quot;&gt;Хром игнорирует &lt;code&gt;border-radius&lt;/code&gt; если дочерние элементы имеют относительное позиционирование&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Немножко евангелизма. Как оказалось главная проблема автора вопроса была в том, что он использовал неправильный порядок префиксов.&lt;br /&gt;
Такой порядок правильный:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-webkit-property: value;
   -moz-property: value;
    -ms-property: value;
     -o-property: value;
        property: value;
&lt;/code&gt;&lt;/pre&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;httpstackoverflowcoma105484181057730&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/a/10548418/1057730&quot;&gt;Создание внутренней рамки&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;http://i.stack.imgur.com/78sls.png&quot; alt=&quot;double inset box-shadow css&quot; /&gt;
&lt;a href=&quot;http://dabblet.com/gist/2658508&quot; data-toggle=&quot;modal&quot; data-target=&quot;#iframe-modal&quot;&gt;Посмотреть демо&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Все остальные волонтёры предлагали использовать вложенные элементы. Хотя можно спокойно обойтись двойной внутренней тенью:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;box-shadow:
        0 0 0  9px  #ffd28a inset,
        0 0 0 11px  #FFFFFF inset;
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>Как использовать Jekyll с плагинами на github pages</title>
   <link href="/jekyll-plugins-gh-pages/"/>
   <updated>2012-11-12T00:00:00-08:00</updated>
   <id>http://vstarkov.ru/jekyll-plugins-gh-pages</id>
   <content type="html">&lt;h1 id=&quot;jekyll----github-pages&quot;&gt;Как использовать Jekyll с плагинами на github pages?&lt;/h1&gt;

&lt;p&gt;Предыдущая &lt;a href=&quot;/ghpages-sync/&quot;&gt;заметка&lt;/a&gt; рассказывала про то, как избежать рутины при хостинге своего статичного блога. В ней всё хорошо и у вас не будет проблем, пока вы не захотите расширить функциональность своего «Jekyll» сайта. А это потребуется даже для обычных тегов и категорий; «Jekyll» — очень простой движок. После прикручивания дополнительной функциональности и деплоя сайта на гитхаб. Вы обнаружите, что сайт не работает.&lt;/p&gt;

&lt;h3 id=&quot;github-pages&quot;&gt;Проблемы с github pages&lt;/h3&gt;

&lt;p&gt;Первые же ссылки в гугл поиске выдают ссылки объсяняющие, что github pages не работают с jekyll плагинами. Я подозреваю, что это сделано в целях безопасности.&lt;/p&gt;

&lt;p&gt;Ссылки, которые помогут нам разобраться с решением проблемы.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://help.github.com/articles/using-jekyll-with-pages&quot;&gt;Using Jekyll with Pages&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://charliepark.org/jekyll-with-plugins/&quot;&gt;Jekyll + Plugins + Github + You&lt;/a&gt; via &lt;a href=&quot;http://charliepark.org/&quot;&gt;charlie park&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://edhedges.com/blog/2012/07/30/jekyll-with-plugins-hosted-on-github-pages/&quot;&gt;Jekyll (with plugins!) hosted on GitHub Pages&lt;/a&gt; via &lt;a href=&quot;http://edhedges.com/&quot;&gt;Eddie Hedges&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://arademaker.github.com/blog/2011/12/01/github-pages-jekyll-plugins.html&quot;&gt;GitHub Pages and Jekyll plugins&lt;/a&gt; via &lt;a href=&quot;http://arademaker.github.com/&quot;&gt;Alexandre Rademaker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;section&quot;&gt;Решение Чарли Пака&lt;/h4&gt;

&lt;p&gt;Первое решение предлагает разделить блог на две части, то есть поддерживать два разных репозитория — один для исходников блога, второй для результата генерации джекилла. Это жутко неудобно, да и раздражать будет. Другие рещения на порядок лучше и поэтому это решение я не буду приводить здесь.&lt;/p&gt;

&lt;h4 id=&quot;section-1&quot;&gt;Решение Эдди Хеджеса&lt;/h4&gt;

&lt;p&gt;Это решение не такое понятное сразу. Оно предлагает сделать объект коммита, который будет содержать историю только одной папки &lt;code&gt;_site&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;echo 'description of what we are doing' | git commit-tree dev^{tree}:_site
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Эта комманда выведет &lt;strong&gt;id&lt;/strong&gt; этого коммита, и дальше по этому &lt;strong&gt;id&lt;/strong&gt; обновим выбранную для github pages ветку &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;git update-ref refs/heads/master COMMIT_ID
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;После этого надо убедиться, что ветка &lt;code&gt;master&lt;/code&gt; имеет только нужные нам файлы:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Как видно, это то, что нам нужно. Так как мы не определили родителя коммита, то вынуждены сделать форсированный пуш на сервер:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git push -f origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Но можно, не делать форсированный пуш, если указать родителя коммита в самой первое команде:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ echo 'description of what we are doing' | git commit-tree dev^{tree}:_site -p $(cat .git/refs/heads/master)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;После этого всё можно оптимизировать до одной строки&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git update-ref refs/heads/master $(echo 'Add commit message here!' | git commit-tree dev^{tree}:_site -p $(cat .git/refs/heads/master))
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&quot;section-2&quot;&gt;Решение Александра Рэйдмэйкера&lt;/h4&gt;

&lt;p&gt;На мой взгляд самое лаконичное решение.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$git checkout source
// делайте всё, что вам угодно
$ git status / git add / git commit
$ jekyll
$ checkout master
$ cp -r _site/* . &amp;amp;&amp;amp; rm -rf _site/ &amp;amp;&amp;amp; touch .nojekyll
$ git status &amp;gt; git add &amp;gt; git commit
$ git push -all origin
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Этот способ привлекателен тем, что у вас только один репозиторий, а для разных версий сайта вы используете, также как и раньше — разные ветки.&lt;/p&gt;

&lt;p&gt;Самое важное в этой строке: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cp -r _site/* . &amp;amp;&amp;amp; rm -rf _site/ &amp;amp;&amp;amp; touch .nojekyll
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Эта комманда составная и состоит из следующих более простых комманд, разделенных знаком &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cp -r _site/* . // скопировали всё из подпапки в папку родительского уровня
$ rm -rf _site/ // удаляет содержимое папки *_site*
$ touch .nojekyll // создаёт файл, который сообщает гитхабу не запускать джекилл на своём сервере с помощью посткоммит хука.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Александр предлагает создать две ветки: &lt;code&gt;source&lt;/code&gt; для исходников блога, и &lt;code&gt;master&lt;/code&gt; для результатов работы Джекилла.&lt;/p&gt;

&lt;h3 id=&quot;section-3&quot;&gt;Поиск решения&lt;/h3&gt;

&lt;p&gt;В моём случае, я осознанно использую другую конфигурацию. &lt;code&gt;master&lt;/code&gt; — ветка для исходников блога, так как эта ветка по умолчанию главная, а с ней чаще всего и приходится работать, поэтому она и остаётся главной. Для блога я использую зарезервиронную гитхабом ветку &lt;code&gt;gh-pages&lt;/code&gt;. Для подобной конфигурации, я и приведу окончательное решение.&lt;/p&gt;

&lt;p&gt;Убедитесь, что вы в &lt;code&gt;master&lt;/code&gt; ветке&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git branch
  gh-pages
* master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Если маркер стоит напротив другой ветки, то перейдите в master&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В решении Рэйдмэйкера, мне казалось странным запускать джекилл каждый раз, когда надо что-то закоммитить, можно же запустить его один раз в режиме &lt;code&gt;--auto&lt;/code&gt; — и он будет постоянно сам перегенерировать контент, обнаруживая изменения. Во-вторых, после комманды&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ cp -r _site/* . &amp;amp;&amp;amp; rm -rf _site/ &amp;amp;&amp;amp; touch .nojekyll
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В папке подготовленной для отправления на сервер, как готовый сайт, оставалось много лишнего материала относящегося к генератору сайта, что с одной стороны приемлемо, но  сдругой стороны не красиво.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git status // посмотрите, что надо закоммитить
$ git add // добавьте это в коммит
$ git commit // закоммитьте
$ git checkout gh-pages &amp;amp;&amp;amp; git merge master // синхронизируем с главной веткой,
$ shopt -s extglob // включаем расширенный шелл
$ rm !(_site) -r // удаляем все папки, кроме _site
$ mv _site/* ./ // перемещаем сгенерированный сайт в корень папки.
$ rm _site // удаляем папку для генерации
$ git add .
$ git commit -m 'converted to flat site' 
$ git checkout master // перемещаемся в мастер ветку
$ git push --all // пушим все изменения вместе со всеми ветками на сервер
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;section-4&quot;&gt;Окончательное решение&lt;/h2&gt;

&lt;p&gt;Теперь, рассмотрим, что можно оптимизировать до одной строчки.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git status // посмотрите, что надо закоммитить
$ git add // добавьте это в коммит
$ git commit // закоммитьте
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Эти строчки, всегда придётся делать руками — их не трогаем.&lt;br /&gt;
А всё остальное как мы видим можно сократить.&lt;/p&gt;

&lt;p&gt;Первый шаг:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout gh-pages &amp;amp;&amp;amp; git merge master 
$ shopt -s extglob &amp;amp;&amp;amp; rm !(_site) -r
$ mv _site/* ./ &amp;amp;&amp;amp; rm _site
$ git commit -am 'converted to flat site' 
$ git checkout master &amp;amp;&amp;amp; git push --all
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;git commit -am 'smth'&lt;/code&gt; === &lt;code&gt;git add . &amp;amp;&amp;amp; git commit -m 'smth'&lt;/code&gt;&lt;br /&gt;
Второй шаг:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout gh-pages &amp;amp;&amp;amp; git merge master  
$ shopt -s extglob &amp;amp;&amp;amp; rm !(_site) -r &amp;amp;&amp;amp; mv _site/* ./ &amp;amp;&amp;amp; rm _site -r
$ git commit -am 'converted to flat site' &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git push --all
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Окончательный шаг:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git checkout gh-pages &amp;amp;&amp;amp; git merge master &amp;amp;&amp;amp; shopt -s extglob &amp;amp;&amp;amp; rm !(_site) -r &amp;amp;&amp;amp; mv _site/* ./ &amp;amp;&amp;amp; rm _site -r &amp;amp;&amp;amp; git commit -am 'converted to flat site' &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git push --all
&lt;/code&gt;&lt;/pre&gt;

</content>
 </entry>
 
 <entry>
   <title>Meslo</title>
   <link href="/meslo/"/>
   <updated>2012-10-30T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/meslo</id>
   <content type="html">&lt;h1 id=&quot;meslo&quot;&gt;Meslo&lt;/h1&gt;

&lt;p&gt;Полгода назад я наткнулся на восторженный комментарий по поводу шрифта &lt;a href=&quot;https://github.com/andreberg/Meslo-Font&quot;&gt;Meslo&lt;/a&gt;. Попробовал его и сейчас не могу понять, как я использовал что-то другое раньше.&lt;/p&gt;

&lt;p&gt;Meslo — изменённая версия шрифта Menlo от компани Apple, который, в свою очередь, создан из Bitstream Vera Sans Mono.&lt;/p&gt;

&lt;p&gt;Основными претензиями автора шрифта к родительскому Menlo были стандартный интерлиньяж (межстрочное расстояние) и горизонтальное положение звёздочки. Поэтому Андре эти недочёты и выложил своё творение на гитхаб.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cледите за первой строчкой текста:&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;span10 neg-offset1&quot;&gt;
    &lt;div class=&quot;fotorama&quot; data-width=&quot;100%&quot; data-autoplay=&quot;3000&quot; data-fullscreenicon=&quot;true&quot;&gt;
        &lt;img title=&quot;Meslo&quot; src=&quot;../img/meslo-html-sample.png&quot; alt=&quot;Meslo&quot; /&gt;
        &lt;img title=&quot;Consolas&quot; src=&quot;../img/consolas-html-sample.png&quot; alt=&quot;Consolas&quot; /&gt;
        &lt;img title=&quot;Courier New&quot; src=&quot;../img/courier-new-html-sample.png&quot; alt=&quot;Courier New&quot; /&gt;
        &lt;img title=&quot;Lucida Console&quot; src=&quot;../img/lucida-console-html-sample.png&quot; alt=&quot;Lucida Console&quot; /&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Из этих четырёх конкурентов я выбрал Meslo, по следующим причинам:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Courier New отпадает сразу из-за проблем со сглаживанием и страшных засечек.&lt;/li&gt;
  &lt;li&gt;Lucida Console отталкивает от себя склеившимися строками в элементах списка тем, что никак не выделяет ноль, что непростительно для шрифта, который используют для кода.&lt;/li&gt;
  &lt;li&gt;Consolas имеет слишком тяжёлые буквы «g» и «r» и более слабый кернинг (межбуквенное расстояние), чем у Meslo. Более того, он проприетарный для платформы Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Я благодарен шрифту Meslo за потрясающий кернинг, откалиброванное межстрочное расстояние, выделенный ноль и превосходный баланс черного и белого в типографском рисунке.&lt;/p&gt;

&lt;hr /&gt;
</content>
 </entry>
 
 <entry>
   <title>local delete/edit, incoming delete upon update</title>
   <link href="/svn-conflict/"/>
   <updated>2012-10-11T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/svn-conflict</id>
   <content type="html">&lt;h1 id=&quot;local-edit-incoming-delete-upon-update-&quot;&gt;Как разрешить «local edit, incoming delete upon update» ?&lt;/h1&gt;

&lt;p&gt;Сегодня столкнулся с такой проблемой, и даже не знал почему она возникла.&lt;br /&gt;
Выглядить она примерно так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;!     C .htaccess
      &amp;gt;   local edit, incoming delete upon update
!     C foo
      &amp;gt;   local delete, incoming delete upon update
!     C bar
      &amp;gt;   local edit, incoming delete upon update
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Так происходит из-за того, что файл (к примеру .htaccess) был удалён из репозитория, а я не знал об этом и редактировал или даже удалил этот файл локально — именно это и не нравится SVN. Ниже я приведу помогший мне &lt;a href=&quot;http://yuechengshao.blogspot.com/2012/01/svn-local-deleteedit-incoming-delete.html&quot;&gt;способ&lt;/a&gt; разрешить конфликт версий (не забывайте про бэкапы).&lt;/p&gt;

&lt;p&gt;В рабочей директории, пересоздайте конфликтный файл:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ touch foo
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Откатите этот файл (это его удалит)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ svn revert foo
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Теперь удалите его&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ rm foo
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Это победа! Конфликта нет.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ svn st
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;section&quot;&gt;Другой способ разрешения конфликта&lt;/h2&gt;

&lt;p&gt;&amp;#8217;$ svn resolve &amp;#8211;accept=working PATH&amp;#8217; взято отсюда &lt;a href=&quot;http://stackoverflow.com/a/4318394/1057730&quot; title=&quot;svn: how to resolve “local edit, incoming delete upon update” message&quot;&gt;svn: how to resolve “local…&lt;/a&gt; &lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Как синхронизировать 'github pages' c 'master' веткой</title>
   <link href="/ghpages-sync/"/>
   <updated>2012-10-11T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/ghpages-sync</id>
   <content type="html">&lt;h1 id=&quot;github-pages-c-master-&quot;&gt;Как синхронизировать &amp;#8216;github pages&amp;#8217; c &amp;#8216;master&amp;#8217; веткой&lt;/h1&gt;

&lt;p&gt;После моего переезда с Tumblr на &lt;a href=&quot;http://jekyllrb.com/&quot; title=&quot;transform your text into a monster&quot;&gt;Jekyll&lt;/a&gt; стала очевидной проблема двух веток и их синхронизация, так как для хостинга сайта нужно иметь сайт в ветке gh-pages, но в тоже время от master никак не избавишься. И хочется всё таки коммитить посты в master, а gh-pages ветка сама обновлялась и отправлялась на сервер.&lt;/p&gt;

&lt;p&gt;Существуют несколько очень похожих путей решения проблемы: &amp;#8216;git rebase master&amp;#8217; или &amp;#8216;git merge master&amp;#8217;. Первый способ &lt;a href=&quot;http://lea.verou.me/2011/10/easily-keep-gh-pages-in-sync-with-master/&quot; title=&quot;Easily keep gh-pages in sync with master&quot;&gt;описан&lt;/a&gt; в блоге у Lea Verou. Второй способ по сути заключается в замене &amp;#8216;git rebase master&amp;#8217; на &amp;#8216;git merge master&amp;#8217;. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git add .
$ git status // посмотреть какие изменения произошли
$ git commit -m 'Some descriptive commit message'
$ git push origin master
$ git checkout gh-pages // сменить ветку на gh-pages
$ git rebase master // синхронизировать gh-pages c master (git merge master)
$ git push origin gh-pages // отправить ветку на сервер.
$ git checkout master // вернуться в master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В этом решении мне не понравилось большое количество строк, выполнении &amp;#8216;git push&amp;#8217; целых два раза для одного коммита. Но самое важное, это я понял механизм работы синхронизации. Ещё одну идею мне подсказал небольшой &lt;a href=&quot;http://get.inject.io/n/XxsZ6RE7&quot; title=&quot;Git post-commit hook to keep master and gh-pages branch in sync&quot;&gt;пост-коммит хук&lt;/a&gt; упомянутый в комментариях к посту Lea Verou.&lt;/p&gt;

&lt;p&gt;После этого я написал своё элегантное (мне кажется):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ git add . &amp;amp;&amp;amp; git commit -m 'Some descriptive commit message'
$ git checkout gh-pages &amp;amp;&amp;amp; git merge master &amp;amp;&amp;amp; git checkout master &amp;amp;&amp;amp; git push --all
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Первая строчка добавляет в коммитит все модифицированные файлы, и коммитит все файлы — это чаще всего и надо сделать когда добавляешь пост в блог. Вторая строчка объединяет в себе четыре команды (предполагается, что в находитесь в master): смена ветки на gh-pages, объединение с master, возврат в мастер, и отправление обеих веток на сервер.&lt;br /&gt;
И также я решил использовать &amp;#8216;git merge master&amp;#8217; так как он созраняет историю коммитов.&lt;/p&gt;

&lt;p&gt;Спасибо интернету за столь элегантное решение проблемы.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Спецификации — версии для печати</title>
   <link href="/specs/"/>
   <updated>2012-07-23T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/specs</id>
   <content type="html">&lt;h1 id=&quot;section&quot;&gt;Спецификации — версии для печати&lt;/h1&gt;

&lt;p&gt;Однажды я захотел иметь распечатанные версии спецификаций, чтобы читать их когда у меня есть свободное время. После этого я обнаружил &lt;a href=&quot;http://webmasters.stackexchange.com&quot;&gt;webmasters.stackexchange&lt;/a&gt; и соответсвующий вопрос про &lt;a href=&quot;http://webmasters.stackexchange.com/questions/14676/what-documentation-exists-for-html-css-and-javascript&quot;&gt;спецификации&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Затем я нашёл ссылки на спецификации &lt;a href=&quot;http://www.w3.org/TR/CSS21/&quot;&gt;CSS 2.1&lt;/a&gt;, &lt;a href=&quot;http://www.w3.org/TR/html401/&quot;&gt;HTML 4&lt;/a&gt;, &lt;a href=&quot;http://dev.w3.org/html5/spec/single-page.html&quot;&gt;HTML5 w3&lt;/a&gt; и &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/&quot;&gt;HTML 5 WHATWG&lt;/a&gt;. Оказывается каждая из стабильных спецификаций (CSS 2.1 и HTML 4) имеют несколько версий для печати.
&lt;img src=&quot;http://i.stack.imgur.com/B2X2Z.png&quot; alt=&quot;enter image description here&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Список спецификация для печати&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.w3.org/TR/CSS21/css2.txt&quot;&gt;CSS 2.1 txt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.w3.org/TR/CSS21/css2.pdf&quot;&gt;CSS 2.1 pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.w3.org/TR/html401/html40.txt&quot;&gt;HTML 4.01 txt&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.w3.org/TR/html401/html40.pdf.gz&quot;&gt;HTML 4.01 gzipped pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/&quot;&gt;HTML 5 WHATWG single-page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dev.w3.org/html5/spec/single-page.html&quot;&gt;HTML 5 W3.org single page&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.google.com/open?id=0Bz1IKTLF1xFPbVg0ZE9nSDl3NzA&quot;&gt;HTML 5 WHATWG (сконвертировано в pdf и загружено в Google Drive)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://docs.google.com/open?id=0Bz1IKTLF1xFPUkJ3UEd4TE9iMVE&quot;&gt;HTML 5 W3.org (сконвертировано в pdf и загружено в Google Drive)&lt;/a&gt;&lt;/p&gt;

  &lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>CSS советы и рекомендации</title>
   <link href="/css-guidelines/"/>
   <updated>2012-07-23T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/css-guidelines</id>
   <content type="html">&lt;p&gt;&lt;strong&gt;Дисклеймер:&lt;/strong&gt;&lt;br /&gt;
&amp;lt;p class=&quot;text-warning&quot;&amp;gt;
    Данный документ является переводом первой версии &lt;a href=&quot;https://github.com/csswizardry/CSS-Guidelines&quot;&gt;рекоммендаций&lt;/a&gt; от &lt;a href=&quot;http://csswizardry.com/&quot;&gt;Гарри Робертса&lt;/a&gt;. После публикации в перевод были внесены изменения для синхронизации с оригинальным репозиторием, из-за чего &lt;a href=&quot;https://github.com/matmuchrapna/CSS-Guidelines&quot;&gt;актуальную версию&lt;/a&gt; перевода можно найти в моём аккаунте на гитхабе.&amp;lt;/p&amp;gt;&lt;/p&gt;

&lt;h1 id=&quot;css---&quot;&gt;CSS советы и рекомендации&lt;/h1&gt;

&lt;p&gt;В начале каждого CSS файла создаётся и поддерживается список содержимого документа, указывающий на разделы файла стилей. Название разделов имеет префикс из &lt;code&gt;$&lt;/code&gt;, что означает поиск по фразе &lt;code&gt;$[раздел]&lt;/code&gt; вернёт только блок относящийся к секции.&lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Синтаксис и форматирование&lt;/h2&gt;

&lt;p&gt;Мы используем многострочную запись для улучшения последующей работы с системой контроля версий (выявление различий сделанных в одной строке — это тихий ужас), мы упорядочиваем логические свойства и селекторы по группам, а &lt;strong&gt;не&lt;/strong&gt; по алфавиту.&lt;/p&gt;

&lt;p&gt;Мы пишем селекторы в нижнем регистре и разделяем слова дефисом: &lt;code&gt;.thisIsBad {}&lt;/code&gt;, &lt;code&gt;.this_is_also_bad {}&lt;/code&gt; but &lt;code&gt;.this-is-correct {}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Всегда заканчивайте строку последнего правила в селекторе символом &amp;#8216;;&amp;#8217;, чтобы избежать возможных конфликтов и синтаксических ошибок во время всего использования документа.&lt;/p&gt;

&lt;p&gt;Для примера предпочитаемого форматирования и структуры CSS просто посмотрите файл &lt;a href=&quot;http://github.com/csswizardry/vanilla/blob/master/css/style.css&quot;&gt;github.com/csswizardry/vanilla/&amp;hellip;/style.css&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://coding.smashingmagazine.com/2011/08/26/writing-css-for-others&quot;&gt;coding.smashingmagazine.com/&amp;hellip;/writing-css-for-others&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://jasoncale.com/articles/5-dont-format-your-css-onto-one-line&quot;&gt;jasoncale.com/&amp;hellip;/5-dont-format-your-css-onto-one-line&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Комментарии&lt;/h2&gt;

&lt;p&gt;Комментируйте так много и так часто, насколько вы вообще можете это делать. Если это может понадобиться, то включите в комментарий блок кода разметки, помогающий понять в каком контексте находятся стили.&lt;/p&gt;

&lt;p&gt;Будьте многословны, не стесняйтесь: CSS будет уменьшен при выкладывании на рабочий сервер.&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Отступы&lt;/h2&gt;

&lt;p&gt;Для каждого уровня вложенности разметки пытайтесь делать соответствующие отступы в стилях. Например: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.nav {}
    .nav li {}
        .nav a {}
        
.promo {}
    .promo p {}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Также пишите вендорные префиксы так, чтобы значения были в одном столбике, то есть:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-webkit-border-radius: 4px;
   -moz-border-radius: 4px;
        border-radius: 4px;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Это позволяет нам сразу увидеть, что все свойства установлены в &lt;code&gt;4px&lt;/code&gt;, но что более важно — так это то, что если наш редактор поддерживает режим редактирования столбцов, то мы можем менять значение сразу во всей колонке значений в один момент.&lt;/p&gt;

&lt;h2 id=&quot;section-3&quot;&gt;Создание компонента&lt;/h2&gt;

&lt;p&gt;При создании нового компонента пишите разметку &lt;strong&gt;до того&lt;/strong&gt;, как напишите хоть одну строчку CSS. Это позволяет увидеть какие свойства наследовались и избежать повторного применения избыточных стилей.&lt;/p&gt;

&lt;h2 id=&quot;oocss&quot;&gt;OOCSS&lt;/h2&gt;

&lt;p&gt;При создании компонента старайтесь не повторять себя, также не упускайте из виду принципы OOCSS.&lt;/p&gt;

&lt;p&gt;Вместо того, чтобы плодить множество уникальных компонентов, попытайтесь распознать повторяющиеся шаблоны дизайна и создать из них абстракции; cверстайте эти абстракции, а затем используйте уточняющие классы для расширения их внешнего оформления.&lt;/p&gt;

&lt;p&gt;Если вы вынуждены создать новый компонент, то разделите его на структуру и декоративное оформление; сверстайте структуру используя общие классы, тем самым давая возможность использования структуры компонента в других местах вашего проекта, и затем, используя более специфичные классы, оформите компонент в соответствии с требованиями дизайна.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2011/09/the-nav-abstraction&quot;&gt;csswizardry.com/&amp;hellip;/the-nav-abstraction&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code&quot;&gt;stubbornella.org/&amp;hellip;/the-media-object-saves-hundreds-of-lines-of-code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-4&quot;&gt;Раскладка&lt;/h2&gt;

&lt;p&gt;Все компоненты должны быть полностью независимы от ширины; ваши компоненты должны оставаться резиновыми и их ширина должна контролироваться системой модульных сеток.&lt;/p&gt;

&lt;p&gt;Высота &lt;strong&gt;никогда&lt;/strong&gt; не должна назначаться элементам. Высота применяется только на сущности, имевшие размеры &lt;em&gt;до того&lt;/em&gt;, как попали на сайт (например, картинки и спрайты). Никогда не устанавливайте высоту на &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;ul&lt;/code&gt;, &lt;code&gt;div&lt;/code&gt;, вообще что угодно. Вы можете добить желаемого эффекта с помощью гораздо более гибкого &lt;code&gt;line-height&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Систему модульных сеток следует рассматривать, как структуру сайта. Вы создаёте структуру сайта, а затем наполняете её информацией.&lt;/p&gt;

&lt;p&gt;Вы никогда не должны применять никаких стилей на ячейку сетки, так как они служат только целям разметки. Никогда, ни при каких обстоятельствах не применяйте свойства меняющие поведение &lt;code&gt;box-model&lt;/code&gt; к ячейкам сетки.&lt;/p&gt;

&lt;h2 id=&quot;section-5&quot;&gt;Размеры&lt;/h2&gt;

&lt;p&gt;Мы используем различные методы для задания размеров интерфейса: проценты, пиксели, &lt;code&gt;ems&lt;/code&gt;, &lt;code&gt;rems&lt;/code&gt; или вообще не задаем единицы измерения.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2011/12/measuring-and-sizing-uis-2011-style&quot;&gt;csswizardry.com/&amp;hellip;/measuring-and-sizing-uis-2011-style&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-6&quot;&gt;Размеры текста&lt;/h2&gt;

&lt;p&gt;Мы используем &lt;code&gt;rems&lt;/code&gt; (c запасным решением с помошью пикселей только для старых браузеров). Категорически отказывайтесь от пикселей в &lt;code&gt;font-size&lt;/code&gt; как это делают обычно. Мы определяем &lt;code&gt;line-height&lt;/code&gt; без определения размерностей везде, &lt;strong&gt;кроме&lt;/strong&gt; тех случаев когда позиционируем текст в заранее известной высоте.&lt;/p&gt;

&lt;p&gt;Мы избегаем многоразового определения &lt;code&gt;font-size&lt;/code&gt;; для достижения той же цели мы используем предопределённые размеры шрифтов разбитые по классам. Мы можем переделать оригинальные классы вместо определения &lt;code&gt;font-size&lt;/code&gt; снова и снова.&lt;/p&gt;

&lt;p&gt;Перед тем как задать элементу &lt;code&gt;font-size&lt;/code&gt;, убедитесь что класс с заданным значением ещё не существует.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2012/02/pragmatic-practical-font-sizing-in-css&quot;&gt;csswizardry.com/&amp;hellip;/pragmatic-practical-font-sizing-in-css&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-7&quot;&gt;Сокращённая запись&lt;/h2&gt;

&lt;p&gt;Это может показаться заманчивым использовать правила похожие на &lt;code&gt;background: red;&lt;/code&gt; но делая это, мы на самом деле говорим: «Я хочу, чтобы фоном была не одна картинка скролящуюся, спозиционированную вверх и влево и повторяющуюся по X и Y и чтобы цвет фона был красный». В девяти случаях из десяти это не высовет никаких проблем, но в 10% обязательно доставит достаточно неприятностей, чтобы не использовать сокращенные записи. Вместо этого используйте &lt;code&gt;background-color: red;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Например, ситуация с правилом &lt;code&gt;margin: 0;&lt;/code&gt; — оно ясное и короткое, но черезчур &lt;strong&gt;специфичное&lt;/strong&gt;. Если вы на самом деле хотите сделать отступ снизу от элемента, то гораздо более подходящим будет использовать &lt;code&gt;margin-bottom: 0;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Старайтесь сохранять чёткое представление о свойствах, которые вы устанавливаете и следите за тем, чтобы случайно не сбросить свойства других элементов, используя сокращенную запись. Например, если вы хотите сбросить нижний отступ, то нет никакой необходимости в агрессивном сбрасывании всех отступов с помощью &lt;code&gt;margin: 0;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Сокращённая запись сама по себе хороша, но легко используется неправильно.&lt;/p&gt;

&lt;h2 id=&quot;section-8&quot;&gt;Селекторы&lt;/h2&gt;

&lt;p&gt;Сохраняйте селекторы эффективными, рациональными и переносимыми.&lt;/p&gt;

&lt;p&gt;Тяжелые, глубоко вложенные селекторы никуда не годятся по ряду причин. Например возьмем &lt;code&gt;.sidebar h3 span {}&lt;/code&gt;. Этот селектор основан на вложении и поэтому нет возможности переместить &lt;code&gt;span&lt;/code&gt; из &lt;code&gt;h3&lt;/code&gt; и из &lt;code&gt;.sidebar&lt;/code&gt; — следовательно, нет возможности обеспечить поддержку стилей на должном уровне.&lt;/p&gt;

&lt;p&gt;Слишком длинные селекторы также вызывают проблемы производительности; чем больше проверок в селекторе (например селекторе &lt;code&gt;.sidebar h3 span&lt;/code&gt; имеет три проверки, а &lt;code&gt;.content ul p a&lt;/code&gt; — четыре), тем больше работы выполняет браузер.&lt;/p&gt;

&lt;p&gt;Старайтесь следить, чтобы ваши стили не зависели от вложенности, где это только возможно, а также что ваши селекторы были короткими и легко воспринимаемыеми.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Запомните:&lt;/strong&gt; Классы на самом деле ни семантичны, ни не семантичны; Они применимы или нет! Перестаньте беспокоиться о «семантике» имён классов и выберите что-нибудь удобное в применении, с расчётом на дальнейшее использование.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://speakerdeck.com/u/csswizardry/p/breaking-good-habits&quot;&gt;speakerdeck.com/&amp;hellip;/breaking-good-habits&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2011/09/writing-efficient-css-selectors&quot;&gt;csswizardry.com/&amp;hellip;/writing-efficient-css-selectors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-9&quot;&gt;Слишком специфичные селекторы&lt;/h2&gt;

&lt;p&gt;Гиперспецифичный селектор это один из ряда &lt;code&gt;div.promo&lt;/code&gt;. Скорее всего мы можем достичь тот же самый эффект, используя лишь &lt;code&gt;.promo&lt;/code&gt;. Конечно, иногда мы &lt;em&gt;хотим&lt;/em&gt; определить класс в зависимости от элемента (например, если у вас есть общий класс &lt;code&gt;.error&lt;/code&gt;, который должен выглядеть по разному на разных элементах (например, &lt;code&gt;.error { color: red; }&lt;/code&gt; &lt;code&gt;div.error { padding: 14px; }&lt;/code&gt;)), но по возможности избегайте этого, где это только возможно.&lt;/p&gt;

&lt;p&gt;Другим примером слишком специфичного селектора может быть &lt;code&gt;ul.nav li a {}&lt;/code&gt;. Как описано выше мы сразу можем выкинуть &lt;code&gt;ul&lt;/code&gt;, и так как мы знаем, что &lt;code&gt;.nav&lt;/code&gt; это список, то ссылка будет вложена только в &lt;code&gt;li&lt;/code&gt;, поэтому мы можем сократить &lt;code&gt;ul.nav li a {}&lt;/code&gt; до &lt;code&gt;.nav a&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;section-10&quot;&gt;Производительность&lt;/h2&gt;

&lt;p&gt;Хоть это и правда, что браузеры только улучшают свои показатели в скорости рендеринга CSS, «Эффективность» — это то, на чём мы можем быть сфокусированы всегда. Короткие селекторы, неиспользование универсального (&lt;code&gt;* {}&lt;/code&gt;) селектора и избегание больших комбинаций CSS3 селекторов должно помочь обойти проблемы производительности.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2011/09/writing-efficient-css-selectors&quot;&gt;csswizardry.com/…/writing-efficient-css-selectors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-11&quot;&gt;Будьте точны, не делайте обобщений и предположений&lt;/h2&gt;

&lt;p&gt;Вместо использования селекторов спускающихся по всему DOM-дереву, чаще удобнее добавить требуемому элементу класс. Давайте рассмотрим конкретный пример.&lt;/p&gt;

&lt;p&gt;Представьте себе промо баннер с классом &lt;code&gt;.promo&lt;/code&gt; с текстом внутри и ссылкой призывающей к действию (призывная, далее по тексту). Если будет только один &lt;code&gt;a&lt;/code&gt; во всем &lt;code&gt;.promo&lt;/code&gt; то можно стилизовать «призывную» ссылку с помощью &lt;code&gt;.promo a {}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Проблема станет очевидна так скоро, как вы добавите простую текстовую ссылку (или любую другую ссылку) в &lt;code&gt;.promo&lt;/code&gt; контейнер; только что добавленная ссылка унаследует стили от «призывной» ссылки в независимости от того, хотите вы этого или нет. В этой ситуации будет лучше добавить точный класс (например &lt;code&gt;.cta&lt;/code&gt; — аббр. от ‘call-to-action’) ссылке, которую вы хотите стилизовать.&lt;/p&gt;

&lt;p&gt;Будьте точны, конкретны; указывайте именно тот элемент, который вам нужен, не его родитель. Никогда не предполагайте, что разметка будет неизменной.&lt;/p&gt;

&lt;h2 id=&quot;section-12&quot;&gt;Ключевой селектор никогда (как правило) не должен быть селектором тега или основным классом компонента/абстракции&lt;/h2&gt;

&lt;p&gt;Вы никогда не должны обнаружить себя пишущим селектор, в котором ключевое значение имеет селектор по тегу (например, &lt;code&gt;.header ul {}&lt;/code&gt;) или базовый компонент (например, &lt;code&gt;.header .nav {}&lt;/code&gt;). Так как вы никогда не сможете гарантировать, что будет только один &lt;code&gt;ul&lt;/code&gt; или один &lt;code&gt;.nav&lt;/code&gt; в контейнере &lt;code&gt;.header&lt;/code&gt;, ключевой селектор слишком расплывчатый.&lt;/p&gt;

&lt;p&gt;Будет правильнее задать элементу класс, отвечающий на вопрос, что это за элемент — класс указывающий на него и только на него, итак &lt;code&gt;.header .nav {}&lt;/code&gt; может быть заменен на &lt;code&gt;.site-nav&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Единственное, когда селектор по тегу может быть востребован, это когда ситуация похожа на ту, что описана ниже:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;a {
    color:red;
}
.promo {
    background-color: red; 
    color: white;
}
    .promo a {
        color: white;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В данном случае вы &lt;em&gt;знаете&lt;/em&gt;, что каждый &lt;code&gt;a&lt;/code&gt; в &lt;code&gt;.promo&lt;/code&gt; нуждается в пустом правиле, так как в противном случае будет нечитабельным.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Пишите селекторы, указывающие на желаемые элементы, а не на те элементы, что уже оказались в разметке.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;id--&quot;&gt;Идентификаторы (ID) и классы&lt;/h2&gt;

&lt;p&gt;Никогда не используйте ID в CSS, &lt;strong&gt;абсолютно никогда&lt;/strong&gt;. Они могут быть использованы в вашей разметке, только для джаваскрипта или обозначения секций документа (fragment-identifiers). Для стилизации используйте только классы. Ни один ID не должен существовать в ваших стилях.&lt;/p&gt;

&lt;p&gt;Классы предоставляют возможность повторного использования (даже если мы не хотим, но всё равно мы можем) и имеют низкую специфичность, что тоже очень удобно.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;К прочтению:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://csswizardry.com/2011/09/when-using-ids-can-be-a-pain-in-the-class&quot;&gt;csswizardry.com/&amp;hellip;/when-using-ids-can-be-a-pain-in-the-class&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;important&quot;&gt;&lt;code&gt;!important&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Допустимо использовать &lt;code&gt;!important&lt;/code&gt; только на вспомогательных классах. Превентивно добавлять &lt;code&gt;!important&lt;/code&gt; удобно и полезно, например если вы знаете, что селектор &lt;code&gt;.error { color: red !important; }&lt;/code&gt; всегда должен нуждаетсяв наибольшем приоритете.&lt;/p&gt;

&lt;p&gt;Не приветствуется использование &lt;code&gt;!important&lt;/code&gt; для исправления ошибок, например, чтобы помочь выбраться себе из ситуации с запутанной специфичностью. Переработайте ваш CSS и старайтесь избегать этих проблем рефакторингом ваших селекторов. Сохраняйте ваши селекторы короткими, откажитесь от ID — и ваша жизнь станет проще.&lt;/p&gt;

&lt;h2 id=&quot;section-13&quot;&gt;Магические числа и абсолютные значения&lt;/h2&gt;

&lt;p&gt;Магическое число — число используемое лишь потому, что «это просто работает». Это порочная практика, так как очень редко она работает по какой-либо реальной причине и обычно достаточно недальновидна, негибка и причина самого числа вероятнее всего забудется. Магические числа устраняют симптомы, но не никак не влиют на проблему.&lt;/p&gt;

&lt;p&gt;Например, использование правила &lt;code&gt;.dropdown-nav li:hover ul { top: 37px; }&lt;/code&gt; для сдвига выпадающего пункта меню вниз при наведении на родителя &lt;code&gt;li&lt;/code&gt; не принесёт ничего хорошего, так как 37px магическое число. 37px работает только потому, что в этом конретном сценарии (конкретный сайт в определённое время) меню оказалось высотой в 37px.&lt;/p&gt;

&lt;p&gt;Вместо этого мы должны использовать &lt;code&gt;.dropdown-nav li:hover ul { top: 100%; }&lt;/code&gt;, что означает без разницы какой высоты будет &lt;code&gt;dropdown-nav&lt;/code&gt; меню, выпадающий пункт меню всегда будет сдвинут на 100% от верхней границы родителя.&lt;/p&gt;

&lt;p&gt;Каждый раз, когда вы жестко задаёте число подумайте дважды; если вы можете избежать этого, используя ключевые слова или синонимы (например, &lt;code&gt;top: 100%&lt;/code&gt; — сдвинуть на 100% от верха) или — даже лучше — не используя никаких элементов измерений, то вы должны избежать использования жестко заданного числа.&lt;/p&gt;

&lt;p&gt;Каждое установленное вами числовое значение, скорее всего было необязательным.&lt;/p&gt;

&lt;h2 id=&quot;conditional-stylesheets&quot;&gt;(Conditional stylesheets)&lt;/h2&gt;

&lt;p&gt;Использование файлов стилей по большому счёту можно избежать. Исключением может быть необходимость восполнить недостаточную поддержку (например, PNG с альфа–каналом в IE6).&lt;/p&gt;

&lt;p&gt;Главное правило: вся разметка и &lt;code&gt;box-model&lt;/code&gt; правила могут и &lt;em&gt;будут&lt;/em&gt; работать без дополнительных файлов стилей, если вы отрефакторите ваш CSS. Это означает, что мы никогда не будем рады, если увидим &lt;code&gt;&amp;lt;!--[if IE 7]&amp;gt; element{ margin-left:-9px; } &amp;lt; ![endif]--&amp;gt;&lt;/code&gt; или любой подобный CSS, используемый лишь для того, чтобы «заставить что-то работать правильно».&lt;/p&gt;

&lt;h2 id=&quot;section-14&quot;&gt;Отладка&lt;/h2&gt;

&lt;p&gt;Если вы столкнулись с проблемой в CSS, то &lt;strong&gt;удаляйте куски кода, до того как начать добавлять правила ещё&lt;/strong&gt; в попытке решить проблему. Проблема кроется в уже написанном CSS, написать ещё больше стилей — не самое верное решение!&lt;/p&gt;

&lt;p&gt;Удаляйте куски разметки и стилей, пока проблема не исчезнет, затем определите в какую часть кода закралась проблема.&lt;/p&gt;

&lt;p&gt;Это бывает достаточно удобно добавить &lt;code&gt;overflow: hidden;&lt;/code&gt; на нужный элемент, чтобы избавиться от результатов кривой вёрстки, но &lt;code&gt;overflow&lt;/code&gt; сам по себе никогда не был проблемой; &lt;strong&gt;Исправляйте проблему, а не симптомы.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;section-15&quot;&gt;Препроцессоры&lt;/h2&gt;

&lt;p&gt;Следуя предыдущим советам, вы возможно обнаружите улетучивающуюся потребность в препроцессорах. Если вы всё ещё хотите их использовать, то учитывая всё, что было написано, используйте препроцессоры как дополнение к правилам, а не как альтернативу им.&lt;/p&gt;

&lt;p&gt;Например, возможность вложенности часто приводит к гипер–специфичным и сильно вложенным селекторам. Давайте рассмотрим наш &lt;code&gt;. nav a {}&lt;/code&gt; пример ещё раз:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.nav {
    li {
        a {}
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Скомпилируется в:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.nav {}
.nav li {}
.nav li a {}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Хотя это и очень маленький пример, но он демонстрирует, что множество встроенных «полезных» фич препроцессоров работают против нас и наших идеалов; &lt;code&gt;.nav li a {}&lt;/code&gt; может (и должно) быть &lt;code&gt;.nav a {}&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Также, миксины и похожие них элементы, учат вас запоминать абстракции — что великолепно — но не учат необходимости использовать их правильно; нет никакой необходимости в абстактном миксине, если вы собираетесь использовать его тысячу раз в файле стилей.&lt;/p&gt;

&lt;p&gt;Обязательно изучите все тонкости превосходного vanilla CSS и то, где препроцессор может способствовать их использованию, а не препятствовать или отменять их. Изучите недостатки препроцессоров изнутри и затем соедините лучшие стороны обоих, опустив худшие.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jsFiddle.net</title>
   <link href="/jsfiddle/"/>
   <updated>2012-07-11T00:00:00-07:00</updated>
   <id>http://vstarkov.ru/jsfiddle</id>
   <content type="html">&lt;h1 id=&quot;jsfiddlenet&quot;&gt;jsFiddle.net&lt;/h1&gt;
&lt;p&gt;Хочу рассказать про популярный инструмент для демонстрации своих примеров — &lt;a href=&quot;http://jsfiddle.net/&quot;&gt;jsFiddle&lt;/a&gt;. Например, им очень удобно пользоваться на таких сайтах как &lt;a href=&quot;http://stackoverflow.com/&quot;&gt;Stackoverflow&lt;/a&gt;. Я не раз использовал этот сайт для создания узко–специализированных демо для багов. Также он очень уместно использован для проекта &lt;a href=&quot;http://www.highcharts.com/&quot;&gt;Highcharts&lt;/a&gt; в качестве наглядных демонстраций &lt;a href=&quot;http://jsfiddle.net/gh/get/jquery/1.7.1/highslide-software/highcharts.com/tree/master/samples/highcharts/chart/zoomtype-none/&quot;&gt;различных&lt;/a&gt; &lt;a href=&quot;http://jsfiddle.net/gh/get/jquery/1.7.1/highslide-software/highcharts.com/tree/master/samples/highcharts/title/floating/&quot;&gt;опций&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://img716.imageshack.us/img716/1553/df9f77d59cfc47d6bcd6c91.png&quot; alt=&quot;jsFiddle&quot; /&gt;  &lt;/p&gt;

&lt;h2 id=&quot;section&quot;&gt;Использование&lt;/h2&gt;
&lt;p&gt;В главном окне предлагается три области для ввода (HTML, CSS, JavaScript) и одна область для вывода результатов.&lt;br /&gt;
В верхнем сайдбаре есть две главные кнопки “Run” и “Save”.&lt;br /&gt;
“Run” — заставляет область результатов обновиться. “Save” — обновиться и увеличить номер версии демо на один пункт.&lt;/p&gt;

&lt;h2 id=&quot;section-1&quot;&gt;Настройки демонстрации&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;http://img825.imageshack.us/img825/6839/3291addb04204f7c8e0fb82.png&quot; alt=&quot;jsFiddle sidebar&quot; /&gt;
* В первой секции &lt;strong&gt;“Choose framework”&lt;/strong&gt; можно выбрать какой фреймворк (jQuery, MooTools, etc.) использовать и подключать ли &lt;a href=&quot;http://necolas.github.com/normalize.css/&quot;&gt;normalize.css&lt;/a&gt;.&lt;br /&gt;
* В секции &lt;strong&gt;“Add Resources”&lt;/strong&gt; можно подключать сторонние JavaScript библиотеки и CSS файлы.&lt;br /&gt;
* Секция &lt;strong&gt;“Info”&lt;/strong&gt; позволяет задавать мета­-теги &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt; и выбирать &lt;code&gt;doctype&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;section-2&quot;&gt;Кабинет&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;В разделе &lt;strong&gt;Dashboard&lt;/strong&gt; выводятся все сделанные вами fiddl&amp;#8217;ы.&lt;/li&gt;
  &lt;li&gt;В раздел  &lt;strong&gt;Your Public Fiddles&lt;/strong&gt; попадают только те работы, в которых вы задали &lt;code&gt;title&lt;/code&gt; в панели &lt;strong&gt;Info&lt;/strong&gt; настроек fiddl&amp;#8217;a&lt;br /&gt;
&lt;img src=&quot;http://img207.imageshack.us/img207/8963/ddd70990388541d08f13588.png&quot; alt=&quot;Your Public Fiddles&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section-3&quot;&gt;От себя&lt;/h2&gt;
&lt;p&gt;Советую всем научиться пользоваться этим замечательным ресурсом и показывать свои миниработы с помощью этого проекта. Мне кажется, что это самый лучший проект для этих целей.&lt;/p&gt;

</content>
 </entry>
 
 
</feed>