2010-12-02

ICQ в Empathy

Продолжаю переходить на Gnome'овские приложения. Блажь такая, любопытно как оно там всё интегрированно. Приложения под Gnome и GTK+ постепенно растут, становятся более юзабельны, вот недавно сменил текстовый редактор, прежде это был KWrite, сейчас Geany. Хотя на такой шаг меня скорее подтолкнули изменения в KWrite, а также новые косяки. Но Geany меня полностью устраивает, а особенно его практически мгновенная загрузка (в отличии от KWrite/Kate). Что касается настройки Geany, в частности подсветки кода, то она не реализована в GUI, нужно править конфиги, что меня нисколько не беспокоит.
Отвлёкся я что-то :-).
Сейчас пробую Empathy, до этого пользовался qutIM, а ещё раньше Pidgin. Pidgin в принципе всем устраивал, но я не смог (да и не стал пробовать) побороть такое явление, как разрыв связи ICQ, а точнее упорное не желание её автоматически восстановить. Приходилось время от времени раскрывать окно клиента и смотреть что там с ICQ и в случае чего жать кнопку, а ещё чаще через пункт меню и кнопку несколько раз. qutIM работал хорошо, правда это зависит от того на какой срез кода ты попадёшь (собирал сорцы из их репы) qutIM на Qt4, если что работает. Вообще нет какой-то веской причины менять клиент в очередной раз, просто, что бы "родное", что бы GTK+, что бы Gnome, только из-за этого, ну и конечно же -- посмотреть.

С Jabber у Empathy проблем не возникло, а вот с ICQ пришлось полазить по интернетам. Для аськи вам потребуется:

1. Установить пакет telepathy-haze (это в Debian)
2. Загрузить клиент и создать учётную запись ICQ. Если вдруг она заработала, тогда зачем вы читаете эту белиберду :-) ?
3. $ mc-tool update `mc-tool list | grep icq` bool:use-ssl=false bool:use-clientlogin=false

Возможно понадобится также сменить сервер на login.icq.com, тут не уверен, но у меня именно такой. А по умолчанию используется login.messaging.aol.com.
Рецепт в сети всё нашёл, но уже после того как разобрался сам. Так как Empathy+Haze использует purple-реализации протоколов, значит Pidgin также не должен работать с ICQ, если это не косяк в Empathy или Telepathy Haze (посмотрел логи, вроде как не в них). Попробовал, не работает. Стал копаться в настройках учётки (а в Pidgin эти настройки куда как богаче) и методом проб и ошибок установил, что SSL и Client Login должны быть отключены.

p.s. В новых версиях изменения (haze 0.5, purple 2.10), use-ssl больше нет, так что для отключения SSL используем параметр string:encryption=no_encryption, иначе получаем сообщение: mc-tool update: Protocol 'icq' does not have parameter 'use-ssl'.

2010-10-22

Дружим pickle и __slots__

Баян, наверное, но я вот только сегодня столкнулся с такой проблемой и её решения в рунете не нашёл.
Делаем раз:
class Foo(object):
__slots__ = ['foo']
Делаем два:
import pickle
pickle.dumps(Foo()) # низя
И получаем ошибку: TypeError: a class that defines __slots__ without defining __getstate__ cannot be pickled.
Оказывается, всё до неприличия просто. По умолчанию, при сериализации, используется старинный протокол (номер ноль, pickle.dumps(Foo(), 0)), и вот он как раз и не может разрулить наши __slots__. В данной ситуации стоит использовать более продвинутый протокол (сейчас это номер 2, более старым версиям такой объект не по зубам):
import pickle
pickle.dumps(Foo(), -1) # годится
pickle.dumps(Foo(), 2) # тоже

p.s. Пытался сериализовать объекты Genshi.

2010-09-24

Калибруем APC Smart-UPS 750 (apcupsd)

Обычная проблема, новые аккумуляторы, индикатор заряда (даже полный, 5 делений) мерцает/мигает. Все в один голос — калибруй (утиль apctest), не думай. Но ведь любопытно, что подобное поведение ИБП означает, всё просто (хотя не просто было ответ найти), мерцающая шкала заряда (та что справа) говорит о том, что по глубочайшему убеждению агрегата расчётное время работы от батарей слишком мало, ну или на что-то там не хватит. Вы сталкивались с таким, но только когда оставалось одно-два деления (это скажем ~10% заряда).
Что меня смутило в момент калибровки, так это что к этому мерцанию прибавлялся короткий прерывистый, разрывающий душу, сигнал, и при этом калибрующая софтина не указывала уменьшение заряда, даже по прошествии многих минут (да и на самой железке индикатор оставался полным, т.е. все 5 делений горели).
$ sudo /etc/init.d/apcupsd stop
Stopping UPS power management: apcupsd.
$ sudo apctest


2010-09-24 04:26:54 apctest 3.14.8 (16 January 2010) debian
Checking configuration ...
Attached to driver: usb
sharenet.type = DISABLE
cable.type = USB_CABLE

You are using a USB cable type, so I'm entering USB test mode
mode.type = USB_UPS
Setting up the port ...
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes.

Getting UPS capabilities...SUCCESS

Please select the function you want to perform.

1) Test kill UPS power
2) Perform self-test
3) Read last self-test result
4) View/Change battery date
5) View manufacturing date
6) View/Change alarm behavior
7) View/Change sensitivity
8) View/Change low transfer voltage
9) View/Change high transfer voltage
10) Perform battery calibration
11) Test alarm
12) View/Change self-test interval
Q) Quit

Select function number:
Нервы не выдержали и я прервал процесс.
Select function number: 10

This test instructs the UPS to perform a battery calibration
operation and reports the result when the process completes.
The battery level must be at 100% and the load must be at least
10% to begin this test.

Battery level is 100% -- OK
Load level is 26% -- OK
Clearing previous self test result...CLEARED

The battery calibration should automatically end
when the battery level drops below about 25%.
This process can take minutes or hours, depending on
the size of your UPS and the load attached.

Initiating battery calibration...INITIATED

Waiting for calibration to complete...
To abort the calibration, press ENTER.

Battery level: 100%...............................................
..................................................................
..........
Но сегодня, набравшись как следует абсента, отключив монитор от UPS (что бы уменьшить нагрузку, тогда индикатор заряда переставал мерцать, так как уже времени автономной работы на что-то важное по мнению пепелаца хватало) решил добить эту калибровку.
Battery level: 91%..
Battery level: 79%
Battery level: 76%.
Battery level: 64%...
Battery level: 51%....
Battery level: 40%..
Battery level: 30%
CALIBRATION COMPLETED
Result of last self test: PASSED
Аллилуйя, братья и сестры.
Как вы заметили, после 100% идёт куча точек. Интерпретируйте каждую точку как 15 секунд времени, т.е. UPS и софтина терзали меня минут двадцать во время этой самой калибровки, убеждая вашего покорного слугу, что заряд всё ещё 100%. Но спустя нцать времени, железяка оживилась, индикатор заряда стал сомневаться в своей правоте и скакал между 2-4 делениями, да и apctest стала ему подыгрывать.
Короче, всё закончилось хорошо. Сейчас всё пучком и монитор работает через ИБП как и должно быть.