LINUX.ORG.RU

Сообщения syomin

 

Вопрос по autoconf

Задача проста - определить в config.h макрос со значением, соответствующим путю к каталогу с изображениями, используемыми приложением. Фот фрагмент configure.ac:

pixmapdir=${datadir}/${PACKAGE}/pixmaps
AC_SUBST(pixmapdir)
AC_DEFINE_UNQUOTED([PIXMAPDIR], "${pixmapdir}", [Directory with application pixmaps.])

После ./configure в config.h видим:
/* Directory with application pixmaps. */
#define PIXMAPDIR "${prefix}/share/helpten/pixmaps"

Внимание, вопрос: как заставить autoconf выполнить подстановку ${prefix}?

>>>

syomin
()

Разбиение проекта на C++ на подкаталоги

Добрый день!

Возникла задача разбить проект на C++ на подкаталоги в соответствии с его внутренней структурой. Пример:

main.cpp
globals.h
ui/
window.h
window.cpp

Хочется странного: чтобы при подключении заголовочного файла нужно было указывать "подсистему", к которой он относится.

Например, и в файле main.cpp и в файле window.cpp файл globals.h должен включаться так:
#include "globals.h"

Аналогично и с файлом window.h - в файлах main.cpp и window.cpp нужно добавить:
#include "ui/window.h"

Внимание, вопрос: что такое нужно сказать GCC, чтобы он воспринял подобный код?

>>>

syomin
()

writen() из книги Стивенса

Добрый день!

В широко известной книге Стивенса "UNIX разработка сетевых
приложений", есть следующий код:

01: ssize_t writen(int fd, const void *vptr, size_t n)
02: {
03:     size_t nleft;
04:     ssize_t nwritten;
05:     const char *ptr;
06:
07:     ptr = vptr;
08:     nleft = n;
09:     while(nleft > 0) {
10:         if((nwritten = write(fd, ptr, nleft)) <= 0) {
11:             if(errno == EINTR) nwritten = 0;
12:             else return -1;
13:         }
14:         nleft -= nwritten;
15:        ptr += nwritten;
16:     }
17:     return n;
18: }

Мой вопрос касается строки под номером 10. Представим себе ситуацию,
когда узел закрывает сокет. Тогда write() вернет 0 и дальнейшее
поведение программы будет зависеть от значения errno, которое может
оказаться любым. Т.к. ошибка в книжке маловероятна, хотелось бы, чтобы
знающие люди подсказали где ошибка в моих рассуждениях.
syomin
()

libocr

День добрый!

Представляю на суд широкой общественности простенький движок для распознавания отсканированных изображений текстовых документов. Предупреждаю сразу - пока что все весьма и весьма сыро, но первые результаты есть.

Достоинства:
1. Движок оформлен в виде библиотеки, написанной на языке C. Честно говоря, сейчас бы я предпочел плюсы... С другой стороны, такую библиотеку можно использовать и из других языков программирования.
2. Для распознавания символов используется нейросеть, поэтому достаточно легко можно обучить движок новому языку распознавания.

Что можно увидеть сейчас:
1. В архиве лежит библиотека каталог libocr), простенькая консольная программа для распознавания (tools/ocr), программа-тренер для обучения нейросети (tools/trainer) и несколько тестовых страничек (pages).
2. Движок обучен на распознавание прописных букв киррилического алфавита: заглавные буквы, цифры, знаки препинания - не распознаются!

Что нужно для успешной компиляции:
GLib версии 2.10.x (с более старой скорее всего не собирется)
libtiff

http://www.radico.ru/syomin/ocr-r55.tar.bz2

Желаю успеха!

syomin
()

Будущее Mono

Стоит ли тратить время на изучение C# и Mono? Есть ли перпективы у этой технологии под UNIX? Хочется найти замену C++ для разработки коммерческих кросс-платформенных приложений...

syomin
()

Являются ли операции над bool атомарными?

Являются ли операции над bool атомарными или нужно использовать mutex?

syomin
()

Вложенность классов и предварительное объявление

Есть такой код:

data.h
======
class Data : public Object {
public:
  typedef boost::intrusive_ptr<Data>;

  class Visitor {
  public:
    virtual ~Visitor() {}

    operator()(Measure::Ptr measure) {}
  };

  virtual void apply_visitor(Visitor &visitor) = 0;
};

measure.h
=========
class Measure : public Data {
public:
  typedef boost::intrusive_ptr<Measure> Ptr;

  void apply_visitor(Visitor &visitor)
  {
    visitor(Ptr(this));
  }
};

Пояснения:
Класс Object реализует подсчет ссылок и предназначен для использования совместно с boost::intrusive_ptr<>.
Разумеется, этот код не компилируется, т.к. в момент обработки data.h  компилятор ничего не знает про Measure::Ptr и, следовательно, не компилируется класс Data::Visitor.

Что делать?

P.S. В operator() класса Visitor можно передавать ссылку на Measure - для этого достаточно в data.h добавить строку class Measure;, но хочется передавать имеено Measure::Ptr.
syomin
()

C++: когда вызывается деструктор?

Есть такой код:

class Value;

class MyClass {
private:
Value _value_;
mutable QMutex _mutex_;
public:
Value value() const
{
QMutexLock lock(&_mutex_);
return _value_;
}
};

При вызове value() что произойдет раньше: вызов коструктора копирования для Value или деструктора для QMutexLock? По-логике, копирование должно происходить раньше (и в GCC так и происходит), но не зависит ли этот код от компилятора?

syomin
()

rpm --repackage без удаления / обновления пакета?

Добрый день!

Возник вопрос по RPM: в системе установлена rpm'ка foo-1.2.3.rpm. Сама rpm'ка утеряна. Можно ли используя --repackage получить rpm'ку?

syomin
()

Насколько неправильно так делать?

Насколько непереносим такой код?

#define SIZE 1024

double array[SIZE];

memset(array, 0, sizeof(double) * SIZE);

syomin
()

Механизм signal/slot на C

Добрый день!

Где-бы посмотреть реализацию механизма сигналов и слотов на C? Про GLib в курсе, но там все слишком наворочено - нужно попроще.

syomin
()

Вопрос про boost bind

Ну не понимаю, почему этот код не компилируется...

#include <boost/bind.hpp>

using namespace boost;

int f(int a, int b)
{
return a + b;
}

int main()
{
boost::bind(f, _1, _2)(1, 2);
return 0;
}

syomin
()

Вопрос по tcpdump

Может кто подскажет, как заставить tcpdump выводить содержимое TCP-пакетов в hex и ascii БЕЗ заголовка?

syomin
()

Вопрос про разбор командной строки

День добрый!

Пишу програмку, имеющую интерфейс командной строки (подобно ftp, gnuplot, gdb и т.д.). Встал вопрос о том, каким образом проводить разбор пользовательского ввода. Один из вариантов - использовать YACC/BISON, однако проблема в том, что параметры команд могут, в некоторых случаях иметь значение, совпадающее с именем другой команды. К примеру, есть команда help и есть команда show, требующая имени некоторой сущности. Тогда, вполне корректной была бы следующая конструкция:
show help.

Проблемы:
Лексемами являются не слова целиком, а отдельные символы, следовательно существенно усложняется грамматика языка. Это не смертельно, однако, хотелось бы найти более оптимальное решение.

В связи с этим такие вопросы:
1. Насколько вообще оправдан подход с использованием YACC/BISON?
2. Что делать? Оставить всё как есть или, к примеру, изменить сканер лексем, чтобы он выделял отдельные слова и изменить грамматику? Понятно, что это потребует введения "экранирования".

Всем ответившим по существу заранее благодарен.

syomin
()

OCR: сегментация текста.

Я понимаю, конечно, что вопрос не сюда, но всё же... Может кто кинет ссылками на ПОДРОБНОЕ описание алгоритмов сегментации(выделения) текста для OCR. Особенно интересны алгоритмы, основанные на анализе profile prjection.

P.S. http://ocr.apmath.spbu.ru прочитал давным-давно..

syomin
()

implicit declaration of function `roundf'

Имеется простенькая програмка:
#include <math.h>

int main()
{
float f;

f = roundf(M_PI);

return 0;
}

При ее компиляции с флагами -Wall -lm выдаётся предупреждение о том, что не найден прототип для фунции roundf(). Судя по man roundf этот прототип должен находится в заголовочном файле math.h, но его там нет. Чувствую, что я чего-то не догоняю... Может кто подскажет, в чём дело?

syomin
()

Алгоритм поворота растрового изображения.

День добрый!
Может кто подкинет ссылки на описание алгоритма поворота растрового изображения на произвольный угол? Буду очень благодарен...

syomin
()

Обработка ошибок в C.

Доброе время суток!

В ходе разработки некоторой библиотеки возник вопрос каким образом нужно обрабатывать ошибки времени исполнения. Как я понимаю, все ошибки данного типа можно разделить на 2 больших группы:
1. ошибки, возникающие по не зависящим от программы обстоятельствам;
2. ошибки, являющиеся следствием некорректной работы самой программы.

С первой группой ошибок все понятно : функция, в которой возможно возникновение такой ошибки, сообщает о результате операции с помошью возвращаемого значения.

Со второй группой ошибок все намного сложнее и вопрос связан именно с ней. Ошибки этой группы связаны с некорректностью переданных функции аргументов (например, вместо указателя на строку передается NULL). Внимание вопрос: что делать в случае возникновения такой ошибки? Вот какие варианты я нашел в реальных библиотеках:

1. Входные параметры не контролируются. Программа сама завершиться по причине Segmentation Failed (ex.: memcpy() в glibc).

2. Функция, обнаружившая некорректность входных аргументов, выводит в журнал сообщение об ошибки и завершает исполнение программы. (ex.: g_error() в glib).

3. Промежуточный вариант: если функция обнаружила некорректность переданных аргументов, то она не выполняет никаких действий, а выполняет return. Также может происходить запись в журнал (stderror). (ex.: linux kernel).

На чём остановиться, господа?

syomin
()

Вопрос про использование __attribute__.

Доброе время суток!
На днях решил освоить avr-gcc. По ходу решения некоторой тестовой задачи возникла необходимость разместить некий массив, размер которого известен еще на этапе компиляции программы, по заданному адресу памяти данных. Т.е. этот массив не относится ни к секции .data ни к секции .bss. Чтение gcc.gnu.org не принесло ожидаемого просветления: вроде как, нужно использовать директиву __attribute__, но вот как?... И еще, этот самый адрес зависит от размера памяти конкретного кристалла...

P.S. Всем ответившим ПО СУЩЕСТВУ заранее благодарен.

syomin
()

Вопрос про pppd.

День добрый!
В конторе, где я работаю, для доступа в интернет используется PPPoE. Соответственно, стоит сервер под Linux, на нем pppd и rp-pppoe. Соединение устанавливается, доступ в интернет есть. НО! При возникновении каких-либо сетевых проблем происходит разрыв соединения, которое потом не восстанавливается, т.е. контора сидит без инета. Внимание, вопрос: каким образом заставить ppppd повторно подключаться при разрыве связи?

syomin
()

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