Qt

Снова про звук, Linux, Qt и на этот раз — Phonon

Вообще, я ОС Линукс люблю и по возможности работаю именно в нем (но пропагандой пингвинов обычно не занимаюсь). И KDE люблю тоже. Но есть во всей этой кухне одна особенность, которая бесила меня всегда до мозга костей.

Вот, например, в ОС Windows можно было одновременно слушать музыку и, скажем, играть в игры — то есть, воспроизводить звук из разных источников параллельно — очень-очень давно. Десять лет точно. И дело не в том, что в Луниксе — нельзя. Можно, конечно. Но как-то так сложилось, что звуковая система в нем лицом повернута к самому Луниксу. А к пользователю — тем, что с оборотной стороны лица находится. Со всеми этими фронтэндами, бэкэндами, промежуточными демонами, альсами, оссами, пульсаудио, консольными плеерами и звуковыми библиотеками, разработчики пускаются во все все тяжкие, но годы проходят, а свести все это к приличному виду, чтоб хотя бы из коробки работало без конфликтов, — не получается.

Работа с потоками в Qt

Обнаружил добротную и длинную статью в двух частях о работе с потоками и параллельном программировании в Qt:

Легкость создания и запуска потоков в Qt, в сочетании с некоторым незнанием стилей программирования (особенно асинхронного сетевого программирования, в сочетании с концепцией сигналов и слотов в Qt) и/или привычками, приобретенными во время использования других инструментариев или языков, обычно приводят к тому, что люди стреляют себе в ногу. Кроме того, поддержка потоков в Qt – это палка о двух концах: когда создание многопоточных приложений для вас становится очень простым, в это же момент добавляется определенное количество особенностей (особенно когда дело доходит до взаимодействия с QObject), о которых вы должны знать.

Целью данного документа не является научить вас использовать потоки, делать правильную блокировку, использовать параллельность и писать масштабируемые программы. Вместо этого, эта небольшая статья введет пользователей в курс многопоточности в Qt 4, для того чтобы избежать наиболее распространенных ошибок и помочь им разрабатывать код, одновременно и более надежный, и имеющий лучшую структуру.
Потоки, cобытия и объекты QObject (Часть 1)
Потоки, cобытия и объекты QObject (Часть 2)

Толково.

Qt-приложения на Android

Новость из стана лабораторий Qt в Nokia. На этот раз — приятная:

BogDan did not only create a Qt port, but also a complete Qt Creator integration for Android, as well as an all-in-one Necessitas installer. And as cherry on top, BogDan implemented Ministro, a deployment service which makes sure that the right Qt libraries are present on the end users’ device and your application does just run.
He did all of that in his spare time, driven by his passion for Qt, Android and FOSS. He does neither work for Nokia nor for Google. This is a pure community effort.
Bringing Qt applications to Android

Добрый человек по имени Богдан Ватра разработал Necessitas, пакет для сборки Qt-программ под платформу Android. И, кроме того — службу Ministro, автоматически подтягивающую нужные библиотеки Qt на целевое устройство. Разработал, что характерно, сам, без помощи Нокии.

Обзорный ролик новинки:

Жизнь-то налаживается. Правда, в настоящее время пакет работает только под Линукс. Но нам, линуксоидам, это без разницы.

Что будет с Qt

После нашумевшего соглашения между Nokia и Microsoft у многих возник вопрос — а что же будет с родиной и с Qt? Вот первая публикация Nokia на эту тему:

Wow, what a day… Nokia outlined its new platform strategy for smartphones, with Windows Phones as it primary smartphone platform in a proposed partnership with Microsoft… and Microsoft’s tools would be used for Nokia Windows Phone application development … and guess what, it has raised a lot of questions in the Qt community.
So the question is, what is the future for Qt?
Nokia new strategic direction. What is the future for Qt?

В принципе, ничего особенного там не говорится — будем развивать, быстрее, больше, популярнее, ожидаем роста, есть куча устройств, которые надо поддерживать и т.п. Ничего не говорится о портах на разные платформы. Кроме разве что того, что порта на Windows Phone 7 — не будет.

Поэтому в комментариях народ, как и раньше, настроен крайне скептически. Посмотрим, что будет дальше.

qTwister на OS/2

Пока суд да дело, добрые люди из Испании портировали мой qTwister на операционную систему eComStation. А я, признаться, даже и не знал, что OS/2 живет и развивается.

Также есть надежда, что вскоре qTwister научится писать (а может даже и говорить) по-гишпански. Мировое господство не за горами!

Порт лежит вот здесь: Hobbes FTP. Автор порта: Salvador Parra Camacho.

SVG в Qt

Благодаря бдительным пользователям в qTwister обнаружился баг. Оказывается, для отображения векторных svg-картинок, необходимо в составе приложения поставлять еще и соответствующий плагин, а без него ничего не показывается. В общем, разобрался, все исправил, кто следит - может скачать обновленные архивы со страницы программы (если надо - обновите кэш браузера).

На случай если забуду, или случайный гость заинтересуется: плагин qsvg4.dll (.so для Linux) лежит в qt/plugins/imageformats. В приложении плагин должен поставляться в директории imageformats/.

qPassGen — генератор паролей

Время от времени всем нам приходится регистрировать учетные записи, для которых неплохо бы иметь «сильный» пароль. Для доступа на ФТП, для админки на сайте, в общем — известно, зачем. Лично я для этих целей обычно ставлю пароли вида NCpg*fmO_08uLh. Придумывать такие самому, однако, лениво. Поэтому уже несколько лет пользуюсь самопальной утилиткой на Qt, которая придумывает их за меня. Ну и пришло как-то в голову привести ее в божеский вид и выложить сюда — а ну как кому пригодится. Знакомьтесь, qPassGen:

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

qTwister

Как-то раз притащили домой заморскую игру Твистер. Если кто не знает, это такая напольная потеха, в которой игроки должны по команде ставить руки и ноги на разноцветные круги, извиваясь как ужи, и кто гибше гнется — тот молодец. Игра была немедленно испытана на гостях, специально приглашенных под надуманным предлогом (см. спиртное). Радость стояла неописуемая — пьяные гости (и мы с ними) яростно изгибались и дружно валились в кучу. Поутру не привыкшие еще к позициям из цикла «Йога для самых гуттаперчевых» конечности адски болели, но сейчас не об этом.

В процессе игры оказалось, что один из присутствующих вынужден воздержаться от всеобщего твистера и быть ведущим, то есть крутить пластмассовую стрелку на диске и называть выпадающие ходы (цвета и конечности). И это в XXI веке, когда очевидно, что в комплект с игрой должны входить специально обученные роботы, самостоятельно крутящие стрелку, пока человеки полным составом валяются по полу.

А я как раз тогда дочитывал книжку Макса Шлее про Qt, ну и решил устранить технологическую несправедливость и заодно закрепить некоторые аспекты фреймворка на практике. Так родилась программка qTwister.

Программа умеет:

  • генерировать ходы для Твистера в ручном режиме (нажатием на красную кнопку);
  • генерировать ходы автоматически с заданным интервалом;
  • отображать каждый ход графически (изображением конечности и цвета, как на картинке выше);
  • озвучивать каждый ход мужским или женским голосом (русскую озвучку сами наговаривали, английская — сгенерирована через espeak);
  • работать на русском и английском языках.

В общем, делюсь разработкой с общественностью. Краткое руководство по использованию прилагается в архиве.

Всякие deb и rpm-пакетики наверное тоже вскоре сделаю. Заодно научусь, как.

Если есть какие вопросы, сообщения, уточнения или пожелания по поводу — пишите в комментарии или в почту.

А если вам хочется поставить генератор ходов для Твистера на мобильный телефон, воспользуйтесь программой Twisdial. Она умеет работать в телефонах на базе Android и других телефонах с поддержкой J2ME.

Qt, Symbian и Linux

Блог лабораторий Trolltech, разработчиков Qt, разродился хорошей новостью. В грядущем Qt 4.7 станет возможной разработка и отладка софта для Symbian прямо из-под Линукса. Возможность пока экспериментальная, тролльтехи ее планируют улучшать, упрощать и дорабатывать, но серьезный шаг вперед уже сделан.

В заметке "Symbian development using Linux" Томас Зандер рассказывает о том, как и что нужно устанавливать, чтобы начать плодотворную разработку уже сейчас.

Qt и звуки

Меня всегда радовало разнообразие возможностей по работе со звуком в Линуксе.

Сегодня, например, несколько часов подряд взрывал себе мозг на тему QSound в Qt. Дело в том, что под Виндой, чтобы воспроизвести звуковой эффект без извращений, нужно просто вызвать статический метод QSound::play("имя файла"). В Линуксе тоже так можно, но чтобы звук действительно прозвучал - надо ставить NAS. Узнав об этой необходимости, принялся ставить оный, параллельно размышляя, как лучше заставить пользователей проделать то же самое. Мозги начали нагреваться.

Когда с nasd возникли какие-то проблемы, быстренько переключился на поиск альтернатив. Уже задумался о компиляции версии под Линукс с Phonon. Остановил тот факт, что фононовский учебный проект из состава Qt SDK не собрался out of the box. Попробовал учебный проект QAudioOutput оттуда же - не работает.

Уже начал было впадать в уныние, но в конце-концов осенило:

#ifdef Q_WS_X11
  QProcess::startDetached("play mysound.wav");
#else
  QSound::play("mysound.wav");
#endif

Вроде бы, ерундовая задача, а - чуть стол головой не разбил. Так жить нельзя.