2013年10月30日水曜日

艦メモのメモ

先週の金曜日に、うっかり着任してしまい、艦コレはまり中の隠者です。

先日、開発者の @IoriAYANE さんから、Qtユーザー会の方でも開発者募集のメールが出ていた艦メモについて、メモ書きを残しておこうと思います。

まずは、伊織さんからのメッセージの転載。

> こんばんわ
> アプリはさくっと作ってさくっと放流の、いおりです。
> MLをもっとフランクに使っていこうぜって話題があったので。
>
>
> 艦メモという、DMMのゲーム「艦隊これくしょん」を遊ぶためのアプリを作ってます。
> ソースをGithubで公開しているので、もし艦これで遊んでてちょっといじってやるぜ!って
> 提督さんはぜひビルドしてみてください。
> そして、ぜひプルリクエストを送ってください!
> (チート機能は禁止ですよー、マクロとか)
>
> 艦これ
>
> 艦メモの紹介
>
> ビルド方法
>
> 艦メモのビルド方法(Windows編)
>
> 艦メモのビルド方法(Ubuntu編)
>
> 艦メモをビルドしてみた(MacOSX編)
>
> Github

続きまして、ディレクトリツリー。一度ビルドした後で取ったので、余計なものも入っているかもしれませんが。

KanmusuMemory
 - aboutdialog.cpp [いわゆるaboutダイアログ。貢献するとここにアカウント名が表示されるっぽい]
 - aboutdialog.h   [同上]
 - aboutdialog.ui  [同上]
 - cookiejar.cpp   [クッキー保存オブジェクト]
 - cookiejar.h     [同上]
 - favoritemenu.cpp [お気に入り機能、webpageform用かな?]
 - favoritemenu.h  [同上]
 - gamescreen.cpp   [キャプチャ時のGame画面切り出し?]
 - gamescreen.h     [同上]
 - i18n/ [翻訳ファイル - 伊織さんは英語で作ってから翻訳を作るそうです。すばらしぃ
   - qt_ja.qm
   - qt_ja_JP.qm
   - qt_ja_JP.ts
 - imageeditdialog.cpp  [画像編集ダイアログ]
 - imageeditdialog.h    [同上]
 - imageeditdialog.ui   [同上]
 - KanmusuMemory.icns
 - KanmusuMemory.ico
 - KanmusuMemory.pro [Qtのプロジェクトファイル。QtCreator使いはコレをQtCreatorで開く]
 - KanmusuMemory.qrc [Qtのリソース設定ファイル]
 - KanmusuMemory.rc  
 - kanmusumemory_global.h
 - LICENSE          [Apach2ライセンスですね]
 - main.cpp         [main関数はここ]
 - mainwindow.cpp   [main windowです]
 - mainwindow.h     [同上]
 - mainwindow.ui    [同上]
 - memorydialog.cpp [View Memoryダイアログ]
 - memorydialog.h   [同上]
 - memorydialog.ui  [同上]
 - qml/
   - KanmusuMemory/
     - ClipTool.qml
     - GradientEx.qml
     - imageEditDialog.qml
     - ImageEditView.qml
     - images/ 
       - spinner.png
     - js/
       - HttpAccess.js
     - memoryDialog.qml
     - test.qml
     - timerDialog.qml
     - TimerItem.qml
     - TimerSetting.qml
 - qtquick/
    - clipcursor.cpp
    - clipcursor.h
    - operatingsystem.cpp
    - operatingsystem.h
    - qfileasync.cpp
    - qfileasync.h
    - qmlfile.cpp
    - qmlfile.h
    - qtquick.pri
    - qtquick2applicationviewer.cpp
    - qtquick2applicationviewer.h
    - thumbnailprovider.h
    - timerdata.cpp
    - timerdata.h
 - README.md [githubでの説明用]
 - Readme.txt [艦メモについての説明書き]
 - resources/ 
   - alarm.mp3
   - downloaddata/
     - favoritedata.json
     - timerselectguide.json
     - timerselectguide_en.json
   - fav_icon_off.png
   - fav_icon_on.png
   - go_back.png
   - go_forward.png
   - icon.svg
   - KanmusuMemory128.png
   - KanmusuMemory16.png
   - KanmusuMemory256.png
   - KanmusuMemory32.png
   - KanmusuMemory48.png
   - KanmusuMemory512.png
   - KanmusuMemory64.png
   - KanmusuMemory80.png
   - KanmusuMemory96.png
   - mobile_icon.svg
   - mobile_icon_off.png
   - mobile_icon_on.png
   - reload.png
 - scripts/                [主にビルド後の配布パッケージ作成用スクリプト]
   - deb/                  [Ubuntu用debパッケージ作成用]
   - deploymac-dmg.sh      [dmgパッケージ作成用]
   - deploymac.sh          [Macデプロイ用スクリプト]
   - deploymaclibs.txt     [Macで利用するライブラリリスト]
   - deployubuntu.sh       [Ubuntuデプロイ用スクリプト] 
   - KanmusuMemory.sh 
   - macdeployhelper510.sh [deploymac.shから呼び出される]
   - Readme.txt            [Macデプロイスクリプトについて]
   - translate.bat         [lupdate呼び出し簡略化用?]
 - settingsdialog.cpp      [設定ダイアログ]
 - settingsdialog.h        [同上]
 - settingsdialog.ui       [同上]
 - tabwidget.cpp           [WebPageFormにタブを表示する用]
 - tabwidget.h             [同上]
 - timerdialog.cpp         [Timerダイアログ]
 - timerdialog.h           [同上]
 - timerdialog.ui          [同上]
 - tweetdialog.cpp         [ツイート用ダイアログ]
 - tweetdialog.h           [同上]
 - tweetdialog.ui          [同上]
 - twitterinfo_sample.h    [ツイッター用のヘッダサンプル。ビルド手順に従い、コピーと設定が必要]
 - webpageform.cpp         [Web表示ウィジェット - 配布版はまだ入っていない、ブラウザ分割ウィンド]
 - webpageform.h       [同上]
 - webpageform.ui      [同上]
 - webview.cpp             [QWebView拡張。WebPageFormとメインウィンドウで利用]
 - webview.h               [同上]

ほかのOSでも調べてからIssue登録予定だけど、Mac OS X(10.9)で、ビルドした環境での起動(英語表示)だと、以下の表示がウィンドウ内におさまってないらしい。

Timer Dialog

思い出のダイアログも以前は収まってなかったけど、update/merge後に試したら修正済みだったようです。最初にビルドした時は、キャンセルボタンも見えてなかったので、強制終了させてしまったのですけどね。同じ状態が再現した人はウィンドウを拡大すればキャンセルボタンがあるので、それでキャンセルできます。

ところで、Timerダイアログの参考時間は使いやすいのだけど、英語版でもそこだけは日本語なんですよねぇ。さすがにすべて英語訳するのは大変そうですけど。

大雑把にですがコードは読んだので、何か機能思いついたらごそごそ入れていってみたいなと思います。

P.S.
どうやら、翻訳ファイルには艦名が入っている模様。Timer用の翻訳データに見えるけど・・・・。もう少し調査が必要そう。

2013年10月21日月曜日

OSC2013 Tokyo/FallにQtユーザー会として参加してきました

先週は、準備に追われていた隠者です。本日はちょっとお疲れモードです。

10/19(土)と10/20(日)の二日間に渡り、明星大学にてOpen Source Conference 2013 Tokyo/Fallが開催されました。隠者の参加するQtユーザー会もこちらに出典してきました。

展示内容は、実は12日に各自で作りましょうというおおざっぱな流れとなり、1週間で用意したものだったのですが、みんながんばったために、机に置ききれないという事態に。


iPad mini(iOS), iPod touch(iOS), Nexus7 (Android 4.3), Galaxy Nexus(JCROM 4.3), Galaxy Nexus(Ubuntu Phone?), Nexus7(Plasma Active), Armadillo 480(Linux) , Raspberry pi(Linux), あと機種をメモし忘れましたが、Android端末のほか、展示担当者が用意したPC等でQt/QMLを動かして展示していました。

20日の方は、QML本の折戸さんも名古屋から駆けつけてくださり、大切な自分のアカウントでログインして艦メモのデモを見せてくださいました。

「ぜ、絶対に出撃とか、資源使い尽くしたりとかやめてください」といいながら、はらはしつつずっと近くにいらっしゃいましたが・・・。

こちらの艦メモは、Qtに含まれるブラウザの機能で艦コレをプレイしながら、画面のキャプチャー画像をつけてTwitterにつぶやく機能付きの艦メモ専用ブラウザだそうです。実装は、Qt5のQtWidgetsとQMLのハイブリットだそうです。ソースコードもGithubで公開されています。



上記は隠者のAmazon アソシエイトのリンクですので、回避したい方は、Amazonで直接探してみてください。 「Qt Quickではじめるクロスプラットフォーム UIプログラミング」です。なお、達人出版会の方で、電子書籍版も販売されています。お値段的には、電子書籍の方が安いので、おすすめです。




一応、書籍もずらずら並べてみたりして、アピールしてみました。わずかでもQtに興味を持ってくださった方が居たらいいなぁ。

ちなみに、隠者は、勢いで展示用に購入したMacBookAir (2013)で、VMWare Fusionを使ってMac, Linux, Windowsでのデモ動作を展示してました。PCの方の展示は持ち回りで午前中だけだったりしたので、見れなかった人も多いかもしれませんが・・・。



蛇足ですが、20日は、Android ABC 2013a も重なっていて、そちらにも顔を出したかったのですが、片付けの都合もあって、残念ながら裏会のみの参加になってしまいました。裏会を見る限りかなりにぎわっていたので、盛り上がったのかな。

ABCに参加していなかったことと、最近はあまりAndroid側の活動をしていないので、はじっこの方で小さくなっておきました。とりあえず、知らない人も多かったので、フリーで撮って良しなかっしーだけ貼っておきます。


2013年10月16日水曜日

Qt5.2-alpha1 for iOS

先週土曜日にQtユーザー会の勉強会 #4 @東京に参加してきた隠者です。

既に残すところ1週間なのですが、来週の19日、20日に行われるOSC2013 Tokyo/Fall への出し物について 話し合いがもたれました。実は、参加自体は決定していたものの、のんびりまったりがモットー(?)の集まりですので、参加以外はほとんど決定してませんでした。

そんなわけで、分担を決めた結果、OSXやiPhoneユーザーの隠者は、iOS版について調査することになりました。というわけで、ちまちまやってみました。

まず、iOS版を使うには、iOS開発環境が必須となります。

用意するもの

  • XCodeの動作するMac OS X
  • XCodeのインストール
  • XCodeへのCommand Line Toolsのインストール
  • (ハードウェアで動かすには) Apple Developer Programへの登録(有償)
XCodeは、App Storeから無償で入手できます。
Command Line Toolsは、XCodeのメニューからPreference→Downloadsと選択していくと、一覧にあるので、そこからインストールしておいて下さい。


Build手順

現状ではシミュレータ版とハードウェア版でビルド手順が異なります。つまり2種類用意しておかなくてはならないようです。

Simulator版

1. Full Sourceコードの入手(5.2.0 Alpha1)
$ cd ~/
$ git clone git://gitorious.org/qt/qt5.git qt5-ios-sim
$ cd qt5-ios-sim
$ git checkout refs/tags/v5.2.0-alpha1
$ perl init-repository

2. qtbaseのビルド(ビルドは一部のみ)
$ cd ~/qt5-ios-sim/qtbase
$ ./configure -xplatform macx-ios-clang -developer-build -opensource -confirm-license -nomake examples -nomake tests -release -sdk iphonesimulator
$ make -j 4

3. (オプション) QtQuick 1.0用のビルド
$ cd ~/qt5-ios-sim/qtscript
$ ~/qt5-ios-sim/qtbase/bin/qmake
$ make -j 4
$ cd ~/qt5-ios-sim/qtquick1
$ ~/qt5-ios-sim/qtbase/bin/qmake
$ make -j 4

4. simple demoを使って動作検証
$ cd ~/
$ git clone git://github.com/msorvig/qt-ios-demo.git qt-ios-demo-sim
$ cd qt-ios-demo-sim
$ ~/qt5-ios-sim/qtbase/bin/qmake
$ open qt-ios-demo.xcodeproj

IOS版のアプリは、プロジェクトファイルをXCodeで起動してビルド・実行になります。



ちなみに、qtbase/examples/widgets/graphicsview/chip も4と同じようにqmakeしてXCodeで開くと、実行できました。




実機版

わざわざ分けましたけど、ほとんど変わりありません。自分で再現作業するときに楽なので分けただけです。変更点は色を変えています。

ただ、実機版で試すためには、Apple Developer Programを購入して、Appleの認証を受ける必要があります。証明書の取得、App IDの入手、実機の登録なども当然必要で、この辺りの手順は、各種書籍やWebサイトにHow To がありますので、そちらを参照して、まずは簡単なアプリの実機動作を確認しておいてください。

残念ながら、Qtはそこら辺りを省略したり、楽にしたりするものではありません。

1. Full Sourceコードの入手(5.2.0 Alpha1)
$ cd ~/
$ git clone git://gitorious.org/qt/qt5.git qt5-ios
$ cd qt5-ios
$ git checkout refs/tags/v5.2.0-alpha1
$ perl init-repository

2. qtbaseのビルド(ビルドは一部のみ)
$ cd ~/qt5-ios/qtbase
$ ./configure -xplatform macx-ios-clang -developer-build -opensource -confirm-license -nomake examples -nomake tests -release
$ make -j 4

3. (オプション) QtQuick 1.0用のビルド
$ cd ~/qt5-ios/qtscript
$ ~/qt5-ios/qtbase/bin/qmake
$ make -j 4
$ cd ~/qt5-ios/qtquick1
$ ~/qt5-ios/qtbase/bin/qmake
$ make -j 4

4. simple demoを使って動作検証
$ cd ~/
$ git clone git://github.com/msorvig/qt-ios-demo.git
$ cd qt-ios-demo
$ ~/qt5-ios/qtbase/bin/qmake
$ open qt-ios-demo.xcodeproj

これで、XCodeが起動しますので、実機で起動することになります。
iPad miniで動かすと以下のような感じになります。


ついでなので、実機でも4000 chipデモ

これらは、今週末のOSC2013 Tokyoにて展示しておきますので、興味があればお立ち寄り下さいませ。

2013年10月8日火曜日

QPlanetのコード公開そして後悔

ご無沙汰しておりました隠者です。

本当は勉強会参加直後にブログを書く予定だったのですが、ここ最近いろいろと立て続けにあった関係で、ずるずると先延ばしという相変わらずの恥ずかしい状況でしたが、寝付けないのを良いことに朝4時にこそこそ書いていたりします。

さて、名古屋の勉強会ネタにと調べ、そしてQtユーザー会@東京の1,2,3の時間を使ってこそこそやっておりました、QtでPlanetを作ってみよう計画は、一応いろいろと問題を残しながらある程度のところまできました。


本家の画像とスタイルを真似させていただいて、それらしい格好のページを作れるようにはなりました。

ソースコードも、中途半端で使い方とかビルド方法とかのドキュメントが全く用意できていないかなり恥ずかしい感じのコードなのですが、とりあえずgithubに登録しておきました。

そもそもが、Qtを使ってとは名ばかりで、ほとんどXQueryで書いています。
Qtには、QXmlPatternsというモジュールがあり、XQueryが使えるようになっているのですが、どうもいまいち何に使うのか謎が多く、今まで遠くから眺めていました。

でまぁ、ネタ的に利用してみたのですが、コレが使いにくい、使いにくい。
XQueryのコードは何とも気持ち悪い感じ(*個人的な感想です)になってしまいますし、おまけに、QXmlPatternsのよく落ちる事・・・。ちょっと変な事をすると、すぐにSIGSEGV。

bindVariable系は鬼門な感じで、思うように動作せず、結局いびつな感じの処理の仕方になっています。

RSSから必要なデータを抜き出してHTML化するわけなのですが、まぁ、XMLを扱う言語ですので、変換途中に、一部を除いてCharacter Referenceが扱えません。©とか出てくるとエラーになります。おまけに、RSSにはHTMLのタグが参照文字に置換されて配信されていたりするわけですが、この置換をQXmlPatternsの内部で処理できず、Qtのコード側にひっぱってきて変換をかけるという情けない感じになってしまいました。

Qt4.8とQt5.1で試しましたが、どちらも似たような感じで、この落ち方からすると、たぶん利用者は少ないのだろうなぁと感じています。

元Nokiaの某たすくさんには、この無駄な努力をかわいそうな人を見る目で見られるし、泣きながら作業する感じでしたね。

まぁ、隠者は不勉強で、XQuery自体を使うのが初めてだったせいもあるでしょう。がんがん使っている人がきちんと考えて書けば、もっときれいで、もっと効率的で、もっとすっきりと、QXmlPatternsでさっくり動くQuery文が書けるものだと信じたいところですが・・・・まぁ、はやらないのにはそれなりの理由があるんですかね。

無理にQXmlPatternsですべてやるという方針は捨てて、QXmlPatternsで必要な情報を拾い出す事だけに専念して、メインの変換処理は、すべてQtで実装さえすれば、たぶん1日かからずに終わったでしょうねぇ・・・とほほ。

公開しておいてなんですが、実はRSSに相対アドレスが埋め込まれていたりするものがあるので、この変換のためには、HTMLに変換した後で、src属性を修正しなくてはならないのですが、前述の通り、文字参照の扱いがQXmlPatterns内部では処理できず、かなりいただけない状況です。

時間ができたら、やっぱりXQueryをあきらめるという方針で作業してみようかなと思っています。

いや、XQueryでできるだろ!って人は是非直して見てください。

P.S.
いや、QXmlPatternsを直せよ!って心の声は聞かなかった事に・・・。