Vitaphoto

Материал из YourcmcWiki
Перейти к: навигация, поиск

Vitaphoto — система управления фотогалереями, обладающая некоторыми уникальными отличительными особенностями, самая главная из которых — заливка фотографий в галерею не через веб-интерфейс, а обычным копированием файла в заданную директорию на сервере. Т.е., ФС-ориентированность.

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

Посмотреть на Vitaphoto в лице моей фотогалереи можно по следующей ссылке: http://vmx.yourcmc.ru/vitaphoto.

История создания Vitaphoto

Причиной создания Vitaphoto послужило то, что… мне просто захотелось выкладывать фотографии к себе на сайт. Фотохостинги я не люблю — вот лишь небольшой список их недостатков с моей точки зрения:

  • имена файлов после заливки, как правило, теряются;
  • нет возможности резервного копирования;
  • в моде AJAX и браузерные интерфейсы, кое-где (Picasa) из-за этого «Opera поддерживается не полностью», а Opera — мой любимый браузер, да и вообще не люблю я, когда всё пестрит;
  • многие сервисы изобилуют рекламой;
  • многие сервисы расположены на загруженных или отдалённых от России серверах, короче, банально «тормозят»;
  • многие сервисы используют откровенно некачественные алгоритмы масштабирования изображений (например, ФотоФайл);
  • добавление фото практически везде ведётся только через веб-интерфейс или через 'специально разработанную' программу-* клиент, а они, как правило, ещё и убого («плюшево») выглядят, или напичканы ненужными функциями;
  • как правило, нет возможности скачать альбом на диск полностью, а кое-где с этим даже ведут борьбу (всё тот же ФотоФайл);
  • некоторые сервисы стараются даже запретить выкладывать фотографии в блог без вставки ссылки на сам сервис.

И наоборот, на преимущества вроде кластеризатора фотографий (Flickr), или возможности «отправить ссылку на этот альбом» (Picasa), или возможности онлайн-заказа печати фото (ФотоФайл, НетПринт) мне откровенно наплевать. Иногда, возможно, и было бы интересно поиграться, но не более того.

Возможно, вы и сами уже прочувствовали на себе некоторые из этих недостатков. Обо мне и говорить нечего, меня они просто достали :-)

Потому я и создал Vitaphoto. Преимущества Vitaphoto с моей точки зрения:

  • добавление фотографий и альбомов представляет собой обычное копирование файлов, которое можно осуществлять по FTP и в любых объёмах, пока не закончится место на диске. Все скопированные фотографии добавляются в базу данных автоматически. Кстати, это будет легко и для непродвинутых пользователей, ибо даже виндовый Проводник может работать с FTP серверами;
  • все метаданные фотографии (название, теги) сохраняются в именах файлов, при этом, благодаря созданию символических ссылок на файлы, отсутствуют проблемы при запросе файлов с именами в русских кодировках;
  • резервное копирование просто до безумия — достаточно зайти на сервер по FTP и слить к себе все файлы;
  • точно так же просто дать доступ на скачивание всех фотографий кому-либо, заведя отдельную учётную запись FTP;
  • и точно так же просто дать доступ на добавление фотографий кому-либо, не ставя под угрозу собственную безопасность — необходимо завести отдельную учётную запись FTP для подкаталога домашней директории фотогалереи, и положить в него недоступный на запись через FTP файл «dirinfo» с заданием кодировки имён файлов и/или автоматически проставляемых на все фотографии подкаталога тегов;
  • фотографии масштабируются по алгоритму Lanczos с использованием программы ImageMagick — это означает качество;
  • система рассчитана на любое количество галерей, управляемых одним приложением;
  • в описании альбома можно пользоваться простым wikiобразным синтаксисом для форматирования текста;
  • мне гораздо удобнее держать мою фотогалерею расположена на моём сайте, а не на некотором неизвестном фотохостинге.

Система управления фотогалереями Vitaphoto написана на языке Perl 5 с использованием модуля Apache 2 mod_perl 2.0. Я старался создать простую и удобную систему со вменяемым исходным кодом. Вменяемым, кстати, исходный код стал не сразу, а только в версии Vitaphoto 1.2, написанной в районе конца февраля — начале марта 2008 года. Кроме того, мне очень близки идеи Лэрри Уолла, в частности TMTOWTDI (There’s More Than One Way To Do It — «Это можно сделать по-разному»), а также «приятно быть важным, но куда важнее быть приятным». Возможно, они тоже наложили свой отпечаток на систему.

Планы

Разработка ведётся эпизодически — по принципу «в попу стрельнуло». А в попу обычно стреляет сделать что-нибудь глобальное. Мелочи не привлекают.

«Текущий взгляд»: плюсы и минусы Vitaphoto 1.3 глазами меня (автора).

СейчасУдобно?А как удобно?
Выкладывать фотки копированием и хранить свой фотоархив в одном месте, организуя его, как душа пожелает.удобно 
Отдельный синтаксис у атрибутов файлов (скрытые и т. п.).неудобноЗадавать их такими же тегами, как и всё остальное.
Редактировать описания альбомов и выражения в файлах.неудобноБрать их из статей YourcmcWiki.
Статические страницы лежат отдельными HTML’ками.неудобноБрать их из статей YourcmcWiki.
… С другой стороны, это будет завязка на MediaWiki.неудобноХранить все «завязки» в файлах или базе. Из MediaWiki просто экспорт.
При скачивании фото название теряется.неудобноНе париться никакими симлинками и выводить ссылкой на сохранение полноразмерного изображения настоящее имя файла.
Независимые ссылки на фотографии по началу имени до первой точки.удобно 
Создаваемые кучи симлинков усложняют код.неудобноПошли они в жопу, эти симлинки! Делать всё кодом, брать из базы и отдавать перенаправление на нужный файл.
Все миниатюры хранятся в одном каталоге (direntry кончатся!)неудобноХранить миниатюры во вложенных каталогах по n первым буквам хеша /scaled/WxH/a/a5/a54/a54xxxxx…xxx.jpg
Есть комменты.удобно 
… Но в них нет никакой разметки.неудобноИспользовать Wiki-разметку, опять-таки, из MediaWiki.
Текстовые части дизайна выглядят очень грустно, «нетипографично».неудобноТексты форматировать через YourcmcWiki.
Голосование («+» и «-» отдельно).удобно 
Лог голосования хранится в базе.неудобноХранить его в файле. Это будет и бэкап.
Своя база пользователей и нет регистрации.неудобноАвторизоваться по базе YourcmcWiki. Для прозрачной глобальной аутентификации также нужно расширение Mediawiki.
Нет сортировки по дате, извлекаемой из EXIF.неудобноДобавить её.
Нет RSS-лент.неудобноДобавить их — на каждый альбом.
Код веб-приложения так себе организован.неудобноПеретащить на Sway Solstice.
… Sway::TagAlbum и Sway::TagEntry — ужос.неудобноПеретащить на Funq.
Нет выборки по дате.неудобноДобавить её. Как для отдельной фотографии, так и для множества.
Язык булевых запросов по тегам, реализованный в базе на PL/SQL.неудобноИзврат кошмарный. Избавиться. Перетащить либо на софтовую реализацию, либо на join’ы.
Нет ссылок на предыдущую/следующую страницу в альбоме.неудобноДобавить их, а текущие "<" и ">" переименовать в "<<" и ">>".
При обновлении меняются ВСЕ страницы, т.к. разбиение - по числу фотографий.неудобноСделать навигацию по датам, а не страницам. Если внутри даты окажется много фотографий - в идеале разбивать их на временные интервалы. В неидеале - забить.
Есть «альбомы», нет «облаков тегов».неудобноСделать удобную навигацию по тегам и вложенным тегам: Vitaphoto: Облака тегов.
Ссылки на альбомы «нечеловекопонятны».неудобноУбрать сущность «альбом» вообще к чёртовой матери. Оставить теги + наборы тегов. Vitaphoto: Ссылки.
Навигация альбомов по страницам.неудобноЛучше по дате и если внутри даты очень много фотографий — по времени.
Масса галерей в одной БД усложняет код.неудобноДля дополнительной галереи гораздо проще создавать дополнительную БД.
Возможность сменить кодировку имён файлов для подпапки.удобно 
Возможность автоматического теггирования файлов в подпапке.удобно 
Необходимость задавать эти 2 свойства в файле dirinfo.неудобноБрать их из имени папки: «Имя_Папки (АвтоТеги, KOI8-R)».
Невозможность жестоко ликвидировать файл из базы — при удалении только ставится флаг.неудобноУчитывая, что симлинки — в жопу, флаг «удалён» — тоже в жопу. Просто удалять и всё…
… Но тогда придётся заново масштабировать переименованные файлы.неудобноЖдать окончания очередной цепочки событий, и удалять только в её конце, так как при переименовании гарантированно придёт два события, а не одно.
Есть диафильмы.удобно
… Но миниатюры в них крупноваты и всего 3 фото.неудобноПоказывать диафильм мельче и справа, а не сверху.
… Кнопки влево-вправо двигают диафильм, а не переключают фото.неудобноДобавить мелкие полупрозрачные кнопки по краям диафильма — они пусть двигают диафильм. Большие влево-вправо оставить вверху фото и пусть они ведут на другие фото.
Статистика просмотров собирается, но не отображается.неудобноОтображать (по фотографии, по тегу)!

По итогам этих плюсов с минусами, а точнее, минусов с идеями их устранения, и строится следующая версия Vitaphoto. Как заметили наиболее внимательные читатели, следующая версия будет также содержать собственное расширение для интеграции с MediaWiki.

Реализовано в Vitaphoto 1.3

Версия Vitaphoto 1.3 соответствует 6 сентября 2008 года.

  • Язык запросов по тегам, то есть, чтобы была позволена не только логическая операция «И», а также «ИЛИ» и «НЕ»; автоматическое вычисление вхождения альбома в альбом (используется приведение выражения к ДНФ);
    • То есть, можно задавать логические выражения (в стандартном базисе :-D) над тегами. Это могут делать все на странице поиска. Автоматическое вычисление вхождения подальбома в альбом (сравнение булевых функций, заданных формулами O_o);
  • Голосование «за» и «против» фотографий, с возможностью привязки к комментариям;
  • Онлайн-конфигурация своей фотогалереи (надо быть root’ом);
  • Комментарии к фотографиям (иерархические, с возможностью ответа);
  • Возможность рассылки ответов на комментарии по электронной почте;
  • «Анонимный логин» (через ввод CAPTCHA) — чтобы быть анонимусом (c), нужно подтвердить, что вы не компьютер;
  • Вход по OpenID с автоматической регистрацией локального образа пользователя;
  • Возможность использования различных кодировок имён файлов в различных подкаталогах;
  • Возможность автоматически ставить некоторые теги на все файлы в заданных подкаталогах;
  • Дальнейшие усовершенствования архитектуры кода (в первую очередь Web-приложения).

Реализовано в Vitaphoto 1.2

Версия Vitaphoto 1.2 соответствует 8 марта 2008 года.

  • Apache 2.x / mod_perl 2.x вместо Apache 1.x / mod_perl 1.x, логгирование через Log4perl;
  • Огромные усовершенствования структуры и архитектуры кода (он внезапно стал вменяемым);
  • Отдельный демон — обновлятор (ScaleDaemon). Обновление фотогалереи, основанное на мониторинге рабочих каталогов и обработке событий;
    • Теперь добавление/обновление/удаление фотографий из базы данных осуществляется отдельным демоном (scaledaemon.pl), и основано на мониторинге файловой системы через Sys::Gamin, ранее доработанный мною; это значит, что теперь система не занимается постоянными проверками в духе «а не изменились ли какие-нибудь файлы?», а точно в нужное время получает события от wikipedia:Gamin'а и действует на их основе;
  • Отказ от древовидной структуры галереи. На каждое фото ставятся теги, альбом — подмножество файлов, имеющих заданный набор тегов. Запрос всех файлов, имеющих заданный тег, по вводу URL вида http://vmx.yourcmc.ru/vitaphoto/tag/природа/;
    • Теперь для каждого файла можно (и нужно) задавать список меток (тегов), а альбом является срезом по заданному набору тегов, или просто содержит все файлы, как сейчас главная страница моей фотогалереи; также можно просматрировать списки файлов, имеющие задаваемый прямо в адресной строке тег (например, http://vmx.yourcmc.ru/vitaphoto/tag/art/);
  • Извлечение всех метаданных (тегов, имени, приоритета отображения, статуса скрыто/видимо) из имени файла;
    • Лично у меня теперь все фотографии имеют имена вроде «02-0935 (портрет, ВМК, Наташа Дышкант) +2 +H.jpg». 02-0935 — не обязательные числа, но для меня очень удобно их писать — это номер фотографии, присвоенный фотоаппаратом. В скобках перечислены метки. +2 — приоритет отображения, а +H означает, что фото скрыто;
  • Хитрая схема хранения фотографий. В двух словах её не опишешь… Если говорить о её преимуществах — то это:
    • отсутствие необходимости в постоянных перенаправлениях 302 Found браузера, обрабатываемых мод_перлом, так как автоматически создаются и поддерживаются символические ссылки на файл, миниатюру и изображение среднего размера по ID в базе;
    • по той же причине отсутствие проблем с запросом файлов с русскоязычными именами;
    • отсутствие необходимости удалять, а потом добавлять файл в базу при переименовании, по причине того, что заливаемые фотографии превращаются в символические ссылки на файл в специальной поддиректории «хранилище» (store);
    • эти символические ссылки относительные, поэтому нет проблем с копированием файлов по FTP (в случае абсолютных проблемы бы были, так как большинство FTP серверов делают chroot после авторизации пользователя);
  • Ссылки на фотографии по именам;
    • Добавлена возможность обращаться к фотографиям, масштабированным изображениям, альбомам по имени, а не только по ID — очень полезно для вставки ссылок на фотографии на внешние страницы. Так, например, я сделал во всех записях своего ЖЖ, в которых были выложены фотографии, дабы впредь больше ссылки менять не пришлось;
  • Каждый альбом также представлен отдельным файлом (текстовым), и также обновляется в базе данных ScaleDaemon-ом;
  • Возможность использования викиобразной (собственной разработки) разметки в описаниях альбомов;
    • Добавлена возможность относительно несложной викиобразной разметки описаний альбомов. Разметка — собственная разработка («велосипед», ага). Как несложно заметить, если в альбоме не будет фотографий, но будет описание — мы получим просто статическую страницу;
  • Страницы ошибок вместо чёрных надписей «401 Unathorized», «403 Forbidden» и т. п. на белом фоне;
    • Теперь вместо сообщений 401 Unauthorized, 403 Forbidden, 404 Not Found, 500 Internal Server Error вы увидите относительно дружелюбные страницы ошибок (например, 404 Not Found выглядит так).
  • Переписана куча кода;
    • Теперь код стал а) вменяемый и б) объектно-ориентированный (фотография — объект, фотоальбом — объект). Это я сделал, когда написал код обновления галереи в том же стиле, в каком был написан мною весь код летом, и понял, что дальше так жить нельзя. Код был укуренный, а теперь отпустило :) превеед, m0r1k! Ты меня почти воспитал;
  • Ведение простой статистики в БД.

Реализовано в Vitaphoto 1.1

Версия Vitaphoto 1.1 соответствует 17 августа 2007 года.

  • Авторизация (по сути бессмысленная, так как ничего не давала);
  • Чтение EXIF информации из фотографий.

Реализовано в Vitaphoto 1.0

Версия Vitaphoto 1.0 соответствует 19 июля 2007.

  • Первая версия фотогалереи;
  • Множественные конфигурации (несколько галерей под управлением одного приложения);
  • Автообновление всей галереи каждые N минут при HTTP-запросе;
  • Иерархическая структура галереи (каталог — альбом, файл — фотография);
  • Задание приоритетов, названий фото и каталогов в специальных файлах «Dirinfo».