?

Log in

No account? Create an account

cron и python + PySide

Попытался поставить в cron скрипт на питоне, который пользует PySide. Ничего не получилось, никаких внятных записей в логах тоже нет. В итоге в качестве решения поставил gnome-scheduler, который представляет собой обёртку над crontab. Но эта обёртка умеет правильно работать с иксами и всеми необходимыми разрешениями. Поэтому оказалось достаточно отредактировать запуск скрипта через gnome-scheduler и поставить там галку, что моё приложение иксовое и выводить ничего не нужно. Теперь всё работает.

Чиним связку Docky + Thunar

Docky оказался самым скромным доком в линуксе по требованиям (хотя всё равно захотел моно, как и AWN с Cairo). Работает вполне себе прилично. Но после установки в Xubuntu отказывается нормально работать с иконкой Thunar (и, видимо, с терминалом тоже). Чтобы заработало нормально нужно скопировать из /usr/share/applications/ в ~/.local/share/applications файлы Thunar.desktop и xfce4-terminal.desktop. После повторного добавления Thunar в Docky иконка появляется и файл-менеджер запускается нормально.

Global application menu в Xubuntu

Для установки global menu (как в Unity, только не исчезает само по себе, что меня раздражало) в Xubuntu:

sudo apt-add-repository ppa:the-warl0ck-1989/xfce-appmenu-plugin
sudo apt-get update && sudo apt-get install xfce4-appmenu-plugin indicator-appmenu appmenu-gtk appmenu-qt

После этого мне нужно было выйти-войти в систему. Информация взята отсюда

Чиним sopcast-player

На 64-битной Xubuntu не захотел работать sopcast-player. После установки просто падает с Segmentation fault. Чтобы заработало нужно в файле /usr/share/sopcast-player/lib/vlc_1_0_x.py поменять строку

callbackmethod=ctypes.CFUNCTYPE(None, Event, ctypes.c_void_p)

на строку

callbackmethod=ctypes.CFUNCTYPE(None, ctypes.POINTER(Event), ctypes.c_void_p)

Плеер тянет за собой кучу 32-битных библиотек и для установки просит 190 Мбайт места. Ужас, блин. Но футбол как-то смотреть нужно. Решение взято отсюда

Чиним MPlayer + VDPAU + DivX

После установки Xubuntu не заработала cвязка SMPlayer + VDPAU (аппаратное ускорение видео) + Divx. У меня не игрались все файлы в контейнере .avi. Оказалось, что нужно в файле /etc/mplayer/mplayer.conf поменять

[vo.vdpau]
vc=ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,ffodivxvdpau,

на

[vo.vdpau]
vc=ffmpeg12vdpau,ffwmv3vdpau,ffvc1vdpau,ffh264vdpau,

У меня этого в файле не было вообще, поэтому я последние две строки просто в файл добавил. Всё заработало. Альтернативным решением, кстати, был просмотр проблемных файлов через VLC, но это как-то некрасиво.

Решение взято отсюда

Скрипт для кросс-постинга. Идейный оригинал вот тут. У меня получилось в два раза больше. В основном из-за возможности отправлять несколько последних твитов, а не только один + защита от того, чтобы не постить один и тот же твит два раза, если возникли какие-то проблемы. Скрипт пока висит в кроне на запуск раз в 5 минут. Скрипт под линукс, для винды нужно выпиливать упоминание syslog. Да и вообще выпилить велосипед с логированием и заменить его встроенным питоновским.

Read more...Collapse )

Временные зоны в Python

Из внешних источников можно получить данные о времени, в которых фигурирует временная зона. К примеру, если парсить XML c RSS-лентой постов твиттера, то там время твита будет указано именно с временной зоной: Sat, 06 Nov 2011 10:41:00 +0000. Вот это вот +0000 и есть описание временной зоны. В данном случае, это обозначает, что время у нас UTC. Если такое время использовать в приложении, то его нужно правильно распарсить, чтобы можно пользоваться объектом datetime.datetime. Для этого служит ключик %z функций strptime. Полностью строка для парсинга примера выше выглядит так: %a, %d %b %Y %H:%M:%S %z.

После того, как строка распарсена и объект datetime.datetime получен, можно использовать его для сравнений. Но есть одно "но" — объекты datetime.datetime могут быть naive и aware в отношении временных зон. И если распарсенный объект aware, то и сравнивать его можно с таким же. Чтобы получить текущее время, которое будет знать про временную зону, нужно datetime.datetime.now() позвать с параметром временной зоны, в которую будет переведено время. Самый простой вариант, при котором не нужно будет создавать зону самостоятельно, выглядит как datetime.datetime.now(datetime.timezone.utc). После этого текущее время можно будет сравнивать с тем временем, которое мы получили из распарсенной строки. А более очевидный вызов datetime.datetime.utcnow() возвращает UTC-время, но без выставленной временной зоны.

Стандартный питоновский класс urllib.request автоматически идёт по редиректу. Это в определённых ситуациях может мешать. Например, в приведённом ниже примере, где я пытаюсь авторизоваться в API ВКонтакте, нужная мне информация лежит в первом ответе (который приходит со статусом 302). urllib.request автоматически проходит по редиректу и возвращает мне ту страницу, где никакой информации о ключе сессии (который используется для дальнейших операций) уже нет.

Read more...Collapse )
Думаю, многие сталкивались с программой Punto Switcher, которая автоматически переключает раскладки клавиатуры. При этом часть людей (как я) сейчас уже плохо себе представляют работу без этого приложения, а часть — убеждённо плюётся на него, говоря, что оно только мешает работать. Хочу рассказать, что же хорошего есть в Punto Switcher с точки зрения проектирования интерфейсов.

Read more...Collapse )
В последних версиях Qt (начиная с 4.5) получить полупрозрачное окно совсем просто -- достаточно выставить атрибут виджета WA_TranslucentBackground. К сожалению, при работе с более ранними версиями фреймворка (да ещё и под X11, да ещё и без композитинга) полупрозрачность даётся чуть сложнее.

Read more...Collapse )