Сегодня 3 декабря, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7276
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Kir Kolyshkin
Kir Kolyshkin
Голосов: 1
Адрес блога: http://k001.livejournal.com/
Добавлен: 2008-02-19 12:45:30 блограйдером Lurk
 

vim + cscope quick howto & tips

2011-07-05 23:44:26 (читать в оригинале)

Если вы не программируете на Си и не используете для этого vim, дальше можно не читать.

Если вы пользуетесь тегами (ctags) в vim, то вы, конечно, знаете, что с их помощью можно по Ctrl-] прыгать с места, где вызывается функция, на место, где она определена (и по Ctrl-T прыгать обратно). Это удобно и здорово, и не только для функций работает, но и, скажем, для структур.

Иногда, однако, хочется прыгать в другую сторону -- в место (места), где эта функция используется (вызывается). Для этого ctags не подходит, а подходит cscope. vim тоже умеет интегрироваться с cscope, но есть нюансы.

Например, не нашлось комбинации клавиш для "прыганья", и читать базу cscope (файлик cscope.out) при настройках по умолчанию (vim-7.3, Fedora 14) vim хочет только из текущего каталога (а хочется ещё и из каталога этажом выше, или двумя этажами выше). Что касается комбинации клавиш, я не придумал ничего лучше, как использовать соседнюю с Ctrl-], а именно Ctrl-\. Они рядом, в этом есть логика. Обратно прыгаем точно так же, как и с тегами, по Ctrl-T.

Решить обе вышеописанные проблемы получилось вот таким кусочком заклинаний для ~/.vimrc:

" CScope
if has("cscope")
        " Ctrl-\ does reverse search (i.e. "who calls this function")
        nmap  :cscope find c <c-r>=expand("<cword>")<cr><cr>

        set nocsverb
        if filereadable("../cscope.out")
                cs add ../cscope.out ..
        elseif filereadable("../../cscope.out")
                cs add ../../cscope.out ../..
        endif
        set csverb
endif


Что ещё? Базу для cscope можно сгенерить командой cscope -R -b, находясь в корне исходников проекта. В общем, больше ничего и не надо.

о, сколько нам открытий чудных

2011-07-05 01:33:09 (читать в оригинале)

Нашёл нынче совершенно случайно багу в нашем коммерческом продукте. Офигел слегка.

Бага заключается в следующем: утилита, если ей задать один параметр и не задать другой (второй к первому обязателен, а я не знал) ругается (что параметра нет) и внезапно молча удаляет конфигурационный файл. После чего все эта утилита работать не хочет, потому что конфигурационного файла нет, а значит, ничего нет. Я как-то не сразу понял, в чём дело, но потом разобрался, как именно это воспроизвести и даже почему это так происходит (для коллег -- PCLIN-29569).

Код примерно вот такой:

int SomeFunction(int id, int cmd)
...
        char dumpfile[4096];
...
        if (gparam->dumpfile == NULL) {
                if (cmd == CMD_DUMP) {
                        logger(-1, 0, "Dump file is not specified.");
                        goto child_err;
                }
...
// где-то тут мы заносим имя файла в dumpfile, но до этого места мы не доходим.
...
child_err:
        if (cmd == CMD_CHKPNT || cmd == CMD_DUMP)
                unlink(gparam->dumpfile ? : dumpfile);

Похоже, что dumpfile выделяется на стеке, и в этом же самом месте памяти раньше лежало имя файла, который мы и удаляем. И компилятор, конечно, не может поругаться на неинициализированную переменную -- мало ли куда какой поинтер передают...

На закуску любителям языка Си -- угадайте, что напечатает этот код (ну или так -- что он может напечатать, согласно стандарту и на практике):
#include <stdio.h>

void a(void) {
        char str[32];
        sprintf(str, "My father was a sailor");
}

void b(void) {
        char str[16];
        puts(str);
}

int main(void) {
        a(); b();
        return 0;
}
Ответ чёрным по чёрному (выделите мышкой, чтобы увидеть):
Всё что угодно может напечатать; у меня с gcc-4.5.1 -O0 он печатает слово sailor :)


Firefox 5 on Fedora 14

2011-07-01 00:25:59 (читать в оригинале)

Переходить на F15 совершенно нет желания, глядя, как они раз в три дня выкатывают новый systemd.

А получить Firefox 5 хочется, например, из-за возможности выставить наконец ui.use_activity_cursor в true и возрадоваться. Это, впрочем, можно сделать и в Firefox 4, который для Fedora 14 побилдил [info]spot (вот тут: http://repos.fedorapeople.org/repos/spot/firefox4/).

Но нам чешется и колется именно пятёрочку. А пятёрочку побилдили какие-то лягушфранцузы, за что наше им человеческое спасибо.

Итак, надо подключить репозиторий rpmfusion (он у вас уже и так наверняка включен):
# rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
# rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

И некий remi:
# rpm -Uvh http://rpms.famillecollet.com/remi-release-14.rpm

После чего:
# yum --enablerepo=remi update firefox

Инструкции скопипащены с какого-то блога. Там у них ошибка -- пакет называется не firefox5, а просто firefox.

cidr2mask на shell

2011-06-29 19:22:26 (читать в оригинале)

В интернетах эта функция гуглится, но то, что нагугливается. не работает под dash. Ввиду того, что дебианеры фашисты в Debian шеллом по умолчанию может запросто оказаться dash, а городить зависимость от bash не хочется, я слегка переделал скопипащенную из интернетов функцию, и теперь она работает и под dash тоже.

Покритикуйте, кто в теме.

cidr2mask() {
	local i mask=""
	local full_octets=$(($1/8))
	local partial_octet=$(($1%8))

	for i in 0 1 2 3; do
		if [ $i -lt $full_octets ]; then
			mask="${mask}255"
		elif [ $i -eq $full_octets ]; then
			mask="${mask}$((256 - (1 << (8 - $partial_octet))))"
		else
			mask="${mask}0"
		fi
		test $i -lt 3 && mask="${mask}."
	done

	echo $mask
}


OpenVZ: всё, о чём вы хотите знать

2011-06-21 12:36:28 (читать в оригинале)

Я работаю в компании Parallels менеджером проекта OpenVZ. В комментариях к этому посту я отвечаю на любые вопросы про OpenVZ, кроме флеймообразующих. Спрашивать можно по-русски или по-английски. Если не смогу ответить сам (я не kernel hacker) -- попрошу коллег.

Для начала несколько ссылок (я не требую всё это прочитать перед тем, как задавать вопрос, но могу и послать на RTFM). Вся информация на английском.

http://wiki.openvz.org/Introduction_to_virtualization
http://wiki.openvz.org/WP/What_are_containers
http://wiki.openvz.org/FAQ
http://wiki.openvz.org/Performance
http://wiki.openvz.org/UBC
http://wiki.openvz.org/Man
http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf

Кроме того, вопросы можно задавать на http://forum.openvz.org/ и http://wiki.openvz.org/Mailing_list.

Ни в коем случае не пишите сюда о найденных ошибках. Баги следует заводить сразу в http://bugzilla.openvz.org/


Страницы: ... 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 

 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.