2/06/2012
Переезжаем с Postgresql 8.4 на Postgresql 9.1 в Ubuntu
Делается это так:
$ su - postgres
Делаем backup на всякий случай:
$ pg_dumpall >backup_db
Останавливаем сервер:
$ pg_dropcluster --stop 9.1 main
Переносим данные со старого сервера:
$ pg_upgradecluster 8.4 main
Удаляем старый сервер:
$ pg_dropcluster 8.4 main
...
Profit !
2/01/2012
Linux_x86_64 и Skype
21 век на дворе а skype до сих пор не распространяется для 64-х битных
линуксов.
Постоянно приходится извращаться, потому что при каждом обновлении в Gentoo появляются проблемы с камерой и каждый раз при обновлении
приходится добавлять в /usr/bin/skype вот такую строчку:
export LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so
Чего-то надоело уже.
Может кто знает, чем его можно заменить, но так, чтобы было возможность общаться с контактами из skype'а?
Есть какой нибудь транспорт, как например в xmpp?
p.s. Пост был из будущего
линуксов.
Постоянно приходится извращаться, потому что при каждом обновлении в Gentoo появляются проблемы с камерой и каждый раз при обновлении
приходится добавлять в /usr/bin/skype вот такую строчку:
export LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so
Чего-то надоело уже.
Может кто знает, чем его можно заменить, но так, чтобы было возможность общаться с контактами из skype'а?
Есть какой нибудь транспорт, как например в xmpp?
p.s. Пост был из будущего
1/27/2012
Настройка Apache + git + trac
Для хранения кода своих мелких проектов я частенько использую репозитории обычно или git или svn и систему багтрекинга trac.
Ниже для того, чтобы не забыть как это настраивается опишу все шаги на примере Ubuntu 10.10
1. Установка необходимого софта.
Устанавливаем весь необходимый софт:
$ apt-get install apache2 git subversion postgresql trac python-psycopg2 libapache2-mod-python
Включаем в апаче модули, которые нужны для доступа к репозиторию:
$ a2enmod dav dav_fs
2. Настройка git репозитория
Для примера создам тестовый репозитория с именем my_proj.
Для этого на сервер создаем каталог где у нас будут храниться данные,
как для bare репозитори, так и для обычного
$ mkdir -p /proj/git_repos_bare
$ cd /proj/git_repos_bare
$ git init --bare my_proj_init
Далее создаем каталог, где будут храниться репозитории:
$ mkdir -p /proj/git_repos
$ cd /proj/git_repos
Создаем пустой репозиторий:
$ git clone --bare /proj/git_repos_bare/my_proj_init my_proj
Даем права на доступ в репозиторий пользователю www-data от имени
которого будет хозяйничать апач:
$ chown -R www-data:www-data /proj/git_repos
3. Настройка Trac
Для того чтобы настроить trac сначала потребуется настроить базу данных в которой он будет хранить информацию о коммитах, логи и прочее.
Trac поддерживает много всяких БД: SQLite, MySQL, PostgreSQL.
Мне больше всего нравится PostgreSQL, но и с любой другой БД проблем возникнуть не должно.
3.1 Настройка postgres:
Создаем пользователя:
$ psql -d template1 -U postgres
$ template1=# CREATE USER trac WITH PASSWORD 'trac';
Создаем базу в которой trac будет хранить свои данные:
$ template1=# CREATE DATABASE "trac-my_proj" WITH OWNER = trac TABLESPACE = pg_default CONNECTION LIMIT = -1;
На этом этапе настройка базы данных завершена.
3.2 Настройка Trac
Теперь нужно настроить окружение Trac.
Создаем каталог где будут храниться окружения Trac'а:
$ mkdir -p /var/trac
$ cd /var/trac
Настраиваем окружение:
trac-admin {Название проекта} initenv {Имя репозитория} {Строка соединения с БД} {Тип репозитория} {Путь к репозиторию}
В нашем случае это будет выглядеть так:
$ trac-admin my_proj initenv my_proj postgres://trac:trac@localhost/trac-my_proj git /proj/git_repos/my_proj
Добавляем пользователя который будет являться администратором в Trac :
$ trac-admin my_proj permission add test TRAC_ADMIN
Разрешаем апачу хозяйничать в каталоге с файлами Trac'а:
$ chown -R www-data:www-data /var/trac/my_proj
3.3 Установка плагина для git репозитория
Поумолчанию trac в качестве системы контроля версий поддерживает только subversion, поэтому нужно установить дополнительный плагин для того, чтобы можно было использовать git репозиторий:
$ easy_install http://github.com/hvr/trac-git-plugin/tarball/master
Чтобы проверить что Trac заработал нужно запустить tracd:
$ tracd --port 8000 /var/trac/my_proj
Теперь на результаты деятельности можно посмотреть через браузер:
http://127.0.0.1:8000/
Если все ок, то должна отобразиться заглавная Wiki страничка.
4. Настройка Apache
Теперь для того чтобы иметь унифицированные механизм аутентификации и доступа к репозиториям и баг трекеру настраиваем apache.
Сначала добавим пользователя которому нужно дать доступ в репозитории и в баг трекер:
$ htpasswd -c /var/trac/users.auth test
Вводим пароль и готово.
Далее правим конфигурационный файл апача:
/etc/apache2/sites-enabled/000-default
Если же хочется использовать https, то править нужно:
/etc/apache2/sites-enabled/default-ssl
Сначала устанавливаем Python handler который будет выводить список проектов при заходе на страничку yourdomain/trac:
<Location /trac/ > SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/trac PythonOption TracUriRoot /trac/ PythonOption PYTHON_EGG_CACHE /tmp/.eggs </Location>
После этого, нужно сказать апачу чтобы он не разрешал неавторизованным пользователям ходить в баг трекер.
<LocationMatch /trac/*> AuthType Basic AuthName "Input your username and password to access." AuthUserFile /var/trac/users.auth Require valid-user </LocationMatch>
Далее настраиваем git.
Прописываем переменные окружения, в которых указываем корень каталога с репозиториями, http-бэкенд и прописываем алиас пути к репозиториям через web:
SetEnv GIT_PROJECT_ROOT /proj/git_repos SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /gitweb "/usr/lib/cgi-bin/gitweb.cgi" ScriptAlias /git/ /usr/lib/git-core/git-http-backend Alias /git "/proj/git_repos"
и запрещаем вход без пароля:
<Locationmatch /git/*> DAV on AuthType Basic AuthName "Git Access" AuthUserFile /var/trac/users.auth Require valid-user </LocationMatch>
Делаем в каталоге с репозиторием:
$ git update-server-info
И ,наконец, перезапускаем апач:
$ service apache2 restart
На этом настройка апача завершена.
5. Проверка что все работает.
Проверяем что репозиторий работает:
$ git clone http://test@mydomain/git/my_proj
Cloning into 'my_proj'...
Password for 'mydomain':
warning: You appear to have cloned an empty repository.
Добавляем файлы в репозиторий, и делаем начальный коммит:
git push origin master:master
Вот как-то так.
Если возникли какие-то проблемы, то посмотреть что идет не так можно в логах:
/var/log/apache2
12/21/2011
Code @ C++: Find sum of elements in the array
Code @ C++: Find sum of elements in the array: Наткнулся на задачу, которую предлагают в Yandex на собеседовании: Ниже приведены три варианта суммирования чисел с плавающей точкой (предп...
12/13/2011
Emacs column marker
Очень часто стилем кодированием лимитирована максимальная длина строки кода и хорошо когда про это знает IDE.
В Emacs добавил себе column-marker
Теперь, если в в Адском коде длина строки превышает 79 символом, Emacs подсвечивает часть строки красненьким.
P.S. Заодно проверю, есть ли реклама в Фиде. Вроде с горем пополам я ее отключил.
В Emacs добавил себе column-marker
(add-to-list 'load-path (expand-file-name "~/emacs/column-marker")) (require 'column-marker) (add-hook 'ada-mode-hook (lambda () (interactive) (column-marker-3 79)))
Теперь, если в в Адском коде длина строки превышает 79 символом, Emacs подсвечивает часть строки красненьким.
P.S. Заодно проверю, есть ли реклама в Фиде. Вроде с горем пополам я ее отключил.
12/01/2011
Error: Value too large for defined data type
При компиляции сорсов программы в Ubuntu Linux, в директории которподмонтирован по samba, gcc вывалил вот такую ошибку:
Error: Value too large for defined data type
Сначала показалось что ошибка в gcc, однако проблема оказалась в монтировании дирректории по CIFS.
При монтировании нужно добавить несколько опций:
Error: Value too large for defined data type
Сначала показалось что ошибка в gcc, однако проблема оказалась в монтировании дирректории по CIFS.
При монтировании нужно добавить несколько опций:
nounix,noserverino
В чем причина сего явления не очень понятно.Решение проблемы подсмотрено тут.
11/03/2011
Утечки памяти и ошибки доступа.
Ранее я уже писал о том, что можно искать утечки памяти в программе с помощью средств, которые предоставляет glibc. Описанный подход плох тем, что не позволяет искать ошибки доступа к памяти, такие как обращение по нулевому указателю, или обращение к уже освобожденной памяти.
В данном посте речь пойдет о mudflap.
mudflap - это технология проверки указателей, основанная не на бинарной инструментации, как valgrind или dr. Memory, а на инструментации времени компиляции. Если в кратце, во время компиляции программы в исходный код делаются вставки, которые обспечивают различные проверки указателей,к которым осуществляется доступ.
Теперь разберем работу mudflap на конкретном примере.
Для того, чтобы можно было использовать mudflap, нужа поддержка этой технологии в компиляторе и собственно сама библиотека, выполняющая проверки: gcc должен быть скомпилирован с опцией --enable-libmudflap, и в системе должна присутствовать библиотека libmudflap.so.
В качестве примера рассмотрим программу, котороя пытается записать в уже освобожденную память:
Это происходит потому что при попытке записи в освобожденную память (на самом деле она не освобождается, а помечается как неиспользуемая) программа портит служебную информацию glibc, а именно связный список, который используется в glibc для управления памятью.
Чтобы отловить ошибку в программе нужно пересобрать программы с mudflap инструментацией:
В результате работы программа выдает следующее:
Ясно видно где в исходном коде возникает проблема.
Для проверки, запустим программу под valgrind-ом, который выдает следующую информацию:
buggy.c: 22
Резюмирая можно обозначить плюсы и минусы mudflap:
"+" :
1. Более низкий overhead по сравнению с valgrind.
2. Лучшая переносимость: доступен для платформ ARM и MIPS.
3. Из-за того, что инструментация происходи во время выполнения, может находить более сложные ошибки и более точно показывать их в коде.
"-":
1. Поддержка кода, написанного только на C/C++.
2. Привязка к компилятору GCC.
3. Необходимость перекомпиляции.
Таким образом, mudflap вполне удобный тул, который позволяет искать утечки в памяти не используя valgrind, что особенно полезно для встраиваемых систем (ARM и MIPS), где на исполнение кода существенно влияют накладные расходы на инструментацию.
Больше информации о mudflap можно посмотреть тут : http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
В данном посте речь пойдет о mudflap.
mudflap - это технология проверки указателей, основанная не на бинарной инструментации, как valgrind или dr. Memory, а на инструментации времени компиляции. Если в кратце, во время компиляции программы в исходный код делаются вставки, которые обспечивают различные проверки указателей,к которым осуществляется доступ.
Теперь разберем работу mudflap на конкретном примере.
Для того, чтобы можно было использовать mudflap, нужа поддержка этой технологии в компиляторе и собственно сама библиотека, выполняющая проверки: gcc должен быть скомпилирован с опцией --enable-libmudflap, и в системе должна присутствовать библиотека libmudflap.so.
В качестве примера рассмотрим программу, котороя пытается записать в уже освобожденную память:
#include <malloc.h>
int main (void)
{
const int chunk_size = 18;
const int count = 10000;
int j = 0;
void * ptrs [count];
/* выделяем 10 000 кусочков памяти по 18 байт.*/
for (j = 0; j < count; j++) {
ptrs [j] = malloc (chunk_size);
}
/* освобождаем все, кроме первого и последнего */
for (j = 1; j < count - 2; j++)
if (ptrs [j])
free (ptrs [j]);
/* записываем в освобожденную память*/
*(char*)ptrs [10] = 10;
/* просим glibc сделать "дефрагментацию" выделенной памяти */
malloc_trim (1);
return 0;
}
Результатом работы программы будет Segmentation Fault.Это происходит потому что при попытке записи в освобожденную память (на самом деле она не освобождается, а помечается как неиспользуемая) программа портит служебную информацию glibc, а именно связный список, который используется в glibc для управления памятью.
Чтобы отловить ошибку в программе нужно пересобрать программы с mudflap инструментацией:
gcc -fmudflapth -lmudflap -Wall -Wextra -g -ggdb3 buggy.cЗапускаем:
./a.out
В результате работы программа выдает следующее:
******* mudflap violation 1 (check/write): time=1320343428.778161 ptr=0xe85c10 size=1 pc=0x7fcc8d0dc4f8 location=`buggy.c:22:21 (main)' /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libmudflap.so.0(__mf_check+0x38) [0x7fcc8d0dc4f8] ./a.out(main+0x301) [0x400da5] /lib64/libc.so.6(__libc_start_main+0xec) [0x7fcc8cd63e8c] number of nearby objects: 0
Ясно видно где в исходном коде возникает проблема.
Для проверки, запустим программу под valgrind-ом, который выдает следующую информацию:
==26575== ==26575== Invalid write of size 1 ==26575== at 0x4006E0: main (buggy.c:22) ==26575== Address 0x51bc400 is 0 bytes inside a block of size 18 free'd ==26575== at 0x4C27F6C: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==26575== by 0x4006C8: main (buggy.c:19)valgrind как и mudflap, точно показал место ошибки в программе:
buggy.c: 22
Резюмирая можно обозначить плюсы и минусы mudflap:
"+" :
1. Более низкий overhead по сравнению с valgrind.
2. Лучшая переносимость: доступен для платформ ARM и MIPS.
3. Из-за того, что инструментация происходи во время выполнения, может находить более сложные ошибки и более точно показывать их в коде.
"-":
1. Поддержка кода, написанного только на C/C++.
2. Привязка к компилятору GCC.
3. Необходимость перекомпиляции.
Таким образом, mudflap вполне удобный тул, который позволяет искать утечки в памяти не используя valgrind, что особенно полезно для встраиваемых систем (ARM и MIPS), где на исполнение кода существенно влияют накладные расходы на инструментацию.
Больше информации о mudflap можно посмотреть тут : http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging
10/17/2011
Экранирование в bash, кто знает?
Есть такой скриптик в bash:
b ()
b
в функции a () echo вызывается как:
echo '--some-flag='\''param1' 'param2,param3'\'''
как сделать чтобы параметры которые передаются в a () не экранировались?
т.е. чтобы echo вызывался вот так:
echo --some-flag='param1 param2,param3'
т.е. чтобы параметры передавались как есть ?
#!/bin/bash
set -x
a ()
set -x
a ()
{
echo $1
}
b ()
{
a "--some-flag='param1 param2,param3'"
}b
в функции a () echo вызывается как:
echo '--some-flag='\''param1' 'param2,param3'\'''
как сделать чтобы параметры которые передаются в a () не экранировались?
т.е. чтобы echo вызывался вот так:
echo --some-flag='param1 param2,param3'
т.е. чтобы параметры передавались как есть ?
10/15/2011
Установил себе grub2 в Gentoo
Надоело мне пользоваться LILO, захотелось чего то нового.
Решил поставить себе GRUB2.
1. Размаскируем пакет:
2. Собираем
3.Настраиваем
4. Проверяем, что конфигурация работает.
5. Устанавливаем
6. Перезагружаемся
Решил поставить себе GRUB2.
1. Размаскируем пакет:
echo ">=sys-boot/grub-1.99-r2" >> /etc/portage/package.unmask
2. Собираем
emerge grub
3.Настраиваем
grub2-mkconfig -o /boot/grub2/grub.cfg
4. Проверяем, что конфигурация работает.
grub2-install --grub-setup=/bin/true /dev/sda
5. Устанавливаем
grub2-install /dev/sda
6. Перезагружаемся
reboot.
10/05/2011
kernel.org вернулся
kernel.org снова в строю.
Ждем результатов расследования взлома.
P.S. на lwn.net дали ссылку на https://www.kernel.org,
причем если с https://www.kernel.org все в порядке,
то https://kernel.org ругается на неправильный сертификат.
Ждем результатов расследования взлома.
P.S. на lwn.net дали ссылку на https://www.kernel.org,
причем если с https://www.kernel.org все в порядке,
то https://kernel.org ругается на неправильный сертификат.
10/01/2011
Berlios.de - всё
Кризис наступает и в IT индустрии.
Сегодня получил письмо о том, что хостинг открытых проектов www.berlios.de который верой и правдой служил разработчикам 10 лет - будет закрыт 01.01.2012.
Причиной закрытия является нехватка средств у немецкого исследовательского института Fraunhofer FOKU, в связи с урезанием финансирования непрофильных проектов.
Ссылка на официальную новость: BerliOS will be closed on 31.12.2011
Сегодня получил письмо о том, что хостинг открытых проектов www.berlios.de который верой и правдой служил разработчикам 10 лет - будет закрыт 01.01.2012.
Причиной закрытия является нехватка средств у немецкого исследовательского института Fraunhofer FOKU, в связи с урезанием финансирования непрофильных проектов.
Ссылка на официальную новость: BerliOS will be closed on 31.12.2011
6/28/2011
запуск приложения, читающего стандартный ввод в GDB
Предположим у нас есть приложение, которое что-то читает со стандартного ввода и одновременно принимает ключи в командной строке.
Q : Как запустить это приложение под GDB? A : gdb application
gdb> run parameters ... < input_file
6/18/2011
Gentoo, Firefox и NS plugin wrapper.
Не забудьте после очередного обновления nspluginwrapper в Gentoo до версии 1.4.2 выполнить команду:
nspluginwrapper -i /opt/Adobe/flash-player32/plugin/libflashplayer.so
Иначе, у вас перестанет работать flash плагин.
nspluginwrapper -i /opt/Adobe/flash-player32/plugin/libflashplayer.so
Иначе, у вас перестанет работать flash плагин.
6/14/2011
Вышел GNAT GPL 2011 с новыми вкусностями.
We are pleased to announce the release of GNAT GPL 2011, the integrated
Ada, C, and C++ toolset for Academic users and FLOSS developers.
This new edition provides many new features and enhancements in all
areas of the technology. The most notable ones are:
- improved support for Ada 2012
- enhanced versions of tools
- GPS 5.0 enhanced IDE (improved support for C/C++, more powerful
source editing, better usability, ….),
- GtkAda (new widgets, interface to the Cairo graphics library)
- more flexible and more efficient project manager tool
- support for unloading Ada plug-ins
- improved support for Ada constructs on the .NET platform
- more detailed exception messages (-gnateE switch)
- complete support for Lego MINDSTORMS hardware, including audio and
I2C sensors
GNAT GPL 2011 comes with version 5.0.1 of the GNAT Programming Studio
IDE and GNATbench 2.5.1, the GNAT plug-in for Eclipse.
GNAT GPL 2011 can be downloaded from the "Download" section on
https://libre.adacore.com.
4/01/2011
Valgrind и glibc в Gentoo.
Для корректной работы валгринда требуется, чтобы glibc была собрана с отладочной информацией, дабы он смог из нее вытащить нужные функции.
В Gentoo glibc умолчанию собирается без нее.
Чтобы эту проблему исправить, необходимо чтобы для glibc генерировалась отладочная информация.
Для этого, добавляем в файл /etc/portage/env/sys-libs/glibc
строчку: FEATURES="splitdebug"
И пересобираем libc.
После этого, в каталоге /usr/lib/ появится каталог debug, в котором будет лежать файлы типа lib*.debug, содержащиеся требуемую информацию.
В Gentoo glibc умолчанию собирается без нее.
Чтобы эту проблему исправить, необходимо чтобы для glibc генерировалась отладочная информация.
Для этого, добавляем в файл /etc/portage/env/sys-libs/glibc
строчку: FEATURES="splitdebug"
И пересобираем libc.
После этого, в каталоге /usr/lib/ появится каталог debug, в котором будет лежать файлы типа lib*.debug, содержащиеся требуемую информацию.
3/16/2011
Купить pandaboard в России
Подскажите, как заполучить pandaboard в России?
Официально в Россию это борда не доставляется.
Может у кого нибудь есть опыт покупки подобных железяк из России?
Официально в Россию это борда не доставляется.
Может у кого нибудь есть опыт покупки подобных железяк из России?
3/09/2011
Анонс AXMPP 0.0.1
Всем привет.
Хочу анонсировать первый релиз библиотеки AXMPP.
AXMPP - это реализация протокола XMPP для языка программирования Ада.
Это первый релиз библиотеки, которые включает в себя следующие возможности:
1. Поддержка безопасного соединения с помощью agnutsl (ada-binding для gnutls).
2. Реализация базовой части протокола XMPP:
* Управление списком контактов (ростер).
* Прием/отправка сообщений.
* Поддержка конференций.
* Поддержка информации о присутствии
* Возможности управления ресурсами.
* Возможность обработки/генерации IQ в сыром виде.
3. Поддержка расширения для получения информации о клиенте.
Ознакомиться с библиотекой, а также скачать исходники можно на сайте:
http://adaforge.qtada.com/cgi-bin/tracker.fcgi/axmpp
AXMPP распространяется под BSD подобной лицезией.
Хочу анонсировать первый релиз библиотеки AXMPP.
AXMPP - это реализация протокола XMPP для языка программирования Ада.
Это первый релиз библиотеки, которые включает в себя следующие возможности:
1. Поддержка безопасного соединения с помощью agnutsl (ada-binding для gnutls).
2. Реализация базовой части протокола XMPP:
* Управление списком контактов (ростер).
* Прием/отправка сообщений.
* Поддержка конференций.
* Поддержка информации о присутствии
* Возможности управления ресурсами.
* Возможность обработки/генерации IQ в сыром виде.
3. Поддержка расширения для получения информации о клиенте.
Ознакомиться с библиотекой, а также скачать исходники можно на сайте:
http://adaforge.qtada.com/cgi-bin/tracker.fcgi/axmpp
AXMPP распространяется под BSD подобной лицезией.
2/21/2011
KDE4 и кривой ~/.Xmodmap
После очередного обновления KDE 4 в Gentoo Linux, у меня на клавиатуре перестали работать клавиши 'Arrow Down' и 'End'.
Я долго пытался понять в чем проблема, но у меня так и не получилось, и в качестве временного решения я добавил в стартовый скрипт, который запускался вместе с KDE команду для настройки xkb, который решал эту проблему:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Но на деле все оказалось совсем просто.
Оказывается, когда то давно, еще со времен третьих кед, я создал файлик .Xmodmap в домашней дирректории. Он был нужен, для того, чтобы в emacs работали хитрые комбинации клавиш. И видимо с из-за того, что с тех пор многое изменилось и в X сервере и в KDE, этот файл начал негативно влиять на работу клавиатуры в KDE4. Его удаление решило проблему.
Я долго пытался понять в чем проблема, но у меня так и не получилось, и в качестве временного решения я добавил в стартовый скрипт, который запускался вместе с KDE команду для настройки xkb, который решал эту проблему:
setxkbmap -layout "us,ru(winkeys)" -option "grp:switch,grp:toggle,grp_led:scroll"
Но на деле все оказалось совсем просто.
Оказывается, когда то давно, еще со времен третьих кед, я создал файлик .Xmodmap в домашней дирректории. Он был нужен, для того, чтобы в emacs работали хитрые комбинации клавиш. И видимо с из-за того, что с тех пор многое изменилось и в X сервере и в KDE, этот файл начал негативно влиять на работу клавиатуры в KDE4. Его удаление решило проблему.
12/08/2010
Баг в PolyORB
Сегодня же был обнаружен неприятный баг в PolyORB. PolyORB - это реализация технологии CORBA для Ады от компании AdaCore.
Вот такая простая программка:
with CORBA.ORB;
procedure Test is
begin
CORBA.ORB.Shutdown (True);
end Test;
Валится с segmentation fault.
Видимо я первый додумался останавливить ORB не запуская его до этого :-).
Мелочь, а не приятно.
Вот такая простая программка:
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
В результате чего в 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
Подписаться на:
Сообщения (Atom)