Ugolnik's Family blog

Различные заметки обо всем.

Browsing Posts in Linux

Simple Viewer GL Сегодня ночью взялся за доработку вьювера изображений – Simple Viewer. Давно хотелось отказаться от использования Gfl SDK. Эта библиотека является частью проекта XnView. Библиотека хорошая и удобная, хорошо документированная. Поддерживает более 100 графических форматов. Но она проприетарная.
Перейти от непосредственной работы с Xlib к OpenGL, что повысило бы скорость работы вьювера за счет аппаратного ускорения. Так же добавил возможность скроллинга и изменения масштаба с помощью мышки.
На данный момент использую Imlib2 для загрузки и декодирования изображений. Но т.к. Imlib2 не смог загрузить тестовый jpeg, созданный в GIMP, то мой выбор остановился на libjpeg. Для анимированных gif использую giflib.

Итак, что получилось в итоге, плюсы:

  • создание списка файлов и поиск позиции, с которой начался просмотр;
  • отказ от Gfl SDK в пользу Imlib2, libjpeg, libpng, giflib, libtiff;
  • поддержка JPEG через libjpeg;
  • поддержка PNG через libjpng;
  • поддержка GIF через giflib;
  • поддержка TIFF через libtiff;
  • поддержка PSD (еще не все фичи формата реализовал);
  • поддержка ICO (реализовал так же поддержку фреймов в формате PNG);
  • использование OpenGL;
  • отображение координаты и цвета пикселя под курсором (ключ командной строки -p или клавиша P);
  • разбиение больших изображений по нескольким текстурам;
  • быстрое скролирование изображения с помощью клавиатуры или мышки;
  • произвольное масштабирование изображения с помощью клавиатуры (- / +) или колеса мышки;
  • корректное автоматическое масштабирование изображений, не вмещающихся в окно вьювера;
  • отображение прогресса загрузки больших изображений;
  • возможность просмотра многостраничных изображений (клавиши PgUp / PgDn)

 
К сожалению есть и минусы:

  • анимированные GIF все еще не поддерживаются (но есть возможность просмотра отдельных фреймов);
  • нет поддержки многостраничных изображений сделана поддержка для TIFF, GIF, ICO;
  • нет никакой поддержки PSD; есть, сегодня ночью написал первую реализацию;
  • нельзя посмотреть EXIF (планирую сделать);
  • нет возможности переназначить “горячие” клавиши (планирую сделать);
  • нет информации о количестве бит на канал изображения изображения загруженные с помощью Imlib2 не имеют информации о кол-ве бит на пиксель;
  • нет возможности повернуть изображение (планирую сделать);
  • у меня есть изображение в формате jpeg (созданное для теста в GIMP), которое Imlib2 не может загрузить, хотя libjpeg спокойно его грузил; перешел на libjpeg – теперь проблем с JPEG нет;
  • не реализована загрузка огромных изображений маленькими блоками (это должно позволить быстро грузить огромные изображения и сильно экономить память);

 


В данный момент исходные коды Simple Viewer GL доступны на SourceForge.net в SVN. Забрать последнюю версию исходных кодов можно следующей командой:

svn co https://simpleviewer.svn.sourceforge.net/svnroot/simpleviewer simpleviewer

 


Добрый человек с LOR скрывающийся под ником AnDoR сделал ebuild для вьювера – simpleviewer-gl-9999.ebuild. Большое ему за это спасибо.

 


Предыдущая версия Simple Viewer.

Вот так “работает у меня Chromium. Сборка бинарная. Некоторые сайты он отображает, большинство нет.
В динамике это выглядит так – вводим адрес, грузится страница, рендерится, через секунду-пол она перекрывается этой фигней. Если нажать Ctrl + T (открыть новую закладку), то сразу получаем эту страницу.
Раньше Хром “радовал” меня падениями при попытке открыть локально картинку в формате JPEG. В консоль и лог ничего не писал. Просто тихо падал. С другими форматами у него проблем я не замечал.
За приличное время использования Chromium (тогда он еще работал, хотя периодически и доставал сообщениями о недоступности страницы) я не нашел ничего сильно выдающегося относительно других браузеров.

Так что теперь я снова пересел на “тормозной” Firefox + Vimperator + NoScript + Flashblock.

Jabber SRV record generator – позволяет генерировать записи для BIND и tinydns.

Иногда приходится работать с ftp-сервером, у которого кодировка отлична от кодировки в системе. В lftp смена кодировки делается просто:

 :/> set ftp:charset windows-1251

Для suspend2disk при использовании файла в качестве SWAP, ядру нужно передать два параметра resume и resume_offset.
Значением для resume является устройство, на котором расположен SWAP-файл (к примеру /dev/sda1), а resume_offset можно получить с помощью утилиты swap-offset из пакета sys-power/suspend.

Перейдя с OSS на ALSA одновременное проигрывание звука с нескольких источников стало невозможным. Оно и понятно, в моей HDA Intel (Realtek ALC861) нет аппаратного микшера. Все советы настроить ALSA в ~/.asoundrc ни к чему не приводили. Кроме того, свежая (относительно, конечно) версия ALSA просит удалить этот файл вообще.
Сегодня наткнулся на статью ALSA Software mixing – и этот конфиг решил мою проблему. Во всяком случае MPD и MPLAYER научились одновременно воспроизводить звук ;)

Приделал поддержку трея с помощью stalonetray. Для этого нужно установить сам stalonetray и настроить конфиг для него, а так же сконфигурировать ~/.ion3/cfg_kludges.lua.

$ cat ~/.ion3/cfg_kludges.lua
defwinprop {
   class       = "stalonetray",
   instance  = "stalonetray",
   statusbar = "systray",
}

$ cat ~/.stalonetrayrc
icon_size    16
geometry    64x16
background "#000000"

Естественно, что настройки stalonetray на свое усмотрение.

Искал простой способ менять цвет текста в statusbar’е, и нашел такой пост:

> – Is it possible to use colors in the status bar (e.g. a label in blue
> and the value in white or separators in gray)

In a very complex manner, yes. By modifying all the monitors to specify monitorname_hint to have value the appropriate substyle from the stdisp style, and setting this style to have the appropriate colour, you can get all the monitors to be display in any colour they want. Perhaps there should be a way to specify a style to use in the template, or perhaps the meter name should be included in the substyle used for the meter. However, there _will not_ be a way to specify colours directly: that is against the philosophy behind Ion’s drawing engines.

Как видно, простых путей нет. Придется делать костыли :(

ion3 Свершилось, я окончательно переехал на Ion3, благополучно забыв Awesome. А все из-за того, что новые версии (начиная с 3.2.x) Awesome стали одна хуже другой. Борьба с разработчиками и глюками меня утомила. Пришлось вспомнить слова нескольких LOR’овцев – “брось Awesome, переходи на Ion3″.

Первое, что бросилось в глаза – комбинации клавиш по умолчанию сделали не для людей. Ладно, потерпим.
Из своего предыдущего опыта я решил изучать Ion3 сразу же в рабочем режиме, и уже к вечеру я был очень им доволен.

Плюсы расписывать не буду – их очень много, просто поверьте мне на слово – Ion3 на голову выше Awesome.

Еще пару часов спустя я написал парочку нужных мне модулей для статус-бара. Хоть это и был для меня вновь, но обработчик ошибок в LUA-скриптах Ion3 не валился, как это делает Awesome, а сообщал об ошибке.
Далее настроил META и ALTMETA. В качестве META выбрал Left_Windows_Key и Right_ContextMenu_Key в качестве ALTMETA.

Доработал тему оформления ios и статус бар на свой вкус.

Настройку META-клавиш делал так:

$ xmodmap -e "keycode 117 = Super_R"
$ xmodmap -e "add mod3 = Super_R"
$ xmodmap -e "remove mod4 = Super_L"
$ xmodmap -e "add mod4 = Super_L"

Значение “keycode 117″ выяснил с помощью xev.
Выбрал “Super_R”, поскольку в моем случае он был свободным (у меня только одна Left_Windows_Key).

UPD (06.05.2009):
Мой конфиг Ion3.

UPD (15.05.2009):
Статья по настройке мультимедийной клавиатуры.

UPD (17.08.2009):
Тут можно взять Ion3.ebuild.

К сожалению регрессия awesome продолжается. В awesome-3.2.1 поломали еще больше полезных вещей. Вроде все это мелочи, но проблемы доставляют. Надоело прыгать между версиями 3.1.x и 3.2.x, обновил конфиг awesome. В архиве присутствует и конфиг для awesome-3.1.x.