вторник, 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 или выше.

пятница, 18 января 2013 г.

Установщик Qt Linguist 4.8.4 для Windows

Qt Linguist - средство локализации программ. Поддерживает файлы переводов в форматах Qt (.ts), XLIFF (.xlf) и GNU Gettext (.po).

Ссылки:

понедельник, 17 сентября 2012 г.

Патчи на Qt 4.8.2-4.8.5 для Windows

Я задался вопросом как уменьшить размер Qt библиотек для Windows платформы, оставив только то, что реально используется. Это нужно по понятной причине: в Windows все программы вынуждены таскать все свои зависимости с собой. Это значит, что если у вас установлено 5 программ, написанных на Qt, все пять будут содержать копию Qt библиотек в своём каталоге. Место на диске уменьшится при этом существенно. Вторая причина - это скорость запуска. Чем меньше размер dll библиотек, тем быстрее грузится программа. Поэтому я решил уменьшить размер Qt хотя бы для своей программы.

Как оказалось, не всё так просто. Некоторые вещи, которые можно отключить в qconfig, нельзя отключать по причине ошибок компиляции Qt. Я написал несколько патчей, которые снимают некоторые (но не все) ограничения по компиляции Qt, и добавляют некоторую новую функциональность.