Vitaphoto: Ловушки — различия между версиями

Материал из YourcmcWiki
Перейти к: навигация, поиск
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
«''Hooks''», или «''ловушки''», или «''точки расширения''», или «''добавочные процедуры''» — специальные точки в коде, в которые можно встраивать вызовы дополнительных процедур без модификации кода вызывающего модуля. Таким образом достигается расширяемость приложения. Пример: [[mediawikiwiki:MediaWiki|MediaWiki]] широко использует механизм ловушек, что и привело к наличию примерно 1500 расширений для неё.
+
«''Hooks''», или «''ловушки''», или «''точки расширения''», или «''добавочные процедуры''» — специальные точки в коде, в которые можно встраивать вызовы дополнительных процедур без модификации кода вызывающего модуля. Таким образом достигается расширяемость приложения. Пример: [[mediawikiwiki:MediaWiki|MediaWiki]] широко использует механизм ловушек, что и привело к наличию примерно 1500 расширений для неё.
  
[[Vitaphoto]] 1.4 также будет содержать механизм «хуков»; в сочетании с простотой платформы [[Sway Solstice]], теоретически, это должно дать неплохую расширяемость.
+
[[Vitaphoto]] V3 / 1.4 также содержить механизм «хуков»; в сочетании с простотой платформы [[Sway Solstice]], теоретически, это должно дать неплохую расширяемость.
  
Для чего нужны хуки в [[Vitaphoto]]? Например:
+
Для чего нужны хуки в [[Vitaphoto]], какие расширения тут возможны? Вот примеры:
  
* Чтобы можно было сделать расширение «видео».
+
* {{ok}} '''«Видео»''' — чтобы можно было выкладывать не только фотографии, а также видеоролики. Можно даже с автоматическим перекодированием в фоновом режиме отдельным процессом scaledaemon’а.
* Чтобы можно было заменить организацию галереи в виде множества фото на иерархическую, по названиям каталогов с файлами.
+
* '''«Иерархическая галерея»''' — замена теговой организации на иерархическую, прямо по физическим названиям каталогов и файлов.
* Чтобы можно было создать дополнительную спецстраницу, выполняющую определённую функцию.
+
* '''«Визитка для меток»''' — спецстраница, позволяющая по любому набору меток (тегов) вывести для каждого из них по N (N ~ 3) наиболее популярных фотографии, чтобы «прикинуть, о чём это». Плюс устанавливающая себя в качестве обработчика ссылок на несовместный набор меток — то есть такой набор, для которого нет ни одной фотографии, имеющей все эти метки.
* Чтобы можно было добавить обработчик неизвестного пространства имён в ссылках.
+
* '''«Возможно, вы имели ввиду»''' — установка обработчика неизвестных приложению меток с использованием подстрок («Вася Пупкин» по метке просто «Пупкин») или редакторского расстояния («долмен» вместо «дольмен»).
 +
* Обязательно нужна возможность обработки неизвестного «пространства имён» в ссылках (первого компонента ссылки). Тут фантазий может быть море, например, RSS-трансляция какого-нибудь блога или другое извращение.
  
Первые два примера в первую очередь содержат хуки в '''ScaleDaemon'''. Идеология следующая: вся информация о файле состоит из двух частей — имени и содержимого. '''ScaleDaemon''' отслеживает их изменения. Следовательно, нужно добавить хуки:
+
Первые два примера в первую очередь содержат хуки в '''ScaleDaemon'''. Идеология следующая: вся информация о файле состоит из двух частей — имени и содержимого. '''ScaleDaemon''' отслеживает их изменения. Следовательно, нужно добавить хуки:
  
* <tt>ParseFileName</tt> например, «взять путь из имени».
+
* <tt>ParseFileName</tt> — например, «взять путь из имени».
* <tt>ParseFileData</tt> например, «взять EXIF-метаданные из имени».
+
* <tt>ParseFileData</tt> — например, «взять EXIF-метаданные из имени».
* <tt>SaveFile</tt> «сохранить EXIF в базу», «сохранить теги в базу».
+
* <tt>SaveFile</tt> — «сохранить EXIF в базу», «сохранить теги в базу».
* <tt>ScaleFile</tt> предположительно «эксклюзивная» ловушка (то есть с ровно одним обработчиком) для масштабатора (:-D) изображений.
+
* <tt>ScaleFile</tt> — предположительно «эксклюзивная» ловушка (то есть с ровно одним обработчиком) для масштабатора (:-D) изображений.
* <tt>DeleteFile</tt> «удалить EXIF из базы» (хотя это можно поручить внешним ключам).
+
* <tt>DeleteFile</tt> — «удалить EXIF из базы» (хотя это можно поручить внешним ключам).
  
[[Категория:Разработка]]
+
== Список хуков Vitaphoto ==
 +
 
 +
<tab sep="bar" head="left" class="simpletable">
 +
ParseFileName | $from $to $w $h
 +
ParseFileData | \%old \%new $fn $outNoParseTags
 +
SaveFile      | Аргументы от ParseFileData
 +
ScaleFile    | Аргументы от ParseFileData и SaveFile
 +
DeleteFile    | \%row
 +
UnknownNamespace | \$uri $ns_matched \$outNs
 +
MakeLink        | $ns \%argv $keep \$outUrl
 +
AfterOutPhoto    | \%row
 +
GetAlbumImages  | $pagets \@tags \@outImages \$outRetkey
 +
AlbumNoImages    | \@tagids $pagets
 +
AfterOutImages  | \@images $pagets \@tags \@tagids \@page
 +
FormatAlbumImage | \%row
 +
GetUnknownTags  | \@tags \@unknown
 +
UnknownSpecialPage    | $special $uripart
 +
PhotoNotFoundByName  | $name $sha1 \@outRows
 +
TransformTemplateList | \@templates
 +
TemplateFilter        | \$content
 +
</tab>
 +
 
 +
[[Категория:Архив]]
 +
[[Категория:Sway]]

Текущая версия на 15:43, 20 июня 2016

«Hooks», или «ловушки», или «точки расширения», или «добавочные процедуры» — специальные точки в коде, в которые можно встраивать вызовы дополнительных процедур без модификации кода вызывающего модуля. Таким образом достигается расширяемость приложения. Пример: MediaWiki широко использует механизм ловушек, что и привело к наличию примерно 1500 расширений для неё.

Vitaphoto V3 / 1.4 также содержить механизм «хуков»; в сочетании с простотой платформы Sway Solstice, теоретически, это должно дать неплохую расширяемость.

Для чего нужны хуки в Vitaphoto, какие расширения тут возможны? Вот примеры:

  • Ok16.png «Видео» — чтобы можно было выкладывать не только фотографии, а также видеоролики. Можно даже с автоматическим перекодированием в фоновом режиме отдельным процессом scaledaemon’а.
  • «Иерархическая галерея» — замена теговой организации на иерархическую, прямо по физическим названиям каталогов и файлов.
  • «Визитка для меток» — спецстраница, позволяющая по любому набору меток (тегов) вывести для каждого из них по N (N ~ 3) наиболее популярных фотографии, чтобы «прикинуть, о чём это». Плюс устанавливающая себя в качестве обработчика ссылок на несовместный набор меток — то есть такой набор, для которого нет ни одной фотографии, имеющей все эти метки.
  • «Возможно, вы имели ввиду» — установка обработчика неизвестных приложению меток с использованием подстрок («Вася Пупкин» по метке просто «Пупкин») или редакторского расстояния («долмен» вместо «дольмен»).
  • Обязательно нужна возможность обработки неизвестного «пространства имён» в ссылках (первого компонента ссылки). Тут фантазий может быть море, например, RSS-трансляция какого-нибудь блога или другое извращение.

Первые два примера в первую очередь содержат хуки в ScaleDaemon. Идеология следующая: вся информация о файле состоит из двух частей — имени и содержимого. ScaleDaemon отслеживает их изменения. Следовательно, нужно добавить хуки:

  • ParseFileName — например, «взять путь из имени».
  • ParseFileData — например, «взять EXIF-метаданные из имени».
  • SaveFile — «сохранить EXIF в базу», «сохранить теги в базу».
  • ScaleFile — предположительно «эксклюзивная» ловушка (то есть с ровно одним обработчиком) для масштабатора (:-D) изображений.
  • DeleteFile — «удалить EXIF из базы» (хотя это можно поручить внешним ключам).

Список хуков Vitaphoto

ParseFileName $from $to $w $h
ParseFileData \%old \%new $fn $outNoParseTags
SaveFile Аргументы от ParseFileData
ScaleFile Аргументы от ParseFileData и SaveFile
DeleteFile \%row
UnknownNamespace \$uri $ns_matched \$outNs
MakeLink $ns \%argv $keep \$outUrl
AfterOutPhoto \%row
GetAlbumImages $pagets \@tags \@outImages \$outRetkey
AlbumNoImages \@tagids $pagets
AfterOutImages \@images $pagets \@tags \@tagids \@page
FormatAlbumImage \%row
GetUnknownTags \@tags \@unknown
UnknownSpecialPage $special $uripart
PhotoNotFoundByName $name $sha1 \@outRows
TransformTemplateList \@templates
TemplateFilter \$content