пятница, 21 августа 2009 г.

classbrowser для php5 кода в gedit

Так уж сложилось, что я пишу php (да и js и python) код в редакторе gedit.
Кроме подсветки синтаксиса, мне удобно иметь перед глазами список доступных классов и функций в текущем файле.
В общем случае для этого используется plugin classbrowser, но с php получается одно недоразумение. Дело в том, что этот плагин разбирает код с помощью известной программы ctags, а та, в свою очередь, с php не очень дружит - не работает с классами, например. Подружить их, впрочем, оказалось достаточно несложно.
Поскольку этот плагин для gedit написан на python, то его поведение легко изменить до требуемого.
Для этого находим парсер отвечающий за ctags. Он называется parser_ctags.py и нашелся на моей системе в каталоге /usr/lib/gedit-2/plugins/classbrowser. Правим строку
command = "ctags -n -f %s %s"%(tmpfile,arg)
на
command = "ctags -n --regex-PHP='/(abstract |final )+class ([^ ]*)/\\2/c/' --regex-PHP='/interface ([^ ]*)/\\1/c/' --regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\\2/f/' -f %s %s"%(tmpfile,arg)
И можем наслаждаться корректным списком функций для php5
Правда мне еще пришелся по душе этот список без показа переменных (их обычно много и они мешают просматривать структуру классов). Так что добавим после строки:
if tokens[0][:2] == "!_": continue
строку:
if tokens[3][:1] == "v": continue

суббота, 25 апреля 2009 г.

Linux hints

Простенькие вещи, которые могут быть полезны:

MySQL статистика по запросам

watch -n1 "mysqladmin -uПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ processlist"

Работа с virtualenv

Создание новой:
virtualenv ENVNAME

Запуск:
source ENVNAME/bin/activate
потом просто (без source ENVNAME/bin/)
deactivate

Установка пакаджей с помощью pip
pip -E ENVNAME install PACKAGENAME

Подробнее:
http://www.saltycrane.com/blog/2009/05/notes-using-pip-and-virtualenv-django/

MySQL уникальный ключ по нескольким полям

CREATE UNIQUE INDEX `indexnamehere` ON registrations(`column_1`,`column_2`);

Работа со screen

1. запуск новой сессии
# screen
после этого вы можете работать, как в обычном терминале
2. работа при помощи комбинации клавиш:
а) создать новую сессию в уже запущенной "ctrl+a, c"
б) переключиться на следующую сессию "ctrl+a, n"
в) переключиться на определенную сессию "ctrl+a, 1" ; "ctrl+a, 2" ; ...
г) отделить сессию от текущего терминала (оставить работать в фоновом режиме) "ctrl+a, d"
после этой комбинации клавиш Вы можете смело выйти из терминала (и пойти домой, например),
запущенная команда будет работать
3. прикрепить запущенную ранее сессию
# screen -r
4. Если запущено больше одной копии screen, то по команде screen -r, будет выведен список сеансов, типа
25944.pts-1.nuiZZZ (Detached)
12269.pts-2.nuiZZZ (Detached)
В этом случае, необходимо выбрать сессию и продолжить.
Например, если необходимо продолжить вторую сессию,
надо использовать команду
#screen -r 12269.pts-2.nuiZZZ
Или в сокращенном варианте
#screen -r 2


Игнорировать в svn все файлы текущей директории
svn propset svn:ignore '*' .
Обратить внимание, что маска задается в кавычках. Обратное действие:
svn propdel svn:ignore '*' .

Рекурсивно удалить все папки .svn из текущей директории:
find . -type d -name .svn -print0 | xargs -0 rm -rf

Поменять в vim кодировку на cp1251:
Убедиться, что установлено подходящая локаль export LANG=ru_RU.UTF-8
затем в редакторе в режиме ввода команд:
:e ++enc=cp1251

.vimrc установить кодировку
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8

Узнать IP адрес ADSL модема или прокси, за которым сидишь или с которого в инет смотрит контора:
wget -q -O - http://getip.110mb.com/mini/

Сделать chroot для системы со сломанным загрузчиком:

Загружемся с LiveCD и далее, логинимся как суперпользователь(Ctrl+Alt+F1)
#mkdir /mnt/newroot
#mount /proc /mnt/newroot/proc -o bind
#mount /proc /mnt/newroot/dev -o bind
#chroot /mnt/newroot

Заставить в ALTLinux при загрузке выставлять для определённого модуля ядра свои настройки:

Устанавливаем нужный модуль, тестируем настройки. Если все нормально, то создаем в каталоге /etc/modprobe.d текстовый файл с именем модуля (имя вообще-то любое может быть, но чтобы не запутаться лучше именно так) и сохраняем в нем настройки. Например, у меня по умолчанию не устанавливалась марка тюнера на плате saa7134. Я создал файл saa7134 в нем задал "options saa7134 tuner=1" и тюнер теперь заводится после перезагрузки.