Vitaphoto: Ловушки — различия между версиями
м (Новая страница: ««''Hooks''», или «''ловушки''», или «''точки расширения''», или «''добавочные процедуры''» — специ...») |
(Массовая правка: замена Категория:Разработка на Категория:Архив, замена Category:Разработка на Категория:Архив) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
«''Hooks''», или «''ловушки''», или «''точки расширения''», или «''добавочные процедуры''» — специальные точки в коде, в которые можно встраивать вызовы дополнительных процедур без модификации кода вызывающего модуля. Таким образом достигается расширяемость приложения. Пример: [[mediawikiwiki:MediaWiki|MediaWiki]] широко использует механизм ловушек, что и привело к наличию примерно 1500 расширений для неё. | «''Hooks''», или «''ловушки''», или «''точки расширения''», или «''добавочные процедуры''» — специальные точки в коде, в которые можно встраивать вызовы дополнительных процедур без модификации кода вызывающего модуля. Таким образом достигается расширяемость приложения. Пример: [[mediawikiwiki:MediaWiki|MediaWiki]] широко использует механизм ловушек, что и привело к наличию примерно 1500 расширений для неё. | ||
− | [[Vitaphoto]] 1.4 также | + | [[Vitaphoto]] V3 / 1.4 также содержить механизм «хуков»; в сочетании с простотой платформы [[Sway Solstice]], теоретически, это должно дать неплохую расширяемость. |
− | Для чего нужны хуки в [[Vitaphoto]]? | + | Для чего нужны хуки в [[Vitaphoto]], какие расширения тут возможны? Вот примеры: |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | [[Категория: | + | * {{ok}} '''«Видео»''' — чтобы можно было выкладывать не только фотографии, а также видеоролики. Можно даже с автоматическим перекодированием в фоновом режиме отдельным процессом scaledaemon’а. |
+ | * '''«Иерархическая галерея»''' — замена теговой организации на иерархическую, прямо по физическим названиям каталогов и файлов. | ||
+ | * '''«Визитка для меток»''' — спецстраница, позволяющая по любому набору меток (тегов) вывести для каждого из них по N (N ~ 3) наиболее популярных фотографии, чтобы «прикинуть, о чём это». Плюс устанавливающая себя в качестве обработчика ссылок на несовместный набор меток — то есть такой набор, для которого нет ни одной фотографии, имеющей все эти метки. | ||
+ | * '''«Возможно, вы имели ввиду»''' — установка обработчика неизвестных приложению меток с использованием подстрок («Вася Пупкин» по метке просто «Пупкин») или редакторского расстояния («долмен» вместо «дольмен»). | ||
+ | * Обязательно нужна возможность обработки неизвестного «пространства имён» в ссылках (первого компонента ссылки). Тут фантазий может быть море, например, RSS-трансляция какого-нибудь блога или другое извращение. | ||
+ | |||
+ | Первые два примера в первую очередь содержат хуки в '''ScaleDaemon'''. Идеология следующая: вся информация о файле состоит из двух частей — имени и содержимого. '''ScaleDaemon''' отслеживает их изменения. Следовательно, нужно добавить хуки: | ||
+ | |||
+ | * <tt>ParseFileName</tt> — например, «взять путь из имени». | ||
+ | * <tt>ParseFileData</tt> — например, «взять EXIF-метаданные из имени». | ||
+ | * <tt>SaveFile</tt> — «сохранить EXIF в базу», «сохранить теги в базу». | ||
+ | * <tt>ScaleFile</tt> — предположительно «эксклюзивная» ловушка (то есть с ровно одним обработчиком) для масштабатора (:-D) изображений. | ||
+ | * <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, какие расширения тут возможны? Вот примеры:
- «Видео» — чтобы можно было выкладывать не только фотографии, а также видеоролики. Можно даже с автоматическим перекодированием в фоновом режиме отдельным процессом 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 |