LINUX.ORG.RU

Сообщения Bohtvaroh

 

Ubuntu 8.04 beta: простейшее приложение GTK+ и valgrind

Форум — Development

Всем привет. Пишем простейшее приложение на GTK+:

#include <gtk/gtk.h>

int
main (int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  g_signal_connect (G_OBJECT (window), "destroy",
                    G_CALLBACK (gtk_main_quit), NULL);
  gtk_widget_show (window);

  gtk_main ();
  return 0;
}

Собираем: gcc -g -O0 -Wall -pedantic `pkg-config --cflags --libs gtk+-2.0` main.c -o main

Натравливаем на него valgrind:

Invalid read of size 4
==26978==    at 0x4015209: (within /lib/ld-2.7.so)
==26978==    by 0x4005C69: (within /lib/ld-2.7.so)
==26978==    by 0x4007A97: (within /lib/ld-2.7.so)
==26978==    by 0x4011543: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4010F5D: (within /lib/ld-2.7.so)
==26978==    by 0x4731291: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4731454: __libc_dlopen_mode (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470B186: __nss_lookup_function (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470B29F: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470D075: __nss_passwd_lookup (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==  Address 0x4bc8284 is 36 bytes inside a block of size 38 alloc'd
==26978==    at 0x4022AB8: malloc (vg_replace_malloc.c:207)
==26978==    by 0x4008031: (within /lib/ld-2.7.so)
==26978==    by 0x4011543: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4010F5D: (within /lib/ld-2.7.so)
==26978==    by 0x4731291: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4731454: __libc_dlopen_mode (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470B186: __nss_lookup_function (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470B29F: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470D075: __nss_passwd_lookup (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x46B7B72: getpwnam_r (in /lib/tls/i686/cmov/libc-2.7.so)
==26978== 
==26978== Invalid read of size 4
==26978==    at 0x4015237: (within /lib/ld-2.7.so)
==26978==    by 0x4005C69: (within /lib/ld-2.7.so)
==26978==    by 0x4007A97: (within /lib/ld-2.7.so)
==26978==    by 0x400BC16: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x400BDF9: (within /lib/ld-2.7.so)
==26978==    by 0x40115A3: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4010F5D: (within /lib/ld-2.7.so)
==26978==    by 0x4731291: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4731454: __libc_dlopen_mode (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==  Address 0x4bc85cc is 28 bytes inside a block of size 31 alloc'd
==26978==    at 0x4022AB8: malloc (vg_replace_malloc.c:207)
==26978==    by 0x4008031: (within /lib/ld-2.7.so)
==26978==    by 0x400BC16: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x400BDF9: (within /lib/ld-2.7.so)
==26978==    by 0x40115A3: (within /lib/ld-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4010F5D: (within /lib/ld-2.7.so)
==26978==    by 0x4731291: (within /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x400D5D5: (within /lib/ld-2.7.so)
==26978==    by 0x4731454: __libc_dlopen_mode (in /lib/tls/i686/cmov/libc-2.7.so)
==26978==    by 0x470B186: __nss_lookup_function (in /lib/tls/i686/cmov/libc-2.7.so)

-- и ещё много похожих ругательств --

==27164== ERROR SUMMARY: 10 errors from 9 contexts (suppressed: 99 from 1)
==27164== malloc/free: in use at exit: 253,147 bytes in 3,181 blocks.
==27164== malloc/free: 10,472 allocs, 7,291 frees, 706,786 bytes allocated.
==27164== For counts of detected errors, rerun with: -v
==27164== searching for pointers to 3,181 not-freed blocks.
==27164== checked 582,764 bytes.

Откуда столько ошибок? Development branch?

>>>

Bohtvaroh
()

GTK+ и ресайз

Форум — Development

Всем привет. Есть вот такая програмка, демонстрирующая поведение GTK+ при изменении размера контейнера (в данном случае GtkWindow):

#include <gtk/gtk.h>

static void
window_resize_cb (GtkWidget *window, GtkAllocation *allocation, gpointer data)
{
  g_message ("window: new size %dx%d", allocation->width, allocation->height);
}

static void
button_resize_cb (GtkWidget *window, GtkAllocation *allocation, gpointer data)
{
  g_message ("button: new size %dx%d", allocation->width, allocation->height);
}

static void
window_size_request_cb (GtkWidget *window, GtkRequisition *requisition, gpointer data)
{
  g_message ("window: request size %dx%d", requisition->width, requisition->height);
}

static void
button_size_request_cb (GtkWidget *window, GtkRequisition *requisition, gpointer data)
{
  g_message ("button: request size %dx%d", requisition->width, requisition->height);
}

int
main (int argc, char *argv[])
{
  GtkWidget *window, *button;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_container_set_border_width (GTK_CONTAINER (window), 10);
  g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);

  button = gtk_button_new_with_label ("some label");
  gtk_container_add (GTK_CONTAINER (window), button);

  g_signal_connect (G_OBJECT (window), "size-allocate",
		    G_CALLBACK (window_resize_cb), NULL);
  g_signal_connect (G_OBJECT (button), "size-allocate",
		    G_CALLBACK (button_resize_cb), NULL);
  g_signal_connect (G_OBJECT (window), "size-request",
		    G_CALLBACK (window_size_request_cb), NULL);
  g_signal_connect (G_OBJECT (button), "size-request",
		    G_CALLBACK (button_size_request_cb), NULL);

  gtk_widget_show_all (window);

  gtk_main ();
  return 0;
}

Собираем так: gcc -Wall -pedantic `pkg-config --cflags --libs gtk+-2.0` resizing.c -o resizing

Запускаем:

.$ ./resizing 
** Message: button: request size 74x29
** Message: window: request size 94x49
** Message: button: new size 74x29
** Message: window: new size 94x49

-- здесь вопросов нету. Теперь делаем разовый ресайз окна средствами WM --

** Message: window: request size 94x49
** Message: button: new size 84x29
** Message: window: new size 104x49
** Message: window: request size 94x49
** Message: window: new size 104x49

Вот здесь начинаются вопросы.
Насколько мне известно, для вычисления новых размеров компонентов внутри контейнера,
контейнер рекурсивно запрашивает *желаемые* размеры "детей" (структура GtkRequisition). Это стадия 1.
Потом происходит фактическое выделение размеров (структура GtkAllocation). Это стадия 2.
В нормальных условиях, если свойство "resizable" окна не установлено в FALSE, то реальные размеры компонентов будут такими, какими они были на стадии 1.

Мы же видим следующее:
> ** Message: window: request size 94x49
Окно запрашивает старый размер
> ** Message: button: new size 84x29
Кнопка получает новый размер
> ** Message: window: new size 104x49
Окно получает новый размер
> ** Message: window: request size 94x49
Окно запрашивает старый размер и ...
> ** Message: window: new size 104x49
... получает новый.

Какая-то ерунда получается.
У меня есть подозрение, что я как-то неправильно полагаюсь на сигналы size-request и size-allocate,
хотя даже при этом условии как-то всё происходит странно.

Если кто-то в этом что-то понимает, поясните, плиз.

>>>

Bohtvaroh
()

Маленький патч для Nautilus

Галерея — Скриншоты

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

На скрине: почти дефолтная Ubuntu 8.04 beta и nautilus 2.22.1 с результатом работы патча. Влючить/выключить сабжевый контрол можно в меню View->Zoom Control. Сам патч: http://rapidshare.com/files/103896950/zoom_control.patch.html (сорри за рапиду, куда ещё залить не знаю).

Как думаете, стоит ли с этим соваться к разработчикам наутилуса?

>>> Просмотр (1680x1050, 190 Kb)

Bohtvaroh
()

Сменить шрифт внутри PDF

Форум — Desktop

Можно-ли глобально в PDF файле заменить один конкретный шрифт на другой? А то читать совсем туго.

>>>

Bohtvaroh
()

dbg пакеты в дебиан

Форум — Development

Объясните пож-та, как пользоваться *-dbg пакетами в дебиан/убунту. Использование so-шек из них в LD_PRELOAD вызывает мгновенный сегфолт даже у ls. Архитектура amd64.

>>>

Bohtvaroh
()

Можно-ли полагаться на tail recursion в GCC?

Форум — Development

Подскажите пож-та, можно-ли полагаться на оптимизацию хвостовой рекурсии в gcc? Из мануала:

-foptimize-sibling-calls
          Optimize sibling and tail recursive calls.
          Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.

Ведь если программу собрать с '-O' ниже 2, то она будет вести себя неправильно. И будет-ли выполнена оптимизация, если ещё установлен флаг отладки '-g'?

>>>

Bohtvaroh
()

Emacs + Erlang + Distel (не могу отладить функцию)

Форум — Development

Добрый день.

У меня есть простой модуль с простой функцией а-ля helloworld. Хочу продебажить её с помощью Distel. Делаю всё по этому туториалу: http://bc.tech.coop/blog/070528.html .

Модуль hello.erl:

-module(hello).

-export([hello/0]).

hello() ->
'Hello World'.

Запускаю erlang из erlang-mode, node() возвращает 'emacs@tvaroh-laptop'; модуль hello собран с отладочной информацией, цепляюсь к ноду C-c C-d i - пишет "Successfully uploaded backend modules into node". Пытаюсь поставить точку останова, получаю сообщение "Module is not interpreted, can't set breakpoints".

Вот скриншот: http://img181.imageshack.us/img181/9229/screenshotemacstvarohlaoa1.png

В чём может быть проблема?

>>>

Bohtvaroh
()

Новый gtk-engines-aurora-1.4

Галерея — Скриншоты

Давечи обновился Aurora GTK+ Engine - изменений немного, но в целом внейшний вид улучшился в лучшую сторону. Понравился режим menubarstyle = 2. На скрине можно видеть eclipse, в котором я "осиливаю" spring-web-flow и gajim с незамазанным списком контактов. :)

Нормального качества в таком разрешении добиться я не сумел, поэтому вот ссылка на png: http://img123.imageshack.us/img123/9913/screenshotbu2.png

Всё это вертится на ноутбуке Dell Inspiron 1520, OS - Ubuntu 7.10.

Первый скрин, сильно не ругайте. :)

>>> Просмотр (1680x1050, 281 Kb)

Bohtvaroh
()

Запретить трафик skype

Форум — Admin

Господа, подскажите рецепт, как забанить трафик skype на маршрутизаторе, я погуглил, но сходу не нашёл. Мне б номер порта и протокол (udp|tcp ?), строчку для iptables я и сам напишу. Спасибо.

>>>

Bohtvaroh
()

Визуализация аудио

Форум — Desktop

Господа, посоветуйте аудио-плейер с системой визуализации (или какой-то дополнительный модуль X для плейера Y), в которую бы не стыдно было "пофтыкать". :)

Из того, что видел, всё какое-то примитивное и с офтопичными визуализаторами к винампу даже сравнить нельзя.

Очень надо. %)

>>>

Bohtvaroh
()

nvidia-settings, 2 монитора, 2 сессии gnome и openbox

Форум — Desktop

В общем, уважаемая публика у меня 2 вопроса. :)

В настройках nvidia-settings я выбрал, чтобы для второго монитора создавалась отдельная X-сессия, и теперь при старте из gdm, только если второй монитор подключен, на нём запускается вторая сессия gnome. Вопрос заключается в том, как запустить эту вторую сессию, когда первая уже запущена?

Вопрос второй: если использовать openbox вместо metacity, что я и делаю, то на втором мониторе вообще не создаётся wm и окна появляются без рамок - можно-ли это как-то побороть? Я запускают openbox через gdm (пункт Gnome Session (openbox)).

>>>

Bohtvaroh
()

Первые часы с vala и первые грабли. :)

Форум — Development

Решил вот полюбоваться на vala. С первого взгляда всё кулл, по сравнению с голым си, создание собственного виджета - просто сказка, и при этом никаких дополнительных рантайм-зависимостей. Синтаксис похож на java, хотя эксперты утверждают, что скорее на c#, спорить не буду, ибо не его знаю. Ну и соответственно первая грабля: в vala довольно легко прикрутить любую библиотеку, основанную на gobject, это хорошо конечно, но как поступить, когда мне тупо понадобилась функция вычисления косинуса или любая иная внешняя? Подскажите, кто сталкивался.

>>>

 

Bohtvaroh
()

Изощрённый вопрос по ant

Форум — Development

Вопрос по ant, может кто сталкивался. Есть такая структура каталогов:

build.xml
build.properties

dir1/subdir1.1
    /subdir1.2
    /subdir1.3
dir2/subdir2.1
dir3/subdir3.1
    /subdir3.2
.../...

В каждом каталоге subdirX.X также есть свой build.xml.
Необходимо сделать так, чтобы при добавлении новой поддиректории, например, dir6/subdir6.1 ,
не надо было править главный build.xml на предмет вызова <ant dir="dir6/subdir6.1" /> .
Информация о порядке сборки должна браться из файла build.properties, в котором и нужно регистрировать добавление новой поддиректории,
причём, порядок сборки важен.

>>>

Bohtvaroh
()

xcompmgr, эффект сворачивания окна в metacity - остаются следы на десктопе

Форум — Desktop

При включенном xcompmgr эффект сворачивания окна metacity оставляет на рабочем столе рваные полосы от границ окна. Артефакт проявляется где-то один раз из десяти. Включение reduced resources конечно помогает, но тогда не отображается содержимое окна при перетаскивании. Пробовал играть с опциями в xorg.conf - не помогло. Может кто-нибудь сталкивался и смог победить?

>>>

Bohtvaroh
()

Вопрос по autotools

Форум — Development

У меня в configure.ac есть следующий блок:

dnl #######################################################################
dnl # Debugging support
dnl #######################################################################
AC_ARG_ENABLE(debug, [AC_HELP_STRING([--enable-debug],
[compile with debugging support])], , enable_debug=no)
if test "x$enable_debug" = "xyes" ; then
AC_DEFINE(DEBUG, 1, [Define if debugging is enabled.])
fi

if test "x$enable_debug" = "xyes"; then
CFLAGS="$CFLAGS -g"
fi

Bohtvaroh
()

Непонятка с простеньким алгоритмом

Форум — Development

Есть такой вот абзац в rfc2782 (A DNS RR for specifying the location of services):

Compute the sum of the weights of those RRs, and with each RR
associate the running sum in the selected order. Then choose a
uniform random number between 0 and the sum computed
(inclusive), and select the RR whose running sum value is the
first in the selected order which is greater than or equal to
the random number selected. The target host specified in the
selected SRV RR is the next one to be contacted by the client.
Remove this SRV RR from the set of the unordered SRV RRs and
apply the described algorithm to the unordered SRV RRs to select
the next target host. Continue the ordering process until there
are no unordered SRV RRs. This process is repeated for each
Priority.

Мне непонятно здесь первое предложение, например, есть элементы 0, 1, 15, 5, какие именно суммы надо ассоциировать с каждым элементом?

Помогите расковырять.

Bohtvaroh
()

ГОСТ 34.10-2001 и linux

Форум — Security

Подскажите сертифицированные в РФ средства для подписывания/проверки подлинности цифровой подписи, используя сабжевый ГОСТ, под linux. Вроде бы есть cryptopro, но он в виде непонятного модуля ядра (для rh9). И ещё пробегала такая новость - http://www.linux.org.ru/jump-message.jsp?msgid=1399593 . Но, я так понимаю, это решение пока не прошло сертификацию. Помогите разобраться с вопросом. :)

Bohtvaroh
()

emacs, автовставка парных символов

Форум — Development

Подскажите, как сделать, чтоб, когда в emacs набираешь (, [, {, <<, сразу набирались соответствующие парные символы? Вводим << получаем <<>> и курсор в нужной позиции. :)

Bohtvaroh
()

Ebuild для pgadmin 1.8 - где взять?

Форум — Desktop

В портэже почему-то сильно устаревшая версия pgadmin3. Хотелось бы найти ebuild для 1.8 beta2 и соответственно wxGTK >= 2.8.0, от которых он зависит. Может кто-то поделиться?

Bohtvaroh
()

Erlang, list comprehensions, туплю.

Форум — Development

Читаю "Armstrong Thesis", нашёл там такую функцию:

perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].

Пример того, как она работает:

> perms("123").
["123","132","213","231","312","321"].

Про list comprehensions прочитал, вроде разобрался (кстати, как этот термин звучит по-русски?), но понять толком, как эта ф-я работает пока не получается (может просто надо выспаться? ;).

%% Помогите разложить по полочкам. %)

Bohtvaroh
()

RSS подписка на новые темы