2015/12/31

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

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

毎年恒例の「まったく役に立たない」大晦日エントリだ。

まぁ、今年も今年でいろいろあった・・・
妙に海外出張が多い年でもあったな。1月、7月、12月と3度も出るハメになった。来年は大きな再編があるはずだから、果たしておいらは何をしていることだろうか・・・

恒例の(?)今年のTweet数はなんと年間10000ツイートを越えてた・・・何やってんだおれ(笑)。11月ぐらいにものすごい数つぶやいてるけど、なんかあったかな??なんにしても今年もくだらないことを沢山吐き出したらしい。

買った端末はLumia 930のみ。だと思う。他に何か買った覚えがない。あ、でも購入手続き的にはJolla Tabletを買ったはずだけどまだとd(ry
小物的にはPebble Timeを手に入れた。なかなか便利に使えている。

去年QtDDに参加したのに引き続き、今年もQt Japan Summitに参加してきた。参加したというか、今年はブースのお手伝いをしたよ(笑) なんかすごいゲームを作った高校生やPepper君と出会えて、楽しいイベントだったな。
でも去年Jolla向けにQippisをリリースしたのに比べると、今年はそーゆーのは全然できなかったな。ダラダラしてしまった。まぁ、はりきる必要はないのでボチボチやればいいんだけど、来年はもうちょっと何かできるといいな。
まぁ、なぜか「宴会部長」と呼ばれるようになってしまったのでちゃんと(1回だけだけど)宴会を企画もしたし、Qt Advent Calendar 2015はなんとか2枠埋めたし(相変わらずヘボいエントリだけど)、結局勉強会には一度も行けなかったけど、来年もボチボチ続けられるといいねぇ(笑)

あと、なんか今年はよく「人に会った」年だったかな。
Twitter上で長いこと知ってたけどリアルに会ったことがない人達に次々とエンカウントしていった感じ。関東近辺に住むようになって20年近く経つけど、リアル環境では会社の同僚以外にほぼ知人友人が居ない状態がずーっと続いてたから、ここ2~3年の環境変化はめざましいものがある(ぉ
なんにしても、こののんだくれのおっさんの飲みに付き合ってくださった方々、誠にありがとうございましたなのです m(_ _)m

というワケで、例年通りの大晦日エントリなのだ。今年一年支えてくれたいろんな人達に感謝しつつ、いつも通りの言葉で締めくくろう。

今年も残りあと2時間ほど。

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

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

2015/12/28

Jolla: 日本語のフリック入力

Jolla Phoneの日本語入力環境としてはかなり初期の頃から「Behold」さんがローマ字入力で実現されていて、OpenRepos.netでjolla-anthy-jpという名前でパッケージ配布している。
OpenReposで配布されているパッケージはWareHouse for SailfishOS経由でインストール&パッケージ管理できるってこともあって、ワリと簡単に導入できるワケなんだけど、特に電車の中とか片手で操作したい時にローマ字入力ってのはツラかったりするので、メールやSNS等で日本語テキストを入力するようなケースではやっぱり他の端末を使うケースが多かったりした。

そんな時、今年の夏ぐらいに「どうやら誰かフリック入力を実現させたらしいよ」という話をJolla Phone保持者が4名も集まった某所での飲みの席で知り、ちょこっと調べてみたところ「sleepsounds」さんという方が書かれたものであることを知った。Beholdさんはどこの人だかも知らないんだけど、sleepsoundsさんはどうやら日本の方らしいね。
残念ながらインストール可能なパッケージでの配布はされてないっぽいので、Githubのリポジトリからgit cloneするか上のリンク先の右上にある「Download ZIP」で落として来て、手作業でファイルをコピーするしかなさそう。

以下、簡単に中身を紹介してみるんだけど(まぁJolla Phone使ってるようなヒトには「釈迦に説法」だけど)自分で試す時は自己責任でよろしくね(はーと
  1. Beholdさんの"jolla-anthy-jp"を導入しておく。(WareHouse for SailfishOS経由でインストールするのが楽かな)
  2. githubのページからjolla-kbd-flick-jpをJollaのブラウザで直接ダウンロードするか、母艦のPCでZIPを落としてきてJollaにコピーする。
  3. デベロッパーモードで母艦からsshするか、Terminalアプリを立ち上げるかする。
  4. cd Download ※とか、とにかくzipファイルをコピーした場所にcdする。
  5. unzip jolla-kbd-flick-jp-master.zip
  6. cd jolla-kbd-flick-jp-master/src
  7. devel-su
  8. cp -R * /usr/share/maliit/plugins/com/jolla/
  9. cd /usr/share/maliit/plugins/com/jolla
  10. mv KeyboardBase.qml KeyboardBase_Original.qml
  11. ln -s KeyboardBase_Flick.qml KeyboardBase.qml
だいたいこんな感じだろうか。
要は、単純にコピーしてくるだけじゃなくて、KeyboardBase.qmlを置き換えなきゃいけないってのがポイントだ。
あとは「設定→テキスト入力→キーボード」から「日本語(フリック)」をアクティブにしておこう。
多分、再起動しなくてもイケたと思う。
ポップアップ表示はPopperを使っているので、ガイド的な表示ではなく単純にフリックした時に入力される文字が表示される(←SailfishOS 2.0になった時にPopperの仕様が変わったとの事で、2015/12/28時点ではここの文字は変化しなくなっている。が、既に@sleepsoundsさんの手元では修正済みらしく、そう遠くないうちに修正版が公開される模様)。

とりあえず5日間程使ってみたワケだけど、フリックの感度は悪くない気がする。キーレイアウトはWindowsPhoneを参考にしたとどこかで読んだ気がするけど、特に左にある英数の切り替えのところはまんま再現できていて、Lumiaと操作を往復するおいらにとっては非常にありがたい。
ただ、現状リアル端末上では左下の「日」をタップすると即qwertyに移動してしまうため、スペースを入力することができない・・・でもエミュレータで試すとちゃんと入力できるんだよねぇ・・・なぜじゃ??
もうちょいよく調べてみよう・・・

オリジナルのKeyboardBase.qmlを置き換えるのがちょっと難点という話ではあるけど、rpmパッケージ作ってインストール時に置き換え、アンインストール時に書き戻しって出来る気がするから、パッケージ化すると利用者増えるかな?←増えるっつったってそもそも日本のJolla Phoneユーザの数が知れてるだろ・・・

なんにしても、とてもありがたい感じだ。
Jollaを日本語でガシガシ使いたいなら、作者の@sleepsoundsさんに感謝しつつ入れてみるといいと思うよ。

2015/12/17

【一夜漬け】Twitter4QMLを使ってみようか。

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

みんながんばって(何人かの人は複数エントリ書いて)つなげているQt Advent Calendar 2015、あと一日ぽっかり空いていたので、とりあえず急造で書いてみる。
まぁ、12日目の記事だって急造だったワケだし、正直おいらみたいなヘッポコにクオリティの高いテクニカルなエントリを求めること自体も間違っているワケなので(ぉぃ)、身の丈っぽいヤツでなんとか一日埋めてみようという試みだ。

Twitter4QMLとは
2014年のQtチャンピオンであるたすくさんが多分2011年ぐらいに作った、QML/QtQuickで使えるTwitterAPIのWrapper・・・なのかな。Android界隈だとTwitter4Jってのがあるけど、アレのQt版みたいな感じと言えばいいのか。


○使うための準備(Linux)
まずソースコードを取り寄せる。ソースは日本Qtユーザー会のgitサーバで公開してあるので、そこからgitコマンドで取り寄せよう。あとは、まぁ、Qt使いのみなさんにとってはお馴染みのコマンドじゃないかな。
$ git clone git://git.qt-users.jp/codereview/twitter4qml.git
$ mkdir build
$ cd build
$ qmake -r ../twitter4qml
$ make
$ sudo make install
基本、Qt5系で使うのかなと思うけど、確か(まだ)Qt4系でもビルドできたんじゃなかったかな。
Windowsとかであれば理音伊織(あやねいおり)大先生の「艦娘メモリーズ」のビルド方法の記載を参考にすればいいはず。とりあえずインストールしてしまえばQtQuick/QMLのコードから"import TwitterAPI 1.1"すれば一通りの機能が使える。

あと、多分、基本的にはQMLで使うのが正しいんだと思うけど、もちろんC++なコードからも使える。使えるんだけどおいらには使い方がよく分からない。なぜなら基本的にC++なコードを書くスキルがないからだ。
というワケでC++から使ってみたいっていうヒトも、多分理音伊織大先生の「艦娘メモリーズ」のコードとかが参考になったりすると思う。


○とりあえず使ってみる。
とりあえずいきなりタイムラインを表示するコードを書いてみる。
import QtQuick 2.3
import QtQuick.Window 2.2
import TwitterAPI 1.1

Window {
    visible: true

    width: 480
    height: 640

    OAuth {
        id: oauth
        consumer_key: 'hogehoge'
        consumer_secret: 'fugafuga'
        token: 'hogefuga'
        token_secret: 'fugahoge'
        user_id: 'xxxxxxxx'
        screen_name: 'zzzzzzzz'
    }

    StatusesHomeTimelineModel {
        id: model
    }

    ListView {
        id: view
        anchors.fill: parent
        model: model
        delegate: Rectangle {
            width: parent.width
            height: status_text.height < 64 ? 64 : status_text.height
            border.width: 1
            Row {
                anchors.fill: parent
                Image {
                    id: icon
                    width: 64
                    height: 64
                    source: model.user.profile_image_url
                }
                Column {
                    id: status_text
                    width: parent.width - 64
                    height: name.contentHeight + tweet.contentHeight
                    Text {
                        id: name
                        width: parent.width
                        text: "@%1".arg(model.user.screen_name)
                    }
                    Text {
                        id: tweet
                        width: parent.width
                        text: model.plain_text
                        wrapMode: Text.Wrap
                    }
                }
            }
        }
    }
}
簡単に見えるじゃん?
OAuth{}で認証情報渡して、StatusesHomeTimeline{}を定義しただけ。それだけでとりあえずタイムラインは取得できる。

StatusesHomeTimelineは見た通り"GET statuses/home_timeline"のAPIを叩くためのもので、他のエレメントも原則APIの名前をそのまま使っている。

例えば"GET statuses/mentions_timeline"でMentionのタイムラインを取得するのであればStatusesHomeTimeline{}をStatusesMentionsTimelineModel{}に変更すればいいって感じ。

もちろん、実際のクライアント作る時はもうちょい複雑な制御が必要(タイムラインの後進とか、過去のタイムラインを遡って取得するとか)だけど、その時も各APIで使うパラメータは基本そのままの名前でプロパティが定義してあるので、APIのドキュメントを読んでそのままコードに落とせる感じ。


○認証するには
Twitterの認証にはOAuthが必要なんだけど、これに対してOAuth{}ってのが用意されてる。
OAuth {
    id: oauth
    consumer_key: 'hogehoge'
    consumer_secret: 'fugafuga'
}
未認証状態だとoauth.stateが"0"になっている。多分、このステータスをトリガにして下の順番でコマンドを呼べば認証ができる。
  1. "oauth.state == 0"→oauth.request_token()を呼ぶと、デフォルトブラウザ経由でtwitter.comの認証画面が現れる。
  2. 認証して返ってきたpinをoauth.access_token(pin)の形で渡す。→oauth.statusに"2"がセットされる。
  3. "oauth.state == 2"→oauth.authorize()を呼ぶ。oauth.stateに"5"がセットされる。→認証完了
だいたいこんな感じだろうか。


○呟いてみる
最低限テキストを呟くコードはこうなる。
import QtQuick 2.3
import QtQuick.Controls 1.2
import TwitterAPI 1.1

ApplicationWindow {
    id: tweet

    Status { id: testStatus }

    Column {
        Text {
            text: oauth.screen_name
        }
        TextInput {
            id: tweet_text
            text: "Test"
        }
        Text {
            text: "OK"
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    var parameter = {'status': tweet_text.text}
                    testStatus.statusesUpdate(parameter)
                }
            }
        }
    }

}
内部的には命名規則通り"POST statuses/update"にあたるStatusesUpdateが用意されてはいるんだけど、この辺りはクライアントからの取扱いを楽にするためにStatus{}というエレメントが用意されている。
ツイート関連のパラメータをリストにしてStatuses.statusesUpdate()に渡すんだけど、上のように"status"だけが設定されると"statuses/update"が、一緒に"media"を設定すると"statuses/update_with_media"が、Status内部で自動的に判定されて使用(ツイート)されるようになってる。


○という事で・・・
なんかダラダラとまとまりがなく、しかも文面は解りづらいっぽいんだけど、要はTwitter4QML便利だよって話になるのかな。

あと、Twitter4QML自体もそうだし、10日目のエントリ「Qtユーザ会のご紹介」のところでチラっと紹介されている"Silk"もそうなんだけど、これらはQtライブラリを活用して作られてるってこと。
もともとQtはGUIのためのフレームワーク(ってコトで合ってるよね?)なワケなんだけど、このGUIを支える部分のクラスにはGUIを使わないプログラムの開発においても便利なものが沢山含まれていることを示してる。

とゆーワケで、QtライブラリはGUIの分野以外でも活躍してる(できる)んだよという(カレンダーのエントリー的には)「釈迦に説法」っぽい一言を添えてヘッポコなエントリをクローズしたいと思うのだ。
時間がないのとか文章まとめるのが苦手とかで紹介しきれてないけど、どこかで余裕ができたらQMLのサンプルコードみたいなのをアップできるといいな。→できるのか?>おれ

2015/12/12

Jolla: 【一夜漬け】"QtPositioning"を使って現在地周辺地図を表示させてみた

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

なんか他のメンバの記事のレベルが去年にも増して高くて、正直こんなネタの記事を混ぜていいもんか不安になるレベルだけど、逆に記事書くのを躊躇してたけどコレ見て「あぁ、こんなんで許されるんだ」と思ったヒトが居たら、ぜひ空いてる日にエントリして参戦して欲しい。Qtユーザ会宴会部長(名義)からのお願いだ(何

正直相変わらずQtの話ってよりJollaの話っなんだけど、まぁ気にしないで欲しい。

今年はコードを書くという面においてはほとんど何もアウトプットが出せていないのでギリギリまでネタに悩んだんだけど、とりあえず「一夜漬け」でQtPositioningを使ってJollaに現在地周辺の地図を表示させるという、ただそれだけのサンプルを書いてみることにした。

QtPositioningはその名の通りデバイスの位置情報を扱うもので、Android、iOS、Linux(GeoClue)、WinRT(Windows Mobile ?)でサポートされているらしい。もちろん、Jollaで使える。

というコトで早速コードを書いてみる。
import QtQuick 2.0
import Sailfish.Silica 1.0
import QtPositioning 5.3
import QtWebKit 3.0

Page {
    id: page

    PageHeader {
        title: "QtPositioning"
    }

    PositionSource {
        id: posSource
        updateInterval: 30000
        active: true
        onPositionChanged: {
            var pos = posSource.position.coordinate
            webView.url = "https://www.google.co.jp/maps/@%1,%2,17z".arg(pos.latitude).arg(pos.longitude)
            posData.text = "Latitude: %1\nLongitude: %2".arg(pos.latitude).arg(pos.longitude)
        }
    }

    WebView {
        id: webView
        width: 480
        height: 640
        anchors.centerIn: parent
    }

    Text {
        id: posData
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 20
        color: Theme.secondaryHighlightColor
        font.pixelSize: Theme.fontSizeExtraLarge
    }

    Connections {
        target: Qt.application
        onActiveChanged: Qt.application.active ? posSource.active = true : posSource.active = false
    }
}
だいたいこんな感じ。雑なコードだけど、相変わらず恐ろしく簡単に使えるQtQuick/Qmlすごい。
基本的には「QtPositioning」をimportしてPositionSource{}を定義しておくだけ。
最低限、updateIntervalを設定し、activeをtrueにするぐらいで緯度と経度が取得できる。
厳密にはGPSベースの測位を優先するかどうか(preferredPositioningMethods)等の設定ができるけど、概ねデフォルトのままで使える。
positionが変わったら新たに取得した緯度・経度をGoogle MapのURLにしてWebView{}に渡す。と、そのpositionを中心にしたマップが表示される。今回のサンプルアプリはAPIを介したアクセスではなくページごと取得しなおしてるので、高頻度な更新を避けるためupdateIntervalを30秒(30000mSec)にしてみた。

一番下のConnections{}は前回Qippisにカメラ機能を追加した時にも活躍した「おまじない」。Jollaがスリープした時にGPSを動かしっぱなしにして電池消耗させないためのもの。なんだけど、method見る限りこれはstart()/stop()を使うべきなのかな・・・?

ちなみにAndroidだとこんな感じ。
import QtQuick 2.3
import QtQuick.Window 2.2
import QtPositioning 5.3
import QtWebView 1.0

Window {
    visible: true

    PositionSource {
        id: posSource
        updateInterval: 30000
        active: true
        onPositionChanged: {
            var pos = posSource.position.coordinate
            webView.url = "https://www.google.co.jp/maps/@%1,%2,17z".arg(pos.latitude).arg(pos.longitude)
            posData.text = "Latitude: %1\nLongitude: %2".arg(pos.latitude).arg(pos.longitude)
        }
    }

    WebView {
        id: webView
        width: 480
        height: 640
        anchors.centerIn: parent
    }

    Text {
        id: posData
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 20
        color: Theme.secondaryHighlightColor
        font.pixelSize: Theme.fontSizeExtraLarge
    }

    Connections {
        target: Qt.application
        onActiveChanged: Qt.application.active ? posSource.active = true : posSource.active = false
    }
}
変えたのは以下の通り。

  • "Sailfish.Silica" → "QtQuick.Window"
  • "QtWebKit 3.0"→"QtWebView 1.0"
  • "Page{}" → "Window{}"
  • "visible: true"を追加
  • PageHeader{}を削除

たったこれだけの変更でとりあえず動く。
地図のサイズが小っちゃくなっちゃってるけど、これはWebViewのサイズを画面サイズとの相対値にしておけば労せず同じような見栄えにできるはず。すばらしいね!


もちろん、実際コレで何かアプリを作るならばこの取得した位置情報で何をするのかってコトの方が重要なワケだけど、すくなくとも位置情報の取得のためにアレコレ細かいコード書かなくてすむQtQuick/Qmlサイコー。

ってコトで、去年のカメラにしても今年の位置情報にしてもそれ自体を使うためのコードは最低限で済むワケなので、みんないっぱいQtでアプリ書いてみるといいと思うよ。

2015/12/08

オーストラリア


オーストラリア(メルボルン)に行ってきた!
・・・・・仕事で orz.....

南半球で季節が逆ってことだからいろいろ服装的な部分を心配したワケだけど、途中経由したブリスベンは結構蒸し暑かったのに、最終地点のメルボルンは・・・寒かった(゜Д゜)!!
ブリスベンからは国内線だったんだけど、空港は国内線ロビーと国際線ロビーが隣接しているので、プリペイドSIMを買うために国際線到着ロビーの方へ移動する・・・

・・・あった!OPTUSのショップ!
国際線のロビーって事であたりまえのように旅行客が沢山SIMを買いに来るワケで、それ用のプランが掲げてあるし店員さんもずいぶん手慣れてる。

基本的に通話も含めた短期のプリペイドのプランは、通話&SMS無制限、データ通信500MB/日で$2/日。なかなかお手頃でいいプランだね。

カウンターで「プリペイドSIMください」とお願いするとまず「何日間いるの?」と聞かれる。今回は4日間だったんだけど、最短(最安)のは5日分$10なので「じゃあコレね!」と言われる。
あとはパスポートの提示と宿泊先の住所を登録してもらって、無事購入完了。
SIMはこんな感じ。
ミニ、マイクロ、ナノの全サイズをカバーしてるSIM。

OPTUSは3G:B1,B8、LTE:B1,B3,B7,B28と使えるっぽいって話だったので、今回はJollaに挿しておいた。
4Gもバッチリね。テザリングもできてた。
500MB/日と結構余裕あるプランだったしJollaでのテザリングもできてたので、今回SIMはこれ一枚にしてLumia 930とNexus 7はWiFiテザリングで4日間を過ごした。
Nexus 7だけだったらBTテザリングで良かったかな・・・直接Lumiaに挿して運用しても良かったかもしれないけど、まぁ今回はコレで。

日本のプリペイドもこういうプランが欲しいよねぇ。
旅行者用にもそうだし、何かで1週間だけ携帯電話使いたい(与えたい)みたいなニーズってあるような気がしなくもないけど、どうなんだろう??

ま、とにかくOPTUSのプリぺSIMは安くて便利でした。ちゃんちゃん。

2015/10/29

バッテリ単体チャージャー

主にJolla用のバッテリを充電するために(というか、一緒に持ち歩いてるLumia 930、Nexus 7はバッテリが取り外せない)に、この間エントリ書いた「代替バッテリ」と一緒に購入させてもらった。
バッテリの電極が付いてる面に対して幅が42~70mmまでのバッテリが単体で充電できる。(小さすぎてもダメよん)

電極の位置調整もできるので、かなり多様なバッテリに対応できそう。

サイドにUSBポートが一つ付いていて、バッテリを単体で充電しながら本体(に入ってるバッテリ)そのものも充電できるようになってる。っぽい。

まぁ、だいたいこんな感じでセットする。

電極位置を合わせておいて、右側に見える板をスライドして開き、電極部が十分接触するように押し込んで板を離す(挟み込んで固定する)。

充電中は右下に見えるインジケータがピンク色に光り、完了すると青くなる。2100mAhだと1~2時間ぐらいで充電完了する感じかな?(計ってないけど、会議前に充電初めて会議後には終わってた)

今のところ他の端末に使う予定がない(電池交換できないやつばっか)けど、結構良さそうな感じ。
問題はバッテリの方かな。裸で持って歩くとどこでショートするか解らないから、バッテリ持ち歩くためのケースが欲しい感じ。
なかいーのないかなーw

2015/10/23

Jolla: Firmware Update 2.0.0.10 (Early access release)

ついに本格的にSailfishOS 2.0が来た。

アップデート前の調整のために一旦1.1.9.30にアップデートする必要があるらしい。
(まぁ、ちゃんと順番にアップデートが配信されるので心配はない)
[release notes] 1.1.9/Eineheminlampi [released]

その後、2.0.0.10のアップデートが来る。
[release notes] 2.0.0/Saimaa [early access]

これで名実ともに晴れて"SailfishOS 2.0"と言えるワケだ。

今回も変更が沢山あって紹介しきれない訳だけど、とりあえずTwitterやFacebookの通知やタイムラインのイベントビューへの表示辺りの機能が復活した。

今まで設定アプリの起動画面にあった「ショートカット」がイベントビューからのプルダウンメニューに表示されるようになった。WLANの切り替えとかするのに便利になった(まぁ、他のOSはみんなできてることではあるんだけど・・・)
このメニューに何を表示させておくかは、設定で変更可能。

上のアイコン類は「設定」→「イベント」→「ショートカット設定」から設定できる。

下のアクションは「設定」→「イベント」→「クイックアクション」のところで設定できる。

基本的には決められたアクションを設定できるだけなので、あまりカスタムな設定はできない。(まぁ、そういうカスタムメニューを追加するアプリがそのうち出て来るんじゃないかなーとも思うけど。)

他にもいろいろ改善点があるけど、まぁ細かいことはリリースノートを見てくれ(ぉ
これで後は年末に来る予定のJolla Tabletを待つばかり・・・
その前にQippisのTablet版を作るべきか・・・
さてさて・・・

2015/10/15

Jolla: TOHKBDのリペアパーツ

TOHKDBのBACKERへの出荷作業等が完了したらしく、KICKSTARTERの「閉会宣言(?)」が出された。

TOHKBD — The Other Half Keyboard for your Jolla : Closing statements

コメント欄に「受け取ったんだけど、ちゃんと動かないんだよねー」みたいな話があったりして、アフター的な部分はまだしばらく対応することになるのかな。でも初期不良への対応は悪くないみたいで、じみにーさんのブログによるとかなり気持ちよく対応してくれるらしい。

jimixi blog : 帰ってきたTOHKBD

で、このクロージング宣言でFuncky Other Halfからリペアパーツが販売されることが発表された。

Funcky Other Half

バックカバー側は基盤がはめ込んであるだけだからパーツがあればリペアは難しくないように思うけど、キーボード側のリペアは・・・あれかな?バックプレートを外すと作業できるようになってるのかな?

Jolla Phone本体自体があとどれだけの間使えるのか(OSのアップデートが継続されるのか)わからないけど、TOHKBD自体を(ハード的に)使い続けるための環境はそれなりに準備されたってことなのかな。なかなかにすばらしいことである。←えらそう

2015/10/07

Nexus 7(2013): マシュマロ

Nexus 7 (2013)向けのAndroid 6.0 (MRA58K)のイメージが公開されたっぽい。
Factory Images for Nexus Devices - Google Developers
LTE版Nexus 7 (razorg) のイメージは、これまではいつも最後の最後に出てくる「周回遅れ」的な感じがあったんだけど、今回は速攻で出て来た。
2012年版(nakasi/nakasig)がアップデート対象から外れたりしてるから、2013年版の作業が少し早くなったりしたんだろうか??

とりあえずいつもお世話になってる下のサイトから、OTA用の差分ファイルを落としてくる。
NEXUS 7 (2013) FIRMWARE – RAZORG
今回は"MRA58K from LMY48P"って奴だな。
おおざっぱな手順的には

  1. 母艦(PC)でダウンロードする。
  2. 端末をリカバリモードで起動する。
  3. 電源ボタンを押しながらボリュームUpボタンを押してメニューを出す。
  4. "Apply update from ADB"を選択する。
  5. 母艦にUSB接続する。
  6. 母艦の方で"adb sideload C:\hogehoge\fugafuga\name-of-update-file.zip"みたいな感じでコマンド実行。ひたすら待つ。
  7. 終わったら念のためキャッシュをクリア
  8. 端末を再起動。USBケーブルを外す。

みたいな感じだろうか。
ま、Unlockも必要ないし比較的安全・無難な手段なんだけど、やるときは自己責任でお願いねw

起動画面がまたなんかポップな感じになってて悪くはない。

とりあえずシステム情報。
何がどの程度変わったのか全然チェックしてないけど、無事にアップデート完了してるっぽい。
変更・追加された機能の内容は下のサイトが詳しい(ひとまかせ)。
Android 6.0 Marshmallow(マシュマロ)の新機能・変更点・使い方まとめ。
なんか一部アプリがうまく動かない(端末にメインアカウントでログインしなおせとかワケの解らないことを言われる。端末にアカウントは一つしか登録してないのに・・・)んだけど、概ねちゃんと動いてる。極端に重いとか遅いとかはないんだけど、そもそもNexus 7 (2013)はタッチパネルに難があって時々使い辛い(そしてこれは今回も完全には直っていないハード的なもんなんだろうから仕方ないけど・・・)。

あとは上の記事を見ながらボチボチ使っていくことにする。

でもそろそろタブレットを更新したいなぁ・・・
Jolla Tabletが来る予定だけど3G/LTEは非対応だし、ZenPad 8.0買おうかと真剣に悩んだりはしたけどどっちかと言えば新しいNexus 7が出てくれないかなと思う今日このごろ。

2015/09/29

Jolla: 代替バッテリ

Jollaのスペアバッテリの件は、目にする限りそれなりに多くの要望が上がっているにもかかわらず対応されてないものの一つだ。
Jolla Phoneの発売開始は2013年11月末だったはずだから、もうまもなく2年が経過しようとしてるワケで、バッテリがヘタって来てるユーザーも多いはず。
コミュニティでも去年「代替バッテリ」の議論がされていた。
Compatible spare battery
つたない記憶では2014年12月に少量の純正バッテリがJolla Shopで売られてたはずなんだけど、あいかわらず日本には送ってくれない上ホントにごく少量だったらしくすぐに売り切れてしまった。
以後、オフィシャルに純正スペアバッテリがリリースされる気配はない。

ってコトで、ある日「有志で動作確認したバッテリあるんだけど、共同購入しない?」というお誘いを受けたので買ってみることにした。

とりあえず紹介はするんだけど、試してみたい人は自己責任でおねがいね(はーと)。
コミュニティの代替バッテリの話題に対して、Jollaとしては(ごくあたりまえの話だけど)「代替バッテリの件はサポートできないし、それで何かあっても保証はできないよ」と言ってるのでそのつもりで。

で、いろんな人の手を通ってとりあえずバッテリが手元に届いた。
今回チョイスされたバッテリは"CS-HTD310XL"で、もともとはHTC Desire 310用の互換バッテリ。(純正は公称2000mAhなので、ちょっと大きめらしい。
とりあえず開封してみる。
バッテリ以外にシールと取説。シールは右側の縦になってるところあたりだけ粘着するようになってて、おそらくバッテリの出し入れをしやすくするために使うといいよ的なものだとおもわれる。

で、純正バッテリと並べてみる。
概ね一致なんだけど、微妙に寸法が違う。ノギスで計ってみた。
純正バッテリ(22B50): 63.6 x 50.5 x 5.2 [mm] 
代替バッテリ(B0PA2100): 63.1 x 50.2 x 5.2 [mm]
場所によって数値がバラつく(特に代替バッテリはちょっと加工精度が甘いんじゃないのか?って思うレベル。使う分には問題なさそうだけど)ので、上の値は「だいたい」の寸法。
厚みは概ね同じなんだけど、幅が0.2~0.4mm程、高さが0.4~0.6mm程小さい。

そのままはめ込むと、ちょっとスカスカな感じで電極部の接触が甘い感じ。
純正だとこうなる。
んー・・・写真で見ると解りづらいな(笑)

寸法差的には0.3~0.5mmぐらいのスペーサーを噛ませばOKな感じ。
フツーの紙なら2回折って(4枚ぐらいにして)挟めばバッチリなんじゃなかろうか。
見た目からは別に0.5mmまで入れなくても大丈夫そうだから、ちょっと厚めの紙とかでもいいんじゃないかな。

ってことで、実際動かしてみる。
ポストイットの端っこをちょっと畳んでバッテリの電極と反対側のところに突っ込む。(電極側に突っ込んじゃダメよ。多分、接触不良起こすから(笑))
普段、そんなに出し入れするもんじゃない気もするからこのまま使っても問題ないんだけど、バッテリ2個持ちとかにしてそれなりの頻度で交換することを前提にするなら0.4mmぐらいのシートを貼り付けた方がいいかなーと思ってる。

充電しながらの数字だけど、CSD Toolでのバッテリテストの結果。
ま、問題なく動いていそうな感じ。

とりあえず2個入手したので、まだしばらくJolla Phoneには頑張ってもらえるかな。

2015/09/12

Jolla: SailfishOS 2.0の主な「ユーザビリティ」の変更点

前のエントリで「他の変更点はリリースノート見てね」とは書いたんだけど、そのリリースノートの中に使い勝手の面で1.1.7から大きく変わった点が紹介されてたので、簡単に紹介してみる。
  1. タスクリストに実行中のアプリを9つ以上表示できるようになった。
  2. ホームスクリーン上に表示されていた4つのアプリアイコンがなくなった。アプリランチャーはどの画面からも下からスワイプして出せるようになった。
  3. タスクリストに表示されている起動中アプリは、起動した順に並ぶ。で、並べ替えができる。
  4. メモリ不足で落とされたアプリは、タスクリスト上で表示が暗くなる(消されない)。
  5. タスクリストのカバーからのアクションはタップに変更。スワイプはホーム画面と通知画面の切り替えに使うことになった。
  6. ブラウザ、電話、時計、メールのカバー表示は1つに制限された(たとえばブラウザはタブ毎に表示されていた)
  7. サイレントモードにするには上からスワイプして「サイレント・アンビエンス」をアクティベートする。
  8. 全てのシステム音をOFFにするには、ボリュームダウンボタンを長押しする。
  9. プレゼンスの設定はイベント画面のプルダウンメニューから設定>システム>プレゼンスに移動
  10. アンビエンスの管理もギャラリーアプリから設定>システム>アンビエンスに移動
  11. FacebookやTwitterのフィードのサポートは一時的に使用不可(次のリリースで再導入される予定)
  12. SMSとインスタントメッセージの通知は同じアイコンになった
  13. プラットホームを横断するフリックのスピードが早くなった
  14. 古い(おそらく1.1.7以前向けの)アンビエンスは今後のアップデートで削除される予定。
1は前のエントリに書いた通り、画面構成を変えたことでタスクリストの画面を縦に伸ばせるようになったからだ。
あと、Jollaのタスクリストはあの画面上でも一部アプリの出力が見られたり簡単な操作ができたりするので、3のタスクの並べ替えはもしかしたら有難いものになり得るかも。4は勝手に落とされたアプリの再起動が楽になるよってことで便利なんだけど、個人的にはそうやって残すのと殺されたら消すのを切り替えできるといいのになと思ったりもする(なんとなくね)。
もう一つ関連する項目として5がある。旧UIは各タスクの操作をスワイプで行っていたんだけど、横スワイプで通知画面と往復する仕様にしちゃったから、まぁ多分やむを得ずタップにしたんじゃないかな。Phoneの画面だと若干辛くはあるんだけど、まぁしかたない。

あと、個人的にちょっと迷ったのが7だった。
旧UIでは(設定にも寄るけど)ホーム画面上で画面上端からスワイプするとスリープにすることができたんだけど、今回からこんな画面が出てくる。
一番上の鍵マークをタップするとスリープ(ロック)できる(つまり「タップする」というアクションが追加された)。
アクションが増えてめんどくさいなーと思ったのと、アンビエンスなんてそんな頻繁に変更するもんじゃないだろうになんでこんなところに切り替えを持ってきたんだろう??と思ってた。
一方、ロック画面からのプルダウンメニューから「サイレントモード」が消えてしまっていて、「あれぇ?サイレントモードにするにはどうしたらいいんだ???」ってなってた。

で、よくよく見てみたら、新しいアンビエンスは着信音量とかを含めて設定できるワケね。つまりここから、上の画面では「Silent」のアンビエンスを選択するとサイレントモードに移行できるワケだ。
まぁ、画面の色や壁紙でいまサイレントなのか通常なのか分かるっていう利点もあるかもしれない。欲を言えば、音量だけでなくてバイブレーションの設定もできるといいのになと思う。もちろん着信音設定のところで「サイレントの時のみ」と「サウンドがオンの時のみ」が選択できるんだけど、アンビエンスからコントロールできて「音だけ」「音とバイブ」「バイブだけ」「どちらもなし」の4つを切り替えられるといいなとちょっと思う。

まだまだ新UIに慣れてなくていろいろいじり回してるところだけど、今後もいじってて何か「これは!」と思う部分があったら書いていこうかなと思わなくもない←たいしてやる気なさそう(笑)

Jolla: Firmware Update 1.1.9.28 (Early access release)

さてさて、ついに"SailfishOS 2.0"が来たね。

Early Access向けのアップデート「1.1.9.28」がリリースされた。
[release notes] 1.1.9/Eineheminlampi [early access]

バージョン番号的には1.1.9という事なんだけど、基本的には"SailfishOS 2.0"という事でリリースされてる。

Sailfish OS 2.0 now available for early access users!

一部まだちゃんと実装されていないものがあるっぽいので、その辺を揃えて次のアップデートで"2.0.0"になるらしい。
ってことはJolla Tabletも次のアップデート後のリリースになるのかなぁ?
Jolla Phoneでみんな慣れちゃってるから先に出荷しちゃえばいいのに(ぉぃ

アップデートが完了するとまずチュートリアルが走る。
おっさんお手が写り混んでるのを気にしてはいけない。

SailfishOSのホーム画面はとにかく縦スワイプ中心の特徴的なUIだったワケなんだけど、今回はこの辺りが一新されてる。
旧UIでは上から縦に「ロック/ホーム画面」「タスクリスト」「アプリランチャー」の3つの画面が並んでいて、縦フリックでこれを切り替えて使い、通知画面は画面下端からのスワイプで呼び出してた。

まず新しいロック画面
今までは画面が縦に並んでいたので縦にフリックしてた(よね?)けど、今回からは横スワイプでロックを解除する。この辺はある意味他のモバイルOSと同じ感覚になったのかな?

ロック画面を解除するとホーム画面が現れる。
ホーム画面には起動してるアプリの一覧が表示される。つまりタスクリストの画面がホームに来ている。以前は上下をホームとアプリランチャに挟まれていたからタスクリストを9個までしか表示できなかったけど、その制約がなくなってこの画面は縦に伸びることができるようになっている。

で、これを左右にスワイプすると、通知画面が出てくる。
旧UIの通知画面は画面下端からのスワイプで出すようになってたけど、今回からはホームの横に常に配置されているような感じ。

考えてみれば、ちょっとNokia N9に近い。あれはランチャー、通知、タスクリストの3画面を横に配置していたんだけど、今回新UIが違うのは、アプリランチャーを画面下端からのスワイプに割り当てているところだ。
上の通りホーム画面で画面下端から上方向にスワイプすると
アプリランチャが現れる。
ちなみに旧UIはタスクリストの画面の下に4つのアプリが表示されていたけど、原則アレは廃止されてる。ただ、タスクリストの画面のなにもないところをタップすると一瞬現れる(アプリランチャの一列目だけがチラ見できる感じ)ので、アプリランチャの一番上の列には電話などよく使うアプリを配置しておくといい。

このアプリランチャはホーム画面からだけでなく、通知画面やアプリを起動した状態からでも同じ方法で呼び出すことができる。何かアプリを使っていて他のことをしたくなった時、今までなら「スワイプしてバックグランドに下げる」「アプリランチャを開く」「アプリを選ぶ」の3ステップだったけど、最初の2ステップが一つになる。「やっぱりやめた」ってなった時も、タスクリストからアプリを選び直すのではなく、単にアプリランチャを引っ込めればいい。この辺はうまいんじゃないかしら?
あ、アプリランチャを引っ込める時は、下スワイプで下げられる。

ま、多分実際にいじってみないと分かり辛いとは思うんだけど、今までのUIと比べるとかなりいいんじゃないかと思うし、N9ともまた少し違っていて、うまく独自の発展をしたんじゃないかなと思う。ま、偉そうに言える程なにか知ってるワケじゃないけどww


その他にも沢山変更点はあって、正直紹介しきれないのでそこはリリースノートを見てほしい(ぉぃ)。
未実装の部分や(Early Accessなので当然かもだけど)問題点も残っているようだけど、これを見る限り正式な2.0(Ver. 2.0.0)のリリースが、そしてなによりJolla Tabletのリリースが楽しみに思える。

とゆーわけで、Jollaがんばれ!!←またそれか!

2015/08/27

Jolla: Firmware Update 1.1.7.28 (Quick Fix)

1.1.7系3度目のアプデ。
[release notes] 1.1.7 / Björnträsket

標準ブラウザでのYoutubeの再生に絡む問題と、アップグレード中もログを記録する機能の追加、MER #1208のバグフィックスということらしい。

こんなに細かくアップデートが来たこと、今までなかったよね?
まぁ、2.0リリース前のステップ的なところがあるのかもだけど。。。

こーゆー細かい手当てもうれしいけど、はやく2.0出ないかなー。。。

2015/08/21

Jolla: Firmware Update 1.1.7.27 (Quick Fix)

1.1.7系2度目のアプデ。
[release notes] 1.1.7 / Björnträsket

GPS有効の状態でHotSpotをOnにするとリブートしちゃう件と、設定アプリでトップ画面にショートカット作った時のアイコンのスケーリングがおかしい件(?)が修正されたそうな。
どっちも全然気が付いてなかった。。。

2.0.0のリリースはいつごろになるんだろう?
Jolla TabletのPre-Orderも開始されたし、そろそろかなー。。。

2015/07/28

Jolla: Firmware Update 1.1.7.25 (Quick Fix)

アプデ到来。

[release notes] 1.1.7 / Björnträsket

Quick Fix的な奴で、一部言われていた「(ストアから)パッケージがうまくインストールできない」とか「正常にアプリのアップデートができない」とかいう問題を解決したらしい。

個人的にはあんま被害にはあってないけど、Fixされてなにより。

2015/07/16

Jolla: Firmware Update 1.1.7.24 (Eary access release)

1.1.6のリリースから約1か月で1.1.7がリリースされた。

[release notes] 1.1.7 / Björnträsket

今おいらはカリフォルニア州に居るワケだかが、ホテルのWiFiを使ってまでわざわざ出先でアップデートを敢行したのであった。

主な変更点はハイライトを見る限り
  • GCC 4.8ベースのTool Chainへの移行?
  • Alien Dalvik周りの改善(Androidアプリのバックグラウンドでの実行とかがimplementされたので、常駐アプリ(特にメッセージ回りとかの使い勝手が向上したっぽい。
  • SSL証明書のハンドリングの向上
  • PulseAudioのアップデートでBuletoothヘッドフォン回りの品質が向上
  • BluetoothキーボードのレイアウトをJolla側から選択できるようになった。 
みたいなところなんだろーか。

ほかにもSIP周りやらなにやら期待してるアップデートがあるんだけど、まだ来てないっぽいけど、MWCで2.0の話がされてるっぽいし、もうそろそろ2.0がくるのかしらねぇ?

まぁ、リリースの間隔が1か月しかないので、「このあいだ1.1.6のリソースの和訳終わらせたばっかなのに」とかちょこっと思ったけど、どんどんブラッシュアップされるのはいいことなのでJollaがんばれ!(ぉ

2015/07/07

Jolla: TOHKBDが来た!

2014年11月にプロジェクトをスタートして1ヶ月で目標額の3倍を達成した"The Other Keyboard for Jolla"。


パーツ(キーパッド)がなかなか届かないとか紆余曲折あって出荷が遅れ、作る側も買った側もジリジリしてたんだけど、ついにBacker向けの現品を受け取る事ができた!
7/4ぐらいから徐々に周りで「来た!!」って声を聞いてたワケだけど、おいらは会社宛にしていたため週末の間には受け取れず「ぐぬぬぬ!!」ってな状態で、週明け月曜日にようやく受け取れた次第。

仕事の合間を縫って開封確認!
本体側(バッテリカバーになってる方)に付いてる基盤はネジ等での固定はされてなくて、カバー側に基盤がピッタリ収まるくぼみがあってそこに押し込んで固定する感じ。
受け取った時には外れてたんで「あれ?ねじ止め忘れられた??」とか思ったんだけど、構造みてピンときて押し込んだらそのまま固定されたので納得。

基盤上には、Jolla本体側の端子と接続する電極部が6つと、右上にNFCチップが見える。基本的に(純正のTOHと同じく)このチップを読み取って自動的に専用のアンビエンス及びキーボード用のアプリがインストールされる。

4か所にある丸いのがかなり強い磁石。
写真の方向で言うとキーボード収納時は右の上下2つで、キーボードを出した時には左の上下2つでキーボードをホールドする感じ。まぁ当然キーボード側にもマグネットが入ってる。

これは別の言い方をすると、キーボードはヒンジやレールで固定されているワケではないので、状況に応じて簡単に取り外して使ったりすることができる。写真では左側へスライドする形になってるけど、お好みで上下逆に取り付ければ右へスライドして出すようにもできる。

ちなみにこの部分のマグネットは、キーボードを開いた状態でキーボードだけを支持しても本体が落ちない程度に協力なので、スチール製の机とか冷蔵庫のドアとかに近づけるとくっつく(会社の机の上に置いとくと持ち上げる時に「あれ?」ってなる)。
多分、磁気式の会員カードとかキャッシュカード、クレジットカード辺りは、TOHKBDを付けたJollaと一緒に鞄とかポケットに突っ込むのは避けた方がいいと思う。

カバーとキーボードとの接続部分はこんな感じ。
キーパッドの上側(写真では右側)に電極があって、スライドして開くとカバーの方の電極とコンタクトするようにできてる。上にも書いた通り、左スライドにも右スライドにも対応できるよう、カバー側は左右両方に電極が付いてる。

構造上、スライドさせるとこんな風に傷が残る。。。
まぁ、これはしかたがない。

さて取り付けてみる。
NFCチップを検出して必要なものがインストールされる。
キーボード用のアプリだけじゃなく、アンビエンスも増える。左が標準で付いてくる白のTOH用の"Snow White"、右が(インストール中の写真だけど)TOHKBD用のアンビエンス。
TOHKBD"2"になってるのは、Kickstarterで募集したのが2nd Generationだから。初代はプロトタイプとして少数製造/販売された。

全部インストールが終わると、キーボードが使えるようになる。
上で見た通り、キーボードを出した時だけキーボードと本体がコネクションする構造なので、出したり戻したりする度に「接続されました」「切断されました」みたいなメッセージが出る(上のトースト通知ね)。

キー入力のレスポンスは悪くないけど、キーパッドそのものは「まぁ頑張ったかな」って感じ。でも数字が独立した5列キーだし、なかなか悪くないと思うんだ。
あと、まだキーボードを使った日本語入力はできない。今のところフリック入力ができないJollaなので、このキーボードで日本語入力できるとかなり強力だと思うんだけど。。。
そこは誰かに期待しよう(ぉぃ

さて、以前Funcky Other HalfからQiアンテナ付きのTOHを買った時は、本体との嵌合はお世辞にもいいとは言えなかったんだけど、今回The First Oneへの取り付け具合はかなり良いと思う。まぁ、本体のi2cとか電源とかの端子との接続を考えると、ここはキッチリハマるようにしとかないとって感じなんだとは思うけど。。。
ただ、キーボード側は(それなりに薄くしてることもあってだと思うけど)やや歪みがある。なので、磁石で固定してる側はぴったりくっついてるけど、キーパッド側はやや浮いてる感じがある。もちろん、この辺は個体差があるんだと思うけど。

磁石側
キーパッド側
上から見た感じ
歪みを矯正できるとよさそうだけど、壊したらイヤだしまぁ無理して矯正しなきゃいけないほど困ってるわけじゃないからとりあえず放置。

さてさて、今度はソフトウェア側。
まずはアンビエント。
なかなかいい壁紙(笑)
TOHKBD自体はカバー、キーボード、天板の色を選べるようになってたんだけど、アンビエントは特にどれかの色に合わせてあるようには見えない。手元の奴はカバーが黒、キーボードが赤、天板が黒という組み合わせなんだけど、アンビエントはダーク系のバックに黄緑っぽいフロントになってる。

次にキーボード用のアプリ。
左下のTOHKBD Settingsっていうアイコンがこのキーボード用のアプリ。
@kenya888さんが既にアプリ用の和訳リソースを提供してくれているので、アプリが日本語で使える非常にありがたい。

「ショートカット」はF1~F12で起動するアプリを割り当てられる。
「一般」が基本的な挙動を設定する画面になる。
写真には撮ってないけど、すばらしいことにこのキーボードにはバックライトが入っていて、暗い場所でもキートップが確認できるようになってる。「常にオン」をチェックすると、画面を表示した状態でキーボードをスライドした時必ずバックライトがオンになる(同時に「自動」がグレーアウトする)。

「自動」を選択すると「明るさのしきい値」以下の明るさになるとバックライトがオンになり、何も押さないと「たいむあうと」の時間でバックライトが切れる。

「常にオン」も「自動」も選択しなければ、基本的にバックライトは動作しない。

「強制ランドスケープ」をチェックすると、キーボードをスライドした時は「画面の向き」の設定内容に関係なく強制的にランドスケープモードになる。ただし、Jollaのホーム画面はそもそもランドスケープに対応してないし、アプリ系もランドスケープに対応してる奴は結構少ないから、ちょっと挙動が分かりにくいかも(笑)

その下に「リピート」の設定があり、キーを押し続けた場合「遅延」の時間だけ待った後に「レート」の間隔でキー入力がリピートされる。

最後にシフトキーやコントロールキー、ファンクションキーの挙動が設定できる。要は普通のPCのようにこれらのキーを「押しながら操作する」か、バーチャルキーボードみたいに「一度押した後操作するか」の切り替えができる。

まぁ、だいたいこんな感じかな。

とりあえず入力周りの夢が広がるTOHKBD、なかなか良い。
そもそもqwerty端末が絶滅寸前の世の中で、こんな形でqwerty化できるTOHの仕組みもすばらしい。

Developer ModeをインストールしてればTerminalアプリが入ってると思うんだけど、設定でVKB behaviorをOFFにしてあげればPC間隔でターミナルが使用できる。ちょっとしたリモート端末としても使えてなかなか良い。

後はやっぱりコレで日本語入力できたらいいなぁと思う今日このごろ。
誰か作ってくれないかなー (チラチラ