Ищу желающих помочь с разработкой плагинов.
- svp
- Советчик
- Сообщения: 447
- Зарегистрирован: 26 авг 2008, 11:14
- Откуда: Белгород
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Ищу желающих помочь с разработкой плагинов.
Масса простейших абстрактных интерфейсов освобождает от необходимости плодить ещё бОльшую массу конкретных частных случаев. Можно, конечно, заделать один интерфейс со стороны приложения, но тогда плакало гибкое постепенное расширение объёмов потенциально выносимого в плагины функционала.
Прошлый мой пост следует понимать ка пример стратегии применения интерфейсов. На самом деле описания методов получения тайлов должны лежать в соответствующих zmp-файлах, то есть строго говоря в плагинах-слоёв. Механизм хранения локальных тайлов тоже реализуется в плагине (встроенном в планету изначально или нет -- не важно). Плагины у нас, ведь, должны собираться в пакеты. Следовательно такая схема позволит, к примеру, сделать плагин-слой-пакет, внутри которого будет реализация доставания тайлов, скажем, из GE.
Прошлый мой пост следует понимать ка пример стратегии применения интерфейсов. На самом деле описания методов получения тайлов должны лежать в соответствующих zmp-файлах, то есть строго говоря в плагинах-слоёв. Механизм хранения локальных тайлов тоже реализуется в плагине (встроенном в планету изначально или нет -- не важно). Плагины у нас, ведь, должны собираться в пакеты. Следовательно такая схема позволит, к примеру, сделать плагин-слой-пакет, внутри которого будет реализация доставания тайлов, скажем, из GE.
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Ищу желающих помочь с разработкой плагинов.
Вот что ты это написал? Это ты описал загрузчик тайлов или хранилище?Parasite писал(а): В плагин:
map_name
X\Y\Z
V
URL (опционально)
Из плагина:
:content_data
override_cache_path
Что такое map_name? Откуда возьмется V? Если плагин сохранит файл куда сам захочет то как его потом Планета найдет что бы прочитать?
Извини, но с внутренней логикой это не согласуется совсем. Проще написать новую прогу.
Теперь svp ну ты сам подумай что ты пишешь.
Ну и куда и зачем его девать без всего остального. Плагин-гео-точка звучит бредово.svp писал(а):- интерфейс гео-точки.
Ну и кто их будет вызывать? И что они делать будут, в состоянии когда прога им пока ничего предоставить не может? Я же написал, что ни одного сервиса плагинам Планета пока не предоставляет.svp писал(а):Постепенно расширяя, наследуюя и документируя интерфейсы можно не задумываться о типах плагинов. Просто у интерфейса плагина сделать несколько методов (инициализации, запуска, финализации), а в качестве параметра инициализации передавать интерфейс приложения, возвращающий через свойства или по запросу нужные интерфейсы. Вполне классическая схема.
Это абсолютно правильно. Просто, zmp- это кусок конфига, а не кода. То что там есть паскалевский скрипт ничего не меняет, это просто выдернутые наружу настройки.svp писал(а):ИМХО, совершенно неправильно, что zmp-файлы как-то логически будут чем-то иным нежели плагины.
И хранить их можно в очень разных контейнерах. Я планирую в будущем сделать самодостаточные контейнеры на базе SQLite или Беркли ДБ, которые будут объединять базу тайлов и инфу содержащуюся сейчас в zmp. Что бы можно было ту же историческую карту запхать в один контейнер и просто открывать его, а не морочить голову с отдельным zmp и отдельными тайлами.
Ну год назад так оно и было. Сейчас несколько лучше, но все еще рано говорить о плагинах реализующих тайлохранилище.svp писал(а):Я исходники Планеты давно не листал, тяжело будет заставить её брать тайлы у соответствующего интерфейса, вместо нативной реализации загрузки? Может там всё так размазано по коду, что проще переписать, чем такой рефакторинг?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Ищу желающих помочь с разработкой плагинов.
Загрузчик, вестимо. С хранилищем еще проще - отдал в плагин хранилища контент и желаемое место записи (override_cache_path), дальше пускай плагин разбирается что с этим делать, и писать ли контент в жестко заданное место (согласно своей логике) либо в override_cache_path согласно пожеланий САСа\пользователя\загрузчика.vdemidov писал(а):Вот что ты это написал? Это ты описал загрузчик тайлов или хранилище?Parasite писал(а): В плагин:
map_name
X\Y\Z
V
URL (опционально)
Из плагина:
:content_data
override_cache_path
Таким образом например тайлы с контентом DG можно писать в нормальный чистый кэш, а ВНЕЗАПНО приходящие белые тайлы в нем же - кидать в null или в ./errors через override_cache_path, и в чистый кэш оно не пойдет и чистить потом не надо будет. А просканировав потом (ручками) ./errors - получаем список тайлов для перекачки, без необходимости перелопачивать весь многогигабайтный чистый кэш на предмет нескачанного.
Имя карты.vdemidov писал(а):Что такое map_name?
А сейчас оно откуда берется (и используется - правда, только при скачке, а при сохранении оно уже почему-то теряется, и это один из мерзких недостатков САСа репортируемый в сюда уже года два и из-за которого я например так и не могу прикрутить нормальную поддержку ГЕ кроме как юзая сторонее неСАСовое хранилище - ну да ладно, не будем об этом...)?vdemidov писал(а):Откуда возьмется V?
Спросить у текущего плагина-хранилища "Хочу контент тайла X\Y\Z\ версии V для карты XXXX". Плагин разберется, где оно у него - и выдаст контент или еррор.vdemidov писал(а):Если плагин сохранит файл куда сам захочет то как его потом Планета найдет что бы прочитать?
Если плагин хранилища на этапе сохранения тайла поддерживал override_cache_path - то очевидно, что он должен поддерживать оное и при чтении с хранилища тоже. Как именно - зависит от плагина, разумеется.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Ищу желающих помочь с разработкой плагинов.
Да лично мне-то без разницы, просто других более чувствительных хомяков распугаем. Их тут в этой ветке и так не сказать чтобы валом, так еще и ломание копий тут.garl писал(а):нормально нормально. очень даже конструктивный разговор.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Ищу желающих помочь с разработкой плагинов.
Ну распуганных хомяков запишем в неизбежные потериParasite писал(а):Да лично мне-то без разницы, просто других более чувствительных хомяков распугаем. Их тут в этой ветке и так не сказать чтобы валом, так еще и ломание копий тут.
Совершенно не очевидно после "override_cache_path". Какого хрена плагин отвечающий за скачивание должен командывать куда записывать?Parasite писал(а):А по описанию процесса в предыдущем посте - разве не очевидно?
Дальше.
Из плагина: content_data
А ты не думаешь, что все не так просто? Что плагин должен уметь сообщить планете, что тайла нет на сервере? или что уже забанили? или что сервер в дауне? Или что еще качалке скорее всего понадобиться передать настройки прокси? А еще тут регулярно вопросы, о том как проверить не обновился ли тайл на сервере, как прикажешь это делать с таким плагином. А еще от качалки нужно получить content type скачанного что бы знать как его открывать и нужно ли конвертить.
В общем с качалкой тайлов куча вопросов, я кончено хочу сдеать такой плагин, но пока еще код закачки тайла в Планете слишком размазан, что бы его выделять в плагин.
В общем с этим разобрались. Еще предложения?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Ищу желающих помочь с разработкой плагинов.
Идем дальше.
Какое имя? Просто текстовое, так оно на разных языках может быть разным. Сейчас и в ближайшем будущем для идентификации используется GUID.Parasite писал(а):Имя карты.vdemidov писал(а):Что такое map_name?
Ну вот где хранить версию для тайла в SAS? Заводить под каждый тайл еще файлик с версией? или в имени файла, но если в имени, то как прикажешь потом этот файл находить, особенно учитывая то, что во многих сервисах текст номера версии весьма произвольный. Так что таки не будем об этом. Пока нет и в ближайшем будущем не будет.Parasite писал(а):А сейчас оно откуда берется (и используется - правда, только при скачке, а при сохранении оно уже почему-то теряется, и это один из мерзких недостатков САСа репортируемый в сюда уже года два и из-за которого я например так и не могу прикрутить нормальную поддержку ГЕ кроме как юзая сторонее неСАСовое хранилище - ну да ладно, не будем об этом...)?vdemidov писал(а):Откуда возьмется V?
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Ищу желающих помочь с разработкой плагинов.
Такого, что ситуация "эти тайлы писать в основной кэш, а эти - вооон туда" - встречается сплошь и рядом. Например, можно сделать экспорт нужного выделения по карте в отдельную папку\на флешку СРАЗУ в процессе скачки, а не двумя операциями. Либо писать одновременно в ДВЕ локации - в кэш и на флешку. Или еще как...Короче, это НУЖНО.vdemidov писал(а):Совершенно не очевидно после "override_cache_path". Какого хрена плагин отвечающий за скачивание должен командывать куда записывать?
См. аналоги в HC: hc.cache.path, hc.cache_file_name, re.replace (все три - R/W в в зоне действия плагина).
--------
if url:find('hl=ru-RU', 1, true) then
url = re.replace(url, [[/hl=]], '/dbRoot.v5/hl=') -- правило замены урла
local source = hc.cache_path .. hc.prepare_url(url) -- правило замены path
...
hc.cache_file_name = hc.prepare_url(url) -- пишем русские dbroot_GE тайлы в сторону от основного кэша
local file = io.open(hc.cache_file_name, 'w')
local file1 = io.open(source, 'w')
--------
Качалка будет _в этом же плагине_, для начала (позже, что более правильно - сделать плагин к сасу и на закачку тоже). Благо что встроенная сасовая качалка на наст.момент далека от совершенства (мультитреды например тут просят с самого основания, мультипрокси недавно просили, и тд).vdemidov писал(а):А еще тут регулярно вопросы, о том как проверить не обновился ли тайл на сервере, как прикажешь это делать с таким плагином. А еще от качалки нужно получить content type скачанного что бы знать как его открывать и нужно ли конвертить.
Про content_type - разумеется, я же не все до единой плагинные поля перечислял. Я описал лишь общую идею, а конкретные списки параметров как раз и подлежат обсуждению и добавлению.
Например можно вычислять факт изменения тайла по хэшу, и передавать пунктик "а у нас уже есть точно такой же тайл в кэше, то есть мы не обновились!" в САС тоже... Да много чего можно. В том же HC тоже от версии к версии докидываются и расширяются возможности плагинов, при этом старые как работали так и работают (но ничего не мешает их обучить новым фичам, если охота - они скриптовые и открытые).
Обычное имя. Можно заюзать уже употребимые - LAND, MAP, BOTH, GURTAM и проч по списку уже существующих zmp в сасе.vdemidov писал(а):Какое имя? Просто текстовое, так оно на разных языках может быть разным.
Зачем нужно? Затем, что на многих сервисах есть несколько карт, различающихся лишь парой символов в урле (а вся логика формирования урла - одинакова для всех). Пример - гугль. Нет смысла делать несколько плагинов на такие серверы - имхо достаточно сделать один (например GM.pl) и у него уже спрашивать имя нужного серввиса. Плагин разберется, построит нужный УРЛ, скачает и отдаст сасу контент.
А щас-то она где хранится?vdemidov писал(а):Ну вот где хранить версию для тайла в SAS?
По уму бы, конечно, надо бы автодетект текущей версии....но это уж совсем уж задел на будущее.
В каком бы формате он ни был - в кэше он обязан присутствовать как один из идентификаторов каждого отдельного тайла. Это такой же параметр как Х\У.vdemidov писал(а):во многих сервисах текст номера версии весьма произвольный.
PS: а в ГЕ еще и _время_ к.тайла есть, вдобавок к версии и координатам\зуму...
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: Ищу желающих помочь с разработкой плагинов.
Э нет. Плагин это в первую очередь объект и я буду придерживаться принципа единой функциональности. Тоесть если это качалка, то она может только отдавать тайлы или сообщать об ошибках. То что он может для себя что-то сохранять, то это его дело пусть сохраняет, только вот Планете об этом знать не положено. Если тебе нужно что бы тайлы писались в разные места или в разные контейнеры, то это уже вопрос к хранилищу тайлов.Parasite писал(а):Такого, что ситуация "эти тайлы писать в основной кэш, а эти - вооон туда" - встречается сплошь и рядом. Например, можно сделать экспорт нужного выделения по карте в отдельную папку\на флешку СРАЗУ в процессе скачки, а не двумя операциями. Либо писать одновременно в ДВЕ локации - в кэш и на флешку. Или еще как...Короче, это НУЖНО.
Ну это таки так. Все руки никак не дойдут. Это будет один из ближайших типов плагинов, но как только более менее определюсь какой у него интерфейс должен быть.Parasite писал(а): Благо что встроенная сасовая качалка на наст.момент далека от совершенства (мультитреды например тут просят с самого основания, мультипрокси недавно просили, и тд).
И кстати, количество коннектов на сервер прекрасно задается в zmp и по-умолчанию равно 1 (MaxConnectToServerCount еще осенью прошлой появилось, и вроде как для DG использовалось). Тоесть если хочешь что бы качалось в несколько потоков с сервера нужно запускать несколько закачек и не забыть добавить колличество коннектов к серверу в zmp.
Да нигде она не хранится. В принципе. Я говорю про версию скачанного тайла. А не про версию, которая идет в запрос.Parasite писал(а):А щас-то она где хранится?vdemidov писал(а):Ну вот где хранить версию для тайла в SAS?![]()
От ГЕ никто не требует поддержки простого файлового кеша. А вот представь, что я завтра скажу что все. Никаких файловых кешей, только контейнер на Беркли ДБ. Сколько будет криков возмущения? В общем с версиями тайлов вопрос закрыт. Я их добавлять не собираюсь, feya тоже.Parasite писал(а):В каком бы формате он ни был - в кэше он обязан присутствовать как один из идентификаторов каждого отдельного тайла. Это такой же параметр как Х\У.PS: а в ГЕ еще и _время_ к.тайла есть, вдобавок к версии и координатам\зуму...
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
- Parasite
- Администратор
- Сообщения: 5646
- Зарегистрирован: 23 окт 2008, 17:38
- Благодарил (а): 124 раза
- Поблагодарили: 508 раз
Re: Ищу желающих помочь с разработкой плагинов.
Та не вопрос. Лишь бы оно работало и делало что нужно.vdemidov писал(а):Э нет. Плагин это в первую очередь объект и я буду придерживаться принципа единой функциональности. Тоесть если это качалка, то она может только отдавать тайлы или сообщать об ошибках. То что он может для себя что-то сохранять, то это его дело пусть сохраняет, только вот Планете об этом знать не положено. Если тебе нужно что бы тайлы писались в разные места или в разные контейнеры, то это уже вопрос к хранилищу тайлов.Parasite писал(а):Такого, что ситуация "эти тайлы писать в основной кэш, а эти - вооон туда" - встречается сплошь и рядом. Например, можно сделать экспорт нужного выделения по карте в отдельную папку\на флешку СРАЗУ в процессе скачки, а не двумя операциями. Либо писать одновременно в ДВЕ локации - в кэш и на флешку. Или еще как...Короче, это НУЖНО.
Так я и щас то же самое сказал. Функция добывания тайла из инета будет в самом плагине (в каждом), а не внутри САСа где на нее практически никак влиять нельзя.vdemidov писал(а):Ты определись. Ты же говорил, что это и есть плагин-качалка.Parasite писал(а):Качалка будет _в этом же плагине_, для начала
При этом появится возможность тонкой настройки процесса скачки в том же плагине и исключительно для данного сервиса (например где-то можно качать в сто потоков одновременно, где-то - только в один по очереди и с задержками, где-то - с хитрыми хидерами, где-то можно на лету тайлы кропать\ресайзить прежде чем в сас отдавать, и проч.)
Не знал. Спасибо, воспользуюсь.vdemidov писал(а):Ну это таки так. Все руки никак не дойдут. Это будет один из ближайших типов плагинов, но как только более менее определюсь какой у него интерфейс должен быть.Parasite писал(а): Благо что встроенная сасовая качалка на наст.момент далека от совершенства (мультитреды например тут просят с самого основания, мультипрокси недавно просили, и тд).
И кстати, количество коннектов на сервер прекрасно задается в zmp и по-умолчанию равно 1 (MaxConnectToServerCount еще осенью прошлой появилось, и вроде как для DG использовалось). Тоесть если хочешь что бы качалось в несколько потоков с сервера нужно запускать несколько закачек и не забыть добавить колличество коннектов к серверу в zmp.
Дак вот и я тебе про что? Теряется кусочек важной инфы. Безврзвратно и без возможности восстановления.vdemidov писал(а):Да нигде она не хранится. В принципе. Я говорю про версию скачанного тайла. А не про версию, которая идет в запрос.Parasite писал(а):А щас-то она где хранится?vdemidov писал(а):Ну вот где хранить версию для тайла в SAS?![]()
Для тайлового кэша ее хранить нужно в имени папки (.cache/<map_name>/<ver>/Xi/X/Yi/Y.jpg).
Для базовода - тем более очевидно что рядом с тайлом (пример - SatMap, там изначально версионность была).
The only difference between me and a mad man is that I am not mad. /Salvador Dali/


- svp
- Советчик
- Сообщения: 447
- Зарегистрирован: 26 авг 2008, 11:14
- Откуда: Белгород
- Благодарил (а): 2 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Ищу желающих помочь с разработкой плагинов.
Я всегда думаю, что пишу. К тому же я нигде не писал про "Плагин-гео-точку". Интерфейс -- не есть плагин.vdemidov писал(а):Теперь svp ну ты сам подумай что ты пишешь.Ну и куда и зачем его девать без всего остального. Плагин-гео-точка звучит бредово.svp писал(а):- интерфейс гео-точки.
Большинство плагинов (не источники тайлов, и не тайлохранилища, и не им подобные) будут вызываться по инициативе пользователя и им не нужно передавать какие-то специфические данные. Данные контекста через интерфейсы приложения они могут получить сами.
Например, специфический плагин склейки: Пользователь жмёт кнопку или сочетание клавиш, на которые повешен запуск плагина. При этом приложение вызывает метод интерфейса плагина Start(App: IPluginApplication).
Плагин, первым делом пытается запросить необходимые ему интерфейсы: через App, например, ISASPlanet. Не получил -- exception; получил -- едем дальше. Берём ISASPlanet.CurrentSelection типа ISelection. Проверяем селекшн на пустоту и дальше по обстоятельствам. При необходимости можно запросить через ISelection, к примеру, IRectSelection или IPolySelection. Дальше плагин создаёт отдельный процесс, рисует немодальное окно с отражением процесса своей работы и по завершении закрывается.
То же самое с интерфейсом Гео-точки. Плагину может быть нужны текущие координаты, для, к примеру, геокодирования, чтобы поиск населённого пункта вёлся с учетом функции релевантности, зависящей от расстояния от текущей точки.
Наполнить ISASPlanet такими полями можно уже сейчас. Можно добавить туда методы перехода к заданным координатам, сдвига экрана на вектор, зума и т.д., что доступно через интерфейс уже сейчас.
Именно об этом я и говорил.
Прога им предоставит свой интерфейс, который можно постепенно расширять. Интерфейсы могут наследоваться и включать в себя версию. Тогда обратная совместимость со старыми плагинами сохранится.vdemidov писал(а):Ну и кто их будет вызывать? И что они делать будут, в состоянии когда прога им пока ничего предоставить не может? Я же написал, что ни одного сервиса плагинам Планета пока не предоставляет.svp писал(а):Постепенно расширяя, наследуюя и документируя интерфейсы можно не задумываться о типах плагинов. Просто у интерфейса плагина сделать несколько методов (инициализации, запуска, финализации), а в качестве параметра инициализации передавать интерфейс приложения, возвращающий через свойства или по запросу нужные интерфейсы. Вполне классическая схема.
К примеру, решили мы добавить в тот же ISASPlanet новый метод управления переключением карт, или зуммом. Чтобы старые плагины не переделывать, можно создать ISASPlanet_v2, унаследованный от ISASPlanet, в котором и будут реализованы нужные вещи. Плагин, не получив от планеты нужного интерфейса, может грамотно показать эксепшн. Старые плагины будут запрашивать старые интерфейсы, новые -- новые. Со временем содержимое старых интерфейсов можно сливать в базовый класс, тогда уж очень старые плагины перестанут работать и их придётся перекомпилить с расчетом на интерфейсы новых версий.
Ну это, ИМХО, чересчур. Вот есть я и, скажем, паразит. У него контейнер с GM 200 гигов, а у меня 30. Обновился механизм защиты у гугла. Что делать? Как апдейтить наши настройки в контейнерах? Настройки отдельно, а котлеты отдельно. Случай, когда их желательно иметь вместе скорее частный.vdemidov писал(а):Я планирую в будущем сделать самодостаточные контейнеры на базе SQLite или Беркли ДБ, которые будут объединять базу тайлов и инфу содержащуюся сейчас в zmp. Что бы можно было ту же историческую карту запхать в один контейнер и просто открывать его, а не морочить голову с отдельным zmp и отдельными тайлами.svp писал(а):ИМХО, совершенно неправильно, что zmp-файлы как-то логически будут чем-то иным нежели плагины.