Vitaphoto
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 просто экспорт. |
При скачивании фото название теряется. | неудобно | Не париться никакими симлинками и выводить ссылкой на сохранение полноразмерного изображения настоящее имя файла. |
Независимые ссылки на фотографии по началу имени до первой точки. | удобно | |
Создаваемые кучи симлинков усложняют код. | неудобно | Пошли они в жопу, эти симлинки! Делать всё кодом, брать из базы и отдавать перенаправление на нужный файл. |
Ссылки на альбомы «нечеловекопонятны». | неудобно | Делать ссылки на альбомы а-ля 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. Как заметили наиболее внимательные читатели, следующая версия будет также содержать собственное расширение для интеграции с 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».