2014/12/31

2014年もいよいよ終わり・・・

ついに2014年も今日が最後。

今年もこのブログのエントリはあまり多くなかった(いろいろ忙しいかったのもあったけど)。ま、「はりきらない」コンセプトなのでこのぐらいでいいのかなw というワケで、毎年恒例の「まったく役に立たない」大晦日エントリだ。

「ちょっ とした出会い」から始まった出来事は丸4年を迎え、今年も一年プライベートでおいらを支えてくれた。すごく、感謝してる(去年も書いた)。仕事の方は、なんだか2回も渡米したりと妙なことになってるけど、まぁ、ぼちぼちやったかな。来年の特に4月ぐらいまではちょっとえらいことになりそうで今からげんなりしてるけど・・・

恒例の(?)今年のTweet数は8200ぐらい。なんか夏にえらくつぶやいてるけど、なんかあったかな??なんにしても今年もくだらないことを沢山吐き出したらしい。

買った端末はNexus 7(2013)とJollaかな。今年は思い切ってThinkPad X1 Carbonを買ったので、それ以上他に回せなかったってのもあるけど、去年同様少なめ。ただ、この年末に来てLumia 920のバイブレーションが逝ってしまわれて・・・とりあえず年明けにはLumia 930を買う予定。来年の夏前にはJolla Tabletが出るはずだけど・・・どうなるかなぁ?ちょっと買えないかも・・・

あと今年はちょっといつもと違う行動をしてみたな。
まずQt Developer Day in Tokyoに参加したこと。こういう類のイベントは90年代の終わりにLinux関係のイベントに行って以来だったけど、なんというか、話がすんなり理解できるレベルのバックグラウンドがないのが残念だったけど、とても楽しかった。
次に、Jolla向けにアプリを作った。リリース以来、トータルダウンロード数690、アクティブインストール数438って状況。一応、それなりにインストールされた形跡はあるけど、どのぐらい使われてるのかは解らない・・・。ただ、そーゆーところに何かをちゃんとアウトプットできたってのは、とりあえずの成果かな。
あとは、ちゃんとQtユーザー会に参加してAdvent Calendarに寄稿した。これもまぁ、いかにも素人っぽいモノではあったけど、穴をあけず期日も守ってアウトプットできたのはよかったのではなかろうか。

なんにしても、調子にのってはりきると途中で息切れして続かなくなるのがオチだから、これからもボチボチと継続していけたらいいな。

というワケで、例年通りの大晦日エントリなのだ。年もネット&リアル共にいろいろなヒトに支えられながらなんとか一年をのりこえた。それに感謝しつつ、去年と同じ台詞で締めくくろう。

今年も残りあと1時間半。
Twitterでフォローしてくれた方々も、この独り言にもなってない駄ブログを読んで下さってる方々も、今年一年ホントにありがとーございました。

2015年もまたはりきらない程度にやってくんで、よろしくお願いしますです。

2014/12/20

Jolla: 緊急セキュリティアップデート 1.1.1.27

昨日1.1.1.26がリリースされたばっかりだけど、今日またhotfixが配信されたっぽい。

[Release notes] Software version 1.1.1.27, Vaarainjärvi

詳細はリリースノートの原文で確認した方がいいと思うけど、昨日のアップデートでデバイスロックの解除コードに英数文字を使うことができるようになってたんだけど、どうやらその機能に問題がある、っていうコトみたい。で、ホリデーシーズンを考慮して、一旦この機能を外すことにしたらしい。

「英数文字を使ってるヒトは、一旦数字のみのロックに戻した上でこのhotfixを受け入れて、Update 11まで待っててくれないかな?」って言ってるのかな。たぶん。

ま、とりあえず削っても問題ない部分だったとはいえ、「2人のユーザから同じ報告を受けた」っていうところからこの対応までのスピード感は評価できるんじゃないかな。「あんなに確認したのに!」って悔しい想いもあるだろうけど。

つーワケで、おいらはhotfix適用完了済。

2014/12/19

Jolla: Firmware Update 1.1.1.26

11月48日付でUpdate 10がリリースされた ;-P

[Release notes] [ON HOLD] Software version 1.1.1.26, Vaarainjärvi

前回 Update 9 はOpt-In方式でベータ的な要素が強かったんだけど、今回はこれをふまえた正式リリースになった。正式リリースなので、もちろん、通常のアップデート操作でアップデートできる。
アップデート実施には1.5GB程の空きスペースが必要らしい。ま、コレにそんなにデータ詰め込んで持ち歩いてるヒト、日本には居ないかもだけど・・・
今回も変更内容が多すぎて全部は紹介できないから「リリースノート見てね」って事で(ぉぃ。

とりあえずアップデート後起動したところ、ロック画面が変化してた。一応落としたりなくしたりした時のためにPINロックをかけているんだけど、以前は緊急通報のボタンが下に出て「タップしてからダイアル」する感じだったと思ったんだけど、この画面からそのまま緊急通報できるようになったっぽい。
JollaのPINロックは5ケタ以上が必要なので、4桁目まであの赤い受話器が表示される。
5ケタ目を入力すると「PINロック用の入力」と判断して、赤い受話器が消えて右下に「Unlock」ボタンが表示される。なるほどね。まぁ、そんなに緊急通報することないとは思うけど、操作ステップが減るのはいいことだ。

あと気が付いたのは、マルチタスクで同時に10個以上のアプリは起動できない(古いものから死んでいく)ように見える。そもそも9個を超えた時点でタスク切り替えができないワケなので9個でもいい気がするんだけどね・・・

それからリリースノートを呼んでいたら、新たに「Sailfish Utilities」っていうJollaアプリがリリースされてた。いつもの「Jolla」カテゴリ内には表示されない(これ書いてる時点では)ので、"Utilities"とかで検索しないと出てこない。
インストール後、アプリのアイコンは出てこず、「設定」→「システム」に「Utilities」という項目ができる。
Dalvik VMの停止・再起動やNetwork Subsystemの再起動、バックアップやキャッシュのクリア等、いくつかのシステム周りの操作ができるようになるらしい。
まぁ、この辺りはほんの一部に過ぎない。

リリースノートを見ればわかる通り、大量の改良がくわえられているし、全体的にメモリハンドリングの効率化やCPUの負荷軽減をしているので、いろいろとレスポンスが良くなることが期待できる。
この先出てくるJolla TabletやSailfishOS 2.0に向けてがんばっているに違いない!!

ってことで、Jollaユーザの長い11月はこれでようやく終わった。
次のアップデートがいつになるかは判らないけど、もーそろそろIMAP Idleとかにも対応してほしいなーほしいなーほしいなー。

・・・ってことで、いつものように〆よう。

「Jollaがんばれ!!!」

2014/12/12

Jolla: Jolla向けアプリ「Qippis」に簡易カメラ機能を追加してみた。

この投稿は"Qt Advent Calendar 2014 - Qiita"の12日目(12/12分)の記事だ。

なんか他のメンバの記事のレベルが高くてアレだけど、とりあえず素人なりに素人っぽいものを書いてみる。Qtの話ってよりJollaの話っぽい感じがするけど、まぁ気にしない。


おいらはホビーヘッポコプログラマだけど、Jolla向けにQippisっていうアプリを作ってみた。
はりきらないひと: Jolla向けのアプリを作ってみた。
簡単に言うと、ビールデータベース"BreweryDB.com"のビューア。
ちゃんとストアで公開してるよ。
ソースはこの辺で公開してある。
http://git.qtquick.me/?p=sailfishos/qippis.git;a=tree
JollaはMeeGo由来の「SailfishOS」で動いていて、全面的にQtが採用されてて、UI周りや標準アプリの大部分がQtQuickで書かれている。あとUI作りを簡便化および一貫化するために"Sailfish Silica"っていうライブラリが用意されていて開発者向けにオープンにされている。

ここで告白すると、おいらはC++なプログラムが書けない(←威張って言うな!ww)。ということでQippisもsubmoduleのtwitter4qmlとそのつなぎ部分を除けば、ほぼQtQuickのみで書かれている。(twitter4qmlはおいらが作ったワケではないからノーカウントw)

ビバ QtQuick !

って事で、今回はQippisに新しい機能を付けた件について書いてみる。

○とりあえずJollaでカメラを使う

Qippisはビール情報をTwitterでシェアできるんだけど、飲んでるビール等の写真を添付するにはギャラリーから写真を選択するしかなかったので、撮影にはカメラアプリを別に起動する必要があった。

ホントはこーゆーのはQippisからカメラアプリを呼び出して・・・みたいな形が望ましいワケだけど、importできるモジュールに限りがあったりしてなかなか難しい(単なる勉強不足とも言う)。そんな中よく見たらQtMultimediaが使ってもいいモジュールのリストに入っていたので、自力で簡易的な撮影→投稿の機能を追加してみることにした。

まず、QtMultimediaを使ってカメラで写真を撮る時の基本的なコードは概ねこれだけ。
import QtQuick 2.0
import Sailfish.Silica 1.0
import QtMultimedia 5.0

Page {
    id: page

    Camera {
        id: camera
    }

    VideoOutput {
        anchors.fill: parent
        source: camera
        focus: visible
        MouseArea {
            anchors.fill: parent
            onClicked: camera.imageCapture.capture()
        }
    }
}
・・・たったこんだけ。
非常にシンプルでわかりやすい。ビューファインダーをタップすると写真が撮れる。撮った写真は端末のデフォルトの保存場所に落ちる。
Androidの場合はSailfish.Silicaの代わりにQtQuick.WindowをimportしてPage{}の代わりにWindow{}を使えばOK(あ、"visible: true"を入れないとダメかな)。WindowsPhone8.1は・・・今のところうまく動かせてない。5.4がリリースされたばかりなので、これからゆっくり確認してみるつもり。

ともあれQippisへの機能追加は、これをベースにした写真撮影用のページを一つ作り、保存された画像ファイルのパスをツイートのパラメータに取り込めば完了。

Σ(゜Д゜) スゲー簡単ジャン!!!

・・・とココまではサクサクだったのに、この後しばらく悩むことになる。

― 悩みその1:『保存される画像の向き』

Jollaのカメラのセンサーは端末の右側を上にして配置されてるっぽい。
つまり端末を左に90度回転させた横向きで写真を撮ると、ファインダーで見た通りの画像が保存される。

端末は基本縦持ちだし、アプリも縦画面のUIしか持ってないし、なによりビールの缶・ボトル・グラス・ジョッキは基本縦長なので、縦向きに撮影・保存したいのに、どうやっても向きが変わらない。

最初はカメラ側の機能で回転させて保存するんだとばかり思っていたから、あーでもないこーでもないといろいろ悩んでたんだけど、結局「画像を回転させて保存する」のではなく、『どっちが上か(撮影方向)の情報を画像ファイルに付与する』のが正解らしい。即ち、
camera.imageCapture.setMetadata("Orientation", 270)
ってな形でメタデータをセットしておけばいいらしい。

ホントは端末の向きに応じてメタデータをセットするのが正しいけど、今回qippisは縦持ち決め打ちすることにしたので、撮影用のページを呼び出した時点で270度に固定するよう設定した。

ちなみにSailfish.SilicaのOrientationは0-4の数値で管理してるっぽいけど、QtMultimediaのは90の倍数(0,90,180,270)で管理してるので、Silicaで得られる値をそのまま突っ込んではいけない。はず。

― 悩みその2:Jolla特有の問題(1)「onImageCapturedがCallされない」

Qtのドキュメントにあるサンプルコードの挙動がJollaとAndroidで違ったのでしばらく悩んでたんだけど、どうやらJollaではCamera.imageCapture.capture()を呼んでもonImageCapturedがうまくCallされない問題があるらしいことがわかった。そのせいでpreviewプロパティもちゃんとセットされないので、サンプルコードのようにpreviewをImage.sourceにツッコむこともできない。

ということで、撮影時にその場で撮ったものを確認するような機能を実装する時は、onImageSavedを使って保存済みの画像ファイルをImage.sourceに持ってく様にするといいっぽい(ってか、それしか手段がなさそうに見える)。
で、qippisはそういう風に実装したんだけど、ここで次の問題に遭遇する。

― 悩みその3:Jolla特有の問題(2)「Image{}でMetadetaのOrientationが反映されない?」

縦持ちで撮影して、ギャラリーで確認する時はちゃんと縦画像になっていて、Twitterに投稿した画像もちゃんと縦画像になっているにも関わらず、Image{}で表示させると横になってしまう・・・
・・・なんでやねん。

いろいろググってみたけど、「(Jollaで)そういう問題がある」ってことしか今のところ判らない。で、今回は上にも書いた通り縦画像で決め打ちだから、Image{}にrotation: 90を指定して無理やり回転させている。本当はメタデータを読みだして、データに合わせて回転させないとダメだけどさ。

― 悩みその4:実装上の問題「High Power Consumption」

とりあえずやりたいことはできるようになったのでJolla HarbourのQAにアプリを投げたら、「High Power Consumptionで受容不可」とのこと。どうやら撮影用のページを開いたままで端末がスリープに入るとmm-qcamera-daemonがアイドル状態にならず、結果としてqippisがActiveの状態を維持してしまうようで、「これだとバッテリのもちに影響しちゃう」ってことらしい。
JollaのQAのヒトはすごく親切で、状態の説明、確認方法(彼/彼女らがテストした方法)を詳しく解説してくれた上で、「I believe releasing the camera in this case can be a good solution to fix this issue.」というアドバイスをくれた。

なんとなく「スリープした時にcamera.stop()、復帰した時にcamera.start()」を呼べばいいというところまではピンと来たけど、肝心の「端末がスリープしてるかどうか」を知る方法が判らない・・・

悩んだ末、JollaのQRコードリーダーである"CodeReader"のソースを参考にさせてもらい、多分この辺だろうと思しきコードを貼り付けてみた。
Connections {
    target: Qt.application
    onActiveChanged: Qt.application.active ? camera.start() : camera.stop()
}
一応、回避できたっぽい感じだったので改めてsubmitしたところ、どうやらこれでOKっぽかった。
Jollaは意外にバッテリの持ちがいい印象なんだけど、こうやってアプリの電力的な挙動も一通り確認してあるんだね。

○そしてできたもの。

ってな感じで、最終的にできたのがコレ。


これを下のようにして呼び出して、tweet用のデータに組み込んでる。
var cameraPicker = pageStack.push(Qt.resolvedUrl("Camera.qml"));
cameraPicker.tookPictureChanged.connect(function() {
    _image = cameraPicker.tookPicture;
    media.push(_image);
});

正直なところ良く言えば「割り切って」、悪く言えば「手を抜いて」って感じではあるんだけど、今回はカメラアプリを作りたかったワケじゃないので、「キレイな写真が撮りたければカメラアプリ使ってね」ってことでOKにしてほしい(笑)

とりあえず「カメラで写真撮って画像ファイルを取得する」のに、へっぽこスキルでも80行強というわずかなコード量で書けているので、これはやはりQtQuickすごいよね(笑)

とゆーことで、Jolla用アプリにカメラ機能を追加してみた話はこれでおしまい。

○最後に

ま、コードの方は見る人が見れば「おまえそれはないだろう」的なものが多いだろうとは思うんだけど、「何かやってみたいけど素人だからなかなか手が出ない」ってヒトにとっては「この程度のスキルでもこのぐらいはやれる」っていういいサンプルになるんじゃなかろーか(ぉぃ

フレームワーク自体が便利なだけじゃなくてQtCreatorっていう強力なIDEもあるし、Qtのコミュニティはこんなレベルでもちゃんと歓迎してくれる温かい人たちで溢れているので、「これからプログラミングはじめます」ってヒトは是非とっかかりにQtを使う&日本Qtユーザー会に参加することおススメするのである。←それっぽく宣伝してみる

さて、肝心のアプリ、ホントなら「みなさんもちょっと試してみてね」って言いたいところなんだけど、残念ながらものすごくマイナーな環境なので簡単にはお試し頂けない。
大半のところはSailfishOS SDKでエミュレータを使えば体験できるけど、今回のカメラのところは実機じゃないと・・・
ってことで、Jollaのスマートフォンは今はかなり値下がりしてるし、来年5月にはタブレットも出るし、なによりQtでアプリを作りやすいから、みなさん1台ずつどうっすかね(笑)


2014/12/08

今年2度目の渡米

3月にテキサス州に行ったばっかなのに、今回はコネチカット州に行く羽目になった。
実は来月も渡米すんじゃないかって話が出ていてちょっとgkbr。

今回の渡米には、Nexus 7用として5月ぐらいにリプトン(@dollipton)さんに教えてもらったReadySIMを使ってココでネタにするつもりだったんだけど、11/09ぐらいに手配したものの未だに手元に来てない・・・オーダーが通ってから「完了(多分出荷?)」の表示になるまでに2週間もかかってたから、今週辺り届くのかもしれない。

現地で買うヒマはなさそうだしどうしたものかと思っていたんだけど、手元にAT&Tの未アクティベートSIMが一枚残ってたので、これをデータ専用プランでアクティベートして持って行った。

電話の方は今回もT-Mobileのプリぺを使ったんだけど、とりあえずJollaに挿してみたら対応Bandの関係で2G接続しかできなかったので、おとなしく国内メイン回線をJollaに挿し(データはローミングしないようにしておいた)T-MoのプリぺはLumia 920へ。
これやると日本に戻った時にテザリングできなくなるからアレなんだけど・・・

今回の目的地Guilford周辺は概ねHSPAかHSPA+、時々EDGEに落ちるって感じ。LTE接続できなかったのは多分Bandが合わないせいだよね?
とりあえず$3/dayなプランのままで
AT&T(Nexus 7)の方は、もともとSIMが3Gにしか対応してない(かなり昔買ったSIM)からHSPA止まりだった。
未だに海外でLTE体験したことないんだよねー・・・

前回は2泊4日だったけど、今回は4泊6日と結構長くて、時差調整的には悪くなかったけどやっぱり3日も出先に詰めて仕事すると疲れるね・・・
しかも今回はあまり飲めなかった(別に飲みに行ってるワケじゃないけど、周りが飲めない&飲まないヒトだらけだったから・・・)から、ちょっと消化不良(ぉぃ

とりあえず今回飲んだもので銘柄がはっきりしてるわりと現地っぽいビールはコレ。
"HARPOON IPA"

IBUは42ぐらいらしい。個人的にIPAの苦さはStone IPAとの比較になる(初めて飲んだIPAがそれだったから)から印象としてはそこまで苦くはないけど、なかなか美味しかった。

仕事の方は、まぁ、とりあえずやるだけやってきた。いろいろ予定外のこともあって消化不良な感じも否めないんだけど、一緒に行ったヒトがかなり頑張ったからそれなりの収穫はあったんじゃないかな。

とりあえず日曜の夕方に日本に戻って月曜の朝から出社してるというなかなかの社畜っぷりなんだけど、やっぱなんか頭のまわりにヴェールがかかってる感じで、通常の3割増しぐらいでぼーっとしてる。今日はテキトーに切り上げて早く寝たいと思う・・・ぐぅ