12/08/2010

Баг в PolyORB

Сегодня же был обнаружен неприятный баг в PolyORB. PolyORB - это реализация технологии CORBA для Ады от компании AdaCore.
Вот такая простая программка:

with CORBA.ORB;

procedure Test is
begin
   CORBA.ORB.Shutdown (True);
end Test;

Валится с  segmentation fault.

Видимо я первый додумался останавливить ORB не запуская его до этого :-).
Мелочь, а не приятно.

Баг в 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

11/29/2010

Книжное.

Закончил чтение книги "Программист-прагматик. Путь от подмастерья к мастеру".
Хочу заметить, что это весьма интересное повествование о том как следует подходить к процессу разработки, какие при этом могут встретиться ошибки и заблуждения и как их преодолеть.
Рассматриваются такие вопросы, как борьба с недостатками разрабатываемого ПО, тестировани, создание динамичных, легких в сопровождении программ.


Рекомендую к прочтению.

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
- исправления ошибок и улучшение производительности

9/11/2010

KDE 4.5.1 в Gentoo

Ура, в дерево portage в Gentoo Linux наконец то добавили новую версию KDE: KDE-4.5.1.

Только что обновился. Пересобрать  пришлось 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 и все начнет работать.

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.
и вуаля, все должно заработать с пол-пинка.

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:


  • 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.
New version can be downloaded here : http://adaforge.qtada.com/cgi-bin/tracker.fcgi/matreshka/downloader

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);

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. Не обращайте внимание на имя проекта, которо отображается при скачивании =)

4/04/2010

gnat-gcc-4.4.3 в Gentoo Linux.

Кому интересно, я добавил ebuild для компилятора ады gnat-gcc-4.4.3 в gentoo Linux.
Теперь буду его тестировать.
Также планирую обновить пакеты xmlada и добавить пакет gprbuild.

Распределенная компиляция: Gentoo Ubuntu и distcc

На моей домашней машине стоит Gentoo Linux, а это значит я постоянно там что нибудь компиляю. Так вот я уже много всяких штук перепробовал для ускорения компиляции, таких как ccache, компиляция в оперативной памяти. И вот недавно, в связи с приобретением ноутбука, появилась возможность установить и настроить distcc для распределенной компиляции.

Итак что мы имеем:

1. Desktop :
  • AMD Athlon (tm) 64 3000+, 2 гб. оперативной памяти.
  • Gentoo Linux x86_64, 2.6.33 - linux kernel, gcc version 4.4.3
2. Laptop :
  • 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
Для того, чтобы собранные с помощью distcc бинарники работали, необходимо, чтобы
первые две цифры в версии компилятора были одинаковыми.

Настройка 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)