28 июня 2014 г.

Статическая сборка svg-модуля Qt

Для получения поддержки SVG в проектах Qt, собранных статически, необходимо запустить командную строку (Меню Пуск->Все программы->Qt 5.3.0->5.3.0->MinGW 4.8 (32-bit)->Qt 5.3.0 for Desktop (MinGW 4.8 32 bit)
Перейти в каталог модуля SVG
cd E:\Qt\qt-5.3.0-Winx86-static\qtsvg\src
Запустить qmake, полученный при статической сборке Qt, с указанием дополнительного пути где искать необходимые файлы
E:\Qt\qt-5.3.0-Winx86-static\qtbase\bin\qmake.exe INCLUDEPATH+=E:/Qt/qt-5.3.0-Winx86-static/qtsvg/include src.pro
После чего выполнить команды
mingw32-make release и
mingw32-make debug
В папке E:\Qt\qt-5.3.0-Winx86-static\qtbase\plugins\imageformats должны будут появиться новые файлы qsvg.prl, qsvgd.prl, libqsvg.a, libqsvgd.a.
В файл проекта добавить строку
QT += svg
Теперь при статической сборке проекта svg-иконки будут отображаться на кнопках.

10 марта 2014 г.

Компиляция плагина QPSQL, используя MinGW

При создании небольшой программы потребовалось подключение к базе PostgreSQL, но соответствующий плагин оказался недоступен. На тот момент было установлено два комплекта Qt5.2.1 — собирающий проекты динамически установленный из официального установщика, и собирающий проекты статически.
Статическая сборка Qt из исходников была выполнена со следующими параметрами:
configure -static -platform win32-g++ -debug-and-release -opensource -nomake examples -no-compile-examples -fontconfig -no-vcproj -no-opengl -qt-sql-odbc -qt-sql-sqlite -plugin-sql-odbc -plugin-sql-sqlite -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista

Чтобы добавить плагин QPSQL не требуется пересобирать Qt полностью.
Сперва, качаем исходники PostgreSQL 9.3.3 и zlib-1.2.8 и распаковываем их, например, в каталог E:\src.

Далее устанавливаем Msys (установил его из MinGW Installer).

Затем запускаем msys(файл C:\MinGW\msys\1.0\msys.bat). В появившемся окне консоли в переменную $PATH добавил каталог с mingw32-make, который шёл в комплекте с установочным комплектом Qt. Команда:
PATH=/E/Qt/qt-5.2.1-Windowsx86/Tools/mingw48_32/bin:$PATH

Переходим в каталог с распакованными исходниками PostgreSQL:
cd /E/src/postgresql-9.3.3

Конфигурирем с указанием пути, где искать заголовочные файлы zlib
./configre --includedir=/E/src/zlib-1.2.8

Запускаем сборку PostgreSQL
mingw32-make

По окончании сборки в каталоге E:\src\postgresql-9.3.3\src\interfaces\libpq
будут созданы необходимые нам файлы libpq.dll и libpq.a

Теперь текущее окно Msys можно закрыть. Приступим к сборке плагина QPSQL.

Запустим командную строку Qt (Меню Пуск->Все программы->Qt 5.2.1->5.2.1->MinGW 4.8 (32-bit)->Qt 5.2.1 for Desktop (MinGW 4.8 32 bit))

Перейдём в каталог с исходником PSQL:
cd E:\Qt\qt-5.2.1-Winx86-static\qtbase\src\plugins\sqldrivers\psql

Запустим qmake, полученный при статической сборке Qt, с указанием дополнительных путей где искать файлы и библиотеки собранного PostgreSQL:
E:\Qt\qt-5.2.1-Winx86-static\qtbase\bin\qmake.exe INCLUDEPATH+=E:/src/postgresql-9.3.3/src/include INCLUDEPATH+=E:/src/postgresql-9.3.3/src/interfaces/libpq LIBS+=E:/src/postgresql-9.3.3/src/interfaces/libpq/libpq.a psql.pro

После выполняем:
mingw32-make release и
mingw32-make debug

В каталоге E:\Qt\qt-5.2.1-Winx86-static\qtbase\plugins\sqldrivers
должны появиться файлы
libqsqlpsqld.a libqsqlpsql.a qsqlpsqld.prl qsqlpsql.prl

Создадим проект для проверки полученного плагина.
main.cpp:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("postgres.local");
    db.setDatabaseName("MyTestbase");
    db.setUserName("MyUser");
    db.setPassword("MyPass");
    if(db.open())
        qDebug() << "Connect to database";
    else
        qDebug() << "Not connected";
    return a.exec();
}


файл Static-qpsql.pro:
QT       += core sql
QTPLUGIN += qsqlpsql
QT       -= gui
TARGET = Static-qpsql
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp


Чтобы запускаемое из Qt Creator приложение могло использовать драйвер QPSQL, я скопировал полученный при сборке PostgreSQL файл E:\src\postgresql-9.3.3\src\interfaces\libpq\libpq.dll в E:\Qt\qt-5.2.1-Windowsx86\Tools\mingw48_32\bin. Этот же файл необходим в каталоге с экзешником программы при переносе её на другие компьютеры.

Скачать тестовый проект и файлы libpq.dll, libpq.a.

27 ноября 2011 г.

Переименовать файлы в транслит в Ubuntu Linux

Необходимо было сегодня переименовать файлы и каталоги в транслит. Поиски готового скрипта не увенчались успехом. Почему-то ни один из найденных мною вариантов не хотел запускаться. Немного подправив найденные варианты получил работоспособный скрипт, который переводит в транслит названия файлов и каталогов, а также заменяет пробел и комбинацию «_-_» на символ подчёркивания. Ниже содержимое скрипта:

#!/bin/bash
# Перекодирует рекурсивно в текущем каталоге имена
# файлов и каталогов в транслит.
SCRIPT=`readlink -e $0`
for NAME in *
  do
    LAT="$(echo $NAME | sed y/абвгдеёзийклмнопрстуфхцы/abvgdeezijklmnoprstufxcy/)"
    LAT="$(echo $LAT | sed y/АБВГДЕЁЗИЙКЛМНОПРСТУФХЦЫ/ABVGDEEZIJKLMNOPRSTUFXCY/)"
    LAT="$(echo $LAT | sed s/ч/ch/g)"
    LAT="$(echo $LAT | sed s/Ч/CH/g)"
    LAT="$(echo $LAT | sed s/ш/sh/g)"
    LAT="$(echo $LAT | sed s/Ш/SH/g)"
    LAT="$(echo $LAT | sed s/ж/zh/g)"
    LAT="$(echo $LAT | sed s/Ж/ZH/g)"
    LAT="$(echo $LAT | sed s/щ/sh\'/g)"
    LAT="$(echo $LAT | sed s/Щ/SH\'/g)"
    LAT="$(echo $LAT | sed s/э/je/g)"
    LAT="$(echo $LAT | sed s/Э/JE/g)"
    LAT="$(echo $LAT | sed s/ю/ju/g)"
    LAT="$(echo $LAT | sed s/Ю/JU/g)"
    LAT="$(echo $LAT | sed s/я/ja/g)"
    LAT="$(echo $LAT | sed s/Я/JA/g)"
    LAT="$(echo $LAT | sed s/ъ/\`/g)"
    LAT="$(echo $LAT | sed s/Ъ/\`/g)"
    LAT="$(echo $LAT | sed s/ь/\'/g)"
    LAT="$(echo $LAT | sed s/Ь/\'/g)"
    # Заменить символ пробела на символ подчёркивания
    LAT="$(echo $LAT | sed s/\\s/_/g)"
    LAT="$(echo $LAT | sed s/_-_/-/g)"
if [[ `file -b "$NAME"` == directory ]]
  then
    mv -v "$NAME" "$LAT"
    cd "$LAT"
    bash "$SCRIPT"
    cd ..
  else
    mv -v "$NAME" "$LAT"
fi
done
Скрипт можно скачать и поместить в тот каталог, содержимое которого необходимо переименовать. Остаётся только запустить его из консоли командой ./to-translit.sh или bash to-translit.sh.

19 ноября 2011 г.

Поиск и копирование файлов, изменённых за рабочий день

Устал, да и нередко просто забывал, копировать созданные файлы за рабочий день на флешку. Либо скопируешь, но забудешь эту самую флешку на рабочем месте. Чтобы иметь всегда под рукой рабочий материал, решил автоматизировать процесс по переносу файлов на свой сервер.
Получился скрипт, который находит только файлы созданные за последние 9 часов и копирует их в один общий каталог с изменением имени.
#!/bin/sh
# Получить список файлов изменённых за текущий день
# В какой директории искать файлы
DIR=/home/dir1/dir2/
# Куда копировать
DEST=/home/sshfs/encfs/dir1/
# Текущая дата и время
DATE=$(date "+%Y-%m-%d_%H:%M")
for f in $(find ${DIR} -type f -mmin -540 -size +1)
do
# Получить только имя файла
BASE=`basename $f`
# Скопировать файл в файл с другим именем
cp $f ${DEST}${DATE}_${BASE}
done
Сохраняем скрипт под именем, например, /home/auto_copy.sh и заносим задание в cron:

55 18 * * 1-5 sh /home/auto_copy.sh
Теперь каждый день с понедельника по пятницу в 18:55 будет запускаться скрипт с заданием копировать новые файлы в каталог /home/sshfs/encfs/dir1/
PS. Скрипт проверялся на работоспособность в Ubuntu 11.10. Должен работать и в других дистрибутивах Linux.

1 ноября 2010 г.

Настройка КMail

В Kubuntu почтовой программой по умолчанию является KMail. Здесь представлю пошаговые инструкции по настройке KMail для работы с почтовыми сервисами Qip.ru, Mail.ru, Majordomo.ru и Yandex.ru. Итак, приступим.

31 октября 2010 г.

Изменение размера изображений в Линукс с помощью ImageMagick

Потребовалось вырезать один и тот же фрагмент изображения из нескольких десятков снимков экрана. Проделывать всю эту рутинную работу вручную с помощью Gimp меня не устраивало. А со скриптами Gimp  совсем не знаком. Пришлось искать варианты в интернете. Благодаря Запискам дебианщика и клубу Убунту узнал о программе ImageMagick.
После установки этой программы принялся обрезать скриншоты командой:
convert -extract 1208x708+19+105 file1.png file1-convert.png
где 1208x708 - это размер вырезаемой области,
+19+105 - координата левого верхнего угла вырезаемой области,
file1.png - файл, из которого надо вырезать фрагмент,
file1-convert.png - файл, в который сохранить результаты обрезки.
Для пакетной обработки создадим скрипт convert_png.sh. Вот его содержимое:

#!/bin/bash
mkdir converted;
echo "Start convert";
for f in *.png;
do
echo "Converting file $f";
convert -extract 1208x708+19+105 "$f" "converted/${f%.png}.png";
echo "Converting file $f complete";
done;
echo "Converting complete";


Команда:
chmod ug+x convert_png.sh
делает этот файл исполняемым. Помещаем его в каталог, где находятся изображения для обработки и запускаем его:
./convert_png.sh
В текущей директории будет создана новая папка с именем converted, в которую будет сохраняться результат работы.
Теперь открываем изображение с вырезанным фрагментом в Gimp и в меню Image выбираем Fit Canvas to Layers для выравнивания изображения в слое.

5 мая 2010 г.

Доступ из виртульной машины к общей папке

Чтобы получить доступ к папке хост-машины из виртуальной машины с Linux, необходимо сначала установить дополнения для гостевой ОС. Затем перезагружаемся.
Создаём папку folders_name, в которую хотим монтировать общую папку:
mkdir /home/username/folders_name
Теперь подмонтируем общую папку:
sudo mount -t vboxsf share_name /home/username/folders_name
Где share_name имя общей папки на хост-машине. Имя можно узнать в свойствах виртуальной машины или при наведении указателя мышки на значок папки в статусной строке запущенной машины.

2 мая 2010 г.

Xubuntu 10.04 в VirtualBox

64-битная версия нового дистрибутива Xubuntu 10.04 установилась на виртуальную машину VirtualBox без всяких заминок. Но вот дополнения гостевой ОС для Xubuntu не устанавливались. В отличие от Ubuntu или Kubuntu, то в них дополнения гостевой ОС работают на ура. Чтобы они заработали и в Xubuntu, необходимо предварительно установить пакет dkms:
sudo aptitude install dkms
Далее устанавливаем дополнения гостевой ОС для Xubuntu в VirtualBox также, как и для других дистрибутивов Linux.

Подключение плагина Java в Firefox для Linux

Следуя инструкциям указанным на официальном сайте Java, мне не удалось сделать так, чтобы Firefox смог обнаружить установленные плагин Java. В итоге, найден был другой способ. Для начала скачиваем 32- или 64-битную версию java (самораспаковывающийся файл с разрешением .bin). Читаем инструкции по установке. Здесь проблем возникнуть не должно. На своей машине установил в папку /usr/java.
Теперь чтобы Firefox обнаружил установленный плагин делаем следующее:
mkdir /home/USER/.mozilla/plugins
Будет создана папка plugins в домашней директории, где User - имя пользователя

Затем:
/home/USER/.mozilla/plugins
ln -s /usr/java/jre1.6.0_20/lib/i386/libnpjp2.so
Создание символьной ссылки в папке plugins

Для 64-битной версии адрес ссылки будет такой:
ln -s /usr/java/jre1.6.0_20/lib/amd64/libnpjp2.so

Перезапускаем Firefox и проверяем работоспособность плагина на сайте Java или смотрим в списке подключенных плагинов на странице about:plugins.
Чтобы и браузер Opera мог работать с Java идём в меню Инструменты->Настройки, вкладка Дополнительно, страница Содержимое. Ставим галочку Включить Java, затем жмём Настроить Java и указываем путь к папке. Для 64-битной версии это выглядит так:

1 мая 2010 г.

Первый канал онлайн

Решил посмотреть онлайн-вещание Первого канала по адресу http://itv.1tv.ru/ с помощью браузера Opera для Linux, но не получилось. Потребовался плагин Windows Media Player, который необходимо дополнительно установить в Ubuntu 10.04 Lucid Lynx. Для этого в командной строке вводим команду:

sudo aptitude install gecko-mediaplayer

Подтверждаем установку дополнительных пакетов, перезагружаем браузер Opera и смотрим интернет-вещание. Также после этого можно смотреть и через браузер Firefox. А вот Google Chrome пока отказывается показывать прямой эфир, к сожалению

25 марта 2010 г.

Переход на Linux

Решил повторно для себя открыть мир Linux. Первая попытка была приблизительно 18 месяцев назад. Тогда всё остановилось на попытке установить разрешение монитора в рабочий режим 1680х1050. И ещё никак не мог установить Flash Player для просмотра роликов в интернете.
На этот раз установил Ubuntu. Т.к. компьютер без оптического привода, пришлось устанавливать с флешки. Поискав в сети как же это сделать, решил с помощью Unetbootin создать загрузочную флешку из образа. Теперь компьютер загружался с флешки, но при установке всё равно почему-то искал оптический привод. В общем, установить с этой флешки не получилось.
Как же удалось установить систему с USB-флешки? Проще простого. В Ubuntu есть встроенная программа для создания загрузочных флешек. Используя LiveCD, запустил Ubuntu  на другом компьютере с оптическим диском и создал установочную флешку, с которой всё установилось без проблем.
В новой системе установил сперва свой любимый браузер Opera. И кстати, ролики Youtube можно смотреть без дополнительных манипуляций, как это приходилось делать мне 18 месяцев назад. Плеер Amarok установил дополнения самостоятельно, среди которых и был Flash Player.

29 августа 2009 г.

Свобода

Если ты свободен, значит одинок.
Если одинок, то свободен.

22 августа 2009 г.

Цитата

Память согревает человека изнутри. И в то же время рвёт его на части.
Харуки Мураками «Кафка на пляже»