gentoo.ru
Официальная конференция Direct Connect клиента EiskaltDC++
eiskaltdc@conference.gentoo.ru
Вторник, 17 января 2012< ^ >
tehnick установил(а) тему: Last stable release: 2.2.5 || Конференция разработчиков EiskaltDC++
Логи: http://gentoo.ru/jabber/logs/eiskaltdc@conference.gentoo.ru/2012/
Активность в багтрекере: http://code.google.com/p/eiskaltdc/updates/list
Активность разработки: http://github.com/negativ/eiskaltdcpp/network
Release schedule:
* 2012-02-05 Release EiskaltDC++ 2.2.6
TODO:
* IPv6 in DC++ Core
* Improve Lua support
ADC notes:
https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC.txt
https://adc.svn.sourceforge.net/svnroot/adc/trunk/ADC-EXT.txt
Git notes:
http://habrahabr.ru/blogs/development/68341/
http://dl.dropbox.com/u/281916/delete/book.pdf
Как удобно передать в проект свои патчи:
http://habrahabr.ru/blogs/Git/125999/
How to pass your patches to the project in convenient way:
https://github.com/blog/712-pull-requests-2-0
Как правильно задавать вопросы:
http://parallel.ru/cluster/smart-questions-ru.html
How To Ask Questions The Smart Way
http://catb.org/%7Eesr/faqs/smart-questions.html
Конфигурация комнаты
Участники комнаты

GMT+4
[00:12:34] medvedko вышел(а) из комнаты
[00:25:52] Nikoli вышел(а) из комнаты
[00:38:32] tehnick вышел(а) из комнаты
[01:05:46] Diger вышел(а) из комнаты
[02:50:50] Nikoli вошёл(а) в комнату
[03:36:36] dein.negativ вошёл(а) в комнату
[03:46:01] <dein.negativ> vasily.n@k..: омг, вот что значит сидеть и кодить до одурения ночью. с (char*)(void*)&buf действительно фейл полный. хоть не понимаю зачем нужен (uint8_t*)tail если AutoArray<uint8_t*> неявно кастится к нему через operator uint8_t* ()
[03:47:41] <dein.negativ> AutoArray<uint8_t> конечно же
[04:08:04] <dein.negativ> понял откуда взялось (char*)(void*)&buf - копипаста, такая копипаста
[04:15:19] Alexey вышел(а) из комнаты
[04:57:12] FiliN вошёл(а) в комнату
[04:57:46] FiliN вышел(а) из комнаты
[04:58:38] FiliN вышел(а) из комнаты
[04:58:51] FiliN вошёл(а) в комнату
[05:17:28] FiliN вышел(а) из комнаты
[05:38:37] Kroll вышел(а) из комнаты
[05:38:54] Kroll вошёл(а) в комнату
[06:53:11] <vasily.n@k..> dein.negativ: btw, зачем было городить лисапед AutoArray если есть boost::array, boost::scoped_array/shared_array, std::vector etc. ?
[06:54:36] <dein.negativ> vasily.n@k..: я его уберу, просто было удобнее сделать все сначала с минимальными отличиями от флая
[06:57:24] <vasily.n@k..> dein.negativ: загрузка атрибутов насколько я понял пока не включена? на ntfs-3g раздел теги пишутся похожие на правду, не проверял флаем, но те что я генерировал после фикса &buf, грузились нормально.
[07:00:42] <dein.negativ> vasily.n@k..: TTH сейчас подхватывается при вызове fastHash (там есть if (streamStore.loadTree(...)) return true;)
[07:01:20] <dein.negativ> vasily.n@k..: там надо потестить только валидацию timeStamp'a
[07:02:04] <dein.negativ> я так и не нашел внятного объяснения что они туда сохраняют, а разрабы флая пока молчат
[07:02:25] <vasily.n@k..> dein.negativ: у меня фастхэш выключен по дефолту, у линакса кэш и так неплохой, а фаст хэш теоретически должен помочь на множестве мелких файлов коих у меня нет, включу.
[07:03:09] <dein.negativ> но я так понимаю они конвертят виндовое представление времени изменения файла в UNIX time
[07:03:56] <dein.negativ> vasily.n@k..: я сделаю чтобы атрибуты проверялись при любом типе хэширования
[07:03:58] <vasily.n@k..> dein.negativ: ну они же туда сохраняют то, что дает File::getTimeStamp, если этот класс ядра супер-кроссплатформеный, то может там тоже самое, что на винде...
[07:04:27] <dein.negativ> File::getTimeStamp существует только во флае
[07:05:37] <dein.negativ> они сами его написали, версии для никсов конечно же нету ибо взят из грейлинка
[07:06:26] <dein.negativ> но в целом похоже на вызов FileTimeToUnixTime или как там оно на винде...
[07:07:15] <vasily.n@k..> dein.negativ: изачем им такой лисапед из Грея, File::getLastModified уже есть...
[07:07:59] <dein.negativ> это у них надо спросить) ты на всякий случай вызов deleteStream закоментируй когда тестить будешь
[07:08:04] <dein.negativ> а то мало ли)
[07:09:05] <vasily.n@k..> хэш сгенериный айскальтом зарузился без проблем, хэш от флая сразу сбросился "Resetting Xattr"
[07:10:42] <dein.negativ> значит timeStamp у них хитро как-то генерится
[07:14:26] amfetamin вошёл(а) в комнату
[07:25:50] Kroll вышел(а) из комнаты
[07:26:00] Kroll вошёл(а) в комнату
[07:31:37] <vasily.n@k..> dein.negativ: File::getLastWriteTime
...
const uint64_t l_res = (((int64_t)f.dwLowDateTime | ((int64_t)f.dwHighDateTime) << 32) - 116444736000000000LL) / (1000LL * 1000LL * 1000LL / 100LL); //1.1.1970
забавно, но разница между линаксовым таймстэмпом и флаевским тоже 18 цифр и начинается с 12
[07:42:15] <dein.negativ> vasily.n@k..: я вот не пойму почему они возвращают дамп FILETIME: *(int64_t*)&fd.ftLastWriteTime
[07:42:43] <dein.negativ> а не конвертят его как нормальные люди
[07:43:51] <vasily.n@k..> dein.negativ: они не делают совместимо и их это похоже не волнует.
[07:44:30] <dein.negativ> просто у них получилось что 32 бита которые должны быть младшими стали старшими
[07:44:38] <dein.negativ> и наоборот
[07:45:23] <dein.negativ> теперь мне придется костыли городить
[07:48:29] <dein.negativ> vasily.n@k..: http://paste.ubuntu.com/806995
[07:49:48] <dein.negativ> можно сделать свою функцию и объявить свою структуру FILETIME дамп которой можно возвращать
[07:56:56] ONYX вошёл(а) в комнату
[08:00:01] <dein.negativ> vasily.n@k..: попробуй так http://paste.ubuntu.com/807005
[08:00:44] <vasily.n@k..> roger
[08:02:38] <dein.negativ> vasily.n@k..: страшно подумать как это будет работать на little-endian процах
[08:03:10] <vasily.n@k..> fly: 1ccc291560d40b2, linux: 0, getTimeStamp дает ноль
[08:04:29] <dein.negativ> ололо return *(uint64_t*)&pft;
[08:05:33] <vasily.n@k..> dein.negativ: reinterpret_cast в помощь
[08:07:55] <vasily.n@k..> fly: 1ccc291560d40b2, linux: 55a7ab8001ccc291
[08:08:34] <dein.negativ> vasily.n@k..: а разве reinterpret_cast по сути не является C-style cast'ом?
[08:09:08] <vasily.n@k..> dein.negativ: с-кастинг давно deprecated
[08:10:03] <dein.negativ> хм, интересно почему только 32 бита совпало
[08:10:39] <vasily.n@k..> dein.negativ: похоже надо t сначала поменять местами младший со старшим
[08:11:05] <vasily.n@k..> разница скорее всего изза переноса
[08:11:16] <dein.negativ> это понятно, просто в структуре поля в винде видимо в другом порядке заданы
[08:14:02] <vasily.n@k..> >поменять местами младший со старшим
не, не катит, что-то еще походу
[08:15:02] <dein.negativ> может из-за конвертирования знаковых к безнаковым типам?
[08:15:51] <dein.negativ> vasily.n@k..: дай ка мне значение time_t до преобразования
[08:16:00] <dein.negativ> посижу поколдую
[08:16:06] <vasily.n@k..> dein.negativ: впрочем можно для загрузки тэга проверять только эти совпавшие 32 бита, кстати stat мне давал только 32 бита, может искать еще 32 бита бессмыслено?
[08:16:33] <dein.negativ> у меня stat выдает 64 бита
[08:20:17] <vasily.n@k..> st.st_mtime 5689836417228102675, hex b6afffbc46b04380
fly: 1ccc291560d40b2, linux: 55a7ab8001ccc291
[08:21:04] FiliN вошёл(а) в комнату
[08:24:01] <dein.negativ> vasily.n@k..: спс, сейчас буду подгонять)
[08:24:48] <vasily.n@k..> dein.negativ: поменял слова в результате, но разница между временем флая и айскальта не есть константа.
[08:34:48] medvedko вошёл(а) в комнату
[08:37:15] medvedko вышел(а) из комнаты
[08:41:14] FiliN вышел(а) из комнаты
[08:41:29] <dein.negativ> vasily.n@k..: что-то у меня никак из 5689836417228102675 не получается 55a7ab8001ccc291
[08:41:45] <vasily.n@k..> dein.negativ: может не париться и взять конверсию из вайна?
[08:42:06] <dein.negativ> vasily.n@k..: у тебя есть его сорцы?
[08:42:16] <vasily.n@k..> dein.negativ: ofc
[08:42:31] <dein.negativ> vasily.n@k..: буду признателен на пасту
[08:42:36] <dein.negativ> *за пасту
[08:46:15] <vasily.n@k..> dein.negativ:
static BOOL time_to_filetime(const time_t* t, FILETIME* ftime)
{
        struct tm* tm = gmtime(t);
        SYSTEMTIME stime;
        if (!tm)
                return FALSE;
        stime.wYear = tm->tm_year+1900;
        stime.wMonth = tm->tm_mon+1;
        /*      stime.wDayOfWeek */
        stime.wDay = tm->tm_mday;
        stime.wHour = tm->tm_hour;
        stime.wMinute = tm->tm_min;
        stime.wSecond = tm->tm_sec;
        stime.wMilliseconds = 0;
        return SystemTimeToFileTime(&stime, ftime);
}
BOOL WINAPI SystemTimeToFileTime( const SYSTEMTIME *syst, LPFILETIME ft )
{
    TIME_FIELDS tf;
    LARGE_INTEGER t;
    tf.Year = syst->wYear;
    tf.Month = syst->wMonth;
    tf.Day = syst->wDay;
    tf.Hour = syst->wHour;
    tf.Minute = syst->wMinute;
    tf.Second = syst->wSecond;
    tf.Milliseconds = syst->wMilliseconds;
    if( !RtlTimeFieldsToTime(&tf, &t)) {
        SetLastError( ERROR_INVALID_PARAMETER);
        return FALSE;
    }
    ft->dwLowDateTime = t.u.LowPart;
    ft->dwHighDateTime = t.u.HighPart;
    return TRUE;
}
[08:47:58] <dein.negativ> легче не стало, если честно)
[08:48:18] <vasily.n@k..> dein.negativ: кстати
git clone git://source.winehq.org/git/wine.git ~/wine-git
можешь сам погрепать по сорцам, я искал time_t
[08:48:43] <dein.negativ> угу, я уже скачал тарбол
[08:49:26] <vasily.n@k..> не, ну строчки
./programs/winefile/winefile.c:514:static BOOL time_to_filetime(const time_t* t, FILETIME* ftime)
./programs/winefile/winefile.c:583:                             time_to_filetime(&st.st_atime, &entry->data.ftLastAccessTime);
говорят о том, что там все уже сделано за нас
[08:50:27] <dein.negativ> надо только выдернуть еще объявление всех этих структур и имен типов)
[08:50:43] <dein.negativ> но копипастить не самому гадать так что ок)
[08:52:25] <vasily.n@k..> Наверно следует это в отдельный файл запихнуть, чтобы не загрязнять ядро...
[08:59:05] <vasily.n@k..> dein.negativ: а еще кстати 1 вариант это использовать difftime от виндовского начала отсчета 1601-01-01, может только умножить придется на 10
[09:21:15] <dein.negativ> vasily.n@k..: что-то у меня gmtime возвращает NULL с твоим значением time_t
[09:23:12] <dein.negativ> http://paste.ubuntu.com/807048
[09:23:23] <dein.negativ> пол вайна собрал)
[09:26:16] <vasily.n@k..> dein.negativ: я просто взял часть RtlTimeFieldsToTime по пути обнаружил, что раз нет милисекунд пришлось передать 0, наверно это и есть почему возникает разница
fly: 1ccc291560d40b2, linux: 1ccc29155a7ab80
[09:28:34] <dein.negativ> vasily.n@k..: и что нам делать?
[09:29:08] <vasily.n@k..> #define TICKSPERSEC        10000000
объясняет, почему diff:6657330
[09:29:54] Kroll вышел(а) из комнаты
[09:31:49] <vasily.n@k..> dein.negativ: >vasily.n@k..: и что нам делать?
видимо делить на 10М при загрузке тэга, что же писать при записи тэга не знаю.
[09:34:21] <dein.negativ> vasily.n@k..: надо с создателями Флая поговорить на эту тему
[09:34:23] <dein.negativ> flylinkdc:
[09:34:31] <vasily.n@k..> там же условие на равенство стоит, если бы можно было задать время модификации файла, тогда флай бы принял тэг
[09:35:36] <dein.negativ> vasily.n@k..: пока предлагаю все-таки просто игнорировать временную метку
[09:36:59] <vasily.n@k..> dein.negativ: при загрузке -- да. при записи флай все равно сбросит тэг, т.к. timeStamp != h.timeStamp
[09:38:47] <dein.negativ> проблема поткралась там где ее никак не ожидали)
[09:39:33] <vasily.n@k..> dein.negativ: да, кстати разница тэгов от вайна, такая же как при использовании оригинаьлной формулы до вайна ))
[09:40:39] <dein.negativ> вот блииин
[09:41:59] <vasily.n@k..> dein.negativ: подозреваю, что если писать тэги, флайлинк под вайном схавает их без проблем.
[09:42:30] <dein.negativ> vasily.n@k..: можно попробовать уговорить команду флая чтобы их клиент воспринимал тег с нашим magic числом
[09:42:43] <dein.negativ> хотя наврятли они согласятся
[09:42:58] <dein.negativ> хотя там правки будут минимальны
[09:43:44] <dein.negativ> тоже самое можно сделать и нам
[09:43:55] <vasily.n@k..> dein.negativ: можно уговорить команду флая, чтобы они вместо != поставили >=, тогда бы мы просто записали туда время в будущем и нет проблем.
[09:45:23] <dein.negativ> vasily.n@k..: я как же нам быть? они исправят это время а нам пересчитывать хеш? ведь мы тоже не можем timeStamp игнорировать
[09:45:30] <dein.negativ> *а как же
[09:45:59] <vasily.n@k..> а, кстати utime, utimes - изменить время доступа и/или модификации inode
[09:46:54] <dein.negativ> set_attr не обновляет же время модификации файла
[09:47:49] <vasily.n@k..> dein.negativ: зато мы можем в тэге и в utime одно и тоже время задать ))
[09:48:49] <vasily.n@k..> а при загрузке пока ничего не остается как отбрасывать младшие 10М
[09:51:06] <vasily.n@k..> получиться дата модификации будет с точностью до 1 секунды, впрочем файлы больших размеров вряд ли обновляются чаще 1Гц
[09:51:09] <dein.negativ> надо все хорошенько обдумать
[09:54:21] <vasily.n@k..> dein.negativ: а чего тут думать?
при загрузке тега проверяем, что модуль разницы меньше 10M;
при записи тега, после attr_set, вызваем utime с тем же числом, надеясь, что линукс обнулит msec поле ntfs.
[09:55:44] FiliN вошёл(а) в комнату
[09:58:35] <vasily.n@k..> dein.negativ:
#include <utime.h>
int main( int argc, char* argv[]) {
    utimbuf ft;
    ft.actime  = 0;
    ft.modtime = 0;
    utime("./a.out", &ft);
    return 0;
}
$ ./a.out
$ stat ./a.out
  Файл: «./a.out»
  Размер: 9634          Блоков: 24         Блок В/В: 4096   обычный файл
Устройство: 805h/2053d  Inode: 1316644     Ссылки: 1
Доступ: (0755/-rwxr-xr-x)  Uid: (  500/     vaz)   Gid: (  500/     vaz)
Доступ: 1970-01-01 07:00:00.000000000 +0700
Модифицирован: 1970-01-01 07:00:00.000000000 +0700
Изменён: 2012-01-17 12:57:18.000000000 +0700
Создан: -
[09:59:54] <dein.negativ> я понял чего ты хочешь
[10:04:58] <dein.negativ> vasily.n@k..: т.е. при записи делаем так:
1. Получаем текущее время, обнуляем 6 разрядов у него.
2. Переводим в вин-формат
3. Сохраняем
4. Обновляем время модификации этого файла на округленное время
[10:06:46] <vasily.n@k..> dein.negativ: зачем текущее? файл может быть давно не изменялся, сегодняшнее число зачем ставить ему, поставить то же, что stat выдает: цель сбровить miliseconds поле только.
[10:07:58] <dein.negativ> текущее == то что вернул stat
[10:07:59] <dein.negativ> =)
[10:08:56] <vasily.n@k..> проверил на ntfs-3g удалось сделать только под рутом, т.к. хоть я и могу писать и читать файлы, владелец у них всех рут, или я так криво монтирую...
[10:10:05] <dein.negativ> подскать ничего не могу - у меня нет ntfs-разделов
[10:12:38] <dein.negativ> vasily.n@k..: вот только жаль что для больших файлов этот функционал не работает - атрибут не сохраняется
[10:13:04] <dein.negativ> хотя с ntfs-3g видимо все ок
[10:14:53] Diger вошёл(а) в комнату
[10:14:55] <vasily.n@k..> dein.negativ: мне флайлинк записал для 4 гигового файл тэг на 6К. Может если как-то заставить ядро брать блоки в 2 раза больше дерево тоже в 2 раза уменьшится, тогда тэг уместится в допустимое для ext2/3 4040 байт.
[10:20:55] <vasily.n@k..> поменял в MerkltTree::calcBlockSize, посмотрю какой будет тэг.
[10:31:08] <dein.negativ> vasily.n@k..: что-нибудь получилось?
[10:31:51] <vasily.n@k..> dein.negativ: еще искал, где обратно включить запись тега у себя.
[10:32:13] <dein.negativ> в конце fastHash
[10:32:19] <vasily.n@k..> dein.negativ: Attribute ".gltth" has a 3536 byte value
[10:32:50] <vasily.n@k..> просто в обоих MerkltTree::calcBlockSize добавил умножение на 2 ))
[10:33:04] <dein.negativ> vasily.n@k..: хэш сошелся?
[10:34:24] <vasily.n@k..> dein.negativ: да, hash [ZMF6DFWQWBA5JWKMR2WUR45IYAKL7FA7TUZC6UQ] was loaded from Xattr
[10:37:39] <vasily.n@k..> dein.negativ: странно после загрузки с импортом хэша аттрибут увеличился вдвое
[10:39:09] <vasily.n@k..> причем вторая половина тэга забита всяким мусором
[10:40:27] <dein.negativ> vasily.n@k..: но loadTree не изменяет аттрибут
[10:43:31] <vasily.n@k..> dein.negativ: кажется в checkTTH точно есть безусловная запись тэга, может еще где.
[10:44:43] Kroll вошёл(а) в комнату
[10:47:38] <vasily.n@k..> dein.negativ: а понял, для второго MerkltTree::calcBlockSize умножать на 2 не надо.
[10:48:07] <vasily.n@k..> отсюда и идет распухание дерева при загрузке.
[10:48:38] <vasily.n@k..> а тэги кстати безусловно перезаписываются после загрузки.
[10:58:50] <vasily.n@k..> dein.negativ: успешно прохэшировал файл на ext2. Attribute ".gltth" has a 3368 byte
[10:59:56] amfetamin вышел(а) из комнаты
[11:04:41] <vasily.n@k..> dein.negativ: короче
diff --git a/dcpp/MerkleTree.h b/dcpp/MerkleTree.h
index 1f804ba..fbdca7b 100644
--- a/dcpp/MerkleTree.h
+++ b/dcpp/MerkleTree.h
@@ -77,7 +77,7 @@ public:
         int64_t maxHashes = ((int64_t)1) << (maxLevels - 1);
         while((maxHashes * tmp) < aFileSize)
             tmp *= 2;
-        return tmp;
+        return tmp*2;
     }
     static size_t calcBlocks(int64_t aFileSize, int64_t aBlockSize) {
[11:06:54] <dein.negativ> vasily.n@k..: угу, я уже опробовал
[11:07:00] <dein.negativ> думаю вот коммитить или нет
[11:08:17] <vasily.n@k..> dein.negativ: эм, ну еще неизвестно как оно будет работать если этот файл начнут качать. Хотя tthroot не изменился.
[11:08:51] vasily.n@k.. вышел(а) из комнаты
[11:11:03] <dein.negativ> vasily.n@k..: думаю что никак для отдачь создается невалидный TigerTree
[11:11:12] <dein.negativ> *отдач
[11:29:13] Кирилл вошёл(а) в комнату
[11:38:28] rzed вошёл(а) в комнату
[11:51:37] vasily.n@k.. вошёл(а) в комнату
[11:52:27] <vasily.n@k..> dein.negativ: посмотрел исходники ntfs-3g, ntfs_fuse_utime обнуляет tv_nsec
[11:55:33] <vasily.n@k..> кстати там есть timespec2ntfs, который содержит ту самую формулу.
[12:00:43] amfetamin вошёл(а) в комнату
[12:01:44] <vasily.n@k..> и к несчастью в шаре своей нашел я файл 1.6гб, у которого тэг с 10К уменьшился только до 5К.
[12:05:44] <vasily.n@k..> и косяк  обнаружился, скачиваю файл, айскальт доходит до 100%, потом переходит на 50% и докачивает до 100%
[12:06:47] <vasily.n@k..> скачанный файл не поврежден.
[12:20:44] <dein.negativ> vasily.n@k..: такое и раньше бывало
[12:21:09] <dein.negativ> я про сброс позиции до 50%
[12:24:53] Tehnick вошёл(а) в комнату
[12:27:19] <Tehnick> dein.negativ, да вы тут в конец охренели с этим костылем!
[12:27:45] <Tehnick> Увеличение блока в два раза никуда не годится.
[12:28:50] <dein.negativ> Tehnick: а какая разница? Больше блок -> меньше их количество, и наоборот
[12:30:43] <dein.negativ> Хотя один фиг нас это не спасло, не для всех файлов атрибут сохраняется
[12:31:14] <Tehnick> dein.negativ, во-первых, он отличается от размера блока в других клиентах.
[12:32:05] <Tehnick> Т.е. ты посылаешь лесом частичную отдачу файлов, если я правильно понимаю.
[12:32:18] <Tehnick> Весь файл будут качать с тебя.
[12:32:49] <Tehnick> Т.к. соответствующие хэши его блоков есть только у тебя.
[12:33:00] <dein.negativ> Почему размер блока вполне можно получить из TigerTree::getBlockSize()
[12:33:32] <dein.negativ> Да и вообще для отдач создается невалидный TigerTree
[12:34:04] Kroll вышел(а) из комнаты
[12:34:24] <dein.negativ> да и не понимаю паники - что-то сломается, всегда можно реверт сделать
[12:34:25] Kroll вошёл(а) в комнату
[12:36:55] <rzed> с кем мне обсудить виндовый вариант управления демоном ?
[12:37:57] <dein.negativ> rzed: что именно?
[12:38:11] <dein.negativ> а вообще по поводу винды можно попинать pavelvat'a
[12:38:51] <rzed> ну я запилил скриптик, альфаверсию )) показать кому для критики
[12:39:51] Tehnick вышел(а) из комнаты
[12:40:39] <dein.negativ> rzed: гм, свяжись с pavelvat'ом
[12:40:49] <dein.negativ> а то у меня винды нет
[12:40:54] <dein.negativ> так что помочь не могу
[12:41:10] <dein.negativ> хотя может у кого в конфе есть, к примеру у ONYX
[12:42:08] <ONYX> а чочо
[12:42:25] <ONYX> кто есть? винда есть? неее
[12:43:09] <ONYX> я нищий, использую только бесплатные ОС
[12:43:13] <rzed> тоесть кроме меня никто мой вариант не оценит )))
[12:44:31] Stels вошёл(а) в комнату
[12:45:58] <dein.negativ> rzed: ты подготовь пока реп
[12:46:13] <dein.negativ> чтобы к нам все переносить
[12:46:57] <dein.negativ> rzed: так же можно отписатся в тикете на трекере (Alternative UI) и/или создать новый тикет
[12:47:19] <rzed> кстати, а перловый скрипт в EXE компиляется ? что то я этим вопросом не задавался раньше
[12:50:06] Tehnick вошёл(а) в комнату
[12:52:13] <Tehnick> rzed, в нашу репу твою утилиту добавлять не будем. А вот в разделе Downloads на сайте ей самое место. Когда она будет готова...
[12:52:53] <Tehnick> dein.negativ, меня тут по работе отвлекли и я второй аргумент забыл. Если вспомню, отпишусь.
[12:53:04] <ONYX> rzed: по моему может компилится. только бинарник будет такого обьема.... половина перла туда влезет с модулями
[12:53:26] <ONYX> rzed: а вообще есть perlcc, который сишный код генерит по перловому.
[12:53:46] <rzed> а на гуглокоде проект создать оноже бесплатно?
[12:54:00] <Tehnick> rzed, да
[12:54:14] <Tehnick> Хочешь целый проект под это дело? =)
[12:54:48] <dein.negativ> rzed: создай на github'e реп, всего делов то
[12:54:50] <rzed> ну просто разместить где то все исходники
[12:54:51] <ONYX> Tehnick: а чо, вообще надо целый отдельный сайт и потом продавать будет
[12:55:10] <dein.negativ> BolgenDC++
[12:55:42] <ONYX> на основе BolgenQt4
[12:56:44] <ONYX> дело Дениса Попова живет
[12:57:17] <rzed> ок попробую на github. тем более хотел посмотреть как там реализовано
[12:57:21] Tehnick вышел(а) из комнаты
[13:00:10] <rzed> кстати еще вопрос, (заполнить пробел в голове) rpc запросы демон обрабатывает параллельно и ответы выдаёт в зависимоти от того какой запрос быстрее обработался ?
[13:01:52] <rzed> имеет смысл заморачиваться с id в запрос\ответах ?
[13:13:04] Nikoli вышел(а) из комнаты: Replaced by new connection
[13:13:14] Nikoli вошёл(а) в комнату
[13:13:24] dhamp_ вошёл(а) в комнату
[13:18:14] Tilka вышел(а) из комнаты
[13:19:41] <dhamp_ > есть шаряшие в std::function<> ?
[13:20:42] Tilka вошёл(а) в комнату
[13:34:48] medvedko вошёл(а) в комнату
[13:34:53] vasily.n@k../wrk вошёл(а) в комнату
[13:40:44] dhamp_ вышел(а) из комнаты
[13:47:24] Kroll вышел(а) из комнаты: Replaced by new connection
[13:47:34] Kroll вошёл(а) в комнату
[13:57:37] dhamp_ вошёл(а) в комнату
[13:58:15] dhamp_ вышел(а) из комнаты
[13:58:28] dhamp_ вошёл(а) в комнату
[14:07:00] rzed вышел(а) из комнаты: <|> :ытанмок зи (а)лешыв dezr
[14:16:19] dhamp_ вышел(а) из комнаты
[14:24:02] <dein.negativ> dhamp: а чего надо?
[14:30:16] Stels вышел(а) из комнаты
[14:43:32] Kroll вышел(а) из комнаты: Replaced by new connection
[14:43:42] Kroll вошёл(а) в комнату
[14:56:31] Кирилл вышел(а) из комнаты
[15:39:40] Kroll вышел(а) из комнаты
[15:39:58] Kroll вошёл(а) в комнату
[15:50:52] Alexey вошёл(а) в комнату
[16:09:41] Kroll вышел(а) из комнаты
[16:12:07] Kroll вошёл(а) в комнату
[16:16:52] Кирилл вошёл(а) в комнату
[16:22:20] vasily.n@k../wrk вышел(а) из комнаты
[16:32:28] FiliN вышел(а) из комнаты
[16:40:28] Kroll вышел(а) из комнаты
[16:40:51] Kroll вошёл(а) в комнату
[17:00:12] Kroll вышел(а) из комнаты
[17:00:30] Kroll вошёл(а) в комнату
[17:05:34] FiliN вошёл(а) в комнату
[17:14:00] ONYX вышел(а) из комнаты
[17:25:09] Kroll вышел(а) из комнаты
[17:26:55] Kroll вошёл(а) в комнату
[17:35:03] rzed вошёл(а) в комнату
[17:44:41] Kroll вышел(а) из комнаты
[17:45:01] Kroll вошёл(а) в комнату
[18:08:00] Kroll вышел(а) из комнаты
[18:08:19] Kroll вошёл(а) в комнату
[18:24:56] Tilka вышел(а) из комнаты
[18:25:07] FiliN вышел(а) из комнаты
[18:30:11] Tilka вошёл(а) в комнату
[18:51:04] Kroll вышел(а) из комнаты
[18:51:14] Kroll вошёл(а) в комнату
[19:03:12] FiliN вошёл(а) в комнату
[19:23:59] FiliN вышел(а) из комнаты
[19:24:40] dhamp_ вошёл(а) в комнату
[19:28:22] <dhamp_ > dein.negativ, а понять надо как вот такую хрень использовать,
struct HttpDownload : private HttpConnectionListener, private boost::noncopyable {
.....
    typedef std::function<void ()> CompletionF;
    CompletionF f;
    explicit HttpDownload(const string& address, CompletionF f, bool coralize = true);
.....
}
как вызывать new HttpDownload(adress, <как писать тут непонятно ни хрена> ,false) ?
[19:29:44] <dhamp_ > нужно именно вызвать обычную функцию
[19:29:57] <dhamp_ > вида void f();
[19:33:16] Kroll вышел(а) из комнаты
[19:34:06] Tehnick вошёл(а) в комнату
[19:34:19] <Tehnick> dhamp_ , http://en.cppreference.com/w/cpp/utility/functional/function
[19:34:34] Kroll вошёл(а) в комнату
[19:34:48] <dhamp_ > Tehnick, там хрень а ни пример
[19:35:01] <dhamp_ > Tehnick, мне никакие лябды не сдались
[19:35:09] <dhamp_ > лямбды*
[19:39:44] <Tehnick> Все-таки я не понял проблему.
[19:40:12] <Tehnick> Используешь как обычную функцию и все.
[19:43:04] <Tehnick> И пример тот легко преобразуется.
[19:43:22] <Tehnick> std::function<int()> f = normal_function;
[19:43:27] <dhamp_ > Tehnick, new HttpDownload(string, function, bool) - не катит, вопрос именно в том что писать во второй аргумент чтобы передать void function(); в качестве аргумента
[19:43:37] <Tehnick> Вызываешь как f()
[19:44:32] <Tehnick> Разве не HttpDownload(string, function(), bool)?
[19:44:40] <Tehnick> Надо будет дома проверить...
[19:46:00] <dhamp_ > [19:43:34] Tehnick: Разве не HttpDownload(string, function(), bool)?
если бы так прокатило я наверно не спрашивал бы )
[19:46:26] <Tehnick> HttpDownload(string, &function, bool)
[19:46:51] <Tehnick> Это больше похоже на правду.
[19:48:30] <dhamp_ > Tehnick, неа, [19:43:34] Tehnick: Разве не HttpDownload(string, function(), bool)?
[19:48:44] <dhamp_ > /usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../../include/c++/4.6.2/functional:1865:2: ошибка: не найден метод для преобразования в «(std::_Mem_fn<void (dcpp::DynDNS::*)()>) ()»
[19:48:58] <dhamp_ > это если HttpDownload(string, &function, bool)
[19:51:04] <dhamp_ > new HttpDownload("http://dcplusplus.sourceforge.net/version.xml",
        [this] { callAsync([=] { completeDownload(); }); })
примерно так вызывается в dc++, что совсем не то.
[19:51:40] <vasily.n@k..> struct {
void operator()() const {
        std::cout << "test" << std::endl;
    }
} a;
typedef std::function<void ()> CompletionF;
CompletionF f;
int main( int argc, char* argv[]) {
    f = a;
    f();
    
    return 0;
}
работает
[19:52:58] <vasily.n@k..> dhamp_: ты б хоть погуглил сначала.
[19:53:12] <Tehnick> dhamp_ , а можешь весь блок кода показать?
[19:53:44] <dhamp_ > httpDownload = new HttpDownload(tmps, [this] { Complete(); }, false); - так конечно работает....
[19:54:07] <dhamp_ > vasily.n@k.., зачем писать то же самое что давно нагуглил и прочитал в примере ?
[19:54:50] <dhamp_ > vasily.n@k.., ведь у меня вопрос был не по тому как делается в примере, а можно ли передать функцию в конструкторе.
[19:55:22] <dhamp_ > [19:52:14] Tehnick: dhamp_ , а можешь весь блок кода показать?
HttpDawonload или класса где он используется ?
[19:55:23] <vasily.n@k..> dhamp_ : скорее всего можно, если есть адаптор
[19:55:59] <Tehnick> Где ты хочешь использовать.
[19:57:39] <Tehnick> Хм, мне домой пора. Буду часа через 2.
[19:57:52] Tehnick вышел(а) из комнаты
[19:57:56] <dhamp_ > Tehnick, http://pastebin.com/0WbBDr8F http://pastebin.com/PuYZa3Qa
[19:58:12] Kroll вышел(а) из комнаты: Replaced by new connection
[19:58:18] <vasily.n@k..> dhamp_ :
void test() {
        std::cout << "test2" << std::endl;
}
typedef std::function<void ()> CompletionF;
CompletionF f(test);
int main( int argc, char* argv[]) {
    f();
}
так тоже катит.
[19:58:22] Kroll вошёл(а) в комнату
[19:58:36] <dhamp_ > vasily.n@k.., см пасты
[20:00:22] <dhamp_ > vasily.n@k.., как строку 42 в cpp избавить от лямбды ?
[20:01:06] <vasily.n@k..> dhamp_ : ясно, ты хочешь не на глобальную функцию а на метод класса текущего экземпляра
[20:02:33] <vasily.n@k..> для этого скорее всего нужен спец адаптер..., что такое помню было в бусте надо вспомнить.
[20:03:57] rzed вышел(а) из комнаты
[20:08:44] <vasily.n@k..> dhamp_ : в бусте это называлось boost::bind
[20:13:36] <vasily.n@k..> dhamp_ : да, в новом стандарте это как не удивительно называется std::bind
class some {
  typedef std::function<void ()> CompletionF;
  CompletionF f;
public:
  some() : f( std::bind(&some::test, this) ) {}
  void event() { f(); }
  void test() {
        std::cout << "test2" << std::endl;
  }
} ex;
int main( int argc, char* argv[]) {
  ex.event();
  return 0;
}
[20:16:05] Кирилл вышел(а) из комнаты
[20:20:02] nixtrian|home вышел(а) из комнаты: Replaced by new connection
[20:20:12] nixtrian|home вошёл(а) в комнату
[20:22:07] Kroll вышел(а) из комнаты
[20:23:30] Kroll вошёл(а) в комнату
[21:01:15] dein.negativ вышел(а) из комнаты
[21:49:18] gelraen вышел(а) из комнаты
[21:50:15] gelraen вошёл(а) в комнату
[21:54:00] ONYX вошёл(а) в комнату
[21:56:03] dhamp_ вышел(а) из комнаты
[22:01:17] medvedko вышел(а) из комнаты
[22:03:38] medvedko вошёл(а) в комнату
[22:35:18] medvedko вышел(а) из комнаты
[22:37:35] medvedko вошёл(а) в комнату
[22:39:31] medvedko вышел(а) из комнаты
[22:39:50] medvedko вошёл(а) в комнату
[22:40:02] medvedko вышел(а) из комнаты
[22:40:10] medvedko вошёл(а) в комнату
[22:53:05] medvedko вышел(а) из комнаты
[22:53:25] medvedko вошёл(а) в комнату
[22:57:32] medvedko вышел(а) из комнаты
[22:59:46] medvedko вошёл(а) в комнату
[23:01:52] FiliN вошёл(а) в комнату
[23:50:07] medvedko вышел(а) из комнаты
[23:50:27] medvedko вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!