Ошибка при загрузке emoticons

Привет всем!
Я сделал набор анимированных иконок, проверил в PSI, все работает (естественно, без анимации), а когда устанавливаю этот набор в Tkabber он тут же вылетает с ошибкой alloc: invalid block: 0xc6d3648: ef ef 6f (адреса обычно разные). Причем плагин debug ничего не показывает.
У меня подозрение что не хватает памяти (jisp файл весит 630 килобайт, а icondef.xml - 14 килобайт), но не знаю как это проверить. Может кто из разработчиков сможет помочь? Или хотя бы подскажут, как отладить. Если надо, то вышлю jisp-файл.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Все проще!

На самом деле нет поддержки анимированных жифов! Я такой же пак сделал, но только когда жмешь альт+е они все статичные (первый кадр) Так что, предлагаю запрос на фичу: поддержку анимированных жифов

Поддержка есть, но не полноценная

Я уменьшал количество иконок в xml-файле, и все нормально работало - анимация прорисовывалсь как и в окне выбора смайликов, так и в самих сообщениях. Проблема в библиотеке tkimg - она просто не поддерживает сжатые gif-чики, и скорей всего в ней же проблема с обработкой большого количества картинок.

Я модифицировал плагин aniemoticons, чтобы он выводил отладочные сообщения на каждом этапе загрузки картинок, и в итоге узнал, что он вываливается в процедуре ::anigif::anigif в цикле:
while {![catch {image create photo xpic$n$img \
-file $fnam \
-format [list gif89 -index $n]}]}

Т.е. скорей всего проблема в image create photo, однако я не настолько знаком с отладкой в тикле, чтобы копать дальше.

P.S. Пока пользуюсь kopete, в нем вроде и поддержка джаббера и анимированных иконок вполне нормальная.

Читай мой

Читай мой комментарий к вопросу о поддержке сжатия гифов в TkImg.

Ограничения на количество картинок там нет.

Всё ещё проще!

По Windows анимированных картинок в палитре (менюшке, которая обычно открывается по нажатию в поле ввода чата) не будет никогда: это особенность системы, которую можно обойти только используя нечто, отличное от меню (например, обычное окно без декораций, которое выглядит как меню).

Никому из активных в настоящее время разработчиков такие дополнительные приседания ради достижения пренебрежимо малой выгоды не нужны.

В Linux-е проблем нет

У меня все нормально работает - и в окне выбора и в самих сообщениях (Fedora Core 6).

Палитра эмоциконок в "иксах"

А вот под X Window, как известно, нет такой штуки, как "системное меню" -- меню каждый тулкит там рисует своими силами. Силы Tk в данном случае таковы, что меню получаются более гибкими в работе, и гифы там могут быть анимированными.

сжатые гифы

"Не хватает памяти" на архитектуре, в которой каждому процессу выдается 3G адресного пространства -- это слабый аргумент ;)

Интереснее другое: где-то ниже по треду было написано, что картинки "сжатые". Процитируем документацию на TkImg:
---
IMAGE COMPRESSION
Instead of LZW the run-length encoding of Hutchison Avenue Software Corporation is used, also known as miGIF compression. The miGIF compression routines do not, strictly speaking, generate files conforming to the GIF spec, since the image data is not LZW-compressed (this is the point: in order to avoid transgression of the Unisys patent on the LZW algorithm.) However, miGIF generates data streams that any reasonably sane LZW decompresser will decompress to what we want.
---

Я не разбираюсь, в "стандарте" GIF, но знаю, что а) их много; б) очень много есть "наколенных" модификаций. Учитывая, что и данная реализация "не вполне стандартна", предлагаю попробовать сделать гифы несжатыми.

К сожалению, аналога pngcheck для гифов мне найти не удалось, так что чем можно проверить гиф на валидность -- мне не известно.

Про сжатие вообще речи не шло

У меня все гифчики вроде нормальные. С другой стороны, может какой-то из них и не валидный, но другие клиенты-то нормально показывают...

Валидность гифов

Множество клиентов идут проторенной дорогой -- реализуют огромное количество ухищрений и workarounds для не (всегда) соответствующих стандартам реализаций чего угодно, существующего в живой природе.

Если бы не такие ухищрения, 80% страниц в Интернете нельзя было бы смотреть FireFox'ом, который "в нормальном режиме" умеет весьма чётко следовать установленным стандартам -- потому, что эти 80% страниц написаны в расчёте на сломаный IE, генерящие нестандартный HTML DreamWeaver с FrontPage'ом, ну и так далее.

Короче, это я к тому, что "другие клиенты нормально показывают" -- это не аргумент: нам что, теперь пойти патчить TkImg? Но ведь с нормальными картинками он работает нормально...

Можно и пропатчить :)

Да я бы в принципе и сам пропатчил, просто не так хорошо знаком с тиклем, чтобы такое сделать. Если дадите наводку, в какой стороне копать, то на досуге могу заняться. Все осложняется тем, что TkImg - библиотека, и мне не совсем понятно, как ее отлаживать. Можно, конечно, делать логгирование в файл и каждый раз пересобирать библиотеку, но что-то мне подсказывает, что это может затянуться надолго.

Пойми меня правильно...

...но если возникает вопрос "как отлаживать библиотеку", то наверное за такое дело браться ещё рановато ;)

И ещё, по поводу jisp

Насколько мне известно, Ткаббер ничего не знает о файлах jisp. "Набор иконок" с т.з. ткаббера -- это каталог, в котором лежит файл icondef.xml, который, в свою очередь, знает где взять файлы с эмоциконками и к каким мнемоникам их прицепить.

Посему, я вдруг подумал, что если тебе каким-то образом удалось заставить Ткаббер попытаться прочитать jisp, то он реально может падать где-то в процессе чтения.

Одним словом, надо сформулировать чёткий testcase: минимальный icondef.xml с одной картинкой, которая не может быть загружена кодом обработки эмоциконок Ткаббера.

Я формат привел лишь для примера

Конечно, я использовал уже распакованный в каталог jisp. Все подхватывается нормально, однако если иконок мало, то никакой ошибки не появляется, а если много, то клиент вылетает. Так что мой testcase может быть только таким: я отсылаю jisp-файл (или просто заархивированный каталог), и на нем проверяется причина вылета. Единственное, я не знаю, куда бы его залить.

Много иконок...

А я бы предположил, что ткаббер просто падает на некой конкретной иконке, которая в "полной" версии всего лишь стоит "дальше по icondef'у", чем в "короткой" (которая работает). Соотв. надо искать глючную иконку методом отсечения ;)

Да, и ещё по поводу количества иконок... Даже если мы оставим в стороне идею о том, что в нормальном наборе не должно быть больше 4-6 смайлов, такие наборы как bombusmod, timezero или набор "от puz'а", содержащие по 90 эмоциконок, грузятся и работают нормально.

Хорошо, поэкспериментирую с icondef

А где, кстати, можно найти этот набор "от puz'а", чтобы я его у себя попробовал?

Там же, где и всё остальное про Ткаб

...то есть на вики: http://ru.tkabber.jabe.ru/images/ru.tkabber.jabe.ru/b/bc/Emoticons-puz179_lkpatched.zip

Syndicate content