LINUX.ORG.RU

Сообщения bk_

 

Хочу написать свистоперделковый аналог OO Impress

Форум — Development

Я хочу написать программу, которая будет позволять показывать презентации на двух мониторах. Первый монитор - основной для того, кто презентирует - там будет помимо слайдов отображаться комментарии к ним, панель управления презентацией и т.п., по аналогии с OOPresenterConsole. Второй монитор - там будут показываться только слайды; это монитор для аудитории.

Чем меня не устраивает KPresenter и OOImpress? Тем, что там большинство эффектов примитивны и даже с проприетарными дровами немного тормозят. Эту программу думаю написать на Qt с помощью OpenGL - QGLWidget и т.д. Я хочу иметь возможность делать презентации с визуальными эффектами, анимацией, свистелками и перделками - именно этого мне не хватает в вышеназванных продуктах.

Для упрощения вводится только два типа GUI-элементов: Image и Text. Соответственно, комбинируя их, можно получить всевозможные комбинации интерфейса презентации. Это все легко реализуется с помощью Qt. Дальше хочу сделать возможным анимирование этих элементов (easein-easeout, tween etc). В последствие добавить поддержку эффектов, благо, OpenGL позволит сделать это качественным и быстрым, а Qt - разработку быстрой. Вот такой базовый концепт.

Будет, соответственно, редактор презентации и сам презентер, либо две программы соединить в одну, как в ОО (так, наверное, будет лучше).

В этом треде хочу набрать команду, если кто захочет работать вместе. Буду рад, если кто откликнется.

bk_
()

zipbatch - программа для пакетного добавления/замены файлов в zip-архиве

Форум — Development

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

Например, у вас уже есть zip-архив с какими-то данными. Вам нужно добавить некоторые файлы в него и некоторые заменить на новые. Если бы это была вся задача - моя программа бы не понадобилась.

Но, допустим, вам также надо не просто добавить файлы с возможной заменой, а добавить их в архив под другим именем (или вообще с другим путем). Именно здесь zipbatch может помочь. Вы создаете файл со строками формата

%real_file_path%=%file_path_in_archive%
, даете программе директорию, где искать заданные файлы и путь к архиву (он будет создан, если его не окажется). zipbatch будет архивировать файл %real_file_name%, добавляя его в архив под другим путем - %file_path_in_archive%.

Вот, собственно, весь смысл утилиты.

Использование zip для этой же задачи нецелесообразно, так как для каждого файла архив будет открываться и закрываться, что приведет к большим временным задержкам при большом количестве файлов для добавления.

Утилита зависит от libzip и libargtable2. Написана на С. Здесь - git-repo - можно скачать исходники (билдится autotools). См. README для более детальной информации.

Программе, в самом простом варианте, не нужны никакие параметры: она будет писать в 'result.zip', ища файлы в текущей директории и читая строки с stdin. Таким образом, утилита может быть легко и просто завязана с другими unix-тулзами.

bk_
()

Устранение фрагментации памяти на linux как в .net

Форум — Development

В .net gc переодически перераспределяет память, выделенную под конкретную программу, тем самым уменьшая фрагментрованность памяти. Как можно сделать такую же операцию на С в linux?

bk_
()

Debian Lenny KDE 3.5.10 - Выключение компа через кнопку на панели

Форум — Desktop

Заметил небольшую проблему, что выключение компа через кнопку на панели происходит через раз. Если не происходит, приходится выключать через консоль. Кто-нибудь сталкивался с таким или знает, как решить?

bk_
()

[C][libzip] Проблема с chdir

Форум — Development

Есть такой код (строки с проверками на ошибки опущены):

        const char *old_cwd = getcwd(NULL, 0);
        zip = zip_open(zb->result_path, ZIP_CREATE, &err);
        chdir(zb->source_dir_path);
        for (i = 0; i < fdlist.count; ++i) {
                zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
                zip_add(zip, fdlist.list[i]->new_name, zip_src);
        }
        chdir(old_cwd);
        zip_close(zip);

        

Я делаю chdir, так как мне нужно добавить файлы в массив из директории zb->source_dir_path, а в fdlist.list[] хранятся относительные пути для этой директории.

Но этот код не работает. Зип файл нигде не создается. Перемена мест двух последних строк

        zip_close(zip);
        chdir(old_cwd);
дает мне архив, но в директории zb->source_dir_path (это неверный путь, правильный - old_cwd).

Я сделал такой хак:

        const char *old_cwd = getcwd(NULL, 0);
        zip = zip_open(zb->result_path, ZIP_CREATE, &err);
        chdir(zb->source_dir_path);
        for (i = 0; i < fdlist.count; ++i) {
                zip_src = zip_source_file(zip, fdlist.list[i]->old_name, 0, -1);
                zip_add(zip, fdlist.list[i]->new_name, zip_src);
        }
        zip_close(zip);
        /* If zippath is not absolutely then move it to old cwd. */
        if (zb->result_path[0] != '/') {
                char cmdbuf[128] = {0};
                strcpy(cmdbuf, "mv ");
                strcat(cmdbuf, zb->result_path);
                strcat(cmdbuf, " ");
                strcat(cmdbuf, old_cwd);
                system(cmdbuf);
        }
        chdir(old_cwd);
Я просто перемещаю архив из папки в папку. Это работает.

Но что не так с первым кодом?

 

bk_
()

[C] WTF with enum? [iphone][audiotoolbox]

Форум — Development

Я привык думать, что енумы в С (да и в С++) - всегда int. Но в айфоновском сдк увидел енум, который представляет из себя хер знает что. Смотрите сами (См. в самом низу коды ошибок):

enum {
  kAudioFileUnspecifiedError = 'wht?',
  kAudioFileUnsupportedFileTypeError = 'typ?',
  ........
};

Там реально стоят одинарные кавычки.

Что это такое? Хотя в switch можно сравнивать int'овый возврат функции с этими константами, и сравнение срабатывает правильно. Но что такое одинарные кавычки, если не один char, и как это распарсить?

 ,

bk_
()

[C] Лучшие практики обработки ошибок

Форум — Development

Какие вы применяете методы обработки ошибок? Имеется ввиду:

1. ассерты,

2.проверки всех входных параметров на корректность, проверки только некоторых из них;

3. полной проверки на корректность или только проверка на неравенство NULL, например;

4. использование setjmp/longjmp (или макросов, эмулирующих исключения), возврат кодов и/или установка глобальной переменной типа errno или же установка значения переменной в структуре (типа как в либах libconfig, libzip, etc).

5. Если устанавливаете код ошибки внутри переменной, то предлагаете только defin'ы (int'ы) для соот. кодов или же функция типа

const char * print_err_info(int errcode) 
, которая возвращает строку с информацией об ошибке.

6. Если 5 вариант имеет место, то строка об ошибке содержит абстрактную информацию типа «Some error occured» (и является статической констатной в сегменте данных) или же строка создается sprintf'ом со всем параметрами, которые могли вызвать ошибку.

Если что пропустил - дополните. Интересует полный спектр всех возможных способов проверок и их применяемость в конкретной ситуации.

 

bk_
()

[iphone][core audio][linear pcm] Захват звука с микрофона

Форум — Development

С помощью core audio захватываю звук с микрофона и пишу в файл. Через каждые n секунд получаю указатель и размер буфера сырых linear pcm-данных.

Частота дискретизации - 44100, 2 канала, 16 бит на канал; естественно, 1кадр=1пакет. В моем случае, вышеуказанное n=0.5 сек. Следовательно, каждые пол-секунды я получаю указатель на буфер размером 88200 байт (22050 измерений * (2 канала * 2байта_на_канал)).

Вопрос в том, как парсить эти 8КБ данных? При создании формата стоит флаг BigEndian и SignedInteger. Думал, это просто массив int16, где нечетные - 1 канал, четные - 2ой. Хер там - при разговоре в микрофон, то есть повышении громкости входного сигнала (которая детектится через отдельную хрень и ДАЕТ ВЕРНЫЕ ПОКАЗАНИЯ), среднее арифметическое всех int16 по каналам дает ВСЕГДА 16000 +/- 700, несмотря на имеющееся повышение громкости.

Пробовал SInt16, UInt16, UInt8, SInt8, UInt32, SInt32, float - не пашет - меняется только среднее арифметическое.

Проштудировал кучу манов, педивикию, rfc по lpcm, pcm и wav - ничего годного не нашел.

Кто-нибудь занимался парсингом raw lpcm или может подсказать, куда копать?

 

bk_
()

[zyxel] не ловит dhcp по wan

Форум — Admin

zyxel p334 перестал ловить провайдерские настройки по dhcp. Скорее всего, дело не в прошивке. Когда включаю комп напрямую вместо роутера - все работает. Иногда, через час-второй, роутер подключается. Кто-нибудь встречался с такой проблемой?

 

bk_
()

Что за песня

Форум — Talks

Что за песня (или мелодия) здесь с 00:28 по 00:40?

bk_
()

[Ъконсоль] '\b' многострочно

Форум — Development

Есть, к примеру, утилита top. Она на каждой итерации выводит не новые 24 строки, а стирает старые и вместо них пишет новые. Таким образом создается иллюзия перерисовки.

У меня получилось посылом на stdout '\b' стереть только текущую строку - дальше не шло.

Как, собственно, передвинуть курсор на несколько строк вверх и переписать то, что написал?

bk_
()

Картинка превью видео

Форум — Desktop

Как определяется картинка превью видео, которая отображается по наведении на него курсора в наутилусе/конке/etc? Очень часто это не первый кадр.

bk_
()

[Objective C] Управление памятью для геттеров/сеттеров

Форум — Development

Если есть такой код:

UIView *parentView = someChildView.superview;
Свойство описано как
@property(nonatomic, readonly) UIView *superview
значит, никаких release с parentView я делать не должен?

Однако, свойство

@property(nonatomic, readonly, copy) NSArray *subviews
описано с модификатором copy.
NSArray *childViews = someView.subviews;
Должен ли я при выходе из функции, где childViews - локальная переменная, делать release для childViews?

Аналогичный вопрос для свойств с retain вместо copy и вообще без него:

@property(nonatomic, retain) UIFont *font

bk_
()

[c/c+] Скрытие ввода пароля через stdin

Форум — Development

Когда вводится строка через gets или scanf, весь ввод транслируется на вывод. Какие есть _кроссплатформенные_ варианты, чтобы вводимые символы не посылались на stdout?

bk_
()

Пакет для экзаменации ZExam - ваше мнение

Форум — Development

Кратко, что к чему.

Пишу набор программ для проведения компьютерных экзаменов. Другие аналогичные программы меня не удовлетворили, потому что они требовали либо X с Qt'шными либами, либо апач (или какой другой вебсервер), либо jre. У меня же возникла задача сделать программу с как можно меньшим числом зависимостей. В итоге программа будет зависеть только от одной библиотеки - libconfig / libconfig++.

Будет две консольные программы - сервер, который загружает тест, пользователей, слушает порт, отдает тест, принимает ответы, подсчитывает результат, сохраняет статистику и т.д;

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

Помимо этого будет билдер - ГУИ для создания тестов и списков пользователей; reader для статистики (запланировано) - ГУИ для чтения результатов теста.

Доп. инфа на лоркоде (http://lorcode.org/forum/viewtopic.php?t=101).

Есть ли здесь потенциальные пользователи этой программы? Интересно ваше мнение по этому поводу.

bk_
()

[cmake] Линковка программы со статической библиотекой

Форум — Development

Есть программа в папке src/app. Есть стат. либа в src/statlib. Есть 3 CMakeLists.txt: в каждой из папок и в src/. В последней указаны add_subdirectory() на обе папки в порядке src/app, src/statlib с указанием ложить билды в ../build (папка выше src).

add_subdirectory(statlib ../build)
add_subdirectory(app ../build)

Компиляция app требует скомпилированной стат. либы. В CMakeLists.txt в src/app указываю слинковать со стат. либой.

add_library(statlib STATIC IMPORTED)
set_property(TARGET statlib PROPERTY IMPORTED_LOCATION ../../build/libstatlib.a)

add_executable(app ${app_SRCS})
target_link_libraries(app ${CMAKE_REQUIRED_LIBRARIES} config++ statlib

Когда запускаю cmake . и make из src/app - все компилится и работает. Когда делаю аналогичное из src/, как, по идее, и надо - не работает - не может найти стат. либу.

/usr/bin/ld: cannot find -l../../build/libstatlib.a

Как сделать, чтобы собиралась app из директории src/?

P.S. Перепробовал все варианты указания линковки со стат. либой и все пути, которые только можно к ней. Копировал либу даже в директорию app/ - все бестолку. Гугл нихрена не говорит.

 

bk_
()

[opensuse kde4] После логина запускаются программы, которые не были закрыты в предыдущей сессии

Форум — Desktop

Как сделать так, чтобы они не запускались (в гноме так по умолчанию).

bk_
()

[philosophy] В чем заключается революционность перехода от функциональщины к ООП?

Форум — Development

Так уж повелось, что первый язык, который я изучал, был делфи. Потом всякие сишарпики, С++, лисп, и т.п. В итоге, как мне кажется, у меня ООП головного мозга. Когда возникала задача писать на С, я начал реализовавывать обьектную модель в этом языке.

«Стоп», сказал я себе и подумал. Почему сейчас все кругом вопят про ООП и про его архиполезность и архиправильность? Далее, по ходу раздумий, пришел к мысли, что все, что пишется с использованием ООПшной парадигмы, может быть написано и без нее.

Почему появились языки, которые взяли ООП за главенствующую идею (java, c#, етц)?

Неужели те преимущества, которые предлагает ООП (полиморфизм, инкапсуляция, наследование), дают прирост в эффективности, скорости написания программ, понимания их работы и поддержке? Здесь было бы интересно сравнить одну и ту же программу, написанную на С и на С++, чтобы узреть принципиальные архитектурные различия (может такие уже есть?).

Сухой остаток. ООП представляет из себя еще один уровень абстракции, который позволяет оперировать про проектировании не функциями, а обьектами. А неужели это так меняет дело и делает разработку более удобной?

Было бы интересно без срачей услышать компетентное мнение.

bk_
()

[C] Можно ли только с помощью макросов перевести строку в верхний регистр?

Форум — Development

Например, такой код:

#define FUCK(cfgtype_small, cfgtype_cap) \
{\
  some_func(g_setting, parse_##cfgtype_small, CONFIG_TYPE_$$cfgtype_cap);
}\

Здесь cfgtype_small и cfgtype_cap - int и INT, bool и BOOL или string и STRING соответственно. Можно ли не передавать в макрос и int (cfgtype_small), и INT (cfgtype_cap), а только int, и чтобы макрос сам переводил int в верхний регистр - INT?

 

bk_
()

[C or C++] Что такое макрос '_()'?

Форум — Development

В нескольких проектах мельком видел такое. Не успел разобраться, что это такое. Вроде как общепринятый макрос для локализации типа QObject::tr() в Qt, или я ошибаюсь? Дайте линк на инфу.

bk_
()

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