Thursday, October 22, 2009

Microsoft Visual Studio 2005 + qt 2009.4 integration

По горячим следам пишу пляски с бубном по установке йобаного qt-integration в microsoft visual studio 2005

В моём случае использовалось:
  • ArchLinux + VirtualBox 3.0.8 + WinXP в нём
  • Microsoft Visual Studio 2005
  • Qt 4.5.0 (2009.04)
  • Qt visual studio integration add-in 1.1.0
  • 4 часа времени (умножить на число неудачных попыток собрать с другими параметрами)
  • 2 кружки чая

    Вкратце: чтобы всё заработало с минимумом плясок в будущем, надо пересобрать qt компилятором от msvs. Здесь описывается success story этих свистоплясок


    Процедура манипуляций:
    0x0) поставить Arch, VirtualBox, WinXP
    0x1) туда влепить MSVS 2005 (я вырезал всё, кроме Visual C++) - примерно 1.1 Gb
    0x2) ставить qt-sdk-win-opensource-2009.04.exe
    0x3) она поставится ну, пусть в C:\Qt\2009.04. Делаем там же копию, допустим, в C:\Qt\2009.04vc
    0x4) достать бубен, стряхнуть пыль. Распечатать соответствующие man-тры
    0x5) открыть MS Visual Studio Command Prompt (из MSVS -> Tools), можно в принципе, просто запустить нужный батник vcvarsall.bat, который пропишет все переменные, перейти в созданную нами папку
    0x6) конфигуем сборку. Единственный вариант ключей к configure, который потом у меня удачно собрался, был этот:
    configure.exe -platform win32-msvc2005-no-sql-sqlite-no-qt3support-no-dbus -no-phonon -no-phonon-backend -no-webkit

    Даже несмотря на поставленный psql, варианты типа -plugin-sql-psql не срабатывали, так как не могли найтись нужные библиотечные файлы (естественно, в системе присутствовавшие). Поэтому я решил, что стоит сначала собрать всё, как есть, а потом, если что, доставить (ибо процедурка сборки довольно длительная)
    0x7) запускаем nmake и можно откинуться на спинку кресла идти курить бамбук - оно ещё долго не будет от нас ожидать каких-то действий.
    Сборка заняла на моей виртуальной машине (WinXP, ~1.5Gb ram) около 3 часов. Это самое противное, потому что, примерно столько же по времени занимали опыты с, как выяснилось, неудачными параметрами сборки.
    0x8) ставим qt-vs-addin-1.1.0, запускаем msvs 2005. Если всё хорошо - переход к пункту 13.
    0x9) студия сказала - иди ты, не буду никаких плагинов брать или что-то в этом духе. Никаких дополнительных меню не появилось. Расстроенное перелогиниваемся перезагружаемся.
    0xA) открываем студию снова, видим, что появилось новое меню Qt. Если в qt options показывается поставленная (собранная нами) версия qt - переход к пункту 13.
    0xB) громко матерясь, попробовать добавить версию qt самостоятельно. Если добавилась (надо указать правильный путь. В нашем случае это c:\Qt\2009.04vc) - переход к пункту 13.
    0xC) прописать в переменные среды (My Computer -> Advanced -> Environment Variables. лучше в глобальные) QTDIR=c:\Qt\2009.04vc. Перелогиниться перегрузиться.
    0xD) если теперь правильная версия не подцепилась - подключить вручную.
    0xE) открыть какой-нибудь Qt project (из соответствующего пункта меню Qt -> open .pro), убедиться в работоспособности...
    0xF) ...
    0x10) PROFIT!

    В итоге из Microsoft Visual Studio - About Microsoft Visual Studio примерно следующая информация:

    Microsoft Visual Studio 2005
    Version 8.0.50727.42 (RTM.050727-4200)
    Microsoft .NET Framework
    Version 2.0.50727 SP1

    Installed Edition: Professional

    Microsoft Visual C++ 2005 77626-009-0000007-41572
    Microsoft Visual C++ 2005

    Qt4 Add-in 1.1.0
    For more information about the Qt 4 Add-in, see
    http://qt.nokia.com
    Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies)


    Инджой.
  • Friday, September 25, 2009

    Отличный пример для объяснения импликации

    Существует логическая операция, называемая импликацией [1] (обозначается стрелочкой)
    Обычно она объясняется как "посылка -> следствие"
    Стандартно у преподавателя возникает небольшая заминка с тем, какой пример выбрать для иллюстрации таблицы итинности данной операции. Наиболее удачное из того, что я слышал: x={"Студент сдаст хорошо сессию"} y={"Папа купит ему машину"}. Однако, это не совсем удачная иллюстрация, потому что как-то не очень близка к действительности. Напомню, что x->y == 0 только в том случае, если студент действительно хорошо сдал сессию, а папа машину ему не купил (наоборот, если студент сдал плохо, а папа купил ему машину, то папу лжецом уж точно не назовёшь).

    Внезапно однажды на занятии у меня родилась шикарная идея, какие два события лучше подходят для описания: x={"Девушка забеременела"}, y={"Её мальчик на ней женился"}. Тогда x->y = {"Если девушка забеременела, мальчик на ней женился"}. Действительно, если девушка не забеременела, а мальчик не женился, никакого обмана не произошло, и x->y истинно, если девушка не забеременела, а мальчик, тем не менее, женился, то он, бесспорно, благородный дон и высказывание x->y всё равно истинно (никто никого не обманул). Если же девушка забеременела и парень женился, то всё опять же истинно (мужик сказал - мужик сделал!). Однако, если же девушка забеременела, а парень на ней не женился, он, конечно же, козёл. И в этом месте даже самые отстающие школьники понимают, что информатика гораздо ближе к жизни и радостно поддакивают своими милыми мордашками "козёл, конечно!".

    ---

    [1] http://ru.wikipedia.org/wiki/Импликация

    Saturday, September 12, 2009

    Zenwalk 6.2: epic fail.



    Всё, пришло время менять дистрибутив.
    Я два с половиной года сижу на Zenwalk, недавно они выпустили следующую версию - 6.2. На моём ноутбуке сидит 6.0, я практически не пользуюсь иксовым софтом, поставляемым от дистрибутива (zenpanel, xfce, totem, geany). До недавнего времени всё работало, но я прозевал смену версии и не успел поставить какие-то пакеты из репозитория (эта политика закрытия старых репозиторий в основанных на версиях дистрибутивах меня безумно раздражает). Я понимаю, что если я опять скачаю инсталяционный диск, запишу его на болванку и поставлю систему "с нуля", то всё будет работать, а у меня в uname будет написано 6.2 вместо 6.0, но что-то внутри против такого решения.
    Соответственно, после выполнения ритуальных netpkg update, слетели иксы, запустить которые быстро не удалось (как уже потом стало ясно, вопрос пакетного менеджера "upgrade whole system?" не подразумевает установку дополнительных пакетов, необходимых для нормального функционирования системы). В общем, третий раз подряд апдейт провалился. Кажется, нормально проапгрейдить систему у меня получилось только один раз - с Zenwal 4.0 до Zenwalk 4.2. Сурово поматерясь и потратя полчаса на поиски болванки в общаге, в итоге был закачан archlinux и после двух-трёх часов конфигурации, я снова влюбился :) Да, почти голая система после установки, зато нет ничего лишнего и всё предельно просто, без излишних упрощений. В общем, философия Arch (The Arch Way) мне кажется более сохранённой, чем философия Zenwalk ("unix way - one task, one program." - Сильно ломается в последнее время, в связи с уходом одно с небольшим скандалом из постоянных контрибьюторов товарища gapan и в след за ним уходом ещё некоторого количества достаточно влиятельных людей).
    Короче, я доволен Archlinux, пока не всё настроил, но высокая степень прозрачности системы очевидна. Любимый оконный менеджер ion3 встал легко и непринуждённо, хотя с настройкой клавы и пришлось немножко повозиться.
    А самое главное! Тут нет погони за версиями. Просто rolling releases, которые регулярно отображаются в виде "а вот исошник тут - дамп основных пакетов из репозитория. Бери, коль инета нет".
    Так что, два с половиной года с Zenwalk было весело, но пора уже и честь знать. Судя по всему, с Archlinux повеселее будет :)

    Wednesday, September 9, 2009

    MIDI keyboard under linux (как подружить usb midi keyboard, fluidsynth и jack)

    Вчера наконец-то заставил работать под линуксом миди-клавиатуру (честно говоря, не совсем наконец-то, всего второй раз пробовал)

    Мне нужно в основном для занятий по сольфеджио, поэтому я настраивал наиболее простым образом - чтобы играло и не надо было нажимать никаких специальных кнопок - просто по нажатии клавиши из колонок доносился звук.

    Общая схема подключения оказалась такой:
    0. втыкаем клаву
    1. запускаем демон jackd с нужными параметрами (см. ниже)
    2. стартуем fluidsynth указывая, что надо использовать jack и определённый soundfont (без него ничего не получится)
    3. связываем средствами ALSA ввод с миди с выходом fluidsynth
    4. связываем jack-ом выход fluidsynth с системным выходом.
    5. ?????????
    6. PROFIT

    скриптец с раскраской, требует допиливания, чтобы заработало

    Если говорить в терминах команд, то получаем следующее:
    Запускаем джек:
    jackd -dalsa -dhw:0,0 -r44100 -p512 -n4 &

    Теперь запустим синтезатор, скормив ему звуковой шрифт:
    fluidsynth -ajack /home/cra/Unison.SF2

    Кстати, откроется шелл, в котором можно регулировать gain командой gain X, где X - число от 1 до 5. Остальные команды, в общем-то, не столь важны.

    Далее, смотрим, какие порты у нас открыты по выводу команды
    aconnect -o

    И подключаем вывод клавиатуры к входу синтезатора: что-то в духе
    aconnect 128:0 20:0

    Ну а теперь надо подцепить выход синтезатора джэком к системному выводу звука:
    jack_connect fluidsynth:left system:playback_1
    jack_connect fluidsynth:right system:playback_2

    Всё, из колонок должны доноситься звуки.

    Wednesday, April 29, 2009

    screen splitting

    Есть очень удобная тулза, gnu screen, которую я использую в связке сервер - скрин - приложения.
    По сути, это тот же концепт, что и виртуальные рабочие столы, только для консоли. Основное преимущество в том, что при разрыве коннекта мы можем подключиться потом к серверу и вернутся в тот же экран, где всё как раз на том же месте и осталось.
    Собственно, это делается командой screen -dAR - в такой комбинации параметров, если скрина не было, создаётся новый, а если был, то он дополнительно ресайзится в окно, в котором запущен.

    ctrl-A x - lock screen
    ctrl-A h - hardcopy current view. Очень удобная команда, делает ascii-скриншот того, что видно
    ctrl-A S - split screen - разбивает область со скринами на две, так, что можно в одной открыть tail -f какого-то лога, а в другой собственно проводить манипуляции с серваком.
    ctrl-A :resize +-N - изменить размер текущего фрейма. Такой консольный ion3 получается :)

    Friday, March 27, 2009

    bash wrapper scripting - parameters

    краткий ответ: $@

    сам пост:
    Допустим, есть какая-то уже налаженная схема запуска чего-либо, где всё настроено и работает, но хочется чуть-чуть изменить процесс, причём где-то в середине и без особого гемороя. Легко и просто - заменяем исполняемую команду на скриптег, который делает наши действия и потом вызывает саму настоящую программу. Бида, бида нас ждёт, если сделать всё в лоб!
    [cra@server 10:37 ~]
    $ cat /usr/bin/svnserve
    #!/bin/bash

    umask 002
    /usr/bin/svnserve_real

    даст, например, неудачный резальтат

    [cra@zenwalk 10:38:53 /tmp]
    $ svn checkout svn+ssh://servak_inet/repos/gui/trunk
    You must specify exactly one of -d, -i, -t or -X.
    Type '/usr/bin/svnserve_real --help' for usage.
    svn: Connection closed unexpectedly


    Решение тривиально, надо чуть-чуть изменить исходный скрипт
    [cra@server 10:45 ~]
    $ cat /usr/bin/svnserve
    #!/bin/bash

    umask 002
    /usr/bin/svnserve_real $@


    Вот так, а я и не знал, однако :)

    Friday, March 6, 2009

    Dream Theater в Москве 10 июня!



    Кстати, скриншоты в линуксе делаются командой, указанной на скриншоте :) import -window root filename.png %)

    UPD: that was awesome, но за такие деньги я на них больше не пойду.