Почему мы забили на фотошоп.

Posted by Dmytro

перевод интересной статьи.

При разработке интерфейса* мы сразу переходим от бумажных набросков к html/css. Мы пропускаем статический шаг отрисовки в фотошопе. И на то есть свои основания:

  • Ты не сможешь кликнуть на макет в фотошопе. Это возможно причина номер 1, почему мы пропускаем этот шаг. Они не реальны. Бумага тоже не реальна, но бумага и не вызывает подобных ожиданий. А макет в фотошопе — он у тебя перед глазами, на мониторе. Если он на экране — значит должен работать. Ты не сможешь заставить меню выпадать на таком макете, не сможешь редактировать текст, не сможешь кликнуть на ссылку. html/css, с другой стороны, настоящий опыт.
  • Фотошоп дает тебе слишком много инструментов чтобы фокусироваться на деталях. Когда ты используешь фотошоп, хочешь не хочешь, будешь уделять внимание деталям. Выравнивание, цвета, точная форма, множество мелких деталей, которые могут иметь значение, но на самом деле такими не являются. Сначала — суть, потом детали.
  • Текст в фотошопе — не то же самое что в вебе. Когда ты рассматриваешь статичный макет в фотошопе — ты не можешь быстро изменить его текст, без того чтобы вернуться в фотошоп, изменить текст, сохранить файл, экспортировать его как gif/png/jpg, и т.д. Ты не можешь просто выложить его в онлайн и, сказав кому-то, «перезагрузи через 5 сек», как ты можешь сделать когда быстро редактируешь html. Вместо этого ты можешь сказать «дай мне несколько минут...» Еще текст никогда не бывает такого же размера как текст в html. Он никогда не занимает такого же пространства.
  • Фотошоп фокусирует на производстве, на процессе, а не на продуктивности. Он для того чтобы сделать то, как предмет выглядит, а не для того, как сделать то, что ты будешь использовать. Когда ты переживаешь о том как это выглядит — ты тратишь слишком много времени на производство. html/css позволяют тебе быть продуктивным, ты постоянно движешься вперед, к чему-то, все более реальному с каждым изменением.
  • Фотошоп заставляет повторяться. Представь, ты потратил три дня на то чтобы подготовить макет в фотошопе. Чего дельше? Дальше надо его сверстать в html/css. Выброшенное время. Просто делай сразу в html/css и потрать больше времени на улучшение, а не на перестройку. Если ты не очень быстр в html/css &151; тогда потрать время на обучение, потом воздастся.
  • Фотошоп не для сотрудничества. Я уже говорил, но позвольте еще раз обратить на это внимание: html/css позволяет вносить изменения, сохранять и перезагружать. Это сотрудничество. «Давайте это поменяем. Теперь обновим.» Секунды. Не нужно выбирать инструмент, вносить руками несколько изменений в элементы страницы, сохранять, экспортировать, загружать, отправлять людям новое имя файла, и прочее. html/css созданы для быстрого прототипирования, тогда как фотошоп... нет.

Фотошоп громозкий. Вы не сможете тут помочь, поскольку я знаю что вы предложите, поскольку я проработал на нем 10 лет, но до сих пор я считаю его неуклюжим для достижения простого результата. Работа с карандашом более естественна для меня чем возвращение к панели инструментов снова и снова. Карандаш может нарисовать все что угодно, а в фотошопе тебе нужно использовать инструмент текст для текста, фигуру для рисования фигур, меня для того чтоб настроить все это.

Создание тем и шаблонов для Mephisto с помощью liquid 5

Posted by Dmytro

Это перевод статьи Creating a Mephisto Theme using Liquid.

Mephisto это отличный блоговый (и не только) движок, написанный Риком Ольсеном и Джастином Палмером. По ходу этой статьи вы пройдете шаг за шагом по процессу создания собственных шаблонов и тем для этой системы.

Я надеюсь что вы знакомы с фреймворком Ruby on Rails, тем не менее я постараюсь объяснять максимально доступно.

Первый и самый эффективный способ научиться создавать собственные шаблоны и темы - это скачать уже готовую с mephisto themes gallery и посмотреть внутрь архива чтобы разобраться как автор создавал свою тему.

Для начала вам нужна работающая копия Mephisto для тестирования. Вы можете воспользоваться версией из репозитория. Как это сделать написано на сайте. Темы хранятся в папке /themes в корне вашего rails приложения. Если у вас установлена конфигурация по умолчанию для одного сайта - вам нужно создать новую пустую папку в /themes/site1/. Вы можете назвать папку как вам нравится, это то место где мы будем собирать новую тему.

Тема для Mephisto делается на основе шаблонов liquid (html с дополнительной разметкой для вставки контента на страницу), картинок, таблиц стилей CSS и javascript файлов.

Что такое liquid файлы.

Liquid был создан разработчиками из Shopify для того чтоб их пользователи могли создавать собственные магазины. Эти шаблоны работают так же как файлы .rhtml в rails, они безопасны в плане того что не вызывают ошибок на сервере если переменная нулевая или неопределенная, они не генерируют никакого контента. Для тех кто не знаком rails - .rhtml файлы содержат разметку в html и специальные таги "< >" c Ruby кодом, таги которые могут осуществлять вывод на страницу "<= >". Liquid очень похож на эту структуру, только вместо тагов "< >" мы используем "{}" и вместо "<= >" есть "{{}}" таги.

Подробную информацию вы можете найти на сайте Shopify, и я рекомендую вам ознакомится с ней в дополнении к моей статье.

Mephisto содержит много переменных, которые могут быть использованы не только для вывода информации на страницу, но и для создания навигационных ссылок, ссылок между страницами. Например на этой странице, для того чтоб вывести содержимое статьи я использую таг {{ article.body }}

Итераторы

Если у нас есть массив элементов, то мы легко можем пройтись по всем элементам при помощи конструкции:

{% for blog_section in site.blog_sections }
      {{ blog_section.name }}
{ endfor %}

Условные операторы

Мы также можем проверить значения liquid переменных и, в зависимости от условия, вывести информацию:

{% if section.is_home }
     Welcome to the site…
{ endif %}

Описание переменных

Прежде чем начать подробное рассмотрение шаблонов - нужно ознакомиться с liquid переменными, доступными в Mephisto. На сайте Mephisto и почитав вики

Там есть несколько отличных примеров как форматировать даты и т.д.

Структура Mephisto

Mephiso не просто блог, он обеспечивает нас Системой Управления Контентом (CMS), что позволяет вам создавать информационные страницы - такие как страница портфолио, информация "об авторе" и подобные им. Когда мы создаем тему нам необходимо учесть эти варианты.

Необходимые Liquid файлы.

Для создания темы Mephisto ищет необхоимый минимум файлов, которые должны располагаться в папке под названием 'templates' внутри /themes/site1/. Будьте внимательны с написанием названий папок.

  • section.liquid - шаблон используемый для блоговых разделов и обычно выводит несколько статей подряд, этот шаблон так же используется для главной страницы.
  • single.liquid - этот шаблон используется для показа одной статьи, обычно выводит короткую статью или выдержку.
  • tag.liquid - шаблон для вывода статей по ключевому слову.
  • search.liquid - шаблон для вывода результатов поиска.
  • archive.liquid - шаблон для вывода статье за определенный месяц.
  • error.liquid - шаблон для вывода ошибки, когда раздел или статья не найдены.

layout.liquid

В дополнение к вышеперечисленным шаблонам, у нас есть общий шаблон (шаблон разметки) который предоставляет содержимое каждой страницы, в котором мы размещаем основные элементы, внешний вид. Этот файл расположен не в папке 'templates' как предыдущие, а в подпапке с названием 'layouts'.

Создание шаблона разметки (layout.liquid)

Как уже было сказано, этот файл расположен в папке 'layout' в папке темы. Этот файл используется везде на нашем сайте, не зависимо от раздела, так что мы можем расположить в нем общие элементы, используемые на всех страницах. Например заголовок с логотипом, форму поиска, подвал (footer). Так же это единственная страница, где хранится html заголовок и тэг body, соответственно минимальное содержание будет:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html>
    <head>
        <title>My Blog</title>
    </head>
    <body>
        {{ content_for_layout }}
    </body>
</html>

Секция HEAD.

Вместо статического заголовка мы можем динамически вставлять название сайта или, если мы смотрим отдельную статью, добавлять ее заголовок. Это не только добавляет удобство читателям, но и показывает заголовки поисковикам и сервисам типа Feedburner.

<title>{{ site.title }} {% if article } – {{ article.title }} { else } {{ site.subtitle }} { endif %}</title>

Этот код выводит название сайта и, если мы просматриваем статью, нам доступен объект article, так что мы можем показать ее название или подзаголовок сайта, который задается в настройках панели управления.

Так же мы должны убелиться что наша RSS лента доступна пользовательским браузерами, для этого добавляем следующий код:

{{ head.feed }}
<!— If you are using feed burner, set it up with your RSS feed http://yourdomain/feed  then use the feedburner address —>
<link href=“http://feeds.feedburner.com/miletbaker“ title=“Jon Milet Baker’s Blog“ type=“application/rss+xml“ rel=“alternate“/>

Можно добавить любой внешний скрипт или таблицу стилей:

{{ ‘stylesheetfilename’ | stylesheet }}
{{ ‘javascriptfilename’ | javascript }}

Секция BODY.

В layout.liquid нам нужно создать меню навигации для доступа к различным разделам и страницам сайта. Я обычно использую неупорядоченный список ul, затем добавляю в CSS его оформление. Для генерации элементов списка можно использовать итераторы:

<ul>
    {% for section in site.page_sections }
        <li><a href=“{{ section.url }}“>{{ section.name }}</a></li>
    { endfor %}
</ul>

Этот код содзаст ссылки на page_sections нашего сайта. Мы можем вывести разделы blog_sections изменив вторую строку кода на:

{% for section in site.blog_sections %}

Так же просто добавить поиск на каждую страницу:

<form method=“get“ action=“/search“>
  <input type=“text“ class=“search“ value=““ name=“q“ id=“q“ size=“15“/>
</form>

Мы можем использовать технику вывода по условию, которую мы рассматривали при выводе заголовка сайта, для вывода нужной нам информации. Например при просмотре отдельной статьи, у меня, в боковой колонке, выводится список статей помеченных одним ключевым словом. Это просто:

{% if article }
    {{ article.tags | tagged_articles | assign_to: ‘rel_articles’}}
    { for rel_article in rel_articles limit: 5 }
        <a href=‘{{rel_article.url}}‘>{{ rel_article.title }}
    { endfor }
{ endif %}

Этот код выводится только тогда когда просматривается отдельная статья, затем передаются ключевые слова, котрыми помечена наша статья и возвращается массив статей с подобными ключевыми словами.

В добавок к этому мы можем вывести ссылки на архив:

{% for month in section.months }
    {{ section | monthly_articles: month | size | assign_to: ‘articles_count’ }}
    { if articles_count > 0 }
    <a href=“{{ section.path }}/{{ section.archive_path }}/{{ month | strftime: “Y/m“ }}“>{{ month | strftime: “%B %Y” }} ( {{ articles_count }} )</a>
    { endif }
{ endfor %}

Можно вывести список всех ключевых слов сайта, я использую для этого плагин Mephisto Tag Cloud plugin by Hank для вывода ссылок разного размера, который зависит от частоты использования. Вы можете использовать для этого Technorati Widget или просто вывести весь список:

{{ site | linked_tag_list }}

Теперь у нас есть основной шаблон разметки, который содержит общие элементы, и мы можем перейти к отдельным шаблонам.

Шаблон раздела (section.liquid)

Шаблон раздела, как уже было сказано, служит начальной страницей для разделов, включая начальный раздел. В нем вы уже получаете доступ кроме переменных уровня сайта, к переменным разделов.

{% if articles.size > 0 }
  <h1>Статьи</h1>
  { for article in articles }
    <!— В этом цикле мы получаем доступ к переменным статьей. Это нам нужно для вывода каждой статьи и дополнительной полезной информации.:—>
    {{ article | link_to_article }}
    {{ article.published_at | date: ‘%b %d’ }}
    {{ article.author.login }}
    {{ article | linked_tag_list }}
    <a href=“{{ article.url }}#comments“>{{ article.comments_count | pluralize: ‘comment’ }}</a>
    {{ article.body | textilize }}
  { endfor }
{ else }
  <p>Статей не найдено.</p>
{ endif %}

Строка с тегом ссылки позволяет нам вывести количество комментариев с ссылкой на часть страницы, с которой комментарии начинаются, обратите внимание на то что метод pluralize автоматически добавляет множественное число, в зависимости от количества комментариев. Например “1 comment” или “2 comments”.

У нас могут быть длинные статьи, для которых Mephisto позволяет писать выдержки (excerpt). Мы можем написать условное выражение которое выводит выдержку (если она задана) или содержимое статьи, для коротких статей. Для использования этой возможности нужно задавать выдержку (Add an excerpt ) при написании статьи.

Чтобы использовать это нам нужно заменить {{article.body | textilize }} в предыдущем коде на :

{% if article.excerpt.size > 0 }
  {{ article.excerpt | textilize }}
  <a href=‘{{ article.url }}‘ >More…</a><br/><br/>
{ else }
  {{ article.body | textilize }}
{ endif %}

Шаблон single.liquid

Этот шаблон используется для показа отдельной статьй. На этой странице мы получаем доступ к элементам объекта article:

<h1>{{ article.title }}</h1>
<p>Дата: {{ article.published_at | date: ‘%d %B %Y’ }}, by {{ article.author.login }}<br/>
Ключевые слова: {{ article | linked_tag_list }}<br/>
Комментарии: <a href=“{{ article.url }}#comments“>{{ article.comments_count | pluralize: ‘comment’ }}</a></p>
{{ article.excerpt | textilize }}
{{ article.body | textilize }}

В этом коде мы выводим название статьи, дату публикации и ключевые слова. Т.к. я использую выдержку для больших статей, я сначала вывожу ее, а сразу за ней текст статьи. Если выдержка отсутствует - то выводится только текст статьи.

В дополнение к этому мы позволим пользователям добавлять комментарии к статьям. Следующий код нужен нам для вывода комментариев:

<a name=‘comments‘></a>
{% if article.comments.size != 0 }
  { for comment in article.comments }
    {{ comment.author_link }}
    {{ comment.published_at | date: ‘%d %B %Y’ }}
    {{ comment.body | textilize }}
  { endfor }
{ endif %}

Можно добавить Gravatar комментатора, если он у него есть:

{{ comment | gravatar: 80, “/images/mephisto/avatar.gif” }}

И форму для добавления комментария:

{% commentform }
<!- comment form ->
  <label for=“comment_author“>Nick Name</label><br/>{{ form.name }}<br/>
  <label for=“comment_author_email“>Email (optional)</label><br/>{{ form.email }}<br/>
  <label for=“comment_author_url“>Website (optional)</label><br/>{{ form.url }}<br/>
  <label for=“comment_body“>Let the thoughts flow….</label><br/>{{ form.body }}<br/>
  <input type=“submit“ value=“Add“ />
{ endcommentform %}

Шаблон тагов (tags.liquid), шаблон архива (archive.liquid) и шаблон поиска (search.liquid).

Это три способа, с помощью которых пользователи могут найти информацию на вашем сайте. Используя ключевые слова для поиска статей, отмеченных интересующими тагами, архив для поиска по определенной дате и возможность поиска.

Все они схожи между собой и выводят список названий и дат и, возможно, выдержки или содержимое статей, так же как мы делали в шаблоне section.layout.

С помощью следующего кода можно вывести количество статей:

{{articles.size | pluralize: ‘article’ }} найдено.

Шаблон ошибки (error.liquid)

В заключении напишем шаблон который отображается когда пользователь запрашивает несуществующую страницу или ресурс. Отличная практика - предоставлять пользователю возможности для поиска того, что ему нужно. Я обычно показываю последние статьи и форму поиска.

Повторное использование кода (partials)

Так же как и в rails, если у нас есть куски кода, который мы используем более одного раза, мы можем сохранить их в отдельном файле и вызывать при необходимости. Например можно вынести в отдельный файл вывод статьи:

	{{ article | link_to_article }}
    {{ article.published_at | date: ‘%b %d’ }}
    {{ article.author.login }}
    {{ article | linked_tag_list }}
    <a href=“{{ article.url }}#comments“>{{ article.comments_count | pluralize: ‘comment’ }}</a>

и затем вызвать его в файлах tag.liquid, search.liquid, archive.liquid:

{% include ‘article’ with articles %}

Распространение тем

Если вы считаете что получилась классная тема, почему бы не выложить ее на Mephisto Theme Gallery? Для этого нужно запаковать в .zip каталог с темой, но перед этим надо сделать картинку-превью нашей темы preview.png в корневом каталоге темы и файл с описанием, где написан автор, название темы и т.д. Это пишется в файле about.yml в формате YAML:

title: ClockObj Theme
author: Jon Milet Baker
version: 1.0
homepage: http://clockobj.co.uk
summary: THe theme for clockobj.co.uk

Надеюсь что эта статья окажется вам полезной при создании собственных тем для Mephisto. Дополнительную информацию вы можете найти на сайтах:

13 Простых правил для ускорения работы сайта.

Posted by Dmytro

Выборочный перевод статьи Thirteen Simple Rules for Speeding Up Your Web Site.

Минимизируйте количество HTTP запросов.

Большое количество времени, которое пользователи проводят на сайте, тратится на загрузку компонентов страниц: картинки, стили, скрипты, Flash и т.д. Уменьшение количества этих компонентов приводит к уменьшению количества HTTP запросов, необходимых для рендеринга страницы. Это ключ к ускорению загрузки страниц.

Один из путей уменьшения количества компонентов - упрощение дизайна страницы. Но существует ли способ создания страниц наполненных разнообразным контентом и в тоже время с быстрой загрузкой? Существует несколько способов уменьшения количества HTTP запросов, которые можно применить к страницам с навороченным дизайном.

Image maps (карты изображений) позволяют совместить несколько изображений в одно. Конечный объем картинок будет тот же (верно не всегда, поскольку я иногда нарезаю картинку на gif и jpeg чтоб уменьшить размер общей картинки, если есть области с цветовыми плашками например, соответственно, если сделать картинку цельнолитой - размер может увеличиться, примечание переводчика), но меньшее количество запросов позволит ускорить загрузку. Карты изображений применимы к картинкам, находящимся по-соседству на странице, например панели навигации. Задание карт изображений дело нудное и нужно быть внимательным, чтоб не наделать ошибок.

Использование CSS спрайтов основной метод для уменьшения количества обращений к изображениям. Основная идея - совмещение всех картинок со страницы в одну и вывод нужного фрагмента с использованием background-image и background-position.

Встраивание картинок с использованием схемы data: URL позволяет включить изображение в саму страницу. Это увеличит размер вашего документа html. Комбинирование встраиваемых картинок в кэшируемом css файле - способ уменьшения количества запросов, который позволяет избежать увеличения объема самой страницы.

Объединение файлов это путь к снижению количества HTTP запросов с помощью объединения всех таблиц стилей в одну. Эта простая идея до сих пор не пользуется большой популярностью. Десять самых популярных сайтов в Штатах используют в среднем 7 файлов со скриптами и 2 файла со стилями. Объелинение файлов усложняется при использовании разных скриптов и стилей на разных страницах, но применение этого способа позволяет уменьшить время загрузки.

Уменьшение количества запросов на вашей странице это только начало. Это основной способ ускорения скорости загрузки страницы для людей, которые посещают ваш сайт в первый раз. Как описано в блоге Tenni Theurer'а Browser Cache Usage - Exposed!, 40-60% ежедневных посетителей приходят на ваш сайт с пустым кешем. Создание условий, при которых ваш сайт у этих первый раз зашедших загружается быстрее - это важный пункт улучшения впечатления пользователей.

Продолжение на русском пока не ясно :)

Установка Ruby, Rails, Subversion, Mongrel и MySQL на Mac OS X

Posted by Dmytro

Перевод руководства Дэна Бенджамина (Dan Benjamin)

Тут изложены инструкции по компиляции и установке следующих приложений под Mac OS X 10.4 вместе со всеми зависимостями:

www.flickr.com
This is a Flickr badge showing public photos from yo+ya. Make your own badge here.