Введение в организацию времени. Глеб Архангельский.

Posted by Dmytro

Зачем, собственно говоря, мне все это нужно?

Большая часть нашей жизни уходит на ошибки и дурные поступки; значительная часть протекает в бездействии, и почти всегда вся жизнь в том, что мы делаем не то, что надо.

Луций Анней Сенека

Самый простой ответ на вопрос «Зачем мне это нужно», наверно, заключается в том, что Ваше время — это одна из важнейших необходимых составляющих Вашей жизни. Что значит «необходимых»? Скажем, без мармелада можно прожить, а без воды и воздуха — невозможно. Так вот время — как воздух. Пока его много, качество его расходования не замечаешь и не ценишь. А когда воздуха начинает не хватать — становится мучительно больно за то, что когда-то его бездумно тратил...

Начнем с меркантильного. Во сколько Вы оцениваете час своего времени? (в рублях, у.е., монгольских тугриках — неважно). Сколько процентов Вашего времени тратится, по Вашему мнению, эффективно, а сколько — так себе? А сколько вообще впустую?

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

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 лет, но до сих пор я считаю его неуклюжим для достижения простого результата. Работа с карандашом более естественна для меня чем возвращение к панели инструментов снова и снова. Карандаш может нарисовать все что угодно, а в фотошопе тебе нужно использовать инструмент текст для текста, фигуру для рисования фигур, меня для того чтоб настроить все это.

Сравнение быстродействия браузеров.

Posted by Dmytro

zdnet.com.au на 7 страниц расписали процесс сравнения скорости браузеров (windows vista и mac os x leopard).

В кратце:

Лидируют Firefox и Safari, потом Opera а в хвосте Internet Explorer. Последняя 5-ая бета Firefox'a использует меньше памяти при том же количестве открытых страниц.

P.S. У меня на маке лис запускается много дольше чем сафари.

Offline документация по Rails для OSX.

Posted by Dmytro

Если вы пользуетесь рельсами, то это для вас.

Noobkit

Специально собранное приложение-браузер для просмотра сайта noobkit.com с документацией.

RailsBrain

Просмотр документации в то время, когда сеть отсутствует.

Создание тем и шаблонов для 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. Дополнительную информацию вы можете найти на сайтах:

Mephisto + MarsEdit 0

Posted by Dmytro

Mephisto - это удобный движок, написанный на Ruby on Rails, на котором работает этот и несколько других сайтов, а MarsEdit - текстовый редактор для ведения дневников (блоггер, жж, вордпресс и много чего еще). Мефисто поддерживает MetaWeblog API, так что можно и нужно постить новые сообщения из редактора.

Рекомендую попробовать, просто и удобно.

Все что нужно - это поставить в конфигурации RPC URL http://вашсайт.com/xmlrpc. Если спросит про Blog ID - введите свой логин.

Природа. 0

Posted by Dmytro

Доброго здоровья.

Новый рабочий стол.

Фотография леса вокруг Святого озера

Я Тебя категорически поздравляю.

Posted by Dmytro

Matz's work on the language was started on February 24, 1993 (commonly considered the birthday of the language; I hear that over in Japan they roll out a two-story cake and sing) and released to the public in 1995

Собственно говоря этим всё с сказано. День народження Ruby.

Намерение: я понимаю и размовляю на ruby и javascript/css/html, наиболее эффективным образом решаю свои задачи пользуясь мастерским владением этими технологиями. Использую вычислительную машину максимально эффективным образом для организации образов. Нахожу интересные и удобные пути решений.

Благодарю.

What about microsoft?

Posted by Dmytro

Shorter Adrian Kingsley-Hughes: If Microsoft greatly improves every single aspect of Windows — including performance, the UI, the driver model — and also adds some cool new features, then Windows 7 will be the best version of Windows ever.
from Daring Fireball

Inquisitor под Leopard

Posted by Dmytro

Вышел (некоторое время назад) Inqusitor для леопарда, но что-то с тех пор как я про него писал уже многое поменялось, теперь в фаворе Sogudi. Можно сразу в поисковой строке вводить заранее заданные соглашения/сокращения для поиска, например: img rubyconf

Новый многообещающий редактор Naked Light

Posted by Dmytro

Основанный на принципе не деструктивного редактирования (когда исходный файл остается нетронутым, а записывается последовательность действия) и ключевых узлах вместо слоев. Описание и бету можно найти у авторов на сайте naked.la. Обещает быть очень интересным.

Aperture и Time Machine

Posted by Dmytro

Ну и дела, оказывается Apple не сделала поддержку библиотек Aperture в своей машине времени. Эх.

А опробовать Машину Времени хочется, посему в установках Time Machine я добавил в исключения Aperture Library.aplibrary, и ручками пользуюсь томами (Vault) в Aperture, сохраняя их на другом диске.

Однако же непонятно насколько востребованна подобная фича. Раньше меня и SuperDuper очень даже устраивал - всё автоматом и никакой возможности забыть о резервной копии.

P.S. Leopard отлично встал в режиме Upgrade, чего и вам желаю.

Визитка Самого Известного Хакера. 0

Posted by Dmytro

Отличный дизайн и клёвая визитка. Хакер перестал ломать телефоны и стал защищать желающих.

Визитка Кевина Митника

Увидел на flickr'e.

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% ежедневных посетителей приходят на ваш сайт с пустым кешем. Создание условий, при которых ваш сайт у этих первый раз зашедших загружается быстрее - это важный пункт улучшения впечатления пользователей.

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

Клавиатурные сокращения Photoshop CS3

Posted by Dmytro

Вот жеж есть хлопцы правильные :) Пишут большие шпаргалки на нужные темы. Это радует. Скачать их можно на morris-photographics.com
www.flickr.com
This is a Flickr badge showing public photos from yo+ya. Make your own badge here.