Qt 5 の未来は明るいブログ

Qt Developer Day Tokyo 2014 に参加しました(中編)

Published: 2014-05-21 / Last modified: 2014-06-18

2014年5月20日に秋葉原で開催された Qt Developer Day Tokyo 2014 に参加してきました。

色々書いていたらながーい記事になったので 前編中編後編 に分けました。中編は当日のユーザー会としての活動についてです。

日本 Qt ユーザー会の展示ブース

今回もコミュニティ向けに展示ブースを一つ用意してもらいました。

こんな素晴らしいイベント用のテーブルクロスを作成した以外、デモの準備とか担当はあまりちゃんとは話し合いませんでしたが、様々な端末が並んで、Qt の本もあって、FireAlpaca[ファイア アルパカ] のデモもあって、素晴らしいブースになったと思います。

ユーザー会のリーフレットがあれば完璧でしたが、それはまた次回のお楽しみにしましょう。

ライトニングトーク大会

日本 Qt ユーザー会主催のライトニングトーク大会をランチタイムの間に行いました。

  1. @IoriAYANE さんによる「Qt のよいところ」
  2. @MurabitoL さんによる「Ubuntu Touch で Qt アプリを作ろう」
  3. @sazus さんによる「Qt creatorで remote debug!
  4. @hermit4 さんによる「Qtおやつ部活動報告」
  5. @moguriso さんによる「(タイトルわすれた)」Qt Developer Day 2014 〜あれから2年半〜

ウケたりウケなかったり、ドタバタしたり、進行が適当だったりと色々でしたが、Qt のコミュニティもあれこれ頑張っ てるんだよーというのは伝わったと思ってます。

Qt おやつ部提供のおやつ

Qt おやつ部の一員として、午後の休憩時間に Qt チョコを45個入り×5箱提供させていただきました。

Qt なせんべいは @sazus が名古屋から持ってきてくれたものです。素敵ですねぇ。

午後の休憩時間にはコーヒーが完売してしまったのがおやつ部としては非常に残念でしたが、甘いお菓子で疲れも吹っ飛んだことでしょう!

謝辞

仕事の忙しい中、デモの用意や LT をこころよく引き受けてくれたユーザー会のみなさん、本当にご苦労様でした。当日お手伝いいただいた方も、ありがとうございました。来年も頑張りましょうね!

あと、イベント当日に MurabitoL さんからも Qt おやつ部への上納金という形でカンパをいただきました。今後もおやつ部の活動頑張りましょう!

Qt Developer Day Tokyo 2014 に参加しました(前編)

Published: 2014-05-21 / Last modified: 2014-05-30

2014年5月20日に秋葉原で開催された Qt Developer Day Tokyo 2014 に参加してきました。

色々書いていたらながーい記事になったので 前編中編後編 に分けました。前編はイベントまでの四苦八苦?です。

イベント開催までの道のり

3月12日に Digia が Qt Developer Days Asia のアナウンスをして以来日本 Qt ユーザー会 としてもこのイベントの成功のためにお手伝いをしようということにして、色々協力してきました。

ウェブサイトの全般的な文言の修正

イベントのサイト が当初とても残念な感じだったので、色々修正してもらいました。完璧にはなりませんでしたが、だいぶマシになっていると思います。

セッションの紹介スピーカーの紹介 の翻訳

ユーザー会の有志5、6人で頑張って翻訳しました。より自然な日本語になるように四苦八苦しましたが、とてもいい経験になったと思います。当日配られたパンフレットにもユーザー会の翻訳結果が採用されています。

Ubuntu 14.04 LTSリリースパーティ+オフラインミーティング14.05 でイベントの宣伝をしてきた

@MurabitoL さんに思いっきりプレゼンのハードルをあげられてツラい思いをしましたが、頑張りました!

日照り乞い

の対策を施しました。

スポンサーシップ

Digia の人がスポンサー探していたので「個人とかでもいいの?」と尋ねてみたところ「別にいいわよ?」というこころよい返事が来たので、Qt おやつ部 という団体を適当にでっち上げて、@hermit4 さんと二人でイベント当日のコーヒーのスポンサーをすることにしました。

謝辞

仕事の忙しい中色々してくれたユーザー会のみなさん、本当にご苦労様でした。来年も頑張りましょうね!

Qt 5.3 リリース

Published: 2014-05-20 / Last modified: 2014-05-20

Qt Developer Tokyo 2014 に合わせる形で Qt 5.3 がリリースされました

Qt 5.3 のフォーカスはパフォーマンスの向上、安定性の向上と使いやすさの向上ですが、新機能もいくつかあります。

新機能

QtQuickWidget

Qt 5.0 から Qt 5.2 まで、Qt の Widgets と Quick は別々の UI テクノロジーとして存在してきましたが、Qt 5.3 ではそのギャップを埋める QQuickWidget というクラスが導入されました。

このクラスを使うことにより、既存の QtWidgets ベースのアプリケーションに簡単に Qt Quick の機能を埋め込むことが可能になります。

QML コンパイラ

Qt 商用版にて Qt Quick Compiler と呼ばれるビルドツールが導入されました。QML のコードをネイティブコードにコンパイルします。ロードやパースの時間が削減できるとともに、 JIT が使えない環境などで特に大きな威力を発揮します。

また、QML をテキスト形式で配布しなくてよくなるため、ソースコードのセキュリティも向上します。

Continue reading...

Qt 勉強会 #11 @Tokyo 開催しました

Published: 2014-05-18

2014年5月17日(土曜日)に Qt 勉強会 #11 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

Qt Developer Day Tokyo 2014 の直前となった今回の勉強会ですが、普段と変わらない雰囲気で楽しい勉強会でした。

簡単な自己紹介タイム

9人くらい集まったところで開始しました。今回は初めて参加された方が2名、学生さんが2名という感じでした。

もくもく

Qt おやつ部の部員などが持ち寄ったお菓子を食べながら各自もくもくと Qt の勉強をしたりなにかを作ったりしていました。

まとめ

Qt Developer Day Tokyo 2014 の準備を進めている人がいたり、ruby から QML を扱うための仕組みを開発している人がいたり、LiquidFun を Qt と組み合わせて使おうとしている人がいたり、QtWebKit 上で CodeMirror を使用した執筆用のエディタを開発している人がいたりと、それぞれが自分の好きなことをしつつも情報交換をしたり、普段の仕事では味わえない素敵な刺激を受けたりできる楽しい勉強会だったと思います。

Continue reading...

Ubuntu 14.04 LTSリリースパーティ+オフラインミーティング14.05 に参加しました

Published: 2014-05-11 / Last modified: 2014-05-11

2014年5月10日に グリー株式会社 で開催された Ubuntu 14.04 LTSリリースパーティ+オフラインミーティング14.05 に参加してきました。

Qt Developer Day Tokyo 2014 の宣伝

あと100人くらい参加者が増やして Qt のイベントをもっと面白くしよう! という密かな企みを実現するため、Qt 大好きな人が多いと思われる Ubuntu コミュニティのみなさん の前で 5/20(火) に秋葉原で開催される Qt Developer Day Tokyo 2014 の宣伝をしてきました。

Continue reading...

Qt 勉強会 #10 @Tokyo 開催しました

Published: 2014-04-21 / Last modified: 2014-04-21

2014年4月19日(土曜日)に Qt 勉強会 #10 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

東京は Qt 勉強会と名称を変更してから第10回という節目の開催で、関西でも数年ぶりに Qt 勉強会が開催されました。いやぁ、おめでたい。

自己紹介タイム

10人くらい集まったところで開始しました。春なので?「最近忙しくてなかなか来れませんでした」という方が多かったですね。

困ったときの Qt @ Tokyo

FireAlpaca の開発者の方から Qt 5 への移行に関していくつかの質問がありました。

macdeployqt が動かない

Qt 5 にしたら macdeployqt がなんか動かないということでした。

元々 Qt 5.0 あたりで macdeployqt が盛大に壊れていて、Qt QuickではじめるクロスプラットフォームUIプログラミング のレビューの際に結構 @IoriAYANE さんと四苦八苦した経験があります。この本の最後の方のデプロイのところを読んでもらえるとその辺が書いてあったはずなんですが、さすがにもうまともに動くようになってるだろうなーと思ってました。

で、色々試行錯誤の末なんとか動いたようで、具体的になにが原因だったのかはわからなかったのですが、

  1. アプリケーション名.app の「アプリケーション名」の部分を変えたら動かなくなる
  2. 一度失敗すると二度目以降は動かなくなる

あたりが問題だったようです。

1. の方は .app 以下の Contents/MacOS/ に実行バイナリがあるのですがそこの名前と合わせてあげることで解決します。

この処理は qttools の中の src/macdeployqt/shared/shared.cpp のこのあたり で行われていて、macdeployqt に引数で渡した .app のベースネームしか探していないという実装になっています。

もう少し親切なエラーメッセージを出してあげるとハマらずに済む気がしますし、お目当てのファイルがなかった場合には、そのディレクトリを走査してバイナリを探すみたいな処理を追加してあげれば改善できそうですね。

2. の方は一度 .app を rm なりで消してあげて、もう一度 make をしなおす必要があるということでした。

pthread を使いたい

OpenMP を使っていた部分が Qt 5 では動かなくなったということで pthread を使うにはどうしたらいいのか? Qt 的には QThread を使えばいいの?という質問でした。

一般的には「QThread を使って下さい」でいいと思いますが、今回のユースケースではもう少し高レベルな API である QtConcurrent を使うとより幸せになれる感じでした。

QtConcurrent の API を使うと、パラメータの一覧を API に渡すだけで、利用可能なスレッド数を自動判別して、そのスレッド数で順次処理をして、全部の処理が終わったらシグナルが出て、結果の一覧が返ってくる、みたいな処理がとっても簡単にできるので興味のある方は遊んでみるといいと思います。

実行時にデバッグメッセージが表示されるのが気になる

一つは QML のデバッグが有効になっている時に出る警告で、Qt Creator の中のビルドの設定の qmake の設定のところで QML のデバッグの有無にチェックが入っているのが原因です。

あとは plist とか QuickTime のプラグインとかでも出るとのことでしたが、その辺はよく分かりませんでした。

Windows でも "QSslSocket: cannot resolve TLSv1_1_client_method" のような警告が表示されるとのことでした。

Mac で一文字のショートカットが効かない

X などの文字をショートカットとして使っていたコードが Qt 5 にしたら動かなくなったそうです。

詳細は忘れてしまいました。なんとなく使い方を変えると動くようにできそうな気がしますが、Qt 4 では動いていたようなので Qt 5 の問題かもしれません。

windeployqt?

Windows には macdeployqt みたいなものはないの?という質問でした。Qt 5.2 からは windeployqt.exe というのがあるみたいですね。

Qt Developer Day Tokyo 2014 の準備?

OSC などのイベントに Qt ユーザー会として出展する際に色々必要なものをそろそろ揃えましょうということで、パンフレットやテーブルクロスなどの話し合いをしました。

Raspberry Pi 向けの HTML5 のプラットフォームを Qt で構築する

飛び入り参加の @masap さんによる発表がありました。

組み込み屋さんは UI を作るのが苦手なので、そこは得意な人にお任せできるように HTML からハードウェアを制御するような仕組みを作ったよ!というか、Qt の WebKit にはそういう仕組みがあるので簡単に作れるよ!というお話でした。

Raspberry Pi に Qt(4) をインストールして、QtWebKit の QWebFrame::addToJavaScriptWindowObject というメソッドを呼ぶだけで簡単に JavaScript から C++ のコードを実行できるようになるとのことで、実際に JavaScript から LCD パネルの表示文字を変えるデモや、PS3 のコントローラを HTML5 で使えるようにしたデモなどを見せてくれました。

QtWebKit の C++ と JavaScript 連携の詳細は The QtWebKit Bridge というドキュメントに書かれているので興味のある方は是非ご覧下さい。

また、来月発売の日経Linuxにこの記事を書いたということなので皆さん買って試してみましょう!

qleap のコンパイルが通らない

https://github.com/nobo66/qleap/tree/windows のビルドが Linux で通らなくて困っているということで色々調べた結果よく分からなかりませんでした。

コンパイルオプションに -fno-rtti を追加したら通るようになったようですが、なんでだろう?

qleap は確か自分で試したときもそんな感じで動かなかったので、自分で Qt/Quick で動くようにプラグインを書いてしまったので、git://git.qtquick.me/qmlplugins/qtleap.git も試してみるといいと思います。

まとめ

適当にお菓子を食べながら Qt で何かを開発したり、Qt の分からないことをみんなで解決したり、Qt の普及のための作戦を練ったり、Qt を使ってる人同士で交流したりと、とても有意義な勉強会だったと思います。

Continue reading...

Twitter4QML の大量の警告を修正しました

Published: 2014-03-24 / Last modified: 2014-03-24

艦メモ のおかげで結構ビルドされるようになった Twitter4QML ですが、もともと Qt 4 で開発していたという歴史的な理由により Qt 5 でビルドすると 大量に警告が出る 状態だったのを修正しました。

あまりいろいろな環境ではテストしていないので、問題があったらすぐにお知らせ下さい。

'QString::QString(const char*)' is deprecated

Qt 5 では QString(const char*) を使うと警告が出るようになりました。

// ASCII compatibility

#ifndef QT_NO_CAST_FROM_ASCII
    inline QT_ASCII_CAST_WARN QString(const char *ch)
        : d(fromAscii_helper(ch, ch ? int(strlen(ch)) : -1))
    {}
    ...
#endif

ここで、QT_ASCII_CAST_WARN は以下のように定義されています。デフォルトでは QT_ASCII_CAST_WARNINGS が定義されているため、明示的に #undef しない限りは「廃止されました」という警告が出るようになっています。

#ifdef QT_ASCII_CAST_WARNINGS
#  define QT_ASCII_CAST_WARN Q_DECL_DEPRECATED
#else
#  define QT_ASCII_CAST_WARN
#endif

このため、QString(const char *)のコンストラクタを明示的に使用している場所や暗黙的に呼ばれている場所すべてで警告が出ていました。

Qt 5 では、QString::fromUtf8() とか QString::fromLatin1(const char * str, int size = -1) を使いましょう、文字列リテラルの場合は QStringLiteral(str) マクロを使いましょう、という感じなので、とりあえずそれにしたがって直しました。

Qt 4 で今まで

QVariantMap map;
map["key"] = "value";

と書いていたコードは、

QVariantMap map;
map[QStringLiteral("key")] = QStringLiteral("value");

と書かないと警告がでるんです。無駄に面倒くさいですねー。

QAlgorithmsPrivate::qReverse

今まで配列の順番を逆順にするのに QAlgorithmsPrivate::qReverse() という非公式な API を使っていたのですが、Change I3358e44b: Used QT_DEPRECATED_X in QtAlgorithms という変更により正式に廃止されました。代わりに std::reverse を使ってねというメッセージを親切に出してくれているので、そちらに置き換えました。

Qt 勉強会 #9 @Tokyo 開催しました

Published: 2014-03-23

2014年3月22日(土曜日)に Qt 勉強会 #9 @Tokyo株式会社 PTP さんのミーティングルームで開催しました。

Qt Developer Day Tokyo 2014 の話し合い

5月20日に秋葉原あたりで開催される Qt Developer Day Tokyo 2014 について Qt ユーザー会のメーリングリストで相談中 ですが、勉強会に来た人たちと色々話をしました。

イベントまでにできること
当日使用する資料やパンフレットなどの日本語訳などは随時進められる。
ブースの準備
OSC の反省を踏まえて、Qt とユーザー会の紹介のパンフレットを作る。おしゃれなテーブルクロスも作りたい。
参加者と主催者のコミュニケーションのお手伝い
技術的に突っ込んだ話を英語と日本語でするのは難しいか…。
告知関連
Qt ユーザー会のメーリングリスト以外の各 Qt 勉強会の Google Group にもお知らせを送ろう

OSC Tokyo/Spring の反省会

  • 同じ説明を一日に何度もするのはツラいのでパンフレット作ろう
  • 見た目もまわりのブースに比べて地味なのでテーブルクロスなどを作ろう
  • 話かけられやすい雰囲気を作るためにどうしたらいいか

もくもく:Twitter4QML の改善

昨年の10月に開催された Qt Developer Days 2013 Europe の技術セッション「Speeding up your Qt app with new QtNetwork features」の以下の動画を見て、Twitter4QML を改善したくなったので、まず初めに Qt5 でビルドすると大量に警告がでる問題を修正していました。

その他の参加者の話

ReStructuredTextpandoc を使って HTML に変換するエディタを作成している人がいたり、某コレクションゲームの専用ブラウザで動画を保存する機能を作っている人がいたり、Spritz のようなアプリケーションを作っている人がいたり、Qt Creator の翻訳 をしている人がいたり、Windows で QtMultimedia を使用して mp3 のタグ情報を取得しに四苦八苦している人がいたりと大変楽しい勉強会でした。

Continue reading...

Digia が Qt Developer Days Asia のアナウンスをしました

Published: 2014-03-15 / Last modified: 2014-03-15

今年の5月20日(火曜日)に東京で Qt Developer Day を開催するという アナウンス がありました。

Qt Blog にも「Save the Dates | Qt Developer Day Tokyo & Beijing 2014」という記事が投稿され、日本で開催する理由として以下の点が上げられています。

  • ここ数年日本は Qt にとって親友であり、オートメーション、コンシューマーエレクトロニクス、ロボティクスなどの業界のリーディングカンパニーが Qt を採用していること
  • すばらしい Qt コミュニティがあること

ビジネスと、オープンソースとしての Qt の両面で非常に評価が高いのは本当に喜ばしいことです。

というわけで、2014 Qt Developer Day Tokyo のサイトでメールを登録し、続報を待ちましょう。

2011年に Qt Developer Conference Tokyo 2011 というイベントを開催して以来、約3年半ぶりのオフィシャルな Qt イベントになります。Qt の開発者と直接コミュニケーションができる絶好のチャンスなので、仕事としてでも有休を使ってでもいいので絶対に参加しましょう! 学校を休んで参加しましょう!とは言いづらいのですが、学生の方の参加も大大大大大歓迎(のはず)です!

オープンソースカンファレンス 2014 Tokyo / Spring 2日目

Published: 2014-03-01 / Last modified: 2014-03-01

昨日 に引き続き、今日も オープンソースカンファレンス 2014 Tokyo / Spring日本 Qt ユーザー会 として参加してきました。

今日は土曜日ということもあり、たくさんの人が Qt ユーザー会のブースを訪れてくれました。

OSC 2014 Tokyo / Spring で Qt に興味をもたれた方は是非 Qt のダウンロードページ からお使いの OS に応じたインストーラーをダウンロードして Qt でなにかを作ってみてください。

日本 Qt ユーザー会のメーリングリスト も是非購読して、ユーザー会の一員となってみてはいかがでしょうか?

Qt って○○なんです。って説明を何度も何度もしたので次回はもう少し効率のいい方法をまじめに考えたいなと思いました。。。