Сегодня же был обнаружен неприятный баг в PolyORB. PolyORB - это реализация технологии CORBA для Ады от компании AdaCore.
Вот такая простая программка:
with CORBA.ORB;
procedure Test is
begin
CORBA.ORB.Shutdown (True);
end Test;
Валится с segmentation fault.
Видимо я первый додумался останавливить ORB не запуская его до этого :-).
Мелочь, а не приятно.
12/08/2010
Баг в Qt
Понадобилось мне в QtAda использовать класс QProcess для запуска сторонних приложений и управления ими из моей программки.
В результате чего в Qt 4.7.1 был обнаружен баг:
Сигнал QProcess:started вырабатывается 2 раза при старте процесса.
Оказывается баг (QTBUG-7039) известен аж с 2009 года, и даже есть патч,
но отчего то Nokia не хочет исправлять эту ошибку. А жаль.
Вот пример приложения:
/* my_object.h */
#include
#include
#include
#include
class My_Object : public QObject {
Q_OBJECT
public:
My_Object () {
this->p = new QProcess;
connect (this->p,
SIGNAL (started()),
this,
SLOT(appStarted()));
};
void execute () {
if (p)
p->start ("ls");
if (!p->waitForStarted (10000))
qDebug () << "cannot start process" << p->exitCode ();
}
public slots:
void appStarted () {
qDebug () << "Slot : Process Started" << p->pid ();
}
private:
QProcess *p;
};
/* main.cpp */
#include "my_object.h"
int main(int argc, char *argv[])
{
My_Object *m = new My_Object;
m->execute ();
delete m;
}
После компиляции:
qmake -project && qmake && make
имеем:
./process
Slot : Process Started 16669
Slot : Process Started 16669
В результате чего в Qt 4.7.1 был обнаружен баг:
Сигнал QProcess:started вырабатывается 2 раза при старте процесса.
Оказывается баг (QTBUG-7039) известен аж с 2009 года, и даже есть патч,
но отчего то Nokia не хочет исправлять эту ошибку. А жаль.
Вот пример приложения:
/* my_object.h */
#include
#include
#include
#include
class My_Object : public QObject {
Q_OBJECT
public:
My_Object () {
this->p = new QProcess;
connect (this->p,
SIGNAL (started()),
this,
SLOT(appStarted()));
};
void execute () {
if (p)
p->start ("ls");
if (!p->waitForStarted (10000))
qDebug () << "cannot start process" << p->exitCode ();
}
public slots:
void appStarted () {
qDebug () << "Slot : Process Started" << p->pid ();
}
private:
QProcess *p;
};
/* main.cpp */
#include "my_object.h"
int main(int argc, char *argv[])
{
My_Object *m = new My_Object;
m->execute ();
delete m;
}
После компиляции:
qmake -project && qmake && make
имеем:
./process
Slot : Process Started 16669
Slot : Process Started 16669
11/29/2010
Книжное.
Закончил чтение книги "Программист-прагматик. Путь от подмастерья к мастеру".
Хочу заметить, что это весьма интересное повествование о том как следует подходить к процессу разработки, какие при этом могут встретиться ошибки и заблуждения и как их преодолеть.
Рассматриваются такие вопросы, как борьба с недостатками разрабатываемого ПО, тестировани, создание динамичных, легких в сопровождении программ.
Рекомендую к прочтению.
Хочу заметить, что это весьма интересное повествование о том как следует подходить к процессу разработки, какие при этом могут встретиться ошибки и заблуждения и как их преодолеть.
Рассматриваются такие вопросы, как борьба с недостатками разрабатываемого ПО, тестировани, создание динамичных, легких в сопровождении программ.
Рекомендую к прочтению.
10/18/2010
Российский перевод книги "Linux Device Drivers"
Вот тут (http://linuxdrivers.blogspot.com/) народ занялся переводом книги Linux device drivers.
Давайте поможем!
Давайте поможем!
10/10/2010
Новая версия библиотеки QtAda 3.1.0
В свет вышла новая версия библиотеки QtAda 3.1.0. Как и обычно, скачать
можно здесь:
http://www.qtada.com/ru/download.html
Нововведения:
- поддержка модуля QtOpenGL
- поддержка классов QDir, QFileInfo, QProcessEnvironment, QSettings, QUrl модуля QtCore
- поддержка классов QAbstractTextDocumentLayout, QColorDialog, QGraphicsObject, QGraphicsSimpleTextItem, QGraphicsTextItem, QImage,
QImageReader, QImageWriter, QPlainTextDocumentLayout, QRgb модуля QtGui
- поддержка дополнительных операций для классов модулей QtCore и QtGui
- поддержка смешанных GtkAda/QtAda приложений на платформах X11
- исправления ошибок и улучшение производительности
можно здесь:
http://www.qtada.com/ru/download.html
Нововведения:
- поддержка модуля QtOpenGL
- поддержка классов QDir, QFileInfo, QProcessEnvironment, QSettings, QUrl модуля QtCore
- поддержка классов QAbstractTextDocumentLayout, QColorDialog, QGraphicsObject, QGraphicsSimpleTextItem, QGraphicsTextItem, QImage,
QImageReader, QImageWriter, QPlainTextDocumentLayout, QRgb модуля QtGui
- поддержка дополнительных операций для классов модулей QtCore и QtGui
- поддержка смешанных GtkAda/QtAda приложений на платформах X11
- исправления ошибок и улучшение производительности
9/11/2010
KDE 4.5.1 в Gentoo
Ура, в дерево portage в Gentoo Linux наконец то добавили новую версию KDE: KDE-4.5.1.
Только что обновился. Пересобрать пришлось 151 пакет.
Вся перекомпиляция максимум заняла пару часов.
Из новшеств можно отметить следующее:
1. Область уведомлений работает удобней, красивше и адекватней :-)
2. Сделали нормальный интерфейс для управления настроками, разместив все на основной вкладке программы.
3. Добавились всякие новый плазмоиды.
Только что обновился. Пересобрать пришлось 151 пакет.
Вся перекомпиляция максимум заняла пару часов.
Из новшеств можно отметить следующее:
1. Область уведомлений работает удобней, красивше и адекватней :-)
2. Сделали нормальный интерфейс для управления настроками, разместив все на основной вкладке программы.
3. Добавились всякие новый плазмоиды.
9/07/2010
Gentoo : dbus-glib
После очередного обновления в Gentoo, похоже обновился dbus или же-что то с ним связанное.
И всякие приложения, использующие dbus начали падать. Вот так:
>pidgin
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/pygst.py", line 28, in
import sys
KeyError: 'pygst'
process 5938: arguments to dbus_connection_ref() were incorrect, assertion "connection != NULL" failed in file dbus-connection.c line 2556.
This is normally a bug in some application using the D-Bus library.
D-Bus not built with -rdynamic so unable to print a backtrace
Аварийный останов
Оказалось все просто. Нужно сделать emerge dbus-glib и все начнет работать.
И всякие приложения, использующие dbus начали падать. Вот так:
>pidgin
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/pygst.py", line 28, in
import sys
KeyError: 'pygst'
process 5938: arguments to dbus_connection_ref() were incorrect, assertion "connection != NULL" failed in file dbus-connection.c line 2556.
This is normally a bug in some application using the D-Bus library.
D-Bus not built with -rdynamic so unable to print a backtrace
Аварийный останов
Оказалось все просто. Нужно сделать emerge dbus-glib и все начнет работать.
8/27/2010
Cups и HPLIP
Сегодня обнаружил, что мой принтер hp1018 перестал печатать. Оказалось, что после обновления CUPS до версии 1.4.4 драйвер foo2zjs перестал работать. А так как последняя версия ebuild-a датируется 2008 годом, пришлось настраивать в CUPS использование драйверов HPLIP. И надо сказать, что это оказалось весьма легко и просто.
Ставим HPLIP:
USE="X hpcups libnotify policykit qt4 static-ppds udev-acl -doc -fax -hpijs -minimal -parport -scanner -snmp" emerge -vat =net-print/hplip-3.10.6
Пересобираем CUPS (не знаю зачем, но без этого не работало):
USE="X acl dbus gnutls java jpeg pam perl png python samba slp ssl threads tiff usb -debug -kerberos -ldap -php -static -xinetd" emerge -vat net-print/cups-1.4.4
После этого запускаем hp-setup,настраиваем принтер, перезапускаем cups.
и вуаля, все должно заработать с пол-пинка.
Ставим HPLIP:
USE="X hpcups libnotify policykit qt4 static-ppds udev-acl -doc -fax -hpijs -minimal -parport -scanner -snmp" emerge -vat =net-print/hplip-3.10.6
Пересобираем CUPS (не знаю зачем, но без этого не работало):
USE="X acl dbus gnutls java jpeg pam perl png python samba slp ssl threads tiff usb -debug -kerberos -ldap -php -static -xinetd" emerge -vat net-print/cups-1.4.4
После этого запускаем hp-setup,настраиваем принтер, перезапускаем cups.
и вуаля, все должно заработать с пол-пинка.
8/19/2010
ANN: Matreshka 0.0.5
Hello, I'm happy to announce new version of Matreshka toolkit version 0.0.5 for Ada language.
This version includes following features:
This version includes following features:
- Text decoder (New) : various text encodings are supported
- Message translator (New) : for localization of application's messages
- New extensions of string manipulation package (New)
- XML reader (New) : supports socket as input source
- XML reader (New) : incremental parsing of input xml stream supported
- A lot of bug fixes and performance improvements.
7/30/2010
Несколько полезных alias'ов для работы с subversion.
- alias ard='svn propset svn:keywords '\''Author Revision Date'\'''
- alias ct='svn commit'
- alias di='svn diff'
- alias propign='svn propedit svn:ignore'
5/04/2010
Ошибочка в примерах для gnutls
В примерах gnutls обнаружил небольшую ошибочку, при использовании функции:
void gnutls_transport_set_ptr (gnutls_session_t session, gnutls_transport_ptr_t ptr);
Второй параметр этой функции - на самом деле void *, и поэтому правильно ее вызывать не так
int sd = tcp_connect ();
gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
а так:
int sd = tcp_connect ();
gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) &sd);
void gnutls_transport_set_ptr (gnutls_session_t session, gnutls_transport_ptr_t ptr);
Второй параметр этой функции - на самом деле void *, и поэтому правильно ее вызывать не так
int sd = tcp_connect ();
gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
а так:
int sd = tcp_connect ();
gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) &sd);
4/28/2010
Gprbuild, xmlada для дистрибутивов Debian/Ubuntu и Gentoo Linux.
Привет.
Я подготовил пакеты QtAda (www.qtada.com), gprbuild, xmlada для дистрибутивов Debian/Ubuntu и Gentoo Linux.
Для Gentoo Linux я создал спецальный оверлэй ada-overlay. В неместь ebuild файлы для
gnat-gcc-4.4.3, gprbuild, xmlada и qtada. Запакованный оверлэй можно скачать отсюда:
https://sourceforge.net/projects/qtada/files/Gentoo/ada-overlay.tar.bz2/download
Для Debian и Ubun Linux я создал .deb пакеты дял gprbuild, xmlada и qtada.
gprbuild package:
https://sourceforge.net/projects/qtada/files/Debian/gprbuild_1.3.0-1_i386.deb/download
xmlada package:
https://sourceforge.net/projects/qtada/files/Debian/libxmlada-dev_4.3.1-1_i386.deb/download
qtada package:
https://sourceforge.net/projects/qtada/files/Debian/qtada-dev_3.0.0-1_i386.deb/download
P.S. Не обращайте внимание на имя проекта, которо отображается при скачивании =)
Я подготовил пакеты QtAda (www.qtada.com), gprbuild, xmlada для дистрибутивов Debian/Ubuntu и Gentoo Linux.
Для Gentoo Linux я создал спецальный оверлэй ada-overlay. В неместь ebuild файлы для
gnat-gcc-4.4.3, gprbuild, xmlada и qtada. Запакованный оверлэй можно скачать отсюда:
https://sourceforge.net/projects/qtada/files/Gentoo/ada-overlay.tar.bz2/download
Для Debian и Ubun Linux я создал .deb пакеты дял gprbuild, xmlada и qtada.
gprbuild package:
https://sourceforge.net/projects/qtada/files/Debian/gprbuild_1.3.0-1_i386.deb/download
xmlada package:
https://sourceforge.net/projects/qtada/files/Debian/libxmlada-dev_4.3.1-1_i386.deb/download
qtada package:
https://sourceforge.net/projects/qtada/files/Debian/qtada-dev_3.0.0-1_i386.deb/download
P.S. Не обращайте внимание на имя проекта, которо отображается при скачивании =)
4/04/2010
gnat-gcc-4.4.3 в Gentoo Linux.
Кому интересно, я добавил ebuild для компилятора ады gnat-gcc-4.4.3 в gentoo Linux.
Теперь буду его тестировать.
Также планирую обновить пакеты xmlada и добавить пакет gprbuild.
Теперь буду его тестировать.
Также планирую обновить пакеты xmlada и добавить пакет gprbuild.
Распределенная компиляция: Gentoo Ubuntu и distcc
На моей домашней машине стоит Gentoo Linux, а это значит я постоянно там что нибудь компиляю. Так вот я уже много всяких штук перепробовал для ускорения компиляции, таких как ccache, компиляция в оперативной памяти. И вот недавно, в связи с приобретением ноутбука, появилась возможность установить и настроить distcc для распределенной компиляции.
Итак что мы имеем:
1. Desktop :
первые две цифры в версии компилятора были одинаковыми.
Настройка Ubuntu.
Устанавливаем компиляторы и distcc:
sudo apt-get install gcc g++ distcc
Затем добавляем в файл /etc/distcc/hosts адрес хоста, на котором можно запускать кrомпиляцию и через "/" максимальное количество потоков, которое способен принять для компиляции компьютер:
echo "192.168.2.1/2" > /etc/distcc/hosts
Далее нужно настроить демон distcc который будет принимать файлы для компиляции от Desktop компьютера. Для этого редактируем файл /etc/default/distcc где устанавливаем какой интерфейс слушать, сколько работ может принимать хост для компляции и т.д. Вот пример моего файла конфигурации:
STARTDISTCC="true"
ALLOWEDNETS="127.0.0.1 192.168.2.1"
LISTENER="192.168.2.2"
NICE="10"
JOBS="4"
После этого запускаем демон distcc:
/etc/init.d/distcc start
Настройка Gentoo.
Устанавливаем distcc :
emerge -v distcc
Указываем список хостов, на которые передавать данные для компиляции и количество потоков:
/usr/bin/distcc-config --set-hosts "192.168.2.1/2 192.168.2.2/4"
настраиваем демон distcc, добавляя в файл /etc/conf.d/distccd следующие строки:
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.2.2"
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.2.1"
DISTCCD_OPTS="${DISTCCD_OPTS} --jobs 2"
запускаем distcc:
/etc/init.d/distccd start
Для того, чтобы проверить, что все настроено правильно добавляем в Gentoo в файл /etc/make.conf строчку:
FEATURES="distcc"
и пробуем собрать какой нибудь пакет:
emerge dev-libs/glib
И в то же самое время, смотрим на Ubuntu файл логов distcc. Если все работает нормально, то сообщения должны быть примерно такими:
distccd[5791] (dcc_job_summary) client: 192.168.2.1:55352 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:67ms x86_64-pc-linux-gnu-gcc /var/tmp/ccache/api.tmp.ZION.23853.i
Возможные проблемы.
Я столкнулся со следующей проблемой. В логах на машине с Ubuntu у меня появлялась строчка:
distccd[4506] (dcc_execvp) ERROR: failed to exec x86_64-pc-linux-gnu-g++: No such file or directory.
Это сообщение появлялось из за того, что в Gentoo компилятор называется x86_64-pc-linux-gnu-g++ а в Ubuntu x86_64-linux-gnu-g++.
Чтобы это вылечить, нужно создать в каталоге /usr/bin/ символическую ссылку:
ln -s g++ x86_64-pc-linux-gnu-g++
Итак что мы имеем:
1. Desktop :
- AMD Athlon (tm) 64 3000+, 2 гб. оперативной памяти.
- Gentoo Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
- Intel(r) Core(tm) i3 CPU M 330, 2.13GHz, 3 гб. оперативной памяти.
- Ubuntu Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
первые две цифры в версии компилятора были одинаковыми.
Настройка Ubuntu.
Устанавливаем компиляторы и distcc:
sudo apt-get install gcc g++ distcc
Затем добавляем в файл /etc/distcc/hosts адрес хоста, на котором можно запускать кrомпиляцию и через "/" максимальное количество потоков, которое способен принять для компиляции компьютер:
echo "192.168.2.1/2" > /etc/distcc/hosts
Далее нужно настроить демон distcc который будет принимать файлы для компиляции от Desktop компьютера. Для этого редактируем файл /etc/default/distcc где устанавливаем какой интерфейс слушать, сколько работ может принимать хост для компляции и т.д. Вот пример моего файла конфигурации:
STARTDISTCC="true"
ALLOWEDNETS="127.0.0.1 192.168.2.1"
LISTENER="192.168.2.2"
NICE="10"
JOBS="4"
После этого запускаем демон distcc:
/etc/init.d/distcc start
Настройка Gentoo.
Устанавливаем distcc :
emerge -v distcc
Указываем список хостов, на которые передавать данные для компиляции и количество потоков:
/usr/bin/distcc-config --set-hosts "192.168.2.1/2 192.168.2.2/4"
настраиваем демон distcc, добавляя в файл /etc/conf.d/distccd следующие строки:
DISTCCD_OPTS="${DISTCCD_OPTS} --allow 192.168.2.2"
DISTCCD_OPTS="${DISTCCD_OPTS} --listen 192.168.2.1"
DISTCCD_OPTS="${DISTCCD_OPTS} --jobs 2"
запускаем distcc:
/etc/init.d/distccd start
Для того, чтобы проверить, что все настроено правильно добавляем в Gentoo в файл /etc/make.conf строчку:
FEATURES="distcc"
и пробуем собрать какой нибудь пакет:
emerge dev-libs/glib
И в то же самое время, смотрим на Ubuntu файл логов distcc. Если все работает нормально, то сообщения должны быть примерно такими:
distccd[5791] (dcc_job_summary) client: 192.168.2.1:55352 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:67ms x86_64-pc-linux-gnu-gcc /var/tmp/ccache/api.tmp.ZION.23853.i
Возможные проблемы.
Я столкнулся со следующей проблемой. В логах на машине с Ubuntu у меня появлялась строчка:
distccd[4506] (dcc_execvp) ERROR: failed to exec x86_64-pc-linux-gnu-g++: No such file or directory.
Это сообщение появлялось из за того, что в Gentoo компилятор называется x86_64-pc-linux-gnu-g++ а в Ubuntu x86_64-linux-gnu-g++.
Чтобы это вылечить, нужно создать в каталоге /usr/bin/ символическую ссылку:
ln -s g++ x86_64-pc-linux-gnu-g++
2/19/2010
Удаление завершающих пробелов в Emacs.
Для того, чтобы Emacs при сохранении удалял завершающие пробелы, в конфиг файл нужно добавить вот такую строчку:
(add-hook 'before-save-hook 'delete-trailing-whitespace)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
Подписаться на:
Сообщения (Atom)