вторник, 11 июня 2013 г.

Использование ссылок svn+ssh:// на SourceForge

Если вы используете svn репозиторий на sourceforge.net, TortoiseSVN на локальном компьютере, и репозиторий по протоколу svn+ssh://, то вы можете столкнуться с тем, что commit или checkout проваливается:

svn: E720087: Can't create tunnel: Параметр задан неверно.

Это связано с тем, что у вас в PATH отсутствует совместимая версия plink.exe. Чтобы исправить эту ситуацию, можно указать TortoiseSVN использовать свою собственную версию plink-a. Для этого создайте переменную окружения SVN_SSH с таким содержимым:

C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe

Не забудьте указать правильный каталог, где установлен TortoiseSVN. Если же вы используете SSH ключи для авторизации, то эта переменная будет выглядеть так:

"C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe" -i ПУТЬ_К_PRIVATE_КЛЮЧУ
Ссылки:

понедельник, 10 июня 2013 г.

Медленная инициализация SSL в Qt на Windows

Если вы пишете сетевое приложение с помощью Qt и уже подложили SSL библиотеки в каталог с программой, и ваша программа успешно скачивает секретные данные по протоколу https, то вы могли заметить довольно медленную инициализацию приложения на Windows.

Если раньше ваша программа стартовала и начинала скачивание данных по http за 200 мс., то теперь с https это время увеличилось до 800 мс. (и это на Phenom II X6)! Задержка происходит в методе QNetworkAccessManager::get(). Использовав профайлер AQTime я выяснил, что основная задержка была внутри модуля QtNetwork в функции q_RAND_status(). После гугления стало ясно, что SSL инфраструктуру в программе лучше инициализировать чем раньше тем лучше, и это связано с кучей (heap) приложения.

Если ещё до создания объекта QApplication добавить следующий простой код, то инициализация программы сократится с 800 мс до 400 мс.:
int main(int argc, char *argv[])
{
    qDebug(QSslSocket::supportsSsl()
               ? "SSL is supported"
               : "SSL is not supported");

    QApplication app(argc, argv);

...
Ссылки:

ld.exe: final link failed: Memory exhausted

Если вы компилируете Qt самостоятельно с помощью MinGW и на сборке debug версии получаете ошибку "ld.exe: final link failed: Memory exhausted", то используйте для компиляции платформу win32-g++-4.6:

configure.exe -platform win32-g++-4.6 ...

Данный mkspec добавляет новые ключи компиляции, которые убирают из dll много мусора, и линковка должна пройти успешно. Сам компилятор GCC при этом должен быть версии 4.6 или выше.