LINUX.ORG.RU

Сообщения Olegymous

 

Отличить сокет accept() от connect()

Даны два сокета. Можно ли отличить сокет полученный в результате вызова accept() от сокета на котором был вызван connect()? Как это сделать?

Olegymous
()

QtTest и utf-8

У кого-нибудь получалось подружить тестовый фреймворк Qt с utf-8?
В main примерно так:

int main(int argc, char **argv)
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
    DataTest tst;

    return QTest::qExec(&tst, argc, argv);
}

В тесте (исходник utf-8)

QCOMPARE("мама", "папа");

В результате теста в консоли вместо русских символов вопросики

Actual ("????????"): ????????
Expected ("????????"): ????????

Olegymous
()

C++ передать аргумент в callback или организовать замыкание

Ситуация следующая:
Есть функция qStableSort(iterator, iterator, callback). Она из Qt, если это важно. Третьим параметром идёт имя функции-компаратора. Передать в эту функцию какой-то дополнительный аргумент возможности не предусмотрено. А отсортировать нужно двумерный массив, сначала по первой колонке, потом по второй и т.д. Таким образом для каждой колонки придётся делать свой callback, а меняется всего лишь номер колонки. Либо заводить глобальную переменную, что тоже плохо.
Есть ли какая другая возможность передать переменную в callback, может можно организовать нечто на подобии замыкания?

Olegymous
()

Алгоритм конвертации нескольких байт в код unicode

Что-то туплю...
Как из «\xe2\x98\xba» получается U+263A?
Говоря иначе, как преобразовать коды символов составляющие utf-8 символ в натацию U+hex?

Olegymous
()

[SVN] Скопировать репозиторий не используя svnadmin

Есть SVN репозиторий на моём сервере. Хочу его перекинуть на svn хостинг, хостинг доступа по ssh не даёт. Соответственно никаких svnadmin нельзя запустить, доступ только через саму svn. Какой есть способ скопировать репозиторий со всей историей на такой хостинг?

 

Olegymous
()

[Си][newbie] про строки

Валиден ли такой синтаксис для присваивания строк?

char *str;
str = "first";
str = "second";

Или рано или поздно это обернется ошибкой сегментирования?

Вспоминается, что в книжках писали, что для строк нужно выделять память с помощью malloc. С malloc всё понятно. Самостоятельно выделил, самостоятельно освободил. А что происходит здесь? Компилятор сам выделяет память? А когда str присваивается «second» память занятая «first» освобождается? Откуда выделяется память, из стека или кучи?

 ,

Olegymous
()

Программно отключать колонки при включении наушников на десктопе

Есть ли способ на десктопе cделать subj? На ноуте это работает из коробки, на десктопе нет.

Колонки подлючены на задней панеле, наушники подкючаются на передней. Звук работает через alsa. В alsamixer есть headphones, но speakers отсутствуют. Если на headphones нажать «m», то они как и полагается замолкают, отдельно заглушить колонки через alsamixer не выходит, только весь звук вообще.

Звук встроенный. Так проверяется какой?

lspci | grep -i audio
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA)
01:00.1 Audio device: nVidia Corporation High Definition Audio Controller (rev a1)

Хм, почему две штуки?

Olegymous
()

sprintf uint32_t --> бинарная строка

Какой самый простой способ в Си скомпоновать строку чтобы 32-битный беззнаковый int там был не числом, а бинарной строкой?

uint32_t в моём случае получается из функции inet_aton:

struct in_addr addr;
inet_aton("10.0.0.1", &addr);

char buf[10];
sprintf(buf, "abcde%s", addr.s_addr); // Так конечно не работает
Итого в buf хочется получить строку, которая при просмотре в hex редакторе будет выглядеть так:
61 62 63 64 65 0A 00 00 01

Olegymous
()

fork -> LD_PRELOAD -> exec

Как после форка сделать загрузку разделяемой библиотеки, чтобы после выполнения exec() процесс мог использовать эту библиотеку?

Наподобии того как это делается в shell: LD_PRELOAD=mylib.so ./a.out

Использовать shell в exec не хочется.

child = fork();
if (child == 0) {
   // Здесь нужно подгрузить mylib.so
   // Как?
   execl("./a.out", "arg1", "arg2");
   exit(0);
}

Olegymous
()

[непонятка] Списки рассылки

Написал я вопрос в список рассылки одного opensource проекта. На него пока никто не ответил. Возникает вопрос: как отправить новое сообщение чтобы оно попало в туже нить дискуссии?

Olegymous
()

[ЖЖ] Завязываю с icq: написал многострочник на перле

http://pastebin.com/ATXNEn1v
Суть многострочника в следующем:
Логинится под указанным uin
Отвечает написавшим чтобы писали в другое место
Также можно указать блеклист, это те кому не хочется сообщать новые контакты. Им будет особое сообщение, типа «иди в жопу»
Если кто-то напишет в течение дня, то ровно в полночь на указанный емейл высылается сформированный лог кто что и во сколько писал за день

Закинул в облако сегодня и запустил демоном (-d). Пусть повисит с полгодика, глядишь contact list в жаббере расширится.

Кто еще не завязал присоединяйтесь.

 

Olegymous
()

Видеоредактор для удаления частей видео

Посоветуйте простой видеоредактор, с помощью которого можно вырезать рекламу из видео. Желательно без всякой перекодировки.
Помню как-то раньше использовал для этого avidemux, но с сегодняшним видео (это богомерзкий flv H264, полученный из потокового вещания) avidemux отказался работать, сообщив assert: 0 и еще чего-то там и закрывшись.

Olegymous
()

nouveau & GeForce GT 220 не умеет xv?

subj
При попытке воспроизвести видео
mplayer -vo xv video.avi
плеер сообщает

[VO_XV] It seems there is no Xvideo support for your video card available.
[VO_XV] Run 'xvinfo' to verify its Xv support and read

xvinfo выводит

X-Video Extension version 2.2
screen #0
no adaptors present

Debian Squeeze. Так что в самом деле nouveau не умеет xv с такой видеокартой?

Olegymous
()

lpr: печать escape последовательностей

Можно ли печатать escape последовательности так как они выводяться в консоль?
Следующая команда на бумаге печатает «4mHello0m» вместо подчёркнутого «Hello»
echo -e «\e[4mHello\e[0m» | lpr

Olegymous
()

Qt widgets and layouts

Не могу разобраться с упаковкой виджетов в менеджеры расположения.

Что хочется: http://bit.ly/eK3vhQ
Что получается: http://bit.ly/eSrULS

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

MainWindow->resize(467, 293);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
verticalLayout = new QVBoxLayout(centralwidget);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
lineEdit = new QLineEdit(centralwidget);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));

verticalLayout->addWidget(lineEdit);

pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(pushButton->sizePolicy().hasHeightForWidth());
pushButton->setSizePolicy(sizePolicy);

verticalLayout->addWidget(pushButton);

Или в виде ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>467</width>
    <height>293</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QLineEdit" name="lineEdit"/>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="text">
       <string>PushButton</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

В какую сторону копать? И еще можете посоветовать годных статей про виджетостроение в Qt.

Olegymous
()

Socksification

tsocks - программа, позволяющая пускать сетевые приложения через socks прокси.

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

Olegymous
()

[python, PyQT?] Переменная удаляется, возвращаемое значение портится

Не знаю, специфична ли эта вещь для всего Python или только для PyQt, но у меня проявилось при использовании PyQt.

def createimg():
    pixels = '...' # пиксели в строковой переменной
    return QtGui.QImage(pixels, 158, 54, QtGui.QImage.Format_RGB32)

Таким образом из функции возвращается объект QImage, но pixels в нём уже нет. Проверяется путем сохранения картинки методом save(). Сохраняется рябь вместо изображения.

Как понимаю, здесь в функции в конструктор QImage передаётся указатель на строку pixels, соответственно, когда при возврате происходит выход из функции переменная pixels удаляется, указатель становится невалидным и проявляется наблюдаемый эффект.

Решается таким костылём:

def createimg():
    pixels = '...' # пиксели в строковой переменной
    return QtGui.QImage(pixels, 158, 54, QtGui.QImage.Format_RGB32), pixels

Т.е. вместе с объектом возвращаем и источник пикселей, чтобы он не удалился. Есть ли способы прямее?

Olegymous
()

python struct.unpack()

import struct;

s = "\x04\x9E\x00\x00\x00\x36\x00\x00\x00";
print struct.unpack('cLL', s);

Ошибка:

struct.error: unpack requires a string argument of length 24

Зачем ему нужно 24 символа? Если c - 1 байт, L - 4 байта. Итого 9 байт. Ровно столько и содержит символов строка s.

В тоже время на православном Perl всё работает.

use Data::Dumper;

$str = "\x04\x9E\x00\x00\x00\x36\x00\x00\x00";
print Dumper(unpack('cLL', $str));

Что я сделал неправильно?

Olegymous
()

[разыскивается] socksv4 server

Есть ли годный socks4 сервер для Linux?

Пишу perl-модуль, который будет определять тип прокси по его адресу и номеру порта. Для тестов http и socks5 заюзал 3proxy, а для socks4 на скорую руку ничего не нашлось.

Olegymous
()

[shell] seek X bytes, read Y bytes

Есть ли годная утилита, желательно из coreutils или встроенная команда баша, которая может прочитать из файла несколько байт с определенной позиции?

Устроил бы dd, но он оперирует блоками и насколько я понял там невозможно нормально работать с байтами, кроме как установит ibs=1, но при этом чтение файла становится очень медленным, оно и понятно.

 

Olegymous
()

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