воскресенье, 25 марта 2007 г.

mmc

Сделал патч для MMC (консольный клиент для mud игр). С этим патчем mmc поддерживает 256 цветов в xterm/rxvt/putty, кривые терминалы (это когда "terminal cannot insert/delete characters") и символы с кейпада. Скриншот.

вторник, 13 марта 2007 г.

OSD Desktop

Еще один пост, который давно откладываю (уже годы). Вобщем, я записал ролик о том, как мой десктоп выглядит (640x480 10fps 2mb или 1024x768 10fps 6mb). Идея сделать его OSD'ным витала в воздухе задолго до того, как я написал первые строки кода. В результате эволюции десктопа, я привык работать в полноэкранном режиме. Часики, измерители и прочие пищали быстро сгинули с моего рабочего стола. И несмотря на то, что я оказался в мире без уведомлений, я был счастлив. И тогда OSD пришло ко мне как решение удержать программы в полноэкранном режиме и в то же время быть в курсе событий. Используя python и библиотеку OSD для него, я написал демона событий. Демон читает строки из файла ~/log/events и парсит их согласно шаблонам:
  • string - добавляет строку в список отображаемых строк.
  • [][][]\d\d\d\d: string - тоже самое, что и в предыдущем случае, но отображает строку заданное количество мс.
  • \d\d\:\d\d:\d\d: string - тоже, что и первый случай, но с датой. Дата не отображается на экране.
  • \d\d\:\d\d:\d\d: [][][]\d\d\d\d: string - тоже, что и второй случай, но с комментарием из третьего случая.
    После этого пришло время реализовать программы, которые писали бы в файл ~/log/events. Первой такой программой стала aktimelog, которая пишет события о текущем времени каждые 25 минут. Еще сделал: плагин для irssi, чтобы видеть публичные сообщения, приватные или и то и то, мониторить переключение раскладки клавиатуры, переключение рабочих столов, уведомления о почте, уведомления шела. Так же стоит сказать, что переключение рабочих столов происходит по шоткатам. Например, если вы нажимаете MOD-E, то в дополнение к переключению, ion3 проверяет а запущен ли emacs, и если не запущен и вы подтвердите запуск, то запускает его. Я обычно знаю, куда хочу переключиться, поэтому не трачу время на бег по списку программ или тыкание на тулбар (как это делают виндузятники и прочие линуксойды). Итого, MOD-e для emacs, MOD-p -- revelation, MOD-c -- eclipse, MOD-b -- browser, MOD-1 -- первый терминал, MOD-2 -- второй терминал... и тд. Вот так устроен мой десктоп. А ваш как? :)

    Исходники.
  • пятница, 9 марта 2007 г.

    LPTRA

    Для EE фанатиков, я реализовал адаптер ресурсов (JCA 1.5 через CCI), это правильный способ работы с параллельным портом из J2ee приложения. Чтобы использовать адаптер, нужно установить UParPort. Затем продеплоить этот RAR (resource adapter archive) в сервер приложений. Когда это будет сделано, создайте датасоурс для LPTRA. При создании надо будет указать имена пинов, типа такого: 1PinName=eye1, 2PinName=eye2 и т.д.. Вот и все. В дополнение можно сказать исходники LPTRA.

    Пример:
    @Resource (name = "eis/ParPort")
    private ConnectionFactory connFactory;

    Connection conn = null;
    try {
    conn = connFactory.getConnection();
    Interaction interaction = conn.createInteraction ();
    MappedRecord r =
    connFactory.getRecordFactory ().createMappedRecord ("");

    r.put ("eye1", true); // turn eye1 pin into the on state
    r.put ("eye2", false); // turn eye2 off
    interaction.execute (null, r);
    } catch (ResourceException e) {
    e.printStackTrace (); // Not sexy
    } finally {
    if (conn != null) {
    try {
    conn.close();
    } catch (ResourceException e) {
    e.printStackTrace (); // Not sexy
    }
    }
    }

    UParPort

    Давно я планировал выложить эту программку. UParPort - библиотека для работы с параллельным портом (портом принтера) из Java программ. Но в отличии от parport, эта библиотека не требует привилегий root'а. Есть главный класс UParPort в пакете package ru.toril.uparport. В качестве аргумента он получает имя устройства. Имя устройства выглядит типа "/dev/par0" или "lpt1". После создания экземпляра класса можно использовать следующие методы: getData, getStatus setData, close. isClosed, toString. Итак, бинарники и исходники UParPort..

    понедельник, 5 марта 2007 г.

    WM5DevSpy

    Выкладываю утилиту для мониторинга обращений к устройствам WM5. Если вы не программист-хакер, то вам программа не нужна. А нужна она вам, если вы хотите видеть с какими аргументами и когда вызываются функции того или иного драйвера. Перед использованием программу нужно скомпилировать. Имя устройсва без труда найдете в файле WM5DevSpy.c - если оно вам и правда нужно. Делать нормальный гуи лень. Как бонус данное приложение показывает какие программы обслуживают какие прерывания и какими нитями.

    Пример лога:
    2007.02.22 00:15:32: Starting ------------------------------------------------------
    2007.02.22 00:15:33: interrupt 5 (abs 13): event struct at 8ffb2818, thread struct at 8efb4024, owner proc at 8c5976d0, proc name=NK.EXE, thread start addr=8c215240
    2007.02.22 00:15:33: interrupt 8 (abs 16): event struct at 8f7a5xf0, thread struct at 8e7a2a64, owner proc at 8c597ad0, proc name=gwes.exe, thread start addr=015c39b4
    2007.02.22 00:15:33: interrupt 9 (abs 17): event struct at 8f796yc4, thread struct at 8e785400, owner proc at 8c597ad0, proc name=gwes.exe, thread start addr=01e944e4
    [...]
    2007.02.22 00:15:34: fsDev_t at: 06048c50
    2007.02.22 00:15:34: LegalName: BAT1:
    2007.02.22 00:15:34: DeviceName: BAT1
    2007.02.22 00:15:34: BusName: BuiltInPhase1_0_26_0
    2007.02.22 00:15:34: DeviceKey: Drivers\BuiltIn\Battery
    2007.02.22 00:15:34: control (openData=0x00000001, code=0x00290400, inBuf=0x0806fa8c, inSize=0x00000004, outBuf=0x0806fa60, outSize=0x00000014, outUsed=0x0806fa20) -> 0x00000001
    2007.02.22 00:15:34: [ *outUsed : 0x00000018 ]
    2007.02.22 00:15:34: IN:
    2007.02.22 00:15:34: 01 00 00 00
    2007.02.22 00:15:34: OUT:
    2007.02.22 00:15:34: 00 08 5a 00 ff ff ff ff
    2007.02.22 00:15:34: ff ff ff ff 00 ff 00 00
    2007.02.22 00:15:34: ff ff ff ff ff ff ff ff
    2007.02.22 00:15:37: Calls to open function: 0
    2007.02.22 00:15:37: Calls to close function: 0
    2007.02.22 00:15:38: Calls to control function: 1
    2007.02.22 00:15:38: Calls to read function: 0
    2007.02.22 00:15:38: Calls to write function: 0
    2007.02.22 00:15:38: Calls to seek function: 0
    2007.02.22 00:15:38: Calls to powerup function: 0
    2007.02.22 00:15:38: Calls to powerdn function: 0
    2007.02.22 00:15:38: ----------------------- stop -------------------------

    воскресенье, 4 марта 2007 г.

    LooxLight 2007-03-04

    Подробнее о Looxlight (утилита для Fujitsu-Siemens Loox N560/C550) смотрите здесь.

    Сделал новую версию LooxLight. Изменения:
  • Полная поддержка GPS светодиода.
  • Поддержка bluetooth стека от Broadcom.
  • Полная поддержка индиктора питания.
  • Лучше реализована поддержка индикатора клавиатуры (теперь переживает изменение яркости).
  • LooxLight теперь не EXE, а DLL. Это лучше тем, что в wince есть ограничение в 32 процесса.
  • В два раза меньшее потребление памяти, чем раньше

  • CAB архив в ZIP'е: тут.
    Исходные коды (GPL): тут.

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