Vitaphoto — различия между версиями

Материал из YourcmcWiki
Перейти к: навигация, поиск
(Планы)
(Планы)
Строка 41: Строка 41:
 
Разработка ведётся эпизодически — по принципу «в попу стрельнуло». А в попу обычно стреляет сделать что-нибудь глобальное. Мелочи не привлекают.
 
Разработка ведётся эпизодически — по принципу «в попу стрельнуло». А в попу обычно стреляет сделать что-нибудь глобальное. Мелочи не привлекают.
  
Итак, очередной назревший план:
+
«Текущий взгляд»: плюсы и минусы Vitaphoto глазами меня (автора).
  
* Перенос [[Vitaphoto]] на Новую Платформу [[Sway Solstice]].
+
* Выкладывать фотки копированием и видеть единую папочку со своим фотоархивом — {{handy}}!
** Очередной глобальный refuck кода.
+
* Отдельный синтаксис у атрибутов файлов (скрытые и т. п.) — {{handy|no}}.
** Запуск ScaleDaemon на основе Sway фреймворка.
+
*: Удобно сделать их такими же тегами, как и всё остальное.
** Использование [[Funq]] в ORM.
+
* Редактировать описания альбомов и выражения в файлах — {{handy|no}}.
** Вероятно, разработка несложного ORM-движка на основе нужд [[Vitaphoto]], опыта ковыряния ORM'а [[lib:Bugzilla|Bugzilla]] и [[Perl, ORM и новый взгляд на мир: Лоровское 4.2|отвращения к стандартному подходу]].
+
*: Удобно брать их из статей [[{{SITENAME}}]].
* Интеграция с MediaWiki:
+
* Статические страницы лежат отдельными HTML’ками — {{handy|no}}.
** Авторизация по базе данных MediaWiki.
+
*: Удобно брать их из статей [[{{SITENAME}}]].
** Вставка фотографий из Vitaphoto в MediaWiki.
+
* Есть комменты — {{handy}}. В них нет никакой разметки — {{handy|no}}.
** Экспорт информации о фотографиях из MediaWiki.
+
* Текстовые части дизайна выглядят очень грустно, «нетипографично» — {{handy|no}}.
* Хранение истории всех изменений.
+
* Голосование (плюсы и минусы отдельно) — {{handy}}.
* RSS-ленты фотографий по альбомам и/или запросам. ''И почему я этого до сих пор не сделал?''
+
* Отдельная база юзеров — {{handy|no}}. Регистрации нет — {{handy|no}}.
 
+
*: Удобно авторизоваться по базе [[{{SITENAME}}]].
Принцип ФС-ориентированности, в то же время, останется в силе.
+
* Нет сортировки по дате, извлекаемой из EXIF — {{handy|no}}.
 +
* Нет RSS-лент — {{handy|no}}.
 +
* Код веб-приложения так себе организован — {{handy|no}}.
 +
*: Например, Sway::TagAlbum и Sway::TagEntry — ужос, конечно.
 +
*: Решение — перетащить на [[Sway Solstice]].
 +
* Нет выборки по дате — более-менее нейтрально.
  
 
=== Реализовано в Vitaphoto 1.3 ===
 
=== Реализовано в Vitaphoto 1.3 ===

Версия 16:48, 25 октября 2009

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.
  • Есть комменты — удобно. В них нет никакой разметки — неудобно.
  • Текстовые части дизайна выглядят очень грустно, «нетипографично» — неудобно.
  • Голосование (плюсы и минусы отдельно) — удобно.
  • Отдельная база юзеров — неудобно. Регистрации нет — неудобно.
    Удобно авторизоваться по базе YourcmcWiki.
  • Нет сортировки по дате, извлекаемой из EXIF — неудобно.
  • Нет RSS-лент — неудобно.
  • Код веб-приложения так себе организован — неудобно.
    Например, Sway::TagAlbum и Sway::TagEntry — ужос, конечно.
    Решение — перетащить на Sway Solstice.
  • Нет выборки по дате — более-менее нейтрально.

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