gedit: необходимый инструмент разработки

gedit logo

Любому программисту нужен удобный текстовый редактор, желательно настраиваемый под себя и с кучей функций. Раньше я пользовался в основном Kate, когда сидел под KDE; но сейчас времена изменились, и я открыл для себя gedit в GNOME.

Этот бесплатный редактор мне пришелся по вкусу. Выглядит он очень просто, но стоит подключить к нему пару-тройку плагинов, и удобство работы в нем многократно возрастает. Плагины к нему написаны практически на все случаи жизни, скачать их можно здесь.

Однако, я привык к другим горячим клавишам в других редакторах. В gedit отсутствует возможность их переназначить, но как оказалось, их можно поменять средствами GNOME. Например, плагин Отступ строк (Text Ident) по умолчанию работает на комбинациях клавиш Ctrl+T и Ctrl+Shift+T; но если для смены раскладки клавиатуры используется Ctrl+Shift, то вторая комбинация клавиш просто не будет работать. Поменять их можно, если залезть в настройки гнома (Центр управления -> Внешний вид, закладка Интерфейс, поставить галку Редактируемые ускорители меню или “Interface” -> “Editable menu shortcut keys” для англоязычной версии).

Включение режима редактирования горячих клавиш в gnome

После включения этой опции можно навести курсор мыши на интересующий пункт меню и нажать желаемые комбинации клавиш – все поменяется.

Еще одна неочевидная вещь, некоторые параметры gedit можно поменять только редактированием параметров gnome. Например, по умолчанию gedit в меню Файл будет показывать последние 4 открытых файла, что маловато. Если же запустить gconf-editor и отредактировать параметр gedit2->ui->recents, то можно задать их столько, сколько надо:

Включение режима редактирования горячих клавиш в gnome

ИМХО это один из самых удобных редакторов для разработчика

Переезд серверов в другой датацентр

Dell Power Edge 6850

Так получилось, что наши сервера должны были переехать в другой датацентр в течение суток. Занятие получилось очень геморройное, поскольку меняется вся конфигурация сети — IP-адреса, шлюзы по умолчанию, даже маска сети. Так вот появилась задача, настроить сеть так, чтобы в старом ДЦ могли выключить сервера, привезти в новый ДЦ, там тупо включить – «и чтоб все заработало». У всех серверов статические айпишники, так что вариант с получением адресов с сервера DHCP здесь не пройдет.

Задача решается, если известна новая конфигурация сети. Есть старый добрый способ сделать несколько IP адресов на сетевой карте, с помощью алиасов. В CentOS можно прописать свой default gateway для каждого алиаса.

Пример старой конфигурации:

$ cat /etc/sysconfig/networking/devices/ifcfg-eth0

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:11:22:22:44:55
NETMASK=255.255.255.0
IPADDR=1.2.3.4
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=1.2.3.254
DNS1=4.2.2.2
DNS2=8.8.8.8

Создаем новый алиас для этой же сетевой карты с параметрами сети нового ДЦ:

$ cat /etc/sysconfig/networking/devices/ifcfg-eth0:1

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0:1
BOOTPROTO=none
BROADCAST=5.6.7.255
IPADDR=5.6.7.8
NETMASK=255.255.255.0
NETWORK=5.6.7.0
TYPE=Ethernet
PEERDNS=yes
GATEWAY=5.6.7.254
DNS1=4.2.2.2
DNS2=8.8.8.8

Вуаля. Сервер можно выключать и перевозить.

CentOS и свежий MySQL

Официальный логотип Mysql

Начиная с версии 5.1 в MySQL поддерживается партиционирование таблиц, а это как раз то, что мне надо. Решил я проапгрейдить свой сервер, но оказалось, что в стандартных репозиториях CentOS mysql довольно старый.

Проблема решается подключением репозитория remi.

Для 32-битной версии:
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Для 64-битной версии:
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Далее следует отредактировать /etc/yum.repos.d/remi.repo, установить enabled = 1, и запустить:

yum upgrade mysql-server

ATI Radeon X1650 и OpenSuSe 11.2 – засада

ATI Radeon x1650 series

Смеркалось. Наступили черные времена для владельцев старых карт ATI. Собственно, не такая уж и новость, однако, компания ATI прекращает выпуск новых драйверов для следующих видеокарт начиная с Catalyst 9.4 :

  • ATI Radeon 9500 Series
  • ATI Radeon 9550 Series
  • ATI Radeon 9600 Series
  • ATI Radeon 9700Series
  • ATI Radeon 9800 Series
  • ATI Radeon X300 Series
  • ATI Radeon X550 Series
  • ATI Radeon X600 Series
  • ATI Radeon X700 Series
  • ATI Radeon X800 Series
  • ATIRadeon X850 Series
  • ATI Radeon X1050 Series
  • ATI Radeon X1200 Series
  • ATIRadeon X1250 Series
  • ATI Radeon X1300 Series
  • ATI Radeon X1400 Series
  • ATIRadeon X1550 Series
  • ATI Radeon X1600 Series
  • ATI Radeon X1650 Series
  • ATIRadeon X1800 Series
  • ATI Radeon X1900 Series
  • ATI Radeon Xpress Series
  • ATI Radeon X2100 Series
  • Для тех, кто пользуется OpenSuSe, это означает, что последняя версия операционки, которая будет корректно работать с этими устройствами – это OpenSuSe 11.1 Начиная с OpenSuSe 11.2 даже и не пытайтесь ставить ATI-шные драйвера, т.к. с версией 11.2 идет XOrg 7.4, несовместимый с родными драйверами. Если хотите жить дальше с этими видюхами, пользуйтесь старой операционкой со всеми вытекающими последствиями (старый софт, невозможность совершать видеозвонки в Pidgin и т.п.); хотите OpenSuSe 11.2 – тогда придется использовать неродной драйвер Radeonhd, который пока довольно криво поддерживает 3D во многих из этих карт, в том числе и в моей. Новость неприятная, но такова жизнь, на официальном форуме OpenSuSe народ тоже возмущается

    Что-то после всего этого мне жутко разонравились видеокарты ATI, может пора переходить на NVida?

    Интересный баг mysql

    Официальный логотип Mysql

    По долгу службы пришлось мне отправиться в длительную поездку. Компьютер с собой не возьмешь, и поэтому приспичило меня залить дамп базы Mysql на ноутбук с OpenSuSe 11.0. Dump отказался заливаться, ругнулся вот так:

    ERROR 1221 (HY000) at line 3: Incorrect usage of UNION and INTO

    Код хранимой функции был чистый, давным-давно вылизанный и ошибок в нем не было. Выяснилось, что на старых версиях mysql может не работать вот такая конструкция:

    select 1 into @`avar` from (select 1 union select 1) `a`;

    хотя сам запрос:

    select 1 from (select 1 union select 1) `a`;

    синтаксически правильный и имеет право на жизнь. Баг в конце концов поправили (подробности здесь), но в стандартных репозиториях OpenSuSe 11.0 (OSS, Non-OSS, Debug и Updates) версия mysql осталась старая, с багом.

    Проблема лечится подключением репозитория MySQL и обновлением до последней версии сервера mysql.

    Что делать, если стащили пароли

    Компьютерная безопасность

    Недавно с моим другом произошла неприятная история. Он где-то подцепил трояна, который спер пароли FTP доступа к одному из его сайтов, и в результате злоумышленник смог залить вредоносный код в html и js файлы на его VDS. Мы проблему определили довольно оперативно, и также быстро ее устранили.

    Чтобы эта неприятная ситуация не повторялась, я написал маленький скриптик:

    /usr/bin/find /home -mtime -1 -print | mail -s “Modified Files” root@localhost >/dev/null 2>&1

    Он работает какое-то время, и пересылает на заданную почту список файлов, которые были изменены за последние сутки. В этом случае команда find просматривает все файлы рекурсивно, начиная с директории /home. Это выглдит примерно так:


    /home/user1/data
    /home/user1/data/logs
    /home/user1/data/logs/site1.tld.access.log
    /home/user1/data/logs/site2.tld.access.log
    /home/user1/data/logs/site2.tld.error.log
    /home/user1/data/logs/site2.tld.access.log.0.gz
    /home/user1/data/logs/site3.tld.access.log.0.gz
    /home/user1/data/logs/site3.tld.error.log
    /home/user1/data/logs/site3.tld.access.log
    /home/user1/data/logs/site1.tld.access.log.0.gz
    /home/user1/data/logs/site3.tld.error.log.0.gz
    /home/user1/data/etc
    /home/user1/data/etc/site1.tld.webalizer.current
    /home/user1/data/etc/site1.tld.webalizer.hist
    /home/user1/data/etc/site3.tld.webalizer.current
    /home/user1/data/etc/site3.tld.webalizer.hist
    /home/user1/data/etc/site2.tld.webalizer.current
    /home/user1/data/etc/site2.tld.webalizer.hist
    /home/user1/data/www/site3.tld/webstat/usage.png
    /home/user1/data/www/site3.tld/webstat/index.html
    /home/user1/data/www/site3.tld/webstat/daily_usage_201001.png
    /home/user1/data/www/site3.tld/webstat/hourly_usage_201001.png
    /home/user1/data/www/site3.tld/webstat/usage_201001.html
    /home/user1/data/www/site3.tld/webstat/ctry_usage_201001.png
    /home/user2/data
    /home/user2/data/logs
    /home/user2/data/logs/user2.tld.error.log
    /home/user2/data/logs/user2.tld.access.log
    /home/user2/data/logs/user2.tld.error.log.0.gz
    /home/user2/data/logs/user2.tld.access.log.0.gz
    /home/user2/data/etc
    /home/user2/data/etc/user2.tld.webalizer.current
    /home/user2/data/etc/user2.tld.webalizer.hist
    /home/user2/data/www/user2.tld/webstat/index.html
    /home/user2/data/www/user2.tld/webstat/usage.png
    /home/user2/data/www/user2.tld/webstat/daily_usage_201001.png
    /home/user2/data/www/user2.tld/webstat/hourly_usage_201001.png
    /home/user2/data/www/user2.tld/webstat/usage_201001.html
    /home/user2/data/www/user2.tld/webstat/ctry_usage_201001.png
    /home/user4/data/logs
    /home/user4/data/logs/site3.tld.access.log
    /home/user4/data/logs/site3.tld.access.log.0.gz
    /home/user4/data/logs/site3.tld.error.log
    /home/user4/data/etc
    /home/user4/data/etc/site3.tld.webalizer.current
    /home/user4/data/etc/site3.tld.webalizer.hist
    /home/user4/data/www/site3.tld/webstat/index.html
    /home/user4/data/www/site3.tld/webstat/usage.png
    /home/user4/data/www/site3.tld/webstat/daily_usage_201001.png
    /home/user4/data/www/site3.tld/webstat/hourly_usage_201001.png
    /home/user4/data/www/site3.tld/webstat/usage_201001.html
    /home/user4/data/www/site3.tld/webstat/ctry_usage_201001.png

    Как видим, сейчас никакого криминала не наблюдается. Изменились только логи и статистика, что и должно происходить раз в сутки. Если же файлы поменялись без моего ведома, я это увижу. Скрипт можно запихнуть в cron, и запускать раз в сутки.

    OpenSUSE 11.2 и видеокарта ATI Radeon x1650 Series

    OpenSuSe logo

    Я фигею, дорогая редакция! Со времен OpenSUSE 11.1 не так много воды утекло, однако изменения произошли кардинальные.

    Во-первых, компания ATI выкинула поддержку карточки ATI Radeon x1650 Series из новейших родных дров. Последняя версия драйвера на Radeon x1650 на сегодняшний день датируется 26 марта 2009 года, и она не совместима с новейшим XOrg 7.4, используемым в OpenSuSe 11.2. Если пойти на хитрость, и скачать действительно последнюю версию драйвера (9.11) по прямой ссылке, то выяснится, что драйвер может заработать под новым XOrg, но не с этой карточкой (смотрим Release Notes). Когда будет сделана поддержка родных дров этой карты для OpenSuSe 11.2 – неизвестно.

    Во-вторых, к счастью появился драйвер c открытым кодом под эту карточку, и он таки вошел в дистрибутив OpenSuSe 11.2. В нем даже реализована экспериментальная поддержка 3D ускорения, которая периодически работает, но пока что слишком глючно. Проверял на фильмах и играх – фильмы работают на ура в полноэкранном режиме; игры могут рушиться, если текстур в движке очень много. К примеру, Quake3 пошел без проблем (после обновления драйвера), TileRacer периодически сыпется с ошибкой Segmentation fault.

    В-третьих, более-менее прямо сделана поддержка моей веб камеры, качество изображения в ней под линуксом значительно хуже чем под виндой, но все же она работает без ошибок и со Skype, и с Pidgin, и с Cheese.

    Поддержка моей DVB карты Prof Revolution DVB-S2 7301 PCI не реализована родными драйверами, но они легко находятся здесь, огромное спасибо автору за качественные драйвера и патчи к ядру. Качаем исходники, собираем и ставим – все как обычно.

    KDE4 мне показался сырым в этом дистрибутиве, и я перешел на Gnome, о чем пока ни разу не пожалел.

    Аудио и видео звонки в Jabber

    Pidgin Logo

    Собственно, предыстория здесь. Очень долгое время я искал джаббер-клиента под Linux, который бы позволял совершать голосовые и видеозвонки другим людям. Кроме древнего и уже почти мертвого проекта Jabbin, альтернатив не было. Потом появлялись полухакерские сборки Kopete с поддержкой jingle, которые были очень капризными. Но все это было не то.

    Теперь же есть минимум 2 Open Source jabber клиента, которые могут совершать аудио и видеозвонки – это Empathy и Pidgin (начиная с версии 2.6.1)

    Смутило вот что, когда ставишь эти клиенты через Yast, не все зависимости соблюдаются. Т.е. после установки работает только текстовый чат, но не голосовой и не видео.

    Чтобы все заработало, надо установить следующие пакеты: gst-plugins-good, gst-plugins-bad, gst-ffmpeg (в OpenSuSe 11.2 они называются gstreamer-0_10-plugins-good, gstreamer-0_10-plugins-bad, gstreamer-0_10-ffmpeg). После установки перезапускаем джаббер-клиенты, вклюаем в pidgin плагин для аудио и видеозвонков и вуаля – все работает. Причем работать будет как в Empathy, так и в Pidgin

    На вкус и цвет товарищей нет, но Pidgin IMHO лучше, чем Empathy – больше возможностей, плагинов и прочих фич

    Как скачать видео с сайта

    Есть как минимум 4 разных способа сграбить видео с дружественных сайтов. Итак:

    1. Воспользоваться сторонним сервисом, вроде этого: keepvid.com.

    Плюсы: удобно; дружественный сайт не увидит ваш IP адрес.

    Минусы: Зависимость от стороннего сервиса; не все сайты с видео поддерживаются

    2. Использовать плагин в браузере, для Firefox это могут быть Download Helper, Flash Video Resources Downloader или подобная приблуда.

    Плюсы: легко настраивается; несложно скачивать

    Минусы: Firefox от плагинов жрет больше памяти; работает с небольшим числом сайтов

    3. Записать все, что происходит на экране, в видеофайл. Для линуксоидов это совсем не сложно, куча бесплатных програм позволяет это делать. Например, RecordMyDesktop.

    Плюсы: Работает железобетонно всегда и везде; Можно отключить звук при записи, или наложить свой; Видео можно записывать не только целиком, но и частями, обрезая всяческие логотипы, бегущие строки и прочий мусор; Можно записывать не только видео, но и движения курсора мыши, например.

    Минусы: Требуется мощный компьютер, чтобы одновременно проигрывать видео и записывать его, ресурсы кушаются совсем не кисло; Качество записанного изображения может быть хуже, если число кадров в секунду в записываемом видео не совпадает с тем же параметром в проигрываемом ролике (т.е. требуется дополнительная настройка).

    И на закуску, мой любимый способ:
    4. Вытащить видео из кэша браузера Работает оно примерно так. Открываем интересующее нас видео:

    Ждем, когда видео полностью загрузится, и лезем в /tmp , т.к. там Firefox хранит свой кэш. Вот что я нашел у себя:

    ed@notebook:/tmp> ls -l Flash*
    -rw------- 1 ed users 14196852 Ноя 7 14:35 FlashZlG62O

    Копируем его куда-нибудь, и переименовываем в “The Unforgiven cover with solo – Metallica.flv” . Все, ролик можно смотреть оффлайн.

    Update: В комментариях к этому сообщению я узнал о более элегантном способе получить видеофайл из кэша. После того, как видео полностью загрузилось, надо в адресную строку Firefox вбить:
    about:cache
    Далее смотрим дисковый кэш (Disk cache device => List Cache Entries, и ищем файл по размеру (он совпадает байт в байт с временным файлом). И за пару кликов его легко можно сохранить в любое удобное место. По трудозатратам такой способ чуть сложнее копирования временного файла, но зато он работает под Windows и позволяет сохранять файл даже в том случае, когда копирование не получается (например, если винда ругается на то, что файл открыт).

    Плюсы: Не надо ничего дополнительно ставить, все работает и так. На всех сайтах, что я проверял, этот способ работает на ура.

    Минусы: Надо напрягаться, копировать и переименовывать файл. Иначе рано или поздно кэш очистится и видео придется качать заново. Но этот недостаток не такой уж и страшный.

    Update 2: Если в /tmp не находятся файлы по команде

    $ ls -l Flash*

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

    Про eFax

    Логотип eFax

    Однажды мне понадобилось принять факс из далекого буржуинства. Разумеется, факса у меня дома в офисе не оказалось. Знакомых напрягать тоже не захотел, вот и воспользовался сервисом eFax. Они дают выделенный номер факса в городе по выбору (в US, UK и еще в куче стран), и на этот номер можно принять факс. Потом факс отправляется на указанный при регистрации email. И что самое интересное, у них есть free 30 days trial, типа если не нравится – откажитесь в любой момент, денег с вас не возьмем.

    При регистрации они спрашивают персональные данные и номер банковской карты. Карта нужна реально существующая, поскольку они ее проверяют. У меня напрмер они заблокировали 1 рубль на карте для проверки, и только после этого разрешили воспользоваться их сервисом.

    И вот свершилось, заветный факс пришел по почте. А вот чем читать его – хз, файл был с расширением .efx. Как выяснилось, читать такие факсы может только их софтина (efax messenger), которая работает только под виндой и под Mac OS. Так что пришлось скачивать этот троян эту программу, иначе факс просто не прочитать и не сконвернтнуть в TIF. Кстати, на сайте можно в настройках сразу указать, что факсы должны быть в формате TIF, тогда читать их можно будет чем угодно; но я об этом узнал уже после того, как получил файл в efx.

    Но самое интересное началось, когда я решил отказаться от услуг этого сервиса. Нигде в админке такой возможности не предусмотрено, для подачи запроса на закрытие аккаунта надо связаться напрямую с саппортом. Погуглив, нашел ссылку, где можно начать процесс отказа от услуг efax. Дальше начался футбол, ибо американский саппорт якобы не смог посмотреть мой акк, он направил меня в саппорт в UK. А в UK саппорт общается только по телефону, да еще и с shared cost, где звонок значительно дороже звонка на обычный телефон. К примеру, 2.5 минуты общения с саппортом мне обошлись примерно в пол евро; это при том, что звонок в Лондон через Skype на обычный городской телефон обойдется в 2 евроцента за минуту со всеми налогами.

    Английский саппорт (как и американский) сразу отказ не принимает, обязательно спрашивает о причинах отказа от сервиса. Я им сказал, что для того, чтобы пользоваться их софтиной, надо ставить винду. А так, как я сижу под линуксом, не имею возможности пользоваться вашим приложением. Такой ответ саппорт устроил, и сегодня я получил уведомление о закрытии своего аккаунта

    В целом, сервис неплохой для тех, кто регулярно отправляет и получает факсы. Но мне он оказался ни к чему, хотя для разового приема факса он вполне сгодится