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 глазами меня (автора).

СейчасУдобно?А как удобно?
Выкладывать фотки копированием и видеть единую папочку со своим фотоархивом.удобно
Отдельный синтаксис у атрибутов файлов (скрытые и т. п.).неудобноЗадавать их такими же тегами, как и всё остальное.
Редактировать описания альбомов и выражения в файлах.неудобноБрать их из статей YourcmcWiki.
Статические страницы лежат отдельными HTML’ками.неудобноБрать их из статей YourcmcWiki.
:С другой стороны, это будет завязка на MediaWiki.неудобно
Ссылки на альбомы и фотографии «нечеловекопонятные».неудобноДелать ссылки а-ля MediaWiki — прямо по названиям.
Есть комменты.удобно
:В них нет никакой разметки.неудобно
Текстовые части дизайна выглядят очень грустно, «нетипографично».неудобно
Голосование (+ и - отдельно).удобно
Своя база пользователей, и нет регистрации.неудобноАвторизоваться по базе YourcmcWiki.
Нет сортировки по дате, извлекаемой из EXIF.неудобноДобавить её.
Нет RSS-лент.неудобноДобавить их.
Код веб-приложения так себе организован.неудобноПеретащить на Sway Solstice.
:Sway::TagAlbum и Sway::TagEntry — ужос.неудобноПеретащить на Funq.
Нет выборки по дате.фиолетово 

Реализовано в 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».